mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-25 06:00:16 +01:00
Merge commit '179a607a90ad7ec62bdaff4e6fe72af60ee56442' of https://github.com/tgstation/tgstation into upstream-24-10b
This commit is contained in:
@@ -15,7 +15,7 @@
|
||||
var/earliest_start = 20 MINUTES //The earliest world.time that an event can start (round-duration in deciseconds) default: 20 mins
|
||||
var/min_players = 0 //The minimum amount of alive, non-AFK human players on server required to start the event.
|
||||
|
||||
var/occurrences = 0 //How many times this event has occured
|
||||
var/occurrences = 0 //How many times this event has occurred
|
||||
var/max_occurrences = 20 //The maximum number of times this event can occur (naturally), it can still be forced.
|
||||
//By setting this to 0 you can effectively disable an event.
|
||||
|
||||
@@ -173,7 +173,7 @@ Runs the event
|
||||
*/
|
||||
/datum/round_event_control/proc/run_event(random = FALSE, announce_chance_override = null, admin_forced = FALSE, event_cause)
|
||||
/*
|
||||
* We clear our signals first so we dont cancel a wanted event by accident,
|
||||
* We clear our signals first so we don't cancel a wanted event by accident,
|
||||
* the majority of time the admin will probably want to cancel a single midround spawned random events
|
||||
* and not multiple events called by others admins
|
||||
* * In the worst case scenario we can still recall a event which we cancelled by accident, which is much better then to have a unwanted event
|
||||
@@ -252,7 +252,7 @@ Runs the event
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
return
|
||||
|
||||
///Annouces the event name to deadchat, override this if what an event should show to deadchat is different to its event name.
|
||||
///Announces the event name to deadchat, override this if what an event should show to deadchat is different to its event name.
|
||||
/datum/round_event/proc/announce_deadchat(random, cause)
|
||||
deadchat_broadcast(" has just been[random ? " randomly" : ""] triggered[cause ? " by [cause]" : ""]!", "<b>[control.name]</b>", message_type=DEADCHAT_ANNOUNCEMENT) //STOP ASSUMING IT'S BADMINS!
|
||||
|
||||
@@ -299,8 +299,8 @@ Runs the event
|
||||
|
||||
|
||||
|
||||
//Do not override this proc, instead use the appropiate procs.
|
||||
//This proc will handle the calls to the appropiate procs.
|
||||
//Do not override this proc, instead use the appropriate procs.
|
||||
//This proc will handle the calls to the appropriate procs.
|
||||
/datum/round_event/process()
|
||||
SHOULD_NOT_OVERRIDE(TRUE)
|
||||
if(!processing)
|
||||
|
||||
@@ -19,14 +19,14 @@
|
||||
|
||||
/datum/round_event/aurora_caelus/announce(fake)
|
||||
priority_announce("[station_name()]: A harmless cloud of ions is approaching your station, and will exhaust their energy battering the hull. Nanotrasen has approved a short break for all employees to relax and observe this very rare event. During this time, starlight will be bright but gentle, shifting between quiet green and blue colors. Any staff who would like to view these lights for themselves may proceed to the area nearest to them with viewing ports to open space. We hope you enjoy the lights.",
|
||||
sound = 'sound/misc/notice2.ogg',
|
||||
sound = 'sound/announcer/notice/notice2.ogg',
|
||||
sender_override = "Nanotrasen Meteorology Division")
|
||||
if (fake)
|
||||
return
|
||||
for(var/V in GLOB.player_list)
|
||||
var/mob/M = V
|
||||
if((M.client.prefs.read_preference(/datum/preference/toggle/sound_midi)) && is_station_level(M.z))
|
||||
M.playsound_local(M, 'sound/ambience/aurora_caelus.ogg', 20, FALSE, pressure_affected = FALSE)
|
||||
M.playsound_local(M, 'sound/ambience/aurora_caelus/aurora_caelus.ogg', 20, FALSE, pressure_affected = FALSE)
|
||||
fade_space(fade_in = TRUE)
|
||||
fade_kitchen(fade_in = TRUE)
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
fade_space()
|
||||
fade_kitchen()
|
||||
priority_announce("The aurora caelus event is now ending. Starlight conditions will slowly return to normal. When this has concluded, please return to your workplace and continue work as normal. Have a pleasant shift, [station_name()], and thank you for watching with us.",
|
||||
sound = 'sound/misc/notice2.ogg',
|
||||
sound = 'sound/announcer/notice/notice2.ogg',
|
||||
sender_override = "Nanotrasen Meteorology Division")
|
||||
|
||||
/datum/round_event/aurora_caelus/proc/fade_space(fade_in = FALSE)
|
||||
|
||||
@@ -112,10 +112,10 @@
|
||||
earthquake_witness.playsound_local(
|
||||
earthquake_witness,
|
||||
pick(
|
||||
'sound/misc/earth_rumble_distant1.ogg',
|
||||
'sound/misc/earth_rumble_distant2.ogg',
|
||||
'sound/misc/earth_rumble_distant3.ogg',
|
||||
'sound/misc/earth_rumble_distant4.ogg',
|
||||
'sound/ambience/earth_rumble/earth_rumble_distant1.ogg',
|
||||
'sound/ambience/earth_rumble/earth_rumble_distant2.ogg',
|
||||
'sound/ambience/earth_rumble/earth_rumble_distant3.ogg',
|
||||
'sound/ambience/earth_rumble/earth_rumble_distant4.ogg',
|
||||
),
|
||||
75,
|
||||
)
|
||||
@@ -150,12 +150,12 @@
|
||||
playsound(epicenter, 'sound/misc/metal_creak.ogg', 125, TRUE)
|
||||
|
||||
/datum/round_event/earthquake/end()
|
||||
playsound(epicenter, 'sound/misc/earth_rumble.ogg', 125)
|
||||
playsound(epicenter, 'sound/ambience/earth_rumble/earth_rumble.ogg', 125)
|
||||
for(var/mob/earthquake_witness as anything in GLOB.player_list)
|
||||
if(!is_station_level(earthquake_witness.z) || !is_mining_level(earthquake_witness.z))
|
||||
continue
|
||||
shake_camera(earthquake_witness, 2 SECONDS, 4)
|
||||
earthquake_witness.playsound_local(earthquake_witness, 'sound/effects/explosionfar.ogg', 75)
|
||||
earthquake_witness.playsound_local(earthquake_witness, 'sound/effects/explosion/explosionfar.ogg', 75)
|
||||
|
||||
// Step two of the destruction, which detonates the turfs in the earthquake zone. There is no actual explosion, meaning stuff around the earthquake zone is perfectly safe.
|
||||
// All turfs, and everything else that IS in the earthquake zone, however, will behave as if it were bombed.
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
gear_fugitive_leader(leader, landing_turf, backstory)
|
||||
|
||||
//after spawning
|
||||
playsound(src, 'sound/weapons/emitter.ogg', 50, TRUE)
|
||||
playsound(src, 'sound/items/weapons/emitter.ogg', 50, TRUE)
|
||||
new /obj/item/storage/toolbox/mechanical(landing_turf) //so they can actually escape maint
|
||||
var/hunter_backstory = pick(
|
||||
HUNTER_PACK_COPS,
|
||||
@@ -72,7 +72,7 @@
|
||||
player_mind.active = TRUE
|
||||
var/mob/living/carbon/human/S = new(landing_turf)
|
||||
player_mind.transfer_to(S)
|
||||
player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/fugitive))
|
||||
player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/fugitive))
|
||||
player_mind.special_role = ROLE_FUGITIVE
|
||||
player_mind.add_antag_datum(/datum/antagonist/fugitive)
|
||||
var/datum/antagonist/fugitive/fugitiveantag = player_mind.has_antag_datum(/datum/antagonist/fugitive)
|
||||
|
||||
@@ -25,10 +25,10 @@
|
||||
|
||||
var/mob/living/basic/morph/corpus_accipientis = new(spawn_loc)
|
||||
player_mind.transfer_to(corpus_accipientis)
|
||||
player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/morph))
|
||||
player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/morph))
|
||||
player_mind.special_role = ROLE_MORPH
|
||||
player_mind.add_antag_datum(/datum/antagonist/morph)
|
||||
SEND_SOUND(corpus_accipientis, sound('sound/magic/mutate.ogg'))
|
||||
SEND_SOUND(corpus_accipientis, sound('sound/effects/magic/mutate.ogg'))
|
||||
message_admins("[ADMIN_LOOKUPFLW(corpus_accipientis)] has been made into a morph by an event.")
|
||||
corpus_accipientis.log_message("was spawned as a morph by an event.", LOG_GAME)
|
||||
spawned_mobs += corpus_accipientis
|
||||
|
||||
@@ -27,11 +27,11 @@
|
||||
|
||||
var/mob/living/carbon/human/S = new (spawn_loc)
|
||||
player_mind.transfer_to(S)
|
||||
player_mind.set_assigned_role(SSjob.GetJobType(/datum/job/nightmare))
|
||||
player_mind.set_assigned_role(SSjob.get_job_type(/datum/job/nightmare))
|
||||
player_mind.special_role = ROLE_NIGHTMARE
|
||||
player_mind.add_antag_datum(/datum/antagonist/nightmare)
|
||||
S.set_species(/datum/species/shadow/nightmare)
|
||||
playsound(S, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1)
|
||||
playsound(S, 'sound/effects/magic/ethereal_exit.ogg', 50, TRUE, -1)
|
||||
message_admins("[ADMIN_LOOKUPFLW(S)] has been made into a Nightmare by an event.")
|
||||
S.log_message("was spawned as a Nightmare by an event.", LOG_GAME)
|
||||
spawned_mobs += S
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
operative.randomize_human_appearance(~RANDOMIZE_SPECIES)
|
||||
operative.dna.update_dna_identity()
|
||||
var/datum/mind/Mind = new /datum/mind(chosen_one.key)
|
||||
Mind.set_assigned_role(SSjob.GetJobType(/datum/job/lone_operative))
|
||||
Mind.set_assigned_role(SSjob.get_job_type(/datum/job/lone_operative))
|
||||
Mind.special_role = ROLE_LONE_OPERATIVE
|
||||
Mind.active = TRUE
|
||||
Mind.transfer_to(operative)
|
||||
|
||||
@@ -104,9 +104,9 @@ GLOBAL_LIST_INIT(high_priority_sentience, typecacheof(list(
|
||||
spawned_mobs += selected
|
||||
|
||||
to_chat(selected, span_userdanger("Hello world!"))
|
||||
to_chat(selected, "<span class='warning'>Due to freak radiation and/or chemicals \
|
||||
to_chat(selected, span_warning("Due to freak radiation and/or chemicals \
|
||||
and/or lucky chance, you have gained human level intelligence \
|
||||
and the ability to speak and understand human language!</span>")
|
||||
and the ability to speak and understand human language!"))
|
||||
|
||||
return SUCCESSFUL_SPAWN
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
var/mob/living/basic/space_dragon/dragon = new(spawn_location)
|
||||
dragon.key = chosen_one.key
|
||||
dragon.mind.add_antag_datum(/datum/antagonist/space_dragon)
|
||||
playsound(dragon, 'sound/magic/ethereal_exit.ogg', 50, TRUE, -1)
|
||||
playsound(dragon, 'sound/effects/magic/ethereal_exit.ogg', 50, TRUE, -1)
|
||||
message_admins("[ADMIN_LOOKUPFLW(dragon)] has been made into a Space Dragon by an event.")
|
||||
dragon.log_message("was spawned as a Space Dragon by an event.", LOG_GAME)
|
||||
spawned_mobs += dragon
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
if(winner.has_status_effect(/datum/status_effect/exercised)) //Stuff that should "block" a heart attack rather than just deny eligibility for one goes here.
|
||||
winner.visible_message(span_warning("[winner] grunts and clutches their chest for a moment, catching [winner.p_their()] breath."), span_medal("Your chest lurches in pain for a brief moment, which quickly fades. \
|
||||
You feel like you've just avoided a serious health disaster."), span_hear("You hear someone's breathing sharpen for a moment, followed by a sigh of relief."), 4)
|
||||
winner.playsound_local(get_turf(winner), 'sound/health/slowbeat.ogg', 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE)
|
||||
winner.playsound_local(get_turf(winner), 'sound/effects/health/slowbeat.ogg', 40, 0, channel = CHANNEL_HEARTBEAT, use_reverb = FALSE)
|
||||
winner.Stun(3 SECONDS)
|
||||
if(winner.client)
|
||||
winner.client.give_award(/datum/award/achievement/misc/healthy, winner)
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
|
||||
//Bunny Suit
|
||||
/obj/item/clothing/head/costume/bunnyhead
|
||||
name = "Easter Bunny Head"
|
||||
name = "Easter Bunny head"
|
||||
icon_state = "bunnyhead"
|
||||
inhand_icon_state = null
|
||||
desc = "Considerably more cute than 'Frank'."
|
||||
@@ -75,7 +75,7 @@
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR|HIDESNOUT
|
||||
|
||||
/obj/item/clothing/suit/costume/bunnysuit
|
||||
name = "Easter Bunny Suit"
|
||||
name = "easter bunny suit"
|
||||
desc = "Hop Hop Hop!"
|
||||
icon_state = "bunnysuit"
|
||||
icon = 'icons/obj/clothing/suits/costume.dmi'
|
||||
@@ -88,7 +88,7 @@
|
||||
|
||||
//Bunny bag!
|
||||
/obj/item/storage/backpack/satchel/bunnysatchel
|
||||
name = "Easter Bunny Satchel"
|
||||
name = "easter bunny satchel"
|
||||
desc = "Good for your eyes."
|
||||
icon_state = "satchel_carrot"
|
||||
inhand_icon_state = null
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
spawn_meteor(list(/obj/effect/meteor/dark_matteor = 1), null, target)
|
||||
|
||||
/datum/round_event/dark_matteor/announce(fake)
|
||||
priority_announce("Warning. Excessive tampering of meteor satellites has attracted a dark matt-eor. Signature approaching [GLOB.station_name]. Please brace for impact.", "Meteor Alert", 'sound/misc/airraid.ogg')
|
||||
priority_announce("Warning. Excessive tampering of meteor satellites has attracted a dark matt-eor. Signature approaching [GLOB.station_name]. Please brace for impact.", "Meteor Alert", 'sound/announcer/alarm/airraid.ogg')
|
||||
|
||||
/datum/event_admin_setup/warn_admin/dark_matteor
|
||||
warning_text = "Dark Matt-eors spawn singularities. The round is ending once a dark matt-eor hits the station. Proceed anyways?"
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
priority_announce("Due to [cause], [plural] [name] have [movement] \
|
||||
into the [location].", "Migration Alert",
|
||||
'sound/creatures/mousesqueek.ogg')
|
||||
'sound/mobs/non-humanoids/mouse/mousesqueek.ogg')
|
||||
|
||||
/datum/round_event/mice_migration/start()
|
||||
SSminor_mapping.trigger_migration(rand(minimum_mice, maximum_mice))
|
||||
|
||||
@@ -72,11 +72,11 @@
|
||||
|
||||
/datum/round_event/portal_storm/announce(fake)
|
||||
set waitfor = 0
|
||||
sound_to_playing_players('sound/magic/lightning_chargeup.ogg')
|
||||
sound_to_playing_players('sound/effects/magic/lightning_chargeup.ogg')
|
||||
sleep(8 SECONDS)
|
||||
priority_announce("Massive bluespace anomaly detected en route to [station_name()]. Brace for impact.")
|
||||
sleep(2 SECONDS)
|
||||
sound_to_playing_players('sound/magic/lightningbolt.ogg')
|
||||
sound_to_playing_players('sound/effects/magic/lightningbolt.ogg')
|
||||
|
||||
/datum/round_event/portal_storm/tick()
|
||||
spawn_effects(get_random_station_turf())
|
||||
@@ -112,7 +112,7 @@
|
||||
return
|
||||
T = get_step(T, SOUTHWEST) //align center of image with turf
|
||||
T.flick_overlay_static(storm_appearances[GET_TURF_PLANE_OFFSET(T) + 1], 15)
|
||||
playsound(T, 'sound/magic/lightningbolt.ogg', rand(80, 100), TRUE)
|
||||
playsound(T, 'sound/effects/magic/lightningbolt.ogg', rand(80, 100), TRUE)
|
||||
|
||||
/datum/round_event/portal_storm/proc/spawn_hostile()
|
||||
if(!hostile_types || !hostile_types.len)
|
||||
|
||||
@@ -180,7 +180,7 @@
|
||||
if(thorn && prob(40) && !HAS_TRAIT(victim, TRAIT_PIERCEIMMUNE)) //If we found the thorns mutation there is now a chance to get stung instead of lashed or smashed.
|
||||
victim.apply_damage(50, BRUTE, def_zone = limb, wound_bonus = rand(-20,10), sharpness = SHARP_POINTY) //This one gets a bit lower damage because it ignores armor.
|
||||
victim.Stun(1 SECONDS) //Stopped in place for a moment.
|
||||
playsound(living_mob, 'sound/weapons/pierce.ogg', 50, TRUE, -1)
|
||||
playsound(living_mob, 'sound/items/weapons/pierce.ogg', 50, TRUE, -1)
|
||||
living_mob.visible_message(span_danger("[living_mob] is nailed by a sharp thorn!"), \
|
||||
span_userdanger("You are nailed by a sharp thorn!"))
|
||||
log_combat(vine, living_mob, "aggressively pierced") //"Aggressively" for easy ctrl+F'ing in the attack logs.
|
||||
@@ -188,7 +188,7 @@
|
||||
if(prob(80) && !HAS_TRAIT(victim, TRAIT_PIERCEIMMUNE))
|
||||
victim.apply_damage(60, BRUTE, def_zone = limb, blocked = armor, wound_bonus = rand(-20,10), sharpness = SHARP_EDGED)
|
||||
victim.Knockdown(2 SECONDS)
|
||||
playsound(victim, 'sound/weapons/whip.ogg', 50, TRUE, -1)
|
||||
playsound(victim, 'sound/items/weapons/whip.ogg', 50, TRUE, -1)
|
||||
living_mob.visible_message(span_danger("[living_mob] is lacerated by an outburst of vines!"), \
|
||||
span_userdanger("You are lacerated by an outburst of vines!"))
|
||||
log_combat(vine, living_mob, "aggressively lacerated")
|
||||
@@ -203,7 +203,7 @@
|
||||
log_combat(vine, living_mob, "aggressively smashed")
|
||||
else //Living but not a carbon? Maybe a silicon? Can't be wounded so have a big chunk of simple bruteloss with no special effects. They can be entangled.
|
||||
living_mob.adjustBruteLoss(75)
|
||||
playsound(living_mob, 'sound/weapons/whip.ogg', 50, TRUE, -1)
|
||||
playsound(living_mob, 'sound/items/weapons/whip.ogg', 50, TRUE, -1)
|
||||
living_mob.visible_message(span_danger("[living_mob] is brutally threshed by [vine]!"), \
|
||||
span_userdanger("You are brutally threshed by [vine]!"))
|
||||
log_combat(vine, living_mob, "aggressively spread into") //You aren't being attacked by the vines. You just happen to stand in their way.
|
||||
|
||||
@@ -95,11 +95,11 @@
|
||||
switch(damage_type)
|
||||
if(BRUTE)
|
||||
if(damage_amount)
|
||||
playsound(src, 'sound/weapons/slash.ogg', 50, TRUE)
|
||||
playsound(src, 'sound/items/weapons/slash.ogg', 50, TRUE)
|
||||
else
|
||||
playsound(src, 'sound/weapons/tap.ogg', 50, TRUE)
|
||||
playsound(src, 'sound/items/weapons/tap.ogg', 50, TRUE)
|
||||
if(BURN)
|
||||
playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE)
|
||||
playsound(src.loc, 'sound/items/tools/welder.ogg', 100, TRUE)
|
||||
|
||||
/obj/structure/spacevine/proc/on_entered(datum/source, atom/movable/movable)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
|
||||
/datum/round_event/supermatter_surge/announce(fake)
|
||||
var/class_to_announce = fake ? pick(1, 2, 3, 4) : surge_class
|
||||
priority_announce("The Crystal Integrity Monitoring System has detected unusual atmospheric properties in the supermatter chamber, energy output from the supermatter crystal has increased significantly. Engineering intervention is required to stabilize the engine.", "Class [class_to_announce] Supermatter Surge Alert", 'sound/machines/engine_alert3.ogg')
|
||||
priority_announce("The Crystal Integrity Monitoring System has detected unusual atmospheric properties in the supermatter chamber, energy output from the supermatter crystal has increased significantly. Engineering intervention is required to stabilize the engine.", "Class [class_to_announce] Supermatter Surge Alert", 'sound/machines/engine_alert/engine_alert3.ogg')
|
||||
|
||||
/datum/round_event/supermatter_surge/start()
|
||||
engine.bullet_energy = surge_class + SURGE_BULLET_ENERGY_ADDITION
|
||||
@@ -126,7 +126,7 @@
|
||||
fakeable = FALSE
|
||||
|
||||
/datum/round_event/supermatter_surge/poly/announce(fake)
|
||||
priority_announce("The Crystal Integrity Monitoring System has detected unusual parrot type resonance in the supermatter chamber, energy output from the supermatter crystal has increased significantly. Engineering intervention is required to stabilize the engine.", "Class P Supermatter Surge Alert", 'sound/machines/engine_alert3.ogg')
|
||||
priority_announce("The Crystal Integrity Monitoring System has detected unusual parrot type resonance in the supermatter chamber, energy output from the supermatter crystal has increased significantly. Engineering intervention is required to stabilize the engine.", "Class P Supermatter Surge Alert", 'sound/machines/engine_alert/engine_alert3.ogg')
|
||||
|
||||
#undef SURGE_DURATION_MIN
|
||||
#undef SURGE_DURATION_MAX
|
||||
|
||||
@@ -7,5 +7,5 @@
|
||||
description = "The nuclear explosion cutscene begins to play to scare the crew."
|
||||
|
||||
/datum/round_event/wizard/fake_explosion/start()
|
||||
sound_to_playing_players('sound/machines/alarm.ogg')
|
||||
sound_to_playing_players('sound/announcer/alarm/nuke_alarm.ogg', 70)
|
||||
addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(play_cinematic), /datum/cinematic/nuke/fake, world), 10 SECONDS)
|
||||
|
||||
@@ -38,7 +38,7 @@ GLOBAL_DATUM(rpgtitle_controller, /datum/rpgtitle_controller)
|
||||
/datum/rpgtitle_controller/proc/on_crewmember_join(datum/source, mob/living/new_crewmember, rank)
|
||||
SIGNAL_HANDLER
|
||||
|
||||
var/datum/job/job = SSjob.GetJob(rank)
|
||||
var/datum/job/job = SSjob.get_job(rank)
|
||||
|
||||
//we must prepare for the mother of all strings
|
||||
new_crewmember.maptext_height = max(new_crewmember.maptext_height, 32)
|
||||
|
||||
Reference in New Issue
Block a user