diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 1ead41d513..929e01c6d9 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -318,4 +318,4 @@ GLOBAL_LIST_EMPTY(radial_menus) if(istype(custom_check)) if(!custom_check.Invoke()) return - return answer \ No newline at end of file + return answer diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index 484901990a..4777796331 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -4,7 +4,7 @@ /obj/item/defibrillator name = "defibrillator" desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/defibrillators.dmi' icon_state = "defibunit" item_state = "defibunit" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' @@ -23,8 +23,8 @@ var/obj/item/stock_parts/cell/cell var/combat = FALSE //can we revive through space suits? var/grab_ghost = FALSE // Do we pull the ghost back into their body? - var/healdisk = FALSE // Will we shock people dragging the body? - var/pullshocksafely = FALSE //Dose the unit have the healdisk upgrade? + var/healdisk = FALSE // Does the unit have the healdisk upgrade? + var/pullshocksafely = FALSE // Will we shock people dragging the body? var/primetime = 0 // is the defib faster var/timedeath = 10 var/disarm_shock_time = 10 @@ -261,7 +261,7 @@ /obj/item/shockpaddles name = "defibrillator paddles" desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks." - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/defibrillators.dmi' icon_state = "defibpaddles0" item_state = "defibpaddles0" lefthand_file = 'icons/mob/inhands/equipment/medical_lefthand.dmi' @@ -682,7 +682,7 @@ /obj/item/shockpaddles/cyborg name = "cyborg defibrillator paddles" - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/defibrillators.dmi' icon_state = "defibpaddles0" item_state = "defibpaddles0" req_defib = FALSE @@ -703,7 +703,7 @@ name = "syndicate defibrillator paddles" desc = "A pair of paddles used to revive deceased operatives. It possesses both the ability to penetrate armor and to deliver powerful shocks offensively." combat = TRUE - icon = 'icons/obj/items_and_weapons.dmi' + icon = 'icons/obj/defibrillators.dmi' icon_state = "defibpaddles0" item_state = "defibpaddles0" req_defib = FALSE diff --git a/code/game/objects/items/melee/energy.dm b/code/game/objects/items/melee/energy.dm index 679491aeb6..7d95b8e736 100644 --- a/code/game/objects/items/melee/energy.dm +++ b/code/game/objects/items/melee/energy.dm @@ -190,12 +190,53 @@ /obj/item/melee/transforming/energy/sword/saber possible_colors = list("red" = LIGHT_COLOR_RED, "blue" = LIGHT_COLOR_LIGHT_CYAN, "green" = LIGHT_COLOR_GREEN, "purple" = LIGHT_COLOR_LAVENDER) + unique_reskin = list("Sword" = "sword0", "saber" = "esaber0") var/hacked = FALSE + var/saber = FALSE -/obj/item/melee/transforming/energy/sword/saber/set_sword_color() - if(LAZYLEN(possible_colors)) +/obj/item/melee/transforming/energy/sword/saber/transform_weapon(mob/living/user, supress_message_text) + . = ..() + if(.) + if(active) + if(sword_color) + if(saber) + icon_state = "esaber[sword_color]" + else + icon_state = "sword[sword_color]" + else + if(saber) + icon_state = "esaber0" + else + icon_state = "sword0" + +/obj/item/melee/transforming/energy/sword/saber/reskin_obj(mob/M) + . = ..() + if(icon_state == "esaber0") + saber = TRUE + if(active) + if(saber) + icon_state = "esaber[sword_color]" + else + icon_state = "sword[sword_color]" + +/obj/item/melee/transforming/energy/sword/saber/set_sword_color(var/color_forced) + if(color_forced) // wow i really do not like this at fucking all holy SHIT + if(color_forced == "red") + sword_color = "red" + light_color = LIGHT_COLOR_RED + else if(color_forced == "blue") + sword_color = "blue" + light_color = LIGHT_COLOR_LIGHT_CYAN + else if(color_forced == "green") + sword_color = "green" + light_color = LIGHT_COLOR_GREEN + else if(color_forced == "purple") + sword_color = "purple" + light_color = LIGHT_COLOR_LAVENDER + else if(LAZYLEN(possible_colors)) sword_color = pick(possible_colors) light_color = possible_colors[sword_color] + return /obj/item/melee/transforming/energy/sword/saber/process() . = ..() @@ -204,30 +245,59 @@ light_color = possible_colors[set_color] update_light() -/obj/item/melee/transforming/energy/sword/saber/red - possible_colors = list("red" = LIGHT_COLOR_RED) +/obj/item/melee/transforming/energy/sword/saber/red/Initialize(mapload) + . = ..() + set_sword_color("red") -/obj/item/melee/transforming/energy/sword/saber/blue - possible_colors = list("blue" = LIGHT_COLOR_LIGHT_CYAN) +/obj/item/melee/transforming/energy/sword/saber/blue/Initialize(mapload) + . = ..() + set_sword_color("blue") -/obj/item/melee/transforming/energy/sword/saber/green - possible_colors = list("green" = LIGHT_COLOR_GREEN) +/obj/item/melee/transforming/energy/sword/saber/green/Initialize(mapload) + . = ..() + set_sword_color("green") -/obj/item/melee/transforming/energy/sword/saber/purple - possible_colors = list("purple" = LIGHT_COLOR_LAVENDER) +/obj/item/melee/transforming/energy/sword/saber/purple/Initialize(mapload) + . = ..() + set_sword_color("purple") + +/obj/item/melee/transforming/energy/sword/saber/proc/select_sword_color(mob/user) /// this is for the radial + if(!istype(user) || user.incapacitated()) + return + + var/static/list/options = list( + "red" = image(icon = 'icons/obj/items_and_weapons.dmi', icon_state = "swordred-blade"), + "blue" = image(icon = 'icons/obj/items_and_weapons.dmi', icon_state = "swordblue-blade"), + "green" = image(icon = 'icons/obj/items_and_weapons.dmi', icon_state = "swordgreen-blade"), + "purple" = image(icon = 'icons/obj/items_and_weapons.dmi', icon_state = "swordpurple-blade") + ) + + var/choice = show_radial_menu(user, src, options, custom_check = FALSE, radius = 36, require_near = TRUE) + + if(src && choice && !user.incapacitated() && in_range(user,src)) + set_sword_color(choice) + to_chat(user, "[src] is now [choice].") /obj/item/melee/transforming/energy/sword/saber/attackby(obj/item/W, mob/living/user, params) if(istype(W, /obj/item/multitool)) + if(user.a_intent == INTENT_DISARM) + if(!active) + to_chat(user, "COLOR_SET") + hacked = FALSE + select_sword_color(user) + return + else + to_chat(user, "Turn it off first - getting that close to an active sword is not a great idea.") + return if(!hacked) hacked = TRUE sword_color = "rainbow" to_chat(user, "RNBW_ENGAGE") - if(active) icon_state = "swordrainbow" user.update_inv_hands() else - to_chat(user, "It's already fabulous!") + to_chat(user, "It's already fabulous! If you wanted to reset the color, though, try a disarming intent while it's off.") else return ..() diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 3abee4db33..8a14d99776 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -304,18 +304,36 @@ /obj/proc/reskin_obj(mob/M) if(!LAZYLEN(unique_reskin)) return - var/list/skins = list() - for(var/S in unique_reskin) - skins[S] = image(icon = icon, icon_state = unique_reskin[S]) - var/choice = show_radial_menu(M, src, skins, custom_check = CALLBACK(src, .proc/check_skinnable, M), radius = 40, require_near = TRUE) - if(!choice) - return FALSE - icon_state = unique_reskin[choice] - current_skin = choice - return -/obj/proc/check_skinnable(/mob/M) - if(current_skin || !always_reskinnable) + var/list/items = list() + for(var/reskin_option in unique_reskin) + var/image/item_image = image(icon = src.icon, icon_state = unique_reskin[reskin_option]) + items += list("[reskin_option]" = item_image) + sortList(items) + + var/pick = show_radial_menu(M, src, items, custom_check = CALLBACK(src, .proc/check_reskin_menu, M), radius = 38, require_near = TRUE) + if(!pick) + return + if(!unique_reskin[pick]) + return + current_skin = pick + icon_state = unique_reskin[pick] + to_chat(M, "[src] is now skinned as '[pick].'") + +/** + * Checks if we are allowed to interact with a radial menu for reskins + * + * Arguments: + * * user The mob interacting with the menu + */ +/obj/proc/check_reskin_menu(mob/user) + if(QDELETED(src)) + return FALSE + if(current_skin) + return FALSE + if(!istype(user)) + return FALSE + if(user.incapacitated()) return FALSE return TRUE diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 11df38cfdd..5dd35788f1 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -355,7 +355,7 @@ /obj/item/clothing/mask/paper/Initialize(mapload) - .=..() + . = ..() papermask_designs = list( "Blank" = image(icon = src.icon, icon_state = "plainmask"), "Neutral" = image(icon = src.icon, icon_state = "neutralmask"), @@ -384,7 +384,7 @@ "Vertical" = "verticalmask", "Horizontal" = "horizontalmask", "X" ="xmask", "Bugeyes" = "bugmask", "Double" = "doublemask", "Mark" = "markmask") - var/choice = show_radial_menu(user,src, papermask_designs, custom_check = FALSE, radius = 36, require_near = TRUE) + var/choice = show_radial_menu(user, src, papermask_designs, custom_check = FALSE, radius = 36, require_near = TRUE) if(src && choice && !user.incapacitated() && in_range(user,src)) icon_state = options[choice] diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi index 23d80af9ef..5ff248de68 100644 Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi index 702c0299b5..0332e60fb5 100644 Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ diff --git a/icons/obj/defibrillators.dmi b/icons/obj/defibrillators.dmi new file mode 100644 index 0000000000..f838f40030 Binary files /dev/null and b/icons/obj/defibrillators.dmi differ diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi index c5aca2394f..9b73fa706b 100644 Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ