X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fitems%2Fitem.qh;h=0db0d0beafd8f54e2ff7a0e9fa00bbf097551fc9;hb=7bcb3a89b3271e018da4d92437dc5ba125ea8698;hp=354bed2ba74ed2e24498a9f62c1a2d18c20a5ca6;hpb=1bc3ab0285f65c7ed0c75cbba00da2460921c973;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/items/item.qh b/qcsrc/common/items/item.qh index 354bed2ba..0db0d0bea 100644 --- a/qcsrc/common/items/item.qh +++ b/qcsrc/common/items/item.qh @@ -1,26 +1,60 @@ #ifndef GAMEITEM_H #define GAMEITEM_H -#include "../oo.qh" + +const int IT_UNLIMITED_WEAPON_AMMO = 1; // when this bit is set, using a weapon does not reduce ammo. Checkpoints can give this powerup. +const int IT_UNLIMITED_SUPERWEAPONS = 2; // when this bit is set, superweapons don't expire. Checkpoints can give this powerup. +const int IT_CTF_SHIELDED = 4; // set for the flag shield +const int IT_USING_JETPACK = 8; // confirmation that button is pressed +const int IT_JETPACK = 16; // actual item +const int IT_FUEL_REGEN = 32; // fuel regeneration trigger +// where is 64... ? +const int IT_FUEL = 128; +// -Wdouble-declaration +#define IT_SHELLS 256 +// -Wdouble-declaration +#define IT_NAILS 512 +// -Wdouble-declaration +#define IT_ROCKETS 1024 +// -Wdouble-declaration +#define IT_CELLS 2048 +const int IT_SUPERWEAPON = 4096; +const int IT_STRENGTH = 8192; +const int IT_INVINCIBLE = 16384; +const int IT_HEALTH = 32768; +const int IT_PLASMA = 65536; + +// shared value space (union): + // for items: + // -Wdouble-declaration + #define IT_KEY1 131072 + // -Wdouble-declaration + #define IT_KEY2 262144 +// end + +const int IT_5HP = 524288; +const int IT_25HP = 1048576; +const int IT_ARMOR_SHARD = 2097152; +const int IT_ARMOR = 4194304; + +// item masks +const int IT_AMMO = 3968; // IT_FUEL | IT_SHELLS | IT_NAILS | IT_ROCKETS | IT_CELLS | IT_PLASMA; +const int IT_PICKUPMASK = 51; // IT_FUEL_REGEN | IT_JETPACK | IT_UNLIMITED_AMMO; // strength and invincible are handled separately +const int IT_UNLIMITED_AMMO = 3; // IT_UNLIMITED_SUPERWEAPONS | IT_UNLIMITED_WEAPON_AMMO; + #define ITEM_HANDLE(signal, ...) __Item_Send_##signal(__VA_ARGS__) +/** If you register a new item, make sure to add it to all.inc */ CLASS(GameItem, Object) ATTRIB(GameItem, m_id, int, 0) - METHOD(GameItem, show, void(entity this)) - void GameItem_show(entity this) { print("A game item\n"); } - void ITEM_HANDLE(Show, entity this) { this.show(this); } + ATTRIB(GameItem, m_name, string, string_null) + ATTRIB(GameItem, m_icon, string, string_null) + ATTRIB(GameItem, m_color, vector, '1 1 1') + ATTRIB(GameItem, m_waypoint, string, string_null) + ATTRIB(GameItem, m_waypointblink, int, 1) + METHOD(GameItem, display, void(GameItem this, void(string name, string icon) returns)) { + returns(this.m_name, this.m_icon ? sprintf("/gfx/hud/%s/%s", cvar_string("menu_skin"), this.m_icon) : string_null); + } + METHOD(GameItem, show, void(GameItem this)) { LOG_INFO("A game item\n"); } + void ITEM_HANDLE(Show, GameItem this) { this.show(this); } ENDCLASS(GameItem) - -int ITEM_COUNT; -/** If you register a new item, make sure to add it to all.inc */ -#define REGISTER_ITEM(id, class, body) \ - entity ITEM_##id; \ - void RegisterItems_##id() { \ - const entity this = NEW(class); \ - ITEM_##id = this; \ - this.m_id = ITEM_COUNT; \ - ITEMS[ITEM_COUNT++] = this; \ - body \ - } \ - ACCUMULATE_FUNCTION(RegisterItems, RegisterItems_##id) - #endif