mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Hardcode DLZ Hover thingies + rocket fixes
This commit is contained in:
parent
a565d923c0
commit
ca90d27e30
6 changed files with 98 additions and 6 deletions
|
|
@ -248,7 +248,7 @@ void Obj_EggBallSpawnerThink(mobj_t *mo);
|
|||
void Obj_EggBallThink(mobj_t *mo);
|
||||
|
||||
/* DLZ Rockets */
|
||||
void Obj_DLZRocketSpawn(mobj_t *mo);
|
||||
void Obj_DLZRocketThink(mobj_t *mo);
|
||||
void Obj_DLZRocketSpecial(mobj_t *mo, player_t *p); // touch activation
|
||||
void Obj_playerDLZRocket(player_t *p); // player looping thinker
|
||||
void Obj_DLZRocketDismount(player_t *p); // used in p_map.c to get off the rocket when we cross transfer lines.
|
||||
|
|
@ -258,6 +258,10 @@ void Obj_DLZSeasawSpawn(mobj_t *mo);
|
|||
void Obj_DLZSeasawThink(mobj_t *mo);
|
||||
void Obj_DLZSeasawCollide(mobj_t *mo, mobj_t *mo2);
|
||||
|
||||
/* DLZ Hover */
|
||||
void Obj_DLZHoverSpawn(mobj_t *mo);
|
||||
void Obj_DLZHoverCollide(mobj_t *mo, mobj_t *mo2);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -34,5 +34,6 @@ target_sources(SRB2SDL2 PRIVATE
|
|||
eggball.c
|
||||
dlzrocket.c
|
||||
dlzseasaw.c
|
||||
dlzothers.c
|
||||
shadow.cpp
|
||||
)
|
||||
|
|
|
|||
69
src/objects/dlzothers.c
Normal file
69
src/objects/dlzothers.c
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
// DR. ROBOTNIK'S RING RACERS
|
||||
//-----------------------------------------------------------------------------
|
||||
// Copyright (C) 2022 by Sally "TehRealSalt" Cochenour
|
||||
// Copyright (C) 2022 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.
|
||||
//-----------------------------------------------------------------------------
|
||||
/// \file dlzothers.c
|
||||
/// \brief Dead Line Zone other objects (Hover + Ring Vaccum), they're small enough that we can just lump em together instead of having 2 more small files...
|
||||
|
||||
#include "../doomdef.h"
|
||||
#include "../doomstat.h"
|
||||
#include "../info.h"
|
||||
#include "../k_kart.h"
|
||||
#include "../k_objects.h"
|
||||
#include "../m_random.h"
|
||||
#include "../p_local.h"
|
||||
#include "../r_main.h"
|
||||
#include "../s_sound.h"
|
||||
#include "../g_game.h"
|
||||
#include "../z_zone.h"
|
||||
#include "../k_waypoint.h"
|
||||
#include "../k_respawn.h"
|
||||
#include "../k_collide.h"
|
||||
|
||||
// Hover:
|
||||
void Obj_DLZHoverSpawn(mobj_t *mo)
|
||||
{
|
||||
P_SetScale(mo, mapobjectscale*4);
|
||||
mo->destscale = mapobjectscale*4;
|
||||
}
|
||||
|
||||
void Obj_DLZHoverCollide(mobj_t *mo, mobj_t *mo2)
|
||||
{
|
||||
player_t *p = mo->player;
|
||||
|
||||
if (!p || p->lasthover == leveltime)
|
||||
return;
|
||||
|
||||
if (abs(mo->z - mo2->z) < 512*mapobjectscale)
|
||||
{
|
||||
// momz adjust
|
||||
if (mo2->eflags & MFE_VERTICALFLIP)
|
||||
{
|
||||
if (mo->momz > -16*mapobjectscale)
|
||||
{
|
||||
mo->momz -= 8*mapobjectscale;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (mo->momz < 16*mapobjectscale)
|
||||
{
|
||||
mo->momz += 8*mapobjectscale;
|
||||
}
|
||||
}
|
||||
|
||||
// speed adjust
|
||||
if (p->speed > K_GetKartSpeed(p, false, false))
|
||||
P_Thrust(mo, R_PointToAngle2(0, 0, -mo->momx, -mo->momy), mapobjectscale/16);
|
||||
|
||||
if (!S_SoundPlaying(mo, sfx_s3kc6s))
|
||||
S_StartSound(mo, sfx_s3kc6s);
|
||||
|
||||
p->lasthover = leveltime;
|
||||
}
|
||||
}
|
||||
|
|
@ -31,11 +31,14 @@
|
|||
#define DLZROCKETVERTSPEED (ANG1)
|
||||
#define DLZROCKETMAXVERT (ANG1*60)
|
||||
|
||||
void Obj_DLZRocketSpawn(mobj_t *mo)
|
||||
void Obj_DLZRocketThink(mobj_t *mo)
|
||||
{
|
||||
UINT8 i;
|
||||
angle_t an = mo->angle + ANGLE_90;
|
||||
|
||||
if (mo->extravalue1)
|
||||
return;
|
||||
|
||||
for (i = 0; i < 2; i++)
|
||||
{
|
||||
fixed_t x = mo->x + FixedMul(mapobjectscale, DLZROCKETDIST*FINECOSINE(an>>ANGLETOFINESHIFT));
|
||||
|
|
@ -44,11 +47,14 @@ void Obj_DLZRocketSpawn(mobj_t *mo)
|
|||
mobj_t *r = P_SpawnMobj(x, y, mo->z, MT_THOK);
|
||||
P_SetMobjState(r, i ? S_DLZROCKET_L : S_DLZROCKET_R);
|
||||
P_SetScale(r, (mapobjectscale*3)/2);
|
||||
r->angle = mo->angle;
|
||||
r->destscale = (mapobjectscale*3)/2;
|
||||
r->angle = mo->spawnpoint->angle*ANG1;
|
||||
r->tics = -1;
|
||||
|
||||
an += ANGLE_180;
|
||||
}
|
||||
|
||||
mo->extravalue1 = 1;
|
||||
}
|
||||
|
||||
void Obj_DLZRocketDismount(player_t *p)
|
||||
|
|
|
|||
|
|
@ -750,6 +750,14 @@ static BlockItReturn_t PIT_CheckThing(mobj_t *thing)
|
|||
return BMIT_CONTINUE;
|
||||
}
|
||||
|
||||
if (thing->type == MT_DLZ_HOVER)
|
||||
{
|
||||
if (tm.thing->type == MT_PLAYER)
|
||||
Obj_DLZHoverCollide(tm.thing, thing);
|
||||
|
||||
return BMIT_CONTINUE;
|
||||
}
|
||||
|
||||
if (tm.thing->type == MT_INSTAWHIP)
|
||||
{
|
||||
if (tm.thing->z > thing->z + thing->height)
|
||||
|
|
|
|||
10
src/p_mobj.c
10
src/p_mobj.c
|
|
@ -9724,6 +9724,10 @@ static boolean P_MobjRegularThink(mobj_t *mobj)
|
|||
case MT_LSZ_EGGBALL:
|
||||
Obj_EggBallThink(mobj);
|
||||
break;
|
||||
|
||||
case MT_DLZ_ROCKET:
|
||||
Obj_DLZRocketThink(mobj);
|
||||
break;
|
||||
|
||||
case MT_DLZ_SEASAW_SPAWN:
|
||||
Obj_DLZSeasawThink(mobj);
|
||||
|
|
@ -11165,12 +11169,12 @@ mobj_t *P_SpawnMobj(fixed_t x, fixed_t y, fixed_t z, mobjtype_t type)
|
|||
case MT_RIDEROIDNODE:
|
||||
Obj_RideroidNodeSpawn(mobj);
|
||||
break;
|
||||
case MT_DLZ_ROCKET:
|
||||
Obj_DLZRocketSpawn(mobj);
|
||||
break;
|
||||
case MT_DLZ_SEASAW_SPAWN:
|
||||
Obj_DLZSeasawSpawn(mobj);
|
||||
break;
|
||||
case MT_DLZ_HOVER:
|
||||
Obj_DLZHoverSpawn(mobj);
|
||||
break;
|
||||
case MT_SNEAKERPANEL:
|
||||
Obj_SneakerPanelSpawn(mobj);
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue