- bunny.cpp

This commit is contained in:
Christoph Oelckers 2021-10-31 20:44:39 +01:00
parent ec0203b89b
commit f5c7ccd6af
3 changed files with 89 additions and 127 deletions

View file

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

View file

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

View file

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