* Castlebot Facestabbers.

* Facestabber statues, of both the suspicious and non-suspicious kind.
* New object type for the end of grabbable chains.
* I moved my compilation .bat file to my Releases folder, so it should .gitignore .bat's.
* Random extra stuff.
This commit is contained in:
toasterbabe 2018-05-24 01:40:57 +01:00
parent dbcd259bd6
commit cb86ed7721
9 changed files with 11846 additions and 11424 deletions

View file

@ -1,3 +1,4 @@
*.exe *.exe
*.mo *.mo
r_opengl.dll r_opengl.dll
*.bat

View file

@ -1628,6 +1628,10 @@ static actionpointer_t actionpointers[] =
{{A_Look}, "A_LOOK"}, {{A_Look}, "A_LOOK"},
{{A_Chase}, "A_CHASE"}, {{A_Chase}, "A_CHASE"},
{{A_FaceStabChase}, "A_FACESTABCHASE"}, {{A_FaceStabChase}, "A_FACESTABCHASE"},
{{A_FaceStabRev}, "A_FACESTABREV"},
{{A_FaceStabHurl}, "A_FACESTABHURL"},
{{A_FaceStabMiss}, "A_FACESTABMISS"},
{{A_StatueBurst}, "A_STATUEBURST"},
{{A_FaceTarget}, "A_FACETARGET"}, {{A_FaceTarget}, "A_FACETARGET"},
{{A_FaceTracer}, "A_FACETRACER"}, {{A_FaceTracer}, "A_FACETRACER"},
{{A_Scream}, "A_SCREAM"}, {{A_Scream}, "A_SCREAM"},
@ -3774,6 +3778,7 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_FACESTABBER_DIE1", "S_FACESTABBER_DIE1",
"S_FACESTABBER_DIE2", "S_FACESTABBER_DIE2",
"S_FACESTABBER_DIE3", "S_FACESTABBER_DIE3",
"S_FACESTABBERSPEAR",
// Egg Guard // Egg Guard
"S_EGGGUARD_STND", "S_EGGGUARD_STND",
@ -4830,6 +4835,8 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_BIGMACECHAIN", "S_BIGMACECHAIN",
"S_SMALLMACE", "S_SMALLMACE",
"S_BIGMACE", "S_BIGMACE",
"S_SMALLGRABCHAIN",
"S_BIGGRABCHAIN",
// Yellow spring on a ball // Yellow spring on a ball
"S_YELLOWSPRINGBALL", "S_YELLOWSPRINGBALL",
@ -4894,6 +4901,10 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
"S_WAVINGFLAG", "S_WAVINGFLAG",
"S_WAVINGFLAGSEG", "S_WAVINGFLAGSEG",
"S_CRAWLASTATUE", "S_CRAWLASTATUE",
"S_FACESTABBERSTATUE",
"S_SUSPICIOUSFACESTABBERSTATUE_WAIT",
"S_SUSPICIOUSFACESTABBERSTATUE_BURST1",
"S_SUSPICIOUSFACESTABBERSTATUE_BURST2",
// Big Tumbleweed // Big Tumbleweed
"S_BIGTUMBLEWEED", "S_BIGTUMBLEWEED",
@ -6235,7 +6246,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_POINTY", // Pointy "MT_POINTY", // Pointy
"MT_POINTYBALL", // Pointy Ball "MT_POINTYBALL", // Pointy Ball
"MT_ROBOHOOD", // Robo-Hood "MT_ROBOHOOD", // Robo-Hood
"MT_FACESTABBER", // CastleBot FaceStabber "MT_FACESTABBER", // Castlebot Facestabber
"MT_FACESTABBERSPEAR", // Castlebot Facestabber spear aura
"MT_EGGGUARD", // Egg Guard "MT_EGGGUARD", // Egg Guard
"MT_EGGSHIELD", // Egg Guard's shield "MT_EGGSHIELD", // Egg Guard's shield
"MT_GSNAPPER", // Green Snapper "MT_GSNAPPER", // Green Snapper
@ -6491,6 +6503,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_BIGMACECHAIN", // Big Mace Chain "MT_BIGMACECHAIN", // Big Mace Chain
"MT_SMALLMACE", // Small Mace "MT_SMALLMACE", // Small Mace
"MT_BIGMACE", // Big Mace "MT_BIGMACE", // Big Mace
"MT_SMALLGRABCHAIN", // Small Grab Chain
"MT_BIGGRABCHAIN", // Big Grab Chain
"MT_YELLOWSPRINGBALL", // Yellow spring on a ball "MT_YELLOWSPRINGBALL", // Yellow spring on a ball
"MT_REDSPRINGBALL", // Red spring on a ball "MT_REDSPRINGBALL", // Red spring on a ball
"MT_SMALLFIREBAR", // Small Firebar "MT_SMALLFIREBAR", // Small Firebar
@ -6508,6 +6522,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
"MT_WAVINGFLAG", // Waving flag "MT_WAVINGFLAG", // Waving flag
"MT_WAVINGFLAGSEG", // Waving flag segment "MT_WAVINGFLAGSEG", // Waving flag segment
"MT_CRAWLASTATUE", // Crawla statue "MT_CRAWLASTATUE", // Crawla statue
"MT_FACESTABBERSTATUE", // Facestabber statue
"MT_SUSPICIOUSFACESTABBERSTATUE", // :eggthinking:
// Arid Canyon Scenery // Arid Canyon Scenery
"MT_BIGTUMBLEWEED", "MT_BIGTUMBLEWEED",

View file

@ -168,6 +168,7 @@ light_t *t_lspr[NUMSPRITES] =
&lspr[NOLIGHT], // SPR_PNTY &lspr[NOLIGHT], // SPR_PNTY
&lspr[NOLIGHT], // SPR_ARCH &lspr[NOLIGHT], // SPR_ARCH
&lspr[NOLIGHT], // SPR_CBFS &lspr[NOLIGHT], // SPR_CBFS
&lspr[JETLIGHT_L], // SPR_STAB
&lspr[NOLIGHT], // SPR_SPSH &lspr[NOLIGHT], // SPR_SPSH
&lspr[NOLIGHT], // SPR_ESHI &lspr[NOLIGHT], // SPR_ESHI
&lspr[NOLIGHT], // SPR_GSNP &lspr[NOLIGHT], // SPR_GSNP
@ -332,6 +333,7 @@ light_t *t_lspr[NUMSPRITES] =
&lspr[REDBALL_L], // SPR_CTRC &lspr[REDBALL_L], // SPR_CTRC
&lspr[NOLIGHT], // SPR_CFLG &lspr[NOLIGHT], // SPR_CFLG
&lspr[NOLIGHT], // SPR_CSTA &lspr[NOLIGHT], // SPR_CSTA
&lspr[NOLIGHT], // SPR_CBBS
// Arid Canyon Scenery // Arid Canyon Scenery
&lspr[NOLIGHT], // SPR_BTBL &lspr[NOLIGHT], // SPR_BTBL

View file

@ -56,6 +56,7 @@ char sprnames[NUMSPRITES + 1][5] =
"PNTY", // Pointy "PNTY", // Pointy
"ARCH", // Robo-Hood "ARCH", // Robo-Hood
"CBFS", // Castlebot Facestabber "CBFS", // Castlebot Facestabber
"STAB", // Castlebot Facestabber spear aura
"SPSH", // Egg Guard "SPSH", // Egg Guard
"ESHI", // Egg Guard's shield "ESHI", // Egg Guard's shield
"GSNP", // Green Snapper "GSNP", // Green Snapper
@ -226,6 +227,7 @@ char sprnames[NUMSPRITES + 1][5] =
"CTRC", // Fire torch "CTRC", // Fire torch
"CFLG", // Waving flag/segment "CFLG", // Waving flag/segment
"CSTA", // Crawla statue "CSTA", // Crawla statue
"CBBS", // Facestabber statue
// Arid Canyon Scenery // Arid Canyon Scenery
"BTBL", // Big tumbleweed "BTBL", // Big tumbleweed
@ -986,21 +988,23 @@ state_t states[NUMSTATES] =
{SPR_ARCH, 1, 1, {A_HoodThink}, 0, 0, S_ROBOHOOD_JUMP2}, // S_ROBOHOOD_JUMP2 {SPR_ARCH, 1, 1, {A_HoodThink}, 0, 0, S_ROBOHOOD_JUMP2}, // S_ROBOHOOD_JUMP2
{SPR_ARCH, 0, 1, {A_HoodThink}, 0, 0, S_ROBOHOOD_FALL}, // S_ROBOHOOD_FALL {SPR_ARCH, 0, 1, {A_HoodThink}, 0, 0, S_ROBOHOOD_FALL}, // S_ROBOHOOD_FALL
// CastleBot FaceStabber // Castlebot Facestabber
{SPR_CBFS, 0, 1, {A_FaceStabChase}, 0, 0, S_FACESTABBER_STND2}, // S_FACESTABBER_STND1 {SPR_CBFS, 0, 1, {A_Chase}, 0, 0, S_FACESTABBER_STND2}, // S_FACESTABBER_STND1
{SPR_CBFS, 1, 1, {A_FaceStabChase}, 0, 0, S_FACESTABBER_STND3}, // S_FACESTABBER_STND2 {SPR_CBFS, 1, 1, {A_Chase}, 0, 0, S_FACESTABBER_STND3}, // S_FACESTABBER_STND2
{SPR_CBFS, 2, 1, {A_FaceStabChase}, 0, 0, S_FACESTABBER_STND4}, // S_FACESTABBER_STND3 {SPR_CBFS, 2, 1, {A_Chase}, 0, 0, S_FACESTABBER_STND4}, // S_FACESTABBER_STND3
{SPR_CBFS, 3, 1, {A_FaceStabChase}, 0, 0, S_FACESTABBER_STND5}, // S_FACESTABBER_STND4 {SPR_CBFS, 3, 1, {A_Chase}, 0, 0, S_FACESTABBER_STND5}, // S_FACESTABBER_STND4
{SPR_CBFS, 4, 1, {A_FaceStabChase}, 0, 0, S_FACESTABBER_STND6}, // S_FACESTABBER_STND5 {SPR_CBFS, 4, 1, {A_Chase}, 0, 0, S_FACESTABBER_STND6}, // S_FACESTABBER_STND5
{SPR_CBFS, 5, 1, {A_FaceStabChase}, 0, 0, S_FACESTABBER_STND1}, // S_FACESTABBER_STND6 {SPR_CBFS, 5, 1, {A_Chase}, 0, 0, S_FACESTABBER_STND1}, // S_FACESTABBER_STND6
{SPR_CBFS, 6, 14, {A_PlayActiveSound}, 0, 0, S_FACESTABBER_CHARGE2}, // S_FACESTABBER_CHARGE1 {SPR_CBFS, 0, 1, {A_FaceStabRev}, 20, S_FACESTABBER_CHARGE2, S_FACESTABBER_CHARGE1}, // S_FACESTABBER_CHARGE1
{SPR_CBFS, 6, 0, {A_PlayAttackSound}, 0, 0, S_FACESTABBER_CHARGE3}, // S_FACESTABBER_CHARGE2 {SPR_CBFS, 0, 0, {A_FaceTarget}, 0, 0, S_FACESTABBER_CHARGE3}, // S_FACESTABBER_CHARGE2
{SPR_CBFS, 6, 0, {A_FaceTarget}, 0, 0, S_FACESTABBER_CHARGE4}, // S_FACESTABBER_CHARGE3 {SPR_CBFS, 7, 1, {A_FaceStabHurl}, 6, S_FACESTABBER_CHARGE4, S_FACESTABBER_CHARGE3}, // S_FACESTABBER_CHARGE3
{SPR_CBFS, 7, 35, {A_Thrust}, 20, 1, S_FACESTABBER_STND1}, // S_FACESTABBER_CHARGE4 {SPR_CBFS, 7, 1, {A_FaceStabMiss}, 0, S_FACESTABBER_STND1, S_FACESTABBER_CHARGE4}, // S_FACESTABBER_CHARGE4
{SPR_CBFS, 0, 35, {A_Pain}, 0, 0, S_FACESTABBER_STND1}, // S_FACESTABBER_PAIN {SPR_CBFS, 0, 35, {A_Pain}, 0, 0, S_FACESTABBER_STND1}, // S_FACESTABBER_PAIN
{SPR_CBFS, 0, 2, {A_BossScream}, 1, MT_SONIC3KBOSSEXPLODE, S_FACESTABBER_DIE2}, // S_FACESTABBER_DIE1 {SPR_CBFS, 0, 2, {A_BossScream}, 1, MT_SONIC3KBOSSEXPLODE, S_FACESTABBER_DIE2}, // S_FACESTABBER_DIE1
{SPR_NULL, 0, 2, {A_BossScream}, 1, MT_SONIC3KBOSSEXPLODE, S_FACESTABBER_DIE3}, // S_FACESTABBER_DIE2 {SPR_NULL, 0, 2, {A_BossScream}, 1, MT_SONIC3KBOSSEXPLODE, S_FACESTABBER_DIE3}, // S_FACESTABBER_DIE2
{SPR_NULL, 0, 0, {A_Repeat}, 7, S_FACESTABBER_DIE1, S_XPLD_FLICKY}, // S_FACESTABBER_DIE3 {SPR_NULL, 0, 0, {A_Repeat}, 7, S_FACESTABBER_DIE1, S_XPLD_FLICKY}, // S_FACESTABBER_DIE3
{SPR_STAB, FF_PAPERSPRITE|FF_TRANS50|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_FACESTABBERSPEAR
// Egg Guard // Egg Guard
{SPR_SPSH, 0, 1, {A_Look}, 0, 0, S_EGGGUARD_STND}, // S_EGGGUARD_STND {SPR_SPSH, 0, 1, {A_Look}, 0, 0, S_EGGGUARD_STND}, // S_EGGGUARD_STND
@ -1016,7 +1020,6 @@ state_t states[NUMSTATES] =
{SPR_SPSH, 10, 1, {A_GuardChase}, 0, 0, S_EGGGUARD_RUN4}, // S_EGGGUARD_RUN3 {SPR_SPSH, 10, 1, {A_GuardChase}, 0, 0, S_EGGGUARD_RUN4}, // S_EGGGUARD_RUN3
{SPR_SPSH, 11, 1, {A_GuardChase}, 0, 0, S_EGGGUARD_RUN1}, // S_EGGGUARD_RUN4 {SPR_SPSH, 11, 1, {A_GuardChase}, 0, 0, S_EGGGUARD_RUN1}, // S_EGGGUARD_RUN4
// Egg Shield for Egg Guard
{SPR_ESHI, 0, 8, {A_EggShield}, 0, 0, S_EGGSHIELD}, // S_EGGSHIELD {SPR_ESHI, 0, 8, {A_EggShield}, 0, 0, S_EGGSHIELD}, // S_EGGSHIELD
// Green Snapper // Green Snapper
@ -1435,12 +1438,12 @@ state_t states[NUMSTATES] =
{SPR_RCKT, 2 + FF_FULLBRIGHT, 6, {A_NapalmScatter}, MT_CYBRAKDEMON_NAPALM_FLAMES + (6<<16), 32 + (16<<16), S_CYBRAKDEMONMISSILE_EXPLODE3}, // S_CYBRAKDEMONMISSILE_EXPLODE2 {SPR_RCKT, 2 + FF_FULLBRIGHT, 6, {A_NapalmScatter}, MT_CYBRAKDEMON_NAPALM_FLAMES + (6<<16), 32 + (16<<16), S_CYBRAKDEMONMISSILE_EXPLODE3}, // S_CYBRAKDEMONMISSILE_EXPLODE2
{SPR_RCKT, 3 + FF_FULLBRIGHT, 4, {NULL}, 0, 0, S_NULL}, // S_CYBRAKDEMONMISSILE_EXPLODE3 {SPR_RCKT, 3 + FF_FULLBRIGHT, 4, {NULL}, 0, 0, S_NULL}, // S_CYBRAKDEMONMISSILE_EXPLODE3
{SPR_FLME, FF_TRANS20|FF_FULLBRIGHT , 15, {NULL}, 0, 0, S_CYBRAKDEMONFLAMESHOT_FLY2}, // S_CYBRAKDEMONFLAMESHOT_FLY1 {SPR_FLME, FF_FULLBRIGHT , 15, {NULL}, 0, 0, S_CYBRAKDEMONFLAMESHOT_FLY2}, // S_CYBRAKDEMONFLAMESHOT_FLY1
{SPR_FLME, FF_TRANS20|FF_FULLBRIGHT|1, 15, {NULL}, 0, 0, S_CYBRAKDEMONFLAMESHOT_FLY3}, // S_CYBRAKDEMONFLAMESHOT_FLY2 {SPR_FLME, FF_FULLBRIGHT|1, 15, {NULL}, 0, 0, S_CYBRAKDEMONFLAMESHOT_FLY3}, // S_CYBRAKDEMONFLAMESHOT_FLY2
{SPR_FLME, FF_TRANS20|FF_FULLBRIGHT|2, -1, {NULL}, 0, 0, S_CYBRAKDEMONFLAMESHOT_FLY3}, // S_CYBRAKDEMONFLAMESHOT_FLY3 {SPR_FLME, FF_FULLBRIGHT|2, -1, {NULL}, 0, 0, S_CYBRAKDEMONFLAMESHOT_FLY3}, // S_CYBRAKDEMONFLAMESHOT_FLY3
{SPR_FLME, FF_TRANS20|FF_FULLBRIGHT|2, 0, {A_SpawnObjectRelative}, 0, MT_CYBRAKDEMON_FLAMEREST, S_NULL}, // S_CYBRAKDEMONFLAMESHOT_DIE {SPR_FLME, FF_FULLBRIGHT|2, 0, {A_SpawnObjectRelative}, 0, MT_CYBRAKDEMON_FLAMEREST, S_NULL}, // S_CYBRAKDEMONFLAMESHOT_DIE
{SPR_FLAM, FF_TRANS20|FF_FULLBRIGHT|5, 3, {A_SetFuse}, 10*TICRATE, 0, S_FLAMEREST}, // S_CYBRAKDEMONFLAMEREST {SPR_FLAM, FF_FULLBRIGHT, 0, {A_SetFuse}, 10*TICRATE, 0, S_FLAMEREST}, // S_CYBRAKDEMONFLAMEREST
{SPR_ELEC, 0 + FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_CYBRAKDEMONELECTRICBARRIER_INIT2}, // S_CYBRAKDEMONELECTRICBARRIER_INIT1 {SPR_ELEC, 0 + FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_CYBRAKDEMONELECTRICBARRIER_INIT2}, // S_CYBRAKDEMONELECTRICBARRIER_INIT1
{SPR_ELEC, 0 + FF_FULLBRIGHT, 0, {A_RemoteAction}, -1, S_CYBRAKDEMON_INVINCIBLERIZE, S_CYBRAKDEMONELECTRICBARRIER_PLAYSOUND}, // S_CYBRAKDEMONELECTRICBARRIER_INIT2 {SPR_ELEC, 0 + FF_FULLBRIGHT, 0, {A_RemoteAction}, -1, S_CYBRAKDEMON_INVINCIBLERIZE, S_CYBRAKDEMONELECTRICBARRIER_PLAYSOUND}, // S_CYBRAKDEMONELECTRICBARRIER_INIT2
@ -2054,10 +2057,12 @@ state_t states[NUMSTATES] =
{SPR_NULL, 0, -1, {A_SlingAppear}, 0, 0, S_NULL}, // S_SLING2 {SPR_NULL, 0, -1, {A_SlingAppear}, 0, 0, S_NULL}, // S_SLING2
// CEZ maces and chains // CEZ maces and chains
{SPR_SMCH, 0, -1, {NULL}, 0, 0, S_SMALLMACECHAIN}, // S_SMALLMACECHAIN {SPR_SMCH, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SMALLMACECHAIN
{SPR_BMCH, 0, -1, {NULL}, 0, 0, S_BIGMACECHAIN}, // S_BIGMACECHAIN {SPR_BMCH, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BIGMACECHAIN
{SPR_SMCE, 0, -1, {NULL}, 0, 0, S_SMALLMACE}, // S_SMALLMACE {SPR_SMCE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_SMALLMACE
{SPR_BMCE, 0, -1, {NULL}, 0, 0, S_BIGMACE}, // S_BIGMACE {SPR_BMCE, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BIGMACE
{SPR_SMCH, 1, -1, {NULL}, 0, 0, S_NULL}, // S_SMALLGRABCHAIN
{SPR_BMCH, 1, -1, {NULL}, 0, 0, S_NULL}, // S_BIGGRABCHAIN
// Yellow spring on a ball // Yellow spring on a ball
{SPR_YSPB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_YELLOWSPRINGBALL {SPR_YSPB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_YELLOWSPRINGBALL
@ -2130,6 +2135,12 @@ state_t states[NUMSTATES] =
{SPR_CSTA, 0, -1, {NULL}, 0, 0, S_NULL}, // S_CRAWLASTATUE {SPR_CSTA, 0, -1, {NULL}, 0, 0, S_NULL}, // S_CRAWLASTATUE
{SPR_CBBS, 0, -1, {NULL}, 0, 0, S_NULL}, // S_FACESTABBERSTATUE
{SPR_CBBS, 0, 5, {A_Look}, 768*FRACUNIT, 0, S_SUSPICIOUSFACESTABBERSTATUE_WAIT}, // S_SUSPICIOUSFACESTABBERSTATUE_WAIT
{SPR_CBBS, 0, 23, {NULL}, 0, 0, S_SUSPICIOUSFACESTABBERSTATUE_BURST2}, // S_SUSPICIOUSFACESTABBERSTATUE_BURST1
{SPR_NULL, 0, 40, {A_StatueBurst}, 0, S_FACESTABBER_CHARGE2, S_NULL}, // S_SUSPICIOUSFACESTABBERSTATUE_BURST2
// Big Tumbleweed // Big Tumbleweed
{SPR_BTBL, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BIGTUMBLEWEED {SPR_BTBL, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BIGTUMBLEWEED
{SPR_BTBL, 0, 5, {NULL}, 0, 0, S_BIGTUMBLEWEED_ROLL2}, // S_BIGTUMBLEWEED_ROLL1 {SPR_BTBL, 0, 5, {NULL}, 0, 0, S_BIGTUMBLEWEED_ROLL2}, // S_BIGTUMBLEWEED_ROLL1
@ -2162,9 +2173,9 @@ state_t states[NUMSTATES] =
{SPR_NULL, 0, 2*TICRATE, {NULL}, 0, 0, S_FLAMEJETSTART}, // S_FLAMEJETSTND {SPR_NULL, 0, 2*TICRATE, {NULL}, 0, 0, S_FLAMEJETSTART}, // S_FLAMEJETSTND
{SPR_NULL, 0, 3*TICRATE, {A_ToggleFlameJet}, 0, 0, S_FLAMEJETSTOP}, // S_FLAMEJETSTART {SPR_NULL, 0, 3*TICRATE, {A_ToggleFlameJet}, 0, 0, S_FLAMEJETSTOP}, // S_FLAMEJETSTART
{SPR_NULL, 0, 1, {A_ToggleFlameJet}, 0, 0, S_FLAMEJETSTND}, // S_FLAMEJETSTOP {SPR_NULL, 0, 1, {A_ToggleFlameJet}, 0, 0, S_FLAMEJETSTND}, // S_FLAMEJETSTOP
{SPR_FLME, FF_FULLBRIGHT|FF_TRANS50 , 4, {NULL}, 0, 0, S_FLAMEJETFLAME2}, // S_FLAMEJETFLAME1 {SPR_FLME, FF_FULLBRIGHT , 4, {NULL}, 0, 0, S_FLAMEJETFLAME2}, // S_FLAMEJETFLAME1
{SPR_FLME, FF_FULLBRIGHT|FF_TRANS60|1, 5, {NULL}, 0, 0, S_FLAMEJETFLAME3}, // S_FLAMEJETFLAME2 {SPR_FLME, FF_FULLBRIGHT|1, 5, {NULL}, 0, 0, S_FLAMEJETFLAME3}, // S_FLAMEJETFLAME2
{SPR_FLME, FF_FULLBRIGHT|FF_TRANS70|2, 11, {NULL}, 0, 0, S_NULL}, // S_FLAMEJETFLAME3 {SPR_FLME, FF_FULLBRIGHT|2, 11, {NULL}, 0, 0, S_NULL}, // S_FLAMEJETFLAME3
// Spinning flame jets // Spinning flame jets
// A: Counter-clockwise // A: Counter-clockwise
@ -4237,27 +4248,54 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
2, // spawnhealth 2, // spawnhealth
S_FACESTABBER_STND1, // seestate S_FACESTABBER_STND1, // seestate
sfx_None, // seesound sfx_None, // seesound
35, // reactiontime 70, // reactiontime
sfx_None, // attacksound sfx_zoom, // attacksound
S_FACESTABBER_PAIN, // painstate S_FACESTABBER_PAIN, // painstate
0, // painchance 0, // painchance
sfx_dmpain, // painsound sfx_dmpain, // painsound
S_FACESTABBER_CHARGE1, // meleestate S_FACESTABBER_CHARGE1, // meleestate
S_NULL, // missilestate S_FACESTABBER_CHARGE1, // missilestate
S_FACESTABBER_DIE1, // deathstate S_FACESTABBER_DIE1, // deathstate
S_NULL, // xdeathstate S_NULL, // xdeathstate
sfx_cybdth, // deathsound sfx_cybdth, // deathsound
3, // speed 3, // speed
32*FRACUNIT, // radius 36*FRACUNIT, // radius
64*FRACUNIT, // height 72*FRACUNIT, // height
0, // display offset 0, // display offset
100, // mass 100, // mass
0, // damage 0, // damage
sfx_None, // activesound sfx_s3kc5s, // activesound
MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE, // flags MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE|MF_SLIDEME, // flags
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_FACESTABBERSPEAR
-1, // doomednum
S_FACESTABBERSPEAR, // spawnstate
1, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
35, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
36*FRACUNIT, // radius
72*FRACUNIT, // height
0, // display offset
DMG_SPIKE, // mass
0, // damage
sfx_None, // activesound
MF_PAIN|MF_NOGRAVITY|MF_NOCLIPHEIGHT, // flags
S_NULL // raisestate
},
{ // MT_EGGGUARD { // MT_EGGGUARD
119, // doomednum 119, // doomednum
S_EGGGUARD_STND, // spawnstate S_EGGGUARD_STND, // spawnstate
@ -9865,7 +9903,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
100, // mass 100, // mass
1, // damage 1, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SCENERY|MF_SPECIAL|MF_NOGRAVITY, // flags MF_SCENERY|MF_NOGRAVITY, // flags
S_NULL // raisestate S_NULL // raisestate
}, },
@ -9892,7 +9930,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
100, // mass 100, // mass
1, // damage 1, // damage
sfx_None, // activesound sfx_None, // activesound
MF_SCENERY|MF_SPECIAL|MF_NOGRAVITY, // flags MF_SCENERY|MF_NOGRAVITY, // flags
S_NULL // raisestate S_NULL // raisestate
}, },
@ -9950,6 +9988,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_SMALLGRABCHAIN
-1, // doomednum
S_SMALLGRABCHAIN, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
24*FRACUNIT, // speed
17*FRACUNIT, // radius
34*FRACUNIT, // height
0, // display offset
100, // mass
1, // damage
sfx_None, // activesound
MF_SCENERY|MF_SPECIAL|MF_NOGRAVITY, // flags
S_NULL // raisestate
},
{ // MT_BIGGRABCHAIN
-1, // doomednum
S_BIGGRABCHAIN, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
48*FRACUNIT, // speed
34*FRACUNIT, // radius
68*FRACUNIT, // height
0, // display offset
100, // mass
1, // damage
sfx_None, // activesound
MF_SCENERY|MF_SPECIAL|MF_NOGRAVITY, // flags
S_NULL // raisestate
},
{ // MT_YELLOWSPRINGBALL { // MT_YELLOWSPRINGBALL
-1, // doomednum -1, // doomednum
S_YELLOWSPRINGBALL, // spawnstate S_YELLOWSPRINGBALL, // spawnstate
@ -10409,6 +10501,60 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
S_NULL // raisestate S_NULL // raisestate
}, },
{ // MT_FACESTABBERSTATUE
1331, // doomednum
S_FACESTABBERSTATUE, // spawnstate
1000, // spawnhealth
S_NULL, // seestate
sfx_None, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
36*FRACUNIT, // radius
72*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_SLIDEME|MF_SOLID|MF_PUSHABLE, // flags
S_NULL // raisestate
},
{ // MT_SUSPICIOUSFACESTABBERSTATUE
1332, // doomednum
S_SUSPICIOUSFACESTABBERSTATUE_WAIT, // spawnstate
1000, // spawnhealth
S_SUSPICIOUSFACESTABBERSTATUE_BURST1, // seestate
sfx_s3k6f, // seesound
8, // reactiontime
sfx_None, // attacksound
S_NULL, // painstate
0, // painchance
sfx_None, // painsound
S_NULL, // meleestate
S_NULL, // missilestate
S_NULL, // deathstate
S_NULL, // xdeathstate
sfx_None, // deathsound
0, // speed
36*FRACUNIT, // radius
72*FRACUNIT, // height
0, // display offset
100, // mass
0, // damage
sfx_None, // activesound
MF_SLIDEME|MF_SOLID|MF_PUSHABLE, // flags
MT_FACESTABBER // raisestate
},
{ // MT_BIGTUMBLEWEED { // MT_BIGTUMBLEWEED
1200, // doomednum 1200, // doomednum
S_BIGTUMBLEWEED,// spawnstate S_BIGTUMBLEWEED,// spawnstate

View file

@ -34,6 +34,10 @@ void A_GoldMonitorSparkle();
void A_Look(); void A_Look();
void A_Chase(); void A_Chase();
void A_FaceStabChase(); void A_FaceStabChase();
void A_FaceStabRev();
void A_FaceStabHurl();
void A_FaceStabMiss();
void A_StatueBurst();
void A_FaceTarget(); void A_FaceTarget();
void A_FaceTracer(); void A_FaceTracer();
void A_Scream(); void A_Scream();
@ -269,6 +273,7 @@ typedef enum sprite
SPR_PNTY, // Pointy SPR_PNTY, // Pointy
SPR_ARCH, // Robo-Hood SPR_ARCH, // Robo-Hood
SPR_CBFS, // Castlebot Facestabber SPR_CBFS, // Castlebot Facestabber
SPR_STAB, // Castlebot Facestabber spear aura
SPR_SPSH, // Egg Guard SPR_SPSH, // Egg Guard
SPR_ESHI, // Egg Guard's shield SPR_ESHI, // Egg Guard's shield
SPR_GSNP, // Green Snapper SPR_GSNP, // Green Snapper
@ -439,6 +444,7 @@ typedef enum sprite
SPR_CTRC, // Fire torch SPR_CTRC, // Fire torch
SPR_CFLG, // Waving flag/segment SPR_CFLG, // Waving flag/segment
SPR_CSTA, // Crawla statue SPR_CSTA, // Crawla statue
SPR_CBBS, // Facestabber statue
// Arid Canyon Scenery // Arid Canyon Scenery
SPR_BTBL, // Big tumbleweed SPR_BTBL, // Big tumbleweed
@ -1107,7 +1113,7 @@ typedef enum state
S_ROBOHOOD_JUMP2, S_ROBOHOOD_JUMP2,
S_ROBOHOOD_FALL, S_ROBOHOOD_FALL,
// CastleBot FaceStabber // Castlebot Facestabber
S_FACESTABBER_STND1, S_FACESTABBER_STND1,
S_FACESTABBER_STND2, S_FACESTABBER_STND2,
S_FACESTABBER_STND3, S_FACESTABBER_STND3,
@ -1122,6 +1128,7 @@ typedef enum state
S_FACESTABBER_DIE1, S_FACESTABBER_DIE1,
S_FACESTABBER_DIE2, S_FACESTABBER_DIE2,
S_FACESTABBER_DIE3, S_FACESTABBER_DIE3,
S_FACESTABBERSPEAR,
// Egg Guard // Egg Guard
S_EGGGUARD_STND, S_EGGGUARD_STND,
@ -2180,6 +2187,8 @@ typedef enum state
S_BIGMACECHAIN, S_BIGMACECHAIN,
S_SMALLMACE, S_SMALLMACE,
S_BIGMACE, S_BIGMACE,
S_SMALLGRABCHAIN,
S_BIGGRABCHAIN,
// Yellow spring on a ball // Yellow spring on a ball
S_YELLOWSPRINGBALL, S_YELLOWSPRINGBALL,
@ -2244,6 +2253,10 @@ typedef enum state
S_WAVINGFLAG, S_WAVINGFLAG,
S_WAVINGFLAGSEG, S_WAVINGFLAGSEG,
S_CRAWLASTATUE, S_CRAWLASTATUE,
S_FACESTABBERSTATUE,
S_SUSPICIOUSFACESTABBERSTATUE_WAIT,
S_SUSPICIOUSFACESTABBERSTATUE_BURST1,
S_SUSPICIOUSFACESTABBERSTATUE_BURST2,
// Big Tumbleweed // Big Tumbleweed
S_BIGTUMBLEWEED, S_BIGTUMBLEWEED,
@ -3606,6 +3619,7 @@ typedef enum mobj_type
MT_POINTYBALL, // Pointy Ball MT_POINTYBALL, // Pointy Ball
MT_ROBOHOOD, // Robo-Hood MT_ROBOHOOD, // Robo-Hood
MT_FACESTABBER, // Castlebot Facestabber MT_FACESTABBER, // Castlebot Facestabber
MT_FACESTABBERSPEAR, // Castlebot Facestabber spear aura
MT_EGGGUARD, // Egg Guard MT_EGGGUARD, // Egg Guard
MT_EGGSHIELD, // Egg Guard's shield MT_EGGSHIELD, // Egg Guard's shield
MT_GSNAPPER, // Green Snapper MT_GSNAPPER, // Green Snapper
@ -3861,6 +3875,8 @@ typedef enum mobj_type
MT_BIGMACECHAIN, // Big Mace Chain MT_BIGMACECHAIN, // Big Mace Chain
MT_SMALLMACE, // Small Mace MT_SMALLMACE, // Small Mace
MT_BIGMACE, // Big Mace MT_BIGMACE, // Big Mace
MT_SMALLGRABCHAIN, // Small Grab Chain
MT_BIGGRABCHAIN, // Big Grab Chain
MT_YELLOWSPRINGBALL, // Yellow spring on a ball MT_YELLOWSPRINGBALL, // Yellow spring on a ball
MT_REDSPRINGBALL, // Red spring on a ball MT_REDSPRINGBALL, // Red spring on a ball
MT_SMALLFIREBAR, // Small Firebar MT_SMALLFIREBAR, // Small Firebar
@ -3878,6 +3894,8 @@ typedef enum mobj_type
MT_WAVINGFLAG, // Waving flag MT_WAVINGFLAG, // Waving flag
MT_WAVINGFLAGSEG, // Waving flag segment MT_WAVINGFLAGSEG, // Waving flag segment
MT_CRAWLASTATUE, // Crawla statue MT_CRAWLASTATUE, // Crawla statue
MT_FACESTABBERSTATUE, // Facestabber statue
MT_SUSPICIOUSFACESTABBERSTATUE, // :eggthinking:
// Arid Canyon Scenery // Arid Canyon Scenery
MT_BIGTUMBLEWEED, MT_BIGTUMBLEWEED,

File diff suppressed because it is too large Load diff

View file

@ -1461,10 +1461,9 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
P_SetMobjState(special, special->info->seestate); P_SetMobjState(special, special->info->seestate);
} }
return; return;
case MT_SMALLMACECHAIN: case MT_SMALLGRABCHAIN:
case MT_BIGMACECHAIN: case MT_BIGGRABCHAIN:
// Is this the last link in the chain? if (P_MobjFlip(toucher)*toucher->momz > 0
if (toucher->momz > 0 || !(special->flags2 & MF2_AMBUSH)
|| (player->powers[pw_carry])) || (player->powers[pw_carry]))
return; return;

View file

@ -6324,7 +6324,7 @@ void P_MaceRotate(mobj_t *center, INT32 baserot, INT32 baseprevrot)
mobj->y += pos_sideways[1]; mobj->y += pos_sideways[1];
// Cut the height to align the link with the axis. // Cut the height to align the link with the axis.
if (mobj->type == MT_SMALLMACECHAIN || mobj->type == MT_BIGMACECHAIN) if (mobj->type == MT_SMALLMACECHAIN || mobj->type == MT_BIGMACECHAIN || mobj->type == MT_SMALLGRABCHAIN || mobj->type == MT_BIGGRABCHAIN)
zstore -= P_MobjFlip(mobj)*mobj->height/4; zstore -= P_MobjFlip(mobj)*mobj->height/4;
else else
zstore -= P_MobjFlip(mobj)*mobj->height/2; zstore -= P_MobjFlip(mobj)*mobj->height/2;
@ -9953,7 +9953,7 @@ void P_SpawnMapThing(mapthing_t *mthing)
fixed_t mlength, mmaxlength, mlengthset, mspeed, mphase, myaw, mpitch, mminlength, mnumspokes, mpinch, mroll, mnumnospokes, mwidth, mwidthset, mmin, msound, radiusfactor, widthfactor; fixed_t mlength, mmaxlength, mlengthset, mspeed, mphase, myaw, mpitch, mminlength, mnumspokes, mpinch, mroll, mnumnospokes, mwidth, mwidthset, mmin, msound, radiusfactor, widthfactor;
angle_t mspokeangle; angle_t mspokeangle;
mobjtype_t chainlink, macetype, firsttype, linktype; mobjtype_t chainlink, macetype, firsttype, linktype;
boolean mdosound, mdocenter; boolean mdosound, mdocenter, mchainlike;
mobj_t *spawnee = NULL, *hprev = mobj; mobj_t *spawnee = NULL, *hprev = mobj;
mobjflag_t mflagsapply; mobjflag_t mflagsapply;
mobjflag2_t mflags2apply; mobjflag2_t mflags2apply;
@ -10059,6 +10059,19 @@ ML_EFFECT4 : Don't clip inside the ground
else else
chainlink = MT_NULL; chainlink = MT_NULL;
break; break;
case MT_CHAINPOINT:
if (mthing->options & MTF_AMBUSH)
{
macetype = MT_BIGGRABCHAIN;
chainlink = MT_BIGMACECHAIN;
}
else
{
macetype = MT_SMALLGRABCHAIN;
chainlink = MT_SMALLMACECHAIN;
}
mchainlike = true;
break;
default: default:
if (mthing->options & MTF_AMBUSH) if (mthing->options & MTF_AMBUSH)
{ {
@ -10076,17 +10089,15 @@ ML_EFFECT4 : Don't clip inside the ground
if (!macetype && !chainlink) if (!macetype && !chainlink)
break; break;
if (mobj->type != MT_CHAINPOINT) if (mobj->type == MT_CHAINPOINT)
{
firsttype = macetype;
mlength++;
}
else
{ {
if (!mlength) if (!mlength)
break; break;
firsttype = chainlink;
} }
else
mlength++;
firsttype = macetype;
// Adjustable direction // Adjustable direction
if (lines[line].flags & ML_NOCLIMB) if (lines[line].flags & ML_NOCLIMB)
@ -10110,13 +10121,15 @@ ML_EFFECT4 : Don't clip inside the ground
else else
radiusfactor = (((linktype = chainlink) == MT_NULL) ? 2 : 1); radiusfactor = (((linktype = chainlink) == MT_NULL) ? 2 : 1);
widthfactor = ((firsttype == chainlink) ? 1 : 2); if (!mchainlike)
mchainlike = (firsttype == chainlink);
widthfactor = (mchainlike ? 1 : 2);
mflagsapply = ((lines[line].flags & ML_EFFECT4) ? 0 : (MF_NOCLIP|MF_NOCLIPHEIGHT)); mflagsapply = ((lines[line].flags & ML_EFFECT4) ? 0 : (MF_NOCLIP|MF_NOCLIPHEIGHT));
mflags2apply = ((mthing->options & MTF_OBJECTFLIP) ? MF2_OBJECTFLIP : 0); mflags2apply = ((mthing->options & MTF_OBJECTFLIP) ? MF2_OBJECTFLIP : 0);
meflagsapply = ((mthing->options & MTF_OBJECTFLIP) ? MFE_VERTICALFLIP : 0); meflagsapply = ((mthing->options & MTF_OBJECTFLIP) ? MFE_VERTICALFLIP : 0);
msound = ((firsttype == chainlink) ? 0 : (mwidth & 1)); msound = (mchainlike ? 0 : (mwidth & 1));
// Quick and easy preparatory variable setting // Quick and easy preparatory variable setting
mphase = (FixedAngle(mphase*FRACUNIT)>>ANGLETOFINESHIFT); mphase = (FixedAngle(mphase*FRACUNIT)>>ANGLETOFINESHIFT);
@ -10155,7 +10168,8 @@ ML_EFFECT4 : Don't clip inside the ground
if (mobj->type != MT_CHAINMACEPOINT) if (mobj->type != MT_CHAINMACEPOINT)
continue; continue;
firsttype = linktype = chainlink; linktype = chainlink;
firsttype = ((mthing->options & MTF_AMBUSH) ? MT_BIGGRABCHAIN : MT_SMALLGRABCHAIN);
mmaxlength = 1 + (mlength - 1)*radiusfactor; mmaxlength = 1 + (mlength - 1)*radiusfactor;
radiusfactor = widthfactor = 1; radiusfactor = widthfactor = 1;
} }
@ -10170,10 +10184,7 @@ ML_EFFECT4 : Don't clip inside the ground
radiusfactor = 2; radiusfactor = 2;
} }
else else
{
linktype = chainlink;
radiusfactor = (((linktype = chainlink) == MT_NULL) ? 2 : 1); radiusfactor = (((linktype = chainlink) == MT_NULL) ? 2 : 1);
}
firsttype = macetype; firsttype = macetype;
widthfactor = 2; widthfactor = 2;
@ -10185,8 +10196,8 @@ ML_EFFECT4 : Don't clip inside the ground
mwidthset = mwidth; mwidthset = mwidth;
mlengthset = mminlength; mlengthset = mminlength;
if (mdocenter) // Innermost mace/link if (mdocenter) // Innermost link
makemace(macetype, 0, 0); makemace(linktype, 0, 0);
// Out from the center... // Out from the center...
if (linktype) if (linktype)
@ -10240,8 +10251,8 @@ ML_EFFECT4 : Don't clip inside the ground
while (mlengthset > mminlength) while (mlengthset > mminlength)
makemace(linktype, radiusfactor*(mlengthset--), 0); makemace(linktype, radiusfactor*(mlengthset--), 0);
if (mdocenter) // Innermost mace/link if (mdocenter) // Innermost link
makemace(macetype, 0, 0); makemace(linktype, 0, 0);
} }
} }

View file

@ -439,8 +439,8 @@ sfxinfo_t S_sfx[NUMSFX] =
{"s3kc3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Levitation"}, // ditto {"s3kc3l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Levitation"}, // ditto
{"s3kc4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Firing laser"}, {"s3kc4s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Firing laser"},
{"s3kc4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Firing laser"}, // ditto {"s3kc4l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Firing laser"}, // ditto
{"s3kc5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, {"s3kc5s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Revving up"},
{"s3kc5l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, ""}, // ditto {"s3kc5l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Revving up"}, // ditto
{"s3kc6s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Orbiting"}, {"s3kc6s", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Orbiting"},
{"s3kc6l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Orbiting"}, // ditto {"s3kc6l", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Orbiting"}, // ditto
{"s3kc7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Aiming"}, {"s3kc7", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR, "Aiming"},