Merge branch 'itemdrop' into 'master'
Itemdrop See merge request KartKrew/Kart!11
This commit is contained in:
commit
9c10a85596
|
@ -372,6 +372,7 @@ static CV_PossibleValue_t kartdebugamount_cons_t[] = {{1, "MIN"}, {255, "MAX"},
|
||||||
consvar_t cv_kartdebugamount = {"kartdebugamount", "1", CV_NETVAR|CV_CHEAT, kartdebugamount_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_kartdebugamount = {"kartdebugamount", "1", CV_NETVAR|CV_CHEAT, kartdebugamount_cons_t, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
consvar_t cv_kartdebugshrink = {"kartdebugshrink", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_kartdebugshrink = {"kartdebugshrink", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
consvar_t cv_kartdebugdistribution = {"kartdebugdistribution", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_kartdebugdistribution = {"kartdebugdistribution", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
consvar_t cv_kartdebughuddrop = {"kartdebughuddrop", "Off", CV_NETVAR|CV_CHEAT, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
consvar_t cv_kartdebugcheckpoint = {"kartdebugcheckpoint", "Off", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
consvar_t cv_kartdebugcheckpoint = {"kartdebugcheckpoint", "Off", 0, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
|
||||||
|
|
||||||
|
|
|
@ -133,7 +133,7 @@ extern consvar_t cv_karteliminatelast;
|
||||||
|
|
||||||
extern consvar_t cv_votetime;
|
extern consvar_t cv_votetime;
|
||||||
|
|
||||||
extern consvar_t cv_kartdebugitem, cv_kartdebugamount, cv_kartdebugshrink, cv_kartdebugdistribution;
|
extern consvar_t cv_kartdebugitem, cv_kartdebugamount, cv_kartdebugshrink, cv_kartdebugdistribution, cv_kartdebughuddrop;
|
||||||
extern consvar_t cv_kartdebugcheckpoint;
|
extern consvar_t cv_kartdebugcheckpoint;
|
||||||
|
|
||||||
extern consvar_t cv_itemfinder;
|
extern consvar_t cv_itemfinder;
|
||||||
|
|
|
@ -305,6 +305,7 @@ typedef enum
|
||||||
k_accelboost, // Boost value smoothing for acceleration
|
k_accelboost, // Boost value smoothing for acceleration
|
||||||
k_boostcam, // Camera push forward on boost
|
k_boostcam, // Camera push forward on boost
|
||||||
k_destboostcam, // Ditto
|
k_destboostcam, // Ditto
|
||||||
|
k_aizdriftstrat, // Let go of your drift while boosting? Helper for the SICK STRATZ you have just unlocked
|
||||||
|
|
||||||
k_itemroulette, // Used for the roulette when deciding what item to give you (was "pw_kartitem")
|
k_itemroulette, // Used for the roulette when deciding what item to give you (was "pw_kartitem")
|
||||||
k_roulettetype, // Used for the roulette, for deciding type (currently only used for Battle, to give you better items from Karma items)
|
k_roulettetype, // Used for the roulette, for deciding type (currently only used for Battle, to give you better items from Karma items)
|
||||||
|
|
|
@ -6205,6 +6205,8 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_RANDOMITEMPOP4",
|
"S_RANDOMITEMPOP4",
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
"S_ITEMICON",
|
||||||
|
|
||||||
// Signpost sparkles
|
// Signpost sparkles
|
||||||
"S_SIGNSPARK1",
|
"S_SIGNSPARK1",
|
||||||
"S_SIGNSPARK2",
|
"S_SIGNSPARK2",
|
||||||
|
@ -6270,6 +6272,9 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
"S_KARTFIRE7",
|
"S_KARTFIRE7",
|
||||||
"S_KARTFIRE8",
|
"S_KARTFIRE8",
|
||||||
|
|
||||||
|
// Angel Island Drift Strat Dust (what a mouthful!)
|
||||||
|
"S_KARTAIZDRIFTSTRAT",
|
||||||
|
|
||||||
// Invincibility Sparks
|
// Invincibility Sparks
|
||||||
"S_KARTINVULN_SMALL1",
|
"S_KARTINVULN_SMALL1",
|
||||||
"S_KARTINVULN_SMALL2",
|
"S_KARTINVULN_SMALL2",
|
||||||
|
@ -6518,16 +6523,11 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
||||||
|
|
||||||
// Audience Members
|
// Audience Members
|
||||||
"S_RANDOMAUDIENCE",
|
"S_RANDOMAUDIENCE",
|
||||||
"S_AUDIENCE_TOAD1",
|
"S_AUDIENCE_CHAO_CHEER1",
|
||||||
"S_AUDIENCE_TOAD2",
|
"S_AUDIENCE_CHAO_CHEER2",
|
||||||
"S_AUDIENCE_BOO1",
|
"S_AUDIENCE_CHAO_WIN1",
|
||||||
"S_AUDIENCE_BOO2",
|
"S_AUDIENCE_CHAO_WIN2",
|
||||||
"S_AUDIENCE_GMBA1",
|
"S_AUDIENCE_CHAO_LOSE",
|
||||||
"S_AUDIENCE_GMBA2",
|
|
||||||
"S_AUDIENCE_SHYG1",
|
|
||||||
"S_AUDIENCE_SHYG2",
|
|
||||||
"S_AUDIENCE_SNIF1",
|
|
||||||
"S_AUDIENCE_SNIF2",
|
|
||||||
|
|
||||||
"S_FANCHAR_KOTE",
|
"S_FANCHAR_KOTE",
|
||||||
"S_FANCHAR_RYAN",
|
"S_FANCHAR_RYAN",
|
||||||
|
@ -7219,6 +7219,8 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_BLUEDIAG",
|
"MT_BLUEDIAG",
|
||||||
"MT_RANDOMITEM",
|
"MT_RANDOMITEM",
|
||||||
"MT_RANDOMITEMPOP",
|
"MT_RANDOMITEMPOP",
|
||||||
|
"MT_FLOATINGITEM",
|
||||||
|
|
||||||
"MT_SIGNSPARKLE",
|
"MT_SIGNSPARKLE",
|
||||||
|
|
||||||
"MT_FASTLINE",
|
"MT_FASTLINE",
|
||||||
|
@ -7226,6 +7228,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
||||||
"MT_BOOSTFLAME",
|
"MT_BOOSTFLAME",
|
||||||
"MT_BOOSTSMOKE",
|
"MT_BOOSTSMOKE",
|
||||||
"MT_SNEAKERTRAIL",
|
"MT_SNEAKERTRAIL",
|
||||||
|
"MT_AIZDRIFTSTRAT",
|
||||||
"MT_SPARKLETRAIL",
|
"MT_SPARKLETRAIL",
|
||||||
"MT_INVULNFLASH",
|
"MT_INVULNFLASH",
|
||||||
"MT_WIPEOUTTRAIL",
|
"MT_WIPEOUTTRAIL",
|
||||||
|
@ -7706,6 +7709,7 @@ static const char *const KARTSTUFF_LIST[] = {
|
||||||
"ACCELBOOST",
|
"ACCELBOOST",
|
||||||
"BOOSTCAM",
|
"BOOSTCAM",
|
||||||
"DESTBOOSTCAM",
|
"DESTBOOSTCAM",
|
||||||
|
"AIZDRIFTSTRAT",
|
||||||
|
|
||||||
"ITEMROULETTE",
|
"ITEMROULETTE",
|
||||||
"ROULETTETYPE",
|
"ROULETTETYPE",
|
||||||
|
|
148
src/info.c
148
src/info.c
|
@ -60,7 +60,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"KRBM","BHOG","BHBM","BLIG","LIGH","THNS","SINK","SITR","KBLN","DEZL",
|
"KRBM","BHOG","BHBM","BLIG","LIGH","THNS","SINK","SITR","KBLN","DEZL",
|
||||||
"POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO",
|
"POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO",
|
||||||
"CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB","ARRO",
|
"CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB","ARRO",
|
||||||
"ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","VIEW"
|
"ITEM","ITMO","ITMI","ITMN","WANT","PBOM","RETI","AIDU","VIEW"
|
||||||
};
|
};
|
||||||
|
|
||||||
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
||||||
|
@ -1725,11 +1725,11 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_IVSP, FF_ANIMATE, 32, {NULL}, 31, 1, S_NULL}, // S_IVSP
|
{SPR_IVSP, FF_ANIMATE, 32, {NULL}, 31, 1, S_NULL}, // S_IVSP
|
||||||
|
|
||||||
// Super Sonic Spark
|
// Super Sonic Spark
|
||||||
{SPR_SSPK, 0, 2, {NULL}, 0, 0, S_SSPK2}, // S_SSPK1
|
{SPR_SSPK, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_SSPK2}, // S_SSPK1
|
||||||
{SPR_SSPK, 1, 2, {NULL}, 0, 0, S_SSPK3}, // S_SSPK2
|
{SPR_SSPK, 1|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_SSPK3}, // S_SSPK2
|
||||||
{SPR_SSPK, 2, 2, {NULL}, 0, 0, S_SSPK4}, // S_SSPK3
|
{SPR_SSPK, 2|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_SSPK4}, // S_SSPK3
|
||||||
{SPR_SSPK, 1, 2, {NULL}, 0, 0, S_SSPK5}, // S_SSPK4
|
{SPR_SSPK, 1|FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_SSPK5}, // S_SSPK4
|
||||||
{SPR_SSPK, 0, 2, {NULL}, 0, 0, S_NULL}, // S_SSPK5
|
{SPR_SSPK, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_NULL}, // S_SSPK5
|
||||||
|
|
||||||
// Freed Birdie
|
// Freed Birdie
|
||||||
{SPR_BIRD, 0, 4, {NULL}, 0, 0, S_BIRD2}, // S_BIRD1
|
{SPR_BIRD, 0, 4, {NULL}, 0, 0, S_BIRD2}, // S_BIRD1
|
||||||
|
@ -2535,6 +2535,9 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_RPOP, FF_FULLBRIGHT|2, 5, {NULL}, 0, 0, S_RANDOMITEMPOP4}, // S_RANDOMITEMPOP3
|
{SPR_RPOP, FF_FULLBRIGHT|2, 5, {NULL}, 0, 0, S_RANDOMITEMPOP4}, // S_RANDOMITEMPOP3
|
||||||
{SPR_RPOP, FF_FULLBRIGHT|3, 5, {NULL}, 0, 0, S_NULL}, // S_RANDOMITEMPOP4
|
{SPR_RPOP, FF_FULLBRIGHT|3, 5, {NULL}, 0, 0, S_NULL}, // S_RANDOMITEMPOP4
|
||||||
|
|
||||||
|
|
||||||
|
{SPR_NULL, FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_NULL}, // S_ITEMICON
|
||||||
|
|
||||||
{SPR_SGNS, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_SIGNSPARK2}, // S_SIGNSPARK1
|
{SPR_SGNS, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_SIGNSPARK2}, // S_SIGNSPARK1
|
||||||
{SPR_SGNS, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_SIGNSPARK3}, // S_SIGNSPARK2
|
{SPR_SGNS, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_SIGNSPARK3}, // S_SIGNSPARK2
|
||||||
{SPR_SGNS, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_SIGNSPARK4}, // S_SIGNSPARK3
|
{SPR_SGNS, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_SIGNSPARK4}, // S_SIGNSPARK3
|
||||||
|
@ -2594,6 +2597,8 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_KFRE, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_KARTFIRE8}, // S_KARTFIRE7
|
{SPR_KFRE, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_KARTFIRE8}, // S_KARTFIRE7
|
||||||
{SPR_KFRE, FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_NULL}, // S_KARTFIRE8
|
{SPR_KFRE, FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_NULL}, // S_KARTFIRE8
|
||||||
|
|
||||||
|
{SPR_AIDU, FF_ANIMATE|FF_PAPERSPRITE, 5*2, {NULL}, 5, 2, S_NULL}, // S_KARTAIZDRIFTSTRAT
|
||||||
|
|
||||||
{SPR_KINV, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL2}, // S_KARTINVULN_SMALL1
|
{SPR_KINV, FF_FULLBRIGHT, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL2}, // S_KARTINVULN_SMALL1
|
||||||
{SPR_KINV, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL3}, // S_KARTINVULN_SMALL2
|
{SPR_KINV, FF_FULLBRIGHT|1, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL3}, // S_KARTINVULN_SMALL2
|
||||||
{SPR_KINV, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL4}, // S_KARTINVULN_SMALL3
|
{SPR_KINV, FF_FULLBRIGHT|2, 1, {NULL}, 0, 0, S_KARTINVULN_SMALL4}, // S_KARTINVULN_SMALL3
|
||||||
|
@ -2777,30 +2782,30 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_LIGH, 2, 2, {NULL}, 0, 0, S_LIGHTNING4}, // S_LIGHTNING3
|
{SPR_LIGH, 2, 2, {NULL}, 0, 0, S_LIGHTNING4}, // S_LIGHTNING3
|
||||||
{SPR_LIGH, 3, 2, {NULL}, 0, 0, S_NULL}, // S_LIGHTNING4
|
{SPR_LIGH, 3, 2, {NULL}, 0, 0, S_NULL}, // S_LIGHTNING4
|
||||||
|
|
||||||
{SPR_THNS, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_THUNDERSHIELD2}, // S_THUNDERSHIELD1
|
{SPR_THNS, FF_FULLBRIGHT|9, 2, {NULL}, 0, 0, S_THUNDERSHIELD2}, // S_THUNDERSHIELD1
|
||||||
{SPR_THNS, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_THUNDERSHIELD3}, // S_THUNDERSHIELD2
|
{SPR_THNS, FF_FULLBRIGHT|10, 2, {NULL}, 0, 0, S_THUNDERSHIELD3}, // S_THUNDERSHIELD2
|
||||||
{SPR_THNS, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_THUNDERSHIELD4}, // S_THUNDERSHIELD3
|
{SPR_THNS, FF_FULLBRIGHT|11, 2, {NULL}, 0, 0, S_THUNDERSHIELD4}, // S_THUNDERSHIELD3
|
||||||
{SPR_THNS, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_THUNDERSHIELD5}, // S_THUNDERSHIELD4
|
{SPR_THNS, FF_FULLBRIGHT, 2, {NULL}, 0, 0, S_THUNDERSHIELD5}, // S_THUNDERSHIELD4
|
||||||
{SPR_THNS, FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_THUNDERSHIELD6}, // S_THUNDERSHIELD5
|
{SPR_THNS, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_THUNDERSHIELD6}, // S_THUNDERSHIELD5
|
||||||
{SPR_THNS, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_THUNDERSHIELD7}, // S_THUNDERSHIELD6
|
{SPR_THNS, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_THUNDERSHIELD7}, // S_THUNDERSHIELD6
|
||||||
{SPR_THNS, FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_THUNDERSHIELD8}, // S_THUNDERSHIELD7
|
{SPR_THNS, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_THUNDERSHIELD8}, // S_THUNDERSHIELD7
|
||||||
{SPR_THNS, FF_FULLBRIGHT|7, 2, {NULL}, 0, 0, S_THUNDERSHIELD9}, // S_THUNDERSHIELD8
|
{SPR_THNS, FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_THUNDERSHIELD9}, // S_THUNDERSHIELD8
|
||||||
{SPR_THNS, FF_FULLBRIGHT|8, 2, {NULL}, 0, 0, S_THUNDERSHIELD10}, // S_THUNDERSHIELD9
|
{SPR_THNS, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_THUNDERSHIELD10}, // S_THUNDERSHIELD9
|
||||||
{SPR_THNS, FF_FULLBRIGHT|9, 2, {NULL}, 0, 0, S_THUNDERSHIELD11}, // S_THUNDERSHIELD10
|
{SPR_THNS, FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_THUNDERSHIELD11}, // S_THUNDERSHIELD10
|
||||||
{SPR_THNS, FF_FULLBRIGHT|10, 2, {NULL}, 0, 0, S_THUNDERSHIELD12}, // S_THUNDERSHIELD11
|
{SPR_THNS, FF_FULLBRIGHT|7, 2, {NULL}, 0, 0, S_THUNDERSHIELD12}, // S_THUNDERSHIELD11
|
||||||
{SPR_THNS, FF_FULLBRIGHT|11, 2, {NULL}, 0, 0, S_THUNDERSHIELD13}, // S_THUNDERSHIELD12
|
{SPR_THNS, FF_FULLBRIGHT|8, 2, {NULL}, 0, 0, S_THUNDERSHIELD13}, // S_THUNDERSHIELD12
|
||||||
{SPR_THNS, FF_FULLBRIGHT|8, 2, {NULL}, 0, 0, S_THUNDERSHIELD14}, // S_THUNDERSHIELD13
|
{SPR_THNS, FF_FULLBRIGHT|9, 2, {NULL}, 0, 0, S_THUNDERSHIELD14}, // S_THUNDERSHIELD13
|
||||||
{SPR_THNS, FF_FULLBRIGHT|7, 2, {NULL}, 0, 0, S_THUNDERSHIELD15}, // S_THUNDERSHIELD14
|
{SPR_THNS, FF_FULLBRIGHT|10, 2, {NULL}, 0, 0, S_THUNDERSHIELD15}, // S_THUNDERSHIELD14
|
||||||
{SPR_THNS, FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_THUNDERSHIELD16}, // S_THUNDERSHIELD15
|
{SPR_THNS, FF_FULLBRIGHT|11, 2, {NULL}, 0, 0, S_THUNDERSHIELD16}, // S_THUNDERSHIELD15
|
||||||
{SPR_THNS, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_THUNDERSHIELD17}, // S_THUNDERSHIELD16
|
{SPR_THNS, FF_FULLBRIGHT|8, 2, {NULL}, 0, 0, S_THUNDERSHIELD17}, // S_THUNDERSHIELD16
|
||||||
{SPR_THNS, FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_THUNDERSHIELD18}, // S_THUNDERSHIELD17
|
{SPR_THNS, FF_FULLBRIGHT|7, 2, {NULL}, 0, 0, S_THUNDERSHIELD18}, // S_THUNDERSHIELD17
|
||||||
{SPR_THNS, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_THUNDERSHIELD19}, // S_THUNDERSHIELD18
|
{SPR_THNS, FF_FULLBRIGHT|6, 2, {NULL}, 0, 0, S_THUNDERSHIELD19}, // S_THUNDERSHIELD18
|
||||||
{SPR_THNS, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_THUNDERSHIELD20}, // S_THUNDERSHIELD19
|
{SPR_THNS, FF_FULLBRIGHT|5, 2, {NULL}, 0, 0, S_THUNDERSHIELD20}, // S_THUNDERSHIELD19
|
||||||
{SPR_THNS, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_THUNDERSHIELD21}, // S_THUNDERSHIELD20
|
{SPR_THNS, FF_FULLBRIGHT|4, 2, {NULL}, 0, 0, S_THUNDERSHIELD21}, // S_THUNDERSHIELD20
|
||||||
{SPR_THNS, FF_FULLBRIGHT|0, 2, {NULL}, 0, 0, S_THUNDERSHIELD22}, // S_THUNDERSHIELD21
|
{SPR_THNS, FF_FULLBRIGHT|3, 2, {NULL}, 0, 0, S_THUNDERSHIELD22}, // S_THUNDERSHIELD21
|
||||||
{SPR_THNS, FF_FULLBRIGHT|9, 2, {NULL}, 0, 0, S_THUNDERSHIELD23}, // S_THUNDERSHIELD22
|
{SPR_THNS, FF_FULLBRIGHT|2, 2, {NULL}, 0, 0, S_THUNDERSHIELD23}, // S_THUNDERSHIELD22
|
||||||
{SPR_THNS, FF_FULLBRIGHT|10, 2, {NULL}, 0, 0, S_THUNDERSHIELD24}, // S_THUNDERSHIELD23
|
{SPR_THNS, FF_FULLBRIGHT|1, 2, {NULL}, 0, 0, S_THUNDERSHIELD24}, // S_THUNDERSHIELD23
|
||||||
{SPR_THNS, FF_FULLBRIGHT|11, 2, {NULL}, 0, 0, S_THUNDERSHIELD1}, // S_THUNDERSHIELD24
|
{SPR_THNS, FF_FULLBRIGHT|0, 2, {NULL}, 0, 0, S_THUNDERSHIELD1}, // S_THUNDERSHIELD24
|
||||||
|
|
||||||
{SPR_SINK, 0, 1, {A_SmokeTrailer}, MT_SINKTRAIL, 0, S_SINK}, // S_SINK
|
{SPR_SINK, 0, 1, {A_SmokeTrailer}, MT_SINKTRAIL, 0, S_SINK}, // S_SINK
|
||||||
{SPR_SINK, 0|FF_TRANS80|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_SINK_SHIELD}, // S_SINK_SHIELD
|
{SPR_SINK, 0|FF_TRANS80|FF_FULLBRIGHT, -1, {NULL}, 0, 0, S_SINK_SHIELD}, // S_SINK_SHIELD
|
||||||
|
@ -2824,18 +2829,15 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_POKE, 3, 2, {A_MoveAbsolute}, 180, 2, S_POKEY5}, // S_POKEY8
|
{SPR_POKE, 3, 2, {A_MoveAbsolute}, 180, 2, S_POKEY5}, // S_POKEY8
|
||||||
{SPR_NULL, 0, -1, {NULL}, 0, 0, S_NULL}, // S_POKEYIDLE
|
{SPR_NULL, 0, -1, {NULL}, 0, 0, S_NULL}, // S_POKEYIDLE
|
||||||
|
|
||||||
{SPR_NULL, 0, 1, {A_RandomStateRange}, S_AUDIENCE_TOAD1, S_AUDIENCE_SNIF1, S_RANDOMAUDIENCE}, // S_RANDOMAUDIENCE
|
{SPR_NULL, 0, 1, {A_RandomStateRange}, S_AUDIENCE_CHAO_CHEER1, S_AUDIENCE_CHAO_CHEER2, S_RANDOMAUDIENCE}, // S_RANDOMAUDIENCE
|
||||||
|
|
||||||
{SPR_AUDI, 0, 5, {NULL}, 0, 0, S_AUDIENCE_TOAD2}, // S_AUDIENCE_TOAD1
|
{SPR_AUDI, 0, 5, {NULL}, 0, 0, S_AUDIENCE_CHAO_CHEER2}, // S_AUDIENCE_CHAO_CHEER1
|
||||||
{SPR_AUDI, 1, 20, {A_BunnyHop}, 7, 0, S_AUDIENCE_TOAD1}, // S_AUDIENCE_TOAD2
|
{SPR_AUDI, 1, 20, {A_BunnyHop}, 7, 0, S_AUDIENCE_CHAO_CHEER1}, // S_AUDIENCE_CHAO_CHEER2
|
||||||
{SPR_AUDI, 2, 5, {NULL}, 0, 0, S_AUDIENCE_BOO2}, // S_AUDIENCE_BOO1
|
|
||||||
{SPR_AUDI, 3, 20, {A_BunnyHop}, 7, 0, S_AUDIENCE_BOO1}, // S_AUDIENCE_BOO2
|
{SPR_AUDI, 2, 5, {NULL}, 0, 0, S_AUDIENCE_CHAO_WIN2}, // S_AUDIENCE_CHAO_WIN1
|
||||||
{SPR_AUDI, 4, 5, {NULL}, 0, 0, S_AUDIENCE_GMBA2}, // S_AUDIENCE_GMBA1
|
{SPR_AUDI, 3, 25, {A_BunnyHop}, 10, 0, S_AUDIENCE_CHAO_WIN1}, // S_AUDIENCE_CHAO_WIN2
|
||||||
{SPR_AUDI, 5, 20, {A_BunnyHop}, 7, 0, S_AUDIENCE_GMBA1}, // S_AUDIENCE_GMBA2
|
|
||||||
{SPR_AUDI, 6, 5, {NULL}, 0, 0, S_AUDIENCE_SHYG2}, // S_AUDIENCE_SHYG1
|
{SPR_AUDI, 4|FF_ANIMATE, -1, {NULL}, 1, 17, S_NULL}, // S_AUDIENCE_CHAO_LOSE
|
||||||
{SPR_AUDI, 7, 20, {A_BunnyHop}, 7, 0, S_AUDIENCE_SHYG1}, // S_AUDIENCE_SHYG2
|
|
||||||
{SPR_AUDI, 8, 5, {NULL}, 0, 0, S_AUDIENCE_SNIF2}, // S_AUDIENCE_SNIF1
|
|
||||||
{SPR_AUDI, 9, 20, {A_BunnyHop}, 7, 0, S_AUDIENCE_SNIF1}, // S_AUDIENCE_SNIF2
|
|
||||||
|
|
||||||
{SPR_AUDI, 10, -1, {NULL}, 0, 0, S_NULL}, // S_FANCHAR_KOTE
|
{SPR_AUDI, 10, -1, {NULL}, 0, 0, S_NULL}, // S_FANCHAR_KOTE
|
||||||
{SPR_AUDI, 11, -1, {NULL}, 0, 0, S_NULL}, // S_FANCHAR_RYAN
|
{SPR_AUDI, 11, -1, {NULL}, 0, 0, S_NULL}, // S_FANCHAR_RYAN
|
||||||
|
@ -14397,6 +14399,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_FLOATINGITEM
|
||||||
|
-1, // doomednum
|
||||||
|
S_ITEMICON, // spawnstate
|
||||||
|
1, // spawnhealth
|
||||||
|
S_NULL, // seestate
|
||||||
|
sfx_None, // seesound
|
||||||
|
0, // 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_mcitm1, // deathsound
|
||||||
|
0, // speed
|
||||||
|
24*FRACUNIT, // radius
|
||||||
|
24*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
100, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_SLIDEME|MF_SPECIAL|MF_DONTENCOREMAP, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_SIGNSPARKLE
|
{ // MT_SIGNSPARKLE
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_SIGNSPARK1, // spawnstate
|
S_SIGNSPARK1, // spawnstate
|
||||||
|
@ -14559,6 +14588,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{ // MT_AIZDRIFTSTRAT
|
||||||
|
-1, // doomednum
|
||||||
|
S_KARTAIZDRIFTSTRAT,// spawnstate
|
||||||
|
1, // 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
|
||||||
|
8, // speed
|
||||||
|
14*FRACUNIT, // radius
|
||||||
|
14*FRACUNIT, // height
|
||||||
|
0, // display offset
|
||||||
|
100, // mass
|
||||||
|
0, // damage
|
||||||
|
sfx_None, // activesound
|
||||||
|
MF_NOBLOCKMAP|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOGRAVITY|MF_SCENERY|MF_DONTENCOREMAP, // flags
|
||||||
|
S_NULL // raisestate
|
||||||
|
},
|
||||||
|
|
||||||
{ // MT_SPARKLETRAIL
|
{ // MT_SPARKLETRAIL
|
||||||
-1, // doomednum
|
-1, // doomednum
|
||||||
S_KARTINVULN_SMALL1, // spawnstate
|
S_KARTINVULN_SMALL1, // spawnstate
|
||||||
|
@ -14738,7 +14794,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_kc2e, // deathsound
|
sfx_kc2e, // deathsound
|
||||||
0, // speed
|
0, // speed
|
||||||
16*FRACUNIT, // radius
|
24*FRACUNIT, // radius
|
||||||
32*FRACUNIT, // height
|
32*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
100, // mass
|
100, // mass
|
||||||
|
@ -14819,7 +14875,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_s3k5d, // deathsound
|
sfx_s3k5d, // deathsound
|
||||||
64*FRACUNIT, // speed
|
64*FRACUNIT, // speed
|
||||||
16*FRACUNIT, // radius
|
24*FRACUNIT, // radius
|
||||||
32*FRACUNIT, // height
|
32*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
100, // mass
|
100, // mass
|
||||||
|
@ -15305,7 +15361,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_None, // deathsound
|
sfx_None, // deathsound
|
||||||
8, // speed
|
8, // speed
|
||||||
16*FRACUNIT, // radius
|
20*FRACUNIT, // radius
|
||||||
56*FRACUNIT, // height
|
56*FRACUNIT, // height
|
||||||
1, // display offset
|
1, // display offset
|
||||||
16, // mass
|
16, // mass
|
||||||
|
@ -15548,8 +15604,8 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
S_NULL, // xdeathstate
|
S_NULL, // xdeathstate
|
||||||
sfx_None, // deathsound
|
sfx_None, // deathsound
|
||||||
8, // speed
|
8, // speed
|
||||||
16*FRACUNIT, // radius
|
8*FRACUNIT, // radius
|
||||||
40*FRACUNIT, // height
|
20*FRACUNIT, // height
|
||||||
0, // display offset
|
0, // display offset
|
||||||
100, // mass
|
100, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
|
|
25
src/info.h
25
src/info.h
|
@ -644,6 +644,8 @@ typedef enum sprite
|
||||||
SPR_PBOM, // player bomb
|
SPR_PBOM, // player bomb
|
||||||
SPR_RETI, // player reticule
|
SPR_RETI, // player reticule
|
||||||
|
|
||||||
|
SPR_AIDU,
|
||||||
|
|
||||||
SPR_VIEW, // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw!
|
SPR_VIEW, // First person view sprites; this is a sprite so that it can be replaced by a specialized MD2 draw!
|
||||||
|
|
||||||
SPR_FIRSTFREESLOT,
|
SPR_FIRSTFREESLOT,
|
||||||
|
@ -3051,6 +3053,8 @@ typedef enum state
|
||||||
S_RANDOMITEMPOP4,
|
S_RANDOMITEMPOP4,
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
S_ITEMICON,
|
||||||
|
|
||||||
// Signpost sparkles
|
// Signpost sparkles
|
||||||
S_SIGNSPARK1,
|
S_SIGNSPARK1,
|
||||||
S_SIGNSPARK2,
|
S_SIGNSPARK2,
|
||||||
|
@ -3116,6 +3120,9 @@ typedef enum state
|
||||||
S_KARTFIRE7,
|
S_KARTFIRE7,
|
||||||
S_KARTFIRE8,
|
S_KARTFIRE8,
|
||||||
|
|
||||||
|
// Angel Island Drift Strat Dust (what a mouthful!)
|
||||||
|
S_KARTAIZDRIFTSTRAT,
|
||||||
|
|
||||||
// Invincibility Sparks
|
// Invincibility Sparks
|
||||||
S_KARTINVULN_SMALL1,
|
S_KARTINVULN_SMALL1,
|
||||||
S_KARTINVULN_SMALL2,
|
S_KARTINVULN_SMALL2,
|
||||||
|
@ -3364,16 +3371,11 @@ typedef enum state
|
||||||
|
|
||||||
// Audience Members
|
// Audience Members
|
||||||
S_RANDOMAUDIENCE,
|
S_RANDOMAUDIENCE,
|
||||||
S_AUDIENCE_TOAD1,
|
S_AUDIENCE_CHAO_CHEER1,
|
||||||
S_AUDIENCE_TOAD2,
|
S_AUDIENCE_CHAO_CHEER2,
|
||||||
S_AUDIENCE_BOO1,
|
S_AUDIENCE_CHAO_WIN1,
|
||||||
S_AUDIENCE_BOO2,
|
S_AUDIENCE_CHAO_WIN2,
|
||||||
S_AUDIENCE_GMBA1,
|
S_AUDIENCE_CHAO_LOSE,
|
||||||
S_AUDIENCE_GMBA2,
|
|
||||||
S_AUDIENCE_SHYG1,
|
|
||||||
S_AUDIENCE_SHYG2,
|
|
||||||
S_AUDIENCE_SNIF1,
|
|
||||||
S_AUDIENCE_SNIF2,
|
|
||||||
|
|
||||||
S_FANCHAR_KOTE,
|
S_FANCHAR_KOTE,
|
||||||
S_FANCHAR_RYAN,
|
S_FANCHAR_RYAN,
|
||||||
|
@ -4082,6 +4084,8 @@ typedef enum mobj_type
|
||||||
MT_BLUEDIAG,
|
MT_BLUEDIAG,
|
||||||
MT_RANDOMITEM,
|
MT_RANDOMITEM,
|
||||||
MT_RANDOMITEMPOP,
|
MT_RANDOMITEMPOP,
|
||||||
|
MT_FLOATINGITEM,
|
||||||
|
|
||||||
MT_SIGNSPARKLE,
|
MT_SIGNSPARKLE,
|
||||||
|
|
||||||
MT_FASTLINE,
|
MT_FASTLINE,
|
||||||
|
@ -4089,6 +4093,7 @@ typedef enum mobj_type
|
||||||
MT_BOOSTFLAME,
|
MT_BOOSTFLAME,
|
||||||
MT_BOOSTSMOKE,
|
MT_BOOSTSMOKE,
|
||||||
MT_SNEAKERTRAIL,
|
MT_SNEAKERTRAIL,
|
||||||
|
MT_AIZDRIFTSTRAT,
|
||||||
MT_SPARKLETRAIL,
|
MT_SPARKLETRAIL,
|
||||||
MT_INVULNFLASH,
|
MT_INVULNFLASH,
|
||||||
MT_WIPEOUTTRAIL,
|
MT_WIPEOUTTRAIL,
|
||||||
|
|
333
src/k_kart.c
333
src/k_kart.c
|
@ -439,6 +439,7 @@ void K_RegisterKartStuff(void)
|
||||||
CV_RegisterVar(&cv_kartdebugamount);
|
CV_RegisterVar(&cv_kartdebugamount);
|
||||||
CV_RegisterVar(&cv_kartdebugshrink);
|
CV_RegisterVar(&cv_kartdebugshrink);
|
||||||
CV_RegisterVar(&cv_kartdebugdistribution);
|
CV_RegisterVar(&cv_kartdebugdistribution);
|
||||||
|
CV_RegisterVar(&cv_kartdebughuddrop);
|
||||||
|
|
||||||
CV_RegisterVar(&cv_kartdebugcheckpoint);
|
CV_RegisterVar(&cv_kartdebugcheckpoint);
|
||||||
}
|
}
|
||||||
|
@ -1140,7 +1141,7 @@ void K_KartBouncing(mobj_t *mobj1, mobj_t *mobj2, boolean bounce, boolean solid)
|
||||||
fx->eflags |= MFE_VERTICALFLIP;
|
fx->eflags |= MFE_VERTICALFLIP;
|
||||||
else
|
else
|
||||||
fx->eflags &= ~MFE_VERTICALFLIP;
|
fx->eflags &= ~MFE_VERTICALFLIP;
|
||||||
fx->scale = mobj1->scale;
|
P_SetScale(fx, mobj1->scale);
|
||||||
|
|
||||||
// Because this is done during collision now, rmomx and rmomy need to be recalculated
|
// Because this is done during collision now, rmomx and rmomy need to be recalculated
|
||||||
// so that friction doesn't immediately decide to stop the player if they're at a standstill
|
// so that friction doesn't immediately decide to stop the player if they're at a standstill
|
||||||
|
@ -1830,6 +1831,10 @@ void K_SpinPlayer(player_t *player, mobj_t *source, INT32 type, boolean trapitem
|
||||||
P_SetPlayerMobjState(player->mo, S_KART_SPIN);
|
P_SetPlayerMobjState(player->mo, S_KART_SPIN);
|
||||||
|
|
||||||
player->kartstuff[k_instashield] = 15;
|
player->kartstuff[k_instashield] = 15;
|
||||||
|
if (cv_kartdebughuddrop.value)
|
||||||
|
K_DropItems(player);
|
||||||
|
else
|
||||||
|
K_DropHnextList(player);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1899,6 +1904,10 @@ void K_SquishPlayer(player_t *player, mobj_t *source)
|
||||||
P_PlayRinglossSound(player->mo);
|
P_PlayRinglossSound(player->mo);
|
||||||
|
|
||||||
player->kartstuff[k_instashield] = 15;
|
player->kartstuff[k_instashield] = 15;
|
||||||
|
if (cv_kartdebughuddrop.value)
|
||||||
|
K_DropItems(player);
|
||||||
|
else
|
||||||
|
K_DropHnextList(player);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1976,6 +1985,10 @@ void K_ExplodePlayer(player_t *player, mobj_t *source) // A bit of a hack, we ju
|
||||||
}
|
}
|
||||||
|
|
||||||
player->kartstuff[k_instashield] = 15;
|
player->kartstuff[k_instashield] = 15;
|
||||||
|
//if (cv_kartdebughuddrop.value)
|
||||||
|
K_DropItems(player);
|
||||||
|
/*else
|
||||||
|
K_DropHnextList(player);*/
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2051,6 +2064,10 @@ void K_StealBumper(player_t *player, player_t *victim, boolean force)
|
||||||
victim->kartstuff[k_comebacktimer] = comebacktime;*/
|
victim->kartstuff[k_comebacktimer] = comebacktime;*/
|
||||||
|
|
||||||
victim->kartstuff[k_instashield] = 15;
|
victim->kartstuff[k_instashield] = 15;
|
||||||
|
if (cv_kartdebughuddrop.value)
|
||||||
|
K_DropItems(victim);
|
||||||
|
else
|
||||||
|
K_DropHnextList(victim);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2158,14 +2175,14 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color)
|
||||||
{
|
{
|
||||||
dust = P_SpawnMobj(source->x, source->y, source->z, MT_SMOKE);
|
dust = P_SpawnMobj(source->x, source->y, source->z, MT_SMOKE);
|
||||||
dust->angle = (ANGLE_180/16) * i;
|
dust->angle = (ANGLE_180/16) * i;
|
||||||
dust->scale = source->scale;
|
P_SetScale(dust, source->scale);
|
||||||
dust->destscale = source->scale*10;
|
dust->destscale = source->scale*10;
|
||||||
P_InstaThrust(dust, dust->angle, FixedMul(20*FRACUNIT, source->scale));
|
P_InstaThrust(dust, dust->angle, FixedMul(20*FRACUNIT, source->scale));
|
||||||
|
|
||||||
truc = P_SpawnMobj(source->x + P_RandomRange(-radius, radius)*FRACUNIT,
|
truc = P_SpawnMobj(source->x + P_RandomRange(-radius, radius)*FRACUNIT,
|
||||||
source->y + P_RandomRange(-radius, radius)*FRACUNIT,
|
source->y + P_RandomRange(-radius, radius)*FRACUNIT,
|
||||||
source->z + P_RandomRange(0, height)*FRACUNIT, MT_BOOMEXPLODE);
|
source->z + P_RandomRange(0, height)*FRACUNIT, MT_BOOMEXPLODE);
|
||||||
truc->scale = source->scale*2;
|
P_SetScale(truc, source->scale);
|
||||||
truc->destscale = source->scale*6;
|
truc->destscale = source->scale*6;
|
||||||
speed = FixedMul(10*FRACUNIT, source->scale)>>FRACBITS;
|
speed = FixedMul(10*FRACUNIT, source->scale)>>FRACBITS;
|
||||||
truc->momx = P_RandomRange(-speed, speed)*FRACUNIT;
|
truc->momx = P_RandomRange(-speed, speed)*FRACUNIT;
|
||||||
|
@ -2180,7 +2197,7 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color)
|
||||||
dust = P_SpawnMobj(source->x + P_RandomRange(-radius, radius)*FRACUNIT,
|
dust = P_SpawnMobj(source->x + P_RandomRange(-radius, radius)*FRACUNIT,
|
||||||
source->y + P_RandomRange(-radius, radius)*FRACUNIT,
|
source->y + P_RandomRange(-radius, radius)*FRACUNIT,
|
||||||
source->z + P_RandomRange(0, height)*FRACUNIT, MT_SMOKE);
|
source->z + P_RandomRange(0, height)*FRACUNIT, MT_SMOKE);
|
||||||
dust->scale = source->scale;
|
P_SetScale(dust, source->scale);
|
||||||
dust->destscale = source->scale*10;
|
dust->destscale = source->scale*10;
|
||||||
dust->tics = 30;
|
dust->tics = 30;
|
||||||
dust->momz = P_RandomRange(FixedMul(3*FRACUNIT, source->scale)>>FRACBITS, FixedMul(7*FRACUNIT, source->scale)>>FRACBITS)*FRACUNIT;
|
dust->momz = P_RandomRange(FixedMul(3*FRACUNIT, source->scale)>>FRACBITS, FixedMul(7*FRACUNIT, source->scale)>>FRACBITS)*FRACUNIT;
|
||||||
|
@ -2188,7 +2205,7 @@ void K_SpawnMineExplosion(mobj_t *source, UINT8 color)
|
||||||
truc = P_SpawnMobj(source->x + P_RandomRange(-radius, radius)*FRACUNIT,
|
truc = P_SpawnMobj(source->x + P_RandomRange(-radius, radius)*FRACUNIT,
|
||||||
source->y + P_RandomRange(-radius, radius)*FRACUNIT,
|
source->y + P_RandomRange(-radius, radius)*FRACUNIT,
|
||||||
source->z + P_RandomRange(0, height)*FRACUNIT, MT_BOOMPARTICLE);
|
source->z + P_RandomRange(0, height)*FRACUNIT, MT_BOOMPARTICLE);
|
||||||
truc->scale = source->scale;
|
P_SetScale(truc, source->scale);
|
||||||
truc->destscale = source->scale*5;
|
truc->destscale = source->scale*5;
|
||||||
speed = FixedMul(20*FRACUNIT, source->scale)>>FRACBITS;
|
speed = FixedMul(20*FRACUNIT, source->scale)>>FRACBITS;
|
||||||
truc->momx = P_RandomRange(-speed, speed)*FRACUNIT;
|
truc->momx = P_RandomRange(-speed, speed)*FRACUNIT;
|
||||||
|
@ -2377,6 +2394,41 @@ static void K_SpawnDriftSparks(player_t *player)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void K_SpawnAIZDust(player_t *player)
|
||||||
|
{
|
||||||
|
fixed_t newx;
|
||||||
|
fixed_t newy;
|
||||||
|
mobj_t *spark;
|
||||||
|
angle_t travelangle;
|
||||||
|
|
||||||
|
I_Assert(player != NULL);
|
||||||
|
I_Assert(player->mo != NULL);
|
||||||
|
I_Assert(!P_MobjWasRemoved(player->mo));
|
||||||
|
|
||||||
|
if (leveltime % 2 == 1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!P_IsObjectOnGround(player->mo))
|
||||||
|
return;
|
||||||
|
|
||||||
|
travelangle = R_PointToAngle2(0, 0, player->mo->momx, player->mo->momy);
|
||||||
|
|
||||||
|
{
|
||||||
|
newx = player->mo->x + P_ReturnThrustX(player->mo, travelangle - (player->kartstuff[k_aizdriftstrat]*ANGLE_45), FixedMul(24*FRACUNIT, player->mo->scale));
|
||||||
|
newy = player->mo->y + P_ReturnThrustY(player->mo, travelangle - (player->kartstuff[k_aizdriftstrat]*ANGLE_45), FixedMul(24*FRACUNIT, player->mo->scale));
|
||||||
|
spark = P_SpawnMobj(newx, newy, player->mo->z, MT_AIZDRIFTSTRAT);
|
||||||
|
|
||||||
|
spark->angle = travelangle+(player->kartstuff[k_aizdriftstrat]*ANGLE_90);
|
||||||
|
P_SetScale(spark, (spark->destscale = (3*player->mo->scale)>>2));
|
||||||
|
|
||||||
|
spark->momx = (6*player->mo->momx)/5;
|
||||||
|
spark->momy = (6*player->mo->momy)/5;
|
||||||
|
//spark->momz = player->mo->momz/2;
|
||||||
|
|
||||||
|
K_MatchGenericExtraFlags(spark, player->mo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void K_SpawnBoostTrail(player_t *player)
|
void K_SpawnBoostTrail(player_t *player)
|
||||||
{
|
{
|
||||||
fixed_t newx;
|
fixed_t newx;
|
||||||
|
@ -2551,7 +2603,7 @@ void K_DriftDustHandling(mobj_t *spawner)
|
||||||
dust->momx = FixedMul(spawner->momx + (P_RandomRange(-speedrange, speedrange)<<FRACBITS), 3*FRACUNIT/4);
|
dust->momx = FixedMul(spawner->momx + (P_RandomRange(-speedrange, speedrange)<<FRACBITS), 3*FRACUNIT/4);
|
||||||
dust->momy = FixedMul(spawner->momy + (P_RandomRange(-speedrange, speedrange)<<FRACBITS), 3*FRACUNIT/4);
|
dust->momy = FixedMul(spawner->momy + (P_RandomRange(-speedrange, speedrange)<<FRACBITS), 3*FRACUNIT/4);
|
||||||
dust->momz = P_MobjFlip(spawner) * P_RandomRange(1, 4)<<FRACBITS;
|
dust->momz = P_MobjFlip(spawner) * P_RandomRange(1, 4)<<FRACBITS;
|
||||||
dust->scale = spawner->scale/2;
|
P_SetScale(dust, spawner->scale/2);
|
||||||
dust->destscale = spawner->scale * 3;
|
dust->destscale = spawner->scale * 3;
|
||||||
|
|
||||||
if (leveltime % 6 == 0)
|
if (leveltime % 6 == 0)
|
||||||
|
@ -3016,46 +3068,191 @@ killnext:
|
||||||
}
|
}
|
||||||
|
|
||||||
// Just for firing/dropping items.
|
// Just for firing/dropping items.
|
||||||
void K_CleanHnextList(mobj_t *work)
|
void K_UpdateHnextList(player_t *player, boolean clean)
|
||||||
{
|
|
||||||
mobj_t *nextwork;
|
|
||||||
|
|
||||||
if (!work)
|
|
||||||
return;
|
|
||||||
|
|
||||||
work = work->hnext;
|
|
||||||
|
|
||||||
while (work && !P_MobjWasRemoved(work))
|
|
||||||
{
|
|
||||||
nextwork = work->hnext;
|
|
||||||
|
|
||||||
P_RemoveMobj(work);
|
|
||||||
|
|
||||||
work = nextwork;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ditto.
|
|
||||||
void K_UpdateHnextList(player_t *player)
|
|
||||||
{
|
{
|
||||||
mobj_t *work = player->mo, *nextwork;
|
mobj_t *work = player->mo, *nextwork;
|
||||||
|
|
||||||
if (!work)
|
if (!work)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
work = work->hnext;
|
nextwork = work->hnext;
|
||||||
|
|
||||||
while (work && !P_MobjWasRemoved(work))
|
while ((work = nextwork) && !P_MobjWasRemoved(work))
|
||||||
{
|
{
|
||||||
nextwork = work->hnext;
|
nextwork = work->hnext;
|
||||||
|
|
||||||
if (work->movedir > 0 && work->movedir > (UINT16)player->kartstuff[k_itemamount])
|
if (!clean && (!work->movedir || work->movedir <= (UINT16)player->kartstuff[k_itemamount]))
|
||||||
P_RemoveMobj(work);
|
continue;
|
||||||
|
|
||||||
work = nextwork;
|
P_RemoveMobj(work);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For getting hit!
|
||||||
|
void K_DropHnextList(player_t *player)
|
||||||
|
{
|
||||||
|
mobj_t *work = player->mo, *nextwork, *dropwork;
|
||||||
|
INT32 flip;
|
||||||
|
mobjtype_t type;
|
||||||
|
boolean orbit, ponground;
|
||||||
|
|
||||||
|
if (!work)
|
||||||
|
return;
|
||||||
|
|
||||||
|
flip = P_MobjFlip(player->mo);
|
||||||
|
ponground = P_IsObjectOnGround(player->mo);
|
||||||
|
|
||||||
|
if (player->kartstuff[k_itemtype] == KITEM_THUNDERSHIELD && player->kartstuff[k_itemamount])
|
||||||
|
{
|
||||||
|
K_DoThunderShield(player);
|
||||||
|
player->kartstuff[k_itemamount] = 0;
|
||||||
|
player->kartstuff[k_itemtype] = KITEM_NONE;
|
||||||
|
player->kartstuff[k_curshield] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
nextwork = work->hnext;
|
||||||
|
|
||||||
|
while ((work = nextwork) && !P_MobjWasRemoved(work))
|
||||||
|
{
|
||||||
|
nextwork = work->hnext;
|
||||||
|
|
||||||
|
switch (work->type)
|
||||||
|
{
|
||||||
|
// Kart orbit items
|
||||||
|
case MT_ORBINAUT_SHIELD:
|
||||||
|
orbit = true;
|
||||||
|
type = MT_ORBINAUT;
|
||||||
|
break;
|
||||||
|
case MT_JAWZ_SHIELD:
|
||||||
|
orbit = true;
|
||||||
|
type = MT_JAWZ_DUD;
|
||||||
|
break;
|
||||||
|
// Kart trailing items
|
||||||
|
case MT_BANANA_SHIELD:
|
||||||
|
orbit = false;
|
||||||
|
type = MT_BANANA;
|
||||||
|
break;
|
||||||
|
case MT_SSMINE_SHIELD:
|
||||||
|
orbit = false;
|
||||||
|
type = MT_SSMINE;
|
||||||
|
break;
|
||||||
|
case MT_FAKESHIELD:
|
||||||
|
orbit = false;
|
||||||
|
type = MT_FAKEITEM;
|
||||||
|
break;
|
||||||
|
// intentionally do nothing
|
||||||
|
case MT_SINK_SHIELD:
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
dropwork = P_SpawnMobj(work->x, work->y, work->z, type);
|
||||||
|
P_SetTarget(&dropwork->target, player->mo);
|
||||||
|
dropwork->angle = work->angle;
|
||||||
|
dropwork->flags2 = work->flags2;
|
||||||
|
dropwork->flags |= MF_NOCLIPTHING;
|
||||||
|
dropwork->floorz = work->floorz;
|
||||||
|
dropwork->ceilingz = work->ceilingz;
|
||||||
|
|
||||||
|
if (ponground)
|
||||||
|
{
|
||||||
|
// floorz and ceilingz aren't properly set to account for FOFs and Polyobjects on spawn
|
||||||
|
// This should set it for FOFs
|
||||||
|
//P_TeleportMove(dropwork, dropwork->x, dropwork->y, dropwork->z); -- handled better by above floorz/ceilingz passing
|
||||||
|
|
||||||
|
if (flip == 1)
|
||||||
|
{
|
||||||
|
if (dropwork->floorz > dropwork->target->z - dropwork->height)
|
||||||
|
{
|
||||||
|
dropwork->z = dropwork->floorz;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (dropwork->ceilingz < dropwork->target->z + dropwork->target->height + dropwork->height)
|
||||||
|
{
|
||||||
|
dropwork->z = dropwork->ceilingz - dropwork->height;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (orbit) // splay out
|
||||||
|
{
|
||||||
|
dropwork->flags2 |= MF2_AMBUSH;
|
||||||
|
dropwork->z += flip;
|
||||||
|
dropwork->momx = player->mo->momx>>1;
|
||||||
|
dropwork->momy = player->mo->momy>>1;
|
||||||
|
dropwork->momz = 3*flip*mapheaderinfo[gamemap-1]->mobj_scale;
|
||||||
|
P_Thrust(dropwork, work->angle - ANGLE_90, 6*(mapheaderinfo[gamemap-1]->mobj_scale));
|
||||||
|
dropwork->movecount = 2;
|
||||||
|
dropwork->movedir = work->angle - ANGLE_90;
|
||||||
|
P_SetMobjState(dropwork, dropwork->info->deathstate);
|
||||||
|
dropwork->tics = -1;
|
||||||
|
if (type == MT_JAWZ_DUD)
|
||||||
|
dropwork->z += 20*flip*dropwork->scale;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dropwork->color = work->color;
|
||||||
|
dropwork->angle -= ANGLE_90;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else // plop on the ground
|
||||||
|
{
|
||||||
|
dropwork->flags &= ~MF_NOCLIPTHING;
|
||||||
|
dropwork->threshold = 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
P_RemoveMobj(work);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// we need this here too because this is done in afterthink - pointers are cleaned up at the START of each tic...
|
||||||
|
P_SetTarget(&player->mo->hnext, NULL);
|
||||||
|
player->kartstuff[k_bananadrag] = 0;
|
||||||
|
if (player->kartstuff[k_eggmanheld])
|
||||||
|
player->kartstuff[k_eggmanheld] = 0;
|
||||||
|
else if (player->kartstuff[k_itemheld])
|
||||||
|
{
|
||||||
|
player->kartstuff[k_itemamount] = player->kartstuff[k_itemheld] = 0;
|
||||||
|
player->kartstuff[k_itemtype] = KITEM_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// For getting EXTRA hit!
|
||||||
|
void K_DropItems(player_t *player)
|
||||||
|
{
|
||||||
|
boolean thunderhack = (player->kartstuff[k_curshield] && player->kartstuff[k_itemtype] == KITEM_THUNDERSHIELD);
|
||||||
|
|
||||||
|
if (thunderhack)
|
||||||
|
player->kartstuff[k_itemtype] = KITEM_NONE;
|
||||||
|
|
||||||
|
K_DropHnextList(player);
|
||||||
|
|
||||||
|
if (player->mo && player->kartstuff[k_itemamount])
|
||||||
|
{
|
||||||
|
mobj_t *drop = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + player->mo->height/2, MT_FLOATINGITEM);
|
||||||
|
P_SetScale(drop, drop->scale>>4);
|
||||||
|
drop->destscale = (3*drop->destscale)/2;;
|
||||||
|
|
||||||
|
drop->angle = player->mo->angle + ANGLE_90;
|
||||||
|
drop->momx = player->mo->momx>>1;
|
||||||
|
drop->momy = player->mo->momy>>1;
|
||||||
|
P_Thrust(drop,
|
||||||
|
FixedAngle(P_RandomFixed()*180) + player->mo->angle + ANGLE_90,
|
||||||
|
8*(mapheaderinfo[gamemap-1]->mobj_scale));
|
||||||
|
drop->momz = P_MobjFlip(player->mo)*3*(mapheaderinfo[gamemap-1]->mobj_scale);
|
||||||
|
|
||||||
|
drop->threshold = (thunderhack ? KITEM_THUNDERSHIELD : player->kartstuff[k_itemtype]);
|
||||||
|
drop->movecount = player->kartstuff[k_itemamount];
|
||||||
|
|
||||||
|
drop->flags |= MF_NOCLIPTHING;
|
||||||
|
}
|
||||||
|
|
||||||
|
K_StripItems(player);
|
||||||
|
}
|
||||||
|
|
||||||
// When an item in the hnext chain dies.
|
// When an item in the hnext chain dies.
|
||||||
void K_RepairOrbitChain(mobj_t *orbit)
|
void K_RepairOrbitChain(mobj_t *orbit)
|
||||||
{
|
{
|
||||||
|
@ -3714,7 +3911,8 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
||||||
|
|
||||||
void K_KartPlayerAfterThink(player_t *player)
|
void K_KartPlayerAfterThink(player_t *player)
|
||||||
{
|
{
|
||||||
if (player->kartstuff[k_invincibilitytimer]
|
if (player->kartstuff[k_curshield]
|
||||||
|
|| player->kartstuff[k_invincibilitytimer]
|
||||||
|| (player->kartstuff[k_growshrinktimer] != 0 && player->kartstuff[k_growshrinktimer] % 5 == 4)) // 4 instead of 0 because this is afterthink!
|
|| (player->kartstuff[k_growshrinktimer] != 0 && player->kartstuff[k_growshrinktimer] % 5 == 4)) // 4 instead of 0 because this is afterthink!
|
||||||
{
|
{
|
||||||
player->mo->frame |= FF_FULLBRIGHT;
|
player->mo->frame |= FF_FULLBRIGHT;
|
||||||
|
@ -3901,16 +4099,14 @@ static void K_KartDrift(player_t *player, boolean onground)
|
||||||
{
|
{
|
||||||
// Starting left drift
|
// Starting left drift
|
||||||
player->kartstuff[k_drift] = 1;
|
player->kartstuff[k_drift] = 1;
|
||||||
player->kartstuff[k_driftend] = 0;
|
player->kartstuff[k_driftend] = player->kartstuff[k_driftcharge] = 0;
|
||||||
player->kartstuff[k_driftcharge] = 0;
|
|
||||||
}
|
}
|
||||||
else if ((player->cmd.driftturn < 0) && player->speed > FixedMul(10<<16, player->mo->scale) && player->kartstuff[k_jmp] == 1
|
else if ((player->cmd.driftturn < 0) && player->speed > FixedMul(10<<16, player->mo->scale) && player->kartstuff[k_jmp] == 1
|
||||||
&& (player->kartstuff[k_drift] == 0 || player->kartstuff[k_driftend] == 1)) // && player->kartstuff[k_drift] != -1)
|
&& (player->kartstuff[k_drift] == 0 || player->kartstuff[k_driftend] == 1)) // && player->kartstuff[k_drift] != -1)
|
||||||
{
|
{
|
||||||
// Starting right drift
|
// Starting right drift
|
||||||
player->kartstuff[k_drift] = -1;
|
player->kartstuff[k_drift] = -1;
|
||||||
player->kartstuff[k_driftend] = 0;
|
player->kartstuff[k_driftend] = player->kartstuff[k_driftcharge] = 0;
|
||||||
player->kartstuff[k_driftcharge] = 0;
|
|
||||||
}
|
}
|
||||||
else if (player->kartstuff[k_jmp] == 0) // || player->kartstuff[k_turndir] == 0)
|
else if (player->kartstuff[k_jmp] == 0) // || player->kartstuff[k_turndir] == 0)
|
||||||
{
|
{
|
||||||
|
@ -3969,9 +4165,20 @@ static void K_KartDrift(player_t *player, boolean onground)
|
||||||
if (player->kartstuff[k_spinouttimer] > 0 // banana peel
|
if (player->kartstuff[k_spinouttimer] > 0 // banana peel
|
||||||
|| player->speed < FixedMul(10<<16, player->mo->scale)) // you're too slow!
|
|| player->speed < FixedMul(10<<16, player->mo->scale)) // you're too slow!
|
||||||
{
|
{
|
||||||
player->kartstuff[k_drift] = 0;
|
player->kartstuff[k_drift] = player->kartstuff[k_driftcharge] = player->kartstuff[k_aizdriftstrat] = 0;
|
||||||
player->kartstuff[k_driftcharge] = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((!player->kartstuff[k_sneakertimer])
|
||||||
|
|| (!player->cmd.driftturn)
|
||||||
|
|| (player->cmd.driftturn > 0) != (player->kartstuff[k_aizdriftstrat] > 0))
|
||||||
|
{
|
||||||
|
if (!player->kartstuff[k_drift])
|
||||||
|
player->kartstuff[k_aizdriftstrat] = 0;
|
||||||
|
else
|
||||||
|
player->kartstuff[k_aizdriftstrat] = ((player->kartstuff[k_drift] > 0) ? 1 : -1);
|
||||||
|
}
|
||||||
|
else if (player->kartstuff[k_aizdriftstrat] && !player->kartstuff[k_drift])
|
||||||
|
K_SpawnAIZDust(player);
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
// K_KartUpdatePosition
|
// K_KartUpdatePosition
|
||||||
|
@ -4100,20 +4307,18 @@ static void K_KartUpdatePosition(player_t *player)
|
||||||
//
|
//
|
||||||
void K_StripItems(player_t *player)
|
void K_StripItems(player_t *player)
|
||||||
{
|
{
|
||||||
player->kartstuff[k_itemtype] = 0;
|
player->kartstuff[k_itemtype] = KITEM_NONE;
|
||||||
player->kartstuff[k_itemamount] = 0;
|
player->kartstuff[k_itemamount] = 0;
|
||||||
player->kartstuff[k_itemheld] = 0;
|
player->kartstuff[k_itemheld] = 0;
|
||||||
|
|
||||||
|
player->kartstuff[k_rocketsneakertimer] = 0;
|
||||||
|
|
||||||
|
if (!player->kartstuff[k_itemroulette] || player->kartstuff[k_roulettetype] != 2)
|
||||||
|
{
|
||||||
player->kartstuff[k_itemroulette] = 0;
|
player->kartstuff[k_itemroulette] = 0;
|
||||||
player->kartstuff[k_roulettetype] = 0;
|
player->kartstuff[k_roulettetype] = 0;
|
||||||
|
}
|
||||||
player->kartstuff[k_rocketsneakertimer] = 0;
|
|
||||||
player->kartstuff[k_invincibilitytimer] = 0;
|
|
||||||
player->kartstuff[k_growshrinktimer] = 0;
|
|
||||||
|
|
||||||
player->kartstuff[k_eggmanheld] = 0;
|
player->kartstuff[k_eggmanheld] = 0;
|
||||||
player->kartstuff[k_eggmanexplode] = 0;
|
|
||||||
player->kartstuff[k_eggmanblame] = 0;
|
|
||||||
|
|
||||||
player->kartstuff[k_hyudorotimer] = 0;
|
player->kartstuff[k_hyudorotimer] = 0;
|
||||||
player->kartstuff[k_stealingtimer] = 0;
|
player->kartstuff[k_stealingtimer] = 0;
|
||||||
|
@ -4125,7 +4330,19 @@ void K_StripItems(player_t *player)
|
||||||
|
|
||||||
player->kartstuff[k_sadtimer] = 0;
|
player->kartstuff[k_sadtimer] = 0;
|
||||||
|
|
||||||
K_CleanHnextList(player->mo);
|
K_UpdateHnextList(player, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void K_StripOther(player_t *player)
|
||||||
|
{
|
||||||
|
player->kartstuff[k_itemroulette] = 0;
|
||||||
|
player->kartstuff[k_roulettetype] = 0;
|
||||||
|
|
||||||
|
player->kartstuff[k_invincibilitytimer] = 0;
|
||||||
|
player->kartstuff[k_growshrinktimer] = 0;
|
||||||
|
|
||||||
|
player->kartstuff[k_eggmanexplode] = 0;
|
||||||
|
player->kartstuff[k_eggmanblame] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -4191,7 +4408,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
K_ThrowKartItem(player, false, MT_FAKEITEM, -1, 0);
|
K_ThrowKartItem(player, false, MT_FAKEITEM, -1, 0);
|
||||||
K_PlayAttackTaunt(player->mo);
|
K_PlayAttackTaunt(player->mo);
|
||||||
player->kartstuff[k_eggmanheld] = 0;
|
player->kartstuff[k_eggmanheld] = 0;
|
||||||
K_CleanHnextList(player->mo);
|
K_UpdateHnextList(player, true);
|
||||||
}
|
}
|
||||||
// Rocket Sneaker
|
// Rocket Sneaker
|
||||||
else if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO
|
else if (ATTACK_IS_DOWN && !HOLDING_ITEM && onground && NO_HYUDORO
|
||||||
|
@ -4281,7 +4498,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
K_ThrowKartItem(player, false, MT_BANANA, -1, 0);
|
K_ThrowKartItem(player, false, MT_BANANA, -1, 0);
|
||||||
K_PlayAttackTaunt(player->mo);
|
K_PlayAttackTaunt(player->mo);
|
||||||
player->kartstuff[k_itemamount]--;
|
player->kartstuff[k_itemamount]--;
|
||||||
K_UpdateHnextList(player);
|
K_UpdateHnextList(player, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KITEM_EGGMAN:
|
case KITEM_EGGMAN:
|
||||||
|
@ -4341,7 +4558,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
K_ThrowKartItem(player, true, MT_ORBINAUT, 1, 0);
|
K_ThrowKartItem(player, true, MT_ORBINAUT, 1, 0);
|
||||||
K_PlayAttackTaunt(player->mo);
|
K_PlayAttackTaunt(player->mo);
|
||||||
player->kartstuff[k_itemamount]--;
|
player->kartstuff[k_itemamount]--;
|
||||||
K_UpdateHnextList(player);
|
K_UpdateHnextList(player, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KITEM_JAWZ:
|
case KITEM_JAWZ:
|
||||||
|
@ -4384,7 +4601,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
K_ThrowKartItem(player, true, MT_JAWZ_DUD, -1, 0);
|
K_ThrowKartItem(player, true, MT_JAWZ_DUD, -1, 0);
|
||||||
K_PlayAttackTaunt(player->mo);
|
K_PlayAttackTaunt(player->mo);
|
||||||
player->kartstuff[k_itemamount]--;
|
player->kartstuff[k_itemamount]--;
|
||||||
K_UpdateHnextList(player);
|
K_UpdateHnextList(player, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KITEM_MINE:
|
case KITEM_MINE:
|
||||||
|
@ -4410,7 +4627,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
K_PlayAttackTaunt(player->mo);
|
K_PlayAttackTaunt(player->mo);
|
||||||
player->kartstuff[k_itemamount]--;
|
player->kartstuff[k_itemamount]--;
|
||||||
player->kartstuff[k_itemheld] = 0;
|
player->kartstuff[k_itemheld] = 0;
|
||||||
K_CleanHnextList(player->mo);
|
K_UpdateHnextList(player, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KITEM_BALLHOG:
|
case KITEM_BALLHOG:
|
||||||
|
@ -4489,6 +4706,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
if (player->kartstuff[k_curshield] <= 0)
|
if (player->kartstuff[k_curshield] <= 0)
|
||||||
{
|
{
|
||||||
mobj_t *shield = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_THUNDERSHIELD);
|
mobj_t *shield = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z, MT_THUNDERSHIELD);
|
||||||
|
P_SetScale(shield, (shield->destscale = (5*shield->destscale)>>2));
|
||||||
P_SetTarget(&shield->target, player->mo);
|
P_SetTarget(&shield->target, player->mo);
|
||||||
player->kartstuff[k_curshield] = 1;
|
player->kartstuff[k_curshield] = 1;
|
||||||
}
|
}
|
||||||
|
@ -4539,7 +4757,7 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
K_PlayAttackTaunt(player->mo);
|
K_PlayAttackTaunt(player->mo);
|
||||||
player->kartstuff[k_itemamount]--;
|
player->kartstuff[k_itemamount]--;
|
||||||
player->kartstuff[k_itemheld] = 0;
|
player->kartstuff[k_itemheld] = 0;
|
||||||
K_CleanHnextList(player->mo);
|
K_UpdateHnextList(player, true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case KITEM_SAD:
|
case KITEM_SAD:
|
||||||
|
@ -4618,7 +4836,8 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
||||||
|
|
||||||
if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0) // dead in match? you da bomb
|
if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0) // dead in match? you da bomb
|
||||||
{
|
{
|
||||||
K_StripItems(player);
|
K_DropItems(player); //K_StripItems(player);
|
||||||
|
K_StripOther(player);
|
||||||
player->mo->flags2 |= MF2_SHADOW;
|
player->mo->flags2 |= MF2_SHADOW;
|
||||||
player->powers[pw_flashing] = player->kartstuff[k_comebacktimer];
|
player->powers[pw_flashing] = player->kartstuff[k_comebacktimer];
|
||||||
}
|
}
|
||||||
|
@ -5603,10 +5822,10 @@ static void K_drawKartItem(void)
|
||||||
case KITEM_JAWZ: localpatch = kp_jawz[offset]; break;
|
case KITEM_JAWZ: localpatch = kp_jawz[offset]; break;
|
||||||
case KITEM_MINE: localpatch = kp_mine[offset]; break;
|
case KITEM_MINE: localpatch = kp_mine[offset]; break;
|
||||||
case KITEM_BALLHOG: localpatch = kp_ballhog[offset]; break;
|
case KITEM_BALLHOG: localpatch = kp_ballhog[offset]; break;
|
||||||
case KITEM_SPB: localpatch = kp_selfpropelledbomb[offset]; break;
|
case KITEM_SPB: localpatch = kp_selfpropelledbomb[offset]; localbg = kp_itembg[offset+1]; break;
|
||||||
case KITEM_GROW: localpatch = kp_grow[offset]; break;
|
case KITEM_GROW: localpatch = kp_grow[offset]; break;
|
||||||
case KITEM_SHRINK: localpatch = kp_shrink[offset]; break;
|
case KITEM_SHRINK: localpatch = kp_shrink[offset]; break;
|
||||||
case KITEM_THUNDERSHIELD: localpatch = kp_thundershield[offset]; break;
|
case KITEM_THUNDERSHIELD: localpatch = kp_thundershield[offset]; localbg = kp_itembg[offset+1]; break;
|
||||||
case KITEM_HYUDORO: localpatch = kp_hyudoro[offset]; break;
|
case KITEM_HYUDORO: localpatch = kp_hyudoro[offset]; break;
|
||||||
case KITEM_POGOSPRING: localpatch = kp_pogospring[offset]; break;
|
case KITEM_POGOSPRING: localpatch = kp_pogospring[offset]; break;
|
||||||
case KITEM_KITCHENSINK: localpatch = kp_kitchensink[offset]; break;
|
case KITEM_KITCHENSINK: localpatch = kp_kitchensink[offset]; break;
|
||||||
|
|
|
@ -39,14 +39,16 @@ void K_DriftDustHandling(mobj_t *spawner);
|
||||||
void K_DoSneaker(player_t *player, boolean doPFlag);
|
void K_DoSneaker(player_t *player, boolean doPFlag);
|
||||||
void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed, boolean mute);
|
void K_DoPogoSpring(mobj_t *mo, fixed_t vertispeed, boolean mute);
|
||||||
void K_KillBananaChain(mobj_t *banana, mobj_t *inflictor, mobj_t *source);
|
void K_KillBananaChain(mobj_t *banana, mobj_t *inflictor, mobj_t *source);
|
||||||
void K_CleanHnextList(mobj_t *work);
|
void K_UpdateHnextList(player_t *player, boolean clean);
|
||||||
void K_UpdateHnextList(player_t *player);
|
void K_DropHnextList(player_t *player);
|
||||||
void K_RepairOrbitChain(mobj_t *orbit);
|
void K_RepairOrbitChain(mobj_t *orbit);
|
||||||
player_t *K_FindJawzTarget(mobj_t *actor, player_t *source);
|
player_t *K_FindJawzTarget(mobj_t *actor, player_t *source);
|
||||||
boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y);
|
boolean K_CheckPlayersRespawnColliding(INT32 playernum, fixed_t x, fixed_t y);
|
||||||
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue);
|
INT16 K_GetKartTurnValue(player_t *player, INT16 turnvalue);
|
||||||
fixed_t K_GetKartDriftSparkValue(player_t *player);
|
fixed_t K_GetKartDriftSparkValue(player_t *player);
|
||||||
|
void K_DropItems(player_t *player);
|
||||||
void K_StripItems(player_t *player);
|
void K_StripItems(player_t *player);
|
||||||
|
void K_StripOther(player_t *player);
|
||||||
void K_MomentumToFacing(player_t *player);
|
void K_MomentumToFacing(player_t *player);
|
||||||
fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower);
|
fixed_t K_GetKartSpeed(player_t *player, boolean doboostpower);
|
||||||
fixed_t K_GetKartAccel(player_t *player);
|
fixed_t K_GetKartAccel(player_t *player);
|
||||||
|
|
|
@ -181,13 +181,13 @@ boolean P_CanPickupItem(player_t *player, UINT8 weapon)
|
||||||
{
|
{
|
||||||
// Item-specific timer going off
|
// Item-specific timer going off
|
||||||
if (player->kartstuff[k_stealingtimer] || player->kartstuff[k_stolentimer]
|
if (player->kartstuff[k_stealingtimer] || player->kartstuff[k_stolentimer]
|
||||||
|| player->kartstuff[k_growshrinktimer] != 0 || player->kartstuff[k_rocketsneakertimer]
|
|| player->kartstuff[k_growshrinktimer] > 0 || player->kartstuff[k_rocketsneakertimer]
|
||||||
|| player->kartstuff[k_eggmanexplode])
|
|| player->kartstuff[k_eggmanexplode])
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// Item slot already taken up
|
// Item slot already taken up
|
||||||
if (player->kartstuff[k_itemroulette]
|
if (player->kartstuff[k_itemroulette]
|
||||||
|| player->kartstuff[k_itemamount]
|
|| (weapon != 3 && player->kartstuff[k_itemamount])
|
||||||
|| player->kartstuff[k_itemheld])
|
|| player->kartstuff[k_itemheld])
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -429,6 +429,27 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
// We now identify by object type, not sprite! Tails 04-11-2001
|
// We now identify by object type, not sprite! Tails 04-11-2001
|
||||||
switch (special->type)
|
switch (special->type)
|
||||||
{
|
{
|
||||||
|
case MT_FLOATINGITEM: // SRB2kart
|
||||||
|
if (!P_CanPickupItem(player, 3) || (player->kartstuff[k_itemamount] && player->kartstuff[k_itemtype] != special->threshold))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
player->kartstuff[k_itemtype] = special->threshold;
|
||||||
|
player->kartstuff[k_itemamount] += special->movecount;
|
||||||
|
if (player->kartstuff[k_itemamount] > 255)
|
||||||
|
player->kartstuff[k_itemamount] = 255;
|
||||||
|
|
||||||
|
S_StartSound(special, special->info->deathsound);
|
||||||
|
|
||||||
|
P_SetTarget(&special->tracer, toucher);
|
||||||
|
special->flags2 |= MF2_NIGHTSPULL;
|
||||||
|
special->destscale = mapheaderinfo[gamemap-1]->mobj_scale>>4;
|
||||||
|
special->scalespeed <<= 1;
|
||||||
|
|
||||||
|
special->flags &= ~MF_SPECIAL;
|
||||||
|
return;
|
||||||
case MT_RANDOMITEM: // SRB2kart
|
case MT_RANDOMITEM: // SRB2kart
|
||||||
if (!P_CanPickupItem(player, 1))
|
if (!P_CanPickupItem(player, 1))
|
||||||
return;
|
return;
|
||||||
|
@ -469,8 +490,8 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
mobj_t *poof = P_SpawnMobj(special->x, special->y, special->z, MT_EXPLODE);
|
mobj_t *poof = P_SpawnMobj(special->x, special->y, special->z, MT_EXPLODE);
|
||||||
S_StartSound(poof, special->info->deathsound);
|
S_StartSound(poof, special->info->deathsound);
|
||||||
|
|
||||||
K_StripItems(player);
|
K_DropItems(player); //K_StripItems(player);
|
||||||
if (player->kartstuff[k_itemroulette] <= 0)
|
K_StripOther(player);
|
||||||
player->kartstuff[k_itemroulette] = 1;
|
player->kartstuff[k_itemroulette] = 1;
|
||||||
player->kartstuff[k_roulettetype] = 2;
|
player->kartstuff[k_roulettetype] = 2;
|
||||||
if (special->target && special->target->player
|
if (special->target && special->target->player
|
||||||
|
@ -2625,6 +2646,11 @@ void P_KillMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((target->type == MT_JAWZ || target->type == MT_JAWZ_DUD || target->type == MT_JAWZ_SHIELD) && !(target->flags2 & MF2_AMBUSH))
|
||||||
|
{
|
||||||
|
target->z += P_MobjFlip(target)*20*target->scale;
|
||||||
|
}
|
||||||
|
|
||||||
if (target->type == MT_SPIKE && inflictor && target->info->deathstate != S_NULL)
|
if (target->type == MT_SPIKE && inflictor && target->info->deathstate != S_NULL)
|
||||||
{
|
{
|
||||||
const fixed_t x=target->x,y=target->y,z=target->z;
|
const fixed_t x=target->x,y=target->y,z=target->z;
|
||||||
|
@ -3334,6 +3360,7 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
player->mo->destscale = 6*player->mo->destscale/8;
|
player->mo->destscale = 6*player->mo->destscale/8;
|
||||||
|
|
||||||
// Wipeout
|
// Wipeout
|
||||||
|
K_DropItems(player);
|
||||||
K_SpinPlayer(player, source, 1, false);
|
K_SpinPlayer(player, source, 1, false);
|
||||||
damage = player->mo->health - 1;
|
damage = player->mo->health - 1;
|
||||||
P_RingDamage(player, inflictor, source, damage);
|
P_RingDamage(player, inflictor, source, damage);
|
||||||
|
@ -3345,7 +3372,6 @@ boolean P_DamageMobj(mobj_t *target, mobj_t *inflictor, mobj_t *source, INT32 da
|
||||||
quake.time = 5;
|
quake.time = 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
K_StripItems(player);
|
|
||||||
player->kartstuff[k_growshrinktimer] -= (200+(40*(16-player->kartstuff[k_position])));
|
player->kartstuff[k_growshrinktimer] -= (200+(40*(16-player->kartstuff[k_position])));
|
||||||
}
|
}
|
||||||
// Grow? Let's take that away.
|
// Grow? Let's take that away.
|
||||||
|
|
|
@ -497,7 +497,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(thing->flags & (MF_SOLID|MF_SPECIAL|MF_PAIN|MF_SHOOTABLE)))
|
if (!(thing->flags & (MF_SOLID|MF_SPECIAL|MF_PAIN|MF_SHOOTABLE)) || (thing->flags & MF_NOCLIPTHING))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
// Don't collide with your buddies while NiGHTS-flying.
|
// Don't collide with your buddies while NiGHTS-flying.
|
||||||
|
|
261
src/p_mobj.c
261
src/p_mobj.c
|
@ -6009,7 +6009,7 @@ void P_Attract(mobj_t *source, mobj_t *dest, boolean nightsgrab) // Home in on y
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// change angle
|
// change angle
|
||||||
source->angle = R_PointToAngle2(source->x, source->y, tx, ty);
|
//source->angle = R_PointToAngle2(source->x, source->y, tx, ty);
|
||||||
|
|
||||||
// change slope
|
// change slope
|
||||||
dist = P_AproxDistance(P_AproxDistance(tx - source->x, ty - source->y), tz - source->z);
|
dist = P_AproxDistance(P_AproxDistance(tx - source->x, ty - source->y), tz - source->z);
|
||||||
|
@ -6018,7 +6018,7 @@ void P_Attract(mobj_t *source, mobj_t *dest, boolean nightsgrab) // Home in on y
|
||||||
dist = 1;
|
dist = 1;
|
||||||
|
|
||||||
if (nightsgrab)
|
if (nightsgrab)
|
||||||
speedmul = P_AproxDistance(dest->momx, dest->momy) + FixedMul(8*FRACUNIT, source->scale);
|
speedmul = P_AproxDistance(dest->momx, dest->momy) + source->scale;
|
||||||
else
|
else
|
||||||
speedmul = P_AproxDistance(dest->momx, dest->momy) + FixedMul(source->info->speed, source->scale);
|
speedmul = P_AproxDistance(dest->momx, dest->momy) + FixedMul(source->info->speed, source->scale);
|
||||||
|
|
||||||
|
@ -6282,16 +6282,18 @@ static void P_RemoveOverlay(mobj_t *thing)
|
||||||
|
|
||||||
void P_RunShadows(void)
|
void P_RunShadows(void)
|
||||||
{
|
{
|
||||||
mobj_t *mobj;
|
mobj_t *mobj, *next, *dest;
|
||||||
mobj_t *next;
|
|
||||||
|
|
||||||
for (mobj = shadowcap; mobj; mobj = next)
|
for (mobj = shadowcap; mobj; mobj = next)
|
||||||
{
|
{
|
||||||
next = mobj->hnext;
|
next = mobj->hnext;
|
||||||
P_SetTarget(&mobj->hnext, NULL);
|
P_SetTarget(&mobj->hnext, NULL);
|
||||||
|
|
||||||
if (!mobj->target)
|
if (!mobj->target || P_MobjWasRemoved(mobj->target))
|
||||||
|
{
|
||||||
|
mobj->flags2 |= MF2_DONTDRAW;
|
||||||
continue; // shouldn't you already be dead?
|
continue; // shouldn't you already be dead?
|
||||||
|
}
|
||||||
|
|
||||||
if ((mobj->target->flags2 & MF2_DONTDRAW)
|
if ((mobj->target->flags2 & MF2_DONTDRAW)
|
||||||
|| (((mobj->target->eflags & MFE_VERTICALFLIP) && mobj->target->z+mobj->target->height > mobj->target->ceilingz)
|
|| (((mobj->target->eflags & MFE_VERTICALFLIP) && mobj->target->z+mobj->target->height > mobj->target->ceilingz)
|
||||||
|
@ -6328,7 +6330,12 @@ void P_RunShadows(void)
|
||||||
// First scale to the same radius
|
// First scale to the same radius
|
||||||
P_SetScale(mobj, FixedDiv(mobj->target->radius, mobj->info->radius));
|
P_SetScale(mobj, FixedDiv(mobj->target->radius, mobj->info->radius));
|
||||||
|
|
||||||
P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z);
|
dest = mobj->target;
|
||||||
|
|
||||||
|
if (dest->type == MT_THUNDERSHIELD)
|
||||||
|
dest = dest->target;
|
||||||
|
|
||||||
|
P_TeleportMove(mobj, dest->x, dest->y, mobj->target->z);
|
||||||
|
|
||||||
if (((mobj->eflags & MFE_VERTICALFLIP) && (mobj->ceilingz > mobj->z+mobj->height))
|
if (((mobj->eflags & MFE_VERTICALFLIP) && (mobj->ceilingz > mobj->z+mobj->height))
|
||||||
|| (!(mobj->eflags & MFE_VERTICALFLIP) && (mobj->floorz < mobj->z)))
|
|| (!(mobj->eflags & MFE_VERTICALFLIP) && (mobj->floorz < mobj->z)))
|
||||||
|
@ -6346,7 +6353,7 @@ void P_RunShadows(void)
|
||||||
P_SetScale(mobj, FixedDiv(mobj->scale, max(FRACUNIT, ((mobj->target->z-mobj->z)/200)+FRACUNIT)));
|
P_SetScale(mobj, FixedDiv(mobj->scale, max(FRACUNIT, ((mobj->target->z-mobj->z)/200)+FRACUNIT)));
|
||||||
|
|
||||||
// Check new position to see if you should still be on that ledge
|
// Check new position to see if you should still be on that ledge
|
||||||
P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->z);
|
P_TeleportMove(mobj, dest->x, dest->y, mobj->z);
|
||||||
|
|
||||||
mobj->z = (mobj->eflags & MFE_VERTICALFLIP ? mobj->ceilingz : mobj->floorz);
|
mobj->z = (mobj->eflags & MFE_VERTICALFLIP ? mobj->ceilingz : mobj->floorz);
|
||||||
|
|
||||||
|
@ -6354,6 +6361,9 @@ void P_RunShadows(void)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mobj->target->type == MT_FLOATINGITEM)
|
||||||
|
P_SetScale(mobj, mobj->scale/2);
|
||||||
}
|
}
|
||||||
P_SetTarget(&shadowcap, NULL);
|
P_SetTarget(&shadowcap, NULL);
|
||||||
}
|
}
|
||||||
|
@ -6629,7 +6639,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
/*if (mobj->health > 0 && mobj->target && mobj->target->player
|
/*if (mobj->health > 0 && mobj->target && mobj->target->player
|
||||||
&& mobj->target->player->health > 0 && !mobj->target->player->spectator)
|
&& mobj->target->player->health > 0 && !mobj->target->player->spectator)
|
||||||
{
|
{
|
||||||
// Was this so hard? -- Handled this with K_UpdateHnextList and K_ClearHnextList instead of thinking it away...
|
// Was this so hard? -- Handled this with K_UpdateHnextList instead of thinking it away...
|
||||||
if ((mobj->type == MT_ORBINAUT_SHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_ORBINAUT)
|
if ((mobj->type == MT_ORBINAUT_SHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_ORBINAUT)
|
||||||
|| (mobj->type == MT_JAWZ_SHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_JAWZ)
|
|| (mobj->type == MT_JAWZ_SHIELD && mobj->target->player->kartstuff[k_itemtype] != KITEM_JAWZ)
|
||||||
|| (mobj->movedir > 0 && ((UINT16)mobj->target->player->kartstuff[k_itemamount] < mobj->movedir))
|
|| (mobj->movedir > 0 && ((UINT16)mobj->target->player->kartstuff[k_itemamount] < mobj->movedir))
|
||||||
|
@ -6813,14 +6823,16 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
mobj->x = mobj->target->x;
|
mobj->x = mobj->target->x;
|
||||||
mobj->y = mobj->target->y;
|
mobj->y = mobj->target->y;
|
||||||
|
|
||||||
|
mobj->angle = R_PointToAngle(mobj->x, mobj->y) + ANGLE_90; // literally only happened because i wanted to ^L^R the SPR_ITEM's
|
||||||
|
|
||||||
if (!(mobj->target->eflags & MFE_VERTICALFLIP))
|
if (!(mobj->target->eflags & MFE_VERTICALFLIP))
|
||||||
{
|
{
|
||||||
mobj->z = mobj->target->z + P_GetPlayerHeight(mobj->target->player)+16*FRACUNIT;
|
mobj->z = mobj->target->z + P_GetPlayerHeight(mobj->target->player)+(16+11)*mapheaderinfo[gamemap-1]->mobj_scale;
|
||||||
mobj->eflags &= ~MFE_VERTICALFLIP;
|
mobj->eflags &= ~MFE_VERTICALFLIP;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mobj->z = mobj->target->z - P_GetPlayerHeight(mobj->target->player)+16*FRACUNIT;
|
mobj->z = mobj->target->z - P_GetPlayerHeight(mobj->target->player)+(16+11)*mapheaderinfo[gamemap-1]->mobj_scale;
|
||||||
mobj->eflags |= MFE_VERTICALFLIP;
|
mobj->eflags |= MFE_VERTICALFLIP;
|
||||||
}
|
}
|
||||||
P_SetThingPosition(mobj);
|
P_SetThingPosition(mobj);
|
||||||
|
@ -6836,7 +6848,8 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
mobj->tracer = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY);
|
mobj->tracer = P_SpawnMobj(mobj->x, mobj->y, mobj->z, MT_OVERLAY);
|
||||||
P_SetTarget(&mobj->tracer->target, mobj);
|
P_SetTarget(&mobj->tracer->target, mobj);
|
||||||
P_SetMobjState(mobj->tracer, S_PLAYERARROW_ITEM);
|
P_SetMobjState(mobj->tracer, S_PLAYERARROW_ITEM);
|
||||||
P_SetScale(mobj->tracer, mobj->scale);
|
P_SetMobjState(mobj->tracer, S_ITEMICON); // null sprite and frame to be overwritten later
|
||||||
|
P_SetScale(mobj->tracer, (mobj->tracer->destscale = mobj->scale));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(mobj->flags2 & MF2_DONTDRAW))
|
if (!(mobj->flags2 & MF2_DONTDRAW))
|
||||||
|
@ -6937,7 +6950,7 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
P_SetMobjState(mobj, S_PLAYERARROW);
|
P_SetMobjState(mobj, S_PLAYERARROW);
|
||||||
P_SetMobjState(mobj->tracer, S_INVISIBLE);
|
P_SetMobjState(mobj->tracer, S_ITEMICON); // null sprite and frame to be overwritten later
|
||||||
}
|
}
|
||||||
|
|
||||||
mobj->tracer->destscale = scale;
|
mobj->tracer->destscale = scale;
|
||||||
|
@ -7007,12 +7020,12 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
|
|
||||||
if (!(mobj->target->eflags & MFE_VERTICALFLIP))
|
if (!(mobj->target->eflags & MFE_VERTICALFLIP))
|
||||||
{
|
{
|
||||||
mobj->z = mobj->target->z + (P_GetPlayerHeight(mobj->target->player)+16*FRACUNIT+(64*mobj->scale));
|
mobj->z = mobj->target->z + (P_GetPlayerHeight(mobj->target->player)+16*mapheaderinfo[gamemap-1]->mobj_scale+(64*mobj->scale));
|
||||||
mobj->eflags &= ~MFE_VERTICALFLIP;
|
mobj->eflags &= ~MFE_VERTICALFLIP;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mobj->z = mobj->target->z - (P_GetPlayerHeight(mobj->target->player)+16*FRACUNIT+(64*mobj->scale));
|
mobj->z = mobj->target->z - (P_GetPlayerHeight(mobj->target->player)+16*mapheaderinfo[gamemap-1]->mobj_scale+(64*mobj->scale));
|
||||||
mobj->eflags |= MFE_VERTICALFLIP;
|
mobj->eflags |= MFE_VERTICALFLIP;
|
||||||
}
|
}
|
||||||
P_SetThingPosition(mobj);
|
P_SetThingPosition(mobj);
|
||||||
|
@ -7917,9 +7930,86 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
mobj->threshold = 0;
|
mobj->threshold = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case MT_FLOATINGITEM:
|
||||||
|
{
|
||||||
|
if (mobj->flags & MF_NOCLIPTHING)
|
||||||
|
{
|
||||||
|
if (P_IsObjectOnGround(mobj))
|
||||||
|
{
|
||||||
|
mobj->momx = 1;
|
||||||
|
mobj->momy = 0;
|
||||||
|
mobj->flags &= ~MF_NOCLIPTHING;
|
||||||
|
mobj->flags |= MF_NOGRAVITY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mobj->angle += 2*ANG2;
|
||||||
|
if (mobj->flags2 & MF2_NIGHTSPULL)
|
||||||
|
{
|
||||||
|
if (!mobj->tracer || !mobj->tracer->health
|
||||||
|
|| mobj->scale <= mapheaderinfo[gamemap-1]->mobj_scale>>4)
|
||||||
|
{
|
||||||
|
P_RemoveMobj(mobj);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
P_Attract(mobj, mobj->tracer, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fixed_t adj = FixedMul(FRACUNIT - FINECOSINE((mobj->movedir>>ANGLETOFINESHIFT) & FINEMASK), (mapheaderinfo[gamemap-1]->mobj_scale<<3));
|
||||||
|
mobj->movedir += 2*ANG2;
|
||||||
|
if (mobj->eflags & MFE_VERTICALFLIP)
|
||||||
|
mobj->z = mobj->ceilingz - mobj->height - adj;
|
||||||
|
else
|
||||||
|
mobj->z = mobj->floorz + adj;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (mobj->threshold)
|
||||||
|
{
|
||||||
|
case KITEM_ORBINAUT:
|
||||||
|
mobj->sprite = SPR_ITMO;
|
||||||
|
mobj->frame = FF_FULLBRIGHT|FF_PAPERSPRITE|(min(mobj->movecount-1, 3));
|
||||||
|
break;
|
||||||
|
case KITEM_INVINCIBILITY:
|
||||||
|
mobj->sprite = SPR_ITMI;
|
||||||
|
mobj->frame = FF_FULLBRIGHT|FF_PAPERSPRITE|((leveltime % (7*3)) / 3);
|
||||||
|
break;
|
||||||
|
case KITEM_SAD:
|
||||||
|
mobj->sprite = SPR_ITEM;
|
||||||
|
mobj->frame = FF_FULLBRIGHT|FF_PAPERSPRITE;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
mobj->sprite = SPR_ITEM;
|
||||||
|
mobj->frame = FF_FULLBRIGHT|FF_PAPERSPRITE|(mobj->threshold);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case MT_ORBINAUT:
|
case MT_ORBINAUT:
|
||||||
{
|
{
|
||||||
sector_t *sec2;
|
boolean grounded = P_IsObjectOnGround(mobj);
|
||||||
|
if (mobj->flags2 & MF2_AMBUSH)
|
||||||
|
{
|
||||||
|
if (grounded && (mobj->flags & MF_NOCLIPTHING))
|
||||||
|
{
|
||||||
|
mobj->momx = 1;
|
||||||
|
mobj->momy = 0;
|
||||||
|
mobj->frame = 3;
|
||||||
|
S_StartSound(mobj, mobj->info->activesound);
|
||||||
|
mobj->flags &= ~MF_NOCLIPTHING;
|
||||||
|
}
|
||||||
|
else if (mobj->movecount)
|
||||||
|
mobj->movecount--;
|
||||||
|
else if (mobj->frame < 3)
|
||||||
|
{
|
||||||
|
mobj->movecount = 2;
|
||||||
|
mobj->frame++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
fixed_t finalspeed = mobj->info->speed;
|
fixed_t finalspeed = mobj->info->speed;
|
||||||
|
|
||||||
P_SpawnGhostMobj(mobj);
|
P_SpawnGhostMobj(mobj);
|
||||||
|
@ -7934,29 +8024,26 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
for (i = 5; i >= mobj->health; i--)
|
for (i = 5; i >= mobj->health; i--)
|
||||||
{
|
|
||||||
finalspeed = FixedMul(finalspeed, FRACUNIT-FRACUNIT/4);
|
finalspeed = FixedMul(finalspeed, FRACUNIT-FRACUNIT/4);
|
||||||
}
|
}
|
||||||
finalspeed = FixedMul(finalspeed, mapheaderinfo[gamemap-1]->mobj_scale);
|
finalspeed = FixedMul(finalspeed, mapheaderinfo[gamemap-1]->mobj_scale);
|
||||||
P_InstaThrust(mobj, mobj->angle, finalspeed);
|
P_InstaThrust(mobj, mobj->angle, finalspeed);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
finalspeed = FixedMul(finalspeed, mapheaderinfo[gamemap-1]->mobj_scale);
|
|
||||||
P_InstaThrust(mobj, mobj->angle, finalspeed);
|
|
||||||
}
|
|
||||||
|
|
||||||
sec2 = P_ThingOnSpecial3DFloor(mobj);
|
if (grounded)
|
||||||
|
{
|
||||||
|
sector_t *sec2 = P_ThingOnSpecial3DFloor(mobj);
|
||||||
if ((sec2 && GETSECSPECIAL(sec2->special, 3) == 1)
|
if ((sec2 && GETSECSPECIAL(sec2->special, 3) == 1)
|
||||||
|| (P_IsObjectOnRealGround(mobj, mobj->subsector->sector)
|
|| (P_IsObjectOnRealGround(mobj, mobj->subsector->sector)
|
||||||
&& GETSECSPECIAL(mobj->subsector->sector->special, 3) == 1))
|
&& GETSECSPECIAL(mobj->subsector->sector->special, 3) == 1))
|
||||||
K_DoPogoSpring(mobj, 0, false);
|
K_DoPogoSpring(mobj, 0, false);
|
||||||
|
}
|
||||||
|
|
||||||
if (mobj->threshold > 0)
|
if (mobj->threshold > 0)
|
||||||
mobj->threshold--;
|
mobj->threshold--;
|
||||||
|
|
||||||
if (leveltime % 6 == 0)
|
if (leveltime % 6 == 0)
|
||||||
S_StartSound(mobj, mobj->info->activesound);
|
S_StartSound(mobj, mobj->info->activesound);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case MT_JAWZ:
|
case MT_JAWZ:
|
||||||
|
@ -8029,23 +8116,38 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
case MT_JAWZ_DUD:
|
case MT_JAWZ_DUD:
|
||||||
{
|
{
|
||||||
sector_t *sec2;
|
boolean grounded = P_IsObjectOnGround(mobj);
|
||||||
|
if (mobj->flags2 & MF2_AMBUSH)
|
||||||
|
{
|
||||||
|
if (grounded && (mobj->flags & MF_NOCLIPTHING))
|
||||||
|
{
|
||||||
|
mobj->momx = 1;
|
||||||
|
mobj->momy = 0;
|
||||||
|
S_StartSound(mobj, mobj->info->deathsound);
|
||||||
|
mobj->flags &= ~MF_NOCLIPTHING;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
P_SpawnGhostMobj(mobj);
|
P_SpawnGhostMobj(mobj);
|
||||||
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
|
mobj->angle = R_PointToAngle2(0, 0, mobj->momx, mobj->momy);
|
||||||
P_InstaThrust(mobj, mobj->angle, mobj->info->speed);
|
P_InstaThrust(mobj, mobj->angle, mobj->info->speed);
|
||||||
|
|
||||||
sec2 = P_ThingOnSpecial3DFloor(mobj);
|
if (grounded)
|
||||||
|
{
|
||||||
|
sector_t *sec2 = P_ThingOnSpecial3DFloor(mobj);
|
||||||
if ((sec2 && GETSECSPECIAL(sec2->special, 3) == 1)
|
if ((sec2 && GETSECSPECIAL(sec2->special, 3) == 1)
|
||||||
|| (P_IsObjectOnRealGround(mobj, mobj->subsector->sector)
|
|| (P_IsObjectOnRealGround(mobj, mobj->subsector->sector)
|
||||||
&& GETSECSPECIAL(mobj->subsector->sector->special, 3) == 1))
|
&& GETSECSPECIAL(mobj->subsector->sector->special, 3) == 1))
|
||||||
K_DoPogoSpring(mobj, 0, false);
|
K_DoPogoSpring(mobj, 0, false);
|
||||||
|
}
|
||||||
|
|
||||||
if (mobj->threshold > 0)
|
if (mobj->threshold > 0)
|
||||||
mobj->threshold--;
|
mobj->threshold--;
|
||||||
|
|
||||||
if (leveltime % TICRATE == 0)
|
if (leveltime % TICRATE == 0)
|
||||||
S_StartSound(mobj, mobj->info->activesound);
|
S_StartSound(mobj, mobj->info->activesound);
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -8212,13 +8314,41 @@ void P_MobjThinker(mobj_t *mobj)
|
||||||
P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z);
|
P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z);
|
||||||
break;
|
break;
|
||||||
case MT_THUNDERSHIELD:
|
case MT_THUNDERSHIELD:
|
||||||
|
{
|
||||||
|
fixed_t destx, desty;
|
||||||
if (!mobj->target || !mobj->target->health || (mobj->target->player && mobj->target->player->kartstuff[k_curshield] != 1))
|
if (!mobj->target || !mobj->target->health || (mobj->target->player && mobj->target->player->kartstuff[k_curshield] != 1))
|
||||||
{
|
{
|
||||||
P_RemoveMobj(mobj);
|
P_RemoveMobj(mobj);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
P_TeleportMove(mobj, mobj->target->x, mobj->target->y, mobj->target->z);
|
P_SetScale(mobj, (mobj->destscale = (5*mobj->target->destscale)>>2));
|
||||||
|
|
||||||
|
if (!splitscreen /*&& rendermode != render_soft*/)
|
||||||
|
{
|
||||||
|
angle_t viewingangle;
|
||||||
|
statenum_t curstate = ((mobj->tics == 1) ? (mobj->state->nextstate) : ((statenum_t)(mobj->state-states)));
|
||||||
|
|
||||||
|
if (players[displayplayer].awayviewtics)
|
||||||
|
viewingangle = R_PointToAngle2(mobj->target->x, mobj->target->y, players[displayplayer].awayviewmobj->x, players[displayplayer].awayviewmobj->y);
|
||||||
|
else if (!camera.chase && players[displayplayer].mo)
|
||||||
|
viewingangle = R_PointToAngle2(mobj->target->x, mobj->target->y, players[displayplayer].mo->x, players[displayplayer].mo->y);
|
||||||
|
else
|
||||||
|
viewingangle = R_PointToAngle2(mobj->target->x, mobj->target->y, camera.x, camera.y);
|
||||||
|
|
||||||
|
if (curstate > S_THUNDERSHIELD15)
|
||||||
|
viewingangle += ANGLE_180;
|
||||||
|
destx = mobj->target->x + P_ReturnThrustX(mobj->target, viewingangle, mobj->scale>>4);
|
||||||
|
desty = mobj->target->y + P_ReturnThrustY(mobj->target, viewingangle, mobj->scale>>4);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
destx = mobj->target->x;
|
||||||
|
desty = mobj->target->y;
|
||||||
|
}
|
||||||
|
|
||||||
|
P_TeleportMove(mobj, destx, desty, mobj->target->z);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case MT_KARMAHITBOX:
|
case MT_KARMAHITBOX:
|
||||||
if (!mobj->target || !mobj->target->health || !mobj->target->player || mobj->target->player->spectator
|
if (!mobj->target || !mobj->target->health || !mobj->target->player || mobj->target->player->spectator
|
||||||
|| (G_RaceGametype() || mobj->target->player->kartstuff[k_bumper]))
|
|| (G_RaceGametype() || mobj->target->player->kartstuff[k_bumper]))
|
||||||
|
@ -8867,6 +8997,41 @@ void P_SceneryThinker(mobj_t *mobj)
|
||||||
}
|
}
|
||||||
|
|
||||||
P_CycleMobjState(mobj);
|
P_CycleMobjState(mobj);
|
||||||
|
|
||||||
|
if (mobj->type != MT_RANDOMAUDIENCE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
{
|
||||||
|
if (!mobj->colorized) // a fan of someone?
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (mobj->threshold >= 0) // not already happy or sad?
|
||||||
|
{
|
||||||
|
if (!playeringame[mobj->threshold] || players[mobj->threshold].spectator) // focused on a valid player?
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!(players[mobj->threshold].exiting) && !(players[mobj->threshold].pflags & PF_TIMEOVER)) // not finished yet?
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (K_IsPlayerLosing(&players[mobj->threshold]))
|
||||||
|
mobj->threshold = -2;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mobj->threshold = -1;
|
||||||
|
S_StartSound(mobj, sfx_chaooo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mobj->threshold == -1)
|
||||||
|
mobj->angle += ANGLE_22h;
|
||||||
|
|
||||||
|
if (((statenum_t)(mobj->state-states) != S_AUDIENCE_CHAO_CHEER2) || (mobj->tics != states[S_AUDIENCE_CHAO_CHEER2].tics)) // not at the start of your cheer jump?
|
||||||
|
return;
|
||||||
|
|
||||||
|
mobj->momz = 0;
|
||||||
|
|
||||||
|
P_SetMobjState(mobj, ((mobj->threshold == -1) ? S_AUDIENCE_CHAO_WIN2 : S_AUDIENCE_CHAO_LOSE));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -9114,9 +9279,43 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MT_BIGRING:
|
case MT_BIGRING:
|
||||||
mobj->destscale = 3*FRACUNIT;
|
P_SetScale(mobj, (mobj->destscale = 3*FRACUNIT));
|
||||||
P_SetScale(mobj, 3*FRACUNIT);
|
|
||||||
break;
|
break;
|
||||||
|
case MT_RANDOMAUDIENCE:
|
||||||
|
{
|
||||||
|
fixed_t randu = P_RandomFixed();
|
||||||
|
P_SetScale(mobj, (mobj->destscale <<= 1));
|
||||||
|
if (randu < (FRACUNIT/9)) // a fan of someone?
|
||||||
|
{
|
||||||
|
UINT8 i, pcount = 0;
|
||||||
|
UINT8 pnum[MAXPLAYERS];
|
||||||
|
|
||||||
|
for (i = 0; i < MAXPLAYERS; i++)
|
||||||
|
{
|
||||||
|
if (!playeringame[i])
|
||||||
|
continue;
|
||||||
|
pnum[pcount] = i;
|
||||||
|
pcount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pcount)
|
||||||
|
{
|
||||||
|
mobj->threshold = pnum[P_RandomKey(pcount)];
|
||||||
|
mobj->color = players[mobj->threshold].skincolor;
|
||||||
|
mobj->colorized = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (randu > (FRACUNIT/2))
|
||||||
|
{
|
||||||
|
mobj->color = P_RandomKey(MAXSKINCOLORS-1)+1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
mobj->color = SKINCOLOR_AQUA;
|
||||||
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -9127,6 +9326,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
||||||
case MT_BIGMACE: case MT_SMALLMACE:
|
case MT_BIGMACE: case MT_SMALLMACE:
|
||||||
case MT_FALLINGROCK:
|
case MT_FALLINGROCK:
|
||||||
//case MT_RANDOMITEM:
|
//case MT_RANDOMITEM:
|
||||||
|
case MT_FLOATINGITEM:
|
||||||
case MT_BATTLEBUMPER:
|
case MT_BATTLEBUMPER:
|
||||||
case MT_BANANA: case MT_BANANA_SHIELD:
|
case MT_BANANA: case MT_BANANA_SHIELD:
|
||||||
//case MT_FAKEITEM: case MT_FAKESHIELD:
|
//case MT_FAKEITEM: case MT_FAKESHIELD:
|
||||||
|
@ -9134,6 +9334,7 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
||||||
case MT_JAWZ: case MT_JAWZ_DUD: case MT_JAWZ_SHIELD:
|
case MT_JAWZ: case MT_JAWZ_DUD: case MT_JAWZ_SHIELD:
|
||||||
case MT_SSMINE: case MT_SSMINE_SHIELD:
|
case MT_SSMINE: case MT_SSMINE_SHIELD:
|
||||||
case MT_BALLHOG: case MT_SINK:
|
case MT_BALLHOG: case MT_SINK:
|
||||||
|
case MT_THUNDERSHIELD:
|
||||||
P_SpawnShadowMobj(mobj);
|
P_SpawnShadowMobj(mobj);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -9226,6 +9427,8 @@ mobj_t *P_SpawnShadowMobj(mobj_t * caster)
|
||||||
if (mapheaderinfo[gamemap-1] && mapheaderinfo[gamemap-1]->mobj_scale != FRACUNIT) //&& !(mobj->type == MT_BLACKEGGMAN)
|
if (mapheaderinfo[gamemap-1] && mapheaderinfo[gamemap-1]->mobj_scale != FRACUNIT) //&& !(mobj->type == MT_BLACKEGGMAN)
|
||||||
mobj->destscale = mapheaderinfo[gamemap-1]->mobj_scale;
|
mobj->destscale = mapheaderinfo[gamemap-1]->mobj_scale;
|
||||||
|
|
||||||
|
P_SetScale(mobj, mobj->destscale);
|
||||||
|
|
||||||
// set subsector and/or block links
|
// set subsector and/or block links
|
||||||
P_SetThingPosition(mobj);
|
P_SetThingPosition(mobj);
|
||||||
I_Assert(mobj->subsector != NULL);
|
I_Assert(mobj->subsector != NULL);
|
||||||
|
|
|
@ -920,6 +920,16 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
||||||
|
|
||||||
for (dc_x = vis->x1; dc_x <= vis->x2; dc_x++, frac += vis->xiscale)
|
for (dc_x = vis->x1; dc_x <= vis->x2; dc_x++, frac += vis->xiscale)
|
||||||
{
|
{
|
||||||
|
if (vis->scalestep) // currently papersprites only
|
||||||
|
{
|
||||||
|
#ifndef RANGECHECK
|
||||||
|
if ((frac>>FRACBITS) < 0 || (frac>>FRACBITS) >= SHORT(patch->width)) // if this doesn't work i'm removing papersprites
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
sprtopscreen = (centeryfrac - FixedMul(dc_texturemid, spryscale));
|
||||||
|
dc_iscale = (0xffffffffu / (unsigned)spryscale);
|
||||||
|
spryscale += vis->scalestep;
|
||||||
|
}
|
||||||
#ifdef RANGECHECK
|
#ifdef RANGECHECK
|
||||||
texturecolumn = frac>>FRACBITS;
|
texturecolumn = frac>>FRACBITS;
|
||||||
|
|
||||||
|
@ -929,16 +939,10 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
||||||
#else
|
#else
|
||||||
column = (column_t *)((UINT8 *)patch + LONG(patch->columnofs[frac>>FRACBITS]));
|
column = (column_t *)((UINT8 *)patch + LONG(patch->columnofs[frac>>FRACBITS]));
|
||||||
#endif
|
#endif
|
||||||
if (vis->scalestep)
|
|
||||||
{
|
|
||||||
sprtopscreen = (centeryfrac - FixedMul(dc_texturemid, spryscale));
|
|
||||||
dc_iscale = (0xffffffffu / (unsigned)spryscale);
|
|
||||||
}
|
|
||||||
if (vis->vflip)
|
if (vis->vflip)
|
||||||
R_DrawFlippedMaskedColumn(column, patch->height);
|
R_DrawFlippedMaskedColumn(column, patch->height);
|
||||||
else
|
else
|
||||||
R_DrawMaskedColumn(column);
|
R_DrawMaskedColumn(column);
|
||||||
spryscale += vis->scalestep;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
colfunc = basecolfunc;
|
colfunc = basecolfunc;
|
||||||
|
@ -1262,7 +1266,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
|
|
||||||
offset2 = FixedMul(spritecachedinfo[lump].width, this_scale);
|
offset2 = FixedMul(spritecachedinfo[lump].width, this_scale);
|
||||||
tx += FixedMul(offset2, ang_scale);
|
tx += FixedMul(offset2, ang_scale);
|
||||||
x2 = ((centerxfrac + FixedMul (tx,xscale)) >> FRACBITS) - (papersprite ? 2 : 1);
|
x2 = ((centerxfrac + FixedMul (tx,xscale)) >> FRACBITS) - 1;
|
||||||
|
|
||||||
// off the left side
|
// off the left side
|
||||||
if (x2 < 0)
|
if (x2 < 0)
|
||||||
|
@ -1271,7 +1275,9 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
if (papersprite)
|
if (papersprite)
|
||||||
{
|
{
|
||||||
fixed_t yscale2, cosmul, sinmul, tz2;
|
fixed_t yscale2, cosmul, sinmul, tz2;
|
||||||
INT32 range;
|
|
||||||
|
if (x2 <= x1)
|
||||||
|
return;
|
||||||
|
|
||||||
if (ang >= ANGLE_180)
|
if (ang >= ANGLE_180)
|
||||||
{
|
{
|
||||||
|
@ -1301,12 +1307,7 @@ static void R_ProjectSprite(mobj_t *thing)
|
||||||
if (max(tz, tz2) < FixedMul(MINZ, this_scale)) // non-papersprite clipping is handled earlier
|
if (max(tz, tz2) < FixedMul(MINZ, this_scale)) // non-papersprite clipping is handled earlier
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (x2 > x1)
|
scalestep = (yscale2 - yscale)/(x2 - x1);
|
||||||
range = (x2 - x1);
|
|
||||||
else
|
|
||||||
range = 1;
|
|
||||||
|
|
||||||
scalestep = (yscale2 - yscale)/range;
|
|
||||||
|
|
||||||
// The following two are alternate sorting methods which might be more applicable in some circumstances. TODO - maybe enable via MF2?
|
// The following two are alternate sorting methods which might be more applicable in some circumstances. TODO - maybe enable via MF2?
|
||||||
// sortscale = max(yscale, yscale2);
|
// sortscale = max(yscale, yscale2);
|
||||||
|
|
|
@ -815,6 +815,8 @@ sfxinfo_t S_sfx[NUMSFX] =
|
||||||
{"hogbom", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR},
|
{"hogbom", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||||
{"kpogos", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR},
|
{"kpogos", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||||
{"ddash", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
{"ddash", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||||
|
{"mcitm1", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||||
|
{"chaooo", false, 110, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||||
{"itfree", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
{"itfree", false, 64, 0, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||||
{"dbgsal", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR},
|
{"dbgsal", false, 110, 8, -1, NULL, 0, -1, -1, LUMPERROR},
|
||||||
|
|
||||||
|
|
|
@ -890,6 +890,8 @@ typedef enum
|
||||||
sfx_hogbom,
|
sfx_hogbom,
|
||||||
sfx_kpogos,
|
sfx_kpogos,
|
||||||
sfx_ddash,
|
sfx_ddash,
|
||||||
|
sfx_mcitm1,
|
||||||
|
sfx_chaooo,
|
||||||
sfx_itfree,
|
sfx_itfree,
|
||||||
sfx_dbgsal,
|
sfx_dbgsal,
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue