12/21 modernizations from TG live (#103)
* sync (#3) * shuttle auto call * Merge /vore into /master (#39) * progress * Compile errors fixed No idea if it's test worthy tho as conflicts with race overhaul and narky removal. * Update admins.txt * efforts continue Fuck grab code, seriously * grab code is cancer * Execute the Narkism Do not hesitate. Show no mercy. * holy shit grab code is awful * have I bitched about grab code My bitching, let me show you it * código de agarre es una mierda No really it is * yeah I don't even know anymore. * Lolnope. Fuck grab code * I'm not even sure what to fix anymore * Self eating is not an acceptable fate * Taste the void, son. * My code doesn't pass it's own sanity check. Maybe it's a sign of things to come. * uncommented and notes * It Works and I Don't Know Why (#38) * shuttle auto call * it works and I don't know why * Subsystem 12/21 Most Recent TG subsystem folder * globalvars 12/21 Tossed out the flavor_misc and parallax files * Onclick 12/21 as well as .dme updates * _defines 12/21 ommited old _MC.dm * _HELPERS 12/21 Preserved snowflake placement of furry sprites * _defeines/genetics reapplied narkism holdover for snowflake races. * Oops forgot mutant colors * modules porting 12/21 + Sounds/icons Admin, Client and most of mob life files ommitted * enviroment file * Admin optimizations ahelp log system kept * Mob ports 12/21 Flavor text preserved * datums ported 12/21 * Game ported 12/21 * batch of duplicate fixes/dogborg work Dogborgs need to be modernized to refractored borg standards. * moar fixes * Maps and futher compile fixes
This commit is contained in:
@@ -6,20 +6,18 @@
|
||||
var/rampupdelta = 5
|
||||
required_players = 0
|
||||
|
||||
|
||||
/datum/game_mode/meteor/announce()
|
||||
world << "<B>The current game mode is - Meteor!</B>"
|
||||
world << "<B>The space station has been stuck in a major meteor shower. You must escape from the station or at least live.</B>"
|
||||
announce_span = "danger"
|
||||
announce_text = "A major meteor shower is bombarding the station! The crew needs to evacuate or survive the onslaught."
|
||||
|
||||
|
||||
/datum/game_mode/meteor/process()
|
||||
if(nometeors || meteordelay > world.time - round_start_time)
|
||||
if(nometeors || meteordelay > world.time - round_start_time)
|
||||
return
|
||||
|
||||
|
||||
var/list/wavetype = meteors_normal
|
||||
var/meteorminutes = (world.time - round_start_time - meteordelay) / 10 / 60
|
||||
|
||||
|
||||
|
||||
|
||||
if (prob(meteorminutes))
|
||||
wavetype = meteors_threatening
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
#define DEFAULT_METEOR_LIFETIME 1800
|
||||
/var/const/meteor_wave_delay = 625 //minimum wait between waves in tenths of seconds
|
||||
//set to at least 100 unless you want evarr ruining every round
|
||||
|
||||
@@ -28,7 +29,7 @@
|
||||
var/turf/pickedstart
|
||||
var/turf/pickedgoal
|
||||
var/max_i = 10//number of tries to spawn meteor.
|
||||
while (!istype(pickedstart, /turf/open/space))
|
||||
while(!isspaceturf(pickedstart))
|
||||
var/startSide = pick(cardinal)
|
||||
pickedstart = spaceDebrisStartLoc(startSide, 1)
|
||||
pickedgoal = spaceDebrisFinishLoc(startSide, 1)
|
||||
@@ -41,45 +42,42 @@
|
||||
M.z_original = 1
|
||||
spawn(0)
|
||||
walk_towards(M, M.dest, 1)
|
||||
return
|
||||
|
||||
/proc/spaceDebrisStartLoc(startSide, Z)
|
||||
var/starty
|
||||
var/startx
|
||||
switch(startSide)
|
||||
if(1) //NORTH
|
||||
if(NORTH)
|
||||
starty = world.maxy-(TRANSITIONEDGE+1)
|
||||
startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
|
||||
if(2) //EAST
|
||||
if(EAST)
|
||||
starty = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1))
|
||||
startx = world.maxx-(TRANSITIONEDGE+1)
|
||||
if(3) //SOUTH
|
||||
if(SOUTH)
|
||||
starty = (TRANSITIONEDGE+1)
|
||||
startx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
|
||||
if(4) //WEST
|
||||
if(WEST)
|
||||
starty = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1))
|
||||
startx = (TRANSITIONEDGE+1)
|
||||
var/turf/T = locate(startx, starty, Z)
|
||||
return T
|
||||
. = locate(startx, starty, Z)
|
||||
|
||||
/proc/spaceDebrisFinishLoc(startSide, Z)
|
||||
var/endy
|
||||
var/endx
|
||||
switch(startSide)
|
||||
if(1) //NORTH
|
||||
endy = TRANSITIONEDGE
|
||||
endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
|
||||
if(2) //EAST
|
||||
endy = rand(TRANSITIONEDGE, world.maxy-TRANSITIONEDGE)
|
||||
endx = TRANSITIONEDGE
|
||||
if(3) //SOUTH
|
||||
endy = world.maxy-TRANSITIONEDGE
|
||||
endx = rand(TRANSITIONEDGE, world.maxx-TRANSITIONEDGE)
|
||||
if(4) //WEST
|
||||
endy = rand(TRANSITIONEDGE,world.maxy-TRANSITIONEDGE)
|
||||
endx = world.maxx-TRANSITIONEDGE
|
||||
var/turf/T = locate(endx, endy, Z)
|
||||
return T
|
||||
if(NORTH)
|
||||
endy = (TRANSITIONEDGE+1)
|
||||
endx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
|
||||
if(EAST)
|
||||
endy = rand((TRANSITIONEDGE+1), world.maxy-(TRANSITIONEDGE+1))
|
||||
endx = (TRANSITIONEDGE+1)
|
||||
if(SOUTH)
|
||||
endy = world.maxy-(TRANSITIONEDGE+1)
|
||||
endx = rand((TRANSITIONEDGE+1), world.maxx-(TRANSITIONEDGE+1))
|
||||
if(WEST)
|
||||
endy = rand((TRANSITIONEDGE+1),world.maxy-(TRANSITIONEDGE+1))
|
||||
endx = world.maxx-(TRANSITIONEDGE+1)
|
||||
. = locate(endx, endy, Z)
|
||||
|
||||
///////////////////////
|
||||
//The meteor effect
|
||||
@@ -99,6 +97,8 @@
|
||||
var/heavy = 0
|
||||
var/meteorsound = 'sound/effects/meteorimpact.ogg'
|
||||
var/z_original = 1
|
||||
var/threat = 0 // used for determining which meteors are most interesting
|
||||
var/lifetime = DEFAULT_METEOR_LIFETIME
|
||||
|
||||
var/list/meteordrop = list(/obj/item/weapon/ore/iron)
|
||||
var/dropamt = 2
|
||||
@@ -114,18 +114,21 @@
|
||||
var/turf/T = get_turf(loc)
|
||||
ram_turf(T)
|
||||
|
||||
if(prob(10) && !istype(T, /turf/open/space))//randomly takes a 'hit' from ramming
|
||||
if(prob(10) && !isspaceturf(T))//randomly takes a 'hit' from ramming
|
||||
get_hit()
|
||||
|
||||
return .
|
||||
|
||||
/obj/effect/meteor/Destroy()
|
||||
meteor_list -= src
|
||||
walk(src,0) //this cancels the walk_towards() proc
|
||||
return ..()
|
||||
. = ..()
|
||||
|
||||
/obj/effect/meteor/New()
|
||||
..()
|
||||
meteor_list += src
|
||||
if(SSaugury)
|
||||
SSaugury.register_doom(src, threat)
|
||||
SpinAnimation()
|
||||
QDEL_IN(src, lifetime)
|
||||
|
||||
/obj/effect/meteor/Bump(atom/A)
|
||||
if(A)
|
||||
@@ -137,7 +140,7 @@
|
||||
//first bust whatever is in the turf
|
||||
for(var/atom/A in T)
|
||||
if(A != src)
|
||||
if(istype(A, /mob/living))
|
||||
if(isliving(A))
|
||||
A.visible_message("<span class='warning'>[src] slams into [A].</span>", "<span class='userdanger'>[src] slams into you!.</span>")
|
||||
A.ex_act(hitpwr)
|
||||
|
||||
@@ -153,28 +156,38 @@
|
||||
hits--
|
||||
if(hits <= 0)
|
||||
make_debris()
|
||||
meteor_effect(heavy)
|
||||
meteor_effect()
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/meteor/ex_act()
|
||||
return
|
||||
|
||||
#define METEOR_MEDAL "Your Life Before Your Eyes"
|
||||
|
||||
/obj/effect/meteor/examine(mob/user)
|
||||
if(!admin_spawned && isliving(user))
|
||||
UnlockMedal(METEOR_MEDAL,user.client)
|
||||
..()
|
||||
|
||||
#undef METEOR_MEDAL
|
||||
|
||||
/obj/effect/meteor/attackby(obj/item/weapon/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weapon/pickaxe))
|
||||
make_debris()
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
return ..()
|
||||
. = ..()
|
||||
|
||||
/obj/effect/meteor/proc/make_debris()
|
||||
for(var/throws = dropamt, throws > 0, throws--)
|
||||
var/thing_to_spawn = pick(meteordrop)
|
||||
new thing_to_spawn(get_turf(src))
|
||||
|
||||
/obj/effect/meteor/proc/meteor_effect(sound=1)
|
||||
if(sound)
|
||||
/obj/effect/meteor/proc/meteor_effect()
|
||||
if(heavy)
|
||||
for(var/mob/M in player_list)
|
||||
if((M.orbiting) && (SSaugury.watchers[M]))
|
||||
continue
|
||||
var/turf/T = get_turf(M)
|
||||
if(!T || T.z != src.z)
|
||||
continue
|
||||
@@ -195,14 +208,16 @@
|
||||
hitpwr = 3
|
||||
meteorsound = 'sound/weapons/Gunshot_smg.ogg'
|
||||
meteordrop = list(/obj/item/weapon/ore/glass)
|
||||
threat = 1
|
||||
|
||||
//Medium-sized
|
||||
/obj/effect/meteor/medium
|
||||
name = "meteor"
|
||||
dropamt = 3
|
||||
threat = 5
|
||||
|
||||
/obj/effect/meteor/medium/meteor_effect()
|
||||
..(heavy)
|
||||
..()
|
||||
explosion(src.loc, 0, 1, 2, 3, 0)
|
||||
|
||||
//Large-sized
|
||||
@@ -212,9 +227,10 @@
|
||||
hits = 6
|
||||
heavy = 1
|
||||
dropamt = 4
|
||||
threat = 10
|
||||
|
||||
/obj/effect/meteor/big/meteor_effect()
|
||||
..(heavy)
|
||||
..()
|
||||
explosion(src.loc, 1, 2, 3, 4, 0)
|
||||
|
||||
//Flaming meteor
|
||||
@@ -225,9 +241,10 @@
|
||||
heavy = 1
|
||||
meteorsound = 'sound/effects/bamf.ogg'
|
||||
meteordrop = list(/obj/item/weapon/ore/plasma)
|
||||
threat = 20
|
||||
|
||||
/obj/effect/meteor/flaming/meteor_effect()
|
||||
..(heavy)
|
||||
..()
|
||||
explosion(src.loc, 1, 2, 3, 4, 0, 0, 5)
|
||||
|
||||
//Radiation meteor
|
||||
@@ -236,10 +253,11 @@
|
||||
icon_state = "glowing"
|
||||
heavy = 1
|
||||
meteordrop = list(/obj/item/weapon/ore/uranium)
|
||||
threat = 15
|
||||
|
||||
|
||||
/obj/effect/meteor/irradiated/meteor_effect()
|
||||
..(heavy)
|
||||
..()
|
||||
explosion(src.loc, 0, 0, 4, 3, 0)
|
||||
new /obj/effect/decal/cleanable/greenglow(get_turf(src))
|
||||
radiation_pulse(get_turf(src), 2, 5, 50, 1)
|
||||
@@ -254,15 +272,18 @@
|
||||
meteorsound = 'sound/effects/blobattack.ogg'
|
||||
meteordrop = list(/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human, /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant, /obj/item/organ/heart, /obj/item/organ/lungs, /obj/item/organ/tongue, /obj/item/organ/appendix/)
|
||||
var/meteorgibs = /obj/effect/gibspawner/generic
|
||||
threat = 2
|
||||
|
||||
/obj/effect/meteor/meaty/New()
|
||||
for(var/obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant/M in meteordrop)
|
||||
meteordrop -= M
|
||||
meteordrop += pick(subtypesof(M))
|
||||
for(var/path in meteordrop)
|
||||
if(path == /obj/item/weapon/reagent_containers/food/snacks/meat/slab/human/mutant)
|
||||
meteordrop -= path
|
||||
meteordrop += pick(subtypesof(path))
|
||||
|
||||
for(var/obj/item/organ/tongue/T in meteordrop)
|
||||
meteordrop -= T
|
||||
meteordrop += pick(typesof(T))
|
||||
for(var/path in meteordrop)
|
||||
if(path == /obj/item/organ/tongue)
|
||||
meteordrop -= path
|
||||
meteordrop += pick(typesof(path))
|
||||
..()
|
||||
|
||||
/obj/effect/meteor/meaty/make_debris()
|
||||
@@ -271,8 +292,8 @@
|
||||
|
||||
|
||||
/obj/effect/meteor/meaty/ram_turf(turf/T)
|
||||
if(!istype(T, /turf/open/space))
|
||||
new /obj/effect/decal/cleanable/blood (T)
|
||||
if(!isspaceturf(T))
|
||||
new /obj/effect/decal/cleanable/blood(T)
|
||||
|
||||
/obj/effect/meteor/meaty/Bump(atom/A)
|
||||
A.ex_act(hitpwr)
|
||||
@@ -289,22 +310,28 @@
|
||||
..()
|
||||
|
||||
/obj/effect/meteor/meaty/xeno/ram_turf(turf/T)
|
||||
if(!istype(T, /turf/open/space))
|
||||
new /obj/effect/decal/cleanable/xenoblood (T)
|
||||
if(!isspaceturf(T))
|
||||
new /obj/effect/decal/cleanable/xenoblood(T)
|
||||
|
||||
//Station buster Tunguska
|
||||
/obj/effect/meteor/tunguska
|
||||
name = "tunguska meteor"
|
||||
icon_state = "flaming"
|
||||
desc = "Your life briefly passes before your eyes the moment you lay them on this monstruosity"
|
||||
desc = "Your life briefly passes before your eyes the moment you lay them on this monstrosity."
|
||||
hits = 30
|
||||
hitpwr = 1
|
||||
heavy = 1
|
||||
meteorsound = 'sound/effects/bamf.ogg'
|
||||
meteordrop = list(/obj/item/weapon/ore/plasma)
|
||||
threat = 50
|
||||
|
||||
/obj/effect/meteor/tunguska/Move()
|
||||
. = ..()
|
||||
if(.)
|
||||
PoolOrNew(/obj/effect/overlay/temp/revenant, get_turf(src))
|
||||
|
||||
/obj/effect/meteor/tunguska/meteor_effect()
|
||||
..(heavy)
|
||||
..()
|
||||
explosion(src.loc, 5, 10, 15, 20, 0)
|
||||
|
||||
/obj/effect/meteor/tunguska/Bump()
|
||||
@@ -327,8 +354,10 @@
|
||||
heavy = 1
|
||||
dropamt = 1
|
||||
meteordrop = list(/obj/item/clothing/head/hardhat/pumpkinhead, /obj/item/weapon/reagent_containers/food/snacks/grown/pumpkin)
|
||||
threat = 100
|
||||
|
||||
/obj/effect/meteor/pumpkin/New()
|
||||
..()
|
||||
meteorsound = pick('sound/hallucinations/im_here1.ogg','sound/hallucinations/im_here2.ogg')
|
||||
//////////////////////////
|
||||
#undef DEFAULT_METEOR_LIFETIME
|
||||
|
||||
Reference in New Issue
Block a user