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 SpawnPointClass; // For respawning like Heretic's mace native Class 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); virtual native bool SpecialDropAction (Actor dropper); virtual native String PickupMessage(); native void GoAwayAndDie(); // 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 { action native state A_JumpIfNoAmmo(statelabel label); action native void A_CustomPunch(int damage, bool norandom = false, int flags = CPF_USEAMMO, class pufftype = "BulletPuff", double range = 0, double lifesteal = 0, int lifestealmax = 0, class armorbonustype = "ArmorBonus", sound MeleeSound = 0, sound MissSound = ""); action native void A_FireBullets(double spread_xy, double spread_z, int numbullets, int damageperbullet, class pufftype = "BulletPuff", int flags = 1, double range = 0, class missile = null, double Spawnheight = 32, double Spawnofs_xy = 0); action native void A_FireCustomMissile(class 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 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 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(); action native void A_ReFire(statelabel flash = null); action native void A_ClearReFire(); action native void A_CheckReload(); action native void A_GunFlash(statelabel flash = null, int flags = 0); action native void A_FireAssaultGun(); 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 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 PlayerClass; native Class 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 { enum EFireMode { PrimaryFire, AltFire, EitherFire }; native uint WeaponFlags; native class 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 SisterWeaponType; // Another weapon to pick up with this one native class ProjectileType; // Projectile used by primary attack native class 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; } 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 PieceWeapon; Default { +NOBLOCKMAP +NOSECTOR +INVENTORY.UNDROPPABLE } } class WeaponPiece : Inventory native { Default { +WEAPONSPAWN; } }