diff --git a/_maps/map_files/IceBoxStation/IceBoxStation.dmm b/_maps/map_files/IceBoxStation/IceBoxStation.dmm index 18925cfd927a0..26556306fd53c 100644 --- a/_maps/map_files/IceBoxStation/IceBoxStation.dmm +++ b/_maps/map_files/IceBoxStation/IceBoxStation.dmm @@ -5990,6 +5990,19 @@ dir = 5 }, /area/station/maintenance/port/aft) +"bLa" = ( +/obj/structure/bed, +/obj/machinery/airalarm/directional/north, +/obj/effect/spawner/random/bedsheet, +/obj/machinery/button/door/directional/east{ + id = "Dorm1"; + name = "Dorm Bolt Control"; + normaldoorcontrol = 1; + specialfunctions = 4 + }, +/obj/item/pillow/random, +/turf/open/floor/carpet, +/area/station/commons/dorms) "bLc" = ( /turf/open/floor/iron/dark/textured_edge{ dir = 1 @@ -49673,7 +49686,7 @@ /area/station/hallway/primary/central) "oTh" = ( /obj/machinery/door/airlock{ - id_tag = "Dorm2"; + id_tag = "Dorm1"; name = "Dorm 1" }, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -242567,7 +242580,7 @@ ygB mJO oCF ygB -mJO +bLa oCF ygB lBD diff --git a/_maps/map_files/NorthStar/north_star.dmm b/_maps/map_files/NorthStar/north_star.dmm index 81bc51b7774fa..e72b578eb3b71 100644 --- a/_maps/map_files/NorthStar/north_star.dmm +++ b/_maps/map_files/NorthStar/north_star.dmm @@ -8859,7 +8859,8 @@ }, /area/station/command/teleporter) "cix" = ( -/obj/machinery/restaurant_portal/restaurant, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/wood, /area/station/service/kitchen/diner) "ciz" = ( @@ -56091,11 +56092,9 @@ /turf/open/floor/plating, /area/station/maintenance/floor4/starboard) "osX" = ( -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/structure/hedge, -/turf/open/floor/carpet/green, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/restaurant_portal/bar, +/turf/open/floor/wood, /area/station/service/kitchen/diner) "ote" = ( /obj/effect/spawner/structure/window/reinforced, @@ -62361,6 +62360,7 @@ /area/station/science/auxlab) "qaY" = ( /obj/effect/spawner/random/engineering/tracking_beacon, +/obj/structure/cable, /turf/open/floor/wood, /area/station/service/kitchen/diner) "qbh" = ( @@ -81796,9 +81796,9 @@ /turf/open/floor/pod/light, /area/station/maintenance/floor4/port/fore) "ved" = ( -/obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/structure/cable, /turf/open/floor/wood, /area/station/service/kitchen/diner) "veA" = ( @@ -91648,6 +91648,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/wood, /area/station/service/kitchen/diner) "xCR" = ( @@ -247096,11 +247097,11 @@ fjo mso dFd awt -cix gjf gjf -qoa gjf +qoa +jDe jDe qoW tTc @@ -247354,7 +247355,6 @@ mso dFd awt gjf -gjf ulB ulB ulB @@ -247363,6 +247363,7 @@ bMs kpa jzE gjf +gjf ddx rBC rBC @@ -247611,7 +247612,6 @@ mso laJ jWT tRT -gjf nXq xEL oAm @@ -247620,6 +247620,7 @@ dId jAl jHT gjf +gjf ddx rBC rBC @@ -247868,7 +247869,6 @@ gWg iOh awt gjf -gjf mQg rBC pzK @@ -247877,6 +247877,7 @@ gjf wtg gjf gjf +gjf uCW kHc xAq @@ -248125,7 +248126,6 @@ qcd ccF awt gjf -xCM mQg rBC pzK @@ -248134,6 +248134,7 @@ gjf vXY vRj ldV +osX jHJ hVt hVt @@ -248382,7 +248383,6 @@ qcd nsn rSS xDS -xDS sln jAl pWr @@ -248390,6 +248390,7 @@ jDe bMs kpa jzE +gjf vRj vWQ vWQ @@ -248638,17 +248639,17 @@ fjo qcd ceh dMj -gjf -xDS +cix ulB ulB ulB -jDe +xCM dId jAl jHT +gjf +xDS xDS -xna xna xna xna @@ -248895,9 +248896,8 @@ fjo qcd fOu awt -gjf -xDS -xDS +cix +cix xDS xDS ved @@ -248905,7 +248905,8 @@ xDS xDS xDS xDS -osX +xDS +gjf vZg dIx dIx @@ -249154,10 +249155,10 @@ dFd awt gjf gjf -gjf +vXY xDS qaY -jDe +gjf gjf wtg gjf @@ -249413,11 +249414,11 @@ rZS nla mQF xDS -gjf jDe bMs kpa jzE +gjf tFS nNJ ycW @@ -249670,12 +249671,12 @@ ubR mhE rwh xDS -gjf jDe dId jAl jHT gjf +gjf nNJ dxv ssj @@ -249928,7 +249929,7 @@ ubR nYE xDS jDe -jDe +gjf iwU psq eEr diff --git a/code/__DEFINES/dcs/signals/signals_storage.dm b/code/__DEFINES/dcs/signals/signals_storage.dm index 45b6ec6bfe3f2..26459ab4dad3d 100644 --- a/code/__DEFINES/dcs/signals/signals_storage.dm +++ b/code/__DEFINES/dcs/signals/signals_storage.dm @@ -5,5 +5,14 @@ /// Sent after dumping into some other storage object: (atom/dest_object, mob/user) #define COMSIG_STORAGE_DUMP_POST_TRANSFER "storage_dump_into_storage" -/// Sent to the STORAGE when an ITEM is STORED INSIDE. +/// Fired off the storage's PARENT when an ITEM is STORED INSIDE. (obj/item, mob, force) +#define COMSIG_ATOM_STORED_ITEM "atom_storing_item" + +/// Fired off the storage's PARENT when an ITEM is REMOVED. (obj/item, atom, silent) +#define COMSIG_ATOM_REMOVED_ITEM "atom_removing_item" + +/// Sent to the STORAGE when an ITEM is STORED INSIDE. (obj/item, mob, force) #define COMSIG_STORAGE_STORED_ITEM "storage_storing_item" + +/// Sent to the STORAGE when an ITEM is REMOVED. (obj/item, atom, silent) +#define COMSIG_STORAGE_REMOVED_ITEM "storage_removing_item" diff --git a/code/_onclick/click_alt.dm b/code/_onclick/click_alt.dm index 11419a6081692..7f762a6e920ea 100644 --- a/code/_onclick/click_alt.dm +++ b/code/_onclick/click_alt.dm @@ -11,7 +11,10 @@ return // Is it visible (and we're not wearing it (our clothes are invisible))? - if(!(src in viewers(7, target)) && !CanReach(target)) + if(!CAN_I_SEE(target)) + return + + if(is_blind() && !IN_GIVEN_RANGE(src, target, 1)) return var/turf/tile = get_turf(target) diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 090b8876cba44..88d5dada28154 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -197,39 +197,7 @@ if(!R.client) return - if(R.shown_robot_modules && screenmob.hud_used.hud_shown) - //Modules display is shown - screenmob.client.screen += module_store_icon //"store" icon - - if(!R.model.modules) - to_chat(usr, span_warning("Selected model has no modules to select!")) - return - - if(!R.robot_modules_background) - return - - var/display_rows = max(CEILING(length(R.model.get_inactive_modules()) / 8, 1),1) - R.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7" - screenmob.client.screen += R.robot_modules_background - - var/x = -4 //Start at CENTER-4,SOUTH+1 - var/y = 1 - - for(var/atom/movable/A in R.model.get_inactive_modules()) - //Module is not currently active - screenmob.client.screen += A - if(x < 0) - A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7" - else - A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7" - SET_PLANE_IMPLICIT(A, ABOVE_HUD_PLANE) - - x++ - if(x == 4) - x = -4 - y++ - - else + if(!R.shown_robot_modules || !screenmob.hud_used.hud_shown) //Modules display is hidden screenmob.client.screen -= module_store_icon //"store" icon @@ -238,6 +206,41 @@ screenmob.client.screen -= A R.shown_robot_modules = 0 screenmob.client.screen -= R.robot_modules_background + return + + //Modules display is shown + screenmob.client.screen += module_store_icon //"store" icon + + if(!R.model.modules) + to_chat(usr, span_warning("Selected model has no modules to select!")) + return + + if(!R.robot_modules_background) + return + + var/list/usable_modules = R.model.get_usable_modules() + + var/display_rows = max(CEILING(length(usable_modules) / 8, 1),1) + R.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7" + screenmob.client.screen += R.robot_modules_background + + for(var/i in 1 to length(usable_modules)) + var/atom/movable/A = usable_modules[i] + if(A in R.held_items) + //Module is currently active + continue + + // Arrange in a grid x=-4 to 3 and y=1 to display_rows + var/x = (i - 1) % 8 - 4 + var/y = floor((i - 1) / 8) + 1 + + screenmob.client.screen += A + if(x < 0) + A.screen_loc = "CENTER[x]:16,SOUTH+[y]:7" + else + A.screen_loc = "CENTER+[x]:16,SOUTH+[y]:7" + SET_PLANE_IMPLICIT(A, ABOVE_HUD_PLANE) + /datum/hud/robot/persistent_inventory_update(mob/viewer) if(!mymob) diff --git a/code/datums/ai/basic_mobs/basic_subtrees/express_happiness.dm b/code/datums/ai/basic_mobs/basic_subtrees/express_happiness.dm index 74ec9d98191a0..6cae6132d3688 100644 --- a/code/datums/ai/basic_mobs/basic_subtrees/express_happiness.dm +++ b/code/datums/ai/basic_mobs/basic_subtrees/express_happiness.dm @@ -7,7 +7,7 @@ var/happiness_key = BB_BASIC_HAPPINESS ///list of emotions we relay when happy var/static/list/happy_emotions = list( - "celebrate happily!", + "celebrates happily!", "dances around in excitement!", ) ///our moderate emotions diff --git a/code/datums/components/bloody_spreader.dm b/code/datums/components/bloody_spreader.dm index b30000a115c6a..823bc5e9507ff 100644 --- a/code/datums/components/bloody_spreader.dm +++ b/code/datums/components/bloody_spreader.dm @@ -17,7 +17,7 @@ signals_to_add += list(COMSIG_ITEM_ATTACK, COMSIG_ITEM_ATTACK_ATOM, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK_SELF, COMSIG_ITEM_EQUIPPED, COMSIG_ITEM_DROPPED) var/atom/atom_parent = parent if(atom_parent.atom_storage) - signals_to_add += list(COMSIG_STORAGE_STORED_ITEM) + signals_to_add += list(COMSIG_ATOM_STORED_ITEM) else if(isstructure(parent)) signals_to_add += list(COMSIG_ATOM_ATTACK_HAND) diff --git a/code/datums/quirks/negative_quirks/allergic.dm b/code/datums/quirks/negative_quirks/allergic.dm index 64b4c560bde96..8588b95e6e33c 100644 --- a/code/datums/quirks/negative_quirks/allergic.dm +++ b/code/datums/quirks/negative_quirks/allergic.dm @@ -55,14 +55,19 @@ return var/mob/living/carbon/carbon_quirk_holder = quirk_holder + //Just halts the progression, I'd suggest you run to medbay asap to get it fixed + if(carbon_quirk_holder.reagents.has_reagent(/datum/reagent/medicine/epinephrine)) + for(var/allergy in allergies) + var/datum/reagent/instantiated_med = carbon_quirk_holder.reagents.has_reagent(allergy) + if(!instantiated_med) + continue + instantiated_med.reagent_removal_skip_list |= ALLERGIC_REMOVAL_SKIP + return //block damage so long as epinephrine exists + for(var/allergy in allergies) var/datum/reagent/instantiated_med = carbon_quirk_holder.reagents.has_reagent(allergy) if(!instantiated_med) continue - //Just halts the progression, I'd suggest you run to medbay asap to get it fixed - if(carbon_quirk_holder.reagents.has_reagent(/datum/reagent/medicine/epinephrine)) - instantiated_med.reagent_removal_skip_list |= ALLERGIC_REMOVAL_SKIP - return //intentionally stops the entire proc so we avoid the organ damage after the loop instantiated_med.reagent_removal_skip_list -= ALLERGIC_REMOVAL_SKIP carbon_quirk_holder.adjustToxLoss(3 * seconds_per_tick) carbon_quirk_holder.reagents.add_reagent(/datum/reagent/toxin/histamine, 3 * seconds_per_tick) diff --git a/code/datums/storage/storage.dm b/code/datums/storage/storage.dm index 90e5a00334abf..023cc066747c9 100644 --- a/code/datums/storage/storage.dm +++ b/code/datums/storage/storage.dm @@ -455,6 +455,7 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) return FALSE SEND_SIGNAL(parent, COMSIG_STORAGE_STORED_ITEM, to_insert, user, force) + SEND_SIGNAL(src, COMSIG_STORAGE_STORED_ITEM, to_insert, user, force) to_insert.forceMove(real_location) item_insertion_feedback(user, to_insert, override) parent.update_appearance() @@ -549,6 +550,9 @@ GLOBAL_LIST_EMPTY(cached_storage_typecaches) refresh_views() parent.update_appearance() + + SEND_SIGNAL(parent, COMSIG_ATOM_REMOVED_ITEM, thing, remove_to_loc, silent) + SEND_SIGNAL(src, COMSIG_STORAGE_REMOVED_ITEM, thing, remove_to_loc, silent) return TRUE /** diff --git a/code/datums/storage/subtypes/cards.dm b/code/datums/storage/subtypes/cards.dm index 8e6a2bfb369ac..bf9cc6d0d5b58 100644 --- a/code/datums/storage/subtypes/cards.dm +++ b/code/datums/storage/subtypes/cards.dm @@ -15,19 +15,6 @@ . = ..() set_holdable(/obj/item/tcgcard) -/datum/storage/tcg/attempt_remove(obj/item/thing, atom/remove_to_loc, silent = FALSE) - . = ..() - if(!.) - return - - var/obj/item/tcgcard_deck/deck = parent - var/obj/item/tcgcard/card = thing - card.flipped = deck.flipped - card.update_appearance(UPDATE_ICON_STATE) - - if(length(real_location.contents) == 0) - qdel(parent) - /datum/storage/tcg/show_contents(mob/to_show) // sometimes, show contents is called when the mob is already seeing the contents of the deck, to refresh the view. // to avoid spam, we only show the message if they weren't already seeing the contents. diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index e32b78d9f776c..ae37691f1c1a1 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1528,10 +1528,12 @@ var/obj/item/electronics/airlock/ae if(!electronics) ae = new/obj/item/electronics/airlock(loc) + if(closeOtherId) + ae.passed_cycle_id = closeOtherId if(length(req_one_access)) ae.one_access = 1 ae.accesses = req_one_access - else + else if(length(req_access)) ae.accesses = req_access else ae = electronics diff --git a/code/game/objects/effects/spawners/random/lavaland_mobs.dm b/code/game/objects/effects/spawners/random/lavaland_mobs.dm index b0957ed84e945..4c6cf03532459 100644 --- a/code/game/objects/effects/spawners/random/lavaland_mobs.dm +++ b/code/game/objects/effects/spawners/random/lavaland_mobs.dm @@ -56,10 +56,10 @@ icon = 'icons/mob/simple/lavaland/raptor_big.dmi' icon_state = "raptor_red" loot = list( - /mob/living/basic/mining/raptor/red = 20, - /mob/living/basic/mining/raptor/white = 20, - /mob/living/basic/mining/raptor/purple = 20, - /mob/living/basic/mining/raptor/green = 20, - /mob/living/basic/mining/raptor/yellow = 20, - /mob/living/basic/mining/raptor/black = 1, + /mob/living/basic/raptor/red = 20, + /mob/living/basic/raptor/white = 20, + /mob/living/basic/raptor/purple = 20, + /mob/living/basic/raptor/green = 20, + /mob/living/basic/raptor/yellow = 20, + /mob/living/basic/raptor/black = 1, ) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index ae01c9e70181d..2aaf4024fb83c 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -433,6 +433,8 @@ for(var/obj/item/reagent_containers/borghypo/H in R.model.modules) H.bypass_protection = TRUE found_hypo = TRUE + for(var/obj/item/reagent_containers/borghypo/H in R.model.emag_modules) + H.bypass_protection = TRUE if(!found_hypo) to_chat(user, span_warning("This unit is already equipped with a piercing hypospray upgrade!")) //check to see if we already have this module @@ -443,6 +445,8 @@ if (.) for(var/obj/item/reagent_containers/borghypo/H in R.model.modules) H.bypass_protection = initial(H.bypass_protection) + for(var/obj/item/reagent_containers/borghypo/H in R.model.emag_modules) + H.bypass_protection = initial(H.bypass_protection) /obj/item/borg/upgrade/surgery_omnitool name = "cyborg surgical omni-tool upgrade" diff --git a/code/game/objects/items/tcg/tcg.dm b/code/game/objects/items/tcg/tcg.dm index 61d0dbe071d9c..fc2eeba82ff72 100644 --- a/code/game/objects/items/tcg/tcg.dm +++ b/code/game/objects/items/tcg/tcg.dm @@ -196,6 +196,7 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) /obj/item/tcgcard_deck/Initialize(mapload) . = ..() create_storage(storage_type = /datum/storage/tcg) + RegisterSignal(atom_storage, COMSIG_STORAGE_REMOVED_ITEM, PROC_REF(on_item_removed)) /obj/item/tcgcard_deck/update_icon_state() if(!flipped) @@ -314,6 +315,21 @@ GLOBAL_LIST_EMPTY(tcgcard_radial_choices) nu_card.update_icon_state() update_icon_state() +/** + * Signal handler for COMSIG_STORAGE_REMOVED_ITEM. Qdels src if contents are empty, flips the removed card if needed. + */ +/obj/item/tcgcard_deck/proc/on_item_removed(datum/storage/storage_datum, obj/item/thing, atom/remove_to_loc, silent = FALSE) + SIGNAL_HANDLER + + if (!istype(thing, /obj/item/tcgcard)) + return + var/obj/item/tcgcard/card = thing + card.flipped = flipped + card.update_appearance(UPDATE_ICON_STATE) + + if(length(contents) == 0) + qdel(src) + /obj/item/cardpack name = "Trading Card Pack: Coder" desc = "Contains six complete fuckups by the coders. Report this on github please!" diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index f75a8b9ce726c..5daf96a01b884 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -61,9 +61,6 @@ /obj/structure/door_assembly/examine(mob/user) . = ..() - var/doorname = "" - if(created_name) - doorname = ", written on it is '[created_name]'" switch(state) if(AIRLOCK_ASSEMBLY_NEEDS_WIRES) if(anchored) @@ -80,8 +77,8 @@ . += span_notice("There are empty slots for mineral covers.") else if(!glass && !noglass) . += span_notice("There are empty slots for glass windows.") - if(doorname) - . += span_notice("There is a small paper placard on the assembly labelled \"[doorname]\".") + if(created_name) + . += span_notice("There is a small paper placard on the assembly, written on it is '[created_name]'.") /obj/structure/door_assembly/attackby(obj/item/W, mob/living/user, params) if(istype(W, /obj/item/pen) && !user.combat_mode) diff --git a/code/game/objects/structures/signs/signs_departments.dm b/code/game/objects/structures/signs/signs_departments.dm index 37015a59cb087..e663ef2411e62 100644 --- a/code/game/objects/structures/signs/signs_departments.dm +++ b/code/game/objects/structures/signs/signs_departments.dm @@ -8,7 +8,7 @@ /obj/structure/sign/departments/med name = "\improper Medbay sign" sign_change_name = "Department - Medbay" - desc = "A sign labeling an area of medical department." + desc = "A sign labelling an area of the medical department." icon_state = "med" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/med, 32) @@ -23,7 +23,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/med_alt, 32) /obj/structure/sign/departments/medbay name = "\improper Medbay sign" sign_change_name = "Generic Medical" - desc = "The Intergalactic symbol of Medical institutions. You'll probably get help here." + desc = "The intergalactic symbol of medical institutions. You'll probably get help here." icon_state = "bluecross" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/medbay, 32) @@ -84,7 +84,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/virology, 32) /obj/structure/sign/departments/morgue name = "\improper Morgue sign" sign_change_name = "Department - Medbay: Morgue" - desc = "A sign labelling an area where station stores its ever-piling bodies." + desc = "A sign labelling an area where the station stores its ever-piling bodies." icon_state = "morgue" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/departments/morgue, 32) diff --git a/code/game/objects/structures/signs/signs_warning.dm b/code/game/objects/structures/signs/signs_warning.dm index b33d05a163a79..db44c75669d8a 100644 --- a/code/game/objects/structures/signs/signs_warning.dm +++ b/code/game/objects/structures/signs/signs_warning.dm @@ -199,7 +199,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/warning/gas_mask, 32) /obj/structure/sign/warning/chem_diamond name = "\improper REACTIVE CHEMICALS sign" sign_change_name = "Warning - Hazardous Chemicals sign" - desc = "A sign that warns of potentially reactive chemicals nearby, be they explosive, flamable, or acidic." + desc = "A sign that warns of potentially reactive chemicals nearby, be they explosive, flammable, or acidic." icon_state = "chemdiamond" MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/warning/chem_diamond, 32) diff --git a/code/modules/lootpanel/_lootpanel.dm b/code/modules/lootpanel/_lootpanel.dm index 339a79d77fa6f..45862ebf45542 100644 --- a/code/modules/lootpanel/_lootpanel.dm +++ b/code/modules/lootpanel/_lootpanel.dm @@ -49,6 +49,7 @@ var/list/data = list() data["contents"] = get_contents() + data["is_blind"] = !!user.is_blind() data["searching"] = length(to_image) return data diff --git a/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm index d79ae5582f696..d2b282f5b6235 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/_raptor.dm @@ -1,10 +1,10 @@ GLOBAL_LIST_INIT(raptor_growth_paths, list( - /mob/living/basic/mining/raptor/baby_raptor/red = list(RAPTOR_PURPLE, RAPTOR_WHITE), - /mob/living/basic/mining/raptor/baby_raptor/white = list(RAPTOR_GREEN, RAPTOR_PURPLE), - /mob/living/basic/mining/raptor/baby_raptor/purple = list(RAPTOR_GREEN, RAPTOR_WHITE), - /mob/living/basic/mining/raptor/baby_raptor/yellow = list(RAPTOR_GREEN, RAPTOR_RED), - /mob/living/basic/mining/raptor/baby_raptor/green = list(RAPTOR_RED, RAPTOR_YELLOW), - /mob/living/basic/mining/raptor/baby_raptor/blue = list(RAPTOR_RED, RAPTOR_PURPLE) + /mob/living/basic/raptor/baby_raptor/red = list(RAPTOR_PURPLE, RAPTOR_WHITE), + /mob/living/basic/raptor/baby_raptor/white = list(RAPTOR_GREEN, RAPTOR_PURPLE), + /mob/living/basic/raptor/baby_raptor/purple = list(RAPTOR_GREEN, RAPTOR_WHITE), + /mob/living/basic/raptor/baby_raptor/yellow = list(RAPTOR_GREEN, RAPTOR_RED), + /mob/living/basic/raptor/baby_raptor/green = list(RAPTOR_RED, RAPTOR_YELLOW), + /mob/living/basic/raptor/baby_raptor/blue = list(RAPTOR_RED, RAPTOR_PURPLE) )) GLOBAL_LIST_INIT(raptor_inherit_traits, list( @@ -19,17 +19,21 @@ GLOBAL_LIST_EMPTY(raptor_population) #define HAPPINESS_BOOST_DAMPENER 0.3 -/mob/living/basic/mining/raptor +/mob/living/basic/raptor name = "raptor" desc = "A trusty, powerful steed. Taming it might prove difficult..." icon = 'icons/mob/simple/lavaland/raptor_big.dmi' speed = 2 mob_biotypes = MOB_ORGANIC|MOB_BEAST - maxHealth = 400 - health = 400 + maxHealth = 270 + health = 270 melee_damage_lower = 10 melee_damage_upper = 15 - sentience_type = SENTIENCE_BOSS + combat_mode = TRUE + mob_size = MOB_SIZE_LARGE + unsuitable_atmos_damage = 0 + minimum_survivable_temperature = BODYTEMP_COLD_ICEBOX_SAFE + maximum_survivable_temperature = INFINITY attack_verb_continuous = "pecks" attack_verb_simple = "chomps" attack_sound = 'sound/weapons/punch1.ogg' @@ -60,12 +64,14 @@ GLOBAL_LIST_EMPTY(raptor_population) var/child_path -/mob/living/basic/mining/raptor/Initialize(mapload) +/mob/living/basic/raptor/Initialize(mapload) . = ..() if(SSmapping.is_planetary()) change_offsets = FALSE icon = 'icons/mob/simple/lavaland/raptor_icebox.dmi' + add_traits(list(TRAIT_LAVA_IMMUNE, TRAIT_ASHSTORM_IMMUNE, TRAIT_SNOWSTORM_IMMUNE), INNATE_TRAIT) + if(!mapload) GLOB.raptor_population += REF(src) AddComponent(/datum/component/obeys_commands, pet_commands) @@ -103,7 +109,7 @@ GLOBAL_LIST_EMPTY(raptor_population) if(can_breed) AddComponent(\ /datum/component/breed,\ - can_breed_with = typecacheof(list(/mob/living/basic/mining/raptor)),\ + can_breed_with = typecacheof(list(/mob/living/basic/raptor)),\ baby_path = /obj/item/food/egg/raptor_egg,\ post_birth = CALLBACK(src, PROC_REF(egg_inherit)),\ breed_timer = 3 MINUTES,\ @@ -114,12 +120,12 @@ GLOBAL_LIST_EMPTY(raptor_population) add_happiness_component() -/mob/living/basic/mining/raptor/buckle_mob(mob/living/target, force = FALSE, check_loc = TRUE, buckle_mob_flags= NONE) +/mob/living/basic/raptor/buckle_mob(mob/living/target, force = FALSE, check_loc = TRUE, buckle_mob_flags= NONE) if(!iscarbon(target)) return return ..() -/mob/living/basic/mining/raptor/proc/add_happiness_component() +/mob/living/basic/raptor/proc/add_happiness_component() var/static/list/percentage_callbacks = list(0, 15, 25, 35, 50, 75, 90, 100) AddComponent(\ /datum/component/happiness,\ @@ -130,18 +136,18 @@ GLOBAL_LIST_EMPTY(raptor_population) happiness_callback = CALLBACK(src, PROC_REF(happiness_change)),\ ) -/mob/living/basic/mining/raptor/proc/on_dir_change(datum/source, old_dir, new_dir) +/mob/living/basic/raptor/proc/on_dir_change(datum/source, old_dir, new_dir) SIGNAL_HANDLER adjust_offsets(new_dir) -/mob/living/basic/mining/raptor/proc/adjust_offsets(direction) +/mob/living/basic/raptor/proc/adjust_offsets(direction) if(!change_offsets) return pixel_x = (direction & EAST) ? -20 : 0 pixel_y = (direction & NORTH) ? -5 : 0 -/mob/living/basic/mining/raptor/proc/pre_attack(mob/living/puncher, atom/target) +/mob/living/basic/raptor/proc/pre_attack(mob/living/puncher, atom/target) SIGNAL_HANDLER if(!istype(target, /obj/structure/ore_container/food_trough/raptor_trough)) @@ -155,30 +161,30 @@ GLOBAL_LIST_EMPTY(raptor_population) INVOKE_ASYNC(src, PROC_REF(melee_attack), ore_food) return COMPONENT_HOSTILE_NO_ATTACK -/mob/living/basic/mining/raptor/melee_attack(mob/living/target, list/modifiers, ignore_cooldown) - if(!combat_mode && istype(target, /mob/living/basic/mining/raptor/baby_raptor)) +/mob/living/basic/raptor/melee_attack(mob/living/target, list/modifiers, ignore_cooldown) + if(!combat_mode && istype(target, /mob/living/basic/raptor/baby_raptor)) target.attack_hand(src, list(LEFT_CLICK = TRUE)) return return ..() -/mob/living/basic/mining/raptor/death(gibbed) +/mob/living/basic/raptor/death(gibbed) . = ..() GLOB.raptor_population -= REF(src) -/mob/living/basic/mining/raptor/proc/happiness_change(percent_value) +/mob/living/basic/raptor/proc/happiness_change(percent_value) var/attack_boost = round(initial(melee_damage_lower) * percent_value * HAPPINESS_BOOST_DAMPENER, 1) melee_damage_lower = initial(melee_damage_lower) + attack_boost melee_damage_upper = melee_damage_lower + 5 ///pass down our inheritance to the egg -/mob/living/basic/mining/raptor/proc/egg_inherit(obj/item/food/egg/raptor_egg/baby_egg, mob/living/basic/mining/raptor/partner) +/mob/living/basic/raptor/proc/egg_inherit(obj/item/food/egg/raptor_egg/baby_egg, mob/living/basic/raptor/partner) var/datum/raptor_inheritance/inherit = new inherit.set_parents(inherited_stats, partner.inherited_stats) baby_egg.inherited_stats = inherit baby_egg.determine_growth_path(src, partner) -/mob/living/basic/mining/raptor/proc/inherit_properties() +/mob/living/basic/raptor/proc/inherit_properties() if(isnull(inherited_stats)) return for(var/trait in GLOB.raptor_inherit_traits) // done this way to allow overriding of traits when assigned new inherit datum @@ -189,11 +195,11 @@ GLOBAL_LIST_EMPTY(raptor_population) maxHealth += inherited_stats.health_modifier heal_overall_damage(maxHealth) -/mob/living/basic/mining/raptor/Destroy() +/mob/living/basic/raptor/Destroy() QDEL_NULL(inherited_stats) return ..() -/mob/living/basic/mining/raptor/red +/mob/living/basic/raptor/red name = "red raptor" icon_state = "raptor_red" icon_living = "raptor_red" @@ -203,18 +209,18 @@ GLOBAL_LIST_EMPTY(raptor_population) raptor_color = RAPTOR_RED dex_description = "A resilient breed of raptors, battle-tested and bred for the purpose of humbling its foes in combat, \ This breed demonstrates higher combat capabilities than its peers and oozes ruthless aggression." - child_path = /mob/living/basic/mining/raptor/baby_raptor/red + child_path = /mob/living/basic/raptor/baby_raptor/red -/mob/living/basic/mining/raptor/purple +/mob/living/basic/raptor/purple name = "purple raptor" icon_state = "raptor_purple" icon_living = "raptor_purple" icon_dead = "raptor_purple_dead" raptor_color = RAPTOR_PURPLE dex_description = "A dependable mount, bred for the purpose of long distance pilgrimages. This breed is also able to store its rider's possessions." - child_path = /mob/living/basic/mining/raptor/baby_raptor/purple + child_path = /mob/living/basic/raptor/baby_raptor/purple -/mob/living/basic/mining/raptor/purple/Initialize(mapload) +/mob/living/basic/raptor/purple/Initialize(mapload) . = ..() create_storage( max_specific_storage = WEIGHT_CLASS_NORMAL, @@ -222,57 +228,57 @@ GLOBAL_LIST_EMPTY(raptor_population) storage_type = /datum/storage/raptor_storage, ) -/mob/living/basic/mining/raptor/green +/mob/living/basic/raptor/green name = "green raptor" icon_state = "raptor_green" icon_living = "raptor_green" icon_dead = "raptor_green_dead" - maxHealth = 460 - health = 460 + maxHealth = 400 + health = 400 raptor_color = RAPTOR_GREEN dex_description = "A tough breed of raptor, made to withstand the harshest of punishment and to laugh in the face of pain, \ this breed is able to withstand more punishment than its peers." - child_path = /mob/living/basic/mining/raptor/baby_raptor/green + child_path = /mob/living/basic/raptor/baby_raptor/green -/mob/living/basic/mining/raptor/green/Initialize(mapload) +/mob/living/basic/raptor/green/Initialize(mapload) . = ..() AddElement(/datum/element/proficient_miner) -/mob/living/basic/mining/raptor/white +/mob/living/basic/raptor/white name = "white raptor" icon_state = "raptor_white" icon_living = "raptor_white" icon_dead = "raptor_white_dead" raptor_color = RAPTOR_WHITE dex_description = "A loving sort, it cares for it peers and rushes to their aid with reckless abandon. It is able to heal any raptors' ailments." - child_path = /mob/living/basic/mining/raptor/baby_raptor/white + child_path = /mob/living/basic/raptor/baby_raptor/white -/mob/living/basic/mining/raptor/white/Initialize(mapload) +/mob/living/basic/raptor/white/Initialize(mapload) . = ..() AddComponent(\ /datum/component/healing_touch,\ heal_brute = melee_damage_upper,\ heal_burn = melee_damage_upper,\ heal_time = 0,\ - valid_targets_typecache = typecacheof(list(/mob/living/basic/mining/raptor)),\ + valid_targets_typecache = typecacheof(list(/mob/living/basic/raptor)),\ ) -/mob/living/basic/mining/raptor/black +/mob/living/basic/raptor/black name = "black raptor" icon_state = "raptor_black" icon_living = "raptor_black" icon_dead = "raptor_black_dead" - maxHealth = 460 - health = 460 + maxHealth = 400 + health = 400 speed = 1 ridable_component = /datum/component/riding/creature/raptor/fast melee_damage_lower = 20 melee_damage_upper = 25 raptor_color = RAPTOR_BLACK dex_description = "An ultra rare breed. Due to its sparse nature, not much is known about this sort. However it is said to possess many of its peers' abilities." - child_path = /mob/living/basic/mining/raptor/baby_raptor/black + child_path = /mob/living/basic/raptor/baby_raptor/black -/mob/living/basic/mining/raptor/yellow +/mob/living/basic/raptor/yellow name = "yellow raptor" icon_state = "raptor_yellow" icon_living = "raptor_yellow" @@ -281,18 +287,18 @@ GLOBAL_LIST_EMPTY(raptor_population) speed = 1 raptor_color = RAPTOR_YELLOW dex_description = "This breed possesses greasy fast speed, DEMON speed, making light work of long pilgrimages. It's said that a thunderclap could be heard when this breed reaches its maximum speed." - child_path = /mob/living/basic/mining/raptor/baby_raptor/yellow + child_path = /mob/living/basic/raptor/baby_raptor/yellow -/mob/living/basic/mining/raptor/blue +/mob/living/basic/raptor/blue name = "blue raptor" icon_state = "raptor_blue" icon_living = "raptor_blue" icon_dead = "raptor_blue_dead" raptor_color = RAPTOR_BLUE dex_description = "Known to produce nutritous and equally delicious milk, which is also said to possess healing properties." - child_path = /mob/living/basic/mining/raptor/baby_raptor/blue + child_path = /mob/living/basic/raptor/baby_raptor/blue -/mob/living/basic/mining/raptor/blue/Initialize(mapload) +/mob/living/basic/raptor/blue/Initialize(mapload) . = ..() AddComponent(\ /datum/component/udder,\ diff --git a/code/modules/mob/living/basic/lavaland/raptor/baby_raptor.dm b/code/modules/mob/living/basic/lavaland/raptor/baby_raptor.dm index a0a4f6aebc12a..06d9fed847088 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/baby_raptor.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/baby_raptor.dm @@ -1,4 +1,4 @@ -/mob/living/basic/mining/raptor/baby_raptor +/mob/living/basic/raptor/baby_raptor name = "baby raptor" desc = "Will this grow into something useful?" icon = 'icons/mob/simple/lavaland/raptor_baby.dmi' @@ -20,7 +20,7 @@ ///probability we are to be rolled var/roll_rate = 100 -/mob/living/basic/mining/raptor/baby_raptor/Initialize(mapload) +/mob/living/basic/raptor/baby_raptor/Initialize(mapload) . = ..() if(isnull(growth_path)) return @@ -36,14 +36,14 @@ optional_grow_behavior = CALLBACK(src, PROC_REF(ready_to_grow)),\ ) -/mob/living/basic/mining/raptor/baby_raptor/add_happiness_component() +/mob/living/basic/raptor/baby_raptor/add_happiness_component() AddComponent(/datum/component/happiness, on_petted_change = 100) -/mob/living/basic/mining/raptor/baby_raptor/proc/check_grow() +/mob/living/basic/raptor/baby_raptor/proc/check_grow() return (stat != DEAD) -/mob/living/basic/mining/raptor/baby_raptor/proc/ready_to_grow() - var/mob/living/basic/mining/raptor/grown_mob = new growth_path(get_turf(src)) +/mob/living/basic/raptor/baby_raptor/proc/ready_to_grow() + var/mob/living/basic/raptor/grown_mob = new growth_path(get_turf(src)) QDEL_NULL(grown_mob.inherited_stats) grown_mob.inherited_stats = inherited_stats inherited_stats = null @@ -51,52 +51,52 @@ ADD_TRAIT(grown_mob, TRAIT_MOB_HATCHED, INNATE_TRAIT) //pass on the hatched trait qdel(src) -/mob/living/basic/mining/raptor/baby_raptor/black +/mob/living/basic/raptor/baby_raptor/black name = "baby black raptor" icon_state = "baby_black" icon_living = "baby_black" icon_dead = "baby_black_dead" - growth_path = /mob/living/basic/mining/raptor/black + growth_path = /mob/living/basic/raptor/black roll_rate = 10 -/mob/living/basic/mining/raptor/baby_raptor/red +/mob/living/basic/raptor/baby_raptor/red name = "baby red raptor" icon_state = "baby_red" icon_living = "baby_red" icon_dead = "baby_red_dead" - growth_path = /mob/living/basic/mining/raptor/red + growth_path = /mob/living/basic/raptor/red -/mob/living/basic/mining/raptor/baby_raptor/purple +/mob/living/basic/raptor/baby_raptor/purple name = "baby purple raptor" icon_state = "baby_purple" icon_living = "baby_purple" icon_dead = "baby_purple_dead" - growth_path = /mob/living/basic/mining/raptor/purple + growth_path = /mob/living/basic/raptor/purple -/mob/living/basic/mining/raptor/baby_raptor/white +/mob/living/basic/raptor/baby_raptor/white name = "baby white raptor" icon_state = "baby_white" icon_living = "baby_white" icon_dead = "baby_white_dead" - growth_path = /mob/living/basic/mining/raptor/white + growth_path = /mob/living/basic/raptor/white -/mob/living/basic/mining/raptor/baby_raptor/yellow +/mob/living/basic/raptor/baby_raptor/yellow name = "baby yellow raptor" icon_state = "baby_yellow" icon_living = "baby_yellow" icon_dead = "baby_yellow_dead" - growth_path = /mob/living/basic/mining/raptor/yellow + growth_path = /mob/living/basic/raptor/yellow -/mob/living/basic/mining/raptor/baby_raptor/green +/mob/living/basic/raptor/baby_raptor/green name = "baby green raptor" icon_state = "baby_green" icon_living = "baby_green" icon_dead = "baby_green_dead" - growth_path = /mob/living/basic/mining/raptor/green + growth_path = /mob/living/basic/raptor/green -/mob/living/basic/mining/raptor/baby_raptor/blue +/mob/living/basic/raptor/baby_raptor/blue name = "baby blue raptor" icon_state = "baby_blue" icon_living = "baby_blue" icon_dead = "baby_blue_dead" - growth_path = /mob/living/basic/mining/raptor/blue + growth_path = /mob/living/basic/raptor/blue diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm index 323f8422d2fd0..e036be575c972 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_controller.dm @@ -10,8 +10,8 @@ ), BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor, BB_PET_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor, - BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/mining/raptor), - BB_BABIES_CHILD_TYPES = list(/mob/living/basic/mining/raptor/baby_raptor), + BB_BABIES_PARTNER_TYPES = list(/mob/living/basic/raptor), + BB_BABIES_CHILD_TYPES = list(/mob/living/basic/raptor/baby_raptor), BB_MAX_CHILDREN = 5, ) @@ -53,8 +53,8 @@ /datum/ai_controller/basic_controller/baby_raptor blackboard = list( BB_TARGETING_STRATEGY = /datum/targeting_strategy/basic/raptor, - BB_FIND_MOM_TYPES = list(/mob/living/basic/mining/raptor), - BB_IGNORE_MOM_TYPES = list(/mob/living/basic/mining/raptor/baby_raptor), + BB_FIND_MOM_TYPES = list(/mob/living/basic/raptor), + BB_IGNORE_MOM_TYPES = list(/mob/living/basic/raptor/baby_raptor), ) ai_movement = /datum/ai_movement/basic_avoidance diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm index 9dcb360c65d82..7ba0dad5561f6 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_ai_subtrees.dm @@ -2,7 +2,7 @@ target_key = BB_INJURED_RAPTOR hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/heal_raptor finding_behavior = /datum/ai_behavior/find_hunt_target/injured_raptor - hunt_targets = list(/mob/living/basic/mining/raptor) + hunt_targets = list(/mob/living/basic/raptor) hunt_chance = 70 hunt_range = 9 @@ -15,7 +15,7 @@ target_key = BB_RAPTOR_VICTIM hunting_behavior = /datum/ai_behavior/hunt_target/unarmed_attack_target/bully_raptors finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_victim - hunt_targets = list(/mob/living/basic/mining/raptor) + hunt_targets = list(/mob/living/basic/raptor) hunt_chance = 30 hunt_range = 9 @@ -38,7 +38,7 @@ target_key = BB_RAPTOR_BABY hunting_behavior = /datum/ai_behavior/hunt_target/care_for_young finding_behavior = /datum/ai_behavior/find_hunt_target/raptor_baby - hunt_targets = list(/mob/living/basic/mining/raptor/baby_raptor) + hunt_targets = list(/mob/living/basic/raptor/baby_raptor) hunt_chance = 75 hunt_range = 9 diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm index 7080c91a500c7..ef7e6fa3167c6 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_dex.dm @@ -19,7 +19,7 @@ /obj/item/raptor_dex/ui_static_data(mob/user) var/list/data = list() - var/mob/living/basic/mining/raptor/my_raptor = raptor.resolve() + var/mob/living/basic/raptor/my_raptor = raptor.resolve() data["raptor_image"] = icon2base64(getFlatIcon(image(icon = my_raptor.icon, icon_state = my_raptor.icon_state))) data["raptor_attack"] = my_raptor.melee_damage_lower @@ -44,7 +44,7 @@ data["inherited_attack_max"] = RAPTOR_INHERIT_MAX_ATTACK data["inherited_health"] = inherit.health_modifier data["inherited_health_max"] = RAPTOR_INHERIT_MAX_HEALTH - + data["inherited_traits"] = list() for(var/index in inherit.inherit_traits) data["inherited_traits"] += GLOB.raptor_inherit_traits[index] @@ -52,7 +52,7 @@ /obj/item/raptor_dex/interact_with_atom(atom/attacked_atom, mob/living/user) - if(!istype(attacked_atom, /mob/living/basic/mining/raptor)) + if(!istype(attacked_atom, /mob/living/basic/raptor)) return NONE raptor = WEAKREF(attacked_atom) diff --git a/code/modules/mob/living/basic/lavaland/raptor/raptor_egg.dm b/code/modules/mob/living/basic/lavaland/raptor/raptor_egg.dm index 9fb72239ca7a3..1b980857562e1 100644 --- a/code/modules/mob/living/basic/lavaland/raptor/raptor_egg.dm +++ b/code/modules/mob/living/basic/lavaland/raptor/raptor_egg.dm @@ -9,7 +9,7 @@ if(SSmapping.is_planetary()) icon = 'icons/mob/simple/lavaland/raptor_icebox.dmi' -/obj/item/food/egg/raptor_egg/proc/determine_growth_path(mob/living/basic/mining/raptor/dad, mob/living/basic/mining/raptor/mom) +/obj/item/food/egg/raptor_egg/proc/determine_growth_path(mob/living/basic/raptor/dad, mob/living/basic/raptor/mom) if(dad.type == mom.type) add_growth_component(dad.child_path) return @@ -24,9 +24,9 @@ add_growth_component(path) return var/list/valid_subtypes = list() - var/static/list/all_subtypes = subtypesof(/mob/living/basic/mining/raptor/baby_raptor) + var/static/list/all_subtypes = subtypesof(/mob/living/basic/raptor/baby_raptor) for(var/path in all_subtypes) - var/mob/living/basic/mining/raptor/baby_raptor/raptor_path = path + var/mob/living/basic/raptor/baby_raptor/raptor_path = path if(!prob(initial(raptor_path.roll_rate))) continue valid_subtypes += raptor_path @@ -46,7 +46,7 @@ post_hatch = CALLBACK(src, PROC_REF(post_hatch)),\ ) -/obj/item/food/egg/raptor_egg/proc/post_hatch(mob/living/basic/mining/raptor/baby) +/obj/item/food/egg/raptor_egg/proc/post_hatch(mob/living/basic/raptor/baby) if(!istype(baby)) return QDEL_NULL(baby.inherited_stats) diff --git a/code/modules/reagents/chemistry/recipes/drugs.dm b/code/modules/reagents/chemistry/recipes/drugs.dm index 3d25fa5e2b157..164e66bba9023 100644 --- a/code/modules/reagents/chemistry/recipes/drugs.dm +++ b/code/modules/reagents/chemistry/recipes/drugs.dm @@ -122,9 +122,10 @@ reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING //These drug item reactions should probably be converted to fermichem in the future. -/datum/chemical_reaction/moon_rock //botany is real easy so it requires a lot of kronkus_extract, make it cheaper if it doesnt get amde. +/datum/chemical_reaction/moon_rock //botany is real easy so it requires a lot of kronkus_extract, make it cheaper if it doesnt get made. required_reagents = list(/datum/reagent/kronkus_extract = 15, /datum/reagent/fuel = 10, /datum/reagent/ammonia = 5) mob_react = FALSE + reaction_flags = REACTION_INSTANT reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING /datum/chemical_reaction/moon_rock/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) @@ -137,6 +138,7 @@ /datum/chemical_reaction/blastoff_ampoule required_reagents = list(/datum/reagent/silver = 10, /datum/reagent/toxin/cyanide = 10, /datum/reagent/lye = 5) mob_react = FALSE + reaction_flags = REACTION_INSTANT reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING /datum/chemical_reaction/blastoff_ampoule/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) @@ -149,6 +151,7 @@ /datum/chemical_reaction/saturnx_glob required_reagents = list(/datum/reagent/lead = 5, /datum/reagent/consumable/nothing = 5, /datum/reagent/drug/maint/tar = 10) mob_react = FALSE + reaction_flags = REACTION_INSTANT reaction_tags = REACTION_TAG_EASY | REACTION_TAG_DRUG | REACTION_TAG_ORGAN | REACTION_TAG_DAMAGING /datum/chemical_reaction/saturnx_glob/on_reaction(datum/reagents/holder, datum/equilibrium/reaction, created_volume) diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index 60dcc8716cc10..069447c6f4539 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -107,7 +107,6 @@ return screwdriver_act(user, tool) /obj/machinery/rnd/multitool_act(mob/living/user, obj/item/multitool/tool) - . = ITEM_INTERACT_BLOCKING if(panel_open) wires.interact(user) return ITEM_INTERACT_SUCCESS diff --git a/code/modules/tutorials/_tutorial.dm b/code/modules/tutorials/_tutorial.dm index aecdcb7f23b88..1211f8e299355 100644 --- a/code/modules/tutorials/_tutorial.dm +++ b/code/modules/tutorials/_tutorial.dm @@ -9,6 +9,7 @@ VAR_PROTECTED/mob/user VAR_PRIVATE/atom/movable/screen/tutorial_instruction/instruction_screen + VAR_PRIVATE/atom/movable/screen/tutorial_skip/skip_button /datum/tutorial/New(mob/user) src.user = user @@ -17,10 +18,11 @@ /datum/tutorial/Destroy(force) user.client?.screen -= instruction_screen + user.client?.screen -= skip_button QDEL_NULL(instruction_screen) + QDEL_NULL(skip_button) user = null - return ..() /// Gets the [`/datum/tutorial_manager`] that owns this tutorial. @@ -70,6 +72,7 @@ if (!isnull(instruction_screen)) animate(instruction_screen, time = INSTRUCTION_SCREEN_DELAY, alpha = 0, easing = SINE_EASING) + animate(skip_button, time = INSTRUCTION_SCREEN_DELAY, alpha = 0, easing = SINE_EASING) delay += INSTRUCTION_SCREEN_DELAY QDEL_IN(src, delay) @@ -97,6 +100,10 @@ /// If a message already exists, will fade it out and replace it. /datum/tutorial/proc/show_instruction(message) PROTECTED_PROC(TRUE) + if(isnull(skip_button)) + skip_button = new + user.client?.screen += skip_button + RegisterSignal(skip_button, COMSIG_SCREEN_ELEMENT_CLICK, PROC_REF(dismiss)) if (isnull(instruction_screen)) instruction_screen = new(null, null, message, user.client) diff --git a/code/modules/tutorials/tutorial_skip.dm b/code/modules/tutorials/tutorial_skip.dm new file mode 100644 index 0000000000000..803aebc865054 --- /dev/null +++ b/code/modules/tutorials/tutorial_skip.dm @@ -0,0 +1,35 @@ +/atom/movable/screen/tutorial_skip + icon = 'icons/effects/alphacolors.dmi' + icon_state = "white" + screen_loc = "TOP,LEFT" + color = COLOR_NEARLY_ALL_BLACK + alpha = 0 + mouse_opacity = MOUSE_OPACITY_OPAQUE + layer = TUTORIAL_INSTRUCTIONS_LAYER + var/atom/movable/screen/tutorial_skip_text/skip_text + +/atom/movable/screen/tutorial_skip/Initialize(mapload, datum/hud/hud_owner) + . = ..() + transform = transform.Scale(9, 1) + skip_text = new(null, hud_owner) + vis_contents += skip_text + maptext = MAPTEXT_VCR_OSD_MONO("Remind me later") + animate(src, alpha = 245, time = 0.8 SECONDS, easing = SINE_EASING) + +/atom/movable/screen/tutorial_skip/Destroy() + QDEL_NULL(skip_text) + return ..() + +/atom/movable/screen/tutorial_skip_text + alpha = 0 + layer = TUTORIAL_INSTRUCTIONS_LAYER + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + maptext_height = 32 + maptext_width = 200 + maptext_x = 20 + maptext_y = 9 + +/atom/movable/screen/tutorial_skip_text/Initialize(mapload, datum/hud/hud_owner) + . = ..() + var/newtext = MAPTEXT_VCR_OSD_MONO("Remind me later") + animate(src, alpha = 255, time = 0.5 SECONDS, maptext=newtext) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 8e69eb10ce03f..76d193c80e87f 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -1458,7 +1458,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(usr.CanReach(src) && usr.put_in_hands(vended_item)) to_chat(usr, span_notice("You take [item_record.name] out of the slot.")) else - to_chat(usr, span_warning("[capitalize(item_record.name)] falls onto the floor!")) + to_chat(usr, span_warning("[capitalize(format_text(item_record.name))] falls onto the floor!")) SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[type]", "[item_record.product_path]")) vend_ready = TRUE @@ -1846,7 +1846,7 @@ GLOBAL_LIST_EMPTY(vending_machines_to_restock) if(user.CanReach(src) && user.put_in_hands(dispensed_item)) to_chat(user, span_notice("You take [dispensed_item.name] out of the slot.")) else - to_chat(user, span_warning("[capitalize(dispensed_item.name)] falls onto the floor!")) + to_chat(user, span_warning("[capitalize(format_text(dispensed_item.name))] falls onto the floor!")) return TRUE /obj/machinery/vending/custom/unbreakable diff --git a/html/changelogs/AutoChangeLog-pr-83024.yml b/html/changelogs/AutoChangeLog-pr-83024.yml deleted file mode 100644 index 371f59ea19802..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83024.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "by INFRARED_BARON" -delete-after: True -changes: - - image: "Changes icons of: Gygax, d-gygax, durand, ripley variants, firefighter statue, phazon & odysseus. Adds new icons for polar hide item." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83146.yml b/html/changelogs/AutoChangeLog-pr-83146.yml deleted file mode 100644 index d136e060acf84..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83146.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Ben10Omintrix" -delete-after: True -changes: - - rscadd: "adds a new fish to lava and plasma rivers, the lava loop" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83210.yml b/html/changelogs/AutoChangeLog-pr-83210.yml deleted file mode 100644 index 2f32600155199..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83210.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "EEASAS" -delete-after: True -changes: - - rscadd: "Remapped NorthStar's medbay a little bit" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83378.yml b/html/changelogs/AutoChangeLog-pr-83378.yml deleted file mode 100644 index be2d37ef775c8..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83378.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "00-Steven" -delete-after: True -changes: - - bugfix: "Smoker quirk users can select a favourite brand again." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83381.yml b/html/changelogs/AutoChangeLog-pr-83381.yml deleted file mode 100644 index fef49f22b31f0..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83381.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "DATA-xPUNGED" -delete-after: True -changes: - - bugfix: "The Lance Crew Evacuation System now moves in the right direction in Hyperspace." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83386.yml b/html/changelogs/AutoChangeLog-pr-83386.yml deleted file mode 100644 index d8d415d054544..0000000000000 --- a/html/changelogs/AutoChangeLog-pr-83386.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Rhials" -delete-after: True -changes: - - spellcheck: "Fixes a typo with latejoin AIs" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83396.yml b/html/changelogs/AutoChangeLog-pr-83396.yml new file mode 100644 index 0000000000000..860e4264c1a42 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83396.yml @@ -0,0 +1,4 @@ +author: "grungussuss" +delete-after: True +changes: + - bugfix: "changed layout of Northstar dining hall so customer bots can reach the kitchen counter" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83415.yml b/html/changelogs/AutoChangeLog-pr-83415.yml new file mode 100644 index 0000000000000..f69a1b06a4c16 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83415.yml @@ -0,0 +1,4 @@ +author: "tmyqlfpir" +delete-after: True +changes: + - bugfix: "[Ice Box Station] Dorm 1's door no longer shares ID with dorm 2's door" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-83429.yml b/html/changelogs/AutoChangeLog-pr-83429.yml new file mode 100644 index 0000000000000..501e039234d90 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-83429.yml @@ -0,0 +1,4 @@ +author: "thegrb93" +delete-after: True +changes: + - qol: "Made borg inventory not shift around depending on equipped items" \ No newline at end of file diff --git a/html/changelogs/archive/2024-05.yml b/html/changelogs/archive/2024-05.yml index 8cd87d999b83f..7d14864a58dd3 100644 --- a/html/changelogs/archive/2024-05.yml +++ b/html/changelogs/archive/2024-05.yml @@ -631,3 +631,53 @@ paganiy: - balance: Auto-aim in combat mode at mobs on the floor is disabled after the projectile passes 10 tiles. +2024-05-24: + 00-Steven: + - bugfix: Smoker quirk users can select a favourite brand again. + Ben10Omintrix: + - rscadd: adds a new fish to lava and plasma rivers, the lava loop + DATA-xPUNGED: + - bugfix: The Lance Crew Evacuation System now moves in the right direction in Hyperspace. + EEASAS: + - rscadd: Remapped NorthStar's medbay a little bit + Rhials: + - spellcheck: Fixes a typo with latejoin AIs + by INFRARED_BARON: + - image: 'Changes icons of: Gygax, d-gygax, durand, ripley variants, firefighter + statue, phazon & odysseus. Adds new icons for polar hide item.' +2024-05-25: + 00-Steven: + - bugfix: Airlock electronics created by deconstructing roundstart airlocks inherit + their cycling id properly. + - spellcheck: Examining a renamed airlock assembly no longer says it has a paper + placard that is "labelled with written on it is". + - bugfix: Mixing the reagents for moon rocks, bLaSToFF ampoules, or SaturnX globs + in amounts less than the minimum for the recipe no longer eats the reagents + without doing anything. + - bugfix: Airlocks without access requirements no longer create airlock electronics + with a broken menu. + - spellcheck: When a vendor tells you something dropped onto the floor, the line + no longer starts with a broken character in the case of cigarette boxes. + Ben10Omintrix: + - balance: you can now polymorph into raptors + - balance: raptors overall have less health and no longer have armor against ranged + attacks + BramvanZijp: + - bugfix: Fixed an inconsistency regarding the interactions between the Piercing + Hypo Borg upgrade and Hacked Borg Hypos. + Derpguy3: + - spellcheck: A handful of grammar errors in some department signs has been fixed. + Jacquerel: + - bugfix: The destructive analyser once more hungers for multitools + PapaMichael: + - bugfix: Epinephrine will prevent metabolism of all allergic reagents (instead + of just one), if taken with multiple chemicals that one is allergic to. + TiviPlus: + - qol: Added a "Remind me later" button for tutorials + Twaticus: + - image: resprites egg (and more) + jlsnow301: + - bugfix: You can no longer open the loot panel at range as a blind person and cheese + item names + nikothedude: + - code_imp: New signals for atom storage remove and insert diff --git a/icons/obj/food/containers.dmi b/icons/obj/food/containers.dmi index aea93b956fc3b..6c2eda1986633 100644 Binary files a/icons/obj/food/containers.dmi and b/icons/obj/food/containers.dmi differ diff --git a/icons/obj/service/bureaucracy.dmi b/icons/obj/service/bureaucracy.dmi index f28eb169cf0b6..e9f8347b0487b 100644 Binary files a/icons/obj/service/bureaucracy.dmi and b/icons/obj/service/bureaucracy.dmi differ diff --git a/icons/obj/service/kitchen.dmi b/icons/obj/service/kitchen.dmi index aeafe2591e9bd..ff9a3e2a58c33 100644 Binary files a/icons/obj/service/kitchen.dmi and b/icons/obj/service/kitchen.dmi differ diff --git a/icons/obj/storage/crates.dmi b/icons/obj/storage/crates.dmi index 9bc8f4d2c27e9..dc5c045aefaa5 100644 Binary files a/icons/obj/storage/crates.dmi and b/icons/obj/storage/crates.dmi differ diff --git a/tgstation.dme b/tgstation.dme index e16d18956aaff..663beb369bbf2 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5966,6 +5966,7 @@ #include "code\modules\transport\tram\tram_structures.dm" #include "code\modules\tutorials\_tutorial.dm" #include "code\modules\tutorials\tutorial_instruction.dm" +#include "code\modules\tutorials\tutorial_skip.dm" #include "code\modules\tutorials\tutorials\drop.dm" #include "code\modules\tutorials\tutorials\switch_hands.dm" #include "code\modules\unit_tests\_unit_tests.dm" diff --git a/tgui/packages/tgui/interfaces/LootPanel/LootBox.tsx b/tgui/packages/tgui/interfaces/LootPanel/LootBox.tsx index 137021b34ef77..3fb94324b6a2b 100644 --- a/tgui/packages/tgui/interfaces/LootPanel/LootBox.tsx +++ b/tgui/packages/tgui/interfaces/LootPanel/LootBox.tsx @@ -1,3 +1,4 @@ +import { BooleanLike } from 'common/react'; import { capitalizeAll, capitalizeFirst } from 'common/string'; import { useBackend } from '../../backend'; @@ -5,6 +6,10 @@ import { Tooltip } from '../../components'; import { IconDisplay } from './IconDisplay'; import { SearchGroup, SearchItem } from './types'; +type Data = { + is_blind: BooleanLike; +}; + type Props = | { item: SearchItem; @@ -14,7 +19,8 @@ type Props = }; export function LootBox(props: Props) { - const { act } = useBackend(); + const { act, data } = useBackend(); + const { is_blind } = data; let amount = 0; let item: SearchItem; @@ -29,32 +35,35 @@ export function LootBox(props: Props) { ? '???' : capitalizeFirst(item.name.split(' ')[0]).slice(0, 5); - return ( - -
-
- act('grab', { - alt: event.altKey, - ctrl: event.ctrlKey, - ref: item.ref, - shift: event.shiftKey, - }) - } - onContextMenu={(event) => { - event.preventDefault(); - act('grab', { - right: true, - ref: item.ref, - }); - }} - > - - {amount > 1 &&
{amount}
} -
- {name} + // So we can conditionally wrap tooltip + const content = ( +
+
+ act('grab', { + alt: event.altKey, + ctrl: event.ctrlKey, + ref: item.ref, + shift: event.shiftKey, + }) + } + onContextMenu={(event) => { + event.preventDefault(); + act('grab', { + right: true, + ref: item.ref, + }); + }} + > + + {amount > 1 &&
{amount}
}
- + {!is_blind && {name}} +
); + + if (is_blind) return content; + + return {content}; }