X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Ft_items.qc;h=cacbfdcea855fe4bd33cf839e8011b65d5f5f0a6;hb=936e07981f6ca4beacadd708ca991895f4f74596;hp=3a7aea729e945ae59ac1c6c6f5e5104b15c2eb47;hpb=58a8c756c67948a1c9e4bce9b7b9f1edcaacec97;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/t_items.qc b/qcsrc/common/t_items.qc index 3a7aea729..cacbfdcea 100644 --- a/qcsrc/common/t_items.qc +++ b/qcsrc/common/t_items.qc @@ -82,6 +82,11 @@ void ItemDraw(entity this) if(this.ItemStatus & ITS_ANIMATE2) this.avelocity = '0 -90 0'; } + + // delay is for blocking item's position for a while; + // it's a workaround for dropped weapons that receive the position + // another time right after they spawn overriding animation position + this.onground_time = time + 0.5; } } else if (autocvar_cl_animate_items) @@ -89,13 +94,15 @@ void ItemDraw(entity this) if(this.ItemStatus & ITS_ANIMATE1) { this.angles += this.avelocity * frametime; - setorigin(this, '0 0 10' + this.oldorigin + '0 0 8' * sin(time * 2)); + float fade_in = bound(0, time - this.onground_time, 1); + setorigin(this, this.oldorigin + fade_in * ('0 0 10' + '0 0 8' * sin((time - this.onground_time) * 2))); } if(this.ItemStatus & ITS_ANIMATE2) { this.angles += this.avelocity * frametime; - setorigin(this, '0 0 8' + this.oldorigin + '0 0 4' * sin(time * 3)); + float fade_in = bound(0, time - this.onground_time, 1); + setorigin(this, this.oldorigin + fade_in * ('0 0 8' + '0 0 4' * sin((time - this.onground_time) * 3))); } } @@ -386,7 +393,7 @@ bool have_pickup_item(entity this) if(autocvar_g_pickup_items == 0) return false; if(g_weaponarena) - if(this.weapons || (this.items & IT_AMMO)) // no item or ammo pickups in weaponarena + if(this.weapons || this.itemdef.instanceOfAmmo) // no item or ammo pickups in weaponarena return false; } return true; @@ -831,7 +838,7 @@ LABEL(pickup) RandomSelection_Init(); IL_EACH(g_items, it.team == this.team, { - if(it.classname != "item_flag_team" && it.classname != "item_kh_key") + if(it.itemdef) // is a registered item { Item_Show(it, -1); RandomSelection_AddEnt(it, it.cnt, 0); @@ -875,7 +882,7 @@ void Item_FindTeam(entity this) RandomSelection_Init(); IL_EACH(g_items, it.team == this.team, { - if(it.classname != "item_flag_team" && it.classname != "item_kh_key") + if(it.itemdef) // is a registered item RandomSelection_AddEnt(it, it.cnt, 0); }); @@ -885,7 +892,7 @@ void Item_FindTeam(entity this) IL_EACH(g_items, it.team == this.team, { - if(it.classname != "item_flag_team" && it.classname != "item_kh_key") + if(it.itemdef) // is a registered item { if(it != e) { @@ -1339,17 +1346,17 @@ spawnfunc(item_armor_big) this.max_armorvalue = g_pickup_armorbig_max; if(!this.pickup_anyway) this.pickup_anyway = g_pickup_armorbig_anyway; - StartItem(this, ITEM_ArmorLarge); + StartItem(this, ITEM_ArmorBig); } -spawnfunc(item_armor_large) +spawnfunc(item_armor_mega) { if(!this.armorvalue) - this.armorvalue = g_pickup_armorlarge; + this.armorvalue = g_pickup_armormega; if(!this.max_armorvalue) - this.max_armorvalue = g_pickup_armorlarge_max; + this.max_armorvalue = g_pickup_armormega_max; if(!this.pickup_anyway) - this.pickup_anyway = g_pickup_armorlarge_anyway; + this.pickup_anyway = g_pickup_armormega_anyway; StartItem(this, ITEM_ArmorMega); } @@ -1375,15 +1382,15 @@ spawnfunc(item_health_medium) StartItem(this, ITEM_HealthMedium); } -spawnfunc(item_health_large) +spawnfunc(item_health_big) { if(!this.max_health) - this.max_health = g_pickup_healthlarge_max; + this.max_health = g_pickup_healthbig_max; if(!this.health) - this.health = g_pickup_healthlarge; + this.health = g_pickup_healthbig; if(!this.pickup_anyway) - this.pickup_anyway = g_pickup_healthlarge_anyway; - StartItem(this, ITEM_HealthLarge); + this.pickup_anyway = g_pickup_healthbig_anyway; + StartItem(this, ITEM_HealthBig); } spawnfunc(item_health_mega) @@ -1399,9 +1406,11 @@ spawnfunc(item_health_mega) // support old misnamed entities spawnfunc(item_armor1) { spawnfunc_item_armor_small(this); } // FIXME: in Quake this is green armor, in Xonotic maps it is an armor shard -spawnfunc(item_armor25) { spawnfunc_item_armor_large(this); } +spawnfunc(item_armor25) { spawnfunc_item_armor_mega(this); } +spawnfunc(item_armor_large) { spawnfunc_item_armor_mega(this); } spawnfunc(item_health1) { spawnfunc_item_health_small(this); } spawnfunc(item_health25) { spawnfunc_item_health_medium(this); } +spawnfunc(item_health_large) { spawnfunc_item_health_big(this); } spawnfunc(item_health100) { spawnfunc_item_health_mega(this); } spawnfunc(item_strength) @@ -1789,6 +1798,7 @@ float GiveItems(entity e, float beginarg, float endarg) }); POSTGIVE_VALUE(e, strength_finished, 1, SND_POWERUP, SND_POWEROFF); POSTGIVE_VALUE(e, invincible_finished, 1, SND_Shield, SND_POWEROFF); + //POSTGIVE_VALUE(e, superweapons_finished, 1, SND_Null, SND_Null); POSTGIVE_VALUE(e, ammo_nails, 0, SND_ITEMPICKUP, SND_Null); POSTGIVE_VALUE(e, ammo_cells, 0, SND_ITEMPICKUP, SND_Null); POSTGIVE_VALUE(e, ammo_plasma, 0, SND_ITEMPICKUP, SND_Null);