- the last repeats in Duke

Mostly constants in the spawn code
This commit is contained in:
Christoph Oelckers 2022-10-07 19:23:42 +02:00
parent bda616eb01
commit 558eaf38e1
2 changed files with 56 additions and 102 deletions

View file

@ -108,7 +108,7 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
act->spr.SetScale(0.25, 0.25); act->spr.SetScale(0.25, 0.25);
return act; return act;
case LAVAPOOLBUBBLE: case LAVAPOOLBUBBLE:
if (actj->spr.xrepeat < 30) if (actj->spr.ScaleX() < 0.46875)
return act; return act;
act->SetOwner(actj); act->SetOwner(actj);
ChangeActorStat(act, STAT_MISC); ChangeActorStat(act, STAT_MISC);
@ -121,7 +121,6 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
act->spr.pos.X += krandf(16) - 8; act->spr.pos.X += krandf(16) - 8;
act->spr.pos.Y += krandf(16) - 8; act->spr.pos.Y += krandf(16) - 8;
act->spr.SetScale(0.3125, 0.3125); act->spr.SetScale(0.3125, 0.3125);
act->spr.yrepeat = 20;
return act; return act;
case SERIOUSSAM: case SERIOUSSAM:
ChangeActorStat(act, 2); ChangeActorStat(act, 2);
@ -221,8 +220,7 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case FRAMEEFFECT1: case FRAMEEFFECT1:
if (actj) if (actj)
{ {
act->spr.xrepeat = actj->spr.xrepeat; act->spr.CopyScale(&actj->spr);
act->spr.yrepeat = actj->spr.yrepeat;
act->temp_data[1] = actj->spr.picnum; act->temp_data[1] = actj->spr.picnum;
} }
else act->spr.SetScale(0, 0); else act->spr.SetScale(0, 0);
@ -309,8 +307,8 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case BLOODSPLAT3: case BLOODSPLAT3:
case BLOODSPLAT4: case BLOODSPLAT4:
act->spr.cstat |= CSTAT_SPRITE_ALIGNMENT_WALL; act->spr.cstat |= CSTAT_SPRITE_ALIGNMENT_WALL;
act->spr.xrepeat = 7 + (krand() & 7); act->spr.SetScaleX(0.109375 + (krand() & 7) * REPEAT_SCALE);
act->spr.yrepeat = 7 + (krand() & 7); act->spr.SetScaleY(0.109375 + (krand() & 7) * REPEAT_SCALE);
act->spr.pos.Z -= 16; act->spr.pos.Z -= 16;
if (actj && actj->spr.pal == 6) if (actj && actj->spr.pal == 6)
act->spr.pal = 6; act->spr.pal = 6;
@ -503,8 +501,7 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case DUKELYINGDEAD: case DUKELYINGDEAD:
if (actj && actj->spr.picnum == APLAYER) if (actj && actj->spr.picnum == APLAYER)
{ {
act->spr.xrepeat = actj->spr.xrepeat; act->spr.CopyScale(&actj->spr);
act->spr.yrepeat = actj->spr.yrepeat;
act->spr.shade = actj->spr.shade; act->spr.shade = actj->spr.shade;
act->spr.pal = ps[actj->PlayerIndex()].palookup; act->spr.pal = ps[actj->PlayerIndex()].palookup;
} }
@ -647,8 +644,7 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case PLAYERONWATER: case PLAYERONWATER:
if (actj) if (actj)
{ {
act->spr.xrepeat = actj->spr.xrepeat; act->spr.CopyScale(&actj->spr);
act->spr.yrepeat = actj->spr.yrepeat;
act->vel.Z = 0.5; act->vel.Z = 0.5;
if (act->sector()->lotag != 2) if (act->sector()->lotag != 2)
act->spr.cstat |= CSTAT_SPRITE_INVISIBLE; act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
@ -1109,7 +1105,7 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case OOZFILTER: case OOZFILTER:
act->spr.shade = -16; act->spr.shade = -16;
if (act->spr.xrepeat <= 8) if (act->spr.ScaleX() <= 0.125)
{ {
act->spr.cstat = CSTAT_SPRITE_INVISIBLE; act->spr.cstat = CSTAT_SPRITE_INVISIBLE;
act->spr.SetScale(0, 0); act->spr.SetScale(0, 0);

View file

@ -288,8 +288,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case FRAMEEFFECT1: case FRAMEEFFECT1:
if (actj) if (actj)
{ {
act->spr.xrepeat = actj->spr.xrepeat; act->spr.CopyScale(&actj->spr);
act->spr.yrepeat = actj->spr.yrepeat;
if (actj->spr.picnum == APLAYER) if (actj->spr.picnum == APLAYER)
act->temp_data[1] = SMALLSMOKE; act->temp_data[1] = SMALLSMOKE;
else else
@ -308,13 +307,13 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
} }
else else
{ {
act->spr.xrepeat = act->spr.yrepeat = 1; act->spr.SetScale(REPEAT_SCALE, REPEAT_SCALE);
ChangeActorStat(act, STAT_MISC); ChangeActorStat(act, STAT_MISC);
} }
break; break;
case BLOOD: case BLOOD:
act->spr.xrepeat = act->spr.yrepeat = 4; act->spr.SetScale(0.0625, 0.0625);
act->spr.pos.Z -= 26; act->spr.pos.Z -= 26;
ChangeActorStat(act, STAT_MISC); ChangeActorStat(act, STAT_MISC);
break; break;
@ -342,8 +341,8 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case BLOODSPLAT3: case BLOODSPLAT3:
case BLOODSPLAT4: case BLOODSPLAT4:
act->spr.cstat |= CSTAT_SPRITE_ALIGNMENT_WALL; act->spr.cstat |= CSTAT_SPRITE_ALIGNMENT_WALL;
act->spr.xrepeat = 7 + (krand() & 7); act->spr.SetScaleX(0.109375 + (krand() & 7) * REPEAT_SCALE);
act->spr.yrepeat = 7 + (krand() & 7); act->spr.SetScaleY(0.109375 + (krand() & 7) * REPEAT_SCALE);
act->spr.pos.Z -= 16; act->spr.pos.Z -= 16;
if (actj && actj->spr.pal == 6) if (actj && actj->spr.pal == 6)
act->spr.pal = 6; act->spr.pal = 6;
@ -521,8 +520,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case DUKELYINGDEAD: case DUKELYINGDEAD:
if (actj && actj->spr.picnum == APLAYER) if (actj && actj->spr.picnum == APLAYER)
{ {
act->spr.xrepeat = actj->spr.xrepeat; act->spr.CopyScale(&actj->spr);
act->spr.yrepeat = actj->spr.yrepeat;
act->spr.shade = actj->spr.shade; act->spr.shade = actj->spr.shade;
act->spr.pal = ps[actj->PlayerIndex()].palookup; act->spr.pal = ps[actj->PlayerIndex()].palookup;
} }
@ -534,7 +532,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case RESPAWNMARKERRED: case RESPAWNMARKERRED:
if (act->spr.picnum == RESPAWNMARKERRED) if (act->spr.picnum == RESPAWNMARKERRED)
{ {
act->spr.xrepeat = act->spr.yrepeat = 8; act->spr.SetScale(0.125, 0.125);
if (actj) act->spr.pos.Z = actj->floorz; if (actj) act->spr.pos.Z = actj->floorz;
} }
else else
@ -636,8 +634,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case PLAYERONWATER: case PLAYERONWATER:
if (actj) if (actj)
{ {
act->spr.xrepeat = actj->spr.xrepeat; act->spr.CopyScale(&actj->spr);
act->spr.yrepeat = actj->spr.yrepeat;
act->vel.Z = 0.5; act->vel.Z = 0.5;
if (act->sector()->lotag != 2) if (act->sector()->lotag != 2)
act->spr.cstat |= CSTAT_SPRITE_INVISIBLE; act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
@ -837,14 +834,12 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case HENSTAND: case HENSTAND:
if (act->spr.pal == 35) if (act->spr.pal == 35)
{ {
act->spr.xrepeat = 42; act->spr.SetScale(0.65625, 0.46875);
act->spr.yrepeat = 30;
act->setClipDistFromTile(); act->setClipDistFromTile();
} }
else else
{ {
act->spr.xrepeat = 21; act->spr.SetScale(0.328125, 0.234375);
act->spr.yrepeat = 15;
act->clipdist = 16; act->clipdist = 16;
} }
break; break;
@ -861,8 +856,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
act->setClipDistFromTile(); act->setClipDistFromTile();
break; break;
case RABBIT: case RABBIT:
act->spr.xrepeat = 18; act->spr.SetScale(0.28125, 0.28125);
act->spr.yrepeat = 18;
act->setClipDistFromTile(); act->setClipDistFromTile();
break; break;
case MAMACLOUD: case MAMACLOUD:
@ -876,14 +870,12 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case MAMA: case MAMA:
if (act->spr.pal == 30) if (act->spr.pal == 30)
{ {
act->spr.xrepeat = 26; act->spr.SetScale(0.40625, 0.40625);
act->spr.yrepeat = 26;
act->clipdist = 18.75; act->clipdist = 18.75;
} }
else if (act->spr.pal == 31) else if (act->spr.pal == 31)
{ {
act->spr.xrepeat = 36; act->spr.SetScale(0.5625, 0.5625);
act->spr.yrepeat = 36;
act->clipdist = 25; act->clipdist = 25;
} }
else if (act->spr.pal == 32) else if (act->spr.pal == 32)
@ -898,23 +890,19 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
} }
break; break;
case BIKERB: case BIKERB:
act->spr.xrepeat = 28; act->spr.SetScale(0.4375, 0.34375);
act->spr.yrepeat = 22;
act->clipdist = 18; act->clipdist = 18;
break; break;
case BIKERBV2: case BIKERBV2:
act->spr.xrepeat = 28; act->spr.SetScale(0.4375, 0.34375);
act->spr.yrepeat = 22;
act->clipdist = 18; act->clipdist = 18;
break; break;
case BIKER: case BIKER:
act->spr.xrepeat = 28; act->spr.SetScale(0.4375, 0.34375);
act->spr.yrepeat = 22;
act->setClipDistFromTile(); act->setClipDistFromTile();
break; break;
case CHEERB: case CHEERB:
act->spr.xrepeat = 28; act->spr.SetScale(0.4375, 0.34375);
act->spr.yrepeat = 22;
act->clipdist = 18; act->clipdist = 18;
break; break;
case CHEER: case CHEER:
@ -923,8 +911,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
act->setClipDistFromTile(); act->setClipDistFromTile();
break; break;
case MAKEOUT: case MAKEOUT:
act->spr.xrepeat = 26; act->spr.SetScale(0.40625, 0.40625);
act->spr.yrepeat = 26;
act->setClipDistFromTile(); act->setClipDistFromTile();
break; break;
case MINIONBOAT: case MINIONBOAT:
@ -941,15 +928,13 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
break; break;
case TORNADO: case TORNADO:
act->spr.xrepeat = 64; act->spr.SetScale(1, 2);
act->spr.yrepeat = 128;
act->setClipDistFromTile(); act->setClipDistFromTile();
act->clipdist *= 0.25; act->clipdist *= 0.25;
act->spr.cstat = CSTAT_SPRITE_TRANSLUCENT; act->spr.cstat = CSTAT_SPRITE_TRANSLUCENT;
break; break;
case LTH: case LTH:
act->spr.xrepeat = 24; act->spr.SetScale(0.375, 0.34375);
act->spr.yrepeat = 22;
act->setClipDistFromTile(); act->setClipDistFromTile();
break; break;
case ROCK: case ROCK:
@ -1017,14 +1002,12 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
break; break;
case LOCATORS: case LOCATORS:
// act->spr.xrepeat=act->spr.yrepeat=0;
act->spr.cstat |= CSTAT_SPRITE_INVISIBLE; act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
ChangeActorStat(act, STAT_LOCATOR); ChangeActorStat(act, STAT_LOCATOR);
break; break;
case ACTIVATORLOCKED: case ACTIVATORLOCKED:
case ACTIVATOR: case ACTIVATOR:
// act->spr.xrepeat=act->spr.yrepeat=0;
act->spr.cstat |= CSTAT_SPRITE_INVISIBLE; act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
if (act->spr.picnum == ACTIVATORLOCKED) if (act->spr.picnum == ACTIVATORLOCKED)
sectp->lotag ^= 16384; sectp->lotag ^= 16384;
@ -1049,16 +1032,15 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
getglobalz(act); getglobalz(act);
int j = int((act->floorz - act->ceilingz) * 0.5); double j = ((act->floorz - act->ceilingz) / 128.);
act->spr.yrepeat = j; act->spr.SetScale(max(0., 0.390625 - j * 0.5), j);
act->spr.xrepeat = 25 - (j >> 1);
if(krand() & 4) act->spr.cstat |= CSTAT_SPRITE_XFLIP; if(krand() & 4) act->spr.cstat |= CSTAT_SPRITE_XFLIP;
break; break;
} }
case HEAVYHBOMB: case HEAVYHBOMB:
act->SetOwner(act); act->SetOwner(act);
act->spr.xrepeat = act->spr.yrepeat = 9; act->spr.SetScale(0.140625, 0.140625);
act->spr.yint = 4; act->spr.yint = 4;
[[fallthrough]]; [[fallthrough]];
case REACTOR2: case REACTOR2:
@ -1170,105 +1152,83 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
act->spr.SetScale(0.25, 0.25); act->spr.SetScale(0.25, 0.25);
break; break;
case SHOTGUNAMMO: case SHOTGUNAMMO:
act->spr.xrepeat = 18; act->spr.SetScale(0.28125, 0.265625);
act->spr.yrepeat = 17;
if (isRRRA()) act->spr.cstat = CSTAT_SPRITE_BLOCK_HITSCAN; if (isRRRA()) act->spr.cstat = CSTAT_SPRITE_BLOCK_HITSCAN;
break; break;
case SIXPAK: case SIXPAK:
act->spr.xrepeat = 13; act->spr.SetScale(0.203125, 0.140625);
act->spr.yrepeat = 9;
if (isRRRA()) act->spr.cstat = CSTAT_SPRITE_BLOCK_HITSCAN; if (isRRRA()) act->spr.cstat = CSTAT_SPRITE_BLOCK_HITSCAN;
break; break;
case FIRSTAID: case FIRSTAID:
act->spr.xrepeat = 8; act->spr.SetScale(0.125, 0.125);
act->spr.yrepeat = 8;
break; break;
case BEER: case BEER:
act->spr.xrepeat = 5; act->spr.SetScale(0.078125, 0.0625);
act->spr.yrepeat = 4;
break; break;
case AMMO: case AMMO:
act->spr.xrepeat = 9; act->spr.SetScale(0.140625, 0.140625);
act->spr.yrepeat = 9;
break; break;
case MOTOAMMO: case MOTOAMMO:
if (!isRRRA()) goto default_case; if (!isRRRA()) goto default_case;
act->spr.xrepeat = 23; act->spr.SetScale(0.359375, 0.359375);
act->spr.yrepeat = 23;
break; break;
case BOATAMMO: case BOATAMMO:
if (!isRRRA()) goto default_case; if (!isRRRA()) goto default_case;
act->spr.SetScale(0.25, 0.25); act->spr.SetScale(0.25, 0.25);
break; break;
case COWPIE: case COWPIE:
act->spr.xrepeat = 8; act->spr.SetScale(0.125, 0.09375);
act->spr.yrepeat = 6;
break; break;
case STEROIDS: case STEROIDS:
act->spr.xrepeat = 13; act->spr.SetScale(0.203125, 0.140625);
act->spr.yrepeat = 9;
break; break;
case ACCESSCARD: case ACCESSCARD:
act->spr.xrepeat = 11; act->spr.SetScale(0.171875, 0.1875);
act->spr.yrepeat = 12;
break; break;
case HEATSENSOR: case HEATSENSOR:
act->spr.xrepeat = 6; act->spr.SetScale(0.09375, 0.0625);
act->spr.yrepeat = 4;
break; break;
case AIRTANK: case AIRTANK:
act->spr.xrepeat = 19; act->spr.SetScale(0.296875, 0.25);
act->spr.yrepeat = 16;
break; break;
case BATTERYAMMO: case BATTERYAMMO:
act->spr.xrepeat = 15; act->spr.SetScale(0.234375, 0.234375);
act->spr.yrepeat = 15;
break; break;
case BOWLINGBALLSPRITE: case BOWLINGBALLSPRITE:
act->spr.xrepeat = 11; act->spr.SetScale(0.171875, 0.171875);
act->spr.yrepeat = 11;
break; break;
case POWDERKEG: case POWDERKEG:
act->spr.xrepeat = 11; act->spr.SetScale(0.171875, 0.171875);
act->spr.yrepeat = 11;
act->spr.yint = 4; act->spr.yint = 4;
act->vel.X = 2; act->vel.X = 2;
break; break;
case RPGSPRITE: case RPGSPRITE:
act->spr.xrepeat = 16; act->spr.SetScale(0.25, 0.21875);
act->spr.yrepeat = 14;
break; break;
case RPG2SPRITE: case RPG2SPRITE:
if (!isRRRA()) goto default_case; if (!isRRRA()) goto default_case;
act->spr.SetScale(0.34375, 0.3125); act->spr.SetScale(0.34375, 0.3125);
break; break;
case SHRINKERSPRITE: case SHRINKERSPRITE:
act->spr.xrepeat = 22; act->spr.SetScale(0.34375, 0.203125);
act->spr.yrepeat = 13;
break; break;
case DEVISTATORSPRITE: case DEVISTATORSPRITE:
act->spr.xrepeat = 18; act->spr.SetScale(0.28125, 0.265625);
act->spr.yrepeat = 17;
break; break;
case SAWAMMO: case SAWAMMO:
act->spr.xrepeat = 12; act->spr.SetScale(0.1875, 0.109375);
act->spr.yrepeat = 7;
break; break;
case GROWSPRITEICON: case GROWSPRITEICON:
act->spr.xrepeat = 10; act->spr.SetScale(0.15625, 0.140625);
act->spr.yrepeat = 9;
break; break;
case DEVISTATORAMMO: case DEVISTATORAMMO:
act->spr.xrepeat = 10; act->spr.SetScale(0.15625, 0.140625);
act->spr.yrepeat = 9;
break; break;
case ATOMICHEALTH: case ATOMICHEALTH:
act->spr.xrepeat = 8; act->spr.SetScale(0.125, 0.125);
act->spr.yrepeat = 8;
break; break;
case FREEZESPRITE: case FREEZESPRITE:
act->spr.xrepeat = 17; act->spr.SetScale(0.265625, 0.25);
act->spr.yrepeat = 16;
break; break;
} }
act->spr.shade = act->sector()->floorshade; act->spr.shade = act->sector()->floorshade;
@ -1311,7 +1271,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
{ {
act->spr.angle = actj->spr.angle; act->spr.angle = actj->spr.angle;
act->spr.cstat = CSTAT_SPRITE_ALIGNMENT_WALL | CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_TRANSLUCENT; act->spr.cstat = CSTAT_SPRITE_ALIGNMENT_WALL | CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_TRANSLUCENT;
act->spr.xrepeat = act->spr.yrepeat = 1; act->spr.SetScale(REPEAT_SCALE, REPEAT_SCALE);
act->vel.X = -0.5; act->vel.X = -0.5;
ssp(act, CLIPMASK0); ssp(act, CLIPMASK0);
} }
@ -1327,7 +1287,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
case OOZFILTER: case OOZFILTER:
act->spr.shade = -16; act->spr.shade = -16;
if (act->spr.xrepeat <= 8) if (act->spr.ScaleX() <= 0.125)
{ {
act->spr.cstat = CSTAT_SPRITE_INVISIBLE; act->spr.cstat = CSTAT_SPRITE_INVISIBLE;
act->spr.SetScale(0, 0); act->spr.SetScale(0, 0);
@ -1366,8 +1326,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
break; break;
} }
act->spr.pal = 0; act->spr.pal = 0;
act->spr.xrepeat = 18; act->spr.SetScale(0.28125, 0.28125);
act->spr.yrepeat = 18;
act->setClipDistFromTile(); act->setClipDistFromTile();
act->saved_ammo = 100; act->saved_ammo = 100;
act->spr.cstat = CSTAT_SPRITE_BLOCK_ALL; act->spr.cstat = CSTAT_SPRITE_BLOCK_ALL;
@ -1440,8 +1399,7 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
break; break;
case RRTILE63: case RRTILE63:
act->spr.cstat |= CSTAT_SPRITE_INVISIBLE; act->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
act->spr.xrepeat = 1; act->spr.SetScale(REPEAT_SCALE, REPEAT_SCALE);
act->spr.yrepeat = 1;
act->clipdist = 0.25; act->clipdist = 0.25;
ChangeActorStat(act, 100); ChangeActorStat(act, 100);
break; break;