Skip to content

Commit

Permalink
libcommon|Hexen: Cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
danij-deng committed Feb 24, 2015
1 parent 5e1ffc6 commit cab7a81
Show file tree
Hide file tree
Showing 5 changed files with 53 additions and 86 deletions.
4 changes: 2 additions & 2 deletions doomsday/plugins/common/include/acs/system.h
Original file line number Diff line number Diff line change
Expand Up @@ -157,8 +157,8 @@ acs::System &Game_ACScriptSystem();
extern "C" {
#endif

dd_bool Game_ACScriptSystem_StartScript(int scriptNumber, Uri const *mapUri,
byte const args[4], struct mobj_s *activator, Line *line, int side);
dd_bool Game_ACScriptSystem_StartScript(int scriptNumber, byte const args[4],
struct mobj_s *activator, Line *line, int side);

#ifdef __cplusplus
} // extern "C"
Expand Down
20 changes: 7 additions & 13 deletions doomsday/plugins/common/src/acs/system.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -433,20 +433,14 @@ acs::System &Game_ACScriptSystem()

// C wrapper API: --------------------------------------------------------------

dd_bool Game_ACScriptSystem_StartScript(int scriptNumber, uri_s const *mapUri_,
byte const args[], mobj_t *activator, Line *line, int side)
dd_bool Game_ACScriptSystem_StartScript(int scriptNumber, byte const args[],
mobj_t *activator, Line *line, int side)
{
de::Uri const *mapUri = reinterpret_cast<de::Uri const *>(mapUri_);
acs::Script::Args scriptArgs(args, 4);

if(!mapUri || COMMON_GAMESESSION->mapUri() == *mapUri)
if(scriptSys.hasScript(scriptNumber))
{
if(scriptSys.hasScript(scriptNumber))
{
return scriptSys.script(scriptNumber).start(scriptArgs, activator, line, side);
}
return false;
return scriptSys.script(scriptNumber)
.start(acs::Script::Args(args, 4), activator,
line, side);
}

return scriptSys.deferScriptStart(*mapUri, scriptNumber, scriptArgs);
return false;
}
46 changes: 16 additions & 30 deletions doomsday/plugins/hexen/src/p_enemy.c
Original file line number Diff line number Diff line change
Expand Up @@ -4231,7 +4231,7 @@ void C_DECL A_KoraxChase(mobj_t *actor)
P_Teleport(actor, spot->origin[VX], spot->origin[VY], spot->angle, true);
}

Game_ACScriptSystem_StartScript(249, 0/*current-map*/, NULL, actor, NULL, 0);
Game_ACScriptSystem_StartScript(249, NULL, actor, NULL, 0);
actor->special2 = 1; // Don't run again.

return;
Expand Down Expand Up @@ -4305,7 +4305,7 @@ void C_DECL A_KoraxBonePop(mobj_t *actor)
if(mo)
KSpiritInit(mo, actor);

Game_ACScriptSystem_StartScript(255, 0/*current-map*/, NULL, actor, NULL, 0); // Death script.
Game_ACScriptSystem_StartScript(255, NULL, actor, NULL, 0); // Death script.
}

void KSpiritInit(mobj_t* spirit, mobj_t* korax)
Expand Down Expand Up @@ -4450,36 +4450,24 @@ void C_DECL A_KoraxMissile(mobj_t* mo)
/**
* Call action code scripts (250-254).
*/
void C_DECL A_KoraxCommand(mobj_t* mo)
void C_DECL A_KoraxCommand(mobj_t *mob)
{
int numScripts, scriptNumber = -1;
coord_t pos[3];
int numScripts, scriptNumber;
vec3d_t offset, pos;
uint an;

S_StartSound(SFX_KORAX_COMMAND, mo);
S_StartSound(SFX_KORAX_COMMAND, mob);

// Shoot stream of lightning to ceiling.
an = (mo->angle - ANGLE_90) >> ANGLETOFINESHIFT;

pos[VX] = mo->origin[VX];
pos[VY] = mo->origin[VY];
pos[VZ] = mo->origin[VZ];

pos[VX] += KORAX_COMMAND_OFFSET * FIX2FLT(finecosine[an]);
pos[VY] += KORAX_COMMAND_OFFSET * FIX2FLT(finesine[an]);
pos[VZ] += KORAX_COMMAND_HEIGHT;

P_SpawnMobj(MT_KORAX_BOLT, pos, mo->angle, 0);

if(mo->health <= mo->info->spawnHealth / 2)
{
numScripts = 5;
}
else
{
numScripts = 4;
}

an = (mob->angle - ANGLE_90) >> ANGLETOFINESHIFT;
V3d_Set(offset, KORAX_COMMAND_OFFSET * FIX2FLT(finecosine[an]),
KORAX_COMMAND_OFFSET * FIX2FLT(finesine [an]),
KORAX_COMMAND_HEIGHT);
V3d_Sum(pos, mob->origin, offset);
P_SpawnMobj(MT_KORAX_BOLT, pos, mob->angle, 0);

// Start a randomly chosen script.
numScripts = (mob->health <= mob->info->spawnHealth / 2)? 5 : 4;
switch(P_Random() % numScripts)
{
case 0: scriptNumber = 250; break;
Expand All @@ -4488,9 +4476,7 @@ void C_DECL A_KoraxCommand(mobj_t* mo)
case 3: scriptNumber = 253; break;
case 4: scriptNumber = 254; break;
}

DENG_ASSERT(scriptNumber >= 0);
Game_ACScriptSystem_StartScript(scriptNumber, 0/*current-map*/, NULL, mo, NULL, 0);
Game_ACScriptSystem_StartScript(scriptNumber, NULL, mob, NULL, 0);
}

void C_DECL A_KSpiritWeave(mobj_t* mo)
Expand Down
6 changes: 3 additions & 3 deletions doomsday/plugins/hexen/src/p_inter.c
Original file line number Diff line number Diff line change
Expand Up @@ -1444,15 +1444,15 @@ void P_KillMobj(mobj_t *source, mobj_t *target)
target->flags &= ~(MF_SHOOTABLE | MF_FLOAT | MF_SKULLFLY | MF_NOGRAVITY);
target->flags |= MF_CORPSE | MF_DROPOFF;
target->flags2 &= ~MF2_PASSMOBJ;
target->height /= 2*2;
target->height /= 2 * 2;

if((target->flags & MF_COUNTKILL || target->type == MT_ZBELL) &&
target->special)
{
// Initiate monster death actions.
if(target->type == MT_SORCBOSS)
{
Game_ACScriptSystem_StartScript(target->special, 0/*current-map*/,
NULL, target, NULL, 0);
Game_ACScriptSystem_StartScript(target->special, NULL, target, NULL, 0);
}
else
{
Expand Down
63 changes: 25 additions & 38 deletions doomsday/plugins/hexen/src/p_spec.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -420,10 +420,30 @@ dd_bool P_ExecuteLineSpecial(int special, byte args[5], Line *line, int side, mo
}
break;

case 83: // ACS_LockedExecute

// Only players can operate locks.
if(!mo->player) break;

// Is a lock in effect?
if(int lock = args[4])
{
// Does the player possess the necessary key(s)?
if(!(mo->player->keys & (1 << (lock - 1))))
{
auto const msg = String("You need the ") + String(GET_TXT(TextKeyMessages[lock - 1]));
P_SetMessage(mo->player, 0, msg.toUtf8().constData());
S_StartSound(SFX_DOOR_LOCKED, mo);
break;
}
}

// Intentional fall-through.

case 80: /* ACS_Execute */ {
int scriptNumber = args[0];
de::Uri mapUri = getMapUriForWarpNumber(args[1]);
acs::Script::Args scriptArgs(&args[2], 3);
int const scriptNumber = args[0];
de::Uri const mapUri = getMapUriForWarpNumber(args[1]);
acs::Script::Args const scriptArgs(&args[2], 3);
if(COMMON_GAMESESSION->mapUri() == mapUri)
{
if(acScriptSys().hasScript(scriptNumber))
Expand All @@ -438,54 +458,21 @@ dd_bool P_ExecuteLineSpecial(int special, byte args[5], Line *line, int side, mo
break; }

case 81: /* ACS_Suspend */ {
int scriptNumber = args[0];
//de::Uri mapUri = getMapUriForWarpNumber(args[1]);
int const scriptNumber = args[0];
if(acScriptSys().hasScript(scriptNumber))
{
success = acScriptSys().script(scriptNumber).suspend();
}
break; }

case 82: /* ACS_Terminate */ {
int scriptNumber = args[0];
//de::Uri mapUri = getMapUriForWarpNumber(args[1]);
int const scriptNumber = args[0];
if(acScriptSys().hasScript(scriptNumber))
{
success = acScriptSys().script(scriptNumber).terminate();
}
break; }

case 83: /* ACS_LockedExecute */ {
if(!mo->player) break;

if(int lock = args[4])
{
if(!(mo->player->keys & (1 << (lock - 1))))
{
char LockedBuffer[80];
sprintf(LockedBuffer, "YOU NEED THE %s\n", GET_TXT(TextKeyMessages[lock - 1]));
P_SetMessage(mo->player, 0, LockedBuffer);
S_StartSound(SFX_DOOR_LOCKED, mo);
break;
}
}

int scriptNumber = args[0];
de::Uri mapUri = getMapUriForWarpNumber(args[1]);
acs::Script::Args scriptArgs(args, 4);
if(COMMON_GAMESESSION->mapUri() == mapUri)
{
if(acScriptSys().hasScript(scriptNumber))
{
success = acScriptSys().script(scriptNumber).start(scriptArgs, mo, line, side);
}
}
else
{
success = acScriptSys().deferScriptStart(mapUri, scriptNumber, scriptArgs);
}
break; }

case 90: // Poly Rotate Left Override
success = EV_RotatePoly(line, args, 1, true);
break;
Expand Down

0 comments on commit cab7a81

Please sign in to comment.