diff --git a/parse.c b/parse.c index b05e0d2..abee8d6 100644 --- a/parse.c +++ b/parse.c @@ -1624,7 +1624,21 @@ static void LeadingLineSpecial(boolean executewait) } TK_TokenMustBe(TK_RPAREN, ERR_MISSING_RPAREN); TK_NextTokenMustBe(TK_SEMICOLON, ERR_MISSING_SEMICOLON); - if(direct == NO) + if (specialValue > 255) + { + for(; argCount < 5; ++argCount) + { + PC_AppendPushVal(0); + } + PC_AppendCmd(PCD_LSPEC5EX); + PC_AppendInt(specialValue); + if(executewait) + { + PC_AppendCmd(PCD_SCRIPTWAITDIRECT); + PC_AppendInt(argSave[0]); + } + } + else if(direct == NO) { PC_AppendCmd(PCD_LSPEC1+(argCount-1)); if(pc_NoShrink) @@ -3502,8 +3516,8 @@ static void ExprLineSpecial(void) } TK_TokenMustBe(TK_RPAREN, ERR_MISSING_RPAREN); TK_NextToken(); - PC_AppendCmd(PCD_LSPEC5RESULT); - if(pc_NoShrink) + PC_AppendCmd(specialValue <= 255? PCD_LSPEC5RESULT : PCD_LSPEC5EXRESULT); + if(pc_NoShrink || specialValue > 255) { PC_AppendInt(specialValue); } diff --git a/pcode.c b/pcode.c index 29edf17..d9169c6 100644 --- a/pcode.c +++ b/pcode.c @@ -499,6 +499,8 @@ static char *PCDNames[PCODE_COMMAND_COUNT] = "PCD_PRINTSCRIPTCHARARRAY", "PCD_PRINTSCRIPTCHRANGE", "PCD_STRCPYTOSCRIPTCHRANGE", + "PCD_LSPEC5EX", + "PCD_LSPEC5EXRESULT", }; // CODE -------------------------------------------------------------------- diff --git a/pcode.h b/pcode.h index 3f17c35..0ecd1ed 100644 --- a/pcode.h +++ b/pcode.h @@ -444,6 +444,8 @@ typedef enum PCD_PRINTSCRIPTCHARARRAY, PCD_PRINTSCRIPTCHRANGE, PCD_STRCPYTOSCRIPTCHRANGE, + PCD_LSPEC5EX, + PCD_LSPEC5EXRESULT, PCODE_COMMAND_COUNT } pcd_t; diff --git a/zspecial.acs b/zspecial.acs index aff1e1e..8152540 100644 --- a/zspecial.acs +++ b/zspecial.acs @@ -24,12 +24,12 @@ special 17:Thing_Raise(1), 18:StartConversation(1,2), 19:Thing_Stop(1), - 20:Floor_LowerByValue(3), - 21:Floor_LowerToLowest(2), - 22:Floor_LowerToNearest(2), - 23:Floor_RaiseByValue(3), - 24:Floor_RaiseToHighest(2), - 25:Floor_RaiseToNearest(2), + 20:Floor_LowerByValue(3,4), + 21:Floor_LowerToLowest(2,3), + 22:Floor_LowerToNearest(2,3), + 23:Floor_RaiseByValue(3,5), + 24:Floor_RaiseToHighest(2,5), + 25:Floor_RaiseToNearest(2,4), 26:Stairs_BuildDown(5), 27:Stairs_BuildUp(5), 28:Floor_RaiseAndCrush(3,4), @@ -39,9 +39,9 @@ special 32:Stairs_BuildUpSync(4), 33:ForceField(0), 34:ClearForceField(1), - 35:Floor_RaiseByValueTimes8(3), - 36:Floor_LowerByValueTimes8(3), - 37:Floor_MoveToValue(3,4), + 35:Floor_RaiseByValueTimes8(3,5), + 36:Floor_LowerByValueTimes8(3,4), + 37:Floor_MoveToValue(3,5), 38:Ceiling_Waggle(5), 39:Teleport_ZombieChanger(2), 40:Ceiling_LowerByValue(3), @@ -70,9 +70,9 @@ special 63:Plat_DownByValue(4), 64:Plat_UpWaitDownStay(3), 65:Plat_UpByValue(4), - 66:Floor_LowerInstant(3), - 67:Floor_RaiseInstant(3), - 68:Floor_MoveToValueTimes8(4), + 66:Floor_LowerInstant(3,4), + 67:Floor_RaiseInstant(3,5), + 68:Floor_MoveToValueTimes8(4,5), 69:Ceiling_MoveToValueTimes8(4), 70:Teleport(1,3), 71:Teleport_NoFog(1,4), @@ -109,6 +109,9 @@ special // 102:Scroll_Texture_Up // 103:Scroll_Texture_Down 104:Ceiling_CrushAndRaiseSilentDist(4,5), + 105:Door_WaitRaise(4,5), + 106:Door_WaitClose(3,4), + 107:Floor_LowerToLowestCeiling(2,3), 109:Light_ForceLightning(1), 110:Light_RaiseByValue(2), @@ -223,9 +226,9 @@ special 235:Floor_TransferTrigger(1), 236:Floor_TransferNumeric(1), 237:ChangeCamera(3), - 238:Floor_RaiseToLowestCeiling(2), + 238:Floor_RaiseToLowestCeiling(2,4), 239:Floor_RaiseByValueTxTy(3), - 240:Floor_RaiseByTexture(2), + 240:Floor_RaiseByTexture(2,4), 241:Floor_LowerToLowestTxTy(2), 242:Floor_LowerToHighest(3,4), 243:Exit_Normal(1), @@ -241,6 +244,9 @@ special 253:Ceiling_LowerToLowest(2), 254:Ceiling_LowerToFloor(2), 255:Ceiling_CrushRaiseAndStaySilA(4,5), + + 256:Floor_LowerToHighestEE(2, 3), + 257:Floor_RaiseToLowest(2, 3), // internal functions have negative values -1:GetLineUDMFInt(2),