mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-02-23 14:01:14 +00:00
Merge branch 'new-springs' into 'master'
New springs See merge request KartKrew/Kart!171
This commit is contained in:
commit
542c4a3306
9 changed files with 699 additions and 373 deletions
|
|
@ -327,6 +327,9 @@ typedef enum
|
|||
k_jawztargetdelay, // Delay for Jawz target switching, to make it less twitchy
|
||||
k_spectatewait, // How long have you been waiting as a spectator
|
||||
k_growcancel, // Hold the item button down to cancel Grow
|
||||
k_tiregrease, // Reduced friction timer after hitting a horizontal spring
|
||||
k_springstars, // Spawn stars around a player when they hit a spring
|
||||
k_springcolor, // Color of spring stars
|
||||
|
||||
NUMKARTSTUFF
|
||||
} kartstufftype_t;
|
||||
|
|
|
|||
103
src/dehacked.c
103
src/dehacked.c
|
|
@ -5609,44 +5609,77 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_RBIRD2",
|
||||
"S_RBIRD3",
|
||||
|
||||
"S_YELLOWSPRING",
|
||||
// Yellow Spring
|
||||
"S_YELLOWSPRING1",
|
||||
"S_YELLOWSPRING2",
|
||||
"S_YELLOWSPRING3",
|
||||
"S_YELLOWSPRING4",
|
||||
"S_YELLOWSPRING5",
|
||||
|
||||
"S_REDSPRING",
|
||||
// Red Spring
|
||||
"S_REDSPRING1",
|
||||
"S_REDSPRING2",
|
||||
"S_REDSPRING3",
|
||||
"S_REDSPRING4",
|
||||
"S_REDSPRING5",
|
||||
|
||||
// Blue Springs
|
||||
"S_BLUESPRING",
|
||||
// Blue Spring
|
||||
"S_BLUESPRING1",
|
||||
"S_BLUESPRING2",
|
||||
"S_BLUESPRING3",
|
||||
"S_BLUESPRING4",
|
||||
"S_BLUESPRING5",
|
||||
|
||||
// Grey Spring
|
||||
"S_GREYSPRING1",
|
||||
"S_GREYSPRING2",
|
||||
"S_GREYSPRING3",
|
||||
"S_GREYSPRING4",
|
||||
|
||||
// Yellow Diagonal Spring
|
||||
"S_YDIAG1",
|
||||
"S_YDIAG2",
|
||||
"S_YDIAG3",
|
||||
"S_YDIAG4",
|
||||
"S_YDIAG5",
|
||||
"S_YDIAG6",
|
||||
"S_YDIAG7",
|
||||
"S_YDIAG8",
|
||||
|
||||
// Red Diagonal Spring
|
||||
"S_RDIAG1",
|
||||
"S_RDIAG2",
|
||||
"S_RDIAG3",
|
||||
"S_RDIAG4",
|
||||
"S_RDIAG5",
|
||||
"S_RDIAG6",
|
||||
"S_RDIAG7",
|
||||
"S_RDIAG8",
|
||||
|
||||
// Blue Diagonal Spring
|
||||
"S_BDIAG1",
|
||||
"S_BDIAG2",
|
||||
"S_BDIAG3",
|
||||
"S_BDIAG4",
|
||||
|
||||
// Grey Diagonal Spring
|
||||
"S_GDIAG1",
|
||||
"S_GDIAG2",
|
||||
"S_GDIAG3",
|
||||
"S_GDIAG4",
|
||||
|
||||
// Yellow Horizontal Spring
|
||||
"S_YHORIZ1",
|
||||
"S_YHORIZ2",
|
||||
"S_YHORIZ3",
|
||||
"S_YHORIZ4",
|
||||
|
||||
// Red Horizontal Spring
|
||||
"S_RHORIZ1",
|
||||
"S_RHORIZ2",
|
||||
"S_RHORIZ3",
|
||||
"S_RHORIZ4",
|
||||
|
||||
// Blue Horizontal Spring
|
||||
"S_BHORIZ1",
|
||||
"S_BHORIZ2",
|
||||
"S_BHORIZ3",
|
||||
"S_BHORIZ4",
|
||||
|
||||
// Grey Horizontal Spring
|
||||
"S_GHORIZ1",
|
||||
"S_GHORIZ2",
|
||||
"S_GHORIZ3",
|
||||
"S_GHORIZ4",
|
||||
|
||||
// Rain
|
||||
"S_RAIN1",
|
||||
|
|
@ -6271,26 +6304,6 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_SRB1_GENREX1",
|
||||
"S_SRB1_GENREX2",
|
||||
|
||||
// Gray Springs
|
||||
"S_GRAYSPRING",
|
||||
"S_GRAYSPRING2",
|
||||
"S_GRAYSPRING3",
|
||||
"S_GRAYSPRING4",
|
||||
"S_GRAYSPRING5",
|
||||
|
||||
// Invis-spring - this is used just for the sproing sound.
|
||||
"S_INVISSPRING",
|
||||
|
||||
// Blue Diagonal Spring
|
||||
"S_BDIAG1",
|
||||
"S_BDIAG2",
|
||||
"S_BDIAG3",
|
||||
"S_BDIAG4",
|
||||
"S_BDIAG5",
|
||||
"S_BDIAG6",
|
||||
"S_BDIAG7",
|
||||
"S_BDIAG8",
|
||||
|
||||
//{ Random Item Box
|
||||
"S_RANDOMITEM1",
|
||||
"S_RANDOMITEM2",
|
||||
|
|
@ -7199,6 +7212,8 @@ static const char *const STATE_LIST[] = { // array length left dynamic for sanit
|
|||
"S_DRAFTDUST4",
|
||||
"S_DRAFTDUST5",
|
||||
|
||||
"S_TIREGREASE",
|
||||
|
||||
#ifdef SEENAMES
|
||||
"S_NAMECHECK",
|
||||
#endif
|
||||
|
|
@ -7328,11 +7343,18 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
// Springs and others
|
||||
"MT_FAN",
|
||||
"MT_STEAM", // Steam riser
|
||||
"MT_BLUESPRING",
|
||||
"MT_YELLOWSPRING",
|
||||
"MT_REDSPRING",
|
||||
"MT_BLUESPRING",
|
||||
"MT_GREYSPRING",
|
||||
"MT_YELLOWDIAG", // Yellow Diagonal Spring
|
||||
"MT_REDDIAG", // Red Diagonal Spring
|
||||
"MT_BLUEDIAG", // Blue Diagonal Spring
|
||||
"MT_GREYDIAG", // Grey Diagonal Spring
|
||||
"MT_YELLOWHORIZ", // Yellow Horizontal Spring
|
||||
"MT_REDHORIZ", // Red Horizontal Spring
|
||||
"MT_BLUEHORIZ", // Blue Horizontal Spring
|
||||
"MT_GREYHORIZ", // Grey Horizontal Spring
|
||||
|
||||
// Interactive Objects
|
||||
"MT_BUBBLES", // Bubble source
|
||||
|
|
@ -7714,9 +7736,6 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_SRB1_GENREX",
|
||||
|
||||
// SRB2kart
|
||||
"MT_GRAYSPRING",
|
||||
"MT_INVISSPRING",
|
||||
"MT_BLUEDIAG",
|
||||
"MT_RANDOMITEM",
|
||||
"MT_RANDOMITEMPOP",
|
||||
"MT_FLOATINGITEM",
|
||||
|
|
@ -7987,6 +8006,7 @@ static const char *const MOBJTYPE_LIST[] = { // array length left dynamic for s
|
|||
"MT_KARMAFIREWORK",
|
||||
"MT_RINGSPARKS",
|
||||
"MT_DRAFTDUST",
|
||||
"MT_TIREGREASE",
|
||||
|
||||
#ifdef SEENAMES
|
||||
"MT_NAMECHECK",
|
||||
|
|
@ -8473,7 +8493,10 @@ static const char *const KARTSTUFF_LIST[] = {
|
|||
"GETSPARKS",
|
||||
"JAWZTARGETDELAY",
|
||||
"SPECTATEWAIT",
|
||||
"GROWCANCEL"
|
||||
"GROWCANCEL",
|
||||
"TIREGREASE",
|
||||
"SPRINGSTARS",
|
||||
"SPRINGCOLOR"
|
||||
};
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -435,6 +435,7 @@ extern INT32 sneakertime;
|
|||
extern INT32 itemtime;
|
||||
extern INT32 comebacktime;
|
||||
extern INT32 bumptime;
|
||||
extern INT32 greasetics;
|
||||
extern INT32 wipeoutslowtime;
|
||||
extern INT32 wantedreduce;
|
||||
extern INT32 wantedfrequency;
|
||||
|
|
|
|||
|
|
@ -216,6 +216,7 @@ INT32 sneakertime = TICRATE + (TICRATE/3);
|
|||
INT32 itemtime = 8*TICRATE;
|
||||
INT32 comebacktime = 10*TICRATE;
|
||||
INT32 bumptime = 6;
|
||||
INT32 greasetics = 3*TICRATE;
|
||||
INT32 wipeoutslowtime = 20;
|
||||
INT32 wantedreduce = 5*TICRATE;
|
||||
INT32 wantedfrequency = 10*TICRATE;
|
||||
|
|
|
|||
577
src/info.c
577
src/info.c
|
|
@ -43,33 +43,34 @@ char sprnames[NUMSPRITES + 1][5] =
|
|||
"DFLM","XMS1","XMS2","XMS3","BSZ1","BSZ2","BSZ3","BSZ4","BSZ5","BSZ6",
|
||||
"BSZ7","BSZ8","STLG","DBAL","RCRY","ARMA","ARMF","ARMB","WIND","MAGN",
|
||||
"ELEM","FORC","PITY","IVSP","SSPK","GOAL","BIRD","BUNY","MOUS","CHIC",
|
||||
"COWZ","RBRD","SPRY","SPRR","SPRB","YSPR","RSPR","RAIN","SNO1","SPLH",
|
||||
"SPLA","SMOK","BUBP","BUBO","BUBN","BUBM","POPP","TFOG","SEED","PRTL",
|
||||
"SCOR","DRWN","TTAG","GFLG","RRNG","RNGB","RNGR","RNGI","RNGA","RNGE",
|
||||
"RNGS","RNGG","PIKB","PIKR","PIKA","PIKE","PIKS","PIKG","TAUT","TGRE",
|
||||
"TSCR","COIN","CPRK","GOOM","BGOM","FFWR","FBLL","SHLL","PUMA","HAMM",
|
||||
"KOOP","BFLM","MAXE","MUS1","MUS2","TOAD","NDRN","SUPE","SUPZ","NDRL",
|
||||
"NSPK","NBMP","HOOP","NSCR","NPRU","CAPS","SUPT","SPRK","BOM1","BOM2",
|
||||
"BOM3","BOM4","ROIA","ROIB","ROIC","ROID","ROIE","ROIF","ROIG","ROIH",
|
||||
"ROII","ROIJ","ROIK","ROIL","ROIM","ROIN","ROIO","ROIP","BBAL","GWLG",
|
||||
"GWLR","SRBA","SRBB","SRBC","SRBD","SRBE","SRBF","SRBG","SRBH","SRBI",
|
||||
"SRBJ","SRBK","SRBL","SRBM","SRBN","SRBO",
|
||||
"COWZ","RBRD","SPVY","SPVR","SPVB","SPVG","SPDY","SPDR","SPDB","SPDG",
|
||||
"SPHY","SPHR","SPHB","SPHG","RAIN","SNO1","SPLH","SPLA","SMOK","BUBP",
|
||||
"BUBO","BUBN","BUBM","POPP","TFOG","SEED","PRTL","SCOR","DRWN","TTAG",
|
||||
"GFLG","RRNG","RNGB","RNGR","RNGI","RNGA","RNGE","RNGS","RNGG","PIKB",
|
||||
"PIKR","PIKA","PIKE","PIKS","PIKG","TAUT","TGRE","TSCR","COIN","CPRK",
|
||||
"GOOM","BGOM","FFWR","FBLL","SHLL","PUMA","HAMM","KOOP","BFLM","MAXE",
|
||||
"MUS1","MUS2","TOAD","NDRN","SUPE","SUPZ","NDRL","NSPK","NBMP","HOOP",
|
||||
"NSCR","NPRU","CAPS","SUPT","SPRK","BOM1","BOM2","BOM3","BOM4","ROIA",
|
||||
"ROIB","ROIC","ROID","ROIE","ROIF","ROIG","ROIH","ROII","ROIJ","ROIK",
|
||||
"ROIL","ROIM","ROIN","ROIO","ROIP","BBAL","GWLG","GWLR","SRBA","SRBB",
|
||||
"SRBC","SRBD","SRBE","SRBF","SRBG","SRBH","SRBI","SRBJ","SRBK","SRBL",
|
||||
"SRBM","SRBN","SRBO",
|
||||
//SRB2kart Sprites
|
||||
"SPRG","BSPR","RNDM","RPOP","SGNS","FAST","DSHR","BOST","BOSM","KFRE",
|
||||
"KINV","KINF","WIPD","DRIF","BDRF","DUST","RSHE","FITM","BANA","ORBN",
|
||||
"JAWZ","SSMN","KRBM","BHOG","BHBM","SPBM","THNS","SINK","SITR","KBLN",
|
||||
"DEZL","POKE","AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM",
|
||||
"SACO","CRAB","SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB",
|
||||
"ARRO","ITEM","ITMO","ITMI","ITMN","WANT","PBOM","HIT1","HIT2","HIT3",
|
||||
"RETI","AIDU","KSPK","LZI1","LZI2","KLIT","FZSM","FZBM","FPRT","SBUS",
|
||||
"MARB","FUFO","RUST","BLON","VAPE","HTZA","HTZB","SGVA","SGVB","SGVC",
|
||||
"PGTR","PGF1","PGF2","PGF3","PGBH","DPLR","SPTL","ENM1","GARU","MARR",
|
||||
"REAP","JITB","CDMO","CDBU","PINE","PPLR","DPPT","AATR","COCO","BDST",
|
||||
"FROG","CBRA","HOLE","BBRA","EGFG","SMKP","MTYM","THWP","SNOB","ICEB",
|
||||
"CNDL","DOCH","DUCK","GTRE","CHES","CHIM","DRGN","LZMN","PGSS","ZTCH",
|
||||
"MKMA","MKMP","RTCH","BOWL","BOWH","BRRL","BRRR","HRSE","TOAH","BFRT",
|
||||
"OFRT","RFRT","PFRT","ASPK","HBST","HBSO","HBSF","WBLZ","WBLN","FWRK",
|
||||
"MXCL","RGSP","DRAF","XMS4","XMS5","VIEW"
|
||||
"RNDM","RPOP","SGNS","FAST","DSHR","BOST","BOSM","KFRE","KINV","KINF",
|
||||
"WIPD","DRIF","BDRF","DUST","RSHE","FITM","BANA","ORBN","JAWZ","SSMN",
|
||||
"KRBM","BHOG","BHBM","SPBM","THNS","SINK","SITR","KBLN","DEZL","POKE",
|
||||
"AUDI","DECO","DOOD","SNES","GBAS","SPRS","BUZB","CHOM","SACO","CRAB",
|
||||
"SHAD","BRNG","BUMP","FLEN","CLAS","PSHW","ISTA","ISTB","ARRO","ITEM",
|
||||
"ITMO","ITMI","ITMN","WANT","PBOM","HIT1","HIT2","HIT3","RETI","AIDU",
|
||||
"KSPK","LZI1","LZI2","KLIT","FZSM","FZBM","FPRT","SBUS","MARB","FUFO",
|
||||
"RUST","BLON","VAPE","HTZA","HTZB","SGVA","SGVB","SGVC","PGTR","PGF1",
|
||||
"PGF2","PGF3","PGBH","DPLR","SPTL","ENM1","GARU","MARR","REAP","JITB",
|
||||
"CDMO","CDBU","PINE","PPLR","DPPT","AATR","COCO","BDST","FROG","CBRA",
|
||||
"HOLE","BBRA","EGFG","SMKP","MTYM","THWP","SNOB","ICEB","CNDL","DOCH",
|
||||
"DUCK","GTRE","CHES","CHIM","DRGN","LZMN","PGSS","ZTCH","MKMA","MKMP",
|
||||
"RTCH","BOWL","BOWH","BRRL","BRRR","HRSE","TOAH","BFRT","OFRT","RFRT",
|
||||
"PFRT","ASPK","HBST","HBSO","HBSF","WBLZ","WBLN","FWRK","MXCL","RGSP",
|
||||
"DRAF","GRES","XMS4","XMS5","VIEW"
|
||||
};
|
||||
|
||||
// Doesn't work with g++, needs actionf_p1 (don't modify this comment)
|
||||
|
|
@ -1795,45 +1796,76 @@ state_t states[NUMSTATES] =
|
|||
{SPR_RBRD, 1, 4, {A_Chase}, 0, 0, S_RBIRD2}, // S_RBIRD3
|
||||
|
||||
// Yellow Spring
|
||||
{SPR_SPRY, 0, -1, {NULL}, 0, 0, S_NULL}, // S_YELLOWSPRING
|
||||
{SPR_SPRY, 4, 4, {A_Pain}, 0, 0, S_YELLOWSPRING3}, // S_YELLOWSPRING2
|
||||
{SPR_SPRY, 3, 1, {NULL}, 0, 0, S_YELLOWSPRING4}, // S_YELLOWSPRING3
|
||||
{SPR_SPRY, 2, 1, {NULL}, 0, 0, S_YELLOWSPRING5}, // S_YELLOWSPRING4
|
||||
{SPR_SPRY, 1, 1, {NULL}, 0, 0, S_YELLOWSPRING}, // S_YELLOWSPRING5
|
||||
{SPR_SPVY, 0, -1, {NULL}, 0, 0, S_NULL}, // S_YELLOWSPRING1
|
||||
{SPR_SPVY, 1, 1, {A_Pain}, 0, 0, S_YELLOWSPRING3}, // S_YELLOWSPRING2
|
||||
{SPR_SPVY, 0, 1, {NULL}, 0, 0, S_YELLOWSPRING4}, // S_YELLOWSPRING3
|
||||
{SPR_SPVY, 2, 4, {NULL}, 0, 0, S_YELLOWSPRING1}, // S_YELLOWSPRING4
|
||||
|
||||
// Red Spring
|
||||
{SPR_SPRR, 0, -1, {NULL}, 0, 0, S_NULL}, // S_REDSPRING
|
||||
{SPR_SPRR, 4, 4, {A_Pain}, 0, 0, S_REDSPRING3}, // S_REDSPRING2
|
||||
{SPR_SPRR, 3, 1, {NULL}, 0, 0, S_REDSPRING4}, // S_REDSPRING3
|
||||
{SPR_SPRR, 2, 1, {NULL}, 0, 0, S_REDSPRING5}, // S_REDSPRING4
|
||||
{SPR_SPRR, 1, 1, {NULL}, 0, 0, S_REDSPRING}, // S_REDSPRING5
|
||||
{SPR_SPVR, 0, -1, {NULL}, 0, 0, S_NULL}, // S_REDSPRING1
|
||||
{SPR_SPVR, 1, 1, {A_Pain}, 0, 0, S_REDSPRING3}, // S_REDSPRING2
|
||||
{SPR_SPVR, 0, 1, {NULL}, 0, 0, S_REDSPRING4}, // S_REDSPRING3
|
||||
{SPR_SPVR, 2, 4, {NULL}, 0, 0, S_REDSPRING1}, // S_REDSPRING4
|
||||
|
||||
// Blue Spring
|
||||
{SPR_SPRB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BLUESPRING
|
||||
{SPR_SPRB, 4, 4, {A_Pain}, 0, 0, S_BLUESPRING3}, // S_BLUESPRING2
|
||||
{SPR_SPRB, 3, 1, {NULL}, 0, 0, S_BLUESPRING4}, // S_BLUESPRING3
|
||||
{SPR_SPRB, 2, 1, {NULL}, 0, 0, S_BLUESPRING5}, // S_BLUESPRING4
|
||||
{SPR_SPRB, 1, 1, {NULL}, 0, 0, S_BLUESPRING}, // S_BLUESPRING5
|
||||
{SPR_SPVB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BLUESPRING1
|
||||
{SPR_SPVB, 1, 1, {A_Pain}, 0, 0, S_BLUESPRING3}, // S_BLUESPRING2
|
||||
{SPR_SPVB, 0, 1, {NULL}, 0, 0, S_BLUESPRING4}, // S_BLUESPRING3
|
||||
{SPR_SPVB, 2, 4, {NULL}, 0, 0, S_BLUESPRING1}, // S_BLUESPRING4
|
||||
|
||||
// Grey Spring
|
||||
{SPR_SPVG, 0, -1, {NULL}, 0, 0, S_NULL}, // S_GREYSPRING1
|
||||
{SPR_SPVG, 1, 1, {A_Pain}, 0, 0, S_GREYSPRING3}, // S_GREYSPRING2
|
||||
{SPR_SPVG, 0, 1, {NULL}, 0, 0, S_GREYSPRING4}, // S_GREYSPRING3
|
||||
{SPR_SPVG, 2, 4, {NULL}, 0, 0, S_GREYSPRING1}, // S_GREYSPRING4
|
||||
|
||||
// Yellow Diagonal Spring
|
||||
{SPR_YSPR, 0, -1, {NULL}, 0, 0, S_NULL}, // S_YDIAG1
|
||||
{SPR_YSPR, 1, 1, {A_Pain}, 0, 0, S_YDIAG3}, // S_YDIAG2
|
||||
{SPR_YSPR, 2, 1, {NULL}, 0, 0, S_YDIAG4}, // S_YDIAG3
|
||||
{SPR_YSPR, 3, 1, {NULL}, 0, 0, S_YDIAG5}, // S_YDIAG4
|
||||
{SPR_YSPR, 4, 1, {NULL}, 0, 0, S_YDIAG6}, // S_YDIAG5
|
||||
{SPR_YSPR, 3, 1, {NULL}, 0, 0, S_YDIAG7}, // S_YDIAG6
|
||||
{SPR_YSPR, 2, 1, {NULL}, 0, 0, S_YDIAG8}, // S_YDIAG7
|
||||
{SPR_YSPR, 1, 1, {NULL}, 0, 0, S_YDIAG1}, // S_YDIAG8
|
||||
{SPR_SPDY, 0, -1, {NULL}, 0, 0, S_NULL}, // S_YDIAG1
|
||||
{SPR_SPDY, 1, 1, {A_Pain}, 0, 0, S_YDIAG3}, // S_YDIAG2
|
||||
{SPR_SPDY, 0, 1, {NULL}, 0, 0, S_YDIAG4}, // S_YDIAG3
|
||||
{SPR_SPDY, 2, 4, {NULL}, 0, 0, S_YDIAG1}, // S_YDIAG4
|
||||
|
||||
// Red Diagonal Spring
|
||||
{SPR_RSPR, 0, -1, {NULL}, 0, 0, S_NULL}, // S_RDIAG1
|
||||
{SPR_RSPR, 1, 1, {A_Pain}, 0, 0, S_RDIAG3}, // S_RDIAG2
|
||||
{SPR_RSPR, 2, 1, {NULL}, 0, 0, S_RDIAG4}, // S_RDIAG3
|
||||
{SPR_RSPR, 3, 1, {NULL}, 0, 0, S_RDIAG5}, // S_RDIAG4
|
||||
{SPR_RSPR, 4, 1, {NULL}, 0, 0, S_RDIAG6}, // S_RDIAG5
|
||||
{SPR_RSPR, 3, 1, {NULL}, 0, 0, S_RDIAG7}, // S_RDIAG6
|
||||
{SPR_RSPR, 2, 1, {NULL}, 0, 0, S_RDIAG8}, // S_RDIAG7
|
||||
{SPR_RSPR, 1, 1, {NULL}, 0, 0, S_RDIAG1}, // S_RDIAG8
|
||||
{SPR_SPDR, 0, -1, {NULL}, 0, 0, S_NULL}, // S_RDIAG1
|
||||
{SPR_SPDR, 1, 1, {A_Pain}, 0, 0, S_RDIAG3}, // S_RDIAG2
|
||||
{SPR_SPDR, 0, 1, {NULL}, 0, 0, S_RDIAG4}, // S_RDIAG3
|
||||
{SPR_SPDR, 2, 4, {NULL}, 0, 0, S_RDIAG1}, // S_RDIAG4
|
||||
|
||||
// Blue Diagonal Spring
|
||||
{SPR_SPDB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BDIAG1
|
||||
{SPR_SPDB, 1, 1, {A_Pain}, 0, 0, S_BDIAG3}, // S_BDIAG2
|
||||
{SPR_SPDB, 0, 1, {NULL}, 0, 0, S_BDIAG4}, // S_BDIAG3
|
||||
{SPR_SPDB, 2, 4, {NULL}, 0, 0, S_BDIAG1}, // S_BDIAG4
|
||||
|
||||
// Grey Diagonal Spring
|
||||
{SPR_SPDG, 0, -1, {NULL}, 0, 0, S_NULL}, // S_GDIAG1
|
||||
{SPR_SPDG, 1, 1, {A_Pain}, 0, 0, S_GDIAG3}, // S_GDIAG2
|
||||
{SPR_SPDG, 0, 1, {NULL}, 0, 0, S_GDIAG4}, // S_GDIAG3
|
||||
{SPR_SPDG, 2, 4, {NULL}, 0, 0, S_GDIAG1}, // S_GDIAG4
|
||||
|
||||
// Yellow Horizontal Spring
|
||||
{SPR_SPHY, 0, -1, {NULL}, 0, 0, S_NULL}, // S_YHORIZ1
|
||||
{SPR_SPHY, 1, 1, {A_Pain}, 0, 0, S_YHORIZ3}, // S_YHORIZ2
|
||||
{SPR_SPHY, 0, 1, {NULL}, 0, 0, S_YHORIZ4}, // S_YHORIZ3
|
||||
{SPR_SPHY, 2, 4, {NULL}, 0, 0, S_YHORIZ1}, // S_YHORIZ4
|
||||
|
||||
// Red Horizontal Spring
|
||||
{SPR_SPHR, 0, -1, {NULL}, 0, 0, S_NULL}, // S_RHORIZ1
|
||||
{SPR_SPHR, 1, 1, {A_Pain}, 0, 0, S_RHORIZ3}, // S_RHORIZ2
|
||||
{SPR_SPHR, 0, 1, {NULL}, 0, 0, S_RHORIZ4}, // S_RHORIZ3
|
||||
{SPR_SPHR, 2, 4, {NULL}, 0, 0, S_RHORIZ1}, // S_RHORIZ4
|
||||
|
||||
// Blue Horizontal Spring
|
||||
{SPR_SPHB, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BHORIZ1
|
||||
{SPR_SPHB, 1, 1, {A_Pain}, 0, 0, S_BHORIZ3}, // S_BHORIZ2
|
||||
{SPR_SPHB, 0, 1, {NULL}, 0, 0, S_BHORIZ4}, // S_BHORIZ3
|
||||
{SPR_SPHB, 2, 4, {NULL}, 0, 0, S_BHORIZ1}, // S_BHORIZ4
|
||||
|
||||
// Grey Horizontal Spring
|
||||
{SPR_SPHG, 0, -1, {NULL}, 0, 0, S_NULL}, // S_GHORIZ1
|
||||
{SPR_SPHG, 1, 1, {A_Pain}, 0, 0, S_GHORIZ3}, // S_GHORIZ2
|
||||
{SPR_SPHG, 0, 1, {NULL}, 0, 0, S_GHORIZ4}, // S_GHORIZ3
|
||||
{SPR_SPHG, 2, 4, {NULL}, 0, 0, S_GHORIZ1}, // S_GHORIZ4
|
||||
|
||||
// Rain
|
||||
{SPR_RAIN, FF_TRANS50, -1, {NULL}, 0, 0, S_NULL}, // S_RAIN1
|
||||
|
|
@ -2512,23 +2544,6 @@ state_t states[NUMSTATES] =
|
|||
{SPR_SRBO, 0, 2, {A_BuzzFly}, 0, 0, S_SRB1_GENREX2}, // S_SRB1_GENREX2
|
||||
|
||||
// SRB2kart
|
||||
{SPR_SPRG, 0, -1, {NULL}, 0, 0, S_NULL}, // S_GRAYSPRING
|
||||
{SPR_SPRG, 4, 4, {A_Pain}, 0, 0, S_GRAYSPRING3}, // S_GRAYSPRING2
|
||||
{SPR_SPRG, 3, 1, {NULL}, 0, 0, S_GRAYSPRING4}, // S_GRAYSPRING3
|
||||
{SPR_SPRG, 2, 1, {NULL}, 0, 0, S_GRAYSPRING5}, // S_GRAYSPRING4
|
||||
{SPR_SPRG, 1, 1, {NULL}, 0, 0, S_GRAYSPRING}, // S_GRAYSPRING5
|
||||
|
||||
{SPR_NULL, 0, 1, {A_Pain}, 0, 0, S_INVISIBLE}, // S_INVISSPRING
|
||||
|
||||
{SPR_BSPR, 0, -1, {NULL}, 0, 0, S_NULL}, // S_BDIAG1
|
||||
{SPR_BSPR, 1, 1, {A_Pain}, 0, 0, S_BDIAG3}, // S_BDIAG2
|
||||
{SPR_BSPR, 2, 1, {NULL}, 0, 0, S_BDIAG4}, // S_BDIAG3
|
||||
{SPR_BSPR, 3, 1, {NULL}, 0, 0, S_BDIAG5}, // S_BDIAG4
|
||||
{SPR_BSPR, 4, 1, {NULL}, 0, 0, S_BDIAG6}, // S_BDIAG5
|
||||
{SPR_BSPR, 3, 1, {NULL}, 0, 0, S_BDIAG7}, // S_BDIAG6
|
||||
{SPR_BSPR, 2, 1, {NULL}, 0, 0, S_BDIAG8}, // S_BDIAG7
|
||||
{SPR_BSPR, 1, 1, {NULL}, 0, 0, S_BDIAG1}, // S_BDIAG8
|
||||
|
||||
{SPR_RNDM, 0|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_RANDOMITEM2}, // S_RANDOMITEM1
|
||||
{SPR_RNDM, 1|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_RANDOMITEM3}, // S_RANDOMITEM2
|
||||
{SPR_RNDM, 2|FF_FULLBRIGHT, 3, {NULL}, 0, 0, S_RANDOMITEM4}, // S_RANDOMITEM3
|
||||
|
|
@ -3437,6 +3452,8 @@ state_t states[NUMSTATES] =
|
|||
{SPR_DRAF, 3, 1, {NULL}, 0, 0, S_DRAFTDUST5}, // S_DRAFTDUST4
|
||||
{SPR_DRAF, 4, 1, {NULL}, 0, 0, S_NULL}, // S_DRAFTDUST5
|
||||
|
||||
{SPR_GRES, FF_ANIMATE|FF_PAPERSPRITE, -1, {NULL}, 2, 4, S_NULL}, // S_TIREGREASE
|
||||
|
||||
#ifdef SEENAMES
|
||||
{SPR_NULL, 0, 1, {NULL}, 0, 0, S_NULL}, // S_NAMECHECK
|
||||
#endif
|
||||
|
|
@ -4236,8 +4253,8 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
32, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_spring, // painsound
|
||||
SKINCOLOR_TEA, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_XPLD1, // deathstate
|
||||
|
|
@ -4247,7 +4264,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
24*FRACUNIT, // radius
|
||||
40*FRACUNIT, // height
|
||||
0, // display offset
|
||||
13*FRACUNIT, // mass
|
||||
15*FRACUNIT, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE, // flags
|
||||
|
|
@ -4263,8 +4280,8 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
32, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_spring, // painsound
|
||||
SKINCOLOR_YELLOW, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_XPLD1, // deathstate
|
||||
|
|
@ -4274,7 +4291,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
24*FRACUNIT, // radius
|
||||
40*FRACUNIT, // height
|
||||
0, // display offset
|
||||
26*FRACUNIT, // mass
|
||||
25*FRACUNIT, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_ENEMY|MF_SPECIAL|MF_SHOOTABLE, // flags
|
||||
|
|
@ -4681,7 +4698,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
0, // display offset
|
||||
0, // mass
|
||||
0, // damage
|
||||
sfx_spring, // activesound
|
||||
sfx_s3kb1, // activesound
|
||||
MF_SPECIAL|MF_NOGRAVITY|MF_NOCLIP|MF_NOCLIPHEIGHT|MF_NOCLIPTHING, // flags
|
||||
S_EGGMOBILE2_POGO5 // raisestate
|
||||
},
|
||||
|
|
@ -6058,54 +6075,27 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BLUESPRING
|
||||
552, // doomednum
|
||||
S_BLUESPRING, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_BLUESPRING2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_spring, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
20*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
0, // display offset
|
||||
14*FRACUNIT, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
|
||||
S_BLUESPRING2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_YELLOWSPRING
|
||||
550, // doomednum
|
||||
S_YELLOWSPRING, // spawnstate
|
||||
S_YELLOWSPRING1,// spawnstate
|
||||
1000, // spawnhealth
|
||||
S_YELLOWSPRING2,// seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_spring, // painsound
|
||||
SKINCOLOR_YELLOW, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
20*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
48*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
26*FRACUNIT, // mass
|
||||
25*FRACUNIT, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
|
||||
|
|
@ -6114,23 +6104,23 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
|
||||
{ // MT_REDSPRING
|
||||
551, // doomednum
|
||||
S_REDSPRING, // spawnstate
|
||||
S_REDSPRING1, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_REDSPRING2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_spring, // painsound
|
||||
SKINCOLOR_SALMON, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
20*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
48*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
40*FRACUNIT, // mass
|
||||
0, // damage
|
||||
|
|
@ -6139,8 +6129,62 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_REDSPRING2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BLUESPRING
|
||||
552, // doomednum
|
||||
S_BLUESPRING1, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_BLUESPRING2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
SKINCOLOR_PASTEL, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
48*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
64*FRACUNIT, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
|
||||
S_BLUESPRING2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_GREYSPRING
|
||||
553, // doomednum
|
||||
S_GREYSPRING1, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_GREYSPRING2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
SKINCOLOR_POPCORN, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
48*FRACUNIT, // radius
|
||||
32*FRACUNIT, // height
|
||||
0, // display offset
|
||||
15*FRACUNIT, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
|
||||
S_GREYSPRING2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_YELLOWDIAG
|
||||
555, // doomednum
|
||||
554, // doomednum
|
||||
S_YDIAG1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_YDIAG2, // seestate
|
||||
|
|
@ -6148,26 +6192,26 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_spring, // painsound
|
||||
SKINCOLOR_YELLOW, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
16*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
48*FRACUNIT, // radius
|
||||
56*FRACUNIT, // height
|
||||
0, // display offset
|
||||
26*FRACUNIT, // mass
|
||||
26*FRACUNIT, // damage
|
||||
25*FRACUNIT, // mass
|
||||
25*FRACUNIT, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
|
||||
S_YDIAG2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_REDDIAG
|
||||
556, // doomednum
|
||||
555, // doomednum
|
||||
S_RDIAG1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_RDIAG2, // seestate
|
||||
|
|
@ -6175,16 +6219,16 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_spring, // painsound
|
||||
SKINCOLOR_SALMON, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
16*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
48*FRACUNIT, // radius
|
||||
56*FRACUNIT, // height
|
||||
0, // display offset
|
||||
40*FRACUNIT, // mass
|
||||
40*FRACUNIT, // damage
|
||||
|
|
@ -6193,6 +6237,168 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_RDIAG2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BLUEDIAG
|
||||
556, // doomednum
|
||||
S_BDIAG1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_BDIAG2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
SKINCOLOR_PASTEL, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
48*FRACUNIT, // radius
|
||||
56*FRACUNIT, // height
|
||||
0, // display offset
|
||||
64*FRACUNIT, // mass
|
||||
64*FRACUNIT, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
|
||||
S_BDIAG2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_GREYDIAG
|
||||
557, // doomednum
|
||||
S_GDIAG1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_GDIAG2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
SKINCOLOR_POPCORN, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
48*FRACUNIT, // radius
|
||||
56*FRACUNIT, // height
|
||||
0, // display offset
|
||||
15*FRACUNIT, // mass
|
||||
15*FRACUNIT, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
|
||||
S_GDIAG2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_YELLOWHORIZ
|
||||
558, // doomednum
|
||||
S_YHORIZ1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_YHORIZ2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
SKINCOLOR_YELLOW, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
48*FRACUNIT, // radius
|
||||
56*FRACUNIT, // height
|
||||
0, // display offset
|
||||
0, // mass
|
||||
45*FRACUNIT, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
|
||||
S_YHORIZ2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_REDHORIZ
|
||||
559, // doomednum
|
||||
S_RHORIZ1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_RHORIZ2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
SKINCOLOR_SALMON, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
48*FRACUNIT, // radius
|
||||
56*FRACUNIT, // height
|
||||
0, // display offset
|
||||
0, // mass
|
||||
72*FRACUNIT, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
|
||||
S_RHORIZ2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BLUEHORIZ
|
||||
560, // doomednum
|
||||
S_BHORIZ1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_BHORIZ2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
SKINCOLOR_PASTEL, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
48*FRACUNIT, // radius
|
||||
56*FRACUNIT, // height
|
||||
0, // display offset
|
||||
0, // mass
|
||||
115*FRACUNIT, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
|
||||
S_BHORIZ2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_GREYHORIZ
|
||||
561, // doomednum
|
||||
S_GHORIZ1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_GHORIZ2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
SKINCOLOR_POPCORN, // painchance
|
||||
sfx_s3kb1, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
48*FRACUNIT, // radius
|
||||
56*FRACUNIT, // height
|
||||
0, // display offset
|
||||
0, // mass
|
||||
27*FRACUNIT, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
|
||||
S_GHORIZ2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BUBBLES
|
||||
500, // doomednum
|
||||
S_BUBBLES1, // spawnstate
|
||||
|
|
@ -14800,88 +15006,6 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
},
|
||||
|
||||
// SRB2kart MT's
|
||||
|
||||
{ // MT_GRAYSPRING
|
||||
553, // doomednum
|
||||
S_GRAYSPRING, // spawnstate
|
||||
100, // spawnhealth
|
||||
S_GRAYSPRING2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_spring, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
20*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
0, // display offset
|
||||
6*FRACUNIT, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
|
||||
S_GRAYSPRING2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_INVISSPRING
|
||||
554, // doomednum
|
||||
S_INVISIBLE, // spawnstate
|
||||
100, // spawnhealth
|
||||
S_INVISSPRING, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_spring, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
20*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
0, // display offset
|
||||
6*FRACUNIT, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING, // flags
|
||||
S_INVISSPRING // raisestate
|
||||
},
|
||||
|
||||
{ // MT_BLUEDIAG
|
||||
557, // doomednum
|
||||
S_BDIAG1, // spawnstate
|
||||
1, // spawnhealth
|
||||
S_BDIAG2, // seestate
|
||||
sfx_None, // seesound
|
||||
8, // reactiontime
|
||||
sfx_None, // attacksound
|
||||
S_NULL, // painstate
|
||||
0, // painchance
|
||||
sfx_spring, // painsound
|
||||
S_NULL, // meleestate
|
||||
S_NULL, // missilestate
|
||||
S_NULL, // deathstate
|
||||
S_NULL, // xdeathstate
|
||||
sfx_None, // deathsound
|
||||
0, // speed
|
||||
16*FRACUNIT, // radius
|
||||
16*FRACUNIT, // height
|
||||
0, // display offset
|
||||
14*FRACUNIT, // mass
|
||||
14*FRACUNIT, // damage
|
||||
sfx_None, // activesound
|
||||
MF_SOLID|MF_SPRING|MF_DONTENCOREMAP, // flags
|
||||
S_BDIAG2 // raisestate
|
||||
},
|
||||
|
||||
{ // MT_RANDOMITEM
|
||||
2000, // doomednum
|
||||
S_RANDOMITEM1, // spawnstate
|
||||
|
|
@ -20149,6 +20273,33 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
{ // MT_TIREGREASE
|
||||
-1, // doomednum
|
||||
S_TIREGREASE, // 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
|
||||
8<<FRACBITS, // radius
|
||||
16<<FRACBITS, // height
|
||||
0, // display offset
|
||||
100, // mass
|
||||
0, // damage
|
||||
sfx_None, // activesound
|
||||
MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DONTENCOREMAP, // flags
|
||||
S_NULL // raisestate
|
||||
},
|
||||
|
||||
// ============================================================================================================================//
|
||||
|
||||
#ifdef SEENAMES
|
||||
|
|
|
|||
119
src/info.h
119
src/info.h
|
|
@ -459,11 +459,18 @@ typedef enum sprite
|
|||
SPR_RBRD, // Red Birdie in Bubble
|
||||
|
||||
// Springs
|
||||
SPR_SPRY, // yellow spring
|
||||
SPR_SPRR, // red spring
|
||||
SPR_SPRB, // Blue springs
|
||||
SPR_YSPR, // Yellow Diagonal Spring
|
||||
SPR_RSPR, // Red Diagonal Spring
|
||||
SPR_SPVY, // Yellow Vertical Spring
|
||||
SPR_SPVR, // Red Vertical Spring
|
||||
SPR_SPVB, // Blue Vertical Spring
|
||||
SPR_SPVG, // Grey Vertical Spring
|
||||
SPR_SPDY, // Yellow Diagonal Spring
|
||||
SPR_SPDR, // Red Diagonal Spring
|
||||
SPR_SPDB, // Blue Diagonal Spring
|
||||
SPR_SPDG, // Grey Diagonal Spring
|
||||
SPR_SPHY, // Yellow Horizontal Spring
|
||||
SPR_SPHR, // Red Horizontal Spring
|
||||
SPR_SPHB, // Blue Horizontal Spring
|
||||
SPR_SPHG, // Grey Horizontal Spring
|
||||
|
||||
// Environmental Effects
|
||||
SPR_RAIN, // Rain
|
||||
|
|
@ -587,9 +594,6 @@ typedef enum sprite
|
|||
SPR_SRBO,
|
||||
|
||||
// Springs
|
||||
SPR_SPRG, // Gray Spring
|
||||
SPR_BSPR, // Blue Diagonal Spring
|
||||
|
||||
SPR_RNDM, // Random Item Box
|
||||
SPR_RPOP, // Random Item Box Pop
|
||||
SPR_SGNS, // Signpost sparkle
|
||||
|
|
@ -778,6 +782,7 @@ typedef enum sprite
|
|||
SPR_MXCL,
|
||||
SPR_RGSP,
|
||||
SPR_DRAF,
|
||||
SPR_GRES,
|
||||
|
||||
// Xmas-specific sprites that don't fit aboxe
|
||||
SPR_XMS4,
|
||||
|
|
@ -2491,44 +2496,77 @@ typedef enum state
|
|||
S_RBIRD2,
|
||||
S_RBIRD3,
|
||||
|
||||
S_YELLOWSPRING,
|
||||
// Yellow Spring
|
||||
S_YELLOWSPRING1,
|
||||
S_YELLOWSPRING2,
|
||||
S_YELLOWSPRING3,
|
||||
S_YELLOWSPRING4,
|
||||
S_YELLOWSPRING5,
|
||||
|
||||
S_REDSPRING,
|
||||
// Red Spring
|
||||
S_REDSPRING1,
|
||||
S_REDSPRING2,
|
||||
S_REDSPRING3,
|
||||
S_REDSPRING4,
|
||||
S_REDSPRING5,
|
||||
|
||||
// Blue Springs
|
||||
S_BLUESPRING,
|
||||
// Blue Spring
|
||||
S_BLUESPRING1,
|
||||
S_BLUESPRING2,
|
||||
S_BLUESPRING3,
|
||||
S_BLUESPRING4,
|
||||
S_BLUESPRING5,
|
||||
|
||||
// Grey Spring
|
||||
S_GREYSPRING1,
|
||||
S_GREYSPRING2,
|
||||
S_GREYSPRING3,
|
||||
S_GREYSPRING4,
|
||||
|
||||
// Yellow Diagonal Spring
|
||||
S_YDIAG1,
|
||||
S_YDIAG2,
|
||||
S_YDIAG3,
|
||||
S_YDIAG4,
|
||||
S_YDIAG5,
|
||||
S_YDIAG6,
|
||||
S_YDIAG7,
|
||||
S_YDIAG8,
|
||||
|
||||
// Red Diagonal Spring
|
||||
S_RDIAG1,
|
||||
S_RDIAG2,
|
||||
S_RDIAG3,
|
||||
S_RDIAG4,
|
||||
S_RDIAG5,
|
||||
S_RDIAG6,
|
||||
S_RDIAG7,
|
||||
S_RDIAG8,
|
||||
|
||||
// Blue Diagonal Spring
|
||||
S_BDIAG1,
|
||||
S_BDIAG2,
|
||||
S_BDIAG3,
|
||||
S_BDIAG4,
|
||||
|
||||
// Grey Diagonal Spring
|
||||
S_GDIAG1,
|
||||
S_GDIAG2,
|
||||
S_GDIAG3,
|
||||
S_GDIAG4,
|
||||
|
||||
// Yellow Horizontal Spring
|
||||
S_YHORIZ1,
|
||||
S_YHORIZ2,
|
||||
S_YHORIZ3,
|
||||
S_YHORIZ4,
|
||||
|
||||
// Red Horizontal Spring
|
||||
S_RHORIZ1,
|
||||
S_RHORIZ2,
|
||||
S_RHORIZ3,
|
||||
S_RHORIZ4,
|
||||
|
||||
// Blue Horizontal Spring
|
||||
S_BHORIZ1,
|
||||
S_BHORIZ2,
|
||||
S_BHORIZ3,
|
||||
S_BHORIZ4,
|
||||
|
||||
// Grey Horizontal Spring
|
||||
S_GHORIZ1,
|
||||
S_GHORIZ2,
|
||||
S_GHORIZ3,
|
||||
S_GHORIZ4,
|
||||
|
||||
// Rain
|
||||
S_RAIN1,
|
||||
|
|
@ -3153,26 +3191,6 @@ typedef enum state
|
|||
S_SRB1_GENREX1,
|
||||
S_SRB1_GENREX2,
|
||||
|
||||
// Gray Springs
|
||||
S_GRAYSPRING,
|
||||
S_GRAYSPRING2,
|
||||
S_GRAYSPRING3,
|
||||
S_GRAYSPRING4,
|
||||
S_GRAYSPRING5,
|
||||
|
||||
// Invis-spring - this is used just for the sproing sound.
|
||||
S_INVISSPRING,
|
||||
|
||||
// Blue Diagonal Spring
|
||||
S_BDIAG1,
|
||||
S_BDIAG2,
|
||||
S_BDIAG3,
|
||||
S_BDIAG4,
|
||||
S_BDIAG5,
|
||||
S_BDIAG6,
|
||||
S_BDIAG7,
|
||||
S_BDIAG8,
|
||||
|
||||
//{ Random Item Box
|
||||
S_RANDOMITEM1,
|
||||
S_RANDOMITEM2,
|
||||
|
|
@ -4096,6 +4114,8 @@ typedef enum state
|
|||
S_DRAFTDUST4,
|
||||
S_DRAFTDUST5,
|
||||
|
||||
S_TIREGREASE,
|
||||
|
||||
#ifdef SEENAMES
|
||||
S_NAMECHECK,
|
||||
#endif
|
||||
|
|
@ -4242,11 +4262,18 @@ typedef enum mobj_type
|
|||
// Springs and others
|
||||
MT_FAN,
|
||||
MT_STEAM, // Steam riser
|
||||
MT_BLUESPRING,
|
||||
MT_YELLOWSPRING,
|
||||
MT_REDSPRING,
|
||||
MT_BLUESPRING,
|
||||
MT_GREYSPRING,
|
||||
MT_YELLOWDIAG, // Yellow Diagonal Spring
|
||||
MT_REDDIAG, // Red Diagonal Spring
|
||||
MT_BLUEDIAG, // Blue Diagonal Spring
|
||||
MT_GREYDIAG, // Grey Diagonal Spring
|
||||
MT_YELLOWHORIZ, // Yellow Horizontal Spring
|
||||
MT_REDHORIZ, // Red Horizontal Spring
|
||||
MT_BLUEHORIZ, // Blue Horizontal Spring
|
||||
MT_GREYHORIZ, // Grey Horizontal Spring
|
||||
|
||||
// Interactive Objects
|
||||
MT_BUBBLES, // Bubble source
|
||||
|
|
@ -4628,9 +4655,6 @@ typedef enum mobj_type
|
|||
MT_SRB1_GENREX,
|
||||
|
||||
// SRB2kart
|
||||
MT_GRAYSPRING,
|
||||
MT_INVISSPRING,
|
||||
MT_BLUEDIAG,
|
||||
MT_RANDOMITEM,
|
||||
MT_RANDOMITEMPOP,
|
||||
MT_FLOATINGITEM,
|
||||
|
|
@ -4901,6 +4925,7 @@ typedef enum mobj_type
|
|||
MT_KARMAFIREWORK,
|
||||
MT_RINGSPARKS,
|
||||
MT_DRAFTDUST,
|
||||
MT_TIREGREASE,
|
||||
|
||||
#ifdef SEENAMES
|
||||
MT_NAMECHECK,
|
||||
|
|
|
|||
72
src/k_kart.c
72
src/k_kart.c
|
|
@ -5073,6 +5073,29 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
if (P_IsDisplayPlayer(player))
|
||||
debtflag->flags2 |= MF2_DONTDRAW;
|
||||
}
|
||||
|
||||
if (player->kartstuff[k_springstars] && (leveltime & 1))
|
||||
{
|
||||
fixed_t randx = P_RandomRange(-40, 40) * player->mo->scale;
|
||||
fixed_t randy = P_RandomRange(-40, 40) * player->mo->scale;
|
||||
fixed_t randz = P_RandomRange(0, player->mo->height >> FRACBITS) << FRACBITS;
|
||||
mobj_t *star = P_SpawnMobj(
|
||||
player->mo->x + randx,
|
||||
player->mo->y + randy,
|
||||
player->mo->z + randz,
|
||||
MT_KARMAFIREWORK);
|
||||
|
||||
star->color = player->kartstuff[k_springcolor];
|
||||
star->flags |= MF_NOGRAVITY;
|
||||
star->momx = player->mo->momx / 2;
|
||||
star->momy = player->mo->momy / 2;
|
||||
star->momz = player->mo->momz / 2;
|
||||
star->fuse = 12;
|
||||
star->scale = player->mo->scale;
|
||||
star->destscale = star->scale / 2;
|
||||
|
||||
player->kartstuff[k_springstars]--;
|
||||
}
|
||||
}
|
||||
|
||||
if (player->playerstate == PST_DEAD || player->kartstuff[k_respawn] > 1) // Ensure these are set correctly here
|
||||
|
|
@ -5275,6 +5298,9 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
if (player->kartstuff[k_justbumped])
|
||||
player->kartstuff[k_justbumped]--;
|
||||
|
||||
if (player->kartstuff[k_tiregrease])
|
||||
player->kartstuff[k_tiregrease]--;
|
||||
|
||||
// This doesn't go in HUD update because it has potential gameplay ramifications
|
||||
if (player->karthud[khud_itemblink] && player->karthud[khud_itemblink]-- <= 0)
|
||||
{
|
||||
|
|
@ -5315,17 +5341,6 @@ void K_KartPlayerThink(player_t *player, ticcmd_t *cmd)
|
|||
}
|
||||
}
|
||||
|
||||
// ???
|
||||
/*
|
||||
if (player->kartstuff[k_jmp] > 1 && onground)
|
||||
{
|
||||
S_StartSound(player->mo, sfx_spring);
|
||||
P_DoJump(player, false);
|
||||
player->mo->momz *= player->kartstuff[k_jmp];
|
||||
player->kartstuff[k_jmp] = 0;
|
||||
}
|
||||
*/
|
||||
|
||||
if (player->kartstuff[k_comebacktimer])
|
||||
player->kartstuff[k_comebackmode] = 0;
|
||||
|
||||
|
|
@ -5455,15 +5470,16 @@ static INT16 K_GetKartDriftValue(player_t *player, fixed_t countersteer)
|
|||
return 0;
|
||||
|
||||
if (player->kartstuff[k_driftend] != 0)
|
||||
{
|
||||
return -266*player->kartstuff[k_drift]; // Drift has ended and we are tweaking their angle back a bit
|
||||
}
|
||||
|
||||
//basedrift = 90*player->kartstuff[k_drift]; // 450
|
||||
//basedrift = 93*player->kartstuff[k_drift] - driftweight*3*player->kartstuff[k_drift]/10; // 447 - 303
|
||||
basedrift = 83*player->kartstuff[k_drift] - (driftweight - 14)*player->kartstuff[k_drift]/5; // 415 - 303
|
||||
driftangle = abs((252 - driftweight)*player->kartstuff[k_drift]/5);
|
||||
|
||||
if (player->kartstuff[k_tiregrease] > 0) // Buff drift-steering while in greasemode
|
||||
basedrift += (basedrift / greasetics) * player->kartstuff[k_tiregrease];
|
||||
|
||||
return basedrift + FixedMul(driftangle, countersteer);
|
||||
}
|
||||
|
||||
|
|
@ -6505,6 +6521,12 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
|
||||
if (onground)
|
||||
{
|
||||
fixed_t prevfriction = player->mo->friction;
|
||||
|
||||
// Reduce friction after hitting a horizontal spring
|
||||
if (player->kartstuff[k_tiregrease])
|
||||
player->mo->friction += ((FRACUNIT - prevfriction) / greasetics) * player->kartstuff[k_tiregrease];
|
||||
|
||||
// Friction
|
||||
if (!player->kartstuff[k_offroad])
|
||||
{
|
||||
|
|
@ -6517,9 +6539,20 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
|
||||
// Karma ice physics
|
||||
if (G_BattleGametype() && player->kartstuff[k_bumper] <= 0)
|
||||
{
|
||||
player->mo->friction += 1228;
|
||||
|
||||
// Wipeout slowdown
|
||||
if (player->kartstuff[k_spinouttimer] && player->kartstuff[k_wipeoutslow])
|
||||
{
|
||||
if (player->kartstuff[k_offroad])
|
||||
player->mo->friction -= 4912;
|
||||
if (player->kartstuff[k_wipeoutslow] == 1)
|
||||
player->mo->friction -= 9824;
|
||||
}
|
||||
|
||||
// Friction was changed, so we must recalculate a bunch of stuff
|
||||
if (player->mo->friction != prevfriction)
|
||||
{
|
||||
if (player->mo->friction > FRACUNIT)
|
||||
player->mo->friction = FRACUNIT;
|
||||
if (player->mo->friction < 0)
|
||||
|
|
@ -6530,20 +6563,11 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
if (player->mo->movefactor < FRACUNIT)
|
||||
player->mo->movefactor = 19*player->mo->movefactor - 18*FRACUNIT;
|
||||
else
|
||||
player->mo->movefactor = FRACUNIT; //player->mo->movefactor = ((player->mo->friction - 0xDB34)*(0xA))/0x80;
|
||||
player->mo->movefactor = FRACUNIT;
|
||||
|
||||
if (player->mo->movefactor < 32)
|
||||
player->mo->movefactor = 32;
|
||||
}
|
||||
|
||||
// Wipeout slowdown
|
||||
if (player->kartstuff[k_spinouttimer] && player->kartstuff[k_wipeoutslow])
|
||||
{
|
||||
if (player->kartstuff[k_offroad])
|
||||
player->mo->friction -= 4912;
|
||||
if (player->kartstuff[k_wipeoutslow] == 1)
|
||||
player->mo->friction -= 9824;
|
||||
}
|
||||
}
|
||||
|
||||
K_KartDrift(player, onground);
|
||||
|
|
|
|||
141
src/p_map.c
141
src/p_map.c
|
|
@ -113,14 +113,18 @@ boolean P_TeleportMove(mobj_t *thing, fixed_t x, fixed_t y, fixed_t z)
|
|||
// MOVEMENT ITERATOR FUNCTIONS
|
||||
// =========================================================================
|
||||
|
||||
//#define TELEPORTJANK
|
||||
|
||||
boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
||||
{
|
||||
//INT32 pflags;
|
||||
const fixed_t hscale = mapobjectscale + (mapobjectscale - object->scale);
|
||||
const fixed_t vscale = mapobjectscale + (object->scale - mapobjectscale);
|
||||
fixed_t offx, offy;
|
||||
fixed_t vertispeed = spring->info->mass;
|
||||
fixed_t horizspeed = spring->info->damage;
|
||||
UINT8 starcolor = (spring->info->painchance % MAXTRANSLATIONS);
|
||||
fixed_t savemomx = 0;
|
||||
fixed_t savemomy = 0;
|
||||
|
||||
if (object->eflags & MFE_SPRUNG) // Object was already sprung this tic
|
||||
return false;
|
||||
|
|
@ -142,29 +146,36 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
|||
object->eflags |= MFE_SPRUNG; // apply this flag asap!
|
||||
spring->flags &= ~(MF_SOLID|MF_SPECIAL); // De-solidify
|
||||
|
||||
#ifdef TELEPORTJANK
|
||||
if (horizspeed && vertispeed) // Mimic SA
|
||||
{
|
||||
object->momx = object->momy = 0;
|
||||
P_TryMove(object, spring->x, spring->y, true);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (spring->eflags & MFE_VERTICALFLIP)
|
||||
vertispeed *= -1;
|
||||
|
||||
// Vertical springs teleport you on TOP of them.
|
||||
if (vertispeed > 0)
|
||||
object->z = spring->z + spring->height + 1;
|
||||
else if (vertispeed < 0)
|
||||
object->z = spring->z - object->height - 1;
|
||||
else
|
||||
{
|
||||
fixed_t offx, offy;
|
||||
|
||||
// Horizontal springs teleport you in FRONT of them.
|
||||
savemomx = object->momx;
|
||||
savemomy = object->momy;
|
||||
object->momx = object->momy = 0;
|
||||
|
||||
// Overestimate the distance to position you at
|
||||
offx = P_ReturnThrustX(spring, spring->angle, (spring->radius + object->radius + 1) * 2);
|
||||
offy = P_ReturnThrustY(spring, spring->angle, (spring->radius + object->radius + 1) * 2);
|
||||
|
||||
// Make it square by clipping
|
||||
// Then clip it down to a square, so it matches the hitbox size.
|
||||
if (offx > (spring->radius + object->radius + 1))
|
||||
offx = spring->radius + object->radius + 1;
|
||||
else if (offx < -(spring->radius + object->radius + 1))
|
||||
|
|
@ -175,27 +186,94 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
|||
else if (offy < -(spring->radius + object->radius + 1))
|
||||
offy = -(spring->radius + object->radius + 1);
|
||||
|
||||
// Set position!
|
||||
P_TryMove(object, spring->x + offx, spring->y + offy, true);
|
||||
}
|
||||
|
||||
if (vertispeed)
|
||||
object->momz = FixedMul(vertispeed,FixedSqrt(FixedMul(vscale, spring->scale)));
|
||||
object->momz = FixedMul(vertispeed, FixedSqrt(FixedMul(vscale, spring->scale)));
|
||||
|
||||
if (horizspeed)
|
||||
{
|
||||
if (!object->player)
|
||||
P_InstaThrustEvenIn2D(object, spring->angle, FixedMul(horizspeed,FixedSqrt(FixedMul(hscale, spring->scale))));
|
||||
angle_t finalAngle = spring->angle;
|
||||
fixed_t finalSpeed = horizspeed;
|
||||
fixed_t objectSpeed;
|
||||
|
||||
if (object->player)
|
||||
objectSpeed = object->player->speed;
|
||||
else
|
||||
objectSpeed = R_PointToDist2(0, 0, savemomx, savemomy);
|
||||
|
||||
if (!vertispeed)
|
||||
{
|
||||
fixed_t finalSpeed = FixedDiv(horizspeed, hscale);
|
||||
fixed_t pSpeed = object->player->speed;
|
||||
// Scale to gamespeed
|
||||
finalSpeed = FixedMul(finalSpeed, K_GetKartGameSpeedScalar(gamespeed));
|
||||
|
||||
if (pSpeed > finalSpeed)
|
||||
finalSpeed = pSpeed;
|
||||
// Reflect your momentum angle against the surface of horizontal springs.
|
||||
// This makes it a bit more interesting & unique than just being a speed boost in a pre-defined direction
|
||||
if (savemomx || savemomy)
|
||||
{
|
||||
angle_t momang;
|
||||
INT32 angoffset;
|
||||
boolean subtract = false;
|
||||
|
||||
P_InstaThrustEvenIn2D(object, spring->angle, FixedMul(finalSpeed,FixedSqrt(FixedMul(hscale, spring->scale))));
|
||||
momang = R_PointToAngle2(0, 0, savemomx, savemomy);
|
||||
|
||||
angoffset = momang;
|
||||
angoffset -= spring->angle; // Subtract
|
||||
|
||||
// Flip on wrong side
|
||||
if ((angle_t)angoffset > ANGLE_180)
|
||||
{
|
||||
angoffset = InvAngle((angle_t)angoffset);
|
||||
subtract = !subtract;
|
||||
}
|
||||
|
||||
// Fix going directly against the spring's angle sending you the wrong way
|
||||
if ((spring->angle - momang) > ANGLE_90)
|
||||
angoffset = ANGLE_180 - angoffset;
|
||||
|
||||
// Offset is reduced to cap it (90 / 2 = max of 45 degrees)
|
||||
angoffset /= 2;
|
||||
|
||||
// Reduce further based on how slow your speed is compared to the spring's speed
|
||||
if (finalSpeed > objectSpeed)
|
||||
angoffset = FixedDiv(angoffset, FixedDiv(finalSpeed, objectSpeed));
|
||||
|
||||
if (subtract)
|
||||
angoffset = (signed)(spring->angle) - angoffset;
|
||||
else
|
||||
angoffset = (signed)(spring->angle) + angoffset;
|
||||
|
||||
finalAngle = angoffset;
|
||||
}
|
||||
}
|
||||
|
||||
if (object->player)
|
||||
{
|
||||
// Less friction when hitting horizontal springs
|
||||
if (!vertispeed)
|
||||
{
|
||||
if (!object->player->kartstuff[k_tiregrease])
|
||||
{
|
||||
UINT8 i;
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
mobj_t *grease;
|
||||
grease = P_SpawnMobj(object->x, object->y, object->z, MT_TIREGREASE);
|
||||
P_SetTarget(&grease->target, object);
|
||||
grease->angle = R_PointToAngle2(0, 0, object->momx, object->momy);
|
||||
grease->extravalue1 = i;
|
||||
}
|
||||
}
|
||||
|
||||
object->player->kartstuff[k_tiregrease] = greasetics; //FixedMul(greasetics << FRACBITS, finalSpeed/72) >> FRACBITS
|
||||
}
|
||||
}
|
||||
|
||||
// Horizontal speed is used as a minimum thrust, not a direct replacement
|
||||
finalSpeed = max(objectSpeed, finalSpeed);
|
||||
|
||||
P_InstaThrustEvenIn2D(object, finalAngle, FixedMul(finalSpeed, FixedSqrt(FixedMul(hscale, spring->scale))));
|
||||
}
|
||||
|
||||
// Re-solidify
|
||||
|
|
@ -208,46 +286,12 @@ boolean P_DoSpring(mobj_t *spring, mobj_t *object)
|
|||
if (spring->flags & MF_ENEMY) // Spring shells
|
||||
P_SetTarget(&spring->target, object);
|
||||
|
||||
if (horizspeed && object->player->cmd.forwardmove == 0 && object->player->cmd.sidemove == 0)
|
||||
{
|
||||
object->angle = spring->angle;
|
||||
|
||||
if (!demo.playback || P_AnalogMove(object->player))
|
||||
{
|
||||
if (object->player == &players[consoleplayer])
|
||||
localangle[0] = spring->angle;
|
||||
else if (object->player == &players[displayplayers[1]])
|
||||
localangle[1] = spring->angle;
|
||||
else if (object->player == &players[displayplayers[2]])
|
||||
localangle[2] = spring->angle;
|
||||
else if (object->player == &players[displayplayers[3]])
|
||||
localangle[3] = spring->angle;
|
||||
}
|
||||
}
|
||||
|
||||
//pflags = object->player->pflags & (PF_JUMPED|PF_SPINNING|PF_THOKKED); // I still need these.
|
||||
P_ResetPlayer(object->player);
|
||||
|
||||
/* // SRB2kart - Springs don't need to change player state in kart.
|
||||
if (P_MobjFlip(object)*vertispeed > 0)
|
||||
P_SetPlayerMobjState(object, S_PLAY_SPRING);
|
||||
else if (P_MobjFlip(object)*vertispeed < 0)
|
||||
P_SetPlayerMobjState(object, S_PLAY_FALL1);
|
||||
else // horizontal spring
|
||||
{
|
||||
if (pflags & (PF_JUMPED|PF_SPINNING) && object->player->panim == PA_ROLL)
|
||||
object->player->pflags = pflags;
|
||||
else
|
||||
P_SetPlayerMobjState(object, S_PLAY_RUN1);
|
||||
}
|
||||
|
||||
if (spring->info->painchance)
|
||||
{
|
||||
object->player->pflags |= PF_JUMPED;
|
||||
P_SetPlayerMobjState(object, S_PLAY_ATK1);
|
||||
}
|
||||
*/
|
||||
object->player->kartstuff[k_springstars] = max(vertispeed, horizspeed) / FRACUNIT / 2;
|
||||
object->player->kartstuff[k_springcolor] = starcolor;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -1163,6 +1207,7 @@ static boolean PIT_CheckThing(mobj_t *thing)
|
|||
//else if (tmz > thzh - sprarea && tmz < thzh) // Don't damage people springing up / down
|
||||
return true;
|
||||
}
|
||||
|
||||
// missiles can hit other things
|
||||
if (tmthing->flags & MF_MISSILE || tmthing->type == MT_SHELL)
|
||||
{
|
||||
|
|
|
|||
55
src/p_mobj.c
55
src/p_mobj.c
|
|
@ -8547,6 +8547,56 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
z);
|
||||
}
|
||||
break;
|
||||
case MT_TIREGREASE:
|
||||
if (!mobj->target || P_MobjWasRemoved(mobj->target) || !mobj->target->player
|
||||
|| !mobj->target->player->kartstuff[k_tiregrease])
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
return;
|
||||
}
|
||||
|
||||
K_MatchGenericExtraFlags(mobj, mobj->target);
|
||||
|
||||
{
|
||||
const angle_t off = FixedAngle(40*FRACUNIT);
|
||||
angle_t ang = mobj->target->angle;
|
||||
fixed_t z;
|
||||
UINT8 trans = (mobj->target->player->kartstuff[k_tiregrease] * (NUMTRANSMAPS+1)) / greasetics;
|
||||
|
||||
if (trans > NUMTRANSMAPS)
|
||||
trans = NUMTRANSMAPS;
|
||||
|
||||
trans = NUMTRANSMAPS - trans;
|
||||
|
||||
z = mobj->target->z;
|
||||
if (mobj->eflags & MFE_VERTICALFLIP)
|
||||
z += mobj->target->height;
|
||||
|
||||
if (mobj->target->momx || mobj->target->momy)
|
||||
ang = R_PointToAngle2(0, 0, mobj->target->momx, mobj->target->momy);
|
||||
|
||||
if (mobj->extravalue1)
|
||||
ang = (signed)(ang - off);
|
||||
else
|
||||
ang = (signed)(ang + off);
|
||||
|
||||
P_TeleportMove(mobj,
|
||||
mobj->target->x - FixedMul(mobj->target->radius, FINECOSINE(ang >> ANGLETOFINESHIFT)),
|
||||
mobj->target->y - FixedMul(mobj->target->radius, FINESINE(ang >> ANGLETOFINESHIFT)),
|
||||
z);
|
||||
mobj->angle = ang;
|
||||
|
||||
if (leveltime & 1)
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
|
||||
if (trans >= NUMTRANSMAPS)
|
||||
mobj->flags2 |= MF2_DONTDRAW;
|
||||
else if (trans == 0)
|
||||
mobj->frame = (mobj->frame & ~FF_TRANSMASK);
|
||||
else
|
||||
mobj->frame = (mobj->frame & ~FF_TRANSMASK)|(trans << FF_TRANSSHIFT);
|
||||
}
|
||||
break;
|
||||
case MT_THUNDERSHIELD:
|
||||
{
|
||||
fixed_t destx, desty;
|
||||
|
|
@ -9249,6 +9299,9 @@ void P_MobjThinker(mobj_t *mobj)
|
|||
}
|
||||
break;
|
||||
case MT_KARMAFIREWORK:
|
||||
if (mobj->flags & MF_NOGRAVITY)
|
||||
break;
|
||||
|
||||
if (mobj->momz == 0)
|
||||
{
|
||||
P_RemoveMobj(mobj);
|
||||
|
|
@ -12190,7 +12243,7 @@ ML_NOCLIMB : Direction not controllable
|
|||
{
|
||||
if (mthing->options & MTF_AMBUSH)
|
||||
{
|
||||
if (i == MT_YELLOWDIAG || i == MT_REDDIAG)
|
||||
if (mobj->flags & MF_SPRING && mobj->info->damage)
|
||||
mobj->angle += ANGLE_22h;
|
||||
|
||||
if (mobj->flags & MF_NIGHTSITEM)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue