diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 437a9cfe8..ead7b198a 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -173,6 +173,27 @@ TArray #define STRINGBUILDER_START(Builder) if (Builder.IsNotEmpty() || ACS_StringBuilderStack.Size()) { ACS_StringBuilderStack.Push(Builder); Builder = ""; } #define STRINGBUILDER_FINISH(Builder) if (!ACS_StringBuilderStack.Pop(Builder)) { Builder = ""; } +//============================================================================ +// +// uallong +// +// Read a possibly unaligned four-byte little endian integer from memory. +// +//============================================================================ + +#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) +inline int uallong(const int &foo) +{ + return foo; +} +#else +inline int uallong(const int &foo) +{ + const unsigned char *bar = (const unsigned char *)&foo; + return bar[0] | (bar[1] << 8) | (bar[2] << 16) | (bar[3] << 24); +} +#endif + //============================================================================ // // ScriptPresentation @@ -1259,7 +1280,7 @@ FBehavior::FBehavior (int lumpnum, FileReader * fr, int len) // First byte is version, it should be 0 if(*chunkData++ == 0) { - int arraynum = MapVarStore[LittleLong(*(const DWORD*)(chunkData))]; + int arraynum = MapVarStore[uallong(*(const int*)(chunkData))]; chunkData += 4; if ((unsigned)arraynum < (unsigned)NumArrays) { @@ -4010,20 +4031,6 @@ inline int getshort (int *&pc) return res; } -// Read a possibly unaligned four-byte little endian integer. -#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) -inline int uallong(int &foo) -{ - return foo; -} -#else -inline int uallong(int &foo) -{ - unsigned char *bar = (unsigned char *)&foo; - return bar[0] | (bar[1] << 8) | (bar[2] << 16) | (bar[3] << 24); -} -#endif - int DLevelScript::RunScript () { DACSThinker *controller = DACSThinker::ActiveThinker;