From 6e5c63d3a50cbc6e8c92e1032f12b3b6020dabb4 Mon Sep 17 00:00:00 2001 From: Arokha Sieyes Date: Tue, 13 Jun 2017 21:23:13 -0400 Subject: [PATCH] Changes protector sprite, adds flashlight --- code/_helpers/icons.dm | 19 +++++ code/modules/projectiles/gun.dm | 37 ++++++++- .../modules/vore/fluffstuff/guns/protector.dm | 75 +++++++++++++++--- icons/vore/custom_guns_vr.dmi | Bin 28535 -> 29331 bytes 4 files changed, 119 insertions(+), 12 deletions(-) diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm index 02a0ce1989..651e6af83c 100644 --- a/code/_helpers/icons.dm +++ b/code/_helpers/icons.dm @@ -873,3 +873,22 @@ proc/sort_atoms_by_layer(var/list/atoms) result.Swap(i, gap + i) swapped = 1 return result + +// Mutable appearances are an inbuilt byond datastructure. Read the documentation on them by hitting F1 in DM. +// Basically use them instead of images for overlays/underlays and when changing an object's appearance if you're doing so with any regularity. +// Unless you need the overlay/underlay to have a different direction than the base object. Then you have to use an image due to a bug. + +// Mutable appearances are children of images, just so you know. + +/mutable_appearance/New() + ..() + plane = FLOAT_PLANE // No clue why this is 0 by default yet images are on FLOAT_PLANE + // And yes this does have to be in the constructor, BYOND ignores it if you set it as a normal var + +// Helper similar to image() +/proc/mutable_appearance(icon, icon_state = "", layer = FLOAT_LAYER) + var/mutable_appearance/MA = new() + MA.icon = icon + MA.icon_state = icon_state + MA.layer = layer + return MA diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 9cb7292baf..8ff2828cc0 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -87,6 +87,36 @@ var/last_shot = 0 //records the last shot fired +//VOREStation Add - /tg/ icon system + var/charge_sections = 4 + var/shaded_charge = FALSE + var/ammo_x_offset = 2 + var/ammo_y_offset = 0 + var/can_flashlight = FALSE + var/gun_light = FALSE + var/light_state = "flight" + var/light_brightness = 4 + var/flight_x_offset = 0 + var/flight_y_offset = 0 + +/obj/item/weapon/gun/CtrlClick(mob/user) + if(can_flashlight && ishuman(user) && src.loc == usr && !user.incapacitated(INCAPACITATION_ALL)) + toggle_flashlight() + else + return ..() + +/obj/item/weapon/gun/proc/toggle_flashlight() + if(gun_light) + set_light(0) + gun_light = FALSE + else + set_light(light_brightness) + gun_light = TRUE + + playsound(src, 'sound/machines/button.ogg', 25) + update_icon() +//VOREStation Add End + /obj/item/weapon/gun/New() ..() for(var/i in 1 to firemodes.len) @@ -333,7 +363,12 @@ accuracy = initial(accuracy) //Reset the gun's accuracy if(muzzle_flash) - set_light(0) + //VOREStation Edit - Flashlights + if(gun_light) + set_light(light_brightness) + else + set_light(0) + //VOREStation Edit End // Similar to the above proc, but does not require a user, which is ideal for things like turrets. /obj/item/weapon/gun/proc/Fire_userless(atom/target) diff --git a/code/modules/vore/fluffstuff/guns/protector.dm b/code/modules/vore/fluffstuff/guns/protector.dm index 1abec7b27a..16bc56ee59 100644 --- a/code/modules/vore/fluffstuff/guns/protector.dm +++ b/code/modules/vore/fluffstuff/guns/protector.dm @@ -1,11 +1,12 @@ // -------------- Protector ------------- -/obj/item/weapon/gun/energy/gun/protector +/obj/item/weapon/gun/energy/protector name = "\improper KHI-98a \'Protector\'" desc = "The KHI-98a is the first firearm custom-designed for Nanotrasen by KHI. It features a powerful stun mode, and \ - an alert-level-locked lethal mode, only usable on code blue and higher. It also features a DNA lock mechanism." + an alert-level-locked lethal mode, only usable on code blue and higher. It also features an integrated flashlight! \ + (CtrlClick to toggle flashlight)" icon = 'icons/vore/custom_guns_vr.dmi' - icon_state = "protstun100" + icon_state = "prot" icon_override = 'icons/vore/custom_guns_vr.dmi' item_state = "gun" @@ -13,20 +14,26 @@ fire_sound = 'sound/weapons/Taser.ogg' projectile_type = /obj/item/projectile/beam/stun - modifystate = "protstun" - - dna_lock = 1 + modifystate = "stun" origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2) + charge_sections = 3 //For the icon + ammo_x_offset = 2 + ammo_y_offset = 0 + can_flashlight = TRUE + light_state = "prot_light" + flight_x_offset = 0 + flight_y_offset = 0 + firemodes = list( - list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/protector, modifystate="protstun", fire_sound='sound/weapons/Taser.ogg'), - list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="protkill", fire_sound='sound/weapons/gauss_shoot.ogg'), + list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun/protector, modifystate="stun", fire_sound='sound/weapons/Taser.ogg'), + list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="kill", fire_sound='sound/weapons/gauss_shoot.ogg'), ) var/emagged = FALSE -/obj/item/weapon/gun/energy/gun/protector/special_check(mob/user) +/obj/item/weapon/gun/energy/protector/special_check(mob/user) if(!emagged && mode_name == "lethal" && get_security_level() == "green") to_chat(user,"The trigger refuses to depress while on the lethal setting under security level green!") return FALSE @@ -34,7 +41,7 @@ return ..() -/obj/item/weapon/gun/energy/gun/protector/emag_act(var/remaining_charges,var/mob/user) +/obj/item/weapon/gun/energy/protector/emag_act(var/remaining_charges,var/mob/user) ..() if(!emagged) emagged = TRUE @@ -42,6 +49,52 @@ return TRUE +//Update icons from /tg/, so fancy! Use this more! +/obj/item/weapon/gun/energy/protector/update_icon() + overlays.Cut() + var/ratio = 0 + + /* Don't have one for this gun + var/itemState = null + if(!initial(item_state)) + itemState = icon_state + */ + + var/iconState = "[icon_state]_charge" + if (modifystate) + overlays += "[icon_state]_[modifystate]" + iconState += "_[modifystate]" + /* Don't have one for this gun + if(itemState) + itemState += "[modifystate]" + */ + if(power_supply) + ratio = Ceiling((power_supply.charge / power_supply.maxcharge) * charge_sections) + + if(power_supply.charge < charge_cost) + overlays += "[icon_state]_empty" + else + if(!shaded_charge) + var/mutable_appearance/charge_overlay = mutable_appearance(icon, iconState) + for(var/i = ratio, i >= 1, i--) + charge_overlay.pixel_x = ammo_x_offset * (i - 1) + overlays += charge_overlay + else + overlays += "[icon_state]_[modifystate][ratio]" + + if(can_flashlight & gun_light) + var/mutable_appearance/flashlight_overlay = mutable_appearance(icon, light_state) + flashlight_overlay.pixel_x = flight_x_offset + flashlight_overlay.pixel_y = flight_y_offset + overlays += flashlight_overlay + + /* Don't have one for this gun + if(itemState) + itemState += "[ratio]" + item_state = itemState + */ + + // Protector beams /obj/item/projectile/beam/stun/protector name = "protector stun beam" @@ -58,5 +111,5 @@ id = "protector" req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2) materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 2000, "silver" = 1000) - build_path = /obj/item/weapon/gun/energy/gun/protector + build_path = /obj/item/weapon/gun/energy/protector sort_string = "TAADA" diff --git a/icons/vore/custom_guns_vr.dmi b/icons/vore/custom_guns_vr.dmi index a89dca40760a11e476b13912b8010b4a648e17df..6b59709463ff9c57324c3661725fc1ea83089bd5 100644 GIT binary patch delta 9156 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 UV-Q+<06?#M8anF5w=G}&Kb&jPG5`Po