Merge pull request #12169 from Ghommie/Ghommie-cit734

Porting some radial menu updates, and that one clown mask skin.
This commit is contained in:
kevinz000
2020-05-10 14:14:19 -07:00
committed by GitHub
12 changed files with 473 additions and 227 deletions
+10 -1
View File
@@ -255,6 +255,7 @@ GLOBAL_LIST_EMPTY(radial_menus)
current_user = M.client current_user = M.client
//Blank //Blank
menu_holder = image(icon='icons/effects/effects.dmi',loc=anchor,icon_state="nothing",layer = ABOVE_HUD_LAYER) menu_holder = image(icon='icons/effects/effects.dmi',loc=anchor,icon_state="nothing",layer = ABOVE_HUD_LAYER)
menu_holder.plane = ABOVE_HUD_PLANE
menu_holder.appearance_flags |= KEEP_APART menu_holder.appearance_flags |= KEEP_APART
menu_holder.vis_contents += elements + close_button menu_holder.vis_contents += elements + close_button
current_user.images += menu_holder current_user.images += menu_holder
@@ -285,13 +286,16 @@ GLOBAL_LIST_EMPTY(radial_menus)
Choices should be a list where list keys are movables or text used for element names and return value Choices should be a list where list keys are movables or text used for element names and return value
and list values are movables/icons/images used for element icons and list values are movables/icons/images used for element icons
*/ */
/proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE) /proc/show_radial_menu(mob/user, atom/anchor, list/choices, uniqueid, radius, datum/callback/custom_check, require_near = FALSE, tooltips = FALSE, no_repeat_close = FALSE)
if(!user || !anchor || !length(choices)) if(!user || !anchor || !length(choices))
return return
if(!uniqueid) if(!uniqueid)
uniqueid = "defmenu_[REF(user)]_[REF(anchor)]" uniqueid = "defmenu_[REF(user)]_[REF(anchor)]"
if(GLOB.radial_menus[uniqueid]) if(GLOB.radial_menus[uniqueid])
if(!no_repeat_close)
var/datum/radial_menu/menu = GLOB.radial_menus[uniqueid]
menu.finished = TRUE
return return
var/datum/radial_menu/menu = new var/datum/radial_menu/menu = new
@@ -308,4 +312,9 @@ GLOBAL_LIST_EMPTY(radial_menus)
var/answer = menu.selected_choice var/answer = menu.selected_choice
qdel(menu) qdel(menu)
GLOB.radial_menus -= uniqueid GLOB.radial_menus -= uniqueid
if(require_near && !in_range(anchor, user))
return
if(istype(custom_check))
if(!custom_check.Invoke())
return
return answer return answer
+74 -24
View File
@@ -6,17 +6,42 @@
icon_state = "cutout_basic" icon_state = "cutout_basic"
w_class = WEIGHT_CLASS_BULKY w_class = WEIGHT_CLASS_BULKY
resistance_flags = FLAMMABLE resistance_flags = FLAMMABLE
// Possible restyles for the cutout; /// Possible restyles for the cutout, add an entry in change_appearance() if you add to here
// add an entry in change_appearance() if you add to here var/static/list/possible_appearances
var/list/possible_appearances = list("Assistant", "Clown", "Mime", /// If the cutout is pushed over and has to be righted
"Traitor", "Nuke Op", "Cultist", "Brass Cultist", "Clockwork Cultist", var/pushed_over = FALSE
"Revolutionary", "Wizard", "Shadowling", "Xenomorph", "Xenomorph Maid", "Swarmer", /// If the cutout actually appears as what it portray and not a discolored version
"Ash Walker", "Deathsquad Officer", "Ian", "Slaughter Demon", var/deceptive = FALSE
"Laughter Demon", "Private Security Officer", "Securitron", "Gondola", "Monkey")
var/pushed_over = FALSE //If the cutout is pushed over and has to be righted
var/deceptive = FALSE //If the cutout actually appears as what it portray and not a discolored version
var/lastattacker = null /obj/item/cardboard_cutout/Initialize()
. = ..()
if(possible_appearances)
return
possible_appearances = sortList(list(
"Assistant" = image(icon = src.icon, icon_state = "cutout_greytide"),
"Clown" = image(icon = src.icon, icon_state = "cutout_clown"),
"Mime" = image(icon = src.icon, icon_state = "cutout_mime"),
"Traitor" = image(icon = src.icon, icon_state = "cutout_traitor"),
"Nuke Op" = image(icon = src.icon, icon_state = "cutout_fluke"),
"Cultist" = image(icon = src.icon, icon_state = "cutout_cultist"),
"Brass Cultist" = image(icon = src.icon, icon_state = "cutout_servant"),
"Clockwork Cultist" = image(icon = src.icon, icon_state = "cutout_new_servant"),
"Revolutionary" = image(icon = src.icon, icon_state = "cutout_viva"),
"Wizard" = image(icon = src.icon, icon_state = "cutout_wizard"),
"Shadowling" = image(icon = src.icon, icon_state = "cutout_shadowling"),
"Xenomorph" = image(icon = src.icon, icon_state = "cutout_fukken_xeno"),
"Xenomorph Maid" = image(icon = src.icon, icon_state = "cutout_lusty"),
"Swarmer" = image(icon = src.icon, icon_state = "cutout_swarmer"),
"Ash Walker" = image(icon = src.icon, icon_state = "cutout_free_antag"),
"Deathsquad Officer" = image(icon = src.icon, icon_state = "cutout_deathsquad"),
"Ian" = image(icon = src.icon, icon_state = "cutout_ian"),
"Slaughter Demon" = image(icon = 'icons/mob/mob.dmi', icon_state = "daemon"),
"Laughter Demon" = image(icon = 'icons/mob/mob.dmi', icon_state = "bowmon"),
"Private Security Officer" = image(icon = src.icon, icon_state = "cutout_ntsec"),
"Securitron" = image(icon = src.icon, icon_state = "cutout_law"),
"Gondola" = image(icon = src.icon, icon_state = "cutout_gondola"),
"Monkey" = image(icon = src.icon, icon_state = "cutout_monky"),
))
//ATTACK HAND IGNORING PARENT RETURN VALUE //ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/cardboard_cutout/attack_hand(mob/living/user) /obj/item/cardboard_cutout/attack_hand(mob/living/user)
@@ -76,22 +101,21 @@
push_over() push_over()
return BULLET_ACT_HIT return BULLET_ACT_HIT
/**
* change_appearance: Changes a skin of the cardboard cutout based on a user's choice
*
* Arguments:
* * crayon The crayon used to change and recolor the cardboard cutout
* * user The mob choosing a skin of the cardboard cutout
*/
/obj/item/cardboard_cutout/proc/change_appearance(obj/item/toy/crayon/crayon, mob/living/user) /obj/item/cardboard_cutout/proc/change_appearance(obj/item/toy/crayon/crayon, mob/living/user)
if(!crayon || !user) var/new_appearance = show_radial_menu(user, src, possible_appearances, custom_check = CALLBACK(src, .proc/check_menu, user, crayon), radius = 36, require_near = TRUE)
return if(!new_appearance)
if(pushed_over)
to_chat(user, "<span class='warning'>Right [src] first!</span>")
return
if(crayon.check_empty(user))
return
if(crayon.is_capped)
to_chat(user, "<span class='warning'>Take the cap off first!</span>")
return
var/new_appearance = input(user, "Choose a new appearance for [src].", "26th Century Deception") as null|anything in possible_appearances
if(!new_appearance || !crayon || !user.canUseTopic(src))
return return
if(!do_after(user, 10, FALSE, src, TRUE)) if(!do_after(user, 10, FALSE, src, TRUE))
return return FALSE
if(!check_menu(user, crayon))
return FALSE
user.visible_message("<span class='notice'>[user] gives [src] a new look.</span>", "<span class='notice'>Voila! You give [src] a new look.</span>") user.visible_message("<span class='notice'>[user] gives [src] a new look.</span>", "<span class='notice'>Voila! You give [src] a new look.</span>")
crayon.use_charges(1) crayon.use_charges(1)
crayon.check_empty(user) crayon.check_empty(user)
@@ -196,7 +220,33 @@
name = "monkey ([rand(1, 999)])" name = "monkey ([rand(1, 999)])"
desc = "A cardboard cutout of a monkey." desc = "A cardboard cutout of a monkey."
icon_state = "cutout_monky" icon_state = "cutout_monky"
return 1 else
return FALSE
return TRUE
/**
* check_menu: Checks if we are allowed to interact with a radial menu
*
* Arguments:
* * user The mob interacting with a menu
* * crayon The crayon used to interact with a menu
*/
/obj/item/cardboard_cutout/proc/check_menu(mob/living/user, obj/item/toy/crayon/crayon)
if(!istype(user))
return FALSE
if(user.incapacitated())
return FALSE
if(pushed_over)
to_chat(user, "<span class='warning'>Right [src] first!</span>")
return FALSE
if(!crayon || !user.is_holding(crayon))
return FALSE
if(crayon.check_empty(user))
return FALSE
if(crayon.is_capped)
to_chat(user, "<span class='warning'>Take the cap off first!</span>")
return FALSE
return TRUE
/obj/item/cardboard_cutout/setDir(newdir) /obj/item/cardboard_cutout/setDir(newdir)
dir = SOUTH dir = SOUTH
+51 -37
View File
@@ -850,12 +850,6 @@
#define NODESIGN "None"
#define NANOTRASEN "NanotrasenStandard"
#define SYNDI "SyndiSnacks"
#define HEART "Heart"
#define SMILEY "SmileyFace"
/obj/item/storage/box/papersack /obj/item/storage/box/papersack
name = "paper sack" name = "paper sack"
desc = "A sack neatly crafted out of paper." desc = "A sack neatly crafted out of paper."
@@ -863,7 +857,18 @@
item_state = "paperbag_None" item_state = "paperbag_None"
resistance_flags = FLAMMABLE resistance_flags = FLAMMABLE
foldable = null foldable = null
var/design = NODESIGN /// A list of all available papersack reskins
var/list/papersack_designs = list()
/obj/item/storage/box/papersack/Initialize(mapload)
. = ..()
papersack_designs = sortList(list(
"None" = image(icon = src.icon, icon_state = "paperbag_None"),
"NanotrasenStandard" = image(icon = src.icon, icon_state = "paperbag_NanotrasenStandard"),
"SyndiSnacks" = image(icon = src.icon, icon_state = "paperbag_SyndiSnacks"),
"Heart" = image(icon = src.icon, icon_state = "paperbag_Heart"),
"SmileyFace" = image(icon = src.icon, icon_state = "paperbag_SmileyFace")
))
/obj/item/storage/box/papersack/update_icon_state() /obj/item/storage/box/papersack/update_icon_state()
if(contents.len == 0) if(contents.len == 0)
@@ -871,55 +876,64 @@
else else
icon_state = "[item_state]_closed" icon_state = "[item_state]_closed"
/obj/item/storage/box/papersack/attackby(obj/item/W, mob/user, params) /obj/item/storage/box/papersack/attackby(obj/item/W, mob/user, params)
if(istype(W, /obj/item/pen)) if(istype(W, /obj/item/pen))
//if a pen is used on the sack, dialogue to change its design appears var/choice = show_radial_menu(user, src , papersack_designs, custom_check = CALLBACK(src, .proc/check_menu, user, W), radius = 36, require_near = TRUE)
if(contents.len) if(!choice)
to_chat(user, "<span class='warning'>You can't modify [src] with items still inside!</span>") return FALSE
return if(icon_state == "paperbag_[choice]")
var/list/designs = list(NODESIGN, NANOTRASEN, SYNDI, HEART, SMILEY, "Cancel") return FALSE
var/switchDesign = input("Select a Design:", "Paper Sack Design", designs[1]) in designs switch(choice)
if(get_dist(usr, src) > 1) if("None")
to_chat(usr, "<span class='warning'>You have moved too far away!</span>")
return
var/choice = designs.Find(switchDesign)
if(design == designs[choice] || designs[choice] == "Cancel")
return 0
to_chat(usr, "<span class='notice'>You make some modifications to [src] using your pen.</span>")
design = designs[choice]
icon_state = "paperbag_[design]"
item_state = "paperbag_[design]"
switch(designs[choice])
if(NODESIGN)
desc = "A sack neatly crafted out of paper." desc = "A sack neatly crafted out of paper."
if(NANOTRASEN) if("NanotrasenStandard")
desc = "A standard Nanotrasen paper lunch sack for loyal employees on the go." desc = "A standard Nanotrasen paper lunch sack for loyal employees on the go."
if(SYNDI) if("SyndiSnacks")
desc = "The design on this paper sack is a remnant of the notorious 'SyndieSnacks' program." desc = "The design on this paper sack is a remnant of the notorious 'SyndieSnacks' program."
if(HEART) if("Heart")
desc = "A paper sack with a heart etched onto the side." desc = "A paper sack with a heart etched onto the side."
if(SMILEY) if("SmileyFace")
desc = "A paper sack with a crude smile etched onto the side." desc = "A paper sack with a crude smile etched onto the side."
return 0 else
return FALSE
to_chat(user, "<span class='notice'>You make some modifications to [src] using your pen.</span>")
icon_state = "paperbag_[choice]"
item_state = "paperbag_[choice]"
return FALSE
else if(W.get_sharpness()) else if(W.get_sharpness())
if(!contents.len) if(!contents.len)
if(item_state == "paperbag_None") if(item_state == "paperbag_None")
user.show_message("<span class='notice'>You cut eyeholes into [src].</span>", MSG_VISUAL) user.show_message("<span class='notice'>You cut eyeholes into [src].</span>", MSG_VISUAL)
new /obj/item/clothing/head/papersack(user.loc) new /obj/item/clothing/head/papersack(user.loc)
qdel(src) qdel(src)
return 0 return FALSE
else if(item_state == "paperbag_SmileyFace") else if(item_state == "paperbag_SmileyFace")
user.show_message("<span class='notice'>You cut eyeholes into [src] and modify the design.</span>", MSG_VISUAL) user.show_message("<span class='notice'>You cut eyeholes into [src] and modify the design.</span>", MSG_VISUAL)
new /obj/item/clothing/head/papersack/smiley(user.loc) new /obj/item/clothing/head/papersack/smiley(user.loc)
qdel(src) qdel(src)
return 0 return FALSE
return ..() return ..()
#undef NODESIGN /**
#undef NANOTRASEN * check_menu: Checks if we are allowed to interact with a radial menu
#undef SYNDI *
#undef HEART * Arguments:
#undef SMILEY * * user The mob interacting with a menu
* * P The pen used to interact with a menu
*/
/obj/item/storage/box/papersack/proc/check_menu(mob/user, obj/item/pen/P)
if(!istype(user))
return FALSE
if(user.incapacitated())
return FALSE
if(contents.len)
to_chat(user, "<span class='warning'>You can't modify [src] with items still inside!</span>")
return FALSE
if(!P || !user.is_holding(P))
to_chat(user, "<span class='warning'>You need a pen to modify [src]!</span>")
return FALSE
return TRUE
/obj/item/storage/box/ingredients //This box is for the randomly chosen version the chef spawns with, it shouldn't actually exist. /obj/item/storage/box/ingredients //This box is for the randomly chosen version the chef spawns with, it shouldn't actually exist.
name = "ingredients box" name = "ingredients box"
+57 -54
View File
@@ -902,79 +902,57 @@
name = "hand of cards" name = "hand of cards"
desc = "A number of cards not in a deck, customarily held in ones hand." desc = "A number of cards not in a deck, customarily held in ones hand."
icon = 'icons/obj/toy.dmi' icon = 'icons/obj/toy.dmi'
icon_state = "nanotrasen_hand2" icon_state = "none"
w_class = WEIGHT_CLASS_TINY w_class = WEIGHT_CLASS_TINY
var/list/currenthand = list() var/list/currenthand = list()
var/choice = null var/choice = null
/obj/item/toy/cards/cardhand/attack_self(mob/user) /obj/item/toy/cards/cardhand/attack_self(mob/user)
user.set_machine(src) var/list/handradial = list()
interact(user) interact(user)
/obj/item/toy/cards/cardhand/ui_interact(mob/user)
. = ..()
var/dat = "You have:<BR>"
for(var/t in currenthand) for(var/t in currenthand)
dat += "<A href='?src=[REF(src)];pick=[t]'>A [t].</A><BR>" handradial[t] = image(icon = src.icon, icon_state = "sc_[t]_[deckstyle]")
dat += "Which card will you remove next?"
var/datum/browser/popup = new(user, "cardhand", "Hand of Cards", 400, 240)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.set_content(dat)
popup.open()
/obj/item/toy/cards/cardhand/Topic(href, href_list)
if(..())
return
if(usr.stat || !ishuman(usr)) if(usr.stat || !ishuman(usr))
return return
var/mob/living/carbon/human/cardUser = usr var/mob/living/carbon/human/cardUser = usr
var/O = src if(!(cardUser.mobility_flags & MOBILITY_USE))
if(href_list["pick"])
if (cardUser.is_holding(src))
var/choice = href_list["pick"]
var/obj/item/toy/cards/singlecard/C = new/obj/item/toy/cards/singlecard(cardUser.loc)
src.currenthand -= choice
C.parentdeck = src.parentdeck
C.cardname = choice
C.apply_card_vars(C,O)
C.pickup(cardUser)
cardUser.put_in_hands(C)
cardUser.visible_message("<span class='notice'>[cardUser] draws a card from [cardUser.p_their()] hand.</span>", "<span class='notice'>You take the [C.cardname] from your hand.</span>")
interact(cardUser)
if(src.currenthand.len < 3)
src.icon_state = "[deckstyle]_hand2"
else if(src.currenthand.len < 4)
src.icon_state = "[deckstyle]_hand3"
else if(src.currenthand.len < 5)
src.icon_state = "[deckstyle]_hand4"
if(src.currenthand.len == 1)
var/obj/item/toy/cards/singlecard/N = new/obj/item/toy/cards/singlecard(src.loc)
N.parentdeck = src.parentdeck
N.cardname = src.currenthand[1]
N.apply_card_vars(N,O)
qdel(src)
N.pickup(cardUser)
cardUser.put_in_hands(N)
to_chat(cardUser, "<span class='notice'>You also take [currenthand[1]] and hold it.</span>")
cardUser << browse(null, "window=cardhand")
return return
var/O = src
var/choice = show_radial_menu(usr,src, handradial, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 36, require_near = TRUE)
if(!choice)
return FALSE
var/obj/item/toy/cards/singlecard/C = new/obj/item/toy/cards/singlecard(cardUser.loc)
currenthand -= choice
handradial -= choice
C.parentdeck = parentdeck
C.cardname = choice
C.apply_card_vars(C,O)
C.pickup(cardUser)
cardUser.put_in_hands(C)
cardUser.visible_message("<span class='notice'>[cardUser] draws a card from [cardUser.p_their()] hand.</span>", "<span class='notice'>You take the [C.cardname] from your hand.</span>")
interact(cardUser)
update_sprite()
if(length(currenthand) == 1)
var/obj/item/toy/cards/singlecard/N = new/obj/item/toy/cards/singlecard(loc)
N.parentdeck = parentdeck
N.cardname = currenthand[1]
N.apply_card_vars(N,O)
qdel(src)
N.pickup(cardUser)
cardUser.put_in_hands(N)
to_chat(cardUser, "<span class='notice'>You also take [currenthand[1]] and hold it.</span>")
/obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params) /obj/item/toy/cards/cardhand/attackby(obj/item/toy/cards/singlecard/C, mob/living/user, params)
if(istype(C)) if(istype(C))
if(C.parentdeck == src.parentdeck) if(C.parentdeck == src.parentdeck)
src.currenthand += C.cardname src.currenthand += C.cardname
user.visible_message("[user] adds a card to [user.p_their()] hand.", "<span class='notice'>You add the [C.cardname] to your hand.</span>") user.visible_message("<span class='notice'>[user] adds a card to [user.p_their()] hand.</span>", "<span class='notice'>You add the [C.cardname] to your hand.</span>")
qdel(C) qdel(C)
interact(user) interact(user)
if(currenthand.len > 4) update_sprite(src)
src.icon_state = "[deckstyle]_hand5"
else if(currenthand.len > 3)
src.icon_state = "[deckstyle]_hand4"
else if(currenthand.len > 2)
src.icon_state = "[deckstyle]_hand3"
else else
to_chat(user, "<span class='warning'>You can't mix cards from other decks!</span>") to_chat(user, "<span class='warning'>You can't mix cards from other decks!</span>")
else else
@@ -983,7 +961,7 @@
/obj/item/toy/cards/cardhand/apply_card_vars(obj/item/toy/cards/newobj,obj/item/toy/cards/sourceobj) /obj/item/toy/cards/cardhand/apply_card_vars(obj/item/toy/cards/newobj,obj/item/toy/cards/sourceobj)
..() ..()
newobj.deckstyle = sourceobj.deckstyle newobj.deckstyle = sourceobj.deckstyle
newobj.icon_state = "[deckstyle]_hand2" // Another dumb hack, without this the hand is invisible (or has the default deckstyle) until another card is added. update_sprite()
newobj.card_hitsound = sourceobj.card_hitsound newobj.card_hitsound = sourceobj.card_hitsound
newobj.card_force = sourceobj.card_force newobj.card_force = sourceobj.card_force
newobj.card_throwforce = sourceobj.card_throwforce newobj.card_throwforce = sourceobj.card_throwforce
@@ -992,6 +970,31 @@
newobj.card_attack_verb = sourceobj.card_attack_verb newobj.card_attack_verb = sourceobj.card_attack_verb
newobj.resistance_flags = sourceobj.resistance_flags newobj.resistance_flags = sourceobj.resistance_flags
/**
* check_menu: Checks if we are allowed to interact with a radial menu
*
* Arguments:
* * user The mob interacting with a menu
*/
/obj/item/toy/cards/cardhand/proc/check_menu(mob/living/user)
if(!istype(user))
return FALSE
if(user.incapacitated())
return FALSE
return TRUE
/**
* This proc updates the sprite for when you create a hand of cards
*/
/obj/item/toy/cards/cardhand/proc/update_sprite()
cut_overlays()
var/overlay_cards = currenthand.len
var/k = overlay_cards == 2 ? 1 : overlay_cards - 2
for(var/i = k; i <= overlay_cards; i++)
var/card_overlay = image(icon=src.icon,icon_state="sc_[currenthand[i]]_[deckstyle]",pixel_x=(1-i+k)*3,pixel_y=(1-i+k)*3)
add_overlay(card_overlay)
/obj/item/toy/cards/singlecard /obj/item/toy/cards/singlecard
name = "card" name = "card"
desc = "a card" desc = "a card"
+50 -39
View File
@@ -32,7 +32,6 @@
/obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user) /obj/structure/janitorialcart/proc/put_in_cart(obj/item/I, mob/user)
if(!user.transferItemToLoc(I, src)) if(!user.transferItemToLoc(I, src))
return return
updateUsrDialog()
to_chat(user, "<span class='notice'>You put [I] into [src].</span>") to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
return return
@@ -96,70 +95,82 @@
. = ..() . = ..()
if(.) if(.)
return return
user.set_machine(src)
var/dat var/list/items = list()
if(mybag) if(mybag)
dat += "<a href='?src=[REF(src)];garbage=1'>[mybag.name]</a><br>" items += list("Trash bag" = image(icon = mybag.icon, icon_state = mybag.icon_state))
if(mymop) if(mymop)
dat += "<a href='?src=[REF(src)];mop=1'>[mymop.name]</a><br>" items += list("Mop" = image(icon = mymop.icon, icon_state = mymop.icon_state))
if(mybroom) if(mybroom)
dat += "<a href='?src=[REF(src)];broom=1'>[mybroom.name]</a><br>" items += list("Broom" = image(icon = mybroom.icon, icon_state = mybroom.icon_state))
if(myspray) if(myspray)
dat += "<a href='?src=[REF(src)];spray=1'>[myspray.name]</a><br>" items += list("Spray bottle" = image(icon = myspray.icon, icon_state = myspray.icon_state))
if(myreplacer) if(myreplacer)
dat += "<a href='?src=[REF(src)];replacer=1'>[myreplacer.name]</a><br>" items += list("Light replacer" = image(icon = myreplacer.icon, icon_state = myreplacer.icon_state))
if(signs) var/obj/item/caution/sign = locate() in src
dat += "<a href='?src=[REF(src)];sign=1'>[signs] sign\s</a><br>" if(sign)
var/datum/browser/popup = new(user, "janicart", name, 240, 160) items += list("Sign" = image(icon = sign.icon, icon_state = sign.icon_state))
popup.set_content(dat)
popup.open()
if(!length(items))
/obj/structure/janitorialcart/Topic(href, href_list)
if(!in_range(src, usr))
return return
if(!isliving(usr)) items = sortList(items)
var/pick = show_radial_menu(user, src, items, custom_check = CALLBACK(src, .proc/check_menu, user), radius = 38, require_near = TRUE)
if(!pick)
return return
var/mob/living/user = usr switch(pick)
if(href_list["garbage"]) if("Trash bag")
if(mybag) if(!mybag)
return
user.put_in_hands(mybag) user.put_in_hands(mybag)
to_chat(user, "<span class='notice'>You take [mybag] from [src].</span>") to_chat(user, "<span class='notice'>You take [mybag] from [src].</span>")
mybag = null mybag = null
if(href_list["mop"]) if("Mop")
if(mymop) if(!mymop)
return
user.put_in_hands(mymop) user.put_in_hands(mymop)
to_chat(user, "<span class='notice'>You take [mymop] from [src].</span>") to_chat(user, "<span class='notice'>You take [mymop] from [src].</span>")
mymop = null mymop = null
if(href_list["broom"]) if("Broom")
if(mybroom) if(!mybroom)
return
user.put_in_hands(mybroom) user.put_in_hands(mybroom)
to_chat(user, "<span class='notice'>You take [mybroom] from [src].</span>") to_chat(user, "<span class='notice'>You take [mybroom] from [src].</span>")
mybroom = null mybroom = null
if(href_list["spray"]) if("Spray bottle")
if(myspray) if(!myspray)
return
user.put_in_hands(myspray) user.put_in_hands(myspray)
to_chat(user, "<span class='notice'>You take [myspray] from [src].</span>") to_chat(user, "<span class='notice'>You take [myspray] from [src].</span>")
myspray = null myspray = null
if(href_list["replacer"]) if("Light replacer")
if(myreplacer) if(!myreplacer)
return
user.put_in_hands(myreplacer) user.put_in_hands(myreplacer)
to_chat(user, "<span class='notice'>You take [myreplacer] from [src].</span>") to_chat(user, "<span class='notice'>You take [myreplacer] from [src].</span>")
myreplacer = null myreplacer = null
if(href_list["sign"]) if("Sign")
if(signs) if(signs <= 0)
var/obj/item/caution/Sign = locate() in src return
if(Sign) user.put_in_hands(sign)
user.put_in_hands(Sign) to_chat(user, "<span class='notice'>You take \a [sign] from [src].</span>")
to_chat(user, "<span class='notice'>You take \a [Sign] from [src].</span>") signs--
signs-- else
else return
WARNING("Signs ([signs]) didn't match contents")
signs = 0
update_icon() update_icon()
updateUsrDialog()
/**
* check_menu: Checks if we are allowed to interact with a radial menu
*
* Arguments:
* * user The mob interacting with a menu
*/
/obj/structure/janitorialcart/proc/check_menu(mob/living/user)
if(!istype(user))
return FALSE
if(user.incapacitated())
return FALSE
return TRUE
/obj/structure/janitorialcart/update_overlays() /obj/structure/janitorialcart/update_overlays()
. = ..() . = ..()
+11 -1
View File
@@ -91,8 +91,13 @@
if (!is_ghost && !in_range(src, user)) if (!is_ghost && !in_range(src, user))
return return
var/list/tool_list = list(
"Up" = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow", dir = NORTH),
"Down" = image(icon = 'icons/testing/turf_analysis.dmi', icon_state = "red_arrow", dir = SOUTH)
)
if (up && down) if (up && down)
var/result = alert("Go up or down [src]?", "Ladder", "Up", "Down", "Cancel") var/result = show_radial_menu(user, src, tool_list, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
if (!is_ghost && !in_range(src, user)) if (!is_ghost && !in_range(src, user))
return // nice try return // nice try
switch(result) switch(result)
@@ -112,6 +117,11 @@
if(!is_ghost) if(!is_ghost)
add_fingerprint(user) add_fingerprint(user)
/obj/structure/ladder/proc/check_menu(mob/user)
if(user.incapacitated() || !user.Adjacent(src))
return FALSE
return TRUE
/obj/structure/ladder/attack_hand(mob/user) /obj/structure/ladder/attack_hand(mob/user)
. = ..() . = ..()
if(.) if(.)
+43 -21
View File
@@ -73,18 +73,26 @@
resistance_flags = FLAMMABLE resistance_flags = FLAMMABLE
actions_types = list(/datum/action/item_action/adjust) actions_types = list(/datum/action/item_action/adjust)
dog_fashion = /datum/dog_fashion/head/clown dog_fashion = /datum/dog_fashion/head/clown
var/list/clownmask_designs = list()
/obj/item/clothing/mask/gas/clown_hat/Initialize(mapload)
.=..()
clownmask_designs = list(
"True Form" = image(icon = src.icon, icon_state = "clown"),
"The Feminist" = image(icon = src.icon, icon_state = "sexyclown"),
"The Jester" = image(icon = src.icon, icon_state = "chaos"),
"The Madman" = image(icon = src.icon, icon_state = "joker"),
"The Rainbow Color" = image(icon = src.icon, icon_state = "rainbow")
)
/obj/item/clothing/mask/gas/clown_hat/ui_action_click(mob/user) /obj/item/clothing/mask/gas/clown_hat/ui_action_click(mob/user)
if(!istype(user) || user.incapacitated()) if(!istype(user) || user.incapacitated())
return return
var/list/options = list() var/static/list/options = list("True Form" = "clown", "The Feminist" = "sexyclown", "The Madman" = "joker",
options["True Form"] = "clown" "The Rainbow Color" ="rainbow", "The Jester" = "chaos")
options["The Feminist"] = "sexyclown"
options["The Madman"] = "joker"
options["The Rainbow Color"] ="rainbow"
var/choice = input(user,"To what form do you wish to Morph this mask?","Morph Mask") in options var/choice = show_radial_menu(user,src, clownmask_designs, custom_check = FALSE, radius = 36, require_near = TRUE)
if(src && choice && !user.incapacitated() && in_range(user,src)) if(src && choice && !user.incapacitated() && in_range(user,src))
icon_state = options[choice] icon_state = options[choice]
@@ -93,7 +101,7 @@
var/datum/action/A = X var/datum/action/A = X
A.UpdateButtonIcon() A.UpdateButtonIcon()
to_chat(user, "<span class='notice'>Your Clown Mask has now morphed into [choice], all praise the Honkmother!</span>") to_chat(user, "<span class='notice'>Your Clown Mask has now morphed into [choice], all praise the Honkmother!</span>")
return 1 return TRUE
/obj/item/clothing/mask/gas/sexyclown /obj/item/clothing/mask/gas/sexyclown
name = "sexy-clown wig and mask" name = "sexy-clown wig and mask"
@@ -113,19 +121,26 @@
flags_cover = MASKCOVERSEYES flags_cover = MASKCOVERSEYES
resistance_flags = FLAMMABLE resistance_flags = FLAMMABLE
actions_types = list(/datum/action/item_action/adjust) actions_types = list(/datum/action/item_action/adjust)
var/list/mimemask_designs = list()
/obj/item/clothing/mask/gas/mime/Initialize(mapload)
.=..()
mimemask_designs = list(
"Blanc" = image(icon = src.icon, icon_state = "mime"),
"Excité" = image(icon = src.icon, icon_state = "sexymime"),
"Triste" = image(icon = src.icon, icon_state = "sadmime"),
"Effrayé" = image(icon = src.icon, icon_state = "scaredmime")
)
/obj/item/clothing/mask/gas/mime/ui_action_click(mob/user) /obj/item/clothing/mask/gas/mime/ui_action_click(mob/user)
if(!istype(user) || user.incapacitated()) if(!istype(user) || user.incapacitated())
return return
var/list/options = list() var/static/list/options = list("Blanc" = "mime", "Triste" = "sadmime", "Effrayé" = "scaredmime", "Excité" ="sexymime")
options["Blanc"] = "mime"
options["Triste"] = "sadmime"
options["Effrayé"] = "scaredmime"
options["Excité"] ="sexymime"
var/choice = input(user,"To what form do you wish to Morph this mask?","Morph Mask") in options var/choice = show_radial_menu(user,src, mimemask_designs, custom_check = FALSE, radius = 36, require_near = TRUE)
if(src && choice && !user.incapacitated() && in_range(user,src)) if(src && choice && !user.incapacitated() && in_range(user,src))
icon_state = options[choice] icon_state = options[choice]
@@ -134,7 +149,7 @@
var/datum/action/A = X var/datum/action/A = X
A.UpdateButtonIcon() A.UpdateButtonIcon()
to_chat(user, "<span class='notice'>Your Mime Mask has now morphed into [choice]!</span>") to_chat(user, "<span class='notice'>Your Mime Mask has now morphed into [choice]!</span>")
return 1 return TRUE
/obj/item/clothing/mask/gas/monkeymask /obj/item/clothing/mask/gas/monkeymask
name = "monkey mask" name = "monkey mask"
@@ -187,18 +202,25 @@
max_integrity = 100 max_integrity = 100
actions_types = list(/datum/action/item_action/adjust) actions_types = list(/datum/action/item_action/adjust)
dog_fashion = null dog_fashion = null
var/list/tikimask_designs = list()
/obj/item/clothing/mask/gas/tiki_mask/Initialize(mapload)
.=..()
tikimask_designs = list(
"Original Tiki" = image(icon = src.icon, icon_state = "tiki_eyebrow"),
"Happy Tiki" = image(icon = src.icon, icon_state = "tiki_happy"),
"Confused Tiki" = image(icon = src.icon, icon_state = "tiki_confused"),
"Angry Tiki" = image(icon = src.icon, icon_state = "tiki_angry")
)
/obj/item/clothing/mask/gas/tiki_mask/ui_action_click(mob/user) /obj/item/clothing/mask/gas/tiki_mask/ui_action_click(mob/user)
var/mob/M = usr var/mob/M = usr
var/list/options = list() var/static/list/options = list("Original Tiki" = "tiki_eyebrow", "Happy Tiki" = "tiki_happy", "Confused Tiki" = "tiki_confused",
options["Original Tiki"] = "tiki_eyebrow" "Angry Tiki" = "tiki_angry")
options["Happy Tiki"] = "tiki_happy"
options["Confused Tiki"] = "tiki_confused"
options["Angry Tiki"] ="tiki_angry"
var/choice = input(M,"To what form do you wish to change this mask?","Morph Mask") in options var/choice = show_radial_menu(user,src, tikimask_designs, custom_check = FALSE, radius = 36, require_near = TRUE)
if(src && choice && !M.stat && in_range(M,src)) if(src && choice && !M.stat && in_range(M,src))
icon_state = options[choice] icon_state = options[choice]
@@ -207,4 +229,4 @@
var/datum/action/A = X var/datum/action/A = X
A.UpdateButtonIcon() A.UpdateButtonIcon()
to_chat(M, "The Tiki Mask has now changed into the [choice] Mask!") to_chat(M, "The Tiki Mask has now changed into the [choice] Mask!")
return 1 return TRUE
+27 -17
View File
@@ -351,30 +351,40 @@
resistance_flags = FLAMMABLE resistance_flags = FLAMMABLE
max_integrity = 100 max_integrity = 100
actions_types = list(/datum/action/item_action/adjust) actions_types = list(/datum/action/item_action/adjust)
var/list/papermask_designs = list()
/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"),
"Eyes" = image(icon = src.icon, icon_state = "eyemask"),
"Sleeping" = image(icon = src.icon, icon_state = "sleepingmask"),
"Heart" = image(icon = src.icon, icon_state = "heartmask"),
"Core" = image(icon = src.icon, icon_state = "coremask"),
"Plus" = image(icon = src.icon, icon_state = "plusmask"),
"Square" = image(icon = src.icon, icon_state = "squaremask"),
"Bullseye" = image(icon = src.icon, icon_state = "bullseyemask"),
"Vertical" = image(icon = src.icon, icon_state = "verticalmask"),
"Horizontal" = image(icon = src.icon, icon_state = "horizontalmask"),
"X" = image(icon = src.icon, icon_state = "xmask"),
"Bugeyes" = image(icon = src.icon, icon_state = "bugmask"),
"Double" = image(icon = src.icon, icon_state = "doublemask"),
"Mark" = image(icon = src.icon, icon_state = "markmask")
)
/obj/item/clothing/mask/paper/ui_action_click(mob/user) /obj/item/clothing/mask/paper/ui_action_click(mob/user)
if(!istype(user) || user.incapacitated()) if(!istype(user) || user.incapacitated())
return return
var/list/options = list() var/static/list/options = list("Blank" = "plainmask", "Neutral" = "neutralmask", "Eyes" = "eyemask",
options["Blank"] = "plainmask" "Sleeping" ="sleepingmask", "Heart" = "heartmask", "Core" = "coremask",
options["Neutral"] = "neutralmask" "Plus" = "plusmask", "Square" ="squaremask", "Bullseye" = "bullseyemask",
options["Eyes"] = "eyemask" "Vertical" = "verticalmask", "Horizontal" = "horizontalmask", "X" ="xmask",
options["Sleeping"] ="sleepingmask" "Bugeyes" = "bugmask", "Double" = "doublemask", "Mark" = "markmask")
options["Heart"] = "heartmask"
options["Core"] = "coremask"
options["Plus"] = "plusmask"
options["Square"] ="squaremask"
options["Bullseye"] = "bullseyemask"
options["Vertical"] = "verticalmask"
options["Horizontal"] = "horizontalmask"
options["X"] ="xmask"
options["Bugeyes"] = "bugmask"
options["Double"] = "doublemask"
options["Mark"] = "markmask"
var/choice = input(user,"What symbol would you want on this mask?","Morph Mask") in options 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)) if(src && choice && !user.incapacitated() && in_range(user,src))
icon_state = options[choice] icon_state = options[choice]
@@ -276,6 +276,19 @@
R.hud_used.update_robot_modules_display() R.hud_used.update_robot_modules_display()
SSblackbox.record_feedback("tally", "cyborg_modules", 1, R.module) SSblackbox.record_feedback("tally", "cyborg_modules", 1, R.module)
/**
* check_menu: Checks if we are allowed to interact with a radial menu
*
* Arguments:
* * user The mob interacting with a menu
*/
/obj/item/robot_module/proc/check_menu(mob/user)
if(!istype(user))
return FALSE
if(user.incapacitated() || !user.Adjacent(src))
return FALSE
return TRUE
/obj/item/robot_module/standard /obj/item/robot_module/standard
name = "Standard" name = "Standard"
basic_modules = list( basic_modules = list(
@@ -337,13 +350,28 @@
/obj/item/robot_module/medical/be_transformed_to(obj/item/robot_module/old_module) /obj/item/robot_module/medical/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc var/mob/living/silicon/robot/R = loc
var/medmodels = list("Default", "Heavy", "Sleek", "Marina", "Droid", "Eyebot", "Medihound", "Medihound Dark", "Vale") var/static/list/med_icons
if(R.client && (R.client.ckey in list("nezuli"))) if(!med_icons)
medmodels += "Alina" med_icons = list(
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in medmodels "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "medical"),
if(!borg_icon) "Droid" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "medical"),
return FALSE "Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekmed"),
switch(borg_icon) "Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinamed"),
"Eyebot" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "eyebotmed"),
"Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavymed")
)
var/list/L = list("Medihound" = "medihound", "Medihound Dark" = "medihounddark", "Vale" = "valemed")
for(var/a in L)
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
wide.pixel_x = -16
med_icons[a] = wide
if(R.client && R.client.ckey == "nezuli")
var/image/bad_snowflake = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = "alina-med")
bad_snowflake.pixel_x = -16
med_icons["Alina"] = bad_snowflake
med_icons = sortList(med_icons)
var/med_borg_icon = show_radial_menu(R, R , med_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
switch(med_borg_icon)
if("Default") if("Default")
cyborg_base_icon = "medical" cyborg_base_icon = "medical"
if("Droid") if("Droid")
@@ -391,6 +419,8 @@
moduleselect_icon = "medihound" moduleselect_icon = "medihound"
moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi' moduleselect_alternate_icon = 'modular_citadel/icons/ui/screen_cyborg.dmi'
dogborg = TRUE dogborg = TRUE
else
return FALSE
return ..() return ..()
/obj/item/robot_module/engineering /obj/item/robot_module/engineering
@@ -434,13 +464,31 @@
/obj/item/robot_module/engineering/be_transformed_to(obj/item/robot_module/old_module) /obj/item/robot_module/engineering/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc var/mob/living/silicon/robot/R = loc
var/list/engymodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Marina", "Can", "Spider", "Loader","Handy", "Pup Dozer", "Vale") var/static/list/engi_icons
if(R.client && (R.client.ckey in list("nezuli"))) if(!engi_icons)
engymodels += "Alina" engi_icons = list(
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in engymodels "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "engineer"),
if(!borg_icon) "Default - Treads" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "engi-tread"),
return FALSE "Loader" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "loaderborg"),
switch(borg_icon) "Handy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "handyeng"),
"Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekeng"),
"Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "caneng"),
"Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinaeng"),
"Spider" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "spidereng"),
"Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavyeng")
)
var/list/L = list("Pup Dozer" = "pupdozer", "Vale" = "valeeng")
for(var/a in L)
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
wide.pixel_x = -16
engi_icons[a] = wide
if(R.client && R.client.ckey == "nezuli")
var/image/bad_snowflake = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = "alina-eng")
bad_snowflake.pixel_x = -16
engi_icons["Alina"] = bad_snowflake
engi_icons = sortList(engi_icons)
var/engi_borg_icon = show_radial_menu(R, R , engi_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
switch(engi_borg_icon)
if("Default") if("Default")
cyborg_base_icon = "engineer" cyborg_base_icon = "engineer"
if("Default - Treads") if("Default - Treads")
@@ -485,6 +533,8 @@
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
sleeper_overlay = "alinasleeper" sleeper_overlay = "alinasleeper"
dogborg = TRUE dogborg = TRUE
else
return FALSE
return ..() return ..()
/obj/item/robot_module/security /obj/item/robot_module/security
@@ -512,13 +562,29 @@
/obj/item/robot_module/security/be_transformed_to(obj/item/robot_module/old_module) /obj/item/robot_module/security/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc var/mob/living/silicon/robot/R = loc
var/list/secmodels = list("Default", "Default - Treads", "Heavy", "Sleek", "Can", "Marina", "Spider", "K9", "K9 Dark", "Vale") var/static/list/sec_icons
if(R.client && (R.client.ckey in list("nezuli"))) if(!sec_icons)
secmodels += "Alina" sec_icons = list(
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in secmodels "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "sec"),
if(!borg_icon) "Default - Treads" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sec-tread"),
return FALSE "Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleeksec"),
switch(borg_icon) "Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "cansec"),
"Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinasec"),
"Spider" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "spidersec"),
"Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavysec")
)
var/list/L = list("K9" = "k9", "Vale" = "valesec", "K9 Dark" = "k9dark")
for(var/a in L)
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
wide.pixel_x = -16
sec_icons[a] = wide
if(R.client && R.client.ckey == "nezuli")
var/image/bad_snowflake = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = "alina-sec")
bad_snowflake.pixel_x = -16
sec_icons["Alina"] = bad_snowflake
sec_icons = sortList(sec_icons)
var/sec_borg_icon = show_radial_menu(R, R , sec_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
switch(sec_borg_icon)
if("Default") if("Default")
cyborg_base_icon = "sec" cyborg_base_icon = "sec"
if("Default - Treads") if("Default - Treads")
@@ -561,6 +627,8 @@
sleeper_overlay = "valesecsleeper" sleeper_overlay = "valesecsleeper"
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
dogborg = TRUE dogborg = TRUE
else
return FALSE
return ..() return ..()
/obj/item/robot_module/security/Initialize() /obj/item/robot_module/security/Initialize()
@@ -599,10 +667,13 @@
/obj/item/robot_module/peacekeeper/be_transformed_to(obj/item/robot_module/old_module) /obj/item/robot_module/peacekeeper/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Default", "Spider", "Borgi") var/static/list/peace_icons = sortList(list(
if(!borg_icon) "Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "peace"),
return FALSE "Borgi" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "borgi"),
switch(borg_icon) "Spider" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "whitespider")
))
var/peace_borg_icon = show_radial_menu(R, R , peace_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
switch(peace_borg_icon)
if("Default") if("Default")
cyborg_base_icon = "peace" cyborg_base_icon = "peace"
if("Spider") if("Spider")
@@ -615,6 +686,8 @@
hat_offset = INFINITY hat_offset = INFINITY
cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi' cyborg_icon_override = 'modular_citadel/icons/mob/robots.dmi'
has_snowflake_deadsprite = TRUE has_snowflake_deadsprite = TRUE
else
return FALSE
return ..() return ..()
//Janitor module combined with Service module //Janitor module combined with Service module
@@ -738,10 +811,35 @@
/obj/item/robot_module/butler/be_transformed_to(obj/item/robot_module/old_module) /obj/item/robot_module/butler/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("(Service) Waitress", "(Service) Heavy", "(Service) Sleek", "(Service) Butler", "(Service) Tophat", "(Service) Can", "(Service) Bro", "(Service) DarkK9", "(Service) Vale", "(Service) ValeDark", "(Janitor) Default", "(Janitor) Sleek", "(Janitor) Marina", "(Janitor) Can", "(Janitor) Heavy", "(Janitor) Scrubpuppy") var/static/list/service_icons
if(!borg_icon) if(!service_icons)
return FALSE service_icons = list(
switch(borg_icon) "(Service) Waitress" = image(icon = 'icons/mob/robots.dmi', icon_state = "service_f"),
"(Service) Butler" = image(icon = 'icons/mob/robots.dmi', icon_state = "service_m"),
"(Service) Bro" = image(icon = 'icons/mob/robots.dmi', icon_state = "brobot"),
"(Service) Can" = image(icon = 'icons/mob/robots.dmi', icon_state = "kent"),
"(Service) Tophat" = image(icon = 'icons/mob/robots.dmi', icon_state = "tophat"),
"(Service) Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekserv"),
"(Service) Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavyserv"),
"(Janitor) Default" = image(icon = 'icons/mob/robots.dmi', icon_state = "janitor"),
"(Janitor) Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinajan"),
"(Janitor) Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekjan"),
"(Janitor) Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "canjan"),
"(Janitor) Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavyjan"),
)
var/list/L = list("(Service) DarkK9" = "k50", "(Service) Vale" = "valeserv", "(Service) ValeDark" = "valeservdark",
"(Janitor) Scrubpuppy" = "scrubpup")
for(var/a in L)
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
wide.pixel_x = -16
service_icons[a] = wide
if(R.client && R.client.ckey == "nezuli")
var/image/bad_snowflake = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = "alina-sec")
bad_snowflake.pixel_x = -16
service_icons["Alina"] = bad_snowflake
service_icons = sortList(service_icons)
var/service_robot_icon = show_radial_menu(R, R , service_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
switch(service_robot_icon)
if("(Service) Waitress") if("(Service) Waitress")
cyborg_base_icon = "service_f" cyborg_base_icon = "service_f"
special_light_key = "service" special_light_key = "service"
@@ -799,6 +897,8 @@
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
sleeper_overlay = "jsleeper" sleeper_overlay = "jsleeper"
dogborg = TRUE dogborg = TRUE
else
return FALSE
return ..() return ..()
/obj/item/robot_module/miner /obj/item/robot_module/miner
@@ -833,10 +933,25 @@
/obj/item/robot_module/miner/be_transformed_to(obj/item/robot_module/old_module) /obj/item/robot_module/miner/be_transformed_to(obj/item/robot_module/old_module)
var/mob/living/silicon/robot/R = loc var/mob/living/silicon/robot/R = loc
var/borg_icon = input(R, "Select an icon!", "Robot Icon", null) as null|anything in list("Lavaland", "Heavy", "Sleek", "Marina", "Can", "Spider", "Asteroid", "Droid", "Blade", "Vale") var/static/list/mining_icons
if(!borg_icon) if(!mining_icons)
return FALSE mining_icons = list(
switch(borg_icon) "Lavaland" = image(icon = 'icons/mob/robots.dmi', icon_state = "miner"),
"Asteroid" = image(icon = 'icons/mob/robots.dmi', icon_state = "minerOLD"),
"Droid" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "miner"),
"Sleek" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "sleekmin"),
"Marina" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "marinamin"),
"Can" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "canmin"),
"Heavy" = image(icon = 'modular_citadel/icons/mob/robots.dmi', icon_state = "heavymin"),
)
var/list/L = list("Blade" = "blade", "Vale" = "valemine")
for(var/a in L)
var/image/wide = image(icon = 'modular_citadel/icons/mob/widerobot.dmi', icon_state = L[a])
wide.pixel_x = -16
mining_icons[a] = wide
mining_icons = sortList(mining_icons)
var/mining_borg_icon = show_radial_menu(R, R , mining_icons, custom_check = CALLBACK(src, .proc/check_menu, R), radius = 42, require_near = TRUE)
switch(mining_borg_icon)
if("Lavaland") if("Lavaland")
cyborg_base_icon = "miner" cyborg_base_icon = "miner"
if("Asteroid") if("Asteroid")
@@ -871,6 +986,8 @@
cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi' cyborg_icon_override = 'modular_citadel/icons/mob/widerobot.dmi'
sleeper_overlay = "valeminesleeper" sleeper_overlay = "valeminesleeper"
dogborg = TRUE dogborg = TRUE
else
return FALSE
return ..() return ..()
/obj/item/robot_module/syndicate /obj/item/robot_module/syndicate
Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 37 KiB