mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-20 10:32:27 +00:00
- scriptified the remaining controller sprites.
This commit is contained in:
parent
cb005062cd
commit
b069904be1
17 changed files with 199 additions and 90 deletions
|
@ -102,6 +102,8 @@ DEFINE_FIELD_X(sectortype, sectortype, exflags)
|
|||
DEFINE_FIELD_X(sectortype, sectortype, floorz)
|
||||
DEFINE_FIELD_X(sectortype, sectortype, ceilingz)
|
||||
|
||||
DEFINE_FIELD_X(sectortype, sectortype, shadedsector)
|
||||
|
||||
DEFINE_FIELD_NAMED_X(walltype, walltype, xpan_, xpan)
|
||||
DEFINE_FIELD_NAMED_X(walltype, walltype, ypan_, ypan)
|
||||
DEFINE_FIELD_X(walltype, walltype, pos)
|
||||
|
|
|
@ -334,6 +334,19 @@ void movecyclers(void)
|
|||
}
|
||||
}
|
||||
|
||||
void addcycler(sectortype* sector, int lotag, int shade, int shade2, int hitag, int state)
|
||||
{
|
||||
if (numcyclers >= MAXCYCLERS)
|
||||
I_Error("Too many cycling sectors.");
|
||||
cyclers[numcyclers].sector = sector;
|
||||
cyclers[numcyclers].lotag = lotag;
|
||||
cyclers[numcyclers].shade1 = shade;
|
||||
cyclers[numcyclers].shade2 = shade2;
|
||||
cyclers[numcyclers].hitag = hitag;
|
||||
cyclers[numcyclers].state = state;
|
||||
numcyclers++;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
//
|
||||
|
|
|
@ -146,24 +146,24 @@ void lava_serialize(FSerializer& arc)
|
|||
("windertime", windertime);
|
||||
}
|
||||
|
||||
void addtorch(DDukeActor* actor)
|
||||
void addtorch(sectortype* sect, int shade, int lotag)
|
||||
{
|
||||
if (torchcnt >= 64)
|
||||
I_Error("Too many torch effects");
|
||||
|
||||
torchsector[torchcnt] = actor->sector();
|
||||
torchsectorshade[torchcnt] = actor->sector()->floorshade;
|
||||
torchtype[torchcnt] = actor->spr.lotag;
|
||||
torchsector[torchcnt] = sect;
|
||||
torchsectorshade[torchcnt] = shade;
|
||||
torchtype[torchcnt] = lotag;
|
||||
torchcnt++;
|
||||
}
|
||||
|
||||
void addlightning(DDukeActor* actor)
|
||||
void addlightning(sectortype* sect, int shade)
|
||||
{
|
||||
if (lightnincnt >= 64)
|
||||
I_Error("Too many lightnin effects");
|
||||
|
||||
lightninsector[lightnincnt] = actor->sector();
|
||||
lightninsectorshade[lightnincnt] = actor->sector()->floorshade;
|
||||
lightninsector[lightnincnt] = sect;
|
||||
lightninsectorshade[lightnincnt] = shade;
|
||||
lightnincnt++;
|
||||
}
|
||||
|
||||
|
@ -526,4 +526,16 @@ void thunder(void)
|
|||
}
|
||||
}
|
||||
|
||||
int addambient(int hitag, int lotag)
|
||||
{
|
||||
if (ambientfx >= 64)
|
||||
I_Error("Too many ambient effects");
|
||||
else
|
||||
{
|
||||
ambienthitag[ambientfx] = hitag;
|
||||
ambientlotag[ambientfx] = lotag;
|
||||
return ambientfx++;
|
||||
}
|
||||
}
|
||||
|
||||
END_DUKE_NS
|
||||
|
|
|
@ -123,6 +123,7 @@ void CallOnHurt(DDukeActor* actor, player_struct* hitter);
|
|||
bool CallOnUse(DDukeActor* actor, player_struct* user);
|
||||
void CallOnRespawn(DDukeActor* actor, int low);
|
||||
bool CallAnimate(DDukeActor* actor, tspritetype* hitter);
|
||||
void CallStaticSetup(DDukeActor* actor);
|
||||
|
||||
|
||||
END_DUKE_NS
|
||||
|
|
|
@ -17,8 +17,9 @@ BEGIN_DUKE_NS
|
|||
void lava_cleararrays();
|
||||
void addjaildoor(int p1, int p2, int iht, int jlt, int p3, sectortype* h);
|
||||
void addminecart(int p1, int p2, sectortype* i, int iht, int p3, sectortype* childsectnum);
|
||||
void addtorch(DDukeActor* i);
|
||||
void addlightning(DDukeActor* i);
|
||||
void addtorch(sectortype* sect, int shade, int lotag);
|
||||
void addlightning(sectortype* sect, int shade);
|
||||
int addambient(int hitag, int lotag);
|
||||
|
||||
void movecyclers(void);
|
||||
void movedummyplayers(void);
|
||||
|
|
|
@ -479,5 +479,13 @@ bool CallAnimate(DDukeActor* actor, tspritetype* tspr)
|
|||
return nval;
|
||||
}
|
||||
|
||||
void CallStaticSetup(DDukeActor* actor)
|
||||
{
|
||||
IFVIRTUALPTR(actor, DDukeActor, StaticSetup)
|
||||
{
|
||||
VMValue val = actor;
|
||||
VMCall(func, &val, 1, nullptr, 0);
|
||||
}
|
||||
}
|
||||
|
||||
END_DUKE_NS
|
||||
|
|
|
@ -4,7 +4,7 @@ x(RPG2SPRITE, 14)
|
|||
x(DUKETAG, 15)
|
||||
x(SIGN1, 16)
|
||||
x(SIGN2, 17)
|
||||
y(RRTILE18, 18)
|
||||
y(TORCHCTRL, 18)
|
||||
y(RRTILE19, 19)
|
||||
x(ARROW, 20)
|
||||
x(FIRSTGUNSPRITE, 21)
|
||||
|
@ -21,7 +21,7 @@ x(AMMOBOX, 31)
|
|||
x(GROWSPRITEICON, 32)
|
||||
x(INVENTORYBOX, 33)
|
||||
y(RRTILE34, 34)
|
||||
y(RRTILE35, 35)
|
||||
y(LIGHTNINGCTRL, 35)
|
||||
x(DESTRUCTO, 36)
|
||||
x(FREEZEAMMO, 37)
|
||||
y(RRJAILDOORSOUND, 38)
|
||||
|
@ -50,8 +50,8 @@ y(RRTILE63, 63)
|
|||
y(RRMINECART, 64)
|
||||
y(RRMINECARTSOUND, 65)
|
||||
y(RRMINECARTINNER, 66)
|
||||
y(RRTILE67, 67)
|
||||
y(RRTILE68, 68)
|
||||
y(DUMMYCTRL, 67)
|
||||
y(SHADEDSECTORCTRL, 68)
|
||||
x(MIRRORBROKE, 70)
|
||||
x(SOUNDFX, 71)
|
||||
x(TECHLIGHT2, 72)
|
||||
|
|
|
@ -45,29 +45,10 @@ int which_palookup = 9;
|
|||
|
||||
void premapcontroller(DDukeActor* ac)
|
||||
{
|
||||
switch (ac->spr.picnum)
|
||||
CallStaticSetup(ac);
|
||||
if (ac->spr.picnum == SECTOREFFECTOR)
|
||||
{
|
||||
case SECTOREFFECTOR:
|
||||
ac->spr.cstat &= ~(CSTAT_SPRITE_BLOCK | CSTAT_SPRITE_BLOCK_HITSCAN | CSTAT_SPRITE_ALIGNMENT_MASK);
|
||||
break;
|
||||
|
||||
case GPSPEED:
|
||||
ac->sector()->extra = ac->spr.lotag;
|
||||
deletesprite(ac);
|
||||
break;
|
||||
|
||||
case CYCLER:
|
||||
if (numcyclers >= MAXCYCLERS)
|
||||
I_Error("Too many cycling sectors.");
|
||||
cyclers[numcyclers].sector = ac->sector();
|
||||
cyclers[numcyclers].lotag = ac->spr.lotag;
|
||||
cyclers[numcyclers].shade1 = ac->spr.shade;
|
||||
cyclers[numcyclers].shade2 = ac->sector()->floorshade;
|
||||
cyclers[numcyclers].hitag = ac->spr.hitag;
|
||||
cyclers[numcyclers].state = (ac->spr.angle == DAngle270);
|
||||
numcyclers++;
|
||||
deletesprite(ac);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -534,48 +534,9 @@ void prelevel_r(int g, TArray<DDukeActor*>& actors)
|
|||
{
|
||||
ps[0].Exit = ac->spr.pos.XY();
|
||||
}
|
||||
else switch (ac->spr.picnum)
|
||||
else
|
||||
{
|
||||
default:
|
||||
premapcontroller(ac);
|
||||
break;
|
||||
|
||||
case NUKEBUTTON:
|
||||
chickenplant = 1;
|
||||
break;
|
||||
|
||||
case RRTILE18:
|
||||
addtorch(ac);
|
||||
deletesprite(ac);
|
||||
break;
|
||||
|
||||
case RRTILE35:
|
||||
addlightning(ac);
|
||||
deletesprite(ac);
|
||||
break;
|
||||
|
||||
case RRTILE68:
|
||||
ac->sector()->shadedsector = 1;
|
||||
deletesprite(ac);
|
||||
break;
|
||||
|
||||
case RRTILE67:
|
||||
ac->spr.cstat |= CSTAT_SPRITE_INVISIBLE;
|
||||
break;
|
||||
|
||||
case SOUNDFX:
|
||||
if (ambientfx >= 64)
|
||||
I_Error("Too many ambient effects");
|
||||
else
|
||||
{
|
||||
ambienthitag[ambientfx] = ac->spr.hitag;
|
||||
ambientlotag[ambientfx] = ac->spr.lotag;
|
||||
ac->spr.detail = ambientfx;
|
||||
ambientfx++;
|
||||
ac->spr.lotag = 0;
|
||||
ac->spr.hitag = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -84,18 +84,6 @@ DEFINE_ACTION_FUNCTION_NATIVE(_Duke, checkcursectnums, duke_checkcursectnums)
|
|||
ACTION_RETURN_POINTER(duke_checkcursectnums(sect));
|
||||
}
|
||||
|
||||
int duke_floorflags(sectortype* sector)
|
||||
{
|
||||
return gs.tileinfo[sector->floorpicnum].flags;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_Duke, floorflags, duke_floorflags)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_POINTER(sect, sectortype);
|
||||
ACTION_RETURN_INT(duke_floorflags(sect));
|
||||
}
|
||||
|
||||
int duke_global_random()
|
||||
{
|
||||
return global_random;
|
||||
|
@ -867,7 +855,7 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukeLevel, operatemasterswitches, operatemastersw
|
|||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(_DukeLevel, operateactivators)//, operateactivators)
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukeLevel, operateactivators, operateactivators)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_INT(lotag);
|
||||
|
@ -876,6 +864,59 @@ DEFINE_ACTION_FUNCTION(_DukeLevel, operateactivators)//, operateactivators)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int duke_floorflags(sectortype* sector)
|
||||
{
|
||||
return gs.tileinfo[sector->floorpicnum].flags;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukeLevel, floorflags, duke_floorflags)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_POINTER(sect, sectortype);
|
||||
ACTION_RETURN_INT(duke_floorflags(sect));
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukeLevel, addcycler, addcycler)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_POINTER(sect, sectortype);
|
||||
PARAM_INT(lotag);
|
||||
PARAM_INT(shade);
|
||||
PARAM_INT(shade2);
|
||||
PARAM_INT(hitag);
|
||||
PARAM_INT(state);
|
||||
addcycler(sect, lotag, shade, shade2, hitag, state);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukeLevel, addtorch, addtorch)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_POINTER(sect, sectortype);
|
||||
PARAM_INT(shade);
|
||||
PARAM_INT(lotag);
|
||||
addtorch(sect, shade, lotag);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukeLevel, addlightning, addlightning)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_POINTER(sect, sectortype);
|
||||
PARAM_INT(shade);
|
||||
addlightning(sect, shade);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukeLevel, addambient, addambient)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_INT(hitag);
|
||||
PARAM_INT(lotag);
|
||||
ACTION_RETURN_INT(addambient(hitag, lotag));
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_FIELD_X(DukeGameInfo, DukeGameInfo, playerfriction);
|
||||
DEFINE_FIELD_X(DukeGameInfo, DukeGameInfo, gravity);
|
||||
DEFINE_FIELD_X(DukeGameInfo, DukeGameInfo, respawnactortime);
|
||||
|
|
|
@ -5,8 +5,10 @@ spawnclasses
|
|||
4 = DukeActivatorLocked
|
||||
5 = DukeSoundController
|
||||
6 = DukeLocator
|
||||
7 = DukeCycler
|
||||
8 = DukeMasterSwitch
|
||||
9 = DukeRespawnController
|
||||
10 = DukeGPSpeed
|
||||
|
||||
1221 = DukeCranePole
|
||||
1222 = DukeCrane
|
||||
|
|
|
@ -5,8 +5,16 @@ spawnclasses
|
|||
4 = DukeActivatorLocked
|
||||
5 = DukeSoundController
|
||||
6 = DukeLocator
|
||||
7 = DukeCycler
|
||||
8 = DukeMasterSwitch
|
||||
9 = DukeRespawnController
|
||||
10 = DukeGPSpeed
|
||||
|
||||
18 = DukeTorchCtrl
|
||||
35 = DukeLightningCtrl
|
||||
68 = DukeShadeCtrl
|
||||
67 = DukeDummyCtrl
|
||||
71 = DukeSoundFX
|
||||
|
||||
1298 = DukeCranePole
|
||||
1299 = DukeCrane
|
||||
|
|
|
@ -53,7 +53,7 @@ class DukeBolt1 : DukeActor
|
|||
|
||||
if (l & 1) self.cstat ^= CSTAT_SPRITE_TRANSLUCENT;
|
||||
|
||||
if (self.spritesetindex == 1 && random(0, 7) == 0 && (Duke.floorflags(sectp) & Duke.TFLAG_ELECTRIC))
|
||||
if (self.spritesetindex == 1 && random(0, 7) == 0 && (dlevel.floorflags(sectp) & Duke.TFLAG_ELECTRIC))
|
||||
self.PlayActorSound(DukeSnd.SHORT_CIRCUIT);
|
||||
|
||||
if (self.spritesetindex & 1)
|
||||
|
@ -132,7 +132,7 @@ class DukeSideBolt1 : DukeBolt1
|
|||
}
|
||||
self.SetSpriteSetImage((self.spritesetindex + 1) % self.GetSpriteSetSize());
|
||||
|
||||
if (random(0, 1) && (Duke.floorflags(sectp) & Duke.TFLAG_ELECTRIC))
|
||||
if (random(0, 1) && (dlevel.floorflags(sectp) & Duke.TFLAG_ELECTRIC))
|
||||
self.PlayActorSound(DukeSnd.SHORT_CIRCUIT);
|
||||
}
|
||||
|
||||
|
|
|
@ -106,3 +106,74 @@ class DukeActivatorLocked : DukeActor
|
|||
*/
|
||||
}
|
||||
|
||||
// Note: StaticSetup is run much earlier than Initialize! This is only meant for things that modify global game state.
|
||||
|
||||
class DukeCycler : DukeActor
|
||||
{
|
||||
override void StaticSetup()
|
||||
{
|
||||
dlevel.AddCycler(self.sector, self.lotag, self.shade, self.sector.floorshade, self.hitag, self.intangle == 1536);
|
||||
self.Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
class DukeGPSpeed : DukeActor
|
||||
{
|
||||
override void StaticSetup()
|
||||
{
|
||||
self.sector.extra = self.lotag;
|
||||
self.Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
// the following ones are only used in RR.
|
||||
class TorchCtrl : DukeActor
|
||||
{
|
||||
override void StaticSetup()
|
||||
{
|
||||
dlevel.addtorch(self.sector, self.sector.floorshade, self.lotag);
|
||||
self.Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
class DukeLightningCtrl : DukeActor
|
||||
{
|
||||
override void StaticSetup()
|
||||
{
|
||||
dlevel.addlightning(self.sector, self.sector.floorshade);
|
||||
self.Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
class DukeShadeCtrl : DukeActor
|
||||
{
|
||||
override void StaticSetup()
|
||||
{
|
||||
self.sector.shadedsector = 1;
|
||||
self.Destroy();
|
||||
}
|
||||
}
|
||||
|
||||
class DukeDummyCtrl : DukeActor
|
||||
{
|
||||
override void StaticSetup()
|
||||
{
|
||||
self.cstat |= CSTAT_SPRITE_INVISIBLE;
|
||||
}
|
||||
}
|
||||
|
||||
class DukeSoundFX : DukeActor
|
||||
{
|
||||
default
|
||||
{
|
||||
statnum STAT_ZOMBIEACTOR;
|
||||
}
|
||||
|
||||
override void StaticSetup()
|
||||
{
|
||||
self.cstat = CSTAT_SPRITE_INVISIBLE;
|
||||
self.detail = dlevel.addambient(self.hitag, self.lotag);
|
||||
self.lotag = self.hitag = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -168,6 +168,7 @@ class DukeActor : CoreActor native
|
|||
native void operatesectors(sectortype sec);
|
||||
|
||||
virtual void BeginPlay() {}
|
||||
virtual void StaticSetup() {}
|
||||
virtual void Initialize() {}
|
||||
virtual void Tick() {}
|
||||
virtual void onHit(DukeActor hitter) { checkhitdefault(hitter); }
|
||||
|
@ -209,6 +210,11 @@ struct DukeLevel
|
|||
native static int check_activator_motion(int lotag);
|
||||
native static void operatemasterswitches(int lotag);
|
||||
native static void operateactivators(int lotag, DukePlayer p);
|
||||
native static int floorflags(sectortype s);
|
||||
native static void AddCycler(sectortype sector, int lotag, int shade, int shade2, int hitag, int state);
|
||||
native static void addtorch(sectortype sector, int shade, int lotag);
|
||||
native static void addlightning(sectortype sector, int shade);
|
||||
native static int addambient(int hitag, int lotag);
|
||||
}
|
||||
|
||||
struct DukeStatIterator
|
||||
|
|
|
@ -97,7 +97,6 @@ struct Duke native
|
|||
native static DukePlayer GetViewPlayer();
|
||||
native static int MaxAmmoAmount(int weap);
|
||||
native static DukePlayer checkcursectnums(sectortype sect);
|
||||
native static int floorflags(sectortype s);
|
||||
native static int global_random();
|
||||
native static int GetSoundFlags(int sound);
|
||||
native static int badguyID(int id);
|
||||
|
|
|
@ -145,6 +145,9 @@ struct sectortype native
|
|||
native uint8 exflags;
|
||||
|
||||
|
||||
// Duke
|
||||
native uint8 shadedsector;
|
||||
|
||||
/*
|
||||
// Game specific extensions. Only export what's really needed.
|
||||
union
|
||||
|
|
Loading…
Reference in a new issue