From 22c27abf0688a2dfb3fa85d1f5bc6e6e397060e8 Mon Sep 17 00:00:00 2001 From: Rykka Date: Thu, 7 Apr 2022 03:53:43 -0600 Subject: [PATCH 01/20] Finishes Serdy's Gun PR stuff Uzi uses new sprite + tilts now. Sec pistols use new sprite Energy Gun uses new sprite. C20r uses new sprite. L6 SAW uses new sprite. Ion Rifle uses new sprite. Z8 Bulldog uses new sprite. WT-550 uses new sprite. Resolves https://github.com/CHOMPStation2/CHOMPStation2/issues/3068 Serdy will add Stetchkin, PPK + PPK Light later. --- code/modules/projectiles/guns/energy.dm | 3 +- code/modules/projectiles/guns/energy/laser.dm | 2 + .../projectiles/guns/energy/nuclear.dm | 1 + code/modules/projectiles/guns/energy/phase.dm | 1 + code/modules/projectiles/guns/energy/pulse.dm | 1 + .../projectiles/guns/energy/special.dm | 3 ++ code/modules/projectiles/guns/energy/stun.dm | 4 ++ .../projectiles/guns/energy/temperature.dm | 1 + .../projectiles/guns/projectile/automatic.dm | 39 ++++++++++++++++++ .../projectiles/guns/projectile/pistol.dm | 13 +++--- icons/obj/64x32guns_ch.dmi | Bin 73336 -> 73340 bytes 11 files changed, 61 insertions(+), 7 deletions(-) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 74dc34a72c..b869a7c6b5 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -1,7 +1,8 @@ /obj/item/weapon/gun/energy name = "energy gun" desc = "A basic energy-based gun." - icon_state = "energy" + icon = 'icons/obj/gun_ch.dmi' // CHOMPEdit: Gun Sprites + icon_state = "energystun" // CHOMPEdit: Gun Sprites fire_sound_text = "laser blast" var/obj/item/weapon/cell/power_supply //What type of power cell this uses diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index a94a07c225..b49c68e050 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -191,6 +191,8 @@ desc = "The HI DMR 9E is an older design of Hephaestus Industries. A designated marksman rifle capable of shooting powerful \ ionized beams, this is a weapon to kill from a distance." description_fluff = "The leading arms producer in the SCG, Hephaestus typically only uses its 'top level' branding for its military-grade equipment used by armed forces across human space." + icon = 'icons/obj/64x32guns_ch.dmi' // CHOMPEdit: Gun Sprites + icon_expected_width = 64 // CHOMPEdit: Gun Sprites icon_state = "sniper" item_state = "sniper" item_state_slots = list(slot_r_hand_str = "lsniper", slot_l_hand_str = "lsniper") diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm index ed89d457d1..06c96b1acc 100644 --- a/code/modules/projectiles/guns/energy/nuclear.dm +++ b/code/modules/projectiles/guns/energy/nuclear.dm @@ -5,6 +5,7 @@ name = "energy gun" desc = "Another bestseller of Lawson Arms, the LAEP80 Thor is a versatile energy based pistol, capable of switching between low and high capacity projectile settings. In other words: Stun or Kill." description_fluff = "Lawson Arms is Hephaestus Industries’ main personal-energy-weapon branding, often sold alongside MarsTech projectile weapons to security and law enforcement agencies." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites icon_state = "egunstun" item_state = null //so the human update icon uses the icon_state instead. fire_delay = 8 diff --git a/code/modules/projectiles/guns/energy/phase.dm b/code/modules/projectiles/guns/energy/phase.dm index 4347acb6e7..179355a167 100644 --- a/code/modules/projectiles/guns/energy/phase.dm +++ b/code/modules/projectiles/guns/energy/phase.dm @@ -5,6 +5,7 @@ name = "phase carbine" desc = "The RayZar EW26 Artemis is a downsized energy weapon, specifically designed for use against wildlife. This one has a safety interlock that prevents firing while in proximity to the facility." description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist energy weapons of various types and quality primarily for the civilian market." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites icon_state = "phasecarbine" item_state = "phasecarbine" wielded_item_state = "phasecarbine-wielded" diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index 5ae7824c28..34ba8b345e 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -1,6 +1,7 @@ /obj/item/weapon/gun/energy/pulse_rifle name = "pulse rifle" desc = "A weapon that uses advanced pulse-based beam generation technology to emit powerful laser blasts. Because of its complexity and cost, it is rarely seen in use except by specialists." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites icon_state = "pulse" item_state = null //so the human update icon uses the icon_state instead. slot_flags = SLOT_BELT|SLOT_BACK diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index d59a13c651..c2354c45bc 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -2,8 +2,10 @@ name = "ion rifle" desc = "The RayZar Mk60 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. Not the best of its type." description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist energy weapons of various types and quality primarily for the civilian market." + icon = 'icons/obj/64x32guns_ch.dmi' // CHOMPEdit: Gun Sprites icon_state = "ionrifle" item_state = "ionrifle" + icon_expected_width = 64 // CHOMPEdit: Gun Sprites wielded_item_state = "ionrifle-wielded" origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4) w_class = ITEMSIZE_HUGE //CHOMP Edit. @@ -20,6 +22,7 @@ /obj/item/weapon/gun/energy/ionrifle/pistol name = "ion pistol" desc = "The RayZar Mk63 EW Pan is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. This model sacrifices capacity for portability." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites icon_state = "ionpistol" item_state = null w_class = ITEMSIZE_NORMAL diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm index 8f2485b2a3..f33a3506bf 100644 --- a/code/modules/projectiles/guns/energy/stun.dm +++ b/code/modules/projectiles/guns/energy/stun.dm @@ -6,6 +6,7 @@ desc = "The NT Mk30 NL is a small gun used for non-lethal takedowns. Produced by NT, it's actually a licensed version of a W-T RayZar design." description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist \ energy weapons of various types and quality primarily for the civilian market." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites icon_state = "taser" item_state = null //so the human update icon uses the icon_state instead. projectile_type = /obj/item/projectile/beam/stun @@ -44,6 +45,7 @@ /obj/item/weapon/gun/energy/crossbow name = "mini energy-crossbow" desc = "A weapon favored by many mercenary stealth specialists." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites icon_state = "crossbow" w_class = ITEMSIZE_SMALL item_state = "crossbow" @@ -79,6 +81,7 @@ desc = "The RayZar MA21 Selkie is a weapon that uses a laser pulse to ionise the local atmosphere, creating a disorienting pulse of plasma and deafening shockwave as the wave expands." description_fluff = "RayZar is Ward-Takahashi’s main consumer weapons brand, known for producing and licensing a wide variety of specialist energy weapons of various types and quality primarily for the civilian market. \ Less well known are RayZar's limited-production experimental projects, often in the form of less-lethal weapon solutions." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites icon_state = "plasma_stun" item_state = "plasma_stun" origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_POWER = 3) @@ -97,6 +100,7 @@ often sold alongside MarsTech projectile weapons to security and law enforcement agencies. \ The Aktzin's capsule-based stun ammunition is a closely guarded Hephaestus Industries patent, \ and the company has been particularly litigious towards any attempted imitators." + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites icon_state = "stunrevolver" item_state = "stunrevolver" origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm index 54d1eaae33..efb8e9da6b 100644 --- a/code/modules/projectiles/guns/energy/temperature.dm +++ b/code/modules/projectiles/guns/energy/temperature.dm @@ -1,5 +1,6 @@ /obj/item/weapon/gun/energy/temperature name = "temperature gun" + icon = 'icons/obj/gun.dmi' // CHOMPEdit: Gun Sprites icon_state = "freezegun" desc = "A gun that can add or remove heat from entities it hits. In other words, it can fire 'cold', and 'hot' beams." charge_cost = 240 diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 970705d5d6..1a78732bac 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -43,6 +43,8 @@ name = "submachine gun" desc = "The C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. It has 'Scarborough Arms - Per falcis, per pravitas', inscribed on the stock. Uses 10mm rounds." description_fluff = "The C-20r is produced by Scarborough Arms, a specialist high-end weapons manufacturer based out of Titan, Sol. Scarborough has resisted numerous efforts by Trans-Stellars to acquire the brand since its founding in 2511, and has gained a dedicated following among a certain flavor of private operative." + icon = 'icons/obj/64x32guns_ch.dmi' + icon_expected_width = 64 icon_state = "c20r" item_state = "c20r" w_class = ITEMSIZE_NORMAL @@ -110,6 +112,8 @@ /obj/item/weapon/gun/projectile/automatic/wt550 name = "machine pistol" desc = "The WT550 Saber is a cheap self-defense weapon mass-produced by Ward-Takahashi for paramilitary and private use. Uses 9mm rounds." + icon = 'icons/obj/64x32guns_ch.dmi' + icon_expected_width = 64 icon_state = "wt550" item_state = "wt550" w_class = ITEMSIZE_NORMAL @@ -137,6 +141,8 @@ description_fluff = "Zendai Foundries was a well-respected mid-sized arms company that operated until 2508, when it was acquired by Hephaestus Industries. \ Plans to integrate the brand into wider corporate operations were brought to an abrupt halt by the SolGov-Hegemony war, and the company was left by the wayside. \ Hephaestus still produces replacement parts for many of Zendai's most popular weapons, including the Z8 Bulldog, and a great detail remain in service." + icon = 'icons/obj/64x32guns_ch.dmi' + icon_expected_width = 64 icon_state = "carbine" // This isn't a carbine. :T item_state = "z8carbine" wielded_item_state = "z8carbine-wielded" @@ -211,6 +217,8 @@ name = "light machine gun" desc = "A rather sturdily made L6 SAW with a reassuringly ergonomic pistol grip. 'Hephaestus Industries' is engraved on the reciever. Uses 5.45mm rounds. It's also compatible with magazines from STS-35 assault rifles." description_fluff = "The leading arms producer in the SCG, Hephaestus typically only uses its 'top level' branding for its military-grade equipment used by professional armed forces across human space." + icon = 'icons/obj/64x32guns_ch.dmi' + icon_expected_width = 64 icon_state = "l6closed100" item_state = "l6closed" wielded_item_state = "genericLMG-wielded" @@ -333,6 +341,8 @@ description_fluff = "Budget-grade weapons for the budget-grade consumer! Hephaestus’ low-end brand of cheaply made, low-maintenance personal defense weapons for those who just need a handgun with absolutely no frills. \ Early ProTek weapons were notoriously unsafe and unreliable, though more recent designs have improved somewhat - they still aren’t very good. \ Though sold for a pittance, the profit margin is too irresistible for Hephaestus to discontinue the brand." + icon = 'icons/obj/64x32guns_ch.dmi' + icon_expected_width = 64 icon_state = "mini-uzi" w_class = ITEMSIZE_NORMAL load_method = MAGAZINE @@ -353,6 +363,35 @@ icon_state = "mini-uzi" else icon_state = "mini-uzi-empty" + +// CHOMPEdit: Uzi tilting +/obj/item/weapon/gun/projectile/automatic/mini_uzi/Initialize() + . = ..() + if(is64x32) + update_transform() + +/obj/item/weapon/gun/projectile/automatic/mini_uzi/equipped() + . = ..() + is_picked_up = TRUE + update_transform() + +/obj/item/weapon/gun/projectile/automatic/mini_uzi/pickup() + . = ..() + is_picked_up = TRUE + update_transform() + +/obj/item/weapon/gun/projectile/automatic/mini_uzi/dropped() + . = ..() + is_picked_up = FALSE + update_transform() + +/obj/item/weapon/gun/projectile/automatic/mini_uzi/update_transform() + . = ..() + if(is64x32) + if(is_picked_up) + transform = transform.Turn(-45) + transform = transform.Translate(-16,0) +// CHOMPEdit end: Uzi tilting /obj/item/weapon/gun/projectile/automatic/p90 name = "personal defense weapon" diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index e8ab7e5c2d..c9f6b2887a 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -81,7 +81,8 @@ desc = "The MT Mk58 is a cheap, ubiquitous sidearm, produced by MarsTech. Found pretty much everywhere humans are. Uses .45 rounds." description_fluff = "The leading civilian-sector high-quality small arms brand of Hephaestus Industries, \ MarsTech has been the provider of choice for law enforcement and security forces for over 300 years." - icon_state = "secgun" + icon = 'icons/obj/gun_ch.dmi' + icon_state = "secguncomp" magazine_type = /obj/item/ammo_magazine/m45/rubber allowed_magazines = list(/obj/item/ammo_magazine/m45) projectile_type = /obj/item/projectile/bullet/pistol/medium @@ -93,9 +94,9 @@ /obj/item/weapon/gun/projectile/sec/update_icon() ..() if(ammo_magazine) - icon_state = "secgun" + icon_state = "secguncomp" else - icon_state = "secgun-e" + icon_state = "secguncomp-e" /obj/item/weapon/gun/projectile/sec/flash magazine_type = /obj/item/ammo_magazine/m45/flash @@ -104,14 +105,14 @@ /obj/item/weapon/gun/projectile/sec/wood name = "custom .45 pistol" desc = "The MT Mk58 is a cheap, ubiquitous sidearm, produced by MarsTech. This one has a sweet wooden grip. Uses .45 rounds." - icon_state = "secgunb" + icon_state = "secgundark" /obj/item/weapon/gun/projectile/sec/wood/update_icon() ..() if(ammo_magazine) - icon_state = "secgunb" + icon_state = "secgundark" else - icon_state = "secgunb-e" + icon_state = "secgundark-e" /* * Silenced Pistol diff --git a/icons/obj/64x32guns_ch.dmi b/icons/obj/64x32guns_ch.dmi index 783c5d62c89bf55c98fa2462c22cd8f9681257b4..84aec5091610191805942b3d5bbf0c09da5f0f31 100644 GIT binary patch delta 1055 zcmV+)1mOGlyafEb1dt?u{CZSabVOxyV{&P5bZKvH004NLwVBOs+c*@3*Y;Bg?bZ$? zS&Ev4H${pfiw4DPx*X6FV-xxzLDDwtr=NwWaop757hnc~gCO{Lt}n@Z`1d*a`tAGE zbMpA(X?~E_DLo|Xq_|7xv!iPKE?Fn{#eBAtYP<8vI$7m&=Y^Ml$vXMe7n%4ppEb(5 zWSwO5*^3pu9RI$8mXcr_1R*Ve03GMus$>-TR@psafRYj3D(xu;6#dD_hcu%cSB#J8 z1Om;2G!{Wwnj)@>kM2PlTQaqrsofAO=Cek2;*_kD)nc_+Emqgf{?3yv7kYaL-o zuCkZg{f(*nmII37Xb1z8x?0$c8aPOtWnzK5Oek=e2?Z`Qp*KYHE4z5x>>a1M)%2)_ zdMBNiaeuy`OSA894CI$fob;|L7r*_=?(*ONcL`vH>Tb_}w}*@J{UW_v{TH7%u}OV7 zQ-BI{ra(1j;&tC!3}04VVcNj+`;D#2EuhoH3xp83Rg0wUGnv18wBM zdO#aFp!~Iekps$J8#$odwUI+yu+GyPF8<2>i$!tWVwp4LB{&6*T+X;J42vHL>pZo~ z_>y^@Iov)3Zkd5j3Mj}ckf1{Y2|6K=pz{M6&&UnRfQ`Y3F^?KqQg9;)3T^~J!Hpm& zxDkvCdN9>}mV<@vMRbG#N=ILUt~mO#OiAUBASnHR0LD9H1mi_Aa`A~ja`8-hHK^tO ztS|_d5NCt~X^$A$$Bp3a4O;c*4O(_6Qg2;vPejrz6BSx;!+nyi7|Ai4s54HjQKzKMnL73BoLDkt7 z6{8vpyu+HdsK~=v3*O9H@(i-I`W$}|*jjym7AS+Q)o1c_Alw0*Lxek^lZdOWFruX# z$|SJFsjM1WeV`nQ9$2(8k=3S0Q3aay#<(4V(8y^cn_fFbR^eVd1s;i@+N;>{YRbzE zu{fWX8*q`}^Kt{u&OR?Uw=NON%RV$)grE7$%A*>Zw<_^Ft8!6ZH+lD#<#Y1w`7wD7 Z{P8sZ2fp@)-z0RoD}yBjw0+j#& delta 1051 zcmV+$1myetyaf2X1dt?u_N*#-o^zKii(AnC+Uqr9I_r;|!H;*_kD#xCAAd&gHQ3`CPfY^5u@$#Q=hwle)pj`Bw!oGHo`?AqaR&&`JFcStGIb&dnGX|76V?c>B29$_uBRkv&+Q^Re zfHty2`D-J8JCwaPvO~FRBfGd@nJw&CQC<0eKFeRV$)Gkk2lZUWxGxNg9}3HCVdwEh z^EUH-%>*tqkSXY%q972b0~W8JK1-q9F`WI{KnmU=CD&4}$U!V7yCzdN5ulJr|$)Jr~cURh^pe&kBQZ zA#p}Hkamxe-CPfjZ_`$P-=?Kw+q25;wBPQ#=V<7G{DsM{nEZ{&pFI4}xN0pMFUxrD zfdd27liw+a72|ywIIKu}=Qmb-q#RjX!ysbte>!{$3zm0bQ{tCZN1L5HS1z}DT232RBuNYNX z;2qY~`HDQB)!^lCT74!D2*Mq}Nkq5ImpGj@$oT=t>qEc{F-RvuMXy;X_dTNSh7w#mEqET5Ba&yUIDkEiJg VA8Z?ml>^bcbAu@aw Date: Thu, 7 Apr 2022 04:03:20 -0600 Subject: [PATCH 02/20] I forgot two vars --- code/modules/projectiles/guns/projectile/automatic.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 1a78732bac..1000047bbd 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -351,6 +351,8 @@ magazine_type = /obj/item/ammo_magazine/m45uzi allowed_magazines = list(/obj/item/ammo_magazine/m45uzi) move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 + var/is64x32 = TRUE + var/is_picked_up = FALSE firemodes = list( list(mode_name="semiauto", burst=1, fire_delay=0), From 7d458af520b6e8dbbdaa1b3ccaa1c09b7d3025d7 Mon Sep 17 00:00:00 2001 From: Pat Warclaw Date: Fri, 8 Apr 2022 03:18:03 -0600 Subject: [PATCH 03/20] Renables Werebeast race. As stated above, currently admin spawn only but can be customized and can be whitelisted in the future if necessary. --- .../living/carbon/human/species/station/station_special_vr.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm index 5e099d6dce..a681f9b421 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_vr.dm @@ -443,7 +443,7 @@ catalogue_data = list(/datum/category_item/catalogue/fauna/vulpkanin) - spawn_flags = SPECIES_IS_RESTRICTED //SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE CHOMPedit: disabled forever + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE//Whitelisted as restricted is broken. ChompEdit;renable appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_COLOR | HAS_EYE_COLOR flesh_color = "#AFA59E" From 114dbb73a3bda48241908dc0cdbbdac0a59f9872 Mon Sep 17 00:00:00 2001 From: Ocelot Date: Fri, 8 Apr 2022 07:08:39 -0400 Subject: [PATCH 04/20] more gun tweaks added nonlethal magazines, magazines that were missing, changed a few things, and added the Colt SAA. --- .../projectiles/ammunition/zz_autolathe_ch.dm | 62 ++++++++++ .../projectiles/ammunition/zz_magazines_ch.dm | 111 ++++++++++++++++-- .../projectiles/ammunition/zz_rounds_ch.dm | 48 +++++++- .../projectiles/guns/energy/laser_ch.dm | 19 ++- .../guns/projectile/zz_ballistics_ch.dm | 32 +++-- .../projectiles/projectile/beams_ch.dm | 7 +- .../projectiles/projectile/bullets_ch.dm | 103 +++++++++++++++- .../projectiles/projectile/energy_ch.dm | 17 ++- icons/obj/ammo_ch.dmi | Bin 3347 -> 4095 bytes icons/obj/gun_ch.dmi | Bin 21054 -> 21587 bytes sound/weapons/serdy/44mag.ogg | Bin 0 -> 30486 bytes sound/weapons/serdy/deagle.ogg | Bin 0 -> 37197 bytes sound/weapons/serdy/pistol_service.ogg | Bin 0 -> 28758 bytes sound/weapons/serdy/revolver_cocked.ogg | Bin 0 -> 7037 bytes sound/weapons/serdy/vepr.ogg | Bin 0 -> 43898 bytes 15 files changed, 375 insertions(+), 24 deletions(-) create mode 100644 sound/weapons/serdy/44mag.ogg create mode 100644 sound/weapons/serdy/deagle.ogg create mode 100644 sound/weapons/serdy/pistol_service.ogg create mode 100644 sound/weapons/serdy/revolver_cocked.ogg create mode 100644 sound/weapons/serdy/vepr.ogg diff --git a/code/modules/projectiles/ammunition/zz_autolathe_ch.dm b/code/modules/projectiles/ammunition/zz_autolathe_ch.dm index 46698bef8d..0ca2f2394b 100644 --- a/code/modules/projectiles/ammunition/zz_autolathe_ch.dm +++ b/code/modules/projectiles/ammunition/zz_autolathe_ch.dm @@ -62,6 +62,10 @@ path = /obj/item/ammo_magazine/asval/ap hidden = 1 +/datum/category_item/autolathe/arms/asval_9x39_rubber + name = "AS-Val magazine(9x39mm less-lethal)" + path = /obj/item/ammo_magazine/asval/rubber + /datum/category_item/autolathe/arms/akm_762x39 name = "AKM magazine (7.62x39mm standard)" path = /obj/item/ammo_magazine/akm @@ -77,6 +81,35 @@ path = /obj/item/ammo_magazine/akm/hp hidden = 1 +/datum/category_item/autolathe/arms/akm_762x39_rubber + name = "AKM magazine (7.62x39mm less-lethal)" + path = /obj/item/ammo_magazine/akm/rubber + +/datum/category_item/autolathe/arms/ak74 + name = "AK74 magazine (5.45mm standard) + path = /obj/item/ammo_magazine/ak74 + hidden = 1 + +/datum/category_item/autolathe/arms/ak74/plum + name = "AK74 'plum' magazine (5.45mm standard) + path = /obj/item/ammo_magazine/ak74/plum + hidden = 1 + +/datum/category_item/autolathe/arms/ak74/plum/rubber + name = "AK74 'plum' magazine (5.45mm less-lethal) + path = /obj/item/ammo_magazine/ak74/plum/rubber + hidden = 1 + + +/datum/category_item/autolathe/arms/ak74_ap + name = "AK74 magazine (5.45mm armor-piercing)" + path = /obj/item/ammo_magazine/ak74/ap + hidden = 1 + +/datum/category_item/autolathe/arms/ak74_rubber + name = "AK74 magazine (5.45mm less-lethal) + path = /obj/item/ammo_magazine/ak74/rubber + /datum/category_item/autolathe/arms/m16_556 name = "M16 magazine (5.56x45mm standard)" path = /obj/item/ammo_magazine/m16 @@ -92,6 +125,10 @@ path = /obj/item/ammo_magazine/m16/hp hidden = 1 +/datum/category_item/autolathe/arms/m16_556_rubber + name = "M16 magazine (5.56x45mm less-lethal)" + path = /obj/item/ammo_magazine/m16/rubber + /datum/category_item/autolathe/arms/sks_762 name = "SKS Clip (10x 7.62x39 standard)" path = /obj/item/ammo_magazine/clip/sks @@ -157,6 +194,10 @@ path = /obj/item/ammo_magazine/plamya/ap hidden = 1 +/datum/category_item/autolathe/arms/plamya_9x39_rubber + name = "Plamya drum magazine(9x39mm less-lethal)" + path = /obj/item/ammo_magazine/plamya/rubber + /datum/category_item/autolathe/arms/strela_12g name = "Strela magazine (12 gauge buckshot)" path = /obj/item/ammo_magazine/strela @@ -182,11 +223,19 @@ path = /obj/item/ammo_magazine/ssp4 hidden = 1 +/datum/category_item/autolathe/arms/ssp4_10mm/rubber + name = "SSP4 magazine (10mm rubber)" + path = /obj/item/ammo_magazine/ssp4/rubber + /datum/category_item/autolathe/arms/makarov_9x18 name = "Makarov magazine (9x18mm Makarov standard)" path = /obj/item/ammo_magazine/makarov hidden = 1 +/datum/category_item/autolathe/arms/makarov_9x18/rubber + name = "Makarov magazine (9x18mm Makarov rubber)" + path = /obj/item/ammo_magazine/makarov/rubber + /datum/category_item/autolathe/arms/vp70_9mm name = "VP70 magazine (18x 9x19mm standard)" path = /obj/item/ammo_magazine/m9mm/vp70 @@ -202,6 +251,15 @@ path = /obj/item/ammo_magazine/m9mm/vp70/hp hidden = 1 +/datum/category_item/autolathe/arms/vp70_9mm_rubber + name = "VP70 magazine (18x 9x19mm rubber)" + path = /obj/item/ammo_magazine/m9mm/vp70/rubber + +/datum/category_item/autolathe/arms/vp70_9mm_flash + name = "VP70 magazine (18x 9x19mm flash)" + path = /obj/item/ammo_magazine/m9mm/vp70/flash + + /datum/category_item/autolathe/arms/tp23_44 name = "TP-23 TS magazine (.44 magnum standard)" path = /obj/item/ammo_magazine/tp23s @@ -254,6 +312,10 @@ path = /obj/item/ammo_magazine/pitchmag hidden = 1 +/datum/category_item/autolathe/arms/smg_pitch/rubber + name = "pitchgun magazine(.44 magnum less-lethal)" + path = /obj/item/ammo_magazine/pitchmag/rubber + /datum/category_item/autolathe/arms/rpdm_762x39 name = "RPDM Drum magazine(7.62x39mm standard)" path = /obj/item/ammo_magazine/rpd diff --git a/code/modules/projectiles/ammunition/zz_magazines_ch.dm b/code/modules/projectiles/ammunition/zz_magazines_ch.dm index 0684c2d241..8b561847c3 100644 --- a/code/modules/projectiles/ammunition/zz_magazines_ch.dm +++ b/code/modules/projectiles/ammunition/zz_magazines_ch.dm @@ -75,6 +75,12 @@ multiple_sprites = 1 ammo_type = /obj/item/ammo_casing/a44 +/obj/item/ammo_magazine/pitchmag/rubber + name = "pitchgun magazine(.44 magnum less-lethal)" + icon_state = "pitchrubbermag" + matter = list(DEFAULT_WALL_MATERIAL = 700) + ammo_type = /obj/item/ammo_casing/a44/rubber + /obj/item/ammo_magazine/asval name = "AS-Val magazine(9x39mm standard)" icon = 'icons/obj/ammo_ch.dmi' @@ -91,6 +97,11 @@ matter = list(DEFAULT_WALL_MATERIAL = 1200) ammo_type = /obj/item/ammo_casing/a9x39/ap +/obj/item/ammo_magazine/asval/rubber + name = "AS-Val magazine(9x39mm less-lethal)" + matter = list(DEFAULT_WALL_MATERIAL = 1000) + ammo_type = /obj/item/ammo_casing/a9x39/rubber + /obj/item/ammo_magazine/akm name = "AKM magazine (7.62x39mm standard)" icon = 'icons/obj/ammo_ch.dmi' @@ -112,6 +123,17 @@ matter = list(DEFAULT_WALL_MATERIAL = 2000) ammo_type = /obj/item/ammo_casing/a762x39/hp +/obj/item/ammo_magazine/akm/rubber + name = "AKM magazine (7.62x39mm less-lethal)" + icon = 'icons/obj/ammo_ch.dmi' + icon_state = "762rubbermag" + max_ammo = 30 + mag_type = MAGAZINE + caliber = "7.62x39mm" + matter = list(DEFAULT_WALL_MATERIAL = 1200) + multiple_sprites = 1 + ammo_type = /obj/item/ammo_casing/a762x39/rubber + /obj/item/ammo_magazine/ak74 name = "AK74 magazine (5.45mm standard)" icon = 'icons/obj/ammo_ch.dmi' @@ -133,9 +155,19 @@ matter = list(DEFAULT_WALL_MATERIAL = 1800) ammo_type = /obj/item/ammo_casing/a545/hp +/obj/item/ammo_magazine/ak74/rubber + name = "AK74 magazine (5.45mm less-lethal)" + matter = list(DEFAULT_WALL_MATERIAL = 1200) + ammo_type = /obj/item/ammo_casing/a545/rubber + /obj/item/ammo_magazine/ak74/plum icon_state = "545plum" +/obj/item/ammo_magazine/ak74/plum/rubber + name = "AK74 magazine (5.45mm less-lethal)" + matter = list(DEFAULT_WALL_MATERIAL = 1200) + ammo_type = /obj/item/ammo_casing/a545/rubber + /obj/item/ammo_magazine/m16 name = "M16 magazine (5.56x45mm standard)" icon = 'icons/obj/ammo_ch.dmi' @@ -152,6 +184,13 @@ matter = list(DEFAULT_WALL_MATERIAL = 1700) ammo_type = /obj/item/ammo_casing/a556/ap +/obj/item/ammo_magazine/m16/rubber + name = "M16 magazine (5.56x45mm less-lethal)" + icon_state = "556rubbermag" + matter = list(DEFAULT_WALL_MATERIAL = 1700) + ammo_type = /obj/item/ammo_casing/a556/rubber + + /obj/item/ammo_magazine/m16/hp name = "M16 magazine (5.56x45mm hollow-point)" matter = list(DEFAULT_WALL_MATERIAL = 1700) @@ -174,6 +213,14 @@ multiple_sprites = 1 ammo_type = /obj/item/ammo_casing/a10x24 +/obj/item/ammo_magazine/m41/rubber + name = "M41A magazine (10x24mm standard)" + icon = 'icons/obj/ammo_ch.dmi' + icon_state = "m41rubbermag" + max_ammo = 40 + matter = list(DEFAULT_WALL_MATERIAL = 7000) + ammo_type = /obj/item/ammo_casing/a10x24/rubber + /obj/item/ammo_magazine/t12 name = "T-12 magazine (10x24mm standard)" icon = 'icons/obj/ammo_ch.dmi' @@ -320,6 +367,12 @@ matter = list(DEFAULT_WALL_MATERIAL = 3000) ammo_type = /obj/item/ammo_casing/a9x39/ap +/obj/item/ammo_magazine/plamya/rubber + name = "Plamya drum magazine(9x39mm less-lethal)" + matter = list(DEFAULT_WALL_MATERIAL = 2000) + ammo_type = /obj/item/ammo_casing/a9x39/rubber + icon_state = "plamyarubbermag" + /obj/item/ammo_magazine/strela name = "Strela magazine(12 gauge buckshot)" icon = 'icons/obj/ammo_ch.dmi' @@ -390,7 +443,7 @@ ammo_type = /obj/item/ammo_casing/a762x39 /obj/item/ammo_magazine/rpd/ap - name = "PKM magazine box(7.62x39mm armor-piercing)" + name = "PPD Drum magazine(7.62x39mm armor-piercing)" matter = list(DEFAULT_WALL_MATERIAL = 10000) ammo_type = /obj/item/ammo_casing/a762x39/ap @@ -406,7 +459,7 @@ ammo_type = /obj/item/ammo_casing/a762x39 /obj/item/ammo_magazine/akm/drum/ap - name = "PKM magazine box(7.62x39mm armor-piercing)" + name = "RPK magazine box(7.62x39mm armor-piercing)" matter = list(DEFAULT_WALL_MATERIAL = 7500) ammo_type = /obj/item/ammo_casing/a762x39/ap @@ -421,6 +474,12 @@ matter = list(DEFAULT_WALL_MATERIAL = 400) ammo_type = /obj/item/ammo_casing/a10mm +/obj/item/ammo_magazine/ssp4/rubber + name = "SSP4 magazine(10mm standard)" + ammo_type = /obj/item/ammo_casing/a10mm/rubber + icon_state = "10mmrubbermag" + matter = list(DEFAULT_WALL_MATERIAL = 300) + /obj/item/ammo_magazine/makarov name = "Makarov magazine(9x18mm Makarov standard)" icon = 'icons/obj/ammo_ch.dmi' @@ -432,26 +491,41 @@ matter = list(DEFAULT_WALL_MATERIAL = 400) ammo_type = /obj/item/ammo_casing/a9x18 +/obj/item/ammo_magazine/makarov/rubber + name = "Makarov magazine(9x18mm Makarov rubber)" + ammo_type = /obj/item/ammo_casing/a9x18/rubber + icon_state = "9mmrubbermag" + /obj/item/ammo_magazine/m9mm/vp70 - name = "VP70 magazine (18x 9x19mm standard)" + name = "VP70 magazine (9x19mm standard)" icon = 'icons/obj/ammo_ch.dmi' icon_state = "9mmmag" ammo_type = /obj/item/ammo_casing/a9mm max_ammo = 18 /obj/item/ammo_magazine/m9mm/vp70/ap - name = "VP70 magazine (18x 9x19mm armor-piercing)" + name = "VP70 magazine (9x19mm armor-piercing)" ammo_type = /obj/item/ammo_casing/a9mm/ap /obj/item/ammo_magazine/m9mm/vp70/hp - name = "VP70 magazine (18x 9x19mm hollow-point)" + name = "VP70 magazine (9x19mm hollow-point)" ammo_type = /obj/item/ammo_casing/a9mm/ap +/obj/item/ammo_magazine/m9mm/vp70/rubber + name = "VP70 magazine (9x19mm rubber)" + ammo_type = /obj/item/ammo_casing/a9mm/rubber + icon_state = "9mmrubbermag" + +/obj/item/ammo_magazine/m9mm/vp70/flash + name = "VP70 magazine (9x19mm flash)" + ammo_type = /obj/item/ammo_casing/a9mm/flash + icon_state = "9mmrubbermag" + /obj/item/ammo_magazine/tp23s name = "TP-23 TS magazine (.44 magnum standard)" icon = 'icons/obj/ammo_ch.dmi' icon_state = "45mag" - max_ammo = 12 + max_ammo = 10 mag_type = MAGAZINE caliber = ".44" matter = list(DEFAULT_WALL_MATERIAL = 800) @@ -471,7 +545,7 @@ name = "TP-23 magazine (.45 ACP)" icon = 'icons/obj/ammo_ch.dmi' icon_state = "45mag" - max_ammo = 12 + max_ammo = 14 mag_type = MAGAZINE caliber = ".45" matter = list(DEFAULT_WALL_MATERIAL = 800) @@ -497,3 +571,26 @@ /obj/item/ammo_magazine/tp23/emp name = "TP-23 magazine (.45 ACP low-yield EMP)" ammo_type = /obj/item/ammo_casing/a45/emp + +/obj/item/ammo_magazine/s45lc + name = "speedloader (.45 LC)" + icon = 'icons/obj/ammo.dmi' + icon_state = "44" + ammo_type = /obj/item/ammo_casing/a45lc + matter = list(MAT_STEEL = 1260) //metal costs are very roughly based around 1 .45 casing = 75 metal + caliber = ".45 LC" + max_ammo = 6 + multiple_sprites = 1 + +/obj/item/ammo_magazine/s45lc/empty + initial_ammo = 0 + +/obj/item/ammo_magazine/s45lc/rubber + name = "speedloader (.45 LC rubber)" + icon_state = "R44" + ammo_type = /obj/item/ammo_casing/a45lc/rubber + +/obj/item/ammo_magazine/s45lc/rifle + name = "speedloader (.45 LC +P)" + icon_state = "RI44" + ammo_type = /obj/item/ammo_casing/a45lc/rifle \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/zz_rounds_ch.dm b/code/modules/projectiles/ammunition/zz_rounds_ch.dm index 00fc55655a..a61f266fff 100644 --- a/code/modules/projectiles/ammunition/zz_rounds_ch.dm +++ b/code/modules/projectiles/ammunition/zz_rounds_ch.dm @@ -46,16 +46,21 @@ caliber = "9x18mm" projectile_type = /obj/item/projectile/bullet/a9x18 +/obj/item/ammo_casing/a9x18/rubber + desc = "A rubber 9x18mm Makarov round" + caliber = "9x18mm" + projectile_type = /obj/item/projectile/bullet/a9x18/rubber + /obj/item/ammo_casing/a762x54 desc = "A standard 7.62x54mmR round" caliber = "7.62x54mmR" icon_state = "rifle-casing" - projectile_type = /obj/item/projectile/bullet/rifle/a762x54 + projectile_type = /obj/item/projectile/bullet/rifle/a762 matter = list(DEFAULT_WALL_MATERIAL = 160) /obj/item/ammo_casing/a762x54/ap desc = "An armor piercing 7.62x54mmR round" - projectile_type = /obj/item/projectile/bullet/rifle/a762x54/ap + projectile_type = /obj/item/projectile/bullet/rifle/a762/ap /obj/item/ammo_casing/a338 desc = "A standard .338 Lapua round" @@ -99,6 +104,10 @@ desc = "An armor piercing 9x39mm round" projectile_type = /obj/item/projectile/bullet/rifle/a9x39/ap +/obj/item/ammo_casing/a9x39/rubber + desc = "A less-lethal 9x39mm round" + projectile_type = /obj/item/projectile/bullet/rifle/a9x39/rubber + /obj/item/ammo_casing/a762x39 desc = "A standard 7.62x39mm round" caliber = "7.62x39mm" @@ -113,6 +122,14 @@ desc = "A hollow point 7.62x39mm round" projectile_type = /obj/item/projectile/bullet/rifle/a762x39/hp +/obj/item/ammo_casing/a762x39/rubber + desc = "A less-lethal 7.62x39mm round" + projectile_type = /obj/item/projectile/bullet/rifle/a762x39/rubber + +/obj/item/ammo_casing/a545/rubber + desc = "A 5.45mm less-lethal bullet casing." + projectile_type = /obj/item/projectile/bullet/rifle/a545/rubber + /obj/item/ammo_casing/a556 desc = "A standard 5.56x45mm round" caliber = "5.56x45mm" @@ -127,8 +144,33 @@ desc = "A hollow point 5.56x45mm round" projectile_type = /obj/item/projectile/bullet/rifle/a556/hp +/obj/item/ammo_casing/a556/rubber + desc = "A less-lethal 5.56x45mm round" + projectile_type = /obj/item/projectile/bullet/rifle/a556/rubber + + /obj/item/ammo_casing/a10x24 desc = "A standard 10x24mm caseless round" icon_state = "rifle-casing" caseless = 1 - projectile_type = /obj/item/projectile/bullet/rifle/a10x24 \ No newline at end of file + projectile_type = /obj/item/projectile/bullet/rifle/a10x24 + +/obj/item/ammo_casing/a10x24/rubber + desc = "A less-lethal 10x24mm caseless round" + icon_state = "rifle-casing" + caseless = 1 + projectile_type = /obj/item/projectile/bullet/rifle/a10x24/rubber + +/obj/item/ammo_casing/a45lc + desc = "A long silver bullet... .45 LC stamped into the base." + caliber = ".45 LC" + icon_state = "rifle-casing" + projectile_type = /obj/item/projectile/bullet/rifle/a45lc + +/obj/item/ammo_casing/a45lc/rifle + desc = "A long silver bullet... +P, and .45 LC stamped into the base." + projectile_type = /obj/item/projectile/bullet/rifle/a45lc/rifle + +/obj/item/ammo_casing/a45lc/rubber + desc = "A long silver bullet... Has a rubber tip, and .45 LC stamped into the base." + projectile_type = /obj/item/projectile/bullet/rifle/a45lc/rubber \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/laser_ch.dm b/code/modules/projectiles/guns/energy/laser_ch.dm index 8f0509cebb..ef97f95195 100644 --- a/code/modules/projectiles/guns/energy/laser_ch.dm +++ b/code/modules/projectiles/guns/energy/laser_ch.dm @@ -109,4 +109,21 @@ slot_flags = SLOT_BELT|SLOT_BACK charge_cost = 1500 //You got 1 shot... projectile_type = /obj/item/projectile/beam/heavylaser //But it hurts a lot - cell_type = /obj/item/weapon/cell/device/weapon \ No newline at end of file + cell_type = /obj/item/weapon/cell/device/weapon + +/obj/item/weapon/gun/energy/vepr/plasma + name = "WKHM 'Vepr-Prisma'" + desc = "The Vepr-Prisma plasma rifle, in 40 Watt range. A very robust version of the Vepr lasrifle, made to fire energized bolts of plasma. The Vepr-Prisma is very uncommon, reserved mainly for W-K's internal security forces, and organizations with lots of money to spend. Lacks a burst mode, but it probably doesn't need it. This one bears the 'WKHM Adamant' arkship's production stamp." + description_fluff = "WKHM, is a minor arms company that has been around for quite some time, established in 2408. Known for being one of the many suppliers of weapons to dangerous worlds on the rim, and a part of the FTU. They produce a large variety of firearms, strike craft, and armored vehicles to fufill various their various contracts, and are largely migrant, moving wherever the money is. Found almost entirely on mobile production ships and various escort craft. Identifiable by their logo, a red Omega symbol with a black or white W in the middle. The sheer quantity of their firearms produced ensures they can be found.. just about anywhere, and they are very sought after by pirates for their reliability." + icon_expected_width = 64 + icon = 'icons/obj/64x32guns_ch.dmi' + icon_state = "vepr" + fire_delay = 0.5 + projectile_type = /obj/item/projectile/energy/plasma/vepr + force = 8 + w_class = ITEMSIZE_HUGE //Probably gonna make it a rifle sooner or later //CHOMP Edit, and so I did. + slot_flags = SLOT_BELT|SLOT_BACK //CHOMP Edit. Let's make it so that if it doesn't fit in a backpack, it doesn't fit in a holster either. + var/is64x32_override = TRUE + accept_cell_type = /obj/item/weapon/cell/vepr + cell_type = /obj/item/weapon/cell/vepr + origin_tech = list(TECH_POWER = 4, TECH_COMBAT = 6, TECH_MAGNET = 4, TECH_ILLEGAL = 4) \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm b/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm index 9ac801b7fc..9fb6e5ea18 100644 --- a/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm +++ b/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm @@ -775,7 +775,7 @@ move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 /obj/item/weapon/gun/projectile/automatic/serdy/vityazb - name = "WKHM 'Vityaz' B" + name = "WKHM 'Vityaz-B'" desc = "A swarm of angry bees. The Plamya's baby brother. With 12 total moving parts, including the trigger mechanism, this gun was built with one purpose. Longevity and reliability. Commonly found in the hands of private security, criminals, and law enforcement alike across many worlds. This one is a B model, made to fire faster, at the expense of reliability. Chambered in 10mm." description_fluff = "WKHM, is a minor arms company that has been around for quite some time, established in 2408. Known for being one of the many suppliers of weapons to dangerous worlds on the rim, and a part of the FTU. They produce a large variety of firearms, strike craft, and armored vehicles to fufill various their various contracts, and are largely migrant, moving wherever the money is. Found almost entirely on mobile production ships and various escort craft. Identifiable by their logo, a red Omega symbol with a black or white W in the middle. The sheer quantity of their firearms produced ensures they can be found.. just about anywhere, and they are very sought after by pirates for their reliability." caliber = "10mm" @@ -798,7 +798,7 @@ //LMGs -/obj/item/weapon/gun/projectile/automatic/serdy/molniya +/obj/item/weapon/gun/projectile/automatic/serdy/molniya //this is essentially a space MG42 name = "WKHM 'Molniya'" desc = "A light machinegun manufactured by WKHM for various paramilitaries, private security companies, and rimworld governments. Big, heavy, and with a fire rate similar to that of an MG42. Often used in emplacements and on top of armored vehicles, or as a squad support weapon. Nicknamed the 'Pig' or the 'Sawzall', this one has a solid oak stock, and bears the 'WKHM Adamant' arkship's production stamp. If you ever see this gun, there is no doubt shit's about to go down. Chambered in 7.62x51mm." description_fluff = "WKHM, is a minor arms company that has been around for quite some time, established in 2408. Known for being one of the many suppliers of weapons to dangerous worlds on the rim, and a part of the FTU. They produce a large variety of firearms, strike craft, and armored vehicles to fufill various their various contracts, and are largely migrant, moving wherever the money is. Found almost entirely on mobile production ships and various escort craft. Identifiable by their logo, a red Omega symbol with a black or white W in the middle. The sheer quantity of their firearms produced ensures they can be found.. just about anywhere, and they are very sought after by pirates for their reliability." @@ -811,8 +811,10 @@ firemodes = list( list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), - list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)) + list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)), + list(mode_name="long bursts", burst=15, move_delay=8, burst_accuracy = list(0,-15,-15,-30,-30,0,-15,-15,-30,-30,0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2,0.6, 1.0, 1.0, 1.0, 1.2,0.6, 1.0, 1.0, 1.0, 1.2)) ) + w_class = ITEMSIZE_HUGE load_method = MAGAZINE auto_loading_type = OPEN_BOLT muzzle_velocity = 860 @@ -832,6 +834,7 @@ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)) ) + w_class = ITEMSIZE_HUGE load_method = MAGAZINE auto_loading_type = OPEN_BOLT muzzle_velocity = 825 @@ -851,6 +854,7 @@ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)) ) + w_class = ITEMSIZE_HUGE load_method = MAGAZINE auto_loading_type = OPEN_BOLT muzzle_velocity = 735 @@ -870,6 +874,7 @@ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)) ) + w_class = ITEMSIZE_HUGE load_method = MAGAZINE auto_loading_type = CLOSED_BOLT muzzle_velocity = 745 @@ -894,6 +899,7 @@ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-15,-15), dispersion=list(0.0, 0.6, 1.0)), list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-15,-15,-30,-30), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)) ) + w_class = ITEMSIZE_HUGE load_method = MAGAZINE auto_loading_type = OPEN_BOLT muzzle_velocity = 860 @@ -1038,10 +1044,6 @@ caliber = "9mm" magazine_type = /obj/item/ammo_magazine/m9mm/large allowed_magazines = list(/obj/item/ammo_magazine/m9mm) - firemodes = list( - list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null), - list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-20,-40), dispersion=list(0.0, 0.9, 1.8)) - ) projectile_type = /obj/item/projectile/bullet/pistol muzzle_velocity = 375 fire_sound = "sound/weapons/serdy/9mmpistol.ogg" @@ -1055,7 +1057,7 @@ allowed_magazines = list(/obj/item/ammo_magazine/tp23s) projectile_type = /obj/item/projectile/bullet/pistol/strong muzzle_velocity = 465 - fire_sound = "sound/weapons/serdy/vityaz.ogg" + fire_sound = "sound/weapons/serdy/deagle.ogg" /obj/item/weapon/gun/projectile/serdy_pistols/tp23 name = "TP-23" @@ -1066,7 +1068,7 @@ allowed_magazines = list(/obj/item/ammo_magazine/tp23) projectile_type = /obj/item/projectile/bullet/pistol/medium muzzle_velocity = 300 - fire_sound = "sound/weapons/serdy/40pistol.ogg" + fire_sound = "sound/weapons/serdy/pistol_service.ogg" /obj/item/weapon/gun/projectile/revolver/nagant @@ -1077,6 +1079,18 @@ max_shells = 7 move_delay = 0 // CHOMPEdit: Pistols have move_delay of 0 +/obj/item/weapon/gun/projectile/revolver/saa + name = "Colt Single Action Army" + desc = "A Colt Single Action Army. The greatest handgun ever made. Six shots. More than enough to kill anything that moves... Chambered in .45 Long-Colt." //sue me -- Ocelot + icon = 'icons/obj/gun_ch.dmi' + caliber = ".45 LC" + icon_state = "saa" + fire_delay = 0 //fastest gun in the west + ammo_type = /obj/item/ammo_casing/a45lc + max_shells = 6 + move_delay = 0 + fire_sound = "sound/weapons/serdy/44mag.ogg" + /obj/item/weapon/gun/projectile/revolver/nagant/skinned name = "nagant revolver" icon_state = "nagantb" diff --git a/code/modules/projectiles/projectile/beams_ch.dm b/code/modules/projectiles/projectile/beams_ch.dm index 1b52d05be3..cc0925cad5 100644 --- a/code/modules/projectiles/projectile/beams_ch.dm +++ b/code/modules/projectiles/projectile/beams_ch.dm @@ -8,7 +8,7 @@ muzzle_type = /obj/effect/projectile/muzzle/phaser tracer_type = /obj/effect/projectile/tracer/phaser impact_type = /obj/effect/projectile/impact/phaser - + /obj/item/projectile/beam/phaser/light damage = 5 @@ -84,3 +84,8 @@ light_range = 1.5 light_power = 0.3 +/obj/effect/projectile/muzzle/vepr + icon_state = "vepr_muzzle" + light_color = "#FF6A00" + light_range = 3 + light_power = 1 diff --git a/code/modules/projectiles/projectile/bullets_ch.dm b/code/modules/projectiles/projectile/bullets_ch.dm index 05b7c25c37..27f3c5e259 100644 --- a/code/modules/projectiles/projectile/bullets_ch.dm +++ b/code/modules/projectiles/projectile/bullets_ch.dm @@ -138,6 +138,16 @@ only use the hollow_point and armor_penetration values.*/ grains = 95 velocity = 319 +/obj/item/projectile/bullet/a9x18/rubber + armor_penetration = -10 + grains = 102 + velocity = 301 + damage = 10 + agony = 40 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + /obj/item/projectile/bullet/a10mm fire_sound = 'sound/weapons/gunshot2.ogg' diam = 10.17 @@ -157,6 +167,16 @@ only use the hollow_point and armor_penetration values.*/ armor_penetration = -10 hollow_point = TRUE +/obj/item/projectile/bullet/a10mm/rubber + armor_penetration = -10 + grains = 142 + velocity = 301 + damage = 10 + agony = 50 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + /obj/item/projectile/bullet/a380 fire_sound = 'sound/weapons/gunshot2.ogg' diam = 9 @@ -236,6 +256,16 @@ only use the hollow_point and armor_penetration values.*/ armor_penetration = -10 hollow_point = TRUE +/obj/item/projectile/bullet/rifle/a762/rubber + armor_penetration = -10 + grains = 142 + velocity = 661 + damage = 25 //this still hurts like a motherfucker + agony = 100 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + /obj/item/projectile/bullet/rifle/a762x39 //7.62x39 Soviet fire_sound = 'sound/weapons/ballistics/a762.ogg' diam = 7.85 @@ -252,6 +282,16 @@ only use the hollow_point and armor_penetration values.*/ hollow_point = TRUE armor_penetration = -10 +/obj/item/projectile/bullet/rifle/a762x39/rubber + armor_penetration = -10 + grains = 142 + velocity = 661 + damage = 15 //this still hurts like a motherfucker + agony = 70 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + /obj/item/projectile/bullet/rifle/a545 fire_sound = 'sound/weapons/ballistics/a545.ogg' diam = 5.6 @@ -263,6 +303,16 @@ only use the hollow_point and armor_penetration values.*/ velocity = 890 armor_penetration = 15 +/obj/item/projectile/bullet/rifle/a545/rubber + armor_penetration = -10 + grains = 82 + velocity = 761 + damage = 15 + agony = 60 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + /obj/item/projectile/bullet/rifle/a545/hp hollow_point = TRUE armor_penetration = -10 @@ -282,6 +332,16 @@ only use the hollow_point and armor_penetration values.*/ hollow_point = TRUE armor_penetration = -10 +/obj/item/projectile/bullet/rifle/a556/rubber + armor_penetration = -10 + grains = 82 + velocity = 861 + damage = 15 + agony = 60 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + /obj/item/projectile/bullet/rifle/a145 // 14.5×114mm fire_sound = 'sound/weapons/ballistics/a145.ogg' diam = 14.88 @@ -302,7 +362,7 @@ only use the hollow_point and armor_penetration values.*/ /obj/item/projectile/bullet/rifle/a95 //I hate you. There is no real world analog for 9.5x40mm, I will guestimate from the 9x39mm russian round and give it some bonus for future points or whatever diam = 9.5 grains = 310 - velocity = 365 + velocity = 365 //cadyn cope above, beware ^^ /obj/item/projectile/bullet/rifle/a9x39 //We also have actual 9x39mm fire_sound = 'sound/weapons/ballistics/a545.ogg' @@ -314,12 +374,31 @@ only use the hollow_point and armor_penetration values.*/ grains = 267 armor_penetration = 25 +/obj/item/projectile/bullet/rifle/a9x39/rubber + armor_penetration = -10 + grains = 282 + velocity = 161 + damage = 20 + agony = 70 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + /obj/item/projectile/bullet/rifle/a10x24 - fire_sound = 'sound/weapons/ballistics/a762.ogg' grains = 210 diam = 10.2 velocity = 840 +/obj/item/projectile/bullet/rifle/a10x24/rubber + armor_penetration = -10 + grains = 280 + velocity = 400 + damage = 20 + agony = 80 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + /obj/item/projectile/bullet/rifle/a762/lmg //This is actually 7.92x57 ffs diam = 7.92 grains = 181 @@ -368,6 +447,26 @@ only use the hollow_point and armor_penetration values.*/ penetrating = 2 armor_penetration=30 +/obj/item/projectile/bullet/rifle/a45lc //yee haw + diam = 11.43 + grains = 250 + velocity = 600 + +/obj/item/projectile/bullet/rifle/a45lc/rifle + grains = 267 + velocity = 800 + armor_penetration = 15 + +/obj/item/projectile/bullet/rifle/a45lc/rubber + armor_penetration = -10 + grains = 282 + velocity = 200 + damage = 20 + agony = 70 + embed_chance = 0 + sharp = FALSE + check_armour = "melee" + //NOTE: Ammo casings and magazines used to be in this part of the file. They have been moved to respective files in the projectiles/ammunition folder. //Various "We're not dealing with this shit because of how bad it is" (Some of these may be implemented into the new system with later updates) diff --git a/code/modules/projectiles/projectile/energy_ch.dm b/code/modules/projectiles/projectile/energy_ch.dm index 0e68923ae9..94d3f925c6 100644 --- a/code/modules/projectiles/projectile/energy_ch.dm +++ b/code/modules/projectiles/projectile/energy_ch.dm @@ -5,4 +5,19 @@ /obj/item/projectile/energy/phase/bolt/heavy range = 4 - SA_bonus_damage = 25 // 20 total on animals \ No newline at end of file + SA_bonus_damage = 25 // 20 total on animals + +/obj/item/projectile/energy/plasma/vepr + name = "plasma bolt" + icon = 'icons/obj/projectiles_ch.dmi' + icon_state = "vepr" + fire_sound = 'sound/weapons/serdy/vepr.ogg' + damage = 30 + armor_penetration = 10 + damage_type = BURN + check_armour = "energy" + muzzle_type = /obj/effect/projectile/muzzle/vepr + impact_effect_type = /obj/effect/temp_visual/impact_effect + hitsound_wall = 'sound/weapons/effects/searwall.ogg' + hitsound = 'sound/weapons/sear.ogg' + diff --git a/icons/obj/ammo_ch.dmi b/icons/obj/ammo_ch.dmi index c3208aaa31c47e528c553d0c4325bca1f3b3d53b..d6b901c9377aa4f8eb6fbc1c8baa3f37c4d268f5 100644 GIT binary patch literal 4095 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 LC+iw3pQQf*u;(>r diff --git a/icons/obj/gun_ch.dmi b/icons/obj/gun_ch.dmi index 66494903b9b7d889b6278da3cd696d7802d7ab46..b108e609510db471bebf0c8897228fe0efedb209 100644 GIT binary patch literal 21587 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 literal 21054 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 diff --git a/sound/weapons/serdy/44mag.ogg b/sound/weapons/serdy/44mag.ogg new file mode 100644 index 0000000000000000000000000000000000000000..8dac341ecab5e54bcffc396aa6c9ab4b353d5a93 GIT binary patch literal 30486 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 H7{K~Jl0g6f literal 0 HcmV?d00001 diff --git a/sound/weapons/serdy/deagle.ogg b/sound/weapons/serdy/deagle.ogg new file mode 100644 index 0000000000000000000000000000000000000000..41d814d2fceccea4fbd4ab7ca22d8c1840574931 GIT binary patch literal 37197 zcmbTd1yohv_AkEa?pC^64xLIWhwcXH?vxUg?mBcR-AFfzbW5j%bV#S5@HT$$y}$e3 ze~kCW_^-3}I%}@ld(QcpYp%6J*~&^CfCv5+zVAF8f6OLv+PA_{!g)Hmn%cNM7QhF# z0l)(ofFt<7|IKj9k3Ihr9(%%p)HG&E2d>0p%l`>32>%R(1=cH=cv|uaa`FjrLb$jd zJ5Ym%g`=61xrM73SZM}ULbx6eE^2!l(|-tg1MoF-k8YNP7O$e>)lF`husJ_U~ag2ol6-yThl2{8-_A=K66-437FqIR(g!mRVH?vZ0^bn9xqv zzY?^+e1M!IN+Oe)<4U4F4j;}^l;#Q!^$%OrKp@B_@G5~2T0=NoLq0k|uYAU?O29Y4 zBcraNs0juSLv2rsIZux{Pk-IC5dCI<-R2Pe`4GeF5EIhSf5jXB)$7Ojmvw45;3J(- z$_7gw?UTH9p*)1(&R&|B05mDHi|lC~iH#3W$TU>~|sWccGV2qwjZRNBJw^0RYsgxEgz}EAJ~e-hMYx zFurn^9)u~3UMS%FTM3V92LN#hd9MrkASewrjwx3@Z8xzwH^n(n6ps@5zlV2!@d7eJ zlWmz|8;HsiZ}L|xf#9&Dxu{Z@|C|YI5T3h9oiUzqJ}QKrvGuW(Fmvi_ghnP)OKDo> zUk%!ik!^swWEo2D{g^(U;Wh@v%qaXP=Z&9jV$sZrM0SD_zZkBG%gyB0Ju411vF!hZk2t6| zlX=p8&?Vw0-~6m4@7ZH!*-5am5{7mVZ*E*TOmwM zj-~J)ivpEOZ5}UyO!n7ELepG_Sc*Zb_;1CX(0{|DnE0>w?UY;$+#KpWVwxJ7 z+MW)&sUAyBA%^oFt8@OVb1|<;LjO--{l{_u&}f4H+9b?08q%K?q$G*imXNd=^uh7Bij}3yl`~P5!!# z|1y|=%w~1YJ~GFy3&zqx6X|sm8NE}iA~H(TbM{K}(Ekt1 zv5qWGi!2V0+zF3mj!3bI$S7;cvmdHDX#Ic2|5(l|S9&mlmLuaz|6i8V2_csPt*Mq> z@%$ei#U?<3y33IKw*mm5Gagg^?>wTa#xbMDH>1X(sUh}%w-~T?hF5Wl7ZhwV0FZ%G zAxm#Yuu7tYlH5-jn?7okO5`n;VA7=dsJ%4F0aX=Nb4;>L@xf_GDDJtbSuvsHNYrVe zTeQTpzGgK^=C7#Ww1)_&0su0U7D^92=JT`)Vkwls^DWydm z>YBRSt+klC#G0Co>1Fo+CXvCb{~H2J${H0lEz)g=xaX2B25SFBmV#shNCH40910K! z5DbZfB7_TM27s`2ofJ@P{Wa{01d6d{x*3*{^w25MZ@js>IaV3tys8?S))}DW9z7p` zP7eOrkHd7xKR$v$TowrIc43zXo1aUArj)dyld=<$#|*lKGFEWJZ+{JJN<%ZH&?bi| zGS51rtgLLD_n%@APT;_gP0Pw!IYIq_&;rX0Niw#*A6xFXR$+)L6Dq1}8qRqe;0SgGnU-R3o5(2S)B+z9<3UeY9G%&<;7@OP0PYx7a87gl1zx zuaeb``$&RW#9y%p?v`Y+E6>?f20Bjtf658;z;}zvCe9|#5&dkasV|5DhM)-Ii}tPT8@zOI&4xk)4zQCIg!?$&m;`FJTP%33!Q(>xX>PcZJ6UEULa4cJ z(U9#da8UyP2=J#e{7j^1tdBh6f>Q=*cbZ$Y5OQ`fI?WEXJGLZisRpVLO0FBO9JKTe zwlE6~=)YKdK@u$&2Ge8X3{{h3E-aWgZ#uO?U8pcM_t4b}h)8%?8Q zz$PGeh|KKS8Im7S1YWBhO9Qc41tcVrw{tJEJX$w0GGEj z5GYse5}I64*EO;BR}L-UO7>9>X&_!6fdnlieFPVE@Z)+ACI_-sQa4( zeV&TiewrKhqxXAkS2+Fe9v}&-0~FOi6~QpIf9Jq<;DY$yJz)4CDh)fy{&Wk!1c$GCcZwhDV>z0M>#PFgfPj$99FV$HL^l z6>4&5APvgwu?Woklm0DYDFjah7XB^5mwQ~HtI7Qx`QPp2&>xFf3PF8>b{PoJv2ye% z@l=Vzzar#T5Dy8hKm^o4^gmt?*o-e)_3tSn$^RMmZ`a4<@k;&~=s!jO|46vbWfJVb z=LG+oeSzBtu24{Au46)lpbdfeg2}Rg_)?N%5qs1}b}-E6ucBC3E=i@BX+Yr|)PyPt zqZZar+u_gz!}M%RuPM1pmQ^O)NEP$R($0d>L&HBLbJ*pLaeMW4iq``@{>{t@f z5)myHeau_*+q2-Al62GuU}__}kqqt%EH7D#@Fn|T1t9WS+$Z(M#F{kZFhDOu4RneJ zk08P$sThOP5H>D;0T9>)FV*jihZ`?Hz|6%=PA~>7#sb7~X?dh+O(C)hCCHJHdw{Xa zI~pp0o0or*lk?*+K;rH)_YU_xZZI`5ii$Wqwo>zt2m#R_$V|J0$->}X4-BZl8_@Og z2Zmc)ZVL*FJ{Omiekm)bproRv0s06q-~!J9Ad!fgHX~gq7CR0n9yb9m5kH9lMhLEA z#KFzXV;gY*9{!(w?;{Nl|Ic<-y#28f03NrqkF|~lXBnk`j z54H~hV5$U`TY|JZ*z(;&)I-Wc+ym^v5Bzz9C9V%)51|k5V6K;HxI@_+^RUs1xFFkR z?zLGq#vp|vMHU8a)3*6@1dDAn9ccyW$x5&6LiVYM4uZGoq1nCtX#I>c{Z?sX@9Gvs zw&$a<{Ub($ZJZ8DZ7v7D_KiX13vD#Jbt#1T_om-vzZ0xIy(=*!P%RfQv9jU&nH8&E z?IygJ`px(vKh_55c`sCW^rRFUFA9lAW0^>e;vJp{TRwhmTupg4%z#t5g&dpCoHR5X z*F?w~0$GSTW40D_-)v5bohH=u4YO>>b`!ST8HdzlG;%BYD-d{ut4|3B^|ST2Z`WKp z%#(RWzwsB2jVH|)#-Hjds~Rcg7{M|rK<)8?1JzMy2+F>b7soJ{cF4dXv60103afw+ z-Yk5wp|=>?B`8eTupi!rw{Fyz7s|~z{f>$W>q~`=LOGc-+0<|4gpB%PP;xLpuqr4IxCfAbY)vB zAwn$PJln3Fac3c-a?-oBjI?kr#IJ;UWDY6nGPI_gtuJFZjC*q{5yEC|_;sfH`o?

uJb{U`sXQsme&3mON)x+pIzp-k?U<%Y`u`PkTO|=9A$Q&{*mkv!ylYYNMep z_Kd9z8^~PVf#|Ao29>x31@Td(JQPJYU*FlB@`XO^VJ$_RESVk*JL9epMg=ext)<3T zL`t#mr;6oNIx)(v?oFb{E!})bTak%9n4vu1Cj94=4Tg`LsY*dR ziH1ucQfH*kzsU{do&1n$K6;NrWdV^9mFUX~QC~GbcPO5NM%lT1 zc9+sNxE+tr_1VuLeJx>U_8T8)ceMdWRB93a2nTS*EGExv{YZxy4DyJCoSF#KS(WkU zM^fciXia$-*gNn@{(o|r6(obJdvQCRu82wMTjnn`hsXH zXQ*x)J$zRziHAWuQjEx1kX$u~GjZ4-4Vfbfnv$&kUM)hQPcFp{fPSOncx(Jtg(b5 zC`K)H*~NOrn0+joS+Tu6LFxLw=30O;F`nRKcGI1Q@P49OMFG~q6bM(~=z$5aueq07 z0mg7vg#*+EMiiEm;ru?^w)KTm%j*T@v*_A6C#G86ue#P><=X3~Gj|YSXj|oQmf({P zwRxE_5b`M{{VIwFMqCS#lGxvij=5@5Z>mNz%;xHwc?4tTCw=4BT>h;-D1olA2DMSd zg`k#axazj&i!n&c%d+e8`qQ#zt+PeQy@a8?HyEqk5PIvEReZGa`4%&i<=+373&l;E zPMVRv|Me523v`MkF-vl2EQ=NIrvebVz;oh|&#p!dE zNiN{?lz%Yr5=9zwzQKfo@8b(CJf5kgV2k*48eGG*FiSyLqocQw6^cPnfG%hoHoJwKVzyl}nA#;P4(@ z{93`QC^&6_rl~_V(S-aAQPbjM&WuS}mWs*`q&jx2`~>z6J1v#qblnE=m5Q?XIZPHT z0@iS+ghovn_^%FK``DV{JqS09Ds&?wrqRi`QdN`knn-LqnsYB@k^AVIG!9Z)3I2Fo zSCGQ{W>C-4bc9Y@GDbO(h%q|Xm4`&2QCN7Oi{r$81%xTYePYQ-Lv?Vto~j7oa$QMA zoP6Aa>7dAUhp@@)33$i`Y8w%y?iaR`u2BRrh<0KzhzlVb0ClGK@NdgK1m431x?;AT zcoi)cZp6RdQv<}kLonVfL?rjE_dC6KRW-9mPx$H^gCA8I?u^;w5#?gdJ7tAs(m!Rs zQn7Dki}n+qPc5ZY{t5mtYh60BoB4^W$SS12i)@D46AcK6ImmqHj|K2H71_MGibli$ zjFyN9i{aOihMW(QqZz3Up2W7$A4f{lhETi6-boveuCycK4nN^ic1t}_aJ&9FdXCMd z$cW#mL?R&@#hg2%p$^H53iqCj)%RFsWA0re@H&33o8v;KtGoBjlw5D`#TrqbOw=sK zF`TntwGkXFa5kzDu^sB(PXPd4odI#%$opPymand+t_(a{x;1l7O+S?>4;4#SE&#*R)-z!avN8SpDBe?zeMFkhdE+zs;; zaax+FSt8U?Oz49jHo*xwBYRV$0=JFeQ|DV!%$yHm!1ms$LNVs~>V$C*`PFta+-!4f zlrItrc`DZ39wq@nx3NVPMq_?ko0YNUQKHzKhKmaZ^U(Xe<{MTY2e~k!W=>ARs%KSe&tsipH@Ip2^k@O( zz7lOa=FbrBzzCZsq>O26OCE24H@|PFfaqTa#$n&;BSUqp8n2 zSpuIqzHk{*decSFNup%J^z#jTlhejD3-GgtI=%+r5ylJ&42qDg!A+3+CDr`=&S2;T+t>Ezha&*W@FmG z9Ro4+QWeCr28@OovQRFN2n;sMdf z_K;VY z>EBoxX?PH+(fxQ%EMVL~U70djt#C9+`I9Eo)p><)QaUqRMB0sgXtb#pCYtHibI_np z5k>Pbvk;y=JZi^3l)fTyHZ?e;q^`N8dcj`SKSe4-g-Ge-%C~FL({Z1m?UMk(1N&G_ z1rS_CxN4s>rs@Jj(Wn{~l4~Y^BxmlZC+ah=RY(Jk=Yyn_MwMqVu#HbC{9YTw>7;y8 zeMWYzQ)~Idw&(7=2*VkXo?f>u@WrvXcn4zpbbH|7sSDSA9TnWbk5etQlopRt&Q1(q zEgloVA}O;EG}6>P-QH?B>5O~^teRkHe{|i_?-Bq$!=3bQ9L~M@b(V2_gZ&!lL;#v9 zRdyb9gs#E8N14&*jUVs;ai?j6=nqRk8~D5d_skFU=WBc*Adj3;fZs@g<0mfxM{)}U zgK)f(B)DUzsR@xK=hc+oBGwl}s)Sj$1L^Yta zHUeszhzRT)DJI4n*T8qwNG^UIO%;a`IC&OI9YWE?u2DJZ@5c&7)KvpwAy*<6*y1VC zrOKFgZ@nH27n(oEwpn4Yh8FvJPS*Mtw`R*0^PFqmJr#S|YD=Y2bE2o0xnO$sQjSsK zrI=lfPT}lisPrzWUp+?>oYo+Ekcr72F0pB;UvQg|qAY%rTXiIvbr>eSx!{@DK73bG z{I98ULP8|h%4te$lQfSMKZSiy^Z<8zszNS|B5dx8Xuh?K3b%R71rE8NCOjiGo^p$d z0pk(7k{nnb0?*|_jGTn_v3i1^2!t^RWq#G@)C5|>^pwyps4QSEUltv#Lts_?Z=)PPlxM;McYBB zObI`zKi3$ra#w2+SGRPof3ocNOe-M!fJ{=25dwz@bW+z5l$UM{tR+7sRz6(bV>cyL zY7HWctdCr5-?|ZNIN(>qYK~>&88HhH3H3wAjHekKf|TwI6~r_b_%X6-2g!SI@sOLQ z1b8T^4oTiXq9%D|nEF%_<}Hg}X6?rBc`jp$3L149c7AOWtU4w_dC|GTHTo;7)HyAa z%L9Ji-{*CwpI3>Ij;aMm7@J>Mi;b~T<`C~|bu5KC^f-j0j(zw~?}w3`U1s4wGz$t= zMY(mr$Hs{~KZRSnZLaugh(Qv@m-FP=v?xi+iNEf7^_uS}MPP=73s=6U*uha0$tK)0 zK7b38xm2s%Vm~lL7|ymG=o%3v9l|$BS%yQz7gCDc%#j zC->C=YJg6j5i$p`wyyF6Ui7y)a1Rf32F)E@tA9oC`*pU6a1tYO^9(rAAV&cl#HY~! zRb}S;cPc<&^y5d8x0etZ?MHu+7KqTjmfKyt5+5FSW8pw#)>9sv!WG~kDEc3K5~ z@w;bYPACAsPeUL=4}zRoj{um1`;CCcb6g5*NKyB|3bQS@*VmG6s~zF9Os<=?*7A?> z-=6UOSkAVr&hFw5@B>=z+E4{|U`=Z|*72a`^CGE>ZkDJ~&c?ZuyK9NE%)&#!uZ-0V z$38de1mtQ6K&&Q>4o@3|s{)gR4eF++?Yn>3)C$v=YS7~}`jFVW_j0Iu7qjUqt>O1J z{qTDedEbMRe#eTpg-Oj%c#ci;Pzq43f463=MchfB0gBRqv7d=}3ky z6J<-RhQyYulDgpeq|34+ZWlG#7nC82t0b2JO_%7*YDYRY4DqB!mEr?XLPo*gpQKqZ zK2=%TaP^hN&=Cy9+lL&jj0e$#3N8rtLW}9h1f&rz z9^*_SKr5WN$z8RI^)KW~Jvf#cxHsA&zdJpSp&^w{6ZG_BL{fT1rSE+FVhnT)aR;3g| zMlnLFZ}u0-^Y@1U(+(YSMrxS0Kc>N_52T+0?q#y@#?Sm4=m2|3q-;}9>6;YgTi7iw zRyAuKIbW^@a93z1PEX0XIfN;LUeUopzcodV^j7;@)}2LB&Gk7F);u8xdQo=C5wDnfJ?IqPW!r~Erpgl)QL zT3$a9m4yDa7MtYt!`q|&&~%Q|mg**QJ+5KM_NTE65>YJ@ByVD4*9>)1GQ&W-cgzlV zUo-%7IgDJaciQ7|YbN{+SM-Jvn zVd(wN3-eViTbY*czu)9>il?=vD=jOaDF_CsO@}G6es_gKK}||0*5n|;rM3`4+j}Ts z)uTZp&XaI~=2U7$XN=Ej>=%|>dNiP})_JI;Xl7TqFnyJ7w}jLTebuRZF1_B*LcaYQ zac$kXaOltHF1U|K@j$^_8dWZ7gWr&uC>mVEB%uSXhRR)Eg1IGMs%QFy!>vxbI|b06 zFxmlJXGU`DL)_P{&o)b`PP~_e|Fi|3b|K-)S z$5B32xMP1wU^ti8ue>BYtnr1yU!TbCi{8)Vq?Lsfq`RHwD6jXCqiQb8HE=zq3`mLA z1m71cBrXgm!jSfkD4v}sM%_3Z*=KMUwvrDLP2qlZ+hJ49nVt)1?awBz=-zNfnO6+R z4|vde!P6mgd;NP0C&lK5((jiASFgv_F#e>KLb^%GM%K1<!t&t2d$m@aZ-5-1yNRj;D)=K<`xXW0h_=y(D zclo0B7jN0kH+R%UemYWhq#5s*vTDBE48D+sazpU}R0~2gH&u(nBDW*lP1XFB7c!e- z0oktD0rfeWRQrx)I!Wi>`)Bq~VZM+Ud^fuhLA^cWvx04&AR9`VJ?n&6#1Ah+X))cX`5}Ssa#^U8B$BEc%hWG;Hcd_wi|q zZA)9f?h>E5Jgc&SA@yh8Do%9M+rDj9 zG28vCBf|iXU%5&C^6V<2M)=3mb#LGPYT7B%4??-#W2ZEo9@MaXh~3PpZ2Mg2iu9&C zfGyKcSzkSK{!G5G7Wn*hwzS6-6SxRfWJzE~0F)D6p_9=@Rj>`w>KppR;0D}!9-sDh zT&D{~>>`M3YpZD{(!T(>lXPg|09kYvb?6uWo+mpTi=XOqe=T}+3%tlU&sd+AIi)>a z@A!y69Xvr+FPg%0%82qF?FZ26^zBb;baH~3f|j-i8=ALIWC$(Scg6;lHzL-#)rG|r zRdXd(EkhooS`neuJ_Vl6(lZVyHPs5Ss?dDiJ%53{WcYR7%G9Ix&gsjGDL%7rD`+)t6#2`u$NqB*Zd8C*NPsMGQ9<5lasJ z67Em0L!=IV`X?)C>4J0<6%8Z^8QO|XcC3o&h6ppQs&H$i!XRpyPaEYYe&(0?44pt1Yjrk4^8u2X>8J_G1gV`-Rx6Y|3i8ka;As^->qbbY#hk zySen~`Ypu2h!n*S=5i&e5Wi%Y{Hnx0PMP4)Gz+0%@QHgGWJ2`PK;+pjV?sIE@}eSS z^C)IlT!zO-fx3XtlE$rin?Yc&g48#h8hIsznH#s_ql-khyBYbiXK~ouSJB_v9L`pL z-QO%z(p?C=94{3+RtnBtqM+k#z^r_#s4zSjU-X__pC?0*C)dn<3(MO4<56xeIpzf> zvLfb2aKzEk%2Ca#!@6vXw3rC=lmXo{=$gHv3904zMH=dX_c9li{yb;yZ1vfF`%T)2 z1IC+~mkSs2DnY+r{R&Ihaee!A4uy^A3xJMp3}>W|m*>hJ>`{Trt#H z$SHYLSN5)`O-`sku>gS!EuJ3A4i5w#n?kt>1i##EqqZg!;k8y?<1o*?(2bbJz@uc4 zd;J>wnLZnM*E5*K1U?ZhP~wf{Q%h6v_i%_eH*Z8Ue9)tE9hS`$lzh2AwJx6j?26Z+ z`l9dUK$q26Lv4p|5K$&$j$+<6OUK+DT=( zm3OX24`&YK(-4shystwCzlcm6#$7jiS&I7d^DzobzPjl$KGyIyl0swo?wcAB5r5Sl z;o?=F{$0Pgf3~e_+sXIY)PM^s30=(brr^uVn3`t;9?7>$2bw#sj6>hts?9hC)y3=; zzl=CBwx{gh=v!#aEV+EhxihhTTdK@2%mkVH5cfyVO%(&RhZ&0jfjkh2QogqeksK&V zuGM?bh6;pbMSL$dN<(YI9N%+aOovV;0#G%2&;|MBU?yD39m!OY;jgreo-JM1F0Hnw zyBsxR%{is^Hhl4dKo0QzS0NFbdhlNnsWCh810e&L`Ef2E7MOObni<1P>MxNN#l46OB9OIE$ywFrq(X_I*#XM zkb^4uh9;&L?a=mpR!E-{p2%$QbE_^arPK(Mb={^_tR(n+#l8Ls3I`mQx-I8B)t^rl z_t0A>G@kyk`8tO~GZ{Sn5;I#>8jmQLn7rrdc74gJlho7f-!9WNFQ2bd+%kyYnK4Er zrDi*8@338}}?69k%zwCmC``DfoShP4iJL@xR=6i5BFa9Lu!>rMVZ@ow> zti82J8`N-FYG~u{?Z<&5pE8PU)o*IElxtM{1Y9$RiQ^HVbA?N!hk`e7{0Lg(6k{bb zQ!F5mfy9rw)e_%4Sujc#{8K+fEYA!Kk%FL2&(7Jd^ z;oEq=q8Afm*Ip(mK_q5<;!v7(ws2VGM192g>qF#MVOHLGUU^sqfAIJmL@r`yDGYO0 z4;R+et!s`K)G><-G8-BFa}_900T5?hucky?HvX_RLeFf#O+-IVyD6cynPvKWFe3$cS7$QDXHf@2dH9pCZQ=MSJ<3hm3~8)xeU@%i;-YY4*`ge^WJI!j9P z<59>dF=3ZA)}3T1^C_xz2^)2q{ADqG-%-cr=A0@cgJh&n^cI~Ez_sgjM570s z1tl8qaX1fGs)A$7Ve;XLn@r+~^gQ6gm0BpN>-&sDQ)&-sN#PV9VOswRyOo=}^1UZ^ z*_h=nwXkl>Q8GICdXU5#0xA$VI<@yuds!vkHL#E}=Q$%spv5S#MeS|5h0R*eI;tuy zi{Znl zizJ#o4cY9Oe0q4)ur}xWy-}>$QVa_-O&yCj4FmYbkmUlYc*LF4L-hq} zM3&LN?n~U(ko|e_4vAa*b3AmJzd;+*C-{gfRP_SEEP5|tsnkqOhr(O=i_>Q$^)u4! z)oZy*Hv_XxRFgn@E>|S?ozRYFOHn@1?YFOWv2{%O)HHS5Rq1j#Hy$4NQ$49rO3K~K zUUDvwXHOOoaG@AUtUN4SzE+dlCYR|lX}mh+xR*n+#G(b9i##Gn2+iM*<7(~UNeCk> zx&HD;RLXWd3U*A`geHzi!vkxK?h(2arj9*~E87q9$wcbK@+E}c7kkSKhs%HN{SGVL zo4#u$&bzn;WaQ^mj5&21xrTSoniTpjsDF}dC@rzmJq#FwpWbCr<5GwQE7e2Sj6c!vma|+$Wv``G`bgga~lQ;?y{p=JvY+PJ4Otn zx`5JPQw?O>{1Zeo#JcaoS`;2Qq4M^*5BQ5zbFM0VNM>v1wZzh|#K}1Nt4q6@Wqf?} zYVUZ3!_<5~4E0QX2{?8XEYc743QEeOTQB05JXv(|?T<^kr3;xDtqeWdZP~$uWba0C z6yNa|A#k(5!%X_NCsU{qs6Z$z98)g$p?k@Rr{mA9GM-3I&z{GK`n-Osy3M`XSfZz8 z!0kIGvbCWHQQ(5lFx9T?NJQMnrRJ&jw#&h^pWzKVtdarYIr`S_6I9^iG_;lv9|^!N zHqgvaZ?Nn~Z#9ioDv08QvH@&^=G@@hjte9haUF&dTWBn+>wdFhKC7G2>GvjmRr9{e zzh)0f7^9beY>{_2vP|QW z(RGk!l8qWjvS4f+?`+0xQb(n6h}7F2q?D!Mk-}V_T_2CBRR0;; zNR<;u%w!qwl!j=+XE`Ezz#9!=X&fJtPJ3<}oln)J;Ix#rzYsu*uzVC9d-eT$i@L-v zAHhaYSOD48^Q*>>BIpAB{G8GH&%abaT>Wa*8^2}I-6uw?muJRWaG#cuqrb`7z9#4( z4BI^Q)tS^n=2>cd{mfyo zd9ClF`SPkAQa&SDXp-dy(QFrMS~0xwc4>G@tzCvJx0ujY-JchU;@VABhNG^euXaS3 z$gZ{&(cKPc!+2LYsxau>Ob}9@i`7gli@(8fH(ZkB(Ue7q8Tk@TT)3rrt+bLawetfb z-z7*vz5|^nfK~;kNsEmhvpZ6lLcI{H3dcPJI)3e|{q6q3l2tTw*2j)?k@Q`;h1J}G z&y^IhrBC@(2kDH=mzb9V1n7j!hiCntkV&l(p7?&v#4PmI+1#-RzO_^Q>ZmogRO$3X z^fPTY5o12{YlI%7t@NP1rS_2z?)K9Scpu)x7nMma?0h2ldG=yRU}R{|IzC43PqjGw zXJL!C5%h3@TBXizop6B!2|o|y30Hit^UDLc$4Z5vtQPhoIrIc|vfz7X6hqzW!xSzF ziLwetmvX0fhq>FI-M?$4ws7!mP)vOfQ1vHbLZDS{$}mk}IZVx?E`#Kt@^XJx0!Gp29pt()#H~7x^R^wYuMx`bOTwTq z+21LAep~I%%g=wmSQb=c50{EBv#X|Kz#w#&s@;JY>;b3hz!dDPI9A5aPJbCXUf_0; znB&6s^fk9n;M59F$7@}pTs^I{5!gHR9m_Z0kBrwPmG^t3=hDZgEO`rTx*%pP-#^|~ zRgXA|P-9Z4Vpmd0VGsy+i*fmod%gZ_M~R@Iz;nV-?s4e zshzzl7^;Gud2+!P4kv<2{#;DILb~ZjILb_H#I|YT_Yhe=Rl6cBS5K3YNS;q(c+i9_ z(2zef`fT@y=K&s_iWPXf80-TgJ$^s<783+~;^Byir~8u5tf&2_@4fM#ZAns_nG;JA zM@FK-2QAsd9gbc8siOI&lCnLN(|_7olh$4KeVdK;W&-v+zPy=F+RgCVbPb#S(tqFY z-TZXQJztxDVrHq9c}W8+#hWxZ&jB&0rFx==sEnT~wR@^bw z8jsdA6q$S)qudxX=%R$+WMw&nNPPP31O<8vDJesR=Hb|Q$}o*qp1<~y4L2u?Zp_;S zHiTxzTz5e?i85=rB&6o$W(7wspNn>NG9L$bsVFm_hX$)vp5@)HKSk!hYbEHvIi31O zZwXsDwrzTZLSBxVeae)CC`3PvJe|xt6lMA(np#KnhZ?A|5(oBV;jq;D{hmV?$i}`< zQod@;PL^mg;^&mqYoo zSbRMxIXuQJd3cf;s!G4Iu-QrW4gwG4D|L|360GE8~;`Uc7LueE?tAdj9<3!r?(}X#G&M z?mS1zsCMMc6o--J)00IZ+aWVtZ6j2@iz0DF?*fzn2VaP+5^ps zc#hYCN!$sdpu0Y9u?GbNdrM=r(oW%dHhuNme7zh>JWWb^Fk^3nHrqiZSpb%DcwD+k zpU!I+n_?B25?99VJK4f>x~60Le2eqwlh60O#Z_Zv5s`Mq$~zrOfC^aQvK z>z~uU^?1#?@Phb7sTdTA2zYzD`JE#iFaeY@3!0@v%q+y;C*gGmT-*0*#a(ijvo+no zDHw7>tkC6^@S|d&;Fm6jqEpVk6?&TxjKhSV%h88e8Q(iY#5oD&p zyV64*vlC6N)R}J6603);`X`~$;0RP}M_M6BGeh0*Y9*&pPop2X%u&zj z%fp(QxleZ+e>n=9-5h`_EadJZA7K#_&wVS1`C-ZcX?=G$yw!nK$vxnwGWws6>@a@O zJ!keQ(#x+Ymp;W^=x{$47{WHQXInGJ-*j1`RkOu)uc#;@NXr>O1*y0r8#0{v~jmjrj_3?^?LK(bRTl(l9x=P⪼7JOk{ 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 M3;6#1C!2kdN literal 0 HcmV?d00001 diff --git a/sound/weapons/serdy/vepr.ogg b/sound/weapons/serdy/vepr.ogg new file mode 100644 index 0000000000000000000000000000000000000000..30c343b550bd58fdebabcd3b7ebc17e6689666a8 GIT binary patch literal 43898 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 literal 0 HcmV?d00001 From fc6c0038fe31039a592e942621294e1c845e4efe Mon Sep 17 00:00:00 2001 From: Ocelot Date: Fri, 8 Apr 2022 07:30:51 -0400 Subject: [PATCH 05/20] oops forgot a few things --- code/modules/projectiles/ammunition/zz_autolathe_ch.dm | 8 ++++---- code/modules/projectiles/ammunition/zz_magazines_ch.dm | 3 +++ .../projectiles/guns/projectile/zz_ballistics_ch.dm | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/code/modules/projectiles/ammunition/zz_autolathe_ch.dm b/code/modules/projectiles/ammunition/zz_autolathe_ch.dm index 0ca2f2394b..b68b318c5d 100644 --- a/code/modules/projectiles/ammunition/zz_autolathe_ch.dm +++ b/code/modules/projectiles/ammunition/zz_autolathe_ch.dm @@ -86,17 +86,17 @@ path = /obj/item/ammo_magazine/akm/rubber /datum/category_item/autolathe/arms/ak74 - name = "AK74 magazine (5.45mm standard) + name = "AK74 magazine (5.45mm standard)" path = /obj/item/ammo_magazine/ak74 hidden = 1 /datum/category_item/autolathe/arms/ak74/plum - name = "AK74 'plum' magazine (5.45mm standard) + name = "AK74 'plum' magazine (5.45mm standard)" path = /obj/item/ammo_magazine/ak74/plum hidden = 1 /datum/category_item/autolathe/arms/ak74/plum/rubber - name = "AK74 'plum' magazine (5.45mm less-lethal) + name = "AK74 'plum' magazine (5.45mm less-lethal)" path = /obj/item/ammo_magazine/ak74/plum/rubber hidden = 1 @@ -107,7 +107,7 @@ hidden = 1 /datum/category_item/autolathe/arms/ak74_rubber - name = "AK74 magazine (5.45mm less-lethal) + name = "AK74 magazine (5.45mm less-lethal)" path = /obj/item/ammo_magazine/ak74/rubber /datum/category_item/autolathe/arms/m16_556 diff --git a/code/modules/projectiles/ammunition/zz_magazines_ch.dm b/code/modules/projectiles/ammunition/zz_magazines_ch.dm index 8b561847c3..b2e76efa59 100644 --- a/code/modules/projectiles/ammunition/zz_magazines_ch.dm +++ b/code/modules/projectiles/ammunition/zz_magazines_ch.dm @@ -99,6 +99,7 @@ /obj/item/ammo_magazine/asval/rubber name = "AS-Val magazine(9x39mm less-lethal)" + icon_state = "asvalrubber" matter = list(DEFAULT_WALL_MATERIAL = 1000) ammo_type = /obj/item/ammo_casing/a9x39/rubber @@ -157,6 +158,7 @@ /obj/item/ammo_magazine/ak74/rubber name = "AK74 magazine (5.45mm less-lethal)" + icon_state = "545bakerubber" matter = list(DEFAULT_WALL_MATERIAL = 1200) ammo_type = /obj/item/ammo_casing/a545/rubber @@ -165,6 +167,7 @@ /obj/item/ammo_magazine/ak74/plum/rubber name = "AK74 magazine (5.45mm less-lethal)" + icon_state = "545plumrubber" matter = list(DEFAULT_WALL_MATERIAL = 1200) ammo_type = /obj/item/ammo_casing/a545/rubber diff --git a/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm b/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm index 9fb6e5ea18..7dfa3bfdf5 100644 --- a/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm +++ b/code/modules/projectiles/guns/projectile/zz_ballistics_ch.dm @@ -334,7 +334,7 @@ /obj/item/weapon/gun/projectile/automatic/serdy/m41ab //This gun is pretty overpowered. Leaving it as an admin spawn. Might even interfere with lore. name = "M41A/2" desc = "The Armat M41A Pulse Rifle is a pulse-action assault rifle chambered for 10×24mm Caseless ammunition. This one is a rare, and fairly competent replica of the original by Scarborough Arms, with some minor design improvements over the original. The aluminium chassis is painted steel blue, and it has 'Scarborough Arms - Per falcis, per pravitas' inscribed on the stock." - caliber = "10x24mm caseless" + caliber = "10x24mm" magazine_type = /obj/item/ammo_magazine/m41 allowed_magazines = list(/obj/item/ammo_magazine/m41) icon_state="m41b" @@ -352,7 +352,7 @@ /obj/item/weapon/gun/projectile/automatic/serdy/m41a //This gun is pretty overpowered. Leaving it as an admin spawn. Might even interfere with lore. name = "M41A" desc = "A tried and true original. The Armat M41A Pulse Rifle is a pulse-action assault rifle chambered for 10×24mm Caseless ammunition. 'PEACE THROUGH SUPERIOR FIREPOWER' is stamped into the side of the aluminium chassis." - caliber = "10x24mm caseless" + caliber = "10x24mm" magazine_type = /obj/item/ammo_magazine/m41 allowed_magazines = list(/obj/item/ammo_magazine/m41) icon_state="m41a" From 1898814a792a10383080d08a8560afb4aa3c9c74 Mon Sep 17 00:00:00 2001 From: Rykka Date: Fri, 8 Apr 2022 15:19:21 -0600 Subject: [PATCH 06/20] Surgery QOL: Makes object removal take time rather than a pass/fail. Rather than prob 60/40/50 in the case of legal implant, illegal implant, and shrapnel/other in that order, surgery now has a time-to-remove. Legal implants take 10 seconds, illegal take 20 (to represent you needing to dig around/hunt for it), and shrapnel/other stuff takes 10 seconds. This will make surgery for shrapnel removal much less of a PITA, and should be more fun for players now as a result. Rather than YOU JUST MISSED IT THIS TIME x72. --- code/modules/surgery/implant.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm index acbc8655dc..f1c0af37f4 100644 --- a/code/modules/surgery/implant.dm +++ b/code/modules/surgery/implant.dm @@ -189,7 +189,7 @@ /datum/surgery_step/cavity/implant_removal/end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) var/obj/item/organ/external/chest/affected = target.get_organ(target_zone) - var/find_prob = 0 + var/time_to_remove = 0 // CHOMPEdit: Changes surgery pass/fail on prob to a timer. if (affected.implants.len) @@ -198,13 +198,13 @@ if(istype(obj,/obj/item/weapon/implant)) var/obj/item/weapon/implant/imp = obj if (imp.islegal()) - find_prob +=60 + time_to_remove += 10 SECONDS // CHOMPEdit: Changes surgery pass/fail on prob to a timer. else - find_prob +=40 + time_to_remove += 20 SECONDS // CHOMPEdit: Changes surgery pass/fail on prob to a timer. else - find_prob +=50 + time_to_remove += 10 SECONDS // CHOMPEdit: Changes surgery pass/fail on prob to a timer. This else is shrapnel and the like. - if (prob(find_prob)) + if(do_after(user, time_to_remove)) // CHOMPEdit: Changes surgery pass/fail on prob to a timer. user.visible_message("[user] takes something out of incision on [target]'s [affected.name] with \the [tool]!", \ "You take [obj] out of incision on [target]'s [affected.name]s with \the [tool]!" ) affected.implants -= obj @@ -229,7 +229,7 @@ imp.imp_in = null imp.implanted = 0 else if(istype(tool,/obj/item/device/nif)){var/obj/item/device/nif/N = tool;N.unimplant(target)} //VOREStation Add - NIF support - else + else // CHOMPEdit: Shouldn't hit this anymore, but leaving in just-in-case. user.visible_message("[user] removes \the [tool] from [target]'s [affected.name].", \ "There's something inside [target]'s [affected.name], but you just missed it this time." ) else From 9978526d936e976cb908bdae6ff798b6383c70be Mon Sep 17 00:00:00 2001 From: Casey Date: Sat, 9 Apr 2022 17:09:09 -0400 Subject: [PATCH 07/20] Some final tweaks --- code/modules/holodeck/HolodeckControl.dm | 4 +- maps/groundbase/gb-z1.dmm | 128 +++++++- maps/groundbase/gb-z2.dmm | 113 ++++++- maps/groundbase/gb-z3.dmm | 45 ++- maps/groundbase/groundbase_areas.dm | 11 + maps/groundbase/pois/outdoors4.dmm | 153 +++++++++ maps/groundbase/pois/outdoors5.dmm | 144 ++++++++ maps/stellardelight/ship_centcom.dmm | 22 +- maps/stellardelight/ship_misc.dmm | 398 +++++++++++------------ maps/tether/submaps/tether_centcom.dmm | 18 +- maps/tether/submaps/tether_misc.dmm | 11 +- 11 files changed, 814 insertions(+), 233 deletions(-) create mode 100644 maps/groundbase/pois/outdoors4.dmm create mode 100644 maps/groundbase/pois/outdoors5.dmm diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm index 6ff8e4eff4..61695672d6 100644 --- a/code/modules/holodeck/HolodeckControl.dm +++ b/code/modules/holodeck/HolodeckControl.dm @@ -67,13 +67,13 @@ "Gym" = new/datum/holodeck_program(/area/holodeck/source_gym), //VOREStation add "Game Room" = new/datum/holodeck_program(/area/holodeck/source_game_room), //VOREStation add "Patient Ward" = new/datum/holodeck_program(/area/holodeck/source_patient_ward), //VOREStation add + "Inside" = new/datum/holodeck_program(/area/holodeck/the_uwu_zone, list('sound/vore/sunesound/prey/loop.ogg')), //VOREStation add "Turn Off" = new/datum/holodeck_program(/area/holodeck/source_plating, list()) ) var/list/restricted_programs = list( "Burnoff Test Simulation" = new/datum/holodeck_program(/area/holodeck/source_burntest, list()), - "Wildlife Simulation" = new/datum/holodeck_program(/area/holodeck/source_wildlife, list()), - "Inside" = new/datum/holodeck_program(/area/holodeck/the_uwu_zone, list('sound/vore/sunesound/prey/loop.ogg')), //VOREStation add + "Wildlife Simulation" = new/datum/holodeck_program(/area/holodeck/source_wildlife, list()) ) /obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob) diff --git a/maps/groundbase/gb-z1.dmm b/maps/groundbase/gb-z1.dmm index 63d879b98b..ccbc664357 100644 --- a/maps/groundbase/gb-z1.dmm +++ b/maps/groundbase/gb-z1.dmm @@ -2740,7 +2740,8 @@ id = "PubPrep"; name = "Public Access Shutter"; pixel_x = -26; - req_access = list(62) + req_access = null; + req_one_access = list(18) }, /turf/simulated/floor/outdoors/grass/virgo3c, /area/groundbase/civilian/gateway) @@ -5384,6 +5385,21 @@ }, /turf/simulated/wall, /area/groundbase/medical/autoresleeving) +<<<<<<< HEAD +======= +"nN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/yellow{ + icon_state = "2-4" + }, +/turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, +/area/groundbase/level1/centsquare) +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks "nO" = ( /obj/machinery/suit_cycler, /turf/simulated/floor/tiled, @@ -6734,13 +6750,13 @@ dir = 4 }, /obj/machinery/door/airlock/glass{ - name = "Gateway" + name = "EVA Access" }, /obj/machinery/door/blast/shutters{ dir = 4; id = "PubPrep"; layer = 3.3; - name = "Gateway Access Shutters" + name = "EVA Access Shutters" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -8469,6 +8485,30 @@ }, /turf/simulated/floor/tiled/steel_ridged, /area/groundbase/security/halls) +<<<<<<< HEAD +======= +"vI" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/effect/floor_decal/rust, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/alarm{ + pixel_y = 28 + }, +/obj/machinery/light_switch{ + pixel_x = 15; + pixel_y = 30 + }, +/turf/simulated/floor/tiled/asteroid_steel, +/area/groundbase/civilian/mensrestroom) +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks "vJ" = ( /obj/effect/landmark/arrivals, /turf/simulated/floor/tiled/techfloor, @@ -9746,6 +9786,21 @@ }, /turf/simulated/floor/carpet/sblucarpet, /area/groundbase/security/iaa2) +<<<<<<< HEAD +======= +"yU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/turf/simulated/floor/outdoors/sidewalk/side/virgo3c, +/area/groundbase/level1/centsquare) +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks "yV" = ( /obj/machinery/station_map{ pixel_y = 32 @@ -10774,6 +10829,17 @@ outdoors = 0 }, /area/maintenance/groundbase/level1/nwtunnel) +<<<<<<< HEAD +======= +"Bv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/turf/simulated/floor/outdoors/sidewalk/virgo3c, +/area/groundbase/level1/centsquare) +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks "Bw" = ( /obj/item/weapon/stool/padded{ dir = 4 @@ -13661,7 +13727,7 @@ "IS" = ( /obj/structure/stairs/spawner/east, /turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, -/area/groundbase/level1/se) +/area/groundbase/level1/centsquare) "IU" = ( /obj/structure/cable{ icon_state = "1-4" @@ -17155,13 +17221,13 @@ "RU" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass{ - name = "Gateway" + name = "EVA Access" }, /obj/machinery/door/blast/shutters{ dir = 4; id = "PubPrep"; layer = 3.3; - name = "Gateway Access Shutters" + name = "EVA Access Shutters" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -18068,6 +18134,21 @@ }, /turf/simulated/floor/tiled/techfloor, /area/groundbase/command/ai/storage) +<<<<<<< HEAD +======= +"Uh" = ( +/obj/machinery/firealarm{ + dir = 1 + }, +/obj/effect/floor_decal/corner/pink/full, +/obj/structure/flora/pottedplant/orientaltree, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/groundbase/civilian/womensrestroom) +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks "Ui" = ( /obj/effect/landmark{ name = "JoinLateCyborg" @@ -18874,7 +18955,11 @@ /turf/simulated/floor/outdoors/newdirt_nograss/virgo3c{ outdoors = 0 }, +<<<<<<< HEAD /area/groundbase/level1/se) +======= +/area/groundbase/level1/nw) +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks "Wz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -32073,6 +32158,7 @@ dk Eb Eb wx +<<<<<<< HEAD Eb Eb Eb @@ -32083,6 +32169,18 @@ Nv Eb Eb Eb +======= +eR +eR +eR +pc +pc +pc +pc +eR +Eb +TK +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks Eb Eb aD @@ -32090,8 +32188,13 @@ GQ Mj Eb Eb +<<<<<<< HEAD Eb Eb +======= +yU +Yt +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks Eb Lt Lt @@ -32215,6 +32318,7 @@ Eb Eb Eb wx +<<<<<<< HEAD Eb Eb Eb @@ -32225,6 +32329,18 @@ Eb Eb Eb Eb +======= +eR +eR +eR +eR +eR +eR +eR +eR +Yt +TK +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks Lt Lt ua diff --git a/maps/groundbase/gb-z2.dmm b/maps/groundbase/gb-z2.dmm index e55babee15..2955866b68 100644 --- a/maps/groundbase/gb-z2.dmm +++ b/maps/groundbase/gb-z2.dmm @@ -3214,10 +3214,28 @@ /turf/simulated/floor/tiled/freezer/cold, /area/groundbase/civilian/kitchen/freezer) "jx" = ( +<<<<<<< HEAD /obj/structure/bed/chair/wood/wings, /obj/effect/landmark/start/chaplain, /turf/simulated/floor/lino, /area/groundbase/civilian/chapel/office) +======= +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/door/window/southright{ + dir = 1; + name = "shower door" + }, +/turf/simulated/floor/tiled/white, +/area/groundbase/dorms/room2) +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks "jy" = ( /obj/machinery/gibber, /turf/simulated/floor/tiled/freezer/cold, @@ -4790,6 +4808,7 @@ /area/groundbase/cargo/office) "op" = ( /obj/machinery/light, +/obj/machinery/suspension_gen, /turf/simulated/floor/tiled, /area/groundbase/science/hall) "oq" = ( @@ -5281,6 +5300,27 @@ /obj/machinery/transhuman/synthprinter, /turf/simulated/floor/tiled, /area/groundbase/science/robotics) +<<<<<<< HEAD +======= +"pT" = ( +/obj/machinery/suspension_gen, +/turf/simulated/floor/tiled, +/area/groundbase/science/hall) +"pU" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock{ + name = "Chapel Office"; + req_access = list(27) + }, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/steel_ridged, +/area/groundbase/civilian/chapel) +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks "pV" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -5940,6 +5980,25 @@ /obj/machinery/camera/network/civilian, /turf/simulated/floor/tiled, /area/groundbase/civilian/hydroponics) +<<<<<<< HEAD +======= +"rR" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/door/window/southright{ + dir = 1; + name = "shower door" + }, +/turf/simulated/floor/tiled/white, +/area/groundbase/dorms/room6) +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks "rT" = ( /obj/machinery/camera/network/research/xenobio{ dir = 4 @@ -7015,6 +7074,25 @@ }, /turf/simulated/floor/tiled/dark, /area/groundbase/dorms) +<<<<<<< HEAD +======= +"vw" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/machinery/alarm{ + dir = 8 + }, +/obj/machinery/door/window/southright{ + dir = 1; + name = "shower door" + }, +/turf/simulated/floor/tiled/white, +/area/groundbase/dorms/room8) +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks "vy" = ( /obj/structure/railing/grey{ dir = 4 @@ -11022,12 +11100,23 @@ /turf/simulated/floor/outdoors/sidewalk/slab/virgo3c, /area/groundbase/level2/nw) "Ho" = ( +<<<<<<< HEAD /obj/machinery/power/apc{ dir = 8 }, /obj/structure/cable/yellow{ icon_state = "0-4" }, +======= +/obj/structure/table/woodentable, +/obj/random/donkpocketbox, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + dir = 8 + }, +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks /turf/simulated/floor/wood, /area/groundbase/dorms/room5) "Hp" = ( @@ -11356,6 +11445,20 @@ /obj/machinery/door/firedoor, /turf/simulated/floor, /area/groundbase/civilian/hydroponics) +<<<<<<< HEAD +======= +"Io" = ( +/obj/structure/table/woodentable, +/obj/random/donkpocketbox, +/obj/machinery/power/apc{ + dir = 8 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, +/turf/simulated/floor/wood, +/area/groundbase/dorms/room5) +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks "Ip" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -11608,8 +11711,14 @@ /obj/machinery/power/apc{ dir = 8 }, +<<<<<<< HEAD /obj/structure/cable/yellow{ icon_state = "0-4" +======= +/obj/machinery/door/window/southright{ + dir = 1; + name = "shower door" +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks }, /turf/simulated/floor/wood, /area/groundbase/dorms/room1) @@ -13661,7 +13770,7 @@ /turf/simulated/floor/virgo3c{ edge_blending_priority = -1 }, -/area/groundbase/level2/nw) +/area/groundbase/level2/northspur) "OJ" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -22927,7 +23036,7 @@ Ov PR lw Vr -Vr +pT XX XX aa diff --git a/maps/groundbase/gb-z3.dmm b/maps/groundbase/gb-z3.dmm index 57cdd78553..262c64c71a 100644 --- a/maps/groundbase/gb-z3.dmm +++ b/maps/groundbase/gb-z3.dmm @@ -4518,6 +4518,7 @@ jv jv jv jv +<<<<<<< HEAD qO qO qO @@ -4546,6 +4547,36 @@ qO qO qO qO +======= +Zo +Zo +Zo +Zo +Zo +Zo +Zo +Xv +Xv +Xv +Xv +Xv +Xv +Xv +Xv +Xv +Zo +Zo +Zo +Zo +QD +QD +Zo +Zo +Zo +Zo +Zo +Zo +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks Kr Kr Kr @@ -8457,7 +8488,7 @@ kU kU kU kU -pf +kU pf pf pf @@ -8599,7 +8630,7 @@ kU kU kU kU -pf +kU pf pf pf @@ -8741,7 +8772,7 @@ kU kU kU kU -pf +kU pf pf pf @@ -8883,7 +8914,7 @@ kU kU kU kU -pf +kU pf pf pf @@ -9025,7 +9056,7 @@ kU kU kU kU -pf +kU pf pf pf @@ -9167,7 +9198,7 @@ kU kU kU kU -pf +kU pf pf pf @@ -9309,7 +9340,7 @@ kU kU kU kU -pf +kU pf pf pf diff --git a/maps/groundbase/groundbase_areas.dm b/maps/groundbase/groundbase_areas.dm index 5c911ea81d..403ee310a8 100644 --- a/maps/groundbase/groundbase_areas.dm +++ b/maps/groundbase/groundbase_areas.dm @@ -365,6 +365,17 @@ /area/groundbase/civilian/gameroom name = "Gamatorium" sound_env = SMALL_SOFTFLOOR +<<<<<<< HEAD +======= +/area/groundbase/civilian/mensrestroom + name = "Men's Restroom" + sound_env = SOUND_ENVIRONMENT_BATHROOM + lightswitch = 1 +/area/groundbase/civilian/womensrestroom + name = "Women's Restroom" + sound_env = SOUND_ENVIRONMENT_BATHROOM + lightswitch = 1 +>>>>>>> d8515387bc... Merge pull request #12695 from Very-Soft/gbtweaks /area/groundbase/exploration name = "Exploration" diff --git a/maps/groundbase/pois/outdoors4.dmm b/maps/groundbase/pois/outdoors4.dmm new file mode 100644 index 0000000000..2a9c33e717 --- /dev/null +++ b/maps/groundbase/pois/outdoors4.dmm @@ -0,0 +1,153 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"d" = ( +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin1) +"h" = ( +/obj/structure/table/standard, +/obj/random/maintenance/misc, +/obj/item/device/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin1) +"i" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp{ + pixel_x = 2; + pixel_y = 7 + }, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin1) +"k" = ( +/obj/random/crate, +/obj/random/maintenance/misc, +/obj/random/maintenance/misc, +/obj/random/maintenance/misc, +/obj/random/maintenance/misc, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin1) +"l" = ( +/obj/structure/bed/chair/sofa/right/black{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin1) +"n" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor, +/area/groundbase/poi/outdoor/cabin1) +"u" = ( +/turf/simulated/floor/outdoors/grass/virgo3c, +/area/groundbase/poi/outdoor) +"B" = ( +/obj/structure/table/standard, +/obj/random/maintenance/misc, +/obj/random/maintenance/misc, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin1) +"G" = ( +/obj/structure/bed/chair/sofa/black, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin1) +"K" = ( +/obj/structure/bed/chair/sofa/left/black, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin1) +"O" = ( +/obj/structure/table/standard, +/obj/random/maintenance/misc, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin1) +"U" = ( +/obj/structure/flora/tree/bigtree, +/turf/simulated/floor/outdoors/grass/virgo3c, +/area/groundbase/poi/outdoor) +"V" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/turf/simulated/floor, +/area/groundbase/poi/outdoor/cabin1) +"X" = ( +/turf/simulated/wall/wood, +/area/groundbase/poi/outdoor/cabin1) +"Z" = ( +/obj/structure/bed/chair/sofa/corner/black{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin1) + +(1,1,1) = {" +X +X +V +V +V +X +X +a +"} +(2,1,1) = {" +X +Z +l +d +d +i +V +a +"} +(3,1,1) = {" +V +G +h +d +d +O +V +a +"} +(4,1,1) = {" +V +K +d +d +X +X +X +u +"} +(5,1,1) = {" +X +B +d +k +X +u +u +u +"} +(6,1,1) = {" +X +X +n +X +X +u +u +u +"} +(7,1,1) = {" +a +u +u +u +u +u +U +u +"} diff --git a/maps/groundbase/pois/outdoors5.dmm b/maps/groundbase/pois/outdoors5.dmm new file mode 100644 index 0000000000..198ed3046f --- /dev/null +++ b/maps/groundbase/pois/outdoors5.dmm @@ -0,0 +1,144 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/template_noop, +/area/template_noop) +"b" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor, +/area/groundbase/poi/outdoor/cabin2) +"c" = ( +/turf/simulated/floor/outdoors/grass/virgo3c, +/area/groundbase/poi/outdoor) +"g" = ( +/obj/structure/table/standard, +/obj/random/maintenance/misc, +/obj/item/device/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin2) +"l" = ( +/obj/structure/table/rack/steel, +/obj/random/maintenance/misc, +/obj/random/maintenance/misc, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin2) +"q" = ( +/obj/structure/table/standard, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin2) +"u" = ( +/obj/structure/table/standard, +/obj/random/maintenance/misc, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin2) +"z" = ( +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin2) +"B" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/turf/simulated/floor, +/area/groundbase/poi/outdoor/cabin2) +"G" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp/green{ + pixel_x = 1; + pixel_y = 5 + }, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin2) +"L" = ( +/obj/structure/bed/chair/sofa/right/black, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin2) +"O" = ( +/obj/structure/bed/chair/sofa/left/black, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin2) +"T" = ( +/turf/simulated/wall/wood, +/area/groundbase/poi/outdoor/cabin2) +"V" = ( +/obj/structure/bed/chair/sofa/black, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin2) +"Y" = ( +/obj/structure/table/rack/steel, +/obj/random/maintenance/misc, +/turf/simulated/floor/wood, +/area/groundbase/poi/outdoor/cabin2) + +(1,1,1) = {" +a +T +T +T +a +a +"} +(2,1,1) = {" +T +T +G +T +T +a +"} +(3,1,1) = {" +T +u +z +Y +T +c +"} +(4,1,1) = {" +B +L +z +z +T +c +"} +(5,1,1) = {" +B +V +z +z +b +c +"} +(6,1,1) = {" +B +O +z +z +T +c +"} +(7,1,1) = {" +T +q +z +l +T +c +"} +(8,1,1) = {" +T +T +g +T +T +a +"} +(9,1,1) = {" +a +T +T +T +a +a +"} diff --git a/maps/stellardelight/ship_centcom.dmm b/maps/stellardelight/ship_centcom.dmm index deb5b85446..2be38f948f 100644 --- a/maps/stellardelight/ship_centcom.dmm +++ b/maps/stellardelight/ship_centcom.dmm @@ -5132,13 +5132,13 @@ /turf/unsimulated/floor/techfloor_grid, /area/centcom/evac) "uC" = ( -/obj/machinery/computer/shuttle_control/emergency{ - dir = 8 - }, /obj/machinery/light/floortube{ dir = 4; pixel_x = 6 }, +/obj/machinery/computer{ + dir = 8 + }, /turf/simulated/shuttle/floor, /area/centcom/terminal) "uD" = ( @@ -5193,8 +5193,8 @@ /turf/simulated/shuttle/floor, /area/shuttle/escape) "uT" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8 +/obj/machinery/ion_engine{ + dir = 4 }, /turf/simulated/shuttle/plating, /area/centcom/terminal) @@ -6665,6 +6665,16 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/centcom/terminal) +"CP" = ( +/obj/machinery/door/airlock/angled_bay/external/glass{ + dir = 4; + door_color = "#822a1e"; + frequency = null; + id_tag = null; + locked = 1 + }, +/turf/simulated/shuttle/floor/yellow, +/area/centcom/terminal) "CR" = ( /obj/machinery/porta_turret/crescent{ density = 1 @@ -20353,7 +20363,7 @@ dm dm wb wb -dm +CP wb wb dm diff --git a/maps/stellardelight/ship_misc.dmm b/maps/stellardelight/ship_misc.dmm index 3e8ad6b3d4..69f458fecf 100644 --- a/maps/stellardelight/ship_misc.dmm +++ b/maps/stellardelight/ship_misc.dmm @@ -2186,9 +2186,9 @@ }, /area/holodeck/source_gym) "PL" = ( -/turf/simulated/floor/holofloor/reinforced, -/turf/simulated/floor/flesh, -/area/holodeck/the_uwu_zone) +/turf/space, +/turf/space, +/area/space) "PM" = ( /turf/simulated/floor/smole/megablocks, /area/holodeck/source_smoleworld) @@ -9782,16 +9782,16 @@ Me Me Me dB -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly xp ap ap @@ -9924,16 +9924,16 @@ Me Me Me dB -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly xp ap ap @@ -10066,16 +10066,16 @@ PM Me Me dB -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly xp ap ap @@ -10208,16 +10208,16 @@ PM Me Me dB -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly xp ap ap @@ -10350,16 +10350,16 @@ PM Me Me dB -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly xp ap ap @@ -10492,16 +10492,16 @@ PM Me Me dB -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly xp ap ap @@ -10634,16 +10634,16 @@ PM Me Me dB -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly xp ap ap @@ -10776,16 +10776,16 @@ PM Me Me dB -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly xp ap ap @@ -10918,16 +10918,16 @@ Me Me Me dB -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly xp ap ap @@ -11060,16 +11060,16 @@ Me Me Me dB -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ -fZ +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly +Ly xp ap ap @@ -16030,16 +16030,16 @@ fz fz fS dB -Ly -Ly -Ly -Ly +ap +ap +ap +ap PL -Ly -Ly -Ly +ap +ap +ap PL -Ly +ap xp ap ap @@ -16172,16 +16172,16 @@ ei ei fJ dB -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap xp ap ap @@ -16314,16 +16314,16 @@ fJ fz fS dB -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap xp ap ap @@ -16456,16 +16456,16 @@ fJ ei fT dB -Ly -Ly -Ly -Ly +ap +ap +ap +ap PL -Ly -Ly -Ly +ap +ap +ap PL -Ly +ap xp ap ap @@ -16598,16 +16598,16 @@ fJ fA fU dB -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap xp ap ap @@ -16740,16 +16740,16 @@ ei ei fJ dB -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap xp ap ap @@ -16882,16 +16882,16 @@ fA fA fU dB -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap xp ap ap @@ -17024,16 +17024,16 @@ bh aG aG dB -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap xp ap ap @@ -17166,16 +17166,16 @@ dJ dK dK dB -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap xp ap ap @@ -17308,16 +17308,16 @@ dJ dJ dJ dB -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly -Ly +ap +ap +ap +ap +ap +ap +ap +ap +ap +ap xp ap ap diff --git a/maps/tether/submaps/tether_centcom.dmm b/maps/tether/submaps/tether_centcom.dmm index 03792bdbb0..29217edca2 100644 --- a/maps/tether/submaps/tether_centcom.dmm +++ b/maps/tether/submaps/tether_centcom.dmm @@ -4652,8 +4652,8 @@ /turf/simulated/floor/tiled, /area/centcom/main_hall) "qV" = ( -/obj/structure/shuttle/engine/propulsion{ - dir = 8 +/obj/machinery/ion_engine{ + dir = 4 }, /turf/simulated/shuttle/plating, /area/centcom/terminal) @@ -5769,7 +5769,7 @@ /turf/simulated/floor/tiled/white, /area/centcom/bathroom) "xj" = ( -/obj/machinery/computer/shuttle_control/emergency{ +/obj/machinery/computer{ dir = 8 }, /obj/machinery/light/floortube{ @@ -5955,6 +5955,16 @@ /area/centcom/security{ name = "\improper CentCom Security Arrivals" }) +"ya" = ( +/obj/machinery/door/airlock/angled_bay/external/glass{ + dir = 4; + door_color = "#822a1e"; + frequency = null; + id_tag = null; + locked = 1 + }, +/turf/simulated/shuttle/floor/yellow, +/area/centcom/terminal) "yb" = ( /obj/machinery/conveyor{ dir = 4; @@ -20369,7 +20379,7 @@ XL XL Cg Cg -XL +ya Cg Cg XL diff --git a/maps/tether/submaps/tether_misc.dmm b/maps/tether/submaps/tether_misc.dmm index 86fd2b4474..de17fd32f7 100644 --- a/maps/tether/submaps/tether_misc.dmm +++ b/maps/tether/submaps/tether_misc.dmm @@ -3498,9 +3498,6 @@ "Az" = ( /turf/unsimulated/beach/coastline, /area/beach) -"Ba" = ( -/turf/simulated/floor/holofloor/reinforced, -/area/holodeck/the_uwu_zone) "Bi" = ( /obj/structure/table/woodentable/holotable, /obj/effect/landmark/costume/madscientist, @@ -124013,11 +124010,11 @@ bN bN bN bN -Ba bN bN bN -Ba +bN +bN bN fZ ap @@ -124439,11 +124436,11 @@ bN bN bN bN -Ba bN bN bN -Ba +bN +bN bN fZ ap From 9e5859f6678ee3fca1f3463552c8222f25921654 Mon Sep 17 00:00:00 2001 From: Razgriz Date: Sat, 9 Apr 2022 19:42:33 -0700 Subject: [PATCH 08/20] No recoil for toy guns --- code/modules/projectiles/guns/toy.dm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/code/modules/projectiles/guns/toy.dm b/code/modules/projectiles/guns/toy.dm index e3b90bd1be..680057dcd4 100644 --- a/code/modules/projectiles/guns/toy.dm +++ b/code/modules/projectiles/guns/toy.dm @@ -30,7 +30,7 @@ projectile_type = /obj/item/projectile/bullet/cap matter = list(MAT_STEEL = 1000) handle_casings = null - recoil = 1 //it's a toy + recoil = 0 //it's a toy //CHOMP Edit /* * Shotgun @@ -52,7 +52,7 @@ projectile_type = /obj/item/projectile/bullet/foam_dart matter = list(MAT_PLASTIC = 2000) handle_casings = null - recoil = null //it's a toy + recoil = 0 //it's a toy //CHOMP Edit /* * Pistol @@ -70,7 +70,7 @@ origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1) load_method = MAGAZINE matter = list(MAT_PLASTIC = 1000) - recoil = null //it's a toy + recoil = 0 //it's a toy //CHOMP Edit /obj/item/weapon/gun/projectile/pistol/toy/update_icon() if(ammo_magazine) @@ -215,6 +215,7 @@ cell_type = /obj/item/weapon/cell/device/weapon/recharge battery_lock = 1 var/required_vest + recoil = 0 //it's a toy //CHOMP Edit /obj/item/weapon/gun/energy/lasertag/special_check(var/mob/living/carbon/human/M) if(ishuman(M)) @@ -248,4 +249,4 @@ item_state = "retro" /obj/item/weapon/gun/energy/lasertag/omni - projectile_type = /obj/item/projectile/beam/lasertag/omni \ No newline at end of file + projectile_type = /obj/item/projectile/beam/lasertag/omni From af091125c475444509e24445a04c1bccb1d05ba3 Mon Sep 17 00:00:00 2001 From: Sk1tza Date: Sun, 10 Apr 2022 00:53:32 -0400 Subject: [PATCH 09/20] New RingTail --- .../new_player/sprite_accessories_tail_ch.dm | 10 +++++++++- icons/mob/vore/taurs_ch.dmi | Bin 71506 -> 73630 bytes 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/code/modules/mob/new_player/sprite_accessories_tail_ch.dm b/code/modules/mob/new_player/sprite_accessories_tail_ch.dm index 16a9320d41..efe3a48418 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail_ch.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_ch.dm @@ -133,4 +133,12 @@ /datum/sprite_accessory/tail/longtail/longflufftail name = "Long fluffy tail" icon = 'icons/mob/vore/taurs_ch.dmi' - icon_state = "longflufftail" \ No newline at end of file + icon_state = "longflufftail" + +/datum/sprite_accessory/tail/longtail/ringtailbig + name = "Long ring tail" + icon = 'icons/mob/vore/taurs_ch.dmi' + icon_state = "bigringtail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "bigringtail_markings" \ No newline at end of file diff --git a/icons/mob/vore/taurs_ch.dmi b/icons/mob/vore/taurs_ch.dmi index 30c4de9b3eb2052f2cebdbfcb8a790e16c8aed36..3ad64c75706a436da0d80dfc66da73af5ba0b2f8 100644 GIT binary patch delta 14949 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 delta 12808 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 From 3b5c753b7b843a578dc0adff61c9081af684c695 Mon Sep 17 00:00:00 2001 From: Rykka Date: Fri, 1 Apr 2022 05:22:48 -0600 Subject: [PATCH 10/20] Start of TGMC Ammo HUD Port Ports Ammo HUD from TGMC, still WIP. Progress Commit for tracking + allowing work on it later. --- code/_onclick/hud/_defines_ch.dm | 8 ++ code/_onclick/hud/hud.dm | 5 + code/_onclick/hud/hud_ch.dm | 29 +++++ code/_onclick/hud/screen_objects_ch.dm | 107 ++++++++++++++++++ code/_onclick/hud/screen_objects_zz_ch.dm | 30 ----- .../items/weapons/grenades/explosive.dm | 1 + .../objects/items/weapons/grenades/grenade.dm | 2 + .../items/weapons/grenades/smokebomb.dm | 1 + icons/mob/ammoHUD.dmi | Bin 0 -> 5639 bytes vorestation.dme | 4 +- 10 files changed, 156 insertions(+), 31 deletions(-) create mode 100644 code/_onclick/hud/_defines_ch.dm create mode 100644 code/_onclick/hud/hud_ch.dm create mode 100644 code/_onclick/hud/screen_objects_ch.dm delete mode 100644 code/_onclick/hud/screen_objects_zz_ch.dm create mode 100644 icons/mob/ammoHUD.dmi diff --git a/code/_onclick/hud/_defines_ch.dm b/code/_onclick/hud/_defines_ch.dm new file mode 100644 index 0000000000..3fb902eba8 --- /dev/null +++ b/code/_onclick/hud/_defines_ch.dm @@ -0,0 +1,8 @@ +/** CHOMP-Specific Defines + * Put defines specific to OUR HUDs here. + * First thing to go here is the TGMC Ammo HUD. + */ +#define ui_ammo_hud1 "EAST-1:28,CENTER+1:25" +#define ui_ammo_hud2 "EAST-1:28,CENTER+2:27" +#define ui_ammo_hud3 "EAST-1:28,CENTER+3:29" +#define ui_ammo_hud4 "EAST-1:28,CENTER+4:31" \ No newline at end of file diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 98c187fc97..2f2ed75400 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -1,3 +1,4 @@ +#define MAX_AMMO_HUD_POSSIBLE 4 // Cap the amount of HUDs at 4. /* The global hud: Uses the same visual objects for all players. @@ -191,6 +192,9 @@ var/list/global_huds = list( var/icon/ui_style var/ui_color var/ui_alpha + + // TGMC Ammo HUD Port + var/list/obj/screen/ammo_hud_list = list() var/list/minihuds = list() @@ -220,6 +224,7 @@ var/list/global_huds = list( other_important = null hotkeybuttons = null // item_action_list = null // ? + QDEL_LIST(ammo_hud_list) mymob = null /datum/hud/proc/hidden_inventory_update() diff --git a/code/_onclick/hud/hud_ch.dm b/code/_onclick/hud/hud_ch.dm new file mode 100644 index 0000000000..f68ecb0864 --- /dev/null +++ b/code/_onclick/hud/hud_ch.dm @@ -0,0 +1,29 @@ +/** + * CHOMP-Specific HUD override. This will be backported to Polaris if they want it. + */ +///Add an ammo hud to the user informing of the ammo count of G +/datum/hud/proc/add_ammo_hud(mob/living/user, obj/item/weapon/gun/G) + if(length(ammo_hud_list) >= MAX_AMMO_HUD_POSSIBLE) + return + var/obj/screen/ammo/ammo_hud = new + ammo_hud_list[G] = ammo_hud + ammo_hud.screen_loc = ammo_hud.ammo_screen_loc_list[length(ammo_hud_list)] + ammo_hud.add_hud(user, G) + ammo_hud.update_hud(user, G) + +///Remove the ammo hud related to the gun G from the user +/datum/hud/proc/remove_ammo_hud(mob/living/user, obj/item/weapon/gun/G) + var/obj/screen/ammo/ammo_hud = ammo_hud_list[G] + ammo_hud.remove_hud(user, G) + qdel(ammo_hud) + ammo_hud_list -= G + var/i = 1 + for(var/key in ammo_hud_list) + ammo_hud = ammo_hud_list[key] + ammo_hud.screen_loc = ammo_hud.ammo_screen_loc_list[i] + i++ + +///Update the ammo hud related to the gun G +/datum/hud/proc/update_ammo_hud(mob/living/user, obj/item/weapon/gun/G) + var/obj/screen/ammo/ammo_hud = ammo_hud_list[G] + ammo_hud?.update_hud(user, G) \ No newline at end of file diff --git a/code/_onclick/hud/screen_objects_ch.dm b/code/_onclick/hud/screen_objects_ch.dm new file mode 100644 index 0000000000..07886a4546 --- /dev/null +++ b/code/_onclick/hud/screen_objects_ch.dm @@ -0,0 +1,107 @@ +//Invesitgating a runtime made me discover that all simplemobs have HUD on hands set to themselves +//Which cause this original code to die because the mob does not have a mymob var... +//So yeah this is why we now check if it is type of mob first... +//Is this pretty? Fuck no, but its how i know to fix it -shark +//Oh also the swap button on simple mob hands has hud set to null so we also need to catch that. +/obj/screen/inventory/add_overlays() + if(!hud) //Simplemob swap hands button has this set to null :) + return + var/mob/user + if(istype(hud,/mob )) //Simplemob hands directly reference the mob in hud, dont ask me. + user = hud + else + user = hud.mymob //original intended behaviour + if(hud && user && slot_id) + + var/obj/item/holding = user.get_active_hand() + + if(!holding || user.get_equipped_item(slot_id)) + return + + var/image/item_overlay = image(holding) + item_overlay.alpha = 92 + + if(!holding.mob_can_equip(user, slot_id, disable_warning = TRUE)) + item_overlay.color = "#ff0000" + else + item_overlay.color = "#00ff00" + + object_overlays += item_overlay + add_overlay(object_overlays) + +// Begin TGMC Ammo HUD Port +/obj/screen/ammo + name = "ammo" + icon = 'icons/mob/ammoHUD.dmi' + icon_state = "ammo" + screen_loc = ui_ammo_hud1 + var/warned = FALSE + var/static/list/ammo_screen_loc_list = list(ui_ammo_hud1, ui_ammo_hud2, ui_ammo_hud3 ,ui_ammo_hud4) + +/obj/screen/ammo/proc/add_hud(var/mob/living/user) + if(!user?.client) + return + + var/obj/item/weapon/gun/G = user.get_active_hand() + + if(!G || !G.has_ammo_counter() || !G.hud_enabled) + return + + user.client.screen += src + +/obj/screen/ammo/proc/remove_hud(var/mob/living/user) + user?.client?.screen -= src + +/obj/screen/ammo/proc/update_hud(var/mob/living/user) + if(!user?.client?.screen.Find(src)) + return + + var/obj/item/weapon/gun/G = user.get_active_hand() + + if(!G || !istype(G) || !G.has_ammo_counter() || !G.hud_enabled || !G.get_ammo_type() || isnull(G.get_ammo_count())) + remove_hud() + return + + var/list/ammo_type = G.get_ammo_type() + var/rounds = G.get_ammo_count() + + var/hud_state = ammo_type[1] + var/hud_state_empty = ammo_type[2] + + overlays.Cut() + + var/empty = image('icons/mob/ammoHUD.dmi', src, "[hud_state_empty]") + + if(rounds == 0) + if(warned) + overlays += empty + else + warned = TRUE + var/obj/screen/ammo/F = new /obj/screen/ammo(src) + F.icon_state = "frame" + user.client.screen += F + flick("[hud_state_empty]_flash", F) + spawn(20) + user.client.screen -= F + qdel(F) + overlays += empty + else + warned = FALSE + overlays += image('icons/mob/ammoHUD.dmi', src, "[hud_state]") + + rounds = num2text(rounds) + //Handle the amount of rounds + switch(length(rounds)) + if(1) + overlays += image('icons/mob/ammoHUD.dmi', src, "o[rounds[1]]") + if(2) + overlays += image('icons/mob/ammoHUD.dmi', src, "o[rounds[2]]") + overlays += image('icons/mob/ammoHUD.dmi', src, "t[rounds[1]]") + if(3) + overlays += image('icons/mob/ammoHUD.dmi', src, "o[rounds[3]]") + overlays += image('icons/mob/ammoHUD.dmi', src, "t[rounds[2]]") + overlays += image('icons/mob/ammoHUD.dmi', src, "h[rounds[1]]") + else //"0" is still length 1 so this means it's over 999 + overlays += image('icons/mob/ammoHUD.dmi', src, "o9") + overlays += image('icons/mob/ammoHUD.dmi', src, "t9") + overlays += image('icons/mob/ammoHUD.dmi', src, "h9") \ No newline at end of file diff --git a/code/_onclick/hud/screen_objects_zz_ch.dm b/code/_onclick/hud/screen_objects_zz_ch.dm deleted file mode 100644 index f0fbd912fe..0000000000 --- a/code/_onclick/hud/screen_objects_zz_ch.dm +++ /dev/null @@ -1,30 +0,0 @@ -//Invesitgating a runtime made me discover that all simplemobs have HUD on hands set to themselves -//Which cause this original code to die because the mob does not have a mymob var... -//So yeah this is why we now check if it is type of mob first... -//Is this pretty? Fuck no, but its how i know to fix it -shark -//Oh also the swap button on simple mob hands has hud set to null so we also need to catch that. -/obj/screen/inventory/add_overlays() - if(!hud) //Simplemob swap hands button has this set to null :) - return - var/mob/user - if(istype(hud,/mob )) //Simplemob hands directly reference the mob in hud, dont ask me. - user = hud - else - user = hud.mymob //original intended behaviour - if(hud && user && slot_id) - - var/obj/item/holding = user.get_active_hand() - - if(!holding || user.get_equipped_item(slot_id)) - return - - var/image/item_overlay = image(holding) - item_overlay.alpha = 92 - - if(!holding.mob_can_equip(user, slot_id, disable_warning = TRUE)) - item_overlay.color = "#ff0000" - else - item_overlay.color = "#00ff00" - - object_overlays += item_overlay - add_overlay(object_overlays) \ No newline at end of file diff --git a/code/game/objects/items/weapons/grenades/explosive.dm b/code/game/objects/items/weapons/grenades/explosive.dm index 076a7accce..77e07e2c5f 100644 --- a/code/game/objects/items/weapons/grenades/explosive.dm +++ b/code/game/objects/items/weapons/grenades/explosive.dm @@ -12,6 +12,7 @@ //The radius of the circle used to launch projectiles. Lower values mean less projectiles are used but if set too low gaps may appear in the spread pattern var/spread_range = 7 loadable = null + hud_state = "grenade_frag" // TGMC Ammo HUD Port /obj/item/weapon/grenade/explosive/detonate() ..() diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 209e47b253..9bdf650c64 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -13,6 +13,8 @@ var/det_time = 50 var/loadable = TRUE var/arm_sound = 'sound/weapons/armbomb.ogg' + var/hud_state = "grenade_he" // TGMC Ammo HUD Port + var/hud_state_empty = "grenade_empty" // TGMC Ammo HUD Port /obj/item/weapon/grenade/proc/clown_check(var/mob/living/user) if((CLUMSY in user.mutations) && prob(50)) diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index 75c0e6a299..1cb98be61a 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -6,6 +6,7 @@ det_time = 20 item_state = "flashbang" slot_flags = SLOT_BELT + hud_state = "grenade_smoke" var/datum/effect/effect/system/smoke_spread/bad/smoke var/smoke_color var/smoke_strength = 8 diff --git a/icons/mob/ammoHUD.dmi b/icons/mob/ammoHUD.dmi new file mode 100644 index 0000000000000000000000000000000000000000..e138438e0e69bfbba9d2a16cc384aac0a3e73b8e GIT binary patch literal 5639 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 literal 0 HcmV?d00001 diff --git a/vorestation.dme b/vorestation.dme index b09968cc59..55b0592e30 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -169,6 +169,7 @@ #include "code\_onclick\rig.dm" #include "code\_onclick\telekinesis.dm" #include "code\_onclick\hud\_defines.dm" +#include "code\_onclick\hud\_defines_ch.dm" #include "code\_onclick\hud\_defines_vr.dm" #include "code\_onclick\hud\ability_screen_objects.dm" #include "code\_onclick\hud\action.dm" @@ -180,6 +181,7 @@ #include "code\_onclick\hud\ghost.dm" #include "code\_onclick\hud\gun_mode.dm" #include "code\_onclick\hud\hud.dm" +#include "code\_onclick\hud\hud_ch.dm" #include "code\_onclick\hud\human.dm" #include "code\_onclick\hud\map_popups.dm" #include "code\_onclick\hud\minihud.dm" @@ -193,8 +195,8 @@ #include "code\_onclick\hud\robot.dm" #include "code\_onclick\hud\robot_vr.dm" #include "code\_onclick\hud\screen_objects.dm" +#include "code\_onclick\hud\screen_objects_ch.dm" #include "code\_onclick\hud\screen_objects_vr.dm" -#include "code\_onclick\hud\screen_objects_zz_ch.dm" #include "code\_onclick\hud\skybox.dm" #include "code\_onclick\hud\soulcatcher_guest.dm" #include "code\_onclick\hud\spell_screen_objects.dm" From 85e69ffba4e793be83bdbb53e6eff7ab8c7cc602 Mon Sep 17 00:00:00 2001 From: Rykka Date: Sun, 3 Apr 2022 21:51:07 -0600 Subject: [PATCH 11/20] Progress Commit 2 - Energy Gun HUD works, starting Projectiles Saving progress to resume later. --- code/_onclick/hud/screen_objects_ch.dm | 18 +++++++----- code/modules/projectiles/gun.dm | 5 ++++ code/modules/projectiles/gun_ch.dm | 28 ++++++++++++++++++- code/modules/projectiles/guns/energy.dm | 22 +++++++++++++++ .../projectiles/guns/projectile/shotgun.dm | 24 ++++++++++++++++ code/modules/projectiles/projectile/beams.dm | 5 ++++ .../modules/projectiles/projectile/bullets.dm | 8 ++++++ code/modules/projectiles/projectile_ch.dm | 2 ++ 8 files changed, 104 insertions(+), 8 deletions(-) diff --git a/code/_onclick/hud/screen_objects_ch.dm b/code/_onclick/hud/screen_objects_ch.dm index 07886a4546..2a0cf6f3e7 100644 --- a/code/_onclick/hud/screen_objects_ch.dm +++ b/code/_onclick/hud/screen_objects_ch.dm @@ -38,13 +38,17 @@ var/warned = FALSE var/static/list/ammo_screen_loc_list = list(ui_ammo_hud1, ui_ammo_hud2, ui_ammo_hud3 ,ui_ammo_hud4) -/obj/screen/ammo/proc/add_hud(var/mob/living/user) +/obj/screen/ammo/proc/add_hud(var/mob/living/user, var/obj/item/weapon/gun/G) + if(!user?.client) return + + // var/obj/item/weapon/gun/G = user.get_active_hand() + + if(!G) + CRASH("/obj/screen/ammo/proc/add_hud() has been called from [src] without the required param of G") - var/obj/item/weapon/gun/G = user.get_active_hand() - - if(!G || !G.has_ammo_counter() || !G.hud_enabled) + if(!G.has_ammo_counter()) return user.client.screen += src @@ -52,13 +56,13 @@ /obj/screen/ammo/proc/remove_hud(var/mob/living/user) user?.client?.screen -= src -/obj/screen/ammo/proc/update_hud(var/mob/living/user) +/obj/screen/ammo/proc/update_hud(var/mob/living/user, var/obj/item/weapon/gun/G) if(!user?.client?.screen.Find(src)) return - var/obj/item/weapon/gun/G = user.get_active_hand() + // var/obj/item/weapon/gun/G = user.get_active_hand() - if(!G || !istype(G) || !G.has_ammo_counter() || !G.hud_enabled || !G.get_ammo_type() || isnull(G.get_ammo_count())) + if(!G || !istype(G) || !G.has_ammo_counter() || !G.get_ammo_type() || isnull(G.get_ammo_count())) remove_hud() return diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 217f206381..4b56821d01 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -451,6 +451,9 @@ to_chat(nerd, "You're so tiny that the pull of the trigger causes you to drop the gun!") //YAWNEDIT: Knockdown code end + + // CHOMPEdit: TGMC Ammo HUD insertion: + user.hud_used.update_ammo_hud(user, src) // Similar to the above proc, but does not require a user, which is ideal for things like turrets. /obj/item/weapon/gun/proc/Fire_userless(atom/target) @@ -543,6 +546,7 @@ /obj/item/weapon/gun/proc/handle_click_empty(mob/user) if (user) user.visible_message("*click click*", "*click*") + user.hud_used.update_ammo_hud(user, src) else src.visible_message("*click click*") playsound(src, 'sound/weapons/empty.ogg', 100, 1) @@ -774,6 +778,7 @@ var/datum/firemode/new_mode = firemodes[sel_mode] new_mode.apply_to(src) to_chat(user, "\The [src] is now set to [new_mode.name].") + user.hud_used.update_ammo_hud(user, src) // CHOMPEdit: TGMC Ammo HUD return new_mode diff --git a/code/modules/projectiles/gun_ch.dm b/code/modules/projectiles/gun_ch.dm index 58e2fd9483..61e657ae58 100644 --- a/code/modules/projectiles/gun_ch.dm +++ b/code/modules/projectiles/gun_ch.dm @@ -1,2 +1,28 @@ /obj/item/weapon/gun - var/holy = 0 //For Divinely blessed guns \ No newline at end of file + var/holy = 0 //For Divinely blessed guns + +/* TGMC Ammo HUD Port Begin */ +/obj/item/weapon/gun + var/hud_enabled = TRUE + +/obj/item/weapon/gun/proc/has_ammo_counter() + return FALSE + +/obj/item/weapon/gun/proc/get_ammo_type() + return FALSE + +/obj/item/weapon/gun/proc/get_ammo_count() + return FALSE + +/obj/item/weapon/gun/equipped(mob/living/user, slot) // When a gun is equipped to your hands, we'll add the HUD to the user. Pending porting over TGMC guncode where wielding is far more sensible. + if(slot == slot_l_hand || slot == slot_r_hand) + user.hud_used.add_ammo_hud(user, src) + else + user.hud_used.remove_ammo_hud(user, src) + + return ..() + +/obj/item/weapon/gun/dropped(mob/living/user) // Ditto as above, we remove the HUD. Pending porting TGMC code to clean up this fucking nightmare of spaghetti. + user.hud_used.remove_ammo_hud(user, src) + + ..() \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index b869a7c6b5..c9e418e5c4 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -92,6 +92,9 @@ power_supply.give(rechargeamt) //... to recharge 1/5th the battery update_icon() + var/mob/living/M = loc // CHOMPEdit: TGMC Ammo HUD + if(istype(M)) // CHOMPEdit: TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) // CHOMPEdit: TGMC Ammo HUD else charge_tick = 0 return 1 @@ -132,6 +135,7 @@ playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) update_icon() update_held_icon() + user.hud_used.update_ammo_hud(user, src) // CHOMPEdit: TGMC Ammo HUD else to_chat(user, "This cell is not fitted for [src].") return @@ -148,6 +152,7 @@ playsound(src, 'sound/weapons/empty.ogg', 50, 1) update_icon() update_held_icon() + user.hud_used.update_ammo_hud(user, src) // CHOMPEdit: TGMC Ammo HUD else to_chat(user, "[src] does not have a power cell.") @@ -235,3 +240,20 @@ results += ..() return results + +// CHOMPEDIT: TGMC AMMO HUD PORT Start +/obj/item/weapon/gun/energy/has_ammo_counter() + return TRUE + +/obj/item/weapon/gun/energy/get_ammo_type() + if(!projectile_type) + return list("unknown", "unknown") + else + var/obj/item/projectile/P = projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) + +/obj/item/weapon/gun/energy/get_ammo_count() + if(!power_supply) + return 0 + else + return FLOOR(power_supply.charge / max(charge_cost, 1), 1) \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 7a00e2b92e..3771e5810a 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -1,6 +1,30 @@ /* * Shotgun */ +// TGMC Ammo HUD Insertion +/obj/item/weapon/gun/projectile/shotgun/has_ammo_counter() + return TRUE + +/obj/item/weapon/gun/projectile/shotgun/get_ammo_type() + if(load_method == MAGAZINE) + if(!ammo_magazine) + + else if(load_method == SINGLE_CASING|SPEEDLOADER && loaded.len) + + else + return list("unknown", "unknown") + +/obj/item/weapon/gun/projectile/shotgun/get_ammo_count() + if(load_method == MAGAZINE) + if(!ammo_magazine) + return chambered ? 1 : 0 + else + return chambered ? (ammo_magazine.stored_ammo + 1) : ammo_magazine.stored_ammo + else if(load_method == SINGLE_CASING|SPEEDLOADER) + if(chambered) + else + + /obj/item/weapon/gun/projectile/shotgun/pump name = "shotgun" // desc = "The mass-produced MarsTech Meteor 29 shotgun is a favourite of police and security forces on many worlds. Uses 12g rounds." //CHOMP Disable diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 7cc79d8d15..4635684f25 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -20,6 +20,9 @@ muzzle_type = /obj/effect/projectile/muzzle/laser tracer_type = /obj/effect/projectile/tracer/laser impact_type = /obj/effect/projectile/impact/laser + + hud_state = "laser" + hud_state_empty = "battery_empty" /obj/item/projectile/beam/practice name = "laser" @@ -229,6 +232,8 @@ muzzle_type = /obj/effect/projectile/muzzle/stun tracer_type = /obj/effect/projectile/tracer/stun impact_type = /obj/effect/projectile/impact/stun + + hud_state = "taser" // TGMC Ammo HUD port /obj/item/projectile/beam/stun/weak name = "weak stun beam" diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index a1d09e76f1..2c2e0c12da 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -70,30 +70,38 @@ /obj/item/projectile/bullet/pistol // 9mm pistols and most SMGs. Sacrifice power for capacity. fire_sound = 'sound/weapons/gunshot2.ogg' damage = 20 + hud_state = "pistol" // CHOMPEdit: Putting these here for easier upstream porting. + hud_state_empty = "pistol_empty" // CHOMPEdit: Putting these here for easier upstream porting. /obj/item/projectile/bullet/pistol/ap damage = 15 armor_penetration = 30 + hud_state = "pistol_light_ap" // CHOMPEdit: Putting these here for easier upstream porting. /obj/item/projectile/bullet/pistol/hp damage = 25 armor_penetration = -50 + hud_state = "pistol_ap" // CHOMPEdit: Putting these here for easier upstream porting. /obj/item/projectile/bullet/pistol/medium // .45 (and maybe .40 if it ever gets added) caliber security pistols. Balance between capacity and power. fire_sound = 'sound/weapons/gunshot3.ogg' // Snappier sound. damage = 25 + hud_state = "pistol" // CHOMPEdit: Putting these here for easier upstream porting. /obj/item/projectile/bullet/pistol/medium/ap damage = 20 armor_penetration = 15 + hud_state = "pistol_light_ap" // CHOMPEdit: Putting these here for easier upstream porting. /obj/item/projectile/bullet/pistol/medium/hp damage = 30 armor_penetration = -50 + hud_state = "pistol_ap" // CHOMPEdit: Putting these here for easier upstream porting. /obj/item/projectile/bullet/pistol/strong // .357 and .44 caliber stuff. High power pistols like the Mateba or Desert Eagle. Sacrifice capacity for power. fire_sound = 'sound/weapons/gunshot4.ogg' damage = 60 + hud_state = "pistol_heavy" /obj/item/projectile/bullet/pistol/rubber/strong // "Rubber" bullets for high power pistols. fire_sound = 'sound/weapons/gunshot3.ogg' // Rubber shots have less powder, but these still have more punch than normal rubber shot. diff --git a/code/modules/projectiles/projectile_ch.dm b/code/modules/projectiles/projectile_ch.dm index a2af0b08be..649673c772 100644 --- a/code/modules/projectiles/projectile_ch.dm +++ b/code/modules/projectiles/projectile_ch.dm @@ -1,6 +1,8 @@ /obj/item/projectile /// If this projectile is holy. Silver bullets, etc. Currently no effects. var/holy = 0 + var/hud_state = "unknown" // TGMC Ammo HUD Port + var/hud_state_empty = "unknown" // TGMC Ammo HUD Port /obj/item/projectile/bullet/pellet/shotgun/silver name = "shrapnel" From ce6f0e568c3ea12f5d4df8d0f872d5ab8940a0e7 Mon Sep 17 00:00:00 2001 From: Rykka Date: Tue, 5 Apr 2022 21:26:50 -0600 Subject: [PATCH 12/20] Makes Projectile Ammo HUD code work! Now to just get all the boolets to have `hud_state`s set. D: --- code/_onclick/hud/screen_objects_ch.dm | 24 +++---- code/modules/projectiles/guns/projectile.dm | 60 ++++++++++++++++++ .../projectiles/guns/projectile/shotgun.dm | 26 +------- .../modules/projectiles/guns/projectile_ch.dm | 8 +++ icons/mob/{ammoHUD.dmi => screen_ammo.dmi} | Bin 5 files changed, 83 insertions(+), 35 deletions(-) rename icons/mob/{ammoHUD.dmi => screen_ammo.dmi} (100%) diff --git a/code/_onclick/hud/screen_objects_ch.dm b/code/_onclick/hud/screen_objects_ch.dm index 2a0cf6f3e7..0d70f974a5 100644 --- a/code/_onclick/hud/screen_objects_ch.dm +++ b/code/_onclick/hud/screen_objects_ch.dm @@ -32,7 +32,7 @@ // Begin TGMC Ammo HUD Port /obj/screen/ammo name = "ammo" - icon = 'icons/mob/ammoHUD.dmi' + icon = 'icons/mob/screen_ammo.dmi' icon_state = "ammo" screen_loc = ui_ammo_hud1 var/warned = FALSE @@ -74,7 +74,7 @@ overlays.Cut() - var/empty = image('icons/mob/ammoHUD.dmi', src, "[hud_state_empty]") + var/empty = image('icons/mob/screen_ammo.dmi', src, "[hud_state_empty]") if(rounds == 0) if(warned) @@ -91,21 +91,21 @@ overlays += empty else warned = FALSE - overlays += image('icons/mob/ammoHUD.dmi', src, "[hud_state]") + overlays += image('icons/mob/screen_ammo.dmi', src, "[hud_state]") rounds = num2text(rounds) //Handle the amount of rounds switch(length(rounds)) if(1) - overlays += image('icons/mob/ammoHUD.dmi', src, "o[rounds[1]]") + overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[1]]") if(2) - overlays += image('icons/mob/ammoHUD.dmi', src, "o[rounds[2]]") - overlays += image('icons/mob/ammoHUD.dmi', src, "t[rounds[1]]") + overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[2]]") + overlays += image('icons/mob/screen_ammo.dmi', src, "t[rounds[1]]") if(3) - overlays += image('icons/mob/ammoHUD.dmi', src, "o[rounds[3]]") - overlays += image('icons/mob/ammoHUD.dmi', src, "t[rounds[2]]") - overlays += image('icons/mob/ammoHUD.dmi', src, "h[rounds[1]]") + overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[3]]") + overlays += image('icons/mob/screen_ammo.dmi', src, "t[rounds[2]]") + overlays += image('icons/mob/screen_ammo.dmi', src, "h[rounds[1]]") else //"0" is still length 1 so this means it's over 999 - overlays += image('icons/mob/ammoHUD.dmi', src, "o9") - overlays += image('icons/mob/ammoHUD.dmi', src, "t9") - overlays += image('icons/mob/ammoHUD.dmi', src, "h9") \ No newline at end of file + overlays += image('icons/mob/screen_ammo.dmi', src, "o9") + overlays += image('icons/mob/screen_ammo.dmi', src, "t9") + overlays += image('icons/mob/screen_ammo.dmi', src, "h9") \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 31ffe40e13..e443fa27cb 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -98,6 +98,10 @@ if(handle_casings != HOLD_CASINGS) chambered = null + + var/mob/living/M = loc // CHOMPEdit: TGMC Ammo HUD + if(istype(M)) // CHOMPEdit: TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) //Attempts to load A into src, depending on the type of thing being loaded and the load_method @@ -117,6 +121,7 @@ AM.loc = src ammo_magazine = AM user.visible_message("[user] inserts [AM] into [src].", "You insert [AM] into [src].") + user.hud_used.update_ammo_hud(user, src) playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) if(SPEEDLOADER) if(loaded.len >= max_shells) @@ -131,8 +136,10 @@ loaded += C AM.stored_ammo -= C //should probably go inside an ammo_magazine proc, but I guess less proc calls this way... count++ + user.hud_used.update_ammo_hud(user, src) if(count) user.visible_message("[user] reloads [src].", "You load [count] round\s into [src].") + user.hud_used.update_ammo_hud(user, src) playsound(src, 'sound/weapons/empty.ogg', 50, 1) AM.update_icon() else if(istype(A, /obj/item/ammo_casing)) @@ -168,6 +175,7 @@ sleep(1 SECOND) update_icon() + user.hud_used.update_ammo_hud(user, src) //attempts to unload src. If allow_dump is set to 0, the speedloader unloading method will be disabled /obj/item/weapon/gun/projectile/proc/unload_ammo(mob/user, var/allow_dump=1) @@ -177,6 +185,7 @@ playsound(src, 'sound/weapons/empty.ogg', 50, 1) ammo_magazine.update_icon() ammo_magazine = null + user.hud_used.update_ammo_hud(user, src) else if(loaded.len) //presumably, if it can be speed-loaded, it can be speed-unloaded. if(allow_dump && (load_method & SPEEDLOADER)) @@ -195,6 +204,7 @@ user.put_in_hands(C) user.visible_message("[user] removes \a [C] from [src].", "You remove \a [C] from [src].") playsound(src, 'sound/weapons/empty.ogg', 50, 1) + user.hud_used.update_ammo_hud(user, src) else to_chat(user, "[src] is empty.") update_icon() @@ -256,3 +266,53 @@ unload_ammo(usr) */ + +// TGMC Ammo HUD Insertion +/obj/item/weapon/gun/projectile/has_ammo_counter() + return TRUE + +/obj/item/weapon/gun/projectile/get_ammo_type() + if(load_method == MAGAZINE) + if(chambered) // Do we have a round chambered + var/obj/item/ammo_casing/A = chambered + var/obj/item/projectile/P = A.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) + else if(loaded.len && ammo_magazine && ammo_magazine.stored_ammo) // Are we loaded, have a mag, and have ammo in the mag? + var/obj/item/ammo_casing/A = ammo_magazine.stored_ammo[1] + var/obj/item/projectile/P = A.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) + else + return list("unknown", "unknown") // Safety, this shouldn't happen, but just in case + else if(load_method == SINGLE_CASING|SPEEDLOADER) + if(chambered) // Do we have a round loaded in the chamber? + var/obj/item/ammo_casing/A = chambered + var/obj/item/projectile/P = A.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the casing's ammo hud state + else if(!chambered && loaded.len) // Else, is the gun loaded, but no rounds in chamber currently? + var/obj/item/ammo_casing/A = loaded[1] + var/obj/item/projectile/P = A.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the ammunition in mag's hud_state + else + return list("unknown", "unknown") // Safety, this shouldn't happen, but just in case + else + return list("unknown", "unknown") // Failsafe if we somehow fail both methods + +/obj/item/weapon/gun/projectile/get_ammo_count() + if(load_method == MAGAZINE) + if(!ammo_magazine) // No magazine? Return if we have a round chambered or not + return chambered ? 1 : 0 + else if(ammo_magazine) // If we have a magazine loaded, check if chambered and return either the magazine + chambered or the loaded amount + return chambered ? (ammo_magazine.stored_ammo.len + 1) : ammo_magazine.stored_ammo.len + else // Completely unloaded or code failure. + return 0 + else if(load_method == SINGLE_CASING|SPEEDLOADER) + if(chambered && !loaded.len) // Chambered, but nothing in the magazine/internal ammo + return chambered ? 1: 0 + else if(chambered && loaded.len) // Chambered + has ammo + return loaded.len + (chambered ? 1 : 0) + else if(loaded.len) // Has ammo, no round chambered + return loaded.len + else // Completely unloaded, nothing in chamber or ammo, or code failed??? + return 0 + else + CRASH("/obj/item/weapon/gun/projectile/get_ammo_count() was called from [src] but did not have a valid load_method set! Load_method set was [load_method].") diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 3771e5810a..ed17f9ce42 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -1,29 +1,6 @@ /* * Shotgun */ -// TGMC Ammo HUD Insertion -/obj/item/weapon/gun/projectile/shotgun/has_ammo_counter() - return TRUE - -/obj/item/weapon/gun/projectile/shotgun/get_ammo_type() - if(load_method == MAGAZINE) - if(!ammo_magazine) - - else if(load_method == SINGLE_CASING|SPEEDLOADER && loaded.len) - - else - return list("unknown", "unknown") - -/obj/item/weapon/gun/projectile/shotgun/get_ammo_count() - if(load_method == MAGAZINE) - if(!ammo_magazine) - return chambered ? 1 : 0 - else - return chambered ? (ammo_magazine.stored_ammo + 1) : ammo_magazine.stored_ammo - else if(load_method == SINGLE_CASING|SPEEDLOADER) - if(chambered) - else - /obj/item/weapon/gun/projectile/shotgun/pump name = "shotgun" @@ -75,12 +52,14 @@ else chambered.loc = get_turf(src) // Eject casing chambered = null + user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD Port // Load next shell if(loaded.len) var/obj/item/ammo_casing/AC = loaded[1] // Load next casing. loaded -= AC // Remove casing from loaded list. chambered = AC + user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD Port if(pump_animation) // This affects all bolt action and shotguns. flick("[pump_animation]", src) // This plays any pumping @@ -212,6 +191,7 @@ burst = 2 user.visible_message("The shotgun goes off!", "The shotgun goes off in your face!") Fire_userless(user) + user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD Port burst = burstsetting return if(do_after(user, 30)) // SHIT IS STEALTHY EYYYYY diff --git a/code/modules/projectiles/guns/projectile_ch.dm b/code/modules/projectiles/guns/projectile_ch.dm index 6fc2391ca1..768331c771 100644 --- a/code/modules/projectiles/guns/projectile_ch.dm +++ b/code/modules/projectiles/guns/projectile_ch.dm @@ -106,6 +106,7 @@ playsound(src, sound_ejectchamber, 50, 0) user.visible_message("[user] pulls back \the [bolt_name] before releasing it[close_open_ejected] causing it to slide forward again[casing_chambered].", \ "You pull back \the [bolt_name] before releasing it[close_open_ejected] causing it to slide forward again[casing_chambered].") + user.hud_used.update_ammo_hud(user, src) else if(opened) playsound(src, sound_eject, 50, 0) if(locked) @@ -135,6 +136,7 @@ else user.visible_message("[user] closes \the [bolt_name][casing_chambered].", \ "You close \the [bolt_name][casing_chambered].") + user.hud_used.update_ammo_hud(user, src) /obj/item/weapon/gun/projectile/proc/bolt_toggle(var/manual) if(!bolt_open) @@ -298,6 +300,7 @@ chamber_bullet() bolt_toggle() playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) + user.hud_used.update_ammo_hud(user, src) if(SPEEDLOADER) if(only_open_load && !bolt_open) to_chat(user, "[src] must have its bolt open to be loaded!") @@ -317,6 +320,7 @@ if(count) user.visible_message("[user] reloads [src].", "You load [count] round\s into [src].") playsound(src, 'sound/weapons/empty.ogg', 50, 1) + user.hud_used.update_ammo_hud(user, src) AM.update_icon() else if(istype(A, /obj/item/ammo_casing)) var/obj/item/ammo_casing/C = A @@ -330,6 +334,7 @@ if(do_after(user,5)) user.visible_message("[user] slides \the [C] into the [src]'s chamber.","You slide \the [C] into the [src]'s chamber.") chambered = C + user.hud_used.update_ammo_hud(user, src) else return else if(!(CHECK_BITFIELD(auto_loading_type,LOCK_OPEN_EMPTY) || (CHECK_BITFIELD(auto_loading_type,LOCK_MANUAL_LOCK)))) @@ -337,6 +342,7 @@ user.visible_message("[user] holds open \the [src]'s [bolt_name] and slides [C] into the chamber before letting the bolt close again.","You slide \the [C] into the [src]'s chamber.") chambered = C + user.hud_used.update_ammo_hud(user, src) else return else @@ -366,6 +372,7 @@ loaded.Insert(1, C) //add to the head of the list user.visible_message("[user] inserts \a [C] into [src].", "You insert \a [C] into [src].") playsound(src, 'sound/weapons/empty.ogg', 50, 1) + user.hud_used.update_ammo_hud(user, src) else if(istype(A, /obj/item/weapon/storage)) var/obj/item/weapon/storage/storage = A @@ -379,6 +386,7 @@ continue load_ammo(ammo, user) + user.hud_used.update_ammo_hud(user, src) if(loaded.len >= max_shells) to_chat(user, "[src] is full.") diff --git a/icons/mob/ammoHUD.dmi b/icons/mob/screen_ammo.dmi similarity index 100% rename from icons/mob/ammoHUD.dmi rename to icons/mob/screen_ammo.dmi From 0cdd2da44ca50a54ecc6343e654210d750080bd0 Mon Sep 17 00:00:00 2001 From: Rykka Date: Tue, 5 Apr 2022 22:44:02 -0600 Subject: [PATCH 13/20] Adds hud_states to almost all weaponry, credit to Serdy Reshuffles files to match Polaris --- code/_onclick/hud/screen_objects.dm | 81 +++++++++++++++++ code/_onclick/hud/screen_objects_ch.dm | 82 +----------------- .../guns/energy/cell_loaded_vr/nerd_cells.dm | 1 + code/modules/projectiles/projectile/beams.dm | 40 +++++++-- .../projectiles/projectile/beams_ch.dm | 7 ++ .../modules/projectiles/projectile/bullets.dm | 38 ++++++++ .../projectiles/projectile/bullets_ch.dm | 44 +++++++++- code/modules/projectiles/projectile/energy.dm | 32 ++++++- .../projectiles/projectile/energy_ch.dm | 2 + .../projectiles/projectile/energy_yw.dm | 7 ++ .../projectiles/projectile/magnetic.dm | 13 +++ .../projectiles/projectile/magnetic_ch.dm | 2 + .../modules/projectiles/projectile/special.dm | 14 ++- icons/mob/screen_ammo.dmi | Bin 5639 -> 5633 bytes 14 files changed, 272 insertions(+), 91 deletions(-) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 00446add6d..c4b80f27ae 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -898,3 +898,84 @@ icon_state = null plane = PLANE_HOLOMAP_ICONS appearance_flags = KEEP_TOGETHER + +// Begin TGMC Ammo HUD Port +/obj/screen/ammo + name = "ammo" + icon = 'icons/mob/screen_ammo.dmi' + icon_state = "ammo" + screen_loc = ui_ammo_hud1 + var/warned = FALSE + var/static/list/ammo_screen_loc_list = list(ui_ammo_hud1, ui_ammo_hud2, ui_ammo_hud3 ,ui_ammo_hud4) + +/obj/screen/ammo/proc/add_hud(var/mob/living/user, var/obj/item/weapon/gun/G) + + if(!user?.client) + return + + // var/obj/item/weapon/gun/G = user.get_active_hand() + + if(!G) + CRASH("/obj/screen/ammo/proc/add_hud() has been called from [src] without the required param of G") + + if(!G.has_ammo_counter()) + return + + user.client.screen += src + +/obj/screen/ammo/proc/remove_hud(var/mob/living/user) + user?.client?.screen -= src + +/obj/screen/ammo/proc/update_hud(var/mob/living/user, var/obj/item/weapon/gun/G) + if(!user?.client?.screen.Find(src)) + return + + // var/obj/item/weapon/gun/G = user.get_active_hand() + + if(!G || !istype(G) || !G.has_ammo_counter() || !G.get_ammo_type() || isnull(G.get_ammo_count())) + remove_hud() + return + + var/list/ammo_type = G.get_ammo_type() + var/rounds = G.get_ammo_count() + + var/hud_state = ammo_type[1] + var/hud_state_empty = ammo_type[2] + + overlays.Cut() + + var/empty = image('icons/mob/screen_ammo.dmi', src, "[hud_state_empty]") + + if(rounds == 0) + if(warned) + overlays += empty + else + warned = TRUE + var/obj/screen/ammo/F = new /obj/screen/ammo(src) + F.icon_state = "frame" + user.client.screen += F + flick("[hud_state_empty]_flash", F) + spawn(20) + user.client.screen -= F + qdel(F) + overlays += empty + else + warned = FALSE + overlays += image('icons/mob/screen_ammo.dmi', src, "[hud_state]") + + rounds = num2text(rounds) + //Handle the amount of rounds + switch(length(rounds)) + if(1) + overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[1]]") + if(2) + overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[2]]") + overlays += image('icons/mob/screen_ammo.dmi', src, "t[rounds[1]]") + if(3) + overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[3]]") + overlays += image('icons/mob/screen_ammo.dmi', src, "t[rounds[2]]") + overlays += image('icons/mob/screen_ammo.dmi', src, "h[rounds[1]]") + else //"0" is still length 1 so this means it's over 999 + overlays += image('icons/mob/screen_ammo.dmi', src, "o9") + overlays += image('icons/mob/screen_ammo.dmi', src, "t9") + overlays += image('icons/mob/screen_ammo.dmi', src, "h9") \ No newline at end of file diff --git a/code/_onclick/hud/screen_objects_ch.dm b/code/_onclick/hud/screen_objects_ch.dm index 0d70f974a5..c229c3c57c 100644 --- a/code/_onclick/hud/screen_objects_ch.dm +++ b/code/_onclick/hud/screen_objects_ch.dm @@ -28,84 +28,4 @@ object_overlays += item_overlay add_overlay(object_overlays) - -// Begin TGMC Ammo HUD Port -/obj/screen/ammo - name = "ammo" - icon = 'icons/mob/screen_ammo.dmi' - icon_state = "ammo" - screen_loc = ui_ammo_hud1 - var/warned = FALSE - var/static/list/ammo_screen_loc_list = list(ui_ammo_hud1, ui_ammo_hud2, ui_ammo_hud3 ,ui_ammo_hud4) - -/obj/screen/ammo/proc/add_hud(var/mob/living/user, var/obj/item/weapon/gun/G) - - if(!user?.client) - return - - // var/obj/item/weapon/gun/G = user.get_active_hand() - - if(!G) - CRASH("/obj/screen/ammo/proc/add_hud() has been called from [src] without the required param of G") - - if(!G.has_ammo_counter()) - return - - user.client.screen += src - -/obj/screen/ammo/proc/remove_hud(var/mob/living/user) - user?.client?.screen -= src - -/obj/screen/ammo/proc/update_hud(var/mob/living/user, var/obj/item/weapon/gun/G) - if(!user?.client?.screen.Find(src)) - return - - // var/obj/item/weapon/gun/G = user.get_active_hand() - - if(!G || !istype(G) || !G.has_ammo_counter() || !G.get_ammo_type() || isnull(G.get_ammo_count())) - remove_hud() - return - - var/list/ammo_type = G.get_ammo_type() - var/rounds = G.get_ammo_count() - - var/hud_state = ammo_type[1] - var/hud_state_empty = ammo_type[2] - - overlays.Cut() - - var/empty = image('icons/mob/screen_ammo.dmi', src, "[hud_state_empty]") - - if(rounds == 0) - if(warned) - overlays += empty - else - warned = TRUE - var/obj/screen/ammo/F = new /obj/screen/ammo(src) - F.icon_state = "frame" - user.client.screen += F - flick("[hud_state_empty]_flash", F) - spawn(20) - user.client.screen -= F - qdel(F) - overlays += empty - else - warned = FALSE - overlays += image('icons/mob/screen_ammo.dmi', src, "[hud_state]") - - rounds = num2text(rounds) - //Handle the amount of rounds - switch(length(rounds)) - if(1) - overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[1]]") - if(2) - overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[2]]") - overlays += image('icons/mob/screen_ammo.dmi', src, "t[rounds[1]]") - if(3) - overlays += image('icons/mob/screen_ammo.dmi', src, "o[rounds[3]]") - overlays += image('icons/mob/screen_ammo.dmi', src, "t[rounds[2]]") - overlays += image('icons/mob/screen_ammo.dmi', src, "h[rounds[1]]") - else //"0" is still length 1 so this means it's over 999 - overlays += image('icons/mob/screen_ammo.dmi', src, "o9") - overlays += image('icons/mob/screen_ammo.dmi', src, "t9") - overlays += image('icons/mob/screen_ammo.dmi', src, "h9") \ No newline at end of file + \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm index 48e16029e2..34a1790ffb 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/nerd_cells.dm @@ -13,6 +13,7 @@ damage = 0 check_armour = "laser" light_color = "#80F5FF" + hud_state = "laser_disabler" combustion = FALSE diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 4635684f25..d363bc7ccf 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -20,7 +20,7 @@ muzzle_type = /obj/effect/projectile/muzzle/laser tracer_type = /obj/effect/projectile/tracer/laser impact_type = /obj/effect/projectile/impact/laser - + hud_state = "laser" hud_state_empty = "battery_empty" @@ -32,15 +32,18 @@ damage_type = BURN check_armour = "laser" eyeblur = 2 + hud_state = "laser" /obj/item/projectile/beam/weaklaser name = "weak laser" icon_state = "laser" damage = 15 + hud_state = "laser" /obj/item/projectile/beam/weaklaser/blue icon_state = "bluelaser" light_color = "#0066FF" + hud_state = "laser_disabler" muzzle_type = /obj/effect/projectile/muzzle/laser_blue tracer_type = /obj/effect/projectile/tracer/laser_blue @@ -48,14 +51,17 @@ /obj/item/projectile/beam/smalllaser damage = 25 + hud_state = "laser" /obj/item/projectile/beam/burstlaser damage = 30 armor_penetration = 10 + hud_state = "laser" /obj/item/projectile/beam/midlaser damage = 40 armor_penetration = 10 + hud_state = "laser" /obj/item/projectile/beam/heavylaser name = "heavy laser" @@ -70,6 +76,7 @@ muzzle_type = /obj/effect/projectile/muzzle/laser_heavy tracer_type = /obj/effect/projectile/tracer/laser_heavy impact_type = /obj/effect/projectile/impact/laser_heavy + hud_state = "laser_overcharge" /obj/item/projectile/beam/heavylaser/fakeemitter name = "emitter beam" @@ -77,6 +84,7 @@ fire_sound = 'sound/weapons/emitter.ogg' light_color = "#00CC33" excavation_amount = 140 // 2 shots to dig a standard rock turf. Superior due to being a mounted tool beam, to make it actually viable. + hud_state = "laser_overcharge" muzzle_type = /obj/effect/projectile/muzzle/emitter tracer_type = /obj/effect/projectile/tracer/emitter @@ -86,6 +94,7 @@ damage = 80 armor_penetration = 50 light_color = "#FF0D00" + hud_state = "laser_overcharge" /obj/item/projectile/beam/xray name = "xray beam" @@ -94,6 +103,7 @@ damage = 25 armor_penetration = 50 light_color = "#00CC33" + hud_state = "laser_sniper" muzzle_type = /obj/effect/projectile/muzzle/xray tracer_type = /obj/effect/projectile/tracer/xray @@ -107,6 +117,7 @@ armor_penetration = 90 irradiate = 20 light_color = "#00CC33" + hud_state = "laser_sniper" muzzle_type = /obj/effect/projectile/muzzle/xray tracer_type = /obj/effect/projectile/tracer/xray @@ -118,6 +129,7 @@ fire_sound = 'sound/weapons/eluger.ogg' damage = 40 light_color = "#00C6FF" + hud_state = "laser_disabler" muzzle_type = /obj/effect/projectile/muzzle/laser_omni tracer_type = /obj/effect/projectile/tracer/laser_omni @@ -130,6 +142,7 @@ damage = 100 //Badmin toy, don't care armor_penetration = 100 light_color = "#0066FF" + hud_state = "pulse" muzzle_type = /obj/effect/projectile/muzzle/laser_pulse tracer_type = /obj/effect/projectile/tracer/laser_pulse @@ -147,6 +160,7 @@ damage = 0 // The actual damage is computed in /code/modules/power/singularity/emitter.dm light_color = "#00CC33" excavation_amount = 70 // 3 shots to mine a turf + hud_state = "laser_overcharge" muzzle_type = /obj/effect/projectile/muzzle/emitter tracer_type = /obj/effect/projectile/tracer/emitter @@ -160,13 +174,14 @@ no_attack_log = 1 damage_type = BURN check_armour = "laser" + hud_state = "monkey" combustion = FALSE /obj/item/projectile/beam/lasertag/blue icon_state = "bluelaser" light_color = "#0066FF" - + hud_state = "monkey" muzzle_type = /obj/effect/projectile/muzzle/laser_blue tracer_type = /obj/effect/projectile/tracer/laser_blue impact_type = /obj/effect/projectile/impact/laser_blue @@ -181,6 +196,7 @@ /obj/item/projectile/beam/lasertag/red icon_state = "laser" light_color = "#FF0D00" + hud_state = "monkey" /obj/item/projectile/beam/lasertag/red/on_hit(var/atom/target, var/blocked = 0) if(ishuman(target)) @@ -192,6 +208,7 @@ /obj/item/projectile/beam/lasertag/omni//A laser tag bolt that stuns EVERYONE icon_state = "omnilaser" light_color = "#00C6FF" + hud_state = "monkey" muzzle_type = /obj/effect/projectile/muzzle/laser_omni tracer_type = /obj/effect/projectile/tracer/laser_omni @@ -211,6 +228,7 @@ damage = 50 armor_penetration = 10 light_color = "#00CC33" + hud_state = "laser_sniper" muzzle_type = /obj/effect/projectile/muzzle/xray tracer_type = /obj/effect/projectile/tracer/xray @@ -227,12 +245,13 @@ light_color = "#FFFFFF" hitsound = 'sound/weapons/zapbang.ogg' + combustion = FALSE muzzle_type = /obj/effect/projectile/muzzle/stun tracer_type = /obj/effect/projectile/tracer/stun impact_type = /obj/effect/projectile/impact/stun - + hud_state = "taser" // TGMC Ammo HUD port /obj/item/projectile/beam/stun/weak @@ -269,6 +288,7 @@ muzzle_type = /obj/effect/projectile/muzzle/laser_omni tracer_type = /obj/effect/projectile/tracer/laser_omni impact_type = /obj/effect/projectile/impact/laser_omni + hud_state = "laser_disabler" /obj/item/projectile/beam/stun/blue icon_state = "bluelaser" @@ -276,6 +296,7 @@ muzzle_type = /obj/effect/projectile/muzzle/laser_blue tracer_type = /obj/effect/projectile/tracer/laser_blue impact_type = /obj/effect/projectile/impact/laser_blue + hud_state = "laser_disabler" /obj/item/projectile/beam/disable name = "disabler beam" @@ -285,6 +306,7 @@ agony = 100 //One shot stuns for the time being until adjustments are fully made. damage_type = HALLOSS light_color = "#00CECE" + hud_state = "laser_disabler" muzzle_type = /obj/effect/projectile/muzzle/laser_omni tracer_type = /obj/effect/projectile/tracer/laser_omni @@ -303,6 +325,7 @@ agony = 15 eyeblur = 2 hitsound = 'sound/weapons/zapbang.ogg' + hud_state = "taser" /obj/item/projectile/beam/shock/weak damage = 5 @@ -317,7 +340,7 @@ muzzle_type = /obj/effect/projectile/muzzle/precursor tracer_type = /obj/effect/projectile/tracer/precursor impact_type = /obj/effect/projectile/impact/precursor - + hud_state = "plasma_rifle" damage = 48 armor_penetration = 10 /obj/item/projectile/beam/eluger @@ -327,6 +350,7 @@ muzzle_type = /obj/effect/projectile/muzzle/xray tracer_type = /obj/effect/projectile/tracer/xray impact_type = /obj/effect/projectile/impact/xray + hud_state = "laser" /obj/item/projectile/beam/imperial name = "laser beam" @@ -336,7 +360,7 @@ muzzle_type = /obj/effect/projectile/muzzle/darkmatter tracer_type = /obj/effect/projectile/tracer/darkmatter impact_type = /obj/effect/projectile/impact/darkmatter - + hud_state = "plasma_rifle_blast" // // Projectile Beam Definitions // @@ -347,7 +371,7 @@ damage_type = ELECTROCUTE //You should be safe inside a voidsuit sharp = FALSE //"Wide" spectrum beam light_color = COLOR_GOLD - + hud_state = "monkey" excavation_amount = 200 // Good at shooting rocks muzzle_type = /obj/effect/projectile/muzzle/pointdefense @@ -364,6 +388,8 @@ agony = 5 damage_type = HALLOSS light_color = "#00CC33" + hud_state = "flame_green" + hud_state_empty = "flame_empty" muzzle_type = /obj/effect/projectile/muzzle/xray tracer_type = /obj/effect/projectile/tracer/xray @@ -389,7 +415,7 @@ damage_type = BURN check_armour = "laser" light_color = "#80F5FF" - + hud_state = "laser_disabler" combustion = FALSE muzzle_type = /obj/effect/projectile/muzzle/medigun diff --git a/code/modules/projectiles/projectile/beams_ch.dm b/code/modules/projectiles/projectile/beams_ch.dm index cc0925cad5..6c2afaf856 100644 --- a/code/modules/projectiles/projectile/beams_ch.dm +++ b/code/modules/projectiles/projectile/beams_ch.dm @@ -8,6 +8,7 @@ muzzle_type = /obj/effect/projectile/muzzle/phaser tracer_type = /obj/effect/projectile/tracer/phaser impact_type = /obj/effect/projectile/impact/phaser + hud_state = "laser_heat" /obj/item/projectile/beam/phaser/light @@ -20,6 +21,7 @@ tracer_type = /obj/effect/projectile/tracer/phaser/light impact_type = /obj/effect/projectile/impact/phaser/light + /obj/item/projectile/beam/phaser/heavy SA_bonus_damage = 55 icon_state = "phaser_heavy" @@ -29,16 +31,19 @@ tracer_type = /obj/effect/projectile/tracer/phaser/heavy impact_type = /obj/effect/projectile/impact/phaser/heavy + /obj/item/projectile/beam/phaser/heavy/cannon damage = 15 SA_bonus_damage = 60 + /obj/effect/projectile/tracer/phaser icon = 'icons/obj/projectiles_ch.dmi' icon_state = "phaser_tracer" light_color = "#F18F12" light_range = 2 light_power = 0.5 + hud_state = "laser_heat" /obj/effect/projectile/tracer/phaser/heavy icon_state = "phaser_heavy_tracer" @@ -56,6 +61,7 @@ light_color = "#F18F12" light_range = 2 light_power = 0.5 + hud_state = "laser_heat" /obj/effect/projectile/muzzle/phaser/heavy icon_state = "phaser_heavy_muzzle" @@ -73,6 +79,7 @@ light_color = "#F18F12" light_range = 2 light_power = 0.5 + hud_state = "laser_heat" /obj/effect/projectile/impact/phaser/heavy icon_state = "phaser_heavy_impact" diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 2c2e0c12da..9e6724b0fa 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -12,6 +12,7 @@ hitsound_wall = "ricochet" impact_effect_type = /obj/effect/temp_visual/impact_effect var/mob_passthrough_check = 0 + hud_state = "pistol_lightap" muzzle_type = /obj/effect/projectile/muzzle/bullet @@ -110,6 +111,7 @@ embed_chance = 0 sharp = FALSE check_armour = "melee" + hud_state = "pistol_special" /obj/item/projectile/bullet/pistol/rubber // "Rubber" bullets for all other pistols. name = "rubber bullet" @@ -118,6 +120,7 @@ embed_chance = 0 sharp = FALSE check_armour = "melee" + hud_state = "pistol_special" fire_sound ='sound/weapons/Gunshot_pathetic.ogg' // Rubber shots have less powder in the casing. /* shotgun projectiles */ @@ -128,6 +131,8 @@ fire_sound = 'sound/weapons/Gunshot_shotgun.ogg' damage = 50 armor_penetration = 20 + hud_state = "shotgun_slug" + hud_state_empty = "shotgun_empty" /obj/item/projectile/bullet/shotgun/beanbag //because beanbags are not bullets name = "beanbag" @@ -136,6 +141,7 @@ embed_chance = 0 sharp = FALSE check_armour = "melee" + hud_state = "shotgun_beanbag" //Should do about 80 damage at 1 tile distance (adjacent), and 50 damage at 3 tiles distance. //Overall less damage than slugs in exchange for more damage at very close range and more embedding @@ -146,12 +152,14 @@ pellets = 6 range_step = 1 spread_step = 10 + hud_state = "shotgun_buckshot" /obj/item/projectile/bullet/pellet/shotgun/flak damage = 2 //The main weapon using these fires four at a time, usually with different destinations. Usually. range_step = 2 spread_step = 30 armor_penetration = 10 + hud_state = "shotgun_flechette" //EMP shotgun 'slug', it's basically a beanbag that pops a tiny emp when it hits. //Not currently used /obj/item/projectile/bullet/shotgun/ion @@ -161,6 +169,7 @@ embed_chance = 0 sharp = FALSE check_armour = "melee" + hud_state = "shotgun_ion" combustion = FALSE @@ -176,46 +185,57 @@ fire_sound = 'sound/weapons/Gunshot_generic_rifle.ogg' armor_penetration = 15 penetrating = 1 + hud_state = "rifle" + hud_state_empty = "rifle_empty" /obj/item/projectile/bullet/rifle/a762 fire_sound = 'sound/weapons/Gunshot_heavy.ogg' damage = 35 + hud_state = "rifle_heavy" /obj/item/projectile/bullet/rifle/a762/sniper // Hitscan specifically for sniper ammo; to be implimented at a later date, probably for the SVD. -Ace fire_sound = 'sound/weapons/Gunshot_sniper.ogg' hitscan = 1 //so the ammo isn't useless as a sniper weapon + hud_state = "hivelo" /obj/item/projectile/bullet/rifle/a762/ap damage = 30 armor_penetration = 50 // At 30 or more armor, this will do more damage than standard rounds. + hud_state = "rifle_ap" /obj/item/projectile/bullet/rifle/a762/hp damage = 40 armor_penetration = -50 penetrating = 0 + hud_state = "hivelo_iff" /obj/item/projectile/bullet/rifle/a762/hunter // Optimized for killing simple animals and not people, because Balance(tm) damage = 20 SA_bonus_damage = 50 // 70 total on animals. SA_vulnerability = SA_ANIMAL + hud_state = "rifle_heavy" /obj/item/projectile/bullet/rifle/a545 fire_sound = 'sound/weapons/Gunshot_light.ogg' damage = 25 + hud_state = "rifle" /obj/item/projectile/bullet/rifle/a545/ap damage = 20 armor_penetration = 50 // At 40 or more armor, this will do more damage than standard rounds. + hud_state = "rifle_ap" /obj/item/projectile/bullet/rifle/a545/hp damage = 35 armor_penetration = -50 penetrating = 0 + hud_state = "hivelo_iff" /obj/item/projectile/bullet/rifle/a545/hunter damage = 15 SA_bonus_damage = 35 // 50 total on animals. SA_vulnerability = SA_ANIMAL + hud_state = "rifle_heavy" /obj/item/projectile/bullet/rifle/a145 // 14.5�114mm is bigger than a .50 BMG round. fire_sound = 'sound/weapons/Gunshot_cannon.ogg' // This is literally an anti-tank rifle caliber. It better sound like a fucking cannon. @@ -225,6 +245,7 @@ penetrating = 5 armor_penetration = 80 hitscan = 1 //so the PTR isn't useless as a sniper weapon + hud_state = "sniper" icon_state = "bullet_alt" tracer_type = /obj/effect/projectile/tracer/cannon @@ -235,10 +256,12 @@ weaken = 0 penetrating = 15 armor_penetration = 90 + hud_state = "sniper_flak" /obj/item/projectile/bullet/rifle/a44rifle fire_sound = 'sound/weapons/gunshot4.ogg' damage = 50 + hud_state = "revolver" /* Miscellaneous */ @@ -246,11 +269,13 @@ name = "co bullet" damage = 20 damage_type = OXY + hud_state = "pistol_tranq" /obj/item/projectile/bullet/cyanideround name = "poison bullet" damage = 40 damage_type = TOX + hud_state = "pistol_tranq" /obj/item/projectile/bullet/burstbullet name = "exploding bullet" @@ -258,6 +283,7 @@ damage = 20 embed_chance = 0 edge = TRUE + hud_state = "pistol_fire" /obj/item/projectile/bullet/burstbullet/on_hit(var/atom/target, var/blocked = 0) if(isturf(target)) @@ -273,6 +299,7 @@ damage_type = BURN incendiary = 0.5 flammability = 2 + hud_state = "pistol_fire" /obj/item/projectile/bullet/incendiary/flamethrower name = "ball of fire" @@ -285,12 +312,14 @@ agony = 30 range = 4 vacuum_traversal = 0 + hud_state = "flame" /obj/item/projectile/bullet/incendiary/flamethrower/large damage = 5 incendiary = 3 flammability = 2 range = 6 + hud_state = "flame" /obj/item/projectile/bullet/incendiary/flamethrower/tiny damage = 2 @@ -300,11 +329,13 @@ modifier_duration = 20 SECONDS range = 6 agony = 0 + hud_state = "flame" /* Practice rounds and blanks */ /obj/item/projectile/bullet/practice damage = 5 + hud_state = "smg_light" /obj/item/projectile/bullet/pistol/cap // Just the primer, such as a cap gun. name = "cap" @@ -314,6 +345,7 @@ nodamage = 1 embed_chance = 0 sharp = FALSE + hud_state = "monkey" combustion = FALSE @@ -329,6 +361,7 @@ nodamage = 1 embed_chance = 0 sharp = FALSE + hud_state = "smg_light" /* BB Rounds */ /obj/item/projectile/bullet/bb // Generic single BB @@ -338,6 +371,7 @@ embed_chance = 0 sharp = FALSE silenced = TRUE + hud_state = "pistol_light" /obj/item/projectile/bullet/pellet/shotgun/bb // Shotgun name = "BB" @@ -349,6 +383,7 @@ range_step = 1 spread_step = 10 silenced = TRUE + hud_state = "pistol_light" /* toy projectiles */ /obj/item/projectile/bullet/cap @@ -362,6 +397,7 @@ impact_effect_type = null fire_sound = 'sound/effects/snap.ogg' combustion = FALSE + hud_state = "pistol_light" /obj/item/projectile/bullet/cap/process() loc = null @@ -381,6 +417,7 @@ icon = 'icons/obj/gun_toy.dmi' icon_state = "foamdart_proj" range = 15 + hud_state = "grenade_dummy" /obj/item/projectile/bullet/foam_dart/on_impact(var/atom/A) . = ..() @@ -409,6 +446,7 @@ icon = 'icons/obj/gun_toy.dmi' icon_state = "foamdart_riot_proj" range = 15 + hud_state = "grenade_he" /obj/item/projectile/bullet/foam_dart_riot/on_impact(var/atom/A) . = ..() diff --git a/code/modules/projectiles/projectile/bullets_ch.dm b/code/modules/projectiles/projectile/bullets_ch.dm index 27f3c5e259..5a86baf385 100644 --- a/code/modules/projectiles/projectile/bullets_ch.dm +++ b/code/modules/projectiles/projectile/bullets_ch.dm @@ -80,16 +80,19 @@ only use the hollow_point and armor_penetration values.*/ velocity = 716 damage = 15 armor_penetration = 15 //Unfortunately my penetration code doesn't recognize the glory of 5.7x28 FN, so we must show it the wae. + hud_state = "smg_light" /obj/item/projectile/bullet/a57/ap grains = 23 energy_add = 312.75 velocity = 850 armor_penetration = 25 //Also, no, this isn't as high as it looks because of the formulas I was using. This would have around a 35% chance of piercing combat armor(50 bullet armor) + hud_state = "smg_ap" /obj/item/projectile/bullet/a57/hp hollow_point = TRUE armor_penetration = -10 + hud_state = "smg" /obj/item/projectile/bullet/a357 fire_sound = 'sound/weapons/gunshot4.ogg' @@ -97,27 +100,32 @@ only use the hollow_point and armor_penetration values.*/ grains = 125 velocity = 440 damage = 20 + hud_state = "revolver" /obj/item/projectile/bullet/a357/ap energy_add = 298.07 velocity = 480 armor_penetration = 15 + hud_state = "revolver_heavy" /obj/item/projectile/bullet/a357/hp hollow_point = TRUE armor_penetration = -10 + hud_state = "revolver_slim" /obj/item/projectile/bullet/a38 fire_sound = 'sound/weapons/gunshot2.ogg' diam = 9.1 grains = 147 velocity = 270 + hud_state = "revolver_small" /obj/item/projectile/bullet/a38/ap grains = 125 energy_add = 138 velocity = 300 armor_penetration = 15 + hud_state = "pistol_lightap" /obj/item/projectile/bullet/a38/hp grains = 158 @@ -125,18 +133,21 @@ only use the hollow_point and armor_penetration values.*/ velocity = 297 hollow_point = TRUE armor_penetration = -10 + hud_state = "pistol_hollow" /obj/item/projectile/bullet/a762x25 fire_sound = 'sound/weapons/gunshot2.ogg' diam = 7.92 grains = 85 velocity = 469 + hud_state = "pistol_light" /obj/item/projectile/bullet/a9x18 fire_sound = 'sound/weapons/gunshot2.ogg' diam = 9.27 grains = 95 velocity = 319 + hud_state = "pistol" /obj/item/projectile/bullet/a9x18/rubber armor_penetration = -10 @@ -153,12 +164,14 @@ only use the hollow_point and armor_penetration values.*/ diam = 10.17 grains = 180 velocity = 400 + hud_state = "pistol" /obj/item/projectile/bullet/a10mm/ap grains = 200 energy_add = 435 velocity = 440 armor_penetration = 15 + hud_state = "pistol_ap" /obj/item/projectile/bullet/a10mm/hp grains = 135 @@ -166,6 +179,7 @@ only use the hollow_point and armor_penetration values.*/ velocity = 490 armor_penetration = -10 hollow_point = TRUE + hud_state = "pistol_hollow" /obj/item/projectile/bullet/a10mm/rubber armor_penetration = -10 @@ -182,12 +196,14 @@ only use the hollow_point and armor_penetration values.*/ diam = 9 grains= 95 velocity = 300 + hud_state = "pistol_light" /obj/item/projectile/bullet/a380/ap grains = 45 energy_add = 648.74 velocity = 559 armor_penetration = 15 + hud_state = "pistol_lightap" /obj/item/projectile/bullet/a380/hp grains = 95 @@ -195,23 +211,27 @@ only use the hollow_point and armor_penetration values.*/ velocity = 343 armor_penetration = -10 hollow_point = TRUE + hud_state = "pistol_hollow" /obj/item/projectile/bullet/a22lr fire_sound = 'sound/weapons/gunshot_pathetic.ogg' grains = 40 diam = 5.7 velocity = 370 + hud_state = "pistol_light" /obj/item/projectile/bullet/a22lr/ap grains = 31 velocity = 530 armor_penetration = 15 + hud_state = "pistol_ap" /obj/item/projectile/bullet/a22lr/hp grains = 38 velocity = 380 hollow_point = TRUE armor_penetration = -5 + hud_state = "pistol_hollow" //Shotgun projectiles @@ -233,6 +253,7 @@ only use the hollow_point and armor_penetration values.*/ use_submunitions = TRUE submunition_spread_max = 67.5 submunitions = list(/obj/item/projectile/bullet/shotgun/buckshot = 8) + hud_state = "shotgun_buckshot" //Rifle projectiles /obj/item/projectile/bullet/rifle @@ -271,16 +292,19 @@ only use the hollow_point and armor_penetration values.*/ diam = 7.85 grains = 122 velocity = 730 + hud_state = "rifle" /obj/item/projectile/bullet/rifle/a762x39/ap grains = 123 velocity = 740 energy_add = 117.16 armor_penetration = 25 + hud_state = "rifle_ap" /obj/item/projectile/bullet/rifle/a762x39/hp hollow_point = TRUE armor_penetration = -10 + hud_state = "hivelo_iff" /obj/item/projectile/bullet/rifle/a762x39/rubber armor_penetration = -10 @@ -321,16 +345,19 @@ only use the hollow_point and armor_penetration values.*/ diam = 5.7 grains = 62 velocity = 961 + hud_state = "rifle" /obj/item/projectile/bullet/rifle/a556/ap grains = 52 velocity = 1030 energy_add = 462.92 armor_penetration = 25 + hud_state = "rifle_ap" /obj/item/projectile/bullet/rifle/a556/hp hollow_point = TRUE armor_penetration = -10 + hud_state = "hivelo_iff" /obj/item/projectile/bullet/rifle/a556/rubber armor_penetration = -10 @@ -363,16 +390,21 @@ only use the hollow_point and armor_penetration values.*/ diam = 9.5 grains = 310 velocity = 365 //cadyn cope above, beware ^^ + hud_state = "rifle" + +//beware of cadyn cope above ^^ - Ocelot /obj/item/projectile/bullet/rifle/a9x39 //We also have actual 9x39mm fire_sound = 'sound/weapons/ballistics/a545.ogg' diam = 9.25 grains = 259 velocity = 280 + hud_state = "smartgun" /obj/item/projectile/bullet/rifle/a9x39/ap grains = 267 armor_penetration = 25 + hud_state = "minigun" /obj/item/projectile/bullet/rifle/a9x39/rubber armor_penetration = -10 @@ -388,6 +420,7 @@ only use the hollow_point and armor_penetration values.*/ grains = 210 diam = 10.2 velocity = 840 + hud_state = "rifle" /obj/item/projectile/bullet/rifle/a10x24/rubber armor_penetration = -10 @@ -403,6 +436,7 @@ only use the hollow_point and armor_penetration values.*/ diam = 7.92 grains = 181 velocity = 820 + hud_state = "rifle" /obj/item/projectile/bullet/rifle/a762x54 fire_sound = 'sound/weapons/ballistics/a762x54.ogg' @@ -410,9 +444,11 @@ only use the hollow_point and armor_penetration values.*/ grains = 151 velocity = 830 hitscan = 1 + hud_state = "sniper_crude" /obj/item/projectile/bullet/rifle/a762x54/ap armor_penetration = 35 + hud_state = "sniper_supersonic" /obj/item/projectile/bullet/rifle/a338 fire_sound = 'sound/weapons/ballistics/a762x54.ogg' @@ -422,9 +458,11 @@ only use the hollow_point and armor_penetration values.*/ velocity = 921 hitscan = 1 penetrating = 2 + hud_state = "sniper_crude" /obj/item/projectile/bullet/rifle/a338/ap armor_penetration = 50 + hud_state = "sniper_supersonic" /obj/item/projectile/bullet/rifle/a50bmg fire_sound = 'sound/weapons/ballistics/a145.ogg' @@ -434,6 +472,7 @@ only use the hollow_point and armor_penetration values.*/ velocity = 860 hitscan = 1 penetrating = 2 + hud_state = "sniper_supersonic" /obj/item/projectile/bullet/rifle/a50bmg/ap armor_penetration = 50 @@ -446,6 +485,7 @@ only use the hollow_point and armor_penetration values.*/ velocity = 820 penetrating = 2 armor_penetration=30 + hud_state = "sniper_fire" /obj/item/projectile/bullet/rifle/a45lc //yee haw diam = 11.43 @@ -521,6 +561,8 @@ only use the hollow_point and armor_penetration values.*/ accuracy = -20 // he do miss actually speed = 0.4 // if the pathfinder gets a funny burst rifle, they deserve a rival // that's 2x projectile speed btw + hud_state = "monkey" /obj/item/projectile/bullet/pistol/medium/ap/suppressor/turbo // spicy boys - speed = 0.2 // this is 4x projectile speed \ No newline at end of file + speed = 0.2 // this is 4x projectile speed + hud_state = "monkey" \ No newline at end of file diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 5af79cc519..4325d25ed4 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -8,6 +8,7 @@ impact_effect_type = /obj/effect/temp_visual/impact_effect hitsound_wall = 'sound/weapons/effects/searwall.ogg' hitsound = 'sound/weapons/zapbang.ogg' + hud_state = "monkey" var/flash_strength = 10 @@ -22,6 +23,7 @@ var/flash_range = 0 var/brightness = 7 var/light_colour = "#ffffff" + hud_state = "grenade_dummy" /obj/item/projectile/energy/flash/on_impact(var/atom/A) var/turf/T = flash_range? src.loc : get_turf(A) @@ -59,6 +61,7 @@ flash_range = 1 brightness = 15 flash_strength = 20 + hud_state = "grenade_dummy" /obj/item/projectile/energy/flash/flare/on_impact(var/atom/A) light_colour = pick("#e58775", "#ffffff", "#90ff90", "#a09030") @@ -77,15 +80,18 @@ light_range = 2 light_power = 0.5 light_color = "#FFFFFF" + hud_state = "taser" //Damage will be handled on the MOB side, to prevent window shattering. /obj/item/projectile/energy/electrode/strong agony = 55 + hud_state = "taser" /obj/item/projectile/energy/electrode/stunshot name = "stunshot" damage = 5 agony = 80 + hud_state = "taser" /obj/item/projectile/energy/electrode/stunshot/strong name = "stunshot" @@ -93,6 +99,7 @@ damage = 10 taser_effect = 1 agony = 100 + hud_state = "taser" /obj/item/projectile/energy/declone name = "declone" @@ -107,6 +114,7 @@ impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser combustion = FALSE + hud_state = "plasma_pistol" /obj/item/projectile/energy/excavate name = "kinetic blast" @@ -120,6 +128,7 @@ vacuum_traversal = 0 combustion = FALSE + hud_state = "plasma_blast" /obj/item/projectile/energy/dart name = "dart" @@ -128,6 +137,7 @@ damage_type = TOX agony = 120 check_armour = "energy" + hud_state = "pistol_tranq" combustion = FALSE @@ -138,23 +148,28 @@ damage_type = TOX agony = 40 stutter = 10 + hud_state = "electrothermal" /obj/item/projectile/energy/bolt/large name = "largebolt" damage = 20 + hud_state = "electrothermal" /obj/item/projectile/energy/bow name = "engergy bolt" icon_state = "cbbolt" damage = 20 + hud_state = "electrothermal" /obj/item/projectile/energy/bow/heavy damage = 30 icon_state = "cbbolt" + hud_state = "electrothermal" /obj/item/projectile/energy/bow/stun name = "stun bolt" agony = 30 + hud_state = "electrothermal" /obj/item/projectile/energy/acid //Slightly up-gunned (Read: The thing does agony and checks bio resist) variant of the simple alien mob's projectile, for queens and sentinels. name = "acidic spit" @@ -166,6 +181,7 @@ armor_penetration = 25 // It's acid hitsound_wall = 'sound/weapons/effects/alien_spit_wall.ogg' hitsound = 'sound/weapons/effects/alien_spit_wall.ogg' + hud_state = "electrothermal" combustion = FALSE @@ -179,6 +195,7 @@ armor_penetration = 25 // It's acid-based hitsound_wall = 'sound/weapons/effects/alien_spit_wall.ogg' hitsound = 'sound/weapons/effects/alien_spit_wall.ogg' + hud_state = "electrothermal" combustion = FALSE @@ -188,6 +205,7 @@ damage = 20 damage_type = BIOACID agony = 20 + hud_state = "electrothermal" check_armour = "bio" armor_penetration = 25 // It's acid-based @@ -202,6 +220,7 @@ light_power = 0.5 light_color = "#33CC00" impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser + hud_state = "plasma_rifle" combustion = FALSE @@ -215,6 +234,7 @@ agony = 55 damage_type = BURN vacuum_traversal = 0 //Projectile disappears in empty space + hud_state = "plasma_rifle_blast" /obj/item/projectile/energy/plasmastun/proc/bang(var/mob/living/carbon/M) @@ -259,6 +279,7 @@ embed_chance = 0 muzzle_type = /obj/effect/projectile/muzzle/pulse impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser + hud_state = "plasma_sphere" /obj/item/projectile/energy/phase name = "phase wave" @@ -267,28 +288,35 @@ damage = 5 SA_bonus_damage = 45 // 50 total on animals SA_vulnerability = list(SA_ANIMAL, MOB_CLASS_SYNTHETIC, MOB_CLASS_ABERRATION, MOB_CLASS_HUMANOID) //CHOMP Edit expand this list + hud_state = "laser_heat" /obj/item/projectile/energy/phase/light range = 4 SA_bonus_damage = 35 // 40 total on animals + hud_state = "laser_heat" /obj/item/projectile/energy/phase/heavy range = 8 SA_bonus_damage = 55 // 60 total on animals + hud_state = "laser_heat" /obj/item/projectile/energy/phase/heavy/cannon range = 10 damage = 15 SA_bonus_damage = 60 // 75 total on animals + hud_state = "laser_heat" /obj/item/projectile/energy/electrode/strong agony = 70 + hud_state = "taser" /obj/item/projectile/energy flash_strength = 10 + hud_state = "taser" /obj/item/projectile/energy/flash flash_range = 1 + hud_state = "grenade_dummy" /obj/item/projectile/energy/flash/strong name = "chemical shell" @@ -297,6 +325,8 @@ range = 15 //if the shell hasn't hit anything after travelling this far it just explodes. flash_strength = 15 brightness = 15 + hud_state = "grenade_dummy" /obj/item/projectile/energy/flash/flare - flash_range = 2 \ No newline at end of file + flash_range = 2 + hud_state = "grenade_dummy" \ No newline at end of file diff --git a/code/modules/projectiles/projectile/energy_ch.dm b/code/modules/projectiles/projectile/energy_ch.dm index 94d3f925c6..60a6bd0b26 100644 --- a/code/modules/projectiles/projectile/energy_ch.dm +++ b/code/modules/projectiles/projectile/energy_ch.dm @@ -2,10 +2,12 @@ range = 4 SA_bonus_damage = 15 // 30 total on animals icon_state = "cbbolt" + hud_state = "taser" /obj/item/projectile/energy/phase/bolt/heavy range = 4 SA_bonus_damage = 25 // 20 total on animals + hud_state = "taser" /obj/item/projectile/energy/plasma/vepr name = "plasma bolt" diff --git a/code/modules/projectiles/projectile/energy_yw.dm b/code/modules/projectiles/projectile/energy_yw.dm index b49c224bf7..4c0a709e03 100644 --- a/code/modules/projectiles/projectile/energy_yw.dm +++ b/code/modules/projectiles/projectile/energy_yw.dm @@ -11,6 +11,7 @@ damage_type = BURN pass_flags = PASSTABLE | PASSGRILLE check_armour = "laser" + hud_state = "alloy_spike" /obj/item/projectile/energy/gaussweak name = "gauss bolt" @@ -23,6 +24,7 @@ damage_type = BURN pass_flags = PASSTABLE | PASSGRILLE check_armour = "laser" + hud_state = "alloy_spike" /obj/item/projectile/energy/gaussrifle name = "gauss bolt" @@ -36,6 +38,8 @@ pass_flags = PASSTABLE | PASSGRILLE penetrating = 0 check_armour = "laser" + hud_state = "alloy_spike" + //End of gaussguns// //Stun projectile for HOSgun @@ -48,6 +52,8 @@ agony = 65 damage_type = HALLOSS stutter = 10 + hud_state = "taser" + //plasma weaponry /obj/item/projectile/energy/Plasma name = "Plasma Blast" @@ -57,3 +63,4 @@ damage_type = BURN pass_flags = PASSGRILLE check_armour = "laser" + hud_state = "plasma_rifle_blast" diff --git a/code/modules/projectiles/projectile/magnetic.dm b/code/modules/projectiles/projectile/magnetic.dm index dd4ea1a07f..588a20820e 100644 --- a/code/modules/projectiles/projectile/magnetic.dm +++ b/code/modules/projectiles/projectile/magnetic.dm @@ -9,12 +9,14 @@ weaken = 1 penetrating = 5 armor_penetration = 70 + hud_state = "alloy_spike" /obj/item/projectile/bullet/magnetic/slug name = "slug" icon_state = "gauss_silenced" damage = 75 armor_penetration = 90 + hud_state = "alloy_spike" /obj/item/projectile/bullet/magnetic/flechette name = "flechette" @@ -22,6 +24,7 @@ fire_sound = 'sound/weapons/rapidslice.ogg' damage = 20 armor_penetration = 100 + hud_state = "alloy_spike" /obj/item/projectile/bullet/magnetic/flechette/small name = "small flechette" @@ -29,6 +32,7 @@ fire_sound = 'sound/weapons/rapidslice.ogg' damage = 12 armor_penetration = 100 + hud_state = "alloy_spike" /obj/item/projectile/bullet/magnetic/flechette/small/khi name = "small carbyne flechette" @@ -37,12 +41,14 @@ damage = 18 armor_penetration = 100 penetrating = 10 + hud_state = "alloy_spike" /obj/item/projectile/bullet/magnetic/flechette/hunting name = "shredder slug" armor_penetration = 30 SA_bonus_damage = 40 SA_vulnerability = SA_ANIMAL + hud_state = "alloy_spike" /obj/item/projectile/bullet/magnetic/heated name = "slug" @@ -54,6 +60,7 @@ embed_chance = 0 armor_penetration = 40 penetrating = 1 + hud_state = "alloy_spike" /obj/item/projectile/bullet/magnetic/heated/weak icon_state = "gauss_silenced" @@ -62,6 +69,7 @@ embed_chance = 0 armor_penetration = 30 penetrating = 0 + hud_state = "alloy_spike" /obj/item/projectile/bullet/magnetic/fuelrod name = "fuel rod" @@ -76,6 +84,7 @@ embed_chance = 0 armor_penetration = 40 range = 20 + hud_state = "rocket_he" var/searing = 0 //Does this fuelrod ignore shields? var/detonate_travel = 0 //Will this fuelrod explode when it reaches maximum distance? @@ -122,6 +131,7 @@ flammability = -1 armor_penetration = 50 penetrating = 3 + hud_state = "rocket_ap" /obj/item/projectile/bullet/magnetic/fuelrod/phoron name = "blazing fuel rod" @@ -133,6 +143,7 @@ penetrating = 5 irradiate = 20 detonate_mob = 1 + hud_state = "rocket_fire" /obj/item/projectile/bullet/magnetic/fuelrod/supermatter name = "painfully incandescent fuel rod" @@ -149,6 +160,7 @@ detonate_travel = 1 detonate_mob = 1 energetic_impact = 1 + hud_state = "rocket_thermobaric" /obj/item/projectile/bullet/magnetic/fuelrod/supermatter/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null) //You cannot touch the supermatter without disentigrating. Assumedly, this is true for condensed rods of it flying at relativistic speeds. if(istype(target,/turf/simulated/wall) || istype(target,/mob/living)) @@ -169,6 +181,7 @@ check_armour = "melee" irradiate = 20 range = 6 + hud_state = "plasma_rifle_blast" /obj/item/projectile/bullet/magnetic/bore/Initialize(loc, range_mod) // i'm gonna be real honest i dunno how this works but it does . = ..() diff --git a/code/modules/projectiles/projectile/magnetic_ch.dm b/code/modules/projectiles/projectile/magnetic_ch.dm index 663e6ffd0b..41d11cfe40 100644 --- a/code/modules/projectiles/projectile/magnetic_ch.dm +++ b/code/modules/projectiles/projectile/magnetic_ch.dm @@ -4,6 +4,7 @@ fire_sound = 'sound/weapons/rapidslice.ogg' damage = 10 armor_penetration = 35 + hud_state = "alloy_spike" /obj/item/projectile/bullet/magnetic/fuelrod/blitz name = "blitz rod" @@ -22,6 +23,7 @@ detonate_travel = 1 detonate_mob = 1 energetic_impact = 1 + hud_state = "rocket_thermobaric" /obj/item/projectile/bullet/magnetic/fuelrod/blitz/on_impact(var/atom/A) if(src.loc) diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index 142cde4071..c439197fe3 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -9,6 +9,7 @@ light_range = 2 light_power = 0.5 light_color = "#55AAFF" + hud_state = "plasma_blast" combustion = FALSE impact_effect_type = /obj/effect/temp_visual/impact_effect/ion @@ -43,6 +44,7 @@ check_armour = "bullet" sharp = TRUE edge = TRUE + hud_state = "rocket_fire" /obj/item/projectile/bullet/gyro/on_hit(var/atom/target, var/blocked = 0) explosion(target, -1, 0, 2) @@ -62,6 +64,7 @@ light_power = 0.5 light_color = "#55AAFF" impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser + hud_state = "water" combustion = FALSE @@ -98,6 +101,7 @@ /obj/item/projectile/temp/hot name = "heat beam" target_temperature = 1000 + hud_state = "flame" combustion = TRUE @@ -109,6 +113,7 @@ damage_type = BRUTE nodamage = 1 check_armour = "bullet" + hud_state = "monkey" /obj/item/projectile/meteor/Bump(atom/A as mob|obj|turf|area) if(A == firer) @@ -145,6 +150,7 @@ impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser var/lasermod = 0 combustion = FALSE + hud_state = "electrothermal" /obj/item/projectile/energy/floramut/on_hit(var/atom/target, var/blocked = 0) var/mob/living/M = target @@ -187,6 +193,7 @@ nodamage = 1 check_armour = "energy" var/decl/plantgene/gene = null + hud_state = "electrothermal" /obj/item/projectile/energy/florayield name = "beta somatoray" @@ -201,6 +208,7 @@ light_color = "#FFFFFF" impact_effect_type = /obj/effect/temp_visual/impact_effect/monochrome_laser var/lasermod = 0 + hud_state = "electrothermal" /obj/item/projectile/energy/florayield/on_hit(var/atom/target, var/blocked = 0) var/mob/living/M = target @@ -218,6 +226,7 @@ name = "flayer ray" combustion = FALSE + hud_state = "electrothermal" /obj/item/projectile/beam/mindflayer/on_hit(var/atom/target, var/blocked = 0) if(ishuman(target)) @@ -233,6 +242,7 @@ nodamage = 1 damage_type = HALLOSS muzzle_type = /obj/effect/projectile/muzzle/bullet + hud_state = "monkey" /obj/item/projectile/bola name = "bola" @@ -241,6 +251,7 @@ embed_chance = 0 //Nada. damage_type = HALLOSS muzzle_type = null + hud_state = "monkey" combustion = FALSE @@ -260,7 +271,7 @@ embed_chance = 0 //Nada. damage_type = BRUTE muzzle_type = null - + hud_state = "monkey" combustion = FALSE /obj/item/projectile/webball/on_hit(var/atom/target, var/blocked = 0) @@ -282,6 +293,7 @@ light_range = 4 light_power = 3 light_color = "#3300ff" + hud_state = "alloy_spike" muzzle_type = /obj/effect/projectile/muzzle/tungsten tracer_type = /obj/effect/projectile/tracer/tungsten diff --git a/icons/mob/screen_ammo.dmi b/icons/mob/screen_ammo.dmi index e138438e0e69bfbba9d2a16cc384aac0a3e73b8e..57ab8e772e95e5c28da09592b8f1c4b0afc4d4bc 100644 GIT binary patch delta 4995 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 delta 5006 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 From 7cedcee7bce70b295837c542b6dad68bbc593f29 Mon Sep 17 00:00:00 2001 From: Rykka Date: Tue, 5 Apr 2022 22:56:11 -0600 Subject: [PATCH 14/20] Fixes Compile time errors --- code/modules/projectiles/guns/projectile/shotgun.dm | 4 ++-- code/modules/projectiles/projectile/beams_ch.dm | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index ed17f9ce42..5e87e05cfc 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -52,14 +52,14 @@ else chambered.loc = get_turf(src) // Eject casing chambered = null - user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD Port + M.hud_used.update_ammo_hud(M, src) // TGMC Ammo HUD Port // Load next shell if(loaded.len) var/obj/item/ammo_casing/AC = loaded[1] // Load next casing. loaded -= AC // Remove casing from loaded list. chambered = AC - user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD Port + M.hud_used.update_ammo_hud(M, src) // TGMC Ammo HUD Port if(pump_animation) // This affects all bolt action and shotguns. flick("[pump_animation]", src) // This plays any pumping diff --git a/code/modules/projectiles/projectile/beams_ch.dm b/code/modules/projectiles/projectile/beams_ch.dm index 6c2afaf856..f95458a6a5 100644 --- a/code/modules/projectiles/projectile/beams_ch.dm +++ b/code/modules/projectiles/projectile/beams_ch.dm @@ -43,7 +43,6 @@ light_color = "#F18F12" light_range = 2 light_power = 0.5 - hud_state = "laser_heat" /obj/effect/projectile/tracer/phaser/heavy icon_state = "phaser_heavy_tracer" @@ -61,7 +60,6 @@ light_color = "#F18F12" light_range = 2 light_power = 0.5 - hud_state = "laser_heat" /obj/effect/projectile/muzzle/phaser/heavy icon_state = "phaser_heavy_muzzle" @@ -79,7 +77,6 @@ light_color = "#F18F12" light_range = 2 light_power = 0.5 - hud_state = "laser_heat" /obj/effect/projectile/impact/phaser/heavy icon_state = "phaser_heavy_impact" From f84c9d720f4d72c22d74f5ca6d33c8a7c0833195 Mon Sep 17 00:00:00 2001 From: Rykka Date: Wed, 6 Apr 2022 00:15:36 -0600 Subject: [PATCH 15/20] Fixes issues with HUDs not updating Forces updates upon cycling the next round. Fixes Chambered casings still counting for ammo despite having no associated projectile. Because for ~realism~ the casing has a BB var that determines if we currently have a bullet available to fire. Adds rocket states for our ONE measly rocket launcher. Phasers will now update their ammunition count on every single pump. --- .../projectiles/guns/energy/laser_vr.dm | 2 ++ code/modules/projectiles/guns/projectile.dm | 28 +++++++++++-------- .../projectiles/projectile/explosive.dm | 3 ++ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/code/modules/projectiles/guns/energy/laser_vr.dm b/code/modules/projectiles/guns/energy/laser_vr.dm index 10421a5829..15de81b515 100644 --- a/code/modules/projectiles/guns/energy/laser_vr.dm +++ b/code/modules/projectiles/guns/energy/laser_vr.dm @@ -184,11 +184,13 @@ if(!do_after(user, 10, src)) break playsound(src,'sound/items/change_drill.ogg',25,1) + user.hud_used.update_ammo_hud(user, src) if(power_supply.give(phase_power) < phase_power) break recharging = 0 update_icon() + user.hud_used.update_ammo_hud(user, src) // Update one last time once we're finished! /obj/item/weapon/gun/energy/locked/frontier/update_icon() if(recharging) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index e443fa27cb..399ee18086 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -54,6 +54,10 @@ chambered = ammo_magazine.stored_ammo[ammo_magazine.stored_ammo.len] if(handle_casings != HOLD_CASINGS) ammo_magazine.stored_ammo -= chambered + + var/mob/living/M = loc // CHOMPEdit: TGMC Ammo HUD + if(istype(M)) // CHOMPEdit: TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) if (chambered) return chambered.BB @@ -273,22 +277,22 @@ /obj/item/weapon/gun/projectile/get_ammo_type() if(load_method == MAGAZINE) - if(chambered) // Do we have a round chambered + if(chambered) // Do we have an ammo casing chambered var/obj/item/ammo_casing/A = chambered var/obj/item/projectile/P = A.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) - else if(loaded.len && ammo_magazine && ammo_magazine.stored_ammo) // Are we loaded, have a mag, and have ammo in the mag? + else if(ammo_magazine && ammo_magazine.stored_ammo) // Are we loaded, have a mag, and have ammo in the mag? var/obj/item/ammo_casing/A = ammo_magazine.stored_ammo[1] var/obj/item/projectile/P = A.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) else return list("unknown", "unknown") // Safety, this shouldn't happen, but just in case else if(load_method == SINGLE_CASING|SPEEDLOADER) - if(chambered) // Do we have a round loaded in the chamber? + if(chambered) // Do we have an ammo casing loaded in the chamber? var/obj/item/ammo_casing/A = chambered var/obj/item/projectile/P = A.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the casing's ammo hud state - else if(!chambered && loaded.len) // Else, is the gun loaded, but no rounds in chamber currently? + else if(!chambered && loaded.len) // Else, is the gun loaded, but no ammo casings in chamber currently? var/obj/item/ammo_casing/A = loaded[1] var/obj/item/projectile/P = A.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the ammunition in mag's hud_state @@ -299,18 +303,18 @@ /obj/item/weapon/gun/projectile/get_ammo_count() if(load_method == MAGAZINE) - if(!ammo_magazine) // No magazine? Return if we have a round chambered or not - return chambered ? 1 : 0 + if(!ammo_magazine) // No magazine? Return if we have a round chambered or not. BB is the var for the round inside the casing. + return chambered.BB ? 1 : 0 else if(ammo_magazine) // If we have a magazine loaded, check if chambered and return either the magazine + chambered or the loaded amount - return chambered ? (ammo_magazine.stored_ammo.len + 1) : ammo_magazine.stored_ammo.len + return chambered.BB ? (ammo_magazine.stored_ammo.len + 1) : ammo_magazine.stored_ammo.len else // Completely unloaded or code failure. return 0 else if(load_method == SINGLE_CASING|SPEEDLOADER) - if(chambered && !loaded.len) // Chambered, but nothing in the magazine/internal ammo - return chambered ? 1: 0 - else if(chambered && loaded.len) // Chambered + has ammo - return loaded.len + (chambered ? 1 : 0) - else if(loaded.len) // Has ammo, no round chambered + if(chambered.BB && !loaded.len) // Chambered and has a round in the casing, but nothing in the magazine/internal ammo. BB is the var for the round inside the casing. + return chambered.BB ? 1: 0 + else if(chambered.BB && loaded.len) // Chambered casing + round + has ammo. BB is the var for the round inside the casing. + return loaded.len + (chambered.BB ? 1 : 0) + else if(loaded.len) // Has ammo, no round chambered (but might have a casing still in the breech). BB is the var for the round inside the casing. return loaded.len else // Completely unloaded, nothing in chamber or ammo, or code failed??? return 0 diff --git a/code/modules/projectiles/projectile/explosive.dm b/code/modules/projectiles/projectile/explosive.dm index 307febc8bc..76da8f3e3a 100644 --- a/code/modules/projectiles/projectile/explosive.dm +++ b/code/modules/projectiles/projectile/explosive.dm @@ -7,6 +7,8 @@ icon_state = "missile" damage = 30 //Meaty whack. *Chuckles* does_spin = 0 + hud_state = "rocket_he" + hud_state_empty = "rocket_empty" /obj/item/projectile/bullet/srmrocket/on_hit(atom/target, blocked=0) if(!isliving(target)) //if the target isn't alive, so is a wall or something @@ -24,6 +26,7 @@ /obj/item/projectile/bullet/srmrocket/weak //Used in the jury rigged one. damage = 10 + hud_state = "rocket_he" /obj/item/projectile/bullet/srmrocket/weak/on_hit(atom/target, blocked=0) explosion(target, 0, 0, 2, 4)//No need to have a question. From 92ccb52ca7896a0ece1fc7032cc449756fb99241 Mon Sep 17 00:00:00 2001 From: Rykka Date: Wed, 6 Apr 2022 03:45:18 -0600 Subject: [PATCH 16/20] Multiple Testing Fixes - Fixes all projectile guns not having an empty state after unloading the gun via various methods - Fixes stun revolver not having an empty sprite - Fixes self-charging guns not updating ammo counts Still needing fixes: - Revolvers do not update ammo counts after firing, only on emptying the gun/adding new shells. --- code/modules/projectiles/guns/energy.dm | 3 ++ code/modules/projectiles/guns/projectile.dm | 34 ++++++++++++------- code/modules/projectiles/projectile/energy.dm | 3 +- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index c9e418e5c4..25d5dc26e1 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -114,6 +114,9 @@ if(!power_supply) return null if(!ispath(projectile_type)) return null if(!power_supply.checked_use(charge_cost)) return null + var/mob/living/M = loc // CHOMPEdit: TGMC Ammo HUD + if(istype(M)) // CHOMPEdit: TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) return new projectile_type(src) /obj/item/weapon/gun/energy/proc/load_ammo(var/obj/item/C, mob/user) diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 399ee18086..c617bd7b06 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -281,21 +281,27 @@ var/obj/item/ammo_casing/A = chambered var/obj/item/projectile/P = A.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) - else if(ammo_magazine && ammo_magazine.stored_ammo) // Are we loaded, have a mag, and have ammo in the mag? + else if(ammo_magazine && ammo_magazine.stored_ammo.len) // Are we loaded, have a mag, and have ammo in the mag? var/obj/item/ammo_casing/A = ammo_magazine.stored_ammo[1] var/obj/item/projectile/P = A.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) + else if(!ammo_magazine && !chambered && src.projectile_type) // Else, we're entirely empty, and have no mag/nothing loaded in the gun, and nothing in the chamber. Return the DEFAULT projectile_type on the gun, if set. + var/obj/item/projectile/P = src.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) else return list("unknown", "unknown") // Safety, this shouldn't happen, but just in case - else if(load_method == SINGLE_CASING|SPEEDLOADER) - if(chambered) // Do we have an ammo casing loaded in the chamber? + else if(load_method == (SINGLE_CASING | SPEEDLOADER)) + if(chambered) // Do we have an ammo casing loaded in the chamber? All casings still have a projectile_type var. var/obj/item/ammo_casing/A = chambered var/obj/item/projectile/P = A.projectile_type - return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the casing's ammo hud state + return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the casing's projectile_type ammo hud state else if(!chambered && loaded.len) // Else, is the gun loaded, but no ammo casings in chamber currently? var/obj/item/ammo_casing/A = loaded[1] var/obj/item/projectile/P = A.projectile_type - return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the ammunition in mag's hud_state + return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the ammunition loaded in the gun's hud_state + else if(!chambered && !loaded.len && src.projectile_type) // Else, we're entirely empty, and have no mag/nothing loaded in the gun, and nothing in the chamber. Return the DEFAULT projectile_type on the gun, if set. + var/obj/item/projectile/P = src.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) else return list("unknown", "unknown") // Safety, this shouldn't happen, but just in case else @@ -303,18 +309,22 @@ /obj/item/weapon/gun/projectile/get_ammo_count() if(load_method == MAGAZINE) - if(!ammo_magazine) // No magazine? Return if we have a round chambered or not. BB is the var for the round inside the casing. + if(!ammo_magazine && chambered) // No magazine, and we have a casing chambered? Return if we have a round chambered or not. BB is the var for the round inside the casing. return chambered.BB ? 1 : 0 - else if(ammo_magazine) // If we have a magazine loaded, check if chambered and return either the magazine + chambered or the loaded amount + else if(ammo_magazine && chambered) // If we have a magazine loaded, check if chambered and return either the magazine + chambered or the loaded amount return chambered.BB ? (ammo_magazine.stored_ammo.len + 1) : ammo_magazine.stored_ammo.len + else if(!chambered && ammo_magazine) // If we have a magazine loaded, but nothing chambered, return the magazine amount, if it exists. + return ammo_magazine.stored_ammo.len else // Completely unloaded or code failure. return 0 - else if(load_method == SINGLE_CASING|SPEEDLOADER) - if(chambered.BB && !loaded.len) // Chambered and has a round in the casing, but nothing in the magazine/internal ammo. BB is the var for the round inside the casing. - return chambered.BB ? 1: 0 - else if(chambered.BB && loaded.len) // Chambered casing + round + has ammo. BB is the var for the round inside the casing. + else if(load_method == SINGLE_CASING | SPEEDLOADER) + if(chambered && chambered.BB && !loaded.len) // Chambered and has a round in the casing, but nothing in the magazine/internal ammo. BB is the var for the round inside the casing. + return chambered.BB ? 1 : 0 + else if(chambered && chambered.BB && loaded.len) // Chambered casing + round + has ammo. BB is the var for the round inside the casing. return loaded.len + (chambered.BB ? 1 : 0) - else if(loaded.len) // Has ammo, no round chambered (but might have a casing still in the breech). BB is the var for the round inside the casing. + else if(chambered && !chambered.BB && loaded.len) // Has ammo, no round chambered (but might have a casing still in the breech). BB is the var for the round inside the casing. + return loaded.len + else if(!chambered && loaded.len) // Has ammo, not chambered, or doesn't use the chambered var return loaded.len else // Completely unloaded, nothing in chamber or ammo, or code failed??? return 0 diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index 4325d25ed4..de2baf0ba6 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -8,7 +8,8 @@ impact_effect_type = /obj/effect/temp_visual/impact_effect hitsound_wall = 'sound/weapons/effects/searwall.ogg' hitsound = 'sound/weapons/zapbang.ogg' - hud_state = "monkey" + hud_state = "plasma" + hud_state = "battery_empty" var/flash_strength = 10 From 26fbd5e3cb820e037cb9079cdd0bff67b3cc6d88 Mon Sep 17 00:00:00 2001 From: Rykka Date: Wed, 6 Apr 2022 22:59:20 -0600 Subject: [PATCH 17/20] TGMC Final Commit - Fixes Ammo Count + symbols + Medigun/Curabitur Changes: - Code copied over to hud.dm and commented out, to prep for upstream pull. - Commented-out, unused code removed. - CHOMPEdits removed, pending upstream PR. - Medigun no longer shows 2x the actual ammo loaded. - Curabitur now fetches the amount of shots correctly, bar 1 extra for some reason. - Curabitur ammo updates on automatic recharge ticks. - A ton of projectile get_ammo_count optimization - mostly swaps the massive if/else for for loops. Fixes multiple guns not getting ammo properly, now casings won't register as ammo unless they have a shell in the casing. - hud_state_empty defined as base on all bullets. - Corrects energy weapons missing a hud_state_empty. - Gives Ion weapons a hud_state_empty All changes have been tested, and bar the Curabitur having an extra shot for ??? reason, which is a base bug I've yet to fix, this is entirely ready for testmerge. --- code/_onclick/hud/hud.dm | 38 +++++++++- code/_onclick/hud/hud_ch.dm | 3 + code/_onclick/hud/screen_objects.dm | 4 -- code/modules/projectiles/guns/energy.dm | 16 ++--- .../guns/energy/cell_loaded_vr/cell_loaded.dm | 39 +++++++++- .../energy/cell_loaded_vr/multi_cannon.dm | 14 +++- .../cell_loaded_vr/multi_cannon_cells.dm | 13 ++++ code/modules/projectiles/guns/projectile.dm | 71 +++++++++++-------- .../modules/projectiles/projectile/bullets.dm | 1 + code/modules/projectiles/projectile/energy.dm | 2 +- .../modules/projectiles/projectile/special.dm | 1 + 11 files changed, 154 insertions(+), 48 deletions(-) diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 2f2ed75400..8d9990024b 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -465,4 +465,40 @@ var/list/global_huds = list( client.screen += client.void /mob/new_player/add_click_catcher() - return \ No newline at end of file + return + +/* TGMC Ammo HUD Port + * These procs call to screen_objects.dm's respective procs. + * All these do is manage the amount of huds on screen and set the HUD. + * CHOMPEdit: Commented out, just uncomment once Polaris merges + it comes down from VORE. +*/ +/* +///Add an ammo hud to the user informing of the ammo count of G +/datum/hud/proc/add_ammo_hud(mob/living/user, obj/item/weapon/gun/G) + if(length(ammo_hud_list) >= MAX_AMMO_HUD_POSSIBLE) + return + var/obj/screen/ammo/ammo_hud = new + ammo_hud_list[G] = ammo_hud + ammo_hud.screen_loc = ammo_hud.ammo_screen_loc_list[length(ammo_hud_list)] + ammo_hud.add_hud(user, G) + ammo_hud.update_hud(user, G) + +///Remove the ammo hud related to the gun G from the user +/datum/hud/proc/remove_ammo_hud(mob/living/user, obj/item/weapon/gun/G) + var/obj/screen/ammo/ammo_hud = ammo_hud_list[G] + if(isnull(ammo_hud)) + return + ammo_hud.remove_hud(user, G) + qdel(ammo_hud) + ammo_hud_list -= G + var/i = 1 + for(var/key in ammo_hud_list) + ammo_hud = ammo_hud_list[key] + ammo_hud.screen_loc = ammo_hud.ammo_screen_loc_list[i] + i++ + +///Update the ammo hud related to the gun G +/datum/hud/proc/update_ammo_hud(mob/living/user, obj/item/weapon/gun/G) + var/obj/screen/ammo/ammo_hud = ammo_hud_list[G] + ammo_hud?.update_hud(user, G) +*/ \ No newline at end of file diff --git a/code/_onclick/hud/hud_ch.dm b/code/_onclick/hud/hud_ch.dm index f68ecb0864..84772f4a9f 100644 --- a/code/_onclick/hud/hud_ch.dm +++ b/code/_onclick/hud/hud_ch.dm @@ -1,5 +1,6 @@ /** * CHOMP-Specific HUD override. This will be backported to Polaris if they want it. + * Comment this out once Polaris has it! */ ///Add an ammo hud to the user informing of the ammo count of G /datum/hud/proc/add_ammo_hud(mob/living/user, obj/item/weapon/gun/G) @@ -14,6 +15,8 @@ ///Remove the ammo hud related to the gun G from the user /datum/hud/proc/remove_ammo_hud(mob/living/user, obj/item/weapon/gun/G) var/obj/screen/ammo/ammo_hud = ammo_hud_list[G] + if(isnull(ammo_hud)) + return ammo_hud.remove_hud(user, G) qdel(ammo_hud) ammo_hud_list -= G diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index c4b80f27ae..a06df0c082 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -912,8 +912,6 @@ if(!user?.client) return - - // var/obj/item/weapon/gun/G = user.get_active_hand() if(!G) CRASH("/obj/screen/ammo/proc/add_hud() has been called from [src] without the required param of G") @@ -930,8 +928,6 @@ if(!user?.client?.screen.Find(src)) return - // var/obj/item/weapon/gun/G = user.get_active_hand() - if(!G || !istype(G) || !G.has_ammo_counter() || !G.get_ammo_type() || isnull(G.get_ammo_count())) remove_hud() return diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index 25d5dc26e1..6424f90b44 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -92,9 +92,9 @@ power_supply.give(rechargeamt) //... to recharge 1/5th the battery update_icon() - var/mob/living/M = loc // CHOMPEdit: TGMC Ammo HUD - if(istype(M)) // CHOMPEdit: TGMC Ammo HUD - M?.hud_used.update_ammo_hud(M, src) // CHOMPEdit: TGMC Ammo HUD + var/mob/living/M = loc // TGMC Ammo HUD + if(istype(M)) // TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) // TGMC Ammo HUD else charge_tick = 0 return 1 @@ -114,8 +114,8 @@ if(!power_supply) return null if(!ispath(projectile_type)) return null if(!power_supply.checked_use(charge_cost)) return null - var/mob/living/M = loc // CHOMPEdit: TGMC Ammo HUD - if(istype(M)) // CHOMPEdit: TGMC Ammo HUD + var/mob/living/M = loc // TGMC Ammo HUD + if(istype(M)) // TGMC Ammo HUD M?.hud_used.update_ammo_hud(M, src) return new projectile_type(src) @@ -138,7 +138,7 @@ playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) update_icon() update_held_icon() - user.hud_used.update_ammo_hud(user, src) // CHOMPEdit: TGMC Ammo HUD + user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD else to_chat(user, "This cell is not fitted for [src].") return @@ -155,7 +155,7 @@ playsound(src, 'sound/weapons/empty.ogg', 50, 1) update_icon() update_held_icon() - user.hud_used.update_ammo_hud(user, src) // CHOMPEdit: TGMC Ammo HUD + user.hud_used.update_ammo_hud(user, src) // TGMC Ammo HUD else to_chat(user, "[src] does not have a power cell.") @@ -244,7 +244,7 @@ return results -// CHOMPEDIT: TGMC AMMO HUD PORT Start +// TGMC AMMO HUD /obj/item/weapon/gun/energy/has_ammo_counter() return TRUE diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm index eaa3a2d9e8..b1ac9f5085 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm @@ -50,8 +50,6 @@ var/obj/item/ammo_casing/microbattery/batt = chambered - charge_left = batt.shots_left - max_charge = initial(batt.shots_left) if(ammo_magazine) //Crawl to find more for(var/obj/item/ammo_casing/microbattery/bullet as anything in ammo_magazine.stored_ammo) if(istype(bullet,batt.type)) @@ -68,6 +66,9 @@ chambered = new_batt update_charge() update_icon() + var/mob/living/M = loc // TGMC Ammo HUD + if(istype(M)) // TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) /obj/item/weapon/gun/projectile/cell_loaded/attack_self(mob/user) if(!chambered) @@ -170,6 +171,11 @@ update_icon() playsound(src, 'sound/weapons/flipblade.ogg', 50, 1) update_icon() + if(istype(loc, /obj/item/weapon/gun/projectile/cell_loaded)) // Update the HUD if we're in a gun + have a user. Not that one should be able to reload the mag while it's in a gun, but just in caaaaase. + var/obj/item/weapon/gun/projectile/cell_loaded/cell_load = loc + var/mob/living/M = cell_load.loc + if(istype(M)) + M?.hud_used.update_ammo_hud(M, cell_load) /obj/item/ammo_magazine/cell_mag/update_icon() cut_overlays() @@ -278,4 +284,31 @@ new /obj/item/ammo_casing/microbattery/combat/xray(src) new /obj/item/ammo_casing/microbattery/medical/stabilize2(src) new /obj/item/ammo_casing/microbattery/medical/haste(src) - new /obj/item/ammo_casing/microbattery/medical/resist(src) \ No newline at end of file + new /obj/item/ammo_casing/microbattery/medical/resist(src) + +// TGMC Ammo HUD: Custom handling for cell-loaded weaponry. +/* +/obj/item/weapon/gun/projectile/cell_loaded/get_ammo_type() + if(!projectile_type) + return list("unknown", "unknown") + else + var/obj/item/projectile/P = projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) +*/ +/obj/item/weapon/gun/projectile/cell_loaded/get_ammo_count() + if(!chambered) + return 0 // We're not chambered, so we have 0 rounds loaded. + + var/obj/item/ammo_casing/microbattery/batt = chambered + + var/shots + if(ammo_magazine) // Check how much ammo we have + for(var/obj/item/ammo_casing/microbattery/bullet as anything in ammo_magazine.stored_ammo) + if(istype(bullet,batt.type)) + shots += bullet.shots_left + if(shots > 0) // We have shots ready to fire. + return shots + else // We're out of shots. + return 0 + else // Else, we're unloaded/don't have a magazine. + return 0 \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/multi_cannon.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/multi_cannon.dm index 136eb26f3d..fa09eaea5c 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/multi_cannon.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/multi_cannon.dm @@ -57,4 +57,16 @@ /obj/item/weapon/gun/projectile/multi_cannon/unload_ammo(mob/user, var/allow_dump=1) .=..() update_icon() - chambered = null \ No newline at end of file + chambered = null + +/obj/item/weapon/gun/projectile/multi_cannon/get_ammo_count() // Custom handling for the Curabitur. + if(istype(chambered, /obj/item/ammo_casing/macrobattery)) + var/obj/item/ammo_casing/macrobattery/battery = chambered + if(battery.charge) // Does the battery have charge? + return battery.charge // This should safely return the amount of shots we have. Every time we fire, we decrement charge by 1, at least in all the cells I can see. + else // No charge in the battery. + return 0 // Return 0 ammo to the HUD. + else if(chambered == null) + return 0 + else + CRASH("/obj/item/weapon/gun/projectile/multi_cannon/get_ammo_count() was called from [src] but did not have a valid magazine loaded, somehow! Chambered is currently [chambered].") \ No newline at end of file diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/multi_cannon_cells.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/multi_cannon_cells.dm index 53dd7c0ad3..d333081c37 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/multi_cannon_cells.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/multi_cannon_cells.dm @@ -38,6 +38,12 @@ //alright, the below seems jank. it IS jank, but for whatever reason I can't reuse BB. big bad BB = null BB = new projectile_type + // TGMC Ammo HUD - Update the HUD every time we expend/fire, given the Curabitur's method of handling firing. + if(istype(loc, /obj/item/weapon/gun/projectile/multi_cannon)) + var/obj/item/weapon/gun/projectile/multi_cannon = loc + var/mob/living/user = multi_cannon.loc + if(istype(user)) + user?.hud_used.update_ammo_hud(user, multi_cannon) return else BB = null @@ -52,6 +58,13 @@ STOP_PROCESSING(SSobj, src) if(istype(loc,/obj/item/weapon/gun/projectile/multi_cannon)) loc.update_icon() + + // TGMC Ammo HUD - Update the HUD every time we're called to recharge. + if(istype(loc, /obj/item/weapon/gun/projectile/multi_cannon)) + var/obj/item/weapon/gun/projectile/multi_cannon = loc + var/mob/living/user = multi_cannon.loc + if(istype(user)) + user?.hud_used.update_ammo_hud(user, multi_cannon) //variants here, there's not many of them. diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index c617bd7b06..6ed5194bc0 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -212,6 +212,7 @@ else to_chat(user, "[src] is empty.") update_icon() + user.hud_used.update_ammo_hud(user, src) /obj/item/weapon/gun/projectile/attackby(var/obj/item/A as obj, mob/user as mob) ..() @@ -242,6 +243,7 @@ ammo_magazine.update_icon() ammo_magazine = null update_icon() //make sure to do this after unsetting ammo_magazine + user.hud_used.update_ammo_hud(user, src) /obj/item/weapon/gun/projectile/examine(mob/user) . = ..() @@ -276,57 +278,66 @@ return TRUE /obj/item/weapon/gun/projectile/get_ammo_type() - if(load_method == MAGAZINE) + if(load_method & MAGAZINE) if(chambered) // Do we have an ammo casing chambered var/obj/item/ammo_casing/A = chambered var/obj/item/projectile/P = A.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) - else if(ammo_magazine && ammo_magazine.stored_ammo.len) // Are we loaded, have a mag, and have ammo in the mag? + else if(ammo_magazine && ammo_magazine.stored_ammo.len) // Do we have a mag, and have ammo in the mag, but nothing chambered? var/obj/item/ammo_casing/A = ammo_magazine.stored_ammo[1] var/obj/item/projectile/P = A.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) - else if(!ammo_magazine && !chambered && src.projectile_type) // Else, we're entirely empty, and have no mag/nothing loaded in the gun, and nothing in the chamber. Return the DEFAULT projectile_type on the gun, if set. + else if(src.projectile_type) // Else, we're entirely empty, and irregardless of the mag we have loaded (as it's empty, or it would've passed the length check above), return the DEFAULT projectile_type on the gun, if set. var/obj/item/projectile/P = src.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) else return list("unknown", "unknown") // Safety, this shouldn't happen, but just in case - else if(load_method == (SINGLE_CASING | SPEEDLOADER)) + else if(load_method & (SINGLE_CASING|SPEEDLOADER)) // Do we load with single casings OR speedloaders? if(chambered) // Do we have an ammo casing loaded in the chamber? All casings still have a projectile_type var. var/obj/item/ammo_casing/A = chambered var/obj/item/projectile/P = A.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the casing's projectile_type ammo hud state - else if(!chambered && loaded.len) // Else, is the gun loaded, but no ammo casings in chamber currently? + else if(loaded.len) // Else, is the gun loaded, but no ammo casings in chamber currently? var/obj/item/ammo_casing/A = loaded[1] var/obj/item/projectile/P = A.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) // Return the ammunition loaded in the gun's hud_state - else if(!chambered && !loaded.len && src.projectile_type) // Else, we're entirely empty, and have no mag/nothing loaded in the gun, and nothing in the chamber. Return the DEFAULT projectile_type on the gun, if set. + else if(src.projectile_type) // Else, we're entirely empty, and have nothing loaded in the gun, and nothing in the chamber. Return the DEFAULT projectile_type on the gun, if set. var/obj/item/projectile/P = src.projectile_type return list(initial(P.hud_state), initial(P.hud_state_empty)) else return list("unknown", "unknown") // Safety, this shouldn't happen, but just in case - else - return list("unknown", "unknown") // Failsafe if we somehow fail both methods + else if(src.projectile_type) // Failsafe if we somehow don't pass the above. Return the DEFAULT projectile_type on the gun, if set. + var/obj/item/projectile/P = src.projectile_type + return list(initial(P.hud_state), initial(P.hud_state_empty)) + else // Failsafe if we somehow fail all three methods + return list("unknown", "unknown") /obj/item/weapon/gun/projectile/get_ammo_count() - if(load_method == MAGAZINE) - if(!ammo_magazine && chambered) // No magazine, and we have a casing chambered? Return if we have a round chambered or not. BB is the var for the round inside the casing. - return chambered.BB ? 1 : 0 - else if(ammo_magazine && chambered) // If we have a magazine loaded, check if chambered and return either the magazine + chambered or the loaded amount - return chambered.BB ? (ammo_magazine.stored_ammo.len + 1) : ammo_magazine.stored_ammo.len - else if(!chambered && ammo_magazine) // If we have a magazine loaded, but nothing chambered, return the magazine amount, if it exists. - return ammo_magazine.stored_ammo.len - else // Completely unloaded or code failure. - return 0 - else if(load_method == SINGLE_CASING | SPEEDLOADER) - if(chambered && chambered.BB && !loaded.len) // Chambered and has a round in the casing, but nothing in the magazine/internal ammo. BB is the var for the round inside the casing. - return chambered.BB ? 1 : 0 - else if(chambered && chambered.BB && loaded.len) // Chambered casing + round + has ammo. BB is the var for the round inside the casing. - return loaded.len + (chambered.BB ? 1 : 0) - else if(chambered && !chambered.BB && loaded.len) // Has ammo, no round chambered (but might have a casing still in the breech). BB is the var for the round inside the casing. - return loaded.len - else if(!chambered && loaded.len) // Has ammo, not chambered, or doesn't use the chambered var - return loaded.len - else // Completely unloaded, nothing in chamber or ammo, or code failed??? - return 0 - else - CRASH("/obj/item/weapon/gun/projectile/get_ammo_count() was called from [src] but did not have a valid load_method set! Load_method set was [load_method].") + if(ammo_magazine) // Do we have a magazine loaded? + var/shots_left + if(chambered && chambered.BB) // Do we have a bullet in the currently-chambered casing, if any? + shots_left++ + for(var/obj/item/ammo_casing/bullet in ammo_magazine.stored_ammo) + if(bullet.BB) + shots_left++ + + if(shots_left > 0) + return shots_left + else + return 0 // No ammo left or failsafe. + else if(loaded) // Do we use internal ammunition + var/shots_left + if(chambered && chambered.BB) // Do we have a bullet in the currently-chambered casing, if any? + shots_left++ + for(var/obj/item/ammo_casing/bullet in loaded) + if(bullet.BB) // Only increment how many shots we have left if we're loaded. + shots_left++ + + if(shots_left > 0) + return shots_left + else + return 0 // No ammo left or failsafe. + else if(chambered) // If we don't have a magazine or internal ammunition loaded, but we have a casing in chamber, return the amount. + return chambered.BB ? 1 : 0 + else // Failsafe, or completely unloaded + return 0 diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 9e6724b0fa..fb83c4bdcd 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -13,6 +13,7 @@ impact_effect_type = /obj/effect/temp_visual/impact_effect var/mob_passthrough_check = 0 hud_state = "pistol_lightap" + hud_state_empty = "pistol_empty" // Just in case we somehow have no hud_state_empty defined muzzle_type = /obj/effect/projectile/muzzle/bullet diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm index de2baf0ba6..6caa1d5070 100644 --- a/code/modules/projectiles/projectile/energy.dm +++ b/code/modules/projectiles/projectile/energy.dm @@ -9,7 +9,7 @@ hitsound_wall = 'sound/weapons/effects/searwall.ogg' hitsound = 'sound/weapons/zapbang.ogg' hud_state = "plasma" - hud_state = "battery_empty" + hud_state_empty = "battery_empty" var/flash_strength = 10 diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm index c439197fe3..e45e4ee3a5 100644 --- a/code/modules/projectiles/projectile/special.dm +++ b/code/modules/projectiles/projectile/special.dm @@ -10,6 +10,7 @@ light_power = 0.5 light_color = "#55AAFF" hud_state = "plasma_blast" + hud_state_empty = "battery_empty" combustion = FALSE impact_effect_type = /obj/effect/temp_visual/impact_effect/ion From 0e3b6a9ba9587861cc9c032891a679b63948a1be Mon Sep 17 00:00:00 2001 From: Rykka Date: Thu, 7 Apr 2022 00:54:02 -0600 Subject: [PATCH 18/20] Forgot about self-charging cells, oops. --- code/modules/power/cell.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 4ec2d0a5e2..852a086d97 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -54,6 +54,12 @@ if(self_recharge) if(world.time >= last_use + charge_delay) give(charge_amount) + // TGMC Ammo HUD - Update the HUD every time we're called to recharge. + if(istype(loc, /obj/item/weapon/gun/energy)) // Are we in a gun currently? + var/obj/item/weapon/gun/energy/gun = loc + var/mob/living/user = gun.loc + if(istype(user)) + user?.hud_used.update_ammo_hud(user, gun) // Update the HUD else return PROCESS_KILL From 50b98e7f35851990e50eeb0a1113ef9c56d6c95b Mon Sep 17 00:00:00 2001 From: Rykka Date: Thu, 7 Apr 2022 02:16:57 -0600 Subject: [PATCH 19/20] Remove CHOMPEdit codes + _ch files added, given upstream ports in progress As stated, per maintainer/headmin request (and common sense). --- code/_onclick/hud/_defines.dm | 6 ++++ code/_onclick/hud/_defines_ch.dm | 8 ----- code/_onclick/hud/hud.dm | 5 +-- code/_onclick/hud/hud_ch.dm | 32 ------------------- code/modules/projectiles/gun.dm | 29 +++++++++++++++-- code/modules/projectiles/gun_ch.dm | 27 +--------------- code/modules/projectiles/guns/projectile.dm | 8 ++--- code/modules/projectiles/projectile.dm | 4 +++ .../modules/projectiles/projectile/bullets.dm | 14 ++++---- code/modules/projectiles/projectile_ch.dm | 2 -- vorestation.dme | 2 -- 11 files changed, 50 insertions(+), 87 deletions(-) delete mode 100644 code/_onclick/hud/_defines_ch.dm delete mode 100644 code/_onclick/hud/hud_ch.dm diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 44037305dd..14feaf1b5f 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -103,6 +103,12 @@ #define ui_alien_fire "EAST-1:28,NORTH-3:25" #define ui_alien_oxygen "EAST-1:28,NORTH-4:25" +// Goes above HUD, mid-right +#define ui_ammo_hud1 "EAST-1:28,CENTER+1:25" +#define ui_ammo_hud2 "EAST-1:28,CENTER+2:27" +#define ui_ammo_hud3 "EAST-1:28,CENTER+3:29" +#define ui_ammo_hud4 "EAST-1:28,CENTER+4:31" + //Middle right (status indicators) #define ui_temp "EAST-1:28,CENTER-2:13" #define ui_health "EAST-1:28,CENTER-1:15" diff --git a/code/_onclick/hud/_defines_ch.dm b/code/_onclick/hud/_defines_ch.dm deleted file mode 100644 index 3fb902eba8..0000000000 --- a/code/_onclick/hud/_defines_ch.dm +++ /dev/null @@ -1,8 +0,0 @@ -/** CHOMP-Specific Defines - * Put defines specific to OUR HUDs here. - * First thing to go here is the TGMC Ammo HUD. - */ -#define ui_ammo_hud1 "EAST-1:28,CENTER+1:25" -#define ui_ammo_hud2 "EAST-1:28,CENTER+2:27" -#define ui_ammo_hud3 "EAST-1:28,CENTER+3:29" -#define ui_ammo_hud4 "EAST-1:28,CENTER+4:31" \ No newline at end of file diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 8d9990024b..aef10cd979 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -470,9 +470,7 @@ var/list/global_huds = list( /* TGMC Ammo HUD Port * These procs call to screen_objects.dm's respective procs. * All these do is manage the amount of huds on screen and set the HUD. - * CHOMPEdit: Commented out, just uncomment once Polaris merges + it comes down from VORE. */ -/* ///Add an ammo hud to the user informing of the ammo count of G /datum/hud/proc/add_ammo_hud(mob/living/user, obj/item/weapon/gun/G) if(length(ammo_hud_list) >= MAX_AMMO_HUD_POSSIBLE) @@ -500,5 +498,4 @@ var/list/global_huds = list( ///Update the ammo hud related to the gun G /datum/hud/proc/update_ammo_hud(mob/living/user, obj/item/weapon/gun/G) var/obj/screen/ammo/ammo_hud = ammo_hud_list[G] - ammo_hud?.update_hud(user, G) -*/ \ No newline at end of file + ammo_hud?.update_hud(user, G) \ No newline at end of file diff --git a/code/_onclick/hud/hud_ch.dm b/code/_onclick/hud/hud_ch.dm deleted file mode 100644 index 84772f4a9f..0000000000 --- a/code/_onclick/hud/hud_ch.dm +++ /dev/null @@ -1,32 +0,0 @@ -/** - * CHOMP-Specific HUD override. This will be backported to Polaris if they want it. - * Comment this out once Polaris has it! - */ -///Add an ammo hud to the user informing of the ammo count of G -/datum/hud/proc/add_ammo_hud(mob/living/user, obj/item/weapon/gun/G) - if(length(ammo_hud_list) >= MAX_AMMO_HUD_POSSIBLE) - return - var/obj/screen/ammo/ammo_hud = new - ammo_hud_list[G] = ammo_hud - ammo_hud.screen_loc = ammo_hud.ammo_screen_loc_list[length(ammo_hud_list)] - ammo_hud.add_hud(user, G) - ammo_hud.update_hud(user, G) - -///Remove the ammo hud related to the gun G from the user -/datum/hud/proc/remove_ammo_hud(mob/living/user, obj/item/weapon/gun/G) - var/obj/screen/ammo/ammo_hud = ammo_hud_list[G] - if(isnull(ammo_hud)) - return - ammo_hud.remove_hud(user, G) - qdel(ammo_hud) - ammo_hud_list -= G - var/i = 1 - for(var/key in ammo_hud_list) - ammo_hud = ammo_hud_list[key] - ammo_hud.screen_loc = ammo_hud.ammo_screen_loc_list[i] - i++ - -///Update the ammo hud related to the gun G -/datum/hud/proc/update_ammo_hud(mob/living/user, obj/item/weapon/gun/G) - var/obj/screen/ammo/ammo_hud = ammo_hud_list[G] - ammo_hud?.update_hud(user, G) \ No newline at end of file diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 4b56821d01..4bf31a2747 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -452,7 +452,6 @@ //YAWNEDIT: Knockdown code end - // CHOMPEdit: TGMC Ammo HUD insertion: user.hud_used.update_ammo_hud(user, src) // Similar to the above proc, but does not require a user, which is ideal for things like turrets. @@ -778,9 +777,35 @@ var/datum/firemode/new_mode = firemodes[sel_mode] new_mode.apply_to(src) to_chat(user, "\The [src] is now set to [new_mode.name].") - user.hud_used.update_ammo_hud(user, src) // CHOMPEdit: TGMC Ammo HUD + user.hud_used.update_ammo_hud(user, src) return new_mode /obj/item/weapon/gun/attack_self(mob/user) switch_firemodes(user) + +/* TGMC Ammo HUD Port Begin */ +/obj/item/weapon/gun + var/hud_enabled = TRUE + +/obj/item/weapon/gun/proc/has_ammo_counter() + return FALSE + +/obj/item/weapon/gun/proc/get_ammo_type() + return FALSE + +/obj/item/weapon/gun/proc/get_ammo_count() + return FALSE + +/obj/item/weapon/gun/equipped(mob/living/user, slot) // When a gun is equipped to your hands, we'll add the HUD to the user. Pending porting over TGMC guncode where wielding is far more sensible. + if(slot == slot_l_hand || slot == slot_r_hand) + user.hud_used.add_ammo_hud(user, src) + else + user.hud_used.remove_ammo_hud(user, src) + + return ..() + +/obj/item/weapon/gun/dropped(mob/living/user) // Ditto as above, we remove the HUD. Pending porting TGMC code to clean up this fucking nightmare of spaghetti. + user.hud_used.remove_ammo_hud(user, src) + + ..() \ No newline at end of file diff --git a/code/modules/projectiles/gun_ch.dm b/code/modules/projectiles/gun_ch.dm index 61e657ae58..a27d87a878 100644 --- a/code/modules/projectiles/gun_ch.dm +++ b/code/modules/projectiles/gun_ch.dm @@ -1,28 +1,3 @@ /obj/item/weapon/gun var/holy = 0 //For Divinely blessed guns - -/* TGMC Ammo HUD Port Begin */ -/obj/item/weapon/gun - var/hud_enabled = TRUE - -/obj/item/weapon/gun/proc/has_ammo_counter() - return FALSE - -/obj/item/weapon/gun/proc/get_ammo_type() - return FALSE - -/obj/item/weapon/gun/proc/get_ammo_count() - return FALSE - -/obj/item/weapon/gun/equipped(mob/living/user, slot) // When a gun is equipped to your hands, we'll add the HUD to the user. Pending porting over TGMC guncode where wielding is far more sensible. - if(slot == slot_l_hand || slot == slot_r_hand) - user.hud_used.add_ammo_hud(user, src) - else - user.hud_used.remove_ammo_hud(user, src) - - return ..() - -/obj/item/weapon/gun/dropped(mob/living/user) // Ditto as above, we remove the HUD. Pending porting TGMC code to clean up this fucking nightmare of spaghetti. - user.hud_used.remove_ammo_hud(user, src) - - ..() \ No newline at end of file + \ No newline at end of file diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 6ed5194bc0..bbfe861305 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -55,8 +55,8 @@ if(handle_casings != HOLD_CASINGS) ammo_magazine.stored_ammo -= chambered - var/mob/living/M = loc // CHOMPEdit: TGMC Ammo HUD - if(istype(M)) // CHOMPEdit: TGMC Ammo HUD + var/mob/living/M = loc + if(istype(M)) M?.hud_used.update_ammo_hud(M, src) if (chambered) @@ -103,8 +103,8 @@ if(handle_casings != HOLD_CASINGS) chambered = null - var/mob/living/M = loc // CHOMPEdit: TGMC Ammo HUD - if(istype(M)) // CHOMPEdit: TGMC Ammo HUD + var/mob/living/M = loc + if(istype(M)) M?.hud_used.update_ammo_hud(M, src) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 5e59456251..a24acd21cd 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -139,6 +139,10 @@ var/impact_effect_type = null var/list/impacted_mobs = list() + + // TGMC Ammo HUD Port + var/hud_state = "unknown" // What HUD state we use when we have ammunition. + var/hud_state_empty = "unknown" // The empty state. DON'T USE _FLASH IN THE NAME OF THE EMPTY STATE STRING, THAT IS ADDED BY THE CODE. /obj/item/projectile/proc/Range() range-- diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index fb83c4bdcd..6931b0e4e7 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -72,33 +72,33 @@ /obj/item/projectile/bullet/pistol // 9mm pistols and most SMGs. Sacrifice power for capacity. fire_sound = 'sound/weapons/gunshot2.ogg' damage = 20 - hud_state = "pistol" // CHOMPEdit: Putting these here for easier upstream porting. - hud_state_empty = "pistol_empty" // CHOMPEdit: Putting these here for easier upstream porting. + hud_state = "pistol" + hud_state_empty = "pistol_empty" /obj/item/projectile/bullet/pistol/ap damage = 15 armor_penetration = 30 - hud_state = "pistol_light_ap" // CHOMPEdit: Putting these here for easier upstream porting. + hud_state = "pistol_light_ap" /obj/item/projectile/bullet/pistol/hp damage = 25 armor_penetration = -50 - hud_state = "pistol_ap" // CHOMPEdit: Putting these here for easier upstream porting. + hud_state = "pistol_ap" /obj/item/projectile/bullet/pistol/medium // .45 (and maybe .40 if it ever gets added) caliber security pistols. Balance between capacity and power. fire_sound = 'sound/weapons/gunshot3.ogg' // Snappier sound. damage = 25 - hud_state = "pistol" // CHOMPEdit: Putting these here for easier upstream porting. + hud_state = "pistol" /obj/item/projectile/bullet/pistol/medium/ap damage = 20 armor_penetration = 15 - hud_state = "pistol_light_ap" // CHOMPEdit: Putting these here for easier upstream porting. + hud_state = "pistol_light_ap" /obj/item/projectile/bullet/pistol/medium/hp damage = 30 armor_penetration = -50 - hud_state = "pistol_ap" // CHOMPEdit: Putting these here for easier upstream porting. + hud_state = "pistol_ap" /obj/item/projectile/bullet/pistol/strong // .357 and .44 caliber stuff. High power pistols like the Mateba or Desert Eagle. Sacrifice capacity for power. fire_sound = 'sound/weapons/gunshot4.ogg' diff --git a/code/modules/projectiles/projectile_ch.dm b/code/modules/projectiles/projectile_ch.dm index 649673c772..a2af0b08be 100644 --- a/code/modules/projectiles/projectile_ch.dm +++ b/code/modules/projectiles/projectile_ch.dm @@ -1,8 +1,6 @@ /obj/item/projectile /// If this projectile is holy. Silver bullets, etc. Currently no effects. var/holy = 0 - var/hud_state = "unknown" // TGMC Ammo HUD Port - var/hud_state_empty = "unknown" // TGMC Ammo HUD Port /obj/item/projectile/bullet/pellet/shotgun/silver name = "shrapnel" diff --git a/vorestation.dme b/vorestation.dme index 55b0592e30..15474e7b5d 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -169,7 +169,6 @@ #include "code\_onclick\rig.dm" #include "code\_onclick\telekinesis.dm" #include "code\_onclick\hud\_defines.dm" -#include "code\_onclick\hud\_defines_ch.dm" #include "code\_onclick\hud\_defines_vr.dm" #include "code\_onclick\hud\ability_screen_objects.dm" #include "code\_onclick\hud\action.dm" @@ -181,7 +180,6 @@ #include "code\_onclick\hud\ghost.dm" #include "code\_onclick\hud\gun_mode.dm" #include "code\_onclick\hud\hud.dm" -#include "code\_onclick\hud\hud_ch.dm" #include "code\_onclick\hud\human.dm" #include "code\_onclick\hud\map_popups.dm" #include "code\_onclick\hud\minihud.dm" From d3962b086b7a8ea5aacf64841799a2abac15d717 Mon Sep 17 00:00:00 2001 From: Rykka Date: Sun, 10 Apr 2022 09:11:46 -0600 Subject: [PATCH 20/20] Sets Vepr to laser_overcharge HUD state. --- code/modules/projectiles/projectile/energy_ch.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/projectile/energy_ch.dm b/code/modules/projectiles/projectile/energy_ch.dm index 60a6bd0b26..5376ff5c97 100644 --- a/code/modules/projectiles/projectile/energy_ch.dm +++ b/code/modules/projectiles/projectile/energy_ch.dm @@ -22,4 +22,5 @@ impact_effect_type = /obj/effect/temp_visual/impact_effect hitsound_wall = 'sound/weapons/effects/searwall.ogg' hitsound = 'sound/weapons/sear.ogg' + hud_state = "laser_overcharge"