From 2d01e3f045c4dd610bd00afeee56f18a8cfea037 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Tue, 5 Jul 2016 20:39:45 +0100 Subject: [PATCH 1/8] First hardcoded work for our good old friend Boss number 5. (Look, I know I shouldn't be hardcoding things at this stage... but things broke terribly when I tried to convert A_BrakLobShot to Lua, so.) --- src/dehacked.c | 1 + src/info.h | 1 + src/p_enemy.c | 94 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+) diff --git a/src/dehacked.c b/src/dehacked.c index a536b4e54..78c8b8d90 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1846,6 +1846,7 @@ static actionpointer_t actionpointers[] = {{A_BrakLobShot}, "A_BRAKLOBSHOT"}, {{A_NapalmScatter}, "A_NAPALMSCATTER"}, {{A_SpawnFreshCopy}, "A_SPAWNFRESHCOPY"}, + {{A_Boss5Jump}, "A_BOSS5JUMP"}, {{NULL}, "NONE"}, diff --git a/src/info.h b/src/info.h index 46fdde46b..7fd5f7edf 100644 --- a/src/info.h +++ b/src/info.h @@ -208,6 +208,7 @@ void A_BrakFireShot(); void A_BrakLobShot(); void A_NapalmScatter(); void A_SpawnFreshCopy(); +void A_Boss5Jump(); // ratio of states to sprites to mobj types is roughly 6 : 1 : 1 #define NUMMOBJFREESLOTS 256 diff --git a/src/p_enemy.c b/src/p_enemy.c index 4e11dc494..b780f699e 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -236,6 +236,8 @@ void A_BrakFireShot(mobj_t *actor); void A_BrakLobShot(mobj_t *actor); void A_NapalmScatter(mobj_t *actor); void A_SpawnFreshCopy(mobj_t *actor); +// +void A_Boss5Jump(mobj_t *actor); // // ENEMY THINKING @@ -10143,3 +10145,95 @@ void A_SpawnFreshCopy(mobj_t *actor) if (newObject->info->seesound) S_StartSound(newObject, newObject->info->seesound); } + +// Function: A_Boss5Jump +// +// Description: Makes an object jump in an arc to land on their tracer precicely. +// Adapted from A_BrakLobShot, see there for explanation. +// +// var1 = unused +// var2 = unused +// +void A_Boss5Jump(mobj_t *actor) +{ + fixed_t v; // Velocity to jump at + fixed_t a1, a2, aToUse; // Velocity squared + fixed_t g; // Gravity + fixed_t x; // Horizontal difference + INT32 x_int; // x! But in integer form! + fixed_t y; // Vertical difference (yes that's normally z in SRB2 shut up) + INT32 y_int; // y! But in integer form! + INT32 intHypotenuse; // x^2 + y^2. Frequently overflows fixed point, hence why we need integers proper. + fixed_t fixedHypotenuse; // However, we can work around that and still get a fixed-point number. + angle_t theta; // Angle of attack + // INT32 locvar1 = var1; + // INT32 locvar2 = var2; + +#ifdef HAVE_BLUA + if (LUA_CallAction("A_Boss5Jump", actor)) + return; +#endif + + if (!actor->tracer) + return; // Don't even bother if we've got nothing to aim at. + + // Look up actor's current gravity situation + if (actor->subsector->sector->gravity) + g = FixedMul(gravity,(FixedDiv(*actor->subsector->sector->gravity>>FRACBITS, 1000))); + else + g = gravity; + + // Look up distance between actor and its tracer + x = P_AproxDistance(actor->tracer->x - actor->x, actor->tracer->y - actor->y); + // Look up height difference between actor and its tracer + y = actor->tracer->z - actor->z; + + // Get x^2 + y^2. Have to do it in a roundabout manner, because this overflows fixed_t way too easily otherwise. + x_int = x>>FRACBITS; + y_int = y>>FRACBITS; + intHypotenuse = (x_int*x_int) + (y_int*y_int); + fixedHypotenuse = FixedSqrt(intHypotenuse) *256; + + // a = g(y+/-sqrt(x^2+y^2)). a1 can be +, a2 can be -. + a1 = FixedMul(g,y+fixedHypotenuse); + a2 = FixedMul(g,y-fixedHypotenuse); + + // Determine which one isn't actually an imaginary number (or the smaller of the two, if both are real), and use that for v. + if (a1 < 0 || a2 < 0) + { + if (a1 < 0 && a2 < 0) + { + //Somehow, v^2 is negative in both cases. v is therefore imaginary and something is horribly wrong. Abort! + return; + } + // Just find which one's NOT negative, and use that + aToUse = max(a1,a2); + } + else + { + // Both are positive; use whichever's smaller so it can decay faster + aToUse = min(a1,a2); + } + v = FixedSqrt(aToUse); + // Okay, so we know the velocity. Let's actually find theta. + // We can cut the "+/- sqrt" part out entirely, since v was calculated specifically for it to equal zero. So: + //theta = tantoangle[FixedDiv(aToUse,FixedMul(g,x)) >> DBITS]; + theta = tantoangle[SlopeDiv(aToUse,FixedMul(g,x))]; + + // Okay, complicated math done. Let's make this object jump already. + A_FaceTracer(actor); + if (actor->info->activesound) + S_StartSound(actor, actor->info->activesound); + + if (actor->eflags & MFE_VERTICALFLIP) + actor->z--; + else + actor->z++; + + // Horizontal axes first. First parameter is initial horizontal impulse, second is to correct its angle. + actor->momx = FixedMul(FixedMul(v, FINECOSINE(theta >> ANGLETOFINESHIFT)), FINECOSINE(actor->angle >> ANGLETOFINESHIFT)); + actor->momy = FixedMul(FixedMul(v, FINECOSINE(theta >> ANGLETOFINESHIFT)), FINESINE(actor->angle >> ANGLETOFINESHIFT)); + // Then the vertical axis. No angle-correction needed here. + actor->momz = FixedMul(v, FINESINE(theta >> ANGLETOFINESHIFT)); + // I hope that's all that's needed, ugh +} \ No newline at end of file From 899123c58a186045f6738d742ef5084225c36e10 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Tue, 5 Jul 2016 23:20:59 +0100 Subject: [PATCH 2/8] Player doesn't go into super anims if they're not super, silly. (This COULD be backported to .16, but I'm not gonna. Boss 5 is taking up all of my attention right now.) --- src/p_inter.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/p_inter.c b/src/p_inter.c index 9d6230cb2..ebdf0b272 100644 --- a/src/p_inter.c +++ b/src/p_inter.c @@ -2704,7 +2704,7 @@ static inline void P_SuperDamage(player_t *player, mobj_t *inflictor, mobj_t *so P_InstaThrust(player->mo, ang, fallbackspeed); - if (player->charflags & SF_SUPERANIMS) + if ((player->charflags & SF_SUPERANIMS) && player->powers[pw_super]) P_SetPlayerMobjState(player->mo, S_PLAY_SUPER_STUN); else P_SetPlayerMobjState(player->mo, player->mo->info->painstate); From b91dc51d6ff33b732e8708a4a0c0feddbdd3dcda Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sat, 8 Jul 2017 11:41:20 +0100 Subject: [PATCH 3/8] * Lua P_MobjFromMobj. * Make A_Repeat only set extravalue2 if it has a var1. * Improve sound caption. * Make activesound state-controllable. --- src/lua_baselib.c | 18 ++++++++++++++++++ src/p_enemy.c | 4 +--- src/sounds.c | 2 +- 3 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 93f2979fa..43ca84a6e 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -422,6 +422,23 @@ static int lib_pSpawnMobj(lua_State *L) return 1; } +static int lib_pSpawnMobjFromMobj(lua_State *L) +{ + mobj_t *actor = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); + fixed_t x = luaL_checkfixed(L, 2); + fixed_t y = luaL_checkfixed(L, 3); + fixed_t z = luaL_checkfixed(L, 4); + mobjtype_t type = luaL_checkinteger(L, 5); + NOHUD + INLEVEL + if (!actor) + return LUA_ErrInvalid(L, "mobj_t"); + if (type >= NUMMOBJTYPES) + return luaL_error(L, "mobj type %d out of range (0 - %d)", type, NUMMOBJTYPES-1); + LUA_PushUserdata(L, P_SpawnMobjFromMobj(actor, x, y, z, type), META_MOBJ); + return 1; +} + static int lib_pRemoveMobj(lua_State *L) { mobj_t *th = *((mobj_t **)luaL_checkudata(L, 1, META_MOBJ)); @@ -2384,6 +2401,7 @@ static luaL_Reg lib[] = { // p_mobj // don't add P_SetMobjState or P_SetPlayerMobjState, use "mobj.state = S_NEWSTATE" instead. {"P_SpawnMobj",lib_pSpawnMobj}, + {"P_SpawnMobjFromMobj",lib_pSpawnMobjFromMobj}, {"P_RemoveMobj",lib_pRemoveMobj}, {"P_IsValidSprite2", lib_pIsValidSprite2}, {"P_SpawnLockOn", lib_pSpawnLockOn}, diff --git a/src/p_enemy.c b/src/p_enemy.c index 450e4883d..e1d5744ae 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -9505,7 +9505,7 @@ void A_Repeat(mobj_t *actor) return; #endif - if ((!(actor->extravalue2)) || actor->extravalue2 > locvar1) + if (locvar1 && (!actor->extravalue2 || actor->extravalue2 > locvar1)) actor->extravalue2 = locvar1; if (--actor->extravalue2 > 0) @@ -10893,8 +10893,6 @@ void A_Boss5Jump(mobj_t *actor) // Okay, complicated math done. Let's make this object jump already. A_FaceTracer(actor); - if (actor->info->activesound) - S_StartSound(actor, actor->info->activesound); if (actor->eflags & MFE_VERTICALFLIP) actor->z--; diff --git a/src/sounds.c b/src/sounds.c index 2f5f6acf0..36dc964e3 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -299,7 +299,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"s3k49", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Falling rock"}, {"s3k4a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Grab"}, {"s3k4b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Water splash"}, - {"s3k4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Heavy landing"}, + {"s3k4c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Heavy hit"}, {"s3k4d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Firing bullet"}, {"s3k4e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bomb explosion"}, {"s3k4f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Flamethrower"}, From b5688162177519a041cb43e231ad45f106d09c94 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Tue, 11 Jul 2017 12:55:24 +0100 Subject: [PATCH 4/8] * Modified A_RandomState. If var2 is supplied, it picks between var1, var2 and nextstate - otherwise, it picks between var1 and nextstate. * Changed a caption. --- src/info.c | 4 ++-- src/p_enemy.c | 20 +++++++++++++++++--- src/sounds.c | 2 +- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/info.c b/src/info.c index 9e779acb0..2fa190d4e 100644 --- a/src/info.c +++ b/src/info.c @@ -1201,7 +1201,7 @@ state_t states[NUMSTATES] = {SPR_BRAK, 4, 8, {A_BrakChase}, 3, 0, S_CYBRAKDEMON_WALK5}, // S_CYBRAKDEMON_WALK4 {SPR_BRAK, 5, 8, {A_BrakChase}, 3, 0, S_CYBRAKDEMON_WALK6}, // S_CYBRAKDEMON_WALK5 {SPR_BRAK, 6, 8, {A_BrakChase}, 3, sfx_bestp2, S_CYBRAKDEMON_WALK1}, // S_CYBRAKDEMON_WALK6 - {SPR_BRAK, 7, 6, {A_RandomState}, S_CYBRAKDEMON_MISSILE_ATTACK1, S_CYBRAKDEMON_FLAME_ATTACK1, S_CYBRAKDEMON_MISSILE_ATTACK1}, // S_CYBRAKDEMON_CHOOSE_ATTACK1 + {SPR_BRAK, 7, 6, {A_RandomState}, S_CYBRAKDEMON_MISSILE_ATTACK1, 0, S_CYBRAKDEMON_FLAME_ATTACK1}, // S_CYBRAKDEMON_CHOOSE_ATTACK1 {SPR_BRAK, 7, 6, {A_FaceTarget}, 0, 0, S_CYBRAKDEMON_MISSILE_ATTACK2}, // S_CYBRAKDEMON_MISSILE_ATTACK1 // Aim {SPR_BRAK, 26 + FF_FULLBRIGHT, 12, {A_BrakFireShot}, MT_CYBRAKDEMON_MISSILE, 128, S_CYBRAKDEMON_MISSILE_ATTACK3}, // S_CYBRAKDEMON_MISSILE_ATTACK2 // Fire {SPR_BRAK, 7, 12, {A_FaceTarget}, 0, 0, S_CYBRAKDEMON_MISSILE_ATTACK4}, // S_CYBRAKDEMON_MISSILE_ATTACK3 // Aim @@ -1212,7 +1212,7 @@ state_t states[NUMSTATES] = {SPR_BRAK, 7, 6, {A_FaceTarget}, 0, 0, S_CYBRAKDEMON_FLAME_ATTACK3}, // S_CYBRAKDEMON_FLAME_ATTACK2 // Aim {SPR_BRAK, 26 + FF_FULLBRIGHT, 2, {A_BrakFireShot}, MT_CYBRAKDEMON_FLAMESHOT, 128, S_CYBRAKDEMON_FLAME_ATTACK4}, // S_CYBRAKDEMON_FLAME_ATTACK3 // Fire {SPR_BRAK, 7, 1, {A_Repeat}, 30, S_CYBRAKDEMON_FLAME_ATTACK3, S_CYBRAKDEMON_FINISH_ATTACK1}, // S_CYBRAKDEMON_FLAME_ATTACK4 // Loop - {SPR_BRAK, 0, 6, {A_RandomState}, S_CYBRAKDEMON_VILE_ATTACK1, S_CYBRAKDEMON_NAPALM_ATTACK1, S_CYBRAKDEMON_MISSILE_ATTACK1}, // S_CYBRAKDEMON_CHOOSE_ATTACK2 + {SPR_BRAK, 0, 6, {A_RandomState}, S_CYBRAKDEMON_VILE_ATTACK1, 0, S_CYBRAKDEMON_NAPALM_ATTACK1}, // S_CYBRAKDEMON_CHOOSE_ATTACK2 {SPR_BRAK, 20, 0, {A_LinedefExecute}, LE_BRAKVILEATACK, 0, S_CYBRAKDEMON_VILE_ATTACK2}, // S_CYBRAKDEMON_VILE_ATTACK1 {SPR_BRAK, 20, 24, {A_VileTarget}, MT_CYBRAKDEMON_TARGET_RETICULE, 1, S_CYBRAKDEMON_VILE_ATTACK3}, // S_CYBRAKDEMON_VILE_ATTACK2 {SPR_BRAK, 19, 8, {A_FaceTarget}, 0, 0, S_CYBRAKDEMON_VILE_ATTACK4}, // S_CYBRAKDEMON_VILE_ATTACK3 diff --git a/src/p_enemy.c b/src/p_enemy.c index e1d5744ae..ca839ff51 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8035,21 +8035,35 @@ void A_BossJetFume(mobj_t *actor) // Function: A_RandomState // -// Description: Chooses one of the two state numbers supplied randomly. +// Description: Chooses one of either two or three state numbers supplied randomly. // +// nextstate = state number 0 // var1 = state number 1 -// var2 = state number 2 +// var2 = state number 2 (can be ommitted for binary chance) // void A_RandomState(mobj_t *actor) { INT32 locvar1 = var1; INT32 locvar2 = var2; + UINT8 rand; #ifdef HAVE_BLUA if (LUA_CallAction("A_RandomState", actor)) return; #endif - P_SetMobjState(actor, P_RandomChance(FRACUNIT/2) ? locvar1 : locvar2); + rand = (var2 ? P_RandomKey(3) : P_RandomKey(2)); + switch (rand) + { + case 0: + P_SetMobjState(actor, actor->state->nextstate); + return; + case 1: + P_SetMobjState(actor, locvar1); + return; + case 2: + P_SetMobjState(actor, locvar2); + return; + } } // Function: A_RandomStateRange diff --git a/src/sounds.c b/src/sounds.c index 36dc964e3..2d56bda18 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -316,7 +316,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"s3k5a", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Aiming"}, {"s3k5b", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Menu beep"}, {"s3k5c", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Electric spark"}, - {"s3k5d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Bouncing missile"}, + {"s3k5d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Heavy hit"}, {"s3k5e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Firing laser"}, {"s3k5f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Crusher stomp"}, {"s3k60", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Flying away"}, From 826fad4c7871d316cc816bb6e8685f0aba08b06b Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Fri, 14 Jul 2017 23:32:27 +0100 Subject: [PATCH 5/8] More caption change. --- src/sounds.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sounds.c b/src/sounds.c index 2d56bda18..9d2ebb04e 100644 --- a/src/sounds.c +++ b/src/sounds.c @@ -367,7 +367,7 @@ sfxinfo_t S_sfx[NUMSFX] = {"s3k8d", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, {"s3k8e", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, {"s3k8f", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Opening"}, - {"s3k90", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Closing"}, + {"s3k90", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Impact"}, {"s3k91", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Closed"}, {"s3k92", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Ghost"}, {"s3k93", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Rebuilding"}, From f04c5292c7a11fdef05f60244a3fdb29e56b9b3b Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sat, 15 Jul 2017 22:38:43 +0100 Subject: [PATCH 6/8] Revert pointless change to A_RandomState. --- src/p_enemy.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/p_enemy.c b/src/p_enemy.c index ca839ff51..d14080bdc 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8035,7 +8035,7 @@ void A_BossJetFume(mobj_t *actor) // Function: A_RandomState // -// Description: Chooses one of either two or three state numbers supplied randomly. +// Description: Chooses one of the two state numbers supplied randomly. // // nextstate = state number 0 // var1 = state number 1 @@ -8045,25 +8045,12 @@ void A_RandomState(mobj_t *actor) { INT32 locvar1 = var1; INT32 locvar2 = var2; - UINT8 rand; #ifdef HAVE_BLUA if (LUA_CallAction("A_RandomState", actor)) return; #endif - rand = (var2 ? P_RandomKey(3) : P_RandomKey(2)); - switch (rand) - { - case 0: - P_SetMobjState(actor, actor->state->nextstate); - return; - case 1: - P_SetMobjState(actor, locvar1); - return; - case 2: - P_SetMobjState(actor, locvar2); - return; - } + P_SetMobjState(actor, P_RandomChance(FRACUNIT/2) ? locvar1 : locvar2); } // Function: A_RandomStateRange From d5365a26e1fb311a0ba18709d55aa7052e6cf714 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sat, 15 Jul 2017 22:42:39 +0100 Subject: [PATCH 7/8] ...and revert brak, too --- src/dehacked.c | 2 +- src/info.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 2c320978d..a970fea6a 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -1917,7 +1917,7 @@ static actionpointer_t actionpointers[] = {{A_FlickyHeightCheck}, "A_FLICKYHEIGHTCHECK"}, {{A_FlickyFlutter}, "A_FLICKYFLUTTER"}, {{A_FlameParticle}, "A_FLAMEPARTICLE"}, - {{A_Boss5Jump}, "A_BOSS5JUMP"}, + {{A_Boss5Jump}, "A_BOSS5JUMP"}, {{NULL}, "NONE"}, diff --git a/src/info.c b/src/info.c index 2fa190d4e..9e779acb0 100644 --- a/src/info.c +++ b/src/info.c @@ -1201,7 +1201,7 @@ state_t states[NUMSTATES] = {SPR_BRAK, 4, 8, {A_BrakChase}, 3, 0, S_CYBRAKDEMON_WALK5}, // S_CYBRAKDEMON_WALK4 {SPR_BRAK, 5, 8, {A_BrakChase}, 3, 0, S_CYBRAKDEMON_WALK6}, // S_CYBRAKDEMON_WALK5 {SPR_BRAK, 6, 8, {A_BrakChase}, 3, sfx_bestp2, S_CYBRAKDEMON_WALK1}, // S_CYBRAKDEMON_WALK6 - {SPR_BRAK, 7, 6, {A_RandomState}, S_CYBRAKDEMON_MISSILE_ATTACK1, 0, S_CYBRAKDEMON_FLAME_ATTACK1}, // S_CYBRAKDEMON_CHOOSE_ATTACK1 + {SPR_BRAK, 7, 6, {A_RandomState}, S_CYBRAKDEMON_MISSILE_ATTACK1, S_CYBRAKDEMON_FLAME_ATTACK1, S_CYBRAKDEMON_MISSILE_ATTACK1}, // S_CYBRAKDEMON_CHOOSE_ATTACK1 {SPR_BRAK, 7, 6, {A_FaceTarget}, 0, 0, S_CYBRAKDEMON_MISSILE_ATTACK2}, // S_CYBRAKDEMON_MISSILE_ATTACK1 // Aim {SPR_BRAK, 26 + FF_FULLBRIGHT, 12, {A_BrakFireShot}, MT_CYBRAKDEMON_MISSILE, 128, S_CYBRAKDEMON_MISSILE_ATTACK3}, // S_CYBRAKDEMON_MISSILE_ATTACK2 // Fire {SPR_BRAK, 7, 12, {A_FaceTarget}, 0, 0, S_CYBRAKDEMON_MISSILE_ATTACK4}, // S_CYBRAKDEMON_MISSILE_ATTACK3 // Aim @@ -1212,7 +1212,7 @@ state_t states[NUMSTATES] = {SPR_BRAK, 7, 6, {A_FaceTarget}, 0, 0, S_CYBRAKDEMON_FLAME_ATTACK3}, // S_CYBRAKDEMON_FLAME_ATTACK2 // Aim {SPR_BRAK, 26 + FF_FULLBRIGHT, 2, {A_BrakFireShot}, MT_CYBRAKDEMON_FLAMESHOT, 128, S_CYBRAKDEMON_FLAME_ATTACK4}, // S_CYBRAKDEMON_FLAME_ATTACK3 // Fire {SPR_BRAK, 7, 1, {A_Repeat}, 30, S_CYBRAKDEMON_FLAME_ATTACK3, S_CYBRAKDEMON_FINISH_ATTACK1}, // S_CYBRAKDEMON_FLAME_ATTACK4 // Loop - {SPR_BRAK, 0, 6, {A_RandomState}, S_CYBRAKDEMON_VILE_ATTACK1, 0, S_CYBRAKDEMON_NAPALM_ATTACK1}, // S_CYBRAKDEMON_CHOOSE_ATTACK2 + {SPR_BRAK, 0, 6, {A_RandomState}, S_CYBRAKDEMON_VILE_ATTACK1, S_CYBRAKDEMON_NAPALM_ATTACK1, S_CYBRAKDEMON_MISSILE_ATTACK1}, // S_CYBRAKDEMON_CHOOSE_ATTACK2 {SPR_BRAK, 20, 0, {A_LinedefExecute}, LE_BRAKVILEATACK, 0, S_CYBRAKDEMON_VILE_ATTACK2}, // S_CYBRAKDEMON_VILE_ATTACK1 {SPR_BRAK, 20, 24, {A_VileTarget}, MT_CYBRAKDEMON_TARGET_RETICULE, 1, S_CYBRAKDEMON_VILE_ATTACK3}, // S_CYBRAKDEMON_VILE_ATTACK2 {SPR_BRAK, 19, 8, {A_FaceTarget}, 0, 0, S_CYBRAKDEMON_VILE_ATTACK4}, // S_CYBRAKDEMON_VILE_ATTACK3 From 4728c824a026a3b71cdc91c33e5638f0a2f766a3 Mon Sep 17 00:00:00 2001 From: toasterbabe Date: Sun, 16 Jul 2017 01:01:13 +0100 Subject: [PATCH 8/8] Comment correction. --- src/p_enemy.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/p_enemy.c b/src/p_enemy.c index d14080bdc..e1d5744ae 100644 --- a/src/p_enemy.c +++ b/src/p_enemy.c @@ -8037,9 +8037,8 @@ void A_BossJetFume(mobj_t *actor) // // Description: Chooses one of the two state numbers supplied randomly. // -// nextstate = state number 0 // var1 = state number 1 -// var2 = state number 2 (can be ommitted for binary chance) +// var2 = state number 2 // void A_RandomState(mobj_t *actor) {