mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-28 06:02:13 +00:00
- bunny.cpp
This commit is contained in:
parent
ec0203b89b
commit
f5c7ccd6af
3 changed files with 89 additions and 127 deletions
|
@ -722,11 +722,9 @@ ACTOR_ACTION_SET BunnyWhiteActionSet =
|
||||||
nullptr
|
nullptr
|
||||||
};
|
};
|
||||||
|
|
||||||
int
|
int SetupBunny(DSWActor* actor)
|
||||||
SetupBunny(short SpriteNum)
|
|
||||||
{
|
{
|
||||||
auto actor = &swActors[SpriteNum];
|
SPRITEp sp = &actor->s();
|
||||||
SPRITEp sp = &sprite[SpriteNum];
|
|
||||||
USERp u;
|
USERp u;
|
||||||
ANIMATOR DoActorDecide;
|
ANIMATOR DoActorDecide;
|
||||||
|
|
||||||
|
@ -737,7 +735,7 @@ SetupBunny(short SpriteNum)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
u = SpawnUser(SpriteNum, BUNNY_RUN_R0, s_BunnyRun[0]);
|
u = SpawnUser(actor, BUNNY_RUN_R0, s_BunnyRun[0]);
|
||||||
u->Health = 10;
|
u->Health = 10;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -761,7 +759,7 @@ SetupBunny(short SpriteNum)
|
||||||
|
|
||||||
if (sp->pal == PALETTE_PLAYER1)
|
if (sp->pal == PALETTE_PLAYER1)
|
||||||
{
|
{
|
||||||
EnemyDefaults(SpriteNum, &BunnyWhiteActionSet, &WhiteBunnyPersonality);
|
EnemyDefaults(actor->GetSpriteIndex(), &BunnyWhiteActionSet, &WhiteBunnyPersonality);
|
||||||
u->Attrib = &WhiteBunnyAttrib;
|
u->Attrib = &WhiteBunnyAttrib;
|
||||||
sp->xrepeat = 96;
|
sp->xrepeat = 96;
|
||||||
sp->yrepeat = 90;
|
sp->yrepeat = 90;
|
||||||
|
@ -773,7 +771,7 @@ SetupBunny(short SpriteNum)
|
||||||
}
|
}
|
||||||
else if (sp->pal == PALETTE_PLAYER8) // Male Rabbit
|
else if (sp->pal == PALETTE_PLAYER8) // Male Rabbit
|
||||||
{
|
{
|
||||||
EnemyDefaults(SpriteNum, &BunnyActionSet, &BunnyPersonality);
|
EnemyDefaults(actor->GetSpriteIndex(), &BunnyActionSet, &BunnyPersonality);
|
||||||
u->Attrib = &BunnyAttrib;
|
u->Attrib = &BunnyAttrib;
|
||||||
//sp->xrepeat = 76;
|
//sp->xrepeat = 76;
|
||||||
//sp->yrepeat = 70;
|
//sp->yrepeat = 70;
|
||||||
|
@ -786,7 +784,7 @@ SetupBunny(short SpriteNum)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Female Rabbit
|
// Female Rabbit
|
||||||
EnemyDefaults(SpriteNum, &BunnyActionSet, &BunnyPersonality);
|
EnemyDefaults(actor->GetSpriteIndex(), &BunnyActionSet, &BunnyPersonality);
|
||||||
u->Attrib = &BunnyAttrib;
|
u->Attrib = &BunnyAttrib;
|
||||||
u->spal = sp->pal = PALETTE_PLAYER0;
|
u->spal = sp->pal = PALETTE_PLAYER0;
|
||||||
u->Flag1 = SEC(5);
|
u->Flag1 = SEC(5);
|
||||||
|
@ -806,8 +804,7 @@ SetupBunny(short SpriteNum)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int GetBunnyJumpHeight(int jump_speed, int jump_grav)
|
||||||
GetBunnyJumpHeight(int jump_speed, int jump_grav)
|
|
||||||
{
|
{
|
||||||
int jump_iterations;
|
int jump_iterations;
|
||||||
int height;
|
int height;
|
||||||
|
@ -823,10 +820,9 @@ GetBunnyJumpHeight(int jump_speed, int jump_grav)
|
||||||
return DIV2(height);
|
return DIV2(height);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int PickBunnyJumpSpeed(DSWActor* actor, int pix_height)
|
||||||
PickBunnyJumpSpeed(short SpriteNum, int pix_height)
|
|
||||||
{
|
{
|
||||||
USERp u = User[SpriteNum].Data();
|
USERp u = actor->u();
|
||||||
|
|
||||||
ASSERT(pix_height < 128);
|
ASSERT(pix_height < 128);
|
||||||
|
|
||||||
|
@ -850,19 +846,19 @@ PickBunnyJumpSpeed(short SpriteNum, int pix_height)
|
||||||
// JUMP ATTACK
|
// JUMP ATTACK
|
||||||
//
|
//
|
||||||
|
|
||||||
int
|
int DoBunnyBeginJumpAttack(DSWActor* actor)
|
||||||
DoBunnyBeginJumpAttack(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
|
||||||
SPRITEp sp = &actor->s();
|
SPRITEp sp = &actor->s();
|
||||||
SPRITEp psp = &u->targetActor->s();
|
SPRITEp psp = &u->targetActor->s();
|
||||||
short tang;
|
short tang;
|
||||||
|
|
||||||
tang = getangle(psp->x - sp->x, psp->y - sp->y);
|
tang = getangle(psp->x - sp->x, psp->y - sp->y);
|
||||||
|
|
||||||
if (move_sprite(SpriteNum, bcos(tang, -7), bsin(tang, -7),
|
Collision coll(move_sprite(actor->GetSpriteIndex(), bcos(tang, -7), bsin(tang, -7),
|
||||||
0L, u->ceiling_dist, u->floor_dist, CLIPMASK_ACTOR, ACTORMOVETICS))
|
0L, u->ceiling_dist, u->floor_dist, CLIPMASK_ACTOR, ACTORMOVETICS));
|
||||||
|
|
||||||
|
if (coll.type != kHitNone)
|
||||||
sp->ang = NORM_ANGLE(sp->ang + 1024) + (RANDOM_NEG(256, 6) >> 6);
|
sp->ang = NORM_ANGLE(sp->ang + 1024) + (RANDOM_NEG(256, 6) >> 6);
|
||||||
else
|
else
|
||||||
sp->ang = NORM_ANGLE(tang + (RANDOM_NEG(256, 6) >> 6));
|
sp->ang = NORM_ANGLE(tang + (RANDOM_NEG(256, 6) >> 6));
|
||||||
|
@ -870,7 +866,7 @@ DoBunnyBeginJumpAttack(DSWActor* actor)
|
||||||
DoActorSetSpeed(actor, FAST_SPEED);
|
DoActorSetSpeed(actor, FAST_SPEED);
|
||||||
|
|
||||||
//u->jump_speed = -800;
|
//u->jump_speed = -800;
|
||||||
PickJumpMaxSpeed(SpriteNum, -400); // was -800
|
PickJumpMaxSpeed(actor->GetSpriteIndex(), -400); // was -800
|
||||||
|
|
||||||
SET(u->Flags, SPR_JUMPING);
|
SET(u->Flags, SPR_JUMPING);
|
||||||
RESET(u->Flags, SPR_FALLING);
|
RESET(u->Flags, SPR_FALLING);
|
||||||
|
@ -879,15 +875,14 @@ DoBunnyBeginJumpAttack(DSWActor* actor)
|
||||||
u->jump_grav = 17; // was 8
|
u->jump_grav = 17; // was 8
|
||||||
|
|
||||||
// if I didn't do this here they get stuck in the air sometimes
|
// if I didn't do this here they get stuck in the air sometimes
|
||||||
DoActorZrange(SpriteNum);
|
DoActorZrange(actor->GetSpriteIndex());
|
||||||
|
|
||||||
DoJump(actor);
|
DoJump(actor);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int DoBunnyMoveJump(DSWActor* actor)
|
||||||
DoBunnyMoveJump(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
SPRITEp sp = u->s();
|
SPRITEp sp = u->s();
|
||||||
|
@ -908,38 +903,31 @@ DoBunnyMoveJump(DSWActor* actor)
|
||||||
DoActorFall(actor);
|
DoActorFall(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
DoActorZrange(u->SpriteNum);
|
DoActorZrange(actor->GetSpriteIndex());
|
||||||
|
|
||||||
if (!TEST(u->Flags, SPR_JUMPING | SPR_FALLING))
|
if (!TEST(u->Flags, SPR_JUMPING | SPR_FALLING))
|
||||||
{
|
{
|
||||||
// if (DoBunnyQuickJump(SpriteNum))
|
|
||||||
// return (0);
|
|
||||||
|
|
||||||
InitActorDecide(actor);
|
InitActorDecide(actor);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
void DoPickCloseBunny(DSWActor* actor)
|
||||||
DoPickCloseBunny(USERp u)
|
|
||||||
{
|
{
|
||||||
USERp tu;
|
auto u = actor->u();
|
||||||
SPRITEp sp = u->s(),tsp;
|
SPRITEp sp = &actor->s();
|
||||||
int dist, near_dist = 1000, a,b,c;
|
int dist, near_dist = 1000, a,b,c;
|
||||||
int i;
|
|
||||||
//short BunnyCount=0, Bunny_Result = -1;
|
|
||||||
|
|
||||||
// if actor can still see the player
|
// if actor can still see the player
|
||||||
int look_height = SPRITEp_TOS(sp);
|
int look_height = SPRITEp_TOS(sp);
|
||||||
bool ICanSee = false;
|
bool ICanSee = false;
|
||||||
|
|
||||||
StatIterator it(STAT_ENEMY);
|
SWStatIterator it(STAT_ENEMY);
|
||||||
while ((i = it.NextIndex()) >= 0)
|
while (auto itActor = it.Next())
|
||||||
{
|
{
|
||||||
auto itActor = &swActors[i];
|
auto tsp = &itActor->s();
|
||||||
tsp = &itActor->s();
|
auto tu = itActor->u();
|
||||||
tu = itActor->u();
|
|
||||||
|
|
||||||
if (sp == tsp) continue;
|
if (sp == tsp) continue;
|
||||||
|
|
||||||
|
@ -957,23 +945,20 @@ DoPickCloseBunny(USERp u)
|
||||||
u->targetActor = itActor;
|
u->targetActor = itActor;
|
||||||
u->lowActor = itActor;
|
u->lowActor = itActor;
|
||||||
//Bunny_Result = i;
|
//Bunny_Result = i;
|
||||||
return i;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int DoBunnyQuickJump(DSWActor* actor)
|
||||||
DoBunnyQuickJump(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
SPRITEp sp = &actor->s();
|
||||||
SPRITEp sp = &sprite[SpriteNum];
|
|
||||||
|
|
||||||
if (u->spal != PALETTE_PLAYER8) return false;
|
if (u->spal != PALETTE_PLAYER8) return false;
|
||||||
|
|
||||||
if (!u->lowActor&& u->spal == PALETTE_PLAYER8 && MoveSkip4)
|
if (!u->lowActor&& u->spal == PALETTE_PLAYER8 && MoveSkip4)
|
||||||
DoPickCloseBunny(u);
|
DoPickCloseBunny(actor);
|
||||||
|
|
||||||
// Random Chance of like sexes fighting
|
// Random Chance of like sexes fighting
|
||||||
if (u->lowActor)
|
if (u->lowActor)
|
||||||
|
@ -1051,8 +1036,8 @@ DoBunnyQuickJump(DSWActor* actor)
|
||||||
tu->Flag1 = SEC(10);
|
tu->Flag1 = SEC(10);
|
||||||
if (pp)
|
if (pp)
|
||||||
{
|
{
|
||||||
short choose_snd;
|
int choose_snd;
|
||||||
int fagsnds[] = {DIGI_FAGRABBIT1,DIGI_FAGRABBIT2,DIGI_FAGRABBIT3};
|
static const int fagsnds[] = {DIGI_FAGRABBIT1,DIGI_FAGRABBIT2,DIGI_FAGRABBIT3};
|
||||||
|
|
||||||
if (pp == Player+myconnectindex)
|
if (pp == Player+myconnectindex)
|
||||||
{
|
{
|
||||||
|
@ -1066,9 +1051,8 @@ DoBunnyQuickJump(DSWActor* actor)
|
||||||
{
|
{
|
||||||
if (pp && RandomRange(1000) > 200)
|
if (pp && RandomRange(1000) > 200)
|
||||||
{
|
{
|
||||||
short choose_snd;
|
int choose_snd;
|
||||||
int straightsnds[] = {DIGI_RABBITHUMP1,DIGI_RABBITHUMP2,
|
static const int straightsnds[] = {DIGI_RABBITHUMP1,DIGI_RABBITHUMP2, DIGI_RABBITHUMP3,DIGI_RABBITHUMP4};
|
||||||
DIGI_RABBITHUMP3,DIGI_RABBITHUMP4};
|
|
||||||
|
|
||||||
if (pp == Player+myconnectindex)
|
if (pp == Player+myconnectindex)
|
||||||
{
|
{
|
||||||
|
@ -1083,7 +1067,7 @@ DoBunnyQuickJump(DSWActor* actor)
|
||||||
sp->y = tsp->y;
|
sp->y = tsp->y;
|
||||||
sp->ang = tsp->ang;
|
sp->ang = tsp->ang;
|
||||||
sp->ang = NORM_ANGLE(sp->ang + 1024);
|
sp->ang = NORM_ANGLE(sp->ang + 1024);
|
||||||
HelpMissileLateral(SpriteNum, 2000L);
|
HelpMissileLateral(actor->GetSpriteIndex(), 2000);
|
||||||
sp->ang = tsp->ang;
|
sp->ang = tsp->ang;
|
||||||
u->Vis = sp->ang; // Remember angles for later
|
u->Vis = sp->ang; // Remember angles for later
|
||||||
tu->Vis = tsp->ang;
|
tu->Vis = tsp->ang;
|
||||||
|
@ -1100,11 +1084,9 @@ DoBunnyQuickJump(DSWActor* actor)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int NullBunny(DSWActor* actor)
|
||||||
NullBunny(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
|
||||||
|
|
||||||
if (TEST(u->Flags, SPR_JUMPING | SPR_FALLING))
|
if (TEST(u->Flags, SPR_JUMPING | SPR_FALLING))
|
||||||
{
|
{
|
||||||
|
@ -1130,7 +1112,6 @@ NullBunny(DSWActor* actor)
|
||||||
int DoBunnyPain(DSWActor* actor)
|
int DoBunnyPain(DSWActor* actor)
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
|
||||||
|
|
||||||
NullBunny(actor);
|
NullBunny(actor);
|
||||||
|
|
||||||
|
@ -1142,8 +1123,7 @@ int DoBunnyPain(DSWActor* actor)
|
||||||
int DoBunnyRipHeart(DSWActor* actor)
|
int DoBunnyRipHeart(DSWActor* actor)
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
SPRITEp sp = &actor->s();
|
||||||
SPRITEp sp = &sprite[SpriteNum];
|
|
||||||
|
|
||||||
SPRITEp tsp = &u->targetActor->s();
|
SPRITEp tsp = &u->targetActor->s();
|
||||||
|
|
||||||
|
@ -1158,8 +1138,7 @@ int DoBunnyRipHeart(DSWActor* actor)
|
||||||
int DoBunnyStandKill(DSWActor* actor)
|
int DoBunnyStandKill(DSWActor* actor)
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
SPRITEp sp = &actor->s();
|
||||||
SPRITEp sp = &sprite[SpriteNum];
|
|
||||||
|
|
||||||
NullBunny(actor);
|
NullBunny(actor);
|
||||||
|
|
||||||
|
@ -1172,26 +1151,24 @@ int DoBunnyStandKill(DSWActor* actor)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void BunnyHatch(short Weapon)
|
|
||||||
|
void BunnyHatch(DSWActor* actor)
|
||||||
{
|
{
|
||||||
auto actor = &swActors[Weapon];
|
|
||||||
SPRITEp sp = &actor->s();
|
SPRITEp sp = &actor->s();
|
||||||
USERp u = actor->u();
|
USERp u = actor->u();
|
||||||
|
|
||||||
short New,i;
|
|
||||||
SPRITEp np;
|
SPRITEp np;
|
||||||
USERp nu;
|
USERp nu;
|
||||||
#define MAX_BUNNYS 1
|
const int MAX_BUNNYS = 1;
|
||||||
short rip_ang[MAX_BUNNYS];
|
short rip_ang[MAX_BUNNYS];
|
||||||
|
|
||||||
rip_ang[0] = RANDOM_P2(2048);
|
rip_ang[0] = RANDOM_P2(2048);
|
||||||
|
|
||||||
for (i = 0; i < MAX_BUNNYS; i++)
|
for (int i = 0; i < MAX_BUNNYS; i++)
|
||||||
{
|
{
|
||||||
New = COVERinsertsprite(sp->sectnum, STAT_DEFAULT);
|
auto actorNew = InsertActor(sp->sectnum, STAT_DEFAULT);
|
||||||
auto actorNew = &swActors[New];
|
np = &actorNew->s();
|
||||||
np = &sprite[New];
|
np->clear();
|
||||||
memset(np,0,sizeof(SPRITE));
|
|
||||||
np->sectnum = sp->sectnum;
|
np->sectnum = sp->sectnum;
|
||||||
np->statnum = STAT_DEFAULT;
|
np->statnum = STAT_DEFAULT;
|
||||||
np->x = sp->x;
|
np->x = sp->x;
|
||||||
|
@ -1202,8 +1179,8 @@ void BunnyHatch(short Weapon)
|
||||||
np->yrepeat = 24;
|
np->yrepeat = 24;
|
||||||
np->ang = rip_ang[i];
|
np->ang = rip_ang[i];
|
||||||
np->pal = 0;
|
np->pal = 0;
|
||||||
SetupBunny(New);
|
SetupBunny(actorNew);
|
||||||
nu = User[New].Data();
|
nu = actorNew->u();
|
||||||
np->shade = sp->shade;
|
np->shade = sp->shade;
|
||||||
|
|
||||||
// make immediately active
|
// make immediately active
|
||||||
|
@ -1220,7 +1197,7 @@ void BunnyHatch(short Weapon)
|
||||||
Bunny_Count--; // Bunny died
|
Bunny_Count--; // Bunny died
|
||||||
|
|
||||||
// Blood fountains
|
// Blood fountains
|
||||||
InitBloodSpray(Weapon,true,-1);
|
InitBloodSpray(actor->GetSpriteIndex(), true, -1);
|
||||||
|
|
||||||
if (SpawnShrap(actor, actorNew))
|
if (SpawnShrap(actor, actorNew))
|
||||||
{
|
{
|
||||||
|
@ -1236,7 +1213,7 @@ void BunnyHatch(short Weapon)
|
||||||
NewStateGroup(actorNew, nu->ActorActionSet->Jump);
|
NewStateGroup(actorNew, nu->ActorActionSet->Jump);
|
||||||
nu->ActorActionFunc = DoActorMoveJump;
|
nu->ActorActionFunc = DoActorMoveJump;
|
||||||
DoActorSetSpeed(actorNew, FAST_SPEED);
|
DoActorSetSpeed(actorNew, FAST_SPEED);
|
||||||
PickJumpMaxSpeed(New, -600);
|
PickJumpMaxSpeed(actorNew->GetSpriteIndex(), -600);
|
||||||
|
|
||||||
SET(nu->Flags, SPR_JUMPING);
|
SET(nu->Flags, SPR_JUMPING);
|
||||||
RESET(nu->Flags, SPR_FALLING);
|
RESET(nu->Flags, SPR_FALLING);
|
||||||
|
@ -1244,24 +1221,20 @@ void BunnyHatch(short Weapon)
|
||||||
nu->jump_grav = 8;
|
nu->jump_grav = 8;
|
||||||
|
|
||||||
// if I didn't do this here they get stuck in the air sometimes
|
// if I didn't do this here they get stuck in the air sometimes
|
||||||
DoActorZrange(New);
|
DoActorZrange(actorNew->GetSpriteIndex());
|
||||||
|
|
||||||
DoActorJump(actorNew);
|
DoActorJump(actorNew);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int BunnyHatch2(short Weapon)
|
DSWActor* BunnyHatch2(DSWActor* actor)
|
||||||
{
|
{
|
||||||
SPRITEp wp = &sprite[Weapon];
|
SPRITEp wp = &actor->s();
|
||||||
|
|
||||||
short New;
|
|
||||||
SPRITEp np;
|
|
||||||
USERp nu;
|
|
||||||
|
|
||||||
New = COVERinsertsprite(wp->sectnum, STAT_DEFAULT);
|
auto actorNew = InsertActor(wp->sectnum, STAT_DEFAULT);
|
||||||
auto actorNew = &swActors[New];
|
auto np = &actorNew->s();
|
||||||
np = &sprite[New];
|
np->clear();
|
||||||
memset(np,0,sizeof(SPRITE));
|
|
||||||
np->sectnum = wp->sectnum;
|
np->sectnum = wp->sectnum;
|
||||||
np->statnum = STAT_DEFAULT;
|
np->statnum = STAT_DEFAULT;
|
||||||
np->x = wp->x;
|
np->x = wp->x;
|
||||||
|
@ -1272,8 +1245,8 @@ int BunnyHatch2(short Weapon)
|
||||||
np->yrepeat = 24;
|
np->yrepeat = 24;
|
||||||
np->ang = RANDOM_P2(2048);
|
np->ang = RANDOM_P2(2048);
|
||||||
np->pal = 0;
|
np->pal = 0;
|
||||||
SetupBunny(New);
|
SetupBunny(actorNew);
|
||||||
nu = User[New].Data();
|
auto nu = actorNew->u();
|
||||||
np->shade = wp->shade;
|
np->shade = wp->shade;
|
||||||
|
|
||||||
// make immediately active
|
// make immediately active
|
||||||
|
@ -1296,7 +1269,7 @@ int BunnyHatch2(short Weapon)
|
||||||
DoActorSetSpeed(actorNew, FAST_SPEED);
|
DoActorSetSpeed(actorNew, FAST_SPEED);
|
||||||
if (TEST_BOOL3(wp))
|
if (TEST_BOOL3(wp))
|
||||||
{
|
{
|
||||||
PickJumpMaxSpeed(New, -600-RandomRange(600));
|
PickJumpMaxSpeed(actorNew->GetSpriteIndex(), -600-RandomRange(600));
|
||||||
np->xrepeat = np->yrepeat = 64;
|
np->xrepeat = np->yrepeat = 64;
|
||||||
np->xvel = 150 + RandomRange(1000);
|
np->xvel = 150 + RandomRange(1000);
|
||||||
nu->Health = 1; // Easy to pop. Like shootn' skeet.
|
nu->Health = 1; // Easy to pop. Like shootn' skeet.
|
||||||
|
@ -1304,7 +1277,7 @@ int BunnyHatch2(short Weapon)
|
||||||
np->ang += RandomRange(128);
|
np->ang += RandomRange(128);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
PickJumpMaxSpeed(New, -600);
|
PickJumpMaxSpeed(actorNew->GetSpriteIndex(), -600);
|
||||||
|
|
||||||
SET(nu->Flags, SPR_JUMPING);
|
SET(nu->Flags, SPR_JUMPING);
|
||||||
RESET(nu->Flags, SPR_FALLING);
|
RESET(nu->Flags, SPR_FALLING);
|
||||||
|
@ -1315,19 +1288,17 @@ int BunnyHatch2(short Weapon)
|
||||||
nu->active_range = 75000; // Set it far
|
nu->active_range = 75000; // Set it far
|
||||||
|
|
||||||
// if I didn't do this here they get stuck in the air sometimes
|
// if I didn't do this here they get stuck in the air sometimes
|
||||||
DoActorZrange(New);
|
DoActorZrange(actorNew->GetSpriteIndex());
|
||||||
|
|
||||||
DoActorJump(actorNew);
|
DoActorJump(actorNew);
|
||||||
|
|
||||||
return New;
|
return actorNew;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int DoBunnyMove(DSWActor* actor)
|
||||||
DoBunnyMove(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
auto sp = u->s();
|
auto sp = &actor->s();
|
||||||
int SpriteNum = u->SpriteNum;
|
|
||||||
|
|
||||||
// Parental lock crap
|
// Parental lock crap
|
||||||
if (TEST(sp->cstat, CSTAT_SPRITE_INVISIBLE))
|
if (TEST(sp->cstat, CSTAT_SPRITE_INVISIBLE))
|
||||||
|
@ -1360,7 +1331,7 @@ DoBunnyMove(DSWActor* actor)
|
||||||
DoActorSlide(actor);
|
DoActorSlide(actor);
|
||||||
|
|
||||||
if (u->track >= 0)
|
if (u->track >= 0)
|
||||||
ActorFollowTrack(SpriteNum, ACTORMOVETICS);
|
ActorFollowTrack(actor->GetSpriteIndex(), ACTORMOVETICS);
|
||||||
else
|
else
|
||||||
(*u->ActorActionFunc)(actor);
|
(*u->ActorActionFunc)(actor);
|
||||||
|
|
||||||
|
@ -1398,22 +1369,16 @@ DoBunnyMove(DSWActor* actor)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int BunnySpew(DSWActor* actor)
|
||||||
BunnySpew(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
InitBloodSpray(actor->GetSpriteIndex(), true, -1);
|
||||||
int SpriteNum = u->SpriteNum;
|
|
||||||
//InitBloodSpray(SpriteNum,true,-1);
|
|
||||||
InitBloodSpray(SpriteNum,true,-1);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int DoBunnyEat(DSWActor* actor)
|
||||||
DoBunnyEat(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
SPRITEp sp = &actor->s();
|
||||||
SPRITEp sp = &sprite[SpriteNum];
|
|
||||||
|
|
||||||
|
|
||||||
if (TEST(u->Flags, SPR_JUMPING | SPR_FALLING))
|
if (TEST(u->Flags, SPR_JUMPING | SPR_FALLING))
|
||||||
|
@ -1461,12 +1426,10 @@ DoBunnyEat(DSWActor* actor)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int DoBunnyScrew(DSWActor* actor)
|
||||||
DoBunnyScrew(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
SPRITEp sp = &actor->s();
|
||||||
SPRITEp sp = &sprite[SpriteNum];
|
|
||||||
|
|
||||||
if (TEST(u->Flags, SPR_JUMPING | SPR_FALLING))
|
if (TEST(u->Flags, SPR_JUMPING | SPR_FALLING))
|
||||||
{
|
{
|
||||||
|
@ -1511,12 +1474,10 @@ DoBunnyScrew(DSWActor* actor)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int DoBunnyGrowUp(DSWActor* actor)
|
||||||
DoBunnyGrowUp(DSWActor* actor)
|
|
||||||
{
|
{
|
||||||
USER* u = actor->u();
|
USER* u = actor->u();
|
||||||
int SpriteNum = u->SpriteNum;
|
SPRITEp sp = &actor->s();
|
||||||
SPRITEp sp = &sprite[SpriteNum];
|
|
||||||
|
|
||||||
if (sp->pal == PALETTE_PLAYER1) return 0; // Don't bother white bunnies
|
if (sp->pal == PALETTE_PLAYER1) return 0; // Don't bother white bunnies
|
||||||
|
|
||||||
|
@ -1539,7 +1500,7 @@ DoBunnyGrowUp(DSWActor* actor)
|
||||||
if (Bunny_Count < 20)
|
if (Bunny_Count < 20)
|
||||||
{
|
{
|
||||||
PlaySound(DIGI_BUNNYDIE2, sp, v3df_follow);
|
PlaySound(DIGI_BUNNYDIE2, sp, v3df_follow);
|
||||||
BunnyHatch(SpriteNum); // Baby time
|
BunnyHatch(actor); // Baby time
|
||||||
}
|
}
|
||||||
u->ShellNum = 0; // Not pregnent anymore
|
u->ShellNum = 0; // Not pregnent anymore
|
||||||
}
|
}
|
||||||
|
|
|
@ -2121,7 +2121,7 @@ extern bool NightVision;
|
||||||
int PickJumpMaxSpeed(short SpriteNum, short max_speed); // ripper.c
|
int PickJumpMaxSpeed(short SpriteNum, short max_speed); // ripper.c
|
||||||
int DoRipperRipHeart(short SpriteNum); // ripper.c
|
int DoRipperRipHeart(short SpriteNum); // ripper.c
|
||||||
int DoRipper2RipHeart(short SpriteNum); // ripper2.c
|
int DoRipper2RipHeart(short SpriteNum); // ripper2.c
|
||||||
int BunnyHatch2(short Weapon); // bunny.c
|
DSWActor* BunnyHatch2(DSWActor*); // bunny.c
|
||||||
|
|
||||||
void TerminateLevel(void); // game.c
|
void TerminateLevel(void); // game.c
|
||||||
void DrawMenuLevelScreen(void); // game.c
|
void DrawMenuLevelScreen(void); // game.c
|
||||||
|
|
|
@ -67,7 +67,7 @@ int SetupMechanicGirl(short);
|
||||||
int SetupSailorGirl(short);
|
int SetupSailorGirl(short);
|
||||||
int SetupPruneGirl(short);
|
int SetupPruneGirl(short);
|
||||||
int SetupTrashCan(short);
|
int SetupTrashCan(short);
|
||||||
int SetupBunny(short);
|
int SetupBunny(DSWActor*);
|
||||||
int SetupRipper(short);
|
int SetupRipper(short);
|
||||||
int SetupRipper2(short);
|
int SetupRipper2(short);
|
||||||
int SetupSerp(short);
|
int SetupSerp(short);
|
||||||
|
@ -1415,7 +1415,7 @@ ActorSpawn(SPRITEp sp)
|
||||||
}
|
}
|
||||||
|
|
||||||
PicAnimOff(sp->picnum);
|
PicAnimOff(sp->picnum);
|
||||||
SetupBunny(SpriteNum);
|
SetupBunny(actor);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4217,13 +4217,14 @@ int ActorCoughItem(short SpriteNum)
|
||||||
int SpawnItemsMatch(short match)
|
int SpawnItemsMatch(short match)
|
||||||
{
|
{
|
||||||
int SpriteNum;
|
int SpriteNum;
|
||||||
int si;
|
DSWActor* spawnedActor = nullptr;
|
||||||
SPRITEp sp,sip;
|
SPRITEp sp,sip;
|
||||||
|
|
||||||
StatIterator it(STAT_SPAWN_ITEMS);
|
SWStatIterator it(STAT_SPAWN_ITEMS);
|
||||||
while ((si = it.NextIndex()) >= 0)
|
while (auto itActor = it.Next())
|
||||||
{
|
{
|
||||||
sip = &sprite[si];
|
int si = itActor->GetSpriteIndex();
|
||||||
|
sip = &itActor->s();
|
||||||
|
|
||||||
if (SP_TAG2(sip) != match)
|
if (SP_TAG2(sip) != match)
|
||||||
continue;
|
continue;
|
||||||
|
@ -4231,22 +4232,22 @@ int SpawnItemsMatch(short match)
|
||||||
switch (SP_TAG3(sip))
|
switch (SP_TAG3(sip))
|
||||||
{
|
{
|
||||||
case 90:
|
case 90:
|
||||||
SpriteNum = BunnyHatch2(si);
|
spawnedActor = BunnyHatch2(itActor);
|
||||||
sp = &sprite[SpriteNum];
|
sp = &spawnedActor->s();
|
||||||
User[SpriteNum]->spal = sp->pal = PALETTE_PLAYER8; // Boy
|
spawnedActor->u()->spal = sp->pal = PALETTE_PLAYER8; // Boy
|
||||||
sp->ang = sip->ang;
|
sp->ang = sip->ang;
|
||||||
break;
|
break;
|
||||||
case 91:
|
case 91:
|
||||||
SpriteNum = BunnyHatch2(si);
|
spawnedActor = BunnyHatch2(itActor);
|
||||||
sp = &sprite[SpriteNum];
|
sp = &spawnedActor->s();
|
||||||
User[SpriteNum]->spal = sp->pal = PALETTE_PLAYER0; // Girl
|
spawnedActor->u()->spal = sp->pal = PALETTE_PLAYER0; // Girl
|
||||||
sp->ang = sip->ang;
|
sp->ang = sip->ang;
|
||||||
break;
|
break;
|
||||||
case 92:
|
case 92:
|
||||||
SpriteNum = BunnyHatch2(si);
|
spawnedActor = BunnyHatch2(itActor);
|
||||||
sp = &sprite[SpriteNum];
|
sp = &spawnedActor->s();
|
||||||
sp->ang = sip->ang;
|
sp->ang = sip->ang;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 40:
|
case 40:
|
||||||
if (!ItemSpotClear(sip, STAT_ITEM, ICON_REPAIR_KIT))
|
if (!ItemSpotClear(sip, STAT_ITEM, ICON_REPAIR_KIT))
|
||||||
|
|
Loading…
Reference in a new issue