mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-25 05:21:02 +00:00
9948189193
- made ModifyDamage calls iterative instead of recursive. With going through the VM they'd be too costly otherwise. - small optimization: Detect empty VM functions right when entering the VM and shortcut them. This is to reduce the overhead of virtual placeholders, which in a few cases (e.g. CanCollideWith and ModifyDamage) can be called quite frequently.
117 lines
4.6 KiB
Text
117 lines
4.6 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);
|
|
virtual native Inventory CreateTossable();
|
|
virtual native bool SpecialDropAction (Actor dropper);
|
|
virtual native String PickupMessage();
|
|
virtual native bool ShouldStay();
|
|
virtual native void DoEffect();
|
|
virtual native void PlayPickupSound(Actor user);
|
|
virtual native void AttachToOwner(Actor user);
|
|
virtual native void DetachFromOwner();
|
|
|
|
virtual double GetSpeedFactor() { return 1; }
|
|
virtual bool GetNoTeleportFreeze() { return false; }
|
|
virtual void ModifyDamage(int damage, Name damageType, out int newdamage, bool passive) {}
|
|
|
|
native void GoAwayAndDie();
|
|
native void BecomeItem();
|
|
native void BecomePickup();
|
|
|
|
// These are regular functions for the item itself.
|
|
private native void A_RestoreSpecialDoomThing();
|
|
private native void A_RestoreSpecialThing1();
|
|
private native void A_RestoreSpecialThing2();
|
|
|
|
// In this case the caller function is more than a simple wrapper around the virtual method and
|
|
// is what must be actually called to pick up an item.
|
|
virtual protected native bool TryPickup(in out Actor toucher);
|
|
virtual protected native bool TryPickupRestricted(in out Actor toucher);
|
|
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_FireProjectile(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 state A_CheckForReload(int counter, statelabel label, bool dontincrement = false);
|
|
action native void A_ResetReloadCounter();
|
|
}
|
|
|
|
class DehackedPickup : Inventory native
|
|
{
|
|
}
|
|
|
|
class FakeInventory : Inventory native
|
|
{
|
|
native bool Respawnable;
|
|
}
|
|
|
|
class CustomInventory : StateProvider native
|
|
{
|
|
Default
|
|
{
|
|
DefaultStateUsage SUF_ACTOR|SUF_OVERLAY|SUF_ITEM;
|
|
}
|
|
}
|