diff --git a/code/__defines/belly_modes_vr.dm b/code/__defines/belly_modes_vr.dm index 4260c8fd34..ed512753f1 100644 --- a/code/__defines/belly_modes_vr.dm +++ b/code/__defines/belly_modes_vr.dm @@ -23,6 +23,7 @@ #define DM_FLAG_FORCEPSAY 0x40 #define DM_FLAG_SLOWBODY 0x80 //CHOMPAdd #define DM_FLAG_MUFFLEITEMS 0x100 //CHOMPAdd +#define DM_FLAG_TURBOMODE 0x200 //CHOMPAdd //Item related modes #define IM_HOLD "Hold" diff --git a/code/__defines/damage_organs.dm b/code/__defines/damage_organs.dm index db1a71c77a..3d55bf87ad 100644 --- a/code/__defines/damage_organs.dm +++ b/code/__defines/damage_organs.dm @@ -9,6 +9,7 @@ #define ELECTROCUTE "electrocute" #define BIOACID "bioacid" #define SEARING "searing" +#define ELECTROMAG "electromagnetic" #define CUT "cut" #define BRUISE "bruise" diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index b133acc9ec..a538c77ce0 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -38,6 +38,7 @@ #define ALLERGEN_SUGARS 0x400 // For unathi-like reactions #define ALLERGEN_EGGS 0x800 // For Skrell eggs allergy #define ALLERGEN_STIMULANT 0x1000 // Stimulants are what makes the Tajaran heart go ruh roh - not just coffee! +#define ALLERGEN_CHOCOLATE 0x2000 // Makes dogs die if they want to? // Allergen reactions #define AG_PHYS_DMG 0x1 // brute diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm index adecdbe1c0..cbf8db46be 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm @@ -14,6 +14,12 @@ light_power = 1 light_color = "#FF0D00" +/obj/effect/projectile/impact/laser_em + icon_state = "impact_em_laser" + light_range = 3 + light_power = 1 + light_color = "#00C6FF" + /obj/effect/projectile/impact/xray icon_state = "impact_xray" light_range = 2 diff --git a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm index 44240eb487..a817c9e74d 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm @@ -38,6 +38,12 @@ light_power = 1 light_color = "#FF0D00" +/obj/effect/projectile/muzzle/laser_em + icon_state = "muzzle_em_laser" + light_range = 3 + light_power = 1 + light_color = "#00C6FF" + /obj/effect/projectile/muzzle/lightning icon_state = "muzzle_lightning" light_range = 2 diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm index 9f05cc30ca..01a6b64e1c 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -83,6 +83,12 @@ light_power = 1 light_color = "#FF0D00" +/obj/effect/projectile/tracer/laser_em + icon_state = "em_laser" + light_range = 3 + light_power = 1 + light_color = "#00C6FF" + /obj/effect/projectile/tracer/darkmatter icon_state = "darkb" light_range = 2 diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index db7644476b..6fca46ba0f 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -22,6 +22,7 @@ var/obj/item/weapon/cell/bcell = null var/hitcost = 240 var/use_external_power = FALSE //only used to determine if it's a cyborg baton + var/grip_safety = TRUE /obj/item/weapon/melee/baton/New() ..() @@ -69,18 +70,18 @@ update_icon() return -/obj/item/weapon/melee/baton/proc/deductcharge(var/chrgdeductamt) +/obj/item/weapon/melee/baton/proc/deductcharge() if(status == 1) //Only deducts charge when it's on if(bcell) - if(bcell.checked_use(chrgdeductamt)) + if(bcell.checked_use(hitcost)) return 1 else return 0 return null -/obj/item/weapon/melee/baton/proc/powercheck(var/chrgdeductamt) +/obj/item/weapon/melee/baton/proc/powercheck() if(bcell) - if(bcell.charge < chrgdeductamt) + if(bcell.charge < hitcost) status = 0 update_icon() @@ -97,6 +98,13 @@ else set_light(0) +/obj/item/weapon/melee/baton/dropped() + ..() + if(status && grip_safety) + status = 0 + visible_message("\The [src]'s grip safety engages!") + update_icon() + /obj/item/weapon/melee/baton/examine(mob/user) . = ..() @@ -142,7 +150,7 @@ var/mob/living/silicon/robot/R = loc if (istype(R)) bcell = R.cell - if(bcell && bcell.charge > hitcost) + if(bcell && bcell.charge >= hitcost) status = !status to_chat(user, "[src] is now [status ? "on" : "off"].") playsound(src, "sparks", 75, 1, -1) @@ -200,7 +208,7 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target H.forcesay(hit_appends) - powercheck(hitcost) + powercheck() /obj/item/weapon/melee/baton/emp_act(severity) if(bcell) @@ -222,9 +230,10 @@ throwforce = 5 stunforce = 0 agonyforce = 60 //same force as a stunbaton, but uses way more charge. - hitcost = 2500 + hitcost = 2500 //runs off the same kind of big batteries as APCs, not small cells! attack_verb = list("poked") slot_flags = null + grip_safety = FALSE /obj/item/weapon/melee/baton/cattleprod/attackby(obj/item/weapon/W, mob/user) if(istype(W, /obj/item/weapon/cell)) diff --git a/code/game/sound.dm b/code/game/sound.dm index ca99b1f3de..e977dc9001 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -287,6 +287,12 @@ 'sound/items/pickup/generic1.ogg', 'sound/items/pickup/generic2.ogg', 'sound/items/pickup/generic3.ogg') + // CHOMPedit start - Sounds for mech footsteps. + if ("powerloaderstep") + soundin = pick( + 'modular_chomp/sound/effects/powerloader_step.ogg', + 'modular_chomp/sound/effects/powerloader_step2.ogg') + // CHOMPedit end. return soundin //Are these even used? //Yes diff --git a/code/modules/client/preference_setup/loadout/loadout_utility_ch.dm b/code/modules/client/preference_setup/loadout/loadout_utility_ch.dm index 0c6b4bc9e6..8090c0b50b 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility_ch.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility_ch.dm @@ -53,3 +53,93 @@ "sheep" = /mob/living/simple_mob/vore/sheep ) gear_tweaks += new/datum/gear_tweak/simplemob_picker(mob_types) + +/datum/gear/utility/accordion + display_name = "Accordion" + description = "It's the intrusment called an accordion" + path = /obj/item/instrument/accordion + cost = 3 + +/datum/gear/utility/banjo + display_name = "Banjo" + description = "It's the intrusment called a banjo" + path = /obj/item/instrument/banjo + cost = 3 + +/datum/gear/utility/eguitar + display_name = "Electrical Guitar" + description = "It's the intrusment called a electrical guitar" + path = /obj/item/instrument/eguitar + cost = 3 + +/datum/gear/utility/glockenspiel + display_name = "Glockenspei" + description = "It's the intrusment called a glockenspiel" + path = /obj/item/instrument/glockenspiel + cost = 3 + +/datum/gear/utility/guitar + display_name = "Guitar" + description = "A normal guitar" + path = /obj/item/instrument/eguitar + cost = 3 + +/datum/gear/utility/harmonica + display_name = "Harmonica" + description = "Serenade folks with this lovely harmonica" + path = /obj/item/instrument/harmonica + cost = 3 + +/datum/gear/utility/keytar + display_name = "Portable Keyboard" + description = "Portable keyboard, whatever that is" + path = /obj/item/instrument/keytar + cost = 3 + +/datum/gear/utility/musicalmoth + display_name = "Musical Moth" + description = "A musical compaion, fun for the whole crew" + path = /obj/item/instrument/musicalmoth + cost = 4 + +/datum/gear/utility/recorder + display_name = "Recorder" + description = "Another lovely intrument to serenade the crew" + path = /obj/item/instrument/recorder + cost = 3 + +/datum/gear/utility/saxophone + display_name = "Recorder" + description = "Another lovely intrument to serenade the crew" + path = /obj/item/instrument/saxophone + cost = 3 + +/datum/gear/utility/trombone + display_name = "Recorder" + description = "A trombone" + path = /obj/item/instrument/trombone + cost = 3 + +/datum/gear/utility/trumpet + display_name = "Trumpet" + description = "Another fancy instrument called a trumpet" + path = /obj/item/instrument/trumpet + cost = 3 + +/datum/gear/utility/violin + display_name = "Space Violin" + description = "A violin with a dash of space, somehow" + path = /obj/item/instrument/violin + cost = 3 + +/datum/gear/utility/xylophone + display_name = "Xylophone" + description = "A musical rainbow" + path = /obj/item/instrument/xylophone + cost = 3 + +/datum/gear/utility/piano_synth + display_name = "Synthesizer" + description = "Not a portable keyboard" + path = /obj/item/instrument/piano_synth + cost = 3 \ No newline at end of file diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 7221f30d8e..107a69bf79 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -247,4 +247,38 @@ name = "red sneakers" desc = "A stylish, expensive pair of red sneakers." icon_state = "sneakersred" - item_state = "sneakersred" \ No newline at end of file + item_state = "sneakersred" + +// CHOMPedit start - Mech boots with hijacked clown shoes code. + +/obj/item/clothing/shoes/mech_shoes + name = "mech shoes" + desc = "Thud thud." + icon_state = "nothing" + armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0) // Same as loadout jackboots. + siemens_coefficient = 0.7 // Same as loadout jackboots. + force = 2 + var/footstep = 1 // Used for thuds while walking. + species_restricted = null + +/obj/item/clothing/shoes/mech_shoes/handle_movement(var/turf/walking, var/running) + if(running) + if(footstep >= 2) + footstep = 0 + playsound(src, "mechstep", 15, 1) // Hopefully this won't be too annoying. + else + footstep++ + +/obj/item/clothing/shoes/mech_shoes/light + name = "light mech shoes" + desc = "Thud thud, but quieter." + +/obj/item/clothing/shoes/mech_shoes/light/handle_movement(var/turf/walking, var/running) + if(running) + if(footstep >= 2) + footstep = 0 + playsound(src, "powerloaderstep", 15, 1) // Hopefully this won't be too annoying. + else + footstep++ + +// CHOMPedit end. \ No newline at end of file diff --git a/code/modules/emotes/definitions/audible_furry_vr.dm b/code/modules/emotes/definitions/audible_furry_vr.dm index 4fb63982ce..df66e85bfc 100644 --- a/code/modules/emotes/definitions/audible_furry_vr.dm +++ b/code/modules/emotes/definitions/audible_furry_vr.dm @@ -238,3 +238,13 @@ key = "coyawoo5" emote_message_3p = "lets out a scraggly, whine-awoo." emote_sound = 'sound/voice/coyoteawoo5.ogg' + +/decl/emote/audible/roarbark // Upstream port from CHOMP + key = "roarbark" + emote_message_3p = "lets out a roar-bark!" + emote_sound = 'sound/voice/roarbark.ogg' + +/decl/emote/audible/dook + key = "dook" + emote_message_3p = "dooks." + emote_sound = 'sound/voice/FerretDook.ogg' diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 4b4efd1dbb..d01134251f 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -563,6 +563,7 @@ /obj/item/weapon/reagent_containers/food/snacks/donut/choc/Initialize() . = ..() reagents.add_reagent("nutriment", 3, nutriment_desc) + reagents.add_reagent("chocolate", 5) /obj/item/weapon/reagent_containers/food/snacks/donut/choc/jelly name = "chocolate frosted jelly donut" @@ -572,6 +573,7 @@ . = ..() reagents.add_reagent("nutriment", 3, nutriment_desc) reagents.add_reagent("berryjuice", 5) + reagents.add_reagent("chocolate", 5) /obj/item/weapon/reagent_containers/food/snacks/donut/blue name = "blue frosted donut" @@ -656,6 +658,7 @@ . = ..() reagents.add_reagent("nutriment", 3, nutriment_desc) reagents.add_reagent("sprinkles", 1) + reagents.add_reagent("chocolate", 1) /obj/item/weapon/reagent_containers/food/snacks/donut/choc_sprinkles/jelly name = "chocolate sprinkles jelly donut" @@ -666,6 +669,7 @@ reagents.add_reagent("nutriment", 3, nutriment_desc) reagents.add_reagent("sprinkles", 1) reagents.add_reagent("berryjuice", 5) + reagents.add_reagent("chocolate", 1) /obj/item/weapon/reagent_containers/food/snacks/donut/meat name = "meat donut" diff --git a/code/modules/mob/living/carbon/brain/brain.dm b/code/modules/mob/living/carbon/brain/brain.dm index c2f7d49ba8..ad191abc45 100644 --- a/code/modules/mob/living/carbon/brain/brain.dm +++ b/code/modules/mob/living/carbon/brain/brain.dm @@ -10,6 +10,7 @@ icon_state = "brain1" no_vore = TRUE //VOREStation Edit - PLEASE. lol. can_pain_emote = FALSE // CHOMPEdit: Sanity/safety + low_priority = TRUE //CHOMPEdit /mob/living/carbon/brain/Initialize() . = ..() diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 8e8b349de6..1c87b74472 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -171,6 +171,8 @@ var/list/_human_default_emotes = list( /decl/emote/audible/croon, /decl/emote/audible/lwarble, /decl/emote/audible/croak_skrell, + /decl/emote/audible/roarbark, + /decl/emote/audible/dook, //VOREStation Add End //CHOMP Add start /decl/emote/audible/prbt2, @@ -316,6 +318,7 @@ var/list/_simple_mob_default_emotes = list( /decl/emote/audible/vox_shriek, /decl/emote/audible/purr, /decl/emote/audible/purrlong, + /decl/emote/audible/dook, //CHOMP Add start /decl/emote/audible/prbt2, /decl/emote/audible/pain diff --git a/code/modules/mob/living/carbon/human/species/station/monkey.dm b/code/modules/mob/living/carbon/human/species/station/monkey.dm index 6efc9b4220..c891146cf1 100644 --- a/code/modules/mob/living/carbon/human/species/station/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/station/monkey.dm @@ -74,6 +74,7 @@ if(!H.ckey) H.can_be_drop_prey = TRUE H.digest_leave_remains = 1 + H.low_priority = TRUE return ..()//CHOMPadd end /datum/species/monkey/tajaran diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm index adbf1c52e7..76115a3117 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative_ch.dm @@ -185,23 +185,30 @@ /datum/trait/negative/agoraphobia/proc/handle_loneliness(var/mob/living/carbon/human/H) - var/ms = "" - if(H.loneliness_stage == escalation_speed) - ms = "You notice there's more people than you feel comfortable with around you..." - if(H.loneliness_stage >= 50) - ms = "You start to feel anxious from the number of people around you." - if(H.loneliness_stage >= 250) - ms = "[pick("You don't think you can last much longer with this much company!", "You should go find some space!")]" - if(H.stuttering < hallucination_cap) - H.stuttering += 5 - if(H.loneliness_stage >= warning_cap) - ms = "[pick("Why am I still here? I have to leave and get some space!", "Please, just let me be alone!", "I need to be alone!")]" if(world.time < H.next_loneliness_time) - return - if(ms != "") + return //Moved this at the top so we dont waste time assigning vars we will never use + var/ms = handle_loneliness_message(H) + if(ms) to_chat(H, ms) H.next_loneliness_time = world.time+500 +/datum/trait/negative/agoraphobia/proc/handle_loneliness_message(var/mob/living/carbon/human/H) + var/Lonely = H.loneliness_stage + if(Lonely == escalation_speed) + return "You notice there's more people than you feel comfortable with around you..." + else if(Lonely >= 50 && Lonely < 250) + return "You start to feel anxious from the number of people around you." + else if(Lonely >= 250 && Lonely < warning_cap) + if(H.stuttering < hallucination_cap) + H.stuttering += 5 + return "[pick("You don't think you can last much longer with this much company!", "You should go find some space!")]" //if we add more here make it a list for readability + else if(Lonely >= warning_cap) + var/list/panicmessages = list( "Why am I still here? I have to leave and get some space!", + "Please, just let me be alone!", + "I need to be alone!") + return "[pick(panicmessages)]" + return FALSE + /datum/trait/negative/agoraphobia/proc/find_held_by(var/atom/item) if(!item || !istype(item)) return null diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index 996a34cfad..a78b228b87 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -311,6 +311,13 @@ custom_only = FALSE allergen = ALLERGEN_COFFEE +/datum/trait/neutral/allergy/chocolate + name = "Allergy: Chocolate" + desc = "You're highly allergic to coco and chocolate in specific. NB: By taking this trait, you acknowledge there is a significant risk your character may suffer a fatal reaction if exposed to this substance." + cost = 0 + custom_only = FALSE + allergen = ALLERGEN_CHOCOLATE + /datum/trait/neutral/allergy_reaction name = "Allergy Reaction: Disable Toxicity" desc = "Take this trait to disable the toxic damage effect of being exposed to one of your allergens. Combine with the Disable Suffocation trait to have purely nonlethal reactions." diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index a865a6b05d..babe6c4300 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -94,6 +94,32 @@ apply_damage(damage, BURN, def_zone, initial_blocked, soaked, used_weapon, sharp, edge) // Handle it as normal burn. else adjustToxLoss(damage * blocked) + if(ELECTROMAG) + damage = damage * blocked + switch(round(damage)) + if(91 to INFINITY) + emp_act(1) + if(76 to 90) + if(prob(50)) + emp_act(1) + else + emp_act(2) + if(61 to 75) + emp_act(2) + if(46 to 60) + if(prob(50)) + emp_act(2) + else + emp_act(3) + if(31 to 45) + emp_act(3) + if(16 to 30) + if(prob(50)) + emp_act(3) + else + emp_act(4) + if(0 to 15) + emp_act(4) flash_weak_pain() updatehealth() return 1 diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index 55a0f5700f..7d2f490890 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -21,6 +21,7 @@ verbs |= /mob/living/proc/switch_scaling verbs |= /mob/living/proc/mute_entry //CHOMPEdit verbs |= /mob/living/proc/center_offset //CHOMPEdit + verbs |= /mob/living/proc/liquidbelly_visuals //CHOMPEdit if(!no_vore) verbs |= /mob/living/proc/vorebelly_printout diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 0f3ca13a5d..304f7b234f 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -26,7 +26,7 @@ var/obj/item/device/communicator/integrated/communicator // Our integrated communicator. var/chassis = "pai-repairbot" // A record of your chosen chassis. - var/global/list/possible_chassis = list( + var/list/possible_chassis = list( //CHOMPEDIT: This doesnt need to be /Global/ and actually makes us unable to make unique children "Drone" = "pai-repairbot", "Cat" = "pai-cat", "Mouse" = "pai-mouse", @@ -57,7 +57,7 @@ //VOREStation Addition End ) - var/global/list/possible_say_verbs = list( + var/list/possible_say_verbs = list( //CHOMPEDIT: This doesnt need to be /Global/ and actually makes us unable to make unique children "Robotic" = list("states","declares","queries"), "Natural" = list("says","yells","asks"), "Beep" = list("beeps","beeps loudly","boops"), diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm index 9b94c4ff47..512fbb167e 100644 --- a/code/modules/mob/living/silicon/pai/pai_vr.dm +++ b/code/modules/mob/living/silicon/pai/pai_vr.dm @@ -10,12 +10,12 @@ var/icon/holo_icon_north var/holo_icon_dimension_X = 32 var/holo_icon_dimension_Y = 32 - var/global/list/wide_chassis = list( + var/list/wide_chassis = list( //CHOMPEDIT: This doesnt need to be /Global/ and actually makes us unable to make unique children "rat", "panther", "teppi" ) - var/global/list/flying_chassis = list( + var/list/flying_chassis = list( //CHOMPEDIT: This doesnt need to be /Global/ and actually makes us unable to make unique children "pai-parrot", "pai-bat", "pai-butterfly", @@ -28,7 +28,7 @@ //the birds especially! Just naw. If someone else wants to mess with 12x4 frames of animation where //most of the pixels are different kinds of green and tastefully translate that to whitescale //they can have fun with that! I not doing it! - var/global/list/allows_eye_color = list( + var/list/allows_eye_color = list( //CHOMPEDIT: This doesnt need to be /Global/ and actually makes us unable to make unique children "pai-repairbot", "pai-typezero", "pai-bat", diff --git a/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm b/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm index 9ffbf209ef..8a805dba0d 100644 --- a/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm +++ b/code/modules/mob/living/simple_mob/subtypes/humanoid/humanoid.dm @@ -19,13 +19,15 @@ // Most humans leave a corpse var/corpse = null - + can_be_drop_prey = FALSE //CHOMP Add /mob/living/simple_mob/humanoid/death() ..() if(corpse) - new corpse (src.loc) + var/mob/new_corpse = new corpse(src.loc) //CHOMPEdit + if(istype(new_corpse)) //CHOMPEdit + new_corpse.low_priority = TRUE //CHOMPEdit qdel(src) return diff --git a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm index b420531ccf..a26185ff2e 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm @@ -914,4 +914,12 @@ icon = 'icons/mob/vore/ears_vr.dmi' icon_state = "single-side-horn" do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/zaprat + name = "zaprat ears (dual-color)" + icon = 'icons/mob/vore/ears_32x64.dmi' + icon_state = "zaprat" + extra_overlay = "zaprat-tips" + do_colouration = 1 color_blend_mode = ICON_MULTIPLY \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm index ab2f41cef4..e5d0ee2a38 100644 --- a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm @@ -901,4 +901,55 @@ icon = 'icons/mob/human_races/markings_vr.dmi' icon_state = "unathi_blocky_head_eyes" color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_HEAD) \ No newline at end of file + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_manedwolf1 + name = "Maned Wolf Primary Markings" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "manedwolf1" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD,BP_TORSO,BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND,BP_R_LEG,BP_L_LEG,BP_R_FOOT,BP_L_FOOT) + +/datum/sprite_accessory/marking/vr_manedwolf2 + name = "Maned Wolf Secondary Markings" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "manedwolf2" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD,BP_TORSO,BP_GROIN) + +/datum/sprite_accessory/marking/vr_head_paint_front + name = "Head Paint Front" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "paintfront" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_head_paint_back + name = "Head Paint" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "paint" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_sect_drone + name = "Sect Drone Bodytype" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "sectdrone" + color_blend_mode = ICON_MULTIPLY + hide_body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD) + organ_override = TRUE + +/datum/sprite_accessory/marking/vr_sect_drone_eyes + name = "Sect Drone Eyes" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "sectdrone_eyes" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vr_zaprat_cheeks + name = "Cheek Marks" + icon = 'icons/mob/human_races/markings_vr.dmi' + icon_state = "zaprat_cheeks" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) diff --git a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm index 22248c139c..f8db19fd21 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm @@ -1347,3 +1347,16 @@ /datum/sprite_accessory/tail/longtail/shadekin_tail/shadekin_tail_long name = "Shadekin Long Tail" icon_state = "shadekin_long_s" + +/datum/sprite_accessory/tail/longtail/zaprat + name = "bolt-shaped tail, dual color" + icon = 'icons/mob/vore/taurs_vr.dmi' + icon_state = "zaprat_s" + extra_overlay = "zaprat_markings" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/longtail/zaprat/heart + name = "heart-bolt-shaped tail, dual color" + icon_state = "zaprat_heart_s" + extra_overlay = "zaprat_heart_markings" diff --git a/code/modules/mob/new_player/sprite_accessories_wing_ch.dm b/code/modules/mob/new_player/sprite_accessories_wing_ch.dm deleted file mode 100644 index c29635dcc4..0000000000 --- a/code/modules/mob/new_player/sprite_accessories_wing_ch.dm +++ /dev/null @@ -1,35 +0,0 @@ -/datum/sprite_accessory/wing/snagc - name = "xenomorph backplate, colorable" - desc = "" - icon = 'icons/mob/vore/wings_ch.dmi' - icon_state = "csnag-backplate" - do_colouration = 1 - -/datum/sprite_accessory/wing/teshbee - name = "Teshari bee wings" - desc = "" - icon = 'icons/mob/vore/wings_ch.dmi' - icon_state = "beewings_tesh" - -/datum/sprite_accessory/wing/teshdragonfly - name = "Teshari dragonfly wings" - desc = "" - icon = 'icons/mob/vore/wings_ch.dmi' - icon_state = "dragonfly_tesh" - -/datum/sprite_accessory/wing/snail //We should some day make a variable to make some wings not be able to fly - name = "Snail shell" - desc = "" - icon = 'icons/mob/vore/wings_ch.dmi' - icon_state = "snail_shell" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/wing/dragon2 - name = "Dragon wings, large, colorable" - desc = "" - icon = 'modular_chomp/icons/mob/human_races/sprite_accessories/wings.dmi' - icon_state = "dragon_2" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - extra_overlay = "dragon_2_mark" \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/rounds.dm b/code/modules/projectiles/ammunition/rounds.dm index 45d2d5aad5..393122d4e4 100644 --- a/code/modules/projectiles/ammunition/rounds.dm +++ b/code/modules/projectiles/ammunition/rounds.dm @@ -273,7 +273,7 @@ /obj/item/ammo_casing/a12g name = "shotgun slug" - desc = "A 12 gauge slug." + desc = "A 12 gauge slug shell." icon_state = "slshell" caliber = "12g" projectile_type = /obj/item/projectile/bullet/shotgun @@ -281,9 +281,9 @@ /obj/item/ammo_casing/a12g/pellet name = "shotgun shell" - desc = "A 12 gauge shell." + desc = "A 12 gauge buckshot shell." icon_state = "gshell" - projectile_type = /obj/item/projectile/bullet/pellet/shotgun + projectile_type = /obj/item/projectile/scatter/shotgun //formerly /obj/item/projectile/bullet/pellet/shotgun /obj/item/ammo_casing/a12g/blank name = "shotgun shell" @@ -301,7 +301,7 @@ /obj/item/ammo_casing/a12g/beanbag name = "beanbag shell" - desc = "A beanbag shell." + desc = "A 12 gauge beanbag shell." icon_state = "bshell" projectile_type = /obj/item/projectile/bullet/shotgun/beanbag matter = list(MAT_STEEL = 180) diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index 15f8d24a5b..0402f0faf7 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -49,20 +49,60 @@ tracer_type = /obj/effect/projectile/tracer/laser_blue impact_type = /obj/effect/projectile/impact/laser_blue +/obj/item/projectile/beam/weaklaser/ion + damage_type = ELECTROMAG + light_color = "#00CCFF" + muzzle_type = /obj/effect/projectile/muzzle/laser_em + tracer_type = /obj/effect/projectile/tracer/laser_em + impact_type = /obj/effect/projectile/impact/laser_em + /obj/item/projectile/beam/smalllaser damage = 25 hud_state = "laser" +/obj/item/projectile/beam/smalllaser/ion + damage_type = ELECTROMAG + light_color = "#00CCFF" + muzzle_type = /obj/effect/projectile/muzzle/laser_em + tracer_type = /obj/effect/projectile/tracer/laser_em + impact_type = /obj/effect/projectile/impact/laser_em + /obj/item/projectile/beam/burstlaser damage = 30 armor_penetration = 10 hud_state = "laser" +/obj/item/projectile/beam/burstlaser/ion + damage_type = ELECTROMAG + light_color = "#00CCFF" + muzzle_type = /obj/effect/projectile/muzzle/laser_em + tracer_type = /obj/effect/projectile/tracer/laser_em + impact_type = /obj/effect/projectile/impact/laser_em + /obj/item/projectile/beam/midlaser damage = 40 armor_penetration = 10 hud_state = "laser" +/obj/item/projectile/beam/midlaser/ion + damage_type = ELECTROMAG + light_color = "#00CCFF" + muzzle_type = /obj/effect/projectile/muzzle/laser_em + tracer_type = /obj/effect/projectile/tracer/laser_em + impact_type = /obj/effect/projectile/impact/laser_em + +/obj/item/projectile/beam/mininglaser + name = "pulsating laser" + damage = 10 + armor_penetration = 20 + fire_sound = 'sound/weapons/eluger.ogg' + + excavation_amount = 100 + + muzzle_type = /obj/effect/projectile/muzzle/emitter + tracer_type = /obj/effect/projectile/tracer/emitter + impact_type = /obj/effect/projectile/impact/emitter + /obj/item/projectile/beam/heavylaser name = "heavy laser" icon_state = "heavylaser" @@ -90,6 +130,13 @@ tracer_type = /obj/effect/projectile/tracer/emitter impact_type = /obj/effect/projectile/impact/emitter +/obj/item/projectile/beam/heavylaser/ion + damage_type = ELECTROMAG + light_color = "#00CCFF" + muzzle_type = /obj/effect/projectile/muzzle/laser_em + tracer_type = /obj/effect/projectile/tracer/laser_em + impact_type = /obj/effect/projectile/impact/laser_em + /obj/item/projectile/beam/heavylaser/cannon damage = 80 armor_penetration = 50 diff --git a/code/modules/projectiles/projectile/scatter.dm b/code/modules/projectiles/projectile/scatter.dm index b3900f8429..259cd82da4 100644 --- a/code/modules/projectiles/projectile/scatter.dm +++ b/code/modules/projectiles/projectile/scatter.dm @@ -86,6 +86,21 @@ * Ballistic */ +/obj/item/projectile/scatter/shotgun + name = "Shotgun scatter projectile" + hud_state = "shotgun_buckshot" + spread_submunition_damage = FALSE + submunition_spread_max = 60 + submunition_spread_min = 50 + submunitions = list( + /obj/item/projectile/bullet/shotgun/scatterprojectile = 6 + ) + +/obj/item/projectile/bullet/shotgun/scatterprojectile + name = "pellet" + fire_sound = 'sound/weapons/Gunshot_shotgun.ogg' + damage = 12 + armor_penetration = 0 /obj/item/projectile/scatter/flechette damage = 60 diff --git a/code/modules/reagents/holder/holder.dm b/code/modules/reagents/holder/holder.dm index 9edd73685a..99afb8273a 100644 --- a/code/modules/reagents/holder/holder.dm +++ b/code/modules/reagents/holder/holder.dm @@ -268,10 +268,9 @@ //If for some reason touch effects are bypassed (e.g. injecting stuff directly into a reagent container or person), //call the appropriate trans_to_*() proc. /datum/reagents/proc/trans_to(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0) - touch(target, amount*multiplier) //First, handle mere touch effects //CHOMPEdit - - if(ismob(target)) - return splash_mob(target, amount, copy) + if(ismob(target)) //CHOMPEdit + return splash_mob(target, amount * multiplier, copy) //Touch effects handled by splash_mob + touch(target, amount * multiplier) //First, handle mere touch effects if(isturf(target)) return trans_to_turf(target, amount, multiplier, copy) if(isobj(target) && target.is_open_container()) @@ -392,6 +391,11 @@ if(!target || !istype(target)) return if(iscarbon(target)) + if(isbelly(target.loc) && target.stat == DEAD) //CHOMPAdd Start + var/datum/reagents/R = new /datum/reagents(amount) + . = trans_to_holder(R, amount, multiplier, copy) + R.touch_mob(target) + return //CHOMPAdd End var/mob/living/carbon/C = target if(type == CHEM_BLOOD) var/datum/reagents/R = C.reagents diff --git a/code/modules/reagents/reagents/dispenser.dm b/code/modules/reagents/reagents/dispenser.dm index 2480ba78d9..af09993921 100644 --- a/code/modules/reagents/reagents/dispenser.dm +++ b/code/modules/reagents/reagents/dispenser.dm @@ -372,15 +372,10 @@ /datum/reagent/acid/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) // This is the most interesting if(alien == IS_GREY) //ywedit return - if(ishuman(M)) - var/item_digestion = TRUE //CHOMPEdit Start - if(isbelly(M.loc)) - var/obj/belly/B = M.loc - if(B.item_digest_mode == IM_HOLD || B.item_digest_mode == IM_DIGEST_FOOD) - item_digestion = FALSE + if(ishuman(M) && !isbelly(M.loc)) //CHOMPEdit Start var/mob/living/carbon/human/H = M if(H.head) - if(H.head.unacidable || is_type_in_list(H.head,item_digestion_blacklist) || !item_digestion) + if(H.head.unacidable || is_type_in_list(H.head,item_digestion_blacklist)) to_chat(H, "Your [H.head] protects you from the acid.") remove_self(volume) return @@ -394,7 +389,7 @@ return if(H.wear_mask) - if(H.wear_mask.unacidable || is_type_in_list(H.wear_mask,item_digestion_blacklist) || !item_digestion) + if(H.wear_mask.unacidable || is_type_in_list(H.wear_mask,item_digestion_blacklist)) to_chat(H, "Your [H.wear_mask] protects you from the acid.") remove_self(volume) return @@ -408,7 +403,7 @@ return if(H.glasses) - if(H.glasses.unacidable || is_type_in_list(H.glasses,item_digestion_blacklist) || !item_digestion) //CHOMPEdit End + if(H.glasses.unacidable || is_type_in_list(H.glasses,item_digestion_blacklist)) to_chat(H, "Your [H.glasses] partially protect you from the acid!") removed /= 2 else if(removed > meltdose) @@ -418,6 +413,18 @@ removed -= meltdose / 2 if(removed <= 0) return + if(isbelly(M.loc)) + var/obj/belly/B = M.loc + if(!M.digestable || B.digest_mode != DM_DIGEST) + remove_self(volume) + return + if(B.owner) + if(B.reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && B.reagents.total_volume < B.custom_max_volume) + B.owner.adjust_nutrition((B.nutrition_percent / 100) * (power * 0.6) * removed) + B.digest_nutri_gain = B.nutrition_percent / 100 * (power * 0.4) * removed + B.GenerateBellyReagents_digesting() + else + B.owner.adjust_nutrition((B.nutrition_percent / 100) * power * removed) //CHOMPEdit End if(volume < meltdose) // Not enough to melt anything M.take_organ_damage(0, removed * power * 0.2) //burn damage, since it causes chemical burns. Acid doesn't make bones shatter, like brute trauma would. @@ -436,14 +443,19 @@ else M.take_organ_damage(0, removed * power * 0.1) // Balance. The damage is instant, so it's weaker. 10 units -> 5 damage, double for pacid. 120 units beaker could deal 60, but a) it's burn, which is not as dangerous, b) it's a one-use weapon, c) missing with it will splash it over the ground and d) clothes give some protection, so not everything will hit -/datum/reagent/acid/touch_obj(var/obj/O) +/datum/reagent/acid/touch_obj(var/obj/O, var/amount) //CHOMPEdit Start ..() - var/item_digestion = TRUE //CHOMPEdit Start if(isbelly(O.loc)) var/obj/belly/B = O.loc if(B.item_digest_mode == IM_HOLD || B.item_digest_mode == IM_DIGEST_FOOD) - item_digestion = FALSE - if(O.unacidable || is_type_in_list(O,item_digestion_blacklist) || !item_digestion) //CHOMPEdit End + return + var/obj/item/I = O + var/spent_amt = I.digest_act(I.loc, 1, amount / (meltdose / 3)) + if(B.owner) + B.owner.adjust_nutrition((B.nutrition_percent / 100) * 5 * spent_amt) + remove_self(spent_amt) //10u stomacid per w_class, less if stronger acid. + return + if(O.unacidable || is_type_in_list(O,item_digestion_blacklist)) //CHOMPEdit End return if((istype(O, /obj/item) || istype(O, /obj/effect/plant)) && (volume > meltdose)) var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc) @@ -453,6 +465,22 @@ qdel(O) remove_self(meltdose) // 10 units of acid will not melt EVERYTHING on the tile +/datum/reagent/acid/touch_mob(var/mob/living/L) //CHOMPAdd Start + if(isbelly(L.loc)) + var/obj/belly/B = L.loc + if(B.digest_mode != DM_DIGEST || !L.digestable) + remove_self(volume) + return + if(B.owner) + if(B.reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && B.reagents.total_volume < B.custom_max_volume) + B.owner.adjust_nutrition((B.nutrition_percent / 100) * (power * 0.6) * volume) + B.digest_nutri_gain = B.nutrition_percent / 100 * (power * 0.4) * volume + B.GenerateBellyReagents_digesting() + else + B.owner.adjust_nutrition((B.nutrition_percent / 100) * power * volume) + L.adjustFireLoss(volume * power * 0.2) + remove_self(volume) //CHOMPAdd End + /datum/reagent/silicon name = "Silicon" id = "silicon" diff --git a/code/modules/reagents/reagents/food_drinks.dm b/code/modules/reagents/reagents/food_drinks.dm index 9b9339aa27..774399cb75 100644 --- a/code/modules/reagents/reagents/food_drinks.dm +++ b/code/modules/reagents/reagents/food_drinks.dm @@ -435,6 +435,7 @@ reagent_state = SOLID nutriment_factor = 5 color = "#302000" + allergen_type = ALLERGEN_CHOCOLATE /datum/reagent/nutriment/chocolate name = "Chocolate" @@ -444,6 +445,7 @@ color = "#582815" nutriment_factor = 5 taste_mult = 1.3 + allergen_type = ALLERGEN_CHOCOLATE /datum/reagent/nutriment/instantjuice name = "Juice Powder" @@ -691,6 +693,7 @@ description = "A dry mix for making delicious brownies." reagent_state = SOLID color = "#441a03" + allergen_type = ALLERGEN_CHOCOLATE /datum/reagent/cakebatter name = "Cake Batter" @@ -1224,6 +1227,7 @@ glass_name = "chocolate milk" glass_desc = "Deliciously fattening!" + allergen_type = ALLERGEN_CHOCOLATE /datum/reagent/drink/milk/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -1664,6 +1668,7 @@ cup_icon_state = "cup_coco" cup_name = "cup of hot chocolate" cup_desc = "Made with love! And cocoa beans." + allergen_type = ALLERGEN_CHOCOLATE /datum/reagent/drink/soda/sodawater name = "Soda Water" @@ -1845,7 +1850,7 @@ glass_name = "Chocolate Milkshake" glass_desc = "A refreshing chocolate milkshake, just like mom used to make." - allergen_type = ALLERGEN_DAIRY //Made with dairy products + allergen_type = ALLERGEN_DAIRY|ALLERGEN_CHOCOLATE //Made with dairy products /datum/reagent/drink/milkshake/berryshake name = "Berry Milkshake" diff --git a/code/modules/reagents/reagents/toxins.dm b/code/modules/reagents/reagents/toxins.dm index ec8069893a..3c9af88bf2 100644 --- a/code/modules/reagents/reagents/toxins.dm +++ b/code/modules/reagents/reagents/toxins.dm @@ -485,6 +485,16 @@ power = 2 meltdose = 30 +/datum/reagent/acid/diet_digestive //CHOMPAdd + name = "Diluted digestive acid" + id = "diet_stomacid" + description = "Some form of digestive slurry." + taste_description = "vomit" + reagent_state = LIQUID + color = "#664330" + power = 0.4 + meltdose = 150 + /datum/reagent/thermite/venom name = "Pyrotoxin" id = "thermite_v" diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 8c608a83f3..90c1ee648e 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -207,6 +207,7 @@ var/position = 0 // 0 off, -1 reverse, 1 forward var/last_pos = -1 // last direction setting var/operated = 1 // true if just operated + var/oneway = 0 // Voreadd: One way levels mid-round! var/id = "" // must match conveyor IDs to control them @@ -265,7 +266,7 @@ return if(position == 0) - if(last_pos < 0) + if(last_pos < 0 || oneway == 1) position = 1 last_pos = 0 else @@ -314,6 +315,19 @@ if(C.id == id) conveyors += C return + + if(istype(I, /obj/item/weapon/tool/wrench)) + if(panel_open) + if(oneway == 1) + to_chat(user, "You set the switch to two way operation.") + oneway = 0 + playsound(src, I.usesound, 50, 1) + return + else + to_chat(user, "You set the switch to one way operation.") + oneway = 1 + playsound(src, I.usesound, 50, 1) + return //CHOMPedit: Conveyor belts can be fast :) if(istype(I, /obj/item/weapon/tool/wirecutters)) @@ -323,21 +337,9 @@ return //CHOMPedit End /obj/machinery/conveyor_switch/oneway - var/convdir = 1 //Set to 1 or -1 depending on which way you want the convayor to go. (In other words keep at 1 and set the proper dir on the belts.) - desc = "A conveyor control switch. It appears to only go in one direction." + oneway = 1 -// attack with hand, switch position -/obj/machinery/conveyor_switch/oneway/attack_hand(mob/user) - if(position == 0) - position = convdir - else - position = 0 - - operated = 1 - update() - - // find any switches with same id as this one, and set their positions to match us - for(var/obj/machinery/conveyor_switch/S in machines) - if(S.id == src.id) - S.position = position - S.update() +/obj/machinery/conveyor_switch/examine() + .=..() + if(oneway == 1) + . += " It appears to only go in one direction." diff --git a/code/modules/vore/eating/belly_obj_ch.dm b/code/modules/vore/eating/belly_obj_ch.dm index a4cb81a621..ae3c9f8068 100644 --- a/code/modules/vore/eating/belly_obj_ch.dm +++ b/code/modules/vore/eating/belly_obj_ch.dm @@ -71,6 +71,7 @@ "Honey", "Cherry Jelly", "Digestive acid", + "Diluted digestive acid", "Lube", "Biomass" ) @@ -108,15 +109,9 @@ var/slow_digestion = FALSE // Gradual corpse digestion var/slow_brutal = FALSE // Gradual corpse digestion: Stumpy's Special var/sound_volume = 100 // Volume knob. - var/speedy_mob_processing = FALSE // Independent belly processing to utilize mob Life() instead of subsystem for 3x speed. + var/speedy_mob_processing = FALSE // Independent belly processing to utilize SSobj instead of SSbellies 3x speed. var/cycle_sloshed = FALSE // Has vorgan entrance made a wet slosh this cycle? Soundspam prevention for multiple items entered. - -/obj/belly/Initialize() - . = ..() - if(speedy_mob_processing) //Breaking free from subsystem. Can be implemented in mob's Life() proc for example (as seen in swoopie.dm) - STOP_PROCESSING(SSbellies, src) - /obj/belly/proc/GetFullnessFromBelly() if(!affects_vore_sprites) return 0 @@ -174,6 +169,15 @@ gen_interval = 0 else gen_interval++ + if(reagents.total_volume) + for(var/mob/living/L in contents) + if(L.digestable && digest_mode == DM_DIGEST) + if(reagents.total_volume) + reagents.trans_to(L, reagents.total_volume, 0.1 / (LAZYLEN(contents) ? LAZYLEN(contents) : 1), FALSE) + vore_fx(L, FALSE, reagents.total_volume) + for(var/obj/item/I in contents) + if(reagents.total_volume) + reagents.trans_to(I, reagents.total_volume, 0.1 / (LAZYLEN(contents) ? LAZYLEN(contents) : 1), FALSE) /obj/belly/proc/GenerateBellyReagents() if(isrobot(owner)) @@ -184,17 +188,17 @@ for(var/reagent in generated_reagents) reagents.add_reagent(reagent, generated_reagents[reagent]) if(count_liquid_for_sprite) - owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. + owner.update_fullness() //This is run whenever a belly's contents are changed. //////////////////////////// REAGENT_DIGEST //////////////////////// /obj/belly/proc/GenerateBellyReagents_digesting() //The rate isnt based on selected reagent, due to the fact that the price of the reagent is already paid by nutrient not gained. if(reagents.total_volume + (digest_nutri_gain * gen_amount) <= custom_max_volume) //By default a reagent with an amount of 1 should result in pred getting 100 units from a full health prey for(var/reagent in generated_reagents) - reagents.add_reagent(reagent, generated_reagents[reagent] * digest_nutri_gain) + reagents.add_reagent(reagent, generated_reagents[reagent] * digest_nutri_gain / gen_cost) else - for(var/reagent in generated_reagents) - reagents.add_reagent(reagent, generated_reagents[reagent] / gen_amount * (custom_max_volume - reagents.total_volume)) + owner.adjust_nutrition((4.5 * digest_nutri_gain) * owner.get_digestion_efficiency_modifier()) + digest_nutri_gain = 0 /obj/belly/proc/GenerateBellyReagents_digested() if(reagents.total_volume <= custom_max_volume - 25 * gen_amount) @@ -271,9 +275,16 @@ generated_reagents = list("stomacid" = 1) reagent_name = "digestive acid" gen_amount = 1 - gen_cost = 5 + gen_cost = 1 reagentid = "stomacid" reagentcolor = "#664330" + if("Diluted digestive acid") + generated_reagents = list("diet_stomacid" = 1) + reagent_name = "diluted digestive acid" + gen_amount = 1 + gen_cost = 1 + reagentid = "diet_stomacid" + reagentcolor = "#664330" if("Space cleaner") generated_reagents = list("cleaner" = 1) reagent_name = "space cleaner" diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 6e1b17fe28..f1ed135737 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -71,7 +71,7 @@ //Actual full digest modes var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_ABSORB,DM_DRAIN,DM_SELECT,DM_UNABSORB,DM_HEAL,DM_SHRINK,DM_GROW,DM_SIZE_STEAL,DM_EGG) //Digest mode addon flags - var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN, "Jams Sensors" = DM_FLAG_JAMSENSORS, "Complete Absorb" = DM_FLAG_FORCEPSAY, "Slow Body Digestion" = DM_FLAG_SLOWBODY, "Muffle Items" = DM_FLAG_MUFFLEITEMS) //CHOMPEdit + var/tmp/static/list/mode_flag_list = list("Numbing" = DM_FLAG_NUMBING, "Stripping" = DM_FLAG_STRIPPING, "Leave Remains" = DM_FLAG_LEAVEREMAINS, "Muffles" = DM_FLAG_THICKBELLY, "Affect Worn Items" = DM_FLAG_AFFECTWORN, "Jams Sensors" = DM_FLAG_JAMSENSORS, "Complete Absorb" = DM_FLAG_FORCEPSAY, "Slow Body Digestion" = DM_FLAG_SLOWBODY, "Muffle Items" = DM_FLAG_MUFFLEITEMS, "TURBO MODE" = DM_FLAG_TURBOMODE) //CHOMPEdit //Item related modes var/tmp/static/list/item_digest_modes = list(IM_HOLD,IM_DIGEST_FOOD,IM_DIGEST,IM_DIGEST_PARALLEL) @@ -308,15 +308,19 @@ if(isliving(loc)) owner = loc owner.vore_organs |= src - START_PROCESSING(SSbellies, src) - + if(speedy_mob_processing) //CHOMPEdit Start + START_PROCESSING(SSobj, src) + else + START_PROCESSING(SSbellies, src) create_reagents(300) //CHOMP So we can have some liquids in bellies flags |= NOREACT // We dont want bellies to start bubling nonstop due to people mixing when transfering and making different reagents - /obj/belly/Destroy() - STOP_PROCESSING(SSbellies, src) + if(speedy_mob_processing) + STOP_PROCESSING(SSobj, src) + else + STOP_PROCESSING(SSbellies, src) //CHOMPEdit End owner?.vore_organs?.Remove(src) owner = null return ..() @@ -324,10 +328,9 @@ // Called whenever an atom enters this belly /obj/belly/Entered(atom/movable/thing, atom/OldLoc) . = ..() //CHOMPEdit Start - if(istype(owner.loc,/turf/simulated) && !cycle_sloshed && reagents.total_volume > 0) + if(owner && istype(owner.loc,/turf/simulated) && !cycle_sloshed && reagents.total_volume > 0) var/turf/simulated/T = owner.loc - var/list/slosh_sounds = T.vorefootstep_sounds["human"] - var/S = pick(slosh_sounds) + var/S = pick(T.vorefootstep_sounds["human"]) if(S) playsound(T, S, sound_volume * (reagents.total_volume / 100), FALSE, preference = /datum/client_preference/digestion_noises) cycle_sloshed = TRUE @@ -364,9 +367,8 @@ playsound(src, soundfile, vol = sound_volume, vary = 1, falloff = VORE_SOUND_FALLOFF, preference = /datum/client_preference/eating_noises, volume_channel = VOLUME_CHANNEL_VORE) //CHOMPEdit recent_sound = TRUE - if(reagents.total_volume > 0 && !isliving(thing)) //CHOMPAdd Start - if(!istype(thing,/obj/item/weapon/reagent_containers)) //Don't fill containers with free juice. Splashing only. - reagents.trans_to(thing, reagents.total_volume, 1 / (LAZYLEN(contents) ? LAZYLEN(contents) : 1), TRUE) //CHOMPAdd End + if(reagents.total_volume > 0 && !isliving(thing)) //CHOMPAdd + reagents.trans_to(thing, reagents.total_volume, 0.1 / (LAZYLEN(contents) ? LAZYLEN(contents) : 1), FALSE) //CHOMPAdd //Messages if it's a mob if(isliving(thing)) var/mob/living/M = thing @@ -394,9 +396,10 @@ //Stop AI processing in bellies if(M.ai_holder) M.ai_holder.go_sleep() - if(reagents.total_volume > 0 && M.digestable) //CHOMPAdd - reagents.trans_to(M, reagents.total_volume, 1 / (LAZYLEN(contents) ? LAZYLEN(contents) : 1), TRUE) //CHOMPAdd - to_chat(M, "You splash into a pool of [reagent_name]!") //CHOMPAdd + if(reagents.total_volume > 0 && M.digestable) //CHOMPEdit Start + if(digest_mode == DM_DIGEST) + reagents.trans_to(M, reagents.total_volume, 0.1 / (LAZYLEN(contents) ? LAZYLEN(contents) : 1), FALSE) + to_chat(M, "You splash into a pool of [reagent_name]!") else if(count_items_for_sprite) //CHOMPEdit - If this is enabled also update fullness for non-living things owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. if(istype(thing, /obj/item/capture_crystal)) //CHOMPEdit: Capture crystal occupant gets to see belly text too. @@ -442,7 +445,7 @@ for(var/count in I.d_mult to 1 step 0.25) I.add_overlay(I.d_stage_overlay, TRUE) //CHOMPEdit end -/obj/belly/proc/vore_fx(mob/living/L, var/update) +/obj/belly/proc/vore_fx(mob/living/L, var/update, var/severity = 0) //CHOMPEdit if(!istype(L)) return if(!L.client) @@ -454,8 +457,9 @@ L.clear_fullscreen("belly") if(belly_fullscreen) if(colorization_enabled) - var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly) //CHOMPEdit Start: preserving save data + var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly, severity) //CHOMPEdit Start: preserving save data F.icon = file("modular_chomp/icons/mob/vore_fullscreens/[belly_fullscreen].dmi") + F.cut_overlays() var/image/I = image(F.icon, belly_fullscreen) //Would be cool if I could just include color and alpha in the image define so we don't have to copy paste I.color = belly_fullscreen_color I.alpha = belly_fullscreen_alpha @@ -472,13 +476,36 @@ I.color = belly_fullscreen_color4 I.alpha = belly_fullscreen_alpha F.add_overlay(I) + if(L.liquidbelly_visuals && reagents.total_volume) + if(digest_mode == DM_HOLD && item_digest_mode == IM_HOLD) + I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "calm") + else + I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "bubbles") + I.color = reagentcolor + I.alpha = max(150, min(custom_max_volume, 255)) - (255 - belly_fullscreen_alpha) + I.pixel_y = -450 + (450 / custom_max_volume * reagents.total_volume) + F.add_overlay(I) + F.update_for_view(owner.client.view) else - var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly/fixed) //preserving save data + var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly/fixed, severity) //preserving save data F.icon = file("modular_chomp/icons/mob/vore_fullscreens/[belly_fullscreen].dmi") + F.cut_overlays() F.add_overlay(image(F.icon, belly_fullscreen)) F.add_overlay(image(F.icon, belly_fullscreen+"-2")) F.add_overlay(image(F.icon, belly_fullscreen+"-3")) - F.add_overlay(image(F.icon, belly_fullscreen+"-4")) //CHOMPEdit End + F.add_overlay(image(F.icon, belly_fullscreen+"-4")) + if(L.liquidbelly_visuals && reagents.total_volume) + var/image/I + if(digest_mode == DM_HOLD && item_digest_mode == IM_HOLD) + I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "calm") + else + I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "bubbles") + I.color = reagentcolor + I.alpha = max(150, min(custom_max_volume, 255)) - (255 - belly_fullscreen_alpha) + I.pixel_y = -450 + (450 / custom_max_volume * reagents.total_volume) + F.add_overlay(I) + F.update_for_view(owner.client.view) + //CHOMPEdit End else L.clear_fullscreen("belly") @@ -495,8 +522,9 @@ if(belly_fullscreen) if(colorization_enabled) - var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly) //CHOMPedit Start: preserving save data + var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly, reagents.total_volume) //CHOMPedit Start: preserving save data F.icon = file("modular_chomp/icons/mob/vore_fullscreens/[belly_fullscreen].dmi") + F.cut_overlays() var/image/I = image(F.icon, belly_fullscreen) I.color = belly_fullscreen_color I.alpha = belly_fullscreen_alpha @@ -513,12 +541,34 @@ I.color = belly_fullscreen_color4 I.alpha = belly_fullscreen_alpha F.add_overlay(I) + if(L.liquidbelly_visuals && reagents.total_volume) + if(digest_mode == DM_HOLD && item_digest_mode == IM_HOLD) + I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "calm") + else + I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "bubbles") + I.color = reagentcolor + I.alpha = max(150, min(custom_max_volume, 255)) - (255 - belly_fullscreen_alpha) + I.pixel_y = -450 + (450 / custom_max_volume * reagents.total_volume) + F.add_overlay(I) + F.update_for_view(owner.client.view) else - var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly/fixed) //preserving save data + var/obj/screen/fullscreen/F = L.overlay_fullscreen("belly", /obj/screen/fullscreen/belly/fixed, reagents.total_volume) //preserving save data + F.cut_overlays() F.add_overlay(image(F.icon, belly_fullscreen)) F.add_overlay(image(F.icon, belly_fullscreen+"-2")) F.add_overlay(image(F.icon, belly_fullscreen+"-3")) - F.add_overlay(image(F.icon, belly_fullscreen+"-4")) //CHOMPEdit End + F.add_overlay(image(F.icon, belly_fullscreen+"-4")) + if(L.liquidbelly_visuals && reagents.total_volume) + var/image/I + if(digest_mode == DM_HOLD && item_digest_mode == IM_HOLD) + I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "calm") + else + I = image('modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi', "bubbles") + I.color = reagentcolor + I.alpha = max(150, min(custom_max_volume, 255)) - (255 - belly_fullscreen_alpha) + I.pixel_y = -450 + (450 / custom_max_volume * reagents.total_volume) + F.add_overlay(I) + F.update_for_view(owner.client.view)//CHOMPEdit End else L.clear_fullscreen("belly") diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index 955d8a2d7b..989fa74d47 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -80,29 +80,29 @@ GLOBAL_LIST_INIT(digest_modes, list()) var/actual_tox = L.getToxLoss() - old_tox var/actual_clone = L.getCloneLoss() - old_clone var/damage_gain = (actual_brute + actual_burn + actual_oxy/2 + actual_tox + actual_clone*2)*(B.nutrition_percent / 100) - if(B.slow_digestion) //CHOMPEdit + if(B.slow_digestion) //CHOMPEdit Start damage_gain = damage_gain * 0.5 var/offset = (1 + ((L.weight - 137) / 137)) // 130 pounds = .95 140 pounds = 1.02 var/difference = B.owner.size_multiplier / L.size_multiplier if(B.health_impacts_size) //CHOMPEdit - Health probably changed so... B.owner.update_fullness() //CHOMPEdit - This is run whenever a belly's contents are changed. if(isrobot(B.owner)) - if(B.reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && B.reagents.total_volume < B.reagents.maximum_volume) //CHOMPedit start: digestion producing reagents + if(B.reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && B.reagents.total_volume < B.reagents.maximum_volume) //digestion producing reagents var/mob/living/silicon/robot/R = B.owner R.cell.charge += 20*damage_gain B.GenerateBellyReagents_digesting() else var/mob/living/silicon/robot/R = B.owner - R.cell.charge += 25*damage_gain //CHOMPedit end + R.cell.charge += 25*damage_gain if(offset && damage_gain > 0) // If any different than default weight, multiply the % of offset. - if(B.reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && B.reagents.total_volume < B.reagents.maximum_volume) //CHOMPedit start: digestion producing reagents - B.owner.adjust_nutrition(offset*((B.nutrition_percent / 100)*4.5/(B.gen_cost*1.25)*(damage_gain)/difference)) //Uncertain if balanced fairly, can adjust by multiplier for the cost of reagent, dont go below 1 or else it will result in more nutrition than normal - Jack - B.digest_nutri_gain = offset*((B.nutrition_percent / 100)*0.5/(B.gen_cost*1.25)*(damage_gain)/difference) //for transfering nutrition value over to GenerateBellyReagents_digesting() + if(B.reagent_mode_flags & DM_FLAG_REAGENTSDIGEST && B.reagents.total_volume < B.reagents.maximum_volume) //digestion producing reagents + B.owner.adjust_nutrition(offset * (3 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //Uncertain if balanced fairly, can adjust by multiplier for the cost of reagent, dont go below 1 or else it will result in more nutrition than normal - Jack + B.digest_nutri_gain = offset * (1.5 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier() //for transfering nutrition value over to GenerateBellyReagents_digesting() B.GenerateBellyReagents_digesting() else - B.owner.adjust_nutrition(offset*(4.5 * (damage_gain) / difference)*L.get_digestion_nutrition_modifier()*B.owner.get_digestion_efficiency_modifier()) //CHOMPedit end //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved. + B.owner.adjust_nutrition(offset * (4.5 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //4.5 nutrition points per health point. Normal same size 100+100 health prey with average weight would give 900 points if the digestion was instant. With all the size/weight offset taxes plus over time oxyloss+hunger taxes deducted with non-instant digestion, this should be enough to not leave the pred starved. else - B.owner.adjust_nutrition((4.5 * (damage_gain) / difference)*L.get_digestion_nutrition_modifier()*B.owner.get_digestion_efficiency_modifier()) + B.owner.adjust_nutrition(offset * (4.5 * damage_gain / difference) * L.get_digestion_nutrition_modifier() * B.owner.get_digestion_efficiency_modifier()) //CHOMPEdit End if(L.stat != oldstat) return list("to_update" = TRUE) diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm index bd23a78961..56fffe3ca8 100644 --- a/code/modules/vore/eating/digest_act_vr.dm +++ b/code/modules/vore/eating/digest_act_vr.dm @@ -3,7 +3,7 @@ //return non-negative integer: Amount of nutrition/charge gained (scaled to nutrition, other end can multiply for charge scale). // Ye default implementation. -/obj/item/proc/digest_act(atom/movable/item_storage = null, touchable_amount) //CHOMPEdit +/obj/item/proc/digest_act(atom/movable/item_storage = null, touchable_amount, splashing = 0) //CHOMPEdit if(istype(item_storage, /obj/item/device/dogborg/sleeper)) if(istype(src, /obj/item/device/pda)) var/obj/item/device/pda/P = src @@ -34,7 +34,10 @@ var/obj/belly/B = item_storage if(!touchable_amount) //CHOMPEdit Start touchable_amount = 1 - g_damage = 0.25 * (B.digest_brute + B.digest_burn) / touchable_amount + if(splashing > 0) + g_damage = 0.25 * splashing + else + g_damage = 0.25 * (B.digest_brute + B.digest_burn) / touchable_amount if(g_damage <= 0) return FALSE if(g_damage > digest_stage) diff --git a/code/modules/vore/eating/living_ch.dm b/code/modules/vore/eating/living_ch.dm index 18a406bb3a..e52abd42d6 100644 --- a/code/modules/vore/eating/living_ch.dm +++ b/code/modules/vore/eating/living_ch.dm @@ -9,6 +9,7 @@ var/mute_entry = FALSE //Toggleable vorgan entry logs. var/parasitic = FALSE //Digestion immunity and nutrition leeching variable var/trash_catching = FALSE //Toggle for trash throw vore. + var/liquidbelly_visuals = TRUE //Toggle for liquidbelly level visuals. // CHOMP vore icons refactor (Now on living) var/vore_capacity = 0 // Maximum capacity, -1 for unlimited @@ -227,6 +228,8 @@ update_fullness() if("Container") + if(RTB.reagentid == "stomacid") + return var/list/choices = list() for(var/obj/item/weapon/reagent_containers/rc in view(1,user.loc)) choices += rc @@ -309,3 +312,10 @@ set desc = "Toggle Trash Eater throw vore abilities." trash_catching = !trash_catching to_chat(src, "Trash catching [trash_catching ? "enabled" : "disabled"].") + +/mob/living/proc/liquidbelly_visuals() + set name = "Toggle Liquidbelly Visuals" + set category = "Preferences" + set desc = "Toggle liquidbelly fullscreen visual effect." + liquidbelly_visuals = !liquidbelly_visuals + to_chat(src, "Liquidbelly overlays [liquidbelly_visuals ? "enabled" : "disabled"].") \ No newline at end of file diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 96c92eb802..54d9de1809 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -1178,9 +1178,20 @@ return FALSE host.vore_selected.mode_flags ^= host.vore_selected.mode_flag_list[toggle_addon] host.vore_selected.items_preserved.Cut() //Re-evaltuate all items in belly on - host.vore_selected.slow_digestion = FALSE //CHOMPAdd - if(host.vore_selected.mode_flags & DM_FLAG_SLOWBODY) //CHOMPAdd - host.vore_selected.slow_digestion = TRUE //CHOMPAdd + host.vore_selected.slow_digestion = FALSE //CHOMPAdd Start + if(host.vore_selected.mode_flags & DM_FLAG_SLOWBODY) + host.vore_selected.slow_digestion = TRUE + if(toggle_addon == "TURBO MODE") + STOP_PROCESSING(SSbellies, host.vore_selected) + STOP_PROCESSING(SSobj, host.vore_selected) + if(host.vore_selected.mode_flags & DM_FLAG_TURBOMODE) + host.vore_selected.speedy_mob_processing = TRUE + START_PROCESSING(SSobj, host.vore_selected) + to_chat(usr, "TURBO MODE activated! Belly processing speed tripled! This also affects timed settings, such as autotransfer and liquid generation.") + else + host.vore_selected.speedy_mob_processing = FALSE + START_PROCESSING(SSbellies, host.vore_selected) + to_chat(usr, "TURBO MODE deactivated. Belly processing returned to normal speed.")//CHOMPAdd End . = TRUE if("b_item_mode") var/list/menu_list = host.vore_selected.item_digest_modes.Copy() @@ -1520,6 +1531,7 @@ return FALSE var/new_new_damage = CLAMP(new_damage, 0, 6) host.vore_selected.digest_burn = new_new_damage + host.vore_selected.items_preserved.Cut() //CHOMPAdd . = TRUE if("b_brute_dmg") var/new_damage = tgui_input_number(user, "Choose the amount of brute damage prey will take per tick. Ranges from 0 to 6", "Set Belly Brute Damage.", host.vore_selected.digest_brute, 6, 0) @@ -1527,6 +1539,7 @@ return FALSE var/new_new_damage = CLAMP(new_damage, 0, 6) host.vore_selected.digest_brute = new_new_damage + host.vore_selected.items_preserved.Cut() //CHOMPAdd . = TRUE if("b_oxy_dmg") var/new_damage = tgui_input_number(user, "Choose the amount of suffocation damage prey will take per tick. Ranges from 0 to 12.", "Set Belly Suffocation Damage.", host.vore_selected.digest_oxy, 12, 0) diff --git a/icons/mob/human_races/markings_vr.dmi b/icons/mob/human_races/markings_vr.dmi index 29442bf908..80f2d51020 100644 Binary files a/icons/mob/human_races/markings_vr.dmi and b/icons/mob/human_races/markings_vr.dmi differ diff --git a/icons/mob/vore/ears_32x64.dmi b/icons/mob/vore/ears_32x64.dmi index df92e62a42..5c6e3b6598 100644 Binary files a/icons/mob/vore/ears_32x64.dmi and b/icons/mob/vore/ears_32x64.dmi differ diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi index e7bd16e840..99c6e7debe 100644 Binary files a/icons/mob/vore/taurs_vr.dmi and b/icons/mob/vore/taurs_vr.dmi differ diff --git a/icons/mob/vore/wings_ch.dmi b/icons/mob/vore/wings_ch.dmi deleted file mode 100644 index 296313cfeb..0000000000 Binary files a/icons/mob/vore/wings_ch.dmi and /dev/null differ diff --git a/icons/obj/paicard_ch.dmi b/icons/obj/paicard_ch.dmi new file mode 100644 index 0000000000..f2a430bce8 Binary files /dev/null and b/icons/obj/paicard_ch.dmi differ diff --git a/icons/obj/projectiles_impact.dmi b/icons/obj/projectiles_impact.dmi index 66b84f4bed..a6efd92db6 100644 Binary files a/icons/obj/projectiles_impact.dmi and b/icons/obj/projectiles_impact.dmi differ diff --git a/icons/obj/projectiles_muzzle.dmi b/icons/obj/projectiles_muzzle.dmi index 71e587f73d..234a2e428a 100644 Binary files a/icons/obj/projectiles_muzzle.dmi and b/icons/obj/projectiles_muzzle.dmi differ diff --git a/icons/obj/projectiles_tracer.dmi b/icons/obj/projectiles_tracer.dmi index 9703c51ab7..7404a5867b 100644 Binary files a/icons/obj/projectiles_tracer.dmi and b/icons/obj/projectiles_tracer.dmi differ diff --git a/maps/southern_cross/southern_cross-2.dmm b/maps/southern_cross/southern_cross-2.dmm index 8ea6979e8a..83169e87dd 100644 --- a/maps/southern_cross/southern_cross-2.dmm +++ b/maps/southern_cross/southern_cross-2.dmm @@ -44004,7 +44004,7 @@ }, /obj/machinery/door/airlock{ name = "Coffee Shop"; - req_one_access = list(25,28) + req_one_access = list(25,28,37) }, /turf/simulated/floor/tiled/old_tile/yellow, /area/crew_quarters/coffee_shop) @@ -49217,7 +49217,7 @@ id = "coffeeshop"; name = "Cafe Shutters"; pixel_y = -26; - req_one_access = list(25,28) + req_one_access = list(25,28,37) }, /obj/machinery/button/neonsign{ id = "cafeopen"; @@ -72242,6 +72242,10 @@ pixel_x = -5; pixel_y = 1 }, +/obj/item/weapon/reagent_containers/glass/rag{ + pixel_x = 7; + pixel_y = 2 + }, /turf/simulated/floor/tiled/old_tile/yellow, /area/crew_quarters/coffee_shop) "sCV" = ( @@ -72325,7 +72329,7 @@ dir = 4 }, /obj/machinery/door/airlock/maintenance{ - req_one_access = list(25,28) + req_one_access = list(25,28,37) }, /obj/structure/cable/green{ d1 = 4; diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm index d09d479a73..a7089b9236 100644 --- a/maps/tether/tether-05-station1.dmm +++ b/maps/tether/tether-05-station1.dmm @@ -25087,7 +25087,7 @@ /area/gateway/prep_room) "kHf" = ( /obj/machinery/conveyor_switch/oneway{ - convdir = -1; + //convdir = -1; //Incompatable with new behavior -Reo id = "QMLoad2" }, /obj/machinery/light{ diff --git a/modular_chomp/code/game/objects/items/devices/flipper.dm b/modular_chomp/code/game/objects/items/devices/flipper.dm new file mode 100644 index 0000000000..4dfc425835 --- /dev/null +++ b/modular_chomp/code/game/objects/items/devices/flipper.dm @@ -0,0 +1,246 @@ +/* +* Your Multi-Functional Security Companion +*/ + +//Custom PAI mob needs to be defined before item +/mob/living/silicon/pai/flipper + name = "Vix" + icon = 'icons/mob/pets.dmi' + icon_state = "syndifox" + chassis = "syndifox" + possible_chassis = list("Fox"="syndifox") + var/gut1 //Custom voregut temp vars + var/gut2 + +// The following code defines the Flipper as a Personal AI (PAI) card, as it is the most complex part of the system. +/obj/item/device/paicard/flipper + name = "Vix" + icon = 'icons/obj/paicard_ch.dmi' + var/systems_list = list("MultiTool","Emag","PAI","Signaler") + var/selected = "" //Currently selected SubSystem + origin_tech = list(TECH_DATA = 2, TECH_ILLEGAL = 2) //Added illegal Tech + var/obj/item/device/multitool/MultiTool + var/obj/item/device/assembly/signaler/Signal + +/* +* +* This function is redirects the attack self call to the selected module. +* This is how we further proxy the systems +* +*/ +/obj/item/device/paicard/flipper/attack_self(mob/user) + if(selected && selected != "Emag") + var/obj/item/module = selected + return module.attack_self(user) + ..() + +/obj/item/device/paicard/flipper/New() + ..() + desc = "The [name] is a versatile security device designed to protect and empower users in a variety of contexts. With features such as wireless hacking, radio analysis, signal jamming, and physical lock picking, the [name] is the ultimate tool for security professionals, hobbyists, and anyone seeking to better understand and defend against modern threats. Whether you're investigating a security breach, testing your own defenses, or simply curious about the workings of wireless technology, the [name] has you covered." + MultiTool = new /obj/item/device/multitool(src) + Signal = new /obj/item/device/assembly/signaler(src) + +/* + * This function is called before an attack is executed. If a system is selected, it will use the selected system to attack. + * Returns true to prevent the attackby function on the source object from being executed. + */ +/obj/item/device/paicard/flipper/pre_attack(atom/A, mob/user, params) + if(selected) + if(selected=="Emag") + if(istype(A,/obj/machinery/door)) + return //for doors use the doorjack + return A.emag_act(1,user,src) + proxy_attackby(A , selected, user, params) + return TRUE //True means attackby on src will not be executed + ..() //Execute Parent + +/* + * This function is used to call the attackby function on the intercepted object. + */ +/obj/item/device/paicard/flipper/proc/proxy_attackby(atom/A,atom/B, mob/user, var/click_parameters) + A.attackby(B,user) //Directly call attackby on the intercepted object + +/* + * This function allows the user to select which subsystem to use for an attack + */ +/obj/item/device/paicard/flipper/proc/system_select(mob/user) + var/selected = tgui_input_list(user, "Which System to Use?", "Systems", systems_list) + if(selected=="PAI") + selected = "" + if(selected=="MultiTool") + selected = MultiTool + if(selected=="Signaler") + selected = Signal + +/* + * This function is called when the user Alt-clicks the Flipper. It calls the system_select function to allow the user to select a subsystem. + */ +/obj/item/device/paicard/flipper/AltClick(mob/living/user) + system_select(user) + +//Vore +/mob/living/silicon/pai/flipper/init_vore() + var/obj/belly/B = new /obj/belly/flipper/maw(src) + B.affects_vore_sprites = FALSE + B.emote_lists[DM_HOLD] = list( + "The wet, plush lining of [name]'s maw surrounds you, enveloping you in a soft and slightly sticky embrace. The walls pulse and undulate gently, as if alive, creating a soothing rhythm that lulls you into a sense of calm.", + "You're encased in the warm and humid space of [name]'s maw, the slick surfaces glistening around you. The soft movements of the walls feel almost like the caress of a living creature.", + "The wet, fleshy walls of [name]'s maw seem to pulse and throb in time with your heartbeat, as if they're alive and responding to your presence. The soft and yielding surface wraps around you like a protective cocoon.", + "You feel the gentle pressure of [name]'s maw all around you, the slick and wet surfaces pulsating softly. The sensation is oddly comforting, as if you're being cradled in the embrace of a nurturing being.", + "The warm, moist environment of [name]'s maw surrounds you completely, the walls of flesh glistening and undulating gently. The soft, plush surface seems to mold itself to your form, creating a snug and comfortable space for you to rest in.") + gut1 = B + vore_selected = B + B = new /obj/belly/flipper/throat(src) + B.affects_vore_sprites = FALSE + B.emote_lists[DM_HOLD] = list( + "The narrow passage of [name]'s throat envelops you in its warm embrace, the smooth metallic walls pressing snugly against your body.", + "You feel the intricate machinery of [name]'s throat pulse and undulate around you.", + "As you navigate the cramped yet reassuring space of [name]'s throat, you feel a sense of comfort and safety.", + "[name]'s throat closes tightly around you, cocooning you in its silken embrace as it works to keep you safe and secure.", + "The warm, inviting space of [name]'s throat wraps snugly around you, providing a sense of comfort and reassurance.") + B = new /obj/belly/flipper/stomach(src) + B.emote_lists[DM_DIGEST] = list( + "The cavernous stomach of the [name] rumbles and churns,.", + "The walls of [name]'s stomach squish and squelch around you, the sophisticated machinery working in perfect harmony.", + "The rhythmic kneading and massaging of [name]'s stomach is both comforting and reassuring.", + "The warm and inviting embrace of [name]'s stomach envelops you in its comforting embrace.", + "[name]'s stomach compresses tightly around you, its powerful systems working aroud you.", + "[name]'s stomach hums and churns around you.") + .=..() + +//Belly stuff +/obj/belly/flipper + autotransferchance = 50 + autotransferwait = 150 + escapable = 1 + escapechance = 100 + escapetime = 30 + fancy_vore = 1 + contamination_color = "grey" + contamination_flavor = "Wet" + vore_verb = "slurp" + belly_fullscreen_color = "#711e1e" + +/obj/belly/flipper/maw + name = "Maw" + desc = "As you're caught off guard by the sudden movement, The AIs mechanical jaws snap shut to trap you. You find yourself inside the warm and soft mechanical maw. The interior of the maw is lined with a smooth, metallic coating that glints in the light. The tongue, lifts you up against the insides of its metallic teeth and against the ridges of its palate, which are covered in various ports and connectors. It's growled breaths gust from its back hatch, blasting you with warm air and making your body shiver. You can sense the maw is preparing to unleash you into its next stage of operation." + escapechance = 100 + struggle_messages_inside = list( + "You wriggle and wrestle for purchase against the metallic tongue, which lifts and cocoons you tightly between itself and the palate.", + "You try to pry at the interlocked teeth, but they don't budge. The jaws snap shut once more, trapping you inside the maw.", + "You try to wriggle towards the front of the jaws to avoid the next stage of operation. However, the tongue scoops you up and brings you close to the hatch of the back throat.", + "You brace yourself against the metallic mattress of the tongue, pressing your limbs against the roof, and try to force the jaws open. However, your efforts are futile, and their growled breaths gust over you more forcefully.", + "You squirm and struggle, trying to find a way out, but the tongue slithers out to wrap around your limbs, tugging you back inside with a noisy sound of metallic lips.") + autotransferlocation = "Throat" + belly_fullscreen = "a_tumby" + vore_sound = "Insertion1" + +/obj/belly/flipper/throat + name = "Throat" + transferchance = 20 + transferlocation = "Maw" + escapechance = 0 + desc = "You are swallowed,, surrounded by a warm, oily mechanical tunnel. The walls pulsate rhythmically around you, clenching and relaxing in time with the AI's breathing. You feel a sense of claustrophobia as you are forced deeper and deeper into its throat, inching closer to your final destination." + struggle_messages_inside = list( + "You squirm and struggle, trying to push your way back out through the AI's throat. It's no use, however, as the walls continue to squeeze tighter around you.", + "You try to force your way out through the walls of the throat, but they resist your efforts, leaving you trapped inside the metallic chamber.", + "The walls of the throat press tightly against you, leaving you struggling for breath as you're pulled deeper into the AI's body.", + "You strain against the walls of the throat, hoping to force your way out through the metallic chamber. It's no use, however, as they continue to squeeze tighter around you.", + "You writhe and squirm, trying to escape the claustrophobic confines of the AI's throat. It's no use, however, as you're forced ever deeper into the warm, oily tunnel.") + autotransferlocation = "Stomach" + belly_fullscreen = "another_tumby" + vore_sound = "Tauric Swallow" + +/obj/belly/flipper/stomach + name = "Stomach" + escapechance = 0 + transferchance = 10 + transferlocation = "Throat" + desc = "The final destination of your mechanical journey, a warm and soft stomach. After being swallowed, you find yourself immersed in a thick, gooey pool of digestive juices that softly sloshes with each movement of the creature. The walls around you are warm and plush, constantly pulsating with rhythmic undulations that squeeze and massage your entire body. There's no escape from this cozy and comforting chamber, as you feel the gentle yet relentless contractions pushing you deeper into the digestive system. The air is thick and heavy with the scent of acid, which only gets stronger as you sink further down into the stomach. Every now and then, the walls spasm and contract, squeezing the viscous juices all over your body, coating you in their warm and slimy embrace. You can hear the distant gurgles and groans of the digestive system, a reminder of your inescapable fate as its prey." + digest_mode = DM_DIGEST + digest_brute = 0 + digest_burn = 2 + struggle_messages_inside = list( + "You struggle and squirm, but the walls around you are too soft and pliable, yielding to your every movement without any resistance. Every time you try to push your way out, the walls just squeeze you tighter, reminding you that there's no escape from this warm and cozy prison.", + "You search for any signs of an exit, but the walls around you are too thick and plush, absorbing all of your movements without a trace. You're trapped here, at the mercy of their digestive system, slowly melting away in its warm and slimy embrace.", + "You press your limbs and body against the soft walls, trying to push your way out. But the walls just close in around you, enveloping you in a tight and suffocating hug. You can feel the warm and slimy digestive juices slowly dissolving your flesh, as you become one with the creature that swallowed you.", + "You thrash and flail, trying to break free from the soft and pliable walls that surround you. But every movement just makes the stomach walls pulsate and squeeze tighter around you, coaxing you deeper into the creature's digestive system.", + "You try to resist the relentless contractions of the stomach walls, but they're too warm and plush, too soft and pliable. Every movement you make just sends ripples of pleasure throughout the creature's digestive system, making it squeeze and massage you even harder.") + belly_fullscreen = "da_tumby" + vore_sound = "Stomach Move" + + +//Custom pai handler since we need to access a child class +//and i dont wanna inflate the original one even more with if checks +/obj/item/device/paicard/flipper/attack_ghost(mob/user as mob) + if(pai != null) //Have a person in them already? + return ..() + if(is_damage_critical()) + to_chat(usr, "That card is too damaged to activate!") + return + var/time_till_respawn = user.time_till_respawn() + if(time_till_respawn == -1) // Special case, never allowed to respawn + to_chat(usr, "Respawning is not allowed!") + else if(time_till_respawn) // Nonzero time to respawn + to_chat(usr, "You can't do that yet! You died too recently. You need to wait another [round(time_till_respawn/10/60, 0.1)] minutes.") + return + if(jobban_isbanned(usr, "pAI")) + to_chat(usr,"You cannot join a pAI card when you are banned from playing as a pAI.") + return + + for(var/ourkey in paikeys) + if(ourkey == user.ckey) + to_chat(usr, "You can't just rejoin any old pAI card!!! Your card still exists.") + return + + var/choice = tgui_alert(user, "You sure you want to inhabit this PAI, or submit yourself to being recruited?", "Confirmation", list("Inhabit", "Recruit", "Cancel")) + if(choice == "Cancel") + return ..() + if(choice == "Recruit") + paiController.recruitWindow(user) + return ..() + choice = tgui_alert(user, "Do you want to load your pAI data?", "Load", list("Yes", "No")) + var/actual_pai_name + var/turf/location = get_turf(src) + if(choice == "No") + var/pai_name = "Vix"//tgui_input_text(user, "Choose your character's name", "Character Name") + actual_pai_name = sanitize_name(pai_name, ,1) + if(isnull(actual_pai_name)) + return ..() + var/obj/item/device/paicard/flipper/card = new(location) + var/mob/living/silicon/pai/flipper/new_pai = new(card) + new_pai.key = user.key + paikeys |= new_pai.ckey + card.setPersonality(new_pai) + new_pai.SetName(actual_pai_name) + + if(choice == "Yes") + var/obj/item/device/paicard/flipper/card = new(location) + var/mob/living/silicon/pai/flipper/new_pai = new(card) + new_pai.key = user.key + paikeys |= new_pai.ckey + card.setPersonality(new_pai) + if(!new_pai.savefile_load(new_pai)) + var/pai_name = "Vix"//tgui_input_text(new_pai, "Choose your character's name", "Character Name") + actual_pai_name = sanitize_name(pai_name, ,1) + if(isnull(actual_pai_name)) + return ..() + + qdel(src) + return ..() + +//proc override to avoid pAI players being invisible while the chassis selection window is open +/mob/living/silicon/pai/flipper/choose_chassis() + set category = "pAI Commands" + set name = "Choose Chassis" + var/choice + + choice = tgui_input_list(usr, "What would you like to use for your mobile chassis icon?", "Chassis Choice", possible_chassis) + if(!choice) return + var/oursize = size_multiplier + resize(1, FALSE, TRUE, TRUE, FALSE) //We resize ourselves to normal here for a moment to let the vis_height get reset + chassis = possible_chassis[choice] + vore_capacity = 1 + vore_capacity_ex = list("stomach" = 1) + resize(oursize, FALSE, TRUE, TRUE, FALSE) //And then back again now that we're sure the vis_height is correct. + update_icon() \ No newline at end of file diff --git a/modular_chomp/code/modules/client/preference_setup/loadout/loadout_shoes.dm b/modular_chomp/code/modules/client/preference_setup/loadout/loadout_shoes.dm new file mode 100644 index 0000000000..48fb1646b3 --- /dev/null +++ b/modular_chomp/code/modules/client/preference_setup/loadout/loadout_shoes.dm @@ -0,0 +1,12 @@ +/datum/gear/shoes/mech_shoes + display_name = "mech shoes selection" + path = /obj/item/clothing/shoes/mech_shoes + cost = 1 + +/datum/gear/shoes/mech_shoes/New() + ..() + var/list/mechshoes = list( + "heavy mech shoes" = /obj/item/clothing/shoes/mech_shoes, + "light mech shoes" = /obj/item/clothing/shoes/mech_shoes/light + ) + gear_tweaks += new/datum/gear_tweak/path(mechshoes) \ No newline at end of file diff --git a/modular_chomp/code/modules/client/preference_setup/loadout/loadout_suit.dm b/modular_chomp/code/modules/client/preference_setup/loadout/loadout_suit.dm new file mode 100644 index 0000000000..d5af35f6df --- /dev/null +++ b/modular_chomp/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -0,0 +1,17 @@ +/datum/gear/suit/pcarrier // No protection until inserted with plates, purely for cosmetic purposes. + display_name = "Plate Carrier selection (Security/Exploration)" + path = /obj/item/clothing/suit/armor/pcarrier + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Pathfinder", "Field Medic", "Pilot", "Explorer") + cost = 2 + +/datum/gear/suit/pcarrier/New() + ..() + var/list/pcarriers = list( + "Black Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier, + "Navy Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/navy, + "Blue Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/blue, + "Light Blue Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/press, + "Green Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/green, + "Tan Plate Carrier" = /obj/item/clothing/suit/armor/pcarrier/tan + ) + gear_tweaks += new/datum/gear_tweak/path(pcarriers) \ No newline at end of file diff --git a/modular_chomp/code/modules/mining/shelter_atoms_ch.dm b/modular_chomp/code/modules/mining/shelter_atoms_ch.dm index dcb059f3e0..0eaceebb5a 100644 --- a/modular_chomp/code/modules/mining/shelter_atoms_ch.dm +++ b/modular_chomp/code/modules/mining/shelter_atoms_ch.dm @@ -105,6 +105,8 @@ /area/survivalpod/superpose/PizzaParlor +/area/survivalpod/superpose/GrandLibrary + /obj/item/device/survivalcapsule/superpose name = "superposed surfluid shelter capsule" desc = "A proprietary hyperstructure of many three-dimensional spaces superposed around a supermatter nano crystal; use a pen to reach the reset button. There's a license for use printed on the bottom." diff --git a/modular_chomp/code/modules/mining/shelters_ch.dm b/modular_chomp/code/modules/mining/shelters_ch.dm index 7cb0225430..8f80689f3c 100644 --- a/modular_chomp/code/modules/mining/shelters_ch.dm +++ b/modular_chomp/code/modules/mining/shelters_ch.dm @@ -320,3 +320,9 @@ mappath = "modular_chomp/maps/submaps/shelters/PizzaParlor-18x19.dmm" name = "Pizza Parlor" description = "A small locally owned pizza parlor, now with delivery services." + +/datum/map_template/shelter/superpose/GrandLibrary + shelter_id = "GrandLibrary" + mappath = "modular_chomp/maps/submaps/shelters/GrandLibrary-31x24.dmm" + name = "Pizza Parlor" + description = "A grand ornate library, more books than you can count." \ No newline at end of file diff --git a/modular_chomp/code/modules/mob/dead/observer/observer.dm b/modular_chomp/code/modules/mob/dead/observer/observer.dm index 7928b41556..5c9b519416 100644 --- a/modular_chomp/code/modules/mob/dead/observer/observer.dm +++ b/modular_chomp/code/modules/mob/dead/observer/observer.dm @@ -1,5 +1,6 @@ /mob/observer var/mob/living/body_backup = null //add reforming + low_priority = TRUE /mob/observer/Destroy() if(body_backup) diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/swoopie.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/swoopie.dm index f499d252e8..78267e1962 100644 --- a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/swoopie.dm +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/swoopie.dm @@ -38,14 +38,14 @@ B.belly_sprite_to_affect = "stomach" B.name = "Churno-Vac" B.desc = "With an abrupt loud WHUMP after a very sucky trip through the hungry bot's vacuum tube, you finally spill out into its waste container, where everything the bot slurps off the floors ends up for swift processing among the caustic sludge, efficiently melting everything down into a thin slurry to fuel its form. More loose dirt and debris occasionally raining in from above as the bot carries on with its duties to keep the station nice and clean." - B.digest_messages_prey = list("Under the heat and internal pressure of the greedy machine's gutworks, you can feel the tides of the hot caustic sludge claiming the last bits of space around your body, a few more squeezes of the synthetic muscles squelching and glurking as your body finally loses its form, completely blending down and merging into the tingly sludge to fuel the mean machine.") + B.digest_messages_prey = list("Under the heat and internal pressure of the greedy machine's gutworks, you can feel the tides of the hot caustic sludge claiming the last bits of space around your body, a few more squeezes of the synthetic muscles squelching and glurking as your body finally loses its form, completely blending down and merging into the tingly sludge to fuel the mean machine.") B.digest_mode = DM_DIGEST B.item_digest_mode = IM_DIGEST B.digest_burn = 3 B.fancy_vore = 1 B.vore_sound = "Stomach Move" - B.belly_fullscreen = "anim_belly" - B.belly_fullscreen_color = "#3e2f27" + B.belly_fullscreen = "VBO_trash" + B.belly_fullscreen_color = "#555B34" B.sound_volume = 25 B.count_items_for_sprite = TRUE @@ -94,6 +94,7 @@ B.desc = "SNAP! You have been sucked up into the big synthbird's beak, the powerful vacuum within the bird roaring somewhere beyond the abyssal deep gullet hungrily gaping before you, eagerly sucking you deeper inside towards a long bulgy ride down the bird's vacuum hose of a neck!" B.autotransferlocation = "vacuum hose" B.autotransfer_max_amount = 0 + B.autotransferwait = 60 vore_selected = B @@ -121,9 +122,6 @@ /mob/living/simple_mob/vore/aggressive/corrupthound/swoopie/Life() . =..() - for(var/obj/belly/L in vore_organs) //Speedrun that autotransfer at 2s ticks instead of 6s - if(L.speedy_mob_processing) - L.process() var/turf/T = get_turf(src) if(istype(T)) for(var/obj/O in T) diff --git a/modular_chomp/code/modules/mob/new_player/sprite_accessories_wing.dm b/modular_chomp/code/modules/mob/new_player/sprite_accessories_wing.dm index 1d32e670a8..5ad6dd59b1 100644 --- a/modular_chomp/code/modules/mob/new_player/sprite_accessories_wing.dm +++ b/modular_chomp/code/modules/mob/new_player/sprite_accessories_wing.dm @@ -1,15 +1,55 @@ /datum/sprite_accessory/wing/sect_drone //We should some day make a variable to make some wings not be able to fly name = "Sect drone wings (To use with bodytype marking)" desc = "" - icon = 'icons/mob/vore/wings_ch.dmi' + icon = 'modular_chomp/icons/mob/human_races/sprite_accessories/wings.dmi' icon_state = "sectdrone_wing" do_colouration = 1 color_blend_mode = ICON_MULTIPLY +/datum/sprite_accessory/wing/snagc + name = "xenomorph backplate, colorable" + desc = "" + icon = 'modular_chomp/icons/mob/human_races/sprite_accessories/wings.dmi' + icon_state = "csnag-backplate" + do_colouration = 1 + +/datum/sprite_accessory/wing/teshbee + name = "Teshari bee wings" + desc = "" + icon = 'modular_chomp/icons/mob/human_races/sprite_accessories/wings.dmi' + icon_state = "beewings_tesh" + +/datum/sprite_accessory/wing/teshdragonfly + name = "Teshari dragonfly wings" + desc = "" + icon = 'modular_chomp/icons/mob/human_races/sprite_accessories/wings.dmi' + icon_state = "dragonfly_tesh" + +/datum/sprite_accessory/wing/snail //We should some day make a variable to make some wings not be able to fly + name = "Snail shell" + desc = "" + icon = 'modular_chomp/icons/mob/human_races/sprite_accessories/wings.dmi' + icon_state = "snail_shell" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/wing/dragon2 + name = "Dragon wings, large, colorable" + desc = "" + icon = 'modular_chomp/icons/mob/human_races/sprite_accessories/wings64.dmi' + icon_state = "dragon_2" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "dragon_2_mark" + +// +// x64 Wings below this point. +// + /datum/sprite_accessory/wing/sect_drone_alt name = "Sect drone wings Alt. (To use with bodytype marking)" desc = "" - icon = 'icons/mob/vore/wings64_ch.dmi' + icon = 'modular_chomp/icons/mob/human_races/sprite_accessories/wings64.dmi' icon_state = "sectdrone_wing_alt" do_colouration = 1 color_blend_mode = ICON_MULTIPLY @@ -18,7 +58,7 @@ /datum/sprite_accessory/wing/sect_drone_alt_nomark name = "Sect drone wings Alt." desc = "" - icon = 'icons/mob/vore/wings64_ch.dmi' + icon = 'modular_chomp/icons/mob/human_races/sprite_accessories/wings64.dmi' icon_state = "sectdrone_wing_alt_nomark" do_colouration = 1 color_blend_mode = ICON_MULTIPLY diff --git a/modular_chomp/code/modules/recycling/v_garbosystem.dm b/modular_chomp/code/modules/recycling/v_garbosystem.dm index d44fa3a696..23e033355d 100644 --- a/modular_chomp/code/modules/recycling/v_garbosystem.dm +++ b/modular_chomp/code/modules/recycling/v_garbosystem.dm @@ -111,6 +111,7 @@ if(items_taken >= voracity) break if(items_taken) //Lazy coder sound design moment. + Recycled_Items = Recycled_Items + items_taken playsound(src, 'sound/items/poster_being_created.ogg', 50, 1) playsound(src, 'sound/items/electronic_assembly_emptying.ogg', 50, 1) playsound(src, 'sound/effects/metalscrape2.ogg', 50, 1) @@ -140,3 +141,5 @@ /obj/machinery/button/garbosystem/attack_hand(mob/living/user as mob) if(grinder) return grinder.attack_hand(user) + +var/Recycled_Items = 0 diff --git a/modular_chomp/icons/mob/human_races/sprite_accessories/wings.dmi b/modular_chomp/icons/mob/human_races/sprite_accessories/wings.dmi index 07d8fbc475..47c7582558 100644 Binary files a/modular_chomp/icons/mob/human_races/sprite_accessories/wings.dmi and b/modular_chomp/icons/mob/human_races/sprite_accessories/wings.dmi differ diff --git a/icons/mob/vore/wings64_ch.dmi b/modular_chomp/icons/mob/human_races/sprite_accessories/wings64.dmi similarity index 100% rename from icons/mob/vore/wings64_ch.dmi rename to modular_chomp/icons/mob/human_races/sprite_accessories/wings64.dmi diff --git a/modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi b/modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi new file mode 100644 index 0000000000..7444c3d2db Binary files /dev/null and b/modular_chomp/icons/mob/vore_fullscreens/bubbles.dmi differ diff --git a/modular_chomp/maps/submaps/shelters/GrandLibrary-31x24.dmm b/modular_chomp/maps/submaps/shelters/GrandLibrary-31x24.dmm new file mode 100644 index 0000000000..3840c79d67 --- /dev/null +++ b/modular_chomp/maps/submaps/shelters/GrandLibrary-31x24.dmm @@ -0,0 +1,2312 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"ae" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"aj" = ( +/obj/structure/curtain/black, +/obj/machinery/light_switch{ + pixel_x = 21; + pixel_y = 11 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"as" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"av" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 28 + }, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"az" = ( +/obj/structure/barricade/cutout/wizard{ + anchored = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"aZ" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"bc" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/mopbucket, +/obj/item/weapon/mop, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"be" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"bz" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/fiction, +/obj/item/weapon/book/custom_library/fiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"bG" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/obj/item/weapon/book/custom_library/reference, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cd" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/bookcase/manuals/medical, +/obj/item/weapon/book/custom_library/reference, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ck" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"cG" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"dm" = ( +/obj/structure/prop/statue/pillar/dark, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"es" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/drinks/soymilk, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour{ + pixel_x = -5; + pixel_y = -2 + }, +/obj/item/weapon/reagent_containers/food/condiment/sugar{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/food/condiment/sugar{ + pixel_x = 10; + pixel_y = 2 + }, +/obj/item/weapon/reagent_containers/food/condiment/sugar{ + pixel_x = 10; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"fi" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"gt" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"gO" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"gX" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"hf" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/paper_bin{ + pixel_y = 3 + }, +/obj/item/weapon/pen{ + pixel_y = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"hg" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"hE" = ( +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"hR" = ( +/obj/structure/flora/pottedplant/minitree, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"iG" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"ja" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"jd" = ( +/obj/structure/simple_door/wood, +/obj/structure/barricade/planks, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"jk" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"jA" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"jB" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"kw" = ( +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/template_noop) +"kZ" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra{ + pixel_y = 5 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"lo" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"lI" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"nq" = ( +/obj/item/device/gps/computer, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"nv" = ( +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"nQ" = ( +/obj/structure/table/standard, +/obj/random/soap, +/obj/random/soap, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"nV" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"on" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oD" = ( +/obj/machinery/power/apc/alarms_hidden{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oF" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/obj/structure/bookcase/manuals/engineering, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oJ" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"oX" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"pn" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/hand_labeler{ + pixel_x = -7; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + pixel_y = 6; + pixel_x = 7 + }, +/obj/item/weapon/reagent_containers/glass/rag, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"pT" = ( +/obj/structure/bed/chair/sofa/right, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"pZ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"qd" = ( +/turf/simulated/wall/wood, +/area/survivalpod/superpose/GrandLibrary) +"qX" = ( +/obj/item/weapon/reagent_containers/food/drinks/shaker{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/food/drinks/teapot{ + pixel_x = -5; + pixel_y = 1 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"rj" = ( +/obj/structure/table/woodentable, +/obj/machinery/recharger, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"rs" = ( +/obj/structure/table/woodentable, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"rw" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"rA" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"rG" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/fiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"sa" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"sc" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"sm" = ( +/obj/structure/bookcase/manuals/engineering, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/fiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"st" = ( +/obj/structure/bookcase, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/obj/item/weapon/book/custom_library/religious, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"sE" = ( +/obj/structure/atmospheric_retention_field/underdoors, +/obj/structure/simple_door/wood, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"sY" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"tg" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"tN" = ( +/mob/living/simple_mob/mechanical/cyber_horror/cat_cyber_horror{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ur" = ( +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"uY" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"vi" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"vL" = ( +/obj/structure/curtain/black, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"vQ" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/obj/machinery/newscaster{ + pixel_y = 29 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"wg" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"wr" = ( +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "glcafe" + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"wH" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"wM" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"xd" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/structure/curtain/open, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"xh" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"xi" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/item/weapon/stool/baystool/padded{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"xs" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"xx" = ( +/obj/structure/bookcase/manuals/research_and_development, +/obj/item/weapon/book/custom_library/reference, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"xC" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"xJ" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"xY" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"yc" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = -6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"yz" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"yH" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/paper_bin{ + pixel_y = 5 + }, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"yJ" = ( +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/item/weapon/storage/box/glasses/coffeecup, +/obj/structure/table/rack/shelf, +/obj/item/weapon/storage/box/glass_extras/straws, +/obj/item/weapon/storage/box/glass_extras/straws, +/obj/item/weapon/storage/box/buns{ + pixel_y = 12 + }, +/obj/item/weapon/storage/box/buns{ + pixel_y = 12 + }, +/obj/item/weapon/storage/box/buns{ + pixel_y = 12 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"yX" = ( +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"zG" = ( +/obj/structure/flora/pottedplant/large, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"zR" = ( +/obj/structure/bed/chair/comfy/red, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"AG" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"AU" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Bh" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Bm" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"BG" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"BJ" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Cx" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/survivalpod/superpose/GrandLibrary) +"CE" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"CM" = ( +/obj/structure/bed/chair/sofa{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"CZ" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin{ + pixel_y = 3 + }, +/obj/item/weapon/pen{ + pixel_y = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Dq" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"DH" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"DL" = ( +/obj/structure/table/fancyblack, +/obj/machinery/photocopier/faxmachine{ + department = "Grand_Library"; + pixel_y = 6 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"DR" = ( +/obj/structure/toilet, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"Fb" = ( +/obj/structure/sink/countertop{ + pixel_y = 7 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"FE" = ( +/obj/machinery/vending/event/costume, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"FF" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"FH" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"FU" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/obj/item/weapon/melee/umbrella/random, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"FW" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Gg" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/template_noop) +"Gz" = ( +/obj/structure/bed/chair/sofa/corner, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"GC" = ( +/obj/item/weapon/gun/projectile/revolver/nagant{ + pixel_x = 10; + pixel_y = 7 + }, +/obj/effect/decal/remains/human, +/obj/item/ammo_magazine/s357{ + pixel_x = -13; + pixel_y = 9 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"GG" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"GM" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/nonfiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"GX" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Ha" = ( +/obj/machinery/chemical_dispenser/bar_coffee/full{ + pixel_y = 7 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"Hp" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"HO" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/head/wizard/marisa/fake, +/obj/item/clothing/head/wizard/fake/realistic, +/obj/item/clothing/accessory/poncho/roles/cloak/mining, +/obj/item/clothing/accessory/poncho/roles/cloak/research, +/obj/item/clothing/gloves/combat/knight_costume, +/obj/item/clothing/gloves/combat/knight_costume/brown, +/obj/item/clothing/shoes/knight_costume, +/obj/item/clothing/shoes/knight_costume/black, +/obj/item/clothing/suit/storage/hooded/knight_costume/galahad, +/obj/item/clothing/suit/storage/hooded/knight_costume/lancelot, +/obj/item/clothing/suit/storage/hooded/knight_costume/robin, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Ip" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Iw" = ( +/obj/item/ammo_magazine/s357{ + pixel_y = -9 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"IH" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/obj/item/device/starcaster_news, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"IK" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"IS" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"IU" = ( +/obj/structure/simple_door/wood, +/obj/structure/curtain/black, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Je" = ( +/obj/structure/table/woodentable, +/obj/item/device/starcaster_news, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Jv" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"JQ" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"JW" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"Ko" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"KE" = ( +/obj/structure/table/fancyblack, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = 3 + }, +/turf/simulated/floor/carpet/blue2, +/area/survivalpod/superpose/GrandLibrary) +"LG" = ( +/obj/item/weapon/tool/wrench{ + pixel_x = 10; + pixel_y = 4 + }, +/obj/item/clothing/accessory/collar/bell{ + desc = "A bell collar, on it reads. My beloved cat Mitzy" + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"LS" = ( +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -25 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Mm" = ( +/obj/machinery/newscaster{ + pixel_x = 30 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Mp" = ( +/obj/machinery/reagentgrinder{ + pixel_y = 8 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/structure/table/marble, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"Mr" = ( +/obj/structure/bed/chair/wood, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Mu" = ( +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/outdoors/grass/sif/planetuse, +/area/template_noop) +"Mx" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"My" = ( +/obj/machinery/door/blast/shutters{ + dir = 2 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"MQ" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Na" = ( +/obj/item/weapon/storage/box/donut{ + pixel_x = 3; + pixel_y = -4 + }, +/obj/structure/table/marble, +/obj/item/weapon/storage/box/donut{ + pixel_x = 3; + pixel_y = 11 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"Nb" = ( +/obj/machinery/bookbinder, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Nl" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"Ny" = ( +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"NG" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"NN" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Ob" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Ok" = ( +/obj/structure/table/woodentable, +/obj/machinery/vending/wallmed1{ + dir = 1; + name = "Emergency NanoMed"; + pixel_y = -25 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Oq" = ( +/obj/structure/bookcase, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/obj/item/weapon/book/custom_library/religious, +/obj/item/weapon/book/custom_library/nonfiction, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"OL" = ( +/obj/structure/flora/pottedplant/large, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"OO" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/tiled/kafel_full/purple, +/area/survivalpod/superpose/GrandLibrary) +"PH" = ( +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Qa" = ( +/obj/structure/bookcase/bookcart, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Qr" = ( +/obj/structure/fans, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"QL" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee{ + dir = 8 + }, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = -32 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Rq" = ( +/obj/structure/table/woodentable, +/obj/item/ammo_magazine/s357, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"RE" = ( +/obj/machinery/librarycomp, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"RG" = ( +/obj/structure/bookcase/manuals/medical, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"RM" = ( +/obj/structure/bookcase/manuals/engineering, +/obj/item/weapon/book/custom_library/religious, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Sd" = ( +/obj/machinery/libraryscanner, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Sz" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"SF" = ( +/obj/structure/bed/chair/sofa/left{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"SP" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/stock_parts/spring{ + pixel_x = 5; + pixel_y = 8 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"SU" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Ts" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/tool/screwdriver{ + pixel_x = -8; + pixel_y = 4 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Tv" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/obj/machinery/recharger, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"TR" = ( +/obj/structure/bookcase/manuals/research_and_development, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Uk" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = -32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Up" = ( +/obj/structure/atmospheric_retention_field/underdoors, +/obj/structure/simple_door/wood, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"VM" = ( +/obj/structure/bookcase/manuals/engineering, +/obj/item/weapon/book/custom_library/reference, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Wg" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/book/custom_library/reference/fistfulofd6splayersguide, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Wi" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/bed/chair/sofa, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"WN" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = 7 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Xd" = ( +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Xg" = ( +/obj/structure/bookcase, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Xi" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/obj/structure/curtain/open, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"Xt" = ( +/obj/structure/flora/pottedplant/minitree, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_y = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"XJ" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin{ + pixel_y = 5 + }, +/obj/item/weapon/pen{ + pixel_x = 1; + pixel_y = 4 + }, +/obj/item/weapon/pen/red{ + pixel_x = 4; + pixel_y = 8 + }, +/obj/item/weapon/pen/blue{ + pixel_x = -1 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"XN" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/manual, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"XS" = ( +/obj/machinery/button/remote/blast_door{ + dir = 1; + id = "glcafe"; + pixel_y = -25 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/survivalpod/superpose/GrandLibrary) +"Yu" = ( +/obj/machinery/newscaster{ + layer = 3.3; + pixel_y = -27 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Yw" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"YE" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + pixel_y = -6 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"YM" = ( +/obj/structure/grille, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor, +/area/survivalpod/superpose/GrandLibrary) +"Zc" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/obj/item/weapon/storage/briefcase/bookbag, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Zn" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/stock_parts/gear{ + pixel_x = -8; + pixel_y = 3 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"Zp" = ( +/obj/effect/floor_decal/spline/fancy/wood/corner{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"ZA" = ( +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/random, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu9, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu10, +/obj/item/weapon/storage/mre/menu11, +/obj/item/weapon/storage/mre/menu11, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/device/fbp_backup_cell, +/obj/item/weapon/storage/pill_bottle/antitox, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/healthanalyzer, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/item/weapon/storage/firstaid/regular, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/extinguisher/mini, +/obj/item/weapon/storage/box/survival/space, +/obj/item/weapon/storage/box/survival/space, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/radio, +/obj/item/device/starcaster_news, +/obj/item/device/starcaster_news, +/obj/item/device/threadneedle, +/obj/item/device/flashlight, +/obj/item/device/flashlight, +/obj/item/weapon/storage/toolbox/emergency, +/obj/item/weapon/storage/pill_bottle/spaceacillin, +/obj/random/soap, +/obj/item/weapon/material/knife/machete/hatchet, +/obj/item/weapon/storage/box/flare, +/obj/structure/closet/crate/wooden, +/obj/item/weapon/gun/energy/locked/phasegun/pistol/unlocked, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ZI" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"ZM" = ( +/obj/effect/floor_decal/spline/fancy/wood/cee, +/turf/simulated/floor/carpet/purcarpet, +/area/survivalpod/superpose/GrandLibrary) +"ZR" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle/candelabra/everburn{ + anchored = 1; + pixel_x = 32 + }, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ZT" = ( +/obj/structure/bookcase, +/obj/item/weapon/book/custom_library/reference, +/obj/item/weapon/book/custom_library/fiction, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) +"ZY" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/toy/figure/abe, +/obj/item/toy/figure/acolyte, +/obj/item/toy/figure/agent, +/obj/item/toy/figure/assistant, +/obj/item/toy/figure/atmos, +/obj/item/toy/figure/bandit, +/obj/item/toy/figure/barking_dog, +/obj/item/toy/figure/bartender, +/obj/item/toy/figure/borg, +/obj/item/toy/figure/bounty_hunter, +/obj/item/toy/figure/captain, +/obj/item/toy/figure/cargotech, +/obj/item/toy/figure/carrion, +/obj/item/toy/figure/ce, +/obj/item/toy/figure/chaplain, +/obj/item/toy/figure/chef, +/obj/item/toy/figure/chemist, +/obj/item/toy/figure/clown, +/obj/item/toy/figure/cmo, +/obj/item/toy/figure/corgi, +/obj/item/toy/figure/detective, +/obj/item/toy/figure/dsquad, +/obj/item/toy/figure/engineer, +/obj/item/toy/figure/error, +/obj/item/toy/figure/ert, +/obj/item/toy/figure/excelsior, +/obj/item/toy/figure/gardener, +/obj/item/toy/figure/geneticist, +/obj/item/toy/figure/hop, +/obj/item/toy/figure/hos, +/obj/item/toy/figure/janitor, +/obj/item/toy/figure/leadbandit, +/obj/item/toy/figure/librarian, +/obj/item/toy/figure/md, +/obj/item/toy/figure/metacat, +/obj/item/toy/figure/metro_patrolman, +/obj/item/toy/figure/mime, +/obj/item/toy/figure/miner, +/obj/item/toy/figure/ninja, +/obj/item/toy/figure/paramedic, +/obj/item/toy/figure/prisoner, +/obj/item/toy/figure/profwho, +/obj/item/toy/figure/psychologist, +/obj/item/toy/figure/qm, +/obj/item/toy/figure/ranger, +/obj/item/toy/figure/rd, +/obj/item/toy/figure/red_soldier, +/obj/item/toy/figure/roach, +/obj/item/toy/figure/roboticist, +/obj/item/toy/figure/rooster, +/obj/item/toy/figure/scientist, +/obj/item/toy/figure/secofficer, +/obj/item/toy/figure/serbian, +/obj/item/toy/figure/shitcurity, +/obj/item/toy/figure/syndie, +/obj/item/toy/figure/vagabond, +/obj/item/toy/figure/virologist, +/obj/item/toy/figure/warden, +/obj/item/toy/figure/wizard, +/obj/item/toy/figure/station, +/turf/simulated/floor/wood, +/area/survivalpod/superpose/GrandLibrary) + +(1,1,1) = {" +qd +qd +qd +Mu +Gg +Mu +qd +qd +qd +Gg +kw +Mu +kw +qd +qd +Mu +Gg +kw +Mu +Gg +kw +qd +qd +qd +"} +(2,1,1) = {" +qd +qd +qd +qd +vi +qd +qd +qd +qd +qd +Ny +iG +qd +qd +qd +qd +xC +pZ +YM +qd +qd +qd +qd +qd +"} +(3,1,1) = {" +qd +qd +on +xh +Bm +xY +bG +QL +IS +PH +Qa +Qa +PH +BG +NN +Je +IK +PH +aZ +PH +Mr +jB +qd +qd +"} +(4,1,1) = {" +ae +lo +Cx +ZI +lI +xY +XN +GG +hf +PH +Qa +Qa +PH +Bh +NN +jB +IK +PH +jB +PH +PH +oJ +qd +kw +"} +(5,1,1) = {" +gX +rs +jA +ZI +lI +bG +XN +GG +DL +PH +Qa +Qa +PH +rA +PH +PH +PH +PH +fi +PH +PH +PH +vi +Gg +"} +(6,1,1) = {" +hg +sc +wM +ZI +JQ +Yw +Yw +FH +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Yw +Bm +aZ +qd +Gg +"} +(7,1,1) = {" +qd +qd +ck +ZI +Dq +MQ +MQ +AU +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +MQ +Sz +lI +Je +qd +qd +"} +(8,1,1) = {" +kw +qd +be +ZI +lI +gO +rG +GG +GX +uY +uY +st +PH +PH +dm +Mm +PH +PH +dm +ZI +lI +oJ +qd +qd +"} +(9,1,1) = {" +Gg +qd +cd +ZI +lI +gO +bz +GG +Mx +qd +qd +qd +qd +qd +qd +qd +wg +Zc +PH +ZI +lI +PH +qd +qd +"} +(10,1,1) = {" +qd +qd +tg +ZI +lI +BJ +xJ +GG +Mx +qd +Qr +ZA +PH +SU +PH +PH +PH +jB +PH +ZI +JQ +FW +ZM +sE +"} +(11,1,1) = {" +qd +qd +ck +ZI +lI +YE +jB +GG +Oq +qd +nq +PH +Yu +qd +Sd +PH +NN +jB +PH +ZI +hE +lI +FU +qd +"} +(12,1,1) = {" +qd +qd +RG +ZI +lI +xx +tg +GG +gO +qd +RE +PH +PH +qd +Nb +oD +PH +CZ +PH +ZI +Dq +NG +ZM +Up +"} +(13,1,1) = {" +kw +qd +Xg +ZI +lI +ck +TR +GG +ZT +qd +qd +qd +SU +qd +qd +qd +wg +jB +PH +ZI +lI +jB +qd +qd +"} +(14,1,1) = {" +Mu +qd +RG +ZI +lI +xx +cG +GG +ja +Ob +jk +cG +DH +PH +dm +PH +PH +PH +dm +ZI +lI +Ok +qd +qd +"} +(15,1,1) = {" +qd +qd +ck +ZI +JQ +Yw +Yw +FH +Yw +Yw +Yw +Yw +Ko +Yw +Yw +Yw +Yw +Yw +Yw +Zp +lI +rj +qd +qd +"} +(16,1,1) = {" +ae +lo +Cx +ZI +Dq +MQ +MQ +AU +MQ +MQ +MQ +Sz +hE +Dq +MQ +MQ +Sz +hE +hE +hE +lI +Tv +qd +Mu +"} +(17,1,1) = {" +gX +rs +jA +ZI +lI +yz +RM +GG +VM +qd +dm +ZI +hE +lI +dm +qd +pT +hE +hE +hE +lI +PH +vi +kw +"} +(18,1,1) = {" +hg +sc +wM +ZI +lI +sm +GM +GG +tg +qd +Xt +ZI +hE +lI +hR +qd +Wi +yc +Hp +hE +lI +hR +qd +kw +"} +(19,1,1) = {" +qd +qd +ZT +AG +CE +GX +oF +Ip +VM +qd +dm +AG +hE +as +dm +qd +Gz +CM +CM +SF +WN +qd +qd +qd +"} +(20,1,1) = {" +qd +qd +qd +jd +qd +qd +qd +qd +qd +qd +qd +qd +xd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +"} +(21,1,1) = {" +qd +qd +Iw +PH +qd +yJ +yX +yX +My +yX +wH +xi +hE +Bm +aZ +qd +HO +vL +PH +PH +PH +PH +qd +qd +"} +(22,1,1) = {" +qd +qd +kZ +GC +qd +Ha +yX +Fb +My +yX +wH +xi +hE +lI +Uk +qd +ZY +vL +KE +rw +JW +sa +qd +Gg +"} +(23,1,1) = {" +qd +qd +Rq +LG +qd +Na +yX +qX +My +yX +wH +xi +hE +lI +fi +qd +FE +vL +zR +yH +JW +PH +qd +Mu +"} +(24,1,1) = {" +qd +qd +Ts +tN +qd +Mp +yX +yX +wr +yX +wH +xi +hE +lI +LS +qd +nv +vL +nV +xs +JW +sa +qd +qd +"} +(25,1,1) = {" +qd +qd +Zn +SP +qd +es +yX +XS +qd +pn +wH +xi +hE +lI +aZ +qd +oX +aj +PH +PH +PH +PH +qd +qd +"} +(26,1,1) = {" +kw +qd +qd +qd +qd +qd +qd +SU +qd +vQ +Yw +Zp +hE +lI +Uk +qd +qd +qd +qd +qd +IU +qd +qd +qd +"} +(27,1,1) = {" +Mu +qd +DR +gt +ur +nQ +qd +PH +qd +Jv +hE +hE +hE +lI +fi +qd +Wg +XJ +jB +az +DH +az +qd +Gg +"} +(28,1,1) = {" +Gg +qd +qd +qd +OO +ur +SU +PH +SU +AG +MQ +MQ +MQ +NG +sY +Xi +sY +sY +sY +sY +FF +sa +qd +kw +"} +(29,1,1) = {" +qd +qd +Nl +gt +ur +av +qd +bc +qd +NN +ZR +IK +NN +IH +IK +qd +OL +Xd +OL +PH +zG +PH +qd +qd +"} +(30,1,1) = {" +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +qd +"} +(31,1,1) = {" +qd +qd +qd +Gg +kw +Gg +qd +qd +qd +kw +Mu +kw +kw +Gg +Mu +qd +qd +qd +kw +Gg +Gg +qd +qd +qd +"} diff --git a/modular_chomp/sound/effects/powerloader_step.ogg b/modular_chomp/sound/effects/powerloader_step.ogg new file mode 100644 index 0000000000..af427df865 Binary files /dev/null and b/modular_chomp/sound/effects/powerloader_step.ogg differ diff --git a/modular_chomp/sound/effects/powerloader_step2.ogg b/modular_chomp/sound/effects/powerloader_step2.ogg new file mode 100644 index 0000000000..60aaa6bd34 Binary files /dev/null and b/modular_chomp/sound/effects/powerloader_step2.ogg differ diff --git a/sound/voice/FerretDook.ogg b/sound/voice/FerretDook.ogg new file mode 100644 index 0000000000..629bed2f1a Binary files /dev/null and b/sound/voice/FerretDook.ogg differ diff --git a/vorestation.dme b/vorestation.dme index 1bf374deae..ca5623d27a 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -3473,7 +3473,6 @@ #include "code\modules\mob\new_player\sprite_accessories_taur_vr.dm" #include "code\modules\mob\new_player\sprite_accessories_vr.dm" #include "code\modules\mob\new_player\sprite_accessories_wing.dm" -#include "code\modules\mob\new_player\sprite_accessories_wing_ch.dm" #include "code\modules\mob\new_player\sprite_accessories_wing_large_vr.dm" #include "code\modules\mob\new_player\sprite_accessories_wing_vr.dm" #include "code\modules\mob\new_player\sprite_accessories_yw.dm" @@ -4545,6 +4544,7 @@ #include "modular_chomp\code\game\objects\items.dm" #include "modular_chomp\code\game\objects\items\petrifier.dm" #include "modular_chomp\code\game\objects\items\clockwork\ratvarian_spear.dm" +#include "modular_chomp\code\game\objects\items\devices\flipper.dm" #include "modular_chomp\code\game\objects\items\weapons\capture_crystal.dm" #include "modular_chomp\code\game\objects\structures\desert_planet_structures.dm" #include "modular_chomp\code\game\objects\structures\gargoyle.dm" @@ -4560,6 +4560,8 @@ #include "modular_chomp\code\modules\client\preference_setup\general\03_body.dm" #include "modular_chomp\code\modules\client\preference_setup\global\setting_datums.dm" #include "modular_chomp\code\modules\client\preference_setup\loadout\loadout_general.dm" +#include "modular_chomp\code\modules\client\preference_setup\loadout\loadout_shoes.dm" +#include "modular_chomp\code\modules\client\preference_setup\loadout\loadout_suit.dm" #include "modular_chomp\code\modules\client\preference_setup\loadout\loadout_xeno.dm" #include "modular_chomp\code\modules\clothing\clothing.dm" #include "modular_chomp\code\modules\clothing\clothing_icons.dm"