diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index effeb274ab..74a1fbd785 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -123,12 +123,15 @@ var/datum/sprite_accessory/S = instance if(!S.ckeys_allowed) snowflake_mam_snouts_list[S.name] = mspath + var/color1 = random_short_color() + var/color2 = random_short_color() + var/color3 = random_short_color() //CIT CHANGE - changes this entire return to support cit's snowflake parts return(list( - "mcolor" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), - "mcolor2" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), - "mcolor3" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"), + "mcolor" = color1, + "mcolor2" = color2, + "mcolor3" = color3, "tail_lizard" = pick(GLOB.tails_list_lizard), "tail_human" = "None", "wings" = "None", diff --git a/code/_onclick/hud/action_button.dm b/code/_onclick/hud/action_button.dm index 4ae61169b7..73a207a457 100644 --- a/code/_onclick/hud/action_button.dm +++ b/code/_onclick/hud/action_button.dm @@ -162,6 +162,8 @@ return var/button_number = 0 + var/list/cview = getviewsize(client.view) + var/supportedcolumns = cview[1]-2 if(hud_used.action_buttons_hidden) for(var/datum/action/A in actions) @@ -177,7 +179,7 @@ if(B.moved) B.screen_loc = B.moved else - B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number) + B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number, supportedcolumns) if(reload_screen) client.screen += B @@ -186,30 +188,26 @@ return if(!hud_used.hide_actions_toggle.moved) - hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1) + hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1, supportedcolumns) else hud_used.hide_actions_toggle.screen_loc = hud_used.hide_actions_toggle.moved if(reload_screen) client.screen += hud_used.hide_actions_toggle - - -#define AB_MAX_COLUMNS 10 - -/datum/hud/proc/ButtonNumberToScreenCoords(number) // TODO : Make this zero-indexed for readabilty - var/row = round((number - 1)/AB_MAX_COLUMNS) - var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1 +/datum/hud/proc/ButtonNumberToScreenCoords(number, supportedcolumns) // TODO : Make this zero-indexed for readabilty + var/row = round((number - 1)/supportedcolumns) + var/col = ((number - 1)%(supportedcolumns)) + 1 var/coord_col = "+[col-1]" - var/coord_col_offset = 4 + 2 * col + var/coord_col_offset = 2 + 2 * col var/coord_row = "[row ? -row : "+0"]" return "WEST[coord_col]:[coord_col_offset],NORTH[coord_row]:-6" -/datum/hud/proc/SetButtonCoords(obj/screen/button,number) - var/row = round((number-1)/AB_MAX_COLUMNS) - var/col = ((number - 1)%(AB_MAX_COLUMNS)) + 1 +/datum/hud/proc/SetButtonCoords(obj/screen/button,number, supportedcolumns) + var/row = round((number-1)/supportedcolumns) + var/col = ((number - 1)%(supportedcolumns)) + 1 var/x_offset = 32*(col-1) + 4 + 2*col var/y_offset = -32*(row+1) + 26 diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm index 8a17ad07d1..221d04dad5 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -32,8 +32,11 @@ SUBSYSTEM_DEF(input) "default" = list( "Tab" = "\".winset \\\"input.focus=true?map.focus=true input.background-color=[COLOR_INPUT_DISABLED]:input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"", "O" = "ooc", + "Ctrl+O" = "looc", "T" = "say", + "Ctrl+T" = "whisper", "M" = "me", + "Ctrl+M" = "subtle", "Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs "Any" = "\"KeyDown \[\[*\]\]\"", "Any+UP" = "\"KeyUp \[\[*\]\]\"", diff --git a/code/datums/traits/good.dm b/code/datums/traits/good.dm index cfd8f95d7b..513115b194 100644 --- a/code/datums/traits/good.dm +++ b/code/datums/traits/good.dm @@ -166,7 +166,6 @@ /datum/quirk/trandening/on_spawn() var/mob/living/carbon/human/H = quirk_holder - var/obj/item/autosurgeon/gloweyes = new(get_turf(H)) - H.put_in_hands(gloweyes) + var/obj/item/autosurgeon/gloweyes/gloweyes = new(get_turf(H)) H.equip_to_slot(gloweyes, SLOT_IN_BACKPACK) H.regenerate_icons() diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 629de2f697..4d2e113749 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -2,14 +2,14 @@ desc = "Autonomous Power Loader Unit. This newer model is refitted with powerful armour against the dangers of planetary mining." name = "\improper APLU \"Ripley\"" icon_state = "ripley" - step_in = 4 //Move speed, lower is faster. - var/fast_pressure_step_in = 2 //step_in while in normal pressure conditions - var/slow_pressure_step_in = 4 //step_in while in better pressure conditions + step_in = 3 //Move speed, lower is faster. + var/fast_pressure_step_in = 2 + var/slow_pressure_step_in = 3 max_temperature = 20000 max_integrity = 200 - lights_power = 7 + lights_power = 8 deflect_chance = 15 - armor = list("melee" = 40, "bullet" = 20, "laser" = 10, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list("melee" = 30, "bullet" = 15, "laser" = 10, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) max_equip = 6 wreckage = /obj/structure/mecha_wreckage/ripley var/list/cargo = new @@ -64,6 +64,9 @@ desc = "Autonomous Power Loader Unit. This model is refitted with additional thermal protection." name = "\improper APLU \"Firefighter\"" icon_state = "firefighter" + step_in = 4 + fast_pressure_step_in = 2 + slow_pressure_step_in = 4 max_temperature = 65000 max_integrity = 250 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF @@ -191,4 +194,4 @@ cargo -= O else if(user.loc == src) //so we don't get the message if we resisted multiple times and succeeded. - to_chat(user, "You fail to push [O] out of [src]!") + to_chat(user, "You fail to push [O] out of [src]!") \ No newline at end of file diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 3dab6a66af..9ff1b5cf01 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -379,6 +379,26 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) /obj/item/proc/on_found(mob/finder) return +/obj/item/MouseDrop(atom/over, src_location, over_location, src_control, over_control, params) //Copypaste of /atom/MouseDrop() since this requires code in a very specific spot + if(!usr || !over) + return + if(SEND_SIGNAL(src, COMSIG_MOUSEDROP_ONTO, over, usr) & COMPONENT_NO_MOUSEDROP) //Whatever is receiving will verify themselves for adjacency. + return + if(over == src) + return usr.client.Click(src, src_location, src_control, params) + var/list/directaccess = usr.DirectAccess() + if((usr.CanReach(src) || (src in directaccess)) && (usr.CanReach(over) || (over in directaccess))) + if(!usr.get_active_held_item()) + usr.UnarmedAttack(src, TRUE) + if(usr.get_active_held_item() == src) + melee_attack_chain(usr, over) + return + if(!Adjacent(usr) || !over.Adjacent(usr)) + return // should stop you from dragging through windows + + over.MouseDrop_T(src,usr) + return + // called after an item is placed in an equipment slot // user is mob that equipped it // slot uses the slot_X defines found in setup.dm diff --git a/code/game/objects/items/defib.dm b/code/game/objects/items/defib.dm index ba0aa36634..034363be7d 100644 --- a/code/game/objects/items/defib.dm +++ b/code/game/objects/items/defib.dm @@ -411,6 +411,8 @@ to_chat(user, "[src] are recharging!") return + user.stop_pulling() //User has hands full, and we don't care about anyone else pulling on it, their problem. CLEAR!! + if(user.a_intent == INTENT_DISARM) do_disarm(M, user) return diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index bd2bede87c..e4debeff49 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -1,5 +1,5 @@ /* - * These absorb the functionality of the plant bag, ore satchel, etc. + * These absorb the functionality of the plant bag, ore satchel, etc * They use the use_to_pickup, quick_gather, and quick_empty functions * that were already defined in weapon/storage, but which had been * re-implemented in other classes. @@ -162,6 +162,26 @@ /obj/item/storage/bag/ore/cyborg name = "cyborg mining satchel" +/obj/item/storage/bag/ore/cyborg/ComponentInitialize() + . = ..() + GET_COMPONENT(STR, /datum/component/storage/concrete/stack) + STR.allow_quick_empty = TRUE + STR.can_hold = typecacheof(list(/obj/item/stack/ore)) + STR.max_w_class = WEIGHT_CLASS_HUGE + STR.max_combined_stack_amount = 150 + +/obj/item/storage/bag/ore/large + name = "large mining satchel" + desc = "This bag can hold three times the ore in many small pockets. Shockingly foldable and compact for its volume." + +/obj/item/storage/bag/ore/large/ComponentInitialize() + . = ..() + GET_COMPONENT(STR, /datum/component/storage/concrete/stack) + STR.allow_quick_empty = TRUE + STR.can_hold = typecacheof(list(/obj/item/stack/ore)) + STR.max_w_class = WEIGHT_CLASS_HUGE + STR.max_combined_stack_amount = 150 + /obj/item/storage/bag/ore/holding //miners, your messiah has arrived name = "mining satchel of holding" desc = "A revolution in convenience, this satchel allows for huge amounts of ore storage. It's been outfitted with anti-malfunction safety measures." diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index c795726421..079feec17a 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -112,12 +112,17 @@ /obj/item/storage/firstaid/radbgone/PopulateContents() if(empty) return + if(prob(50)) + new /obj/item/reagent_containers/pill/mutarad(src) + if(prob(80)) + new /obj/item/reagent_containers/pill/antirad_plus(src) new /obj/item/reagent_containers/syringe/charcoal(src) new /obj/item/storage/pill_bottle/charcoal(src) new /obj/item/reagent_containers/pill/mutadone(src) new /obj/item/reagent_containers/pill/antirad(src) new /obj/item/reagent_containers/food/drinks/bottle/vodka(src) new /obj/item/healthanalyzer(src) + /obj/item/storage/firstaid/o2 name = "oxygen deprivation treatment kit" @@ -291,3 +296,19 @@ /obj/item/storage/pill_bottle/aranesp/PopulateContents() for(var/i in 1 to 5) new /obj/item/reagent_containers/pill/aranesp(src) + +/obj/item/storage/pill_bottle/antirad_plus + name = "anti radiation deluxe pill bottle" + desc = "The label says 'Med-Co branded pills'." + +/obj/item/storage/pill_bottle/antirad_plus/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/reagent_containers/pill/antirad_plus(src) + +/obj/item/storage/pill_bottle/mutarad + name = "radiation treatment deluxe pill bottle" + desc = "The label says 'Med-Co branded pills' and below that 'Contains Mutadone in each pill!`." + +/obj/item/storage/pill_bottle/mutarad/PopulateContents() + for(var/i in 1 to 7) + new /obj/item/reagent_containers/pill/mutarad(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index a062be0964..5a9228e397 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -6,6 +6,7 @@ /obj/structure/closet/secure_closet/quartermaster/PopulateContents() ..() new /obj/item/clothing/neck/cloak/qm(src) + new /obj/item/clothing/head/beret/qm(src) new /obj/item/storage/lockbox/medal/cargo(src) new /obj/item/clothing/under/rank/cargo(src) new /obj/item/clothing/shoes/sneakers/brown(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index dd2e8428b1..0d06276876 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -6,6 +6,7 @@ /obj/structure/closet/secure_closet/engineering_chief/PopulateContents() ..() new /obj/item/clothing/neck/cloak/ce(src) + new /obj/item/clothing/head/beret/ce(src) new /obj/item/clothing/under/rank/chief_engineer(src) new /obj/item/clothing/head/hardhat/white(src) new /obj/item/clothing/head/welding(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index 5ef952b139..9081cddbe4 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -55,6 +55,7 @@ /obj/structure/closet/secure_closet/CMO/PopulateContents() ..() new /obj/item/clothing/neck/cloak/cmo(src) + new /obj/item/clothing/head/beret/cmo(src) new /obj/item/storage/backpack/duffelbag/med(src) new /obj/item/clothing/suit/bio_suit/cmo(src) new /obj/item/clothing/head/bio_hood/cmo(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm index eb10b97bc3..7fe1247eb7 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/scientist.dm @@ -6,6 +6,7 @@ /obj/structure/closet/secure_closet/RD/PopulateContents() ..() new /obj/item/clothing/neck/cloak/rd(src) + new /obj/item/clothing/head/beret/rd(src) new /obj/item/clothing/suit/bio_suit/scientist(src) new /obj/item/clothing/head/bio_hood/scientist(src) new /obj/item/clothing/suit/toggle/labcoat(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 5c45baa194..b4cdff4224 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -19,6 +19,7 @@ new /obj/item/clothing/under/captainparade(src) new /obj/item/clothing/suit/armor/vest/capcarapace/alt(src) new /obj/item/clothing/head/caphat/parade(src) + new /obj/item/clothing/head/caphat/beret(src) new /obj/item/clothing/suit/captunic(src) new /obj/item/clothing/under/rank/captain/femformal(src) //citadel edit new /obj/item/clothing/head/crown/fancy(src) @@ -44,6 +45,7 @@ new /obj/item/clothing/neck/cloak/hop(src) new /obj/item/clothing/under/rank/head_of_personnel(src) new /obj/item/clothing/head/hopcap(src) + new /obj/item/clothing/head/hopcap/beret(src) new /obj/item/cartridge/hop(src) new /obj/item/radio/headset/heads/hop(src) new /obj/item/clothing/shoes/sneakers/brown(src) diff --git a/code/modules/admin/chat_commands.dm b/code/modules/admin/chat_commands.dm index 9adfaada72..a97c0bf116 100644 --- a/code/modules/admin/chat_commands.dm +++ b/code/modules/admin/chat_commands.dm @@ -126,3 +126,18 @@ GLOBAL_LIST(round_end_notifiees) /datum/tgs_chat_command/reload_admins/proc/ReloadAsync() set waitfor = FALSE load_admins() + +/datum/tgs_chat_command/addbunkerbypass + name = "whitelist" + help_text = "whitelist " + admin_only = TRUE + +/datum/tgs_chat_command/addbunkerbypass/Run(datum/tgs_chat_user/sender, params) + if(!CONFIG_GET(flag/sql_enabled)) + return "The Database is not enabled!" + + GLOB.bunker_passthrough |= ckey(params) + + log_admin("[sender.friendly_name] has added [params] to the current round's bunker bypass list.") + message_admins("[sender.friendly_name] has added [params] to the current round's bunker bypass list.") + return "[params] has been added to the current round's bunker bypass list." \ No newline at end of file diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index d76edf2e10..633f4fa850 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -81,6 +81,21 @@ crate_name = "emergency crate" crate_type = /obj/structure/closet/crate/internals +/datum/supply_pack/emergency/radiatione_emergency + name = "Emergenc Radiation Protection Crate" + desc = "Survive the Nuclear Apocalypse and Supermatter Engine alike with two sets of Radiation suits. Each set contains a helmet, suit, and Geiger counter. We'll even throw in a few pill bottles that are able to handles radiation and the affects of the poisoning." + cost = 2500 + contains = list(/obj/item/clothing/head/radiation, + /obj/item/clothing/head/radiation, + /obj/item/clothing/suit/radiation, + /obj/item/clothing/suit/radiation, + /obj/item/geiger_counter, + /obj/item/geiger_counter, + /obj/item/storage/pill_bottle/mutarad, + /obj/item/storage/firstaid/radbgone) + crate_name = "radiation protection crate" + crate_type = /obj/structure/closet/crate/radiation + /datum/supply_pack/emergency/rcds name = "Emergency RCDs" desc = "Bombs going off on station? SME blown and now you need to fix the hole it left behind? Well this crate has a pare of Rcds to be able to easily fix up any problem you may have!" @@ -1357,6 +1372,19 @@ /obj/item/storage/firstaid/o2) crate_name = "oxygen deprivation kit crate" +/datum/supply_pack/medical/advrad + name = "Radiation Treatment Crate Deluxe" + desc = "A crate for when radiation is out of hand... Contains two rad-b-gone kits, one bottle of anti radiation deluxe pill bottle, as well as a radiation treatment deluxe pill bottle!" + cost = 3500 + contains = list(/obj/item/storage/pill_bottle/antirad_plus, + /obj/item/storage/pill_bottle/mutarad, + /obj/item/storage/firstaid/radbgone, + /obj/item/storage/firstaid/radbgone, + /obj/item/geiger_counter, + /obj/item/geiger_counter) + crate_name = "radiation protection crate" + crate_type = /obj/structure/closet/crate/radiation + /datum/supply_pack/medical/surgery name = "Surgical Supplies Crate" desc = "Do you want to perform surgery, but don't have one of those fancy shmancy degrees? Just get started with this crate containing a medical duffelbag, Sterilizine spray and collapsible roller bed." diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index d6bfc49628..942fc3c620 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1455,10 +1455,6 @@ GLOBAL_LIST_EMPTY(preferences_datums) features["mam_body_markings"] = "Plain" if("tail_lizard" in pref_species.default_features) features["tail_lizard"] = "Smooth" - if("mam_tail" in pref_species.default_features) - features["mam_tail"] = "None" - if("mam_ears" in pref_species.default_features) - features["mam_ears"] = "None" if(pref_species.id == "felinid") features["mam_tail"] = "Cat" features["mam_ears"] = "Cat" diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index 9e19ab65a2..b6210d94b8 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -260,12 +260,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["feature_lizard_body_markings"] >> features["body_markings"] S["feature_lizard_legs"] >> features["legs"] S["feature_moth_wings"] >> features["moth_wings"] - if(!CONFIG_GET(flag/join_with_mutant_humans)) - features["tail_human"] = "none" - features["ears"] = "none" - else - S["feature_human_tail"] >> features["tail_human"] - S["feature_human_ears"] >> features["ears"] + S["feature_human_tail"] >> features["tail_human"] + S["feature_human_ears"] >> features["ears"] //Custom names for(var/custom_name_id in GLOB.preferences_custom_names) @@ -388,15 +384,15 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car uplink_spawn_loc = sanitize_inlist(uplink_spawn_loc, GLOB.uplink_spawn_loc_list, initial(uplink_spawn_loc)) features["mcolor"] = sanitize_hexcolor(features["mcolor"], 3, 0) features["tail_lizard"] = sanitize_inlist(features["tail_lizard"], GLOB.tails_list_lizard) - features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human, "None") + features["tail_human"] = sanitize_inlist(features["tail_human"], GLOB.tails_list_human) features["snout"] = sanitize_inlist(features["snout"], GLOB.snouts_list) features["horns"] = sanitize_inlist(features["horns"], GLOB.horns_list) - features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list, "None") + features["ears"] = sanitize_inlist(features["ears"], GLOB.ears_list) features["frills"] = sanitize_inlist(features["frills"], GLOB.frills_list) features["spines"] = sanitize_inlist(features["spines"], GLOB.spines_list) features["body_markings"] = sanitize_inlist(features["body_markings"], GLOB.body_markings_list) - features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list, "Normal Legs") - features["moth_wings"] = sanitize_inlist(features["moth_wings"], GLOB.moth_wings_list, "Plain") + features["feature_lizard_legs"] = sanitize_inlist(features["legs"], GLOB.legs_list) + features["moth_wings"] = sanitize_inlist(features["moth_wings"], GLOB.moth_wings_list) joblessrole = sanitize_integer(joblessrole, 1, 3, initial(joblessrole)) job_civilian_high = sanitize_integer(job_civilian_high, 0, 65535, initial(job_civilian_high)) diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 8b1b1dac25..b1503f26fb 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -38,6 +38,12 @@ dog_fashion = null +/obj/item/clothing/head/caphat/beret + name = "captain's beret" + desc = "A beret fit for a leader." + icon_state = "capberet" + + dog_fashion = null //Head of Personnel /obj/item/clothing/head/hopcap @@ -47,6 +53,13 @@ armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) dog_fashion = /datum/dog_fashion/head/hop +/obj/item/clothing/head/hopcap/beret + name = "head of personnel's beret" + desc = "The symbol of true bureaucratic micromanagement, although in a fancy form." + icon_state = "hopberet" + + dog_fashion = null + //Chaplain /obj/item/clothing/head/nun_hood name = "nun hood" @@ -164,3 +177,27 @@ name = "treasure hunter's fedora" desc = "You got red text today kid, but it doesn't mean you have to like it." icon_state = "curator" + +//Chief Medical Officer +/obj/item/clothing/head/beret/cmo + name = "chief medical officer's beret" + desc = "A fancy beret with a green cross, signifying your status in the station's medbay." + icon_state = "cmoberet" + +//Research Director +/obj/item/clothing/head/beret/rd + name = "research director's beret" + desc = "A beret worn only by highly intelligent people." + icon_state = "rdberet" + +//Chief Engineer +/obj/item/clothing/head/beret/ce + name = "chief engineer's beret" + desc = "A beret that will surely make you look way cooler than a hard hat, although lack of protection is the price." + icon_state = "ceberet" + +//Quartermaster +/obj/item/clothing/head/beret/qm + name = "quartermaster's beret" + desc = "This headwear shows off your Cargonian leadership" + icon_state = "qmberet" \ No newline at end of file diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index a598bd0959..6576f0e55b 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -5,7 +5,28 @@ item_state = "labcoat" blood_overlay_type = "coat" body_parts_covered = CHEST|ARMS - allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/soap, /obj/item/sensor_device, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman) + allowed = list( + /obj/item/analyzer, + /obj/item/stack/medical, + /obj/item/dnainjector, + /obj/item/reagent_containers/dropper, + /obj/item/reagent_containers/syringe, + /obj/item/reagent_containers/hypospray, + /obj/item/hypospray/mkii, + /obj/item/healthanalyzer, + /obj/item/flashlight/pen, + /obj/item/reagent_containers/glass/bottle, + /obj/item/reagent_containers/glass/beaker, + /obj/item/reagent_containers/pill, + /obj/item/storage/pill_bottle, + /obj/item/paper, + /obj/item/melee/classic_baton/telescopic, + /obj/item/soap, + /obj/item/sensor_device, + /obj/item/tank/internals/emergency_oxygen, + /obj/item/tank/internals/plasmaman + ) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50) togglename = "buttons" species_exception = list(/datum/species/golem) diff --git a/code/modules/jobs/map_changes/map_changes.dm b/code/modules/jobs/map_changes/map_changes.dm index b88bc093d0..b4aa4520a3 100644 --- a/code/modules/jobs/map_changes/map_changes.dm +++ b/code/modules/jobs/map_changes/map_changes.dm @@ -1,6 +1,4 @@ -//this needs to come after the job_types subfolder to keep the correct ordering - -#include "..\..\..\..\_maps\map_files\OmegaStation\job_changes.dm" -#undef JOB_MODIFICATION_MAP_NAME -#include "..\..\..\..\_maps\map_files\PubbyStation\job_changes.dm" +//this needs to come after the job_types subfolder to keep the correct ordering + +#include "..\..\..\..\_maps\map_files\PubbyStation\job_changes.dm" #undef JOB_MODIFICATION_MAP_NAME \ No newline at end of file diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 7276039443..5fa7b9d571 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -24,6 +24,7 @@ new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400), new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500), new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500), + new /datum/data/mining_equipment("Larger Ore Bag", /obj/item/storage/bag/ore/large, 500), new /datum/data/mining_equipment("500 Point Transfer Card", /obj/item/card/mining_point_card/mp500, 500), new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600), new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600), @@ -42,9 +43,9 @@ new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000), new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000), new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1000), - new /datum/data/mining_equipment("1000 Point Transfer Card", /obj/item/card/mining_point_card/mp1000, 1000), - new /datum/data/mining_equipment("1500 Point Transfer Card", /obj/item/card/mining_point_card/mp1500, 1500), - new /datum/data/mining_equipment("2000 Point Transfer Card", /obj/item/card/mining_point_card/mp2000, 2000), + new /datum/data/mining_equipment("1000 Point Transfer Card", /obj/item/card/mining_point_card/mp1000, 1000), + new /datum/data/mining_equipment("1500 Point Transfer Card", /obj/item/card/mining_point_card/mp1500, 1500), + new /datum/data/mining_equipment("2000 Point Transfer Card", /obj/item/card/mining_point_card/mp2000, 2000), new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/tank/jetpack/suit, 2000), new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000), new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000), @@ -66,7 +67,10 @@ new /datum/data/mining_equipment("KA Damage Increase", /obj/item/borg/upgrade/modkit/damage, 1000), new /datum/data/mining_equipment("KA Cooldown Decrease", /obj/item/borg/upgrade/modkit/cooldown, 1000), new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000), - new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000) + new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000), + new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining_cloned, 12000), + new /datum/data/mining_equipment("Spare Suit Voucher", /obj/item/suit_voucher, 15000) + ) /datum/data/mining_equipment @@ -320,9 +324,29 @@ new /obj/item/clothing/mask/gas/explorer(src) new /obj/item/card/mining_access_card(src) - //CITADEL ADDITIONS BELOW +/obj/item/storage/backpack/duffelbag/mining_cloned + name = "mining replacement kit" + desc = "A large bag that has advance tools and a spare jumpsuit, boots, and gloves for a newly cloned miner to get back in the field. Even as a new Id!" + +/obj/item/storage/backpack/duffelbag/mining_cloned/PopulateContents() + new /obj/item/pickaxe/mini(src) + new /obj/item/clothing/under/rank/miner/lavaland(src) + new /obj/item/clothing/shoes/workboots/mining(src) + new /obj/item/clothing/gloves/color/black(src) + new /obj/item/implanter/tracking/gps(src) + new /obj/item/kitchen/knife/combat/survival(src) + new /obj/item/storage/firstaid/regular(src) + new /obj/item/reagent_containers/hypospray/medipen/survival(src) + new /obj/item/t_scanner/adv_mining_scanner(src) + new /obj/item/clothing/suit/hooded/explorer(src) + new /obj/item/encryptionkey/headset_cargo(src) + new /obj/item/clothing/mask/gas/explorer(src) + new /obj/item/card/id/mining(src) + new /obj/item/storage/bag/ore(src) + new /obj/item/clothing/glasses/meson/prescription(src) + /obj/machinery/mineral/equipment_vendor/proc/RedeemSVoucher(obj/item/suit_voucher/voucher, mob/redeemer) var/items = list("Exo-suit", "SEVA suit") diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 8fff4cfec0..ca4f230905 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1142,15 +1142,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.add_trait(TRAIT_FAT, OBESITY) H.update_inv_w_uniform() H.update_inv_wear_suit() - - if(H.noisy && H.nutrition <= NUTRITION_LEVEL_STARVING) - if(prob(10)) - playsound(get_turf(H),"hunger_sounds",35,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED) - - else if(H.noisy && H.nutrition <= NUTRITION_LEVEL_HUNGRY) - if(prob(10)) - playsound(get_turf(H),"hunger_sounds",15,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED) - + // nutrition decrease and satiety if (H.nutrition > 0 && H.stat != DEAD && !H.has_trait(TRAIT_NOHUNGER)) // THEY HUNGER diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index b851552dc5..c5a64ebd13 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -94,4 +94,9 @@ inherent_traits = list(TRAIT_NOGUNS) mutantlungs = /obj/item/organ/lungs/ashwalker burnmod = 0.9 - brutemod = 0.9 \ No newline at end of file + brutemod = 0.9 + +/datum/species/lizard/ashwalker/on_species_gain(mob/living/carbon/human/C, datum/species/old_species) + if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines + C.dna.features["tail"] = "Smooth" + return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 941ba0ec69..ec858fdff5 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -345,7 +345,15 @@ /mob/living/simple_animal/hostile/proc/AttackingTarget() in_melee = TRUE - return target.attack_animal(src) + if(isliving(target)) + var/mob/living/L = target + if(L.Adjacent(src) && vore_active && L.devourable) // aggressive check to ensure vore attacks can be made + if(prob(voracious_chance)) + vore_attack(src,L,src) + else + return L.attack_animal(src) + else + return target.attack_animal(src) /mob/living/simple_animal/hostile/proc/Aggro() vision_range = aggro_vision_range diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm index 7e69298b69..26f146b952 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm @@ -8,8 +8,6 @@ var/obj/belly/megafauna/dragon/maw/maw = new(src) var/obj/belly/megafauna/dragon/gullet/gullet = new(src) var/obj/belly/megafauna/dragon/gut/gut = new(src) -// for(var/obj/belly/X in list(maw, gullet, gut)) -// vore_organs[X.name] = X // Connect 'stomachs' together maw.transferlocation = gullet gullet.transferlocation = gut @@ -49,6 +47,6 @@ vore_sound = "Tauric Swallow" desc = "With a rush of burning ichor greeting you, you're introduced to the Drake's stomach. Wrinkled walls greedily grind against you, acidic slimes working into your body as you become fuel and nutriton for a superior predator. All that's left is your body's willingness to resist your destiny." digest_mode = DM_DRAGON - digest_burn = 5 + digest_burn = 2 swallow_time = 100 // costs extra time to eat directly to here escapechance = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm index 92ac07b1a0..a07e46a289 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm @@ -85,7 +85,7 @@ OpenFire() if(L.Adjacent(src) && (L.stat != CONSCIOUS)) if(vore_active && L.devourable == TRUE) - dragon_feeding(src,L) + vore_attack(src,L,src) LoseTarget() else devour(L) diff --git a/code/modules/mob/living/simple_animal/simple_animal_vr.dm b/code/modules/mob/living/simple_animal/simple_animal_vr.dm index 41c7971533..afb1b88d3b 100644 --- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm +++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm @@ -1,21 +1,29 @@ +#define VORACIOUS_CHANCE 40 +#define VORE_SWALLOW_TIME 50 + /mob/living/simple_animal - // List of targets excluded (for now) from being eaten by this mob. - var/list/prey_exclusions = list() - devourable = FALSE //insurance because who knows. - digestable = TRUE //I mean, if it's devourable it should also be digestible - var/vore_active = FALSE // If vore behavior is enabled for this mob + //Specific vore behaviors + var/vore_active = FALSE // If vore behavior is enabled for this mob + var/isPredator = FALSE //Are they capable of performing and pre-defined vore actions for their species? + var/swallowTime = VORE_SWALLOW_TIME //How long it takes to eat Human and other Simple_animal prey in 1/10 of a second. The default is 5 seconds. + var/list/prey_excludes = list() //For excluding people from being eaten. + var/voracious_chance = VORACIOUS_CHANCE //Mob AI Engagement probability when rolling between regular melee strike and a vore attempt, default 40% - var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB) - var/vore_digest_chance = 25 // Chance to switch to digest mode if resisted - var/vore_escape_chance = 25 // Chance of resisting out of mob - var/vore_absorb_chance = 0 // chance of absorbtion by mob + // Vore belly interactions + // Most mobs are only going to have the one gut. Multi-gut set ups should refer to Ash Drake's dragon_vore.dm for set up. - var/vore_stomach_name // The name for the first belly if not "stomach" - var/vore_stomach_flavor // The flavortext for the first belly if not the default - - var/vore_fullness = 0 // How "full" the belly is (controls icons) - var/list/living_mobs = list() + var/vore_default_sound = "Gulp" // Default vore sound + var/vore_default_release = "Splatter" // Default release sound + var/vore_wetness = TRUE // Default for a wet belly + var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB) + var/vore_digest_chance = VORACIOUS_CHANCE // Chance to switch to digest mode if resisted, default 40% + var/vore_escape_chance = VORACIOUS_CHANCE // Chance of resisting out of mob, default 40% + var/vore_absorb_chance = 0 // chance of absorbtion by mob, default 0% + var/vore_stomach_name // The name for the first belly if not "stomach" + var/vore_stomach_flavor // The flavortext for the first belly if not the default + //Icon Memes + var/vore_fullness = 0 // How "full" the belly is (controls icons) // Release belly contents before being gc'd! /mob/living/simple_animal/Destroy() @@ -34,35 +42,19 @@ vore_fullness = new_fullness -/* -/mob/living/simple_animal/proc/swallow_check() - for(var/I in vore_organs) - var/obj/belly/B = vore_organs[I] - if(vore_active) - update_fullness() - if(!vore_fullness) - // Nothing - return - else - addtimer(CALLBACK(src, .proc/swallow_mob), B.swallow_time) - -/mob/living/simple_animal/proc/swallow_mob() - for(var/I in vore_organs) - var/obj/belly/B = vore_organs[I] - for(var/mob/living/M in B.contents) - B.transfer_contents(M, transferlocation) -*/ - /mob/living/simple_animal/death() release_vore_contents(silent = TRUE) . = ..() // Simple animals have only one belly. This creates it (if it isn't already set up) -/mob/living/simple_animal/proc/init_belly() +/mob/living/simple_animal/init_vore() + vore_init = TRUE if(vore_organs.len) return if(no_vore) //If it can't vore, let's not give it a stomach. return + if(vore_active && !IsAdvancedToolUser()) //vore active, but doesn't have thumbs to grab people with. + verbs |= /mob/living/simple_animal/proc/animal_nom var/obj/belly/B = new /obj/belly(src) vore_selected = B @@ -70,6 +62,9 @@ B.name = vore_stomach_name ? vore_stomach_name : "stomach" B.desc = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]." B.digest_mode = vore_default_mode + B.vore_sound = vore_default_sound + B.release_sound = vore_default_release + B.is_wet = vore_wetness B.escapable = vore_escape_chance > 0 B.escapechance = vore_escape_chance B.digestchance = vore_digest_chance @@ -97,21 +92,42 @@ "The juices pooling beneath you sizzle against your sore skin.", "The churning walls slowly pulverize you into meaty nutrients.", "The stomach glorps and gurgles as it tries to work you into slop.") -/* B.emote_lists[DM_ITEMWEAK] = list( - "The burning acids eat away at your form.", - "The muscular stomach flesh grinds harshly against you.", - "The caustic air stings your chest when you try to breathe.", - "The slimy guts squeeze inward to help the digestive juices soften you up.", - "The onslaught against your body doesn't seem to be letting up; you're food now.", - "The predator's body ripples and crushes against you as digestive enzymes pull you apart.", - "The juices pooling beneath you sizzle against your sore skin.", - "The churning walls slowly pulverize you into meaty nutrients.", - "The stomach glorps and gurgles as it tries to work you into slop.")*/ -//Grab = Nomf -/* -/mob/living/simple_animal/UnarmedAttack(var/atom/A, var/proximity) - . = ..() +// +// Simple proc for animals to have their digestion toggled on/off externally +// +/mob/living/simple_animal/verb/toggle_digestion() + set name = "Toggle Animal's Digestion" + set desc = "Enables digestion on this mob for 20 minutes." + set category = "Object" + set src in oview(1) - if(a_intent == I_GRAB && isliving(A) && !has_hands) - animal_nom(A)*/ \ No newline at end of file + var/datum/belly/B = vore_organs[vore_selected] + if(faction != usr.faction) + to_chat(usr,"This predator isn't friendly, and doesn't give a shit about your opinions of it digesting you.") + return + if(B.digest_mode == "Hold") + var/confirm = alert(usr, "Enabling digestion on [name] will cause it to digest all stomach contents. Using this to break OOC prefs is against the rules. Digestion will disable itself after 20 minutes.", "Enabling [name]'s Digestion", "Enable", "Cancel") + if(confirm == "Enable") + B.digest_mode = "Digest" + sleep(20 MINUTES) //12000=20 minutes + B.digest_mode = "Hold" + else + var/confirm = alert(usr, "This mob is currently set to digest all stomach contents. Do you want to disable this?", "Disabling [name]'s Digestion", "Disable", "Cancel") + if(confirm == "Disable") + B.digest_mode = "Hold" + +// +// Simple nom proc for if you get ckey'd into a simple_animal mob! Avoids grabs. +// +/mob/living/simple_animal/proc/animal_nom(var/mob/living/T in oview(1)) + set name = "Animal Nom" + set category = "Vore" + set desc = "Since you can't grab, you get a verb!" + + if (stat != CONSCIOUS) + return + if (T.devourable == FALSE) + to_chat(usr, "You can't eat this!") + return + return vore_attack(usr,T,usr) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index b1f001222b..d6d0a3dc4f 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -134,7 +134,7 @@ var/locid = 0 var/laststart = 1 var/textindex = 1 - while(1) //I know this can cause infinite loops and fuck up the whole server, but the if(istart==0) should be safe as fuck + while(locid < 15) //hey whoever decided a while(1) was a good idea here, i hate you var/istart = 0 if(links) istart = findtext(info_links, "", laststart) @@ -198,7 +198,7 @@ // Count the fields var/laststart = 1 - while(1) + while(fields < 15) var/i = findtext(t, "", laststart) if(i == 0) break @@ -210,7 +210,7 @@ /obj/item/paper/proc/reload_fields() // Useful if you made the paper programicly and want to include fields. Also runs updateinfolinks() for you. fields = 0 var/laststart = 1 - while(1) + while(fields < 15) var/i = findtext(info, "", laststart) if(i == 0) break diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 7339f850d8..10282e5e0a 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -62,7 +62,6 @@ ) var/list/upgrade_reagents3 = list( - "glycerol", "mine_salve", "toxin" ) diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index 4e278d2ede..3970e8157b 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -463,6 +463,19 @@ M.radiation -= min(M.radiation, 8) ..() +/datum/reagent/medicine/prussian_blue + name = "Prussian Blue" + id = "prussian_blue" + description = "Efficiently restores heavy radiation damage." + reagent_state = LIQUID + color = "#003153" // RGB 0, 49, 83 + metabolization_rate = 0.5 * REAGENTS_METABOLISM + +/datum/reagent/medicine/prussian_blue/on_mob_life(mob/living/carbon/M) + if(M.radiation > 0) + M.radiation -= min(M.radiation, 20) + ..() + /datum/reagent/medicine/pen_acid name = "Pentetic Acid" id = "pen_acid" diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index 1702e1f816..38d47d5185 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -172,6 +172,23 @@ icon_state = "pill18" list_reagents = list("potass_iodide" = 50) roundstart = 1 + +/obj/item/reagent_containers/pill/antirad_plus + name = "prussian blue pill" + desc = "Used to treat heavy radition poisoning." + icon = 'modular_citadel/icons/obj/modularpills.dmi' + icon_state = "prussian_blue" + list_reagents = list("prussian_blue" = 25, "water" = 10) + roundstart = 1 + +/obj/item/reagent_containers/pill/mutarad + name = "radiation treatment deluxe pill" + desc = "Used to treat heavy radition poisoning and genetic defects." + icon = 'modular_citadel/icons/obj/modularpills.dmi' + icon_state = "anit_rad_fixgene" + list_reagents = list("prussian_blue" = 15, "potass_iodide" = 15, "mutadone" = 15, "water" = 5) + roundstart = 1 + ///////////////////////////////////////// this pill is used only in a legion mob drop /obj/item/reagent_containers/pill/shadowtoxin name = "black pill" diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index 03af32f660..f394351285 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -495,7 +495,6 @@ if(should_draw_greyscale) - marking.color = null var/draw_color = mutation_color || species_color || (skin_tone && skintone2hex(skin_tone)) if(draw_color) limb.color = "#[draw_color]" diff --git a/html/changelogs/AutoChangeLog-pr-8189.yml b/html/changelogs/AutoChangeLog-pr-8189.yml new file mode 100644 index 0000000000..2a2fb9cbbf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8189.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "Action buttons are now able to fill the entire screen in widescreen and other weird view sizes." diff --git a/html/changelogs/AutoChangeLog-pr-8190.yml b/html/changelogs/AutoChangeLog-pr-8190.yml new file mode 100644 index 0000000000..d2b05015e4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8190.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscdel: "Omegastation's job changes will no longer be included at compile time." diff --git a/html/changelogs/AutoChangeLog-pr-8195.yml b/html/changelogs/AutoChangeLog-pr-8195.yml new file mode 100644 index 0000000000..b9e9346c95 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8195.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - rscadd: "You can now quickly use unequipped items on objects by simply click-dragging the item onto the object with an empty active hand. Doing so will place the item in your hand, and then use that item on the object." diff --git a/html/changelogs/AutoChangeLog-pr-8214.yml b/html/changelogs/AutoChangeLog-pr-8214.yml new file mode 100644 index 0000000000..96f835d2f5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8214.yml @@ -0,0 +1,5 @@ +author: "Poojawa" +delete-after: True +changes: + - bugfix: "fixed Navy officer uniforms that failed to spawn" + - code_imp: "Loadout items will be forcefully added to backpacks or at your feet instead of left behind at title screen" diff --git a/html/changelogs/AutoChangeLog-pr-8219.yml b/html/changelogs/AutoChangeLog-pr-8219.yml new file mode 100644 index 0000000000..b0d77cdec0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8219.yml @@ -0,0 +1,6 @@ +author: "Coolgat3" +delete-after: True +changes: + - rscadd: "Added berets for all the heads." + - imageadd: "Added sprites for the berets." + - code_imp: "Coded the berets to spawn in appropiate lockers." diff --git a/html/changelogs/AutoChangeLog-pr-8228.yml b/html/changelogs/AutoChangeLog-pr-8228.yml new file mode 100644 index 0000000000..bcfae35a3c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8228.yml @@ -0,0 +1,4 @@ +author: "Coolgat3" +delete-after: True +changes: + - tweak: "Raised the ripley's movement speed and lights range by 1, also lowered its armor to compensate." diff --git a/html/changelogs/AutoChangeLog-pr-8229.yml b/html/changelogs/AutoChangeLog-pr-8229.yml new file mode 100644 index 0000000000..c22f1dab3d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8229.yml @@ -0,0 +1,4 @@ +author: "deathride58" +delete-after: True +changes: + - bugfix: "Hopefully fixed paper crash 2: electric boogaloo" diff --git a/html/changelogs/AutoChangeLog-pr-8231.yml b/html/changelogs/AutoChangeLog-pr-8231.yml new file mode 100644 index 0000000000..f71ec3fd52 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8231.yml @@ -0,0 +1,5 @@ +author: "Poojawa" +delete-after: True +changes: + - tweak: "hypospray kits hold 12 now, but only vials and sprays themselves" + - bugfix: "labcoats can carry MK II hyposprays on them now." diff --git a/html/changelogs/AutoChangeLog-pr-8232.yml b/html/changelogs/AutoChangeLog-pr-8232.yml new file mode 100644 index 0000000000..00d319dfe5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8232.yml @@ -0,0 +1,6 @@ +author: "Poojawa" +delete-after: True +changes: + - rscadd: "Vore Mobs are a thing now, not just ash drakes" + - rscdel: "Removed hunger sound stuff. never taking requests from Coolgat3 ever again. +refractor: Simple Mobs use the same system regular human mobs do, itjustworks.png" diff --git a/html/changelogs/AutoChangeLog-pr-8235.yml b/html/changelogs/AutoChangeLog-pr-8235.yml new file mode 100644 index 0000000000..ab5aef0b8d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-8235.yml @@ -0,0 +1,4 @@ +author: "Poojawa" +delete-after: True +changes: + - balance: "Defib users automatically stop pulling when they attempt to perform a defib shock" diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 2f39dd5940..3da5fc08e2 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 34d8374a42..d905979c9c 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/modular_citadel/code/controllers/subsystem/job.dm b/modular_citadel/code/controllers/subsystem/job.dm index 303e1b626d..c433042ae6 100644 --- a/modular_citadel/code/controllers/subsystem/job.dm +++ b/modular_citadel/code/controllers/subsystem/job.dm @@ -23,7 +23,12 @@ continue var/obj/item/I = new G.path if(!M.equip_to_slot_if_possible(I, G.category, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // If the job's dresscode compliant, try to put it in its slot, first - if(!M.equip_to_slot_if_possible(I, SLOT_IN_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // Otherwise, try to put it in the backpack + if(iscarbon(M)) + var/mob/living/carbon/C = M + var/obj/item/storage/backpack/B = C.back + if(!B || !SEND_SIGNAL(B, COMSIG_TRY_STORAGE_INSERT, I, null, TRUE, TRUE)) // Otherwise, try to put it in the backpack, for carbons. + I.forceMove(get_turf(C)) + else if(!M.equip_to_slot_if_possible(I, SLOT_IN_BACKPACK, disable_warning = TRUE, bypass_equip_delay_self = TRUE)) // Otherwise, try to put it in the backpack I.forceMove(get_turf(M)) // If everything fails, just put it on the floor under the mob. /datum/controller/subsystem/job/proc/FreeRole(rank) diff --git a/modular_citadel/code/game/objects/items/storage/firstaid.dm b/modular_citadel/code/game/objects/items/storage/firstaid.dm index 6ddf3963dd..6ff1bfbe2c 100755 --- a/modular_citadel/code/game/objects/items/storage/firstaid.dm +++ b/modular_citadel/code/game/objects/items/storage/firstaid.dm @@ -23,14 +23,14 @@ /obj/item/storage/firstaid/o2 icon_state = "oxy" - + /obj/item/storage/firstaid/radbgone icon_state = "rad" - + /obj/item/storage/firstaid/radbgone/Initialize(mapload) . = ..() icon_state = pick("[initial(icon_state)]","[initial(icon_state)]2","[initial(icon_state)]3","[initial(icon_state)]4") - + /obj/item/storage/firstaid/tactical icon_state = "tactical" @@ -50,10 +50,10 @@ /obj/item/storage/hypospraykit/ComponentInitialize() . = ..() GET_COMPONENT(STR, /datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_SMALL - STR.max_combined_w_class = 5 - STR.max_items = 5 - STR.cant_hold = typecacheof(list(/obj/item/disk/nuclear)) + STR.max_items = 12 + STR.can_hold = typecacheof(list( + /obj/item/hypospray/mkii, + /obj/item/reagent_containers/glass/bottle/vial)) /obj/item/storage/hypospraykit/regular icon_state = "firstaid-mini" @@ -136,10 +136,10 @@ /obj/item/storage/hypospraykit/cmo/ComponentInitialize() . = ..() GET_COMPONENT(STR, /datum/component/storage) - STR.max_w_class = WEIGHT_CLASS_SMALL - STR.max_combined_w_class = 6 STR.max_items = 6 - STR.cant_hold = typecacheof(list(/obj/item/disk/nuclear)) + STR.can_hold = typecacheof(list( + /obj/item/hypospray/mkii, + /obj/item/reagent_containers/glass/bottle/vial)) /obj/item/storage/hypospraykit/cmo/PopulateContents() if(empty) diff --git a/modular_citadel/code/modules/client/loadout/_security.dm b/modular_citadel/code/modules/client/loadout/_security.dm index 28145d07b9..7a49b1f049 100644 --- a/modular_citadel/code/modules/client/loadout/_security.dm +++ b/modular_citadel/code/modules/client/loadout/_security.dm @@ -29,10 +29,10 @@ restricted_roles = list("Security Officer") /datum/gear/navyblueuniformofficer - name = "security officer navyblue uniform" + name = "Security officer navyblue uniform" category = SLOT_W_UNIFORM path = /obj/item/clothing/under/rank/security/navyblue - restricted_roles = list("Security officer") + restricted_roles = list("Security Officer") /datum/gear/navybluejacketwarden name = "warden navyblue jacket" diff --git a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm index 81eb93106c..b5be18cec3 100644 --- a/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm +++ b/modular_citadel/code/modules/mob/dead/new_player/sprite_accessories.dm @@ -1256,7 +1256,7 @@ datum/sprite_accessory/mam_tails/insect /datum/sprite_accessory/mam_body_markings/none name = "None" icon_state = "none" - color_src = MUTCOLORS + ckeys_allowed = list("yousshouldnteverbeseeingthisyoumeme") /datum/sprite_accessory/mam_body_markings/plain name = "Plain" diff --git a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm index c34146a90c..6b6349c0f3 100644 --- a/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm +++ b/modular_citadel/code/modules/mob/living/carbon/human/species_types/furrypeople.dm @@ -195,10 +195,10 @@ say_mod = "hisses" default_color = "00FF00" should_draw_citadel = TRUE - species_traits = list(MUTCOLORS,EYECOLOR,LIPS,DIGITIGRADE) + species_traits = list(MUTCOLORS,EYECOLOR,LIPS) inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID) - mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur") - default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None") + mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur", "legs") + default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade Legs") attack_verb = "slash" attack_sound = 'sound/weapons/slash.ogg' miss_sound = 'sound/weapons/slashmiss.ogg' diff --git a/modular_citadel/code/modules/mob/living/simple_animal/simplemob_vore_values.dm b/modular_citadel/code/modules/mob/living/simple_animal/simplemob_vore_values.dm index ed1268a354..0daf68f6c1 100644 --- a/modular_citadel/code/modules/mob/living/simple_animal/simplemob_vore_values.dm +++ b/modular_citadel/code/modules/mob/living/simple_animal/simplemob_vore_values.dm @@ -1,85 +1,141 @@ -/mob/living/simple_animal/pet/cat - devourable = TRUE - no_vore = FALSE - -/mob/living/simple_animal/crab - devourable = TRUE - -/mob/living/simple_animal/pet/dog - devourable = TRUE - no_vore = FALSE - -/mob/living/simple_animal/hostile/retaliate/goat - devourable = TRUE - no_vore = FALSE - -/mob/living/simple_animal/cow - devourable = TRUE - no_vore = FALSE - -/mob/living/simple_animal/chick - devourable = TRUE - -/mob/living/simple_animal/chicken - devourable = TRUE - no_vore = FALSE - -/mob/living/simple_animal/pet/fox - devourable = TRUE - no_vore = FALSE - -/mob/living/simple_animal/hostile/lizard - devourable = TRUE - -/mob/living/simple_animal/mouse - devourable = TRUE - -/mob/living/simple_animal/pet/penguin - no_vore = TRUE - -/mob/living/simple_animal/pet - devourable = TRUE - -/mob/living/simple_animal/sloth - devourable = TRUE - -/mob/living/simple_animal/hostile/alien - devourable = TRUE - no_vore = FALSE - -/mob/living/simple_animal/hostile/bear - devourable = TRUE - no_vore = FALSE - -/mob/living/simple_animal/hostile/poison/giant_spider - devourable = TRUE - -/mob/living/simple_animal/hostile/retaliate/poison/snake - devourable = TRUE - no_vore = FALSE //oh yes my pretty. - -/mob/living/simple_animal/hostile/gorilla - devourable = TRUE - no_vore = FALSE - -/mob/living/simple_animal/hostile/megafauna/dragon - no_vore = FALSE - -/mob/living/simple_animal/hostile/asteroid/goliath - no_vore = FALSE - -/mob/living/simple_animal/parrot - devourable = TRUE - no_vore = FALSE - -/mob/living/simple_animal - no_vore = TRUE - +//CARBON MOBS /mob/living/carbon/alien devourable = TRUE + digestable = TRUE + feeding = TRUE /mob/living/carbon/monkey devourable = TRUE - + digestable = TRUE + feeding = TRUE + + +/* + REFER TO code/modules/mob/living/simple_animal/simple_animal_vr.dm for Var information! +*/ + + +//NUETRAL MOBS +/mob/living/simple_animal/crab + devourable = TRUE + digestable = TRUE + feeding = TRUE + +/mob/living/simple_animal/cow + devourable = TRUE + digestable = TRUE + feeding = TRUE + vore_active = TRUE + isPredator = TRUE + vore_default_mode = DM_HOLD + +/mob/living/simple_animal/chick + devourable = TRUE + digestable = TRUE + +/mob/living/simple_animal/chicken + devourable = TRUE + digestable = TRUE + +/mob/living/simple_animal/mouse + devourable = TRUE + digestable = TRUE + +//STATION PETS +/mob/living/simple_animal/pet + devourable = TRUE + digestable = TRUE + feeding = TRUE + +/mob/living/simple_animal/pet/fox + vore_active = TRUE + isPredator = TRUE + vore_default_mode = DM_HOLD + +/mob/living/simple_animal/pet/cat + vore_active = TRUE + isPredator = TRUE + vore_default_mode = DM_HOLD + +/mob/living/simple_animal/pet/dog + vore_active = TRUE + isPredator = TRUE + vore_default_mode = DM_HOLD + +/mob/living/simple_animal/sloth + devourable = TRUE + digestable = TRUE + feeding = TRUE + +/mob/living/simple_animal/parrot + devourable = TRUE + digestable = TRUE + +//HOSTILE MOBS +/mob/living/simple_animal/hostile/retaliate/goat + devourable = TRUE + digestable = TRUE + feeding = TRUE + vore_active = TRUE + isPredator = TRUE + vore_stomach_flavor = "You find yourself squeezed into the hollow of the goat, the smell of oats and hay thick in the tight space, all of which grinds in on you. Harmless for now..." + vore_default_mode = DM_HOLD + +/mob/living/simple_animal/hostile/lizard + devourable = TRUE + digestable = TRUE + +/mob/living/simple_animal/hostile/alien + devourable = TRUE + digestable = TRUE + feeding = TRUE + vore_active = TRUE + isPredator = TRUE + vore_default_mode = DM_HOLD + +/mob/living/simple_animal/hostile/bear + devourable = TRUE + digestable = TRUE + feeding = TRUE + vore_active = TRUE + isPredator = TRUE + vore_default_mode = DM_HOLD + +/mob/living/simple_animal/hostile/poison/giant_spider + devourable = TRUE + digestable = TRUE + feeding = TRUE + vore_active = TRUE + vore_default_mode = DM_HOLD + +/mob/living/simple_animal/hostile/retaliate/poison/snake + devourable = TRUE + digestable = TRUE + feeding = TRUE + vore_active = TRUE + isPredator = TRUE + vore_default_mode = DM_HOLD + +/mob/living/simple_animal/hostile/gorilla + devourable = TRUE + digestable = TRUE + feeding = TRUE + vore_active = TRUE + isPredator = TRUE + vore_default_mode = DM_HOLD + +/mob/living/simple_animal/hostile/asteroid/goliath + devourable = TRUE + digestable = TRUE + feeding = TRUE + vore_active = TRUE + isPredator = TRUE + vore_default_mode = DM_HOLD + /mob/living/simple_animal/hostile/carp devourable = TRUE + digestable = TRUE + feeding = TRUE + vore_active = TRUE + isPredator = TRUE + vore_default_mode = DM_HOLD diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm index 4a18c0d9b4..71f390396c 100644 --- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm +++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm @@ -36,6 +36,10 @@ /obj/effect/decal/cleanable/semen/New() ..() dir = pick(1,2,4,8) + add_blood_DNA(list("Non-human DNA" = "A+")) + +/obj/effect/decal/cleanable/semen/replace_decal(obj/effect/decal/cleanable/semen/S) + S.add_blood_DNA(return_blood_DNA()) /datum/reagent/consumable/femcum name = "Female Ejaculate" diff --git a/modular_citadel/code/modules/vore/eating/living_vr.dm b/modular_citadel/code/modules/vore/eating/living_vr.dm index cb194ddc65..b1d2a46ff2 100644 --- a/modular_citadel/code/modules/vore/eating/living_vr.dm +++ b/modular_citadel/code/modules/vore/eating/living_vr.dm @@ -9,7 +9,6 @@ var/vore_taste = null // What the character tastes like var/no_vore = FALSE // If the character/mob can vore. var/openpanel = 0 // Is the vore panel open? - var/noisy = FALSE // tummies are rumbly? var/absorbed = FALSE //are we absorbed? var/next_preyloop var/vore_init = FALSE //Has this mob's vore been initialized yet? @@ -140,51 +139,6 @@ var/belly = input("Choose Belly") in pred.vore_organs return perform_the_nom(user, prey, pred, belly) -//Dragon noms need to be faster -/mob/living/proc/dragon_feeding(var/mob/living/user, var/mob/living/prey) - var/belly = user.vore_selected - return perform_dragon(user, prey, user, belly) - -/mob/living/proc/perform_dragon(var/mob/living/user, var/mob/living/prey, var/mob/living/pred, var/obj/belly/belly, swallow_time = 20) - //Sanity - if(!user || !prey || !pred || !istype(belly) || !(belly in pred.vore_organs)) - testing("[user] attempted to feed [prey] to [pred], via [lowertext(belly.name)] but it went wrong.") - return FALSE - - if(istype(pred, /mob/living/simple_animal/hostile/megafauna/dragon)) - if(isliving(prey) && !prey.Adjacent(pred)) - return FALSE - - // The belly selected at the time of noms - var/attempt_msg = "ERROR: Vore message couldn't be created. Notify a dev. (at)" - var/success_msg = "ERROR: Vore message couldn't be created. Notify a dev. (sc)" - - // Prepare messages - if(user == pred) //Feeding someone to yourself - attempt_msg = text("[] starts to [] [] into their []!",pred,lowertext(belly.vore_verb),prey,lowertext(belly.name)) - success_msg = text("[] manages to [] [] into their []!",pred,lowertext(belly.vore_verb),prey,lowertext(belly.name)) - - if(!prey.Adjacent(user)) // let's doublecheck for sanity's sake. - return FALSE - - // Announce that we start the attempt! - user.visible_message(attempt_msg) - - if(!do_mob(src, user, swallow_time)) - return FALSE // Prey escaped (or user disabled) before timer expired. - - // If we got this far, nom successful! Announce it! - user.visible_message(success_msg) - playsound(get_turf(user), "[belly.vore_sound]",75,0,-6,0) - - // Actually shove prey into the belly. - belly.nom_mob(prey, user) - if (pred == user) - message_admins("[key_name(pred)] ate [key_name(prey)].") - pred.log_message("[key_name(pred)] ate [key_name(prey)].", LOG_ATTACK) - prey.log_message("[key_name(prey)] was eaten by [key_name(pred)].", LOG_ATTACK) - return TRUE - // // Master vore proc that actually does vore procedures // @@ -391,7 +345,6 @@ P.digestable = src.digestable P.devourable = src.devourable P.feeding = src.feeding - P.noisy = src.noisy P.vore_taste = src.vore_taste var/list/serialized = list() @@ -417,7 +370,6 @@ digestable = P.digestable devourable = P.devourable feeding = P.feeding - noisy = P.noisy vore_taste = P.vore_taste release_vore_contents(silent = TRUE) diff --git a/modular_citadel/code/modules/vore/eating/simple_animal_vr.dm b/modular_citadel/code/modules/vore/eating/simple_animal_vr.dm deleted file mode 100644 index a93eb2fcf4..0000000000 --- a/modular_citadel/code/modules/vore/eating/simple_animal_vr.dm +++ /dev/null @@ -1,44 +0,0 @@ -///////////////////// Simple Animal ///////////////////// -/mob/living/simple_animal - var/isPredator = FALSE //Are they capable of performing and pre-defined vore actions for their species? - var/swallowTime = 5 SECONDS //How long it takes to eat its prey in 1/10 of a second. The default is 5 seconds. - var/list/prey_excludes = list() //For excluding people from being eaten. - -// -// Simple proc for animals to have their digestion toggled on/off externally -// -/mob/living/simple_animal/verb/toggle_digestion() - set name = "Toggle Animal's Digestion" - set desc = "Enables digestion on this mob for 20 minutes." - set category = "Object" - set src in oview(1) - - var/datum/belly/B = vore_organs[vore_selected] - if(faction != usr.faction) - to_chat(usr,"This predator isn't friendly, and doesn't give a shit about your opinions of it digesting you.") - return - if(B.digest_mode == "Hold") - var/confirm = alert(usr, "Enabling digestion on [name] will cause it to digest all stomach contents. Using this to break OOC prefs is against the rules. Digestion will disable itself after 20 minutes.", "Enabling [name]'s Digestion", "Enable", "Cancel") - if(confirm == "Enable") - B.digest_mode = "Digest" - sleep(20 MINUTES) //12000=20 minutes - B.digest_mode = "Hold" - else - var/confirm = alert(usr, "This mob is currently set to digest all stomach contents. Do you want to disable this?", "Disabling [name]'s Digestion", "Disable", "Cancel") - if(confirm == "Disable") - B.digest_mode = "Hold" - -// -// Simple nom proc for if you get ckey'd into a simple_animal mob! Avoids grabs. -// -/mob/living/simple_animal/proc/animal_nom(var/mob/living/T in oview(1)) - set name = "Animal Nom" - set category = "Vore" - set desc = "Since you can't grab, you get a verb!" - - if (stat != CONSCIOUS) - return - if (T.devourable == FALSE) - to_chat(usr, "You can't eat this!") - return - return feed_grabbed_to_self(src,T) \ No newline at end of file diff --git a/modular_citadel/code/modules/vore/eating/vore_vr.dm b/modular_citadel/code/modules/vore/eating/vore_vr.dm index 64435619ae..dc813d70aa 100644 --- a/modular_citadel/code/modules/vore/eating/vore_vr.dm +++ b/modular_citadel/code/modules/vore/eating/vore_vr.dm @@ -28,7 +28,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE // The datum type bolted onto normal preferences datums for storing Vore stuff // -#define VORE_VERSION 3 +#define VORE_VERSION 4 GLOBAL_LIST_EMPTY(vore_preferences_datums) @@ -41,7 +41,6 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums) var/devourable = FALSE var/feeding = FALSE // var/allowmobvore = TRUE - var/noisy = FALSE var/list/belly_prefs = list() var/vore_taste = "nothing in particular" // var/can_be_drop_prey = FALSE @@ -108,7 +107,6 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums) digestable = json_from_file["digestable"] devourable = json_from_file["devourable"] feeding = json_from_file["feeding"] - noisy = json_from_file["noisy"] vore_taste = json_from_file["vore_taste"] belly_prefs = json_from_file["belly_prefs"] @@ -119,8 +117,6 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums) devourable = FALSE if(isnull(feeding)) feeding = FALSE - if(isnull(noisy)) - noisy = FALSE if(isnull(belly_prefs)) belly_prefs = list() @@ -136,7 +132,6 @@ GLOBAL_LIST_EMPTY(vore_preferences_datums) "digestable" = digestable, "devourable" = devourable, "feeding" = feeding, - "noisy" = noisy, "vore_taste" = vore_taste, "belly_prefs" = belly_prefs, ) diff --git a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm index 4238ae4a7b..2ac2628d1f 100644 --- a/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm +++ b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm @@ -229,7 +229,6 @@ dat += "
Delete Belly" dat += "Set Flavor" - dat += "Toggle Hunger Noises" dat += "
" @@ -730,15 +729,5 @@ if(user.client.prefs_vr) user.client.prefs_vr.feeding = user.feeding - if(href_list["togglenoisy"]) - var/choice = alert(user, "Toggle audible hunger noises. Currently: [user.noisy ? "Enabled" : "Disabled"]", "", "Enable audible hunger", "Cancel", "Disable audible hunger") - switch(choice) - if("Cancel") - return 0 - if("Enable audible hunger") - user.noisy = TRUE - if("Disable audible hunger") - user.noisy = FALSE - //Refresh when interacted with, returning 1 makes vore_look.Topic update return 1 \ No newline at end of file diff --git a/modular_citadel/icons/mob/mutant_bodyparts.dmi b/modular_citadel/icons/mob/mutant_bodyparts.dmi index f369f21afb..6a0bf77cd3 100644 Binary files a/modular_citadel/icons/mob/mutant_bodyparts.dmi and b/modular_citadel/icons/mob/mutant_bodyparts.dmi differ diff --git a/modular_citadel/icons/mob/xeno_parts_greyscale.dmi b/modular_citadel/icons/mob/xeno_parts_greyscale.dmi index 0f27cf8f30..26da9bce10 100644 Binary files a/modular_citadel/icons/mob/xeno_parts_greyscale.dmi and b/modular_citadel/icons/mob/xeno_parts_greyscale.dmi differ diff --git a/modular_citadel/icons/obj/modularpills.dmi b/modular_citadel/icons/obj/modularpills.dmi new file mode 100644 index 0000000000..78095d82c0 Binary files /dev/null and b/modular_citadel/icons/obj/modularpills.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 1cdc8cb21a..5b4c4eabe5 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -2986,7 +2986,6 @@ #include "modular_citadel\code\modules\vore\eating\bellymodes_vr.dm" #include "modular_citadel\code\modules\vore\eating\digest_act_vr.dm" #include "modular_citadel\code\modules\vore\eating\living_vr.dm" -#include "modular_citadel\code\modules\vore\eating\simple_animal_vr.dm" #include "modular_citadel\code\modules\vore\eating\vore_vr.dm" #include "modular_citadel\code\modules\vore\eating\voreitems.dm" #include "modular_citadel\code\modules\vore\eating\vorepanel_vr.dm"