⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 p_acs.c

📁 制作游戏 魔法师传奇 源代码设计 MOFASHICHUANQI 经典老游戏
💻 C
📖 第 1 页 / 共 3 页
字号:
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 + -