Merge remote-tracking branch 'upstream/master' into Colourable-flannel
@@ -701,4 +701,31 @@
|
||||
if(isobj(A) || ismob(A))
|
||||
hear |= recursive_mob_check(A, hear, 3, 1, 0, 1)
|
||||
|
||||
return hear
|
||||
return hear
|
||||
|
||||
/proc/get_belly(var/atom/A) // return a belly we're in, one way or another; and if we aren't (or are too deep to comprehend being in belly), returns null
|
||||
var/atom/loc_check = A.loc
|
||||
var/recursion_level = 0
|
||||
while(loc_check && !isbelly(loc_check) && !isturf(loc_check))
|
||||
if(recursion_level > 7) // abstractly picked number, but basically means we tried going 8 levels up. Something is wrong if youre THAT deep anyway
|
||||
break
|
||||
loc_check = loc_check.loc
|
||||
recursion_level++
|
||||
if(isbelly(loc_check))
|
||||
return loc_check
|
||||
return null
|
||||
|
||||
/proc/get_all_prey_recursive(var/mob/living/L, var/client_check = 1) // returns all prey inside the target as well all prey of target's prey, as well as all prey inside target's prey, etc.
|
||||
var/list/result = list()
|
||||
|
||||
if(!istype(L) || !(L.vore_organs) || !(L.vore_organs.len))
|
||||
return result
|
||||
|
||||
for(var/obj/belly/B in L.vore_organs)
|
||||
for(var/mob/living/P in B.contents)
|
||||
if(istype(P))
|
||||
if(client_check && P.client)
|
||||
result |= P
|
||||
result |= get_all_prey_recursive(P, client_check)
|
||||
|
||||
return result
|
||||
@@ -114,8 +114,10 @@
|
||||
#define ui_temp "EAST-1:28,CENTER-2:13"
|
||||
#define ui_health "EAST-1:28,CENTER-1:15"
|
||||
#define ui_internal "EAST-1:28,CENTER:17"
|
||||
#define ui_under_health "EAST-1:28,CENTER-2:13"
|
||||
//borgs
|
||||
#define ui_borg_health "EAST-1:28,CENTER-2:13" //borgs have the health display where humans have the pressure damage indicator.
|
||||
#define ui_borg_under_health "EAST-1:31,CENTER-3:13"
|
||||
#define ui_alien_health "EAST-1:28,CENTER-2:13" //aliens have the health display where humans have the pressure damage indicator.
|
||||
|
||||
#define ui_ling_chemical_display "EAST-1:28,CENTER-3:15"
|
||||
|
||||
@@ -160,6 +160,13 @@
|
||||
using.alpha = HUD.ui_alpha
|
||||
adding += using
|
||||
|
||||
using = new /obj/screen/useself()
|
||||
using.icon = HUD.ui_style
|
||||
using.screen_loc = ui_swaphand2
|
||||
using.color = HUD.ui_color
|
||||
using.alpha = HUD.ui_alpha
|
||||
adding |= using
|
||||
|
||||
inv_box = new /obj/screen/inventory/hand()
|
||||
inv_box.hud = HUD
|
||||
inv_box.name = "r_hand"
|
||||
@@ -257,6 +264,57 @@
|
||||
healths.screen_loc = ui_health
|
||||
hud_elements |= healths
|
||||
|
||||
autowhisper_display = new /obj/screen()
|
||||
autowhisper_display.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
autowhisper_display.icon_state = "autowhisper"
|
||||
autowhisper_display.name = "autowhisper"
|
||||
autowhisper_display.screen_loc = ui_under_health
|
||||
hud_elements |= autowhisper_display
|
||||
|
||||
var/obj/screen/aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "aw-select"
|
||||
aw.name = "autowhisper mode"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "lang"
|
||||
aw.name = "check known languages"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "pose"
|
||||
aw.name = "set pose"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "up"
|
||||
aw.name = "move upwards"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "down"
|
||||
aw.name = "move downwards"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = HUD.ui_style
|
||||
aw.icon_state = "use"
|
||||
aw.name = "use held item on self"
|
||||
aw.screen_loc = ui_swaphand2
|
||||
using.color = HUD.ui_color
|
||||
using.alpha = HUD.ui_alpha
|
||||
adding |= using
|
||||
|
||||
//VOREStation Addition begin
|
||||
shadekin_display = new /obj/screen/shadekin()
|
||||
shadekin_display.screen_loc = ui_shadekin_display
|
||||
@@ -364,3 +422,15 @@
|
||||
/obj/screen/wizard/energy
|
||||
name = "energy"
|
||||
icon_state = "wiz_energy"
|
||||
|
||||
/obj/screen/useself
|
||||
name = "use held item on self"
|
||||
icon_state = "use"
|
||||
var/next = 0
|
||||
|
||||
/obj/screen/useself/proc/can_use(var/mob/living/carbon/human/h, var/obj/item/i) //Basically trying to use the item this way skips the cooldown
|
||||
if(world.time >= next) //And trying to check the cooldown doesn't work because when you click the UI it sets a cooldown
|
||||
next = h.get_attack_speed(i) //So instead we'll just put a cooldown on the use button and apply the item's cooldown to the player
|
||||
h.setClickCooldown(next) //Otherwise you can click the button and yourself faster than the normal cooldown. SO WE SET BOTH!!!!
|
||||
next += world.time
|
||||
i.attack(h, h)
|
||||
|
||||
@@ -11,7 +11,7 @@ var/obj/screen/robot_inventory
|
||||
|
||||
var/list/adding = list()
|
||||
var/list/other = list()
|
||||
|
||||
|
||||
HUD.adding = adding
|
||||
HUD.other = other
|
||||
|
||||
@@ -90,6 +90,48 @@ var/obj/screen/robot_inventory
|
||||
healths.screen_loc = ui_borg_health
|
||||
other += healths
|
||||
|
||||
autowhisper_display = new /obj/screen()
|
||||
autowhisper_display.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
autowhisper_display.icon_state = "autowhisper"
|
||||
autowhisper_display.name = "autowhisper"
|
||||
autowhisper_display.screen_loc = ui_borg_under_health
|
||||
other |= autowhisper_display
|
||||
|
||||
var/obj/screen/aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "aw-select"
|
||||
aw.name = "autowhisper mode"
|
||||
aw.screen_loc = ui_borg_under_health
|
||||
other |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "lang"
|
||||
aw.name = "check known languages"
|
||||
aw.screen_loc = ui_borg_under_health
|
||||
other |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "pose"
|
||||
aw.name = "set pose"
|
||||
aw.screen_loc = ui_borg_under_health
|
||||
other |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "up"
|
||||
aw.name = "move upwards"
|
||||
aw.screen_loc = ui_borg_under_health
|
||||
other |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "down"
|
||||
aw.name = "move downwards"
|
||||
aw.screen_loc = ui_borg_under_health
|
||||
other |= aw
|
||||
|
||||
//Installed Module
|
||||
hands = new /obj/screen()
|
||||
hands.icon = HUD.ui_style
|
||||
|
||||
@@ -454,6 +454,37 @@
|
||||
if("drop")
|
||||
if(usr.client)
|
||||
usr.client.drop_item()
|
||||
if("autowhisper")
|
||||
if(isliving(usr))
|
||||
var/mob/living/u = usr
|
||||
u.toggle_autowhisper()
|
||||
if("autowhisper mode")
|
||||
if(isliving(usr))
|
||||
var/mob/living/u = usr
|
||||
u.autowhisper_mode()
|
||||
if("check known languages")
|
||||
usr.check_languages()
|
||||
if("set pose")
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/u = usr
|
||||
u.pose()
|
||||
else if (issilicon(usr))
|
||||
var/mob/living/silicon/u = usr
|
||||
u.pose()
|
||||
if("move upwards")
|
||||
usr.up()
|
||||
if("move downwards")
|
||||
usr.down()
|
||||
|
||||
if("use held item on self")
|
||||
var/obj/screen/useself/s = src
|
||||
if(ishuman(usr))
|
||||
var/mob/living/carbon/human/u = usr
|
||||
var/obj/item/i = u.get_active_hand()
|
||||
if(i)
|
||||
s.can_use(u,i)
|
||||
else
|
||||
to_chat(usr, "<span class='notice'>You're not holding anything to use. You need to have something in your active hand to use it.</span>")
|
||||
|
||||
if("module")
|
||||
if(isrobot(usr))
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
// Values were extracted from the template itself
|
||||
results = list(
|
||||
list("entry" = "Pressure", "units" = "kPa", "val" = "[round(pressure,0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80),
|
||||
list("entry" = "Temperature", "units" = "°C", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5),
|
||||
list("entry" = "Temperature", "units" = "\u00B0" + "C", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5),
|
||||
list("entry" = "Oxygen", "units" = "kPa", "val" = "[round(o2_level*100,0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17),
|
||||
list("entry" = "Nitrogen", "units" = "kPa", "val" = "[round(n2_level*100,0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40),
|
||||
list("entry" = "Carbon Dioxide", "units" = "kPa", "val" = "[round(co2_level*100,0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0),
|
||||
|
||||
@@ -38,4 +38,13 @@
|
||||
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/canned/brainzsnax/red = 6)
|
||||
|
||||
/obj/item/weapon/storage/box/freezer
|
||||
can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/blood, /obj/item/weapon/reagent_containers/glass, /obj/item/weapon/reagent_containers/food)
|
||||
can_hold = list(/obj/item/organ, /obj/item/weapon/reagent_containers/blood, /obj/item/weapon/reagent_containers/glass, /obj/item/weapon/reagent_containers/food)
|
||||
|
||||
/obj/item/weapon/storage/box/altevian_ammo
|
||||
name = "SAM .48 ammo box"
|
||||
desc = "A box of ratty ammo."
|
||||
icon_state = "secbox"
|
||||
starts_with = list(/obj/item/ammo_magazine/sam48 = 3)
|
||||
max_storage_space = ITEMSIZE_COST_NORMAL * 3
|
||||
drop_sound = 'sound/items/drop/ammobox.ogg'
|
||||
pickup_sound = 'sound/items/pickup/ammobox.ogg'
|
||||
@@ -55,9 +55,56 @@
|
||||
if(8)
|
||||
pixel_x = -32
|
||||
|
||||
/obj/structure/micro_tunnel/proc/find_destinations()
|
||||
var/list/destinations = list()
|
||||
var/turf/myturf = get_turf(src.loc)
|
||||
var/datum/planet/planet
|
||||
for(var/datum/planet/P in SSplanets.planets)
|
||||
if(myturf.z in P.expected_z_levels)
|
||||
planet = P
|
||||
else
|
||||
for(var/obj/structure/micro_tunnel/t in world)
|
||||
if(t == src)
|
||||
continue
|
||||
if(magic || t.magic)
|
||||
destinations |= t
|
||||
continue
|
||||
if(t.z == z)
|
||||
destinations |= t
|
||||
continue
|
||||
var/turf/targetturf = get_turf(t.loc)
|
||||
if(planet)
|
||||
if(targetturf.z in planet.expected_z_levels)
|
||||
destinations |= t
|
||||
continue
|
||||
else
|
||||
var/above = GetAbove(myturf)
|
||||
if(above && t.z == z + 1)
|
||||
destinations |= t
|
||||
continue
|
||||
var/below = GetBelow(myturf)
|
||||
if(below && t.z == z - 1)
|
||||
destinations |= t
|
||||
return destinations
|
||||
|
||||
/obj/structure/micro_tunnel/attack_hand(mob/living/user)
|
||||
if(!isliving(user))
|
||||
tunnel_interact(user)
|
||||
return ..()
|
||||
|
||||
/obj/structure/micro_tunnel/attack_generic(mob/user, damage, attack_verb)
|
||||
tunnel_interact(user)
|
||||
return ..()
|
||||
|
||||
/obj/structure/micro_tunnel/attack_robot(mob/living/user)
|
||||
var/turf/hole = get_turf(src) //Borgs can click stuff from far away, let's make sure they're next to the hole
|
||||
var/turf/borg = get_turf(user)
|
||||
if(hole.AdjacentQuick(borg))
|
||||
tunnel_interact(user)
|
||||
return ..()
|
||||
|
||||
/obj/structure/micro_tunnel/proc/tunnel_interact(mob/living/user)
|
||||
if(!isliving(user))
|
||||
return
|
||||
if(user.loc == src)
|
||||
var/list/our_options = list("Exit", "Move")
|
||||
|
||||
@@ -83,35 +130,7 @@
|
||||
to_chat(user, "<span class = 'warning'>You can't do that unless you're in \the [src].</span>")
|
||||
return
|
||||
|
||||
var/list/destinations = list()
|
||||
var/turf/myturf = get_turf(src.loc)
|
||||
var/datum/planet/planet
|
||||
for(var/datum/planet/P in SSplanets.planets)
|
||||
if(myturf.z in P.expected_z_levels)
|
||||
planet = P
|
||||
else
|
||||
for(var/obj/structure/micro_tunnel/t in world)
|
||||
if(t == src)
|
||||
continue
|
||||
if(magic || t.magic)
|
||||
destinations |= t
|
||||
continue
|
||||
if(t.z == z)
|
||||
destinations |= t
|
||||
continue
|
||||
var/turf/targetturf = get_turf(t.loc)
|
||||
if(planet)
|
||||
if(targetturf.z in planet.expected_z_levels)
|
||||
destinations |= t
|
||||
continue
|
||||
else
|
||||
var/above = GetAbove(myturf)
|
||||
if(above && t.z == z + 1)
|
||||
destinations |= t
|
||||
continue
|
||||
var/below = GetBelow(myturf)
|
||||
if(below && t.z == z - 1)
|
||||
destinations |= t
|
||||
var/list/destinations = find_destinations()
|
||||
|
||||
if(!destinations.len)
|
||||
to_chat(user, "<span class = 'warning'>There are no other tunnels connected to this one!</span>")
|
||||
@@ -212,10 +231,6 @@
|
||||
|
||||
return FALSE
|
||||
|
||||
/obj/structure/micro_tunnel/attack_generic(mob/user, damage, attack_verb)
|
||||
attack_hand(user)
|
||||
return ..()
|
||||
|
||||
/obj/structure/micro_tunnel/MouseDrop_T(mob/living/M, mob/living/user)
|
||||
. = ..()
|
||||
if(M != user)
|
||||
@@ -301,6 +316,9 @@
|
||||
to_chat(usr, "<span class = 'warning'>You can't do that unless you're in \the [src].</span>")
|
||||
return
|
||||
var/list/destinations = list()
|
||||
if(istype(src,/obj/structure/micro_tunnel)) //If we're in a tunnel let's also get the tunnel's destinations
|
||||
var/obj/structure/micro_tunnel/t = src
|
||||
destinations = t.find_destinations()
|
||||
var/turf/myturf = get_turf(src.loc)
|
||||
for(var/obj/o in range(1,myturf))
|
||||
if(!istype(o,/obj))
|
||||
|
||||
@@ -521,6 +521,12 @@
|
||||
ckeywhitelist = list("hunterbirk")
|
||||
character_name = list("Aria Blue")
|
||||
|
||||
/datum/gear/fluff/mercury_vopal_ring
|
||||
path = /obj/item/clothing/gloves/ring/material/void_opal/fluff/mercury
|
||||
display_name = "Mercury's Mate Ring"
|
||||
ckeywhitelist = list("haloren")
|
||||
character_name = list("Mercury")
|
||||
|
||||
// I CKEYS
|
||||
/datum/gear/fluff/ruda_badge
|
||||
path = /obj/item/clothing/accessory/badge/holo/detective/ruda
|
||||
@@ -1212,6 +1218,13 @@
|
||||
ckeywhitelist = list("suicidalpickles")
|
||||
character_name = list("Silent Stripes")
|
||||
|
||||
/datum/gear/fluff/parrizjacket
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/fluff/parrizjacket
|
||||
display_name = "pink crop bomber"
|
||||
slot = slot_wear_suit
|
||||
ckeywhitelist = list("satinisle")
|
||||
character_name = list("Parriz Tavakdavi")
|
||||
|
||||
// T CKEYS
|
||||
/datum/gear/fluff/ascian_medal
|
||||
path = /obj/item/clothing/accessory/medal/silver/unity/tabiranth
|
||||
|
||||
@@ -69,3 +69,6 @@
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/tin/New(var/newloc)
|
||||
..(newloc, MAT_TIN)
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/void_opal/New(var/newloc)
|
||||
..(newloc, MAT_VOPAL)
|
||||
@@ -31,6 +31,9 @@
|
||||
if(forced_psay)
|
||||
pme(message)
|
||||
return
|
||||
if(autowhisper)
|
||||
return me_verb_subtle(message)
|
||||
|
||||
//VOREStation Addition End
|
||||
|
||||
if(act == "help")
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
/datum/event/spacefish_migration
|
||||
startWhen = 0 // Start immediately
|
||||
announceWhen = 45 // Adjusted by setup
|
||||
endWhen = 75 // Adjusted by setup
|
||||
var/fish_type = /mob/living/simple_mob/animal/space/carp/event
|
||||
var/fish_base_cap = 2
|
||||
var/fish_cap_mult = 3
|
||||
var/fish_cap = 10
|
||||
var/list/spawned_fish = list()
|
||||
// Possible fish types. First is the path, second is base cap, third is cap severity multiplier
|
||||
var/list/possible_fish_types = list(
|
||||
list(/mob/living/simple_mob/animal/space/carp/event, 2, 3),
|
||||
list(/mob/living/simple_mob/vore/alienanimals/space_jellyfish, 2, 3),
|
||||
list(/mob/living/simple_mob/animal/space/gnat, 8, 4),
|
||||
list(/mob/living/simple_mob/animal/space/ray, 1, 1),
|
||||
list(/mob/living/simple_mob/animal/space/shark/event, 1, 1)
|
||||
)
|
||||
|
||||
/datum/event/spacefish_migration/setup()
|
||||
announceWhen = rand(30, 60) // 1 to 2 minutes
|
||||
endWhen += severity * 25
|
||||
var/list/fish_config = pick(possible_fish_types)
|
||||
fish_type = fish_config[1]
|
||||
fish_base_cap = fish_config[2]
|
||||
fish_cap_mult = fish_config[3]
|
||||
fish_cap = fish_base_cap + fish_cap_mult ** severity // No more than this many at once regardless of waves. (5, 11, 29)
|
||||
|
||||
/datum/event/spacefish_migration/start()
|
||||
affecting_z -= global.using_map.sealed_levels // Space levels only please!
|
||||
..()
|
||||
|
||||
/datum/event/spacefish_migration/announce()
|
||||
var/announcement = ""
|
||||
if(severity == EVENT_LEVEL_MAJOR)
|
||||
announcement = "Massive migration of unknown biological entities has been detected near [location_name()], please stand-by."
|
||||
else
|
||||
announcement = "Unknown biological [spawned_fish.len == 1 ? "entity has" : "entities have"] been detected near [location_name()], please stand-by."
|
||||
command_announcement.Announce(announcement, "Lifesign Alert")
|
||||
|
||||
/datum/event/spacefish_migration/tick()
|
||||
if(activeFor % 5 != 0)
|
||||
return // Only process every 10 seconds.
|
||||
if(count_spawned_fish() < fish_cap)
|
||||
spawn_fish(rand(3, 3 + severity * 2) - 1, 1, severity + 2)
|
||||
|
||||
/datum/event/spacefish_migration/proc/spawn_fish(var/num_groups, var/group_size_min, var/group_size_max, var/dir)
|
||||
if(isnull(dir))
|
||||
dir = (victim && prob(80)) ? victim.fore_dir : pick(GLOB.cardinal)
|
||||
|
||||
// Check if any landmarks exist!
|
||||
var/list/spawn_locations = list()
|
||||
for(var/obj/effect/landmark/C in landmarks_list)
|
||||
if(C.name == "carpspawn" && (C.z in affecting_z))
|
||||
spawn_locations.Add(C.loc)
|
||||
if(spawn_locations.len) // Okay we've got landmarks, lets use those!
|
||||
shuffle_inplace(spawn_locations)
|
||||
num_groups = min(num_groups, spawn_locations.len)
|
||||
for (var/i = 1, i <= num_groups, i++)
|
||||
var/group_size = rand(group_size_min, group_size_max)
|
||||
for (var/j = 0, j < group_size, j++)
|
||||
spawn_one_fish(spawn_locations[i])
|
||||
return
|
||||
|
||||
// Okay we did *not* have any landmarks, so lets do our best!
|
||||
var/i = 1
|
||||
while (i <= num_groups)
|
||||
var/Z = pick(affecting_z)
|
||||
var/group_size = rand(group_size_min, group_size_max)
|
||||
var/turf/map_center = locate(round(world.maxx/2), round(world.maxy/2), Z)
|
||||
var/turf/group_center = pick_random_edge_turf(dir, Z, TRANSITIONEDGE + 2)
|
||||
var/list/turfs = getcircle(group_center, 2)
|
||||
for (var/j = 0, j < group_size, j++)
|
||||
var/mob/living/simple_mob/animal/M = spawn_one_fish(turfs[(i % turfs.len) + 1])
|
||||
// Ray trace towards middle of the map to find where they can stop just outside of structure/ship.
|
||||
var/turf/target
|
||||
for(var/turf/T in getline(get_turf(M), map_center))
|
||||
if(!T.is_space())
|
||||
break;
|
||||
target = T
|
||||
if(target)
|
||||
M.ai_holder?.give_destination(target) // Ask fish to swim towards the middle of the map
|
||||
i++
|
||||
|
||||
// Spawn a single fish at given location.
|
||||
/datum/event/spacefish_migration/proc/spawn_one_fish(var/loc)
|
||||
var/mob/living/simple_mob/animal/M = new fish_type(loc)
|
||||
GLOB.destroyed_event.register(M, src, PROC_REF(on_fish_destruction))
|
||||
spawned_fish.Add(M)
|
||||
return M
|
||||
|
||||
// Counts living fish spawned by this event.
|
||||
/datum/event/spacefish_migration/proc/count_spawned_fish()
|
||||
. = 0
|
||||
for(var/mob/living/simple_mob/animal/M as anything in spawned_fish)
|
||||
if(!QDELETED(M) && M.stat != DEAD)
|
||||
. += 1
|
||||
|
||||
// If fish is bomphed, remove it from the list.
|
||||
/datum/event/spacefish_migration/proc/on_fish_destruction(var/mob/M)
|
||||
spawned_fish -= M
|
||||
GLOB.destroyed_event.unregister(M, src, PROC_REF(on_fish_destruction))
|
||||
|
||||
/datum/event/spacefish_migration/end()
|
||||
. = ..()
|
||||
// Clean up fish that died in space for some reason.
|
||||
spawn(0)
|
||||
for(var/mob/living/simple_mob/SM in spawned_fish)
|
||||
if(SM.stat == DEAD)
|
||||
var/turf/T = get_turf(SM)
|
||||
if(istype(T, /turf/space))
|
||||
if(prob(75))
|
||||
qdel(SM)
|
||||
CHECK_TICK
|
||||
|
||||
// Overmap version
|
||||
/datum/event/spacefish_migration/overmap/announce()
|
||||
return
|
||||
@@ -30,7 +30,7 @@
|
||||
*/
|
||||
|
||||
/datum/material/diamond
|
||||
name = "diamond"
|
||||
name = MAT_DIAMOND
|
||||
stack_type = /obj/item/stack/material/diamond
|
||||
flags = MATERIAL_UNMELTABLE
|
||||
cut_delay = 60
|
||||
@@ -46,7 +46,7 @@
|
||||
supply_conversion_value = 8
|
||||
|
||||
/datum/material/quartz
|
||||
name = "quartz"
|
||||
name = MAT_QUARTZ
|
||||
display_name = "quartz"
|
||||
use_name = "quartz"
|
||||
icon_colour = "#e6d7df"
|
||||
@@ -57,7 +57,7 @@
|
||||
supply_conversion_value = 4
|
||||
|
||||
/datum/material/painite
|
||||
name = "painite"
|
||||
name = MAT_PAINITE
|
||||
display_name = "painite"
|
||||
use_name = "painite"
|
||||
icon_colour = "#6b4947"
|
||||
@@ -70,7 +70,7 @@
|
||||
supply_conversion_value = 4
|
||||
|
||||
/datum/material/void_opal
|
||||
name = "void opal"
|
||||
name = MAT_VOPAL
|
||||
display_name = "void opal"
|
||||
use_name = "void opal"
|
||||
icon_colour = "#0f0f0f"
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/mob/living/verb/toggle_autowhisper()
|
||||
set name = "Autowhisper Toggle"
|
||||
set desc = "Toggle whether you will automatically whisper/subtle"
|
||||
set category = "IC"
|
||||
|
||||
autowhisper = !autowhisper
|
||||
if(autowhisper_display)
|
||||
autowhisper_display.icon_state = "[autowhisper ? "autowhisper1" : "autowhisper"]"
|
||||
|
||||
if(autowhisper_mode == "Psay/Pme")
|
||||
if(isbelly(loc) && absorbed)
|
||||
var/obj/belly/b = loc
|
||||
if(b.mode_flags & DM_FLAG_FORCEPSAY)
|
||||
var/mes = "but you are affected by forced psay right now, so you will automatically use psay/pme instead of any other option."
|
||||
to_chat(src, "<span class='notice'>Autowhisper has been [autowhisper ? "enabled, [mes]" : "disabled, [mes]"].</span>")
|
||||
return
|
||||
else
|
||||
forced_psay = autowhisper
|
||||
to_chat(src, "<span class='notice'>Autowhisper has been [autowhisper ? "enabled. You will now automatically psay/pme when using say/me. As a note, this option will only work if you are in a situation where you can send psay/pme messages! Otherwise it will work as default whisper/subtle" : "disabled"].</span>")
|
||||
|
||||
else
|
||||
to_chat(src, "<span class='notice'>Autowhisper has been [autowhisper ? "enabled. You will now automatically whisper/subtle when using say/me" : "disabled"].</span>")
|
||||
|
||||
/mob/living/verb/autowhisper_mode()
|
||||
set name = "Autowhisper Mode"
|
||||
set desc = "Set the mode your emotes will default to while using Autowhisper"
|
||||
set category = "IC"
|
||||
|
||||
|
||||
var/choice = tgui_input_list(src, "Select Custom Subtle Mode", "Custom Subtle Mode", list("Adjacent Turfs (Default)", "My Turf", "My Table", "Current Belly (Prey)", "Specific Belly (Pred)", "Specific Person", "Psay/Pme"))
|
||||
if(!choice || choice == "Adjacent Turfs (Default)")
|
||||
autowhisper_mode = null
|
||||
to_chat(src, "<span class='notice'>Your subtles have returned to the default setting.</span>")
|
||||
return
|
||||
if(choice == "Psay/Pme")
|
||||
if(autowhisper)
|
||||
if(isbelly(loc) && absorbed)
|
||||
var/obj/belly/b = loc
|
||||
if(b.mode_flags & DM_FLAG_FORCEPSAY)
|
||||
to_chat(src, "<span class='warning'>You can't set that mode right now, as you appear to be absorbed in a belly using forced psay!</span>")
|
||||
return
|
||||
forced_psay = TRUE
|
||||
to_chat(src, "<span class='notice'>As a note, this option will only work if you are in a situation where you can send psay/pme messages! Otherwise it will work as default whisper/subtle.</span>")
|
||||
autowhisper_mode = choice
|
||||
to_chat(src, "<span class='notice'>Your subtles have been set to <b>[autowhisper_mode]</b>.</span>")
|
||||
@@ -26,6 +26,12 @@
|
||||
var/corpseidjob = null // Needs to be in quotes, such as "Clown" or "Chef." This just determines what the ID reads as, not their access
|
||||
var/corpseidaccess = null //This is for access. See access.dm for which jobs give what access. Again, put in quotes. Use "Captain" if you want it to be all access.
|
||||
var/corpseidicon = null //For setting it to be a gold, silver, CentCom etc ID
|
||||
var/species = SPECIES_HUMAN //defaults to generic-ass humans
|
||||
var/random_species = FALSE //flip to TRUE to randomize species from the list below
|
||||
var/list/random_species_list = list(SPECIES_HUMAN,SPECIES_TAJ,SPECIES_UNATHI,SPECIES_SKRELL)
|
||||
var/list/tail_type = null
|
||||
var/list/ear_type = null
|
||||
var/list/wing_type = null
|
||||
var/corpsesynthtype = 0 // 0 for organic, 1 for drone, 2 for posibrain
|
||||
var/corpsesynthbrand = "Unbranded"
|
||||
|
||||
@@ -34,6 +40,69 @@
|
||||
|
||||
/obj/effect/landmark/mobcorpse/proc/createCorpse() //Creates a mob and checks for gear in each slot before attempting to equip it.
|
||||
var/mob/living/carbon/human/M = new /mob/living/carbon/human (src.loc)
|
||||
if(random_species)
|
||||
var/random_pick = pick(random_species_list)
|
||||
M.set_species(random_pick)
|
||||
src.species = random_pick
|
||||
else
|
||||
M.set_species(species)
|
||||
if(tail_type && tail_type.len)
|
||||
if(tail_type[1] in tail_styles_list)
|
||||
M.tail_style = tail_styles_list[tail_type[1]]
|
||||
if(tail_type.len > 1)
|
||||
var/list/color_rgb_list = hex2rgb(tail_type[2])
|
||||
M.r_tail = color_rgb_list[1]
|
||||
M.g_tail = color_rgb_list[2]
|
||||
M.b_tail = color_rgb_list[3]
|
||||
if(tail_type.len > 2)
|
||||
color_rgb_list = hex2rgb(tail_type[3])
|
||||
M.r_tail2 = color_rgb_list[1]
|
||||
M.g_tail2 = color_rgb_list[2]
|
||||
M.b_tail2 = color_rgb_list[3]
|
||||
if(tail_type.len > 3)
|
||||
color_rgb_list = hex2rgb(tail_type[4])
|
||||
M.r_tail3 = color_rgb_list[1]
|
||||
M.g_tail3 = color_rgb_list[2]
|
||||
M.b_tail3 = color_rgb_list[3]
|
||||
M.update_tail_showing()
|
||||
if(ear_type && ear_type.len)
|
||||
if(ear_type[1] in ear_styles_list)
|
||||
M.ear_style = ear_styles_list[ear_type[1]]
|
||||
if(ear_type.len > 1)
|
||||
var/list/color_rgb_list = hex2rgb(ear_type[2])
|
||||
M.r_ears = color_rgb_list[1]
|
||||
M.g_ears = color_rgb_list[2]
|
||||
M.b_ears = color_rgb_list[3]
|
||||
if(ear_type.len > 2)
|
||||
color_rgb_list = hex2rgb(ear_type[3])
|
||||
M.r_ears2 = color_rgb_list[1]
|
||||
M.g_ears2 = color_rgb_list[2]
|
||||
M.b_ears2 = color_rgb_list[3]
|
||||
if(ear_type.len > 3)
|
||||
color_rgb_list = hex2rgb(ear_type[4])
|
||||
M.r_ears3 = color_rgb_list[1]
|
||||
M.g_ears3 = color_rgb_list[2]
|
||||
M.b_ears3 = color_rgb_list[3]
|
||||
M.update_hair()
|
||||
if(wing_type && wing_type.len)
|
||||
if(wing_type[1] in wing_styles_list)
|
||||
M.wing_style = wing_styles_list[wing_type[1]]
|
||||
if(wing_type.len > 1)
|
||||
var/list/color_rgb_list = hex2rgb(wing_type[2])
|
||||
M.r_wing = color_rgb_list[1]
|
||||
M.g_wing = color_rgb_list[2]
|
||||
M.b_wing = color_rgb_list[3]
|
||||
if(wing_type.len > 2)
|
||||
color_rgb_list = hex2rgb(wing_type[3])
|
||||
M.r_wing2 = color_rgb_list[1]
|
||||
M.g_wing2 = color_rgb_list[2]
|
||||
M.b_wing2 = color_rgb_list[3]
|
||||
if(wing_type.len > 3)
|
||||
color_rgb_list = hex2rgb(wing_type[4])
|
||||
M.r_wing3 = color_rgb_list[1]
|
||||
M.g_wing3 = color_rgb_list[2]
|
||||
M.b_wing3 = color_rgb_list[3]
|
||||
M.update_wing_showing()
|
||||
M.real_name = generateCorpseName()
|
||||
M.set_stat(DEAD) //Kills the new mob
|
||||
if(corpsesynthtype > 0)
|
||||
@@ -48,8 +117,6 @@
|
||||
O.robotize(corpsesynthbrand)
|
||||
if(src.corpseuniform)
|
||||
M.equip_to_slot_or_del(new src.corpseuniform(M), slot_w_uniform)
|
||||
if(src.corpsesuit)
|
||||
M.equip_to_slot_or_del(new src.corpsesuit(M), slot_wear_suit)
|
||||
if(src.corpseshoes)
|
||||
M.equip_to_slot_or_del(new src.corpseshoes(M), slot_shoes)
|
||||
if(src.corpsegloves)
|
||||
@@ -60,8 +127,6 @@
|
||||
M.equip_to_slot_or_del(new src.corpseglasses(M), slot_glasses)
|
||||
if(src.corpsemask)
|
||||
M.equip_to_slot_or_del(new src.corpsemask(M), slot_wear_mask)
|
||||
if(src.corpsehelmet)
|
||||
M.equip_to_slot_or_del(new src.corpsehelmet(M), slot_head)
|
||||
if(src.corpsebelt)
|
||||
M.equip_to_slot_or_del(new src.corpsebelt(M), slot_belt)
|
||||
if(src.corpsepocket1)
|
||||
@@ -90,6 +155,10 @@
|
||||
W.assignment = corpseidjob
|
||||
W.registered_name = M.real_name
|
||||
M.equip_to_slot_or_del(W, slot_wear_id)
|
||||
if(src.corpsehelmet)
|
||||
M.equip_voidhelm_to_slot_or_del_with_refit(new src.corpsehelmet(M), slot_head, src.species)
|
||||
if(src.corpsesuit)
|
||||
M.equip_voidsuit_to_slot_or_del_with_refit(new src.corpsesuit(M), slot_wear_suit, src.species)
|
||||
delete_me = 1
|
||||
qdel(src)
|
||||
|
||||
|
||||
@@ -24,3 +24,19 @@
|
||||
var/number = rand(0,999)
|
||||
var/purpose = pick(list("Recon","Combat","Kill","Guard","Scout","Murder","Capture","Raid","Attack","Battle"))
|
||||
return "[letter]-[number] [purpose] Droid"
|
||||
|
||||
/obj/effect/landmark/mobcorpse/altevian
|
||||
name = "Altevian Naval Officer"
|
||||
corpseuniform = /obj/item/clothing/under/altevian
|
||||
corpsesuit = /obj/item/clothing/suit/space/void/altevian_heartbreaker
|
||||
corpseshoes = /obj/item/clothing/shoes/boots/swat
|
||||
corpsegloves = /obj/item/clothing/gloves/swat
|
||||
corpseradio = /obj/item/device/radio/headset
|
||||
corpsemask = /obj/item/clothing/mask/altevian_breath
|
||||
corpsehelmet = /obj/item/clothing/head/helmet/space/void/altevian_heartbreaker
|
||||
corpseid = 1
|
||||
corpseidjob = "Altevian Navy"
|
||||
corpseidaccess = "Syndicate"
|
||||
species = SPECIES_ALTEVIAN
|
||||
ear_type = list(/datum/sprite_accessory/ears/altevian, "#777777", "#FFCCFF")
|
||||
tail_type = list(/datum/sprite_accessory/tail/altevian, "#FF9999")
|
||||
@@ -915,9 +915,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
|
||||
if(!back)
|
||||
return //Why do anything
|
||||
|
||||
var/icon/c_mask = tail_style?.clip_mask //TODO: Figure out why the fuck it doesnt work with backpacks. Leaving this in for now, even though for some reason it does nothing.
|
||||
var/icon/c_mask = tail_style?.clip_mask
|
||||
if(c_mask)
|
||||
if(istype(back, /obj/item/weapon/storage/backpack/saddlebag))
|
||||
if(istype(back, /obj/item/weapon/storage/backpack/saddlebag) || istype(back, /obj/item/weapon/storage/backpack/saddlebag_common))
|
||||
c_mask = null
|
||||
|
||||
overlays_standing[BACK_LAYER] = back.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_back_str, default_icon = INV_BACK_DEF_ICON, default_layer = BACK_LAYER, clip_mask = c_mask)
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
/mob
|
||||
var/muffled = FALSE // Used by muffling belly
|
||||
var/forced_psay = FALSE // If true will prevent the user from speaking with normal say/emotes, and instead redirect these to a private speech mode with their predator.
|
||||
|
||||
var/autowhisper = FALSE // Automatically whisper
|
||||
var/autowhisper_mode = null // Mode to use with autowhisper
|
||||
/mob/living
|
||||
var/ooc_notes = null
|
||||
appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER|LONG_GLIDE
|
||||
|
||||
@@ -162,6 +162,8 @@ var/list/channel_to_radio_key = new
|
||||
if(forced_psay)
|
||||
psay(message)
|
||||
return
|
||||
if(autowhisper)
|
||||
whispering = 1
|
||||
//VOREStation Addition End
|
||||
//Parse the mode
|
||||
var/message_mode = parse_message_mode(message, "headset")
|
||||
|
||||
@@ -325,6 +325,48 @@
|
||||
using.alpha = ui_alpha
|
||||
other |= using
|
||||
|
||||
autowhisper_display = new /obj/screen()
|
||||
autowhisper_display.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
autowhisper_display.icon_state = "autowhisper"
|
||||
autowhisper_display.name = "autowhisper"
|
||||
autowhisper_display.screen_loc = "EAST-1:28,CENTER-2:13"
|
||||
hud_elements |= autowhisper_display
|
||||
|
||||
var/obj/screen/aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "aw-select"
|
||||
aw.name = "autowhisper mode"
|
||||
aw.screen_loc = "EAST-1:28,CENTER-2:13"
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "lang"
|
||||
aw.name = "check known languages"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "pose"
|
||||
aw.name = "set pose"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "up"
|
||||
aw.name = "move upwards"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "down"
|
||||
aw.name = "move downwards"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
if(client)
|
||||
client.screen = list()
|
||||
client.screen += hud_elements
|
||||
|
||||
@@ -13,9 +13,13 @@
|
||||
|
||||
switch(a_intent)
|
||||
if(I_HELP)
|
||||
var/mob/living/L = A
|
||||
if(istype(L) && (!has_hands || !L.attempt_to_scoop(src)))
|
||||
custom_emote(1,"[pick(friendly)] \the [A]!")
|
||||
if(isliving(A))
|
||||
var/mob/living/L = A
|
||||
if(istype(L) && (!has_hands || !L.attempt_to_scoop(src)))
|
||||
custom_emote(1,"[pick(friendly)] \the [A]!")
|
||||
if(istype(A,/obj/structure/micro_tunnel)) //Allows simplemobs to click on mouse holes, mice should be allowed to go in mouse holes, and other mobs
|
||||
var/obj/structure/micro_tunnel/t = A //should be allowed to drag the mice out of the mouse holes!
|
||||
t.tunnel_interact(src)
|
||||
|
||||
if(I_HURT)
|
||||
if(can_special_attack(A) && special_attack_target(A))
|
||||
@@ -48,4 +52,4 @@
|
||||
return
|
||||
|
||||
if(projectiletype)
|
||||
shoot_target(A)
|
||||
shoot_target(A)
|
||||
|
||||
@@ -158,7 +158,40 @@
|
||||
healths.screen_loc = ui_health
|
||||
hud_elements |= healths
|
||||
|
||||
autowhisper_display = new /obj/screen()
|
||||
autowhisper_display.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
autowhisper_display.icon_state = "autowhisper"
|
||||
autowhisper_display.name = "autowhisper"
|
||||
autowhisper_display.screen_loc = "EAST-1:28,CENTER-2:13"
|
||||
hud_elements |= autowhisper_display
|
||||
|
||||
var/obj/screen/aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "aw-select"
|
||||
aw.name = "autowhisper mode"
|
||||
aw.screen_loc = "EAST-1:28,CENTER-2:13"
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "lang"
|
||||
aw.name = "check known languages"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "up"
|
||||
aw.name = "move upwards"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
aw = new /obj/screen()
|
||||
aw.icon = 'icons/mob/screen/minimalist.dmi'
|
||||
aw.icon_state = "down"
|
||||
aw.name = "move downwards"
|
||||
aw.screen_loc = ui_under_health
|
||||
hud_elements |= aw
|
||||
|
||||
pain = new /obj/screen( null )
|
||||
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
/mob/living/simple_mob/humanoid/merc/altevian
|
||||
name = "altevian naval officer"
|
||||
desc = "Altevian Naval Slicer, adorned in the top of the line Heartbreaker suit. Armed with a handheld cutter."
|
||||
tt_desc = "E Rattus sapiens"
|
||||
icon = 'icons/mob/altevian_mercs_vr.dmi'
|
||||
icon_state = "merc_melee_cutter"
|
||||
icon_living = "merc_melee_cutter"
|
||||
icon_dead = "merc-dead"
|
||||
icon_gib = "merc_gib"
|
||||
|
||||
faction = "altevian"
|
||||
movement_cooldown = 1
|
||||
|
||||
status_flags = 0
|
||||
|
||||
response_help = "pokes"
|
||||
response_disarm = "shoves"
|
||||
response_harm = "hits"
|
||||
|
||||
harm_intent_damage = 5
|
||||
melee_damage_lower = 30
|
||||
melee_damage_upper = 30
|
||||
attack_armor_pen = 50
|
||||
attack_sharp = TRUE
|
||||
attack_edge = 1
|
||||
attacktext = list("slashed")
|
||||
armor = list(melee = 90, bullet = 90, laser = 90, energy = 90, bomb = 90, bio = 100, rad = 100) //matches stats of suit they drop. Basically tank. Rat tank. Ratank.
|
||||
|
||||
corpse = /obj/effect/landmark/mobcorpse/altevian
|
||||
loot_list = list(/obj/item/weapon/melee/energy/sword/altevian = 100)
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc
|
||||
say_list_type = /datum/say_list/merc/altevian
|
||||
|
||||
/datum/say_list/merc/altevian
|
||||
speak = list("Operations going along as planned.",
|
||||
"No news to report, Mission Control. All is clear.",
|
||||
"Salvage operations still underway, no updates yet, Mission Control.")
|
||||
emote_see = list("squeaks", "flicks their tail", "looks around")
|
||||
|
||||
say_understood = list("Order received.", "Understood, Mission Control.")
|
||||
say_cannot = list("Unable to fulfill that request.", "Sorry... Running into some issues.")
|
||||
say_maybe_target = list("Hey... You can't hide after causing us trouble, mate...", "If you're hiding... You better be hiding well...", "Yeah... You better have left after causing us trouble...")
|
||||
say_got_target = list("Mouse found!", "Hostile being culled!", "Removing unwanted salvage!", "Culling threats!", "Suppressing!")
|
||||
say_threaten = list("This area is marked for salvage by the Hegemony, please vacate the area until we're done!", "Sorry, but we're conducting operations here and civilians are not permitted around here for the time being!", "Please disperse from the area, or we will have to respond in kind.")
|
||||
say_stand_down = list("Thank you for listening! Please have a safe day!", "Carry along, and keep safe.", "You're cleared to depart, thank you for not causing problems.")
|
||||
say_escalate = list("Team, we have mice attempting to steal our salvage!", "We've warned you! Please know this is just us following orders!", "Apologies, but we have to attack due to failing to listen to our order!")
|
||||
|
||||
threaten_sound = 'sound/weapons/TargetOn.ogg'
|
||||
stand_down_sound = 'sound/weapons/TargetOff.ogg'
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/sapper
|
||||
desc = "Altevian Naval Sapper, adorned in the top of the line Heartbreaker suit. Armed with a giant fokken wrench."
|
||||
icon_state = "merc_melee_wrench"
|
||||
icon_living = "merc_melee_wrench"
|
||||
|
||||
melee_damage_lower = 25
|
||||
melee_damage_upper = 25
|
||||
attack_armor_pen = 0
|
||||
attack_sharp = FALSE
|
||||
attack_edge = 0
|
||||
attacktext = list("whacked", "slammed", "bashed", "clonked", "bonked")
|
||||
attack_sound = 'sound/weapons/smash.ogg'
|
||||
|
||||
loot_list = list(/obj/item/weapon/melee/altevian_wrench = 100)
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged
|
||||
desc = "Altevian Naval Salvage Guard, adorned in the top of the line Heartbreaker suit. Armed with a small energy gun."
|
||||
icon_state = "merc_gun_smol"
|
||||
icon_living = "merc_gun_smol"
|
||||
|
||||
|
||||
melee_damage_lower = 15 // Let's just pretend they have tacknife
|
||||
melee_damage_upper = 15
|
||||
attack_armor_pen = 20
|
||||
base_attack_cooldown = 8
|
||||
|
||||
loot_list = list(/obj/item/weapon/gun/energy/altevian = 100)
|
||||
|
||||
needs_reload = TRUE
|
||||
reload_time = 1.5 SECONDS
|
||||
reload_max = 6
|
||||
projectiletype = /obj/item/projectile/beam/meeplaser
|
||||
projectilesound = 'sound/weapons/Laser.ogg'
|
||||
|
||||
ai_holder_type = /datum/ai_holder/simple_mob/merc/ranged
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged/strong
|
||||
desc = "Altevian Naval Salvage Shield, adorned in the top of the line Heartbreaker suit. Armed with a large energy gun."
|
||||
icon_state = "merc_gun_big"
|
||||
icon_living = "merc_gun_big"
|
||||
|
||||
base_attack_cooldown = 8
|
||||
|
||||
loot_list = list(/obj/item/weapon/gun/energy/altevian/large = 100)
|
||||
|
||||
needs_reload = TRUE
|
||||
reload_time = 3 SECONDS
|
||||
reload_max = 12
|
||||
projectiletype = /obj/item/projectile/beam/meeplaser/strong
|
||||
projectilesound = 'sound/weapons/Laser.ogg'
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged/ballistic
|
||||
desc = "Altevian Naval Shipbreaker, adorned in the top of the line Heartbreaker suit. Armed with a bolter gun."
|
||||
icon_state = "merc_gun_ballistic"
|
||||
icon_living = "merc_gun_ballistic"
|
||||
|
||||
base_attack_cooldown = 10
|
||||
|
||||
loot_list = list(/obj/item/weapon/storage/box/altevian_ammo = 100, /obj/item/weapon/gun/projectile/altevian = 100)
|
||||
|
||||
needs_reload = TRUE
|
||||
reload_time = 5 SECONDS
|
||||
reload_max = 5
|
||||
projectiletype = /obj/item/projectile/bullet/sam48
|
||||
projectilesound = 'sound/weapons/Gunshot_heavy.ogg'
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/neutral
|
||||
faction = "neutral"
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/sapper/neutral
|
||||
faction = "neutral"
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged/neutral
|
||||
faction = "neutral"
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged/strong/neutral
|
||||
faction = "neutral"
|
||||
|
||||
/mob/living/simple_mob/humanoid/merc/altevian/ranged/ballistic/neutral
|
||||
faction = "neutral"
|
||||
@@ -31,6 +31,7 @@
|
||||
var/obj/screen/ling/chems/ling_chem_display = null
|
||||
var/obj/screen/wizard/energy/wiz_energy_display = null
|
||||
var/obj/screen/wizard/instability/wiz_instability_display = null
|
||||
var/obj/screen/autowhisper_display = null
|
||||
|
||||
var/datum/plane_holder/plane_holder = null
|
||||
var/list/vis_enabled = null // List of vision planes that should be graphically visible (list of their VIS_ indexes).
|
||||
|
||||
@@ -81,6 +81,12 @@
|
||||
icon_add = 'icons/mob/human_face_vr_add.dmi'
|
||||
icon_state = "hair_twincurl"
|
||||
|
||||
/datum/sprite_accessory/hair/twindrillslong
|
||||
name = "Twin Drills Long"
|
||||
icon = 'icons/mob/human_face_vr.dmi'
|
||||
icon_add = 'icons/mob/human_face_vr_add.dmi'
|
||||
icon_state = "hair_twincurllong"
|
||||
|
||||
/datum/sprite_accessory/hair/crescent_moon
|
||||
name = "Crescent-Moon"
|
||||
icon = 'icons/mob/human_face_vr.dmi'
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
//VOREStation Edit Start
|
||||
if(muffled)
|
||||
return me_verb_subtle(message)
|
||||
if(autowhisper)
|
||||
return me_verb_subtle(message)
|
||||
message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages (within reason)
|
||||
//VOREStation Edit End
|
||||
|
||||
|
||||
@@ -10,13 +10,11 @@
|
||||
if(say_disabled) //This is here to try to identify lag problems
|
||||
to_chat(usr, "Speech is currently admin-disabled.")
|
||||
return
|
||||
//VOREStation Addition Start
|
||||
if(forced_psay)
|
||||
pme(message)
|
||||
return
|
||||
//VOREStation Addition End
|
||||
|
||||
message = sanitize_or_reflect(message,src) //VOREStation Edit - Reflect too-long messages (within reason)
|
||||
message = sanitize_or_reflect(message,src) // Reflect too-long messages (within reason)
|
||||
if(!message)
|
||||
return
|
||||
|
||||
@@ -26,7 +24,29 @@
|
||||
else
|
||||
usr.emote_vr(message)
|
||||
|
||||
/mob/proc/custom_emote_vr(var/m_type=1,var/message = null) //This would normally go in emote.dm
|
||||
/mob/verb/me_verb_subtle_custom(message as message) // Literally same as above but with mode_selection set to true
|
||||
set name = "Subtle (Custom)"
|
||||
set category = "IC"
|
||||
set desc = "Emote to nearby people, with ability to choose which specific portion of people you wish to target."
|
||||
|
||||
if(say_disabled) //This is here to try to identify lag problems
|
||||
to_chat(usr, "Speech is currently admin-disabled.")
|
||||
return
|
||||
if(forced_psay)
|
||||
pme(message)
|
||||
return
|
||||
|
||||
message = sanitize_or_reflect(message,src) // Reflect too-long messages (within reason)
|
||||
if(!message)
|
||||
return
|
||||
|
||||
set_typing_indicator(FALSE)
|
||||
if(use_me)
|
||||
usr.emote_vr("me",4,message,TRUE)
|
||||
else
|
||||
usr.emote_vr(message)
|
||||
|
||||
/mob/proc/custom_emote_vr(var/m_type=1,var/message = null,var/mode_selection = FALSE) //This would normally go in emote.dm
|
||||
if(stat || !use_me && usr == src)
|
||||
to_chat(src, "You are unable to emote.")
|
||||
return
|
||||
@@ -40,6 +60,20 @@
|
||||
var/muzzled = is_muzzled()
|
||||
if(m_type == 2 && muzzled) return
|
||||
|
||||
var/subtle_mode
|
||||
if(autowhisper && autowhisper_mode && !mode_selection)
|
||||
if(autowhisper_mode != "Psay/Pme") //This isn't actually a custom subtle mode, so we shouldn't use it!
|
||||
subtle_mode = autowhisper_mode
|
||||
if(mode_selection && !subtle_mode)
|
||||
subtle_mode = tgui_input_list(src, "Select Custom Subtle Mode", "Custom Subtle Mode", list("Adjacent Turfs (Default)", "My Turf", "My Table", "Current Belly (Prey)", "Specific Belly (Pred)", "Specific Person"))
|
||||
if(!subtle_mode)
|
||||
if(mode_selection)
|
||||
if(message)
|
||||
to_chat(src, "<span class='warning'>Subtle mode not selected. Your input has not been sent, but preserved:</span> [message]")
|
||||
return
|
||||
else
|
||||
subtle_mode = "Adjacent Turfs (Default)"
|
||||
|
||||
var/input
|
||||
if(!message)
|
||||
input = sanitize_or_reflect(tgui_input_text(src,"Choose an emote to display."), src)
|
||||
@@ -49,6 +83,8 @@
|
||||
if(input)
|
||||
log_subtle(message,src)
|
||||
message = "<span class='emote_subtle'><B>[src]</B> <I>[input]</I></span>"
|
||||
if(!(subtle_mode == "Adjacent Turfs (Default)"))
|
||||
message = "<B>(T) </B>" + message
|
||||
else
|
||||
return
|
||||
|
||||
@@ -56,9 +92,110 @@
|
||||
var/undisplayed_message = "<span class='emote'><B>[src]</B> <I>does something too subtle for you to see.</I></span>"
|
||||
message = encode_html_emphasis(message)
|
||||
|
||||
var/list/vis = get_mobs_and_objs_in_view_fast(get_turf(src),1,2) //Turf, Range, and type 2 is emote
|
||||
var/list/vis_mobs = vis["mobs"]
|
||||
var/list/vis_objs = vis["objs"]
|
||||
var/list/vis
|
||||
var/list/vis_mobs
|
||||
var/list/vis_objs
|
||||
|
||||
switch(subtle_mode)
|
||||
if("Adjacent Turfs (Default)")
|
||||
vis = get_mobs_and_objs_in_view_fast(get_turf(src),1,2)
|
||||
vis_mobs = vis["mobs"]
|
||||
vis_objs = vis["objs"]
|
||||
if("My Turf")
|
||||
vis = get_mobs_and_objs_in_view_fast(get_turf(src),0,2)
|
||||
vis_mobs = vis["mobs"]
|
||||
vis_objs = vis["objs"]
|
||||
if("My Table")
|
||||
vis = get_mobs_and_objs_in_view_fast(get_turf(src),7,2)
|
||||
vis_mobs = vis["mobs"]
|
||||
vis_objs = vis["objs"]
|
||||
var/list/tablelist = list()
|
||||
var/list/newmoblist = list()
|
||||
var/list/newobjlist = list()
|
||||
for(var/obj/structure/table/T in range(src, 1))
|
||||
if(istype(T) && !(T in tablelist) && !istype(T, /obj/structure/table/rack) && !istype(T, /obj/structure/table/bench))
|
||||
tablelist |= T.get_all_connected_tables()
|
||||
if(!(tablelist.len))
|
||||
to_chat(src, "<span class='warning'>No nearby tables detected. Your input has not been sent, but preserved:</span> [input]")
|
||||
return
|
||||
for(var/obj/structure/table/T in tablelist)
|
||||
for(var/mob/M in vis_mobs)
|
||||
var/dist = get_dist(T, M)
|
||||
if(dist >= 0 && dist <= 1)
|
||||
newmoblist |= M
|
||||
for(var/obj/O in vis_objs)
|
||||
var/dist = get_dist(T, O)
|
||||
if(dist >= 0 && dist <= 1)
|
||||
newobjlist |= O
|
||||
vis_mobs = newmoblist
|
||||
vis_objs = newobjlist
|
||||
if("Current Belly (Prey)")
|
||||
var/obj/belly/B = get_belly(src)
|
||||
if(!istype(B))
|
||||
to_chat(src, "<span class='warning'>You are currently not in the belly. Your input has not been sent, but preserved:</span> [input]")
|
||||
return
|
||||
vis = get_mobs_and_objs_in_view_fast(get_turf(src),0,2)
|
||||
vis_mobs = vis["mobs"]
|
||||
vis_objs = vis["objs"]
|
||||
for(var/mob/M in vis_mobs) // Clean out everyone NOT in our specific belly
|
||||
if(M == B.owner)
|
||||
continue
|
||||
var/obj/belly/BB = get_belly(M)
|
||||
if(!(istype(BB)) || !(BB == B))
|
||||
vis_mobs -= M
|
||||
for(var/mob/M in vis_mobs) // Re-add anything in bellies of people in our belly
|
||||
if(M == B.owner)
|
||||
continue
|
||||
vis_mobs |= get_all_prey_recursive(M, TRUE)
|
||||
for(var/obj/O in vis_objs) // Clean out everyone NOT in our specific belly but for objs. No re-adding will happen there. Just don't be that deep and youre an obj anyway.
|
||||
var/obj/belly/BB = get_belly(O)
|
||||
if(!(istype(BB)) || !(BB == B))
|
||||
vis_objs -= O
|
||||
if("Specific Belly (Pred)")
|
||||
if(!isliving(src))
|
||||
to_chat(src, "<span class='warning'>You do not appear to be a living mob capable of having bellies. Your input has not been sent, but preserved:</span> [input]")
|
||||
return
|
||||
var/mob/living/L = src
|
||||
if(!(L.vore_organs) || !(L.vore_organs.len))
|
||||
to_chat(src, "<span class='warning'>You do not have any bellies. Your input has not been sent, but preserved:</span> [input]")
|
||||
return
|
||||
var/obj/belly/B = tgui_input_list(src, "Which belly do you want to sent the subtle to?","Select Belly", L.vore_organs)
|
||||
if(!B || !istype(B))
|
||||
to_chat(src, "<span class='warning'>You have not selected a valid belly. Your input has not been sent, but preserved:</span> [input]")
|
||||
return
|
||||
vis = get_mobs_and_objs_in_view_fast(get_turf(src),0,2)
|
||||
vis_mobs = vis["mobs"]
|
||||
vis_objs = vis["objs"]
|
||||
for(var/mob/M in vis_mobs) // Clean out everyone NOT in our specific belly
|
||||
if(M == B.owner)
|
||||
continue
|
||||
var/obj/belly/BB = get_belly(M)
|
||||
if(!(istype(BB)) || !(BB == B))
|
||||
vis_mobs -= M
|
||||
for(var/mob/M in vis_mobs) // Re-add anything in bellies of people in our belly
|
||||
if(M == B.owner)
|
||||
continue
|
||||
vis_mobs |= get_all_prey_recursive(M, TRUE)
|
||||
for(var/obj/O in vis_objs) // Clean out everyone NOT in our specific belly but for objs. No re-adding will happen there. Just don't be that deep and youre an obj anyway.
|
||||
var/obj/belly/BB = get_belly(O)
|
||||
if(!(istype(BB)) || !(BB == B))
|
||||
vis_objs -= O
|
||||
if("Specific Person")
|
||||
vis = get_mobs_and_objs_in_view_fast(get_turf(src),1,2)
|
||||
vis_mobs = vis["mobs"]
|
||||
vis_objs = list()
|
||||
vis_mobs -= src
|
||||
for(var/mob/M in vis_mobs) // ghosts get ye gone
|
||||
if(isobserver(M) || (M.stat == DEAD))
|
||||
vis_mobs -= M
|
||||
if(!(vis_mobs.len))
|
||||
to_chat(src, "<span class='warning'>No valid targets found. Your input has not been sent, but preserved:</span> [input]")
|
||||
return
|
||||
var/target = tgui_input_list(src, "Who do we send our message to?","Select Target", vis_mobs)
|
||||
if(!(target))
|
||||
to_chat(src, "<span class='warning'>No target selected. Your input has not been sent, but preserved:</span> [input]")
|
||||
return
|
||||
vis_mobs = list(target, src)
|
||||
|
||||
for(var/mob/M as anything in vis_mobs)
|
||||
if(isnewplayer(M))
|
||||
@@ -76,9 +213,9 @@
|
||||
spawn(0)
|
||||
O.see_emote(src, message, 2)
|
||||
|
||||
/mob/proc/emote_vr(var/act, var/type, var/message) //This would normally go in say.dm
|
||||
/mob/proc/emote_vr(var/act, var/type, var/message, var/mode_selection) //This would normally go in say.dm
|
||||
if(act == "me")
|
||||
return custom_emote_vr(type, message)
|
||||
return custom_emote_vr(type, message, mode_selection)
|
||||
|
||||
#define MAX_HUGE_MESSAGE_LEN 8192
|
||||
#define POST_DELIMITER_STR "\<\>"
|
||||
|
||||
@@ -417,6 +417,27 @@ var/list/table_icon_cache = list()
|
||||
if(carpeted)
|
||||
add_overlay("carpet_flip[type]")
|
||||
|
||||
/obj/structure/table/proc/get_all_connected_tables(var/list/connections)
|
||||
if(!connections)
|
||||
connections = list(src)
|
||||
else
|
||||
connections |= src
|
||||
if(istype(src, /obj/structure/table/rack))
|
||||
return connections
|
||||
|
||||
for(var/direction in cardinal)
|
||||
var/turf/T = get_step(src, direction)
|
||||
if(T)
|
||||
var/obj/structure/table/nextT = locate(/obj/structure/table) in T
|
||||
if(!nextT || !istype(nextT))
|
||||
continue
|
||||
if(istype(nextT, /obj/structure/table/rack) || (istype(nextT, /obj/structure/table/bench) && !istype(src, /obj/structure/table/bench)) || (!istype(nextT, /obj/structure/table/bench) && istype(src, /obj/structure/table/bench)))
|
||||
continue
|
||||
if(!(nextT in connections))
|
||||
connections |= nextT.get_all_connected_tables(connections)
|
||||
|
||||
return connections
|
||||
|
||||
|
||||
#define CORNER_NONE 0
|
||||
#define CORNER_COUNTERCLOCKWISE 1
|
||||
|
||||
@@ -2685,6 +2685,14 @@ Departamental Swimsuits, for general use
|
||||
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
||||
item_state = "dessabow_mob"
|
||||
|
||||
/obj/item/clothing/head/fluff/giantbow/dessa/attack_hand(mob/user)
|
||||
|
||||
if(user.real_name == "Dessa Ton")
|
||||
item_state = "dessabow_mob"
|
||||
else
|
||||
item_state = "giantbow_mob"
|
||||
..()
|
||||
|
||||
/obj/item/clothing/head/fluff/giantbow //Public version
|
||||
name = "Giant Bow"
|
||||
desc = "It's a huge bow! So pretty!"
|
||||
@@ -2695,3 +2703,16 @@ Departamental Swimsuits, for general use
|
||||
|
||||
icon_override = 'icons/vore/custom_clothes_vr.dmi'
|
||||
item_state = "giantbow_mob"
|
||||
|
||||
//Halored: Mercury
|
||||
|
||||
/obj/item/clothing/gloves/ring/material/void_opal/fluff/mercury
|
||||
name = "Mercury's Mate Ring"
|
||||
desc = "A band of void opal, given to Mercury by Lumen"
|
||||
|
||||
//satinisle: Parriz Tavakdavi
|
||||
|
||||
/obj/item/clothing/suit/storage/toggle/labcoat/fluff/parrizjacket
|
||||
name = "pink crop bomber"
|
||||
desc = "A pink crop bomber jacket that is just barely able to zip up at the front. It has a small Virgo Orbital Research Establishment patch on each shoulder."
|
||||
icon_state = "parriz_jacket"
|
||||
|
||||
@@ -6,6 +6,7 @@ alphaprime1 - Protean
|
||||
amarewolf - Xenochimera
|
||||
amshaegaar - Vox
|
||||
arandomalien - Xenochimera
|
||||
arminazenith - Protean
|
||||
arokha - Protean
|
||||
aruis - Diona
|
||||
aruis - Protean
|
||||
|
||||
|
Before Width: | Height: | Size: 238 KiB After Width: | Height: | Size: 237 KiB |
|
Before Width: | Height: | Size: 693 KiB After Width: | Height: | Size: 691 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
|
Before Width: | Height: | Size: 44 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 108 KiB After Width: | Height: | Size: 108 KiB |
|
Before Width: | Height: | Size: 30 KiB After Width: | Height: | Size: 30 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 21 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 42 KiB |
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
@@ -48,10 +48,10 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Aurora Caelus", /datum/event/aurora_caelus, 2, list(), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50, min_jobs = list(ASSIGNMENT_ENGINEER = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lone Spacefish", /datum/event/spacefish_migration, 0, list(ASSIGNMENT_SECURITY = 15), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Stray Ray", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Stray Shark", /datum/event/shark_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Gnat Mob", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Gnat Cloud", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
))
|
||||
|
||||
/datum/event_container/moderate/New()
|
||||
@@ -76,17 +76,18 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_wave, 30, list(ASSIGNMENT_ENGINEER = 20)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 50, list(ASSIGNMENT_MEDICAL = 50), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Random Antagonist", /datum/event/random_antag, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Random Antagonist", /datum/event/random_antag, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Solar Storm", /datum/event/solar_storm, 30, list(ASSIGNMENT_ENGINEER = 40, ASSIGNMENT_SECURITY = 30), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gravity Failure", /datum/event/gravity, 75, list(ASSIGNMENT_ENGINEER = 60), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 1, 0, 50, min_jobs = list(ASSIGNMENT_ENGINEER = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 30), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 0, list(ASSIGNMENT_SECURITY = 20), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Stray Rays", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Shark Pack", /datum/event/shark_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gnat Swarm", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spacefish Migration", /datum/event/spacefish_migration, 0, list(ASSIGNMENT_SECURITY = 40, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 25, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gliding Rays", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Shark Pack", /datum/event/shark_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gnat Swarm", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
))
|
||||
|
||||
/datum/event_container/major/New()
|
||||
@@ -94,7 +95,7 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 3600),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Atmos Leak", /datum/event/atmos_leak, 20, list(ASSIGNMENT_ENGINEER = 25), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 10, list(ASSIGNMENT_ENGINEER = 3, ASSIGNMENT_GARDENER = 3, ASSIGNMENT_SCIENTIST = 3), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station, 0, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_MEDICAL = 5, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_SCIENTIST = 5), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station, 0, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_MEDICAL = 5, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_SCIENTIST = 5), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Amassing Wildlife", /datum/event/roaming_wildlife, 0, list(ASSIGNMENT_SECURITY = 10, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
)
|
||||
add_disabled_events(list(
|
||||
@@ -102,11 +103,12 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 10, list(ASSIGNMENT_ENGINEER = 60), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 30, list(ASSIGNMENT_ENGINEER = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Spacefish Swarm", /datum/event/spacefish_migration, 10, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Stray Rays", /datum/event/ray_migration, 20, list(ASSIGNMENT_SECURITY = 20, ASSIGNMENT_MEDICAL = 5), min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Shark Pack", /datum/event/shark_migration, 20, list(ASSIGNMENT_SECURITY = 20, ASSIGNMENT_MEDICAL = 5), min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Gnat Swarm", /datum/event/gnat_migration, 20, list(ASSIGNMENT_SECURITY = 20, ASSIGNMENT_MEDICAL = 5), min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Gliding Rays", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Shark Pack", /datum/event/shark_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Gnat Swarm", /datum/event/gnat_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
))
|
||||
|
||||
#undef ASSIGNMENT_ANY
|
||||
|
||||
@@ -36,9 +36,7 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Canister Leak", /datum/event/canister_leak, 10, list(ASSIGNMENT_ENGINEER = 20), min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50, min_jobs = list(ASSIGNMENT_ENGINEER = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Stray Ray", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Gnat Cloud", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lone Spacefish", /datum/event/spacefish_migration, 0, list(ASSIGNMENT_SECURITY = 15), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 0, list(ASSIGNMENT_ANY = 4), 1, 10, 25),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Shipping Error", /datum/event/shipping_error , 30, list(ASSIGNMENT_ANY = 2), 0),
|
||||
@@ -53,6 +51,9 @@
|
||||
add_disabled_events(list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Ian Storm", /datum/event/ianstorm, 1, list(), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Stray Ray", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Gnat Cloud", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
))
|
||||
|
||||
/datum/event_container/moderate/New()
|
||||
@@ -60,7 +61,7 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1600),
|
||||
// Leaks gas into an unoccupied room.
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Atmos Leak", /datum/event/atmos_leak, 30, list(ASSIGNMENT_ENGINEER = 25), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 30), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spacefish Migration", /datum/event/spacefish_migration, 0, list(ASSIGNMENT_SECURITY = 40, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
// Just disables comms for a short while.
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(), 1),
|
||||
// Just blows out a few lights
|
||||
@@ -85,10 +86,6 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 40, list(ASSIGNMENT_SCIENTIST = 40), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(ASSIGNMENT_ANY = 5), 0),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 100, list(ASSIGNMENT_ANY = 5), 0),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gliding Rays", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Shark Pack", /datum/event/shark_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gnat Swarm", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
)
|
||||
add_disabled_events(list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 30), 1),
|
||||
@@ -97,6 +94,11 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 50, list(ASSIGNMENT_MEDICAL = 50), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Random Antagonist", /datum/event/random_antag, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 25, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gliding Rays", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Shark Pack", /datum/event/shark_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gnat Swarm", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
))
|
||||
|
||||
/datum/event_container/major/New()
|
||||
@@ -104,18 +106,19 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 3600),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Atmos Leak", /datum/event/atmos_leak, 20, list(ASSIGNMENT_ENGINEER = 25), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 10, list(ASSIGNMENT_ENGINEER = 3, ASSIGNMENT_GARDENER = 3, ASSIGNMENT_SCIENTIST = 3), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Spacefish Swarm", /datum/event/spacefish_migration, 10, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station, 0, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_MEDICAL = 5, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_SCIENTIST = 5), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Gliding Rays", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Shark Pack", /datum/event/shark_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Gnat Swarm", /datum/event/gnat_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
)
|
||||
add_disabled_events(list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Strike", /datum/event/meteor_strike, 10, list(ASSIGNMENT_ENGINEER = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 10, list(ASSIGNMENT_ENGINEER = 60), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 30, list(ASSIGNMENT_ENGINEER = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Gliding Rays", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Shark Pack", /datum/event/shark_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Gnat Swarm", /datum/event/gnat_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
))
|
||||
|
||||
#undef ASSIGNMENT_ANY
|
||||
|
||||
@@ -36,9 +36,7 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Canister Leak", /datum/event/canister_leak, 10, list(ASSIGNMENT_ENGINEER = 20), min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Space Dust", /datum/event/dust, 0, list(ASSIGNMENT_ENGINEER = 20), 0, 0, 50, min_jobs = list(ASSIGNMENT_ENGINEER = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Economic News", /datum/event/economic_event, 300),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Stray Ray", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Gnat Cloud", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lone Spacefish", /datum/event/spacefish_migration, 0, list(ASSIGNMENT_SECURITY = 15), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Hacker", /datum/event/money_hacker, 0, list(ASSIGNMENT_ANY = 4), 1, 10, 25),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Money Lotto", /datum/event/money_lotto, 0, list(ASSIGNMENT_ANY = 1), 1, 5, 15),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Shipping Error", /datum/event/shipping_error , 30, list(ASSIGNMENT_ANY = 2), 0),
|
||||
@@ -53,6 +51,9 @@
|
||||
add_disabled_events(list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Ian Storm", /datum/event/ianstorm, 1, list(), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Stray Ray", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Gnat Cloud", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
))
|
||||
|
||||
/datum/event_container/moderate/New()
|
||||
@@ -60,7 +61,7 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1600),
|
||||
// Leaks gas into an unoccupied room.
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Atmos Leak", /datum/event/atmos_leak, 30, list(ASSIGNMENT_ENGINEER = 25), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 30), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spacefish Migration", /datum/event/spacefish_migration, 0, list(ASSIGNMENT_SECURITY = 40, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
// Just disables comms for a short while.
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(), 1),
|
||||
// Just blows out a few lights
|
||||
@@ -85,10 +86,6 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Drone Pod Drop", /datum/event/drone_pod_drop, 40, list(ASSIGNMENT_SCIENTIST = 40), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Morph Spawn", /datum/event/morph_spawn, 75, list(ASSIGNMENT_ANY = 5), 0),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Maintenance Predator", /datum/event/maintenance_predator, 100, list(ASSIGNMENT_ANY = 5), 0),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gliding Rays", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Shark Pack", /datum/event/shark_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gnat Swarm", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
)
|
||||
add_disabled_events(list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 30), 1),
|
||||
@@ -97,6 +94,11 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 50, list(ASSIGNMENT_MEDICAL = 50), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Random Antagonist", /datum/event/random_antag, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 0, list(ASSIGNMENT_SECURITY = 25, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gliding Rays", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Shark Pack", /datum/event/shark_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Gnat Swarm", /datum/event/gnat_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
))
|
||||
|
||||
/datum/event_container/major/New()
|
||||
@@ -104,18 +106,19 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 3600),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Atmos Leak", /datum/event/atmos_leak, 20, list(ASSIGNMENT_ENGINEER = 25), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 10, list(ASSIGNMENT_ENGINEER = 3, ASSIGNMENT_GARDENER = 3, ASSIGNMENT_SCIENTIST = 3), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Spacefish Swarm", /datum/event/spacefish_migration, 10, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Containment Breach", /datum/event/prison_break/station, 0, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_MEDICAL = 5, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_SCIENTIST = 5), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Gliding Rays", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Shark Pack", /datum/event/shark_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Gnat Swarm", /datum/event/gnat_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Strike", /datum/event/meteor_strike, 10, list(ASSIGNMENT_ENGINEER = 15), 1),
|
||||
)
|
||||
add_disabled_events(list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, 10, list(ASSIGNMENT_ENGINEER = 60), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 30, list(ASSIGNMENT_ENGINEER = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, 10, list(ASSIGNMENT_SECURITY = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 2)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Gliding Rays", /datum/event/ray_migration, 0, list(ASSIGNMENT_SECURITY = 15, ASSIGNMENT_MEDICAL = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Shark Pack", /datum/event/shark_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Gnat Swarm", /datum/event/gnat_migration, 5, list(ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
))
|
||||
|
||||
#undef ASSIGNMENT_ANY
|
||||
|
||||
@@ -1158,6 +1158,8 @@ const WeatherTab = (props, context) => {
|
||||
|
||||
const { aircontents, weather } = data;
|
||||
|
||||
let deg = '\u00B0';
|
||||
|
||||
return (
|
||||
<Section title="Weather">
|
||||
<Section title="Current Conditions">
|
||||
@@ -1195,8 +1197,8 @@ const WeatherTab = (props, context) => {
|
||||
{toTitleCase(wr.Weather)}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Temperature">
|
||||
Current: {wr.Temperature.toFixed()}°C | High:{' '}
|
||||
{wr.High.toFixed()}°C | Low: {wr.Low.toFixed()}°C
|
||||
Current: {wr.Temperature.toFixed()} {deg}C | High:{' '}
|
||||
{wr.High.toFixed()} {deg}C | Low: {wr.Low.toFixed()} {deg}C
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Wind Direction">
|
||||
{wr.WindDir}
|
||||
|
||||
@@ -64,7 +64,7 @@ export const pda_medical = (props, context) => {
|
||||
{medical.cdi_d}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Important Notes" preserveWhitespace>
|
||||
{medical.notes}
|
||||
<Box preserveWhitespace>{medical.notes}</Box>
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
)) || <Box color="bad">Medical record lost!</Box>}
|
||||
|
||||
@@ -51,8 +51,10 @@ export const pda_security = (props, context) => {
|
||||
<LabeledList.Item label="Details">
|
||||
{security.ma_crim_d}
|
||||
</LabeledList.Item>
|
||||
<LabeledList.Item label="Important Notes:" preserveWhitespace>
|
||||
{security.notes || 'No data found.'}
|
||||
<LabeledList.Item label="Important Notes:">
|
||||
<Box preserveWhitespace>
|
||||
{security.notes || 'No data found.'}
|
||||
</Box>
|
||||
</LabeledList.Item>
|
||||
</LabeledList>
|
||||
)) || <Box color="bad">Security record lost!</Box>}
|
||||
|
||||
@@ -9898,9 +9898,9 @@ __metadata:
|
||||
linkType: hard
|
||||
|
||||
"word-wrap@npm:^1.2.3, word-wrap@npm:~1.2.3":
|
||||
version: 1.2.3
|
||||
resolution: "word-wrap@npm:1.2.3"
|
||||
checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f
|
||||
version: 1.2.4
|
||||
resolution: "word-wrap@npm:1.2.4"
|
||||
checksum: 8f1f2e0a397c0e074ca225ba9f67baa23f99293bc064e31355d426ae91b8b3f6b5f6c1fc9ae5e9141178bb362d563f55e62fd8d5c31f2a77e3ade56cb3e35bd1
|
||||
languageName: node
|
||||
linkType: hard
|
||||
|
||||
|
||||
@@ -2280,6 +2280,7 @@
|
||||
#include "code\modules\events\shipping_error.dm"
|
||||
#include "code\modules\events\solar_storm.dm"
|
||||
#include "code\modules\events\space_ninja.dm"
|
||||
#include "code\modules\events\spacefish_migration.dm"
|
||||
#include "code\modules\events\spacevine.dm"
|
||||
#include "code\modules\events\spider_infestation.dm"
|
||||
#include "code\modules\events\spontaneous_appendicitis.dm"
|
||||
@@ -2715,6 +2716,7 @@
|
||||
#include "code\modules\mining\ore_redemption_machine\mine_point_items.dm"
|
||||
#include "code\modules\mining\ore_redemption_machine\survey_vendor.dm"
|
||||
#include "code\modules\mob\animations.dm"
|
||||
#include "code\modules\mob\autowhisper.dm"
|
||||
#include "code\modules\mob\death.dm"
|
||||
#include "code\modules\mob\emote.dm"
|
||||
#include "code\modules\mob\gender.dm"
|
||||
@@ -3142,6 +3144,7 @@
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\pirates.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\russian.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs_altevian.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\humanoid\mercs\mercs_vr.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\illusion\illusion.dm"
|
||||
#include "code\modules\mob\living\simple_mob\subtypes\mechanical\corrupt_maint_drone_vr.dm"
|
||||
@@ -4227,13 +4230,13 @@
|
||||
#include "maps\expedition_vr\beach\submaps\mountains.dm"
|
||||
#include "maps\expedition_vr\beach\submaps\mountains_areas.dm"
|
||||
#include "maps\gateway_archive_vr\blackmarketpackers.dm"
|
||||
#include "maps\groundbase\groundbase.dm"
|
||||
#include "maps\southern_cross\items\clothing\sc_accessory.dm"
|
||||
#include "maps\southern_cross\items\clothing\sc_suit.dm"
|
||||
#include "maps\southern_cross\items\clothing\sc_under.dm"
|
||||
#include "maps\southern_cross\loadout\loadout_suit.dm"
|
||||
#include "maps\southern_cross\loadout\loadout_uniform.dm"
|
||||
#include "maps\southern_cross\loadout\loadout_vr.dm"
|
||||
#include "maps\stellar_delight\stellar_delight.dm"
|
||||
#include "maps\submaps\_helpers.dm"
|
||||
#include "maps\submaps\_readme.dm"
|
||||
#include "maps\submaps\engine_submaps\engine.dm"
|
||||
|
||||