mirror of
https://github.com/stevenhowes/CTheEscape.git
synced 2026-05-27 00:03:27 +01:00
compile.php compiles m2_txt into m2_evt and m2_evact. Mission2 updated to load binaries.
This commit is contained in:
Binary file not shown.
+68
-75
@@ -97,91 +97,83 @@ struct Event_s {
|
|||||||
};
|
};
|
||||||
struct Event_s Events[MAXEVENTS];
|
struct Event_s Events[MAXEVENTS];
|
||||||
|
|
||||||
void game2_loadevents()
|
void game2_saveevents(char* filename)
|
||||||
{
|
{
|
||||||
int i;
|
// Attempt to get file info
|
||||||
for(i = 0; i<MAXEVENTS; i++)
|
inreg.r[0] = 10;
|
||||||
|
inreg.r[1] = (int) filename;
|
||||||
|
inreg.r[2] = 0xffd;
|
||||||
|
inreg.r[4] = (int) Events;
|
||||||
|
inreg.r[5] = (int) Events + (sizeof(Events));
|
||||||
|
|
||||||
|
_kernel_swi(OS_File,&inreg,&outreg);
|
||||||
|
}
|
||||||
|
void game2_saveeventactions(char* filename)
|
||||||
|
{
|
||||||
|
// Attempt to get file info
|
||||||
|
inreg.r[0] = 10;
|
||||||
|
inreg.r[1] = (int) filename;
|
||||||
|
inreg.r[2] = 0xffd;
|
||||||
|
inreg.r[4] = (int) EventActions;
|
||||||
|
inreg.r[5] = (int) EventActions + (sizeof(EventActions));
|
||||||
|
|
||||||
|
_kernel_swi(OS_File,&inreg,&outreg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void game2_loadevents(char* filename)
|
||||||
|
{
|
||||||
|
int length;
|
||||||
|
|
||||||
|
// Attempt to get file info
|
||||||
|
inreg.r[0] = 5;
|
||||||
|
inreg.r[1] = (int) filename;
|
||||||
|
_kernel_swi(OS_File,&inreg,&outreg);
|
||||||
|
|
||||||
|
// Length will be in R4 if it exists
|
||||||
|
length = outreg.r[4];
|
||||||
|
|
||||||
|
if(length > sizeof(Events))
|
||||||
{
|
{
|
||||||
// Default to Triggered with no re-arm so event never fires
|
screen_nobuffer();
|
||||||
sprintf(Events[i].Name,"INVALID");
|
while (1)
|
||||||
Events[i].Triggered = 1;
|
printf("Events exceeds %d bytes (%d bytes) object type is %d\n",sizeof(Events),length,outreg.r[0]);
|
||||||
Events[i].RearmDelay = -1;
|
|
||||||
Events[i].NextRearm = -1;
|
|
||||||
}
|
|
||||||
for(i = 0; i<MAXEVENTACTIONS; i++)
|
|
||||||
{
|
|
||||||
EventActions[i].Event = -1;
|
|
||||||
EventActions[i].Action = -1;
|
|
||||||
EventActions[i].ActionValue = -1;
|
|
||||||
EventActions[i].ActionTarget = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
i=0;
|
// Attempt to get file info
|
||||||
|
inreg.r[0] = 16;
|
||||||
|
inreg.r[1] = (int) filename;
|
||||||
|
inreg.r[2] = (int) Events;
|
||||||
|
inreg.r[3] = 0;
|
||||||
|
|
||||||
sprintf(Events[i].Name,"PlayerStart");
|
_kernel_swi(OS_File,&inreg,&outreg);
|
||||||
Events[i].Triggered = 0;
|
}
|
||||||
Events[i].RearmDelay = -1;
|
|
||||||
Events[i].NextRearm = -1;
|
|
||||||
i++;
|
|
||||||
|
|
||||||
sprintf(Events[i].Name,"SBBR-DOOROPEN");
|
void game2_loadeventactionss(char* filename)
|
||||||
Events[i].Triggered = 0;
|
{
|
||||||
Events[i].RearmDelay = -1;
|
int length;
|
||||||
Events[i].NextRearm = -1;
|
|
||||||
i++;
|
|
||||||
|
|
||||||
sprintf(Events[i].Name,"SBBR-DOORCLOSE");
|
// Attempt to get file info
|
||||||
Events[i].Triggered = 1;
|
inreg.r[0] = 5;
|
||||||
Events[i].RearmDelay = -1;
|
inreg.r[1] = (int) filename;
|
||||||
Events[i].NextRearm = -1;
|
_kernel_swi(OS_File,&inreg,&outreg);
|
||||||
i++;
|
|
||||||
|
|
||||||
i=0;
|
// Length will be in R4 if it exists
|
||||||
|
length = outreg.r[4];
|
||||||
|
|
||||||
// PlayerStart
|
if(length > sizeof(EventActions))
|
||||||
EventActions[i].Event = 0;
|
{
|
||||||
EventActions[i].Action = 1;
|
screen_nobuffer();
|
||||||
EventActions[i].ActionValue = 1;
|
while (1)
|
||||||
EventActions[i].ActionTarget = -1;
|
printf("EventActions exceeds %d bytes (%d bytes) object type is %d\n",sizeof(EventActions),length,outreg.r[0]);
|
||||||
i++;
|
}
|
||||||
EventActions[i].Event = 0;
|
|
||||||
EventActions[i].Action = 2;
|
|
||||||
EventActions[i].ActionValue = PCMSAMPLE_HAIL;
|
|
||||||
EventActions[i].ActionTarget = PCMCHANNEL_AMBIENT;
|
|
||||||
i++;
|
|
||||||
|
|
||||||
// SBBR-DOOROPEN
|
// Attempt to get file info
|
||||||
EventActions[i].Event = 1;
|
inreg.r[0] = 16;
|
||||||
EventActions[i].Action = 0;
|
inreg.r[1] = (int) filename;
|
||||||
EventActions[i].ActionValue = 31;
|
inreg.r[2] = (int) EventActions;
|
||||||
EventActions[i].ActionTarget = 713;
|
inreg.r[3] = 0;
|
||||||
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++;
|
|
||||||
|
|
||||||
|
_kernel_swi(OS_File,&inreg,&outreg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void game2_loadsmarttiles(char* filename)
|
void game2_loadsmarttiles(char* filename)
|
||||||
@@ -382,7 +374,8 @@ void game2_setup()
|
|||||||
game2_loadsmarttiles("m2_smart");
|
game2_loadsmarttiles("m2_smart");
|
||||||
game2_loadareanames("m2_areas");
|
game2_loadareanames("m2_areas");
|
||||||
game2_setup_audio();
|
game2_setup_audio();
|
||||||
game2_loadevents();
|
game2_loadevents("m2_evt");
|
||||||
|
game2_loadeventactionss("m2_evact");
|
||||||
game2_fillmap(TilePlayer.mapoffset.X,TilePlayer.mapoffset.Y);
|
game2_fillmap(TilePlayer.mapoffset.X,TilePlayer.mapoffset.Y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,204 @@
|
|||||||
|
<?php
|
||||||
|
$script = file_get_contents("m2_txt");
|
||||||
|
|
||||||
|
$inevent = -1;
|
||||||
|
|
||||||
|
$events = array();
|
||||||
|
$eventactions = array();
|
||||||
|
|
||||||
|
foreach(preg_split("/((\r?\n)|(\r\n?))/", $script) as $line)
|
||||||
|
{
|
||||||
|
$line = trim($line);
|
||||||
|
|
||||||
|
if(strlen($line) == 0)
|
||||||
|
{
|
||||||
|
$inevent = -1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
$split = preg_split("/\(|\)/",$line);
|
||||||
|
|
||||||
|
if(count($split) != 3)
|
||||||
|
{
|
||||||
|
echo " Syntax error: " . $line . "\n";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ($split[0])
|
||||||
|
{
|
||||||
|
case "AddEvent":
|
||||||
|
$csv = str_getcsv($split[1]);
|
||||||
|
$events[$csv[0]] = array("Name"=>$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);
|
||||||
|
?>
|
||||||
Binary file not shown.
Binary file not shown.
@@ -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")
|
||||||
Reference in New Issue
Block a user