OSDN Git Service

- added ACS SpawnForced function.
[zandronum/zandronum-acc.git] / pcode.c
diff --git a/pcode.c b/pcode.c
index def1871..baa8360 100644 (file)
--- a/pcode.c
+++ b/pcode.c
@@ -387,7 +387,7 @@ static char *PCDNames[PCODE_COMMAND_COUNT] =
        "PCD_SETACTORANGLE",\r
        "PCD_GRABINPUT",\r
        "PCD_SETMOUSEPOINTER",\r
-       "PCD_MOVEMOUSEPOINTER"\r
+       "PCD_MOVEMOUSEPOINTER",\r
        "PCD_SPAWNPROJECTILE",\r
        "PCD_GETSECTORLIGHTLEVEL",\r
        "PCD_GETACTORCEILINGZ",\r
@@ -440,7 +440,28 @@ static char *PCDNames[PCODE_COMMAND_COUNT] =
        "PCD_CHANGELEVEL",\r
        "PCD_SECTORDAMAGE",\r
        "PCD_REPLACETEXTURES",\r
-       \r
+       "PCD_NEGATEBINARY",\r
+       "PCD_GETACTORPITCH",\r
+       "PCD_SETACTORPITCH",\r
+       "PCD_PRINTBIND",\r
+       "PCD_SETACTORSTATE",\r
+       "PCD_THINGDAMAGE2",\r
+       "PCD_USEINVENTORY",\r
+       "PCD_USEACTORINVENTORY",\r
+       "PCD_CHECKACTORCEILINGTEXTURE",\r
+       "PCD_CHECKACTORFLOORTEXTURE",\r
+       "PCD_GETACTORLIGHTLEVEL",\r
+       "PCD_SETMUGSHOTSTATE",\r
+       "PCD_THINGCOUNTSECTOR",\r
+       "PCD_THINGCOUNTNAMESECTOR",\r
+       "PCD_CHECKPLAYERCAMERA",\r
+       "PCD_MORPHACTOR",\r
+       "PCD_UNMORPHACTOR",\r
+       "PCD_GETPLAYERINPUT",\r
+       "PCD_CLASSIFYACTOR",\r
+       "PCD_PRINTBINARY",\r
+       "PCD_PRINTHEX",\r
+       "PCD_CALLFUNC",\r
 };\r
 \r
 // CODE --------------------------------------------------------------------\r
@@ -470,7 +491,7 @@ void PC_OpenObject(char *name, size_t size, int flags)
        pc_ScriptCount = 0;\r
        ObjectOpened = YES;\r
        PC_AppendString("ACS");\r
-       PC_SkipLong(); // Script table offset\r
+       PC_SkipInt(); // Script table offset\r
 }\r
 \r
 //==========================================================================\r
@@ -513,16 +534,16 @@ static void CloseOld(void)
        int i;\r
 \r
        STR_WriteStrings();\r
-       PC_WriteLong((U_LONG)pc_Address, 4);\r
-       PC_AppendLong((U_LONG)pc_ScriptCount);\r
+       PC_WriteInt((U_INT)pc_Address, 4);\r
+       PC_AppendInt((U_INT)pc_ScriptCount);\r
        for(i = 0; i < pc_ScriptCount; ++i)\r
        {\r
                scriptInfo_t *info = &ScriptInfo[i];\r
                MS_Message(MSG_DEBUG, "Script %d, address = %d, arg count = %d\n",\r
                        info->number, info->address, info->argCount);\r
-               PC_AppendLong((U_LONG)(info->number + info->type * 1000));\r
-               PC_AppendLong((U_LONG)info->address);\r
-               PC_AppendLong((U_LONG)info->argCount);\r
+               PC_AppendInt((U_INT)(info->number + info->type * 1000));\r
+               PC_AppendInt((U_INT)info->address);\r
+               PC_AppendInt((U_INT)info->argCount);\r
        }\r
        STR_WriteList();\r
 }\r
@@ -564,7 +585,7 @@ static void CloseNew(void)
        if(j > 0)\r
        {\r
                PC_Append("SPTR", 4);\r
-               PC_AppendLong(j * 8);\r
+               PC_AppendInt(j * 8);\r
                for(i = 0; i < pc_ScriptCount; i++)\r
                {\r
                        scriptInfo_t *info = &ScriptInfo[i];\r
@@ -575,7 +596,7 @@ static void CloseNew(void)
                                PC_AppendWord(info->number);\r
                                PC_AppendByte(info->type);\r
                                PC_AppendByte(info->argCount);\r
-                               PC_AppendLong((U_LONG)info->address);\r
+                               PC_AppendInt((U_INT)info->address);\r
                        }\r
                }\r
        }\r
@@ -591,7 +612,7 @@ static void CloseNew(void)
        if(j > 0)\r
        {\r
                PC_Append("SVCT", 4);\r
-               PC_AppendLong(j * 4);\r
+               PC_AppendInt(j * 4);\r
                for(i = 0; i < pc_ScriptCount; ++i)\r
                {\r
                        scriptInfo_t *info = &ScriptInfo[i];\r
@@ -616,7 +637,7 @@ static void CloseNew(void)
        if (j > 0)\r
        {\r
                PC_Append("SFLG", 4);\r
-               PC_AppendLong(j * 4);\r
+               PC_AppendInt(j * 4);\r
                for(i = 0; i < pc_ScriptCount; ++i)\r
                {\r
                        scriptInfo_t *info = &ScriptInfo[i];\r
@@ -631,7 +652,7 @@ static void CloseNew(void)
        if(pc_FunctionCount > 0)\r
        {\r
                PC_Append("FUNC", 4);\r
-               PC_AppendLong(pc_FunctionCount * 8);\r
+               PC_AppendInt(pc_FunctionCount * 8);\r
                for(i = 0; i < pc_FunctionCount; ++i)\r
                {\r
                        functionInfo_t *info = &FunctionInfo[i];\r
@@ -642,7 +663,7 @@ static void CloseNew(void)
                        PC_AppendByte(info->localCount);\r
                        PC_AppendByte((U_BYTE)(info->hasReturnValue?1:0));\r
                        PC_AppendByte(0);\r
-                       PC_AppendLong((U_LONG)info->address);\r
+                       PC_AppendInt((U_INT)info->address);\r
                }\r
                STR_WriteListChunk(STRLIST_FUNCTIONS, MAKE4CC('F','N','A','M'), NO);\r
        }\r
@@ -679,11 +700,11 @@ static void CloseNew(void)
                if (i < j)\r
                {\r
                        PC_Append("MINI", 4);\r
-                       PC_AppendLong((j-i)*4+4);\r
-                       PC_AppendLong(i);                                               // First map var defined\r
+                       PC_AppendInt((j-i)*4+4);\r
+                       PC_AppendInt(i);                                                // First map var defined\r
                        for(; i < j; ++i)\r
                        {\r
-                               PC_AppendLong(MapVariables[i].initializer);\r
+                               PC_AppendInt(MapVariables[i].initializer);\r
                        }\r
                }\r
        }\r
@@ -704,12 +725,12 @@ static void CloseNew(void)
                if(count > 0)\r
                {\r
                        PC_Append("MSTR", 4);\r
-                       PC_AppendLong(count*4);\r
+                       PC_AppendInt(count*4);\r
                        for(i = 0; i < pa_MapVarCount; ++i)\r
                        {\r
                                if(MapVariables[i].isString)\r
                                {\r
-                                       PC_AppendLong(i);\r
+                                       PC_AppendInt(i);\r
                                }\r
                        }\r
                }\r
@@ -725,12 +746,12 @@ static void CloseNew(void)
                if(count > 0)\r
                {\r
                        PC_Append("ASTR", 4);\r
-                       PC_AppendLong(count*4);\r
+                       PC_AppendInt(count*4);\r
                        for(i = 0; i < pa_MapVarCount; ++i)\r
                        {\r
                                if(ArrayOfStrings[i])\r
                                {\r
-                                       PC_AppendLong(i);\r
+                                       PC_AppendInt(i);\r
                                }\r
                        }\r
                }\r
@@ -765,12 +786,12 @@ static void CloseNew(void)
        if(count > 0)\r
        {\r
                PC_Append("MIMP", 4);\r
-               PC_AppendLong(count);\r
+               PC_AppendInt(count);\r
                for(i = 0; i < pa_MapVarCount; ++i)\r
                {\r
                        if(MapVariables[i].imported && !ArraySizes[i])\r
                        {\r
-                               PC_AppendLong(i);\r
+                               PC_AppendInt(i);\r
                                PC_AppendString(MapVariables[i].name);\r
                        }\r
                }\r
@@ -791,13 +812,13 @@ static void CloseNew(void)
                if(count)\r
                {\r
                        PC_Append("ARAY", 4);\r
-                       PC_AppendLong(count*8);\r
+                       PC_AppendInt(count*8);\r
                        for(i = 0; i < pa_MapVarCount; ++i)\r
                        {\r
                                if(ArraySizes[i] && !MapVariables[i].imported)\r
                                {\r
-                                       PC_AppendLong(i);\r
-                                       PC_AppendLong(ArraySizes[i]);\r
+                                       PC_AppendInt(i);\r
+                                       PC_AppendInt(ArraySizes[i]);\r
                                }\r
                        }\r
                        for(i = 0; i < pa_MapVarCount; ++i)\r
@@ -807,11 +828,12 @@ static void CloseNew(void)
                                        int j;\r
 \r
                                        PC_Append("AINI", 4);\r
-                                       PC_AppendLong(ArraySizes[i]*4+4);\r
-                                       PC_AppendLong((U_LONG)i);\r
+                                       PC_AppendInt(ArraySizes[i]*4+4);\r
+                                       PC_AppendInt((U_INT)i);\r
+                                       MS_Message(MSG_DEBUG, "Writing array initializers for array %d (size %d)\n", i, ArraySizes[i]);\r
                                        for(j = 0; j < ArraySizes[i]; ++j)\r
                                        {\r
-                                               PC_AppendLong((U_LONG)ArrayInits[i][j]);\r
+                                               PC_AppendInt((U_INT)ArrayInits[i][j]);\r
                                        }\r
                                }\r
                        }\r
@@ -829,14 +851,14 @@ static void CloseNew(void)
                if(count)\r
                {\r
                        PC_Append("AIMP", 4);\r
-                       PC_AppendLong(count+4);\r
-                       PC_AppendLong(j);\r
+                       PC_AppendInt(count+4);\r
+                       PC_AppendInt(j);\r
                        for(i = 0; i < pa_MapVarCount; ++i)\r
                        {\r
                                if(ArraySizes[i] && MapVariables[i].imported)\r
                                {\r
-                                       PC_AppendLong(i);\r
-                                       PC_AppendLong(ArraySizes[i]);\r
+                                       PC_AppendInt(i);\r
+                                       PC_AppendInt(ArraySizes[i]);\r
                                        PC_AppendString(MapVariables[i].name);\r
                                }\r
                        }\r
@@ -847,7 +869,7 @@ static void CloseNew(void)
        if(ImportMode == IMPORT_Exporting)\r
        {\r
                PC_Append("ALIB", 4);\r
-               PC_AppendLong(0);\r
+               PC_AppendInt(0);\r
        }\r
 \r
        // Record libraries imported by this object.\r
@@ -861,7 +883,7 @@ static void CloseNew(void)
                if(count > 0)\r
                {\r
                        PC_Append("LOAD", 4);\r
-                       PC_AppendLong(count);\r
+                       PC_AppendInt(count);\r
                        for(i = 0; i < NumImports; ++i)\r
                        {\r
                                PC_AppendString(Imports[i]);\r
@@ -869,7 +891,7 @@ static void CloseNew(void)
                }\r
        }\r
 \r
-       PC_AppendLong((U_LONG)chunkStart);\r
+       PC_AppendInt((U_INT)chunkStart);\r
        if(pc_NoShrink)\r
        {\r
                PC_Append("ACSE", 4);\r
@@ -878,7 +900,7 @@ static void CloseNew(void)
        {\r
                PC_Append("ACSe", 4);\r
        }\r
-       PC_WriteLong((U_LONG)pc_Address, 4);\r
+       PC_WriteInt((U_INT)pc_Address, 4);\r
 \r
        // WadAuthor compatibility when creating a library is pointless, because\r
        // that editor does not know anything about libraries and will never\r
@@ -889,9 +911,9 @@ static void CloseNew(void)
        }\r
        else\r
        {\r
-               PC_AppendLong(0);\r
+               PC_AppendInt(0);\r
        }\r
-       PC_AppendLong(0);\r
+       PC_AppendInt(0);\r
 }\r
 \r
 //==========================================================================\r
@@ -907,7 +929,7 @@ static void CreateDummyScripts(void)
        MS_Message(MSG_DEBUG, "Creating dummy scripts to make WadAuthor happy.\n");\r
        if(pc_Address%4 != 0)\r
        { // Need to align\r
-               U_LONG pad = 0;\r
+               U_INT pad = 0;\r
                PC_Append((void *)&pad, 4-(pc_Address%4));\r
        }\r
        pc_DummyAddress = pc_Address;\r
@@ -943,7 +965,7 @@ static void RecordDummyScripts(void)
                        ++count;\r
                }\r
        }\r
-       PC_AppendLong((U_LONG)count);\r
+       PC_AppendInt((U_INT)count);\r
        for(i = 0; i < pc_ScriptCount; ++i)\r
        {\r
                scriptInfo_t *info = &ScriptInfo[i];\r
@@ -951,9 +973,9 @@ static void RecordDummyScripts(void)
                {\r
                        MS_Message(MSG_DEBUG, "Dummy script %d, address = %d, arg count = %d\n",\r
                                info->number, info->address, info->argCount);\r
-                       PC_AppendLong((U_LONG)info->number);\r
-                       PC_AppendLong((U_LONG)pc_DummyAddress + i*4);\r
-                       PC_AppendLong((U_LONG)info->argCount);\r
+                       PC_AppendInt((U_INT)info->number);\r
+                       PC_AppendInt((U_INT)pc_DummyAddress + i*4);\r
+                       PC_AppendInt((U_INT)info->argCount);\r
                }\r
        }\r
 }\r
@@ -1021,13 +1043,13 @@ void PC_AppendWord(U_WORD val)
        }\r
 }\r
 \r
-void PC_AppendLong(U_LONG val)\r
+void PC_AppendInt(U_INT val)\r
 {\r
        if (ImportMode != IMPORT_Importing)\r
        {\r
                MS_Message(MSG_DEBUG, "AL> %06d = %d\n", pc_Address, val);\r
-               val = MS_LittleULONG(val);\r
-               Append(&val, sizeof(U_LONG));\r
+               val = MS_LittleUINT(val);\r
+               Append(&val, sizeof(U_INT));\r
        }\r
 }\r
 \r
@@ -1053,8 +1075,8 @@ void PC_AppendCmd(pcd_t command)
                {\r
                        MS_Message(MSG_DEBUG, "AC> %06d = #%d:%s\n", pc_Address,\r
                                command, PCDNames[command]);\r
-                       command = MS_LittleULONG(command);\r
-                       Append(&command, sizeof(U_LONG));\r
+                       command = MS_LittleUINT(command);\r
+                       Append(&command, sizeof(U_INT));\r
                }\r
                else\r
                {\r
@@ -1127,7 +1149,7 @@ void PC_AppendShrink(U_BYTE val)
 {\r
        if(pc_NoShrink)\r
        {\r
-               PC_AppendLong(val);\r
+               PC_AppendInt(val);\r
        }\r
        else\r
        {\r
@@ -1141,12 +1163,12 @@ void PC_AppendShrink(U_BYTE val)
 //\r
 //==========================================================================\r
 \r
-void PC_AppendPushVal(U_LONG val)\r
+void PC_AppendPushVal(U_INT val)\r
 {\r
        if(pc_NoShrink || val > 255)\r
        {\r
                PC_AppendCmd(PCD_PUSHNUMBER);\r
-               PC_AppendLong(val);\r
+               PC_AppendInt(val);\r
        }\r
        else\r
        {\r
@@ -1200,13 +1222,13 @@ void PC_WriteWord(U_WORD val, int address)
 }\r
 */\r
 \r
-void PC_WriteLong(U_LONG val, int address)\r
+void PC_WriteInt(U_INT val, int address)\r
 {\r
        if (ImportMode != IMPORT_Importing)\r
        {\r
                MS_Message(MSG_DEBUG, "WL> %06d = %d\n", address, val);\r
-               val = MS_LittleULONG(val);\r
-               Write(&val, sizeof(U_LONG), address);\r
+               val = MS_LittleUINT(val);\r
+               Write(&val, sizeof(U_INT), address);\r
        }\r
        pc_LastAppendedCommand = PCD_NOP;\r
 }\r
@@ -1230,8 +1252,8 @@ void PC_WriteCmd(pcd_t command, int address)
        {\r
                MS_Message(MSG_DEBUG, "WC> %06d = #%d:%s\n", address,\r
                        command, PCDNames[command]);\r
-               command = MS_LittleULONG(command);\r
-               Write(&command, sizeof(U_LONG), address);\r
+               command = MS_LittleUINT(command);\r
+               Write(&command, sizeof(U_INT), address);\r
        }\r
 }\r
 \r
@@ -1279,12 +1301,12 @@ void PC_SkipWord(void)
 }\r
 */\r
 \r
-void PC_SkipLong(void)\r
+void PC_SkipInt(void)\r
 {\r
        if (ImportMode != IMPORT_Importing)\r
        {\r
-               MS_Message(MSG_DEBUG, "SL> %06d (skip long)\n", pc_Address);\r
-               Skip(sizeof(U_LONG));\r
+               MS_Message(MSG_DEBUG, "SL> %06d (skip int)\n", pc_Address);\r
+               Skip(sizeof(U_INT));\r
        }\r
 }\r
 \r