diff --git a/code/game/objects/structures/lavaland/ore_vent.dm b/code/game/objects/structures/lavaland/ore_vent.dm index adf888a2d9c42..a6933d534689b 100644 --- a/code/game/objects/structures/lavaland/ore_vent.dm +++ b/code/game/objects/structures/lavaland/ore_vent.dm @@ -9,6 +9,7 @@ desc = "An ore vent, brimming with underground ore. Scan with an advanced mining scanner to start extracting ore from it." icon = 'icons/obj/mining_zones/terrain.dmi' icon_state = "ore_vent" + base_icon_state = "ore_vent" move_resist = MOVE_FORCE_EXTREMELY_STRONG resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF //This thing will take a beating. anchored = TRUE @@ -91,7 +92,7 @@ /obj/structure/ore_vent/Destroy() SSore_generation.possible_vents -= src - node = null + reset_drone(success = FALSE) if(tapped) SSore_generation.processed_vents -= src return ..() @@ -266,28 +267,40 @@ * Arguments: * - force: Set to true if you want to just skip all checks and make the vent start producing boulders. */ -/obj/structure/ore_vent/proc/handle_wave_conclusion(force = FALSE) +/obj/structure/ore_vent/proc/handle_wave_conclusion(datum/source, force = FALSE) SIGNAL_HANDLER SEND_SIGNAL(src, COMSIG_VENT_WAVE_CONCLUDED) COOLDOWN_RESET(src, wave_cooldown) particles = null - if(QDELETED(node) && !force) - visible_message(span_danger("\the [src] creaks and groans as the mining attempt fails, and the vent closes back up.")) - icon_state = initial(icon_state) - update_appearance(UPDATE_ICON_STATE) - node = null - return //Bad end, try again. - else if(!QDELETED(node) && get_turf(node) != get_turf(src) && !force) - visible_message(span_danger("The [node] detaches from the [src], and the vent closes back up!")) - icon_state = initial(icon_state) - update_appearance(UPDATE_ICON_STATE) - UnregisterSignal(node, COMSIG_MOVABLE_MOVED) - node.pre_escape(success = FALSE) - node = null + if(force) + initiate_wave_win() + return + + if(QDELETED(node)) + initiate_wave_loss(loss_message = "\the [src] creaks and groans as the mining attempt fails, and the vent closes back up.") + return + + if(get_turf(node) != get_turf(src)) + initiate_wave_loss(loss_message = "The [node] detaches from the [src], and the vent closes back up!") return //Start over! + initiate_wave_win() + +/** + * Handles reseting our ore vent to its original state so we can start over + */ +/obj/structure/ore_vent/proc/initiate_wave_loss(loss_message) + visible_message(span_danger(loss_message)) + icon_state = base_icon_state + update_appearance(UPDATE_ICON_STATE) + reset_drone(success = FALSE) + +/** + * Handles winning the event, gives everyone a payout and start boulder production + */ +/obj/structure/ore_vent/proc/initiate_wave_win() tapped = TRUE //The Node Drone has survived the wave defense, and the ore vent is tapped. SSore_generation.processed_vents += src log_game("Ore vent [key_name_and_tag(src)] was tapped") @@ -296,7 +309,6 @@ icon_state = icon_state_tapped update_appearance(UPDATE_ICON_STATE) qdel(GetComponent(/datum/component/gps)) - UnregisterSignal(node, COMSIG_QDELETING) for(var/mob/living/miner in range(7, src)) //Give the miners who are near the vent points and xp. var/obj/item/card/id/user_id_card = miner.get_idcard(TRUE) @@ -308,10 +320,18 @@ if(user_id_card.registered_account) user_id_card.registered_account.mining_points += point_reward_val user_id_card.registered_account.bank_card_talk("You have been awarded [point_reward_val] mining points for your efforts.") - node?.pre_escape() //Visually show the drone is done and flies away. - node = null + reset_drone(success = TRUE) add_overlay(mutable_appearance('icons/obj/mining_zones/terrain.dmi', "well", ABOVE_MOB_LAYER)) +/** + * Sends our node back to base and cleans up after the reference + */ +/obj/structure/ore_vent/proc/reset_drone(success) + if(!QDELETED(node)) + node.pre_escape(success = success) + UnregisterSignal(node, list(COMSIG_QDELETING, COMSIG_MOVABLE_MOVED)) + node = null + /** * Called when the ore vent is tapped by a scanning device. * Gives a readout of the ores available in the vent that gets added to the description, diff --git a/html/changelogs/AutoChangeLog-pr-2311.yml b/html/changelogs/AutoChangeLog-pr-2311.yml new file mode 100644 index 0000000000000..dc6ea511a24e4 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2311.yml @@ -0,0 +1,4 @@ +author: "Kingsley-95" +delete-after: True +changes: + - rscadd: "Black-Backed Jackal tail" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2320.yml b/html/changelogs/AutoChangeLog-pr-2320.yml new file mode 100644 index 0000000000000..53fd7fdf60fdc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2320.yml @@ -0,0 +1,4 @@ +author: "xPokee" +delete-after: True +changes: + - qol: "you can now toggle seeing end credits in preferences" \ No newline at end of file diff --git a/modular_zubbers/code/modules/credits/credits.dm b/modular_zubbers/code/modules/credits/credits.dm index b49f7ca0daca0..a955d980f8424 100644 --- a/modular_zubbers/code/modules/credits/credits.dm +++ b/modular_zubbers/code/modules/credits/credits.dm @@ -36,6 +36,9 @@ GLOBAL_LIST(end_titles) /client/proc/RollCredits() set waitfor = FALSE + var/credit_pref = mob.client?.prefs?.read_preference(/datum/preference/toggle/see_credits) + if(!credit_pref) + return LAZYINITLIST(credits) @@ -193,6 +196,13 @@ GLOBAL_LIST(end_titles) return titles +/// Enables the choice of players disabling seeing the credits +/datum/preference/toggle/see_credits + category = PREFERENCE_CATEGORY_GAME_PREFERENCES + savefile_key = "see_credits" + savefile_identifier = PREFERENCE_PLAYER + default_value = TRUE + #undef CREDIT_ROLL_SPEED #undef CREDIT_SPAWN_SPEED #undef CREDIT_ANIMATE_HEIGHT diff --git a/modular_zubbers/code/modules/customization/sprite_accessories/tails.dm b/modular_zubbers/code/modules/customization/sprite_accessories/tails.dm index e660c7e155013..040fe8ee877b8 100644 --- a/modular_zubbers/code/modules/customization/sprite_accessories/tails.dm +++ b/modular_zubbers/code/modules/customization/sprite_accessories/tails.dm @@ -21,6 +21,11 @@ icon_state = "rattlesnake" icon = 'modular_zubbers/icons/customization/tails.dmi' +/datum/sprite_accessory/tails/mammal/blackjackal + name = "Black-Backed Jackal" + icon_state = "blackjackal" + icon = 'modular_zubbers/icons/customization/tails.dmi' + /datum/sprite_accessory/tails/mammal/wagging/gecko name = "Gecko" icon_state = "gecko" diff --git a/modular_zubbers/icons/customization/tails.dmi b/modular_zubbers/icons/customization/tails.dmi index ac4582210bcd2..a0cb631774852 100644 Binary files a/modular_zubbers/icons/customization/tails.dmi and b/modular_zubbers/icons/customization/tails.dmi differ diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bubber/see_credits.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bubber/see_credits.tsx new file mode 100644 index 0000000000000..201e3dc04a28f --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/game_preferences/bubber/see_credits.tsx @@ -0,0 +1,8 @@ +import { CheckboxInput, FeatureToggle } from '../../base'; + +export const see_credits: FeatureToggle = { + name: 'See Roundend Credits', + category: 'GAMEPLAY', + description: 'When enabled, you will see the credits sequence at roundend.', + component: CheckboxInput, +};