compile.php compiles m2_txt into m2_evt and m2_evact. Mission2 updated to load binaries.

This commit is contained in:
stevenhowes
2021-05-29 23:13:58 +01:00
parent c57e5ec38e
commit 8360b46e5f
6 changed files with 289 additions and 75 deletions
Binary file not shown.
+68 -75
View File
@@ -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);
} }
+204
View File
@@ -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.
+17
View File
@@ -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")