mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2026-04-28 04:51:42 +00:00
Implement reticule gfx, fix FOFs/walls/scale
This commit is contained in:
parent
03874c3374
commit
d33b123e32
7 changed files with 110 additions and 61 deletions
|
|
@ -370,6 +370,7 @@ char sprnames[NUMSPRITES + 1][5] =
|
||||||
"DTRG", // Drop Target
|
"DTRG", // Drop Target
|
||||||
"BHOG", // Ballhog
|
"BHOG", // Ballhog
|
||||||
"BHBM", // Ballhog BOOM
|
"BHBM", // Ballhog BOOM
|
||||||
|
"BHGR", // Ballhog reticule
|
||||||
"SPBM", // Self-Propelled Bomb
|
"SPBM", // Self-Propelled Bomb
|
||||||
"TRIS", // SPB Manta Ring start
|
"TRIS", // SPB Manta Ring start
|
||||||
"TRNQ", // SPB Manta Ring loop
|
"TRNQ", // SPB Manta Ring loop
|
||||||
|
|
@ -2458,7 +2459,7 @@ state_t states[NUMSTATES] =
|
||||||
{SPR_BHBM, FF_FULLBRIGHT|13, 1, {NULL}, 0, 0, S_BALLHOGBOOM15}, // S_BALLHOGBOOM14
|
{SPR_BHBM, FF_FULLBRIGHT|13, 1, {NULL}, 0, 0, S_BALLHOGBOOM15}, // S_BALLHOGBOOM14
|
||||||
{SPR_BHBM, FF_FULLBRIGHT|14, 1, {NULL}, 0, 0, S_BALLHOGBOOM16}, // S_BALLHOGBOOM15
|
{SPR_BHBM, FF_FULLBRIGHT|14, 1, {NULL}, 0, 0, S_BALLHOGBOOM16}, // S_BALLHOGBOOM15
|
||||||
{SPR_BHBM, FF_FULLBRIGHT|15, 1, {NULL}, 0, 0, S_NULL}, // S_BALLHOGBOOM16
|
{SPR_BHBM, FF_FULLBRIGHT|15, 1, {NULL}, 0, 0, S_NULL}, // S_BALLHOGBOOM16
|
||||||
{SPR_SPBM, FF_FULLBRIGHT|0, -1, {NULL}, 0, 0, S_NULL}, // S_BALLHOG_RETICULE
|
{SPR_BHGR, FF_ANIMATE|FF_FULLBRIGHT|0, 2*TICRATE, {NULL}, 5, 3, S_NULL}, // S_BALLHOG_RETICULE
|
||||||
|
|
||||||
{SPR_SPBM, 0, 1, {NULL}, 0, 0, S_SPB2}, // S_SPB1
|
{SPR_SPBM, 0, 1, {NULL}, 0, 0, S_SPB2}, // S_SPB1
|
||||||
{SPR_SPBM, 1, 1, {NULL}, 0, 0, S_SPB3}, // S_SPB2
|
{SPR_SPBM, 1, 1, {NULL}, 0, 0, S_SPB3}, // S_SPB2
|
||||||
|
|
@ -15231,7 +15232,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] =
|
||||||
100, // mass
|
100, // mass
|
||||||
0, // damage
|
0, // damage
|
||||||
sfx_None, // activesound
|
sfx_None, // activesound
|
||||||
MF_NOTHINK|MF_NOBLOCKMAP|MF_NOCLIPTHING|MF_DONTENCOREMAP|MF_DONTPUNT, // flags
|
MF_NOCLIPTHING|MF_DONTENCOREMAP|MF_DONTPUNT, // flags
|
||||||
S_NULL // raisestate
|
S_NULL // raisestate
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -909,6 +909,7 @@ typedef enum sprite
|
||||||
SPR_DTRG, // Drop Target
|
SPR_DTRG, // Drop Target
|
||||||
SPR_BHOG, // Ballhog
|
SPR_BHOG, // Ballhog
|
||||||
SPR_BHBM, // Ballhog BOOM
|
SPR_BHBM, // Ballhog BOOM
|
||||||
|
SPR_BHGR, // Ballhog reticule
|
||||||
SPR_SPBM, // Self-Propelled Bomb
|
SPR_SPBM, // Self-Propelled Bomb
|
||||||
SPR_TRIS, // SPB Manta Ring start
|
SPR_TRIS, // SPB Manta Ring start
|
||||||
SPR_TRNQ, // SPB Manta Ring loop
|
SPR_TRNQ, // SPB Manta Ring loop
|
||||||
|
|
|
||||||
41
src/k_kart.c
41
src/k_kart.c
|
|
@ -5472,9 +5472,25 @@ void K_SpawnLandMineExplosion(mobj_t *source, skincolornum_t color, tic_t delay)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fixed_t K_ItemScaleForPlayer(player_t *player)
|
fixed_t K_GetItemScaleConst(fixed_t scale)
|
||||||
{
|
{
|
||||||
switch (player->itemscale)
|
if (scale >= FixedMul(GROW_PHYSICS_SCALE, mapobjectscale))
|
||||||
|
{
|
||||||
|
return ITEMSCALE_GROW;
|
||||||
|
}
|
||||||
|
else if (scale <= FixedMul(SHRINK_PHYSICS_SCALE, mapobjectscale))
|
||||||
|
{
|
||||||
|
return ITEMSCALE_SHRINK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return ITEMSCALE_NORMAL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fixed_t K_ItemScaleFromConst(UINT8 item_scale_const)
|
||||||
|
{
|
||||||
|
switch (item_scale_const)
|
||||||
{
|
{
|
||||||
case ITEMSCALE_GROW:
|
case ITEMSCALE_GROW:
|
||||||
return FixedMul(GROW_SCALE, mapobjectscale);
|
return FixedMul(GROW_SCALE, mapobjectscale);
|
||||||
|
|
@ -5487,6 +5503,11 @@ fixed_t K_ItemScaleForPlayer(player_t *player)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fixed_t K_ItemScaleForPlayer(player_t *player)
|
||||||
|
{
|
||||||
|
return K_ItemScaleFromConst(player->itemscale);
|
||||||
|
}
|
||||||
|
|
||||||
fixed_t K_DefaultPlayerRadius(player_t *player)
|
fixed_t K_DefaultPlayerRadius(player_t *player)
|
||||||
{
|
{
|
||||||
mobj_t *top = K_GetGardenTop(player);
|
mobj_t *top = K_GetGardenTop(player);
|
||||||
|
|
@ -6598,7 +6619,7 @@ mobj_t *K_ThrowKartItemEx(player_t *player, boolean missile, mobjtype_t mapthing
|
||||||
|
|
||||||
if (tossX != 0 || tossY != 0)
|
if (tossX != 0 || tossY != 0)
|
||||||
{
|
{
|
||||||
fixed_t g = 5 * DEFAULT_GRAVITY / 2; // P_GetMobjGravity does not work here??
|
fixed_t g = FixedMul(5 * DEFAULT_GRAVITY / 2, mapobjectscale); // P_GetMobjGravity does not work here??
|
||||||
if (dir > FRACUNIT)
|
if (dir > FRACUNIT)
|
||||||
{
|
{
|
||||||
g = FixedMul(g, dir);
|
g = FixedMul(g, dir);
|
||||||
|
|
@ -12766,19 +12787,7 @@ static void K_trickPanelTimingVisual(player_t *player, fixed_t momz)
|
||||||
void K_SetItemOut(player_t *player)
|
void K_SetItemOut(player_t *player)
|
||||||
{
|
{
|
||||||
player->itemflags |= IF_ITEMOUT;
|
player->itemflags |= IF_ITEMOUT;
|
||||||
|
player->itemscale = K_GetItemScaleConst(player->mo->scale);
|
||||||
if (player->mo->scale >= FixedMul(GROW_PHYSICS_SCALE, mapobjectscale))
|
|
||||||
{
|
|
||||||
player->itemscale = ITEMSCALE_GROW;
|
|
||||||
}
|
|
||||||
else if (player->mo->scale <= FixedMul(SHRINK_PHYSICS_SCALE, mapobjectscale))
|
|
||||||
{
|
|
||||||
player->itemscale = ITEMSCALE_SHRINK;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
player->itemscale = ITEMSCALE_NORMAL;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void K_UnsetItemOut(player_t *player)
|
void K_UnsetItemOut(player_t *player)
|
||||||
|
|
|
||||||
|
|
@ -263,6 +263,8 @@ void K_PlayHitEmSound(mobj_t *source, mobj_t *other);
|
||||||
void K_TryHurtSoundExchange(mobj_t *victim, mobj_t *attacker);
|
void K_TryHurtSoundExchange(mobj_t *victim, mobj_t *attacker);
|
||||||
void K_PlayPowerGloatSound(mobj_t *source);
|
void K_PlayPowerGloatSound(mobj_t *source);
|
||||||
|
|
||||||
|
fixed_t K_GetItemScaleConst(fixed_t scale);
|
||||||
|
fixed_t K_ItemScaleFromConst(UINT8 item_scale_const);
|
||||||
fixed_t K_ItemScaleForPlayer(player_t *player);
|
fixed_t K_ItemScaleForPlayer(player_t *player);
|
||||||
void K_SetItemOut(player_t *player);
|
void K_SetItemOut(player_t *player);
|
||||||
void K_UnsetItemOut(player_t *player);
|
void K_UnsetItemOut(player_t *player);
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ static void CalculateHogAngles(UINT8 n)
|
||||||
|
|
||||||
if (total_hogs > 1)
|
if (total_hogs > 1)
|
||||||
{
|
{
|
||||||
const fixed_t base_radius = mobjinfo[MT_BALLHOG].radius * 3 / 2;
|
const fixed_t base_radius = mobjinfo[MT_BALLHOG].radius * 6;
|
||||||
fixed_t radius = base_radius;
|
fixed_t radius = base_radius;
|
||||||
UINT8 max_points = 6;
|
UINT8 max_points = 6;
|
||||||
angle_t circle_offset = 0;
|
angle_t circle_offset = 0;
|
||||||
|
|
@ -129,13 +129,26 @@ static boolean HogReticuleEmulate(mobj_t *mobj)
|
||||||
return true; // mobj was removed
|
return true; // mobj was removed
|
||||||
}
|
}
|
||||||
|
|
||||||
//P_CheckPosition(mobj, mobj->x, mobj->y, NULL);
|
if (P_MobjWasRemoved(mobj) == true)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (P_MobjWasRemoved(mobj) == true || (x == mobj->x && y == mobj->y && z == mobj->z));
|
if (P_MobjWasRemoved(mobj) == true)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (x == mobj->x && y == mobj->y && z == mobj->z)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void HogReticuleTest(player_t *player, vector3_t *ret)
|
static void HogReticuleTest(player_t *player, vector3_t *ret, fixed_t final_scale)
|
||||||
{
|
{
|
||||||
// Emulate the movement of a tossed ballhog
|
// Emulate the movement of a tossed ballhog
|
||||||
// until it hits something.
|
// until it hits something.
|
||||||
|
|
@ -157,21 +170,11 @@ static void HogReticuleTest(player_t *player, vector3_t *ret)
|
||||||
// Intentionally NOT player scale, that doesn't work.
|
// Intentionally NOT player scale, that doesn't work.
|
||||||
proj_speed = FixedMul(proj_speed, mapobjectscale);
|
proj_speed = FixedMul(proj_speed, mapobjectscale);
|
||||||
|
|
||||||
fixed_t finalscale = ITEMSCALE_NORMAL;
|
|
||||||
if (player->mo->scale >= FixedMul(GROW_PHYSICS_SCALE, mapobjectscale))
|
|
||||||
{
|
|
||||||
finalscale = ITEMSCALE_GROW;
|
|
||||||
}
|
|
||||||
else if (player->mo->scale <= FixedMul(SHRINK_PHYSICS_SCALE, mapobjectscale))
|
|
||||||
{
|
|
||||||
finalscale = ITEMSCALE_SHRINK;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shoot forward
|
// Shoot forward
|
||||||
//P_MoveOrigin(mo, player->mo->x, player->mo->y, player->mo->z + (player->mo->height / 2));
|
//P_MoveOrigin(mo, player->mo->x, player->mo->y, player->mo->z + (player->mo->height / 2));
|
||||||
// FINE! YOU WIN! I'll make an object every time I need to test this...
|
// FINE! YOU WIN! I'll make an object every time I need to test this...
|
||||||
mobj_t *mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + (player->mo->height / 2), MT_BALLHOG_RETICULE_TEST);
|
mobj_t *mo = P_SpawnMobj(player->mo->x, player->mo->y, player->mo->z + (player->mo->height / 2), MT_BALLHOG_RETICULE_TEST);
|
||||||
mo->fuse = 2; // if something goes wrong, destroy this
|
mo->fuse = 2; // if something goes wrong, destroy it
|
||||||
|
|
||||||
mo->angle = player->mo->angle;
|
mo->angle = player->mo->angle;
|
||||||
|
|
||||||
|
|
@ -183,7 +186,8 @@ static void HogReticuleTest(player_t *player, vector3_t *ret)
|
||||||
mo->flags2 |= (player->mo->flags2 & MF2_OBJECTFLIP);
|
mo->flags2 |= (player->mo->flags2 & MF2_OBJECTFLIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
//P_SetTarget(&mo->target, player->mo);
|
P_SetTarget(&mo->target, player->mo);
|
||||||
|
mo->threshold = 10;
|
||||||
|
|
||||||
mo->extravalue2 = dir;
|
mo->extravalue2 = dir;
|
||||||
|
|
||||||
|
|
@ -199,12 +203,12 @@ static void HogReticuleTest(player_t *player, vector3_t *ret)
|
||||||
mo->momz = (117 * mo->momz) / 200;
|
mo->momz = (117 * mo->momz) / 200;
|
||||||
}
|
}
|
||||||
|
|
||||||
P_SetScale(mo, finalscale);
|
P_SetScale(mo, final_scale);
|
||||||
mo->destscale = finalscale;
|
mo->destscale = final_scale;
|
||||||
|
|
||||||
// Contra spread shot scale up
|
// Contra spread shot scale up
|
||||||
//mo->destscale = mo->destscale << 1;
|
mo->destscale = mo->destscale << 1;
|
||||||
//mo->scalespeed = abs(mo->destscale - mo->scale) / (2*TICRATE);
|
mo->scalespeed = abs(mo->destscale - mo->scale) / (2*TICRATE);
|
||||||
|
|
||||||
ret->x = mo->x;
|
ret->x = mo->x;
|
||||||
ret->y = mo->y;
|
ret->y = mo->y;
|
||||||
|
|
@ -213,6 +217,11 @@ static void HogReticuleTest(player_t *player, vector3_t *ret)
|
||||||
constexpr INT32 max_iteration = 256;
|
constexpr INT32 max_iteration = 256;
|
||||||
for (INT32 i = 0; i < max_iteration; i++)
|
for (INT32 i = 0; i < max_iteration; i++)
|
||||||
{
|
{
|
||||||
|
#if 0
|
||||||
|
mobj_t *test = P_SpawnMobj(mo->x, mo->y, mo->z, MT_THOK);
|
||||||
|
test->tics = 2;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (HogReticuleEmulate(mo) == true)
|
if (HogReticuleEmulate(mo) == true)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
|
@ -238,14 +247,23 @@ void K_UpdateBallhogReticules(player_t *player, UINT8 num_hogs, boolean on_relea
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr tic_t kBallhogReticuleTime = TICRATE / 2;
|
|
||||||
|
|
||||||
const UINT8 start_hogs = num_hogs;
|
const UINT8 start_hogs = num_hogs;
|
||||||
|
#if 1
|
||||||
|
if (start_hogs == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
CalculateHogAngles(num_hogs);
|
CalculateHogAngles(num_hogs);
|
||||||
|
|
||||||
// Calculate center positon
|
// Calculate center positon
|
||||||
|
fixed_t final_scale = K_ItemScaleFromConst(K_GetItemScaleConst(player->mo->scale));
|
||||||
|
|
||||||
vector3_t center = {0, 0, 0};
|
vector3_t center = {0, 0, 0};
|
||||||
HogReticuleTest(player, ¢er); // Originally this was called for everything, but it's more optimized to only run 1 prediction.
|
HogReticuleTest(player, ¢er, final_scale); // Originally this was called for everything, but it's more optimized to only run 1 prediction.
|
||||||
|
|
||||||
|
constexpr tic_t kBallhogReticuleTime = (TICRATE * 3 / 4);
|
||||||
|
|
||||||
// Update existing reticules.
|
// Update existing reticules.
|
||||||
mobj_t *reticule = player->ballhogreticule;
|
mobj_t *reticule = player->ballhogreticule;
|
||||||
|
|
@ -259,8 +277,8 @@ void K_UpdateBallhogReticules(player_t *player, UINT8 num_hogs, boolean on_relea
|
||||||
const UINT8 old_hogs = reticule->extravalue1;
|
const UINT8 old_hogs = reticule->extravalue1;
|
||||||
|
|
||||||
UINT8 angle_index = num_hogs - 1;
|
UINT8 angle_index = num_hogs - 1;
|
||||||
fixed_t x_offset = g_hogangles[angle_index].x;
|
fixed_t x_offset = FixedMul(g_hogangles[angle_index].x, final_scale);
|
||||||
fixed_t y_offset = g_hogangles[angle_index].y;
|
fixed_t y_offset = FixedMul(g_hogangles[angle_index].y, final_scale);
|
||||||
|
|
||||||
if (on_release == true)
|
if (on_release == true)
|
||||||
{
|
{
|
||||||
|
|
@ -291,6 +309,11 @@ void K_UpdateBallhogReticules(player_t *player, UINT8 num_hogs, boolean on_relea
|
||||||
}
|
}
|
||||||
|
|
||||||
reticule->tics = kBallhogReticuleTime;
|
reticule->tics = kBallhogReticuleTime;
|
||||||
|
reticule->color = player->skincolor;
|
||||||
|
|
||||||
|
reticule->destscale = final_scale * 2;
|
||||||
|
P_SetScale(reticule, reticule->destscale);
|
||||||
|
|
||||||
num_hogs--;
|
num_hogs--;
|
||||||
}
|
}
|
||||||
#if 0
|
#if 0
|
||||||
|
|
@ -334,15 +357,19 @@ void K_UpdateBallhogReticules(player_t *player, UINT8 num_hogs, boolean on_relea
|
||||||
P_SetTarget(&new_reticule->hprev, player->mo);
|
P_SetTarget(&new_reticule->hprev, player->mo);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start in center
|
|
||||||
new_reticule->extravalue1 = start_hogs;
|
new_reticule->extravalue1 = start_hogs;
|
||||||
|
|
||||||
new_reticule->tics = kBallhogReticuleTime;
|
new_reticule->tics = kBallhogReticuleTime;
|
||||||
|
new_reticule->color = player->skincolor;
|
||||||
|
|
||||||
|
new_reticule->destscale = final_scale * 2;
|
||||||
|
P_SetScale(new_reticule, new_reticule->destscale);
|
||||||
|
|
||||||
if (on_release == true)
|
if (on_release == true)
|
||||||
{
|
{
|
||||||
UINT8 angle_index = num_hogs - 1;
|
UINT8 angle_index = num_hogs - 1;
|
||||||
fixed_t x_offset = g_hogangles[angle_index].x;
|
fixed_t x_offset = FixedMul(g_hogangles[angle_index].x, final_scale);
|
||||||
fixed_t y_offset = g_hogangles[angle_index].y;
|
fixed_t y_offset = FixedMul(g_hogangles[angle_index].y, final_scale);
|
||||||
|
|
||||||
P_SetOrigin(new_reticule, center.x + x_offset, center.y + y_offset, center.z);
|
P_SetOrigin(new_reticule, center.x + x_offset, center.y + y_offset, center.z);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -2747,6 +2747,12 @@ fixed_t P_BaseStepUp(void)
|
||||||
|
|
||||||
fixed_t P_GetThingStepUp(mobj_t *thing, fixed_t destX, fixed_t destY)
|
fixed_t P_GetThingStepUp(mobj_t *thing, fixed_t destX, fixed_t destY)
|
||||||
{
|
{
|
||||||
|
if (thing->type == MT_BALLHOG || thing->type == MT_BALLHOG_RETICULE_TEST)
|
||||||
|
{
|
||||||
|
// these should explode, not go up stairs
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
const fixed_t maxstepmove = P_BaseStepUp();
|
const fixed_t maxstepmove = P_BaseStepUp();
|
||||||
fixed_t maxstep = maxstepmove;
|
fixed_t maxstep = maxstepmove;
|
||||||
|
|
||||||
|
|
|
||||||
33
src/p_mobj.c
33
src/p_mobj.c
|
|
@ -1697,8 +1697,9 @@ boolean P_XYMovement(mobj_t *mo)
|
||||||
|
|
||||||
P_PushSpecialLine(result.line, mo);
|
P_PushSpecialLine(result.line, mo);
|
||||||
|
|
||||||
if (mo->type == MT_BALLHOG_RETICULE_TEST)
|
if (mo->type == MT_BALLHOG || mo->type == MT_BALLHOG_RETICULE_TEST)
|
||||||
{
|
{
|
||||||
|
P_ExplodeMissile(mo);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1813,14 +1814,9 @@ boolean P_XYMovement(mobj_t *mo)
|
||||||
xmove = ymove = 0;
|
xmove = ymove = 0;
|
||||||
S_StartSound(mo, mo->info->activesound);
|
S_StartSound(mo, mo->info->activesound);
|
||||||
|
|
||||||
//{ SRB2kart - Orbinaut, Ballhog
|
//{ SRB2kart - Orbinaut
|
||||||
// Ballhog dies on contact with walls
|
|
||||||
if (mo->type == MT_BALLHOG)
|
|
||||||
{
|
|
||||||
P_ExplodeMissile(mo);
|
|
||||||
}
|
|
||||||
// Bump sparks
|
// Bump sparks
|
||||||
else if (mo->type == MT_ORBINAUT || mo->type == MT_GACHABOM)
|
if (mo->type == MT_ORBINAUT || mo->type == MT_GACHABOM)
|
||||||
{
|
{
|
||||||
mobj_t *fx;
|
mobj_t *fx;
|
||||||
fx = P_SpawnMobj(mo->x, mo->y, mo->z, MT_BUMP);
|
fx = P_SpawnMobj(mo->x, mo->y, mo->z, MT_BUMP);
|
||||||
|
|
@ -2260,6 +2256,7 @@ boolean P_ZMovement(mobj_t *mo)
|
||||||
mo->eflags &= ~MFE_APPLYPMOMZ;
|
mo->eflags &= ~MFE_APPLYPMOMZ;
|
||||||
}
|
}
|
||||||
mo->z += mo->momz;
|
mo->z += mo->momz;
|
||||||
|
|
||||||
onground = P_IsObjectOnGround(mo);
|
onground = P_IsObjectOnGround(mo);
|
||||||
|
|
||||||
if (mo->standingslope)
|
if (mo->standingslope)
|
||||||
|
|
@ -2323,15 +2320,10 @@ boolean P_ZMovement(mobj_t *mo)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case MT_BALLHOG:
|
case MT_BALLHOG:
|
||||||
if (mo->z <= mo->floorz || mo->z + mo->height >= mo->ceilingz)
|
|
||||||
{
|
|
||||||
P_ExplodeMissile(mo);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case MT_BALLHOG_RETICULE_TEST:
|
case MT_BALLHOG_RETICULE_TEST:
|
||||||
if (mo->z <= mo->floorz || mo->z + mo->height >= mo->ceilingz)
|
if (mo->z <= mo->floorz || mo->z + mo->height >= mo->ceilingz)
|
||||||
{
|
{
|
||||||
|
P_ExplodeMissile(mo);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -2380,7 +2372,6 @@ boolean P_ZMovement(mobj_t *mo)
|
||||||
else if (delta > 0 && dist < (delta*3))
|
else if (delta > 0 && dist < (delta*3))
|
||||||
mo->z += FixedMul(FLOATSPEED, mo->scale);
|
mo->z += FixedMul(FLOATSPEED, mo->scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// clip movement
|
// clip movement
|
||||||
|
|
@ -10647,6 +10638,18 @@ void P_SceneryThinker(mobj_t *mobj)
|
||||||
if (P_MobjWasRemoved(mobj))
|
if (P_MobjWasRemoved(mobj))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mobj->type == MT_BALLHOG_RETICULE)
|
||||||
|
{
|
||||||
|
if (mobj->tics & 1)
|
||||||
|
{
|
||||||
|
mobj->renderflags &= ~RF_DONTDRAW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
mobj->renderflags |= RF_DONTDRAW;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue