diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 6607b91695..603d01b011 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -272,9 +272,13 @@ GLOBAL_LIST_INIT(pda_styles, list(MONO, VT, ORBITRON, SHARE)) #define PDA_SKIN_MODERN "Modern" #define PDA_SKIN_MINIMAL "Minimal" -GLOBAL_LIST_INIT(pda_reskins, list(PDA_SKIN_CLASSIC = 'icons/obj/pda.dmi', PDA_SKIN_ALT = 'icons/obj/pda_alt.dmi', - PDA_SKIN_RUGGED = 'icons/obj/pda_rugged.dmi', PDA_SKIN_MODERN = 'icons/obj/pda_modern.dmi', - PDA_SKIN_MINIMAL = 'icons/obj/pda_minimal.dmi')) +GLOBAL_LIST_INIT(pda_reskins, list( + PDA_SKIN_CLASSIC = list("icon" = 'icons/obj/pda.dmi'), + PDA_SKIN_ALT = list("icon" = 'icons/obj/pda_alt.dmi'), + PDA_SKIN_RUGGED = list("icon" = 'icons/obj/pda_rugged.dmi'), + PDA_SKIN_MODERN = list("icon" = 'icons/obj/pda_modern.dmi'), + PDA_SKIN_MINIMAL = list("icon" = 'icons/obj/pda_minimal.dmi') + )) ///////////////////////////////////// // atom.appearence_flags shortcuts // diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index c9e20bc01a..6e8d1de955 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -405,7 +405,7 @@ return /atom/proc/CtrlShiftClick(mob/user) - SEND_SIGNAL(src, COMSIG_CLICK_CTRL_SHIFT) + SEND_SIGNAL(src, COMSIG_CLICK_CTRL_SHIFT, user) return /* diff --git a/code/datums/elements/object_reskinning.dm b/code/datums/elements/object_reskinning.dm index d6920e9665..8b5d905e72 100644 --- a/code/datums/elements/object_reskinning.dm +++ b/code/datums/elements/object_reskinning.dm @@ -28,14 +28,15 @@ return ELEMENT_INCOMPATIBLE RegisterSignal(the_obj, COMSIG_PARENT_EXAMINE, .proc/on_examine) - RegisterSignal(the_obj, COMSIG_CLICK_ALT, .proc/reskin) + RegisterSignal(the_obj, the_obj.reskin_binding, .proc/reskin) /datum/element/object_reskinning/Detach(datum/source, force) - UnregisterSignal(source, list(COMSIG_PARENT_EXAMINE, COMSIG_CLICK_ALT)) + var/obj/being_deleted = source + UnregisterSignal(source, list(COMSIG_PARENT_EXAMINE, being_deleted.reskin_binding)) return ..() /datum/element/object_reskinning/proc/on_examine(obj/obj, mob/user, list/examine_list) - examine_list += span_notice("Alt-click to reskin it ([length(obj.unique_reskin)] possible styles).") + examine_list += span_notice("[capitalize(replacetext(obj.reskin_binding, "_", "-"))] to reskin it ([length(obj.unique_reskin)] possible styles).") if(obj.always_reskinnable) examine_list += span_notice("It has no limit to reskinning.") @@ -49,11 +50,15 @@ */ /datum/element/object_reskinning/proc/reskin(obj/to_reskin, mob/user) // Just stop early - if(!(LAZYLEN(to_reskin.unique_reskin) && user.canUseTopic(to_reskin, BE_CLOSE, NO_DEXTERY))) + if(!LAZYLEN(to_reskin.unique_reskin)) message_admins("[ADMIN_LOOKUPFLW(user)] attempted to reskin an object that has no skins!") Detach(to_reskin) return FALSE + // Can't use + if(!user.canUseTopic(to_reskin, BE_CLOSE, NO_DEXTERY, NO_TK)) + return FALSE + // Get our choices var/list/items = list() for(var/reskin_option in to_reskin.unique_reskin) @@ -90,7 +95,7 @@ /datum/element/object_reskinning/proc/check_reskin_menu(mob/user, obj/obj) if(QDELETED(obj)) return FALSE - if(obj.current_skin) + if(!obj.always_reskinnable && obj.current_skin) return FALSE if(!istype(user)) return FALSE diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 0604508997..b3eb8ab439 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -32,6 +32,9 @@ GLOBAL_LIST_EMPTY(PDAs) armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF + always_reskinnable = TRUE + reskin_binding = COMSIG_CLICK_CTRL_SHIFT + //Main variables var/owner = null // String name of owner var/default_cartridge = 0 // Access level defined by cartridge @@ -112,10 +115,10 @@ GLOBAL_LIST_EMPTY(PDAs) . += id ? "Alt-click to remove the id." : "" if(inserted_item && (!isturf(loc))) . += "Ctrl-click to remove [inserted_item]." - if(LAZYLEN(GLOB.pda_reskins)) - . += "Ctrl-shift-click it to reskin it." /obj/item/pda/Initialize(mapload) + if(GLOB.pda_reskins) + unique_reskin = GLOB.pda_reskins . = ..() if(fon) set_light(f_lum, f_pow, f_col) @@ -130,33 +133,10 @@ GLOBAL_LIST_EMPTY(PDAs) new_overlays = TRUE update_icon() -/// This is a mess i probably shouldn't touch. -/obj/item/pda/ComponentInitialize() - . = ..() - RemoveElement(/datum/element/object_reskinning) - -/obj/item/pda/CtrlShiftClick(mob/living/user) - . = ..() - if(GLOB.pda_reskins && user.canUseTopic(src, BE_CLOSE, NO_DEXTERY)) - reskin_obj(user) - /obj/item/pda/reskin_obj(mob/M) - if(!LAZYLEN(GLOB.pda_reskins)) - return - var/dat = "Reskin options for [name]:" - for(var/V in GLOB.pda_reskins) - var/output = icon2html(GLOB.pda_reskins[V], M, icon_state) - dat += "\n[V]: [output]" - to_chat(M, dat) - - var/choice = input(M, "Choose the a reskin for [src]","Reskin Object") as null|anything in GLOB.pda_reskins - var/new_icon = GLOB.pda_reskins[choice] - if(QDELETED(src) || isnull(new_icon) || new_icon == icon || !M.canUseTopic(src, BE_CLOSE, FALSE, NO_TK)) - return - icon = new_icon + . = ..() new_overlays = TRUE update_icon() - to_chat(M, "[src] is now skinned as '[choice]'.") /obj/item/pda/proc/set_new_overlays() if(!overlays_offsets || !(icon in overlays_offsets)) @@ -196,7 +176,7 @@ GLOBAL_LIST_EMPTY(PDAs) else font_index = MODE_MONO font_mode = FONT_MONO - var/pref_skin = GLOB.pda_reskins[C.prefs.pda_skin] + var/pref_skin = GLOB.pda_reskins[C.prefs.pda_skin]["icon"] if(icon != pref_skin) icon = pref_skin new_overlays = TRUE diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 3575699c55..cfe1afad5a 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -28,9 +28,17 @@ var/resistance_flags = NONE // INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ON_FIRE | UNACIDABLE | ACID_PROOF var/persistence_replacement //have something WAY too amazing to live to the next round? Set a new path here. Overuse of this var will make me upset. - var/current_skin //the item reskin - var/list/unique_reskin //List of options to reskin. + + //Reskin variables + /// The item reskin + var/current_skin + /// List of options to reskin. + var/list/unique_reskin + /// Can always be modified var/always_reskinnable = FALSE + /// How to bring up the reskinning menu + var/reskin_binding = COMSIG_CLICK_ALT + // // Access levels, used in modules\jobs\access.dm var/list/req_access