mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-26 22:42:26 +01:00
Adds new space ruin content and changes how space ruin away roles works (#8058)
This pr adds a new cool space ruin made by kyres, replacing the listening outpost and the sol corvette, that were lame. This space ruin has two ghost roles. This pr also makes so that space ruin sites only open if the research shuttle is launched to an away site, they will be closed otherwise. The research shuttle also has a transit time and area now.
This commit is contained in:
@@ -27,6 +27,7 @@
|
||||
var/mob_name_pick_message = "Pick a name."
|
||||
var/mob_name_prefix = null //The prefix that should be applied to the mob (i.e. CCIAA, Tpr., Cmdr.)
|
||||
var/mob_name_suffix = null //The suffix that should be applied to the mob name
|
||||
var/away_site = FALSE
|
||||
|
||||
/datum/ghostspawner/New()
|
||||
. = ..()
|
||||
@@ -152,3 +153,18 @@
|
||||
for(var/i in SSghostroles.spawnpoints)
|
||||
SSghostroles.update_spawnpoint_status_by_identifier(i)
|
||||
return TRUE
|
||||
|
||||
/datum/ghostspawner/simplemob/spawn_mob(mob/user)
|
||||
//Select a spawnpoint (if available)
|
||||
var/turf/T = select_spawnpoint()
|
||||
var/mob/living/simple_animal/S
|
||||
if (T)
|
||||
S = new spawn_mob(T)
|
||||
else
|
||||
to_chat(user, "<span class='warning'>Unable to find any spawn point. </span>")
|
||||
|
||||
if(S)
|
||||
announce_ghost_joinleave(user, 0, "They are now a [name].")
|
||||
S.ckey = user.ckey
|
||||
|
||||
return S
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "Display honour in everything you do. Be an excellent person."
|
||||
tags = list("External")
|
||||
|
||||
enabled = TRUE
|
||||
enabled = FALSE
|
||||
spawnpoints = list("kataphract")
|
||||
req_perms = null
|
||||
max_count = 2
|
||||
@@ -22,6 +22,7 @@
|
||||
special_role = "Kataphract-Hopeful"
|
||||
respawn_flag = null
|
||||
extra_languages = list(LANGUAGE_UNATHI, LANGUAGE_AZAZIBA)
|
||||
away_site = TRUE
|
||||
|
||||
/datum/ghostspawner/human/kataphract/klax
|
||||
short_name = "kataphract_hop_klax"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
desc = "Protect the People's Republic of Adhomai's possessions on space."
|
||||
tags = list("External")
|
||||
|
||||
enabled = TRUE
|
||||
enabled = FALSE
|
||||
spawnpoints = list("pra_cosmonaut")
|
||||
req_perms = null
|
||||
max_count = 3
|
||||
@@ -20,6 +20,7 @@
|
||||
respawn_flag = null
|
||||
extra_languages = list(LANGUAGE_SIIK_MAAS)
|
||||
uses_species_whitelist = FALSE
|
||||
away_site = TRUE
|
||||
|
||||
/datum/ghostspawner/human/pra_cosmonaut/commissar
|
||||
short_name = "pra_commissar"
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
/datum/ghostspawner/human/zenghu_survivor
|
||||
short_name = "zenghu"
|
||||
name = "Zeng-Hu Survivor"
|
||||
desc = "Survive whatever might lurk in the Zeng-Hu installation."
|
||||
tags = list("External")
|
||||
|
||||
enabled = FALSE
|
||||
spawnpoints = list("zenghu")
|
||||
req_perms = null
|
||||
max_count = 3
|
||||
|
||||
away_site = TRUE
|
||||
|
||||
outfit = /datum/outfit/admin/zenghu_survivor
|
||||
possible_species = list("Human", "Off-Worlder Human", "Skrell", "Vaurca Worker", "Vaurca Warrior", "Baseline Frame", "Hephaestus G1 Industrial Frame", "Hephaestus G2 Industrial Frame", "Xion Industrial Frame", "Zeng-Hu Mobility Frame", "Bishop Accessory Frame")
|
||||
possible_genders = list(MALE,FEMALE)
|
||||
allow_appearance_change = APPEARANCE_PLASTICSURGERY
|
||||
|
||||
assigned_role = "Zeng-Hu Survivor"
|
||||
special_role = "Zeng-Hu Survivor"
|
||||
respawn_flag = null
|
||||
uses_species_whitelist = TRUE
|
||||
|
||||
/datum/outfit/admin/zenghu_survivor
|
||||
name = "Zeng-Hu Employee"
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/zeng
|
||||
shoes = /obj/item/clothing/shoes/white
|
||||
belt = /obj/item/storage/belt/utility/full
|
||||
id = /obj/item/card/id/zeng_hu
|
||||
r_hand = /obj/item/device/flashlight
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
/datum/ghostspawner/simplemob/spider_queen
|
||||
short_name = "spiderqueen"
|
||||
name = "Spider Queen"
|
||||
desc = "Be a spooky giant spider."
|
||||
tags = list("External")
|
||||
spawnpoints = list("spiderqueen")
|
||||
|
||||
max_count = 1
|
||||
enabled = FALSE
|
||||
|
||||
away_site = TRUE
|
||||
|
||||
respawn_flag = null
|
||||
|
||||
spawn_mob = /mob/living/simple_animal/hostile/spider_queen
|
||||
@@ -6,6 +6,7 @@
|
||||
blocks_air = 1
|
||||
density = 1
|
||||
gender = PLURAL
|
||||
opacity = 1
|
||||
|
||||
// This is a global list so we can share the same list with all mineral turfs; it's the same for all of them anyways.
|
||||
var/list/mineral_can_smooth_with = list(
|
||||
@@ -429,7 +430,7 @@ var/list/mineral_can_smooth_with = list(
|
||||
|
||||
//Add some rubble, you did just clear out a big chunk of rock.
|
||||
ChangeTurf(mined_turf)
|
||||
|
||||
|
||||
if(rand(1,500) == 1)
|
||||
visible_message("<span class='notice'>An old dusty crate was buried within!</span>")
|
||||
new /obj/structure/closet/crate/secure/loot(src)
|
||||
|
||||
@@ -0,0 +1,110 @@
|
||||
/mob/living/simple_animal/hostile/spider_queen
|
||||
name = "colossal spider"
|
||||
desc = "A monstrous eight-legged creature."
|
||||
icon = 'icons/mob/npc/spider_queen.dmi'
|
||||
icon_state = "spider_queen"
|
||||
icon_living = "spider_queen"
|
||||
icon_dead = "spider_queen_dead"
|
||||
speak_emote = list("chitters")
|
||||
emote_hear = list("chitters")
|
||||
speak_chance = 5
|
||||
turns_per_move = 5
|
||||
see_in_dark = 10
|
||||
see_invisible = SEE_INVISIBLE_NOLIGHTING
|
||||
meat_type = /obj/item/reagent_containers/food/snacks/xenomeat
|
||||
response_help = "pets"
|
||||
response_disarm = "gently pushes aside"
|
||||
response_harm = "pokes"
|
||||
stop_automated_movement_when_pulled = 0
|
||||
maxHealth = 700
|
||||
health = 700
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 30
|
||||
heat_damage_per_tick = 20
|
||||
cold_damage_per_tick = 20
|
||||
faction = "spiders"
|
||||
|
||||
mob_swap_flags = HUMAN|SIMPLE_ANIMAL|SLIME|MONKEY
|
||||
mob_push_flags = ALLMOBS
|
||||
|
||||
attacktext = "bit"
|
||||
attack_sound = 'sound/weapons/bite.ogg'
|
||||
|
||||
pass_flags = PASSTABLE
|
||||
move_to_delay = 6
|
||||
speed = 1
|
||||
mob_size = 15
|
||||
environment_smash = 2
|
||||
|
||||
pixel_x = -16
|
||||
pixel_y = -16
|
||||
|
||||
attack_emote = "skitters toward"
|
||||
emote_sounds = list('sound/effects/creatures/spider_critter.ogg')
|
||||
|
||||
tameable = FALSE
|
||||
density = FALSE
|
||||
|
||||
var/hovering = FALSE
|
||||
|
||||
/mob/living/simple_animal/hostile/spider_queen/Initialize()
|
||||
. = ..()
|
||||
add_spell(new /spell/targeted/ceiling_climb, "const_spell_ready")
|
||||
|
||||
/mob/living/simple_animal/hostile/spider_queen/update_icon()
|
||||
if(hovering)
|
||||
icon_state = "spider_queen_shadow"
|
||||
else
|
||||
icon_state = initial(icon_state)
|
||||
..()
|
||||
|
||||
/mob/living/simple_animal/hostile/spider_queen/UnarmedAttack(var/atom/A, var/proximity)
|
||||
if(hovering)
|
||||
return
|
||||
..()
|
||||
|
||||
/spell/targeted/ceiling_climb
|
||||
name = "Ceiling Climbing"
|
||||
desc = "Allows the spider queen to walk on the ceiling, becoming untargetable."
|
||||
feedback = "CEIB"
|
||||
range = 0
|
||||
spell_flags = INCLUDEUSER
|
||||
charge_max = 1200 //2 minute
|
||||
max_targets = 1
|
||||
|
||||
invocation_type = SpI_EMOTE
|
||||
invocation = "climbs on the ceiling."
|
||||
|
||||
hud_state = "spider_climb"
|
||||
|
||||
/spell/targeted/ceiling_climb/cast(mob/target,var/mob/living/user as mob)
|
||||
..()
|
||||
if(istype(user, /mob/living/simple_animal/hostile/spider_queen))
|
||||
var/mob/living/simple_animal/hostile/spider_queen/M = user
|
||||
if(M.hovering)
|
||||
return FALSE
|
||||
M.hovering = TRUE
|
||||
M.mouse_opacity = FALSE
|
||||
M.speed = -1
|
||||
M.update_icon()
|
||||
M.pass_flags = PASSTABLE | PASSMOB
|
||||
M.layer = BELOW_MOB_LAYER
|
||||
addtimer(CALLBACK(src, .proc/do_landing, M), 1 MINUTE)
|
||||
return TRUE
|
||||
else
|
||||
return FALSE
|
||||
|
||||
/spell/targeted/ceiling_climb/proc/do_landing(var/mob/living/simple_animal/hostile/spider_queen/S)
|
||||
S.hovering = FALSE
|
||||
S.mouse_opacity = TRUE
|
||||
S.speed = initial(S.speed)
|
||||
S.update_icon()
|
||||
S.pass_flags = PASSTABLE
|
||||
S.layer = initial(S.layer)
|
||||
var/turf/target_turf = get_turf(S)
|
||||
if(target_turf)
|
||||
S.visible_message("<span class='danger'>\The [S] lands on the [target_turf]!</span>")
|
||||
for(var/mob/living/M in target_turf)
|
||||
M.apply_damage(50, BRUTE)
|
||||
M.apply_effect(6, STUN, blocked)
|
||||
return TRUE
|
||||
@@ -16,6 +16,18 @@
|
||||
req_access = list(access_research)
|
||||
circuit = /obj/item/circuitboard/research_shuttle
|
||||
|
||||
/datum/shuttle/ferry/research
|
||||
var/triggered_away_sites = FALSE
|
||||
|
||||
/datum/shuttle/ferry/research/launch()
|
||||
. = ..()
|
||||
if(!triggered_away_sites)
|
||||
for(var/s in SSghostroles.spawners)
|
||||
var/datum/ghostspawner/G = SSghostroles.spawners[s]
|
||||
if(G.away_site)
|
||||
G.enable()
|
||||
triggered_away_sites = TRUE
|
||||
|
||||
/obj/machinery/computer/shuttle_control/merchant
|
||||
name = "merchant shuttle control console"
|
||||
req_access = list(access_merchant)
|
||||
|
||||
Reference in New Issue
Block a user