Hardcode DLZ Hover thingies + rocket fixes

This commit is contained in:
Lat 2023-09-23 11:00:00 +02:00
parent a565d923c0
commit ca90d27e30
6 changed files with 98 additions and 6 deletions

View file

@ -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

View file

@ -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
View 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;
}
}

View file

@ -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)

View file

@ -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)

View file

@ -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;