mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Add Lightning Shield visual object
This commit is contained in:
parent
835785d940
commit
3644f8afe7
6 changed files with 90 additions and 1 deletions
|
|
@ -15373,7 +15373,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
|||
|
||||
{ // MT_LIGHTNINGSHIELD
|
||||
-1, // doomednum
|
||||
S_LIGHTNINGSHIELD1, // spawnstate
|
||||
S_INVISIBLE, // spawnstate
|
||||
1000, // spawnhealth
|
||||
S_NULL, // seestate
|
||||
sfx_None, // seesound
|
||||
|
|
|
|||
|
|
@ -14059,6 +14059,8 @@ void K_MoveKartPlayer(player_t *player, boolean onground)
|
|||
P_SetTarget(&shield->target, player->mo);
|
||||
S_StartSound(player->mo, sfx_s3k41);
|
||||
player->curshield = KSHIELD_LIGHTNING;
|
||||
|
||||
Obj_SpawnLightningShieldVisuals(shield);
|
||||
}
|
||||
|
||||
if (ATTACK_IS_DOWN && !HOLDING_ITEM && NO_HYUDORO)
|
||||
|
|
|
|||
|
|
@ -453,6 +453,10 @@ void K_DoBallhogAttack(player_t *player, UINT8 num_hogs);
|
|||
void Obj_SpawnBubbleShieldVisuals(mobj_t *source);
|
||||
boolean Obj_TickBubbleShieldVisual(mobj_t *mobj);
|
||||
|
||||
/* Lightning Shield */
|
||||
void Obj_SpawnLightningShieldVisuals(mobj_t *source);
|
||||
boolean Obj_TickLightningShieldVisual(mobj_t *mobj);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ target_sources(SRB2SDL2 PRIVATE
|
|||
ballhog.cpp
|
||||
bubble-shield.cpp
|
||||
flybot767.c
|
||||
lightning-shield.cpp
|
||||
)
|
||||
|
||||
add_subdirectory(versus)
|
||||
|
|
|
|||
74
src/objects/lightning-shield.cpp
Normal file
74
src/objects/lightning-shield.cpp
Normal file
|
|
@ -0,0 +1,74 @@
|
|||
// DR. ROBOTNIK'S RING RACERS
|
||||
//-----------------------------------------------------------------------------
|
||||
// Copyright (C) 2025 by James Robert Roman
|
||||
// Copyright (C) 2025 by Kart Krew
|
||||
//
|
||||
// This program is free software distributed under the
|
||||
// terms of the GNU General Public License, version 2.
|
||||
// See the 'LICENSE' file for more details.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
#include "objects.hpp"
|
||||
|
||||
#include "../tables.h"
|
||||
|
||||
using namespace srb2::objects;
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
struct Shield : Mobj
|
||||
{
|
||||
void target() = delete;
|
||||
Mobj* follow() const { return Mobj::target(); }
|
||||
void follow(Mobj* n) { Mobj::target(n); }
|
||||
|
||||
bool valid() const { return Mobj::valid(follow()); }
|
||||
};
|
||||
|
||||
struct Visual : Mobj
|
||||
{
|
||||
void target() = delete;
|
||||
Shield* shield() const { return Mobj::target<Shield>(); }
|
||||
void shield(Shield* n) { Mobj::target(n); }
|
||||
|
||||
bool valid() const { return Mobj::valid(shield()) && shield()->valid(); }
|
||||
|
||||
static void spawn(Shield* shield)
|
||||
{
|
||||
if (!shield->valid())
|
||||
return;
|
||||
|
||||
Visual* x = Mobj::spawn<Visual>(shield->pos(), MT_LIGHTNINGSHIELD_VISUAL);
|
||||
x->scale(5 * shield->follow()->scale() / 4);
|
||||
x->shield(shield);
|
||||
x->linkdraw(shield->follow());
|
||||
x->tick();
|
||||
}
|
||||
|
||||
bool tick()
|
||||
{
|
||||
if (!valid())
|
||||
{
|
||||
remove();
|
||||
return false;
|
||||
}
|
||||
|
||||
move_origin(shield()->pos());
|
||||
dispoffset = state()->num() == S_THNB1 ? -1 : 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
}; // namespace
|
||||
|
||||
void Obj_SpawnLightningShieldVisuals(mobj_t *shield)
|
||||
{
|
||||
Visual::spawn(static_cast<Shield*>(shield));
|
||||
}
|
||||
|
||||
boolean Obj_TickLightningShieldVisual(mobj_t *mobj)
|
||||
{
|
||||
return static_cast<Visual*>(mobj)->tick();
|
||||
}
|
||||
|
|
@ -6666,6 +6666,14 @@ static void P_MobjSceneryThink(mobj_t *mobj)
|
|||
}
|
||||
break;
|
||||
}
|
||||
case MT_LIGHTNINGSHIELD_VISUAL:
|
||||
{
|
||||
if (!Obj_TickLightningShieldVisual(mobj))
|
||||
{
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
if (mobj->fuse)
|
||||
{ // Scenery object fuse! Very basic!
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue