mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Merge branch 'jartha/generic-bumpers' into 'master'
Generic bumper object functionality See merge request kart-krew-dev/ring-racers-internal!2583
This commit is contained in:
commit
b51d3b3c8a
8 changed files with 70 additions and 60 deletions
|
|
@ -297,6 +297,7 @@ actionpointer_t actionpointers[] =
|
||||||
{{A_MakeSSCandle}, "A_MAKESSCANDLE"},
|
{{A_MakeSSCandle}, "A_MAKESSCANDLE"},
|
||||||
{{A_HologramRandomTranslucency}, "A_HOLOGRAMRANDOMTRANSLUCENCY"},
|
{{A_HologramRandomTranslucency}, "A_HOLOGRAMRANDOMTRANSLUCENCY"},
|
||||||
{{A_SSChainShatter}, "A_SSCHAINSHATTER"},
|
{{A_SSChainShatter}, "A_SSCHAINSHATTER"},
|
||||||
|
{{A_GenericBumper}, "A_GENERICBUMPER"},
|
||||||
|
|
||||||
{{NULL}, "NONE"},
|
{{NULL}, "NONE"},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -3640,7 +3640,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_S_SP, FF_ANIMATE|FF_SEMIBRIGHT, -1, {NULL}, 3, 2, S_NULL}, // S_SLSTMACE
|
{SPR_S_SP, FF_ANIMATE|FF_SEMIBRIGHT, -1, {NULL}, 3, 2, S_NULL}, // S_SLSTMACE
|
||||||
|
|
||||||
// MT_SEALEDSTAR_BUMPER
|
// MT_SEALEDSTAR_BUMPER
|
||||||
{SPR_SBMP, 0|FF_FULLBRIGHT, -1, {NULL}, 2, 8, S_SEALEDSTAR_BUMPER}, // S_SEALEDSTAR_BUMPER
|
{SPR_SBMP, 0|FF_FULLBRIGHT, -1, {A_GenericBumper}, 0, 56, S_SEALEDSTAR_BUMPER}, // S_SEALEDSTAR_BUMPER
|
||||||
{SPR_SBMP, 1|FF_ANIMATE|FF_FULLBRIGHT, 8, {NULL}, 1, 2, S_SEALEDSTAR_BUMPER}, // S_SEALEDSTAR_BUMPERHIT
|
{SPR_SBMP, 1|FF_ANIMATE|FF_FULLBRIGHT, 8, {NULL}, 1, 2, S_SEALEDSTAR_BUMPER}, // S_SEALEDSTAR_BUMPERHIT
|
||||||
|
|
||||||
// MT_SSCHAIN_SPAWNER
|
// MT_SSCHAIN_SPAWNER
|
||||||
|
|
@ -22233,7 +22233,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
0, // mass
|
0, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
sfx_None, // activesound
|
sfx_None, // activesound
|
||||||
MF_SPECIAL|MF_NOGRAVITY, // flags
|
MF_NOGRAVITY|MF_SOLID, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
{ // MT_SSCHAIN_SPAWNER
|
{ // MT_SSCHAIN_SPAWNER
|
||||||
|
|
|
||||||
|
|
@ -289,6 +289,7 @@ enum actionnum
|
||||||
A_MAKESSCANDLE,
|
A_MAKESSCANDLE,
|
||||||
A_HOLOGRAMRANDOMTRANSLUCENCY,
|
A_HOLOGRAMRANDOMTRANSLUCENCY,
|
||||||
A_SSCHAINSHATTER,
|
A_SSCHAINSHATTER,
|
||||||
|
A_GENERICBUMPER,
|
||||||
NUMACTIONS
|
NUMACTIONS
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -557,6 +558,7 @@ void A_BlendEyePuyoHack();
|
||||||
void A_MakeSSCandle();
|
void A_MakeSSCandle();
|
||||||
void A_HologramRandomTranslucency();
|
void A_HologramRandomTranslucency();
|
||||||
void A_SSChainShatter();
|
void A_SSChainShatter();
|
||||||
|
void A_GenericBumper();
|
||||||
|
|
||||||
extern boolean actionsoverridden[NUMACTIONS];
|
extern boolean actionsoverridden[NUMACTIONS];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -411,7 +411,6 @@ void Obj_SSGobletMobjThink(mobj_t* mo);
|
||||||
void Obj_SSLampMapThingSpawn(mobj_t* mo, mapthing_t* mt);
|
void Obj_SSLampMapThingSpawn(mobj_t* mo, mapthing_t* mt);
|
||||||
void Obj_SSWindowMapThingSpawn(mobj_t* mo, mapthing_t* mt);
|
void Obj_SSWindowMapThingSpawn(mobj_t* mo, mapthing_t* mt);
|
||||||
void Obj_SLSTMaceMobjThink(mobj_t* mo);
|
void Obj_SLSTMaceMobjThink(mobj_t* mo);
|
||||||
void Obj_SSBumperTouchSpecial(mobj_t* special, mobj_t* toucher);
|
|
||||||
void Obj_SSBumperMobjSpawn(mobj_t* mo);
|
void Obj_SSBumperMobjSpawn(mobj_t* mo);
|
||||||
void Obj_SSChainMobjThink(mobj_t* mo);
|
void Obj_SSChainMobjThink(mobj_t* mo);
|
||||||
void Obj_SSGachaTargetMobjSpawn(mobj_t* mo);
|
void Obj_SSGachaTargetMobjSpawn(mobj_t* mo);
|
||||||
|
|
|
||||||
|
|
@ -542,58 +542,6 @@ void Obj_SLSTMaceMobjThink(mobj_t* mo)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BUMPER_STRENGTH (56)
|
|
||||||
|
|
||||||
void Obj_SSBumperTouchSpecial(mobj_t* special, mobj_t* toucher)
|
|
||||||
{
|
|
||||||
angle_t hang;
|
|
||||||
angle_t vang;
|
|
||||||
fixed_t str;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
hang = R_PointToAngle2(special->x, special->y, toucher->x, toucher->y);
|
|
||||||
vang = 0;
|
|
||||||
|
|
||||||
if (P_IsObjectOnGround(toucher) == false)
|
|
||||||
{
|
|
||||||
vang = R_PointToAngle2(
|
|
||||||
FixedHypot(special->x, special->y), special->z + (special->height >> 1),
|
|
||||||
FixedHypot(toucher->x, toucher->y), toucher->z + (toucher->height >> 1)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
str = (BUMPER_STRENGTH * special->scale) >> 1;
|
|
||||||
|
|
||||||
toucher->momx = FixedMul(FixedMul(str, FCOS(hang)), abs(FCOS(vang)));
|
|
||||||
toucher->momy = FixedMul(FixedMul(str, FSIN(hang)), abs(FCOS(vang)));
|
|
||||||
toucher->momz = FixedMul(str, FSIN(vang));
|
|
||||||
|
|
||||||
if (toucher->player)
|
|
||||||
{
|
|
||||||
if (toucher->player->tiregrease == 0)
|
|
||||||
{
|
|
||||||
for (i = 0; i < 2; i++)
|
|
||||||
{
|
|
||||||
mobj_t *grease = P_SpawnMobjFromMobj(toucher, 0, 0, 0, MT_TIREGREASE);
|
|
||||||
P_SetTarget(&grease->target, toucher);
|
|
||||||
grease->angle = toucher->angle;
|
|
||||||
grease->extravalue1 = i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (toucher->player->tiregrease < 2*TICRATE) // greasetics
|
|
||||||
{
|
|
||||||
toucher->player->tiregrease = 2*TICRATE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (special->state != &states[special->info->seestate])
|
|
||||||
{
|
|
||||||
S_StartSound(special, special->info->deathsound);
|
|
||||||
P_SetMobjState(special, special->info->seestate);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Obj_SSBumperMobjSpawn(mobj_t* mo)
|
void Obj_SSBumperMobjSpawn(mobj_t* mo)
|
||||||
{
|
{
|
||||||
mo->shadowscale = FRACUNIT;
|
mo->shadowscale = FRACUNIT;
|
||||||
|
|
|
||||||
|
|
@ -321,6 +321,7 @@ void A_BlendEyePuyoHack(mobj_t *actor);
|
||||||
void A_MakeSSCandle(mobj_t *actor);
|
void A_MakeSSCandle(mobj_t *actor);
|
||||||
void A_HologramRandomTranslucency(mobj_t *actor);
|
void A_HologramRandomTranslucency(mobj_t *actor);
|
||||||
void A_SSChainShatter(mobj_t *actor);
|
void A_SSChainShatter(mobj_t *actor);
|
||||||
|
void A_GenericBumper(mobj_t *actor);
|
||||||
|
|
||||||
//for p_enemy.c
|
//for p_enemy.c
|
||||||
|
|
||||||
|
|
@ -12668,3 +12669,54 @@ void A_SSChainShatter(mobj_t* actor)
|
||||||
|
|
||||||
actor->fuse = 1;
|
actor->fuse = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// var1 = If -1, triggered by collision event
|
||||||
|
// var2 = Strength value
|
||||||
|
//
|
||||||
|
// mobjinfo dependencies:
|
||||||
|
// - deathsound - bumper noise
|
||||||
|
// - seestate - bumper flashing state
|
||||||
|
//
|
||||||
|
void A_GenericBumper(mobj_t* actor)
|
||||||
|
{
|
||||||
|
if (var1 != -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mobj_t *other = actor->target;
|
||||||
|
|
||||||
|
if (!other)
|
||||||
|
return;
|
||||||
|
|
||||||
|
// This code was ported from Lua
|
||||||
|
// Original was Balloon Park's bumpers?
|
||||||
|
INT32 hang = R_PointToAngle2(
|
||||||
|
actor->x, actor->y,
|
||||||
|
other->x, other->y
|
||||||
|
);
|
||||||
|
|
||||||
|
INT32 vang = 0;
|
||||||
|
|
||||||
|
if (!P_IsObjectOnGround(other))
|
||||||
|
{
|
||||||
|
vang = R_PointToAngle2(
|
||||||
|
FixedHypot(actor->x, actor->y), actor->z + (actor->height / 2),
|
||||||
|
FixedHypot(other->x, other->y), other->z + (other->height / 2)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
INT32 baseStrength = abs(astate->var2);
|
||||||
|
fixed_t strength = (baseStrength * actor->scale) / 2;
|
||||||
|
|
||||||
|
other->momx = FixedMul(FixedMul(strength, FCOS(hang)), abs(FCOS(vang)));
|
||||||
|
other->momy = FixedMul(FixedMul(strength, FSIN(hang)), abs(FCOS(vang)));
|
||||||
|
other->momz = FixedMul(strength, FSIN(vang));
|
||||||
|
|
||||||
|
if (other->player)
|
||||||
|
K_SetTireGrease(other->player, max(other->player->tiregrease, 2*TICRATE));
|
||||||
|
|
||||||
|
if (actor->state != &states[actor->info->seestate])
|
||||||
|
{
|
||||||
|
S_StartSound(actor, actor->info->deathsound);
|
||||||
|
P_SetMobjState(actor, actor->info->seestate);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1083,10 +1083,6 @@ void P_TouchSpecialThing(mobj_t *special, mobj_t *toucher, boolean heightcheck)
|
||||||
Obj_TrickBalloonTouchSpecial(special, toucher);
|
Obj_TrickBalloonTouchSpecial(special, toucher);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case MT_SEALEDSTAR_BUMPER:
|
|
||||||
Obj_SSBumperTouchSpecial(special, toucher);
|
|
||||||
return;
|
|
||||||
|
|
||||||
case MT_PULLUPHOOK:
|
case MT_PULLUPHOOK:
|
||||||
Obj_PulleyHookTouch(special, toucher);
|
Obj_PulleyHookTouch(special, toucher);
|
||||||
return;
|
return;
|
||||||
|
|
|
||||||
12
src/p_map.c
12
src/p_map.c
|
|
@ -1552,6 +1552,18 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing)
|
||||||
|
|
||||||
if (!K_PuntCollide(thing, g_tm.thing))
|
if (!K_PuntCollide(thing, g_tm.thing))
|
||||||
{
|
{
|
||||||
|
state_t *st = &states[thing->info->spawnstate];
|
||||||
|
|
||||||
|
if (st->action.acp1 == A_GenericBumper)
|
||||||
|
{
|
||||||
|
P_SetTarget(&thing->target, g_tm.thing);
|
||||||
|
|
||||||
|
var1 = -1;
|
||||||
|
var2 = 0;
|
||||||
|
astate = st;
|
||||||
|
st->action.acp1(thing);
|
||||||
|
}
|
||||||
|
else
|
||||||
K_KartSolidBounce(g_tm.thing, thing);
|
K_KartSolidBounce(g_tm.thing, thing);
|
||||||
}
|
}
|
||||||
return BMIT_CONTINUE;
|
return BMIT_CONTINUE;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue