qzdoom-gpl/wadsrc/static/zscript/shared/inventory.txt

658 lines
13 KiB
Text
Raw Normal View History

class Inventory : Actor native
{
native Actor Owner; // Who owns this item? NULL if it's still a pickup.
native int Amount; // Amount of item this instance has
native int MaxAmount; // Max amount of item this instance can have
native int InterHubAmount; // Amount of item that can be kept between hubs or levels
native int RespawnTics; // Tics from pickup time to respawn time
native TextureID Icon; // Icon to show on status bar or HUD
native int DropTime; // Countdown after dropping
native Class<Actor> SpawnPointClass; // For respawning like Heretic's mace
native Class<Actor> PickupFlash; // actor to spawn as pickup flash
native Sound PickupSound;
native bool bPickupGood;
native bool bCreateCopyMoved;
native bool bInitEffectFailed;
Default
{
Inventory.Amount 1;
Inventory.MaxAmount 1;
Inventory.InterHubAmount 1;
Inventory.UseSound "misc/invuse";
Inventory.PickupSound "misc/i_pkup";
Inventory.PickupMessage "$TXT_DEFAULTPICKUPMSG";
}
virtual native bool Use (bool pickup);
virtual native color GetBlend ();
virtual native bool HandlePickup(Inventory item);
virtual native Inventory CreateCopy(Actor other);
// These are regular functions for the item itself.
private native void A_RestoreSpecialDoomThing();
private native void A_RestoreSpecialThing1();
private native void A_RestoreSpecialThing2();
native bool, Actor CallTryPickup(Actor toucher);
States(Actor, Overlay, Weapon, Item)
{
HideDoomish:
TNT1 A 1050;
TNT1 A 0 A_RestoreSpecialPosition;
TNT1 A 1 A_RestoreSpecialDoomThing;
Stop;
HideSpecial:
ACLO E 1400;
ACLO A 0 A_RestoreSpecialPosition;
ACLO A 4 A_RestoreSpecialThing1;
ACLO BABCBCDC 4;
ACLO D 4 A_RestoreSpecialThing2;
Stop;
Held:
TNT1 A -1;
Stop;
HoldAndDestroy:
TNT1 A 1;
Stop;
}
}
class StateProvider : Inventory native
{
- fixed: State labels were resolved in the calling function's context instead of the called function one's. This could cause problems with functions that take states as parameters but use them to set them internally instead of passing them through the A_Jump interface back to the caller, like A_Chase or A_LookEx. This required some quite significant refactoring because the entire state resolution logic had been baked into the compiler which turned out to be a major maintenance problem. Fixed this by adding a new builtin type 'statelabel'. This is an opaque identifier representing a state, with the actual data either directly encoded into the number for single label state or an index into a state information table. The state resolution is now the task of the called function as it should always have remained. Note, that this required giving back the 'action' qualifier to most state jumping functions. - refactored most A_Jump checkers to a two stage setup with a pure checker that returns a boolean and a scripted A_Jump wrapper, for some simpler checks the checker function was entirely omitted and calculated inline in the A_Jump function. It is strongly recommended to use the boolean checkers unless using an inline function invocation in a state as they lead to vastly clearer code and offer more flexibility. - let Min() and Max() use the OP_MIN and OP_MAX opcodes. Although these were present, these function were implemented using some grossly inefficient branching tests. - the DECORATE 'state' cast kludge will now actually call ResolveState because a state label is not a state and needs conversion.
2016-11-14 13:12:27 +00:00
action native state A_JumpIfNoAmmo(statelabel label);
action native void A_CustomPunch(int damage, bool norandom = false, int flags = CPF_USEAMMO, class<Actor> pufftype = "BulletPuff", double range = 0, double lifesteal = 0, int lifestealmax = 0, class<BasicArmorBonus> armorbonustype = "ArmorBonus", sound MeleeSound = 0, sound MissSound = "");
action native void A_FireBullets(double spread_xy, double spread_z, int numbullets, int damageperbullet, class<Actor> pufftype = "BulletPuff", int flags = 1, double range = 0, class<Actor> missile = null, double Spawnheight = 32, double Spawnofs_xy = 0);
action native void A_FireCustomMissile(class<Actor> missiletype, double angle = 0, bool useammo = true, double spawnofs_xy = 0, double spawnheight = 0, int flags = 0, double pitch = 0);
action native void A_RailAttack(int damage, int spawnofs_xy = 0, bool useammo = true, color color1 = 0, color color2 = 0, int flags = 0, double maxdiff = 0, class<Actor> pufftype = "BulletPuff", double spread_xy = 0, double spread_z = 0, double range = 0, int duration = 0, double sparsity = 1.0, double driftspeed = 1.0, class<Actor> spawnclass = "none", double spawnofs_z = 0, int spiraloffset = 270, int limit = 0);
action native void A_WeaponReady(int flags = 0);
action native void A_Lower();
action native void A_Raise();
- fixed: State labels were resolved in the calling function's context instead of the called function one's. This could cause problems with functions that take states as parameters but use them to set them internally instead of passing them through the A_Jump interface back to the caller, like A_Chase or A_LookEx. This required some quite significant refactoring because the entire state resolution logic had been baked into the compiler which turned out to be a major maintenance problem. Fixed this by adding a new builtin type 'statelabel'. This is an opaque identifier representing a state, with the actual data either directly encoded into the number for single label state or an index into a state information table. The state resolution is now the task of the called function as it should always have remained. Note, that this required giving back the 'action' qualifier to most state jumping functions. - refactored most A_Jump checkers to a two stage setup with a pure checker that returns a boolean and a scripted A_Jump wrapper, for some simpler checks the checker function was entirely omitted and calculated inline in the A_Jump function. It is strongly recommended to use the boolean checkers unless using an inline function invocation in a state as they lead to vastly clearer code and offer more flexibility. - let Min() and Max() use the OP_MIN and OP_MAX opcodes. Although these were present, these function were implemented using some grossly inefficient branching tests. - the DECORATE 'state' cast kludge will now actually call ResolveState because a state label is not a state and needs conversion.
2016-11-14 13:12:27 +00:00
action native void A_ReFire(statelabel flash = null);
action native void A_ClearReFire();
action native void A_CheckReload();
- fixed: State labels were resolved in the calling function's context instead of the called function one's. This could cause problems with functions that take states as parameters but use them to set them internally instead of passing them through the A_Jump interface back to the caller, like A_Chase or A_LookEx. This required some quite significant refactoring because the entire state resolution logic had been baked into the compiler which turned out to be a major maintenance problem. Fixed this by adding a new builtin type 'statelabel'. This is an opaque identifier representing a state, with the actual data either directly encoded into the number for single label state or an index into a state information table. The state resolution is now the task of the called function as it should always have remained. Note, that this required giving back the 'action' qualifier to most state jumping functions. - refactored most A_Jump checkers to a two stage setup with a pure checker that returns a boolean and a scripted A_Jump wrapper, for some simpler checks the checker function was entirely omitted and calculated inline in the A_Jump function. It is strongly recommended to use the boolean checkers unless using an inline function invocation in a state as they lead to vastly clearer code and offer more flexibility. - let Min() and Max() use the OP_MIN and OP_MAX opcodes. Although these were present, these function were implemented using some grossly inefficient branching tests. - the DECORATE 'state' cast kludge will now actually call ResolveState because a state label is not a state and needs conversion.
2016-11-14 13:12:27 +00:00
action native void A_GunFlash(statelabel flash = null, int flags = 0);
action native void A_FireAssaultGun();
- fixed: State labels were resolved in the calling function's context instead of the called function one's. This could cause problems with functions that take states as parameters but use them to set them internally instead of passing them through the A_Jump interface back to the caller, like A_Chase or A_LookEx. This required some quite significant refactoring because the entire state resolution logic had been baked into the compiler which turned out to be a major maintenance problem. Fixed this by adding a new builtin type 'statelabel'. This is an opaque identifier representing a state, with the actual data either directly encoded into the number for single label state or an index into a state information table. The state resolution is now the task of the called function as it should always have remained. Note, that this required giving back the 'action' qualifier to most state jumping functions. - refactored most A_Jump checkers to a two stage setup with a pure checker that returns a boolean and a scripted A_Jump wrapper, for some simpler checks the checker function was entirely omitted and calculated inline in the A_Jump function. It is strongly recommended to use the boolean checkers unless using an inline function invocation in a state as they lead to vastly clearer code and offer more flexibility. - let Min() and Max() use the OP_MIN and OP_MAX opcodes. Although these were present, these function were implemented using some grossly inefficient branching tests. - the DECORATE 'state' cast kludge will now actually call ResolveState because a state label is not a state and needs conversion.
2016-11-14 13:12:27 +00:00
action native state A_CheckForReload(int counter, statelabel label, bool dontincrement = false);
action native void A_ResetReloadCounter();
}
class ScoreItem : Inventory native
{
Default
{
Height 10;
+COUNTITEM
Inventory.Amount 1;
+Inventory.ALWAYSPICKUP
}
}
class Ammo : Inventory native
{
native int BackpackAmount;
native int BackpackMaxAmount;
Default
{
+INVENTORY.KEEPDEPLETED
Inventory.PickupSound "misc/ammo_pkup";
}
}
class BackpackItem : Inventory native
{
native bool bDepleted;
}
class Armor : Inventory native
{
Default
{
Inventory.PickupSound "misc/armor_pkup";
}
}
class BasicArmor : Armor native
{
native int AbsorbCount;
native double SavePercent;
native int MaxAbsorb;
native int MaxFullAbsorb;
native int BonusCount;
native Name ArmorType;
native int ActualSaveAmount;
Default
{
+Inventory.KEEPDEPLETED
}
}
class BasicArmorBonus : Armor native
{
native double SavePercent; // The default, for when you don't already have armor
native int MaxSaveAmount;
native int MaxAbsorb;
native int MaxFullAbsorb;
native int SaveAmount;
native int BonusCount;
native int BonusMax;
Default
{
+Inventory.AUTOACTIVATE
+Inventory.ALWAYSPICKUP
Inventory.MaxAmount 0;
Armor.SavePercent 33.335;
}
}
class BasicArmorPickup : Armor native
{
native double SavePercent;
native int MaxAbsorb;
native int MaxFullAbsorb;
native int SaveAmount;
Default
{
+Inventory.AUTOACTIVATE;
Inventory.MaxAmount 0;
}
}
class HexenArmor : Armor native
{
native double Slots[5];
native double SlotsIncrement[4];
Default
{
+Inventory.KEEPDEPLETED
+Inventory.UNDROPPABLE
}
}
class DehackedPickup : Inventory native {}
class FakeInventory : Inventory native
{
native bool Respawnable;
}
class CustomInventory : StateProvider native
{
Default
{
DefaultStateUsage SUF_ACTOR|SUF_OVERLAY|SUF_ITEM;
}
}
class Health : Inventory native
{
native int PrevHealth;
Default
{
Inventory.Amount 1;
Inventory.MaxAmount 0;
Inventory.PickupSound "misc/health_pkup";
}
}
class HealthPickup : Inventory native
{
native int autousemode;
Default
{
Inventory.DefMaxAmount;
+INVENTORY.INVBAR
}
}
class Key : Inventory native
{
native uint8 KeyNumber;
Default
{
+DONTGIB; // Don't disappear due to a crusher
Inventory.InterHubAmount 0;
Inventory.PickupSound "misc/k_pkup";
}
}
class PowerupGiver : Inventory native
{
native Class<Actor> PowerupType;
native int EffectTics; // Non-0 to override the powerup's default tics
native color BlendColor; // Non-0 to override the powerup's default blend
native Name Mode; // Meaning depends on powerup - used for Invulnerability and Invisibility
native double Strength; // Meaning depends on powerup - currently used only by Invisibility
Default
{
Inventory.DefMaxAmount;
+INVENTORY.INVBAR
+INVENTORY.FANCYPICKUPSOUND
Inventory.PickupSound "misc/p_pkup";
}
}
class Powerup : Inventory native
{
native int EffectTics;
native color BlendColor;
native Name Mode; // Meaning depends on powerup - used for Invulnerability and Invisibility
native double Strength; // Meaning depends on powerup - currently used only by Invisibility
}
class PowerInvulnerable : Powerup native
{
Default
{
Powerup.Duration -30;
inventory.icon "SPSHLD0";
}
}
class PowerStrength : Powerup native
{
Default
{
Powerup.Duration 1;
Powerup.Color "ff 00 00", 0.5;
+INVENTORY.HUBPOWER
}
}
class PowerInvisibility : Powerup native
{
Default
{
+SHADOW;
Powerup.Duration -60;
Powerup.Strength 80;
Powerup.Mode "Fuzzy";
}
}
class PowerGhost : PowerInvisibility
{
Default
{
+GHOST;
Powerup.Duration -60;
Powerup.Strength 60;
Powerup.Mode "None";
}
}
class PowerShadow : PowerInvisibility
{
Default
{
+INVENTORY.HUBPOWER
Powerup.Duration -55;
Powerup.Strength 75;
Powerup.Mode "Cumulative";
}
}
class PowerIronFeet : Powerup native
{
Default
{
Powerup.Duration -60;
Powerup.Color "00 ff 00", 0.125;
}
}
class PowerMask : PowerIronFeet native
{
Default
{
Powerup.Duration -80;
Powerup.Color "00 00 00", 0;
+INVENTORY.HUBPOWER
Inventory.Icon "I_MASK";
}
}
class PowerLightAmp : Powerup native
{
Default
{
Powerup.Duration -120;
}
}
class PowerTorch : PowerLightAmp native {}
class PowerFlight : Powerup native
{
Default
{
Powerup.Duration -60;
+INVENTORY.HUBPOWER
}
}
class PowerWeaponLevel2 : Powerup native
{
Default
{
Powerup.Duration -40;
Inventory.Icon "SPINBK0";
+INVENTORY.NOTELEPORTFREEZE
}
}
class PowerSpeed : Powerup native
{
native int SpeedFlags;
Default
{
Powerup.Duration -45;
Speed 1.5;
Inventory.Icon "SPBOOT0";
+INVENTORY.NOTELEPORTFREEZE
}
}
// Player Speed Trail (used by the Speed Powerup) ----------------------------
class PlayerSpeedTrail : Actor
{
Default
{
+NOBLOCKMAP
+NOGRAVITY
Alpha 0.6;
RenderStyle "Translucent";
}
override void Tick()
{
Alpha -= .6 / 8;
if (Alpha <= 0)
{
Destroy ();
}
}
}
class PowerMinotaur : Powerup native
{
Default
{
Powerup.Duration -25;
Inventory.Icon "SPMINO0";
}
}
class PowerTargeter : Powerup native
{
Default
{
Powerup.Duration -160;
+INVENTORY.HUBPOWER
}
States
{
Targeter:
TRGT A -1;
Stop;
TRGT B -1;
Stop;
TRGT C -1;
Stop;
}
}
class PowerFrightener : Powerup native
{
Default
{
Powerup.Duration -60;
}
}
class PowerBuddha : Powerup native
{
Default
{
Powerup.Duration -60;
}
}
class PowerScanner : Powerup native
{
Default
{
Powerup.Duration -80;
+INVENTORY.HUBPOWER
}
}
class PowerTimeFreezer : Powerup native
{
Default
{
Powerup.Duration -12;
}
}
class PowerDamage : Powerup native
{
Default
{
Powerup.Duration -25;
}
}
class PowerProtection : Powerup native
{
Default
{
Powerup.Duration -25;
}
}
class PowerDrain : Powerup native
{
Default
{
Powerup.Duration -60;
}
}
class PowerRegeneration : Powerup native
{
Default
{
Powerup.Duration -120;
Powerup.Strength 5;
}
}
class PowerHighJump : Powerup native {}
class PowerDoubleFiringSpeed : Powerup native {}
class PowerMorph : Powerup native
{
native Class<PlayerPawn> PlayerClass;
native Class<Actor> MorphFlash, UnMorphFlash;
native int MorphStyle;
native PlayerInfo MorphedPlayer;
native bool bInUndoMorph;
Default
{
Powerup.Duration -40;
}
}
class PowerInfiniteAmmo : Powerup native
{
Default
{
Powerup.Duration -30;
}
}
class MapRevealer : Inventory native {}
class PuzzleItem : Inventory native
{
native int PuzzleItemNumber;
Default
{
+NOGRAVITY
+INVENTORY.INVBAR
Inventory.DefMaxAmount;
Inventory.UseSound "PuzzleSuccess";
Inventory.PickupSound "misc/i_pkup";
}
}
class Weapon : StateProvider native
{
2016-11-26 20:39:20 +00:00
enum EFireMode
{
PrimaryFire,
AltFire,
EitherFire
};
native uint WeaponFlags;
native class<Ammo> AmmoType1, AmmoType2; // Types of ammo used by this weapon
native int AmmoGive1, AmmoGive2; // Amount of each ammo to get when picking up weapon
native int MinAmmo1, MinAmmo2; // Minimum ammo needed to switch to this weapon
native int AmmoUse1, AmmoUse2; // How much ammo to use with each shot
native int Kickback;
native float YAdjust; // For viewing the weapon fullscreen (visual only so no need to be a double)
native sound UpSound, ReadySound; // Sounds when coming up and idle
native class<Weapon> SisterWeaponType; // Another weapon to pick up with this one
native class<Actor> ProjectileType; // Projectile used by primary attack
native class<Actor> AltProjectileType; // Projectile used by alternate attack
native int SelectionOrder; // Lower-numbered weapons get picked first
native int MinSelAmmo1, MinSelAmmo2; // Ignore in BestWeapon() if inadequate ammo
native double MoveCombatDist; // Used by bots, but do they *really* need it?
native int ReloadCounter; // For A_CheckForReload
native int BobStyle; // [XA] Bobbing style. Defines type of bobbing (e.g. Normal, Alpha) (visual only so no need to be a double)
native float BobSpeed; // [XA] Bobbing speed. Defines how quickly a weapon bobs.
native float BobRangeX, BobRangeY; // [XA] Bobbing range. Defines how far a weapon bobs in either direction.
native Ammo Ammo1, Ammo2; // In-inventory instance variables
native Weapon SisterWeapon;
native float FOVScale;
native int Crosshair; // 0 to use player's crosshair
native bool GivenAsMorphWeapon;
native bool bAltFire; // Set when this weapon's alternate fire is used.
native readonly bool bDehAmmo;
Default
{
Inventory.PickupSound "misc/w_pkup";
Weapon.DefaultKickback;
Weapon.BobSpeed 1.0;
Weapon.BobRangeX 1.0;
Weapon.BobRangeY 1.0;
+WEAPONSPAWN
DefaultStateUsage SUF_ACTOR|SUF_OVERLAY|SUF_WEAPON;
}
States
{
LightDone:
SHTG E 0 A_Light0;
Stop;
}
2016-11-26 20:39:20 +00:00
native bool CheckAmmo(int fireMode, bool autoSwitch, bool requireAmmo = false, int ammocount = -1);
native bool DepleteAmmo(bool altFire, bool checkEnough = true, int ammouse = -1);
native virtual void EndPowerup();
virtual State GetReadyState ()
{
return FindState('Ready');
}
virtual State GetUpState ()
{
return FindState('Select');
}
virtual State GetDownState ()
{
return FindState('Deselect');
}
virtual State GetAtkState (bool hold)
{
State s = null;
if (hold) s = FindState('Hold');
if (s == null) s = FindState('Fire');
return s;
}
virtual State GetAltAtkState (bool hold)
{
State s = null;
if (hold) s = FindState('AltHold');
if (s == null) s = FindState('AltFire');
return s;
}
native action void A_ZoomFactor(double scale = 1, int flags = 0);
native action void A_SetCrosshair(int xhair);
const ZOOM_INSTANT = 1;
const ZOOM_NOSCALETURNING = 2;
}
class WeaponGiver : Weapon native
{
native double DropAmmoFactor;
Default
{
Weapon.AmmoGive1 -1;
Weapon.AmmoGive2 -1;
}
}
class WeaponHolder : Inventory native
{
native int PieceMask;
native Class<Actor> PieceWeapon;
Default
{
+NOBLOCKMAP
+NOSECTOR
+INVENTORY.UNDROPPABLE
}
}
class WeaponPiece : Inventory native
{
Default
{
+WEAPONSPAWN;
}
}