mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-13 16:07:55 +00:00
b10ffb5133
- refactored the ModifyDamage interface to be more scripting friendly. In general it should be avoided having to call directly into chained inventory functions because they are very problematic and prone to errors. So this got wrapped into a single handler (on AActor, not AInventory!) which will later make it easier to refactor the parameters of ModifyDamage to work better for scripting and avoid the chaining.
657 lines
13 KiB
Text
657 lines
13 KiB
Text
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
|
|
{
|
|
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();
|
|
|
|
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<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
|
|
{
|
|
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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|