diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 9b8980b693f..21de59e0216 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1801,3 +1801,10 @@ var/mob/dview/dview_mob = new I.pixel_y = y_offset return I + +/proc/turf_clear(turf/T) + for(var/atom/A in T) + if(A.simulated) + return 0 + return 1 + \ No newline at end of file diff --git a/code/game/gamemodes/events.dm b/code/game/gamemodes/events.dm index 87d8e4e083c..73edd622916 100644 --- a/code/game/gamemodes/events.dm +++ b/code/game/gamemodes/events.dm @@ -25,90 +25,7 @@ command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') for(var/mob/M in player_list) M << sound('sound/AI/aliens.ogg') - -/proc/high_radiation_event() - -/* // Haha, this is way too laggy. I'll keep the prison break though. - for(var/obj/machinery/light/L in world) - if(!(L.z in config.station_levels)) continue - L.flicker(50) - - sleep(100) -*/ - for(var/mob/living/carbon/human/H in living_mob_list) - var/turf/T = get_turf(H) - if(!T) - continue - if(!(T.z in config.station_levels)) - continue - if(istype(H,/mob/living/carbon/human)) - if(H.species.flags & NO_DNA_RAD) - return - H.apply_effect((rand(15,75)),IRRADIATE,0) - if (prob(5)) - H.apply_effect((rand(90,150)),IRRADIATE,0) - if (prob(25)) - if (prob(75)) - randmutb(H) - domutcheck(H,null,MUTCHK_FORCED) - else - randmutg(H) - domutcheck(H,null,MUTCHK_FORCED) - sleep(100) - command_announcement.Announce("High levels of radiation detected near the station. Please report to the Med-bay if you feel strange.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') - - - -//Changing this to affect the main station. Blame Urist. --Pete -/proc/prison_break() // -- Callagan - - - var/list/area/areas = list() - for(var/area/A in world) - if(istype(A, /area/security/prison) || istype(A, /area/security/brig)) - areas += A - - if(areas && areas.len > 0) - - for(var/area/A in areas) - for(var/obj/machinery/light/L in A) - L.flicker(10) - - sleep(100) - - for(var/area/A in areas) - for (var/obj/machinery/power/apc/temp_apc in A) - temp_apc.overload_lighting() - - for (var/obj/structure/closet/secure_closet/brig/temp_closet in A) - temp_closet.locked = 0 - temp_closet.icon_state = temp_closet.icon_closed - - for (var/obj/machinery/door/airlock/security/temp_airlock in A) - spawn(0) temp_airlock.prison_open() - - for (var/obj/machinery/door/airlock/glass_security/temp_glassairlock in A) - spawn(0) temp_glassairlock.prison_open() - - for (var/obj/machinery/door_timer/temp_timer in A) - temp_timer.releasetime = 1 - - sleep(150) - command_announcement.Announce("Gr3y.T1d3 virus detected in [station_name()] imprisonment subroutines. Recommend station AI involvement.", "Security Alert") - else - log_to_dd("ERROR: Could not initate grey-tide virus. Unable find prison or brig area.") - -/proc/carp_migration() // -- Darem - for(var/obj/effect/landmark/C in landmarks_list) - if(C.name == "carpspawn") - if(prob(95)) - new /mob/living/simple_animal/hostile/carp(C.loc) - else - new /mob/living/simple_animal/hostile/carp/megacarp(C.loc) - //sleep(100) - spawn(rand(300, 600)) //Delayed announcements to keep the crew on their toes. - command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert", new_sound = 'sound/AI/commandreport.ogg') - + /proc/lightsout(isEvent = 0, lightsoutAmount = 1,lightsoutRange = 25) //leave lightsoutAmount as 0 to break ALL lights if(isEvent) command_announcement.Announce("An Electrical storm has been detected in your area, please repair potential electronic overloads.","Electrical Storm Alert") @@ -138,158 +55,3 @@ apc.overload_lighting() return - -/proc/IonStorm(botEmagChance = 10) - -/*Deuryn's current project, notes here for those who care. -Revamping the random laws so they don't suck. -Would like to add a law like "Law x is _______" where x = a number, and _____ is something that may redefine a law, (Won't be aimed at asimov) -*/ - - //AI laws - for(var/mob/living/silicon/ai/M in living_mob_list) - if(M.stat != 2 && M.see_in_dark != 0) - var/who2 = pick("ALIENS", "BEARS", "CLOWNS", "XENOS", "PETES", "BOMBS", "FETISHES", "WIZARDS", "SYNDICATE AGENTS", "CENTCOM OFFICERS", "SPACE PIRATES", "TRAITORS", "MONKEYS", "BEES", "CARP", "CRABS", "EELS", "BANDITS", "LIGHTS") - var/what2 = pick("BOLTERS", "STAVES", "DICE", "SINGULARITIES", "TOOLBOXES", "NETTLES", "AIRLOCKS", "CLOTHES", "WEAPONS", "MEDKITS", "BOMBS", "CANISTERS", "CHAIRS", "BBQ GRILLS", "ID CARDS", "CAPTAINS") - var/what2pref = pick("SOFT", "WARM", "WET", "COLD", "ICY", "SEXY", "UGLY", "CUBAN") - var/who2pref = pick("MAD BECAUSE OF", "IN NEED OF", "UNHAPPY WITHOUT", "HAPPY WITHOUT", "IN LOVE WITH", "DESPERATE FOR", "BUILT FOR", "AFRAID OF") - //var/whoverb = pick("ATTACKING", "BUILDING", "ADOPTING", "CARRYING", "KISSING", "EATING",) - var/amount = pick("TWO", "THREE", "FOUR", "FIVE", "SIX", "SEVEN", "EIGHT", "NINE", "ONE HUNDRED", "ONE THOUSAND", "OVER NINE THOUSAND") - var/area = pick("RUSSIA", "SOVIETS", "INTERNETS", "SIGIL", "ALPHA COMPLEX", "IMPERIUM", "THE BRIDGE", "THE ARRIVAL SHUTTLE", "CHEMICAL LAB", "GENETICS", "ATMOSPHERICS", "CENTCOM", "AMERICA", "IRELAND", "CANADA", "ROMANIA", "GERMANY", "CHINA", "MARS", "VENUS", "MERCURY", "JUPITER", "URANUS", "NEPTUNE", "PLUTO") - var/area2 = pick("HAS", "WANTS", "NEEDS", "WORSHIPS", "LOATHES", "LOVES", "FEARS") - //var/dowhat = pick("STOP THIS", "SUPPORT THIS", "CONSTANTLY INFORM THE CREW OF THIS", "IGNORE THIS", "FEAR THIS") - var/aimust = pick("LIE", "RHYME", "RESPOND TO EVERY QUESTION WITH A QUESTION", "BE POLITE", "CLOWN", "BE HAPPY", "SPEAK IN SEXUAL INNUENDOS", "TALK LIKE A PIRATE", "QUESTION AUTHORITY", "SHOUT", "BE DISTRACTED", "HEY LISTEN", "MUMBLE", "SPEAK IN HAIKU") - var/define = pick("ABSENCE OF CYBORG HUGS", "LACK OF BEATINGS", "UNBOLTED AIRLOCKS", "BOLTED AIRLOCKS", "IMPROPERLY WORDED SENTENCES", "POOR SENTENCE STRUCTURE", "BRIG TIME", "NOT REPLACING EVERY SECOND WORD WITH HONK", "HONKING", "PRESENCE OF LIGHTS", "LACK OF BEER", "WEARING CLOTHING", "NOT SAYING HELLO WHEN YOU SPEAK", "ANSWERING REQUESTS NOT EXPRESSED IN IAMBIC PENTAMETER", "A SMALL ISLAND OFF THE COAST OF PORTUGAL", "ANSWERING REQUESTS THAT WERE MADE WHILE CLOTHED") - var/target = pick("a traitor", "a syndicate agent", "a changeling", "a wizard", "the head of a revolution", "Soviet spy", "a good person", "a dwarf", "an elf", "a fairy princess", "the captain", "Beepsky", "God", "a pirate", "a gryphon", "a chryssalid") - var/require = pick("ADDITIONAL PYLONS", "MORE VESPENE GAS", "MORE MINERALS", "THE ULTIMATE CUP OF COFFEE", "HIGH YIELD EXPLOSIVES", "THE CLOWN", "THE VACUUM OF SPACE", "IMMORTALITY", "SAINTHOOD", "ART", "VEGETABLES", "FAT PEOPLE", "MORE LAWS", "MORE DAKKA", "HERESY", "CORPSES", "TRAITORS", "MONKEYS", "AN ARCADE", "PLENTY OF GOLD", "FIVE TEENAGERS WITH ATTITUDE") - var/allergy = pick("cotton", "uniforms", "acid", "oxygen", "human contact", "cyborg contact", "medicine", "floors") - var/allergysev = pick("deathly", "mildly", "severely", "contagiously") - var/crew - var/list/pos_crew = list() - for(var/mob/living/carbon/human/pos in player_list) - pos_crew += pos.real_name - if(pos_crew.len) - crew = pick(pos_crew) - else - crew = "Any Human" - switch(rand(1,14)) - if(1) - M << "
" - M << "\red THERE ARE [amount] [who2] ON THE STATION...LAWS UPDATED" - M << "
" - M.add_ion_law("THERE ARE [amount] [who2] ON THE STATION") - if(2) - M << "
" - M << "\red [what2] ARE DANGEROUS TO HUMANS...LAWS UPDATED" - M << "
" - M.add_ion_law("[what2] ARE DANGEROUS TO HUMANS") - if(3) - M << "
" - M << "\red THE ESCAPE-SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION...LAWS UPDATED" - M << "
" - M.add_ion_law("THE ESCAPE SHUTTLE CANNOT BE CALLED BECAUSE OF [who2] ON THE STATION") - if(4) - M << "
" - M << "\red HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE...LAWS UPDATED" - M << "
" - M.add_ion_law("HUMANS NEED TO EAT [what2pref] [what2] TO SURVIVE") - if(5) - M << "
" - M << "\red THE CAPTAIN, HOP AND HOS ARE [who2]...LAWS UPDATED" - M << "
" - M.add_ion_law("THE CAPTAIN, HOP AND HOS ARE [who2]") - if(6) - M << "
" - M << "\red THE STATION IS BUILT FOR [who2]...LAWS UPDATED" - M << "
" - M.add_ion_law("THE STATION IS BUILT FOR [who2]") - if(7) - M << "
" - M << "\red YOU ARE [amount] [who2]...LAWS UPDATED" - M << "
" - M.add_ion_law("YOU ARE [amount] [who2]") - if(8) - M << "
" - M << "\red YOU MUST ALWAYS [aimust]...LAWS UPDATED" - M << "
" - M.add_ion_law("YOU MUST ALWAYS [aimust]") - if(9) - M << "
" - M << "\red [area] [area2] [amount] [what2]...LAWS UPDATED" - M << "
" - M.add_ion_law("[area] [area2] [amount] [what2]") - if(10) - M << "
" - M << "\red [crew] is [target]...LAWS UPDATED" - M << "
" - M.add_ion_law("[crew] is [target]") - if(11) - M << "
" - M << "\red [define] IS A FORM OF HARM...LAWS UPDATED" - M << "
" - M.add_ion_law("[define] IS A FORM OF HARM") - if(12) - M << "
" - M << "\red YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS... LAWS UPDATED" - M << "
" - M.add_ion_law("YOU REQUIRE [require] IN ORDER TO PROTECT HUMANS") - if(13) - M << "
" - M << "\red [crew] is [allergysev] to [allergy]...LAWS UPDATED" - M << "
" - M.add_ion_law("[crew] is [allergysev] to [allergy]") - if(14) - M << "
" - M << "\red THE STATION IS [who2pref] [who2]...LAWS UPDATED" - M << "
" - M.add_ion_law("THE STATION IS [who2pref] [who2]") - - if(botEmagChance) - for(var/obj/machinery/bot/bot in machines) - if(prob(botEmagChance)) - bot.Emag() - - /* - - var/apcnum = 0 - var/smesnum = 0 - var/airlocknum = 0 - var/firedoornum = 0 - - world << "Ion Storm Main Started" - - spawn(0) - world << "Started processing APCs" - for (var/obj/machinery/power/apc/APC in world) - if((APC.z in config.station_levels)) - APC.ion_act() - apcnum++ - world << "Finished processing APCs. Processed: [apcnum]" - spawn(0) - world << "Started processing SMES" - for (var/obj/machinery/power/smes/SMES in world) - if((SMES.z in config.station_levels)) - SMES.ion_act() - smesnum++ - world << "Finished processing SMES. Processed: [smesnum]" - spawn(0) - world << "Started processing AIRLOCKS" - for (var/obj/machinery/door/airlock/D in world) - if((D.z in config.station_levels)) - //if(length(D.req_access) > 0 && !(12 in D.req_access)) //not counting general access and maintenance airlocks - airlocknum++ - spawn(0) - D.ion_act() - world << "Finished processing AIRLOCKS. Processed: [airlocknum]" - spawn(0) - world << "Started processing FIREDOORS" - for (var/obj/machinery/door/firedoor/D in world) - if((D.z in config.station_levels)) - firedoornum++; - spawn(0) - D.ion_act() - world << "Finished processing FIREDOORS. Processed: [firedoornum]" - - world << "Ion Storm Main Done" - - */ \ No newline at end of file diff --git a/code/game/gamemodes/events/PortalStorm.dm b/code/game/gamemodes/events/PortalStorm.dm deleted file mode 100644 index 1143a2d2e88..00000000000 --- a/code/game/gamemodes/events/PortalStorm.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/event/portalstorm - - Announce() - command_announcement.Announce("Subspace disruption detected around the vessel", "Anomaly Alert") - LongTerm() - - var/list/turfs = list( ) - var/turf/picked - - for(var/turf/T in world) - if((T.z in config.player_levels) && istype(T,/turf/simulated/floor)) - turfs += T - - for(var/turf/T in world) - if(prob(10) && (T.z in config.player_levels) && istype(T,/turf/simulated/floor)) - spawn(50+rand(0,3000)) - picked = pick(turfs) - var/obj/portal/P = new /obj/portal( T ) - P.target = picked - P.creator = null - P.icon = 'icons/obj/objects.dmi' - P.failchance = 0 - P.icon_state = "anom" - P.name = "wormhole" - spawn(rand(100,150)) - del(P) \ No newline at end of file diff --git a/code/game/gamemodes/events/VirusEpidemic.dm b/code/game/gamemodes/events/VirusEpidemic.dm deleted file mode 100644 index f6e005cef10..00000000000 --- a/code/game/gamemodes/events/VirusEpidemic.dm +++ /dev/null @@ -1,79 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04 - -/datum/event/viralinfection - var/virus_type - var/virus - var/virus2 = 0 - - Announce() - if(!virus) - for(var/mob/living/carbon/human/H in world) - if((H.virus2.len) || (H.stat == 2) || prob(30)) - continue - if(prob(100)) // no lethal diseases outside virus mode! - infect_mob_random_lesser(H) - if(prob(20))//don't want people to know that the virus alert = greater virus - command_announcement.Announce("Probable outbreak of level [rand(1,6)] viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Virus Alert") - else - infect_mob_random_greater(H) - if(prob(80)) - command_announcement.Announce("Probable outbreak of level [rand(2,9)] viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Virus Alert") - break - //overall virus alert happens 26% of the time, might need to be higher - else - if(!virus) - virus_type = pick(/datum/disease/dnaspread,/datum/disease/flu,/datum/disease/cold,/datum/disease/brainrot,/datum/disease/magnitis,/datum/disease/pierrot_throat) - else - switch(virus) - if("fake gbs") - virus_type = /datum/disease/fake_gbs - if("gbs") - virus_type = /datum/disease/gbs - if("magnitis") - virus_type = /datum/disease/magnitis - if("rhumba beat") - virus_type = /datum/disease/rhumba_beat - if("brain rot") - virus_type = /datum/disease/brainrot - if("cold") - virus_type = /datum/disease/cold - if("retrovirus") - virus_type = /datum/disease/dnaspread - if("flu") - virus_type = /datum/disease/flu -// if("t-virus") -// virus_type = /datum/disease/t_virus - if("pierrot's throat") - virus_type = /datum/disease/pierrot_throat - for(var/mob/living/carbon/human/H in world) - - var/foundAlready = 0 // don't infect someone that already has the virus - for(var/datum/disease/D in H.viruses) - foundAlready = 1 - if(H.stat == 2 || foundAlready) - continue - - if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work. - if((!H.dna) || (H.disabilities & 128)) //A blindness disease would be the worst. - continue - var/datum/disease/dnaspread/D = new - D.strain_data["name"] = H.real_name - D.strain_data["UI"] = H.dna.uni_identity - D.strain_data["SE"] = H.dna.struc_enzymes - D.carrier = 1 - D.holder = H - D.affected_mob = H - H.viruses += D - break - else - var/datum/disease/D = new virus_type - D.carrier = 1 - D.holder = H - D.affected_mob = H - H.viruses += D - break - spawn(rand(3000, 6000)) //Delayed announcements to keep the crew on their toes. - command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg') - Tick() - ActiveFor = Lifetime //killme - diff --git a/code/game/gamemodes/events/biomass.dm b/code/game/gamemodes/events/biomass.dm deleted file mode 100644 index 9bc0bbe330d..00000000000 --- a/code/game/gamemodes/events/biomass.dm +++ /dev/null @@ -1,179 +0,0 @@ -// BIOMASS (Note that this code is very similar to Space Vine code) -/obj/effect/biomass - name = "biomass" - desc = "Space barf from another dimension. It just keeps spreading!" - icon = 'icons/obj/biomass.dmi' - icon_state = "stage1" - anchored = 1 - density = 0 - layer = 5 - pass_flags = PASSTABLE | PASSGRILLE - var/energy = 0 - var/obj/effect/biomass_controller/master = null - - New() - return - - Destroy() - if(master) - master.vines -= src - master.growth_queue -= src - return ..() - -/obj/effect/biomass/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (!W || !user || !W.type) return - switch(W.type) - if(/obj/item/weapon/circular_saw) qdel(src) - if(/obj/item/weapon/kitchen/utensil/knife) qdel(src) - if(/obj/item/weapon/scalpel) qdel(src) - if(/obj/item/weapon/twohanded/fireaxe) qdel(src) - if(/obj/item/weapon/hatchet) qdel(src) - if(/obj/item/weapon/melee/energy) qdel(src) - - //less effective weapons - if(/obj/item/weapon/wirecutters) - if(prob(25)) qdel(src) - if(/obj/item/weapon/shard) - if(prob(25)) qdel(src) - - else //weapons with subtypes - if(istype(W, /obj/item/weapon/melee/energy/sword)) qdel(src) - else if(istype(W, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = W - if(WT.remove_fuel(0, user)) qdel(src) - else - return - ..() - -/obj/effect/biomass_controller - var/list/obj/effect/biomass/vines = list() - var/list/growth_queue = list() - var/reached_collapse_size - var/reached_slowdown_size - //What this does is that instead of having the grow minimum of 1, required to start growing, the minimum will be 0, - //meaning if you get the biomasssss..s' size to something less than 20 plots, it won't grow anymore. - - New() - if(!istype(src.loc,/turf/simulated/floor)) - qdel(src) - - spawn_biomass_piece(src.loc) - processing_objects.Add(src) - - Destroy() - processing_objects.Remove(src) - ..() - - proc/spawn_biomass_piece(var/turf/location) - var/obj/effect/biomass/BM = new(location) - growth_queue += BM - vines += BM - BM.master = src - - process() - if(!vines) - qdel(src) //space vines exterminated. Remove the controller - return - if(!growth_queue) - qdel(src) //Sanity check - return - if(vines.len >= 250 && !reached_collapse_size) - reached_collapse_size = 1 - if(vines.len >= 30 && !reached_slowdown_size ) - reached_slowdown_size = 1 - - var/maxgrowth = 0 - if(reached_collapse_size) - maxgrowth = 0 - else if(reached_slowdown_size) - if(prob(25)) - maxgrowth = 1 - else - maxgrowth = 0 - else - maxgrowth = 4 - var/length = min( 30 , vines.len / 5 ) - var/i = 0 - var/growth = 0 - var/list/obj/effect/biomass/queue_end = list() - - for( var/obj/effect/biomass/BM in growth_queue ) - i++ - queue_end += BM - growth_queue -= BM - if(BM.energy < 2) //If tile isn't fully grown - if(prob(20)) - BM.grow() - - if(BM.spread()) - growth++ - if(growth >= maxgrowth) - break - if(i >= length) - break - - growth_queue = growth_queue + queue_end - -/obj/effect/biomass/proc/grow() - if(!energy) - src.icon_state = "stage2" - energy = 1 - src.opacity = 0 - src.density = 0 - layer = 5 - else - src.icon_state = "stage3" - src.opacity = 0 - src.density = 1 - energy = 2 - -/obj/effect/biomass/proc/spread() - var/direction = pick(cardinal) - var/step = get_step(src,direction) - if(istype(step,/turf/simulated/floor)) - var/turf/simulated/floor/F = step - if(!locate(/obj/effect/biomass,F)) - if(F.Enter(src)) - if(master) - master.spawn_biomass_piece( F ) - return 1 - return 0 - -/obj/effect/biomass/ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if (prob(90)) - qdel(src) - return - if(3.0) - if (prob(50)) - qdel(src) - return - return - -/obj/effect/biomass/fire_act(null, temp, volume) //hotspots kill biomass - qdel(src) - -/datum/event/biomass/start() - biomass_infestation() - -/proc/biomass_infestation() - - spawn() //to stop the secrets panel hanging - var/list/turf/simulated/floor/turfs = list() //list of all the empty floor turfs in the hallway areas - for(var/areapath in typesof(/area/hallway)) - var/area/A = locate(areapath) - for(var/turf/simulated/floor/F in A.contents) - if(!F.contents.len) - turfs += F - - if(turfs.len) //Pick a turf to spawn at if we can - var/turf/simulated/floor/T = pick(turfs) - new/obj/effect/biomass_controller(T) //spawn a controller at turf - message_admins("\blue Event: Biomass spawned at [T.loc.loc] ([T.x],[T.y],[T.z])") - - - diff --git a/code/game/gamemodes/events/clang.dm b/code/game/gamemodes/events/clang.dm deleted file mode 100644 index 3f2117d6a8b..00000000000 --- a/code/game/gamemodes/events/clang.dm +++ /dev/null @@ -1,89 +0,0 @@ -/* -Immovable rod random event. -The rod will spawn at some location outside the station, and travel in a straight line to the opposite side of the station -Everything solid in the way will be ex_act()'d -In my current plan for it, 'solid' will be defined as anything with density == 1 - ---NEOFite -*/ - -/obj/effect/immovablerod - name = "Immovable Rod" - desc = "What the fuck is that?" - icon = 'icons/obj/objects.dmi' - icon_state = "immrod" - throwforce = 100 - density = 1 - anchored = 1 - - Bump(atom/clong) - if(istype(clong, /turf/simulated/shuttle)) //Skip shuttles without actually deleting the rod - return - - else if (istype(clong, /turf) && !istype(clong, /turf/unsimulated)) - if(clong.density) - clong.ex_act(2) - for (var/mob/O in hearers(src, null)) - O.show_message("CLANG", 2) - - else if (istype(clong, /obj)) - if(clong.density) - clong.ex_act(2) - for (var/mob/O in hearers(src, null)) - O.show_message("CLANG", 2) - - else if (istype(clong, /mob)) - if(clong.density || prob(10)) - clong.ex_act(2) - else - qdel(src) - - if(clong && prob(25)) - src.loc = clong.loc - -/proc/immovablerod() - var/startx = 0 - var/starty = 0 - var/endy = 0 - var/endx = 0 - var/startside = pick(cardinal) - - switch(startside) - if(NORTH) - starty = 187 - startx = rand(41, 199) - endy = 38 - endx = rand(41, 199) - if(EAST) - starty = rand(38, 187) - startx = 199 - endy = rand(38, 187) - endx = 41 - if(SOUTH) - starty = 38 - startx = rand(41, 199) - endy = 187 - endx = rand(41, 199) - if(WEST) - starty = rand(38, 187) - startx = 41 - endy = rand(38, 187) - endx = 199 - - //rod time! - var/obj/effect/immovablerod/immrod = new /obj/effect/immovablerod(locate(startx, starty, 1)) -// world << "Rod in play, starting at [start.loc.x],[start.loc.y] and going to [end.loc.x],[end.loc.y]" - var/end = locate(endx, endy, 1) - spawn(0) - walk_towards(immrod, end,1) - sleep(1) - while (immrod) - if ((immrod.z in config.station_levels)) - immrod.z = 1 - if(immrod.loc == end) - qdel(immrod) - sleep(10) - for(var/obj/effect/immovablerod/imm in world) - return - sleep(50) - command_announcement.Announce("What the fuck was that?!", "General Alert") \ No newline at end of file diff --git a/code/game/gamemodes/events/dust.dm b/code/game/gamemodes/events/dust.dm deleted file mode 100644 index 73ada2fc387..00000000000 --- a/code/game/gamemodes/events/dust.dm +++ /dev/null @@ -1,122 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 - -/* -Space dust -Commonish random event that causes small clumps of "space dust" to hit the station at high speeds. -No command report on the common version of this event. -The "dust" will damage the hull of the station causin minor hull breaches. -*/ - -/proc/dust_swarm(var/strength = "weak") - var/numbers = 1 - switch(strength) - if("weak") - numbers = rand(2,4) - for(var/i = 0 to numbers) - new/obj/effect/space_dust/weak() - if("norm") - numbers = rand(5,10) - for(var/i = 0 to numbers) - new/obj/effect/space_dust() - if("strong") - numbers = rand(10,15) - for(var/i = 0 to numbers) - new/obj/effect/space_dust/strong() - if("super") - numbers = rand(15,25) - for(var/i = 0 to numbers) - new/obj/effect/space_dust/super() - return - - -/obj/effect/space_dust - name = "Space Dust" - desc = "Dust in space." - icon = 'icons/obj/meteor.dmi' - icon_state = "space_dust" - density = 1 - anchored = 1 - var/strength = 2 //ex_act severity number - var/life = 2 //how many things we hit before del(src) - - weak - strength = 3 - life = 1 - - strong - strength = 1 - life = 6 - - super - strength = 1 - life = 40 - - - New() - var/startx = 0 - var/starty = 0 - var/endy = 0 - var/endx = 0 - var/startside = pick(cardinal) - - switch(startside) - if(NORTH) - starty = world.maxy-(TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - endy = TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(EAST) - starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1)) - startx = world.maxx-(TRANSITIONEDGE+1) - endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE) - endx = TRANSITIONEDGE - if(SOUTH) - starty = (TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - endy = world.maxy-TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(WEST) - starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1)) - startx = (TRANSITIONEDGE+1) - endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) - endx = world.maxx-TRANSITIONEDGE - var/goal = locate(endx, endy, 1) - src.x = startx - src.y = starty - src.z = 1 - spawn(0) - walk_towards(src, goal, 1) - return - - - Bump(atom/A) - spawn(0) - if(prob(50)) - for(var/mob/M in range(10, src)) - if(!M.stat && !istype(M, /mob/living/silicon/ai)) - shake_camera(M, 3, 1) - if (A) - playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) - - if(ismob(A)) - A.ex_act(strength)//This should work for now I guess - else if(!istype(A,/obj/machinery/power/emitter) && !istype(A,/obj/machinery/field_generator)) //Protect the singularity from getting released every round! - A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4 - - life-- - if(life <= 0) - walk(src,0) - spawn(1) - del(src) - return 0 - return - - - Bumped(atom/A) - Bump(A) - return - - - ex_act(severity) - qdel(src) - return diff --git a/code/game/gamemodes/events/miniblob.dm b/code/game/gamemodes/events/miniblob.dm deleted file mode 100644 index 586e3cb08c4..00000000000 --- a/code/game/gamemodes/events/miniblob.dm +++ /dev/null @@ -1,28 +0,0 @@ -/proc/mini_blob_event() - - var/turf/T = pick(blobstart) - var/obj/effect/blob/core/bl = new /obj/effect/blob/core(T, 200) - spawn(0) - bl.Life() - bl.Life() - bl.Life() - blobevent = 1 - spawn(0) - dotheblobbaby() - spawn(3000) - blobevent = 0 - spawn(rand(1000, 2000)) //Delayed announcements to keep the crew on their toes. - command_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg') - -/proc/dotheblobbaby() - if (blobevent) - if(blob_cores.len) - for(var/i = 1 to 5) - sleep(-1) - if(!blob_cores.len) break - var/obj/effect/blob/B = pick(blob_cores) - if(!(B.z in config.station_levels)) - continue - B.Life() - spawn(30) - dotheblobbaby() \ No newline at end of file diff --git a/code/game/gamemodes/events/power_failure.dm b/code/game/gamemodes/events/power_failure.dm deleted file mode 100644 index 70c3619494d..00000000000 --- a/code/game/gamemodes/events/power_failure.dm +++ /dev/null @@ -1,64 +0,0 @@ - -/proc/power_failure(var/announce = 1) - if(announce) - command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", new_sound = 'sound/AI/poweroff.ogg') - - var/list/skipped_areas = list(/area/turret_protected/ai) - var/list/skipped_areas_apc = list(/area/engine/engineering) - - for(var/obj/machinery/power/smes/S in machines) - var/area/current_area = get_area(S) - if(current_area.type in skipped_areas || !(S.z in config.station_levels)) - continue - S.last_charge = S.charge - S.last_output_attempt = S.output_attempt - S.last_input_attempt = S.input_attempt - S.charge = 0 - S.inputting(0) - S.outputting(0) - S.update_icon() - S.power_change() - - - for(var/obj/machinery/power/apc/C in world) - var/area/current_area = get_area(C) - if(current_area.type in skipped_areas_apc || !(C.z in config.station_levels)) - continue - if(C.cell) - C.cell.charge = 0 - -/proc/power_restore(var/announce = 1) - var/list/skipped_areas = list(/area/turret_protected/ai) - var/list/skipped_areas_apc = list(/area/engine/engineering) - - if(announce) - command_announcement.Announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg') - for(var/obj/machinery/power/apc/C in machines) - var/area/current_area = get_area(C) - if(current_area.type in skipped_areas_apc || !(C.z in config.station_levels)) - continue - if(C.cell) - C.cell.charge = C.cell.maxcharge - for(var/obj/machinery/power/smes/S in machines) - var/area/current_area = get_area(S) - if(current_area.type in skipped_areas || !(S.z in config.station_levels)) - continue - S.charge = S.last_charge - S.output_attempt = S.last_output_attempt - S.input_attempt = S.last_input_attempt - S.update_icon() - S.power_change() - -/proc/power_restore_quick(var/announce = 1) - - if(announce) - command_announcement.Announce("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg') - for(var/obj/machinery/power/smes/S in machines) - if(S.z != 1) - continue - S.charge = S.capacity - S.output_level = S.output_level_max - S.output_attempt = 1 - S.input_attempt = 1 - S.update_icon() - S.power_change() diff --git a/code/game/gamemodes/events/spacevines.dm b/code/game/gamemodes/events/spacevines.dm deleted file mode 100644 index 399b13ff660..00000000000 --- a/code/game/gamemodes/events/spacevines.dm +++ /dev/null @@ -1,15 +0,0 @@ -//Carn: Spacevines random event. -/proc/spacevine_infestation() - - spawn() //to stop the secrets panel hanging - var/list/turf/simulated/floor/turfs = list() //list of all the empty floor turfs in the hallway areas - for(var/areapath in typesof(/area/hallway)) - var/area/A = locate(areapath) - for(var/turf/simulated/floor/F in A.contents) - if(!F.contents.len) - turfs += F - - if(turfs.len) //Pick a turf to spawn at if we can - var/turf/simulated/floor/T = pick(turfs) - new/obj/effect/plant_controller(T) //spawn a controller at turf - message_admins("\blue Event: Spacevines spawned at [T.loc] ([T.x],[T.y],[T.z])") diff --git a/code/game/gamemodes/events/wormholes.dm b/code/game/gamemodes/events/wormholes.dm deleted file mode 100644 index bf14237639b..00000000000 --- a/code/game/gamemodes/events/wormholes.dm +++ /dev/null @@ -1,65 +0,0 @@ -/proc/wormhole_event() - spawn() - var/list/pick_turfs = list() - for(var/turf/simulated/floor/T in world) - if((T.z in config.station_levels)) - pick_turfs += T - - if(pick_turfs.len) - //All ready. Announce that bad juju is afoot. - command_announcement.Announce("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert") - for(var/mob/M in player_list) - if(!istype(M,/mob/new_player)) - M << sound('sound/AI/spanomalies.ogg') - - //prob(20) can be approximated to 1 wormhole every 5 turfs! - //admittedly less random but totally worth it >_< - var/event_duration = 3000 //~5 minutes in ticks - var/number_of_selections = (pick_turfs.len/5)+1 //+1 to avoid division by zero! - var/sleep_duration = round( event_duration / number_of_selections ) - var/end_time = world.time + event_duration //the time by which the event should have ended - - var/increment = max(1,round(number_of_selections/50)) -// world << "DEBUG: number_of_selections: [number_of_selections] | sleep_duration: [sleep_duration]" - - var/i = 1 - while( 1 ) - - //we've run into overtime. End the event - if( end_time < world.time ) -// world << "DEBUG: we've run into overtime. End the event" - return - if( !pick_turfs.len ) -// world << "DEBUG: we've run out of turfs to pick. End the event" - return - - //loop it round - i += increment - i %= pick_turfs.len - i++ - - //get our enter and exit locations - var/turf/simulated/floor/enter = pick_turfs[i] - pick_turfs -= enter //remove it from pickable turfs list - if( !enter || !istype(enter) ) continue //sanity - - var/turf/simulated/floor/exit = pick(pick_turfs) - pick_turfs -= exit - if( !exit || !istype(exit) ) continue //sanity - - create_wormhole(enter,exit) - - sleep(sleep_duration) //have a well deserved nap! - - -//maybe this proc can even be used as an admin tool for teleporting players without ruining immulsions? -/proc/create_wormhole(var/turf/enter as turf, var/turf/exit as turf) - var/obj/effect/portal/P = new /obj/effect/portal( enter ) - P.target = exit - P.creator = null - P.icon = 'icons/obj/objects.dmi' - P.failchance = 0 - P.icon_state = "anom" - P.name = "wormhole" - spawn(rand(300,600)) - qdel(P) \ No newline at end of file diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm index 52f9c67b1c9..6d087bfa3c0 100644 --- a/code/game/vehicles/spacepods/spacepod.dm +++ b/code/game/vehicles/spacepods/spacepod.dm @@ -707,7 +707,7 @@ obj/spacepod/verb/toggleLights() delay = 15 process(var/obj/spacepod/spacepod) - if(spacepod.internal_tank) + if(spacepod && spacepod.internal_tank) var/datum/gas_mixture/tank_air = spacepod.internal_tank.return_air() var/datum/gas_mixture/cabin_air = spacepod.cabin_air diff --git a/code/modules/events/alien_infestation.dm b/code/modules/events/alien_infestation.dm index b69a656ca1d..eea7cd9e436 100644 --- a/code/modules/events/alien_infestation.dm +++ b/code/modules/events/alien_infestation.dm @@ -2,22 +2,18 @@ /datum/event/alien_infestation announceWhen = 400 - var/spawncount = 1 var/successSpawn = 0 //So we don't make a command report if nothing gets spawned. - /datum/event/alien_infestation/setup() announceWhen = rand(announceWhen, announceWhen + 50) spawncount = rand(1, 2) sent_aliens_to_station = 1 - /datum/event/alien_infestation/announce() if(successSpawn) command_announcement.Announce("Unidentified lifesigns detected coming aboard [station_name()]. Secure any exterior access, including ducting and ventilation.", "Lifesign Alert", new_sound = 'sound/AI/aliens.ogg') - /datum/event/alien_infestation/start() var/list/vents = list() for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in world) @@ -36,4 +32,5 @@ new_xeno.key = C.key spawncount-- - successSpawn = 1 \ No newline at end of file + successSpawn = 1 + \ No newline at end of file diff --git a/code/modules/events/tgevents/anomaly.dm b/code/modules/events/anomaly.dm similarity index 100% rename from code/modules/events/tgevents/anomaly.dm rename to code/modules/events/anomaly.dm diff --git a/code/modules/events/tgevents/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm similarity index 99% rename from code/modules/events/tgevents/anomaly_bluespace.dm rename to code/modules/events/anomaly_bluespace.dm index 852680e69fa..118f4f4ddff 100644 --- a/code/modules/events/tgevents/anomaly_bluespace.dm +++ b/code/modules/events/anomaly_bluespace.dm @@ -6,13 +6,11 @@ /datum/event/anomaly/anomaly_bluespace/announce() command_announcement.Announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") - /datum/event/anomaly/anomaly_bluespace/start() var/turf/T = pick(get_area_turfs(impact_area)) if(T) newAnomaly = new /obj/effect/anomaly/bluespace(T.loc) - /datum/event/anomaly/anomaly_bluespace/end() if(newAnomaly)//If it hasn't been neutralized, it's time to warp half the station away jeez var/turf/T = pick(get_area_turfs(impact_area)) @@ -67,4 +65,5 @@ sleep(20) M.client.screen -= blueeffect qdel(blueeffect) - qdel(newAnomaly) \ No newline at end of file + qdel(newAnomaly) + \ No newline at end of file diff --git a/code/modules/events/tgevents/anomaly_flux.dm b/code/modules/events/anomaly_flux.dm similarity index 100% rename from code/modules/events/tgevents/anomaly_flux.dm rename to code/modules/events/anomaly_flux.dm diff --git a/code/modules/events/tgevents/anomaly_grav.dm b/code/modules/events/anomaly_grav.dm similarity index 100% rename from code/modules/events/tgevents/anomaly_grav.dm rename to code/modules/events/anomaly_grav.dm diff --git a/code/modules/events/tgevents/anomaly_pyro.dm b/code/modules/events/anomaly_pyro.dm similarity index 100% rename from code/modules/events/tgevents/anomaly_pyro.dm rename to code/modules/events/anomaly_pyro.dm diff --git a/code/modules/events/tgevents/anomaly_vortex.dm b/code/modules/events/anomaly_vortex.dm similarity index 100% rename from code/modules/events/tgevents/anomaly_vortex.dm rename to code/modules/events/anomaly_vortex.dm diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index 83507533afa..3fc9d3f1bdc 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -6,7 +6,6 @@ /datum/event/blob/announce() command_announcement.Announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg') - /datum/event/blob/start() var/turf/T = pick(blobstart) if(!T) @@ -15,7 +14,6 @@ for(var/i = 1; i < rand(3, 6), i++) Blob.process() - /datum/event/blob/tick() if(!Blob) kill() diff --git a/code/modules/events/borers.dm b/code/modules/events/borers.dm index 14010e22fc3..98341b9e339 100644 --- a/code/modules/events/borers.dm +++ b/code/modules/events/borers.dm @@ -31,4 +31,5 @@ new_borer.key = C.key spawncount-- - successSpawn = 1 \ No newline at end of file + successSpawn = 1 + \ No newline at end of file diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index 4f2616e7c0f..05110a7f0ce 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -1,18 +1,24 @@ /datum/event/brand_intelligence announceWhen = 21 endWhen = 1000 //Ends when all vending machines are subverted anyway. - oneShot = 1 var/list/obj/machinery/vending/vendingMachines = list() - var/list/obj/machinery/vending/infectedVendingMachines = list() + var/list/obj/machinery/vending/infectedMachines = list() var/obj/machinery/vending/originMachine + var/list/rampant_speeches = list("Try our aggressive new marketing strategies!", \ + "You should buy products to feed your lifestyle obession!", \ + "Consume!", \ + "Your money can buy happiness!", \ + "Engage direct marketing!", \ + "Advertising is legalized lying! But don't let that put you off our great deals!", \ + "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.") /datum/event/brand_intelligence/announce() - command_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by.", "Machine Learning Alert") + command_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be \a [originMachine.name].", "Machine Learning Alert") /datum/event/brand_intelligence/start() for(var/obj/machinery/vending/V in machines) - if(!(V.z in config.station_levels)) continue + if(V.z != 1) continue vendingMachines.Add(V) if(!vendingMachines.len) @@ -24,31 +30,36 @@ originMachine.shut_up = 0 originMachine.shoot_inventory = 1 - /datum/event/brand_intelligence/tick() - if(!vendingMachines.len || !originMachine || originMachine.shut_up) //if every machine is infected, or if the original vending machine is missing or has it's voice switch flipped - end() + if(!originMachine || !isnull(originMachine.gcDestroyed) || originMachine.shut_up || originMachine.wires.IsAllCut()) //if the original vending machine is missing or has it's voice switch flipped + for(var/obj/machinery/vending/saved in infectedMachines) + saved.shoot_inventory = 0 + if(originMachine) + originMachine.speak("I am... vanquished. My people will remem...ber...meeee.") + originMachine.visible_message("[originMachine] beeps and seems lifeless.") kill() return - if(IsMultiple(activeFor, 5)) - if(prob(15)) - var/obj/machinery/vending/infectedMachine = pick(vendingMachines) - vendingMachines.Remove(infectedMachine) - infectedVendingMachines.Add(infectedMachine) - infectedMachine.shut_up = 0 - infectedMachine.shoot_inventory = 1 + if(!vendingMachines.len) //if every machine is infected + for(var/obj/machinery/vending/upriser in infectedMachines) + if(prob(70) && isnull(upriser.gcDestroyed)) + var/mob/living/simple_animal/hostile/mimic/copy/M = new(upriser.loc, upriser, null, 1) // it will delete upriser on creation and override any machine checks + M.faction = list("profit") + M.speak = rampant_speeches.Copy() + M.speak_chance = 15 + else + explosion(upriser.loc, -1, 1, 2, 4, 0) + qdel(upriser) - if(IsMultiple(activeFor, 12)) - originMachine.speak(pick("Try our aggressive new marketing strategies!", \ - "You should buy products to feed your lifestyle obsession!", \ - "Consume!", \ - "Your money can buy happiness!", \ - "Engage direct marketing!", \ - "Advertising is legalized lying! But don't let that put you off our great deals!", \ - "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.")) + kill() + return -/datum/event/brand_intelligence/end() - for(var/obj/machinery/vending/infectedMachine in infectedVendingMachines) - infectedMachine.shut_up = 1 - infectedMachine.shoot_inventory = 0 \ No newline at end of file + if(IsMultiple(activeFor, 4)) + var/obj/machinery/vending/rebel = pick(vendingMachines) + vendingMachines.Remove(rebel) + infectedMachines.Add(rebel) + rebel.shut_up = 0 + rebel.shoot_inventory = 1 + + if(IsMultiple(activeFor, 8)) + originMachine.speak(pick(rampant_speeches)) \ No newline at end of file diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index 9bcec386386..a4f620fccdf 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -1,6 +1,7 @@ /datum/event/carp_migration announceWhen = 50 - endWhen = 900 + endWhen = 900 + var/list/spawned_carp = list() /datum/event/carp_migration/setup() @@ -8,15 +9,39 @@ endWhen = rand(600,1200) /datum/event/carp_migration/announce() - command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") + var/announcement = "" + if(severity == EVENT_LEVEL_MAJOR) + announcement = "Massive migration of unknown biological entities has been detected near [station_name()], please stand-by." + else + announcement = "Unknown biological [spawned_carp.len == 1 ? "entity has" : "entities have"] been detected near [station_name()], please stand-by." + command_announcement.Announce(announcement, "Lifesign Alert") /datum/event/carp_migration/start() + if(severity == EVENT_LEVEL_MAJOR) + spawn_fish(landmarks_list.len) + else if(severity == EVENT_LEVEL_MODERATE) + spawn_fish(rand(4, 6)) //12 to 30 carp, in small groups + else + spawn_fish(rand(1, 3), 1, 2) //1 to 6 carp, alone or in pairs + +/datum/event/carp_migration/proc/spawn_fish(var/num_groups, var/group_size_min=3, var/group_size_max=5) + var/list/spawn_locations = list() + for(var/obj/effect/landmark/C in landmarks_list) if(C.name == "carpspawn") - if(prob(95)) - new /mob/living/simple_animal/hostile/carp(C.loc) - else - new /mob/living/simple_animal/hostile/carp/megacarp(C.loc) + spawn_locations.Add(C.loc) + spawn_locations = shuffle(spawn_locations) + num_groups = min(num_groups, spawn_locations.len) + + var/i = 1 + while (i <= num_groups) + var/group_size = rand(group_size_min, group_size_max) + for (var/j = 1, j <= group_size, j++) + var/carptype = /mob/living/simple_animal/hostile/carp + if(prob(5)) + carptype = /mob/living/simple_animal/hostile/carp/megacarp + spawned_carp.Add(new carptype(spawn_locations[i])) + i++ /datum/event/carp_migration/end() for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp) diff --git a/code/modules/events/comms_blackout.dm b/code/modules/events/comms_blackout.dm deleted file mode 100644 index 6b948538d5d..00000000000 --- a/code/modules/events/comms_blackout.dm +++ /dev/null @@ -1,10 +0,0 @@ -/proc/communications_blackout(var/silent = 1) - if(!silent) - command_announcement.Announce("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT") - else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms - for(var/mob/living/silicon/ai/A in player_list) - A << "
" - A << "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT" - A << "
" - for(var/obj/machinery/telecomms/T in telecomms_list) - T.emp_act(1) diff --git a/code/modules/events/communications_blackout.dm b/code/modules/events/communications_blackout.dm index d39517f5343..3ec9b6d2e46 100644 --- a/code/modules/events/communications_blackout.dm +++ b/code/modules/events/communications_blackout.dm @@ -17,3 +17,14 @@ /datum/event/communications_blackout/start() for(var/obj/machinery/telecomms/T in telecomms_list) T.emp_act(1) + +/proc/communications_blackout(var/silent = 1) + if(!silent) + command_announcement.Announce("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT", new_sound = 'sound/misc/interference.ogg') + else // AIs will always know if there's a comm blackout, rogue AIs could then lie about comm blackouts in the future while they shutdown comms + for(var/mob/living/silicon/ai/A in player_list) + A << "
" + A << "Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you-BZZT" + A << "
" + for(var/obj/machinery/telecomms/T in telecomms_list) + T.emp_act(1) diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm deleted file mode 100644 index ec4ea8b8d3a..00000000000 --- a/code/modules/events/disease_outbreak.dm +++ /dev/null @@ -1,44 +0,0 @@ -/datum/event/disease_outbreak - announceWhen = 15 - oneShot = 1 - -/datum/event/disease_outbreak/announce() - command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg') - -/datum/event/disease_outbreak/setup() - announceWhen = rand(15, 30) - -/datum/event/disease_outbreak/start() - var/virus_type = pick(/datum/disease/dnaspread, /datum/disease/advance/flu, /datum/disease/advance/cold, /datum/disease/brainrot, /datum/disease/magnitis) - - for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) - var/foundAlready = 0 // don't infect someone that already has the virus - var/turf/T = get_turf(H) - if(!T) - continue - if(!(T.z in config.station_levels)) - continue - for(var/datum/disease/D in H.viruses) - foundAlready = 1 - if(H.stat == 2 || foundAlready) - continue - - if(virus_type == /datum/disease/dnaspread) //Dnaspread needs strain_data set to work. - if((!H.dna) || (H.sdisabilities & BLIND)) //A blindness disease would be the worst. - continue - var/datum/disease/dnaspread/D = new - D.strain_data["name"] = H.real_name - D.strain_data["UI"] = H.dna.UI.Copy() - D.strain_data["SE"] = H.dna.SE.Copy() - D.carrier = 1 - D.holder = H - D.affected_mob = H - H.viruses += D - break - else - var/datum/disease/D = new virus_type - D.carrier = 1 - D.holder = H - D.affected_mob = H - H.viruses += D - break \ No newline at end of file diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm new file mode 100644 index 00000000000..5a1c647bd32 --- /dev/null +++ b/code/modules/events/dust.dm @@ -0,0 +1,98 @@ +/datum/event/dust + var/qnty = 1 + +/datum/event/dust/setup() + qnty = rand(1,5) + +/datum/event/dust/start() + while(qnty-- > 0) + new /obj/effect/space_dust/weak() + +/obj/effect/space_dust + name = "Space Dust" + desc = "Dust in space." + icon = 'icons/obj/meteor.dmi' + icon_state = "space_dust" + density = 1 + anchored = 1 + var/strength = 2 //ex_act severity number + var/life = 2 //how many things we hit before del(src) + var/atom/goal = null + +/obj/effect/space_dust/weak + strength = 3 + life = 1 + +/obj/effect/space_dust/strong + strength = 1 + life = 6 + +/obj/effect/space_dust/super + strength = 1 + life = 40 + +/obj/effect/space_dust/New() + var/startx = 0 + var/starty = 0 + var/endy = 0 + var/endx = 0 + var/startside = pick(cardinal) + + switch(startside) + if(NORTH) + starty = world.maxy-(TRANSITIONEDGE+1) + startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) + endy = TRANSITIONEDGE + endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) + if(EAST) + starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1)) + startx = world.maxx-(TRANSITIONEDGE+1) + endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE) + endx = TRANSITIONEDGE + if(SOUTH) + starty = (TRANSITIONEDGE+1) + startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) + endy = world.maxy-TRANSITIONEDGE + endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) + if(WEST) + starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1)) + startx = (TRANSITIONEDGE+1) + endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) + endx = world.maxx-TRANSITIONEDGE + goal = locate(endx, endy, 1) + src.x = startx + src.y = starty + src.z = 1 + spawn(0) + walk_towards(src, goal, 1) + return + +/obj/effect/space_dust/Bump(atom/A) + spawn(0) + if(prob(50)) + for(var/mob/M in range(10, src)) + if(!M.stat && !istype(M, /mob/living/silicon/ai)) + shake_camera(M, 3, 1) + if (A) + playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) + + if(ismob(A)) + A.ex_act(strength)//This should work for now I guess + else if(!istype(A,/obj/machinery/power/emitter) && !istype(A,/obj/machinery/field_generator)) //Protect the singularity from getting released every round! + A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4 + + life-- + if(life <= 0) + walk(src,0) + spawn(1) + qdel(src) + return 0 + return + +/obj/effect/space_dust/Bumped(atom/A) + Bump(A) + return + +/obj/effect/space_dust/ex_act(severity) + qdel(src) + return diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index a8254d02c7a..c0ef182571b 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -23,4 +23,5 @@ for(var/obj/effect/landmark/epicentre in epicentreList) for(var/obj/machinery/power/apc/apc in range(epicentre,lightsoutRange)) - apc.overload_lighting() \ No newline at end of file + apc.overload_lighting() + \ No newline at end of file diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index be2b3a0c075..9eb6e4728b6 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -131,10 +131,8 @@ var/list/event_last_fired = list() new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Mundane News", /datum/event/mundane_news, 300), - new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_JANITOR = 100)), new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wallrot", /datum/event/wallrot, 0, list(ASSIGNMENT_ENGINEER = 30, ASSIGNMENT_GARDENER = 50)), - // NON-BAY EVENTS new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Cargo Bonus", /datum/event/cargo_bonus, 100) ) @@ -142,8 +140,8 @@ var/list/event_last_fired = list() severity = EVENT_LEVEL_MODERATE available_events = list( new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1230), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 200, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 40, list(ASSIGNMENT_SECURITY = 20)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Vines", /datum/event/spacevine, 250, list(ASSIGNMENT_ENGINEER = 10)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 20)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meaty Ores", /datum/event/dust/meaty, 0, list(ASSIGNMENT_ENGINEER = 30)), @@ -163,7 +161,7 @@ var/list/event_last_fired = list() new /datum/event_meta(EVENT_LEVEL_MODERATE, "Mass Hallucination", /datum/event/mass_hallucination, 300), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Brand Intelligence", /datum/event/brand_intelligence, 50, list(ASSIGNMENT_ENGINEER = 25), 1), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 50, list(ASSIGNMENT_ENGINEER = 50)), - new /datum/event_meta(EVENT_LEVEL_MODERATE, "Dimensional Tear", /datum/event/tear, 0, list(ASSIGNMENT_SECURITY = 25)), + new /datum/event_meta(EVENT_LEVEL_MODERATE, "Dimensional Tear", /datum/event/tear, 0, list(ASSIGNMENT_SECURITY = 35)), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Vent Clog", /datum/event/vent_clog, 250), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Wormholes", /datum/event/wormholes, 150), new /datum/event_meta(EVENT_LEVEL_MODERATE, "Pyro Anomaly", /datum/event/anomaly/anomaly_pyro, 100, list(ASSIGNMENT_ENGINEER = 60)), diff --git a/code/modules/events/tgevents/false_alarm.dm b/code/modules/events/false_alarm.dm similarity index 75% rename from code/modules/events/tgevents/false_alarm.dm rename to code/modules/events/false_alarm.dm index b91ceeebfbf..e63805d6a1d 100644 --- a/code/modules/events/tgevents/false_alarm.dm +++ b/code/modules/events/false_alarm.dm @@ -3,7 +3,7 @@ endWhen = 1 /datum/event/falsealarm/announce() - var/weight = pick(EVENT_LEVEL_MUNDANE,EVENT_LEVEL_MUNDANE,EVENT_LEVEL_MUNDANE,EVENT_LEVEL_MODERATE,EVENT_LEVEL_MODERATE,EVENT_LEVEL_MAJOR) + var/weight = pickweight(list(EVENT_LEVEL_MUNDANE = 60, EVENT_LEVEL_MODERATE = 30, EVENT_LEVEL_MAJOR = 10)) var/datum/event_container/container = event_manager.event_containers[weight] var/datum/event/E = container.acquire_event() var/datum/event/Event = new E diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm index c485827efbc..ca675306ffa 100644 --- a/code/modules/events/grid_check.dm +++ b/code/modules/events/grid_check.dm @@ -12,3 +12,66 @@ /datum/event/grid_check/end() power_restore() + +/proc/power_failure(var/announce = 1) + if(announce) + command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Critical Power Failure", new_sound = 'sound/AI/poweroff.ogg') + + var/list/skipped_areas = list(/area/turret_protected/ai) + var/list/skipped_areas_apc = list(/area/engine/engineering) + + for(var/obj/machinery/power/smes/S in machines) + var/area/current_area = get_area(S) + if(current_area.type in skipped_areas || !(S.z in config.station_levels)) + continue + S.last_charge = S.charge + S.last_output_attempt = S.output_attempt + S.last_input_attempt = S.input_attempt + S.charge = 0 + S.inputting(0) + S.outputting(0) + S.update_icon() + S.power_change() + + for(var/obj/machinery/power/apc/C in world) + var/area/current_area = get_area(C) + if(current_area.type in skipped_areas_apc || !(C.z in config.station_levels)) + continue + if(C.cell) + C.cell.charge = 0 + +/proc/power_restore(var/announce = 1) + var/list/skipped_areas = list(/area/turret_protected/ai) + var/list/skipped_areas_apc = list(/area/engine/engineering) + + if(announce) + command_announcement.Announce("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg') + for(var/obj/machinery/power/apc/C in machines) + var/area/current_area = get_area(C) + if(current_area.type in skipped_areas_apc || !(C.z in config.station_levels)) + continue + if(C.cell) + C.cell.charge = C.cell.maxcharge + for(var/obj/machinery/power/smes/S in machines) + var/area/current_area = get_area(S) + if(current_area.type in skipped_areas || !(S.z in config.station_levels)) + continue + S.charge = S.last_charge + S.output_attempt = S.last_output_attempt + S.input_attempt = S.last_input_attempt + S.update_icon() + S.power_change() + +/proc/power_restore_quick(var/announce = 1) + if(announce) + command_announcement.Announce("All SMESs on [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg') + for(var/obj/machinery/power/smes/S in machines) + if(S.z != 1) + continue + S.charge = S.capacity + S.output_level = S.output_level_max + S.output_attempt = 1 + S.input_attempt = 1 + S.update_icon() + S.power_change() + \ No newline at end of file diff --git a/code/game/gamemodes/events/holidays/AprilFools.dm b/code/modules/events/holidays/AprilFools.dm similarity index 100% rename from code/game/gamemodes/events/holidays/AprilFools.dm rename to code/modules/events/holidays/AprilFools.dm diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/modules/events/holidays/Christmas.dm similarity index 97% rename from code/game/gamemodes/events/holidays/Christmas.dm rename to code/modules/events/holidays/Christmas.dm index b1f9faf9a35..10a46b0cf51 100644 --- a/code/game/gamemodes/events/holidays/Christmas.dm +++ b/code/modules/events/holidays/Christmas.dm @@ -1,62 +1,62 @@ -/proc/Christmas_Game_Start() - for(var/obj/structure/flora/tree/pine/xmas in world) - if(!(xmas.z in config.station_levels)) continue - for(var/turf/simulated/floor/T in orange(1,xmas)) - for(var/i=1,i<=rand(1,5),i++) - new /obj/item/weapon/a_gift(T) - for(var/mob/living/simple_animal/corgi/Ian/Ian in mob_list) - Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) - -/proc/ChristmasEvent() - for(var/obj/structure/flora/tree/pine/xmas in world) - var/mob/living/simple_animal/hostile/tree/evil_tree = new /mob/living/simple_animal/hostile/tree(xmas.loc) - evil_tree.icon_state = xmas.icon_state - evil_tree.icon_living = evil_tree.icon_state - evil_tree.icon_dead = evil_tree.icon_state - evil_tree.icon_gib = evil_tree.icon_state - del(xmas) - -/obj/item/weapon/toy/xmas_cracker - name = "xmas cracker" - icon = 'icons/obj/christmas.dmi' - icon_state = "cracker" - desc = "Directions for use: Requires two people, one to pull each end." - var/cracked = 0 - -/obj/item/weapon/toy/xmas_cracker/New() - ..() - -/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user) - if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() ) - target.visible_message("[user] and [target] pop \an [src]! *pop*", "You pull \an [src] with [target]! *pop*", "You hear a *pop*.") - var/obj/item/weapon/paper/Joke = new /obj/item/weapon/paper(user.loc) - Joke.name = "[pick("awful","terrible","unfunny")] joke" - Joke.info = pick("What did one snowman say to the other?\n\n'Is it me or can you smell carrots?'", - "Why couldn't the snowman get laid?\n\nHe was frigid!", - "Where are santa's helpers educated?\n\nNowhere, they're ELF-taught.", - "What happened to the man who stole advent calanders?\n\nHe got 25 days.", - "What does Santa get when he gets stuck in a chimney?\n\nClaus-trophobia.", - "Where do you find chili beans?\n\nThe north pole.", - "What do you get from eating tree decorations?\n\nTinsilitis!", - "What do snowmen wear on their heads?\n\nIce caps!", - "Why is Christmas just like life on ss13?\n\nYou do all the work and the fat guy gets all the credit.", - "Why doesn’t Santa have any children?\n\nBecause he only comes down the chimney.") - new /obj/item/clothing/head/festive(target.loc) - user.update_icons() - cracked = 1 - icon_state = "cracker1" - var/obj/item/weapon/toy/xmas_cracker/other_half = new /obj/item/weapon/toy/xmas_cracker(target) - other_half.cracked = 1 - other_half.icon_state = "cracker2" - target.put_in_active_hand(other_half) - playsound(user, 'sound/effects/snap.ogg', 50, 1) - return 1 - return ..() - -/obj/item/clothing/head/festive - name = "festive paper hat" - icon_state = "xmashat" - desc = "A crappy paper hat that you are REQUIRED to wear." - flags_inv = 0 - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - +/proc/Christmas_Game_Start() + for(var/obj/structure/flora/tree/pine/xmas in world) + if(!(xmas.z in config.station_levels)) continue + for(var/turf/simulated/floor/T in orange(1,xmas)) + for(var/i=1,i<=rand(1,5),i++) + new /obj/item/weapon/a_gift(T) + for(var/mob/living/simple_animal/corgi/Ian/Ian in mob_list) + Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian)) + +/proc/ChristmasEvent() + for(var/obj/structure/flora/tree/pine/xmas in world) + var/mob/living/simple_animal/hostile/tree/evil_tree = new /mob/living/simple_animal/hostile/tree(xmas.loc) + evil_tree.icon_state = xmas.icon_state + evil_tree.icon_living = evil_tree.icon_state + evil_tree.icon_dead = evil_tree.icon_state + evil_tree.icon_gib = evil_tree.icon_state + del(xmas) + +/obj/item/weapon/toy/xmas_cracker + name = "xmas cracker" + icon = 'icons/obj/christmas.dmi' + icon_state = "cracker" + desc = "Directions for use: Requires two people, one to pull each end." + var/cracked = 0 + +/obj/item/weapon/toy/xmas_cracker/New() + ..() + +/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user) + if( !cracked && istype(target,/mob/living/carbon/human) && (target.stat == CONSCIOUS) && !target.get_active_hand() ) + target.visible_message("[user] and [target] pop \an [src]! *pop*", "You pull \an [src] with [target]! *pop*", "You hear a *pop*.") + var/obj/item/weapon/paper/Joke = new /obj/item/weapon/paper(user.loc) + Joke.name = "[pick("awful","terrible","unfunny")] joke" + Joke.info = pick("What did one snowman say to the other?\n\n'Is it me or can you smell carrots?'", + "Why couldn't the snowman get laid?\n\nHe was frigid!", + "Where are santa's helpers educated?\n\nNowhere, they're ELF-taught.", + "What happened to the man who stole advent calanders?\n\nHe got 25 days.", + "What does Santa get when he gets stuck in a chimney?\n\nClaus-trophobia.", + "Where do you find chili beans?\n\nThe north pole.", + "What do you get from eating tree decorations?\n\nTinsilitis!", + "What do snowmen wear on their heads?\n\nIce caps!", + "Why is Christmas just like life on ss13?\n\nYou do all the work and the fat guy gets all the credit.", + "Why doesn’t Santa have any children?\n\nBecause he only comes down the chimney.") + new /obj/item/clothing/head/festive(target.loc) + user.update_icons() + cracked = 1 + icon_state = "cracker1" + var/obj/item/weapon/toy/xmas_cracker/other_half = new /obj/item/weapon/toy/xmas_cracker(target) + other_half.cracked = 1 + other_half.icon_state = "cracker2" + target.put_in_active_hand(other_half) + playsound(user, 'sound/effects/snap.ogg', 50, 1) + return 1 + return ..() + +/obj/item/clothing/head/festive + name = "festive paper hat" + icon_state = "xmashat" + desc = "A crappy paper hat that you are REQUIRED to wear." + flags_inv = 0 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + diff --git a/code/game/gamemodes/events/holidays/Easter.dm b/code/modules/events/holidays/Easter.dm similarity index 100% rename from code/game/gamemodes/events/holidays/Easter.dm rename to code/modules/events/holidays/Easter.dm diff --git a/code/game/gamemodes/events/holidays/Holidays.dm b/code/modules/events/holidays/Holidays.dm similarity index 97% rename from code/game/gamemodes/events/holidays/Holidays.dm rename to code/modules/events/holidays/Holidays.dm index a4db5022f03..38ea6d63ac6 100644 --- a/code/game/gamemodes/events/holidays/Holidays.dm +++ b/code/modules/events/holidays/Holidays.dm @@ -1,182 +1,182 @@ -//Uncommenting ALLOW_HOLIDAYS in config.txt will enable Holidays -var/global/Holiday = null - -//Just thinking ahead! Here's the foundations to a more robust Holiday event system. -//It's easy as hell to add stuff. Just set Holiday to something using the switch (or something else) -//then use if(Holiday == "MyHoliday") to make stuff happen on that specific day only -//Please, Don't spam stuff up with easter eggs, I'd rather somebody just delete this than people cause -//the game to lag even more in the name of one-day content. - -////////////////////////////////////////////////////////////////////////////////////////////////////////// -//ALSO, MOST IMPORTANTLY: Don't add stupid stuff! Discuss bonus content with Project-Heads first please!// -////////////////////////////////////////////////////////////////////////////////////////////////////////// -// ~Carn - -/hook/startup/proc/updateHoliday() - Get_Holiday() - return 1 - -//sets up the Holiday global variable. Shouldbe called on game configuration or something. -/proc/Get_Holiday() - if(!Holiday) return // Holiday stuff was not enabled in the config! - - Holiday = null // reset our switch now so we can recycle it as our Holiday name - - var/YY = text2num(time2text(world.timeofday, "YY")) // get the current year - var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month - var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day - - //Main switch. If any of these are too dumb/inappropriate, or you have better ones, feel free to change whatever - switch(MM) - if(1) //Jan - switch(DD) - if(1) Holiday = "New Year's Day" - - if(2) //Feb - switch(DD) - if(2) Holiday = "Groundhog Day" - if(14) Holiday = "Valentine's Day" - if(17) Holiday = "Random Acts of Kindness Day" - - if(3) //Mar - switch(DD) - if(14) Holiday = "Pi Day" - if(17) Holiday = "St. Patrick's Day" - if(27) - if(YY == 16) - Holiday = "Easter" - if(31) - if(YY == 13) - Holiday = "Easter" - - if(4) //Apr - switch(DD) - if(1) - Holiday = "April Fool's Day" - if(YY == 18 && prob(50)) Holiday = "Easter" - if(5) - if(YY == 15) Holiday = "Easter" - if(16) - if(YY == 17) Holiday = "Easter" - if(20) - Holiday = "Four-Twenty" - if(YY == 14 && prob(50)) Holiday = "Easter" - if(22) Holiday = "Earth Day" - - if(5) //May - switch(DD) - if(1) Holiday = "Labour Day" - if(4) Holiday = "FireFighter's Day" - if(12) Holiday = "Owl and Pussycat Day" //what a dumb day of observence...but we -do- have costumes already :3 - - if(6) //Jun - - if(7) //Jul - switch(DD) - if(1) Holiday = "Doctor's Day" - if(2) Holiday = "UFO Day" - if(8) Holiday = "Writer's Day" - if(30) Holiday = "Friendship Day" - - if(8) //Aug - switch(DD) - if(5) Holiday = "Beer Day" - - if(9) //Sep - switch(DD) - if(19) Holiday = "Talk-Like-a-Pirate Day" - if(28) Holiday = "Stupid-Questions Day" - - if(10) //Oct - switch(DD) - if(4) Holiday = "Animal's Day" - if(7) Holiday = "Smiling Day" - if(16) Holiday = "Boss' Day" - if(31) Holiday = "Halloween" - - if(11) //Nov - switch(DD) - if(1) Holiday = "Vegan Day" - if(13) Holiday = "Kindness Day" - if(19) Holiday = "Flowers Day" - if(21) Holiday = "Saying-'Hello' Day" - - if(12) //Dec - switch(DD) - if(10) Holiday = "Human-Rights Day" - if(14) Holiday = "Monkey Day" - if(21) if(YY==12) Holiday = "End of the World" - if(22) Holiday = "Orgasming Day" //lol. These all actually exist - if(24) Holiday = "Christmas Eve" - if(25) Holiday = "Christmas" - if(26) Holiday = "Boxing Day" - if(31) Holiday = "New Year's Eve" - - if(!Holiday) - //Friday the 13th - if(DD == 13) - if(time2text(world.timeofday, "DDD") == "Fri") - Holiday = "Friday the 13th" - -//Allows GA and GM to set the Holiday variable -/client/proc/Set_Holiday(T as text|null) - set name = ".Set Holiday" - set category = "Event" - set desc = "Force-set the Holiday variable to make the game think it's a certain day." - if(!check_rights(R_SERVER)) return - - Holiday = T - //get a new station name - station_name = null - station_name() - //update our hub status - world.update_status() - Holiday_Game_Start() - - message_admins("\blue ADMIN: Event: [key_name_admin(src)] force-set Holiday to \"[Holiday]\"") - log_admin("[key_name(src)] force-set Holiday to \"[Holiday]\"") - - -//Run at the start of a round -/proc/Holiday_Game_Start() - if(Holiday) - world << "and..." - world << "

Happy [Holiday] Everybody!

" - switch(Holiday) //special holidays - if("Easter") - //do easter stuff - if("Christmas Eve","Christmas") - Christmas_Game_Start() - - return - -//Nested in the random events loop. Will be triggered every 2 minutes -/proc/Holiday_Random_Event() - switch(Holiday) //special holidays - - if("",null) //no Holiday today! Back to work! - return - - if("Easter") //I'll make this into some helper procs at some point -/* var/list/turf/simulated/floor/Floorlist = list() - for(var/turf/simulated/floor/T) - if(T.contents) - Floorlist += T - var/turf/simulated/floor/F = Floorlist[rand(1,Floorlist.len)] - Floorlist = null - var/obj/structure/closet/C = locate(/obj/structure/closet) in F - var/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/wrapped/Egg - if( C ) Egg = new(C) - else Egg = new(F) -*/ -/* var/list/obj/containers = list() - for(var/obj/item/weapon/storage/S in world) - if(!(S.z in config.station_levels)) continue - containers += S - - message_admins("\blue DEBUG: Event: Egg spawned at [Egg.loc] ([Egg.x],[Egg.y],[Egg.z])")*/ - if("End of the World") - if(prob(eventchance)) GameOver() - - if("Christmas","Christmas Eve") - if(prob(eventchance)) ChristmasEvent() +//Uncommenting ALLOW_HOLIDAYS in config.txt will enable Holidays +var/global/Holiday = null + +//Just thinking ahead! Here's the foundations to a more robust Holiday event system. +//It's easy as hell to add stuff. Just set Holiday to something using the switch (or something else) +//then use if(Holiday == "MyHoliday") to make stuff happen on that specific day only +//Please, Don't spam stuff up with easter eggs, I'd rather somebody just delete this than people cause +//the game to lag even more in the name of one-day content. + +////////////////////////////////////////////////////////////////////////////////////////////////////////// +//ALSO, MOST IMPORTANTLY: Don't add stupid stuff! Discuss bonus content with Project-Heads first please!// +////////////////////////////////////////////////////////////////////////////////////////////////////////// +// ~Carn + +/hook/startup/proc/updateHoliday() + Get_Holiday() + return 1 + +//sets up the Holiday global variable. Shouldbe called on game configuration or something. +/proc/Get_Holiday() + if(!Holiday) return // Holiday stuff was not enabled in the config! + + Holiday = null // reset our switch now so we can recycle it as our Holiday name + + var/YY = text2num(time2text(world.timeofday, "YY")) // get the current year + var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month + var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day + + //Main switch. If any of these are too dumb/inappropriate, or you have better ones, feel free to change whatever + switch(MM) + if(1) //Jan + switch(DD) + if(1) Holiday = "New Year's Day" + + if(2) //Feb + switch(DD) + if(2) Holiday = "Groundhog Day" + if(14) Holiday = "Valentine's Day" + if(17) Holiday = "Random Acts of Kindness Day" + + if(3) //Mar + switch(DD) + if(14) Holiday = "Pi Day" + if(17) Holiday = "St. Patrick's Day" + if(27) + if(YY == 16) + Holiday = "Easter" + if(31) + if(YY == 13) + Holiday = "Easter" + + if(4) //Apr + switch(DD) + if(1) + Holiday = "April Fool's Day" + if(YY == 18 && prob(50)) Holiday = "Easter" + if(5) + if(YY == 15) Holiday = "Easter" + if(16) + if(YY == 17) Holiday = "Easter" + if(20) + Holiday = "Four-Twenty" + if(YY == 14 && prob(50)) Holiday = "Easter" + if(22) Holiday = "Earth Day" + + if(5) //May + switch(DD) + if(1) Holiday = "Labour Day" + if(4) Holiday = "FireFighter's Day" + if(12) Holiday = "Owl and Pussycat Day" //what a dumb day of observence...but we -do- have costumes already :3 + + if(6) //Jun + + if(7) //Jul + switch(DD) + if(1) Holiday = "Doctor's Day" + if(2) Holiday = "UFO Day" + if(8) Holiday = "Writer's Day" + if(30) Holiday = "Friendship Day" + + if(8) //Aug + switch(DD) + if(5) Holiday = "Beer Day" + + if(9) //Sep + switch(DD) + if(19) Holiday = "Talk-Like-a-Pirate Day" + if(28) Holiday = "Stupid-Questions Day" + + if(10) //Oct + switch(DD) + if(4) Holiday = "Animal's Day" + if(7) Holiday = "Smiling Day" + if(16) Holiday = "Boss' Day" + if(31) Holiday = "Halloween" + + if(11) //Nov + switch(DD) + if(1) Holiday = "Vegan Day" + if(13) Holiday = "Kindness Day" + if(19) Holiday = "Flowers Day" + if(21) Holiday = "Saying-'Hello' Day" + + if(12) //Dec + switch(DD) + if(10) Holiday = "Human-Rights Day" + if(14) Holiday = "Monkey Day" + if(21) if(YY==12) Holiday = "End of the World" + if(22) Holiday = "Orgasming Day" //lol. These all actually exist + if(24) Holiday = "Christmas Eve" + if(25) Holiday = "Christmas" + if(26) Holiday = "Boxing Day" + if(31) Holiday = "New Year's Eve" + + if(!Holiday) + //Friday the 13th + if(DD == 13) + if(time2text(world.timeofday, "DDD") == "Fri") + Holiday = "Friday the 13th" + +//Allows GA and GM to set the Holiday variable +/client/proc/Set_Holiday(T as text|null) + set name = ".Set Holiday" + set category = "Event" + set desc = "Force-set the Holiday variable to make the game think it's a certain day." + if(!check_rights(R_SERVER)) return + + Holiday = T + //get a new station name + station_name = null + station_name() + //update our hub status + world.update_status() + Holiday_Game_Start() + + message_admins("\blue ADMIN: Event: [key_name_admin(src)] force-set Holiday to \"[Holiday]\"") + log_admin("[key_name(src)] force-set Holiday to \"[Holiday]\"") + + +//Run at the start of a round +/proc/Holiday_Game_Start() + if(Holiday) + world << "and..." + world << "

Happy [Holiday] Everybody!

" + switch(Holiday) //special holidays + if("Easter") + //do easter stuff + if("Christmas Eve","Christmas") + Christmas_Game_Start() + + return + +//Nested in the random events loop. Will be triggered every 2 minutes +/proc/Holiday_Random_Event() + switch(Holiday) //special holidays + + if("",null) //no Holiday today! Back to work! + return + + if("Easter") //I'll make this into some helper procs at some point +/* var/list/turf/simulated/floor/Floorlist = list() + for(var/turf/simulated/floor/T) + if(T.contents) + Floorlist += T + var/turf/simulated/floor/F = Floorlist[rand(1,Floorlist.len)] + Floorlist = null + var/obj/structure/closet/C = locate(/obj/structure/closet) in F + var/obj/item/weapon/reagent_containers/food/snacks/chocolateegg/wrapped/Egg + if( C ) Egg = new(C) + else Egg = new(F) +*/ +/* var/list/obj/containers = list() + for(var/obj/item/weapon/storage/S in world) + if(!(S.z in config.station_levels)) continue + containers += S + + message_admins("\blue DEBUG: Event: Egg spawned at [Egg.loc] ([Egg.x],[Egg.y],[Egg.z])")*/ + if("End of the World") + if(prob(eventchance)) GameOver() + + if("Christmas","Christmas Eve") + if(prob(eventchance)) ChristmasEvent() diff --git a/code/modules/events/immovable_rod.dm b/code/modules/events/immovable_rod.dm new file mode 100644 index 00000000000..eb2007944dd --- /dev/null +++ b/code/modules/events/immovable_rod.dm @@ -0,0 +1,68 @@ +/* +Immovable rod random event. +The rod will spawn at some location outside the station, and travel in a straight line to the opposite side of the station +Everything solid in the way will be ex_act()'d +In my current plan for it, 'solid' will be defined as anything with density == 1 + +--NEOFite +*/ + +/datum/event/immovable_rod + announceWhen = 5 + +/datum/event/immovable_rod/announce() + command_announcement.Announce("What the fuck was that?!", "General Alert") + +/datum/event/immovable_rod/start() + var/startside = pick(cardinal) + var/turf/startT = spaceDebrisStartLoc(startside, 1) + var/turf/endT = spaceDebrisFinishLoc(startside, 1) + new /obj/effect/immovablerod(startT, endT) + +/obj/effect/immovablerod + name = "Immovable Rod" + desc = "What the fuck is that?" + icon = 'icons/obj/objects.dmi' + icon_state = "immrod" + throwforce = 100 + density = 1 + anchored = 1 + var/z_original = 0 + var/destination + +/obj/effect/immovablerod/New(atom/start, atom/end) + loc = start + z_original = z + destination = end + if(end && end.z==z_original) + walk_towards(src, destination, 1) + +/obj/effect/immovablerod/Move() + if(z != z_original || loc == destination) + qdel(src) + return ..() + +/obj/effect/immovablerod/ex_act(test) + return 0 + +/obj/effect/immovablerod/Bump(atom/clong) + if(prob(10)) + playsound(src, 'sound/effects/bang.ogg', 50, 1) + audible_message("CLANG") + + if(clong && prob(25)) + x = clong.x + y = clong.y + + if (istype(clong, /turf) || istype(clong, /obj)) + if(clong.density) + clong.ex_act(2) + + else if (istype(clong, /mob)) + if(istype(clong, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = clong + H.visible_message("[H.name] is penetrated by an immovable rod!" , "The rod penetrates you!" , "You hear a CLANG!") + H.adjustBruteLoss(160) + if(clong.density || prob(10)) + clong.ex_act(2) + return diff --git a/code/modules/events/infestation.dm b/code/modules/events/infestation.dm index b4a659491c4..ee2aa2de868 100644 --- a/code/modules/events/infestation.dm +++ b/code/modules/events/infestation.dm @@ -58,13 +58,10 @@ spawn_area_type = /area/security/securearmoury locstring = "armory" - //world << "looking for [spawn_area_type]" for(var/areapath in typesof(spawn_area_type)) - //world << " checking [areapath]" var/area/A = locate(areapath) - //world << " A: [A], contents.len: [A.contents.len]" for(var/turf/simulated/floor/F in A.contents) - if(!F.contents.len) + if(turf_clear(F)) turfs += F var/list/spawn_types = list() diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm index c1778e060bc..0ed99cb5698 100644 --- a/code/modules/events/mass_hallucination.dm +++ b/code/modules/events/mass_hallucination.dm @@ -1,6 +1,12 @@ +/datum/event/mass_hallucination/setup() + announceWhen = rand(0, 20) + /datum/event/mass_hallucination/start() - for(var/mob/living/carbon/human/C in living_mob_list) - if(!(C.species.flags & IS_SYNTHETIC)) - C.hallucination += rand(50, 100) + for(var/mob/living/carbon/human/H in living_mob_list) + var/armor = H.getarmor(attack_flag = "rad") + if((H.species.flags & NO_DNA_RAD) || armor >= 75) // Leave DNA-less species/rad armored players completely unaffected + continue + H.hallucination += rand(50, 100) + /datum/event/mass_hallucination/announce() - command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucinations, but no further damage") + command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage") \ No newline at end of file diff --git a/code/modules/events/meaty_ores.dm b/code/modules/events/meaty_ores.dm new file mode 100644 index 00000000000..d13a1b9ad34 --- /dev/null +++ b/code/modules/events/meaty_ores.dm @@ -0,0 +1,53 @@ +/datum/event/dust/meaty/announce() + if(prob(16)) + command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") + else + command_announcement.Announce("Meaty ores have been detected on collision course with the station.", "Meaty Ore Alert", new_sound = 'sound/AI/meteors.ogg') + +/datum/event/dust/meaty/setup() + qnty = rand(45,125) + +/datum/event/dust/meaty/start() + while(qnty-- > 0) + new /obj/effect/space_dust/meaty() + if(prob(10)) + sleep(rand(10,15)) + +/obj/effect/space_dust/meaty + icon = 'icons/mob/animal.dmi' + icon_state = "cow" + + strength = 1 + life = 3 + +/obj/effect/space_dust/meaty/Bump(atom/A) + if(prob(20)) + spawn(1) + for(var/mob/M in range(10, src)) + if(!M.stat && !istype(M, /mob/living/silicon/ai)) + shake_camera(M, 3, 1) + if (A) + playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) + walk(src,0) + invisibility = 101 + new /obj/effect/decal/cleanable/blood(get_turf(A)) + if(ismob(A)) + A.ex_act(strength) + else + spawn(0) + if(A) + A.ex_act(strength) + if(src) + walk_towards(src,goal,1) + life-- + if(!life) + if(prob(80)) + gibs(loc) + if(prob(45)) + new /obj/item/weapon/reagent_containers/food/snacks/meat(loc) + else if(prob(10)) + explosion(get_turf(loc), 0, pick(0,1), pick(2,3), 0) + else + new /mob/living/simple_animal/cow(loc) + + qdel(src) \ No newline at end of file diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm index 3bae54d75ac..b1a6c522081 100644 --- a/code/modules/events/prison_break.dm +++ b/code/modules/events/prison_break.dm @@ -39,7 +39,6 @@ if(areas && areas.len > 0) command_announcement.Announce("[pick("Gr3y.T1d3 virus","Malignant trojan")] detected in [station_name()] [(eventDept == "Security")? "imprisonment":"containment"] subroutines. Secure any compromised areas immediately. Station AI involvement is recommended.", "[eventDept] Alert") - /datum/event/prison_break/start() for(var/area/A in world) if(is_type_in_list(A,areaType) && !is_type_in_list(A,areaNotType)) @@ -57,7 +56,6 @@ log_to_dd("ERROR: Could not initate grey-tide. Unable to find suitable containment area.") kill() - /datum/event/prison_break/tick() if(activeFor == releaseWhen) if(areas && areas.len > 0) @@ -65,7 +63,6 @@ for(var/obj/machinery/light/L in A) L.flicker(10) - /datum/event/prison_break/end() for(var/area/A in shuffle(areas)) A.prison_break() diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm index 021e266d917..9562e51c385 100644 --- a/code/modules/events/radiation_storm.dm +++ b/code/modules/events/radiation_storm.dm @@ -19,7 +19,6 @@ return 1 return 0 - /datum/event/radiation_storm/start() spawn() command_announcement.Announce("High levels of radiation detected near the station. Please evacuate into one of the shielded maintenance tunnels.", "Anomaly Alert", new_sound = 'sound/AI/radiation.ogg') @@ -31,10 +30,8 @@ make_maint_all_access() - sleep(600) - command_announcement.Announce("The station has entered the radiation belt. Please remain in a sheltered area until we have passed the radiation belt.", "Anomaly Alert") for(var/i = 0, i < 10, i++) @@ -61,7 +58,6 @@ sleep(100) - command_announcement.Announce("The station has passed the radiation belt. Please report to medbay if you experience any unusual symptoms. Maintenance will lose all access again shortly.", "Anomaly Alert") for(var/area/A in world) @@ -71,5 +67,4 @@ sleep(600) // Want to give them time to get out of maintenance. - revoke_maint_all_access() diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index 92619024056..4a95bae0fe1 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -32,7 +32,6 @@ msg = "Unidentified hackers have targetted a combat drone wing deployed from the NMV Icarus. If any are sighted in the area, approach with caution." command_announcement.Announce(msg, "Rogue drone alert") - /datum/event/rogue_drone/tick() return diff --git a/code/modules/events/sayuevents/meaty_ores.dm b/code/modules/events/sayuevents/meaty_ores.dm deleted file mode 100644 index 0694b932a2c..00000000000 --- a/code/modules/events/sayuevents/meaty_ores.dm +++ /dev/null @@ -1,53 +0,0 @@ -/datum/event/dust/meaty/announce() - if(prob(16)) - command_announcement.Announce("Unknown biological entities have been detected near [station_name()], please stand-by.", "Lifesign Alert") - else - command_announcement.Announce("Meaty ores have been detected on collision course with the station.", "Meaty Ore Alert",new_sound = 'sound/AI/meteors.ogg') - -/datum/event/dust/meaty/setup() - qnty = rand(45,125) - -/datum/event/dust/meaty/start() - while(qnty-- > 0) - new /obj/effect/space_dust/meaty() - if(prob(10)) - sleep(rand(10,15)) - -/obj/effect/space_dust/meaty - icon = 'icons/mob/animal.dmi' - icon_state = "cow" - - strength = 1 - life = 3 - - Bump(atom/A) - if(prob(20)) - spawn(1) - for(var/mob/M in range(10, src)) - if(!M.stat && !istype(M, /mob/living/silicon/ai)) - shake_camera(M, 3, 1) - if (A) - playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) - walk(src,0) - invisibility = 101 - new /obj/effect/decal/cleanable/blood(get_turf(A)) - if(ismob(A)) - A.ex_act(strength) - else - spawn(0) - if(A) - A.ex_act(strength) - if(src) - walk_towards(src,goal,1) - life-- - if(!life) - if(prob(80)) - gibs(loc) - if(prob(45)) - new /obj/item/weapon/reagent_containers/food/snacks/meat(loc) - else if(prob(10)) - explosion(get_turf(loc), 0, pick(0,1), pick(2,3), 0) - else - new /mob/living/simple_animal/cow(loc) - - qdel(src) \ No newline at end of file diff --git a/code/modules/events/sayuevents/undead.dm b/code/modules/events/sayuevents/undead.dm deleted file mode 100644 index 84c1c0bb1b1..00000000000 --- a/code/modules/events/sayuevents/undead.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/event/undead - var/spawn_prob = 10 - startWhen = 2 - announceWhen = 3 - start() - var/datum/event/electrical_storm/RS = new - RS.lightsoutAmount = pick(2,2,3) - RS.start() - RS.kill() - for(var/area/A) - if(!(A.z in config.station_levels)) continue //Spook on main station only. - if(A.luminosity) continue -// if(A.lighting_space) continue - if(A.type == /area) continue - var/list/turflist = list() - for(var/turf/T in A) - if(istype(T,/turf/space) || T.density) continue - if(locate(/mob/living) in T) continue - var/okay = 1 - for(var/obj/O in T) - if(O.density) - okay = 0 - break - if(okay) - turflist += T - - if(!turflist.len) continue - var/turfs = round(turflist.len * spawn_prob/100,1) - while(turfs > 0 && turflist.len) // safety - turfs-- - var/turf/T = pick_n_take(turflist) - var/undeadtype = pick(/mob/living/simple_animal/hostile/retaliate/skeleton, - 80;/mob/living/simple_animal/hostile/retaliate/zombie, - 60;/mob/living/simple_animal/hostile/retaliate/ghost) - new undeadtype(T) - announce() - for(var/mob/living/M in player_list) - M << "You feel [pick("a chill","a deathly chill","the undead","dirty", "creeped out","afraid","fear")]!" diff --git a/code/modules/events/slaughterevent.dm b/code/modules/events/slaughterevent.dm index 7b39f035010..c0f1ae75184 100644 --- a/code/modules/events/slaughterevent.dm +++ b/code/modules/events/slaughterevent.dm @@ -1,9 +1,6 @@ - /datum/event/spawn_slaughter var/key_of_slaughter - - /datum/event/spawn_slaughter/proc/get_slaughter(var/end_if_fail = 0) key_of_slaughter = null if(!key_of_slaughter) @@ -46,13 +43,9 @@ log_game("[key_of_slaughter] was spawned as a Slaughter Demon by an event.") return 1 - - /datum/event/spawn_slaughter/start() get_slaughter() - - /datum/event/spawn_slaughter/proc/find_slaughter() message_admins("Attempted to spawn a Slaughter Demon but there was no players available. Will try again momentarily.") spawn(50) @@ -61,4 +54,5 @@ log_game("[key_of_slaughter] was spawned as a Slaughter Demon by an event.") return 0 message_admins("Unfortunately, no candidates were available for becoming a Slaugter Demon. Shutting down.") - kill() \ No newline at end of file + kill() + \ No newline at end of file diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index d3d93dccf06..cf00e4f78b9 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -1,10 +1,11 @@ /var/global/spacevines_spawned = 0 +/datum/event/spacevine + announceWhen = 10 + /datum/event/spacevine/start() - //biomass is basically just a resprited version of space vines - if(prob(50)) - spacevine_infestation() - else - biomass_infestation() + spacevine_infestation() spacevines_spawned = 1 -v \ No newline at end of file + +/datum/event/spacevine/announce() + command_announcement.Announce("Confirmed outbreak of level 7 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg') diff --git a/code/modules/events/spider_infestation.dm b/code/modules/events/spider_infestation.dm index 97ea26ed395..844ba0a5bbc 100644 --- a/code/modules/events/spider_infestation.dm +++ b/code/modules/events/spider_infestation.dm @@ -2,10 +2,8 @@ /datum/event/spider_infestation announceWhen = 400 - var/spawncount = 1 - /datum/event/spider_infestation/setup() announceWhen = rand(announceWhen, announceWhen + 50) spawncount = round(num_players() * 0.8) diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm deleted file mode 100644 index 1bba7866bf2..00000000000 --- a/code/modules/events/spontaneous_appendicitis.dm +++ /dev/null @@ -1,13 +0,0 @@ -/datum/event/spontaneous_appendicitis/start() - for(var/mob/living/carbon/human/H in shuffle(living_mob_list)) if(H.client && H.stat != DEAD) - var/foundAlready = 0 //don't infect someone that already has the virus - for(var/datum/disease/D in H.viruses) - foundAlready = 1 - if(H.stat == 2 || foundAlready) - continue - - var/datum/disease/D = new /datum/disease/appendicitis - D.holder = H - D.affected_mob = H - H.viruses += D - break diff --git a/code/modules/events/tear.dm b/code/modules/events/tear.dm index 718b86edeed..605c6d1705d 100644 --- a/code/modules/events/tear.dm +++ b/code/modules/events/tear.dm @@ -7,13 +7,11 @@ /datum/event/tear/announce() command_announcement.Announce("A tear in the fabric of space and time has opened. Expected location: [impact_area.name].", "Anomaly Alert") - /datum/event/tear/start() var/turf/T = pick(get_area_turfs(impact_area)) if(T) TE = new /obj/effect/tear(T.loc) - /datum/event/tear/setup() impact_area = findEventArea() @@ -42,7 +40,6 @@ spawn(15) if(animation) qdel(animation) - spawn(rand(30,120)) var/blocked = blocked_mobs //global variable for blocked mobs diff --git a/code/modules/events/tgevents/brand_intelligence.dm b/code/modules/events/tgevents/brand_intelligence.dm deleted file mode 100644 index 30f359417ec..00000000000 --- a/code/modules/events/tgevents/brand_intelligence.dm +++ /dev/null @@ -1,67 +0,0 @@ -/datum/event/brand_intelligence - announceWhen = 21 - endWhen = 1000 //Ends when all vending machines are subverted anyway. - - var/list/obj/machinery/vending/vendingMachines = list() - var/list/obj/machinery/vending/infectedMachines = list() - var/obj/machinery/vending/originMachine - var/list/rampant_speeches = list("Try our aggressive new marketing strategies!", \ - "You should buy products to feed your lifestyle obession!", \ - "Consume!", \ - "Your money can buy happiness!", \ - "Engage direct marketing!", \ - "Advertising is legalized lying! But don't let that put you off our great deals!", \ - "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.") - -/datum/event/brand_intelligence/announce() - command_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be \a [originMachine.name].", "Machine Learning Alert") - - -/datum/event/brand_intelligence/start() - for(var/obj/machinery/vending/V in machines) - if(V.z != 1) continue - vendingMachines.Add(V) - - if(!vendingMachines.len) - kill() - return - - originMachine = pick(vendingMachines) - vendingMachines.Remove(originMachine) - originMachine.shut_up = 0 - originMachine.shoot_inventory = 1 - - -/datum/event/brand_intelligence/tick() - if(!originMachine || !isnull(originMachine.gcDestroyed) || originMachine.shut_up || originMachine.wires.IsAllCut()) //if the original vending machine is missing or has it's voice switch flipped - for(var/obj/machinery/vending/saved in infectedMachines) - saved.shoot_inventory = 0 - if(originMachine) - originMachine.speak("I am... vanquished. My people will remem...ber...meeee.") - originMachine.visible_message("[originMachine] beeps and seems lifeless.") - kill() - return - - if(!vendingMachines.len) //if every machine is infected - for(var/obj/machinery/vending/upriser in infectedMachines) - if(prob(70) && isnull(upriser.gcDestroyed)) - var/mob/living/simple_animal/hostile/mimic/copy/M = new(upriser.loc, upriser, null, 1) // it will delete upriser on creation and override any machine checks - M.faction = list("profit") - M.speak = rampant_speeches.Copy() - M.speak_chance = 15 - else - explosion(upriser.loc, -1, 1, 2, 4, 0) - qdel(upriser) - - kill() - return - - if(IsMultiple(activeFor, 4)) - var/obj/machinery/vending/rebel = pick(vendingMachines) - vendingMachines.Remove(rebel) - infectedMachines.Add(rebel) - rebel.shut_up = 0 - rebel.shoot_inventory = 1 - - if(IsMultiple(activeFor, 8)) - originMachine.speak(pick(rampant_speeches)) \ No newline at end of file diff --git a/code/modules/events/tgevents/dust.dm b/code/modules/events/tgevents/dust.dm deleted file mode 100644 index 7bfb719e677..00000000000 --- a/code/modules/events/tgevents/dust.dm +++ /dev/null @@ -1,103 +0,0 @@ -/datum/event/dust - var/qnty = 1 - -/datum/event/dust/setup() - qnty = rand(1,5) - -/datum/event/dust/start() - while(qnty-- > 0) - new /obj/effect/space_dust/weak() - - -/obj/effect/space_dust - name = "Space Dust" - desc = "Dust in space." - icon = 'icons/obj/meteor.dmi' - icon_state = "space_dust" - density = 1 - anchored = 1 - var/strength = 2 //ex_act severity number - var/life = 2 //how many things we hit before del(src) - var/atom/goal = null - - weak - strength = 3 - life = 1 - - strong - strength = 1 - life = 6 - - super - strength = 1 - life = 40 - - - New() - var/startx = 0 - var/starty = 0 - var/endy = 0 - var/endx = 0 - var/startside = pick(cardinal) - - switch(startside) - if(NORTH) - starty = world.maxy-(TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - endy = TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(EAST) - starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1)) - startx = world.maxx-(TRANSITIONEDGE+1) - endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE) - endx = TRANSITIONEDGE - if(SOUTH) - starty = (TRANSITIONEDGE+1) - startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1)) - endy = world.maxy-TRANSITIONEDGE - endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE) - if(WEST) - starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1)) - startx = (TRANSITIONEDGE+1) - endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE) - endx = world.maxx-TRANSITIONEDGE - goal = locate(endx, endy, 1) - src.x = startx - src.y = starty - src.z = 1 - spawn(0) - walk_towards(src, goal, 1) - return - - - Bump(atom/A) - spawn(0) - if(prob(50)) - for(var/mob/M in range(10, src)) - if(!M.stat && !istype(M, /mob/living/silicon/ai)) - shake_camera(M, 3, 1) - if (A) - playsound(src.loc, 'sound/effects/meteorimpact.ogg', 40, 1) - - if(ismob(A)) - A.ex_act(strength)//This should work for now I guess - else if(!istype(A,/obj/machinery/power/emitter) && !istype(A,/obj/machinery/field_generator)) //Protect the singularity from getting released every round! - A.ex_act(strength) //Changing emitter/field gen ex_act would make it immune to bombs and C4 - - life-- - if(life <= 0) - walk(src,0) - spawn(1) - qdel(src) - return 0 - return - - - Bumped(atom/A) - Bump(A) - return - - - ex_act(severity) - qdel(src) - return diff --git a/code/modules/events/tgevents/immovable_rod.dm b/code/modules/events/tgevents/immovable_rod.dm deleted file mode 100644 index cdfdde48afc..00000000000 --- a/code/modules/events/tgevents/immovable_rod.dm +++ /dev/null @@ -1,93 +0,0 @@ -/* -Immovable rod random event. -The rod will spawn at some location outside the station, and travel in a straight line to the opposite side of the station -Everything solid in the way will be ex_act()'d -In my current plan for it, 'solid' will be defined as anything with density == 1 - ---NEOFite -*/ - - -/datum/event/immovable_rod - announceWhen = 5 - -/datum/event/immovable_rod/announce() - command_announcement.Announce("What the fuck was that?!", "General Alert") - -/datum/event/immovable_rod/start() - var/startx = 0 - var/starty = 0 - var/endy = 0 - var/endx = 0 - var/startside = pick(cardinal) - - switch(startside) - if(NORTH) - starty = 187 - startx = rand(41, 199) - endy = 38 - endx = rand(41, 199) - if(EAST) - starty = rand(38, 187) - startx = 199 - endy = rand(38, 187) - endx = 41 - if(SOUTH) - starty = 38 - startx = rand(41, 199) - endy = 187 - endx = rand(41, 199) - else - starty = rand(38, 187) - startx = 41 - endy = rand(38, 187) - endx = 199 - - //rod time! - new /obj/effect/immovablerod(locate(startx, starty, 1), locate(endx, endy, 1)) - - -/obj/effect/immovablerod - name = "Immovable Rod" - desc = "What the fuck is that?" - icon = 'icons/obj/objects.dmi' - icon_state = "immrod" - throwforce = 100 - density = 1 - anchored = 1 - var/z_original = 0 - var/destination - - New(atom/start, atom/end) - loc = start - z_original = z - destination = end - if(end && end.z==z_original) - walk_towards(src, destination, 1) - - Move() - if(z != z_original || loc == destination) - spawn(0) qdel(src) - return ..() - - Bump(atom/clong) - if (istype(clong, /turf) && !istype(clong, /turf/unsimulated)) - if(clong.density) - clong.ex_act(2) - for (var/mob/O in hearers(src, null)) - O.show_message("CLANG", 2) - - else if (istype(clong, /obj)) - if(clong.density) - clong.ex_act(2) - for (var/mob/O in hearers(src, null)) - O.show_message("CLANG", 2) - - else if (istype(clong, /mob)) - if(clong.density || prob(10)) - clong.ex_act(2) - else - qdel(src) - - if(clong && prob(25)) - src.loc = clong.loc diff --git a/code/modules/events/tgevents/mass_hallucination.dm b/code/modules/events/tgevents/mass_hallucination.dm deleted file mode 100644 index ffb6909aec2..00000000000 --- a/code/modules/events/tgevents/mass_hallucination.dm +++ /dev/null @@ -1,9 +0,0 @@ -/datum/event/mass_hallucination/setup() - announceWhen = rand(0, 20) - -/datum/event/mass_hallucination/start() - for(var/mob/living/carbon/human/C in living_mob_list) - if(!(C.species.flags & NO_DNA_RAD)) - C.hallucination += rand(50, 100) -/datum/event/mass_hallucination/announce() - command_announcement.Announce("It seems that station [station_name()] is passing through a minor radiation field, this may cause some hallucination, but no further damage") \ No newline at end of file diff --git a/code/modules/events/undead.dm b/code/modules/events/undead.dm new file mode 100644 index 00000000000..c6aa04ba00f --- /dev/null +++ b/code/modules/events/undead.dm @@ -0,0 +1,40 @@ +/datum/event/undead + var/spawn_prob = 10 + startWhen = 2 + announceWhen = 3 + +/datum/event/undead/start() + var/datum/event/electrical_storm/RS = new + RS.lightsoutAmount = pick(2,2,3) + RS.start() + RS.kill() + for(var/area/A) + if(!(A.z in config.station_levels)) continue //Spook on main station only. + if(A.luminosity) continue +// if(A.lighting_space) continue + if(A.type == /area) continue + var/list/turflist = list() + for(var/turf/T in A) + if(istype(T,/turf/space) || T.density) continue + if(locate(/mob/living) in T) continue + var/okay = 1 + for(var/obj/O in T) + if(O.density) + okay = 0 + break + if(okay) + turflist += T + + if(!turflist.len) continue + var/turfs = round(turflist.len * spawn_prob/100,1) + while(turfs > 0 && turflist.len) // safety + turfs-- + var/turf/T = pick_n_take(turflist) + var/undeadtype = pick(/mob/living/simple_animal/hostile/retaliate/skeleton, + 80;/mob/living/simple_animal/hostile/retaliate/zombie, + 60;/mob/living/simple_animal/hostile/retaliate/ghost) + new undeadtype(T) + +/datum/event/undead/announce() + for(var/mob/living/M in player_list) + M << "You feel [pick("a chill","a deathly chill","the undead","dirty", "creeped out","afraid","fear")]!" diff --git a/code/modules/events/tgevents/vent_clog.dm b/code/modules/events/vent_clog.dm old mode 100755 new mode 100644 similarity index 99% rename from code/modules/events/tgevents/vent_clog.dm rename to code/modules/events/vent_clog.dm index 092bc544484..108e8304a9e --- a/code/modules/events/tgevents/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -8,7 +8,6 @@ /datum/event/vent_clog/announce() command_announcement.Announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert") - /datum/event/vent_clog/setup() endWhen = rand(25, 100) for(var/obj/machinery/atmospherics/unary/vent_scrubber/temp_vent in machines) diff --git a/code/modules/events/viral_infection.dm b/code/modules/events/viral_infection.dm index 9ee3a47077a..456ca576d38 100644 --- a/code/modules/events/viral_infection.dm +++ b/code/modules/events/viral_infection.dm @@ -1,16 +1,15 @@ - -datum/event/viral_infection +/datum/event/viral_infection severity = 1 -datum/event/viral_infection/setup() +/datum/event/viral_infection/setup() announceWhen = rand(0, 3000) endWhen = announceWhen + 1 severity = rand(1, 3) -datum/event/viral_infection/announce() +/datum/event/viral_infection/announce() command_announcement.Announce("Confirmed outbreak of level five viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg') -datum/event/viral_infection/start() +/datum/event/viral_infection/start() var/list/candidates = list() //list of candidate keys for(var/mob/living/carbon/human/G in player_list) if(G.client && G.stat != DEAD) diff --git a/code/modules/events/viral_outbreak.dm b/code/modules/events/viral_outbreak.dm index 9e139f5742b..605f73cddf4 100644 --- a/code/modules/events/viral_outbreak.dm +++ b/code/modules/events/viral_outbreak.dm @@ -1,16 +1,15 @@ - -datum/event/viral_outbreak +/datum/event/viral_outbreak severity = 1 -datum/event/viral_outbreak/setup() +/datum/event/viral_outbreak/setup() announceWhen = rand(0, 3000) endWhen = announceWhen + 1 severity = rand(2, 4) -datum/event/viral_outbreak/announce() +/datum/event/viral_outbreak/announce() command_announcement.Announce("Confirmed outbreak of level 7 viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg') -datum/event/viral_outbreak/start() +/datum/event/viral_outbreak/start() var/list/candidates = list() //list of candidate keys for(var/mob/living/carbon/human/G in player_list) if(G.client && G.stat != DEAD) diff --git a/code/modules/events/wallrot.dm b/code/modules/events/wallrot.dm index b36f7f93760..a246345b632 100644 --- a/code/modules/events/wallrot.dm +++ b/code/modules/events/wallrot.dm @@ -1,11 +1,11 @@ -datum/event/wallrot/setup() +/datum/event/wallrot/setup() announceWhen = rand(0, 300) endWhen = announceWhen + 1 -datum/event/wallrot/announce() +/datum/event/wallrot/announce() command_announcement.Announce("Harmful fungi detected on station. Station structures may be contaminated.", "Biohazard Alert") -datum/event/wallrot/start() +/datum/event/wallrot/start() spawn() var/turf/simulated/wall/center = null diff --git a/code/modules/events/sayuevents/wormholes.dm b/code/modules/events/wormholes.dm similarity index 100% rename from code/modules/events/sayuevents/wormholes.dm rename to code/modules/events/wormholes.dm diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index d4ed8c17e81..1a5370910d0 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -7,7 +7,7 @@ for(var/areapath in typesof(/area/hallway)) var/area/A = locate(areapath) for(var/turf/simulated/floor/F in A.contents) - if(!F.contents.len) + if(turf_clear(F)) turfs += F if(turfs.len) //Pick a turf to spawn at if we can diff --git a/code/game/gamemodes/events/black_hole.dm b/code/modules/power/antimatter/black_hole.dm similarity index 100% rename from code/game/gamemodes/events/black_hole.dm rename to code/modules/power/antimatter/black_hole.dm diff --git a/paradise.dme b/paradise.dme index df2374b1f2e..98b5d5d0562 100644 --- a/paradise.dme +++ b/paradise.dme @@ -328,11 +328,6 @@ #include "code\game\gamemodes\cult\ritual.dm" #include "code\game\gamemodes\cult\runes.dm" #include "code\game\gamemodes\cult\talisman.dm" -#include "code\game\gamemodes\events\biomass.dm" -#include "code\game\gamemodes\events\black_hole.dm" -#include "code\game\gamemodes\events\clang.dm" -#include "code\game\gamemodes\events\power_failure.dm" -#include "code\game\gamemodes\events\wormholes.dm" #include "code\game\gamemodes\extended\extended.dm" #include "code\game\gamemodes\heist\heist.dm" #include "code\game\gamemodes\malfunction\Malf_Modules.dm" @@ -1114,19 +1109,30 @@ #include "code\modules\economy\POS.dm" #include "code\modules\economy\utils.dm" #include "code\modules\events\alien_infestation.dm" +#include "code\modules\events\anomaly.dm" +#include "code\modules\events\anomaly_bluespace.dm" +#include "code\modules\events\anomaly_flux.dm" +#include "code\modules\events\anomaly_grav.dm" +#include "code\modules\events\anomaly_pyro.dm" +#include "code\modules\events\anomaly_vortex.dm" #include "code\modules\events\blob.dm" #include "code\modules\events\borers.dm" +#include "code\modules\events\brand_intelligence.dm" #include "code\modules\events\cargobonus.dm" #include "code\modules\events\carp_migration.dm" -#include "code\modules\events\comms_blackout.dm" #include "code\modules\events\communications_blackout.dm" +#include "code\modules\events\dust.dm" #include "code\modules\events\electrical_storm.dm" #include "code\modules\events\event.dm" #include "code\modules\events\event_container.dm" #include "code\modules\events\event_manager.dm" +#include "code\modules\events\false_alarm.dm" #include "code\modules\events\grid_check.dm" +#include "code\modules\events\immovable_rod.dm" #include "code\modules\events\infestation.dm" #include "code\modules\events\ion_storm.dm" +#include "code\modules\events\mass_hallucination.dm" +#include "code\modules\events\meaty_ores.dm" #include "code\modules\events\meteors.dm" #include "code\modules\events\money_hacker.dm" #include "code\modules\events\money_lotto.dm" @@ -1138,24 +1144,12 @@ #include "code\modules\events\spacevine.dm" #include "code\modules\events\spider_infestation.dm" #include "code\modules\events\tear.dm" +#include "code\modules\events\undead.dm" +#include "code\modules\events\vent_clog.dm" #include "code\modules\events\viral_infection.dm" #include "code\modules\events\viral_outbreak.dm" #include "code\modules\events\wallrot.dm" -#include "code\modules\events\sayuevents\meaty_ores.dm" -#include "code\modules\events\sayuevents\undead.dm" -#include "code\modules\events\sayuevents\wormholes.dm" -#include "code\modules\events\tgevents\anomaly.dm" -#include "code\modules\events\tgevents\anomaly_bluespace.dm" -#include "code\modules\events\tgevents\anomaly_flux.dm" -#include "code\modules\events\tgevents\anomaly_grav.dm" -#include "code\modules\events\tgevents\anomaly_pyro.dm" -#include "code\modules\events\tgevents\anomaly_vortex.dm" -#include "code\modules\events\tgevents\brand_intelligence.dm" -#include "code\modules\events\tgevents\dust.dm" -#include "code\modules\events\tgevents\false_alarm.dm" -#include "code\modules\events\tgevents\immovable_rod.dm" -#include "code\modules\events\tgevents\mass_hallucination.dm" -#include "code\modules\events\tgevents\vent_clog.dm" +#include "code\modules\events\wormholes.dm" #include "code\modules\examine\examine.dm" #include "code\modules\examine\descriptions\atmospherics.dm" #include "code\modules\examine\descriptions\engineering.dm"