- DoBeginJump

This commit is contained in:
Christoph Oelckers 2021-10-29 23:03:47 +02:00
parent 9375a64ccc
commit 2a56479e3e
7 changed files with 38 additions and 26 deletions

View file

@ -864,9 +864,9 @@ int DoActorDeathMove(DSWActor* actor)
// !AIC - Jumping a falling for shrapnel and other stuff, not actors.
int DoBeginJump(short SpriteNum)
int DoBeginJump(DSWActor* actor)
{
USERp u = User[SpriteNum].Data();
USERp u = actor->u();
SET(u->Flags, SPR_JUMPING);
RESET(u->Flags, SPR_FALLING);
@ -874,7 +874,7 @@ int DoBeginJump(short SpriteNum)
// set up individual actor jump gravity
u->jump_grav = ACTOR_GRAVITY;
DoJump(SpriteNum);
DoJump(u->SpriteNum);
return 0;
}

View file

@ -744,6 +744,7 @@ typedef struct
struct PLAYERstruct
{
DSWActor* Actor();
// variable that fit in the sprite or user structure
union
{
@ -2226,5 +2227,11 @@ END_SW_NS
#include "swactor.h"
BEGIN_SW_NS
DSWActor* PLAYERstruct::Actor()
{
return &swActors[PlayerSprite];
}
END_SW_NS
#endif

View file

@ -2464,6 +2464,7 @@ DoFlag(DSWActor* actor)
int
InitShell(int16_t SpriteNum, int16_t ShellNum)
{
auto actor = &swActors[SpriteNum];
USERp u = User[SpriteNum].Data();
USERp wu;
SPRITEp sp = &sprite[SpriteNum], wp;
@ -2571,7 +2572,7 @@ InitShell(int16_t SpriteNum, int16_t ShellNum)
wu->jump_speed += RandomRange(400);
wu->jump_speed = -wu->jump_speed;
DoBeginJump(w);
DoBeginJump(actor);
wu->jump_grav = ACTOR_GRAVITY;
return 0;

View file

@ -80,7 +80,7 @@ using INTERP_FUNC = void(*)(int, int);
void SetSlidorActive(short SpriteNum);
void DoSlidorInterp(short, INTERP_FUNC);
int DoBeginJump(short SpriteNum);
int DoBeginJump(DSWActor* actor);
int DoJump(short SpriteNum);
int DoBeginFall(short SpriteNum);
int DoFall(short SpriteNum);

View file

@ -5955,7 +5955,7 @@ DoPlayerBeginDie(PLAYERp pp)
pp->jump_speed = -200;
NewStateGroup(pp->PlayerSprite, sg_PlayerDeath);
DoFindGround(pp->PlayerSprite);
DoBeginJump(pp->PlayerSprite);
DoBeginJump(pp->Actor());
u->jump_speed = -300;
break;
}
@ -5975,7 +5975,7 @@ DoPlayerBeginDie(PLAYERp pp)
u->ceiling_dist = Z(10);
u->floor_dist = Z(0);
DoFindGround(pp->PlayerSprite);
DoBeginJump(pp->PlayerSprite);
DoBeginJump(pp->Actor());
u->jump_speed = -400;
break;
case PLAYER_DEATH_CRUMBLE:

View file

@ -488,7 +488,7 @@ int DoSkullWait(DSWActor* actor)
sp->xvel = 0;
u->jump_speed = -600;
NewStateGroup(SpriteNum, sg_SkullJump);
DoBeginJump(SpriteNum);
DoBeginJump(actor);
}
}
else
@ -504,7 +504,7 @@ int DoSkullWait(DSWActor* actor)
sp->xvel = 128 + (RANDOM_P2(256<<8)>>8);
u->jump_speed = -700;
NewStateGroup(SpriteNum, sg_SkullJump);
DoBeginJump(SpriteNum);
DoBeginJump(actor);
}
}
@ -902,7 +902,7 @@ int DoBettyWait(DSWActor* actor)
sp->xvel = 0;
u->jump_speed = -600;
NewStateGroup(SpriteNum, sg_BettyJump);
DoBeginJump(SpriteNum);
DoBeginJump(actor);
}
}
else
@ -918,7 +918,7 @@ int DoBettyWait(DSWActor* actor)
sp->xvel = 128 + (RANDOM_P2(256<<8)>>8);
u->jump_speed = -700;
NewStateGroup(SpriteNum, sg_BettyJump);
DoBeginJump(SpriteNum);
DoBeginJump(actor);
}
}

View file

@ -3759,8 +3759,9 @@ AutoShrap:
SpriteNum = SpawnSprite(STAT_SKIP4, p->id, p->state, parent->sectnum,
parent->x, parent->y, hz[p->zlevel], shrap_ang, 512);
sp = &sprite[SpriteNum];
u = User[SpriteNum].Data();
auto actor = &swActors[SpriteNum];
sp = &actor->s();
u = actor->u();
if (p->random_disperse)
{
@ -3857,7 +3858,7 @@ AutoShrap:
u->jump_speed += RandomRange(p->max_jspeed - p->min_jspeed);
u->jump_speed = -u->jump_speed;
DoBeginJump(SpriteNum);
DoBeginJump(actor);
u->jump_grav = jump_grav;
u->xchange = MOVEx(sp->xvel, sp->ang);
@ -4044,7 +4045,7 @@ DoShrapDamage(DSWActor* actor)
SET(u->Flags, SPR_BOUNCE);
u->jump_speed = -300;
sp->xvel >>= 2;
DoBeginJump(SpriteNum);
DoBeginJump(actor);
return 0;
}
@ -4244,8 +4245,9 @@ SpawnBlood(short SpriteNum, short Weapon, short hit_ang, int hit_x, int hit_y, i
{
New = SpawnSprite(STAT_SKIP4, p->id, p->state, sp->sectnum,
hit_x, hit_y, hit_z, hit_ang, 0);
np = &sprite[New];
nu = User[New].Data();
auto actorNew = &swActors[New];
np = &actorNew->s();
nu = actorNew->u();
switch (nu->ID)
{
@ -4311,7 +4313,7 @@ SpawnBlood(short SpriteNum, short Weapon, short hit_ang, int hit_x, int hit_y, i
SET(u->Flags, SPR_BOUNCE);
DoBeginJump(New);
DoBeginJump(actorNew);
}
}
@ -10767,8 +10769,9 @@ SpawnFireballFlames(int16_t SpriteNum, int16_t enemy)
New = SpawnSprite(STAT_MISSILE, FIREBALL_FLAMES, s_FireballFlames, sp->sectnum,
sp->x, sp->y, sp->z, sp->ang, 0);
np = &sprite[New];
nu = User[New].Data();
auto actorNew = &swActors[New];
np = &actorNew->s();
nu = actorNew->u();
np->hitag = LUMINOUS; //Always full brightness
@ -10820,7 +10823,7 @@ SpawnFireballFlames(int16_t SpriteNum, int16_t enemy)
DoFindGround(New);
nu->jump_speed = 0;
DoBeginJump(New);
DoBeginJump(actorNew);
}
PlaySound(DIGI_FIRE1,np,v3df_dontpan|v3df_doppler);
@ -10841,8 +10844,9 @@ SpawnBreakFlames(int16_t SpriteNum)
New = SpawnSprite(STAT_MISSILE, FIREBALL_FLAMES+1, s_BreakFlames, sp->sectnum,
sp->x, sp->y, sp->z, sp->ang, 0);
np = &sprite[New];
nu = User[New].Data();
auto actorNew = &swActors[New];
np = &actorNew->s();
nu = actorNew->u();
np->hitag = LUMINOUS; //Always full brightness
@ -10863,7 +10867,7 @@ SpawnBreakFlames(int16_t SpriteNum)
DoFindGround(New);
nu->jump_speed = 0;
DoBeginJump(New);
DoBeginJump(actorNew);
PlaySound(DIGI_FIRE1,np,v3df_dontpan|v3df_doppler);
Set3DSoundOwner(New);
@ -10913,7 +10917,7 @@ SpawnBreakStaticFlames(int16_t SpriteNum)
//DoFindGround(New);
//nu->jump_speed = 0;
//DoBeginJump(New);
//DoBeginJump(actorNew);
PlaySound(DIGI_FIRE1,np,v3df_dontpan|v3df_doppler);
Set3DSoundOwner(New);
@ -12831,7 +12835,7 @@ DoSerpRing(DSWActor* actor)
u->jump_speed = -800;
change_sprite_stat(Weapon, STAT_ENEMY);
NewStateGroup(Weapon, sg_SkullJump);
DoBeginJump(Weapon);
DoBeginJump(actor);
// tell owner that one is gone
// User[sp->owner]->Counter--;
return 0;