mirror of
https://github.com/DrBeef/Raze.git
synced 2024-11-15 00:41:55 +00:00
- converted the two last non-CON-based active items - RRRA's empty bike and boat.
This commit is contained in:
parent
fd26f7fd2d
commit
6fb263d61b
12 changed files with 121 additions and 108 deletions
|
@ -1072,22 +1072,6 @@ void moveactors_r(void)
|
|||
}
|
||||
else switch(act->spr.picnum)
|
||||
{
|
||||
case EMPTYBIKE:
|
||||
if (!isRRRA()) break;
|
||||
makeitfall(act);
|
||||
getglobalz(act);
|
||||
if (sectp->lotag == 1)
|
||||
{
|
||||
SetActor(act, DVector3(act->spr.pos.X, act->spr.pos.Y, act->floorz + 16));
|
||||
}
|
||||
break;
|
||||
|
||||
case EMPTYBOAT:
|
||||
if (!isRRRA()) break;
|
||||
makeitfall(act);
|
||||
getglobalz(act);
|
||||
break;
|
||||
|
||||
case POWDERKEG:
|
||||
if (!isRRRA() || (sectp->lotag != ST_1_ABOVE_WATER && sectp->lotag != ST_160_FLOOR_TELEPORT))
|
||||
if (act->vel.X != 0)
|
||||
|
|
|
@ -158,30 +158,6 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
case CRYSTALAMMO:
|
||||
t->shade = int(BobVal(PlayClock << 4) * 16);
|
||||
break;
|
||||
case EMPTYBIKE:
|
||||
if (!isRRRA()) goto default_case;
|
||||
kang = (h->spr.pos - viewVec).Angle();
|
||||
k = angletorotation2(h->spr.Angles.Yaw, kang);
|
||||
if (k > 6)
|
||||
{
|
||||
k = 12 - k;
|
||||
t->cstat |= CSTAT_SPRITE_XFLIP;
|
||||
}
|
||||
else t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
||||
t->picnum = EMPTYBIKE + k;
|
||||
break;
|
||||
case EMPTYBOAT:
|
||||
if (!isRRRA()) goto default_case;
|
||||
kang = (h->spr.pos - viewVec).Angle();
|
||||
k = angletorotation2(h->spr.Angles.Yaw, kang);
|
||||
if (k > 6)
|
||||
{
|
||||
k = 12 - k;
|
||||
t->cstat |= CSTAT_SPRITE_XFLIP;
|
||||
}
|
||||
else t->cstat &= ~CSTAT_SPRITE_XFLIP;
|
||||
t->picnum = EMPTYBOAT + k;
|
||||
break;
|
||||
case APLAYER:
|
||||
|
||||
p = h->PlayerIndex();
|
||||
|
@ -367,7 +343,6 @@ void animatesprites_r(tspriteArray& tsprites, const DVector2& viewVec, DAngle vi
|
|||
}
|
||||
[[fallthrough]];
|
||||
default:
|
||||
default_case:
|
||||
|
||||
if (sectp->floorpal)
|
||||
copyfloorpal(t, sectp);
|
||||
|
|
|
@ -177,12 +177,12 @@ const char* GameInterface::GenericCheat(int player, int cheat)
|
|||
return cheatMonsters();
|
||||
|
||||
case CHT_BIKE:
|
||||
OnMotorcycle(&ps[player], nullptr);
|
||||
OnMotorcycle(&ps[player]);
|
||||
ps[player].ammo_amount[MOTORCYCLE_WEAPON] = gs.max_ammo_amount[MOTORCYCLE_WEAPON];
|
||||
return quoteMgr.GetQuote(QUOTE_ON_BIKE);
|
||||
|
||||
case CHT_BOAT:
|
||||
OnBoat(&ps[player], 0);
|
||||
OnBoat(&ps[player]);
|
||||
ps[player].ammo_amount[BOAT_WEAPON] = gs.max_ammo_amount[BOAT_WEAPON];
|
||||
return quoteMgr.GetQuote(QUOTE_ON_BOAT);
|
||||
|
||||
|
|
|
@ -189,9 +189,9 @@ void cacheit_d();
|
|||
void cacheit_r();
|
||||
|
||||
void FTA(int q, player_struct* p);
|
||||
void OnMotorcycle(player_struct *pl, DDukeActor* snum);
|
||||
void OnMotorcycle(player_struct *pl);
|
||||
void OffMotorcycle(player_struct *pl);
|
||||
void OnBoat(player_struct *pl, DDukeActor* snum);
|
||||
void OnBoat(player_struct *pl);
|
||||
void OffBoat(player_struct *pl);
|
||||
|
||||
void cameratext(DDukeActor* i);
|
||||
|
|
|
@ -3871,17 +3871,10 @@ HORIZONLY:
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void OnMotorcycle(player_struct *p, DDukeActor* motosprite)
|
||||
void OnMotorcycle(player_struct *p)
|
||||
{
|
||||
if (!p->OnMotorcycle && !(p->cursector->lotag == 2))
|
||||
if (!p->OnMotorcycle && p->cursector->lotag != ST_2_UNDERWATER)
|
||||
{
|
||||
if (motosprite)
|
||||
{
|
||||
p->GetActor()->spr.pos.XY() = motosprite->spr.pos.XY();
|
||||
p->Angles.setYaw(motosprite->spr.Angles.Yaw, true);
|
||||
p->ammo_amount[MOTORCYCLE_WEAPON] = motosprite->saved_ammo;
|
||||
motosprite->Destroy();
|
||||
}
|
||||
p->over_shoulder_on = 0;
|
||||
p->OnMotorcycle = 1;
|
||||
p->last_full_weapon = p->curr_weapon;
|
||||
|
@ -3945,17 +3938,10 @@ void OffMotorcycle(player_struct *p)
|
|||
//
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void OnBoat(player_struct *p, DDukeActor* boat)
|
||||
void OnBoat(player_struct *p)
|
||||
{
|
||||
if (!p->OnBoat)
|
||||
{
|
||||
if (boat)
|
||||
{
|
||||
p->GetActor()->spr.pos.XY() = boat->spr.pos.XY();
|
||||
p->Angles.setYaw(boat->spr.Angles.Yaw, true);
|
||||
p->ammo_amount[BOAT_WEAPON] = boat->saved_ammo;
|
||||
boat->Destroy();
|
||||
}
|
||||
p->over_shoulder_on = 0;
|
||||
p->OnBoat = 1;
|
||||
p->last_full_weapon = p->curr_weapon;
|
||||
|
|
|
@ -1592,19 +1592,6 @@ void checksectors_r(int snum)
|
|||
if (CallOnUse(neartagsprite, p))
|
||||
return;
|
||||
}
|
||||
else
|
||||
switch (neartagsprite->spr.picnum)
|
||||
{
|
||||
case EMPTYBIKE:
|
||||
if (!isRRRA()) return;
|
||||
OnMotorcycle(p, neartagsprite);
|
||||
return;
|
||||
case EMPTYBOAT:
|
||||
if (!isRRRA()) return;
|
||||
OnBoat(p, neartagsprite);
|
||||
return;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!PlayerInput(snum, SB_OPEN)) return;
|
||||
|
|
|
@ -661,37 +661,6 @@ DDukeActor* spawninit_r(DDukeActor* actj, DDukeActor* act, TArray<DDukeActor*>*
|
|||
spawneffector(act, actors);
|
||||
break;
|
||||
|
||||
case EMPTYBIKE:
|
||||
if (!isRRRA()) goto default_case;
|
||||
if (ud.multimode < 2 && act->spr.pal == 1)
|
||||
{
|
||||
act->spr.scale = DVector2(0, 0);
|
||||
break;
|
||||
}
|
||||
act->spr.pal = 0;
|
||||
act->spr.scale = DVector2(0.28125, 0.28125);
|
||||
act->setClipDistFromTile();
|
||||
act->saved_ammo = 100;
|
||||
act->spr.cstat = CSTAT_SPRITE_BLOCK_ALL;
|
||||
act->spr.lotag = 1;
|
||||
ChangeActorStat(act, STAT_ACTOR);
|
||||
break;
|
||||
case EMPTYBOAT:
|
||||
if (!isRRRA()) goto default_case;
|
||||
if (ud.multimode < 2 && act->spr.pal == 1)
|
||||
{
|
||||
act->spr.scale = DVector2(0, 0);
|
||||
break;
|
||||
}
|
||||
act->spr.pal = 0;
|
||||
act->spr.scale = DVector2(0.5, 0.5);
|
||||
act->setClipDistFromTile();
|
||||
act->saved_ammo = 20;
|
||||
act->spr.cstat = CSTAT_SPRITE_BLOCK_ALL;
|
||||
act->spr.lotag = 1;
|
||||
ChangeActorStat(act, STAT_ACTOR);
|
||||
break;
|
||||
|
||||
case RUBBERCAN:
|
||||
act->spr.extra = 0;
|
||||
[[fallthrough]];
|
||||
|
|
|
@ -1136,7 +1136,19 @@ DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, setbobpos, DukePlayer_setbobpos)
|
|||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, StartMotorcycle, OnMotorcycle)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
OnMotorcycle(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION_NATIVE(_DukePlayer, StartBoat, OnBoat)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_struct);
|
||||
OnBoat(self);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static DDukeActor* duke_firstStat(DukeStatIterator* it, int statnum)
|
||||
|
|
|
@ -51,6 +51,8 @@ spawnclasses
|
|||
8679 = RedneckSnakeRiverSign
|
||||
8448 = RedneckMusicNotes
|
||||
8704 = RedneckJoe9000
|
||||
7220 = RedneckEmptyBike
|
||||
7233 = RedneckEmptyBoat
|
||||
|
||||
7636 = DukeGenericDestructible, "OLDPHOTO0", "OLDPHOTO0BROKE", "VENT_BUST"
|
||||
7638 = DukeGenericDestructible, "OLDPHOTO1", "OLDPHOTO1BROKE", "VENT_BUST"
|
||||
|
@ -66,7 +68,7 @@ spawnclasses
|
|||
7876 = DukeGenericDestructible, "STREETSIGN1", "STREETSIGN1BROKE", "VENT_BUST"
|
||||
7881 = DukeGenericDestructible, "DANGERSIGN", "DANGERSIGNBROKE", "VENT_BUST"
|
||||
7883 = DukeGenericDestructible, "RADIATIONSIGN", "RADIATIONSIGNBROKE", "VENT_BUST"
|
||||
7879 = DukeGenericDamagingDestructible, "DIABLOHWAY", "DIABLOHWAYBROKE", "SIGNHIT"
|
||||
7879 = DukeGenericDestructible, "DIABLOHWAY", "DIABLOHWAYBROKE", "SIGNHIT", damaging
|
||||
7694 = DukeGenericDestructible, "BANKELPESO", "BANKELPESOBROKE", "WOODBREK"
|
||||
7700 = DukeGenericDestructible, "SHERIFFSIGN", "SHERIFFSIGNBROKE", "WOODBREK"
|
||||
7702 = DukeGenericDestructible, "STORESIGN", "STORESIGNBROKE", "WOODBREK"
|
||||
|
|
|
@ -102,6 +102,7 @@ version "4.10"
|
|||
|
||||
|
||||
#include "zscript/games/duke/actors/redneckmisc.zs"
|
||||
#include "zscript/games/duke/actors/emptybike.zs"
|
||||
#include "zscript/games/duke/actors/rrteleport.zs"
|
||||
#include "zscript/games/duke/actors/bowling.zs"
|
||||
#include "zscript/games/duke/actors/rabbitspawner.zs"
|
||||
|
|
95
wadsrc/static/zscript/games/duke/actors/emptybike.zs
Normal file
95
wadsrc/static/zscript/games/duke/actors/emptybike.zs
Normal file
|
@ -0,0 +1,95 @@
|
|||
|
||||
class RedneckEmptyBike : DukeActor
|
||||
{
|
||||
default
|
||||
{
|
||||
pic "EMPTYBIKE";
|
||||
scaleX 0.28125;
|
||||
scaleY 0.28125;
|
||||
lotag 1;
|
||||
statnum STAT_ACTOR;
|
||||
}
|
||||
|
||||
override void Initialize()
|
||||
{
|
||||
if (ud.multimode < 2 && self.pal == 1)
|
||||
{
|
||||
self.scale = (0, 0);
|
||||
self.ChangeStat(STAT_MISC);
|
||||
return;
|
||||
}
|
||||
self.pal = 0;
|
||||
self.setClipDistFromTile();
|
||||
self.saved_ammo = 100;
|
||||
self.cstat = CSTAT_SPRITE_BLOCK_ALL;
|
||||
}
|
||||
|
||||
override void Tick()
|
||||
{
|
||||
self.makeitfall();
|
||||
self.getglobalz();
|
||||
if (self.sector.lotag == ST_1_ABOVE_WATER)
|
||||
{
|
||||
self.setPosition((self.pos.XY, self.floorz + 16));
|
||||
}
|
||||
}
|
||||
|
||||
override bool OnUse(DukePlayer p)
|
||||
{
|
||||
if (!p.OnMotorcycle && p.cursector.lotag != ST_2_UNDERWATER)
|
||||
{
|
||||
p.actor.pos.XY = self.pos.XY;
|
||||
p.SetTargetAngle(self.angle, true);
|
||||
p.ammo_amount[RRWpn.MOTORCYCLE_WEAPON] = self.saved_ammo;
|
||||
self.Destroy();
|
||||
p.StartMotorcycle();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
class RedneckEmptyBoat : DukeActor
|
||||
{
|
||||
default
|
||||
{
|
||||
pic "EMPTYBOAT";
|
||||
scaleX 0.5;
|
||||
scaleY 0.5;
|
||||
lotag 1;
|
||||
statnum STAT_ACTOR;
|
||||
}
|
||||
|
||||
override void Initialize()
|
||||
{
|
||||
if (ud.multimode < 2 && self.pal == 1)
|
||||
{
|
||||
self.scale = (0, 0);
|
||||
self.ChangeStat(STAT_MISC);
|
||||
return;
|
||||
}
|
||||
self.pal = 0;
|
||||
self.setClipDistFromTile();
|
||||
self.saved_ammo = 20;
|
||||
self.cstat = CSTAT_SPRITE_BLOCK_ALL;
|
||||
}
|
||||
|
||||
|
||||
override void Tick()
|
||||
{
|
||||
self.makeitfall();
|
||||
self.getglobalz();
|
||||
}
|
||||
|
||||
override bool OnUse(DukePlayer p)
|
||||
{
|
||||
if (!p.OnBoat)
|
||||
{
|
||||
p.actor.pos.XY = self.pos.XY;
|
||||
p.SetTargetAngle(self.angle, true);
|
||||
p.ammo_amount[RRWpn.BOAT_WEAPON] = self.saved_ammo;
|
||||
self.Destroy();
|
||||
p.StartBoat();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
|
@ -361,6 +361,8 @@ struct DukePlayer native
|
|||
native bool hitablockingwall();
|
||||
native double getPitchWithView();
|
||||
native void setbobpos();
|
||||
native void StartMotorcycle();
|
||||
native void StartBoat();
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue