diff --git a/code/game/antagonist/station/revolutionary.dm b/code/game/antagonist/station/revolutionary.dm
index 868012d1209..73af51ad318 100644
--- a/code/game/antagonist/station/revolutionary.dm
+++ b/code/game/antagonist/station/revolutionary.dm
@@ -64,7 +64,7 @@ var/datum/antagonist/revolutionary/revs
if(!player.back)
player.equip_to_slot_or_del(new /obj/item/storage/backpack/satchel(player), slot_back) // if they have no backpack, spawn one
player.equip_to_slot_or_del(new /obj/item/device/announcer(player), slot_in_backpack)
- player.equip_to_slot_or_del(new /obj/item/device/special_uplink/rev(player), slot_in_backpack)
+ player.equip_to_slot_or_del(new /obj/item/device/special_uplink/rev(player, player.mind), slot_in_backpack)
give_codewords(player)
alert(player, "As a Head Revolutionary, you are given an uplink with a lot of telecrystals. \
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index ac9ccc984c3..b6e70fbae32 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -74,7 +74,7 @@
src.releasetime = 0
if(world.timeofday > src.releasetime)
- if( src.timer_end() )// open doors, reset timer, clear status screen
+ if(src.timer_end(broadcast = TRUE))// open doors, reset timer, clear status screen
var/message = "Criminal sentence complete. The criminal is free to go."
ping( "\The [src] pings, \"[message]\"" )
@@ -116,8 +116,9 @@
// Opens and unlocks doors, power check
-/obj/machinery/door_timer/proc/timer_end(var/early=0)
- if(stat & (NOPOWER|BROKEN)) return 0
+/obj/machinery/door_timer/proc/timer_end(var/early = 0, var/broadcast)
+ if(stat & (NOPOWER|BROKEN))
+ return 0
timing = 0
@@ -126,16 +127,22 @@
timeset( 0 )
for(var/obj/machinery/door/window/brigdoor/door in targets)
- if(!door.density) continue
+ if(!door.density)
+ continue
spawn(0)
door.open()
for(var/obj/structure/closet/secure_closet/brig/C in targets)
- if(C.broken) continue
- if(C.opened) continue
+ if(C.broken)
+ continue
+ if(C.opened)
+ continue
C.locked = 0
C.icon_state = C.icon_closed
+ if(broadcast)
+ broadcast_security_hud_message("The timer for [id] has expired.", src)
+
if(istype(incident))
var/datum/record/general/R = SSrecords.find_record("name", incident.criminal.name)
if(istype(R) && istype(R.security))
diff --git a/code/game/objects/items/devices/dociler.dm b/code/game/objects/items/devices/dociler.dm
index 2a878770aff..b4e4908dec4 100644
--- a/code/game/objects/items/devices/dociler.dm
+++ b/code/game/objects/items/devices/dociler.dm
@@ -3,12 +3,11 @@
desc = "A complex single use recharging injector that spreads a complex neurological serum that makes animals docile and friendly. Somewhat."
w_class = 3
origin_tech = list(TECH_BIO = 5, TECH_MATERIAL = 2)
- icon_state = "animal_tagger1"
- item_icons = list(
- slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi',
- slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi'
- )
- item_state = "gun"
+ // To-do track down where the hell this sprite went?
+ icon = 'icons/obj/guns/decloner.dmi'
+ icon_state = "decloner"
+ item_state = "decloner"
+ contained_sprite = TRUE
force = 0
var/loaded = 1
var/mode = "completely"
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index b1c492d7602..9ad2e288dca 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -131,14 +131,11 @@
/obj/item/toy/crossbow
name = "foam dart crossbow"
desc = "A weapon favored by many overactive children. Ages 8 and up."
- icon = 'icons/obj/gun.dmi'
+ icon = 'icons/obj/guns/crossbow.dmi'
icon_state = "crossbow"
item_state = "crossbow"
drop_sound = 'sound/items/drop/gun.ogg'
- item_icons = list(//ITEM_ICONS ARE DEPRECATED. USE CONTAINED SPRITES IN FUTURE
- icon_l_hand = 'icons/mob/items/lefthand_guns.dmi',
- icon_r_hand = 'icons/mob/items/righthand_guns.dmi'
- )
+ contained_sprite = TRUE
w_class = ITEMSIZE_SMALL
attack_verb = list("attacked", "struck", "hit")
var/bullets = 5
diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm
index a63a35303bb..b7fe8752a38 100644
--- a/code/game/objects/items/weapons/material/shards.dm
+++ b/code/game/objects/items/weapons/material/shards.dm
@@ -99,7 +99,7 @@
..(loc, "titanium")
/obj/item/material/shard/phoron/New(loc)
- ..(loc, "phglass")
+ ..(loc, "borosilicate glass")
/obj/item/material/shard/wood/New(loc)
..(loc, "wood")
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index 0f2d54a9fa4..fb0b4534fd6 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -209,7 +209,7 @@
/obj/random/energy
name = "Random Energy Weapon"
desc = "This is a random security weapon."
- icon = 'icons/obj/gun.dmi'
+ icon = 'icons/obj/guns/ecarbine.dmi'
icon_state = "energykill100"
problist = list(
/obj/item/gun/energy/rifle/laser = 2,
@@ -220,8 +220,8 @@
/obj/random/projectile
name = "Random Projectile Weapon"
desc = "This is a random security weapon."
- icon = 'icons/obj/gun.dmi'
- icon_state = "revolver"
+ icon = 'icons/obj/guns/cshotgun.dmi'
+ icon_state = "cshotgun"
problist = list(
/obj/item/gun/projectile/shotgun/pump = 3,
/obj/item/gun/projectile/automatic/wt550 = 2,
@@ -231,8 +231,8 @@
/obj/random/handgun
name = "Random Handgun"
desc = "This is a random security sidearm."
- icon = 'icons/obj/gun.dmi'
- icon_state = "secgundark"
+ icon = 'icons/obj/guns/secgun.dmi'
+ icon_state = "secgun"
problist = list(
/obj/item/gun/projectile/sec = 3,
/obj/item/gun/projectile/sec/wood = 1
@@ -650,7 +650,7 @@
/obj/random/energy_antag
name = "random energy weapon"
desc = "This is a random energy weapon."
- icon = 'icons/obj/gun.dmi'
+ icon = 'icons/obj/guns/retro.dmi'
icon_state = "retro100"
spawnlist = list(
/obj/item/gun/energy/retro,
@@ -1307,8 +1307,8 @@
/obj/random/vault_weapon
name = "random vault weapon"
desc = "This is a random vault weapon."
- icon = 'icons/obj/gun.dmi'
- icon_state = "retro100"
+ icon = 'icons/obj/guns/caplaser.dmi'
+ icon_state = "caplaser"
spawnlist = list(
/obj/item/gun/custom_ka/frameA/prebuilt = 1,
/obj/item/gun/custom_ka/frameB/prebuilt = 0.5,
diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm
index 86bb4ed10fa..983b58df746 100644
--- a/code/modules/client/preference_setup/loadout/loadout_suit.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm
@@ -145,6 +145,7 @@
coat["trenchcoat, grey"] = /obj/item/clothing/suit/storage/toggle/trench/grey
coat["trenchcoat, dark brown"] = /obj/item/clothing/suit/storage/toggle/trench/alt
coat["trenchcoat, grey alternate"] = /obj/item/clothing/suit/storage/toggle/trench/grey_alt
+ coat["trenchcoat, green"] = /obj/item/clothing/suit/storage/toggle/trench/green
gear_tweaks += new/datum/gear_tweak/path(coat)
@@ -327,4 +328,4 @@
/datum/gear/suit/cardigan/New()
..()
- gear_tweaks += gear_tweak_free_color_choice
\ No newline at end of file
+ gear_tweaks += gear_tweak_free_color_choice
diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm
index 90b5e723a5b..7ec31f6c245 100644
--- a/code/modules/clothing/spacesuits/rig/modules/combat.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm
@@ -137,6 +137,8 @@
/obj/item/rig_module/mounted/New()
..()
gun = new gun_type(src)
+ if(istype(gun, /obj/item/gun))
+ gun.has_safety = FALSE
/obj/item/rig_module/mounted/engage(atom/target)
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 9eed2316ec1..44be098b05d 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -441,6 +441,15 @@
icon_open = "trenchcoat_grey_open"
icon_closed = "trenchcoat_grey"
+/obj/item/clothing/suit/storage/toggle/trench/green
+ name = "green trenchcoat"
+ desc = "A comfy looking green trenchcoat with fur."
+ icon_state = "greentrench"
+ item_state = "greentrench"
+ icon_open = "greentrench_open"
+ icon_closed = "greentrench"
+ body_parts_covered = UPPER_TORSO|ARMS
+
/obj/item/clothing/suit/storage/dominia
name = "dominia cape"
desc = "This is a cape in the style of Dominia nobility. It's the latest fashion across Dominian space."
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 7678f6a0169..6868633ec70 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -48,7 +48,7 @@ mob/living/carbon/proc/handle_hallucinations()
halitem.layer = 50
switch(rand(1,6))
if(1) //revolver
- halitem.icon = 'icons/obj/gun.dmi'
+ halitem.icon = 'icons/obj/guns/revolver.dmi'
halitem.icon_state = "revolver"
halitem.name = "Revolver"
if(2) //c4
diff --git a/code/modules/integrated_electronics/core/assemblies/generic.dm b/code/modules/integrated_electronics/core/assemblies/generic.dm
index 98910919cee..aac232f8d67 100644
--- a/code/modules/integrated_electronics/core/assemblies/generic.dm
+++ b/code/modules/integrated_electronics/core/assemblies/generic.dm
@@ -97,10 +97,6 @@
item_state = "circuitgun"
desc = "It's a case, for building medium-sized electronics with. This one resembles a gun, or some type of tool, \
if you're feeling optimistic."
- item_icons = list(
- slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi',
- slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi',
- )
/obj/item/device/electronic_assembly/medium/radio
name = "type-f electronic mechanism"
diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm
index 5cba4687daf..c233fc66a18 100644
--- a/code/modules/materials/materials.dm
+++ b/code/modules/materials/materials.dm
@@ -397,7 +397,12 @@ var/list/name_to_material
icon_colour = null
stack_type = null
icon_base = "biomass"
- integrity = 600
+ integrity = 100
+ // below is same as wood
+ melting_point = T0C + 300
+ ignition_point = T0C + 288
+ golem = "Wood Golem"
+ hitsound = 'sound/effects/woodhit.ogg'
/material/diona/place_dismantled_product()
return
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index 9c881dd3d3e..3d7c0ff5da9 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -59,21 +59,6 @@ var/list/holder_mob_icon_cache = list()
for(var/mob/M in contents)
M.show_inv(usr)
-//Mob specific holders.
-/obj/item/holder/diona
- icon = 'icons/mob/diona.dmi'
- origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 5)
- slot_flags = SLOT_HEAD | SLOT_OCLOTHING | SLOT_HOLSTER
-
-/obj/item/holder/drone
- origin_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 5)
-
-/obj/item/holder/rat
- w_class = 1
-
-/obj/item/holder/borer
- origin_tech = list(TECH_BIO = 6)
-
/obj/item/holder/process()
if (!contained)
qdel(src)
@@ -370,7 +355,7 @@ var/list/holder_mob_icon_cache = list()
icon_state = "nymph"
icon_state_dead = "nymph_dead"
origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 5)
- slot_flags = SLOT_HEAD | SLOT_OCLOTHING
+ slot_flags = SLOT_HEAD | SLOT_EARS | SLOT_HOLSTER
w_class = 2
/obj/item/holder/drone
diff --git a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm
index 177d32d14ef..c3ce56b6f9b 100644
--- a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm
+++ b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm
@@ -1,11 +1,11 @@
-/mob/living/carbon/alien/diona/attack_hand(mob/living/carbon/human/M as mob)
- if(istype(M) && M.a_intent == I_HELP && !(src.stat & DEAD))
- if(M.species && M.species.name == "Diona" && do_merge(M))
+/mob/living/carbon/alien/diona/attack_hand(mob/living/carbon/human/M)
+ if(istype(M) && M.a_intent == I_HELP && !stat)
+ if(M.is_diona() && do_merge(M))
return
- M.visible_message("[M] pets the [src]")
+ M.visible_message(span("notice", "[M] pets \the [src]."))
return
- else if (src.stat & DEAD)
- get_scooped(M)
+ else if (stat == DEAD)
+ get_scooped(M) // GET SCOOPED - geeves
..()
//#TODO-MERGE: Test nymph hats
@@ -16,33 +16,31 @@
if(H.a_intent == I_HELP)
if(H.species && H.species.name == "Diona" && do_merge(H))
return
- get_scooped(H)
+ get_scooped(H) // GET SCOOPED - geeves
return
- else if(H.a_intent == "grab" && hat && !(H.l_hand && H.r_hand))
+ else if(H.a_intent == I_GRAB && hat && !(H.l_hand && H.r_hand))
hat.forceMove(get_turf(src))
H.put_in_hands(hat)
- H.visible_message("\The [H] removes \the [src]'s [hat].")
+ H.visible_message(span("warning", "\The [H] removes \the [src]'s [hat]."))
hat = null
update_icons()
else
return ..()
/mob/living/carbon/alien/diona/attackby(var/obj/item/W, var/mob/user)
- if(user.a_intent == "help" && istype(W, /obj/item/clothing/head))
+ if(user.a_intent == I_HELP && istype(W, /obj/item/clothing/head))
if(hat)
- to_chat(user, "\The [src] is already wearing \the [hat].")
+ to_chat(user, span("warning", "\The [src] is already wearing \the [hat]."))
return
user.unEquip(W)
wear_hat(W)
- user.visible_message("\The [user] puts \the [W] on \the [src].")
+ user.visible_message(span("notice", "\The [user] puts \the [W] on \the [src]."))
return
else if(istype(W, /obj/item/reagent_containers) || istype(W, /obj/item/stack/medical) || istype(W,/obj/item/gripper/))
..(W, user)
return
-
else if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead.
- if(istype(W, /obj/item/material/knife) || istype(W, /obj/item/material/kitchen/utensil/knife ))
+ if(istype(W, /obj/item/material/knife) || istype(W, /obj/item/material/kitchen/utensil/knife))
harvest(user)
return
-
- ..(W, user)
+ ..(W, user)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/diona/diona_nymph.dm b/code/modules/mob/living/carbon/alien/diona/diona_nymph.dm
index 87f2a4cab7b..0120d8e8984 100644
--- a/code/modules/mob/living/carbon/alien/diona/diona_nymph.dm
+++ b/code/modules/mob/living/carbon/alien/diona/diona_nymph.dm
@@ -1,6 +1,5 @@
-#define evolve_nutrition 4000//when a nymph gathers this much nutrition, it can evolve into a gestalt
-
+#define evolve_nutrition 4000 //when a nymph gathers this much nutrition, it can evolve into a gestalt
//Diona time variables, these differ slightly between a gestalt and a nymph. All values are times in seconds
/mob/living/carbon/alien/diona
@@ -8,9 +7,9 @@
language = null
mob_size = 4
density = 0
- mouth_size = 2//how large of a creature it can swallow at once, and how big of a bite it can take out of larger things
- eat_types = 0//This is a bitfield which must be initialised in New(). The valid values for it are in devour.dm
- composition_reagent = "nutriment"//Dionae are plants, so eating them doesn't give animal protein
+ mouth_size = 2 //how large of a creature it can swallow at once, and how big of a bite it can take out of larger things
+ eat_types = 0 //This is a bitfield which must be initialised in New(). The valid values for it are in devour.dm
+ composition_reagent = "nutriment" //Dionae are plants, so eating them doesn't give animal protein
name = "diona nymph"
voice_name = "diona nymph"
adult_form = /mob/living/carbon/human
@@ -18,8 +17,8 @@
icon = 'icons/mob/diona.dmi'
icon_state = "nymph"
death_msg = "expires with a pitiful chirrup..."
- universal_understand = 0
- universal_speak = 0
+ universal_understand = FALSE
+ universal_speak = FALSE
holder_type = /obj/item/holder/diona
meat_type = /obj/item/reagent_containers/food/snacks/meat/dionanymph
meat_amount = 2
@@ -39,11 +38,11 @@
var/dark_survival = 216 // How long this diona can survive in darkness after energy is gone, before it dies
var/datum/dionastats/DS
var/mob/living/carbon/gestalt = null // If set, then this nymph is inside a gestalt
- var/kept_clean = 0
+ var/kept_clean = FALSE
var/mob/living/carbon/alien/diona/master_nymph //nymph who owns this nymph if split. AI diona nymphs will follow this nymph, and these nymphs can be controlled by the master.
var/list/mob/living/carbon/alien/diona/birds_of_feather = list() //list of all related nymphs
- var/echo = 0 //if it's an echo nymph, which has unique properties
+ var/echo = FALSE //if it's an echo nymph, which has unique properties
var/detached = FALSE
var/datum/reagents/metabolism/ingested
@@ -68,7 +67,7 @@
master_nymph = null
birds_of_feather.Cut()
- kept_clean = 1
+ kept_clean = TRUE
/mob/living/carbon/alien/diona/flowery/Initialize(var/mapload)
@@ -77,13 +76,13 @@
/mob/living/carbon/alien/diona/movement_delay()
. = ..()
switch(m_intent)
- if ("walk")
+ if("walk")
. += 3
- if ("run")
+ if("run")
species.handle_sprint_cost(src,.+config.walk_speed)
/mob/living/carbon/alien/diona/ex_act(severity)
- if (life_tick < 4)
+ if(life_tick < 4)
//If a nymph was just born, then it already took damage from the ex_act on its gestalt
//So we ignore any farther damage for a couple ticks after its born, to prevent it getting hit twice by the same blast
return
@@ -98,7 +97,7 @@
set_species("Diona")
setup_dionastats()
eat_types |= TYPE_ORGANIC
- nutrition = 0//We dont start with biomass
+ nutrition = 0 //We dont start with biomass
update_verbs()
sampled_DNA = list()
language_progress = list()
@@ -119,26 +118,24 @@
else if (light <= 3)
to_chat(usr, span("notice", "This light is comfortable and warm, Quite adequate for our needs."))
else
- to_chat(usr, span("notice", "This warm radiance is bliss. Here we are safe and energised! Stay a while.."))
+ to_chat(usr, span("notice", "This warm radiance is bliss. Here we are safe and energised! Stay a while..."))
/mob/living/carbon/alien/diona/start_pulling(var/atom/movable/AM)
//TODO: Collapse these checks into one proc (see pai and drone)
if(istype(AM,/obj/item))
var/obj/item/O = AM
if(O.w_class > 2)
- to_chat(src, "You are too small to pull that.")
+ to_chat(src, span("warning", "You are too small to pull that."))
return
else
..()
else
- to_chat(src, "You are too small to pull that.")
+ to_chat(src, span("warning", "You are too small to pull that."))
return
/mob/living/carbon/alien/diona/put_in_hands(var/obj/item/W) // No hands.
W.forceMove(get_turf(src))
- return 1
-
-
+ return TRUE
//Functions duplicated from humans, albeit slightly modified
/mob/living/carbon/alien/diona/proc/set_species(var/new_species)
@@ -156,8 +153,7 @@
new_species = "Human"
if(species)
-
- if(species.name && species.name == new_species)
+ if(species.name == new_species)
return
if(species.language)
remove_language(species.language)
@@ -175,28 +171,20 @@
holder_type = species.holder_type
icon_state = lowertext(species.name)
-
species.handle_post_spawn(src)
-
maxHealth = species.total_health
-
- spawn(0)
- regenerate_icons()
- make_blood()
+ regenerate_icons()
+ make_blood()
// Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them.
- if(client && client.screen)
+ if(client?.screen)
client.screen.len = null
if(hud_used)
qdel(hud_used)
hud_used = new /datum/hud(src)
-
- if(species)
- return 1
- else
- return 0
+ return !!species
/mob/living/carbon/alien/diona/proc/make_blood()
@@ -227,23 +215,23 @@
B.color = B.data["blood_colour"]
/mob/living/carbon/alien/diona/proc/setup_dionastats()
- var/MLS = (1.5 / 2.1)//Maximum energy lost per second, in total darkness
+ var/MLS = (1.5 / 2.1) //Maximum energy lost per second, in total darkness
DS = new/datum/dionastats()
DS.max_energy = energy_duration * MLS
DS.stored_energy = (DS.max_energy / 2)
DS.max_health = maxHealth
DS.pain_factor = (50 / dark_consciousness) / MLS
DS.trauma_factor = (DS.max_health / dark_survival) / MLS
- DS.dionatype = 1//Nymph
+ DS.dionatype = DIONA_NYMPH
//This is called periodically to register or remove this nymph's status as a bad organ of the gestalt
//This is used to notify the gestalt when it needs repaired
/mob/living/carbon/alien/diona/proc/check_status_as_organ()
- if (istype(gestalt, /mob/living/carbon/human) && !QDELETED(gestalt))
+ if(ishuman(gestalt) && !QDELETED(gestalt))
var/mob/living/carbon/human/H = gestalt
if(!H.bad_internal_organs)
return
- if (health < maxHealth)
+ if(health < maxHealth)
if (!(src in H.bad_internal_organs))
H.bad_internal_organs.Add(src)
else
@@ -252,55 +240,41 @@
//This function makes sure the nymph has the correct split/merge verbs, depending on whether or not its part of a gestalt
/mob/living/carbon/alien/diona/proc/update_verbs()
- if (gestalt && !detached)
- if (!(/mob/living/carbon/alien/diona/proc/split in verbs))
- verbs.Add(/mob/living/carbon/alien/diona/proc/split)
-
- verbs.Remove(/mob/living/proc/ventcrawl)
- verbs.Remove(/mob/living/proc/hide)
- verbs.Remove(/mob/living/carbon/alien/diona/proc/grow)
- verbs.Remove(/mob/living/carbon/alien/diona/proc/merge)
- verbs.Remove(/mob/living/carbon/proc/absorb_nymph)
- verbs.Remove(/mob/living/carbon/alien/diona/proc/sample)
+ if(gestalt && !detached)
+ verbs -= /mob/living/proc/ventcrawl
+ verbs -= /mob/living/proc/hide
+ verbs -= /mob/living/carbon/alien/diona/proc/grow
+ verbs -= /mob/living/carbon/alien/diona/proc/merge
+ verbs -= /mob/living/carbon/proc/absorb_nymph
+ verbs -= /mob/living/carbon/alien/diona/proc/sample
+ verbs |= /mob/living/carbon/alien/diona/proc/split
else
- if (!(/mob/living/carbon/alien/diona/proc/merge in verbs) && !detached)
- verbs.Add(/mob/living/carbon/alien/diona/proc/merge)
+ verbs |= /mob/living/carbon/alien/diona/proc/merge
+ verbs |= /mob/living/carbon/proc/absorb_nymph
+ verbs |= /mob/living/carbon/alien/diona/proc/grow
+ verbs |= /mob/living/proc/ventcrawl
+ verbs |= /mob/living/proc/hide
+ verbs |= /mob/living/carbon/alien/diona/proc/sample
+ verbs -= /mob/living/carbon/alien/diona/proc/split // we want to remove this one
- if (!(/mob/living/carbon/proc/absorb_nymph in verbs))
- verbs.Add(/mob/living/carbon/proc/absorb_nymph)
-
- if (!(/mob/living/carbon/alien/diona/proc/grow in verbs))
- verbs.Add(/mob/living/carbon/alien/diona/proc/grow)
-
- if (!(/mob/living/proc/ventcrawl in verbs))
- verbs.Add(/mob/living/proc/ventcrawl)
-
- if (!(/mob/living/proc/hide in verbs))
- verbs.Add(/mob/living/proc/hide)
-
- if (!(/mob/living/carbon/alien/diona/proc/sample in verbs))
- verbs.Add(/mob/living/carbon/alien/diona/proc/sample)
-
- verbs.Remove(/mob/living/carbon/alien/diona/proc/split)
-
- verbs.Remove(/mob/living/carbon/alien/verb/evolve)//We don't want the old alien evolve verb
+ verbs -= /mob/living/carbon/alien/verb/evolve //We don't want the old alien evolve verb
/mob/living/carbon/alien/diona/Stat()
..()
- if (statpanel("Status"))
+ if(statpanel("Status"))
stat(null, text("Biomass: [nutrition]/[evolve_nutrition]"))
- if (nutrition > evolve_nutrition)
+ if(nutrition > evolve_nutrition)
stat(null, text("You have enough biomass to grow!"))
//Overriding this function from /mob/living/carbon/alien/life.dm
/mob/living/carbon/alien/diona/handle_regular_status_updates()
-
- if(status_flags & GODMODE) return 0
+ if(status_flags & GODMODE)
+ return FALSE
if(stat == DEAD)
- blinded = 1
- silent = 0
+ blinded = TRUE
+ silent = FALSE
else
updatehealth()
handle_stunned()
@@ -308,38 +282,37 @@
if(health <= 0)
cleanupTransfer()
death()
- blinded = 1
- silent = 0
- return 1
+ blinded = TRUE
+ silent = FALSE
+ return TRUE
if(getHalLoss() > 50)
paralysis = 8
-
if(paralysis && paralysis > 0)
handle_paralysed()
- blinded = 1
+ blinded = TRUE
stat = UNCONSCIOUS
if(sleeping)
- if (mind)
- if(mind.active && client != null)
+ if(mind)
+ if(mind.active && client)
sleeping = max(sleeping-1, 0)
- blinded = 1
+ blinded = TRUE
stat = UNCONSCIOUS
else if(resting)
-
+ // insert dial up tone
else
stat = CONSCIOUS
// Eyes and blindness.
if(!has_eyes())
- eye_blind = 1
- blinded = 1
- eye_blurry = 1
+ eye_blind = TRUE
+ blinded = TRUE
+ eye_blurry = TRUE
else if(eye_blind)
eye_blind = max(eye_blind-1,0)
- blinded = 1
+ blinded = TRUE
else if(eye_blurry)
eye_blurry = max(eye_blurry-1, 0)
@@ -352,10 +325,10 @@
update_icons()
- return 1
+ return TRUE
/mob/living/carbon/alien/diona/Destroy()
- walk_to(src,0)
+ walk_to(src, 0)
cleanupTransfer()
. = ..()
@@ -371,23 +344,23 @@
var/mob/living/carbon/alien/diona/D = A
if(D.master_nymph == src) //if the nymph is subservient to you
mind.transfer_to(D)
- D.stunned = 0//Switching mind seems to temporarily stun mobs
+ D.stunned = 0 // Switching mind seems to temporarily stun mobs
for(var/mob/living/carbon/alien/diona/DIO in src.birds_of_feather) //its me!
DIO.master_nymph = D
- return 1
+ return TRUE
. = ..()
/mob/living/carbon/alien/diona/proc/harvest(var/mob/user)
- var/actual_meat_amount = max(1,(meat_amount*0.75))
- if(meat_type && actual_meat_amount>0 && (stat == DEAD))
- for(var/i=0;i 0 && (stat == DEAD))
+ for(var/i = 0; i < actual_meat_amount; i++)
var/obj/item/meat = new meat_type(get_turf(src))
- if (meat.name == "meat")
+ if(meat.name == "meat")
meat.name = "[src.name] [meat.name]"
if(issmall(src))
- user.visible_message("[user] chops up \the [src]!")
+ user.visible_message(span("warning", "[user] chops up \the [src]!"))
new/obj/effect/decal/cleanable/blood/splatter(get_turf(src))
qdel(src)
else
- user.visible_message("[user] butchers \the [src] messily!")
- gib()
\ No newline at end of file
+ user.visible_message(span("warning", "[user] butchers \the [src] messily!"))
+ gib()
diff --git a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm
index 889f9dceffc..09eedaac9a7 100644
--- a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm
+++ b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm
@@ -1,29 +1,22 @@
-//Verbs after this point.
-
-
//Merge:
//Joins yourself into an existing gestalt, becoming just a small part of it
//The nymph player moves inside the gestalt and no longer has control of movement or actions
/mob/living/carbon/alien/diona/proc/merge()
-
set category = "Abilities"
set name = "Merge with gestalt"
set desc = "Merge yourself into a larger gestalt, you will no longer retain control."
- if(stat == DEAD || paralysis || weakened || stunned || restrained())
- return
+ if(use_check_and_message(usr))
+ return FALSE
var/list/choices = list()
- for(var/mob/living/carbon/C in view(1,src))
+ for(var/mob/living/carbon/human/H in view(1, src))
+ if(!Adjacent(H) || !H.client)
+ continue
+ if(is_diona(H) == DIONA_WORKER)
+ choices += H
- if(!(src.Adjacent(C)) || !(C.client)) continue
-
- if(istype(C,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = C
- if(H.species && H.species.name == "Diona" && H.client)
- choices += H
-
- var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices
+ var/mob/living/M = input(src, "Who do you wish to merge with?") in null|choices
if(!M)
to_chat(src, span("warning", "There are no active gestalts nearby to merge with."))
@@ -32,40 +25,38 @@
/mob/living/carbon/alien/diona/proc/do_merge(var/mob/living/carbon/human/H)
- if(!istype(H) || !src || !(src.Adjacent(H)))
- return 0
+ if(!istype(H) || !Adjacent(H))
+ return FALSE
to_chat(src, span("warning", "Requesting consent from [H]"))
- var/r = alert(H,"[src] wishes to join your collective, and become a part of your gestalt. If you accept they will become an equal part of you, though you will remain in control?", "[src] wishes to join you", "Welcome!", "No, leave us..")
- if (r != "Welcome!")
+ var/r = alert(H, "[src] wishes to join your collective, and become a part of your gestalt. If you accept they will become an equal part of you, though you will remain in control.", "[src] wishes to join you", "Welcome!", "No, leave us..")
+ if(r != "Welcome!")
to_chat(src, span("warning", "[H.name] has rejected your wish to merge!"))
- return 0
+ return FALSE
- H.visible_message(span("warning", "[H] starts absorbing [src] into its body"), span("warning", "You start absorbing [src]. This will take 15 seconds and both of you must remain still"), span("warning", "You hear a strange, alien. sucking sound"))
- to_chat(src, "You feel yourself slowly becoming part of something greater, remain still to finish.")
+ H.visible_message(span("warning", "[H] starts absorbing [src] into its body."), span("warning", "You start absorbing [src]. This will take 15 seconds and both of you must remain still."), span("warning", "You hear a strange, alien, sucking noise."))
+ to_chat(src, span("notice", "You feel yourself slowly becoming part of something greater, remain still to finish."))
face_atom(H)
H.face_atom(get_turf(src))
- if(do_mob(src, H, 150, needhand = 0))
- if (!(src.Adjacent(H)) || !(istype(src.loc, /turf)))//The loc check prevents us from absorbing the same nymph multiple times at once
+ if(do_mob(src, H, 150, needhand = FALSE))
+ if(!Adjacent(H) || !isturf(loc)) //The loc check prevents us from absorbing the same nymph multiple times at once
to_chat(src, span("warning", "Something went wrong while trying to merge into [H], cancelling."))
- return 0
+ return FALSE
gestalt = H
sync_languages(gestalt)
update_verbs()
- sleep(2)//Altering the verbs list takes some time and it wont complete after the nymph is moved in. This sleep is necessary
- to_chat(H, "You feel your being twine with that of \the [src] as it merges with your biomass.")
+ sleep(2) //Altering the verbs list takes some time and it wont complete after the nymph is moved in. This sleep is necessary
+ to_chat(H, span("notice", "You feel your being twine with that of \the [src] as it merges with your biomass."))
H.status_flags |= PASSEMOTES
- to_chat(src, "You feel your being twine with that of \the [H] as you merge with its biomass.")
+ to_chat(src, span("notice", "You feel your being twine with that of \the [H] as you merge with its biomass."))
for(var/obj/O in src.contents)
drop_from_inventory(O)
src.forceMove(H)
else
to_chat(src, span("warning", "Something went wrong while trying to merge into [H], cancelling."))
- return 0
-
-
- return 1
+ return FALSE
+ return TRUE
@@ -79,70 +70,66 @@
set category = "Abilities"
set name = "Absorb Nymph"
set desc = "Absorb a diona nymph into yourself, you will remain in control and gain any biomass it has absorbed."
+
var/list/choices = list()
- for(var/mob/living/carbon/alien/diona/C in view(1,src))
+ for(var/mob/living/carbon/alien/diona/C in view(1, src))
+ if(!Adjacent(C) || C.gestalt || C == src) //cant steal nymphs right out of other gestalts
+ continue
+ choices += C
- if((!(src.Adjacent(C)) || C.gestalt || C == src)) continue//cant steal nymphs right out of other gestalts
- choices.Add(C)
-
- var/mob/living/carbon/alien/diona/M = input(src,"Which nymph do you wish to absorb?") in null|choices
+ var/mob/living/carbon/alien/diona/M = input(src, "Which nymph do you wish to absorb?") in null|choices
if(!M)
- to_chat(src, span("warning", "There is nothing nearby to absorb"))
+ to_chat(src, span("warning", "There are no nymphs in your vicinity."))
else if(!do_absorb(M))
to_chat(src, span("warning", "You fail to merge with \the [M]..."))
/mob/living/carbon/proc/do_absorb(var/mob/living/carbon/alien/diona/D)
- if (D.key)
+ if(D.key)
//Code for requesting permission goes here. We will return if its denied or ignored
- to_chat(src, span("warning", "Requesting consent from [D]"))
- var/r = alert(D,"[src] wishes to absorb your being, and make you a part of their gestalt. If you accept you will join with them, and give up control to be a part of their collective. \nYou will be part of their larger gestalt if they grow later, too, and all of your stored biomass will be transferred to them. You can split away at anytime, but you cannot reclaim the biomass. Do you wish to be absorbed?", "[src] wishes to absorb you", "Yes, we will join!", "No, i wish to remain alone")
- if (r != "Yes, we will join!")
+ to_chat(src, span("warning", "Requesting consent from [D]."))
+ var/r = alert(D,"[src] wishes to absorb your being, and make you a part of their gestalt. If you accept you will join with them, and give up control to be a part of their collective. \nYou will be part of their larger gestalt if they grow later, too, and all of your stored biomass will be transferred to them. You can split away at anytime, but you cannot reclaim the biomass. Do you wish to be absorbed?", "[src] wishes to absorb you", "Yes, I will join!", "No, I wish to remain alone!")
+ if(r != "Yes, I will join!")
to_chat(src, span("warning", "[D] has refused to join you!"))
return
- else
- if (!(src.Adjacent(D)) || !(istype(D.loc, /turf)))
- to_chat(src, span("warning", "Something went wrong while trying to absorb [D], cancelling."))
- return
-
- src.visible_message(span("warning", "[src] starts absorbing [D] into its body"), span("warning", "You start absorbing [D]. This will take 15 seconds and both of you must remain still"), span("warning", "You hear a strange, alien. sucking sound"))
- to_chat(D, "You feel yourself slowly becoming part of something greater, remain still to finish.")
- face_atom(D)
- D.face_atom(get_turf(src))
- if(do_mob(src, D, 150, needhand = 0))
- if (!(src.Adjacent(D)) || !(istype(D.loc, /turf)))//The loc check prevents us from absorbing the same nymph multiple times at once
- to_chat(src, span("warning", "Something went wrong while trying to absorb [D], cancelling."))
+ else if(!Adjacent(D) || !isturf(D.loc))
+ to_chat(src, span("warning", "\The [D] must remain close to the collective if \he wishes to be part of us."))
return
- if (D.stat == DEAD)
+ src.visible_message(span("warning", "[src] starts absorbing [D] into its body."), span("warning", "You start absorbing [D]. This will take 15 seconds and both of you must remain still."), span("warning", "You hear a strange, alien, sucking noise."))
+ to_chat(D, span("notice", "You feel yourself slowly becoming part of something greater, remain still to finish."))
+ face_atom(D)
+ D.face_atom(get_turf(src))
+ if(do_mob(src, D, 150, needhand = FALSE))
+ if(!Adjacent(D) || !isturf(D.loc)) //The loc check prevents us from absorbing the same nymph multiple times at once
+ to_chat(src, span("warning", "\The [D] must remain close to the collective if \he wishes to be part of us."))
+ return
+
+ if(D.stat == DEAD)
src.adjustNutritionLoss(-NYMPH_ABSORB_NUTRITION * NYMPH_ABSORB_DEAD_FACTOR)
qdel(D)
- return 1
+ return TRUE
else
-
D.gestalt = src
D.sync_languages(D.gestalt)
D.update_verbs()
sleep(2)
- if (is_diona() == DIONA_NYMPH)//We only care about biomass if we're a nymph
+ if(is_diona() == DIONA_NYMPH) //We only care about biomass if we're a nymph
src.adjustNutritionLoss(-NYMPH_ABSORB_NUTRITION)
src.adjustNutritionLoss(-D.nutrition)
- D.nutrition = 0
-
- to_chat(D, "You feel your being twine with that of \the [src] as you merge with its biomass.")
- to_chat(src, "You feel your being twine with that of \the [D] as it merges with your biomass.")
+ D.nutrition = FALSE
+ to_chat(D, span("notice", "You feel your being entwine with that of \the [src] as you merge with its biomass."))
+ to_chat(src, span("notice", "You feel your being entwine with that of \the [D] as it merges with your biomass."))
for(var/obj/O in D.contents)
D.drop_from_inventory(O)
D.forceMove(src)
-
D.stat = CONSCIOUS
status_flags |= PASSEMOTES
- return 1
-
+ return TRUE
else
- return 0
+ return FALSE
//Split allows a nymph to peel away from a gestalt and be a lone agent
/mob/living/carbon/alien/diona/proc/split()
@@ -150,29 +137,29 @@
set name = "Break from gestalt"
set desc = "Split away from your gestalt as a lone nymph."
- if(stat == DEAD || paralysis || weakened || stunned || restrained())
- return
+ if(use_check_and_message(usr))
+ return FALSE
if(echo)
- to_chat(src, "Your host is still storing you as a nymphatic husk and preventing your departure.")
+ to_chat(src, span("notice", "Your host is still storing you as a nymphatic husk and preventing your departure."))
return
- if(!(istype(src.loc,/mob/living/carbon)))
- src.verbs -= /mob/living/carbon/alien/diona/proc/split
+ if(!iscarbon(loc))
+ verbs -= /mob/living/carbon/alien/diona/proc/split
return
- var/r = alert(src,"Splitting will remove you from your gestalt and deposit you on the ground, allowing you to go it alone. If you had any stored biomass before you joined the gestalt, you will not get it back. Are you sure you wish to split?", "Confirm Split", "Time to leaf", "I'll stick around")
- if (r != "Time to leaf")
+ var/r = alert(src, "Splitting will remove you from your gestalt and deposit you on the ground, allowing you continue alone. If you had any stored biomass before you joined the gestalt, you will not get it back. Are you sure you wish to split?", "Confirm Split", "I am ready to leave.", "I'll stick around.")
+ if(r != "I am ready to leave.")
return
- to_chat(src.loc, "You feel a pang of loss as [src] splits away from your biomass.")
- to_chat(src, "You wiggle out of the depths of [src.loc]'s biomass and plop to the ground.")
+ to_chat(gestalt, span("warning", "You feel a pang of loss as [src] splits away from your biomass."))
+ to_chat(src, span("notice", "You wiggle out of the depths of [gestalt]'s biomass and plop to the ground."))
- if (gestalt.is_diona() == DIONA_NYMPH)
+ if(gestalt.is_diona() == DIONA_NYMPH)
gestalt.adjustNutritionLoss(NYMPH_ABSORB_NUTRITION)
split_languages(gestalt)
- src.forceMove(get_turf(src))
+ forceMove(get_turf(src))
stat = CONSCIOUS
gestalt = null
update_verbs()
@@ -185,75 +172,76 @@
//For fun factor, we'll allow the nymph to choose nonvalid targets
var/list/choices = list()
- for(var/mob/living/L in view(1,src))
+ for(var/mob/living/L in view(1, src))
+ if(!Adjacent(L) || L == src)
+ continue
+ if(is_diona(L))
+ continue
+ choices += L
- if((!(src.Adjacent(L)) || L == src)) continue
- choices.Add(L)
-
- if (!choices.len)
+ if(!choices.len)
to_chat(src, span("warning", "There are no life forms nearby to sample!"))
return
- if (choices.len == 1)
- choices.Add("Cancel")
+ if(choices.len)
+ choices += "Cancel"
- var/mob/living/donor = input(src,"Who do you wish to drain?") in null|choices
+ var/mob/living/donor = input(src, "Who do you wish to sample?") in null|choices
- if (!donor || donor == "Cancel")//they cancelled
+ if(!donor || donor == "Cancel") //they cancelled
return
face_atom(donor)
var/types = donor.find_type()
- if (types & TYPE_SYNTHETIC)
- src.visible_message("[src] attempts to bite into [donor.name] but leaps back in surprise as its fangs hit metal.", "You attempt to sink your fangs into [donor.name] and get a faceful of unyielding steel as the force breaks several fine protrusions in your mouth.")
+ if(types & TYPE_SYNTHETIC)
+ src.visible_message(span("danger", "[src] attempts to bite into [donor.name] but leaps back in surprise as its fangs hit metal."), span("danger", "You attempt to sink your fangs into [donor.name] and get a faceful of unyielding steel as the force breaks several fine protrusions in your mouth."))
donor.adjustBruteLoss(2)
- src.adjustBruteLoss(15)//biting metal hurts!
+ src.adjustBruteLoss(15) //biting metal hurts!
return
else if (isanimal(donor) && (types & TYPE_ORGANIC) && donor.stat != DEAD)
- src.visible_message("[src] bites into [donor.name] and drains some of their blood", "You bite into [donor.name] and drain some blood.")
- to_chat(src, "This simple creature has insufficient intelligence for you to learn anything!")
+ src.visible_message(span("danger", "[src] bites into [donor.name] and drains some of their blood."), span("danger", "You bite into [donor.name] and drain some of their blood."))
+ to_chat(src, span("danger", "This simple creature has insufficient intelligence for you to learn anything!"))
donor.adjustBruteLoss(4)
adjustNutritionLoss(-20)
return
else if (types & TYPE_WEIRD)
- src.visible_message("[src] attempts to bite into [donor.name] but passes right through it!.", "You attempt to sink your fangs into [donor.name] but pass right through it!")
+ src.visible_message(span("danger", "[src] attempts to bite into [donor.name] but passes right through it!."), span("danger", "You attempt to sink your fangs into [donor.name] but pass right through it!"))
return
- else if (donor.is_diona())
- to_chat(src, span("warning", "You can't sample the DNA of other diona!"))
- return
- else if (istype(donor, /mob/living/carbon))
+ else if (iscarbon(donor))
+ var/mob/living/carbon/D = donor
//If we get here, it's -probably- valid
- src.visible_message("[src] is trying to bite [donor.name]", span("danger", "You start biting [donor.name], you both must stay still!"))
- face_atom(get_turf(donor))
- if (do_mob(src, donor, 40, needhand = 0))
-
+ src.visible_message(span("danger", "[src] is trying to bite [D.name]."), span("danger", "You start biting [D.name], you both must stay still!"))
+ face_atom(get_turf(D))
+ if(do_mob(src, D, 40, needhand = FALSE))
//Attempt to find the blood vessel, but don't create a fake one if its not there.
//If the target doesn't have a vessel its probably due to someone not implementing it properly, like xenos
//We'll still allow it
- var/datum/reagents/vessel = donor.get_vessel(1)
+ var/datum/reagents/vessel = D.get_vessel(1)
var/newDNA
var/datum/reagent/blood/B = vessel.get_master_reagent()
var/total_blood = B.volume
- var/remove_amount = (total_blood - 280) * 0.3
- if (remove_amount > 0)
- vessel.remove_reagent("blood", remove_amount, 1)//85 units of blood is enough to affect a human and make them woozy
- adjustNutritionLoss(-remove_amount*0.5)
+ var/remove_amount = total_blood * 0.05
+ if(ishuman(D))
+ var/mob/living/carbon/human/H = D
+ remove_amount = H.species.blood_volume * 0.05
+ if(remove_amount > 0)
+ vessel.remove_reagent("blood", remove_amount, TRUE)
+ adjustNutritionLoss(-remove_amount * 0.5)
var/list/data = vessel.get_data("blood")
newDNA = data["blood_DNA"]
- if (!newDNA)//Fallback. Adminspawned mobs, and possibly some others, have null dna.
- newDNA = md5("\ref[donor]")
+ if(!newDNA) //Fallback. Adminspawned mobs, and possibly some others, have null dna.
+ newDNA = md5("\ref[D]")
- donor.adjustBruteLoss(4)
- src.visible_message("[src] sucks some blood from [donor.name]", "You extract a delicious mouthful of blood from [donor.name]!")
+ D.adjustBruteLoss(4)
+ src.visible_message(span("notice", "[src] sucks some blood from [D.name].") , span("notice", "You extract a delicious mouthful of blood from [D.name]!"))
- if (newDNA in sampled_DNA)
- to_chat(src, "You have already sampled the DNA of this creature before, you can learn nothing new. Move onto something else.")
+ if(newDNA in sampled_DNA)
+ to_chat(src, span("danger", "You have already sampled the DNA of this creature before, you can learn nothing new. Move onto something else."))
return
-
else
sampled_DNA.Add(newDNA)
@@ -264,31 +252,31 @@
//2 = We learned something!
//Now we sample their languages!
- for (var/datum/language/L in donor.languages)
+ for(var/datum/language/L in D.languages)
learned = max(learned, 1)
if (!(L in languages) && !(L in diona_banned_languages))
//We don't know this language, and we can learn it!
var/current_progress = language_progress[L.name]
current_progress += 1
language_progress[L.name] = current_progress
- to_chat(src, "You come a little closer to learning [L.name]!")
+ to_chat(src, span("notice", "You come a little closer to learning [L.name]!"))
learned = 2
- if (!learned)
- to_chat(src, "This creature doesn't know any languages at all!")
+ if(!learned)
+ to_chat(src, span("danger", "This creature doesn't know any languages at all!"))
else if (learned == 1)
- to_chat(src, "We have nothing more to learn from this creature. Perhaps try a different species?")
+ to_chat(src, span("danger", "We have nothing more to learn from this creature. Perhaps try a different sample?"))
update_languages()
else
- to_chat(src, span("warning", "Something went wrong while trying to sample [donor], both you and the target must remain still."))
+ to_chat(src, span("warning", "Something went wrong while trying to sample [D], both you and the target must remain still."))
//Checks progress on learned languages
/mob/living/carbon/alien/diona/proc/update_languages()
- for (var/i in language_progress)
- if (language_progress[i] >= LANGUAGE_POINTS_TO_LEARN)
+ for(var/i in language_progress)
+ if(language_progress[i] >= LANGUAGE_POINTS_TO_LEARN)
add_language(i)
- to_chat(src, "You have mastered the [i] language!")
+ to_chat(src, span("notice", "You have mastered the [i] language!"))
language_progress.Remove(i)
/mob/living/carbon/alien/diona/proc/transferMind(var/atom/A)
@@ -299,11 +287,11 @@
for(var/mob/living/carbon/alien/diona/D in view(7))
if(D.master_nymph == src && mind && !client) //if the nymph is subservient to you
mind.transfer_to(D)
- D.stunned = 0//Switching mind seems to temporarily stun mobs
+ D.stunned = 0 //Switching mind seems to temporarily stun mobs
for(var/mob/living/carbon/alien/diona/DIO in src.birds_of_feather) //its me!
DIO.master_nymph = D
break
- return 1
+ return TRUE
..()
/mob/living/carbon/proc/echo_eject()
@@ -311,33 +299,27 @@
set name = "Eject Echo"
set desc = "Eject any nymphatic husks."
- if(stat == DEAD || paralysis || weakened || stunned || restrained())
- return
+ if(use_check_and_message(usr))
+ return FALSE
- var/energy
-
- var/r = alert(src,"Do you choose to eject echoes as nymphs or energy?", "Identify Waste", "Energy", "Nymphs")
- if (r == "Nymphs")
- energy = 0
- else if (r == "Energy")
- energy = 1
- else
- return
+ var/energy = FALSE
+ var/r = alert(src, "Do you choose to eject echoes as nymphs or energy?", "Identify Waste", "Energy", "Nymphs")
+ if(r == "Energy")
+ energy = TRUE
for(var/mob/living/carbon/alien/diona/D in src)
if(D.mind && D.echo)
if(energy)
var/mob/living/simple_animal/shade/bluespace/BS = new /mob/living/simple_animal/shade/bluespace(get_turf(D))
- to_chat(D, "You feel your nymphatic husk split as you are released again as pure energy!")
+ to_chat(D, span("danger", "You feel your nymphatic husk split as you are released again as pure energy!"))
D.mind.transfer_to(BS)
to_chat(BS, "You are now a bluespace echo - consciousness imprinted upon wavelengths of bluespace energy. You currently retain no memories of your previous life, but do express a strong desire to return to corporeality. You will die soon, fading away forever. Good luck!")
qdel(D)
-
else
to_chat(src, span("warning", "You feel a pang of loss as [src] splits away from your biomass."))
- to_chat(D, "You wiggle out of the depths of [src.loc]'s biomass and plop to the ground.")
+ to_chat(D, span("notice", "You wiggle out of the depths of [src.loc]'s biomass and plop to the ground."))
- if (D.gestalt.is_diona() == DIONA_NYMPH)
+ if(D.gestalt.is_diona() == DIONA_NYMPH)
D.gestalt.adjustNutritionLoss(NYMPH_ABSORB_NUTRITION)
D.split_languages(D.gestalt)
@@ -355,9 +337,82 @@
if(stat == DEAD)
return
- if(!consume_nutrition_from_air && (nutrition / max_nutrition > 0.25) )
+ if(!consume_nutrition_from_air && (nutrition / max_nutrition > 0.25))
to_chat(src, span("warning", "You still have plenty of nutrition left. Consuming air is the last resort."))
return
consume_nutrition_from_air = !consume_nutrition_from_air
- to_chat(src, span("notice", "You [consume_nutrition_from_air ? "started" : "stopped"] consuming air for nutrition."))
\ No newline at end of file
+ to_chat(src, span("notice", "You [consume_nutrition_from_air ? "started" : "stopped"] consuming air for nutrition."))
+
+/mob/living/carbon/human/proc/create_structure()
+ set category = "Abilities"
+ set name = "Create Structure"
+ set desc = "Expend nymphs or biomass to create structures."
+
+ if(!is_diona(src))
+ to_chat(src, span("danger", "You are not a Diona! You should not have this ability."))
+ log_debug("Non-Diona [name] had Create Structure ability.")
+ return
+
+ if(use_check_and_message(src))
+ return
+
+ var/can_use_biomass
+ if(nutrition >= max_nutrition * 0.25)
+ can_use_biomass = TRUE
+
+ var/can_use_limbs = TRUE
+ var/list/viable_limbs = list(BP_L_ARM, BP_R_ARM)
+ for(var/limb in viable_limbs)
+ var/obj/item/organ/external/O = organs_by_name[limb]
+ if(!O)
+ can_use_limbs = FALSE
+ break
+
+ var/build_method // What are we using to build this thing?
+ if(can_use_biomass)
+ to_chat(src, span("notice", "We will expend biomass to create this structure."))
+ build_method = "biomass"
+ else if(can_use_limbs)
+ to_chat(src, span("notice", "We will detach our arm nymphs and have them form the structure."))
+ build_method = "nymphs"
+ else
+ to_chat(src, span("notice", "We do not have the nymphs nor the biomass to do this!"))
+ return
+
+ var/list/diona_structures = list(
+ "Wall" = /turf/simulated/wall/diona,
+ "Floor" = /turf/simulated/floor/diona,
+ "Glow Bulb" = /obj/structure/diona/bulb/unpowered,
+ "Cancel" = null
+ )
+
+ var/chosen_structure
+ chosen_structure = input("Choose a structure to grow.") in diona_structures
+ if(!chosen_structure || chosen_structure == "Cancel")
+ to_chat(src, span("warning", "We have elected to not grow anything right now."))
+ return
+
+ if(use_check_and_message(src))
+ return
+
+ if(chosen_structure)
+ to_chat(src, span("notice", "We are now creating a [lowertext(chosen_structure)] using our [build_method]..."))
+
+ if(do_after(src, 50))
+ if(build_method == "biomass") // checking again, a lot can change in a short amount of time - geeves
+ if(nutrition >= max_nutrition * 0.25)
+ nutrition -= max_nutrition * 0.25
+ else
+ to_chat(src, span("warning", "We do not have enough biomass!"))
+ return
+ else if(build_method == "nymphs")
+ for(var/limb in viable_limbs)
+ var/obj/item/organ/external/O = organs_by_name[limb]
+ if(!O)
+ to_chat(src, span("warning", "We lost our arm while constructing!"))
+ return
+ O.droplimb(TRUE, DROPLIMB_EDGE)
+ qdel(O)
+ var/structure_path = diona_structures[chosen_structure]
+ new structure_path(get_turf(src))
diff --git a/code/modules/mob/living/carbon/alien/diona/life.dm b/code/modules/mob/living/carbon/alien/diona/life.dm
index 11cc0050a4e..5ba9787efb6 100644
--- a/code/modules/mob/living/carbon/alien/diona/life.dm
+++ b/code/modules/mob/living/carbon/alien/diona/life.dm
@@ -1,10 +1,10 @@
//Dionaea regenerate health and nutrition in light.
/mob/living/carbon/alien/diona/handle_environment(datum/gas_mixture/environment)
- if (environment && consume_nutrition_from_air)
+ if(environment && consume_nutrition_from_air)
environment.remove(diona_handle_air(get_dionastats(), pressure))
- if (stat != DEAD)
+ if(stat != DEAD)
diona_handle_light(DS)
/mob/living/carbon/alien/diona/handle_chemicals_in_body()
@@ -16,7 +16,7 @@
if(breathing) breathing.metabolize()
// nutrition decrease
- if (nutrition > 0 && stat != 2)
+ if(nutrition > 0 && stat != DEAD)
adjustNutritionLoss(nutrition_loss)
//handle_trace_chems() implement this later maybe
@@ -29,18 +29,18 @@
/mob/living/carbon/alien/diona/Life()
- if (!detached && gestalt && (gestalt.life_tick % 5 == 0)) // Minimal processing while in stasis
+ if(!detached && gestalt && (gestalt.life_tick % 5 == 0)) // Minimal processing while in stasis
updatehealth()
check_status_as_organ()
- else if (!gestalt || detached)
+ else if(!gestalt || detached)
..()
/mob/living/carbon/alien/diona/think()
..()
- if (!gestalt)
+ if(!gestalt)
if(stat != DEAD)
if(master_nymph && !client && master_nymph != src)
- walk_to(src,master_nymph, 1, movement_delay())
+ walk_to(src, master_nymph, 1, movement_delay())
else
- walk_to(src,0)
+ walk_to(src, 0)
diff --git a/code/modules/mob/living/carbon/alien/diona/progression.dm b/code/modules/mob/living/carbon/alien/diona/progression.dm
index 8ab518c28e4..e58ab4db0bd 100644
--- a/code/modules/mob/living/carbon/alien/diona/progression.dm
+++ b/code/modules/mob/living/carbon/alien/diona/progression.dm
@@ -1,12 +1,7 @@
/mob/living/carbon/alien/diona/confirm_evolution()
-
- //Whitelist requirement for evolution experimentally removed
- if(!is_alien_whitelisted(src, "Diona") && config.usealienwhitelist)
- to_chat(src, "You are currently not whitelisted to play as a full diona.")
- return null
-
- var/response = alert(src, "A worker gestalt is a large, slow, and durable humanoid form. You will lose the ability to ventcrawl and devour animals, but you will gain hand-like tendrils and the ability to wear things.You have enough biomass, are you certain you're ready to form a new gestalt?","Confirm Gestalt","Growth!","Patience...")
- if(response != "Growth!") return //Hit the wrong key...again.
+ var/response = alert(src, "A worker gestalt is a large, slow, and durable humanoid form. You will lose the ability to ventcrawl and devour animals, but you will gain hand-like tendrils and the ability to wear things. You have enough biomass, are you certain you're ready to form a new gestalt?", "Confirm Gestalt", "Growth!", "Patience...")
+ if(response != "Growth!")
+ return
if(istype(loc,/obj/item/holder/diona))
var/obj/item/holder/diona/L = loc
@@ -25,46 +20,46 @@
var/limbs_can_grow = round((nutrition / evolve_nutrition) * 6,1)
if(limbs_can_grow <= 3) //Head, Trunk, Fork
- to_chat(src, "You do not have enough biomass to grow yet. Currently you can only grow [limbs_can_grow]/6 limbs. ([nutrition]/[evolve_nutrition] biomass).")
+ to_chat(src, span("warning", "You do not have enough biomass to grow yet. Currently you can only grow [limbs_can_grow]/6 limbs. ([nutrition]/[evolve_nutrition] biomass)."))
return
if(gestalt)
- to_chat(src, "You are already part of a collective, if you wish to form your own, you must split off first.")
+ to_chat(src, span("warning", "You are already part of a collective, if you wish to form your own, you must split off first."))
return
- if (!istype(loc, /turf))
- to_chat(src, "There's not enough space to grow here. Stand on the floor!.")
+ if(!isturf(loc))
+ to_chat(src, span("warning", "There's not enough space to grow here. Stand on the floor!"))
return
// confirm_evolution() handles choices and other specific requirements.
var/new_species = confirm_evolution()
- if(!new_species || !adult_form )
+ if(!new_species || !adult_form)
return
- stunned = 10//No more moving or talking for now
- //muted = 10
+ stunned = 10 // No more moving or talking for now
playsound(src.loc, 'sound/species/diona/gestalt_grow.ogg', 100, 1)
- src.visible_message(" [src] begins to shift and quiver.",
- " You begin to shift and quiver, feeling your awareness splinter.")
+ visible_message(span("warning", "[src] begins to shift and quiver."),
+ span("warning", "You begin to shift and quiver, feeling your awareness splinter."))
sleep(52)
- src.visible_message(" [src] erupts in a shower of shed bark as it splits into a tangle of new dionaea.",
- " All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of new dionaea. We have attained a new form.")
+ visible_message(span("warning", "[src] erupts in a shower of shed bark as it splits into a tangle of new gestalt."),
+ span("warning", "All at once, we consume our stored nutrients to surge with growth, splitting into a tangle of new gestalt. We have attained a new form."))
var/mob/living/carbon/human/adult = new adult_form(get_turf(src))
adult.set_species(new_species)
show_evolution_blurb()
if(mind)
- mind.original = src//This tracks which nymph 'is' the gestalt
+ mind.original = src //This tracks which nymph 'is' the gestalt
mind.transfer_to(adult)
else
- adult.key = src.key
+ adult.key = key
- for (var/obj/item/W in src.contents)
- src.drop_from_inventory(W)
+ for (var/obj/item/W in contents)
+ drop_from_inventory(W)
+ // Remove the adult's languages, then add the babby nymph's languages - geeves
//So that the nymph doesn't get basic for free when evolving.
- if (adult.languages)
+ if(adult.languages)
adult.languages.Cut()
for(var/datum/language/L in languages)
@@ -82,18 +77,16 @@
src.nutrition = 0
src.forceMove(adult)
src.stat = CONSCIOUS
- src.gestalt = adult
+ gestalt = adult
//What do you call a person with no arms or no legs?
- var/list/organ_removal_priorities = list(BP_L_ARM,BP_R_ARM,BP_L_LEG,BP_R_LEG)
+ var/list/organ_removal_priorities = list(BP_L_ARM, BP_R_ARM, BP_L_LEG, BP_R_LEG)
var/limbs_to_remove = (6 - limbs_can_grow)
for(var/organ_name in organ_removal_priorities)
if(limbs_to_remove <= 0)
break
var/obj/item/organ/external/O = adult.organs_by_name[organ_name]
- to_chat(src, "You didn't have enough biomass to grow your [O.name]!")
- //adult.organs -= O
- O.droplimb(1,DROPLIMB_EDGE)
+ to_chat(src, span("warning", "You didn't have enough biomass to grow your [O.name]!"))
+ O.droplimb(1, DROPLIMB_EDGE)
qdel(O)
- limbs_to_remove -= 1
- //Matt
+ limbs_to_remove -= 1
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/alien/diona/update_icons.dm b/code/modules/mob/living/carbon/alien/diona/update_icons.dm
index 73281937eb7..b20542886f2 100644
--- a/code/modules/mob/living/carbon/alien/diona/update_icons.dm
+++ b/code/modules/mob/living/carbon/alien/diona/update_icons.dm
@@ -1,5 +1,4 @@
/mob/living/carbon/alien/diona/update_icons()
-
if(stat == DEAD)
icon_state = "[initial(icon_state)]_dead"
else if(lying || resting || stunned)
@@ -17,4 +16,4 @@
add_overlay(flower_image)
if(hat)
- add_overlay(get_hat_icon(hat, 0, -8))
+ add_overlay(get_hat_icon(hat, 0, -8))
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm
index 2c8edcd89cf..cb9a0ea93da 100644
--- a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm
+++ b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm
@@ -11,13 +11,15 @@
deform = 'icons/mob/human_races/diona/r_def_plant.dmi'
preview_icon = 'icons/mob/human_races/diona/diona_preview.dmi'
language = LANGUAGE_ROOTSONG
+ secondary_langs = list(LANGUAGE_AZAZIBA)
unarmed_types = list(
/datum/unarmed_attack/stomp,
/datum/unarmed_attack/kick,
/datum/unarmed_attack/diona
)
inherent_verbs = list(
- /mob/living/carbon/human/proc/consume_nutrition_from_air
+ /mob/living/carbon/human/proc/consume_nutrition_from_air,
+ /mob/living/carbon/human/proc/create_structure
)
//primitive_form = "Nymph"
slowdown = 7
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 4b6ce377b6a..60dbe596dd0 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -30,16 +30,13 @@
//Parent gun type. Guns are weapons that can be aimed at mobs and act over a distance
/obj/item/gun
name = "gun"
- desc = "Its a gun. It's pretty terrible, though."
- icon = 'icons/obj/gun.dmi'
- var/gun_gui_icons = 'icons/obj/gun_gui.dmi'
- item_icons = list(//DEPRECATED. USE CONTAINED SPRITES IN FUTURE
- slot_l_hand_str = 'icons/mob/items/lefthand_guns.dmi',
- slot_r_hand_str = 'icons/mob/items/righthand_guns.dmi'
- )
- icon_state = "detective"
- item_state = "gun"
- flags = CONDUCT
+ desc = "It's a gun. It's pretty terrible, though."
+ icon = 'icons/obj/guns/pistol.dmi'
+ var/gun_gui_icons = 'icons/obj/guns/gun_gui.dmi'
+ icon_state = "pistol"
+ item_state = "pistol"
+ contained_sprite = TRUE
+ flags = CONDUCT
slot_flags = SLOT_BELT|SLOT_HOLSTER
matter = list(DEFAULT_WALL_MATERIAL = 2000)
w_class = 3
@@ -121,7 +118,7 @@
underlays.Cut()
if(bayonet)
var/image/I
- I = image(icon, "bayonet")
+ I = image(icon = 'icons/obj/guns/bayonet.dmi', "bayonet")
I.pixel_x = knife_x_offset
I.pixel_y = knife_y_offset
underlays += I
diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm
index d8f92f29d9e..d8860961a82 100644
--- a/code/modules/projectiles/guns/alien.dm
+++ b/code/modules/projectiles/guns/alien.dm
@@ -10,7 +10,7 @@
var/spikes = 3
release_force = 30
slot_flags = SLOT_BELT|SLOT_BACK
- icon = 'icons/obj/gun.dmi'
+ icon = 'icons/obj/guns/spikethrower.dmi'
icon_state = "spikethrower3"
item_state = "spikethrower"
fire_sound_text = "a strange noise"
@@ -67,7 +67,7 @@
name = "alien heavy cannon"
desc = "It's some kind of enormous alien weapon, as long as a man is tall."
- icon = 'icons/obj/gun.dmi' //Actual on-sprite is handled by icon_override.
+ icon = 'icons/obj/guns/noisecannon.dmi'
icon_state = "noisecannon"
item_state = "noisecannon"
recoil = 1
diff --git a/code/modules/projectiles/guns/bang.dm b/code/modules/projectiles/guns/bang.dm
index a5b5b283517..2951a2d8794 100644
--- a/code/modules/projectiles/guns/bang.dm
+++ b/code/modules/projectiles/guns/bang.dm
@@ -1,6 +1,7 @@
/obj/item/gun/bang
name = "some shitty-ass gun"
desc = "This is a gun. Neat!"
+ icon = 'icons/obj/guns/revolver.dmi'
icon_state = "revolver"
item_state = "revolver"
fire_sound = 'sound/misc/sadtrombone.ogg'
diff --git a/code/modules/projectiles/guns/bang/pistol.dm b/code/modules/projectiles/guns/bang/pistol.dm
index 3d6e57b0020..176d8048e89 100644
--- a/code/modules/projectiles/guns/bang/pistol.dm
+++ b/code/modules/projectiles/guns/bang/pistol.dm
@@ -1,7 +1,9 @@
/obj/item/gun/bang/colt
name = "vintage .45 pistol"
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
+ icon = 'icons/obj/guns/colt.dmi'
icon_state = "colt"
+ item_state = "colt"
pixel_offset_x = 30
pixel_offset_y = 18
@@ -9,7 +11,9 @@
name = ".45 pistol"
desc = "A NanoTrasen designed sidearm, found among law enforcement and security forces. Uses .45 rounds."
description_fluff = "The NT Mk58 is a ballistic sidearm developed and produced by Nanotrasen. Bulky and heavy, the Mk58 is nonetheless used by security forces and law enforcement for its ease of use, low maintenance requirement, longevity, reliability - and most of all, extremely inexpensive price tag. A trademark of Nanotrasen security forces. It uses .45 rounds."
- icon_state = "secguncomp"
+ icon = 'icons/obj/guns/secgun.dmi'
+ icon_state = "secgun"
+ item_state = "secgun"
pixel_offset_x = 28
pixel_offset_y = 14
@@ -20,51 +24,60 @@
desc = "A NanoTrasen designed sidearm, found among law enforcement and security forces. It has a wooden grip. Uses .45 rounds."
description_fluff = "The NT Mk58 is a ballistic sidearm developed and produced by Nanotrasen. Bulky and heavy, the Mk58 is nonetheless used by security forces and law enforcement for its ease of use, low maintenance requirement, longevity, reliability - and most of all, extremely inexpensive price tag. A trademark of Nanotrasen security forces. This one has a wooden grip. It uses .45 rounds."
name = "custom .45 Pistol"
- icon_state = "secgundark"
+ icon = 'icons/obj/guns/secgun_wood.dmi'
+ icon_state = "secgunwood"
+ item_state = "secgunwood"
/obj/item/gun/bang/x9
name = "automatic .45 pistol"
desc = "The x9 tactical pistol is a lightweight fast firing handgun. Uses .45 rounds."
+ icon = 'icons/obj/guns/x9.dmi'
icon_state = "x9tactical"
+ item_state = "x9"
pixel_offset_x = 28
pixel_offset_y = 13
/obj/item/gun/bang/tanto
desc = "A Necropolis Industries Tanto .40, designed to compete with the NT Mk58. Uses 10mm rounds."
name = "10mm pistol"
+ icon = 'icons/obj/guns/c05r.dmi'
icon_state = "c05r"
+ item_state = "c05r"
pixel_offset_x = 31
pixel_offset_y = 14
/obj/item/gun/bang/silenced
name = "silenced pistol"
- desc = "A small, quiet, easily concealable gun. Uses .45 rounds."
+ desc = "A small, quiet, easily concealable gun. Uses .45 rounds."
+ icon = 'icons/obj/guns/silenced_pistol.dmi'
icon_state = "silenced_pistol"
+ item_state = "silenced_pistol"
pixel_offset_x = -4
pixel_offset_y = 15
obj/item/gun/bang/deagle
name = ".50 magnum pistol"
desc = "A robust handgun that uses .50 AE ammo."
+ icon = 'icons/obj/guns/deagle.dmi'
icon_state = "deagle"
+ item_state = "deagle"
pixel_offset_x = -4
pixel_offset_y = 16
/obj/item/gun/bang/pistol
name = "9mm pistol"
desc = "500 years since its creation and the Stechkin automatic pistol is still a common sight throughout the Frontier."
+ icon = 'icons/obj/guns/pistol.dmi'
icon_state = "pistol"
- item_state = null
+ item_state = "pistol"
pixel_offset_x = 26
pixel_offset_y = 14
/obj/item/gun/bang/pirate
name = "zip gun"
desc = "Little more than a barrel, handle, and firing mechanism, cheap makeshift firearms like this one are not uncommon in frontier systems."
+ icon = 'icons/obj/guns/zipgun.dmi'
icon_state = "zipgun"
- item_state = "sawnshotgun"
+ item_state = "zipgun"
pixel_offset_x = 0
- pixel_offset_y = 12
-
-
-
+ pixel_offset_y = 12
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/bang/revolver.dm b/code/modules/projectiles/guns/bang/revolver.dm
index 01715e3d0bd..be878365dc3 100644
--- a/code/modules/projectiles/guns/bang/revolver.dm
+++ b/code/modules/projectiles/guns/bang/revolver.dm
@@ -1,3 +1,3 @@
/obj/item/gun/bang/revolver
name = "revolver"
- desc = "The classic Necropolis Industries .357 revolver, for when you only want to shoot once."
+ desc = "The classic Necropolis Industries .357 revolver, for when you only want to shoot once."
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index be3ba1f2c8f..6e5e1061bfc 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -1,11 +1,15 @@
/obj/item/gun/energy
name = "energy gun"
desc = "A basic energy-based gun."
- icon_state = "energy"
+ icon = 'icons/obj/guns/ecarbine.dmi'
+ icon_state = "energykill100"
+ item_state = "energykill100"
fire_sound = 'sound/weapons/Taser.ogg'
fire_sound_text = "laser blast"
update_icon_on_init = TRUE
+ var/has_item_ratio = TRUE // Does this gun use the ratio system to paint its item_states?
+
var/obj/item/cell/power_supply //What type of power cell this uses
var/charge_cost = 200 //How much energy is needed to fire.
var/max_shots = 10 //Determines the capacity of the weapon's power cell. Specifying a cell_type overrides this value.
@@ -67,10 +71,14 @@
addtimer(CALLBACK(src, .proc/try_recharge), recharge_time * 2 SECONDS, TIMER_UNIQUE)
/obj/item/gun/energy/consume_next_projectile()
- if(!power_supply) return null
- if(!ispath(projectile_type)) return null
- if(!power_supply.checked_use(charge_cost)) return null
- if (self_recharge) addtimer(CALLBACK(src, .proc/try_recharge), recharge_time * 2 SECONDS, TIMER_UNIQUE)
+ if(!power_supply)
+ return null
+ if(!ispath(projectile_type))
+ return null
+ if(!power_supply.checked_use(charge_cost))
+ return null
+ if(self_recharge)
+ addtimer(CALLBACK(src, .proc/try_recharge), recharge_time * 2 SECONDS, TIMER_UNIQUE)
return new projectile_type(src)
/obj/item/gun/energy/proc/get_external_power_supply()
@@ -102,6 +110,7 @@
..()
if(charge_meter && power_supply && power_supply.maxcharge)
var/ratio = power_supply.charge / power_supply.maxcharge
+ var/item_state_ratio = ""
//make sure that rounding down will not give us the empty state even if we have charge for a shot left.
if(power_supply.charge < charge_cost)
@@ -109,8 +118,13 @@
else
ratio = max(round(ratio, 0.25) * 100, 25)
+ if(has_item_ratio)
+ item_state_ratio = ratio
+
if(modifystate)
icon_state = "[modifystate][ratio]"
+ item_state = "[modifystate][item_state_ratio]"
else
icon_state = "[initial(icon_state)][ratio]"
- update_held_icon()
+ item_state = "[initial(item_state)][item_state_ratio]"
+ update_held_icon()
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/blaster.dm b/code/modules/projectiles/guns/energy/blaster.dm
index 812445c67f2..692491fa622 100644
--- a/code/modules/projectiles/guns/energy/blaster.dm
+++ b/code/modules/projectiles/guns/energy/blaster.dm
@@ -1,8 +1,10 @@
/obj/item/gun/energy/blaster
name = "blaster pistol"
desc = "A tiny energy pistol converted to fire off energy bolts rather than lasers beams."
+ icon = 'icons/obj/guns/blaster_pistol.dmi'
icon_state = "blaster_pistol"
item_state = "blaster_pistol"
+ has_item_ratio = FALSE
fire_sound = 'sound/weapons/Laser.ogg'
slot_flags = SLOT_BELT|SLOT_HOLSTER
w_class = 2
@@ -37,7 +39,9 @@
/obj/item/gun/energy/blaster/revolver
name = "blaster revolver"
desc = "A robust eight-shot blaster.."
+ icon = 'icons/obj/guns/blaster_revolver.dmi'
icon_state = "blaster_revolver"
+ item_state = "blaster_revolver"
fire_sound = 'sound/weapons/laserstrong.ogg'
projectile_type = /obj/item/projectile/energy/blaster
max_shots = 8
@@ -63,6 +67,7 @@
/obj/item/gun/energy/blaster/carbine
name = "blaster carbine"
desc = "A short-barreled blaster carbine meant for easy handling and comfort when in combat."
+ icon = 'icons/obj/guns/blaster_carbine.dmi'
icon_state = "blaster_carbine"
item_state = "blaster_carbine"
max_shots = 12
@@ -74,6 +79,7 @@
/obj/item/gun/energy/blaster/rifle
name = "bolt slinger"
desc = "A blaster rifle which seems to work by accelerating particles and flinging them out in destructive bolts."
+ icon = 'icons/obj/guns/blaster_rifle.dmi'
icon_state = "blaster_rifle"
item_state = "blaster_rifle"
max_shots = 20
@@ -109,4 +115,4 @@
if(wielded)
toggle_scope(2.0, usr)
else
- to_chat(usr, "You can't look through the scope without stabilizing the rifle!")
+ to_chat(usr, "You can't look through the scope without stabilizing the rifle!")
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/crank.dm b/code/modules/projectiles/guns/energy/crank.dm
index 2e99f215965..007aaed9450 100644
--- a/code/modules/projectiles/guns/energy/crank.dm
+++ b/code/modules/projectiles/guns/energy/crank.dm
@@ -1,6 +1,7 @@
/obj/item/gun/energy/rifle/icelance
name = "icelance rifle"
desc = "A Tajaran made rifle, it houses a crank-chargable internal battery. It only holds three shots and each shot must be cranked manually."
+ icon = 'icons/obj/guns/icelance.dmi'
icon_state = "icelance"
item_state = "icelance"
fire_sound = 'sound/weapons/Laser.ogg'
@@ -56,4 +57,4 @@
item_state = "icelance-wielded"
else
item_state = initial(item_state)
- update_held_icon()
+ update_held_icon()
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index c2800229efd..15e7648741f 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -1,8 +1,10 @@
/obj/item/gun/energy/laser
name = "laser carbine"
desc = "An Hephaestus Industries G40E carbine, designed to kill with concentrated energy blasts."
+ icon = 'icons/obj/guns/laserrifle.dmi'
icon_state = "laserrifle"
item_state = "laserrifle"
+ has_item_ratio = FALSE // the back and suit slots have ratio sprites but the in-hands dont
fire_sound = 'sound/weapons/Laser.ogg'
slot_flags = SLOT_BELT|SLOT_BACK
accuracy = 1
@@ -32,8 +34,10 @@
obj/item/gun/energy/retro
name = "retro laser"
+ icon = 'icons/obj/guns/retro.dmi'
icon_state = "retro"
item_state = "retro"
+ has_item_ratio = FALSE
desc = "An older model of the basic lasergun. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws."
fire_sound = 'sound/weapons/Laser.ogg'
slot_flags = SLOT_BELT
@@ -46,8 +50,10 @@ obj/item/gun/energy/retro
/obj/item/gun/energy/captain
name = "antique laser gun"
+ icon = 'icons/obj/guns/caplaser.dmi'
icon_state = "caplaser"
item_state = "caplaser"
+ has_item_ratio = FALSE
desc = "This is an antique laser gun. All craftsmanship is of the highest quality. The object menaces with spikes of energy."
force = 5
fire_sound = 'sound/weapons/Laser.ogg'
@@ -65,8 +71,9 @@ obj/item/gun/energy/retro
name = "laser cannon"
desc = "A nanotrasen designed laser cannon capable of acting as a powerful support weapon."
description_fluff = "The NT LC-4 is a laser cannon developed and produced by Nanotrasen. Produced and sold to organizations both in need of a highly powerful support weapon and can afford its high unit cost. In spite of the low capacity, it is a highly capable tool, cutting down fortifications and armored targets with ease."
+ icon = 'icons/obj/guns/lasercannon.dmi'
icon_state = "lasercannon"
- item_state = null
+ item_state = "lasercannon"
fire_sound = 'sound/weapons/lasercannonfire.ogg'
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
slot_flags = SLOT_BELT|SLOT_BACK
@@ -93,8 +100,10 @@ obj/item/gun/energy/retro
name = "xray laser gun"
desc = "A Nanotrasen designed high-power laser sidearm capable of expelling concentrated xray blasts."
description_fluff = "The NT XG-1 is a laser sidearm developed and produced by Nanotrasen. A recent invention, used for specialist operations, it is presently being produced and sold in limited capacity over the galaxy. Designed for precision strikes, releasing concentrated xray blasts that are capable of hitting targets behind cover. It is compact with relatively high capacity to other sidearms."
+ icon = 'icons/obj/guns/xray.dmi'
icon_state = "xray"
item_state = "xray"
+ has_item_ratio = FALSE
fire_sound = 'sound/weapons/laser3.ogg'
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
projectile_type = /obj/item/projectile/beam/xray
@@ -116,8 +125,10 @@ obj/item/gun/energy/retro
/obj/item/gun/energy/sniperrifle
name = "marksman energy rifle"
desc = "The HI L.W.A.P. 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."
+ icon = 'icons/obj/guns/sniper.dmi'
icon_state = "sniper"
- item_state = "psniper"
+ item_state = "sniper"
+ has_item_ratio = FALSE // same as the laserrifle
fire_sound = 'sound/weapons/marauder.ogg'
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4)
projectile_type = /obj/item/projectile/beam/sniper
@@ -152,7 +163,8 @@ obj/item/gun/energy/retro
name = "quad-beam laser"
desc = "A Nanotrasen designed laser weapon, designed to split a single beam four times."
description_fluff = "The NT QB-2 is a laser weapon developed and produced by Nanotrasen. Designed to fill in the niche that ballistic shotguns do, but in the form of laser weaponry. It is equipped with a special crystal lens that splits a single laser beam into four."
- icon_state = "oldenergykill"
+ icon = 'icons/obj/guns/ecarbine.dmi' // using this as placeholder until proper sprites are made
+ icon_state = "energykill"
item_state = "energykill"
fire_sound = 'sound/weapons/Laser.ogg'
slot_flags = SLOT_BELT|SLOT_BACK
@@ -178,6 +190,7 @@ obj/item/gun/energy/retro
/obj/item/gun/energy/lasertag
name = "laser tag gun"
item_state = "laser"
+ has_item_ratio = FALSE
desc = "Standard issue weapon of the Imperial Guard"
origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2)
self_recharge = 1
@@ -194,6 +207,7 @@ obj/item/gun/energy/retro
return ..()
/obj/item/gun/energy/lasertag/blue
+ icon = 'icons/obj/guns/bluetag.dmi'
icon_state = "bluetag"
item_state = "bluetag"
projectile_type = /obj/item/projectile/beam/lastertag/blue
@@ -204,6 +218,7 @@ obj/item/gun/energy/retro
turret_sprite_set = "blue"
/obj/item/gun/energy/lasertag/red
+ icon = 'icons/obj/guns/redtag.dmi'
icon_state = "redtag"
item_state = "redtag"
projectile_type = /obj/item/projectile/beam/lastertag/red
@@ -211,4 +226,4 @@ obj/item/gun/energy/retro
pin = /obj/item/device/firing_pin/tag/red
can_turret = 1
turret_is_lethal = 0
- turret_sprite_set = "red"
+ turret_sprite_set = "red"
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/lawgiver.dm b/code/modules/projectiles/guns/energy/lawgiver.dm
index 3c9d626b3e2..db3085289d8 100644
--- a/code/modules/projectiles/guns/energy/lawgiver.dm
+++ b/code/modules/projectiles/guns/energy/lawgiver.dm
@@ -1,7 +1,9 @@
/obj/item/gun/energy/lawgiver
name = "\improper Lawgiver Mk II"
+ icon = 'icons/obj/guns/lawgiver.dmi'
icon_state = "lawgiver"
- item_state = "gun"
+ item_state = "lawgiver"
+ has_item_ratio = FALSE
origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 5)
sel_mode = 1
var/mode_check = 1
@@ -218,4 +220,4 @@
if(mode_check != sel_mode)
var/datum/firemode/new_mode = firemodes[sel_mode]
new_mode.apply_to(src)
- mode_check = sel_mode
+ mode_check = sel_mode
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/magic.dm b/code/modules/projectiles/guns/energy/magic.dm
index 87cdd89ecfc..54e7dcbcda2 100644
--- a/code/modules/projectiles/guns/energy/magic.dm
+++ b/code/modules/projectiles/guns/energy/magic.dm
@@ -3,12 +3,12 @@
/obj/item/gun/energy/staff
name = "staff of change"
desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself."
- icon = 'icons/obj/gun.dmi'
- item_icons = null
+ icon = 'icons/obj/guns/staffofchange.dmi'
icon_state = "staffofchange"
item_state = "staffofchange"
+ has_item_ratio = FALSE
fire_sound = 'sound/magic/Staff_Change.ogg'
- flags = CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
w_class = 4.0
max_shots = 1
@@ -102,7 +102,7 @@ obj/item/gun/energy/staff/animate/special_check(var/mob/living/user)
obj/item/gun/energy/staff/focus
name = "mental focus"
desc = "An artefact that channels the will of the user into destructive bolts of force. If you aren't careful with it, you might poke someone's brain out."
- icon = 'icons/obj/wizard.dmi'
+ icon = 'icons/obj/guns/mental_focus.dmi'
icon_state = "focus"
item_state = "focus"
fire_sound = 'sound/magic/wand.ogg'
@@ -149,9 +149,8 @@ obj/item/gun/energy/staff/focus/attack_self(mob/living/user as mob)
icon = 'icons/obj/wands.dmi'
icon_state = "staffofchaos"
item_state = "staffofchaos"
- contained_sprite = 1
fire_sound = 'sound/magic/Staff_Chaos.ogg'
- flags = CONDUCT
+ flags = CONDUCT
w_class = 4.0
max_shots = 5
projectile_type = /obj/item/projectile/magic
@@ -182,10 +181,9 @@ obj/item/gun/energy/staff/focus/attack_self(mob/living/user as mob)
name = "wand of nothing"
desc = "A magic stick, this one don't do much however."
icon = 'icons/obj/wands.dmi'
- item_icons = null
icon_state = "nothingwand"
item_state = "wand"
- contained_sprite = 1
+ has_item_ratio = FALSE
fire_sound = 'sound/magic/wand.ogg'
slot_flags = SLOT_BELT
w_class = 3
@@ -220,7 +218,6 @@ obj/item/gun/energy/staff/focus/attack_self(mob/living/user as mob)
name = "wand of fire"
desc = "A wand that can fire destructive flames."
icon = 'icons/obj/wands.dmi'
- contained_sprite = 1
icon_state = "firewand"
item_state = "firewand"
fire_sound = 'sound/magic/Fireball.ogg'
@@ -246,7 +243,6 @@ obj/item/gun/energy/staff/focus/attack_self(mob/living/user as mob)
name = "wand of polymorph"
desc = "A wand that will change the shape of the its victims."
icon = 'icons/obj/wands.dmi'
- contained_sprite = 1
icon_state = "polywand"
item_state = "polywand"
fire_sound = 'sound/magic/Staff_Change.ogg'
@@ -272,7 +268,6 @@ obj/item/gun/energy/staff/focus/attack_self(mob/living/user as mob)
name = "wand of teleportation"
desc = "This wand will send your targets away, or closer, to yourself."
icon = 'icons/obj/wands.dmi'
- contained_sprite = 1
icon_state = "telewand"
item_state = "telewand"
fire_sound = 'sound/magic/Wand_Teleport.ogg'
@@ -309,7 +304,6 @@ obj/item/gun/energy/staff/focus/attack_self(mob/living/user as mob)
name = "wand of force"
desc = "A more portable version of the mental focus, still deadly."
icon = 'icons/obj/wands.dmi'
- contained_sprite = 1
icon_state = "deathwand"
item_state = "deathwand"
max_shots = 10
@@ -335,7 +329,6 @@ obj/item/gun/energy/staff/focus/attack_self(mob/living/user as mob)
name = "wand of animation"
desc = "This wand will create a legion of murderous toilets, for your own leisure."
icon = 'icons/obj/wands.dmi'
- contained_sprite = 1
icon_state = "revivewand"
item_state = "revivewand"
max_shots = 10
diff --git a/code/modules/projectiles/guns/energy/mining.dm b/code/modules/projectiles/guns/energy/mining.dm
index 30b6348431b..a66a8c9e21d 100644
--- a/code/modules/projectiles/guns/energy/mining.dm
+++ b/code/modules/projectiles/guns/energy/mining.dm
@@ -3,7 +3,6 @@
/obj/item/gun/energy/plasmacutter
name = "plasma cutter"
desc = "A mining tool capable of expelling concentrated plasma bursts. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
- contained_sprite = 1
charge_meter = 0
icon = 'icons/obj/mining_contained.dmi'
icon_state = "plasma"
diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm
index fab4f148953..6f309a056c6 100644
--- a/code/modules/projectiles/guns/energy/nuclear.dm
+++ b/code/modules/projectiles/guns/energy/nuclear.dm
@@ -1,9 +1,10 @@
/obj/item/gun/energy/gun
name = "energy carbine"
desc = "A Nanotrasen designed energy-based carbine with two settings: Stun and kill."
- description_fluff = "The NT EC-4 is an energy carbine developed and produced by Nanotrasen. Compact, light and durable, used by security forces and law enforcement for its ability to fire stun or lethal beams, depending on selection. It is widely sold and distributed across the galaxy."
- icon_state = "energystun100"
- item_state = null // so the human update icon uses the icon_state instead.
+ description_fluff = "The NT EC-4 is an energy carbine developed and produced by Nanotrasen. Compact, light and durable, used by security forces and law enforcement for its ability to fire stun or lethal beams, depending on selection. It is widely sold and distributed across the galaxy."
+ icon = 'icons/obj/guns/ecarbine.dmi'
+ icon_state = "energystun"
+ item_state = "energystun"
fire_sound = 'sound/weapons/Taser.ogg'
slot_flags = SLOT_BELT
accuracy = 1
@@ -34,7 +35,9 @@
/obj/item/gun/energy/gun/nuclear
name = "advanced energy gun"
desc = "An energy gun with an experimental miniaturized reactor."
+ icon = 'icons/obj/guns/nucgun.dmi'
icon_state = "nucgun"
+ item_state = "nucgun"
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3)
slot_flags = SLOT_BELT
force = 8 //looks heavier than a pistol
@@ -106,11 +109,7 @@
add_overlay("nucgun-stun")
if("lethal")
add_overlay("nucgun-kill")
-/*
-/obj/item/gun/energy/gun/nuclear/emp_act(severity)
- ..()
- reliability -= round(15/severity)
-*/
+
/obj/item/gun/energy/gun/nuclear/update_icon()
cut_overlays()
update_charge()
@@ -121,8 +120,9 @@
name = "energy pistol"
desc = "A Nanotrasen energy-based pistol gun with two settings: Stun and kill."
description_fluff = "The NT EP-3 is an energy sidearm developed and produced by Nanotrasen. Compact, light and durable, used by security forces and law enforcement for its ability to fire stun or lethal beams, depending on selection. It is widely sold and distributed across the galaxy."
- icon_state = "epistolstun100"
- item_state = null //so the human update icon uses the icon_state instead.
+ icon = 'icons/obj/guns/epistol.dmi'
+ icon_state = "epistolstun"
+ item_state = "epistolstun"
fire_sound = 'sound/weapons/Taser.ogg'
slot_flags = SLOT_BELT|SLOT_HOLSTER
max_shots = 7
@@ -145,9 +145,11 @@
/obj/item/gun/energy/pistol/hegemony
name = "hegemony energy pistol"
- desc = "An upgraded variant of the standard energy pistol with two settings: Incapacitate and Smite"
+ desc = "An upgraded variant of the standard energy pistol with two settings: Incapacitate and Smite."
+ icon = 'icons/obj/guns/hegemony_pistol.dmi'
icon_state = "hegemony_pistol"
item_state = "hegemony_pistol"
+ has_item_ratio = FALSE
fire_sound = 'sound/weapons/Taser.ogg'
slot_flags = SLOT_BELT|SLOT_HOLSTER
max_shots = 10
diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm
index 38f1a42e306..9395513748e 100644
--- a/code/modules/projectiles/guns/energy/pulse.dm
+++ b/code/modules/projectiles/guns/energy/pulse.dm
@@ -1,6 +1,7 @@
/obj/item/gun/energy/pulse
name = "pulse carbine"
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/guns/pulse_carbine.dmi'
icon_state = "pulse_carbine"
item_state = "pulse_carbine"
slot_flags = SLOT_BELT
@@ -35,6 +36,7 @@
name = "pulse pistol"
desc = "A weapon that uses advanced pulse-based beam generation technology to emit powerful laser blasts. This one is a really compact model."
slot_flags = SLOT_BELT|SLOT_HOLSTER
+ icon = 'icons/obj/guns/pulse_pistol.dmi'
icon_state = "pulse_pistol"
item_state = "pulse_pistol"
- max_shots = 5
+ max_shots = 5
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/rifle.dm b/code/modules/projectiles/guns/energy/rifle.dm
index 78f551b04f3..d7f8800cbf7 100644
--- a/code/modules/projectiles/guns/energy/rifle.dm
+++ b/code/modules/projectiles/guns/energy/rifle.dm
@@ -1,9 +1,10 @@
/obj/item/gun/energy/rifle
name = "energy rifle"
- desc = "A Nanotrasen designed energy-based rifle with two settings: stun and kill."
+ desc = "A Nanotrasen designed energy-based rifle with two settings: Stun and Kill."
description_fluff = "The NT ER-2 is an energy rifle developed and produced by Nanotrasen. Widely produced and sold across the galaxy. Designed to both stun and kill with concentrated energy blasts of varying strengths based on the fire mode, focused through a crystal lens. Considered to be a dual-purpose rifle with prolonged combat capability."
- icon_state = "eriflestun100"
- item_state = "elaser" //placeholder for now
+ icon = 'icons/obj/guns/erifle.dmi'
+ icon_state = "eriflestun"
+ icon_state = "eriflestun"
fire_sound = 'sound/weapons/Taser.ogg'
slot_flags = SLOT_BACK
w_class = 4
@@ -38,9 +39,11 @@
/obj/item/gun/energy/rifle/laser
name = "laser rifle"
desc = "A Nanotrasen designed laser weapon, designed to kill with concentrated energy blasts."
- description_fluff = "The NT LR-6 is a laser rifle developed and produced by Nanotrasen. Designed to kill with concentrated energy blasts focused through a crystal lens. It is considered to be the template of other standard laser weaponry."
+ description_fluff = "The NT LR-6 is a laser rifle developed and produced by Nanotrasen. Designed to kill with concentrated energy blasts focused through a crystal lens. It is considered to be the template of other standard laser weaponry."
+ icon = 'icons/obj/guns/laserrifle.dmi'
icon_state = "laserrifle"
item_state = "laserrifle"
+ has_item_ratio = FALSE // the back and suit slots have ratio sprites but the in-hands dont
fire_sound = 'sound/weapons/Laser.ogg'
max_shots = 15
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
@@ -66,10 +69,11 @@
name = "laser cannon"
desc = "A nanotrasen designed laser cannon capable of acting as a powerful support weapon."
description_fluff = "The NT LC-4 is a laser cannon developed and produced by Nanotrasen. Produced and sold to organizations both in need of a highly powerful support weapon and can afford its high unit cost. In spite of the low capacity, it is a highly capable tool, cutting down fortifications and armored targets with ease."
+ icon = 'icons/obj/guns/lasercannon.dmi'
icon_state = "lasercannon"
item_state = "lasercannon"
+ has_item_ratio = TRUE
fire_sound = 'sound/weapons/lasercannonfire.ogg'
- origin_tech = "combat=4;materials=3;powerstorage=3"
projectile_type = /obj/item/projectile/beam/heavylaser
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
charge_cost = 400
@@ -89,6 +93,7 @@
name = "xray laser rifle"
desc = "A Nanotrasen designed high-power laser rifle capable of expelling concentrated xray blasts."
description_fluff = "The NT XR-1 is a laser firearm developed and produced by Nanotrasen. A recent innovation, used for specialist operations, it is presently being produced and sold in limited capacity over the galaxy. Designed for precision strikes, releasing concentrated xray blasts that are capable of hitting targets behind cover, all the while having a large ammo capacity."
+ icon = 'icons/obj/guns/xrifle.dmi'
icon_state = "xrifle"
item_state = "xrifle"
fire_sound = 'sound/weapons/laser3.ogg'
@@ -104,6 +109,7 @@
/obj/item/gun/energy/rifle/pulse
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/guns/pulse.dmi'
icon_state = "pulse"
item_state = "pulse"
fire_sound = 'sound/weapons/Laser.ogg'
@@ -127,8 +133,8 @@
/obj/item/gun/energy/rifle/pulse/destroyer
name = "pulse destroyer"
desc = "A heavy-duty, pulse-based energy weapon. Because of its complexity and cost, it is rarely seen in use except by specialists."
- fire_sound='sound/weapons/pulse.ogg'
- projectile_type=/obj/item/projectile/beam/pulse
+ fire_sound = 'sound/weapons/pulse.ogg'
+ projectile_type = /obj/item/projectile/beam/pulse
burst_delay = 5
burst = 3
max_shots = 30
@@ -141,10 +147,10 @@
/obj/item/gun/energy/rifle/laser/tachyon
name = "tachyon rifle"
desc = "A Vaurcan rifle that fires a beam of concentrated faster than light particles, capable of passing through most forms of matter."
- contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "tachyonrifle"
item_state = "tachyonrifle"
+ has_item_ratio = FALSE
fire_sound = 'sound/weapons/laser3.ogg'
projectile_type = /obj/item/projectile/beam/tachyon
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
@@ -163,4 +169,4 @@
if(wielded)
toggle_scope(2.0, usr)
else
- to_chat(usr, "You can't look through the scope without stabilizing the rifle!")
+ to_chat(usr, "You can't look through the scope without stabilizing the rifle!")
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 4e3538204df..c388c02d97a 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -1,6 +1,7 @@
/obj/item/gun/energy/rifle/ionrifle
name = "ion rifle"
- desc = "The NT Mk70 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. Has two settings: stun and kill"
+ desc = "The NT Mk70 EW Halicon is a man portable anti-armor weapon designed to disable mechanical threats, produced by NT. Has two settings: Stun and Lethal."
+ icon = 'icons/obj/guns/ionrifle.dmi'
icon_state = "ionriflestun100"
item_state = "ionriflestun100" // so the human update icon uses the icon_state instead.
modifystate = "ionriflestun"
@@ -10,11 +11,11 @@
w_class = 4
accuracy = 1
force = 10
- flags = CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
charge_cost = 300
max_shots = 10
- secondary_projectile_type = /obj/item/projectile/ion
+ secondary_projectile_type = /obj/item/projectile/ion
secondary_fire_sound = 'sound/weapons/Laser.ogg'
can_turret = 1
can_switch_modes = 1
@@ -56,8 +57,10 @@
/obj/item/gun/energy/decloner
name = "biological demolecularisor"
desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements."
+ icon = 'icons/obj/guns/decloner.dmi'
icon_state = "decloner"
item_state = "decloner"
+ has_item_ratio = FALSE
fire_sound = 'sound/weapons/pulse3.ogg'
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_POWER = 3)
max_shots = 10
@@ -66,8 +69,10 @@
/obj/item/gun/energy/floragun
name = "floral somatoray"
desc = "A tool that discharges controlled radiation which induces mutation in plant cells."
+ icon = 'icons/obj/guns/flora.dmi'
icon_state = "floramut100"
item_state = "floramut"
+ has_item_ratio = FALSE
fire_sound = 'sound/effects/stealthoff.ogg'
charge_cost = 100
max_shots = 10
@@ -94,8 +99,10 @@
/obj/item/gun/energy/meteorgun
name = "meteor gun"
desc = "For the love of god, make sure you're aiming this the right way!"
+ icon = 'icons/obj/guns/meteor_gun.dmi'
icon_state = "meteor_gun"
- item_state = "c20r"
+ item_state = "meteor_gun"
+ has_item_ratio = FALSE
slot_flags = SLOT_BELT|SLOT_BACK
w_class = 4
max_shots = 10
@@ -110,6 +117,7 @@
name = "meteor pen"
desc = "The pen is mightier than the sword."
icon = 'icons/obj/bureaucracy.dmi'
+ contained_sprite = FALSE
icon_state = "pen"
item_state = "pen"
w_class = 1
@@ -120,7 +128,10 @@
/obj/item/gun/energy/mindflayer
name = "mind flayer"
desc = "A custom-built weapon of some kind."
+ icon = 'icons/obj/guns/xray.dmi'
icon_state = "xray"
+ item_state = "xray"
+ has_item_ratio = FALSE
projectile_type = /obj/item/projectile/beam/mindflayer
fire_sound = 'sound/weapons/Laser.ogg'
can_turret = 1
@@ -129,7 +140,10 @@
/obj/item/gun/energy/toxgun
name = "phoron pistol"
desc = "A specialized firearm designed to fire lethal bolts of phoron."
+ icon = 'icons/obj/guns/toxgun.dmi'
icon_state = "toxgun"
+ item_state = "toxgun"
+ has_item_ratio = FALSE
fire_sound = 'sound/effects/stealthoff.ogg'
w_class = 3.0
origin_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4)
@@ -141,8 +155,10 @@
/obj/item/gun/energy/beegun
name = "\improper NanoTrasen Portable Apiary"
desc = "An experimental firearm that converts energy into bees, for purely botanical purposes."
+ icon = 'icons/obj/guns/gyrorifle.dmi'
icon_state = "gyrorifle"
- item_state = "arifle"
+ item_state = "gyrorifle"
+ has_item_ratio = FALSE
charge_meter = 0
w_class = 4
fire_sound = 'sound/effects/Buzz2.ogg'
@@ -160,7 +176,10 @@
/obj/item/gun/energy/mousegun
name = "pest gun"
desc = "The NT \"Arodentia\" Pesti-Shock is a highly sophisticated and probably safe beamgun designed for rapid pest-control."
+ icon = 'icons/obj/guns/pestishock.dmi'
icon_state = "pestishock"
+ item_state = "pestishock"
+ has_item_ratio = FALSE
w_class = 3
fire_sound = 'sound/weapons/taser2.ogg'
force = 5
@@ -186,7 +205,10 @@
/obj/item/gun/energy/net
name = "net gun"
desc = "A gun designed to deploy energy nets to capture animals or unruly crew members."
+ icon = 'icons/obj/guns/netgun.dmi'
icon_state = "netgun"
+ item_state = "netgun"
+ has_item_ratio = FALSE
projectile_type = /obj/item/projectile/beam/energy_net
fire_sound = 'sound/weapons/plasma_cutter.ogg'
slot_flags = SLOT_HOLSTER | SLOT_BELT
@@ -214,8 +236,10 @@
/obj/item/gun/energy/vaurca/bfg
name = "BFG 9000"
desc = "'Bio-Force Gun'. Yeah, right."
+ icon = 'icons/obj/guns/bfg.dmi'
icon_state = "bfg"
item_state = "bfg"
+ has_item_ratio = FALSE
charge_meter = 0
w_class = 4
fire_sound = 'sound/magic/LightningShock.ogg'
@@ -234,8 +258,10 @@
/obj/item/gun/energy/vaurca/gatlinglaser
name = "gatling laser"
desc = "A highly sophisticated rapid fire laser weapon."
+ icon = 'icons/obj/guns/gatling.dmi'
icon_state = "gatling"
item_state = "gatling"
+ has_item_ratio = FALSE
fire_sound = 'sound/weapons/Laser.ogg'
origin_tech = list(TECH_COMBAT = 6, TECH_PHORON = 5, TECH_MATERIAL = 6)
charge_meter = 0
@@ -286,8 +312,10 @@
/obj/item/gun/energy/vaurca/blaster
name = "\improper Zo'ra Blaster"
desc = "An elegant weapon for a more civilized time."
+ icon = 'icons/obj/guns/blaster.dmi'
icon_state = "blaster"
item_state = "blaster"
+ has_item_ratio = FALSE
origin_tech = list(TECH_COMBAT = 2, TECH_PHORON = 4)
fire_sound = 'sound/weapons/Laser.ogg'
slot_flags = SLOT_BACK | SLOT_HOLSTER | SLOT_BELT
@@ -402,10 +430,10 @@
/obj/item/gun/energy/vaurca/thermaldrill
name = "thermal drill"
desc = "Pierce the heavens? Son, there won't be any heavens when you're through with it."
- contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "thermaldrill"
item_state = "thermaldrill"
+ has_item_ratio = FALSE
origin_tech = list(TECH_COMBAT = 6, TECH_PHORON = 8)
fire_sound = 'sound/magic/lightningbolt.ogg'
slot_flags = SLOT_BACK
@@ -463,11 +491,11 @@
/obj/item/gun/energy/vaurca/mountedthermaldrill
name = "mounted thermal drill"
desc = "Pierce the heavens? Son, there won't be any heavens when you're through with it."
- contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "thermaldrill"
item_state = "thermaldrill"
- origin_tech = "combat=6;phorontech=8,"
+ has_item_ratio = FALSE
+ origin_tech = list(TECH_COMBAT = 6, TECH_PHORON = 8)
fire_sound = 'sound/magic/lightningbolt.ogg'
slot_flags = SLOT_BACK
w_class = 4
@@ -505,10 +533,10 @@
/obj/item/gun/energy/vaurca/tachyon
name = "tachyon carbine"
desc = "A Vaurcan carbine that fires a beam of concentrated faster than light particles, capable of passing through most forms of matter."
- contained_sprite = 1
icon = 'icons/obj/vaurca_items.dmi'
icon_state = "tachyoncarbine"
item_state = "tachyoncarbine"
+ has_item_ratio = FALSE
fire_sound = 'sound/weapons/laser3.ogg'
projectile_type = /obj/item/projectile/beam/tachyon
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
@@ -520,9 +548,10 @@
/obj/item/gun/energy/tesla
name = "tesla gun"
desc = "A gun that shoots a projectile that bounces from living thing to living thing. Keep your distance from whatever you are shooting at."
+ icon = 'icons/obj/guns/tesla.dmi'
icon_state = "tesla"
item_state = "tesla"
- icon = 'icons/obj/gun.dmi'
+ has_item_ratio = FALSE
charge_meter = 0
w_class = 4
fire_sound = 'sound/magic/LightningShock.ogg'
@@ -545,9 +574,10 @@
/obj/item/gun/energy/gravity_gun
name = "gravity gun"
desc = "This nifty gun disables the gravity in the area you shoot at. Use with caution."
+ icon = 'icons/obj/guns/gravity_gun.dmi'
icon_state = "gravity_gun"
item_state = "gravity_gun"
- icon = 'icons/obj/gun.dmi'
+ has_item_ratio = FALSE
charge_meter = 0
w_class = 4
fire_sound = 'sound/magic/Repulse.ogg'
@@ -558,4 +588,4 @@
sel_mode = 1
fire_delay = 20
accuracy = 40
- muzzle_flash = 10
+ muzzle_flash = 10
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm
index b7c9469988d..8d6ef9851d2 100644
--- a/code/modules/projectiles/guns/energy/stun.dm
+++ b/code/modules/projectiles/guns/energy/stun.dm
@@ -1,8 +1,9 @@
/obj/item/gun/energy/taser
name = "taser gun"
desc = "The NT Mk30 NL is a small, low capacity gun used for non-lethal takedowns."
+ icon = 'icons/obj/guns/taser.dmi'
icon_state = "taser"
- item_state = null //so the human update icon uses the icon_state instead.
+ item_state = "taser"
fire_sound = 'sound/weapons/Taser.ogg'
max_shots = 5
accuracy = 1 // More of a buff to secborgs and mounted taser users.
@@ -20,9 +21,11 @@
/obj/item/gun/energy/stunrevolver
name = "stun revolver"
desc = "A Hephaestus designed high-tech revolver that fires rechargable stun bolts."
- description_fluff = "The ST-30 is a highly advanced sidearm produced by Hephaestus Industries. It is designed for self-defense in a less-than-lethal manner. While the weapon design itself is not groundbreaking, it fires high velocity energy bolts with rechargable cartridges, possessing unusual high stopping power. "
+ description_fluff = "The ST-30 is a highly advanced sidearm produced by Hephaestus Industries. It is designed for self-defense in a less-than-lethal manner. While the weapon design itself is not groundbreaking, it fires high velocity energy bolts with rechargable cartridges, possessing unusual high stopping power."
+ icon = 'icons/obj/guns/stunrevolver.dmi'
icon_state = "stunrevolver"
item_state = "stunrevolver"
+ has_item_ratio = FALSE
fire_sound = 'sound/weapons/gunshot/gunshot1.ogg'
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
projectile_type = /obj/item/projectile/energy/electrode
@@ -32,9 +35,11 @@
/obj/item/gun/energy/crossbow
name = "mini energy-crossbow"
desc = "A weapon favored by many mercenary stealth specialists."
+ icon = 'icons/obj/guns/crossbow.dmi'
icon_state = "crossbow"
- w_class = 2.0
item_state = "crossbow"
+ has_item_ratio = FALSE
+ w_class = 2.0
origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2, TECH_ILLEGAL = 5)
matter = list(DEFAULT_WALL_MATERIAL = 2000)
slot_flags = SLOT_BELT
@@ -63,5 +68,4 @@
icon_state = "crossbowlarge"
item_state = "crossbow"
matter = list(DEFAULT_WALL_MATERIAL = 200000)
- projectile_type = /obj/item/projectile/energy/bolt/large
-
+ projectile_type = /obj/item/projectile/energy/bolt/large
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm
index ab36a24b205..c61a86cae6c 100644
--- a/code/modules/projectiles/guns/energy/temperature.dm
+++ b/code/modules/projectiles/guns/energy/temperature.dm
@@ -1,7 +1,9 @@
/obj/item/gun/energy/temperature
name = "freeze ray"
+ icon = 'icons/obj/guns/freezegun.dmi'
icon_state = "freezegun"
item_state = "freezegun"
+ has_item_ratio = FALSE
fire_sound = 'sound/weapons/pulse3.ogg'
desc = "A gun that changes temperatures. It has a small label on the side, 'More extreme temperatures will cost more charge!'"
var/temperature = T20C
@@ -19,69 +21,8 @@
needspin = FALSE
-/*
-/obj/item/gun/energy/temperature/New()
- ..()
- START_PROCESSING(SSprocessing, src)
-
-
-/obj/item/gun/energy/temperature/Destroy()
- STOP_PROCESSING(SSprocessing, src)
- ..()
-
-
-/obj/item/gun/energy/temperature/attack_self(mob/living/user as mob)
- user.set_machine(src)
- var/temp_text = ""
- if(temperature > (T0C - 50))
- temp_text = "[temperature] ([round(temperature-T0C)]°C) ([round(temperature*1.8-459.67)]°F)"
- else
- temp_text = "[temperature] ([round(temperature-T0C)]°C) ([round(temperature*1.8-459.67)]°F)"
-
- var/dat = {"Freeze Gun Configuration:
- Current output temperature: [temp_text]
- Target output temperature: - - - [current_temperature] + + +
- "}
-
- user << browse(dat, "window=freezegun;size=450x300;can_resize=1;can_close=1;can_minimize=1")
- onclose(user, "window=freezegun", src)
-*/
-
/obj/item/gun/energy/temperature/Topic(href, href_list)
if (..())
return 1
usr.set_machine(src)
- src.add_fingerprint(usr)
-
-
-/*
- if(href_list["temp"])
- var/amount = text2num(href_list["temp"])
- if(amount > 0)
- src.current_temperature = min(500, src.current_temperature+amount)
- else
- src.current_temperature = max(0, src.current_temperature+amount)
- if (istype(src.loc, /mob))
- attack_self(src.loc)
- src.add_fingerprint(usr)
- return
-
-
-/obj/item/gun/energy/temperature/process()
- switch(temperature)
- if(0 to 100) charge_cost = 1000
- if(100 to 250) charge_cost = 500
- if(251 to 300) charge_cost = 100
- if(301 to 400) charge_cost = 500
- if(401 to 500) charge_cost = 1000
-
- if(current_temperature != temperature)
- var/difference = abs(current_temperature - temperature)
- if(difference >= 10)
- if(current_temperature < temperature)
- temperature -= 10
- else
- temperature += 10
- else
- temperature = current_temperature
-*/
+ src.add_fingerprint(usr)
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/launcher/crossbow.dm b/code/modules/projectiles/guns/launcher/crossbow.dm
index c1bc075b61d..305b7b5bbce 100644
--- a/code/modules/projectiles/guns/launcher/crossbow.dm
+++ b/code/modules/projectiles/guns/launcher/crossbow.dm
@@ -52,8 +52,8 @@
/obj/item/gun/launcher/crossbow
name = "powered crossbow"
desc = "A 2457AD twist on an old classic. Pick up that can."
- icon = 'icons/obj/weapons.dmi'
- icon_state = "crossbow"
+ icon = 'icons/obj/guns/crossbow.dmi'
+ icon_state = "powered_crossbow"
item_state = "crossbow-solid"
fire_sound = 'sound/weapons/crossbow.ogg'
fire_sound_text = "a solid thunk"
@@ -295,9 +295,9 @@
/obj/item/gun/launcher/crossbow/RFD
name = "Rapid-Fabrication-Device Crossbow"
desc = "A hacked together RFD turns an innocent tool into the penultimate destruction tool. Flashforges bolts using matter units when the string is drawn back."
- icon = 'icons/obj/weapons.dmi'
+ icon = 'icons/obj/guns/rxb.dmi'
icon_state = "rxb"
- item_state = "rfd"
+ item_state = "rxb"
slot_flags = null
draw_time = 10
var/stored_matter = 0
diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
index 36863c803f5..824a995474a 100644
--- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm
+++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
@@ -1,8 +1,9 @@
/obj/item/gun/launcher/grenade
name = "grenade launcher"
desc = "A bulky pump-action grenade launcher. Holds up to 6 grenades in a revolving magazine."
- icon_state = "riotgun"
- item_state = "riotgun"
+ icon = 'icons/obj/guns/grenade_launcher.dmi'
+ icon_state = "grenadelauncher"
+ item_state = "grenadelauncher"
w_class = 4
force = 10
diff --git a/code/modules/projectiles/guns/launcher/harpoon.dm b/code/modules/projectiles/guns/launcher/harpoon.dm
index b57f31aec67..5b49bc963ea 100644
--- a/code/modules/projectiles/guns/launcher/harpoon.dm
+++ b/code/modules/projectiles/guns/launcher/harpoon.dm
@@ -1,6 +1,7 @@
/obj/item/gun/launcher/harpoon
name = "harpoon gun"
desc = "A harpoon cannon adapted into a portable firearm. Perfect for hunting space whales."
+ icon = 'icons/obj/guns/harpoon.dmi'
icon_state = "harpoon"
item_state = "harpoon"
release_force = 25
diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm
index caa598dcdf5..ee21825296e 100644
--- a/code/modules/projectiles/guns/launcher/pneumatic.dm
+++ b/code/modules/projectiles/guns/launcher/pneumatic.dm
@@ -1,11 +1,12 @@
/obj/item/gun/launcher/pneumatic
name = "pneumatic cannon"
desc = "A large gas-powered cannon."
+ icon = 'icons/obj/guns/pneumatic.dmi'
icon_state = "pneumatic"
item_state = "pneumatic"
slot_flags = SLOT_BELT
w_class = 5.0
- flags = CONDUCT
+ flags = CONDUCT
fire_sound_text = "a loud whoosh of moving air"
fire_delay = 50
fire_sound = 'sound/weapons/tablehit1.ogg'
diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm
index 947e8ee6f33..cc53ecd3f4f 100644
--- a/code/modules/projectiles/guns/launcher/rocket.dm
+++ b/code/modules/projectiles/guns/launcher/rocket.dm
@@ -1,6 +1,7 @@
/obj/item/gun/launcher/rocket
name = "rocket launcher"
desc = "MAGGOT."
+ icon = 'icons/obj/guns/rocket.dmi'
icon_state = "rocket"
item_state = "rocket"
w_class = 4.0
diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm
index e46c0f70473..fd3c76db2bb 100644
--- a/code/modules/projectiles/guns/launcher/syringe_gun.dm
+++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm
@@ -64,6 +64,7 @@
/obj/item/gun/launcher/syringe
name = "syringe gun"
desc = "A spring loaded rifle designed to fit syringes, designed to incapacitate unruly patients from a distance."
+ icon = 'icons/obj/guns/syringegun.dmi'
icon_state = "syringegun"
item_state = "syringegun"
w_class = 3
@@ -136,6 +137,7 @@
/obj/item/gun/launcher/syringe/rapid
name = "syringe gun revolver"
desc = "A modification of the syringe gun design, using a rotating cylinder to store up to five syringes. The spring still needs to be drawn between shots."
+ icon = 'icons/obj/guns/syringegun.dmi'
icon_state = "rapidsyringegun"
item_state = "rapidsyringegun"
- max_darts = 5
+ max_darts = 5
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index 52dfe6470d1..aec572bde77 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -6,7 +6,6 @@
/obj/item/gun/projectile
name = "gun"
desc = "A gun that fires bullets."
- icon_state = "revolver"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
w_class = 3
matter = list(DEFAULT_WALL_MATERIAL = 1000)
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index d52044c02e2..f256e5c573e 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -1,7 +1,9 @@
/obj/item/gun/projectile/automatic
name = "prototype SMG"
desc = "A protoype lightweight, fast firing gun. Uses 9mm rounds."
- icon_state = "saber" //ugly
+ icon = 'icons/obj/guns/saber.dmi'
+ icon_state = "saber" //ugly //yup
+ item_state = "saber"
w_class = 3
load_method = SPEEDLOADER //yup. until someone sprites a magazine for it.
max_shells = 22
@@ -25,6 +27,7 @@
/obj/item/gun/projectile/automatic/mini_uzi
name = ".45 machine pistol"
desc = "A lightweight, fast firing gun. For when you want someone dead. Uses .45 rounds."
+ icon = 'icons/obj/guns/mini-uzi.dmi'
icon_state = "mini-uzi"
item_state = "mini-uzi"
w_class = 3
@@ -43,6 +46,7 @@
/obj/item/gun/projectile/automatic/c20r
name = "submachine gun"
desc = "The C-20r is a lightweight and rapid firing SMG, for when you REALLY need someone dead. Uses 10mm rounds. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp."
+ icon = 'icons/obj/guns/c20r.dmi'
icon_state = "c20r"
item_state = "c20r"
w_class = 3
@@ -68,6 +72,7 @@
/obj/item/gun/projectile/automatic/wt550
name = "machine pistol"
desc = "The NI 550 Saber is a cheap self-defense weapon, mass-produced by Necropolis Industries for paramilitary and private use. Uses 9mm rounds."
+ icon = 'icons/obj/guns/wt550.dmi'
icon_state = "wt550"
item_state = "wt550"
w_class = 3
@@ -93,8 +98,9 @@
/obj/item/gun/projectile/automatic/rifle
name = "automatic rifle"
desc = "A weapon firing an intermediate caliber round, or larger."
+ icon = 'icons/obj/guns/arifle.dmi'
icon_state = "arifle"
- item_state = null
+ item_state = "arifle"
w_class = 4
force = 10
caliber = "a762"
@@ -142,6 +148,7 @@
/obj/item/gun/projectile/automatic/rifle/sol
name = "battle rifle"
desc = "A powerful battle rifle, the M469 is a highly accurate skirmishing firearm of Necropolis make which is chambered in 7.62."
+ icon = 'icons/obj/guns/battlerifle.dmi'
icon_state = "battlerifle"
item_state = "battlerifle"
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 3, TECH_ILLEGAL = 2)
@@ -169,8 +176,9 @@
/obj/item/gun/projectile/automatic/rifle/z8
name = "bullpup assault carbine"
desc = "The Z8 Bulldog bullpup carbine, made by the now defunct Zendai Foundries. Uses armor piercing 5.56mm rounds. Makes you feel like a space marine when you hold it."
+ icon = 'icons/obj/guns/carbine.dmi'
icon_state = "carbine"
- item_state = "z8carbine"
+ item_state = "carbine"
w_class = 4
force = 10
caliber = "a556"
@@ -229,9 +237,9 @@
else
icon_state = "carbine"
if(wielded)
- item_state = "z8carbine-wielded"
+ item_state = "carbine-wielded"
else
- item_state = "z8carbine"
+ item_state = "carbine"
update_held_icon()
return
@@ -245,6 +253,7 @@
/obj/item/gun/projectile/automatic/rifle/l6_saw
name = "light machine gun"
desc = "A rather traditionally made L6 SAW with a pleasantly lacquered wooden pistol grip. Has 'Aussec Armoury- 2431' engraved on the receiver"
+ icon = 'icons/obj/guns/l6.dmi'
icon_state = "l6closed100"
item_state = "l6closedmag"
w_class = 4
@@ -316,6 +325,7 @@
/obj/item/gun/projectile/automatic/tommygun
name = "vintage submachine gun"
desc = "A classic submachine gun. Uses .45 rounds."
+ icon = 'icons/obj/guns/tommygun.dmi'
icon_state = "tommygun"
item_state = "tommygun"
w_class = 3
@@ -336,6 +346,7 @@
/obj/item/gun/projectile/automatic/railgun
name = "railgun"
desc = "An advanced rifle that magnetically propels hyperdense rods at breakneck speeds to devastating effect."
+ icon = 'icons/obj/guns/railgun.dmi'
icon_state = "railgun"
item_state = "railgun"
w_class = 4
@@ -359,10 +370,9 @@
/obj/item/gun/projectile/automatic/terminator
name = "flechette rifle"
desc = "A fearsome Necropolis Industries designed rifle with unattached bayonet that fires lethal flechette rounds."
- icon = 'icons/obj/terminator.dmi'
+ icon = 'icons/obj/guns/flechette.dmi'
icon_state = "flechetterifle"
item_state = "flechetterifle"
- contained_sprite = 1
w_class = 5
force = 30
caliber = "flechette"
@@ -404,6 +414,7 @@
/obj/item/gun/projectile/automatic/rifle/shotgun
name = "assault shotgun"
desc = "A experimental, semi-automatic combat shotgun, designed for boarding operations and law enforcement agencies."
+ icon = 'icons/obj/guns/assaultshotgun.dmi'
icon_state = "assaultshotgun"
item_state = "assaultshotgun"
w_class = 4
diff --git a/code/modules/projectiles/guns/projectile/cannon.dm b/code/modules/projectiles/guns/projectile/cannon.dm
index e11688f27be..1fa163bbe43 100644
--- a/code/modules/projectiles/guns/projectile/cannon.dm
+++ b/code/modules/projectiles/guns/projectile/cannon.dm
@@ -1,6 +1,7 @@
/obj/item/gun/projectile/cannon
name = "hand cannon"
desc = "An amalgamation of ancient and modern tajaran technology. This old naval cannon was turned into a portable firearm."
+ icon = 'icons/obj/guns/cannon.dmi'
icon_state = "cannon"
item_state = "cannon"
caliber = "cannon"
@@ -38,6 +39,7 @@
/obj/item/gun/projectile/nuke
name = "nuclear launcher"
desc = "A launcher weapon designated to fire miniaturized nuclear warheads."
+ icon = 'icons/obj/guns/blockbuster.dmi' // hoh
icon_state = "blockbuster"
item_state = "blockbuster"
caliber = "nuke"
diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm
index 9f4a118118a..60430b0230b 100644
--- a/code/modules/projectiles/guns/projectile/dartgun.dm
+++ b/code/modules/projectiles/guns/projectile/dartgun.dm
@@ -44,9 +44,9 @@
/obj/item/gun/projectile/dartgun
name = "dart gun"
desc = "A small gas-powered dartgun, capable of delivering chemical cocktails swiftly across short distances."
+ icon = 'icons/obj/guns/dartgun.dmi'
+ icon_state = "dartgun-empty"
icon_state = "dartgun-empty"
- item_state = null
-
caliber = "dart"
fire_sound = 'sound/weapons/empty.ogg'
fire_sound_text = "a metallic click"
@@ -76,14 +76,18 @@
/obj/item/gun/projectile/dartgun/update_icon()
if(!ammo_magazine)
icon_state = "dartgun-empty"
+ item_state = icon_state
return 1
if(!ammo_magazine.stored_ammo || ammo_magazine.stored_ammo.len)
icon_state = "dartgun-0"
+ item_state = icon_state
else if(ammo_magazine.stored_ammo.len > 5)
icon_state = "dartgun-5"
+ item_state = icon_state
else
icon_state = "dartgun-[ammo_magazine.stored_ammo.len]"
+ item_state = icon_state
return 1
/obj/item/gun/projectile/dartgun/consume_next_projectile()
@@ -93,9 +97,6 @@
fill_dart(dart)
/obj/item/gun/projectile/dartgun/examine(mob/user)
- //update_icon()
- //if (!..(user, 2))
- // return
..()
if (beakers.len)
to_chat(user, "[src] contains:")
@@ -203,4 +204,4 @@
starting_chems = list("kelotane","bicaridine","dylovene")
/obj/item/gun/projectile/dartgun/vox/raider
- starting_chems = list("space_drugs","stoxin","impedrezene")
+ starting_chems = list("space_drugs","stoxin","impedrezene")
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/improvised.dm b/code/modules/projectiles/guns/projectile/improvised.dm
index fd39a2543b3..7926e9e651c 100644
--- a/code/modules/projectiles/guns/projectile/improvised.dm
+++ b/code/modules/projectiles/guns/projectile/improvised.dm
@@ -3,10 +3,9 @@
/obj/item/gun/projectile/shotgun/improvised //similar to the double barrel, but without the option to fire both barrels
name = "improvised shotgun"
desc = "An improvised pipe assembly that can fire shotgun shells."
- icon = 'icons/obj/improvised.dmi'
+ icon = 'icons/obj/guns/ishotgun.dmi'
icon_state = "ishotgun"
item_state = "ishotgun"
- contained_sprite = 1
max_shells = 2
w_class = 4.0
force = 5
@@ -65,9 +64,9 @@
/obj/item/gun/projectile/shotgun/improvised/sawn
name = "sawn-off improvised shotgun"
desc = "An improvised pipe assembly that can fire shotgun shells."
+ icon = 'icons/obj/guns/ishotgunsawn.dmi'
icon_state = "ishotgunsawn"
item_state = "ishotgunsawn"
- contained_sprite = 1
slot_flags = SLOT_BELT|SLOT_HOLSTER
w_class = 3
force = 5
@@ -143,9 +142,9 @@
recoil = 2
accuracy = -1
fire_delay = 9
- icon = 'icons/obj/improvised.dmi'
+ icon = 'icons/obj/guns/ipistol.dmi'
icon_state = "ipistol"
- item_state = "gun"
+ item_state = "ipistol"
caliber = ".45"
allowed_magazines = list(/obj/item/ammo_magazine/c45m)
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
@@ -209,8 +208,9 @@
/obj/item/gun/projectile/automatic/improvised
name = "improvised machine pistol"
desc = "An improvised automatic handgun. Uses .45 rounds."
- icon = 'icons/obj/improvised.dmi'
+ icon = 'icons/obj/guns/ismg.dmi'
icon_state = "ismg"
+ item_state = "ismg"
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/c45uzi
allowed_magazines = list(/obj/item/ammo_magazine/c45uzi)
diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm
index 872b3ae7e25..65c9e3c59cb 100644
--- a/code/modules/projectiles/guns/projectile/pistol.dm
+++ b/code/modules/projectiles/guns/projectile/pistol.dm
@@ -3,7 +3,9 @@
desc = "A cheap Martian knock-off of a Colt M1911. Uses .45 rounds."
magazine_type = /obj/item/ammo_magazine/c45m
allowed_magazines = list(/obj/item/ammo_magazine/c45m)
+ icon = 'icons/obj/guns/colt.dmi'
icon_state = "colt"
+ item_state = "colt"
caliber = ".45"
accuracy = 1
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
@@ -42,8 +44,9 @@
name = ".45 pistol"
desc = "A NanoTrasen designed sidearm, found among law enforcement and security forces. Uses .45 rounds."
description_fluff = "The NT Mk58 is a ballistic sidearm developed and produced by Nanotrasen. Bulky and heavy, the Mk58 is nonetheless used by security forces and law enforcement for its ease of use, low maintenance requirement, longevity, reliability - and most of all, extremely inexpensive price tag. A trademark of Nanotrasen security forces. It uses .45 rounds."
- icon_state = "secguncomp"
- item_state = "mk58standard"
+ icon = 'icons/obj/guns/secgun.dmi'
+ icon_state = "secgun"
+ item_state = "secgun"
magazine_type = /obj/item/ammo_magazine/c45m/rubber
allowed_magazines = list(/obj/item/ammo_magazine/c45m)
caliber = ".45"
@@ -54,10 +57,10 @@
/obj/item/gun/projectile/sec/update_icon()
..()
- if(ammo_magazine && ammo_magazine.stored_ammo.len)
- icon_state = "secguncomp"
+ if(ammo_magazine?.stored_ammo.len)
+ icon_state = "secgun"
else
- icon_state = "secguncomp-e"
+ icon_state = "secgun-e"
/obj/item/gun/projectile/sec/lethal
magazine_type = /obj/item/ammo_magazine/c45m
@@ -70,20 +73,23 @@
desc = "A NanoTrasen designed sidearm, found among law enforcement and security forces. It has a wooden grip. Uses .45 rounds."
description_fluff = "The NT Mk58 is a ballistic sidearm developed and produced by Nanotrasen. Bulky and heavy, the Mk58 is nonetheless used by security forces and law enforcement for its ease of use, low maintenance requirement, longevity, reliability - and most of all, extremely inexpensive price tag. A trademark of Nanotrasen security forces. This one has a wooden grip. It uses .45 rounds."
name = "custom .45 Pistol"
- icon_state = "secgundark"
- item_state = "mk58custom"
+ icon = 'icons/obj/guns/secgun_wood.dmi'
+ icon_state = "secgunwood"
+ item_state = "secgunwood"
/obj/item/gun/projectile/sec/wood/update_icon()
..()
- if(ammo_magazine && ammo_magazine.stored_ammo.len)
- icon_state = "secgundark"
+ if(ammo_magazine?.stored_ammo.len)
+ icon_state = "secgunwood"
else
- icon_state = "secgundark-e"
+ icon_state = "secgunwood-e"
/obj/item/gun/projectile/automatic/x9
name = "automatic .45 pistol"
desc = "The x9 tactical pistol is a lightweight fast firing handgun. Uses .45 rounds."
+ icon = 'icons/obj/guns/x9.dmi'
icon_state = "x9tactical"
+ item_state = "x9"
w_class = 3
accuracy = 1
load_method = MAGAZINE
@@ -101,7 +107,9 @@
/obj/item/gun/projectile/tanto
desc = "A Necropolis Industries Tanto .40, designed to compete with the NT Mk58. Uses 10mm rounds."
name = "10mm auto-pistol"
+ icon = 'icons/obj/guns/c05r.dmi'
icon_state = "c05r"
+ item_state = "c05r"
magazine_type = /obj/item/ammo_magazine/mc10mm
allowed_magazines = list(/obj/item/ammo_magazine/mc10mm)
caliber = "10mm"
@@ -126,8 +134,10 @@
/obj/item/gun/projectile/silenced
name = "silenced pistol"
- desc = "A small, quiet, easily concealable gun. Uses .45 rounds."
+ desc = "A small, quiet, easily concealable gun. Uses .45 rounds."
+ icon = 'icons/obj/guns/silenced_pistol.dmi'
icon_state = "silenced_pistol"
+ item_state = "silenced_pistol"
fire_sound = 'sound/weapons/gunshot/gunshot_suppressed.ogg'
w_class = 3
accuracy = 1
@@ -152,7 +162,9 @@
/obj/item/gun/projectile/deagle
name = ".50 magnum pistol"
desc = "A robust handgun that uses .50 AE ammo."
+ icon = 'icons/obj/guns/deagle.dmi'
icon_state = "deagle"
+ item_state = "deagle"
force = 10
accuracy = 1
caliber = ".50"
@@ -172,7 +184,9 @@
/obj/item/gun/projectile/deagle/adhomai
name = "adhomian heavy pistol"
desc = "A bulk handgun used by republican commissars and high-ranking members of the Hadiist Party."
+ icon = 'icons/obj/guns/adhomian_heavy_pistol.dmi'
icon_state = "adhomian_heavy_pistol"
+ item_state = "adhomian_heavy_pistol"
description_fluff = "Given to Republican Commissars and high ranking Party members, the Nal'tor Model Pistol is notable for its large caliber. Unlike the Adar'Mazy pistol, only a \
single factory in Nal'tor is allowed to fabricate it, with its design being kept as a state secret. Because of its rarity and status, the Adhomai Heavy Pistol was a sought after \
war trophy by royalist and rebels forces."
@@ -180,7 +194,9 @@
/obj/item/gun/projectile/gyropistol
name = "gyrojet pistol"
desc = "A bulky pistol designed to fire self propelled rounds"
+ icon = 'icons/obj/guns/gyropistol.dmi'
icon_state = "gyropistol"
+ item_state = "gyropistol"
max_shells = 8
accuracy = 1
caliber = "75"
@@ -203,8 +219,9 @@
/obj/item/gun/projectile/pistol
name = "9mm pistol"
desc = "500 years since its creation and the Stechkin automatic pistol is still a common sight throughout the Frontier."
+ icon = 'icons/obj/guns/pistol.dmi'
icon_state = "pistol"
- item_state = null
+ item_state = "pistol"
w_class = 2
accuracy = 1
caliber = "9mm"
@@ -266,15 +283,16 @@
/obj/item/silencer
name = "silencer"
desc = "A silencer"
- icon = 'icons/obj/gun.dmi'
+ icon = 'icons/obj/guns/pistol.dmi'
icon_state = "silencer"
w_class = 2
/obj/item/gun/projectile/pirate
name = "zip gun"
desc = "Little more than a barrel, handle, and firing mechanism, cheap makeshift firearms like this one are not uncommon in frontier systems."
+ icon = 'icons/obj/guns/zipgun.dmi'
icon_state = "zipgun"
- item_state = "sawnshotgun"
+ item_state = "zipgun"
handle_casings = CYCLE_CASINGS //player has to take the old casing out manually before reloading
load_method = SINGLE_CASING
max_shells = 1 //literally just a barrel
@@ -302,7 +320,9 @@
/obj/item/gun/projectile/leyon
name = "10mm pistol"
desc = "The Leyon LCC Everyman is a small pistol that holds five shots and is loaded with a stripper clip, popular for self-defense on Mars. Uses 10mm rounds."
+ icon = 'icons/obj/guns/leyon.dmi'
icon_state = "leyon"
+ item_state = "leyon"
caliber = "10mm"
w_class = 2
ammo_type = /obj/item/ammo_casing/c10mm
@@ -327,8 +347,9 @@
/obj/item/gun/projectile/pistol/sol
name = "service pistol"
desc = "A very old service pistol. Branded at the grip with the old emblem of the Sol Alliance, hand-made by Necropolis."
+ icon = 'icons/obj/guns/m8.dmi'
icon_state = "m8"
- item_state = "pistol"
+ item_state = "m8"
can_silence = FALSE
/obj/item/gun/projectile/pistol/sol/update_icon()
@@ -341,8 +362,9 @@
/obj/item/gun/projectile/pistol/adhomai
name = "adhomian service pistol"
desc = "The Adar'Mazy pistol is an adhomian firearm commonly issued to People's Republic officers, government officials and low-ranking Party members."
+ icon = 'icons/obj/guns/adhomian_pistol.dmi'
icon_state = "adhomian_pistol"
- item_state = "pistol"
+ item_state = "adhomian_pistol"
can_silence = FALSE
description_fluff = "A mass produced pistol issued to People's Republic officers, government officials and low-ranking Party members. Known for their simple, cheap and reliable \
design, this weapon is produced by nearly all weapon factories in the Republic. The Adar'Mazy is also found in the hands of Adhomai Liberation Army soldiers and commanders."
@@ -352,4 +374,4 @@
if(ammo_magazine)
icon_state = "adhomian_pistol"
else
- icon_state = "adhomian_pistol-e"
+ icon_state = "adhomian_pistol-e"
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/plasma.dm b/code/modules/projectiles/guns/projectile/plasma.dm
index 21fd43a5a18..5c8d478f791 100644
--- a/code/modules/projectiles/guns/projectile/plasma.dm
+++ b/code/modules/projectiles/guns/projectile/plasma.dm
@@ -1,6 +1,7 @@
/obj/item/gun/projectile/plasma
name = "plasma shotgun"
desc = "A marvel of Elyran weapons technology which utilizes superheated plasma to pierce thick armor with gruesome results."
+ icon = 'icons/obj/guns/slammer.dmi'
icon_state = "slammer"
item_state = "slammer"
w_class = ITEMSIZE_LARGE
@@ -25,6 +26,7 @@
/obj/item/gun/projectile/plasma/bolter
name = "plasma bolter"
desc = "A miniaturized, less efficient version of the infamous plasma slammer. Sacrifices much of its power for a more compact frame."
+ icon = 'icons/obj/guns/bolter.dmi'
icon_state = "bolter"
item_state = "bolter"
w_class = ITEMSIZE_NORMAL
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index d9d76ad7503..95678f15473 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -1,6 +1,7 @@
/obj/item/gun/projectile/revolver
name = "revolver"
desc = "The revised Mark II Necropolis Industries revolver, chambering .357 rounds and utilizing a robust firing mechanism to deliver deadly rounds downrange. This is a monster of a hand cannon with a beautiful cedar grip and a transparent plastic cover so as to not splinter your hands while firing."
+ icon = 'icons/obj/guns/revolver.dmi'
icon_state = "revolver"
item_state = "revolver"
accuracy = 1
@@ -37,7 +38,9 @@
/obj/item/gun/projectile/revolver/mateba
name = "mateba"
desc = "The Mateba .454 Autorevolver, a very rare weapon typical of special ops teams and mercenary teams. It packs quite the punch."
+ icon = 'icons/obj/guns/mateba.dmi'
icon_state = "mateba"
+ item_state = "mateba"
max_shells = 7
accuracy = 2
caliber = "454"
@@ -48,7 +51,9 @@
/obj/item/gun/projectile/revolver/detective
name = "revolver"
desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
+ icon = 'icons/obj/guns/detective.dmi'
icon_state = "detective"
+ item_state = "detective"
max_shells = 6
accuracy = 1
caliber = "38"
@@ -80,7 +85,9 @@
desc = "A custom-built revolver, based off the semi-popular Detective Special model."
max_shells = 6
accuracy = 2
+ icon = 'icons/obj/guns/deckard.dmi'
icon_state = "deckard-empty"
+ item_state = "deckard"
caliber = "38"
ammo_type = /obj/item/ammo_casing/c38
fire_sound = 'sound/weapons/gunshot/gunshot_strong.ogg'
@@ -103,8 +110,9 @@
/obj/item/gun/projectile/revolver/derringer
name = "derringer"
desc = "A small pocket pistol, easily concealed. Uses .357 rounds."
+ icon = 'icons/obj/guns/derringer.dmi'
icon_state = "derringer"
- item_state = "concealed"
+ item_state = "derringer"
accuracy = -1
w_class = 2
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 3)
@@ -116,8 +124,9 @@
/obj/item/gun/projectile/revolver/capgun
name = "cap gun"
desc = "Looks almost like the real thing! Ages 8 and up."
+ icon = 'icons/obj/guns/capgun.dmi'
icon_state = "capgun"
- item_state = "revolver"
+ item_state = "capgun"
caliber = "caps"
origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 1)
handle_casings = CYCLE_CASINGS
@@ -129,14 +138,17 @@
if(!W.iswirecutter() || icon_state == "revolver")
return ..()
to_chat(user, "You snip off the toy markings off the [src].")
+ icon = 'icons/obj/guns/revolver.dmi'
name = "revolver"
icon_state = "revolver"
+ item_state = "revolvers"
desc += " Someone snipped off the barrel's toy mark. How dastardly."
return 1
/obj/item/gun/projectile/revolver/lemat
name = "grapeshot revolver"
desc = "A six shot revolver with a secondary firing barrel loading shotgun shells. Uses .38-Special and 12g rounds depending on the barrel."
+ icon = 'icons/obj/guns/lemat.dmi'
icon_state = "lemat"
item_state = "lemat"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
@@ -229,7 +241,9 @@
/obj/item/gun/projectile/revolver/adhomian
name = "adhomian service revolver"
desc = "The Royal Firearms Service Revolver is a simple and reliable design, favored by the nobility of the New Kingdom of Adhomai."
+ icon = 'icons/obj/guns/adhomian_revolver.dmi'
icon_state = "adhomian_revolver"
+ item_state = "adhomian_revolver"
caliber = "38"
max_shells = 7
load_method = SINGLE_CASING
@@ -238,4 +252,4 @@
description_fluff = "A simple and reliable double action revolver, favored by the nobility, officers and law enforcement. The design is known for having an outdated reloading \
mechanism, with the need to manually eject each of the used cartridges, and reload one cartridge at a time through a loading gate. However, their cheap manufacturing cost has \
- allowed countless copies to flood the Kingdom's markets."
+ allowed countless copies to flood the Kingdom's markets."
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/rifle.dm b/code/modules/projectiles/guns/projectile/rifle.dm
index 718e0629dcd..9e02091927a 100644
--- a/code/modules/projectiles/guns/projectile/rifle.dm
+++ b/code/modules/projectiles/guns/projectile/rifle.dm
@@ -1,6 +1,7 @@
/obj/item/gun/projectile/shotgun/pump/rifle
name = "bolt action rifle"
desc = "A cheap ballistic rifle often found in the hands of crooks and frontiersmen. Uses 7.62mm rounds."
+ icon = 'icons/obj/guns/moistnugget.dmi'
icon_state = "moistnugget"
item_state = "moistnugget"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
@@ -20,11 +21,12 @@
sawnoff_workmsg = "shorten the barrel and stock"
/obj/item/gun/projectile/shotgun/pump/rifle/saw_off(mob/user, obj/item/tool)
+ icon = 'icons/obj/guns/obrez.dmi'
icon_state = "obrez"
+ item_state = "obrez"
w_class = 3
recoil = 2
accuracy = -2
- item_state = "obrez"
slot_flags &= ~SLOT_BACK
slot_flags |= (SLOT_BELT|SLOT_HOLSTER)
can_bayonet = FALSE
@@ -40,6 +42,7 @@
/obj/item/gun/projectile/shotgun/pump/rifle/obrez
name = "sawn-off bolt action rifle"
desc = "A shortened bolt action rifle, not really accurate. Uses 7.62mm rounds."
+ icon = 'icons/obj/guns/obrez.dmi'
icon_state = "obrez"
item_state = "obrez"
w_class = 3
@@ -52,6 +55,7 @@
/obj/item/gun/projectile/contender
name = "pocket rifle"
desc = "A perfect, pristine replica of an ancient one-shot hand-cannon. This one has been modified to work almost like a bolt-action. Uses 5.56mm rounds."
+ icon = 'icons/obj/guns/pockrifle.dmi'
icon_state = "pockrifle"
item_state = "pockrifle"
caliber = "a556"
@@ -116,8 +120,9 @@
/obj/item/gun/projectile/shotgun/pump/rifle/vintage
name = "vintage bolt action rifle"
desc = "An extremely old-looking rifle. Words you can't read are stamped on the gun. Doesn't look like it'll take any modern rounds."
+ icon = 'icons/obj/guns/springfield.dmi'
icon_state = "springfield"
- icon_state = "springfield"
+ item_state = "springfield"
origin_tech = list(TECH_COMBAT = 1, TECH_MATERIAL = 3)
fire_sound = 'sound/weapons/gunshot/gunshot_rifle.ogg'
slot_flags = SLOT_BACK
@@ -223,7 +228,9 @@
slot_flags = 0
magazine_type = /obj/item/ammo_magazine/gauss
allowed_magazines = list(/obj/item/ammo_magazine/gauss)
+ icon = 'icons/obj/guns/gauss_thumper.dmi'
icon_state = "gauss_thumper"
+ item_state = "gauss_thumper"
caliber = "gauss"
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
fire_sound = 'sound/weapons/railgun.ogg'
@@ -253,7 +260,7 @@
/obj/item/gun/energy/gauss/mounted/mech
name = "heavy gauss cannon"
desc = "An outdated and power hungry gauss cannon, modified to deliver high explosive rounds at high velocities."
- icon = 'icons/obj/gun.dmi'
+ icon = 'icons/obj/guns/gauss_thumper.dmi'
icon_state = "gauss_thumper"
fire_sound = 'sound/weapons/railgun.ogg'
fire_delay = 30
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index ca0addd90d0..92d22976e53 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -38,6 +38,7 @@
/obj/item/gun/projectile/shotgun/pump
name = "pump shotgun"
desc = "An ubiquitous unbranded shotgun. Useful for sweeping alleys."
+ icon = 'icons/obj/guns/shotgun.dmi'
icon_state = "shotgun"
item_state = "shotgun"
max_shells = 4
@@ -96,6 +97,7 @@
/obj/item/gun/projectile/shotgun/pump/combat
name = "combat shotgun"
desc = "Built for close quarters combat, the Hephaestus Industries KS-40 is widely regarded as a weapon of choice for repelling boarders."
+ icon = 'icons/obj/guns/cshotgun.dmi'
icon_state = "cshotgun"
item_state = "cshotgun"
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
@@ -106,6 +108,7 @@
/obj/item/gun/projectile/shotgun/pump/combat/sol
name = "naval shotgun"
desc = "A Malella-type 12-gauge breaching shotgun commonly found in the hands of the Sol Alliance. Made by Necropolis Industries."
+ icon = 'icons/obj/guns/malella.dmi'
icon_state = "malella"
item_state = "malella"
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 3, TECH_ILLEGAL = 2)
@@ -114,6 +117,7 @@
/obj/item/gun/projectile/shotgun/doublebarrel
name = "double-barreled shotgun"
desc = "A true classic."
+ icon = 'icons/obj/guns/dshotgun.dmi'
icon_state = "dshotgun"
item_state = "dshotgun"
//SPEEDLOADER because rapid unloading.
@@ -123,7 +127,9 @@
max_shells = 2
w_class = 4
force = 10
- flags = CONDUCT
+ flags = CONDUCT
+ is_wieldable = TRUE
+ var/has_wield_state = TRUE
slot_flags = SLOT_BACK
caliber = "shotgun"
origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1)
@@ -139,6 +145,14 @@
can_sawoff = TRUE
sawnoff_workmsg = "shorten the barrel"
+/obj/item/gun/projectile/shotgun/doublebarrel/update_icon()
+ ..()
+ if(wielded && has_wield_state)
+ item_state = "[icon_state]-wielded"
+ else
+ item_state = "[icon_state]"
+ update_held_icon()
+
/obj/item/gun/projectile/shotgun/doublebarrel/pellet
ammo_type = /obj/item/ammo_casing/shotgun/pellet
@@ -151,8 +165,10 @@
..(user, allow_dump=1)
/obj/item/gun/projectile/shotgun/doublebarrel/saw_off(mob/user, obj/item/tool)
+ icon = 'icons/obj/guns/sawnshotgun.dmi'
icon_state = "sawnshotgun"
item_state = "sawnshotgun"
+ is_wieldable = FALSE
w_class = 3
force = 5
slot_flags &= ~SLOT_BACK //you can't sling it on your back
@@ -164,8 +180,10 @@
/obj/item/gun/projectile/shotgun/doublebarrel/sawn
name = "sawn-off shotgun"
desc = "Omar's coming!"
+ icon = 'icons/obj/guns/sawnshotgun.dmi'
icon_state = "sawnshotgun"
item_state = "sawnshotgun"
+ is_wieldable = FALSE
slot_flags = SLOT_BELT|SLOT_HOLSTER
ammo_type = /obj/item/ammo_casing/shotgun/pellet
w_class = 3
@@ -174,7 +192,9 @@
/obj/item/gun/projectile/shotgun/foldable
name = "foldable shotgun"
desc = "A single-shot shotgun that can be folded for easy concealment."
+ icon = 'icons/obj/guns/overunder.dmi'
icon_state = "overunder"
+ item_state = "overunder"
slot_flags = SLOT_BELT
w_class = 3
ammo_type = /obj/item/ammo_casing/shotgun/pellet
@@ -191,7 +211,7 @@
item_state = icon_state
else
icon_state = "[initial(icon_state)]-d"
- item_state = "shotgun"
+ item_state = "[initial(item_state)]-d"
update_held_icon()
/obj/item/gun/projectile/shotgun/foldable/proc/toggle_folded(mob/living/user)
diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm
index 895d5f19c2b..01ae0c29735 100644
--- a/code/modules/projectiles/guns/projectile/sniper.dm
+++ b/code/modules/projectiles/guns/projectile/sniper.dm
@@ -1,6 +1,7 @@
/obj/item/gun/projectile/heavysniper
name = "anti-materiel rifle"
desc = "A portable anti-armour rifle fitted with a scope, the PTR-7 is capable of punching through windows and non-reinforced walls with ease. Fires armor piercing 14.5mm shells."
+ icon = 'icons/obj/guns/heavysniper.dmi'
icon_state = "heavysniper"
item_state = "heavysniper"
w_class = 4
@@ -86,8 +87,9 @@
/obj/item/gun/projectile/heavysniper/tranq
name = "tranquilizer rifle"
desc = "A nonlethal modification to the PTR-7 anti-materiel rifle meant for sedation and capture of the most dangerous of game. Fires .50 cal PPS shells that deploy a torpor inducing drug payload."
+ icon = 'icons/obj/guns/tranqsniper.dmi'
icon_state = "tranqsniper"
- item_state = "heavysniper"
+ item_state = "tranqsniper"
w_class = 4
force = 10
slot_flags = SLOT_BACK
@@ -112,14 +114,15 @@
else
icon_state = "tranqsniper"
if(wielded)
- item_state = "heavysniper-wielded"
+ item_state = "tranqsniper-wielded"
else
- item_state = "heavysniper"
+ item_state = "tranqsniper"
update_held_icon()
/obj/item/gun/projectile/dragunov
name = "antique sniper rifle"
desc = "An old semi-automatic marksman rifle. Uses 7.62mm rounds."
+ icon = 'icons/obj/guns/dragunov.dmi'
icon_state = "dragunov"
item_state = "dragunov"
w_class = 4
@@ -174,8 +177,9 @@
/obj/item/gun/projectile/automatic/rifle/w556
name = "scout rifle"
desc = "A lightweight Neyland 556mi 'Ranger' used within the Sol Navy and Nanotrasen Emergency Response Teams. Equipped with a scope and designed for medium to long range combat, with moderate stopping power. Chambered in 5.56 rounds."
+ icon = 'icons/obj/guns/w556.dmi'
icon_state = "w556rifle"
- item_state = "heavysniper"
+ item_state = "w556rifle"
w_class = 4
force = 10
slot_flags = SLOT_BACK
@@ -211,7 +215,7 @@
/obj/item/gun/projectile/automatic/rifle/w556/update_icon()
if(wielded)
- item_state = "heavysniper-wielded"
+ item_state = "w556rifle-wielded"
else
- item_state = "heavysniper"
+ item_state = "w556rifle"
update_held_icon()
\ No newline at end of file
diff --git a/code/modules/random_map/automata/diona.dm b/code/modules/random_map/automata/diona.dm
index 5c108faddc3..2228fdeb7e0 100644
--- a/code/modules/random_map/automata/diona.dm
+++ b/code/modules/random_map/automata/diona.dm
@@ -1,17 +1,5 @@
/turf/simulated/wall/diona/Initialize(mapload)
- . = ..(mapload,"biomass")
-
-/turf/simulated/wall/diona/attack_generic(var/mob/user, var/damage, var/attack_message)
- if(istype(user, /mob/living/carbon/alien/diona))
- if(can_open == WALL_OPENING)
- return
- can_open = WALL_CAN_OPEN
- user.visible_message("\The [user] strokes its feelers against \the [src] and the biomass [density ? "moves aside" : "closes up"].")
- toggle_open(user)
- sleep(15)
- if(can_open == WALL_CAN_OPEN) can_open = 0
- else
- return ..(user, damage, attack_message)
+ . = ..(mapload, "biomass")
/obj/structure/diona
icon = 'icons/obj/diona.dmi'
@@ -55,6 +43,21 @@
light_range = 3
light_color = "#557733"
+/obj/structure/diona/bulb/unpowered
+ name = "unpowered glow bulb"
+ desc = "A bulb of some sort. Seems like it needs some power."
+ description_info = "This bulb requires a power cell to glow. Click on it with a power cell in hand to plug it in."
+ light_power = 0
+ light_range = 0
+
+/obj/structure/diona/bulb/unpowered/attackby(obj/item/W, mob/user)
+ if(istype(W, /obj/item/cell))
+ to_chat(user, span("notice", "You jack the power cell into the glow bulb."))
+ new /obj/structure/diona/bulb(get_turf(src))
+ qdel(W)
+ qdel(src)
+ ..()
+
/datum/random_map/automata/diona
iterations = 3
descriptor = "diona gestalt"
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 0239019c23c..b8df7d17c9a 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -186,9 +186,10 @@
/obj/item/reagent_containers/spray/chemsprayer
name = "chem sprayer"
desc = "A utility used to spray large amounts of reagent in a given area."
- icon = 'icons/obj/gun.dmi'
+ icon = 'icons/obj/guns/chemsprayer.dmi'
icon_state = "chemsprayer"
item_state = "chemsprayer"
+ contained_sprite = TRUE
center_of_mass = list("x" = 16,"y" = 16)
throwforce = 3
w_class = 3.0
@@ -219,9 +220,10 @@
/obj/item/reagent_containers/spray/chemsprayer/xenobiology
name = "xenoblaster"
desc = "A child's plastic watergun repurposed for the use in pacifying slimes. Has an adjustable nozzle that controls precision as well as strength."
- icon = 'icons/obj/gun.dmi'
+ icon = 'icons/obj/guns/xenoblaster.dmi'
icon_state = "xenoblaster"
item_state = "xenoblaster"
+ contained_sprite = TRUE
origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINEERING = 1)
volume = 200
spray_size = 3
diff --git a/html/changelog.html b/html/changelog.html
index ebfa2b5ed1e..51df4cf45a6 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -35,6 +35,48 @@
-->
+
01 February 2020
+
Geeves updated:
+
+ - Dionae can now pick Sinta'Azaziba at character selection.
+ - Brig Timers now announce when they end to Sec Huds.
+ - Fixed HeadRevs not having access to the Revolution catagory.
+ - Biomass is now less strong.
+ - Diona have gotten a ton of minor code improvements, using their abilities should now be a little sane.
+ - Diona nymphs don't have to be whitelisted to grow until a full diona now. Administrative action will be taken if this right is abused.
+ - Diona gestalts can now use their biomass / arms to create biomass structures.
+ - Removed nymphs' ability to open biomass walls. It was buggy.
+ - Nymphs can now be holstered and worn on the ear slots.
+
+
Goret updated:
+
+ - Upon breaking, borosilicate glass will now make borosilicate shards.
+
+
YourDaddy117 updated:
+
+ - Adds a fur-lined green trenchcoat.
+
+
mikomyazaki updated:
+
+ - Hardsuit mounted weaponry no longer have safeties, that weren't possible to disable.
+
+
+
31 January 2020
+
Geeves updated:
+
+ - All the gun sprites have been moved into seperate files, this has no user-facing change, but will likely result in some sprites being missing. Please report missing sprites to Github.
+ - The double barrel shotgun can now be wielded.
+
+
Goret updated:
+
+ - The medical briefing room has been modified. Surgeons should now spawn inside it.
+
+
NewOriginalSchwann updated:
+
+ - Re-added the old aviator sprites, now with fancy off states!
+ - Removed the updated aviator sprites.
+
+
30 January 2020
Alberyk updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 91ccc1875c6..240bed4694f 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -11567,3 +11567,35 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
mikomyazaki:
- bugfix: Limb attachment surgery now checks for presence of a suitable organ to
attach it to.
+2020-01-31:
+ Geeves:
+ - backend: All the gun sprites have been moved into seperate files, this has no
+ user-facing change, but will likely result in some sprites being missing. Please
+ report missing sprites to Github.
+ - rscadd: The double barrel shotgun can now be wielded.
+ Goret:
+ - maptweak: The medical briefing room has been modified. Surgeons should now spawn
+ inside it.
+ NewOriginalSchwann:
+ - rscadd: Re-added the old aviator sprites, now with fancy off states!
+ - rscdel: Removed the updated aviator sprites.
+2020-02-01:
+ Geeves:
+ - rscadd: Dionae can now pick Sinta'Azaziba at character selection.
+ - rscadd: Brig Timers now announce when they end to Sec Huds.
+ - bugfix: Fixed HeadRevs not having access to the Revolution catagory.
+ - tweak: Biomass is now less strong.
+ - tweak: Diona have gotten a ton of minor code improvements, using their abilities
+ should now be a little sane.
+ - tweak: Diona nymphs don't have to be whitelisted to grow until a full diona now.
+ Administrative action will be taken if this right is abused.
+ - rscadd: Diona gestalts can now use their biomass / arms to create biomass structures.
+ - rscdel: Removed nymphs' ability to open biomass walls. It was buggy.
+ - tweak: Nymphs can now be holstered and worn on the ear slots.
+ Goret:
+ - bugfix: Upon breaking, borosilicate glass will now make borosilicate shards.
+ YourDaddy117:
+ - imageadd: Adds a fur-lined green trenchcoat.
+ mikomyazaki:
+ - bugfix: Hardsuit mounted weaponry no longer have safeties, that weren't possible
+ to disable.
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index 165f6e67185..ceee6588d55 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index 1f927efc4e8..fc55ad43430 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/belt_mirror.dmi b/icons/mob/belt_mirror.dmi
index a55fc18e9c3..ca99bb5dc20 100644
Binary files a/icons/mob/belt_mirror.dmi and b/icons/mob/belt_mirror.dmi differ
diff --git a/icons/mob/diona.dmi b/icons/mob/diona.dmi
index 9ae5dbbac94..267b5ec4817 100644
Binary files a/icons/mob/diona.dmi and b/icons/mob/diona.dmi differ
diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi
index 1092d9ad9d3..e77e822e7cb 100644
Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index 2adf7f22142..4869be25ea4 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi
deleted file mode 100644
index 8de3324dcaa..00000000000
Binary files a/icons/mob/items/lefthand_guns.dmi and /dev/null differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index ee82e961bf8..94de5a488be 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi
deleted file mode 100644
index 640ec1aa15f..00000000000
Binary files a/icons/mob/items/righthand_guns.dmi and /dev/null differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 94b3cfafd0c..a40c4e51c96 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi
index 6770f2ebec5..f38c925f22b 100644
Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 70e8f919d65..a8c6d892a6d 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
deleted file mode 100644
index 75ad662df86..00000000000
Binary files a/icons/obj/gun.dmi and /dev/null differ
diff --git a/icons/obj/guns/adhomian_heavy_pistol.dmi b/icons/obj/guns/adhomian_heavy_pistol.dmi
new file mode 100644
index 00000000000..9c4b26510af
Binary files /dev/null and b/icons/obj/guns/adhomian_heavy_pistol.dmi differ
diff --git a/icons/obj/guns/adhomian_pistol.dmi b/icons/obj/guns/adhomian_pistol.dmi
new file mode 100644
index 00000000000..aca4c0d9338
Binary files /dev/null and b/icons/obj/guns/adhomian_pistol.dmi differ
diff --git a/icons/obj/guns/adhomian_revolver.dmi b/icons/obj/guns/adhomian_revolver.dmi
new file mode 100644
index 00000000000..3064b6a1686
Binary files /dev/null and b/icons/obj/guns/adhomian_revolver.dmi differ
diff --git a/icons/obj/guns/arifle.dmi b/icons/obj/guns/arifle.dmi
new file mode 100644
index 00000000000..f98364d755c
Binary files /dev/null and b/icons/obj/guns/arifle.dmi differ
diff --git a/icons/obj/guns/assaultshotgun.dmi b/icons/obj/guns/assaultshotgun.dmi
new file mode 100644
index 00000000000..53bbde7c40c
Binary files /dev/null and b/icons/obj/guns/assaultshotgun.dmi differ
diff --git a/icons/obj/guns/battlerifle.dmi b/icons/obj/guns/battlerifle.dmi
new file mode 100644
index 00000000000..15e07b545ed
Binary files /dev/null and b/icons/obj/guns/battlerifle.dmi differ
diff --git a/icons/obj/guns/bayonet.dmi b/icons/obj/guns/bayonet.dmi
new file mode 100644
index 00000000000..fce54c1264c
Binary files /dev/null and b/icons/obj/guns/bayonet.dmi differ
diff --git a/icons/obj/guns/bfg.dmi b/icons/obj/guns/bfg.dmi
new file mode 100644
index 00000000000..0c1d35ceb97
Binary files /dev/null and b/icons/obj/guns/bfg.dmi differ
diff --git a/icons/obj/guns/blaster.dmi b/icons/obj/guns/blaster.dmi
new file mode 100644
index 00000000000..35351eaa729
Binary files /dev/null and b/icons/obj/guns/blaster.dmi differ
diff --git a/icons/obj/guns/blaster_carbine.dmi b/icons/obj/guns/blaster_carbine.dmi
new file mode 100644
index 00000000000..62e24a5c25f
Binary files /dev/null and b/icons/obj/guns/blaster_carbine.dmi differ
diff --git a/icons/obj/guns/blaster_pistol.dmi b/icons/obj/guns/blaster_pistol.dmi
new file mode 100644
index 00000000000..e45921e2ada
Binary files /dev/null and b/icons/obj/guns/blaster_pistol.dmi differ
diff --git a/icons/obj/guns/blaster_revolver.dmi b/icons/obj/guns/blaster_revolver.dmi
new file mode 100644
index 00000000000..88145cd88db
Binary files /dev/null and b/icons/obj/guns/blaster_revolver.dmi differ
diff --git a/icons/obj/guns/blaster_rifle.dmi b/icons/obj/guns/blaster_rifle.dmi
new file mode 100644
index 00000000000..d9b4e838be2
Binary files /dev/null and b/icons/obj/guns/blaster_rifle.dmi differ
diff --git a/icons/obj/guns/blockbuster.dmi b/icons/obj/guns/blockbuster.dmi
new file mode 100644
index 00000000000..fdb5a1e04e4
Binary files /dev/null and b/icons/obj/guns/blockbuster.dmi differ
diff --git a/icons/obj/guns/bluetag.dmi b/icons/obj/guns/bluetag.dmi
new file mode 100644
index 00000000000..30c079c5e34
Binary files /dev/null and b/icons/obj/guns/bluetag.dmi differ
diff --git a/icons/obj/guns/bolter.dmi b/icons/obj/guns/bolter.dmi
new file mode 100644
index 00000000000..de43248fed9
Binary files /dev/null and b/icons/obj/guns/bolter.dmi differ
diff --git a/icons/obj/guns/c05r.dmi b/icons/obj/guns/c05r.dmi
new file mode 100644
index 00000000000..a6281f45a96
Binary files /dev/null and b/icons/obj/guns/c05r.dmi differ
diff --git a/icons/obj/guns/c20r.dmi b/icons/obj/guns/c20r.dmi
new file mode 100644
index 00000000000..5b3c04bbd00
Binary files /dev/null and b/icons/obj/guns/c20r.dmi differ
diff --git a/icons/obj/guns/cannon.dmi b/icons/obj/guns/cannon.dmi
new file mode 100644
index 00000000000..06619d13339
Binary files /dev/null and b/icons/obj/guns/cannon.dmi differ
diff --git a/icons/obj/guns/capgun.dmi b/icons/obj/guns/capgun.dmi
new file mode 100644
index 00000000000..f4c9823a013
Binary files /dev/null and b/icons/obj/guns/capgun.dmi differ
diff --git a/icons/obj/guns/caplaser.dmi b/icons/obj/guns/caplaser.dmi
new file mode 100644
index 00000000000..be6376d57d3
Binary files /dev/null and b/icons/obj/guns/caplaser.dmi differ
diff --git a/icons/obj/guns/carbine.dmi b/icons/obj/guns/carbine.dmi
new file mode 100644
index 00000000000..f3014b1cdb1
Binary files /dev/null and b/icons/obj/guns/carbine.dmi differ
diff --git a/icons/obj/guns/chemsprayer.dmi b/icons/obj/guns/chemsprayer.dmi
new file mode 100644
index 00000000000..cc488f63d63
Binary files /dev/null and b/icons/obj/guns/chemsprayer.dmi differ
diff --git a/icons/obj/guns/colt.dmi b/icons/obj/guns/colt.dmi
new file mode 100644
index 00000000000..e7636654b31
Binary files /dev/null and b/icons/obj/guns/colt.dmi differ
diff --git a/icons/obj/guns/crossbow.dmi b/icons/obj/guns/crossbow.dmi
new file mode 100644
index 00000000000..61825a111fd
Binary files /dev/null and b/icons/obj/guns/crossbow.dmi differ
diff --git a/icons/obj/guns/cshotgun.dmi b/icons/obj/guns/cshotgun.dmi
new file mode 100644
index 00000000000..f613533f17f
Binary files /dev/null and b/icons/obj/guns/cshotgun.dmi differ
diff --git a/icons/obj/guns/dartgun.dmi b/icons/obj/guns/dartgun.dmi
new file mode 100644
index 00000000000..1176e294cf2
Binary files /dev/null and b/icons/obj/guns/dartgun.dmi differ
diff --git a/icons/obj/guns/deagle.dmi b/icons/obj/guns/deagle.dmi
new file mode 100644
index 00000000000..5bb38ee07cb
Binary files /dev/null and b/icons/obj/guns/deagle.dmi differ
diff --git a/icons/obj/guns/deckard.dmi b/icons/obj/guns/deckard.dmi
new file mode 100644
index 00000000000..d17257c9713
Binary files /dev/null and b/icons/obj/guns/deckard.dmi differ
diff --git a/icons/obj/guns/decloner.dmi b/icons/obj/guns/decloner.dmi
new file mode 100644
index 00000000000..4c55c825986
Binary files /dev/null and b/icons/obj/guns/decloner.dmi differ
diff --git a/icons/obj/guns/derringer.dmi b/icons/obj/guns/derringer.dmi
new file mode 100644
index 00000000000..950773ced64
Binary files /dev/null and b/icons/obj/guns/derringer.dmi differ
diff --git a/icons/obj/guns/detective.dmi b/icons/obj/guns/detective.dmi
new file mode 100644
index 00000000000..268aed9823c
Binary files /dev/null and b/icons/obj/guns/detective.dmi differ
diff --git a/icons/obj/guns/dragunov.dmi b/icons/obj/guns/dragunov.dmi
new file mode 100644
index 00000000000..3dc29f53aea
Binary files /dev/null and b/icons/obj/guns/dragunov.dmi differ
diff --git a/icons/obj/guns/dshotgun.dmi b/icons/obj/guns/dshotgun.dmi
new file mode 100644
index 00000000000..aefe0dc72ad
Binary files /dev/null and b/icons/obj/guns/dshotgun.dmi differ
diff --git a/icons/obj/guns/ecarbine.dmi b/icons/obj/guns/ecarbine.dmi
new file mode 100644
index 00000000000..f24fd6152d4
Binary files /dev/null and b/icons/obj/guns/ecarbine.dmi differ
diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi
new file mode 100644
index 00000000000..de8582d8484
Binary files /dev/null and b/icons/obj/guns/energy.dmi differ
diff --git a/icons/obj/guns/epistol.dmi b/icons/obj/guns/epistol.dmi
new file mode 100644
index 00000000000..b62a760a8de
Binary files /dev/null and b/icons/obj/guns/epistol.dmi differ
diff --git a/icons/obj/guns/erifle.dmi b/icons/obj/guns/erifle.dmi
new file mode 100644
index 00000000000..9f16ed2a8af
Binary files /dev/null and b/icons/obj/guns/erifle.dmi differ
diff --git a/icons/obj/guns/flechette.dmi b/icons/obj/guns/flechette.dmi
new file mode 100644
index 00000000000..596d1610f9a
Binary files /dev/null and b/icons/obj/guns/flechette.dmi differ
diff --git a/icons/obj/guns/flora.dmi b/icons/obj/guns/flora.dmi
new file mode 100644
index 00000000000..998e728667f
Binary files /dev/null and b/icons/obj/guns/flora.dmi differ
diff --git a/icons/obj/guns/freezegun.dmi b/icons/obj/guns/freezegun.dmi
new file mode 100644
index 00000000000..e91f7331765
Binary files /dev/null and b/icons/obj/guns/freezegun.dmi differ
diff --git a/icons/obj/guns/gatling.dmi b/icons/obj/guns/gatling.dmi
new file mode 100644
index 00000000000..8f82eed0f5e
Binary files /dev/null and b/icons/obj/guns/gatling.dmi differ
diff --git a/icons/obj/guns/gauss_thumper.dmi b/icons/obj/guns/gauss_thumper.dmi
new file mode 100644
index 00000000000..ec87c815b73
Binary files /dev/null and b/icons/obj/guns/gauss_thumper.dmi differ
diff --git a/icons/obj/guns/gravity_gun.dmi b/icons/obj/guns/gravity_gun.dmi
new file mode 100644
index 00000000000..fe415a78e94
Binary files /dev/null and b/icons/obj/guns/gravity_gun.dmi differ
diff --git a/icons/obj/guns/grenade_launcher.dmi b/icons/obj/guns/grenade_launcher.dmi
new file mode 100644
index 00000000000..ffaa9ca4459
Binary files /dev/null and b/icons/obj/guns/grenade_launcher.dmi differ
diff --git a/icons/obj/gun_gui.dmi b/icons/obj/guns/gun_gui.dmi
similarity index 100%
rename from icons/obj/gun_gui.dmi
rename to icons/obj/guns/gun_gui.dmi
diff --git a/icons/obj/guns/gyropistol.dmi b/icons/obj/guns/gyropistol.dmi
new file mode 100644
index 00000000000..fe778d1f3a2
Binary files /dev/null and b/icons/obj/guns/gyropistol.dmi differ
diff --git a/icons/obj/guns/gyrorifle.dmi b/icons/obj/guns/gyrorifle.dmi
new file mode 100644
index 00000000000..ceefdd76b9a
Binary files /dev/null and b/icons/obj/guns/gyrorifle.dmi differ
diff --git a/icons/obj/guns/harpoon.dmi b/icons/obj/guns/harpoon.dmi
new file mode 100644
index 00000000000..6b4fdbd04e4
Binary files /dev/null and b/icons/obj/guns/harpoon.dmi differ
diff --git a/icons/obj/guns/heavyprotogun.dmi b/icons/obj/guns/heavyprotogun.dmi
new file mode 100644
index 00000000000..1dba3179ce9
Binary files /dev/null and b/icons/obj/guns/heavyprotogun.dmi differ
diff --git a/icons/obj/guns/heavysniper.dmi b/icons/obj/guns/heavysniper.dmi
new file mode 100644
index 00000000000..9559da6a424
Binary files /dev/null and b/icons/obj/guns/heavysniper.dmi differ
diff --git a/icons/obj/guns/hegemony_pistol.dmi b/icons/obj/guns/hegemony_pistol.dmi
new file mode 100644
index 00000000000..f21240a9ccb
Binary files /dev/null and b/icons/obj/guns/hegemony_pistol.dmi differ
diff --git a/icons/obj/guns/icelance.dmi b/icons/obj/guns/icelance.dmi
new file mode 100644
index 00000000000..debb5a742d2
Binary files /dev/null and b/icons/obj/guns/icelance.dmi differ
diff --git a/icons/obj/guns/incinerator.dmi b/icons/obj/guns/incinerator.dmi
new file mode 100644
index 00000000000..e84c469a42f
Binary files /dev/null and b/icons/obj/guns/incinerator.dmi differ
diff --git a/icons/obj/guns/ionrifle.dmi b/icons/obj/guns/ionrifle.dmi
new file mode 100644
index 00000000000..71007751951
Binary files /dev/null and b/icons/obj/guns/ionrifle.dmi differ
diff --git a/icons/obj/guns/ipistol.dmi b/icons/obj/guns/ipistol.dmi
new file mode 100644
index 00000000000..29f4cfbc693
Binary files /dev/null and b/icons/obj/guns/ipistol.dmi differ
diff --git a/icons/obj/guns/ishotgun.dmi b/icons/obj/guns/ishotgun.dmi
new file mode 100644
index 00000000000..04f667c24b0
Binary files /dev/null and b/icons/obj/guns/ishotgun.dmi differ
diff --git a/icons/obj/guns/ishotgunsawn.dmi b/icons/obj/guns/ishotgunsawn.dmi
new file mode 100644
index 00000000000..fd601ca5acf
Binary files /dev/null and b/icons/obj/guns/ishotgunsawn.dmi differ
diff --git a/icons/obj/guns/ismg.dmi b/icons/obj/guns/ismg.dmi
new file mode 100644
index 00000000000..3839830ae61
Binary files /dev/null and b/icons/obj/guns/ismg.dmi differ
diff --git a/icons/obj/guns/l6.dmi b/icons/obj/guns/l6.dmi
new file mode 100644
index 00000000000..c6f0f4c4346
Binary files /dev/null and b/icons/obj/guns/l6.dmi differ
diff --git a/icons/obj/guns/lasercannon.dmi b/icons/obj/guns/lasercannon.dmi
new file mode 100644
index 00000000000..a43592263f6
Binary files /dev/null and b/icons/obj/guns/lasercannon.dmi differ
diff --git a/icons/obj/guns/laserrifle.dmi b/icons/obj/guns/laserrifle.dmi
new file mode 100644
index 00000000000..a80044bfc82
Binary files /dev/null and b/icons/obj/guns/laserrifle.dmi differ
diff --git a/icons/obj/guns/lawgiver.dmi b/icons/obj/guns/lawgiver.dmi
new file mode 100644
index 00000000000..d87fe15d2cc
Binary files /dev/null and b/icons/obj/guns/lawgiver.dmi differ
diff --git a/icons/obj/guns/lemat.dmi b/icons/obj/guns/lemat.dmi
new file mode 100644
index 00000000000..03a44b0f63e
Binary files /dev/null and b/icons/obj/guns/lemat.dmi differ
diff --git a/icons/obj/guns/leyon.dmi b/icons/obj/guns/leyon.dmi
new file mode 100644
index 00000000000..c3816cf34e5
Binary files /dev/null and b/icons/obj/guns/leyon.dmi differ
diff --git a/icons/obj/guns/m1911.dmi b/icons/obj/guns/m1911.dmi
new file mode 100644
index 00000000000..a3089d9d0da
Binary files /dev/null and b/icons/obj/guns/m1911.dmi differ
diff --git a/icons/obj/guns/m8.dmi b/icons/obj/guns/m8.dmi
new file mode 100644
index 00000000000..c414e875ad4
Binary files /dev/null and b/icons/obj/guns/m8.dmi differ
diff --git a/icons/obj/guns/malella.dmi b/icons/obj/guns/malella.dmi
new file mode 100644
index 00000000000..f29e002bc38
Binary files /dev/null and b/icons/obj/guns/malella.dmi differ
diff --git a/icons/obj/guns/mateba.dmi b/icons/obj/guns/mateba.dmi
new file mode 100644
index 00000000000..b85fabc2cda
Binary files /dev/null and b/icons/obj/guns/mateba.dmi differ
diff --git a/icons/obj/guns/mental_focus.dmi b/icons/obj/guns/mental_focus.dmi
new file mode 100644
index 00000000000..7f9a17cefa1
Binary files /dev/null and b/icons/obj/guns/mental_focus.dmi differ
diff --git a/icons/obj/guns/meteor_gun.dmi b/icons/obj/guns/meteor_gun.dmi
new file mode 100644
index 00000000000..0db9f9ab274
Binary files /dev/null and b/icons/obj/guns/meteor_gun.dmi differ
diff --git a/icons/obj/guns/mini-uzi.dmi b/icons/obj/guns/mini-uzi.dmi
new file mode 100644
index 00000000000..8f8e67b7e2d
Binary files /dev/null and b/icons/obj/guns/mini-uzi.dmi differ
diff --git a/icons/obj/guns/moistnugget.dmi b/icons/obj/guns/moistnugget.dmi
new file mode 100644
index 00000000000..813e7b0f7f6
Binary files /dev/null and b/icons/obj/guns/moistnugget.dmi differ
diff --git a/icons/obj/guns/netgun.dmi b/icons/obj/guns/netgun.dmi
new file mode 100644
index 00000000000..1b2b8ea600c
Binary files /dev/null and b/icons/obj/guns/netgun.dmi differ
diff --git a/icons/obj/guns/noisecannon.dmi b/icons/obj/guns/noisecannon.dmi
new file mode 100644
index 00000000000..1a31d5abb4d
Binary files /dev/null and b/icons/obj/guns/noisecannon.dmi differ
diff --git a/icons/obj/guns/nucgun.dmi b/icons/obj/guns/nucgun.dmi
new file mode 100644
index 00000000000..53f16d6e14b
Binary files /dev/null and b/icons/obj/guns/nucgun.dmi differ
diff --git a/icons/obj/guns/obrez.dmi b/icons/obj/guns/obrez.dmi
new file mode 100644
index 00000000000..70e576258e0
Binary files /dev/null and b/icons/obj/guns/obrez.dmi differ
diff --git a/icons/obj/guns/oldenergy.dmi b/icons/obj/guns/oldenergy.dmi
new file mode 100644
index 00000000000..8f40f1d670e
Binary files /dev/null and b/icons/obj/guns/oldenergy.dmi differ
diff --git a/icons/obj/guns/oldlaser.dmi b/icons/obj/guns/oldlaser.dmi
new file mode 100644
index 00000000000..471ab78b6e3
Binary files /dev/null and b/icons/obj/guns/oldlaser.dmi differ
diff --git a/icons/obj/guns/overunder.dmi b/icons/obj/guns/overunder.dmi
new file mode 100644
index 00000000000..13185c47188
Binary files /dev/null and b/icons/obj/guns/overunder.dmi differ
diff --git a/icons/obj/guns/p08.dmi b/icons/obj/guns/p08.dmi
new file mode 100644
index 00000000000..06eae2d0c8e
Binary files /dev/null and b/icons/obj/guns/p08.dmi differ
diff --git a/icons/obj/guns/pestishock.dmi b/icons/obj/guns/pestishock.dmi
new file mode 100644
index 00000000000..1622e3ea062
Binary files /dev/null and b/icons/obj/guns/pestishock.dmi differ
diff --git a/icons/obj/guns/pistol.dmi b/icons/obj/guns/pistol.dmi
new file mode 100644
index 00000000000..3e3f599138f
Binary files /dev/null and b/icons/obj/guns/pistol.dmi differ
diff --git a/icons/obj/guns/pneumatic.dmi b/icons/obj/guns/pneumatic.dmi
new file mode 100644
index 00000000000..841bc5e6dc8
Binary files /dev/null and b/icons/obj/guns/pneumatic.dmi differ
diff --git a/icons/obj/guns/pockrifle.dmi b/icons/obj/guns/pockrifle.dmi
new file mode 100644
index 00000000000..4c123aefda5
Binary files /dev/null and b/icons/obj/guns/pockrifle.dmi differ
diff --git a/icons/obj/guns/poweredcrossbow.dmi b/icons/obj/guns/poweredcrossbow.dmi
new file mode 100644
index 00000000000..460ae685287
Binary files /dev/null and b/icons/obj/guns/poweredcrossbow.dmi differ
diff --git a/icons/obj/guns/pulse.dmi b/icons/obj/guns/pulse.dmi
new file mode 100644
index 00000000000..2bc562f396d
Binary files /dev/null and b/icons/obj/guns/pulse.dmi differ
diff --git a/icons/obj/guns/pulse_carbine.dmi b/icons/obj/guns/pulse_carbine.dmi
new file mode 100644
index 00000000000..ed8cf482db5
Binary files /dev/null and b/icons/obj/guns/pulse_carbine.dmi differ
diff --git a/icons/obj/guns/pulse_pistol.dmi b/icons/obj/guns/pulse_pistol.dmi
new file mode 100644
index 00000000000..355fb6210ca
Binary files /dev/null and b/icons/obj/guns/pulse_pistol.dmi differ
diff --git a/icons/obj/guns/railgun.dmi b/icons/obj/guns/railgun.dmi
new file mode 100644
index 00000000000..6b9c1c85347
Binary files /dev/null and b/icons/obj/guns/railgun.dmi differ
diff --git a/icons/obj/guns/redtag.dmi b/icons/obj/guns/redtag.dmi
new file mode 100644
index 00000000000..5ce5c9f5974
Binary files /dev/null and b/icons/obj/guns/redtag.dmi differ
diff --git a/icons/obj/guns/retro.dmi b/icons/obj/guns/retro.dmi
new file mode 100644
index 00000000000..f0b1b288664
Binary files /dev/null and b/icons/obj/guns/retro.dmi differ
diff --git a/icons/obj/guns/revolver.dmi b/icons/obj/guns/revolver.dmi
new file mode 100644
index 00000000000..1b26c1a7652
Binary files /dev/null and b/icons/obj/guns/revolver.dmi differ
diff --git a/icons/obj/guns/rocket.dmi b/icons/obj/guns/rocket.dmi
new file mode 100644
index 00000000000..e00397f05a4
Binary files /dev/null and b/icons/obj/guns/rocket.dmi differ
diff --git a/icons/obj/guns/rxb.dmi b/icons/obj/guns/rxb.dmi
new file mode 100644
index 00000000000..9e801b4b90c
Binary files /dev/null and b/icons/obj/guns/rxb.dmi differ
diff --git a/icons/obj/guns/saber.dmi b/icons/obj/guns/saber.dmi
new file mode 100644
index 00000000000..15784783c34
Binary files /dev/null and b/icons/obj/guns/saber.dmi differ
diff --git a/icons/obj/guns/sawnshotgun.dmi b/icons/obj/guns/sawnshotgun.dmi
new file mode 100644
index 00000000000..0fe04d3ff34
Binary files /dev/null and b/icons/obj/guns/sawnshotgun.dmi differ
diff --git a/icons/obj/guns/secgun.dmi b/icons/obj/guns/secgun.dmi
new file mode 100644
index 00000000000..aba12402ae3
Binary files /dev/null and b/icons/obj/guns/secgun.dmi differ
diff --git a/icons/obj/guns/secgun_wood.dmi b/icons/obj/guns/secgun_wood.dmi
new file mode 100644
index 00000000000..a6d2cf7efc9
Binary files /dev/null and b/icons/obj/guns/secgun_wood.dmi differ
diff --git a/icons/obj/guns/shotgun.dmi b/icons/obj/guns/shotgun.dmi
new file mode 100644
index 00000000000..dbc6bf88dc0
Binary files /dev/null and b/icons/obj/guns/shotgun.dmi differ
diff --git a/icons/obj/guns/silenced_pistol.dmi b/icons/obj/guns/silenced_pistol.dmi
new file mode 100644
index 00000000000..73fc9a01203
Binary files /dev/null and b/icons/obj/guns/silenced_pistol.dmi differ
diff --git a/icons/obj/guns/slammer.dmi b/icons/obj/guns/slammer.dmi
new file mode 100644
index 00000000000..9fff8bdd841
Binary files /dev/null and b/icons/obj/guns/slammer.dmi differ
diff --git a/icons/obj/guns/sniper.dmi b/icons/obj/guns/sniper.dmi
new file mode 100644
index 00000000000..3c464b58b0a
Binary files /dev/null and b/icons/obj/guns/sniper.dmi differ
diff --git a/icons/obj/guns/spikethrower.dmi b/icons/obj/guns/spikethrower.dmi
new file mode 100644
index 00000000000..9a78a80e05e
Binary files /dev/null and b/icons/obj/guns/spikethrower.dmi differ
diff --git a/icons/obj/guns/springfield.dmi b/icons/obj/guns/springfield.dmi
new file mode 100644
index 00000000000..f6fd93bf296
Binary files /dev/null and b/icons/obj/guns/springfield.dmi differ
diff --git a/icons/obj/guns/staff_of_chaos.dmi b/icons/obj/guns/staff_of_chaos.dmi
new file mode 100644
index 00000000000..f66a4b1f304
Binary files /dev/null and b/icons/obj/guns/staff_of_chaos.dmi differ
diff --git a/icons/obj/guns/staffofchange.dmi b/icons/obj/guns/staffofchange.dmi
new file mode 100644
index 00000000000..c31c7b15df1
Binary files /dev/null and b/icons/obj/guns/staffofchange.dmi differ
diff --git a/icons/obj/guns/stunrevolver.dmi b/icons/obj/guns/stunrevolver.dmi
new file mode 100644
index 00000000000..8d3be6c5a83
Binary files /dev/null and b/icons/obj/guns/stunrevolver.dmi differ
diff --git a/icons/obj/guns/syringegun.dmi b/icons/obj/guns/syringegun.dmi
new file mode 100644
index 00000000000..0d1c78b4575
Binary files /dev/null and b/icons/obj/guns/syringegun.dmi differ
diff --git a/icons/obj/guns/taser.dmi b/icons/obj/guns/taser.dmi
new file mode 100644
index 00000000000..3dd153744b9
Binary files /dev/null and b/icons/obj/guns/taser.dmi differ
diff --git a/icons/obj/guns/taserold.dmi b/icons/obj/guns/taserold.dmi
new file mode 100644
index 00000000000..4ce4c34678b
Binary files /dev/null and b/icons/obj/guns/taserold.dmi differ
diff --git a/icons/obj/guns/tesla.dmi b/icons/obj/guns/tesla.dmi
new file mode 100644
index 00000000000..f559b7d8ebc
Binary files /dev/null and b/icons/obj/guns/tesla.dmi differ
diff --git a/icons/obj/guns/tommygun.dmi b/icons/obj/guns/tommygun.dmi
new file mode 100644
index 00000000000..0eeaade7251
Binary files /dev/null and b/icons/obj/guns/tommygun.dmi differ
diff --git a/icons/obj/guns/toxgun.dmi b/icons/obj/guns/toxgun.dmi
new file mode 100644
index 00000000000..91588750bac
Binary files /dev/null and b/icons/obj/guns/toxgun.dmi differ
diff --git a/icons/obj/guns/tranqsniper.dmi b/icons/obj/guns/tranqsniper.dmi
new file mode 100644
index 00000000000..524d03615aa
Binary files /dev/null and b/icons/obj/guns/tranqsniper.dmi differ
diff --git a/icons/obj/guns/usp.dmi b/icons/obj/guns/usp.dmi
new file mode 100644
index 00000000000..a070e6466fa
Binary files /dev/null and b/icons/obj/guns/usp.dmi differ
diff --git a/icons/obj/guns/w556.dmi b/icons/obj/guns/w556.dmi
new file mode 100644
index 00000000000..93e956e0501
Binary files /dev/null and b/icons/obj/guns/w556.dmi differ
diff --git a/icons/obj/guns/wt550.dmi b/icons/obj/guns/wt550.dmi
new file mode 100644
index 00000000000..f9eb6b1e47d
Binary files /dev/null and b/icons/obj/guns/wt550.dmi differ
diff --git a/icons/obj/guns/x9.dmi b/icons/obj/guns/x9.dmi
new file mode 100644
index 00000000000..cff4416d10b
Binary files /dev/null and b/icons/obj/guns/x9.dmi differ
diff --git a/icons/obj/guns/xenoblaster.dmi b/icons/obj/guns/xenoblaster.dmi
new file mode 100644
index 00000000000..2b82a7624d5
Binary files /dev/null and b/icons/obj/guns/xenoblaster.dmi differ
diff --git a/icons/obj/guns/xray.dmi b/icons/obj/guns/xray.dmi
new file mode 100644
index 00000000000..14f7a0501dc
Binary files /dev/null and b/icons/obj/guns/xray.dmi differ
diff --git a/icons/obj/guns/xrifle.dmi b/icons/obj/guns/xrifle.dmi
new file mode 100644
index 00000000000..208b4057696
Binary files /dev/null and b/icons/obj/guns/xrifle.dmi differ
diff --git a/icons/obj/guns/zipgun.dmi b/icons/obj/guns/zipgun.dmi
new file mode 100644
index 00000000000..a5ca54c26ac
Binary files /dev/null and b/icons/obj/guns/zipgun.dmi differ
diff --git a/icons/obj/improvised.dmi b/icons/obj/improvised.dmi
index f4262ef321b..5e24d2cbff2 100644
Binary files a/icons/obj/improvised.dmi and b/icons/obj/improvised.dmi differ
diff --git a/icons/obj/terminator.dmi b/icons/obj/terminator.dmi
index 1b4ae17dd24..7fa716effec 100644
Binary files a/icons/obj/terminator.dmi and b/icons/obj/terminator.dmi differ
diff --git a/icons/obj/wands.dmi b/icons/obj/wands.dmi
index e58aeb32c12..00698045ffe 100644
Binary files a/icons/obj/wands.dmi and b/icons/obj/wands.dmi differ
diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi
index 4e18dcf7026..48acaca22f5 100644
Binary files a/icons/obj/wizard.dmi and b/icons/obj/wizard.dmi differ
diff --git a/icons/turf/smooth/diona_wall.dmi b/icons/turf/smooth/diona_wall.dmi
index e7a7abd08d8..81052baa19b 100644
Binary files a/icons/turf/smooth/diona_wall.dmi and b/icons/turf/smooth/diona_wall.dmi differ
diff --git a/icons/turf/wall_masks.dmi b/icons/turf/wall_masks.dmi
index 093f30775c7..4746e3e72b2 100644
Binary files a/icons/turf/wall_masks.dmi and b/icons/turf/wall_masks.dmi differ
diff --git a/maps/aurora/aurora-3_sublevel.dmm b/maps/aurora/aurora-3_sublevel.dmm
index cefb9729014..d5045738b66 100644
--- a/maps/aurora/aurora-3_sublevel.dmm
+++ b/maps/aurora/aurora-3_sublevel.dmm
@@ -24118,7 +24118,8 @@
/turf/simulated/floor/tiled,
/area/medical/medbay4)
"aWB" = (
-/obj/effect/floor_decal/corner/lime{
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
dir = 6
},
/turf/simulated/floor/tiled,
@@ -24128,16 +24129,17 @@
name = "Station Intercom (General)";
pixel_y = 22
},
-/obj/effect/floor_decal/corner/lime/full{
+/obj/structure/flora/pottedplant/random,
+/obj/effect/floor_decal/corner/green{
icon_state = "corner_white_full";
dir = 8
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aWD" = (
-/obj/effect/floor_decal/corner/lime{
+/obj/effect/floor_decal/corner/green{
icon_state = "corner_white";
- dir = 1
+ dir = 5
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
@@ -24145,22 +24147,23 @@
/obj/structure/noticeboard{
pixel_y = 32
},
-/obj/machinery/light{
- dir = 1;
- icon_state = "tube1";
- pixel_y = 0
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 5
},
-/obj/effect/floor_decal/corner/lime/diagonal,
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aWF" = (
-/obj/structure/bed/chair/office/light,
-/obj/effect/landmark/start{
- name = "Chief Medical Officer"
+/obj/structure/bed/chair/office{
+ icon_state = "chair_preview";
+ dir = 8
},
-/obj/effect/floor_decal/corner/lime{
+/obj/effect/landmark/start{
+ name = "Paramedic"
+ },
+/obj/effect/floor_decal/corner/green{
icon_state = "corner_white";
- dir = 4
+ dir = 5
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
@@ -24168,9 +24171,9 @@
/obj/structure/sign/greencross{
pixel_y = 32
},
-/obj/effect/floor_decal/corner/lime/full{
- icon_state = "corner_white_full";
- dir = 1
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 5
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
@@ -24309,7 +24312,8 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
-/obj/effect/floor_decal/corner/lime{
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
dir = 6
},
/turf/simulated/floor/tiled,
@@ -24335,39 +24339,54 @@
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
},
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 9
+ },
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aXn" = (
+/obj/effect/floor_decal/corner/lime/diagonal,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/hidden/supply{
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
+"aXo" = (
+/obj/effect/floor_decal/corner/lime/diagonal,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 10
},
-/obj/effect/floor_decal/corner/lime/diagonal,
-/turf/simulated/floor/tiled/white,
-/area/medical/medbay4)
-"aXo" = (
-/obj/structure/table/glass,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 4
- },
-/obj/effect/floor_decal/corner/lime/diagonal,
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aXp" = (
-/obj/structure/table/glass,
-/obj/item/folder/white,
-/obj/item/pen,
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- dir = 10
+/obj/structure/bed/chair/office{
+ icon_state = "chair_preview";
+ dir = 8
},
/obj/effect/floor_decal/corner/lime/diagonal,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 4
+ },
+/obj/effect/landmark/start{
+ name = "Paramedic"
+ },
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aXq" = (
-/obj/structure/table/glass,
-/obj/item/paper_bin,
+/obj/effect/floor_decal/corner/lime/diagonal,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ dir = 10
+ },
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aXy" = (
@@ -24504,19 +24523,6 @@
/obj/effect/floor_decal/corner/lime/diagonal,
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
-"aXN" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
-/obj/effect/floor_decal/corner/lime/diagonal,
-/turf/simulated/floor/tiled/white,
-/area/medical/medbay4)
-"aXO" = (
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- icon_state = "intact-scrubbers";
- dir = 1
- },
-/obj/effect/floor_decal/corner/lime/diagonal,
-/turf/simulated/floor/tiled/white,
-/area/medical/medbay4)
"aXQ" = (
/obj/machinery/atmospherics/pipe/simple/heat_exchanging{
dir = 4
@@ -24615,85 +24621,53 @@
/turf/simulated/floor/tiled/freezer,
/area/crew_quarters/sleep/medical)
"aYk" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/effect/landmark/start{
- name = "Pharmacist"
- },
-/obj/effect/floor_decal/corner/lime{
+/obj/effect/floor_decal/corner/green{
icon_state = "corner_white";
dir = 9
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aYl" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/effect/landmark/start{
- name = "Pharmacist"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/effect/floor_decal/corner/lime/diagonal,
+/obj/item/paper_bin,
+/obj/structure/table/standard,
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aYm" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/effect/landmark/start{
- name = "Psychiatrist"
- },
-/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
- icon_state = "intact-scrubbers";
- dir = 1
+/obj/structure/bed/chair/office{
+ icon_state = "chair_preview";
+ dir = 8
},
/obj/effect/floor_decal/corner/lime/diagonal,
-/turf/simulated/floor/tiled/white,
-/area/medical/medbay4)
-"aYn" = (
-/obj/structure/bed/chair{
- dir = 1
- },
/obj/effect/landmark/start{
- name = "Virologist"
- },
-/obj/effect/floor_decal/corner/lime{
- dir = 6
+ name = "Physician"
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aYz" = (
-/obj/machinery/firealarm/west,
-/obj/effect/floor_decal/corner/lime{
+/obj/effect/landmark/start{
+ name = "Chief Medical Officer"
+ },
+/obj/structure/bed/chair/office/light{
+ dir = 4
+ },
+/obj/effect/floor_decal/corner/green{
icon_state = "corner_white";
dir = 9
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aYA" = (
-/obj/machinery/atmospherics/unary/vent_pump/on{
- dir = 1
- },
-/obj/effect/floor_decal/corner/lime/diagonal,
-/turf/simulated/floor/tiled/white,
-/area/medical/medbay4)
-"aYB" = (
-/obj/machinery/atmospherics/unary/vent_scrubber/on{
- dir = 1
- },
/obj/effect/floor_decal/corner/lime/diagonal,
+/obj/item/folder,
+/obj/item/pen,
+/obj/structure/table/standard,
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aYC" = (
-/obj/machinery/alarm{
- dir = 8;
- icon_state = "alarm0";
- pixel_x = 24
- },
-/obj/effect/floor_decal/corner/lime{
- dir = 6
+/obj/effect/floor_decal/corner/lime/diagonal,
+/obj/machinery/atmospherics/unary/vent_scrubber/on{
+ dir = 1
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
@@ -24724,113 +24698,48 @@
/turf/simulated/floor/plating,
/area/maintenance/research_xenobiology)
"aYQ" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/effect/landmark/start{
- name = "Physician"
- },
-/obj/effect/floor_decal/corner/lime{
- icon_state = "corner_white";
- dir = 9
- },
-/turf/simulated/floor/tiled/white,
-/area/medical/medbay4)
-"aYR" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/effect/landmark/start{
- name = "Physician"
- },
-/obj/effect/floor_decal/corner/lime/diagonal,
-/turf/simulated/floor/tiled/white,
-/area/medical/medbay4)
-"aYT" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/effect/landmark/start{
- name = "Physician"
- },
-/obj/effect/floor_decal/corner/lime{
- dir = 6
- },
-/obj/effect/floor_decal/corner/lime{
- dir = 6
- },
-/turf/simulated/floor/tiled/white,
-/area/medical/medbay4)
-"aZd" = (
/obj/machinery/requests_console{
department = "Medical Bay";
departmentType = 1;
pixel_x = -32;
pixel_y = 0
},
-/obj/effect/floor_decal/corner/lime{
+/obj/effect/floor_decal/corner/green{
icon_state = "corner_white";
dir = 9
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
-"aZe" = (
-/obj/structure/sign/nosmoking_1{
- pixel_x = 32;
- pixel_y = 0
- },
-/obj/effect/floor_decal/corner/lime{
- dir = 6
- },
+"aYR" = (
+/obj/structure/table/standard,
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
-"aZt" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/effect/landmark/start{
- name = "Medical Resident"
- },
-/obj/effect/floor_decal/corner/lime/full,
-/turf/simulated/floor/tiled/white,
-/area/medical/medbay4)
-"aZu" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/effect/landmark/start{
- name = "Medical Resident"
- },
-/obj/effect/floor_decal/corner/lime{
+"aZd" = (
+/obj/effect/floor_decal/corner/green{
icon_state = "corner_white";
+ dir = 9
+ },
+/obj/machinery/light{
dir = 8
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
-"aZv" = (
-/obj/machinery/light,
-/obj/effect/floor_decal/corner/lime/diagonal,
+"aZt" = (
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 9
+ },
+/obj/machinery/firealarm/west,
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"aZw" = (
-/obj/structure/bed/chair{
- dir = 1
+/obj/structure/bed/chair/office{
+ icon_state = "chair_preview";
+ dir = 8
},
+/obj/effect/floor_decal/corner/lime/diagonal,
/obj/effect/landmark/start{
- name = "Paramedic"
- },
-/obj/effect/floor_decal/corner/lime,
-/turf/simulated/floor/tiled/white,
-/area/medical/medbay4)
-"aZx" = (
-/obj/structure/bed/chair{
- dir = 1
- },
-/obj/effect/landmark/start{
- name = "Paramedic"
- },
-/obj/effect/floor_decal/corner/lime/full{
- dir = 4
+ name = "Pharmacist"
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
@@ -25496,12 +25405,10 @@
/turf/simulated/floor/tiled/freezer,
/area/crew_quarters/sleep/medical)
"bbY" = (
-/obj/machinery/camera/network/medbay{
- c_tag = "Medical - Briefing Room";
- dir = 8
- },
-/obj/effect/floor_decal/corner/lime{
- dir = 6
+/obj/effect/floor_decal/corner/lime/diagonal,
+/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
+ icon_state = "intact-scrubbers";
+ dir = 1
},
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
@@ -31299,6 +31206,13 @@
/obj/item/modular_computer/console/preset/medical,
/turf/simulated/floor/tiled/dark,
/area/medical/quarantineaccess)
+"iHK" = (
+/obj/effect/floor_decal/corner/lime/diagonal,
+/obj/machinery/atmospherics/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"iIQ" = (
/obj/effect/floor_decal/industrial/warning/dust,
/obj/machinery/light/small/emergency,
@@ -31401,6 +31315,11 @@
temperature = 278
},
/area/medical/quarantineautopsy)
+"iWa" = (
+/obj/effect/floor_decal/corner/lime/diagonal,
+/obj/machinery/atmospherics/pipe/simple/hidden/supply,
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"iZk" = (
/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
@@ -31792,6 +31711,13 @@
},
/turf/simulated/floor/plating,
/area/outpost/engineering/power)
+"jSu" = (
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 10
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"jVc" = (
/obj/structure/closet{
icon_closed = "cabinet_closed";
@@ -31985,6 +31911,20 @@
},
/turf/simulated/floor/tiled/white,
/area/medical/virologytesting)
+"kwz" = (
+/obj/structure/bed/chair/office{
+ icon_state = "chair_preview";
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Surgeon"
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"kGt" = (
/obj/machinery/light/small/emergency{
icon_state = "bulb1";
@@ -33507,6 +33447,13 @@
},
/turf/simulated/floor/tiled/white,
/area/medical/quarantineaccess)
+"ozn" = (
+/obj/structure/flora/pottedplant/random,
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white_full"
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"oFa" = (
/obj/machinery/airlock_sensor{
id_tag = "research_sensor";
@@ -34529,6 +34476,20 @@
/obj/structure/bookcase/libraryspawn/fiction,
/turf/simulated/floor/carpet,
/area/medical/patient_wing_library)
+"rjC" = (
+/obj/structure/bed/chair/office{
+ icon_state = "chair_preview";
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Pharmacist"
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 10
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"rmO" = (
/obj/structure/table/standard,
/turf/simulated/floor/carpet,
@@ -34688,6 +34649,20 @@
},
/turf/simulated/floor/tiled/white,
/area/medical/virologytesting)
+"rCQ" = (
+/obj/structure/bed/chair/office{
+ icon_state = "chair_preview";
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Virologist"
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"rDB" = (
/obj/structure/bed/chair/office/light{
dir = 1
@@ -35213,6 +35188,20 @@
roof_type = null
},
/area/maintenance/engsublevel)
+"sWS" = (
+/obj/structure/bed/chair/office{
+ icon_state = "chair_preview";
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Medical Resident"
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"sXy" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply{
dir = 4
@@ -35240,10 +35229,13 @@
pixel_x = -26;
pixel_y = 0
},
-/obj/effect/floor_decal/corner/lime{
+/obj/effect/floor_decal/corner/green{
icon_state = "corner_white";
dir = 9
},
+/obj/machinery/light{
+ dir = 8
+ },
/turf/simulated/floor/tiled/white,
/area/medical/medbay4)
"sYz" = (
@@ -35614,6 +35606,20 @@
},
/turf/simulated/floor/tiled/white,
/area/medical/patient_wing_post1)
+"tSk" = (
+/obj/structure/bed/chair/office{
+ icon_state = "chair_preview";
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Psychiatrist"
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 6
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"tSs" = (
/obj/effect/floor_decal/corner/yellow/full{
icon_state = "corner_white_full";
@@ -36405,6 +36411,24 @@
},
/turf/simulated/floor/plating,
/area/rnd/isolation_c)
+"vMS" = (
+/obj/structure/bed/chair/office{
+ icon_state = "chair_preview";
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Medical Resident"
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 6
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 1
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"vPb" = (
/obj/effect/floor_decal/industrial/warning{
dir = 4
@@ -36706,6 +36730,24 @@
},
/turf/simulated/floor/plating,
/area/outpost/engineering/power)
+"wnO" = (
+/obj/structure/bed/chair/office{
+ icon_state = "chair_preview";
+ dir = 8
+ },
+/obj/effect/landmark/start{
+ name = "Virologist"
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 10
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 4
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"wqz" = (
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
@@ -36973,6 +37015,22 @@
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
/turf/simulated/floor/tiled/white,
/area/rnd/xenobiology/xenoflora_hazard)
+"wSX" = (
+/obj/machinery/alarm{
+ dir = 8;
+ icon_state = "alarm0";
+ pixel_x = 24
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 6
+ },
+/obj/machinery/light{
+ dir = 4;
+ status = 2
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"wVj" = (
/obj/effect/floor_decal/corner/red{
icon_state = "corner_white";
@@ -37232,6 +37290,21 @@
},
/turf/simulated/floor/tiled,
/area/outpost/engineering/hallway)
+"xyk" = (
+/obj/structure/sign/nosmoking_1{
+ pixel_x = 32;
+ pixel_y = 0
+ },
+/obj/effect/floor_decal/corner/green{
+ icon_state = "corner_white";
+ dir = 6
+ },
+/obj/machinery/light{
+ dir = 4;
+ status = 2
+ },
+/turf/simulated/floor/tiled/white,
+/area/medical/medbay4)
"xym" = (
/obj/structure/cable/yellow{
d1 = 4;
@@ -77732,7 +77805,7 @@ aSM
aSM
aSM
aSM
-aaa
+aSM
aaa
aaa
aaa
@@ -77988,6 +78061,7 @@ aYz
aYQ
aZd
aZt
+ozn
aSM
aaa
aaa
@@ -78067,7 +78141,6 @@ aaa
aaa
aaa
aaa
-aaa
"}
(158,1,1) = {"
aaa
@@ -78239,12 +78312,13 @@ aVf
aVO
aWD
aXn
-aXN
+aXM
aYl
aYA
aYR
aXM
-aZu
+aXM
+jSu
aSM
aaa
aaa
@@ -78324,7 +78398,6 @@ aaa
aaa
aaa
aaa
-aaa
"}
(159,1,1) = {"
aaa
@@ -78496,12 +78569,13 @@ aVg
aLk
aWE
aXo
+iWa
+iWa
+iHK
aXM
aXM
aXM
-aXM
-aXM
-aZv
+jSu
aSM
aaa
aaa
@@ -78581,7 +78655,6 @@ aaa
aaa
aaa
aaa
-aaa
"}
(160,1,1) = {"
aaa
@@ -78753,12 +78826,13 @@ aVg
aVO
aWF
aXp
-aXO
+aXM
+aYm
+aYm
aYm
-aYB
-aYR
aXM
aZw
+rjC
aSM
aaa
aaa
@@ -78838,7 +78912,6 @@ aaa
aaa
aaa
aaa
-aaa
"}
(161,1,1) = {"
aaa
@@ -79011,11 +79084,12 @@ aLk
aWG
aXq
bbY
-aYn
+bbY
aYC
-aYT
-aZe
-aZx
+aXM
+aXM
+aXM
+jSu
aSM
aaa
aaa
@@ -79095,7 +79169,6 @@ aaa
aaa
aaa
aaa
-aaa
"}
(162,1,1) = {"
aaa
@@ -79265,16 +79338,16 @@ aSM
aSM
aSM
aSM
+vMS
+sWS
+wSX
+kwz
+tSk
+kwz
+xyk
+rCQ
+wnO
aSM
-aSM
-aSM
-aSM
-aSM
-aSM
-aSM
-aSM
-aSM
-aaa
aaa
aaa
aaa
@@ -79517,21 +79590,21 @@ bFN
wIA
ukB
bFN
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+aSM
+aSM
+aSM
+aSM
+aSM
+aSM
+aSM
+aSM
+aSM
+aSM
+aSM
+aSM
+aSM
+aSM
+aSM
aaa
aaa
aaa