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];
void game2_loadevents()
void game2_saveevents(char* filename)
{
int i;
for(i = 0; i<MAXEVENTS; i++)
// Attempt to get file info
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
sprintf(Events[i].Name,"INVALID");
Events[i].Triggered = 1;
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;
screen_nobuffer();
while (1)
printf("Events exceeds %d bytes (%d bytes) object type is %d\n",sizeof(Events),length,outreg.r[0]);
}
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");
Events[i].Triggered = 0;
Events[i].RearmDelay = -1;
Events[i].NextRearm = -1;
i++;
_kernel_swi(OS_File,&inreg,&outreg);
}
sprintf(Events[i].Name,"SBBR-DOOROPEN");
Events[i].Triggered = 0;
Events[i].RearmDelay = -1;
Events[i].NextRearm = -1;
i++;
void game2_loadeventactionss(char* filename)
{
int length;
sprintf(Events[i].Name,"SBBR-DOORCLOSE");
Events[i].Triggered = 1;
Events[i].RearmDelay = -1;
Events[i].NextRearm = -1;
i++;
// Attempt to get file info
inreg.r[0] = 5;
inreg.r[1] = (int) filename;
_kernel_swi(OS_File,&inreg,&outreg);
i=0;
// Length will be in R4 if it exists
length = outreg.r[4];
// PlayerStart
EventActions[i].Event = 0;
EventActions[i].Action = 1;
EventActions[i].ActionValue = 1;
EventActions[i].ActionTarget = -1;
i++;
EventActions[i].Event = 0;
EventActions[i].Action = 2;
EventActions[i].ActionValue = PCMSAMPLE_HAIL;
EventActions[i].ActionTarget = PCMCHANNEL_AMBIENT;
i++;
if(length > 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);
}
+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")