shithub: choc

Download patch

ref: 8022c5cc09ecec5623449a2040672c1e331ac75e
parent: a3abf64a05dee1b6203538deed39753002e910ea
author: Simon Howard <fraggle@gmail.com>
date: Fri Oct 24 13:12:18 EDT 2008

Endianness fixes for ACS code.

Subversion-branch: /branches/raven-branch
Subversion-revision: 1361

--- a/src/hexen/p_acs.c
+++ b/src/hexen/p_acs.c
@@ -26,6 +26,7 @@
 
 #include "h2def.h"
 #include "s_sound.h"
+#include "i_swap.h"
 #include "i_system.h"
 #include "p_local.h"
 
@@ -317,19 +318,29 @@
 
     header = W_CacheLumpNum(lump, PU_LEVEL);
     ActionCodeBase = (byte *) header;
-    buffer = (int *) ((byte *) header + header->infoOffset);
-    ACScriptCount = *buffer++;
+    buffer = (int *) ((byte *) header + LONG(header->infoOffset));
+
+    ACScriptCount = LONG(*buffer); 
+    ++buffer;
+
     if (ACScriptCount == 0)
     {                           // Empty behavior lump
         return;
     }
+
     ACSInfo = Z_Malloc(ACScriptCount * sizeof(acsInfo_t), PU_LEVEL, 0);
     memset(ACSInfo, 0, ACScriptCount * sizeof(acsInfo_t));
     for (i = 0, info = ACSInfo; i < ACScriptCount; i++, info++)
     {
-        info->number = *buffer++;
-        info->address = (int *) ((byte *) ActionCodeBase + *buffer++);
-        info->argCount = *buffer++;
+        info->number = LONG(*buffer);
+        ++buffer;
+
+        info->address = (int *) ((byte *) ActionCodeBase + LONG(*buffer));
+        ++buffer;
+
+        info->argCount = LONG(*buffer);
+        ++buffer;
+
         if (info->number >= OPEN_SCRIPTS_BASE)
         {                       // Auto-activate
             info->number -= OPEN_SCRIPTS_BASE;
@@ -341,12 +352,14 @@
             info->state = ASTE_INACTIVE;
         }
     }
-    ACStringCount = *buffer++;
+    ACStringCount = LONG(*buffer);
+    ++buffer;
+
     ACStrings = Z_Malloc(ACStringCount * sizeof(char *), PU_LEVEL, NULL);
 
     for (i=0; i<ACStringCount; ++i)
     {
-        ACStrings[i] = (char *) ActionCodeBase + buffer[i];
+        ACStrings[i] = (char *) ActionCodeBase + LONG(buffer[i]);
     }
 
     memset(MapVars, 0, sizeof(MapVars));
@@ -628,13 +641,17 @@
     }
     ACScript = script;
     PCodePtr = ACScript->ip;
+
     do
     {
-        cmd = *PCodePtr++;
+        cmd = LONG(*PCodePtr);
+        ++PCodePtr;
+
         action = PCodeCmds[cmd] ();
-    }
-    while (action == SCRIPT_CONTINUE);
+    } while (action == SCRIPT_CONTINUE);
+
     ACScript->ip = PCodePtr;
+
     if (action == SCRIPT_TERMINATE)
     {
         ACSInfo[script->infoIndex].state = ASTE_INACTIVE;
@@ -823,7 +840,8 @@
 
 static int CmdPushNumber(void)
 {
-    Push(*PCodePtr++);
+    Push(LONG(*PCodePtr));
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
@@ -831,7 +849,8 @@
 {
     int special;
 
-    special = *PCodePtr++;
+    special = LONG(*PCodePtr);
+    ++PCodePtr;
     SpecArgs[0] = Pop();
     P_ExecuteLineSpecial(special, SpecArgs, ACScript->line,
                          ACScript->side, ACScript->activator);
@@ -842,7 +861,8 @@
 {
     int special;
 
-    special = *PCodePtr++;
+    special = LONG(*PCodePtr);
+    ++PCodePtr;
     SpecArgs[1] = Pop();
     SpecArgs[0] = Pop();
     P_ExecuteLineSpecial(special, SpecArgs, ACScript->line,
@@ -854,7 +874,8 @@
 {
     int special;
 
-    special = *PCodePtr++;
+    special = LONG(*PCodePtr);
+    ++PCodePtr;
     SpecArgs[2] = Pop();
     SpecArgs[1] = Pop();
     SpecArgs[0] = Pop();
@@ -867,7 +888,8 @@
 {
     int special;
 
-    special = *PCodePtr++;
+    special = LONG(*PCodePtr);
+    ++PCodePtr;
     SpecArgs[3] = Pop();
     SpecArgs[2] = Pop();
     SpecArgs[1] = Pop();
@@ -881,7 +903,8 @@
 {
     int special;
 
-    special = *PCodePtr++;
+    special = LONG(*PCodePtr);
+    ++PCodePtr;
     SpecArgs[4] = Pop();
     SpecArgs[3] = Pop();
     SpecArgs[2] = Pop();
@@ -896,8 +919,10 @@
 {
     int special;
 
-    special = *PCodePtr++;
-    SpecArgs[0] = *PCodePtr++;
+    special = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[0] = LONG(*PCodePtr);
+    ++PCodePtr;
     P_ExecuteLineSpecial(special, SpecArgs, ACScript->line,
                          ACScript->side, ACScript->activator);
     return SCRIPT_CONTINUE;
@@ -907,9 +932,12 @@
 {
     int special;
 
-    special = *PCodePtr++;
-    SpecArgs[0] = *PCodePtr++;
-    SpecArgs[1] = *PCodePtr++;
+    special = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[0] = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[1] = LONG(*PCodePtr);
+    ++PCodePtr;
     P_ExecuteLineSpecial(special, SpecArgs, ACScript->line,
                          ACScript->side, ACScript->activator);
     return SCRIPT_CONTINUE;
@@ -919,10 +947,14 @@
 {
     int special;
 
-    special = *PCodePtr++;
-    SpecArgs[0] = *PCodePtr++;
-    SpecArgs[1] = *PCodePtr++;
-    SpecArgs[2] = *PCodePtr++;
+    special = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[0] = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[1] = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[2] = LONG(*PCodePtr);
+    ++PCodePtr;
     P_ExecuteLineSpecial(special, SpecArgs, ACScript->line,
                          ACScript->side, ACScript->activator);
     return SCRIPT_CONTINUE;
@@ -932,11 +964,16 @@
 {
     int special;
 
-    special = *PCodePtr++;
-    SpecArgs[0] = *PCodePtr++;
-    SpecArgs[1] = *PCodePtr++;
-    SpecArgs[2] = *PCodePtr++;
-    SpecArgs[3] = *PCodePtr++;
+    special = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[0] = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[1] = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[2] = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[3] = LONG(*PCodePtr);
+    ++PCodePtr;
     P_ExecuteLineSpecial(special, SpecArgs, ACScript->line,
                          ACScript->side, ACScript->activator);
     return SCRIPT_CONTINUE;
@@ -946,12 +983,18 @@
 {
     int special;
 
-    special = *PCodePtr++;
-    SpecArgs[0] = *PCodePtr++;
-    SpecArgs[1] = *PCodePtr++;
-    SpecArgs[2] = *PCodePtr++;
-    SpecArgs[3] = *PCodePtr++;
-    SpecArgs[4] = *PCodePtr++;
+    special = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[0] = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[1] = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[2] = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[3] = LONG(*PCodePtr);
+    ++PCodePtr;
+    SpecArgs[4] = LONG(*PCodePtr);
+    ++PCodePtr;
     P_ExecuteLineSpecial(special, SpecArgs, ACScript->line,
                          ACScript->side, ACScript->activator);
     return SCRIPT_CONTINUE;
@@ -1046,163 +1089,190 @@
 
 static int CmdAssignScriptVar(void)
 {
-    ACScript->vars[*PCodePtr++] = Pop();
+    ACScript->vars[LONG(*PCodePtr)] = Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdAssignMapVar(void)
 {
-    MapVars[*PCodePtr++] = Pop();
+    MapVars[LONG(*PCodePtr)] = Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdAssignWorldVar(void)
 {
-    WorldVars[*PCodePtr++] = Pop();
+    WorldVars[LONG(*PCodePtr)] = Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdPushScriptVar(void)
 {
-    Push(ACScript->vars[*PCodePtr++]);
+    Push(ACScript->vars[LONG(*PCodePtr)]);
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdPushMapVar(void)
 {
-    Push(MapVars[*PCodePtr++]);
+    Push(MapVars[LONG(*PCodePtr)]);
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdPushWorldVar(void)
 {
-    Push(WorldVars[*PCodePtr++]);
+    Push(WorldVars[LONG(*PCodePtr)]);
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdAddScriptVar(void)
 {
-    ACScript->vars[*PCodePtr++] += Pop();
+    ACScript->vars[LONG(*PCodePtr)] += Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdAddMapVar(void)
 {
-    MapVars[*PCodePtr++] += Pop();
+    MapVars[LONG(*PCodePtr)] += Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdAddWorldVar(void)
 {
-    WorldVars[*PCodePtr++] += Pop();
+    WorldVars[LONG(*PCodePtr)] += Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdSubScriptVar(void)
 {
-    ACScript->vars[*PCodePtr++] -= Pop();
+    ACScript->vars[LONG(*PCodePtr)] -= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdSubMapVar(void)
 {
-    MapVars[*PCodePtr++] -= Pop();
+    MapVars[LONG(*PCodePtr)] -= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdSubWorldVar(void)
 {
-    WorldVars[*PCodePtr++] -= Pop();
+    WorldVars[LONG(*PCodePtr)] -= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdMulScriptVar(void)
 {
-    ACScript->vars[*PCodePtr++] *= Pop();
+    ACScript->vars[LONG(*PCodePtr)] *= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdMulMapVar(void)
 {
-    MapVars[*PCodePtr++] *= Pop();
+    MapVars[LONG(*PCodePtr)] *= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdMulWorldVar(void)
 {
-    WorldVars[*PCodePtr++] *= Pop();
+    WorldVars[LONG(*PCodePtr)] *= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdDivScriptVar(void)
 {
-    ACScript->vars[*PCodePtr++] /= Pop();
+    ACScript->vars[LONG(*PCodePtr)] /= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdDivMapVar(void)
 {
-    MapVars[*PCodePtr++] /= Pop();
+    MapVars[LONG(*PCodePtr)] /= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdDivWorldVar(void)
 {
-    WorldVars[*PCodePtr++] /= Pop();
+    WorldVars[LONG(*PCodePtr)] /= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdModScriptVar(void)
 {
-    ACScript->vars[*PCodePtr++] %= Pop();
+    ACScript->vars[LONG(*PCodePtr)] %= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdModMapVar(void)
 {
-    MapVars[*PCodePtr++] %= Pop();
+    MapVars[LONG(*PCodePtr)] %= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdModWorldVar(void)
 {
-    WorldVars[*PCodePtr++] %= Pop();
+    WorldVars[LONG(*PCodePtr)] %= Pop();
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdIncScriptVar(void)
 {
-    ACScript->vars[*PCodePtr++]++;
+    ++ACScript->vars[LONG(*PCodePtr)];
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdIncMapVar(void)
 {
-    MapVars[*PCodePtr++]++;
+    ++MapVars[LONG(*PCodePtr)];
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdIncWorldVar(void)
 {
-    WorldVars[*PCodePtr++]++;
+    ++WorldVars[LONG(*PCodePtr)];
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdDecScriptVar(void)
 {
-    ACScript->vars[*PCodePtr++]--;
+    --ACScript->vars[LONG(*PCodePtr)];
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdDecMapVar(void)
 {
-    MapVars[*PCodePtr++]--;
+    --MapVars[LONG(*PCodePtr)];
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
 static int CmdDecWorldVar(void)
 {
-    WorldVars[*PCodePtr++]--;
+    --WorldVars[LONG(*PCodePtr)];
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
@@ -1214,13 +1284,13 @@
 
 static int CmdIfGoto(void)
 {
-    if (Pop())
+    if (Pop() != 0)
     {
         PCodePtr = (int *) (ActionCodeBase + *PCodePtr);
     }
     else
     {
-        PCodePtr++;
+        ++PCodePtr;
     }
     return SCRIPT_CONTINUE;
 }
@@ -1239,7 +1309,8 @@
 
 static int CmdDelayDirect(void)
 {
-    ACScript->delayCount = *PCodePtr++;
+    ACScript->delayCount = LONG(*PCodePtr);
+    ++PCodePtr;
     return SCRIPT_STOP;
 }
 
@@ -1259,8 +1330,10 @@
     int low;
     int high;
 
-    low = *PCodePtr++;
-    high = *PCodePtr++;
+    low = LONG(*PCodePtr);
+    ++PCodePtr;
+    high = LONG(*PCodePtr);
+    ++PCodePtr;
     Push(low + (P_Random() % (high - low + 1)));
     return SCRIPT_CONTINUE;
 }
@@ -1278,8 +1351,10 @@
 {
     int type;
 
-    type = *PCodePtr++;
-    ThingCount(type, *PCodePtr++);
+    type = LONG(*PCodePtr);
+    ++PCodePtr;
+    ThingCount(type, LONG(*PCodePtr));
+    ++PCodePtr;
     return SCRIPT_CONTINUE;
 }
 
@@ -1349,7 +1424,8 @@
 
 static int CmdTagWaitDirect(void)
 {
-    ACSInfo[ACScript->infoIndex].waitValue = *PCodePtr++;
+    ACSInfo[ACScript->infoIndex].waitValue = LONG(*PCodePtr);
+    ++PCodePtr;
     ACSInfo[ACScript->infoIndex].state = ASTE_WAITINGFORTAG;
     return SCRIPT_STOP;
 }
@@ -1363,7 +1439,8 @@
 
 static int CmdPolyWaitDirect(void)
 {
-    ACSInfo[ACScript->infoIndex].waitValue = *PCodePtr++;
+    ACSInfo[ACScript->infoIndex].waitValue = LONG(*PCodePtr);
+    ++PCodePtr;
     ACSInfo[ACScript->infoIndex].state = ASTE_WAITINGFORPOLY;
     return SCRIPT_STOP;
 }
@@ -1390,8 +1467,10 @@
     int flat;
     int sectorIndex;
 
-    tag = *PCodePtr++;
-    flat = R_FlatNumForName(ACStrings[*PCodePtr++]);
+    tag = LONG(*PCodePtr);
+    ++PCodePtr;
+    flat = R_FlatNumForName(ACStrings[LONG(*PCodePtr)]);
+    ++PCodePtr;
     sectorIndex = -1;
     while ((sectorIndex = P_FindSectorFromTag(tag, sectorIndex)) >= 0)
     {
@@ -1422,8 +1501,10 @@
     int flat;
     int sectorIndex;
 
-    tag = *PCodePtr++;
-    flat = R_FlatNumForName(ACStrings[*PCodePtr++]);
+    tag = LONG(*PCodePtr);
+    ++PCodePtr;
+    flat = R_FlatNumForName(ACStrings[LONG(*PCodePtr)]);
+    ++PCodePtr;
     sectorIndex = -1;
     while ((sectorIndex = P_FindSectorFromTag(tag, sectorIndex)) >= 0)
     {
@@ -1500,13 +1581,13 @@
 
 static int CmdIfNotGoto(void)
 {
-    if (Pop())
+    if (Pop() != 0)
     {
-        PCodePtr++;
+        ++PCodePtr;
     }
     else
     {
-        PCodePtr = (int *) (ActionCodeBase + *PCodePtr);
+        PCodePtr = (int *) (ActionCodeBase + LONG(*PCodePtr));
     }
     return SCRIPT_CONTINUE;
 }
@@ -1526,7 +1607,8 @@
 
 static int CmdScriptWaitDirect(void)
 {
-    ACSInfo[ACScript->infoIndex].waitValue = *PCodePtr++;
+    ACSInfo[ACScript->infoIndex].waitValue = LONG(*PCodePtr);
+    ++PCodePtr;
     ACSInfo[ACScript->infoIndex].state = ASTE_WAITINGFORSCRIPT;
     return SCRIPT_STOP;
 }
@@ -1542,15 +1624,21 @@
 
 static int CmdCaseGoto(void)
 {
-    if (Top() == *PCodePtr++)
+    int value;
+
+    value = LONG(*PCodePtr);
+    ++PCodePtr;
+
+    if (Top() == value)
     {
-        PCodePtr = (int *) (ActionCodeBase + *PCodePtr);
+        PCodePtr = (int *) (ActionCodeBase + LONG(*PCodePtr));
         Drop();
     }
     else
     {
-        PCodePtr++;
+        ++PCodePtr;
     }
+
     return SCRIPT_CONTINUE;
 }