diff --git a/source/games/duke/src/funct.h b/source/games/duke/src/funct.h index f478ef63a..7f79b850d 100644 --- a/source/games/duke/src/funct.h +++ b/source/games/duke/src/funct.h @@ -176,7 +176,6 @@ void addspritetodelete(int spnum=0); void checkavailinven(player_struct* p); bool initspriteforspawn(DDukeActor* spn); bool commonEnemySetup(DDukeActor* self, DDukeActor* owner); -void spawntransporter(DDukeActor* actj, DDukeActor* acti, bool beam); int spawnbloodpoolpart1(DDukeActor* acti); void initshell(DDukeActor* actj, DDukeActor* acti, bool isshell); void spawneffector(DDukeActor* actor, TArray* actors); diff --git a/source/games/duke/src/spawn.cpp b/source/games/duke/src/spawn.cpp index 863257450..a8743e1c4 100644 --- a/source/games/duke/src/spawn.cpp +++ b/source/games/duke/src/spawn.cpp @@ -340,44 +340,6 @@ bool commonEnemySetup(DDukeActor* self, DDukeActor* owner) } -//--------------------------------------------------------------------------- -// -// -// -//--------------------------------------------------------------------------- - -void spawntransporter(DDukeActor *actj, DDukeActor* act, bool beam) -{ - if (actj == nullptr) return; - if (beam) - { - act->spr.scale = DVector2(0.484375, REPEAT_SCALE); - act->spr.pos.Z = actj->sector()->floorz - gs.playerheight; - } - else - { - if (actj->spr.statnum == 4) - { - act->spr.scale = DVector2(0.125, 0.125); - } - else - { - act->spr.scale = DVector2(0.75, 1); - if (actj->spr.statnum == 10 || badguy(actj)) - act->spr.pos.Z -= 32; - } - } - - act->spr.shade = -127; - act->spr.cstat = CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_TRANSLUCENT; - act->spr.Angles.Yaw = actj->spr.Angles.Yaw; - - act->vel.X = 8; - ChangeActorStat(act, STAT_MISC); - ssp(act, CLIPMASK0); - SetActor(act, act->spr.pos); -} - //--------------------------------------------------------------------------- // // diff --git a/source/games/duke/src/spawn_d.cpp b/source/games/duke/src/spawn_d.cpp index c3ccc011b..d3a649d0d 100644 --- a/source/games/duke/src/spawn_d.cpp +++ b/source/games/duke/src/spawn_d.cpp @@ -156,11 +156,6 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray* act->spr.scale = DVector2(0, 0); ChangeActorStat(act, STAT_MISC); break; - case DTILE_TRANSPORTERSTAR: - case DTILE_TRANSPORTERBEAM: - spawntransporter(actj, act, act->spr.picnum == DTILE_TRANSPORTERBEAM); - break; - case DTILE_BLOOD: act->spr.scale = DVector2(0.25, 0.25); act->spr.pos.Z -= 26; diff --git a/source/games/duke/src/spawn_r.cpp b/source/games/duke/src/spawn_r.cpp index 66faac66f..dccdeb53f 100644 --- a/source/games/duke/src/spawn_r.cpp +++ b/source/games/duke/src/spawn_r.cpp @@ -80,11 +80,6 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray* pistonsound = 1; break; - case RTILE_TRANSPORTERSTAR: - case RTILE_TRANSPORTERBEAM: - spawntransporter(actj, act, act->spr.picnum == RTILE_TRANSPORTERBEAM); - break; - case RTILE_BLOOD: act->spr.scale = DVector2(0.0625, 0.0625); act->spr.pos.Z -= 26; diff --git a/wadsrc/static/filter/dukelike/rmapinfo.spawnclasses b/wadsrc/static/filter/dukelike/rmapinfo.spawnclasses index a63d4a4a1..5f7ebfeca 100644 --- a/wadsrc/static/filter/dukelike/rmapinfo.spawnclasses +++ b/wadsrc/static/filter/dukelike/rmapinfo.spawnclasses @@ -237,4 +237,7 @@ spawnclasses // the following actors use CON. 1671 = DukeForceRipple + 1630 = DukeTransporterStar + 1261 = DukeTransporterBeam + } diff --git a/wadsrc/static/filter/redneck/rmapinfo.spawnclasses b/wadsrc/static/filter/redneck/rmapinfo.spawnclasses index 5601cee0e..83768f240 100644 --- a/wadsrc/static/filter/redneck/rmapinfo.spawnclasses +++ b/wadsrc/static/filter/redneck/rmapinfo.spawnclasses @@ -270,6 +270,11 @@ spawnclasses 3171 = DukeActor, "*RRTILE3171" 3216 = DukeActor, "*RRTILE3216" 3720 = DukeActor, "*RRTILE3720" + + // the following actors use CON + + 1398 = DukeTransporterStar + 1338 = DukeTransporterBeam } diff --git a/wadsrc/static/zscript.txt b/wadsrc/static/zscript.txt index c2afa48e0..491fdaf2c 100644 --- a/wadsrc/static/zscript.txt +++ b/wadsrc/static/zscript.txt @@ -102,6 +102,8 @@ version "4.10" #include "zscript/games/duke/actors/bloodpool.zs" #include "zscript/games/duke/actors/toilet.zs" +#include "zscript/games/duke/actors/transporter.zs" + #include "zscript/games/duke/actors/flamethrowerflame.zs" #include "zscript/games/duke/actors/firefly.zs" diff --git a/wadsrc/static/zscript/games/duke/actors/transporter.zs b/wadsrc/static/zscript/games/duke/actors/transporter.zs new file mode 100644 index 000000000..2487c1cea --- /dev/null +++ b/wadsrc/static/zscript/games/duke/actors/transporter.zs @@ -0,0 +1,68 @@ + +class DukeTransporterStar : DukeActor +{ + default + { + pic "TRANSPORTERSTAR"; + } + + override void Initialize() + { + let owner = self.ownerActor; + if (owner == nullptr || owner == self) + { + scale = (0, 0); + return; + } + if (owner.statnum == STAT_PROJECTILE) + { + self.scale = (0.125, 0.125); + } + else + { + self.scale = (0.75, 1); + if (owner.statnum == STAT_PLAYER || owner.badguy()) + self.pos.Z -= 32; + } + + self.cstat = CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_TRANSLUCENT; + self.angle = owner.angle; + + self.vel.X = 8; + self.DoMove(CLIPMASK0); + self.SetPosition(self.pos); + self.ChangeStat(STAT_MISC); + self.shade = -127; + } +} + + +class DukeTransporterBeam : DukeActor +{ + default + { + pic "TRANSPORTERBEAM"; + } + + override void Initialize() + { + let owner = self.ownerActor; + if (owner == nullptr || owner == self) + { + scale = (0, 0); + return; + } + self.scale = (0.484375, REPEAT_SCALE); + self.pos.Z = owner.sector.floorz - gs.playerheight; + + self.cstat = CSTAT_SPRITE_YCENTER | CSTAT_SPRITE_TRANSLUCENT; + self.angle = owner.angle; + + self.vel.X = 8; + self.DoMove(CLIPMASK0); + self.SetPosition(self.pos); + self.ChangeStat(STAT_MISC); + self.shade = -127; + } +} +