📄 p_acs.c
字号:
void T_InterpretACS(acs_t *script){ int cmd; int action; if(ACSInfo[script->infoIndex].state == ASTE_TERMINATING) { ACSInfo[script->infoIndex].state = ASTE_INACTIVE; ScriptFinished(ACScript->number); P_RemoveThinker(&ACScript->thinker); return; } if(ACSInfo[script->infoIndex].state != ASTE_RUNNING) { return; } if(script->delayCount) { script->delayCount--; return; } ACScript = script; PCodePtr = ACScript->ip; do { cmd = *PCodePtr++; action = PCodeCmds[cmd](); } while(action == SCRIPT_CONTINUE); ACScript->ip = PCodePtr; if(action == SCRIPT_TERMINATE) { ACSInfo[script->infoIndex].state = ASTE_INACTIVE; ScriptFinished(ACScript->number); P_RemoveThinker(&ACScript->thinker); }}//==========================================================================//// P_TagFinished////==========================================================================void P_TagFinished(int tag){ int i; if(TagBusy(tag) == true) { return; } for(i = 0; i < ACScriptCount; i++) { if(ACSInfo[i].state == ASTE_WAITINGFORTAG && ACSInfo[i].waitValue == tag) { ACSInfo[i].state = ASTE_RUNNING; } }}//==========================================================================//// P_PolyobjFinished////==========================================================================void P_PolyobjFinished(int po){ int i; if(PO_Busy(po) == true) { return; } for(i = 0; i < ACScriptCount; i++) { if(ACSInfo[i].state == ASTE_WAITINGFORPOLY && ACSInfo[i].waitValue == po) { ACSInfo[i].state = ASTE_RUNNING; } }}//==========================================================================//// ScriptFinished////==========================================================================static void ScriptFinished(int number){ int i; for(i = 0; i < ACScriptCount; i++) { if(ACSInfo[i].state == ASTE_WAITINGFORSCRIPT && ACSInfo[i].waitValue == number) { ACSInfo[i].state = ASTE_RUNNING; } }}//==========================================================================//// TagBusy////==========================================================================static boolean TagBusy(int tag){ int sectorIndex; sectorIndex = -1; while((sectorIndex = P_FindSectorFromTag(tag, sectorIndex)) >= 0) { if(sectors[sectorIndex].specialdata) { return true; } } return false;}//==========================================================================//// GetACSIndex//// Returns the index of a script number. Returns -1 if the script number// is not found.////==========================================================================static int GetACSIndex(int number){ int i; for(i = 0; i < ACScriptCount; i++) { if(ACSInfo[i].number == number) { return i; } } return -1;}//==========================================================================//// Push////==========================================================================static void Push(int value){ ACScript->stack[ACScript->stackPtr++] = value;}//==========================================================================//// Pop////==========================================================================static int Pop(void){ return ACScript->stack[--ACScript->stackPtr];}//==========================================================================//// Top////==========================================================================static int Top(void){ return ACScript->stack[ACScript->stackPtr-1];}//==========================================================================//// Drop////==========================================================================static void Drop(void){ ACScript->stackPtr--;}//==========================================================================//// P-Code Commands////==========================================================================static int CmdNOP(void){ return SCRIPT_CONTINUE;}static int CmdTerminate(void){ return SCRIPT_TERMINATE;}static int CmdSuspend(void){ ACSInfo[ACScript->infoIndex].state = ASTE_SUSPENDED; return SCRIPT_STOP;}static int CmdPushNumber(void){ Push(*PCodePtr++); return SCRIPT_CONTINUE;}static int CmdLSpec1(void){ int special; special = *PCodePtr++; SpecArgs[0] = Pop(); P_ExecuteLineSpecial(special, SpecArgs, ACScript->line, ACScript->side, ACScript->activator); return SCRIPT_CONTINUE;}static int CmdLSpec2(void){ int special; special = *PCodePtr++; SpecArgs[1] = Pop(); SpecArgs[0] = Pop(); P_ExecuteLineSpecial(special, SpecArgs, ACScript->line, ACScript->side, ACScript->activator); return SCRIPT_CONTINUE;}static int CmdLSpec3(void){ int special; special = *PCodePtr++; SpecArgs[2] = Pop(); SpecArgs[1] = Pop(); SpecArgs[0] = Pop(); P_ExecuteLineSpecial(special, SpecArgs, ACScript->line, ACScript->side, ACScript->activator); return SCRIPT_CONTINUE;}static int CmdLSpec4(void){ int special; special = *PCodePtr++; SpecArgs[3] = Pop(); SpecArgs[2] = Pop(); SpecArgs[1] = Pop(); SpecArgs[0] = Pop(); P_ExecuteLineSpecial(special, SpecArgs, ACScript->line, ACScript->side, ACScript->activator); return SCRIPT_CONTINUE;}static int CmdLSpec5(void){ int special; special = *PCodePtr++; SpecArgs[4] = Pop(); SpecArgs[3] = Pop(); SpecArgs[2] = Pop(); SpecArgs[1] = Pop(); SpecArgs[0] = Pop(); P_ExecuteLineSpecial(special, SpecArgs, ACScript->line, ACScript->side, ACScript->activator); return SCRIPT_CONTINUE;}static int CmdLSpec1Direct(void){ int special; special = *PCodePtr++; SpecArgs[0] = *PCodePtr++; P_ExecuteLineSpecial(special, SpecArgs, ACScript->line, ACScript->side, ACScript->activator); return SCRIPT_CONTINUE;}static int CmdLSpec2Direct(void){ int special; special = *PCodePtr++; SpecArgs[0] = *PCodePtr++; SpecArgs[1] = *PCodePtr++; P_ExecuteLineSpecial(special, SpecArgs, ACScript->line, ACScript->side, ACScript->activator); return SCRIPT_CONTINUE;}static int CmdLSpec3Direct(void){ int special; special = *PCodePtr++; SpecArgs[0] = *PCodePtr++; SpecArgs[1] = *PCodePtr++; SpecArgs[2] = *PCodePtr++; P_ExecuteLineSpecial(special, SpecArgs, ACScript->line, ACScript->side, ACScript->activator); return SCRIPT_CONTINUE;}static int CmdLSpec4Direct(void){ int special; special = *PCodePtr++; SpecArgs[0] = *PCodePtr++; SpecArgs[1] = *PCodePtr++; SpecArgs[2] = *PCodePtr++; SpecArgs[3] = *PCodePtr++; P_ExecuteLineSpecial(special, SpecArgs, ACScript->line, ACScript->side, ACScript->activator); return SCRIPT_CONTINUE;}static int CmdLSpec5Direct(void){ int special; special = *PCodePtr++; SpecArgs[0] = *PCodePtr++; SpecArgs[1] = *PCodePtr++; SpecArgs[2] = *PCodePtr++; SpecArgs[3] = *PCodePtr++; SpecArgs[4] = *PCodePtr++; P_ExecuteLineSpecial(special, SpecArgs, ACScript->line, ACScript->side, ACScript->activator); return SCRIPT_CONTINUE;}static int CmdAdd(void){ Push(Pop()+Pop()); return SCRIPT_CONTINUE;}static int CmdSubtract(void){ int operand2; operand2 = Pop(); Push(Pop()-operand2); return SCRIPT_CONTINUE;}static int CmdMultiply(void){ Push(Pop()*Pop()); return SCRIPT_CONTINUE;}static int CmdDivide(void){ int operand2; operand2 = Pop(); Push(Pop()/operand2); return SCRIPT_CONTINUE;}static int CmdModulus(void){ int operand2; operand2 = Pop(); Push(Pop()%operand2); return SCRIPT_CONTINUE;}static int CmdEQ(void){ Push(Pop() == Pop()); return SCRIPT_CONTINUE;}static int CmdNE(void){ Push(Pop() != Pop()); return SCRIPT_CONTINUE;}static int CmdLT(void){ int operand2; operand2 = Pop(); Push(Pop() < operand2); return SCRIPT_CONTINUE;}static int CmdGT(void){ int operand2; operand2 = Pop(); Push(Pop() > operand2); return SCRIPT_CONTINUE;}static int CmdLE(void){ int operand2; operand2 = Pop(); Push(Pop() <= operand2); return SCRIPT_CONTINUE;}static int CmdGE(void){ int operand2; operand2 = Pop(); Push(Pop() >= operand2); return SCRIPT_CONTINUE;}static int CmdAssignScriptVar(void){ ACScript->vars[*PCodePtr++] = Pop(); return SCRIPT_CONTINUE;}static int CmdAssignMapVar(void){ MapVars[*PCodePtr++] = Pop(); return SCRIPT_CONTINUE;}static int CmdAssignWorldVar(void){ WorldVars[*PCodePtr++] = Pop(); return SCRIPT_CONTINUE;}static int CmdPushScriptVar(void){ Push(ACScript->vars[*PCodePtr++]); return SCRIPT_CONTINUE;}static int CmdPushMapVar(void){ Push(MapVars[*PCodePtr++]); return SCRIPT_CONTINUE;}static int CmdPushWorldVar(void){ Push(WorldVars[*PCodePtr++]); return SCRIPT_CONTINUE;}static int CmdAddScriptVar(void){ ACScript->vars[*PCodePtr++] += Pop(); return SCRIPT_CONTINUE;}static int CmdAddMapVar(void){ MapVars[*PCodePtr++] += Pop(); return SCRIPT_CONTINUE;}static int CmdAddWorldVar(void){ WorldVars[*PCodePtr++] += Pop(); return SCRIPT_CONTINUE;}static int CmdSubScriptVar(void){ ACScript->vars[*PCodePtr++] -= Pop(); return SCRIPT_CONTINUE;}static int CmdSubMapVar(void){ MapVars[*PCodePtr++] -= Pop(); return SCRIPT_CONTINUE;}static int CmdSubWorldVar(void){ WorldVars[*PCodePtr++] -= Pop(); return SCRIPT_CONTINUE;}static int CmdMulScriptVar(void){ ACScript->vars[*PCodePtr++] *= Pop(); return SCRIPT_CONTINUE;}static int CmdMulMapVar(void){ MapVars[*PCodePtr++] *= Pop(); return SCRIPT_CONTINUE;}static int CmdMulWorldVar(void){ WorldVars[*PCodePtr++] *= Pop(); return SCRIPT_CONTINUE;}static int CmdDivScriptVar(void){ ACScript->vars[*PCodePtr++] /= Pop(); return SCRIPT_CONTINUE;}static int CmdDivMapVar(void){ MapVars[*PCodePtr++] /= Pop(); return SCRIPT_CONTINUE;}static int CmdDivWorldVar(void){ WorldVars[*PCodePtr++] /= Pop(); return SCRIPT_CONTINUE;}static int CmdModScriptVar(void){ ACScript->vars[*PCodePtr++] %= Pop(); return SCRIPT_CONTINUE;}static int CmdModMapVar(void){ MapVars[*PCodePtr++] %= Pop(); return SCRIPT_CONTINUE;}static int CmdModWorldVar(void){ WorldVars[*PCodePtr++] %= Pop(); return SCRIPT_CONTINUE;}static int CmdIncScriptVar(void){ ACScript->vars[*PCodePtr++]++; return SCRIPT_CONTINUE;}static int CmdIncMapVar(void){ MapVars[*PCodePtr++]++; return SCRIPT_CONTINUE;}static int CmdIncWorldVar(void){ WorldVars[*PCodePtr++]++; return SCRIPT_CONTINUE;}static int CmdDecScriptVar(void){ ACScript->vars[*PCodePtr++]--; return SCRIPT_CONTINUE;}static int CmdDecMapVar(void){ MapVars[*PCodePtr++]--; return SCRIPT_CONTINUE;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -