mirror of
https://github.com/Sandstorm-Station/Sandstorm-Station-13.git
synced 2026-08-22 20:57:48 +01:00
Mining update (#30)
* smol mining update
* Revert "smol mining update"
This reverts commit 9a0bd466ff.
* the .wav files i will use
* the rest that is being added for now
* fixes your stuff
* makes the crusher purchasable
* fixes legion's trophy
* so many icons and oggs
* SIF and more icons
* even more icons, sorry
* new modkits, yay
* oh come on, it didn't update
* some bosses seen to be ready
* Glory Kill system, should work just fine
* even more icons, jeez, also, elite mods
* oh hey, i got the icon
* almost done
* icons and meme dragon
* it's icon was hidden and i didn't notice
* why do i hear boss music ?
* one day...
* while Nano was...
* not continuing that
* stole some compatibility stuff
* the end is near
* some stuff to make stuff work
* probably one of the last commits
* king goat itself
* THE ERRORS, THEY'RE EVERYWHERE
* so close...
* the new ruins should spawn now
* should be the last commit, let's test it
* Now The Gladiator actually exists
* make them mad, and toggle their music
* oh, wait, need to give you the new files
* i think i saved someone's ears
* missing areas, i'm sorry
* good luck fighting KG without a ladder
* just leave a comment, nothing else
* fixes double spawn at least for hiero, aka why the fuck make two of the same proc and not remove 1st
* invisible hat, not anymore
* takes some stuff before bob even merges it on theirs
* how did these icons disappear ?
* fixes some oopsies
* sand plz help
* *fixes your thing*
* and i think i fixed the other
* fixes
* no async needed
* im done, just merge this useless thing
Co-authored-by: crazyraio2 <44246096+crazyraio2@users.noreply.github.com>
This commit is contained in:
co-authored by
crazyraio2
parent
fd16319e61
commit
d312fbc4db
@@ -0,0 +1,10 @@
|
||||
/area/ruin/powered/kinggoat_arena
|
||||
name = "King Goat Arena"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
noteleport = TRUE
|
||||
icon_state = "dk_yellow"
|
||||
|
||||
/area/lavaland/surface/sif
|
||||
name = "Lavaland Sif Ruins"
|
||||
icon_state = "red"
|
||||
outdoors = TRUE
|
||||
@@ -0,0 +1,134 @@
|
||||
//i hate these fucking goats but i can't murder them, for i know they will haunt me in my sleep if i do so. so i nerf them instead.
|
||||
/obj/item/toy/plush/goatplushie
|
||||
name = "strange goat plushie"
|
||||
icon = 'sandcode/icons/obj/plushes.dmi'
|
||||
icon_state = "goat"
|
||||
desc = "Despite its cuddly appearance and plush nature, it will beat you up all the same. Goats never change."
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry
|
||||
icon = 'sandcode/icons/obj/plushes.dmi'
|
||||
var/mob/living/carbon/target
|
||||
throwforce = 5
|
||||
var/cooldown = 0
|
||||
var/cooldown_modifier = 20
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/Initialize()
|
||||
. = ..()
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/process()
|
||||
if (prob(25) && !target)
|
||||
var/list/targets_to_pick_from = list()
|
||||
for(var/mob/living/carbon/C in view(7, src))
|
||||
if(considered_alive(C.mind) && !faction_check(list("goat"), C.faction, FALSE))
|
||||
targets_to_pick_from += C
|
||||
if (!targets_to_pick_from.len)
|
||||
return
|
||||
target = pick(targets_to_pick_from)
|
||||
visible_message("<span class='notice'>[src] stares at [target].</span>")
|
||||
if (world.time > cooldown && target)
|
||||
ram()
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/proc/ram()
|
||||
if(prob((obj_flags & EMAGGED) ? 98:90) && isturf(loc) && considered_alive(target.mind) && !faction_check(list("goat"), target.faction, FALSE))
|
||||
throw_at(target, 10, 10)
|
||||
visible_message("<span class='danger'>[src] rams [target]!</span>")
|
||||
cooldown = world.time + cooldown_modifier
|
||||
target = null
|
||||
visible_message("<span class='notice'>[src] looks disinterested.</span>")
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/emag_act(mob/user)
|
||||
if (obj_flags&EMAGGED)
|
||||
visible_message("<span class='notice'>[src] already looks angry enough, you shouldn't anger it more.</span>")
|
||||
return
|
||||
cooldown_modifier = cooldown_modifier/2 * 0.75
|
||||
throwforce = 12.5
|
||||
force = 10
|
||||
obj_flags |= EMAGGED
|
||||
visible_message("<span class='danger'>[src] stares at [user] angrily before going docile.</span>")
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/Destroy()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
return ..()
|
||||
|
||||
/obj/item/toy/plush/goatplushie
|
||||
squeak_override = list('sandcode/sound/items/goatsound.ogg'=1)
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/realgoat
|
||||
name = "goat plushie"
|
||||
icon = 'sandcode/icons/obj/plushes.dmi'
|
||||
icon_state = "realgoat"
|
||||
|
||||
/obj/item/toy/plush/realgoat
|
||||
name = "goat plushie"
|
||||
icon = 'sandcode/icons/obj/plushes.dmi'
|
||||
desc = "Despite its cuddly appearance and plush nature, it will beat you up all the same... or at least it would if it wasn't a normal plushie."
|
||||
icon_state = "realgoat"
|
||||
squeak_override = list('sandcode/sound/items/goatsound.ogg'=1)
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/kinggoat
|
||||
name = "King Goat Plushie"
|
||||
desc = "A plushie depicting the king of all goats."
|
||||
icon = 'sandcode/icons/obj/plushes.dmi'
|
||||
icon_state = "kinggoat"
|
||||
throwforce = 8
|
||||
force = 8
|
||||
attack_verb = list("chomped")
|
||||
gender = MALE
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/kinggoat/ascendedkinggoat
|
||||
name = "Ascended King Goat Plushie"
|
||||
desc = "A plushie depicting the god of all goats."
|
||||
icon = 'sandcode/icons/obj/plushes.dmi'
|
||||
icon_state = "ascendedkinggoat"
|
||||
throwforce = 10
|
||||
force = 10
|
||||
var/divine = TRUE
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/kinggoat/ascendedkinggoat/attackby(obj/item/I,mob/living/user,params)
|
||||
if(I.get_sharpness())
|
||||
user.visible_message("<span class='notice'>[user] attempts to destroy [src]!</span>", "<span class='suicide'>[I] bounces off [src]'s back before breaking into millions of pieces... [src] glares at [user]!</span>") // You fucked up now son
|
||||
I.play_tool_sound(src)
|
||||
qdel(I)
|
||||
user.gib()
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/kinggoat/attackby(obj/item/I,mob/living/user,params)
|
||||
if(I.get_sharpness())
|
||||
user.visible_message("<span class='notice'>[user] rips [src] to shreds!</span>", "<span class='notice'>[src]'s death has attracted the attention of the king goat plushie guards!</span>")
|
||||
I.play_tool_sound(src)
|
||||
qdel(src)
|
||||
var/turf/location = get_turf(user)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat/masterguardgoat(location)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat/masterguardgoat(location)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat/masterguardgoat(location)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat/masterguardgoat(location)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat(location)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat(location)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat(location)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat(location)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat(location)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat(location)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat(location)
|
||||
new/obj/item/toy/plush/goatplushie/angry/guardgoat(location)
|
||||
if(istype(I, /obj/item/reagent_containers/food/snacks/grown/cabbage))
|
||||
user.visible_message("<span class='notice'>[user] watches as [src] takes a bite out of the cabbage!</span>", "<span class='notice'>[src]'s fur starts glowing. It seems they have ascended!</span>")
|
||||
playsound(src, 'sound/items/eatfood.ogg', 50, 1)
|
||||
qdel(I)
|
||||
qdel(src)
|
||||
var/turf/location = get_turf(user)
|
||||
new/obj/item/toy/plush/goatplushie/angry/kinggoat/ascendedkinggoat(location)
|
||||
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/guardgoat
|
||||
name = "guard goat plushie"
|
||||
desc = "A plushie depicting one of the King Goat's guards, tasked to protect the king at all costs."
|
||||
icon = 'sandcode/icons/obj/plushes.dmi'
|
||||
icon_state = "guardgoat"
|
||||
throwforce = 6
|
||||
|
||||
/obj/item/toy/plush/goatplushie/angry/guardgoat/masterguardgoat
|
||||
name = "royal guard goat plushie"
|
||||
desc = "A plushie depicting one of the royal King Goat's guards, tasked to protecting the king at all costs and training new goat guards."
|
||||
icon = 'sandcode/icons/obj/plushes.dmi'
|
||||
icon_state = "royalguardgoat"
|
||||
throwforce = 7
|
||||
@@ -0,0 +1,9 @@
|
||||
/obj/structure/ladder/unbreakable/kinggoat
|
||||
name = "Ladder to King Goat's arena"
|
||||
id = "kinggoat"
|
||||
height = 0
|
||||
|
||||
/obj/structure/ladder/unbreakable/kinggoat/goat2
|
||||
name = "Ladder out of King Goat's arena"
|
||||
id = "kinggoat"
|
||||
height = 1
|
||||
@@ -0,0 +1,8 @@
|
||||
/obj/structure/spawner/lavaland/shamblingminer
|
||||
mob_types = list(/mob/living/simple_animal/hostile/asteroid/miner)
|
||||
|
||||
/obj/structure/spawner/lavaland/icewatcher
|
||||
mob_types = list(/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/icewing)
|
||||
|
||||
/obj/structure/spawner/lavaland/imp
|
||||
mob_types = list(/mob/living/simple_animal/hostile/asteroid/imp)
|
||||
@@ -0,0 +1,105 @@
|
||||
#define SPAWN_MEGAFAUNA "bluh bluh huge boss"
|
||||
#define SPAWN_BUBBLEGUM 6
|
||||
|
||||
//This list prevents spawning more than the associated amount
|
||||
//of megafauna.
|
||||
GLOBAL_LIST_INIT(cap_megas,\
|
||||
list(/mob/living/simple_animal/hostile/megafauna/dragon = 3,\
|
||||
/mob/living/simple_animal/hostile/megafauna/colossus = 3,\
|
||||
/mob/living/simple_animal/hostile/megafauna/bubblegum = 3))
|
||||
|
||||
//this is probably a horrendous way to do it
|
||||
//forgive me for my sins
|
||||
//this is basically a list of all the turfs that
|
||||
//attempted to spawn a monster/tendril in lavaland
|
||||
GLOBAL_LIST_INIT(spawned_turfs, list())
|
||||
|
||||
//this list counts all the turfs that successfuly spawned
|
||||
//a monster or tendril
|
||||
GLOBAL_LIST_INIT(success_spawned_turfs, list())
|
||||
|
||||
/turf/open/floor/plating/asteroid/airless/cave/volcanic
|
||||
mob_spawn_list = list(/mob/living/simple_animal/hostile/asteroid/goliath/beast/random = 50, /obj/structure/spawner/lavaland/goliath = 3, \
|
||||
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher/random = 40, /obj/structure/spawner/lavaland = 2, \
|
||||
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/random = 30, /obj/structure/spawner/lavaland/legion = 3, \
|
||||
/mob/living/simple_animal/hostile/asteroid/miner = 40, /obj/structure/spawner/lavaland/shamblingminer = 2, \
|
||||
/mob/living/simple_animal/hostile/asteroid/imp = 20, /obj/structure/spawner/lavaland/imp = 1, \
|
||||
SPAWN_MEGAFAUNA = 6, /mob/living/simple_animal/hostile/asteroid/goldgrub = 10)
|
||||
//imps are rare because boy they annoying
|
||||
|
||||
/turf/open/floor/plating/asteroid/airless/cave/proc/SpawnMonster(turf/T)
|
||||
if(!isarea(loc))
|
||||
return
|
||||
var/area/A = loc
|
||||
GLOB.spawned_turfs += src
|
||||
if(prob(30))
|
||||
if(!A.mob_spawn_allowed)
|
||||
return
|
||||
var/randumb = pickweight(mob_spawn_list)
|
||||
if(!randumb)
|
||||
return
|
||||
while(randumb == SPAWN_MEGAFAUNA)
|
||||
if(A.megafauna_spawn_allowed && megafauna_spawn_list && megafauna_spawn_list.len) //this is danger. it's boss time.
|
||||
var/maybe_boss = pickweight(megafauna_spawn_list)
|
||||
if(megafauna_spawn_list[maybe_boss])
|
||||
var/count = get_mega_count(maybe_boss)
|
||||
if(count < GLOB.cap_megas[maybe_boss])
|
||||
randumb = maybe_boss
|
||||
else
|
||||
randumb = pickweight(mob_spawn_list)
|
||||
else //this is not danger, don't spawn a boss, spawn something else
|
||||
randumb = pickweight(mob_spawn_list)
|
||||
|
||||
for(var/mob/living/simple_animal/hostile/H in urange(12,T)) //prevents mob clumps
|
||||
if((ispath(randumb, /mob/living/simple_animal/hostile/megafauna) || ismegafauna(H)) && get_dist(src, H) <= 7)
|
||||
return //if there's a megafauna within standard view don't spawn anything at all
|
||||
if(ispath(randumb, /mob/living/simple_animal/hostile/asteroid) || istype(H, /mob/living/simple_animal/hostile/asteroid))
|
||||
return //if the random is a standard mob, avoid spawning if there's another one within 12 tiles
|
||||
if(ispath(randumb, /obj/structure/spawner/lavaland))
|
||||
for(var/obj/structure/spawner/lavaland/L in urange(12,T))
|
||||
return //prevents tendrils spawning in each other's collapse range
|
||||
|
||||
new randumb(T)
|
||||
GLOB.success_spawned_turfs += src
|
||||
return TRUE
|
||||
|
||||
/turf/open/floor/plating/asteroid/airless/cave/proc/BruteForceSpawn(var/mob/living/simple_animal/hostile/megafauna/boss)
|
||||
if(!isarea(loc))
|
||||
return FALSE
|
||||
var/area/A = loc
|
||||
if(!A.mob_spawn_allowed)
|
||||
return FALSE
|
||||
if(!boss || !istype(boss))
|
||||
return FALSE
|
||||
if(A.megafauna_spawn_allowed && megafauna_spawn_list && megafauna_spawn_list.len) //this is danger. it's boss time.
|
||||
if(get_mega_count(boss) < GLOB.cap_megas[boss])
|
||||
new boss()
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/turf/open/floor/plating/asteroid/airless/cave/proc/BruteForceTendril(var/obj/structure/spawner/lavaland/tend)
|
||||
if(!isarea(loc))
|
||||
return FALSE
|
||||
var/area/A = loc
|
||||
if(!A.mob_spawn_allowed)
|
||||
return FALSE
|
||||
if(!tend || !istype(tend))
|
||||
return FALSE
|
||||
if(get_tendril_count(tend) < 1)
|
||||
new tend()
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/proc/get_mega_count(var/mob/living/simple_animal/hostile/megafauna/maybe_boss)
|
||||
var/count = 0
|
||||
for(var/mob/living/simple_animal/hostile/megafauna/M in GLOB.mob_living_list)
|
||||
if(istype(M, maybe_boss))
|
||||
count++
|
||||
return count
|
||||
|
||||
/proc/get_tendril_count(var/obj/structure/spawner/lavaland/meme)
|
||||
var/count = 0
|
||||
for(var/obj/structure/spawner/lavaland/T in GLOB.tendrils)
|
||||
if(istype(T, meme))
|
||||
count++
|
||||
return count
|
||||
Reference in New Issue
Block a user