From 2d547d4d827ec536f6d75e8ee984020a26fc9bda Mon Sep 17 00:00:00 2001 From: Cheridan Date: Wed, 23 Apr 2014 15:01:19 -0500 Subject: [PATCH] Refactors space dust Meteors spin renames meateors --- code/__HELPERS/matrices.dm | 14 ++++ code/game/gamemodes/meteor/meteors.dm | 12 ++- code/game/turfs/space/space.dm | 6 +- code/modules/events/dust.dm | 113 +++----------------------- code/modules/events/meateor_wave.dm | 4 +- 5 files changed, 41 insertions(+), 108 deletions(-) diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm index 9a308d3f9c7..edb3113fa78 100644 --- a/code/__HELPERS/matrices.dm +++ b/code/__HELPERS/matrices.dm @@ -1,3 +1,17 @@ /matrix/proc/TurnTo(old_angle, new_angle) . = new_angle - old_angle Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT + + +/atom/proc/SpinAnimation(speed = 10) + var/matrix/m120 = matrix(transform) + m120.Turn(120) + var/matrix/m240 = matrix(transform) + m240.Turn(240) + var/matrix/m360 = matrix(transform) + speed /= 3 //Gives us 3 equal time segments for our three turns. + //Why not one turn? Because byond will see that the start and finish are the same place and do nothing + //Why not two turns? Because byond will do a flip instead of a turn + animate(src, transform = m120, time = speed, loop = -1) + animate(transform = m240, time = speed) + animate(transform = m360, time = speed) \ No newline at end of file diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index dc21aae8919..f7caf7be4e9 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -6,6 +6,8 @@ /var/list/meteorsB = list(/obj/effect/meteor/meaty=5, /obj/effect/meteor/meaty/xeno=1) +/var/list/meteorsC = list(/obj/effect/meteor/dust) //for space dust event + /proc/meteor_wave(var/number = 50) //this proc's unused now. if(!ticker || wavesecret) @@ -82,6 +84,7 @@ density = 1 anchored = 1 var/hits = 4 + var/hitpwr = 2 //Level of ex_act to be called on hit. var/dest pass_flags = PASSTABLE var/heavy = 0 @@ -95,6 +98,7 @@ icon_state = "dust" pass_flags = PASSTABLE | PASSGRILLE hits = 1 + hitpwr = 3 meteorsound = 'sound/weapons/throwtap.ogg' meteordrop = /obj/item/weapon/ore/glass @@ -125,7 +129,7 @@ meteordrop = /obj/item/weapon/ore/uranium /obj/effect/meteor/meaty - name = "meateor" + name = "meaty ore" icon_state = "meateor" desc = "Just... don't think too hard about where this thing came from." hits = 2 @@ -140,9 +144,13 @@ meteorgibs = /obj/effect/gibspawner/xeno +/obj/effect/meteor/New() + ..() + SpinAnimation() + /obj/effect/meteor/Bump(atom/A) if(A) - A.ex_act(2) + A.ex_act(hitpwr) playsound(src.loc, meteorsound, 40, 1) if(--src.hits <= 0) make_debris() diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index c26bc1e88c9..7f743f88f04 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -58,7 +58,7 @@ // if(ticker.mode.name == "nuclear emergency") return if(A.z > 6) return if (A.x <= TRANSITIONEDGE || A.x >= (world.maxx - TRANSITIONEDGE - 1) || A.y <= TRANSITIONEDGE || A.y >= (world.maxy - TRANSITIONEDGE - 1)) - if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + if(istype(A, /obj/effect/meteor)) qdel(A) return @@ -135,7 +135,7 @@ var/list/y_arr if(src.x <= 1) - if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + if(istype(A, /obj/effect/meteor)) qdel(A) return @@ -210,7 +210,7 @@ A.loc.Entered(A) else if (src.y >= world.maxy) - if(istype(A, /obj/effect/meteor)||istype(A, /obj/effect/space_dust)) + if(istype(A, /obj/effect/meteor)) qdel(A) return var/list/cur_pos = src.get_global_map_pos() diff --git a/code/modules/events/dust.dm b/code/modules/events/dust.dm index 4091d60f1eb..d24b6cab401 100644 --- a/code/modules/events/dust.dm +++ b/code/modules/events/dust.dm @@ -1,108 +1,19 @@ -/datum/round_event_control/dust +/datum/round_event_control/meteor_wave/dust name = "Minor Space Dust" - typepath = /datum/round_event/dust + typepath = /datum/round_event/meteor_wave/dust weight = 300 - max_occurrences = 10000 + max_occurrences = 1000 earliest_start = 0 -/datum/round_event/dust - var/qnty = 1 +/datum/round_event/meteor_wave/dust + startWhen = 1 + endWhen = 2 -/datum/round_event/dust/setup() - qnty = rand(1,5) +/datum/round_event/meteor_wave/dust/announce() + return -/datum/round_event/dust/start() - while(qnty-- > 0) - new /obj/effect/space_dust/weak() +/datum/round_event/meteor_wave/dust/start() + spawn_meteors(1, meteorsC) - -/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 qdel(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) - 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) - qdel(src) - return 0 - return - - - Bumped(atom/A) - Bump(A) - return - - - ex_act(severity) - qdel(src) - return +/datum/round_event/meteor_wave/dust/tick() + return \ No newline at end of file diff --git a/code/modules/events/meateor_wave.dm b/code/modules/events/meateor_wave.dm index 2303b69b664..fae9ac4fe4e 100644 --- a/code/modules/events/meateor_wave.dm +++ b/code/modules/events/meateor_wave.dm @@ -1,11 +1,11 @@ /datum/round_event_control/meteor_wave/meaty - name = "Meateor Wave" + name = "Meaty Ore Wave" typepath = /datum/round_event/meteor_wave/meaty weight = 1 max_occurrences = 1 /datum/round_event/meteor_wave/meaty/announce() - command_alert("Meateors have been detected on collision course with the station.", "Oh Crap, Get The Mop.") + command_alert("Meaty ores have been detected on collision course with the station.", "Oh Crap, Get The Mop.") world << sound('sound/AI/meteors.ogg')