@@ -1003,7 +1003,7 @@ impl LanguageHooks for OldeEclHooks {
10031003 Game :: Th06 => enum_map:: enum_map!{
10041004 ScalarType :: Int => vec![
10051005 R ( -10001 ) , R ( -10002 ) , R ( -10003 ) , R ( -10004 ) , // I0-I3
1006- R ( -10009 ) , R ( -10010 ) , R ( -10011 ) , R ( -10012 ) , // I4-I7
1006+ R ( -10009 ) , R ( -10010 ) , R ( -10011 ) , R ( -10012 ) , // IC0-IC3
10071007 ] ,
10081008 ScalarType :: Float => vec![
10091009 R ( -10005 ) , R ( -10006 ) , R ( -10007 ) , R ( -10008 ) , // F0-F3
@@ -1013,23 +1013,44 @@ impl LanguageHooks for OldeEclHooks {
10131013 Game :: Th07 => enum_map:: enum_map!{
10141014 ScalarType :: Int => vec![
10151015 R ( 10000 ) , R ( 10001 ) , R ( 10002 ) , R ( 10003 ) , // I0-I3
1016- R ( 10012 ) , R ( 10013 ) , R ( 10014 ) , R ( 10015 ) , // I4-I7
1016+ R ( 10012 ) , R ( 10013 ) , R ( 10014 ) , R ( 10015 ) , // IC0-IC3
1017+ //R(10029), R(10030), R(10031), R(10032), // PARAM_A-PARAM_D
10171018 ] ,
10181019 ScalarType :: Float => vec![
10191020 R ( 10004 ) , R ( 10005 ) , R ( 10006 ) , R ( 10007 ) , // F0-F3
10201021 R ( 10008 ) , R ( 10009 ) , R ( 10010 ) , R ( 10011 ) , // F4-F7
10211022 R ( 10072 ) , R ( 10074 ) , // F8-F9
1023+ //R(10033), R(10034), R(10035), R(10036), // PARAM_R-PARAM_N
10221024 ] ,
10231025 ScalarType :: String => vec![ ] ,
10241026 } ,
1025- Game :: Th08 => enum_map:: enum_map!{
1027+ Game :: Th08 | Game :: Th09 => enum_map:: enum_map!{
10261028 ScalarType :: Int => vec![
1027- R ( 10000 ) , R ( 10001 ) , R ( 10002 ) , R ( 10003 ) ,
1028- R ( 10012 ) , R ( 10013 ) , R ( 10014 ) , R ( 10015 ) ,
1029+ R ( 10000 ) , R ( 10001 ) , R ( 10002 ) , R ( 10003 ) , // I0-I3
1030+ R ( 10004 ) , R ( 10005 ) , R ( 10006 ) , R ( 10007 ) , // I4-I7
1031+ R ( 10036 ) , R ( 10037 ) , R ( 10038 ) , R ( 10039 ) , // IC0-IC3
1032+ //R(10053), R(10054), R(10055), R(10056), // PARAM_A-PARAM_D
10291033 ] ,
10301034 ScalarType :: Float => vec![
1031- R ( 10004 ) , R ( 10005 ) , R ( 10006 ) , R ( 10007 ) ,
1032- R ( 10008 ) , R ( 10009 ) , R ( 10010 ) , R ( 10011 ) ,
1035+ R ( 10016 ) , R ( 10017 ) , R ( 10018 ) , R ( 10019 ) , // F0-F3
1036+ R ( 10020 ) , R ( 10021 ) , R ( 10022 ) , R ( 10023 ) , // F4-F7
1037+ R ( 10094 ) , R ( 10095 ) , // F8-F9
1038+ //R(10057), R(10058), R(10059), R(10060), // PARAM_R-PARAM_N
1039+ ] ,
1040+ ScalarType :: String => vec![ ] ,
1041+ } ,
1042+ Game :: Th095 => enum_map:: enum_map!{
1043+ ScalarType :: Int => vec![
1044+ R ( 10000 ) , R ( 10001 ) , R ( 10002 ) , R ( 10003 ) , // I0-I3
1045+ R ( 10004 ) , R ( 10005 ) , R ( 10006 ) , R ( 10007 ) , // I4-I7
1046+ R ( 10020 ) , R ( 10021 ) , R ( 10022 ) , R ( 10023 ) , // IC0-IC3
1047+ //R(10036), R(10037), R(10038), R(10039), // PARAM_A-PARAM_D
1048+ ] ,
1049+ ScalarType :: Float => vec![
1050+ R ( 10008 ) , R ( 10009 ) , R ( 10010 ) , R ( 10011 ) , // F0-F3
1051+ R ( 10012 ) , R ( 10013 ) , R ( 10014 ) , R ( 10015 ) , // F4-F7
1052+ R ( 10077 ) , R ( 10078 ) , R ( 10079 ) , R ( 10080 ) , // F8-F11
1053+ //R(10040), R(10041), R(10042), R(10043), // PARAM_R-PARAM_N
10331054 ] ,
10341055 ScalarType :: String => vec![ ] ,
10351056 } ,
@@ -1076,7 +1097,7 @@ impl InstrFormat for OldeEclHooks {
10761097 fn read_instr ( & self , f : & mut BinReader , emitter : & dyn Emitter ) -> ReadResult < ReadInstr > {
10771098 let time = f. read_i32 ( ) ?;
10781099 let opcode = f. read_u16 ( ) ?;
1079- let size = f. read_u16 ( ) ? as usize ;
1100+ let size = f. read_i16 ( ) ? as usize ;
10801101 let before_difficulty = f. read_u8 ( ) ?; // according to zero, not referenced in any game
10811102 let difficulty = f. read_u8 ( ) ?;
10821103 let param_mask = f. read_u16 ( ) ?;
@@ -1110,7 +1131,7 @@ impl InstrFormat for OldeEclHooks {
11101131 fn write_instr ( & self , f : & mut BinWriter , _: & dyn Emitter , instr : & RawInstr ) -> WriteResult {
11111132 f. write_i32 ( instr. time ) ?;
11121133 f. write_u16 ( instr. opcode ) ?;
1113- f. write_u16 ( self . instr_size ( instr) as _ ) ?;
1134+ f. write_i16 ( self . instr_size ( instr) as _ ) ?;
11141135
11151136 f. write_u8 ( 0 ) ?;
11161137 f. write_u8 ( instr. difficulty ) ?;
@@ -1126,7 +1147,7 @@ impl InstrFormat for OldeEclHooks {
11261147 fn write_terminal_instr ( & self , f : & mut BinWriter , _: & dyn Emitter ) -> WriteResult {
11271148 f. write_i32 ( -1 ) ?; // time
11281149 f. write_i16 ( -1 ) ?; // opcode
1129- f. write_u16 ( self . instr_header_size ( ) as _ ) ?; // size
1150+ f. write_i16 ( self . instr_header_size ( ) as _ ) ?; // size
11301151 f. write_u16 ( 0xff00 ) ?; // difficulty
11311152 f. write_u16 ( 0x00ff ) ?; // param_mask
11321153 Ok ( ( ) )
@@ -1162,7 +1183,7 @@ impl InstrFormat for TimelineFormat06 {
11621183 }
11631184
11641185 let opcode = f. read_u16 ( ) ?;
1165- let size = f. read_u16 ( ) ? as usize ;
1186+ let size = f. read_i16 ( ) ? as usize ;
11661187
11671188 let args_size = size. checked_sub ( self . instr_header_size ( ) ) . ok_or_else ( || {
11681189 emitter. as_sized ( ) . emit ( error ! ( "bad instruction size ({} < {})" , size, self . instr_header_size( ) ) )
0 commit comments