mirror of
https://github.com/DrBeef/Raze.git
synced 2025-03-21 00:40:51 +00:00
- scriptified canwithsomething, the last internal STAT_STANDABLE item.
This commit is contained in:
parent
c6b3cf3e0a
commit
714a2ef70e
15 changed files with 100 additions and 24 deletions
|
@ -372,6 +372,7 @@ void DCoreActor::initFromSprite(spritetype* mspr)
|
|||
spr.cstat = (mspr->cstat & ~ESpriteFlags::FromInt(actorinfo->DefaultCstat)) | (spr.cstat & ESpriteFlags::FromInt(actorinfo->DefaultCstat));
|
||||
spr.pos = mspr->pos;
|
||||
spr.sectp = mspr->sectp;
|
||||
spr.clipdist = mspr->clipdist; // this has no associated property because it is needed for initialization of the real clipdist.
|
||||
|
||||
// only copy those values which have not been defaulted by the class definition.
|
||||
#define setter(flag, var) if (!(actorinfo->DefaultFlags & flag)) spr.var = mspr->var;
|
||||
|
@ -388,7 +389,6 @@ void DCoreActor::initFromSprite(spritetype* mspr)
|
|||
setter(DEFF_DETAIL, detail);
|
||||
setter(DEFF_SHADE, shade);
|
||||
setter(DEFF_PAL, pal);
|
||||
setter(DEFF_CLIPDIST, clipdist);
|
||||
setter(DEFF_BLEND, blend);
|
||||
setter(DEFF_XREPEAT, scale.X);
|
||||
setter(DEFF_YREPEAT, scale.Y);
|
||||
|
@ -398,7 +398,7 @@ void DCoreActor::initFromSprite(spritetype* mspr)
|
|||
|
||||
#undef setter
|
||||
|
||||
clipdist = spr.clipdist * 0.25;
|
||||
if (!(actorinfo->DefaultFlags & DEFF_CLIPDIST)) clipdist = spr.clipdist * 0.25;
|
||||
if (mspr->statnum != 0 && !(actorinfo->DefaultFlags & DEFF_STATNUM))
|
||||
ChangeActorStat(this, mspr->statnum);
|
||||
}
|
||||
|
|
|
@ -440,10 +440,10 @@ DEFINE_PROPERTY(pal, I, CoreActor)
|
|||
//==========================================================================
|
||||
//
|
||||
//==========================================================================
|
||||
DEFINE_PROPERTY(clipdist, I, CoreActor)
|
||||
DEFINE_PROPERTY(clipdist, F, CoreActor)
|
||||
{
|
||||
PROP_INT_PARM(i, 0);
|
||||
defaults->spr.clipdist = i;
|
||||
PROP_FLOAT_PARM(i, 0);
|
||||
defaults->clipdist = i;
|
||||
bag.Info->ActorInfo()->DefaultFlags |= DEFF_CLIPDIST;
|
||||
}
|
||||
|
||||
|
|
|
@ -1925,7 +1925,7 @@ void handle_se00(DDukeActor* actor)
|
|||
actor->tempval += 4;
|
||||
if (actor->tempval >= 256)
|
||||
callsound(actor->sector(), actor, true);
|
||||
if (actor->spr.clipdist) direction = 1; // notreallyclipdist
|
||||
if (actor->spr.detail) direction = 1;
|
||||
else direction = -1;
|
||||
}
|
||||
else actor->tempval = 256;
|
||||
|
@ -1953,7 +1953,7 @@ void handle_se00(DDukeActor* actor)
|
|||
actor->tempval -= 4;
|
||||
if (actor->tempval <= 0)
|
||||
callsound(actor->sector(), actor, true);
|
||||
if (actor->spr.clipdist) direction = -1; // notreallyclipdist
|
||||
if (actor->spr.detail) direction = -1;
|
||||
else direction = 1;
|
||||
}
|
||||
else actor->tempval = 0;
|
||||
|
|
|
@ -813,11 +813,6 @@ void movestandables_d(void)
|
|||
continue;
|
||||
}
|
||||
|
||||
else if (isIn(picnum, CANWITHSOMETHING, CANWITHSOMETHING2, CANWITHSOMETHING3, CANWITHSOMETHING4))
|
||||
{
|
||||
movecanwithsomething(act);
|
||||
}
|
||||
|
||||
else if (isIn(picnum,
|
||||
EXPLODINGBARREL,
|
||||
WOODENHORSE,
|
||||
|
|
|
@ -732,11 +732,6 @@ void movestandables_r(void)
|
|||
continue;
|
||||
}
|
||||
|
||||
else if (picnum == CANWITHSOMETHING)
|
||||
{
|
||||
movecanwithsomething(act);
|
||||
}
|
||||
|
||||
else if (isIn(picnum,
|
||||
EXPLODINGBARREL,
|
||||
WOODENHORSE,
|
||||
|
|
|
@ -818,8 +818,8 @@ void spawneffector(DDukeActor* actor, TArray<DDukeActor*>* actors)
|
|||
{
|
||||
if (sectp->lotag == 30)
|
||||
{
|
||||
if (actor->spr.pal) actor->spr.clipdist = 1; // notreallyclipdist
|
||||
else actor->spr.clipdist = 0;
|
||||
if (actor->spr.pal) actor->spr.detail = 1;
|
||||
else actor->spr.detail = 0;
|
||||
actor->temp_pos.Z = sectp->floorz;
|
||||
sectp->hitagactor = actor;
|
||||
}
|
||||
|
|
|
@ -999,10 +999,6 @@ DDukeActor* spawninit_d(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
|
|||
act->clipdist = 2;
|
||||
act->SetOwner(act);
|
||||
break;
|
||||
case CANWITHSOMETHING:
|
||||
case CANWITHSOMETHING2:
|
||||
case CANWITHSOMETHING3:
|
||||
case CANWITHSOMETHING4:
|
||||
case RUBBERCAN:
|
||||
act->spr.extra = 0;
|
||||
[[fallthrough]];
|
||||
|
|
|
@ -1272,7 +1272,6 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
|
|||
act->clipdist = 2;
|
||||
act->SetOwner(act);
|
||||
break;
|
||||
case CANWITHSOMETHING:
|
||||
case RUBBERCAN:
|
||||
act->spr.extra = 0;
|
||||
[[fallthrough]];
|
||||
|
|
|
@ -268,6 +268,22 @@ DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, spawn, DukeActor_Spawn)
|
|||
ACTION_RETURN_POINTER(DukeActor_Spawn(self, type));
|
||||
}
|
||||
|
||||
DDukeActor* DukeActor_Spawnsprite(DDukeActor* origin, int picnum)
|
||||
{
|
||||
if (picnum >= 0 && picnum < MAXTILES)
|
||||
{
|
||||
return spawn(origin, picnum);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(DDukeActor, spawnsprite, DukeActor_Spawnsprite)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(DDukeActor);
|
||||
PARAM_INT(type);
|
||||
ACTION_RETURN_POINTER(DukeActor_Spawnsprite(self, type));
|
||||
}
|
||||
|
||||
DDukeActor* DukeActor_spawnweaponorammo(DDukeActor* origin, unsigned intname)
|
||||
{
|
||||
if (intname > 14) return nullptr;
|
||||
|
|
|
@ -45,4 +45,9 @@ spawnclasses
|
|||
4528 = DukeSideBolt4
|
||||
660 = DukeWaterdrip
|
||||
160 = DukeDoorshock
|
||||
1232 = DukeCanWithSomething
|
||||
2807 = DukeCanWithSomething2
|
||||
2808 = DukeCanWithSomething3
|
||||
2809 = DukeCanWithSomething4
|
||||
|
||||
}
|
||||
|
|
|
@ -29,5 +29,6 @@ spawnclasses
|
|||
1130 = DukeBolt4
|
||||
239 = DukeWaterdrip
|
||||
120 = DukeDoorshock
|
||||
1309 = DukeCanWithSomething
|
||||
}
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ version "4.10"
|
|||
#include "zscript/games/duke/actors/waterdrip.zs"
|
||||
#include "zscript/games/duke/actors/doorshock.zs"
|
||||
#include "zscript/games/duke/actors/viewscreen.zs"
|
||||
#include "zscript/games/duke/actors/canwithsomething.zs"
|
||||
|
||||
#include "zscript/games/blood/bloodgame.zs"
|
||||
#include "zscript/games/blood/ui/menu.zs"
|
||||
|
|
|
@ -66,5 +66,12 @@ class CoreActor native
|
|||
return CSTAT_SPRITE_XFLIP | CSTAT_SPRITE_YFLIP;
|
||||
}
|
||||
|
||||
int randomXFlip()
|
||||
{
|
||||
int r = random(0, 1);
|
||||
if (r == 0) return 0;
|
||||
return CSTAT_SPRITE_XFLIP;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
60
wadsrc/static/zscript/games/duke/actors/canwithsomething.zs
Normal file
60
wadsrc/static/zscript/games/duke/actors/canwithsomething.zs
Normal file
|
@ -0,0 +1,60 @@
|
|||
|
||||
class DukeCanWithSomething : DukeActor
|
||||
{
|
||||
Default
|
||||
{
|
||||
extra 0;
|
||||
clipdist 18;
|
||||
statnum STAT_ZOMBIEACTOR;
|
||||
pic "CANWITHSOMETHING";
|
||||
}
|
||||
|
||||
override void Initialize()
|
||||
{
|
||||
if (self.ownerActor != self)
|
||||
self.scale = (0.5, 0.5);
|
||||
self.makeitfall();
|
||||
self.cstat = CSTAT_SPRITE_BLOCK_ALL | randomXFlip();
|
||||
}
|
||||
|
||||
|
||||
override void Tick()
|
||||
{
|
||||
self.makeitfall();
|
||||
int j = self.ifhitbyweapon();
|
||||
if (j >= 0)
|
||||
{
|
||||
self.PlayActorSound(DukeSnd.VENT_BUST);
|
||||
for (j = 0; j < 10; j++)
|
||||
self.RANDOMSCRAP();
|
||||
|
||||
if (self.lotag) self.spawnsprite(self.lotag);
|
||||
self.Destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class DukeCanWithSomething2 : DukeCanWithSomething
|
||||
{
|
||||
Default
|
||||
{
|
||||
pic "CANWITHSOMETHING2";
|
||||
}
|
||||
}
|
||||
|
||||
class DukeCanWithSomething3 : DukeCanWithSomething
|
||||
{
|
||||
Default
|
||||
{
|
||||
pic "CANWITHSOMETHING3";
|
||||
}
|
||||
}
|
||||
|
||||
class DukeCanWithSomething4 : DukeCanWithSomething
|
||||
{
|
||||
Default
|
||||
{
|
||||
pic "CANWITHSOMETHING4";
|
||||
}
|
||||
}
|
||||
|
|
@ -128,6 +128,7 @@ class DukeActor : CoreActor native
|
|||
native int domove(int clipmask);
|
||||
native void PlayActorSound(int snd);
|
||||
native DukeActor spawn(Name type);
|
||||
native DukeActor spawnsprite(int type); // for cases where the map has a picnum stored. Avoid when possible.
|
||||
native DukeActor spawnweaponorammo(int type);
|
||||
native void lotsofglass(int count);
|
||||
native void makeitfall();
|
||||
|
|
Loading…
Reference in a new issue