diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 18acc2cf..e2c1b007 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -142,7 +142,7 @@ //checks text for html tags //if tag is not in whitelist (var/list/paper_tag_whitelist in global.dm) //relpaces < with < -proc/checkhtml(var/t) +proc/checkhtml(var/t, var/whitelist = paper_tag_whitelist) t = sanitize_simple(t, list("&#"=".")) var/p = findtext(t,"<",1) while (p) //going through all the tags @@ -153,8 +153,10 @@ proc/checkhtml(var/t) tag = copytext(t,start, p) p++ tag = copytext(t,start+1, p) - if (!(tag in paper_tag_whitelist)) //if it's unkown tag, disarming it + if (!(tag in whitelist)) //if it's unkown tag, disarming it t = copytext(t,1,start-1) + "<" + copytext(t,start+1) + if(whitelist == signature_tag_whitelist) + return null p = findtext(t,"<",p) return t /* diff --git a/code/datums/mind.dm b/code/datums/mind.dm index e9ddd5eb..b0c224e1 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -62,6 +62,10 @@ datum/mind // the world.time since the mob has been brigged, or -1 if not at all var/brigged_since = -1 + // The custom signature holder + var/signature + var/signature_font + New(var/key) src.key = key @@ -1288,6 +1292,8 @@ datum/mind else world.log << "## DEBUG: mind_initialize(): No ticker ready yet! Please inform Carn" if(!mind.name) mind.name = real_name + if(client.prefs.signature) mind.signature = client.prefs.signature + if(client.prefs.signature_font) mind.signature_font = client.prefs.signature_font mind.current = src //HUMAN diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index ee19a0ca..69bd86b5 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -193,7 +193,8 @@ /datum/game_mode/proc/remove_cultist(datum/mind/cult_mind, show_message = 1) if(cult_mind in cult) cult -= cult_mind - cult_mind.current << "\red An unfamiliar white light flashes through your mind, cleansing the taint of the dark-one and the memories of your time as his servant with it." + cult_mind.current << "\red An unfamiliar white light flashes through your mind, cleansing the taint of the dark-one and the memories of your time as his servant with it." + cult_mind.current << "\blue OOC information: Being removed from the clutches of Nar'sie would rip most memories of your service to him. At most you would remember one individual who assisted in converting you. Maybe not even that." cult_mind.memory = "" update_cult_icons_removed(cult_mind) if(show_message) diff --git a/code/game/gamemodes/factions.dm b/code/game/gamemodes/factions.dm index dd1f3ba7..4f778dea 100644 --- a/code/game/gamemodes/factions.dm +++ b/code/game/gamemodes/factions.dm @@ -131,7 +131,7 @@ Stealthy and Inconspicuous Weapons; /obj/item/weapon/pen/paralysis:3:Paralysis Pen; /obj/item/weapon/soap/syndie:1:Syndicate Soap; /obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge; -/obj/item/weapon/storage/box/walkingcane:5:Disguised Sword; +/obj/item/weapon/cane/syndie:5:Disguised Sword; Whitespace:Seperator; Stealth and Camouflage Items; /obj/item/weapon/storage/box/syndie_kit/masks:1:Disguised Breathe Mask; diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index b4f69084..936039dc 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -41,7 +41,7 @@ /obj/item/weapon/melee/baton/stunrod/loaded:4:Stunrod; Whitespace:Seperator; Stealthy and Inconspicuous Weapons; -/obj/item/weapon/storage/box/walkingcane:5:Disguised Sword; +/obj/item/weapon/cane/syndie:5:Disguised Sword; /obj/item/weapon/pen/paralysis:3:Paralysis Pen; /obj/item/weapon/soap/syndie:1:Syndicate Soap; /obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge; diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index f052f111..65d77c54 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -141,7 +141,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid if(uses > 4) randomItems.Add("/obj/item/weapon/gun/energy/crossbow") //Energy Crossbow randomItems.Add("/obj/item/device/powersink") //Powersink - randomItems.Add("/obj/item/weapon/storage/box/walkingcane") + randomItems.Add("/obj/item/weapon/cane/syndie") if(uses > 3) randomItems.Add("/obj/item/weapon/melee/energy/sword") //Energy Sword @@ -196,7 +196,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid uses -= 7 if("/obj/item/weapon/gun/projectile") uses -= 6 - if("/obj/item/weapon/gun/energy/crossbow" , "/obj/item/device/powersink" , "/obj/item/weapon/storage/box/walkingcane") + if("/obj/item/weapon/gun/energy/crossbow" , "/obj/item/device/powersink" , "/obj/item/weapon/cane/syndie") uses -= 5 if("/obj/item/weapon/melee/energy/sword" , "/obj/item/clothing/mask/gas/voice" , "/obj/item/device/chameleon" , "/obj/item/weapon/melee/baton/stunrod/loaded") uses -= 4 @@ -270,7 +270,7 @@ A list of items and costs is stored under the datum of every game mode, alongsid feedback_add_details("traitor_uplink_items_bought","SP") if("/obj/item/weapon/storage/toolbox/syndicate") feedback_add_details("traitor_uplink_items_bought","ST") - if("/obj/item/weapon/storage/box/walkingcane") + if("/obj/item/weapon/cane/syndie") feedback_add_details("traitor_uplink_items_bought","WC") if("/obj/item/weapon/storage/box/syndie_kit/masks_gas") feedback_add_details("traitor_uplink_items_bought","GM") diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 69ec4708..75fd39b8 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -52,6 +52,9 @@ liquidfood name = "\improper \"LiquidFood\" ration" icon_state = "liquidfood" + chocolatebox + name = "box of chocolates" + icon_state = "chocolatebox" /obj/item/trash/attack(mob/M as mob, mob/living/user as mob) return diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index ee629779..ffb4da40 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -517,26 +517,4 @@ for(var/i = 0; i < 14; i++) new /obj/item/weapon/light/tube(src) for(var/i = 0; i < 7; i++) - new /obj/item/weapon/light/bulb(src) - -/obj/item/weapon/storage/box/walkingcane - name = "cane" - desc = "A cane used by a true gentlemen. Or a clown." - icon = 'icons/obj/weapons.dmi' - icon_state = "cane" - item_state = "stick" - flags = FPRINT | TABLEPASS| CONDUCT - force = 5.0 - throwforce = 7.0 - w_class = 2.0 - matter = list("metal" = 50) - attack_verb = list("bludgeoned", "whacked", "disciplined", "thrashed") - can_hold = list( - "/obj/item/weapon/canesword") - storage_slots = 1 - max_w_class = 4 - max_combined_w_class = 4 - - New() - ..() - new /obj/item/weapon/canesword(src) \ No newline at end of file + new /obj/item/weapon/light/bulb(src) \ No newline at end of file diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 8ee18f9c..c37e6ce2 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -49,37 +49,40 @@ user.Paralyse(20) return - if (M.stat !=2) - if((M.mind in ticker.mode.cult) && prob(33)) - M << "\red The power of [src] clears your mind of the cult's influence!" - user << "\red You wave [src] over [M]'s head and see their eyes become clear, their mind returning to normal." - ticker.mode.remove_cultist(M.mind) - for(var/mob/O in viewers(M, null)) - O.show_message(text("\red [] waves [] over []'s head.", user, src, M), 1) -/* else if(prob(10)) //Fail chance is kind of dumb for something so rarely used. - user << "\red The rod slips in your hand." - ..()*/ - else if(M.mind) - if(M.mind.vampire) - if(ishuman(M)) - if(!(VAMP_FULL in M.mind.vampire.powers)) - user << "\red The rod burns cold in your hand, filling you with grim determination. You feel the creature's power weaken." - M << "The nullrod's power interferes with your own! They are on to you!" - M.mind.vampire.nullified = max(8, M.mind.vampire.nullified + 8) + if(M.stat !=2 && ishuman(M)) + var/mob/living/K = M + if(K.mind in ticker.mode.cult) + if(K == user) //Because apparently Doomberg deconverted himself. Wtf. + return + user.visible_message("\blue [user] starts trying to captivate [K]'s attention with the [src].", "\blue You begin trying to shed light into [K]'s mind.") + K.take_overall_damage(0, 10) + if(do_after(user, 15)) + K.visible_message("\red [user] waves the [src] over [K]'s head, [K]'s look captivated by it.", "\red [user] wave's the [src] over your head. You see a foreign light, asking you to follow it. Its presence burns and blinds.") + var/choice = alert(K,"Do you want to give up your goal?","Become cleansed","Resist","Give in") + switch(choice) + if("Resist") + K.visible_message("\red The gaze in [K]'s eyes remains determined.", "\blue You turn away from the light, remaining true to your dark lord. The light burns you due to rejection!") + K.say("*scream") + K.take_overall_damage(5, 15) + if("Give in") + K.visible_message("\blue [K]'s eyes become clearer, the evil gone, but not without leaving scars.") + K.take_overall_damage(15, 30) //Nur'sie ain't a kind host to turn away from. Suffer. + ticker.mode.remove_cultist(K.mind, 0) + else + user.visible_message("\red [user]'s concentration is broken!", "\red Your concentration is broken! You and your target need to stay uninterrupted for longer!") + return + else if(M.mind && M.mind.vampire) + if(!(VAMP_FULL in M.mind.vampire.powers)) + user << "\red The rod burns cold in your hand, filling you with grim determination. You feel the creature's power weaken." + M << "The nullrod's power interferes with your own! They are on to you!" + M.mind.vampire.nullified = max(8, M.mind.vampire.nullified + 8) //..() Ported from readapted vamp null code. Original seen down there. This doesn't need to be here since it's in the loops now. else user << "\red The rod appears to do nothing." for(var/mob/O in viewers(M, null)) O.show_message(text("\red [] waves [] over []'s head.", user, src, M), 1) return -/* if(M.mind) - if(M.mind.vampire) - if(ishuman(M)) - if(!(VAMP_FULL in M.mind.vampire.powers)) - M << "The nullrod's power interferes with your own!" - M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) - ..() -*/ + /obj/item/weapon/nullrod/afterattack(atom/A, mob/user as mob) if (istype(A, /turf/simulated/floor)) user << "\blue You hit the floor with the [src]." @@ -178,9 +181,64 @@ item_state = "canesword" force = 20 throwforce = 10 - w_class = 4 //there ain't no way in fuck you're shuving this inside your rucksack. No way. + w_class = 4 //there ain't no way in fuck you're shoving this inside your rucksack. No way. attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") + suicide_act(mob/user) + viewers(user) << "\red [user] brings the blade up to \his throat, and in one rapid motion slits \his throat open!" + return(BRUTELOSS) + +//Using a modified cane, with a storage var, instead of a box. Because the box idea is meh, in terms of the interface. +/obj/item/weapon/cane/syndie + var/sword //For holding the blade + var/locked //A small lock, so that you can't accidentally unsheathe it + + New() + sword = new /obj/item/weapon/canesword() + locked = 1 + ..() + + proc/unsheathe(mob/user as mob) + if(sword) + user.put_in_hands(sword) + user.visible_message("[user] takes the handle and draws a sword from inside the [src].", "You take the [src] by the handle and draw out a sharp blade from it.") + sword = null + icon_state = "cane_empty" + update_icon() + + proc/toggle_lock(mob/user as mob) + if(sword) + switch(locked) + if(1) + locked = 0 + user << "You twist and unlock the sword handle from the [src]." + if(0) + locked = 1 + user << "You twist and lock the sword handle to the [src]." + + attack_self(mob/user as mob) + if(iscarbon(user)) + toggle_lock(user) + + attack_hand(mob/user as mob) + if(!locked) + unsheathe(user) + else + ..() + + attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/canesword) && !sword) + user.u_equip(W) + W.loc = src + sword = W + W.dropped(user) + W.add_fingerprint(user) + add_fingerprint(user) + icon_state = "cane" + user << "You sheathe the sword, and lock its handle to the [src]." + locked = 1 + update_icon() + /obj/item/weapon/metal_bat desc = "The quality is a swing and a miss." name = "Metal Bat" diff --git a/code/global.dm b/code/global.dm index 57b90a85..90c139f7 100644 --- a/code/global.dm +++ b/code/global.dm @@ -37,6 +37,7 @@ var/list/paper_tag_whitelist = list("center","p","div","span","h1","h2","h3","h4 var/list/paper_blacklist = list("java","onblur","onchange","onclick","ondblclick","onfocus","onkeydown", \ "onkeypress","onkeyup","onload","onmousedown","onmousemove","onmouseout","onmouseover", \ "onmouseup","onreset","onselect","onsubmit","onunload") +var/list/signature_tag_whitelist = list("i","u","b","small","big") var/BLINDBLOCK = 0 var/DEAFBLOCK = 0 diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f35ed16b..daed9a39 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -125,10 +125,14 @@ datum/preferences var/uplinklocation = "PDA" - // OOC Metadata: + // OOC Metadata: var/metadata = "" var/slot_name = "" + //Signature information: + var/signature + var/signature_font + /datum/preferences/New(client/C) b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") if(istype(C)) @@ -139,6 +143,8 @@ datum/preferences return gender = pick(MALE, FEMALE) real_name = random_name(gender) + signature = "[real_name]" + signature_font = "Verdanta" gear = list() @@ -401,6 +407,11 @@ datum/preferences dat += "pAI Configuration
" dat += "
" + dat += "Character's Signature
" + dat += "Edit Font Help
" + dat += "[signature]
" + + dat += "
Hair
" dat += "Change Color
__
" dat += " Style: [h_style]
" @@ -1017,11 +1028,34 @@ datum/preferences gear -= gear_name break + else if(href_list["preference"] == "signature") + switch(href_list["task"]) + if("input") + var/raw_signature = input(user, "Choose your character's signature:","Character Preference") as text + if(!isnull(raw_signature)) + var/new_signature = checkhtml(raw_signature, signature_tag_whitelist) + if(new_signature && !(length(new_signature) > MAX_NAME_LEN + 12)) + signature = new_signature + else + user << "Invalid signature. Your character's signature should be at least 2 and at most [MAX_NAME_LEN + 12] characters long. For accepted formatting tags, please review the Help option." + if("help") + var/HTML + HTML += "A character's signature can be augmented with the following tags:
" + HTML += "" + HTML += "

Beyond that, a maximum of [MAX_NAME_LEN + 12] characters are allowed for the signature text, including symbols." + user << browse(HTML, "window=signaturehelp;size=350x300") + if("font") + signature_font = input(user, "Choose your character's signature:", "Character Preference") as null|anything in list("Times New Roman", "Verdana") + switch(href_list["task"]) if("random") switch(href_list["preference"]) if("name") real_name = random_name(gender) + signature = "[real_name]" if("age") age = rand(AGE_MIN, AGE_MAX) if("hair") @@ -1414,6 +1448,7 @@ datum/preferences religion = sanitize(copytext(raw_choice,1,MAX_MESSAGE_LEN)) return religion = choice + else switch(href_list["preference"]) if("gender") @@ -1500,6 +1535,8 @@ datum/preferences /datum/preferences/proc/copy_to(mob/living/carbon/human/character, safety = 0) if(be_random_name) real_name = random_name(gender) + signature = "[real_name]" + signature_font = "Verdana" if(config.humans_need_surnames) var/firstspace = findtext(real_name, " ") diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index cb375f71..d30d80c1 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -179,6 +179,9 @@ S["UI_style_color"] << UI_style_color S["UI_style_alpha"] << UI_style_alpha + S["signature"] >> signature + S["signature_font"] >> signature_font + //Sanitize metadata = sanitize_text(metadata, initial(metadata)) real_name = reject_bad_name(real_name) @@ -187,6 +190,8 @@ if(isnull(spawnpoint)) spawnpoint = "Arrivals Shuttle" if(isnull(nanotrasen_relation)) nanotrasen_relation = initial(nanotrasen_relation) if(!real_name) real_name = random_name(gender) + if(!signature) signature = "[real_name]" + if(!signature_font) signature_font = "Times New Roman" be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) gender = sanitize_gender(gender) age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) @@ -319,6 +324,9 @@ S["UI_style_color"] << UI_style_color S["UI_style_alpha"] << UI_style_alpha + S["signature"] << signature + S["signature_font"] << signature_font + return 1 diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 11aa29a6..6a6baec4 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -147,82 +147,22 @@ item_state = null /obj/item/weapon/reagent_containers/glass/rag/fluff/rusty_handkerchief //handkerchief - Janet Fisher - rustysh4ckleford - DONE - name = "Handkerchief" + name = "handkerchief" desc = "An ordinary handkerchief. It looks well used." - w_class = 1 icon = 'icons/obj/custom_items.dmi' icon_state = "janet_handkerchief" - amount_per_transfer_from_this = 5 - possible_transfer_amounts = list(5) - volume = 5 - can_be_placed_into = null -/obj/item/weapon/reagent_containers/glass/rag/fluff/rusty_handkerchief/attack_self(mob/user as mob) - user.visible_message("[user] holds [src] up to her face.") - if(do_after(user,30)) - user.visible_message("[user] moves [src] away from her face.") - return - -/obj/item/weapon/reagent_containers/glass/rag/fluff/rusty_handkerchief/attack(atom/target as obj|turf|area, mob/user as mob , flag) - if(ismob(target) && target.reagents && reagents.total_volume) - user.visible_message("\red \The [target] has been smothered with \the [src] by \the [user]!", "\red You smother \the [target] with \the [src]!", "You hear some struggling and muffled cries of surprise") - src.reagents.reaction(target, TOUCH) - spawn(5) src.reagents.clear_reagents() - return - else - ..() - -/obj/item/weapon/reagent_containers/glass/rag/fluff/rusty_handkerchief/afterattack(atom/A as obj|turf|area, mob/user as mob, proximity) - if(!proximity) return - if(istype(A) && src in user) - user.visible_message("[user] starts to wipe down [A] with [src]!") + attack_self(mob/user as mob) + user.visible_message("[user] holds [src] up to \his face.") if(do_after(user,30)) - user.visible_message("[user] finishes wiping off the [A]!") - A.clean_blood() - return - -/obj/item/weapon/reagent_containers/glass/rag/fluff/rusty_handkerchief/examine() - if (!usr) + user.visible_message("[user] blows \his nose and moves the [src] away from \his face.") return - usr << "That's \a [src]." - usr << desc - return -/obj/item/clothing/tie/storage/knifeharness/fluff/skull132_harness //A crimson harness - No assign character (Allyn "Crimson" Adema) - skull132 - DONE - name = "a crimson harness" - desc = "An Unathi ceremonial harness with two pieces of crimson cloth draped across the heart of the wearer." - icon = 'icons/obj/custom_items.dmi' - icon_state = "skull_harness2" - item_color = "skull_harness2" - item_state = "skull_harness2" - slots = 2 - -/* -/obj/item/clothing/tie/storage/knifeharness/fluff/skull132_harness/attackby(var/obj/item/O as obj, mob/user as mob) - ..() - update() - -/obj/item/clothing/tie/storage/knifeharness/fluff/skull132_harness/proc/updateskull() - var/count = 0 - for(var/obj/item/I in hold) - if(istype(I,/obj/item/weapon/hatchet/unathiknife)) - count++ - if(count>2) count = 2 - item_state = "skull_harness[count]" - icon_state = item_state - item_color = item_state - - if(istype(loc, /obj/item/clothing)) - var/obj/item/clothing/U = loc - if(istype(U.loc, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = U.loc - H.update_inv_w_uniform() - -/obj/item/clothing/tie/storage/knifeharness/fluff/skull132_harness/New() - ..() - new /obj/item/weapon/hatchet/unathiknife(hold) - new /obj/item/weapon/hatchet/unathiknife(hold) -*/ + afterattack(atom/A as obj|turf|area, mob/user as mob, proximity) + if(A == user) + attack_self(user) + return + ..() /obj/item/weapon/disk/fluff/nebula_chip //data chip - Roxy Wallace - nebulaflare - DONE name = "data chip" @@ -231,59 +171,38 @@ icon_state = "nebula_chip" w_class = 1 -/obj/item/weapon/storage/fluff/nebula_glasses //chich eyewear - Roxy Wallace - nebulaflare - DONE - name = "Chic Eyewear" - desc = " A stylish pair of glasses. They look custom made." +/obj/item/clothing/glasses/fluff/nebula_glasses //chich eyewear - Roxy Wallace - nebulaflare - DONE + name = "chic eyewear" + desc = "A stylish pair of glasses. They look custom made." icon = 'icons/obj/custom_items.dmi' icon_state = "nebula_glasses" - item_state = "glasses" - flags = FPRINT | GLASSESCOVERSEYES - slot_flags = SLOT_EYES - can_hold = list( - "/obj/item/weapon/disk/fluff/nebula_chip") - storage_slots = 1 - max_combined_w_class = 1 - max_w_class = 1 - w_class = 2 + item_state = "nebula_glasses" + + var/chip + New() + chip = new /obj/item/weapon/disk/fluff/nebula_chip() ..() - new /obj/item/weapon/disk/fluff/nebula_chip(src) - return -/obj/item/weapon/storage/fluff/nebula_glasses/proc/can_use() - if(!ismob(loc)) return 0 - var/mob/M = loc - if(src in M.get_equipped_items()) - return 1 - else - return 0 + attack_self(mob/user as mob) + if(chip) + user.put_in_hands(chip) + user << "\blue You eject a small, concealed data chip from a small slot in the frames of the [src]." + chip = null -/obj/item/weapon/storage/fluff/nebula_glasses/MouseDrop(obj/over_object as obj, src_location, over_location) - var/mob/M = usr - if(!istype(over_object, /obj/screen)) - return ..() - playsound(src.loc, "rustle", 50, 1, -5) - if (!M.restrained() && !M.stat && can_use()) - switch(over_object.name) - if("r_hand") - M.u_equip(src) - M.put_in_r_hand(src) - if("l_hand") - M.u_equip(src) - M.put_in_l_hand(src) - src.add_fingerprint(usr) - return + attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W, /obj/item/weapon/disk/fluff/nebula_chip) && !chip) + user.u_equip(W) + W.loc = src + chip = W + W.dropped(user) + W.add_fingerprint(user) + add_fingerprint(user) + user << "You slot the [W] back into its place in the frames of the [src]." /obj/item/clothing/mask/cigarette/pipe/fluff/tool_pipe //Worn pipe - Michael Tool - mrimatool - DONE name = "worn pipe" desc = "A worn wooden pipe with the initials S.F. scratched into the base." - icon = 'icons/obj/custom_items.dmi' - icon_state = "toolpipeoff" - item_state = "pipeoff" - icon_on = "toolpipeon" //Note - these are in masks.dmi - icon_off = "pipeoff" - smoketime = 100 - can_hurt_mob = 0 /obj/item/weapon/reagent_containers/food/drinks/flask/fluff/tool_flask //Worn flask - Michael Tool - mrimatool - DONE name = "worn flask" @@ -292,51 +211,6 @@ icon_state = "tool_flask" volume = 60 -/* -/obj/item/weapon/melee/baton/fluff/omnivac_baton //Tiger Claw - Zander Moon - omnivac - DONE - name = "Tiger Claw" - desc = "A small energy dagger given to Golden Tigers meant to incapacitate people quickly." - icon = 'icons/obj/custom_items.dmi' - icon_state = "tigerclaw" - item_state = "tigerclaw" - -/obj/item/weapon/melee/baton/fluff/omnivac_baton/update_icon() - if(status) - icon_state = "tigerclaw_active" - item_state = "tigerclaw_active" - else - icon_state = "tigerclaw" - item_state = "tigerclaw" - -/obj/item/weapon/melee/baton/fluff/omnivac_baton/attack_self(mob/user as mob) - if(status && (CLUMSY in user.mutations) && prob(50)) - user << "\red You grab the [src] on the wrong side." - user.Weaken(30) - charges-- - if(charges < 1) - status = 0 - update_icon() - return - if(charges > 0) - status = !status - user << "\The [src] is now [status ? "on" : "off"]." - playsound(user, 'sound/weapons/saberon.ogg', 50, 1) - update_icon() - else - status = 0 - user << "\The [src] is out of charge." - add_fingerprint(user) -*/ -/* -/obj/item/device/modkit/fluff/omnivac_modkit //Ornate box - Zander Moon - omnivac - SPRITE - name = "ornate box" - desc = "An ornate box, containing the handle of an energy blade." - icon = 'icons/obj/custom_items.dmi' - icon_state = "omni_modkit" - parts = MODKIT_HELMET - from_helmet = list(/obj/item/weapon/melee) - to_helmet = list(/obj/item/weapon/melee/baton/fluff/omnivac_baton) -*/ /obj/item/clothing/head/soft/fluff/nebula_cap //Black baseball cap - Roxy Wallace - nebulaflare - DONE name = "black baseball cap" @@ -410,20 +284,20 @@ item_state = "pen" var/ink = 1 -/obj/item/weapon/pen/fluff/eliza_pen/attack_self(mob/user) - switch(ink) - if(1) - ink = 2 - colour = "blue" - user << "You cycle the pen to use the blue ink cartridge." - if(2) - ink = 3 - colour = "red" - user << "You cycle the pen to use the red ink cartridge." - if(3) - ink = 1 - colour = "black" - user << "You cycle the pen to use the black ink cartridge." + attack_self(mob/user) + switch(ink) + if(1) + ink = 2 + colour = "blue" + user << "You cycle the pen to use the blue ink cartridge." + if(2) + ink = 3 + colour = "red" + user << "You cycle the pen to use the red ink cartridge." + if(3) + ink = 1 + colour = "black" + user << "You cycle the pen to use the black ink cartridge." /obj/item/device/fluff/amy_player //Music player - Amy Heris - gollee - DONE - Modding name = "music player" @@ -442,74 +316,66 @@ "Affinity", "Dream Spark" ) -/obj/item/clothing/ears/headphone - name = "Headphone" - desc = "Headphones made for special players..." - icon_state = "earmuffs" - item_state = "earmuffs" - slot_flags = SLOT_EARS //| SLOT_TWOEARS - - //Totally damned surprised this worked on the first go. Huh, well, it works! Considering integration into main code as well. - Skull132 -/obj/item/device/fluff/amy_player/emp_act(severity) - emped = 1 - icon_state = "amy_player_broken" - playing = 0 + emp_act(severity) + emped = 1 + icon_state = "amy_player_broken" + playing = 0 -/obj/item/device/fluff/amy_player/attackby(var/obj/item/O as obj, var/mob/user as mob) - if (emped == 1) - if(istype(O, /obj/item/weapon/screwdriver) && fixed == 0) - fixed = 1 - user << "You unfasten the back panel." - if(istype(O, /obj/item/device/multitool) && fixed == 1) - fixed = 0 - user << "You quickly pulse a few fires, and reset the screen and device." - emped = 0 - icon_state = "amy_player_off" + attackby(var/obj/item/O as obj, var/mob/user as mob) + if (emped == 1) + if(istype(O, /obj/item/weapon/screwdriver) && fixed == 0) + fixed = 1 + user << "You unfasten the back panel." + if(istype(O, /obj/item/device/multitool) && fixed == 1) + fixed = 0 + user << "You quickly pulse a few fires, and reset the screen and device." + emped = 0 + icon_state = "amy_player_off" - return -// else -// user << "You see little reason to start hacking into the player's wiring." + return + // else + // user << "You see little reason to start hacking into the player's wiring." -/obj/item/device/fluff/amy_player/attack_self(mob/user) - if(emped) - user<< "The screen flickers and blinks with errors. It looks like it's about to give up the ghost." - else if(playing == 0) - var/mob/living/carbon/human/M = usr - var/pickedsong = input("Select the song you want to play.","Songs", null, null) in songs - if(istype(M.l_ear, /obj/item/clothing/ears/headphone) || istype(M.r_ear, /obj/item/clothing/ears/headphone)) - switch(pickedsong) - if("Dream Spark") - usr << sound('sound/mp3/dreamspark.ogg') - if("Second Chance") - usr << sound('sound/mp3/secondchance.ogg') - if("Redoubt") - usr << sound('sound/mp3/redoubt.ogg') - if("Affinity") - usr << sound('sound/mp3/affinity.ogg') - if("Lord of Light") - usr << sound('sound/mp3/lordoflight.ogg') - else - for(var/mob/I in view()) + attack_self(mob/user) + if(emped) + user<< "The screen flickers and blinks with errors. It looks like it's about to give up the ghost." + else if(playing == 0) + var/mob/living/carbon/human/M = usr + var/pickedsong = input("Select the song you want to play.","Songs", null, null) in songs + if(istype(M.l_ear, /obj/item/clothing/ears/headphone) || istype(M.r_ear, /obj/item/clothing/ears/headphone)) switch(pickedsong) if("Dream Spark") - I << sound('sound/mp3/dreamspark.ogg') + usr << sound('sound/mp3/dreamspark.ogg') if("Second Chance") - I << sound('sound/mp3/secondchance.ogg') + usr << sound('sound/mp3/secondchance.ogg') if("Redoubt") - I << sound('sound/mp3/redoubt.ogg') + usr << sound('sound/mp3/redoubt.ogg') if("Affinity") - I << sound('sound/mp3/affinity.ogg') + usr << sound('sound/mp3/affinity.ogg') if("Lord of Light") - I << sound('sound/mp3/lordoflight.ogg') - user << "You turn on the music player, selecting a song. A song called '[pickedsong]' starts playing through the earbuds as the device sparks to life." - icon_state = "amy_player_on" - playing = 1 - else - user << "You turn off the music player." - playing = 0 + usr << sound('sound/mp3/lordoflight.ogg') + else + for(var/mob/I in view()) + switch(pickedsong) + if("Dream Spark") + I << sound('sound/mp3/dreamspark.ogg') + if("Second Chance") + I << sound('sound/mp3/secondchance.ogg') + if("Redoubt") + I << sound('sound/mp3/redoubt.ogg') + if("Affinity") + I << sound('sound/mp3/affinity.ogg') + if("Lord of Light") + I << sound('sound/mp3/lordoflight.ogg') + user << "You turn on the music player, selecting a song. A song called '[pickedsong]' starts playing through the earbuds as the device sparks to life." + icon_state = "amy_player_on" + playing = 1 + else + user << "You turn off the music player." + playing = 0 /* if(0) @@ -529,6 +395,13 @@ / "Dream Spark" */ +/obj/item/clothing/ears/headphone + name = "Headphone" + desc = "Headphones made for special players..." + icon_state = "earmuffs" + item_state = "earmuffs" + slot_flags = SLOT_EARS //| SLOT_TWOEARS + /obj/item/device/fluff/sten_synth //VoiceOS.V2 - Sten Asval - vtol - DONE name = "VoiceOS.V2" desc = "A text-to-speech device with an appearance that is not too futuristic. It looks slim and light. On the back of it there are initials in silver: SA." @@ -669,20 +542,21 @@ item_color = "cecillia_locket1" slots = 1 + New() + ..() + new /obj/item/weapon/reagent_containers/pill/cecillia_pill(hold) + return + /obj/item/weapon/reagent_containers/pill/cecillia_pill name = "Cici's moonshine pill" desc = "Smells of home-made remedies." icon_state = "pill8" + New() ..() reagents.add_reagent("space_drugs", 5) reagents.add_reagent("paroxetine", 5) -/obj/item/clothing/tie/storage/fluff/cecillia_locket/New() - ..() - new /obj/item/weapon/reagent_containers/pill/cecillia_pill(hold) - return - /obj/item/weapon/storage/backpack/satchel/fluff/cecillia_satchel //Satchel-bag - Cecillia Lambert - casperf1 - SPRITE name = "satchel-bag" desc = "This looks old, is not yours and if you're wearing it, the original owner is probably dead." @@ -737,17 +611,6 @@ icon_state = "leo_coat" item_state = "leo_coat" -/* -/obj/item/device/modkit/fluff/leo_modkit //Weapon case - Leo Wyatt - keinto - DONE - name = "weapon case" - desc = "A sturdy leather case, with a velvet covered interior.." - icon = 'icons/obj/custom_items.dmi' - icon_state = "leo_mod" - parts = MODKIT_HELMET - from_helmet = list(/obj/item/weapon/gun/projectile/detective/semiauto) - to_helmet = list(/obj/item/weapon/gun/projectile/detective/semiauto/fluff/leo_gun) -*/ - /obj/item/weapon/gun/projectile/detective/semiauto/fluff/leo_gun //Instant Prosecutor - Leo Wyatt - keinto - DONE (stab) name = "\improper Instant Prosecutor" desc = "An original Colt 1911 pistol. Slightly worn on the edges, this gun has its name embedded on the side." @@ -859,15 +722,15 @@ item_state = "ushanka_avadown" icon_state = "ushankadown" -/obj/item/clothing/head/ushanka/fluff/ava_ushanka/attack_self(mob/user as mob) - if(src.icon_state == "ushankadown") - src.icon_state = "ushankaup" - src.item_state = "ushanka_avaup" - user << "You raise the ear flaps on the ushanka." - else - src.icon_state = "ushankadown" - src.item_state = "ushanka_avadown" - user << "You lower the ear flaps on the ushanka." + attack_self(mob/user as mob) + if(src.icon_state == "ushankadown") + src.icon_state = "ushankaup" + src.item_state = "ushanka_avaup" + user << "You raise the ear flaps on the ushanka." + else + src.icon_state = "ushankadown" + src.item_state = "ushanka_avadown" + user << "You lower the ear flaps on the ushanka." /obj/item/clothing/tie/fluff/hamil_badge // Internal Investigations Badge - Muhammad Hamil - Jackboot - DONE name = "Internal Investigations Badge" @@ -875,13 +738,13 @@ icon = 'icons/obj/custom_items.dmi' item_state = "hamil_badge" -/obj/item/clothing/tie/fluff/hamil_badge/attack_self(mob/user as mob) - if(isliving(user)) - user.visible_message("\red [user] flashes their [src].\nIt reads: Muhammad Hamil, Internal Investigations, Persepolis..","\red You display the [src].\nIt reads: Muhammad Hamil, Internal Investigations, Persepolis.") + attack_self(mob/user as mob) + if(isliving(user)) + user.visible_message("\red [user] flashes their [src].\nIt reads: Muhammad Hamil, Internal Investigations, Persepolis..","\red You display the [src].\nIt reads: Muhammad Hamil, Internal Investigations, Persepolis.") -/obj/item/clothing/tie/fluff/hamil_badge/attack(mob/living/carbon/human/M, mob/living/user) - if(isliving(user)) - user.visible_message("\red [user] invades [M]'s personal space, thrusting [src] into their face insistently.","\red You invade [M]'s personal space, thrusting [src] into their face insistently. You are the law.") + attack(mob/living/carbon/human/M, mob/living/user) + if(isliving(user)) + user.visible_message("\red [user] invades [M]'s personal space, thrusting [src] into their face insistently.","\red You invade [M]'s personal space, thrusting [src] into their face insistently. You are the law.") /obj/item/clothing/mask/gas/fluff/stefan_mask // Modified Gas Mask - Oliver Stefan - Nbielinski - DONE desc = "This odd looking gas mask is quite clearly not of NanoTrasen origin as it sports a black metal polish, as well as a reflective face plate that mirrors the view of the mask itself. This particular mask appears to breathe with the user, hissing when they exhale, and whining softly as they inhale." @@ -902,43 +765,43 @@ force = 2 var/on = 0 -/obj/item/weapon/melee/fluff/balisong/attack_self(mob/user as mob) - on = !on - if(on) - user.visible_message("\red With but a flashy twirl of their fingers, [user] flicks open the balisong.",\ - "\red You with a bit a flair, open the balisong. The metallic shine of the blade touching your gaze.",\ - "You hear an ominous click.") - icon_state = "balisong_1" - item_state = "balisong_m" - w_class = 3 - force = 2 - attack_verb = list("prodded") - else - user.visible_message("\blue Without even looking, [user] casually flicks the balisong closed.",\ - "\blue You skilfully close the balisong.",\ - "You hear a click.") - icon_state = "balisong_0" - w_class = 2 - force = 2 - attack_verb = list("thumped") + attack_self(mob/user as mob) + on = !on + if(on) + user.visible_message("\red With but a flashy twirl of their fingers, [user] flicks open the balisong.",\ + "\red You with a bit a flair, open the balisong. The metallic shine of the blade touching your gaze.",\ + "You hear an ominous click.") + icon_state = "balisong_1" + item_state = "balisong_m" + w_class = 3 + force = 2 + attack_verb = list("prodded") + else + user.visible_message("\blue Without even looking, [user] casually flicks the balisong closed.",\ + "\blue You skilfully close the balisong.",\ + "You hear a click.") + icon_state = "balisong_0" + w_class = 2 + force = 2 + attack_verb = list("thumped") - if(istype(user,/mob/living/carbon/human)) - var/mob/living/carbon/human/H = user - H.update_inv_l_hand() - H.update_inv_r_hand() + if(istype(user,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = user + H.update_inv_l_hand() + H.update_inv_r_hand() - playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) - add_fingerprint(user) + playsound(src.loc, 'sound/weapons/empty.ogg', 50, 1) + add_fingerprint(user) - if(blood_overlay && blood_DNA && (blood_DNA.len >= 1)) - var/icon/I = new /icon(src.icon, src.icon_state) - I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) - I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) - blood_overlay = I + if(blood_overlay && blood_DNA && (blood_DNA.len >= 1)) + var/icon/I = new /icon(src.icon, src.icon_state) + I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)),ICON_ADD) + I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"),ICON_MULTIPLY) + blood_overlay = I - overlays += blood_overlay + overlays += blood_overlay - return + return /obj/structure/stool/bed/chair/wheelchair/fluff/kit // Kit's Wheelchair - Cassidy Kit - Meowykins - DONE name = "Kit's Wheelchair" @@ -948,12 +811,12 @@ anchored = 0 movable = 1 -obj/structure/stool/bed/chair/wheelchair/fluff/kit/handle_rotation() - overlays = null - var/image/O = image(icon = 'icons/obj/custom_items.dmi', icon_state = "kit_w_overlay", layer = FLY_LAYER, dir = src.dir) - overlays += O - if(buckled_mob) - buckled_mob.dir = dir + handle_rotation() + overlays = null + var/image/O = image(icon = 'icons/obj/custom_items.dmi', icon_state = "kit_w_overlay", layer = FLY_LAYER, dir = src.dir) + overlays += O + if(buckled_mob) + buckled_mob.dir = dir /obj/item/weapon/storage/fluff/binder // Black Binder - Cassidy Kit - Meowykins - DONE name = "Black Binder" @@ -966,13 +829,13 @@ obj/structure/stool/bed/chair/wheelchair/fluff/kit/handle_rotation() "/obj/item/weapon/pen" ) -/obj/item/weapon/storage/fluff/binder/New() - ..() - new /obj/item/weapon/folder/blue(src) - new /obj/item/weapon/folder/red(src) - new /obj/item/weapon/folder/white(src) - new /obj/item/weapon/folder/yellow(src) - new /obj/item/weapon/pen/fluff/kit_pen(src) + New() + ..() + new /obj/item/weapon/folder/blue(src) + new /obj/item/weapon/folder/red(src) + new /obj/item/weapon/folder/white(src) + new /obj/item/weapon/folder/yellow(src) + new /obj/item/weapon/pen/fluff/kit_pen(src) /obj/item/weapon/pen/fluff/kit_pen // Fountain Pen - Cassidy Kit - Meowykins - DONE desc = "A small fountain pen. It has several spots to change the cartridge inside for another color, as well as a selector switch for ease of use." @@ -982,20 +845,20 @@ obj/structure/stool/bed/chair/wheelchair/fluff/kit/handle_rotation() item_state = "pen" var/ink = 1 -/obj/item/weapon/pen/fluff/kit_pen/attack_self(mob/user) - switch(ink) - if(1) - ink = 2 - colour = "blue" - user << "You cycle the pen to use the blue ink cartridge." - if(2) - ink = 3 - colour = "red" - user << "You cycle the pen to use the red ink cartridge." - if(3) - ink = 1 - colour = "black" - user << "You cycle the pen to use the black ink cartridge." + attack_self(mob/user) + switch(ink) + if(1) + ink = 2 + colour = "blue" + user << "You cycle the pen to use the blue ink cartridge." + if(2) + ink = 3 + colour = "red" + user << "You cycle the pen to use the red ink cartridge." + if(3) + ink = 1 + colour = "black" + user << "You cycle the pen to use the black ink cartridge." /obj/structure/sign/shaw_degree //Xenonuerology Doctorate - Alexis Shaw - Tenenza name = "\improper Xenonuerology degree"//Description trimmed down, summarized. diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 66718748..b03117e9 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -1268,4 +1268,14 @@ I said no! reagents = list("sugar" = 5, "frostoil" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/mint +////////////////////////////////////////// +// End of BS12 food port +////////////////////////////////////////// +/datum/recipe/chocolatebox + reagents = list("cream" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, + /obj/item/weapon/reagent_containers/food/snacks/grown/cherries + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chocolatebox \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm index 34078cee..59f83deb 100644 --- a/code/modules/mob/living/carbon/brain/posibrain.dm +++ b/code/modules/mob/living/carbon/brain/posibrain.dm @@ -14,6 +14,8 @@ locked = 0 mecha = null//This does not appear to be used outside of reference in mecha.dm. + var/obj/item/device/radio/radio = null//Let's give it a radio. + /obj/item/device/mmi/posibrain/attack_self(mob/user as mob) if(brainmob && !brainmob.key && searching == 0) @@ -142,4 +144,33 @@ // src.brainmob.brain_op_stage = 4.0 dead_mob_list -= src.brainmob + radio = new(src)//Spawns a radio inside the MMI. + radio.broadcasting = 0//So it's broadcasting from the start. + ..() + +/obj/item/device/mmi/posibrain/verb/Toggle_Broadcasting() //totally not nicking from certain places. Yay. + set name = "Toggle Broadcasting" + set desc = "Toggle broadcasting channel on or off." + set category = "Posi" + set src = usr.loc//In user location, or in MMI in this case. + set popup_menu = 0//Will not appear when right clicking. + + if(brainmob.stat)//Only the brainmob will trigger these so no further check is necessary. + brainmob << "Can't do that while incapacitated or dead." + + radio.broadcasting = radio.broadcasting==1 ? 0 : 1 + brainmob << "\blue Radio is [radio.broadcasting==1 ? "now" : "no longer"] broadcasting." + +/obj/item/device/mmi/posibrain/verb/Toggle_Listening() + set name = "Toggle Listening" + set desc = "Toggle listening channel on or off." + set category = "Posi" + set src = usr.loc + set popup_menu = 0 + + if(brainmob.stat) + brainmob << "Can't do that while incapacitated or dead." + + radio.listening = radio.listening==1 ? 0 : 1 + brainmob << "\blue Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast." \ No newline at end of file diff --git a/code/modules/mob/living/carbon/brain/say.dm b/code/modules/mob/living/carbon/brain/say.dm index 6f8de199..d205e586 100644 --- a/code/modules/mob/living/carbon/brain/say.dm +++ b/code/modules/mob/living/carbon/brain/say.dm @@ -3,7 +3,7 @@ if (silent) return - if(!(container && (istype(container, /obj/item/device/mmi) || istype(container, /obj/item/device/mmi/posibrain)))) + if(!(container && (istype(container, /obj/item/device/mmi)))) return //No MMI, can't speak, bucko./N else if(prob(emp_damage*4)) @@ -15,4 +15,8 @@ var/obj/item/device/mmi/radio_enabled/R = container if(R.radio) spawn(0) R.radio.hear_talk(src, sanitize(message)) + if(istype(container, /obj/item/device/mmi/posibrain))//For them posibrains that now get radios. Apparently. + var/obj/item/device/mmi/posibrain/R = container + if(R.radio) + spawn(0) R.radio.hear_talk(src, sanitize(message)) ..() \ No newline at end of file diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index e9072d1a..e07b8d90 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -204,7 +204,7 @@ t = replacetext(t, "\[/u\]", "") t = replacetext(t, "\[large\]", "") t = replacetext(t, "\[/large\]", "") - t = replacetext(t, "\[sign\]", "[user ? user.real_name : "Anonymous"]") + t = replacetext(t, "\[sign\]", "[user ? user.mind.signature : "Anonymous"]") t = replacetext(t, "\[field\]", "") if(!iscrayon) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 11e32e8a..45f01a01 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -1177,8 +1177,40 @@ datum required_container = /obj/item/slime_extract/silver required_other = 1 on_reaction(var/datum/reagents/holder) + var/blocked = list(/obj/item/weapon/reagent_containers/food/snacks/customizable, + /obj/item/weapon/reagent_containers/food/snacks/customizable/burger, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/bar, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/candycane, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/cash, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/coin, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/cookie, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/cotton, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/donut, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/gum, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/gummybear, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/gummyworm, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/jawbreaker, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/jellybean, + /obj/item/weapon/reagent_containers/food/snacks/customizable/candy/sucker, + /obj/item/weapon/reagent_containers/food/snacks/customizable/cook, + /obj/item/weapon/reagent_containers/food/snacks/customizable/cook/bread, + /obj/item/weapon/reagent_containers/food/snacks/customizable/cook/cake, + /obj/item/weapon/reagent_containers/food/snacks/customizable/cook/donkpocket, + /obj/item/weapon/reagent_containers/food/snacks/customizable/cook/jelly, + /obj/item/weapon/reagent_containers/food/snacks/customizable/cook/kebab, + /obj/item/weapon/reagent_containers/food/snacks/customizable/cook/pie, + /obj/item/weapon/reagent_containers/food/snacks/customizable/cook/salad, + /obj/item/weapon/reagent_containers/food/snacks/customizable/cook/waffles, + /obj/item/weapon/reagent_containers/food/snacks/customizable/fullycustom, + /obj/item/weapon/reagent_containers/food/snacks/customizable/pasta, + /obj/item/weapon/reagent_containers/food/snacks/customizable/pizza, + /obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich, + /obj/item/weapon/reagent_containers/food/snacks/customizable/soup, + /obj/item/weapon/reagent_containers/food/snacks/cereal, + /obj/item/weapon/reagent_containers/food/snacks/slimesoup) - var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks + var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - blocked // BORK BORK BORK playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 5f51a8ae..8c8a7e64 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -3309,3 +3309,31 @@ ..() reagents.add_reagent("nutriment", 3) +/obj/item/weapon/reagent_containers/food/snacks/chocolatebox + name = "box of chocolates" + desc = "A heart-shaped box of sweet, sweet chocolate-y goodness." + icon_state = "chocolatebox-closed" + wrapped = 1 + bitesize = 1 + trash = /obj/item/trash/chocolatebox + + New() + ..() + reagents.add_reagent("nutriment", 6) + + attack_self(mob/user as mob) + if(wrapped) + open(user) + + proc/open(mob/user as mob) + wrapped = 0 + user << "You open the [src]." + icon_state = "chocolatebox-open" + update_icon() + + attack(mob/M as mob, mob/user as mob, def_zone) + if(wrapped) + user << "You should open the box, first." + return + else + ..() \ No newline at end of file diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index e3f3a0f5..90c524a6 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi index 8b4e4818..9b215b9c 100644 Binary files a/icons/obj/custom_items.dmi and b/icons/obj/custom_items.dmi differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 8f43308d..7660da0e 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/icons/obj/trash.dmi b/icons/obj/trash.dmi index c031a957..62a0a9bd 100644 Binary files a/icons/obj/trash.dmi and b/icons/obj/trash.dmi differ diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 38ccc7f9..ea13a5c4 100644 Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ