diff --git a/!TheEsc/!RunImage,ff8 b/!TheEsc/!RunImage,ff8 index 58d40d3..bdf357c 100644 Binary files a/!TheEsc/!RunImage,ff8 and b/!TheEsc/!RunImage,ff8 differ diff --git a/!TheEsc/c/Mission2 b/!TheEsc/c/Mission2 index a0ec12b..f399356 100644 --- a/!TheEsc/c/Mission2 +++ b/!TheEsc/c/Mission2 @@ -97,91 +97,83 @@ struct Event_s { }; struct Event_s Events[MAXEVENTS]; -void game2_loadevents() +void game2_saveevents(char* filename) { - int i; - for(i = 0; i sizeof(Events)) { - // Default to Triggered with no re-arm so event never fires - sprintf(Events[i].Name,"INVALID"); - Events[i].Triggered = 1; - Events[i].RearmDelay = -1; - Events[i].NextRearm = -1; - } - for(i = 0; i sizeof(EventActions)) + { + screen_nobuffer(); + while (1) + printf("EventActions exceeds %d bytes (%d bytes) object type is %d\n",sizeof(EventActions),length,outreg.r[0]); + } - // SBBR-DOOROPEN - EventActions[i].Event = 1; - EventActions[i].Action = 0; - EventActions[i].ActionValue = 31; - EventActions[i].ActionTarget = 713; - i++; - EventActions[i].Event = 1; - EventActions[i].Action = 2; - EventActions[i].ActionValue = PCMSAMPLE_DOOR; - EventActions[i].ActionTarget = PCMCHANNEL_AMBIENT; - i++; - EventActions[i].Event = 1; - EventActions[i].Action = 3; - EventActions[i].ActionTarget = 2; - i++; - - // SBBR-DOORCLOSE - EventActions[i].Event = 2; - EventActions[i].Action = 0; - EventActions[i].ActionValue = 29; - EventActions[i].ActionTarget = 713; - i++; - EventActions[i].Event = 2; - EventActions[i].Action = 2; - EventActions[i].ActionValue = PCMSAMPLE_DOOR; - EventActions[i].ActionTarget = PCMCHANNEL_AMBIENT; - i++; - EventActions[i].Event = 2; - EventActions[i].Action = 3; - EventActions[i].ActionTarget = 1; - i++; + // Attempt to get file info + inreg.r[0] = 16; + inreg.r[1] = (int) filename; + inreg.r[2] = (int) EventActions; + inreg.r[3] = 0; + _kernel_swi(OS_File,&inreg,&outreg); } void game2_loadsmarttiles(char* filename) @@ -382,7 +374,8 @@ void game2_setup() game2_loadsmarttiles("m2_smart"); game2_loadareanames("m2_areas"); game2_setup_audio(); - game2_loadevents(); + game2_loadevents("m2_evt"); + game2_loadeventactionss("m2_evact"); game2_fillmap(TilePlayer.mapoffset.X,TilePlayer.mapoffset.Y); } diff --git a/!TheEsc/compile.php b/!TheEsc/compile.php new file mode 100644 index 0000000..c26c89e --- /dev/null +++ b/!TheEsc/compile.php @@ -0,0 +1,204 @@ +$csv[1],"Triggered"=>$csv[2],"RearmDelay"=>$csv[3],"NextRearm"=>$csv[4]); + break; + case "Event": + $csv = str_getcsv($split[1]); + $inevent = -1; + foreach($events as $eventid=>$event) + { + if($event['Name'] == $csv[0]) + $inevent = $eventid; + } + if($inevent < 0) + echo " Unknown event: " . $csv[0] . "\n"; + break; + case "AreaName": + if($inevent < 0) + { + echo " Invalid outside event\n"; + } + else + { + $csv = str_getcsv($split[1]); + $eventactions[] = array("Event"=>$inevent,"Action"=>1,"ActionValue"=>$csv[0],"ActionTarget"=>-1); + } + break; + case "Sound": + if($inevent < 0) + { + echo " Invalid outside event\n"; + } + else + { + $csv = str_getcsv($split[1]); + $eventactions[] = array("Event"=>$inevent,"Action"=>2,"ActionValue"=>$csv[1],"ActionTarget"=>$csv[0]); + } + break; + case "SetTile": + if($inevent < 0) + { + echo " Invalid outside event\n"; + } + else + { + $csv = str_getcsv($split[1]); + $eventactions[] = array("Event"=>$inevent,"Action"=>0,"ActionValue"=>$csv[1],"ActionTarget"=>$csv[0]); + } + break; + case "ReArm": + if($inevent < 0) + { + echo " Invalid outside event\n"; + } + else + { + $csv = str_getcsv($split[1]); + + $target = -1; + foreach($events as $eventid=>$event) + { + if($event['Name'] == $csv[0]) + $target = $eventid; + } + + if($target < 0) + echo " Unknown target: " . $csv[0] . "\n"; + else + $eventactions[] = array("Event"=>$inevent,"Action"=>3,"ActionValue"=>255,"ActionTarget"=>$target); + } + break; + default: + echo " Unknown command: " . $split[0] . "\n"; + } + } + + $fp = fopen('m2_evt,ffd', 'w'); + foreach($events as $event) + { + fwrite($fp, $event['Name']); + $pad = 16 - strlen($event['Name']); + while($pad > 0) + { + $pad --; + fwrite($fp, "\0"); + } + + if($event['Triggered'] == 1) + fwrite($fp, "\1"); + else + fwrite($fp, "\0"); + $pad = 3; + while($pad > 0) + { + $pad --; + fwrite($fp, "\0"); + } + + // TODO: ReArm stuff + $pad = 8; + while($pad > 0) + { + $pad --; + fwrite($fp, chr(255)); + } + } + + $blanks = 200 - count($events); + while($blanks > 0) + { + $blanks --; + fwrite($fp, "INVALID"); + + fwrite($fp, chr(0)); + fwrite($fp, chr(0)); + fwrite($fp, chr(0)); + fwrite($fp, chr(0)); + fwrite($fp, chr(0)); + + fwrite($fp, chr(0)); + fwrite($fp, chr(0)); + fwrite($fp, chr(0)); + fwrite($fp, chr(0)); + + fwrite($fp, chr(1)); + fwrite($fp, chr(0)); + fwrite($fp, chr(0)); + fwrite($fp, chr(0)); + + fwrite($fp, chr(255)); + fwrite($fp, chr(255)); + fwrite($fp, chr(255)); + fwrite($fp, chr(255)); + + fwrite($fp, chr(255)); + fwrite($fp, chr(255)); + fwrite($fp, chr(255)); + fwrite($fp, chr(255)); + } + fclose($fp); + + $fp = fopen('m2_evact,ffd', 'w'); + foreach($eventactions as $eventaction) + { + fwrite($fp, pack('V', $eventaction['Event'])); // Event + + fwrite($fp, chr($eventaction['Action'])); // Action + fwrite($fp, chr($eventaction['ActionValue'])); // ActionValue + + fwrite($fp, chr(0)); // PAD + fwrite($fp, chr(0)); // PAD + + fwrite($fp, pack('V', $eventaction['ActionTarget'])); // Event + } + + $blanks = 1000 - count($eventactions); + while($blanks > 0) + { + $blanks --; + fwrite($fp, chr(255)); // Event + fwrite($fp, chr(255)); + fwrite($fp, chr(255)); + fwrite($fp, chr(255)); + + fwrite($fp, chr(255)); // Action + fwrite($fp, chr(255)); // ActionValue + + fwrite($fp, chr(0)); // PAD + fwrite($fp, chr(0)); // PAD + + fwrite($fp, chr(255)); // ActionTarget + fwrite($fp, chr(255)); + fwrite($fp, chr(255)); + fwrite($fp, chr(255)); + } + fclose($fp); +?> \ No newline at end of file diff --git a/!TheEsc/m2_evact,ffd b/!TheEsc/m2_evact,ffd new file mode 100644 index 0000000..5746e1f Binary files /dev/null and b/!TheEsc/m2_evact,ffd differ diff --git a/!TheEsc/m2_evt,ffd b/!TheEsc/m2_evt,ffd new file mode 100644 index 0000000..01a70a3 Binary files /dev/null and b/!TheEsc/m2_evt,ffd differ diff --git a/!TheEsc/m2_txt b/!TheEsc/m2_txt new file mode 100644 index 0000000..20f43fb --- /dev/null +++ b/!TheEsc/m2_txt @@ -0,0 +1,17 @@ +AddEvent(0,"PlayerStart",0,-1,-1) +AddEvent(1,"SBBR-DOOROPEN",0,-1,-1) +AddEvent(2,"SBBR-DOORCLOSE",1,-1,-1) + +Event("PlayerStart") + AreaName(1) + Sound(8,4) + +Event("SBBR-DOOROPEN") + SetTile(713,31) + Sound(8,5) + ReArm("SBBR-DOORCLOSE") + +Event("SBBR-DOORCLOSE") + SetTile(713,29) + Sound(8,5) + ReArm("SBBR-DOOROPEN")