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:
Alberyk
2020-01-24 19:36:30 -03:00
committed by GitHub
parent 21faef9c11
commit 73f600a698
16 changed files with 1806 additions and 1649 deletions
+16
View File
@@ -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"
+2 -1
View File
@@ -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
+2 -1
View File
@@ -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
+12
View File
@@ -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)