diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 57e22a3eef4..e20a3af837b 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -144,20 +144,19 @@ sharp = 1 edge = 1 w_class = 3 + hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - suicide_act(mob/user) - to_chat(viewers(user), "[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") - return(BRUTELOSS) +/obj/item/weapon/katana/cursed + slot_flags = null + +/obj/item/weapon/katana/suicide_act(mob/user) + user.visible_message("[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.") + return(BRUTELOSS) /obj/item/weapon/katana/IsShield() return 1 -/obj/item/weapon/katana/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) - playsound(loc, 'sound/weapons/bladeslice.ogg', 50, 1, -1) - return ..() - - /obj/item/weapon/harpoon name = "harpoon" sharp = 1 diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 1e6ef08edf6..88af8bf4dd3 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -202,9 +202,14 @@ desc = "Woof!" icon_state = "corgihead" item_state = "chickensuit" + flags = BLOCKHAIR + +/obj/item/clothing/head/corgi/super_hero + name = "super-hero corgi suit head" + desc = "Woof! This one seems to pulse with a strange power" flags = BLOCKHAIR | NODROP -/obj/item/clothing/head/corgi/en +/obj/item/clothing/head/corgi/super_hero/en name = "E-N suit head" icon_state = "enhead" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index c8b62d446be..5abc5e86cbf 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -152,17 +152,25 @@ item_state = "chickensuit" body_parts_covered = UPPER_TORSO|ARMS|LOWER_TORSO|LEGS|FEET flags_inv = HIDESHOES|HIDEJUMPSUIT + +/obj/item/clothing/suit/corgisuit/super_hero + name = "super-hero corgi suit" + desc = "A suit made long ago by the ancient empire KFC. This one pulses with a strange power." flags = NODROP -/obj/item/clothing/suit/corgisuit/en - name = "\improper E-N suit" +/obj/item/clothing/suit/corgisuit/super_hero/en + name = "\improper super-hero E-N suit" icon_state = "ensuit" -/obj/item/clothing/suit/corgisuit/en/New() +/obj/item/clothing/suit/corgisuit/super_hero/en/New() ..() processing_objects.Add(src) -/obj/item/clothing/suit/corgisuit/en/process() +/obj/item/clothing/suit/corgisuit/super_hero/en/Destroy() + processing_objects.Remove(src) + return ..() + +/obj/item/clothing/suit/corgisuit/super_hero/en/process() if(prob(2)) for(var/obj/M in orange(2,src)) if(!M.anchored && (M.flags & CONDUCT)) diff --git a/code/modules/hydroponics/seed_packets.dm b/code/modules/hydroponics/seed_packets.dm index dee87d848d3..2649b04c3e4 100644 --- a/code/modules/hydroponics/seed_packets.dm +++ b/code/modules/hydroponics/seed_packets.dm @@ -307,3 +307,6 @@ var/global/list/plant_seed_sprites = list() /obj/item/seeds/coffeerseed seed_type = "coffeer" + +/obj/item/seeds/cash + seed_type = "cashtree" \ No newline at end of file diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 16c247b6b50..25358df5af2 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -1,114 +1,218 @@ +//Originally coded by ISaidNo, later modified by Kelenius. Ported from Baystation12. + /obj/structure/closet/crate/secure/loot name = "abandoned crate" desc = "What could be inside?" icon_state = "securecrate" - icon_opened = "securecrateopen" - icon_closed = "securecrate" var/code = null var/lastattempt = null - var/attempts = 3 - locked = 1 - var/min = 1 - var/max = 10 + var/attempts = 10 + var/codelen = 4 /obj/structure/closet/crate/secure/loot/New() ..() - code = rand(min,max) - var/loot = rand(1,30) - switch(loot) - if(1) - new/obj/item/weapon/reagent_containers/food/drinks/bottle/rum(src) - new/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus(src) - new/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src) - new/obj/item/weapon/lighter/zippo(src) - if(2) - new/obj/item/weapon/pickaxe/drill(src) - new/obj/item/device/taperecorder(src) - new/obj/item/clothing/suit/space(src) - new/obj/item/clothing/head/helmet/space(src) - if(3) - return - if(4) - new/obj/item/weapon/reagent_containers/glass/beaker/bluespace(src) - if(5 to 6) - for(var/i = 0, i < 10, i++) - new/obj/item/weapon/ore/diamond(src) - if(7) - return - if(8) - return - if(9) - for(var/i = 0, i < 3, i++) - new/obj/machinery/portable_atmospherics/hydroponics(src) - if(10) - for(var/i = 0, i < 3, i++) - new/obj/item/weapon/reagent_containers/glass/beaker/noreact(src) - if(11 to 13) - new/obj/item/weapon/melee/classic_baton(src) - if(14) - return - if(15) - new/obj/item/clothing/under/chameleon(src) - for(var/i = 0, i < 7, i++) - new/obj/item/clothing/accessory/horrible(src) - if(16) - new/obj/item/clothing/under/shorts(src) - new/obj/item/clothing/under/shorts/red(src) - new/obj/item/clothing/under/shorts/blue(src) - //Dummy crates start here. - if(17 to 29) - return - //Dummy crates end here. - if(30) - new/obj/item/weapon/melee/baton(src) + var/list/digits = list("1", "2", "3", "4", "5", "6", "7", "8", "9", "z") + code = "" + for(var/i = 0, i < codelen, i++) + var/dig = pick(digits) + code += dig + digits -= dig //Player can enter codes with matching digits, but there are never matching digits in the answer -/obj/structure/closet/crate/secure/loot/togglelock(mob/user as mob) + var/loot = rand(1,100) //100 different crates with varying chances of spawning + switch(loot) + if(1 to 5) //5% chance + new /obj/item/weapon/reagent_containers/food/drinks/bottle/rum(src) + new /obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus(src) + new /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey(src) + new /obj/item/weapon/lighter(src) + if(6 to 10) + new /obj/item/weapon/bedsheet(src) + new /obj/item/weapon/kitchen/knife(src) + new /obj/item/weapon/wirecutters(src) + new /obj/item/weapon/screwdriver(src) + new /obj/item/weapon/weldingtool(src) + new /obj/item/weapon/hatchet(src) + new /obj/item/weapon/crowbar(src) + if(11 to 15) + new /obj/item/weapon/reagent_containers/glass/beaker/bluespace(src) + if(16 to 20) + for(var/i in 1 to 10) + new /obj/item/weapon/ore/diamond(src) + if(21 to 25) + for(var/i in 1 to 5) + new /obj/item/weapon/contraband/poster(src) + if(26 to 30) + for(var/i in 1 to 3) + new /obj/item/weapon/reagent_containers/glass/beaker/noreact(src) + if(31 to 35) + new /obj/item/seeds/cash(src) + if(36 to 40) + new /obj/item/weapon/melee/baton(src) + if(41 to 45) + new /obj/item/clothing/under/shorts/red(src) + new /obj/item/clothing/under/shorts/blue(src) + if(46 to 50) + new /obj/item/clothing/under/chameleon(src) + for(var/i in 1 to 7) + new /obj/item/clothing/accessory/horrible(src) + if(51 to 52) // 2% chance + new /obj/item/weapon/melee/classic_baton(src) + if(53 to 54) + new /obj/item/toy/balloon(src) + if(55 to 56) + var/newitem = pick(subtypesof(/obj/item/toy/prize)) + new newitem(src) + if(57 to 58) + new /obj/item/toy/syndicateballoon(src) + if(59 to 60) + new /obj/item/weapon/gun/energy/kinetic_accelerator/hyper(src) + new /obj/item/clothing/suit/space(src) + new /obj/item/clothing/head/helmet/space(src) + if(61 to 62) + for(var/i in 1 to 5) + new /obj/item/clothing/head/kitty(src) + new /obj/item/clothing/accessory/petcollar(src) + if(63 to 64) + for(var/i in 1 to rand(4, 7)) + var/newcoin = pick(/obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/silver, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/iron, /obj/item/weapon/coin/gold, /obj/item/weapon/coin/diamond, /obj/item/weapon/coin/plasma, /obj/item/weapon/coin/uranium) + new newcoin(src) + if(65 to 66) + new /obj/item/clothing/suit/ianshirt(src) + new /obj/item/clothing/suit/corgisuit(src) + new /obj/item/clothing/head/corgi(src) + if(67 to 68) + for(var/i in 1 to rand(4, 7)) + var /newitem = pick(subtypesof(/obj/item/weapon/stock_parts) - /obj/item/weapon/stock_parts/subspace) + new newitem(src) + if(69 to 70) + for(var/i in 1 to 5) + new /obj/item/weapon/ore/bluespace_crystal(src) + if(71 to 72) + new /obj/item/weapon/pickaxe/drill(src) + if(73 to 74) + new /obj/item/weapon/pickaxe/drill/jackhammer(src) + if(75 to 76) + new /obj/item/weapon/pickaxe/diamond(src) + if(77 to 78) + new /obj/item/weapon/pickaxe/drill/diamonddrill(src) + if(79 to 80) + new /obj/item/weapon/cane(src) + new /obj/item/clothing/head/collectable/tophat(src) + if(81 to 82) + new /obj/item/weapon/gun/energy/plasmacutter(src) + if(83 to 84) + new /obj/item/toy/katana(src) + if(85 to 86) + new /obj/item/weapon/defibrillator/compact(src) + if(87) //1% chance + new /obj/item/weed_extract(src) + if(88) + new /obj/item/organ/internal/brain(src) + if(89) + new /obj/item/organ/internal/brain/xeno(src) + if(90) + new /obj/item/organ/internal/heart(src) + if(91) + new /obj/item/device/soulstone(src) + if(92) + new /obj/item/weapon/katana(src) + if(93) + new /obj/item/weapon/dnainjector/xraymut(src) + if(94) + new /obj/item/weapon/storage/backpack/clown(src) + new /obj/item/clothing/under/rank/clown(src) + new /obj/item/clothing/shoes/clown_shoes(src) + new /obj/item/device/pda/clown(src) + new /obj/item/clothing/mask/gas/clown_hat(src) + new /obj/item/weapon/bikehorn(src) + new /obj/item/toy/crayon/rainbow(src) + new /obj/item/weapon/reagent_containers/spray/waterflower(src) + if(95) + new /obj/item/clothing/under/mime(src) + new /obj/item/clothing/shoes/black(src) + new /obj/item/device/pda/mime(src) + new /obj/item/clothing/gloves/color/white(src) + new /obj/item/clothing/mask/gas/mime(src) + new /obj/item/clothing/head/beret(src) + new /obj/item/clothing/suit/suspenders(src) + new /obj/item/toy/crayon/mime(src) + new /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing(src) + if(96) + new /obj/item/weapon/hand_tele(src) + if(97) + new /obj/item/clothing/mask/balaclava + new /obj/item/weapon/gun/projectile/automatic/pistol(src) + new /obj/item/ammo_box/magazine/m10mm(src) + if(98) + new /obj/item/weapon/katana/cursed(src) + if(99) + new /obj/item/weapon/storage/belt/champion(src) + new /obj/item/clothing/mask/luchador(src) + if(100) + new /obj/item/clothing/head/bearpelt(src) + +/obj/structure/closet/crate/secure/loot/attack_hand(mob/user) if(locked) to_chat(user, "The crate is locked with a Deca-code lock.") - var/input = input(usr, "Enter digit from [min] to [max].", "Deca-Code Lock", "") as num + var/input = input(usr, "Enter [codelen] digits.", "Deca-Code Lock", "") as text if(in_range(src, user)) - input = Clamp(input, 0, 10) if (input == code) to_chat(user, "The crate unlocks!") locked = 0 overlays.Cut() - overlays += greenlight - else if (input == null || input > max || input < min) + overlays += "securecrateg" + else if (input == null || length(input) != codelen) to_chat(user, "You leave the crate alone.") else to_chat(user, "A red light flashes.") - lastattempt = input + lastattempt = replacetext(input, 0, "z") attempts-- - if (attempts == 0) - to_chat(user, "The crate's anti-tamper system activates!") - var/turf/T = get_turf(src.loc) - explosion(T, -1, -1, 1, 1) - qdel(src) - return - else - to_chat(user, "You attempt to interact with the device using a hand gesture, but it appears this crate is from before the DECANECT came out.") - return + if(attempts == 0) + boom(user) else return ..() -/obj/structure/closet/crate/secure/loot/attackby(obj/item/weapon/W as obj, mob/user as mob, params) +/obj/structure/closet/crate/secure/loot/attack_animal(mob/user) + boom(user) + +/obj/structure/closet/crate/secure/loot/attackby(obj/item/weapon/W, mob/user) if(locked) - if (istype(W, /obj/item/weapon/card/emag)) - to_chat(user, "The crate unlocks!") - locked = 0 - if (istype(W, /obj/item/device/multitool)) + if(istype(W, /obj/item/weapon/card/emag)) + boom(user) + if(istype(W, /obj/item/device/multitool)) to_chat(user, "DECA-CODE LOCK REPORT:") - if (attempts == 1) + if(attempts == 1) to_chat(user, "* Anti-Tamper Bomb will activate on next failed access attempt.") else to_chat(user, "* Anti-Tamper Bomb will activate after [src.attempts] failed access attempts.") - if (lastattempt == null) - to_chat(user, " has been made to open the crate thus far.") - return - // hot and cold - if (code > lastattempt) - to_chat(user, "* Last access attempt lower than expected code.") - else - to_chat(user, "* Last access attempt higher than expected code.") + if(lastattempt != null) + var/list/guess = list() + var/bulls = 0 + var/cows = 0 + for(var/i = 1, i < codelen + 1, i++) + var/a = copytext(lastattempt, i, i+1) //Stuff the code into the list + guess += a + guess[a] = i + for(var/i in guess) //Go through list and count matches + var/a = findtext(code, i) + if(a == guess[i]) + ++bulls + else if(a) + ++cows + to_chat(user, "Last code attempt had [bulls] correct digits at correct positions and [cows] correct digits at incorrect positions.") else ..() else ..() + +/obj/structure/closet/crate/secure/loot/togglelock(mob/user) + if(locked) + boom(user) + else + ..() + +/obj/structure/closet/crate/secure/loot/proc/boom(mob/user) + to_chat(user, "The crate's anti-tamper system activates!") + for(var/atom/movable/AM in src) + qdel(AM) + var/turf/T = get_turf(src) + explosion(T, -1, -1, 1, 1) + qdel(src) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm index d8f741928fd..08f5089a200 100644 --- a/code/modules/mob/living/carbon/superheroes.dm +++ b/code/modules/mob/living/carbon/superheroes.dm @@ -107,8 +107,8 @@ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/under/color/brown(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/corgisuit(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/corgi(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/corgisuit/super_hero(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/head/corgi/super_hero(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/gloves/color/yellow(H), slot_gloves) H.equip_to_slot_or_del(new /obj/item/weapon/bedsheet/orange(H), slot_back) @@ -126,8 +126,8 @@ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/greytide(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/corgisuit/en(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/corgi/en(H), slot_head) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/corgisuit/super_hero/en(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/head/corgi/super_hero/en(H), slot_head) H.equip_to_slot_or_del(new /obj/item/weapon/bedsheet/cult(H), slot_back)