Revert "12/21 modernizations from TG live"

This commit is contained in:
LetterJay
2016-12-22 22:35:44 -06:00
committed by GitHub
parent cf59ac1c3d
commit ae40d4134e
2215 changed files with 86928 additions and 707332 deletions
+2 -2
View File
@@ -28,8 +28,8 @@
else
temp = new
var/agent_mind = pick_n_take(candidates)
var/scientist_mind = pick_n_take(candidates)
var/agent_mind = popleft(candidates)
var/scientist_mind = popleft(candidates)
var/mob/living/carbon/human/agent = makeBody(agent_mind)
var/mob/living/carbon/human/scientist = makeBody(scientist_mind)
+1 -1
View File
@@ -57,7 +57,7 @@
while(spawncount > 0 && vents.len && candidates.len)
var/obj/vent = pick_n_take(vents)
var/client/C = pick_n_take(candidates)
var/client/C = popleft(candidates)
var/mob/living/carbon/alien/larva/new_xeno = new(vent.loc)
new_xeno.key = C.key
+10
View File
@@ -31,3 +31,13 @@
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/flux(T)
/datum/round_event/anomaly/tick()
if(!newAnomaly)
kill()
return
newAnomaly.anomalyEffect()
/datum/round_event/anomaly/end()
if(newAnomaly)//Kill the anomaly if it still exists at the end.
qdel(newAnomaly)
+55
View File
@@ -7,6 +7,7 @@
/datum/round_event/anomaly/anomaly_bluespace
startWhen = 3
announceWhen = 10
endWhen = 95
/datum/round_event/anomaly/anomaly_bluespace/announce()
@@ -17,3 +18,57 @@
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/bluespace(T)
/datum/round_event/anomaly/anomaly_bluespace/end()
if(newAnomaly.loc)//If it hasn't been neutralized, it's time to warp half the station away jeez
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
// Calculate new position (searches through beacons in world)
var/obj/item/device/radio/beacon/chosen
var/list/possible = list()
for(var/obj/item/device/radio/beacon/W in world)
possible += W
if(possible.len > 0)
chosen = pick(possible)
if(chosen)
// Calculate previous position for transition
var/turf/FROM = T // the turf of origin we're travelling FROM
var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO
playsound(TO, 'sound/effects/phasein.ogg', 100, 1)
priority_announce("Massive bluespace translocation detected.", "Anomaly Alert")
var/list/flashers = list()
for(var/mob/living/carbon/C in viewers(TO, null))
if(C.flash_eyes())
flashers += C
var/y_distance = TO.y - FROM.y
var/x_distance = TO.x - FROM.x
for (var/atom/movable/A in urange(12, FROM )) // iterate thru list of mobs in the area
if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid
if(A.anchored) continue
var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place
if(!A.Move(newloc) && newloc) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving
A.loc = newloc
spawn()
if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect
var/mob/M = A
if(M.client)
var/obj/blueeffect = new /obj(src)
blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH"
blueeffect.icon = 'icons/effects/effects.dmi'
blueeffect.icon_state = "shieldsparkles"
blueeffect.layer = FLASH_LAYER
blueeffect.mouse_opacity = 0
M.client.screen += blueeffect
sleep(20)
M.client.screen -= blueeffect
qdel(blueeffect)
qdel(newAnomaly)
+8
View File
@@ -9,6 +9,8 @@
/datum/round_event/anomaly/anomaly_flux
startWhen = 3
announceWhen = 20
endWhen = 80
/datum/round_event/anomaly/anomaly_flux/announce()
priority_announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
@@ -18,3 +20,9 @@
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/flux(T)
/datum/round_event/anomaly/anomaly_flux/end()
if(newAnomaly.loc)//If it hasn't been neutralized, it's time to blow up.
explosion(newAnomaly, 1, 4, 16, 18) //Low devastation, but hits a lot of stuff.
qdel(newAnomaly)
+3 -1
View File
@@ -7,6 +7,8 @@
/datum/round_event/anomaly/anomaly_grav
startWhen = 3
announceWhen = 20
endWhen = 120
/datum/round_event/anomaly/anomaly_grav/announce()
priority_announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
@@ -14,4 +16,4 @@
/datum/round_event/anomaly/anomaly_grav/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/grav(T)
newAnomaly = new /obj/effect/anomaly/grav(T)
+22
View File
@@ -7,6 +7,8 @@
/datum/round_event/anomaly/anomaly_pyro
startWhen = 10
announceWhen = 3
endWhen = 85
/datum/round_event/anomaly/anomaly_pyro/announce()
priority_announce("Pyroclastic anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert")
@@ -15,3 +17,23 @@
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/pyro(T)
/datum/round_event/anomaly/anomaly_pyro/tick()
if(!newAnomaly)
kill()
return
if(IsMultiple(activeFor, 5))
newAnomaly.anomalyEffect()
/datum/round_event/anomaly/anomaly_pyro/end()
if(newAnomaly.loc)
var/turf/open/T = get_turf(newAnomaly)
if(istype(T))
T.atmos_spawn_air("o2=500;plasma=500;TEMP=1000") //Make it hot and burny for the new slime
var/mob/living/simple_animal/slime/S = new/mob/living/simple_animal/slime(T)
S.colour = pick("red", "orange")
S.rabid = 1
qdel(newAnomaly)
+3 -1
View File
@@ -9,6 +9,8 @@
/datum/round_event/anomaly/anomaly_vortex
startWhen = 10
announceWhen = 3
endWhen = 95
/datum/round_event/anomaly/anomaly_vortex/announce()
priority_announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert")
@@ -16,4 +18,4 @@
/datum/round_event/anomaly/anomaly_vortex/start()
var/turf/T = safepick(get_area_turfs(impact_area))
if(T)
newAnomaly = new /obj/effect/anomaly/bhole(T)
newAnomaly = new /obj/effect/anomaly/bhole(T)
+12 -20
View File
@@ -1,6 +1,6 @@
/datum/round_event_control/blob
name = "Blob"
typepath = /datum/round_event/ghost_role/blob
typepath = /datum/round_event/blob
weight = 5
max_occurrences = 1
@@ -9,30 +9,22 @@
gamemode_blacklist = list("blob") //Just in case a blob survives that long
/datum/round_event/ghost_role/blob
/datum/round_event/blob
announceWhen = 12
role_name = "blob_overmind"
endWhen = 120
var/new_rate = 2
/datum/round_event/ghost_role/blob/New(my_processing = TRUE, set_point_rate)
/datum/round_event/blob/New(var/strength)
..()
if(set_point_rate)
new_rate = set_point_rate
if(strength)
new_rate = strength
/datum/round_event/ghost_role/blob/announce()
/datum/round_event/blob/announce()
priority_announce("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg')
/datum/round_event/ghost_role/blob/spawn_role()
if(!blobstart.len)
return MAP_ERROR
var/list/candidates = get_candidates("blob", null, ROLE_BLOB)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
var/mob/dead/observer/new_blob = pick(candidates)
var/obj/structure/blob/core/BC = new/obj/structure/blob/core(pick(blobstart), new_blob.client, new_rate)
BC.overmind.blob_points = min(20 + player_list.len, BC.overmind.max_blob_points)
spawned_mobs += BC.overmind
message_admins("[BC.overmind.key] has been made into a blob overmind by an event.")
log_game("[BC.overmind.key] was spawned as a blob overmind by an event.")
return SUCCESSFUL_SPAWN
/datum/round_event/blob/start()
var/turf/T = pick(blobstart)
if(!T)
return kill()
new/obj/effect/blob/core(T, null, new_rate)
+1 -3
View File
@@ -24,7 +24,7 @@
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
var/mob/dead/selected_candidate = pick_n_take(candidates)
var/mob/dead/selected_candidate = popleft(candidates)
var/key = selected_candidate.key
var/datum/mind/Mind = create_devil_mind(key)
@@ -33,9 +33,7 @@
var/mob/living/carbon/human/devil = create_event_devil(spawn_loc)
Mind.transfer_to(devil)
ticker.mode.finalize_devil(Mind)
ticker.mode.add_devil_objectives(src, 2)
Mind.announceDevilLaws()
Mind.announce_objectives()
spawned_mobs += devil
+10 -19
View File
@@ -1,30 +1,21 @@
/datum/round_event_control/space_dust
/datum/round_event_control/meteor_wave/dust
name = "Minor Space Dust"
typepath = /datum/round_event/space_dust
typepath = /datum/round_event/meteor_wave/dust
weight = 200
max_occurrences = 1000
earliest_start = 0
alertadmins = 0
/datum/round_event/space_dust
/datum/round_event/meteor_wave/dust
startWhen = 1
endWhen = 2
announceWhen = 0
/datum/round_event/space_dust/start()
/datum/round_event/meteor_wave/dust/announce()
return
/datum/round_event/meteor_wave/dust/start()
spawn_meteors(1, meteorsC)
/datum/round_event_control/sandstorm
name = "Sandstorm"
typepath = /datum/round_event/sandstorm
weight = 0
max_occurrences = 0
earliest_start = 0
/datum/round_event/sandstorm
startWhen = 1
endWhen = 150 // ~5 min
announceWhen = 0
/datum/round_event/sandstorm/tick()
spawn_meteors(10, meteorsC)
/datum/round_event/meteor_wave/dust/tick()
return
+5 -15
View File
@@ -1,6 +1,3 @@
#define MAX_SPAWN_ATTEMPT 3
/datum/round_event/ghost_role
// We expect 0 or more /clients (or things with .key) in this list
var/list/priority_candidates = list()
@@ -11,24 +8,18 @@
/datum/round_event/ghost_role/start()
try_spawning()
/datum/round_event/ghost_role/proc/try_spawning(sanity = 0, retry = 0)
/datum/round_event/ghost_role/proc/try_spawning(sanity = 0)
// The event does not run until the spawning has been attempted
// to prevent us from getting gc'd halfway through
processing = FALSE
var/status = spawn_role()
if((status == WAITING_FOR_SOMETHING))
if(retry >= MAX_SPAWN_ATTEMPT)
message_admins("[role_name] event has exceeded maximum spawn attempts. Aborting and refunding.")
if(control && control.occurrences > 0) //Don't refund if it hasn't
control.occurrences--
return
var/waittime = 300 * (2^retry)
if(status == WAITING_FOR_SOMETHING)
message_admins("The event will not spawn a [role_name] until certain \
conditions are met. Waiting [waittime/10]s and then retrying.")
spawn(waittime)
conditions are met. Waiting 30s and then retrying.")
spawn(300)
// I hope this doesn't end up running out of stack space
try_spawning(0,++retry)
try_spawning()
return
if(status == MAP_ERROR)
@@ -69,4 +60,3 @@
return candidates
#undef MAX_SPAWN_ATTEMPT
-19
View File
@@ -1,19 +0,0 @@
/datum/round_event_control/grid_check
name = "Grid Check"
typepath = /datum/round_event/grid_check
weight = 10
max_occurrences = 3
/datum/round_event/grid_check
announceWhen = 1
startWhen = 1
/datum/round_event/grid_check/announce()
priority_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", 'sound/AI/poweroff.ogg')
/datum/round_event/grid_check/start()
for(var/P in apcs_list)
var/obj/machinery/power/apc/C = P
if(C.cell && C.z == ZLEVEL_STATION)
C.energy_fail(rand(30,120))
+6 -61
View File
@@ -11,17 +11,13 @@
for(var/mob/living/carbon/human/H in mob_list)
var/obj/item/weapon/storage/backpack/b = locate() in H.contents
new /obj/item/weapon/storage/spooky(b)
if(ishuman(H) || islizard(H))
if(prob(50))
H.set_species(/datum/species/skeleton)
else
H.set_species(/datum/species/zombie)
if(prob(50))
H.set_species(/datum/species/skeleton)
else
H.set_species(/datum/species/zombie)
for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in mob_list)
Ian.place_on_head(new /obj/item/weapon/bedsheet(Ian))
for(var/mob/living/simple_animal/parrot/Poly/Poly in mob_list)
new /mob/living/simple_animal/parrot/Poly/ghost(Poly.loc)
qdel(Poly)
/datum/round_event/spooky/announce()
priority_announce(pick("RATTLE ME BONES!","THE RIDE NEVER ENDS!", "A SKELETON POPS OUT!", "SPOOKY SCARY SKELETONS!", "CREWMEMBERS BEWARE, YOU'RE IN FOR A SCARE!") , "THE CALL IS COMING FROM INSIDE THE HOUSE")
@@ -54,50 +50,6 @@
if(IsMultiple(activeFor, 4))
spawn_meteors(3, meteorsSPOOKY) //meteor list types defined in gamemode/meteor/meteors.dm
//Creepy clown invasion
/datum/round_event_control/creepy_clowns
name = "Clowns"
typepath = /datum/round_event/creepy_clowns
holidayID = HALLOWEEN
weight = 20
earliest_start = 0
/datum/round_event/creepy_clowns
endWhen = 40
/datum/round_event/creepy_clowns/start()
for(var/mob/living/carbon/human/H in living_mob_list)
if(!H.client || !istype(H))
return
H << "<span class='danger'>Honk...</span>"
H << 'sound/spookoween/scary_clown_appear.ogg'
var/turf/T = get_turf(H)
if(T)
new /obj/effect/hallucination/simple/clown(T, H, 50)
/datum/round_event/creepy_clowns/tick()
if(IsMultiple(activeFor, 4))
for(var/mob/living/carbon/human/H in living_mob_list)
if (prob(66))
playsound(H.loc, pick('sound/spookoween/scary_horn.ogg','sound/spookoween/scary_horn2.ogg', 'sound/spookoween/scary_horn3.ogg'), 100, 1)
if (prob(33))
var/turf/T = get_turf(H)
if(T)
new /obj/effect/hallucination/simple/clown(T, H, 25)
else if (prob(25))
var/turf/T = get_turf(H)
if(T)
new /obj/effect/hallucination/simple/clown/scary(T, H, 25)
else if (prob(5))
var/turf/T = get_turf(H)
if(T)
spawn_atom_to_turf(/obj/effect/mob_spawn/human/corpse/clown, H, 1)
else if (prob(1))
spawn_atom_to_turf(/mob/living/simple_animal/hostile/retaliate/clown, H, 1)
/datum/round_event/creepy_clowns/announce()
priority_announce("Honk... Honk... honk... HONK! HONK! HONKHONKHONKHONKHONK", "HONK!", 'sound/spookoween/scary_horn.ogg')
//spooky foods (you can't actually make these when it's not halloween)
/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookyskull
name = "skull cookie"
@@ -116,7 +68,7 @@
/obj/item/weapon/storage/spooky
name = "trick-o-treat bag"
desc = "A pumpkin-shaped bag that holds all sorts of goodies!"
desc = "A Pumpkin shaped bag that holds all sorts of goodies!"
icon = 'icons/obj/halloween_items.dmi'
icon_state = "treatbag"
@@ -127,12 +79,5 @@
/obj/item/weapon/reagent_containers/food/snacks/sugarcookie/spookycoffin,
/obj/item/weapon/reagent_containers/food/snacks/candy_corn,
/obj/item/weapon/reagent_containers/food/snacks/candy,
/obj/item/weapon/reagent_containers/food/snacks/candiedapple,
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar,
/obj/item/organ/brain ) // OH GOD THIS ISN'T CANDY!
/obj/item/weapon/reagent_containers/food/snacks/chocolatebar)
new type(src)
/obj/item/weapon/card/emag/halloween
name = "hack-o'-lantern"
desc = "It's a pumpkin with a cryptographic sequencer sticking out."
icon_state = "hack_o_lantern"
+6 -8
View File
@@ -14,7 +14,7 @@
/datum/round_event/valentines/start()
..()
for(var/mob/living/carbon/human/H in living_mob_list)
for(var/mob/living/carbon/human/H in mob_list)
H.put_in_hands(new /obj/item/weapon/valentine)
var/obj/item/weapon/storage/backpack/b = locate() in H.contents
new /obj/item/weapon/reagent_containers/food/snacks/candyheart(b)
@@ -28,8 +28,8 @@
icon = 'icons/obj/toy.dmi'
icon_state = "sc_Ace of Hearts_syndicate" // shut up
var/message = "A generic message of love or whatever."
resistance_flags = FLAMMABLE
w_class = WEIGHT_CLASS_TINY
burn_state = FLAMMABLE
w_class = 1
/obj/item/weapon/valentine/New()
..()
@@ -55,6 +55,7 @@
"You're always valid to my heart.",
"I'd risk the wrath of the gods to bwoink you.",
"You look as beautiful now as the last time you were cloned.",
"Your love is more valuable than raw plasma ore.",
"Someone check the gravitational generator, because I'm only attracted to you.",
"If I were the warden I'd always let you into my armory.",
"The virologist is rogue, and the only cure is a kiss from you.",
@@ -72,9 +73,7 @@
"If you had a pickaxe you'd be a shaft FINEr.",
"Roses are red, tide is gray, if I were an assistant I'd steal you away.",
"Roses are red, text is green, I love you more than cleanbots clean.",
"If you were a carp I'd fi-lay you.",
"I'm a nuke op, and my pinpointer leads to your heart.",
"Wanna slay my megafauna?" )
"If you were a carp I'd fi-lay you." )
/obj/item/weapon/valentine/attackby(obj/item/weapon/W, mob/user, params)
..()
@@ -124,6 +123,5 @@
"A heart-shaped candy that reads: WAG MY TAIL",
"A heart-shaped candy that reads: VALIDTINES",
"A heart-shaped candy that reads: FACEHUGGER",
"A heart-shaped candy that reads: DOMINATOR",
"A heart-shaped candy that reads: GET TESLA'D")
"A heart-shaped candy that reads: DOMINATOR")
icon_state = pick("candyheart", "candyheart2", "candyheart3", "candyheart4")
+2 -10
View File
@@ -47,7 +47,7 @@
var/cracked = 0
/obj/item/weapon/toy/xmas_cracker/attack(mob/target, mob/user)
if( !cracked && ishuman(target) && (target.stat == CONSCIOUS) && !target.get_active_held_item() )
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*", "<span class='notice'>You pull \an [src] with [target]! *pop*</span>", "<span class='italics'>You hear a pop.</span>")
var/obj/item/weapon/paper/Joke = new /obj/item/weapon/paper(user.loc)
Joke.name = "[pick("awful","terrible","unfunny")] joke"
@@ -78,15 +78,7 @@
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, fire = 0, acid = 0)
/obj/effect/landmark/xmastree
name = "christmas tree spawner"
var/tree = /obj/structure/flora/tree/pine/xmas
/obj/effect/landmark/xmastree/rdrod
name = "festivus pole spawner"
tree = /obj/structure/festivus
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
/datum/round_event_control/santa
name = "Santa is coming to town! (Christmas)"
+9 -33
View File
@@ -26,7 +26,7 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
new /obj/effect/immovablerod(startT, endT)
/obj/effect/immovablerod
name = "immovable rod"
name = "Immovable Rod"
desc = "What the fuck is that?"
icon = 'icons/obj/objects.dmi'
icon_state = "immrod"
@@ -37,62 +37,38 @@ In my current plan for it, 'solid' will be defined as anything with density == 1
var/destination
/obj/effect/immovablerod/New(atom/start, atom/end)
..()
if(SSaugury)
SSaugury.register_doom(src, 2000)
loc = start
z_original = z
destination = end
notify_ghosts("\A [src] is inbound!",
enter_link="<a href=?src=\ref[src];orbit=1>(Click to orbit)</a>",
source=src, action=NOTIFY_ORBIT)
poi_list += src
if(end && end.z==z_original)
walk_towards(src, destination, 1)
/obj/effect/immovablerod/Topic(href, href_list)
if(href_list["orbit"])
var/mob/dead/observer/ghost = usr
if(istype(ghost))
ghost.ManualFollow(src)
/obj/effect/immovablerod/Destroy()
poi_list -= src
. = ..()
/obj/effect/immovablerod/Move()
if((z != z_original) || (loc == destination))
if(z != z_original || loc == destination)
qdel(src)
return ..()
/obj/effect/immovablerod/ex_act(severity, target)
/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("<span class='danger'>You hear a CLANG!</span>")
audible_message("CLANG")
if(clong && prob(25))
x = clong.x
y = clong.y
if(isturf(clong) || isobj(clong))
if (istype(clong, /turf) || istype(clong, /obj))
if(clong.density)
clong.ex_act(2)
else if(ismob(clong))
if(ishuman(clong))
else if (istype(clong, /mob))
if(istype(clong, /mob/living/carbon/human))
var/mob/living/carbon/human/H = clong
H.visible_message("<span class='danger'>[H.name] is penetrated by an immovable rod!</span>" , "<span class='userdanger'>The rod penetrates you!</span>" , "<span class ='danger'>You hear a CLANG!</span>")
H.adjustBruteLoss(160)
if(clong.density || prob(10))
clong.ex_act(2)
else if(istype(clong, type))
var/obj/effect/immovablerod/other = clong
visible_message("<span class='danger'>[src] collides with [other]!\
</span>")
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(2, get_turf(src))
smoke.start()
qdel(src)
qdel(other)
return
-1
View File
@@ -33,7 +33,6 @@
var/message = generate_ion_law(ionMessage)
if(message)
M.add_ion_law(message)
log_game("ION law added to [M]: [message]")
M << "<br>"
M << "<span class='danger'>[message] ...LAWS UPDATED</span>"
M << "<br>"
-19
View File
@@ -1,19 +0,0 @@
/datum/round_event_control/meteor_wave/major_dust
name = "Major Space Dust"
typepath = /datum/round_event/meteor_wave/major_dust
weight = 8
/datum/round_event/meteor_wave/major_dust
wave_name = "space dust"
/datum/round_event/meteor_wave/major_dust/announce()
var/reason = pick(
"The station is passing through a debris cloud, expect minor damage \
to external fittings and fixtures.",
"Nanotrasen Superweapons Division is testing a new prototype \
[pick("field","projection","nova","super-colliding","reactive")] \
[pick("cannon","artillery","tank","cruiser","\[REDACTED\]")], \
some mild debris is expected.",
"A neighbouring station is throwing rocks at you. (Perhaps they've \
grown tired of your messages.)")
priority_announce(pick(reason), "Collision Alert")
+6 -5
View File
@@ -1,11 +1,12 @@
/datum/round_event_control/meteor_wave/meaty
name = "Meteor Wave: Meaty"
name = "Meaty Ore Wave"
typepath = /datum/round_event/meteor_wave/meaty
weight = 2
weight = 1
max_occurrences = 1
/datum/round_event/meteor_wave/meaty
wave_name = "meaty"
/datum/round_event/meteor_wave/meaty/announce()
priority_announce("Meaty ores have been detected on collision course with the station.", "Oh crap, get the mop.",'sound/AI/meteors.ogg')
/datum/round_event/meteor_wave/meaty/tick()
if(IsMultiple(activeFor, 3))
spawn_meteors(5, meteorsB) //meteor list types defined in gamemode/meteor/meteors.dm
+7 -41
View File
@@ -1,9 +1,7 @@
// Normal strength
/datum/round_event_control/meteor_wave
name = "Meteor Wave: Normal"
name = "Meteor Wave"
typepath = /datum/round_event/meteor_wave
weight = 4
weight = 5
min_players = 5
max_occurrences = 3
@@ -12,57 +10,25 @@
endWhen = 66
announceWhen = 1
var/list/wave_type
var/wave_name = "normal"
/datum/round_event/meteor_wave/New()
..()
if(!wave_type)
determine_wave_type()
random_wave_type()
/datum/round_event/meteor_wave/proc/determine_wave_type()
if(!wave_name)
wave_name = pickweight(list(
"normal" = 50,
"threatening" = 40,
"catastrophic" = 10))
switch(wave_name)
/datum/round_event/meteor_wave/proc/random_wave_type()
var/picked_wave = pickweight(list("normal" = 50, "threatening" = 40, "catastrophic" = 10))
switch(picked_wave)
if("normal")
wave_type = meteors_normal
if("threatening")
wave_type = meteors_threatening
if("catastrophic")
wave_type = meteors_catastrophic
if("meaty")
wave_type = meteorsB
if("space dust")
wave_type = meteorsC
else
WARNING("Wave name of [wave_name] not recognised.")
kill()
/datum/round_event/meteor_wave/announce()
priority_announce("Meteors have been detected on collision course with the station.", "Meteor Alert", 'sound/AI/meteors.ogg')
/datum/round_event/meteor_wave/tick()
if(IsMultiple(activeFor, 3))
spawn_meteors(5, wave_type) //meteor list types defined in gamemode/meteor/meteors.dm
/datum/round_event_control/meteor_wave/threatening
name = "Meteor Wave: Threatening"
typepath = /datum/round_event/meteor_wave/threatening
weight = 2
min_players = 5
max_occurrences = 3
/datum/round_event/meteor_wave/threatening
wave_name = "threatening"
/datum/round_event_control/meteor_wave/catastrophic
name = "Meteor Wave: Catastrophic"
typepath = /datum/round_event/meteor_wave/catastrophic
weight = 1
min_players = 5
max_occurrences = 3
/datum/round_event/meteor_wave/catastrophic
wave_name = "catastrophic"
-28
View File
@@ -1,28 +0,0 @@
/datum/round_event_control/mice_migration
name = "Mice Migration"
typepath = /datum/round_event/mice_migration
weight = 10
/datum/round_event/mice_migration
announceWhen = 0
var/minimum_mice = 5
var/maximum_mice = 15
/datum/round_event/mice_migration/announce()
var/cause = pick("space-winter", "budget-cuts", "Ragnarok",
"space being cold", "\[REDACTED\]", "climate change",
"bad luck")
var/plural = pick("a number of", "a horde of", "a pack of", "a swarm of",
"a whoop of", "not more than [maximum_mice]")
var/name = pick("rodents", "mice", "squeaking things",
"wire eating mammals", "\[REDACTED\]", "energy draining parasites")
var/movement = pick("migrated", "swarmed", "stampeded", "descended")
var/location = pick("maintenance tunnels", "maintenance areas",
"\[REDACTED\]", "place with all those juicy wires")
priority_announce("Due to [cause], [plural] [name] have [movement] \
into the [location].", "Migration Alert",
'sound/effects/mousesqueek.ogg', 100, 1)
/datum/round_event/mice_migration/start()
SSsqueak.trigger_migration(rand(minimum_mice, maximum_mice))
+2 -2
View File
@@ -13,7 +13,7 @@
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
var/mob/dead/selected = pick_n_take(candidates)
var/mob/dead/selected = popleft(candidates)
var/list/spawn_locs = list()
for(var/obj/effect/landmark/L in landmarks_list)
@@ -39,7 +39,7 @@
if(nuke)
var/nuke_code
if(!nuke.r_code || nuke.r_code == "ADMIN")
nuke_code = random_nukecode()
nuke_code = "[rand(10000, 99999)]"
nuke.r_code = nuke_code
else
nuke_code = nuke.r_code
-42
View File
@@ -1,42 +0,0 @@
/datum/round_event_control/sentience
name = "Random Human-level Intelligence"
typepath = /datum/round_event/ghost_role/sentience
weight = 5
/datum/round_event/ghost_role/sentience
minimum_required = 1
role_name = "random animal"
/datum/round_event/ghost_role/sentience/spawn_role()
var/list/mob/dead/observer/candidates
candidates = get_candidates(ROLE_ALIEN, null, ROLE_ALIEN)
// find our chosen mob to breathe life into
// Mobs have to be simple animals, mindless and on station
var/list/potential = list()
for(var/mob/living/simple_animal/L in living_mob_list)
var/turf/T = get_turf(L)
if(T.z != ZLEVEL_STATION)
continue
if(!(L in player_list) && !L.mind)
potential += L
var/mob/living/simple_animal/SA = pick(potential)
var/mob/dead/observer/SG = pick(candidates)
if(!SA || !SG)
return FALSE
SA.key = SG.key
SA.languages_spoken |= HUMAN
SA.languages_understood |= HUMAN
SA.sentience_act()
SA.maxHealth = max(SA.maxHealth, 200)
SA.health = SA.maxHealth
SA.del_on_death = FALSE
SA << "<span class='userdanger'>Hello world!</span>"
SA << "<span class='warning'>Due to freak radiation and/or chemicals \
and/or lucky chance, you have gained human level intelligence \
and the ability to speak and understand human language!</span>"
+24 -27
View File
@@ -3,7 +3,6 @@
#define SPIDER_GIFT 3
#define DEPARTMENT_RESUPPLY 4
#define ANTIDOTE_NEEDED 5
#define PIZZA_DELIVERY 6
/datum/round_event_control/shuttle_loan
@@ -21,7 +20,7 @@
var/thanks_msg = "The cargo shuttle should return in five minutes. Have some supply points for your trouble."
/datum/round_event/shuttle_loan/start()
dispatch_type = pick(HIJACK_SYNDIE, RUSKY_PARTY, SPIDER_GIFT, DEPARTMENT_RESUPPLY, ANTIDOTE_NEEDED, PIZZA_DELIVERY)
dispatch_type = pick(HIJACK_SYNDIE, RUSKY_PARTY, SPIDER_GIFT, DEPARTMENT_RESUPPLY, ANTIDOTE_NEEDED)
/datum/round_event/shuttle_loan/announce()
SSshuttle.shuttle_loan = src
@@ -38,8 +37,6 @@
bonus_points = 0
if(ANTIDOTE_NEEDED)
priority_announce("Cargo: Your station has been chosen for an epidemiological research project. Send us your cargo shuttle to receive your research samples.", "Centcom Research Initiatives")
if (PIZZA_DELIVERY)
priority_announce("Cargo: It looks like a neighbouring station accidentally delivered their pizza to you instead", "Centcom Spacepizza Division")
/datum/round_event/shuttle_loan/proc/loan_shuttle()
priority_announce(thanks_msg, "Cargo shuttle commandeered by Centcom.")
@@ -48,8 +45,13 @@
SSshuttle.points += bonus_points
endWhen = activeFor + 1
SSshuttle.supply.mode = SHUTTLE_CALL
SSshuttle.supply.destination = SSshuttle.getDock("supply_home")
SSshuttle.supply.sell()
SSshuttle.supply.enterTransit()
if(SSshuttle.supply.z != ZLEVEL_STATION)
SSshuttle.supply.mode = SHUTTLE_CALL
SSshuttle.supply.destination = SSshuttle.getDock("supply_home")
else
SSshuttle.supply.mode = SHUTTLE_RECALL
SSshuttle.supply.setTimer(3000)
switch(dispatch_type)
@@ -63,8 +65,6 @@
SSshuttle.centcom_message += "Department resupply incoming."
if(ANTIDOTE_NEEDED)
SSshuttle.centcom_message += "Virus samples incoming."
if(PIZZA_DELIVERY)
SSshuttle.centcom_message += "Pizza delivery for [station_name()]"
/datum/round_event/shuttle_loan/tick()
if(dispatched)
@@ -105,11 +105,11 @@
shuttle_spawns.Add(/mob/living/simple_animal/hostile/russian)
shuttle_spawns.Add(/mob/living/simple_animal/hostile/russian/ranged) //drops a mateba
shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear/russian)
shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear)
if(prob(75))
shuttle_spawns.Add(/mob/living/simple_animal/hostile/russian)
if(prob(50))
shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear/russian)
shuttle_spawns.Add(/mob/living/simple_animal/hostile/bear)
if(SPIDER_GIFT)
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/emergency/specialops]
@@ -121,18 +121,26 @@
if(prob(50))
shuttle_spawns.Add(/mob/living/simple_animal/hostile/poison/giant_spider/hunter)
var/turf/T = pick_n_take(empty_shuttle_turfs)
var/turf/T = pick(empty_shuttle_turfs)
empty_shuttle_turfs.Remove(T)
new /obj/effect/decal/remains/human(T)
new /obj/item/clothing/shoes/space_ninja(T)
new /obj/item/clothing/mask/balaclava(T)
for(var/i in 1 to 5)
T = pick_n_take(empty_shuttle_turfs)
new /obj/structure/spider/stickyweb(T)
T = pick(empty_shuttle_turfs)
new /obj/effect/spider/stickyweb(T)
T = pick(empty_shuttle_turfs)
new /obj/effect/spider/stickyweb(T)
T = pick(empty_shuttle_turfs)
new /obj/effect/spider/stickyweb(T)
T = pick(empty_shuttle_turfs)
new /obj/effect/spider/stickyweb(T)
T = pick(empty_shuttle_turfs)
new /obj/effect/spider/stickyweb(T)
if(ANTIDOTE_NEEDED)
var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/fluspanish)
var/virus_type = pick(/datum/disease/beesease, /datum/disease/brainrot, /datum/disease/fluspanish, /datum/disease/transformation/xeno)
var/turf/T
for(var/i=0, i<10, i++)
if(prob(15))
@@ -170,16 +178,6 @@
for(var/i in 1 to 5)
var/decal = pick(/obj/effect/decal/cleanable/flour, /obj/effect/decal/cleanable/robot_debris, /obj/effect/decal/cleanable/oil)
new decal(pick_n_take(empty_shuttle_turfs))
if(PIZZA_DELIVERY)
shuttle_spawns.Add(/obj/item/pizzabox/margherita)
shuttle_spawns.Add(/obj/item/pizzabox/margherita)
shuttle_spawns.Add(/obj/item/pizzabox/meat)
shuttle_spawns.Add(/obj/item/pizzabox/meat)
shuttle_spawns.Add(/obj/item/pizzabox/vegetable)
if(prob(10))
shuttle_spawns.Add(/obj/item/pizzabox/bomb)
else
shuttle_spawns.Add(/obj/item/pizzabox/margherita)
var/false_positive = 0
while(shuttle_spawns.len && empty_shuttle_turfs.len)
@@ -195,5 +193,4 @@
#undef RUSKY_PARTY
#undef SPIDER_GIFT
#undef DEPARTMENT_RESUPPLY
#undef ANTIDOTE_NEEDED
#undef PIZZA_DELIVERY
#undef ANTIDOTE_NEEDED
+171 -186
View File
@@ -8,7 +8,7 @@
/datum/round_event/spacevine/start()
var/list/turfs = list() //list of all the empty floor turfs in the hallway areas
var/obj/structure/spacevine/SV = new()
var/obj/effect/spacevine/SV = new()
for(var/area/hallway/A in world)
for(var/turf/F in A)
@@ -28,44 +28,40 @@
var/hue
var/quality
/datum/spacevine_mutation/proc/add_mutation_to_vinepiece(obj/structure/spacevine/holder)
holder.mutations |= src
holder.add_atom_colour(hue, FIXED_COLOUR_PRIORITY)
/datum/spacevine_mutation/proc/process_mutation(obj/structure/spacevine/holder)
/datum/spacevine_mutation/proc/process_mutation(obj/effect/spacevine/holder)
return
/datum/spacevine_mutation/proc/process_temperature(obj/structure/spacevine/holder, temp, volume)
/datum/spacevine_mutation/proc/process_temperature(obj/effect/spacevine/holder, temp, volume)
return
/datum/spacevine_mutation/proc/on_birth(obj/structure/spacevine/holder)
/datum/spacevine_mutation/proc/on_birth(obj/effect/spacevine/holder)
return
/datum/spacevine_mutation/proc/on_grow(obj/structure/spacevine/holder)
/datum/spacevine_mutation/proc/on_grow(obj/effect/spacevine/holder)
return
/datum/spacevine_mutation/proc/on_death(obj/structure/spacevine/holder)
/datum/spacevine_mutation/proc/on_death(obj/effect/spacevine/holder)
return
/datum/spacevine_mutation/proc/on_hit(obj/structure/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/proc/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
. = expected_damage
/datum/spacevine_mutation/proc/on_cross(obj/structure/spacevine/holder, mob/crosser)
/datum/spacevine_mutation/proc/on_cross(obj/effect/spacevine/holder, mob/crosser)
return
/datum/spacevine_mutation/proc/on_chem(obj/structure/spacevine/holder, datum/reagent/R)
/datum/spacevine_mutation/proc/on_chem(obj/effect/spacevine/holder, datum/reagent/R)
return
/datum/spacevine_mutation/proc/on_eat(obj/structure/spacevine/holder, mob/living/eater)
/datum/spacevine_mutation/proc/on_eat(obj/effect/spacevine/holder, mob/living/eater)
return
/datum/spacevine_mutation/proc/on_spread(obj/structure/spacevine/holder, turf/target)
/datum/spacevine_mutation/proc/on_spread(obj/effect/spacevine/holder, turf/target)
return
/datum/spacevine_mutation/proc/on_buckle(obj/structure/spacevine/holder, mob/living/buckled)
/datum/spacevine_mutation/proc/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
return
/datum/spacevine_mutation/proc/on_explosion(severity, target, obj/structure/spacevine/holder)
/datum/spacevine_mutation/proc/on_explosion(severity, target, obj/effect/spacevine/holder)
return
@@ -74,41 +70,70 @@
hue = "#aa77aa"
quality = POSITIVE
/datum/spacevine_mutation/space_covering
var/static/list/coverable_turfs
/turf/open/floor/vines
color = "#aa77aa"
icon_state = "vinefloor"
broken_states = list()
/datum/spacevine_mutation/space_covering/New()
. = ..()
if(!coverable_turfs)
coverable_turfs = typecacheof(list(
/turf/open/space
))
coverable_turfs -= typecacheof(list(
/turf/open/space/transit
))
/datum/spacevine_mutation/space_covering/on_grow(obj/structure/spacevine/holder)
process_mutation(holder)
//All of this shit is useless for vines
/datum/spacevine_mutation/space_covering/process_mutation(obj/structure/spacevine/holder)
var/turf/T = get_turf(holder)
if(is_type_in_typecache(T, coverable_turfs))
var/currtype = T.type
T.ChangeTurf(/turf/open/floor/vines)
T.baseturf = currtype
/turf/open/floor/vines/attackby()
return
/datum/spacevine_mutation/space_covering/on_death(obj/structure/spacevine/holder)
var/turf/T = get_turf(holder)
if(istype(T, /turf/open/floor/vines))
T.ChangeTurf(T.baseturf)
/turf/open/floor/vines/burn_tile()
return
/turf/open/floor/vines/break_tile()
return
/turf/open/floor/vines/make_plating()
return
/turf/open/floor/vines/break_tile_to_plating()
return
/turf/open/floor/vines/ex_act(severity, target)
if(severity < 3 || target == src)
ChangeTurf(src.baseturf)
/turf/open/floor/vines/narsie_act()
if(prob(20))
ChangeTurf(src.baseturf) //nar sie eats this shit
/turf/open/floor/vines/singularity_pull(S, current_size)
if(current_size >= STAGE_FIVE)
if(prob(50))
ChangeTurf(src.baseturf)
/turf/open/floor/vines/ChangeTurf(turf/open/floor/T)
for(var/obj/effect/spacevine/SV in src)
qdel(SV)
..()
reconsider_lights()
/datum/spacevine_mutation/space_covering/on_grow(obj/effect/spacevine/holder)
if(istype(holder.loc, /turf/open/space))
var/turf/open/spaceturf = holder.loc
spaceturf.ChangeTurf(/turf/open/floor/vines)
/datum/spacevine_mutation/space_covering/process_mutation(obj/effect/spacevine/holder)
if(istype(holder.loc, /turf/open/space))
var/turf/open/spaceturf = holder.loc
spaceturf.ChangeTurf(/turf/open/floor/vines)
/datum/spacevine_mutation/space_covering/on_death(obj/effect/spacevine/holder)
if(istype(holder.loc, /turf/open/floor/vines))
var/turf/open/spaceturf = holder.loc
spaceturf.ChangeTurf(/turf/open/space)
/datum/spacevine_mutation/bluespace
name = "bluespace"
hue = "#3333ff"
quality = MINOR_NEGATIVE
/datum/spacevine_mutation/bluespace/on_spread(obj/structure/spacevine/holder, turf/target)
if(holder.energy > 1 && !locate(/obj/structure/spacevine) in target)
/datum/spacevine_mutation/bluespace/on_spread(obj/effect/spacevine/holder, turf/target)
if(holder.energy > 1 && !locate(/obj/effect/spacevine) in target)
holder.master.spawn_spacevine_piece(target, holder)
/datum/spacevine_mutation/light
@@ -117,9 +142,9 @@
quality = POSITIVE
severity = 4
/datum/spacevine_mutation/light/on_grow(obj/structure/spacevine/holder)
/datum/spacevine_mutation/light/on_grow(obj/effect/spacevine/holder)
if(holder.energy)
holder.SetLuminosity(severity, 3)
holder.set_light(severity, 3)
/datum/spacevine_mutation/toxicity
name = "toxic"
@@ -127,16 +152,15 @@
severity = 10
quality = NEGATIVE
/datum/spacevine_mutation/toxicity/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
/datum/spacevine_mutation/toxicity/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
if(issilicon(crosser))
return
if(prob(severity) && istype(crosser) && !isvineimmune(crosser))
if(prob(severity) && istype(crosser))
crosser << "<span class='alert'>You accidently touch the vine and feel a strange sensation.</span>"
crosser.adjustToxLoss(5)
/datum/spacevine_mutation/toxicity/on_eat(obj/structure/spacevine/holder, mob/living/eater)
if(!isvineimmune(eater))
eater.adjustToxLoss(5)
/datum/spacevine_mutation/toxicity/on_eat(obj/effect/spacevine/holder, mob/living/eater)
eater.adjustToxLoss(5)
/datum/spacevine_mutation/explosive //OH SHIT IT CAN CHAINREACT RUN!!!
name = "explosive"
@@ -144,14 +168,15 @@
quality = NEGATIVE
severity = 2
/datum/spacevine_mutation/explosive/on_explosion(explosion_severity, target, obj/structure/spacevine/holder)
/datum/spacevine_mutation/explosive/on_explosion(explosion_severity, target, obj/effect/spacevine/holder)
if(explosion_severity < 3)
qdel(src)
else
. = 1
QDEL_IN(src, 5)
spawn(5)
qdel(src)
/datum/spacevine_mutation/explosive/on_death(obj/structure/spacevine/holder, mob/hitter, obj/item/I)
/datum/spacevine_mutation/explosive/on_death(obj/effect/spacevine/holder, mob/hitter, obj/item/I)
explosion(holder.loc, 0, 0, severity, 0, 0)
/datum/spacevine_mutation/fire_proof
@@ -159,22 +184,20 @@
hue = "#ff8888"
quality = MINOR_NEGATIVE
/datum/spacevine_mutation/fire_proof/process_temperature(obj/structure/spacevine/holder, temp, volume)
/datum/spacevine_mutation/fire_proof/process_temperature(obj/effect/spacevine/holder, temp, volume)
return 1
/datum/spacevine_mutation/fire_proof/on_hit(obj/structure/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
/datum/spacevine_mutation/fire_proof/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
if(I && I.damtype == "fire")
. = 0
else
. = expected_damage
/datum/spacevine_mutation/vine_eating
name = "vine eating"
hue = "#ff7700"
quality = MINOR_NEGATIVE
/datum/spacevine_mutation/vine_eating/on_spread(obj/structure/spacevine/holder, turf/target)
var/obj/structure/spacevine/prey = locate() in target
/datum/spacevine_mutation/vine_eating/on_spread(obj/effect/spacevine/holder, turf/target)
var/obj/effect/spacevine/prey = locate() in target
if(prey && !prey.mutations.Find(src)) //Eat all vines that are not of the same origin
qdel(prey)
@@ -184,19 +207,19 @@
severity = 3
quality = NEGATIVE
/datum/spacevine_mutation/aggressive_spread/on_spread(obj/structure/spacevine/holder, turf/target)
target.ex_act(severity, null, src) // vine immunity handled at /mob/ex_act
/datum/spacevine_mutation/aggressive_spread/on_spread(obj/effect/spacevine/holder, turf/target)
target.ex_act(severity, src)
/datum/spacevine_mutation/aggressive_spread/on_buckle(obj/structure/spacevine/holder, mob/living/buckled)
buckled.ex_act(severity, null, src)
/datum/spacevine_mutation/aggressive_spread/on_buckle(obj/effect/spacevine/holder, mob/living/buckled)
buckled.ex_act(severity)
/datum/spacevine_mutation/transparency
name = "transparent"
hue = ""
quality = POSITIVE
/datum/spacevine_mutation/transparency/on_grow(obj/structure/spacevine/holder)
holder.SetOpacity(0)
/datum/spacevine_mutation/transparency/on_grow(obj/effect/spacevine/holder)
holder.set_opacity(0)
holder.alpha = 125
/datum/spacevine_mutation/oxy_eater
@@ -205,7 +228,7 @@
severity = 3
quality = NEGATIVE
/datum/spacevine_mutation/oxy_eater/process_mutation(obj/structure/spacevine/holder)
/datum/spacevine_mutation/oxy_eater/process_mutation(obj/effect/spacevine/holder)
var/turf/open/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
@@ -220,7 +243,7 @@
severity = 3
quality = NEGATIVE
/datum/spacevine_mutation/nitro_eater/process_mutation(obj/structure/spacevine/holder)
/datum/spacevine_mutation/nitro_eater/process_mutation(obj/effect/spacevine/holder)
var/turf/open/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
@@ -235,7 +258,7 @@
severity = 3
quality = POSITIVE
/datum/spacevine_mutation/carbondioxide_eater/process_mutation(obj/structure/spacevine/holder)
/datum/spacevine_mutation/carbondioxide_eater/process_mutation(obj/effect/spacevine/holder)
var/turf/open/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
@@ -250,7 +273,7 @@
severity = 3
quality = POSITIVE
/datum/spacevine_mutation/plasma_eater/process_mutation(obj/structure/spacevine/holder)
/datum/spacevine_mutation/plasma_eater/process_mutation(obj/effect/spacevine/holder)
var/turf/open/floor/T = holder.loc
if(istype(T))
var/datum/gas_mixture/GM = T.air
@@ -265,35 +288,35 @@
severity = 10
quality = NEGATIVE
/datum/spacevine_mutation/thorns/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
if(prob(severity) && istype(crosser) && !isvineimmune(holder))
/datum/spacevine_mutation/thorns/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
if(prob(severity) && istype(crosser))
var/mob/living/M = crosser
M.adjustBruteLoss(5)
M << "<span class='alert'>You cut yourself on the thorny vines.</span>"
/datum/spacevine_mutation/thorns/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
if(prob(severity) && istype(hitter) && !isvineimmune(holder))
/datum/spacevine_mutation/thorns/on_hit(obj/effect/spacevine/holder, mob/living/hitter)
if(prob(severity) && istype(hitter))
var/mob/living/M = hitter
M.adjustBruteLoss(5)
M << "<span class='alert'>You cut yourself on the thorny vines.</span>"
. = expected_damage
/datum/spacevine_mutation/woodening
name = "hardened"
hue = "#997700"
quality = NEGATIVE
/datum/spacevine_mutation/woodening/on_grow(obj/structure/spacevine/holder)
/datum/spacevine_mutation/woodening/on_grow(obj/effect/spacevine/holder)
if(holder.energy)
holder.density = 1
holder.max_integrity = 100
holder.obj_integrity = holder.max_integrity
/datum/spacevine_mutation/woodening/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage)
if(I.is_sharp())
. = expected_damage * 0.5
else
. = expected_damage
/datum/spacevine_mutation/woodening/on_hit(obj/effect/spacevine/holder, mob/hitter, obj/item/I, expected_damage)
if(!expected_damage)
return
if(hitter)
if(I)
. = I.force * 2
else
. = 8
/datum/spacevine_mutation/flowering
name = "flowering"
@@ -301,17 +324,16 @@
quality = NEGATIVE
severity = 10
/datum/spacevine_mutation/flowering/on_grow(obj/structure/spacevine/holder)
/datum/spacevine_mutation/flowering/on_grow(obj/effect/spacevine/holder)
if(holder.energy == 2 && prob(severity) && !locate(/obj/structure/alien/resin/flower_bud_enemy) in range(5,holder))
new/obj/structure/alien/resin/flower_bud_enemy(get_turf(holder))
/datum/spacevine_mutation/flowering/on_cross(obj/structure/spacevine/holder, mob/living/crosser)
if(prob(25))
holder.entangle(crosser)
/datum/spacevine_mutation/flowering/on_cross(obj/effect/spacevine/holder, mob/living/crosser)
holder.entangle(crosser)
// SPACE VINES (Note that this code is very similar to Biomass code)
/obj/structure/spacevine
/obj/effect/spacevine
name = "space vines"
desc = "An extremely expansionistic species of vine."
icon = 'icons/effects/spacevines.dmi'
@@ -321,29 +343,11 @@
layer = SPACEVINE_LAYER
mouse_opacity = 2 //Clicking anywhere on the turf is good enough
pass_flags = PASSTABLE | PASSGRILLE
obj_integrity = 50
max_integrity = 50
var/energy = 0
var/obj/effect/spacevine_controller/master = null
var/list/mutations = list()
/obj/structure/spacevine/New()
..()
add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY)
/obj/structure/spacevine/examine(mob/user)
..()
var/text = "This one is a"
if(mutations.len)
for(var/A in mutations)
var/datum/spacevine_mutation/SM = A
text += " [SM.name]"
else
text += " normal"
text += " vine."
user << text
/obj/structure/spacevine/Destroy()
/obj/effect/spacevine/Destroy()
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_death(src)
if(master)
@@ -352,15 +356,15 @@
if(!master.vines.len)
var/obj/item/seeds/kudzu/KZ = new(loc)
KZ.mutations |= mutations
KZ.potency = min(100, master.mutativeness * 10)
KZ.potency = min(100, master.mutativness * 10)
KZ.production = (master.spread_cap / initial(master.spread_cap)) * 50
mutations = list()
SetOpacity(0)
set_opacity(0)
if(has_buckled_mobs())
unbuckle_all_mobs(force=1)
return ..()
/obj/structure/spacevine/proc/on_chem_effect(datum/reagent/R)
/obj/effect/spacevine/proc/on_chem_effect(datum/reagent/R)
var/override = 0
for(var/datum/spacevine_mutation/SM in mutations)
override += SM.on_chem(src, R)
@@ -368,7 +372,7 @@
if(prob(50))
qdel(src)
/obj/structure/spacevine/proc/eat(mob/eater)
/obj/effect/spacevine/proc/eat(mob/eater)
var/override = 0
for(var/datum/spacevine_mutation/SM in mutations)
override += SM.on_eat(src, eater)
@@ -377,77 +381,68 @@
eater.say("Nom")
qdel(src)
/obj/structure/spacevine/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/scythe))
user.changeNext_move(CLICK_CD_MELEE)
for(var/obj/structure/spacevine/B in orange(1,src))
B.take_damage(W.force * 4, BRUTE, "melee", 1)
/obj/effect/spacevine/attackby(obj/item/weapon/W, mob/user, params)
if (!W || !user || !W.type)
return
else
return ..()
user.changeNext_move(CLICK_CD_MELEE)
/obj/structure/spacevine/attacked_by(obj/item/I, mob/living/user)
var/damage_dealt = I.force
if(I.is_sharp())
damage_dealt *= 4
if(I.damtype == BURN)
damage_dealt *= 4
var/override = W.force
if(W.is_sharp())
override = 100
if(istype(W, /obj/item/weapon/scythe))
var/local_override = override
for(var/obj/effect/spacevine/B in orange(1,src))
for(var/datum/spacevine_mutation/SM in mutations)
local_override = SM.on_hit(src, user, W, local_override)
if(prob(local_override))
qdel(B)
for(var/datum/spacevine_mutation/SM in mutations)
damage_dealt = SM.on_hit(src, user, I, damage_dealt) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
take_damage(damage_dealt, I.damtype, "melee", 1)
override = SM.on_hit(src, user, W, override) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further
/obj/structure/spacevine/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0)
switch(damage_type)
if(BRUTE)
if(damage_amount)
playsound(src, 'sound/weapons/slash.ogg', 50, 1)
else
playsound(src, 'sound/weapons/tap.ogg', 50, 1)
if(BURN)
playsound(src.loc, 'sound/items/Welder.ogg', 100, 1)
if(prob(override))
qdel(src)
/obj/structure/spacevine/Crossed(mob/crosser)
..()
/obj/effect/spacevine/Crossed(mob/crosser)
if(isliving(crosser))
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_cross(src, crosser)
/obj/structure/spacevine/attack_hand(mob/user)
/obj/effect/spacevine/attack_hand(mob/user)
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_hit(src, user)
user_unbuckle_mob(user, user)
/obj/structure/spacevine/attack_paw(mob/living/user)
/obj/effect/spacevine/attack_paw(mob/living/user)
user.do_attack_animation(src)
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_hit(src, user)
user_unbuckle_mob(user,user)
/obj/structure/spacevine/attack_alien(mob/living/user)
/obj/effect/spacevine/attack_alien(mob/living/user)
eat(user)
/obj/effect/spacevine_controller
invisibility = INVISIBILITY_ABSTRACT
var/list/obj/structure/spacevine/vines = list()
var/list/obj/effect/spacevine/vines = list()
var/list/growth_queue = list()
var/spread_multiplier = 5
var/spread_cap = 30
var/list/mutations_list = list()
var/mutativeness = 1
var/mutativness = 1
/obj/effect/spacevine_controller/New(loc, list/muts, potency, production)
add_atom_colour("#ffffff", FIXED_COLOUR_PRIORITY)
/obj/effect/spacevine_controller/New(loc, list/muts, mttv, spreading)
spawn_spacevine_piece(loc, , muts)
START_PROCESSING(SSobj, src)
init_subtypes(/datum/spacevine_mutation/, mutations_list)
if(potency != null)
mutativeness = potency / 10
if(production != null)
spread_cap *= production / 5
spread_multiplier /= production / 5
..()
if(mttv != null)
mutativness = mttv / 10
if(spreading != null)
spread_cap *= spreading / 50
spread_multiplier /= spreading / 50
/obj/effect/spacevine_controller/ex_act() //only killing all vines will end this suffering
return
@@ -462,29 +457,32 @@
STOP_PROCESSING(SSobj, src)
return ..()
/obj/effect/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/structure/spacevine/parent, list/muts)
var/obj/structure/spacevine/SV = new(location)
/obj/effect/spacevine_controller/proc/spawn_spacevine_piece(turf/location, obj/effect/spacevine/parent, list/muts)
var/obj/effect/spacevine/SV = new(location)
growth_queue += SV
vines += SV
SV.master = src
if(muts && muts.len)
for(var/datum/spacevine_mutation/M in muts)
M.add_mutation_to_vinepiece(SV)
return
SV.mutations |= muts
if(parent)
SV.mutations |= parent.mutations
var/parentcolor = parent.atom_colours[FIXED_COLOUR_PRIORITY]
SV.add_atom_colour(parentcolor, FIXED_COLOUR_PRIORITY)
if(prob(mutativeness))
var/datum/spacevine_mutation/randmut = pick(mutations_list - SV.mutations)
randmut.add_mutation_to_vinepiece(SV)
SV.color = parent.color
SV.desc = parent.desc
if(prob(mutativness))
SV.mutations |= pick(mutations_list)
var/datum/spacevine_mutation/randmut = pick(SV.mutations)
SV.color = randmut.hue
SV.desc = "An extremely expansionistic species of vine. These are "
for(var/datum/spacevine_mutation/M in SV.mutations)
SV.desc += "[M.name] "
SV.desc += "vines."
for(var/datum/spacevine_mutation/SM in SV.mutations)
SM.on_birth(SV)
/obj/effect/spacevine_controller/process()
if(!vines)
qdel(src) //space vines exterminated. Remove the controller
qdel(src) //space vines exterminated. Remove the controller
return
if(!growth_queue)
qdel(src) //Sanity check
@@ -494,9 +492,9 @@
length = min( spread_cap , max( 1 , vines.len / spread_multiplier ) )
var/i = 0
var/list/obj/structure/spacevine/queue_end = list()
var/list/obj/effect/spacevine/queue_end = list()
for(var/obj/structure/spacevine/SV in growth_queue)
for( var/obj/effect/spacevine/SV in growth_queue )
if(qdeleted(SV))
continue
i++
@@ -517,11 +515,11 @@
growth_queue = growth_queue + queue_end
/obj/structure/spacevine/proc/grow()
/obj/effect/spacevine/proc/grow()
if(!energy)
src.icon_state = pick("Med1", "Med2", "Med3")
energy = 1
SetOpacity(1)
set_opacity(1)
else
src.icon_state = pick("Hvy1", "Hvy2", "Hvy3")
energy = 2
@@ -529,35 +527,35 @@
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_grow(src)
/obj/structure/spacevine/proc/entangle_mob()
/obj/effect/spacevine/proc/entangle_mob()
if(!has_buckled_mobs() && prob(25))
for(var/mob/living/V in src.loc)
entangle(V)
if(has_buckled_mobs())
if(buckled_mobs.len)
break //only capture one mob at a time
/obj/structure/spacevine/proc/entangle(mob/living/V)
if(!V || isvineimmune(V))
/obj/effect/spacevine/proc/entangle(mob/living/V)
if(!V)
return
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_buckle(src, V)
if((V.stat != DEAD) && (V.buckled != src)) //not dead or captured
V << "<span class='danger'>The vines [pick("wind", "tangle", "tighten")] around you!</span>"
buckle_mob(V, 1)
buckle_mob(V)
/obj/structure/spacevine/proc/spread()
/obj/effect/spacevine/proc/spread()
var/direction = pick(cardinal)
var/turf/stepturf = get_step(src,direction)
for(var/datum/spacevine_mutation/SM in mutations)
SM.on_spread(src, stepturf)
stepturf = get_step(src,direction) //in case turf changes, to make sure no runtimes happen
if(!locate(/obj/structure/spacevine, stepturf))
if(!locate(/obj/effect/spacevine, stepturf))
if(stepturf.Enter(src))
if(master)
master.spawn_spacevine_piece(stepturf, src)
/obj/structure/spacevine/ex_act(severity, target)
/obj/effect/spacevine/ex_act(severity, target)
if(istype(target, type)) //if its agressive spread vine dont do anything
return
var/i
@@ -566,22 +564,9 @@
if(!i && prob(100/severity))
qdel(src)
/obj/structure/spacevine/temperature_expose(null, temp, volume)
/obj/effect/spacevine/temperature_expose(null, temp, volume)
var/override = 0
for(var/datum/spacevine_mutation/SM in mutations)
override += SM.process_temperature(src, temp, volume)
if(!override)
qdel(src)
/obj/structure/spacevine/CanPass(atom/movable/mover, turf/target, height=0)
if(isvineimmune(mover))
. = TRUE
else
. = ..()
/proc/isvineimmune(atom/A)
. = FALSE
if(isliving(A))
var/mob/living/M = A
if(("vines" in M.faction) || ("plants" in M.faction))
. = TRUE
+3 -4
View File
@@ -29,9 +29,8 @@
while((spawncount >= 1) && vents.len)
var/obj/vent = pick(vents)
var/spawn_type = /obj/structure/spider/spiderling
var/obj/effect/spider/spiderling/S = new(vent.loc)
if(prob(66))
spawn_type = /obj/structure/spider/spiderling/nurse
spawn_atom_to_turf(spawn_type, vent, 1, FALSE)
S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/nurse
vents -= vent
spawncount--
spawncount--
+1 -1
View File
@@ -10,7 +10,7 @@
var/interval = 2
var/list/vents = list()
var/list/gunk = list("water","carbon","flour","radium","toxin","cleaner","nutriment","condensedcapsaicin","mushroomhallucinogen","lube",
"plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","sacid")
"plantbgone","banana","charcoal","space_drugs","morphine","holywater","ethanol","hot_coco","facid")
/datum/round_event/vent_clog/announce()
priority_announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert")
+2 -2
View File
@@ -3,7 +3,7 @@
/datum/round_event_control/wizard/robelesscasting //EI NUDTH!
name = "Robeless Casting"
weight = 2
typepath = /datum/round_event/wizard/robelesscasting
typepath = /datum/round_event/wizard/robelesscasting/
max_occurrences = 1
earliest_start = 0
@@ -24,7 +24,7 @@
/datum/round_event_control/wizard/improvedcasting //blink x5 disintergrate x5 here I come!
name = "Improved Casting"
weight = 3
typepath = /datum/round_event/wizard/improvedcasting
typepath = /datum/round_event/wizard/improvedcasting/
max_occurrences = 4 //because that'd be max level spells
earliest_start = 0
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/blobies //avast!
name = "Zombie Outbreak"
weight = 3
typepath = /datum/round_event/wizard/blobies
typepath = /datum/round_event/wizard/blobies/
max_occurrences = 3
earliest_start = 12000 // 20 minutes (gotta get some bodies made!)
+7 -7
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/cursed_items //fashion disasters
name = "Cursed Items"
weight = 3
typepath = /datum/round_event/wizard/cursed_items
typepath = /datum/round_event/wizard/cursed_items/
max_occurrences = 3
earliest_start = 0
@@ -11,7 +11,7 @@
/datum/round_event/wizard/cursed_items/start()
var/item_set = pick("wizardmimic", "swords", "bigfatdoobie", "boxing", "voicemodulators", "catgirls2015")
var/list/wearslots = list(slot_wear_suit, slot_shoes, slot_head, slot_wear_mask, slot_gloves, slot_ears)
var/list/wearslots = list(slot_wear_suit, slot_shoes, slot_head, slot_wear_mask, slot_r_hand, slot_gloves, slot_ears)
var/list/loadout = list()
var/ruins_spaceworthiness
var/ruins_wizard_loadout
@@ -19,12 +19,12 @@
switch(item_set)
if("wizardmimic")
loadout = list(/obj/item/clothing/suit/wizrobe, /obj/item/clothing/shoes/sandal/magic, /obj/item/clothing/head/wizard)
loadout = list(/obj/item/clothing/suit/wizrobe, /obj/item/clothing/shoes/sandal, /obj/item/clothing/head/wizard)
ruins_spaceworthiness = 1
if("swords")
loadout[5] = /obj/item/weapon/katana/cursed
if("bigfatdoobie")
loadout[4] = /obj/item/clothing/mask/cigarette/rollie/trippy
loadout[4] = /obj/item/clothing/mask/cigarette/rollie/trippy/
ruins_spaceworthiness = 1
if("boxing")
loadout[4] = /obj/item/clothing/mask/luchador
@@ -38,14 +38,14 @@
ruins_wizard_loadout = 1
for(var/mob/living/carbon/human/H in living_mob_list)
if(ruins_spaceworthiness && (H.z != 1 || isspaceturf(H.loc) || isplasmaman(H)))
if(ruins_spaceworthiness && (H.z != 1 || istype(H.loc, /turf/open/space)))
continue //#savetheminers
if(ruins_wizard_loadout && H.mind && ((H.mind in ticker.mode.wizards) || (H.mind in ticker.mode.apprentices)))
continue
if(item_set == "catgirls2015") //Wizard code means never having to say you're sorry
H.gender = FEMALE
var/list/slots = list(H.wear_suit, H.shoes, H.head, H.wear_mask, H.gloves, H.ears) //add new slots as needed to back
for(var/i in 1 to loadout.len)
var/list/slots = list(H.wear_suit, H.shoes, H.head, H.wear_mask, H.r_hand, H.gloves, H.ears) //add new slots as needed to back
for(var/i = 1, i <= loadout.len, i++)
if(loadout[i])
var/obj/item/J = loadout[i]
var/obj/item/I = new J //dumb but required because of byond throwing a fit anytime new gets too close to a list
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/deprevolt //stationwide!
name = "Departmental Uprising"
weight = 0 //An order that requires order in a round of chaos was maybe not the best idea. Requiescat in pace departmental uprising August 2014 - March 2015
typepath = /datum/round_event/wizard/deprevolt
typepath = /datum/round_event/wizard/deprevolt/
max_occurrences = 1
earliest_start = 0
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/fake_explosion //Oh no the station is gone!
name = "Fake Nuclear Explosion"
weight = 0 //Badmin exclusive now because once it's expected its not funny
typepath = /datum/round_event/wizard/fake_explosion
typepath = /datum/round_event/wizard/fake_explosion/
max_occurrences = 1
earliest_start = 0
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/ghost //The spook is real
name = "G-G-G-Ghosts!"
weight = 3
typepath = /datum/round_event/wizard/ghost
typepath = /datum/round_event/wizard/ghost/
max_occurrences = 5
earliest_start = 0
+9 -10
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/greentext //Gotta have it!
name = "Greentext"
weight = 4
typepath = /datum/round_event/wizard/greentext
typepath = /datum/round_event/wizard/greentext/
max_occurrences = 1
earliest_start = 0
@@ -22,13 +22,13 @@
/obj/item/weapon/greentext
name = "greentext"
desc = "No one knows what this massive tome does, but it feels <i><font color='green'>desirable</font></i> all the same..."
w_class = WEIGHT_CLASS_BULKY
w_class = 4
icon = 'icons/obj/wizard.dmi'
icon_state = "greentext"
var/mob/living/last_holder
var/mob/living/new_holder
var/list/color_altered_mobs = list()
resistance_flags = FIRE_PROOF | ACID_PROOF
burn_state = FIRE_PROOF
var/quiet = FALSE
/obj/item/weapon/greentext/New()
@@ -44,14 +44,14 @@
last_holder = user
if(!(user in color_altered_mobs))
color_altered_mobs += user
user.add_atom_colour("#00FF00", ADMIN_COLOUR_PRIORITY)
user.color = "#00FF00"
START_PROCESSING(SSobj, src)
..()
/obj/item/weapon/greentext/dropped(mob/living/user as mob)
if(user in color_altered_mobs)
user << "<span class='warning'>A sudden wave of failure washes over you...</span>"
user.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY) //ya blew it
user.color = "#FF0000" //ya blew it
last_holder = null
new_holder = null
STOP_PROCESSING(SSobj, src)
@@ -69,16 +69,16 @@
new_holder.mind.objectives += O
new_holder.attack_log += "\[[time_stamp()]\] <font color='green'>Won with greentext!!!</font>"
color_altered_mobs -= new_holder
resistance_flags |= ON_FIRE
burn_state = ON_FIRE
qdel(src)
if(last_holder && last_holder != new_holder) //Somehow it was swiped without ever getting dropped
last_holder << "<span class='warning'>A sudden wave of failure washes over you...</span>"
last_holder.add_atom_colour("#FF0000", ADMIN_COLOUR_PRIORITY)
last_holder.color = "#FF0000"
last_holder = new_holder //long live the king
/obj/item/weapon/greentext/Destroy(force)
if(!(resistance_flags & ON_FIRE) && !force)
if((burn_state != ON_FIRE) && (!force))
return QDEL_HINT_LETMELIVE
. = ..()
@@ -87,8 +87,7 @@
var/message = "<span class='warning'>A dark temptation has passed from this world"
if(M in color_altered_mobs)
message += " and you're finally able to forgive yourself"
if(M.color == "#FF0000" || M.color == "#00FF00")
M.remove_atom_colour(ADMIN_COLOUR_PRIORITY)
M.color = initial(M.color)
message += "...</span>"
// can't skip the mob check as it also does the decolouring
if(!quiet)
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/imposter //Mirror Mania
name = "Imposter Wizard"
weight = 1
typepath = /datum/round_event/wizard/imposter
typepath = /datum/round_event/wizard/imposter/
max_occurrences = 1
earliest_start = 0
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/invincible //Boolet Proof
name = "Invincibility"
weight = 3
typepath = /datum/round_event/wizard/invincible
typepath = /datum/round_event/wizard/invincible/
max_occurrences = 5
earliest_start = 0
+3 -3
View File
@@ -1,15 +1,15 @@
/datum/round_event_control/wizard/lava //THE LEGEND NEVER DIES
name = "The Floor Is LAVA!"
weight = 2
typepath = /datum/round_event/wizard/lava
typepath = /datum/round_event/wizard/lava/
max_occurrences = 3
earliest_start = 0
/datum/round_event/wizard/lava
/datum/round_event/wizard/lava/
endWhen = 0
var/started = FALSE
/datum/round_event/wizard/lava/start()
if(!started)
started = TRUE
SSweather.run_weather("the floor is lava")
SSweather.run_weather("the floor is lava")
+2 -2
View File
@@ -1,11 +1,11 @@
/datum/round_event_control/wizard/magicarp //these fish is loaded
name = "Magicarp"
weight = 1
typepath = /datum/round_event/wizard/magicarp
typepath = /datum/round_event/wizard/magicarp/
max_occurrences = 1
earliest_start = 0
/datum/round_event/wizard/magicarp
/datum/round_event/wizard/magicarp/
announceWhen = 3
startWhen = 50
+3 -3
View File
@@ -1,11 +1,11 @@
/datum/round_event_control/wizard/petsplosion //the horror
name = "Petsplosion"
weight = 2
typepath = /datum/round_event/wizard/petsplosion
typepath = /datum/round_event/wizard/petsplosion/
max_occurrences = 1 //Exponential growth is nothing to sneeze at!
earliest_start = 0
/datum/round_event/wizard/petsplosion
/datum/round_event/wizard/petsplosion/
endWhen = 61 //1 minute (+1 tick for endWhen not to interfere with tick)
var/countdown = 0
@@ -13,5 +13,5 @@
if(activeFor >= 30 * countdown) // 0 seconds : 2 animals | 30 seconds : 4 animals | 1 minute : 8 animals
countdown += 1
for(var/mob/living/simple_animal/F in living_mob_list) //If you cull the heard before the next replication, things will be easier for you
if(!ishostile(F))
if(!istype(F, /mob/living/simple_animal/hostile))
new F.type(F.loc)
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/race //Lizard Wizard? Lizard Wizard.
name = "Race Swap"
weight = 2
typepath = /datum/round_event/wizard/race
typepath = /datum/round_event/wizard/race/
max_occurrences = 5
earliest_start = 0
+5 -6
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/rpgloot //its time to minmax your shit
name = "RPG Loot"
weight = 3
typepath = /datum/round_event/wizard/rpgloot
typepath = /datum/round_event/wizard/rpgloot/
max_occurrences = 1
earliest_start = 0
@@ -30,7 +30,7 @@
if(istype(I,/obj/item/weapon/storage))
var/obj/item/weapon/storage/S = I
if(prob(upgrade_scroll_chance) && S.contents.len < S.storage_slots && !S.invisibility)
if(prob(upgrade_scroll_chance) && S.contents.len < S.storage_slots)
var/obj/item/upgradescroll/scroll = new
S.handle_item_insertion(scroll,1)
upgrade_scroll_chance = max(0,upgrade_scroll_chance-100)
@@ -41,7 +41,7 @@
desc = "Somehow, this piece of paper can be applied to items to make them \"better\". Apparently there's a risk of losing the item if it's already \"too good\". <i>This all feels so arbitrary...</i>"
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
w_class = WEIGHT_CLASS_TINY
w_class = 1
/obj/item/upgradescroll/afterattack(obj/item/target, mob/user , proximity)
if(!proximity || !istype(target))
@@ -49,9 +49,8 @@
var/quality = target.force - initial(target.force)
if(quality > 9 && prob((quality - 9)*10))
user << "<span class='danger'>[target] catches fire!</span>"
if(target.resistance_flags & (LAVA_PROOF|FIRE_PROOF))
target.resistance_flags &= ~(LAVA_PROOF|FIRE_PROOF)
target.resistance_flags |= FLAMMABLE
if(target.burn_state == -1)
target.burn_state = 0
target.fire_act()
qdel(src)
return
+5 -5
View File
@@ -4,7 +4,7 @@
/datum/round_event_control/wizard/shuffleloc //Somewhere an AI is crying
name = "Change Places!"
weight = 2
typepath = /datum/round_event/wizard/shuffleloc
typepath = /datum/round_event/wizard/shuffleloc/
max_occurrences = 5
earliest_start = 0
@@ -40,7 +40,7 @@
/datum/round_event_control/wizard/shufflenames //Face/off joke
name = "Change Faces!"
weight = 4
typepath = /datum/round_event/wizard/shufflenames
typepath = /datum/round_event/wizard/shufflenames/
max_occurrences = 5
earliest_start = 0
@@ -74,7 +74,7 @@
/datum/round_event_control/wizard/shuffleminds //Basically Mass Ranged Mindswap
name = "Change Minds!"
weight = 1
typepath = /datum/round_event/wizard/shuffleminds
typepath = /datum/round_event/wizard/shuffleminds/
max_occurrences = 3
earliest_start = 0
@@ -82,7 +82,7 @@
var/list/mobs = list()
for(var/mob/living/carbon/human/H in living_mob_list)
if(H.stat || !H.mind || (H.mind in ticker.mode.wizards) || (H.mind in ticker.mode.apprentices))
if(!H.stat || !H.mind || (H.mind in ticker.mode.wizards) || (H.mind in ticker.mode.apprentices))
continue //the wizard(s) are spared on this one
mobs += H
@@ -91,7 +91,7 @@
shuffle(mobs)
var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new /obj/effect/proc_holder/spell/targeted/mind_transfer
var/obj/effect/proc_holder/spell/targeted/mind_transfer/swapper = new /obj/effect/proc_holder/spell/targeted/mind_transfer/
while(mobs.len > 1)
var/mob/living/carbon/human/H = pick(mobs)
mobs -= H
+2 -2
View File
@@ -1,7 +1,7 @@
/datum/round_event_control/wizard/summonguns //The Classic
name = "Summon Guns"
weight = 1
typepath = /datum/round_event/wizard/summonguns
typepath = /datum/round_event/wizard/summonguns/
max_occurrences = 1
earliest_start = 0
@@ -16,7 +16,7 @@
/datum/round_event_control/wizard/summonmagic //The Somewhat Less Classic
name = "Summon Magic"
weight = 1
typepath = /datum/round_event/wizard/summonmagic
typepath = /datum/round_event/wizard/summonmagic/
max_occurrences = 1
earliest_start = 0