diff --git a/.travis.yml b/.travis.yml
index d4f99ea0e7e..7ccee0f611a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,6 +11,7 @@ env:
- USE_MAP=aurora
- USE_MAP=runtime
- USE_MAP=exodus
+ - USE_MAP=runtime BYOND_MAJOR="512" BYOND_MINOR="1401"
cache:
directories:
diff --git a/code/ATMOSPHERICS/components/omni_devices/filter.dm b/code/ATMOSPHERICS/components/omni_devices/filter.dm
index 01951a8be74..fd88eb8385c 100644
--- a/code/ATMOSPHERICS/components/omni_devices/filter.dm
+++ b/code/ATMOSPHERICS/components/omni_devices/filter.dm
@@ -6,7 +6,7 @@
icon_state = "map_filter"
base_icon = "filter"
- var/list/filters = new()
+ var/list/active_filters = new()
var/datum/omni_port/input
var/datum/omni_port/output
@@ -28,7 +28,7 @@
/obj/machinery/atmospherics/omni/filter/Destroy()
input = null
output = null
- filters.Cut()
+ active_filters.Cut()
return ..()
/obj/machinery/atmospherics/omni/filter/sort_ports()
@@ -38,8 +38,8 @@
output = null
if(input == P)
input = null
- if(filters.Find(P))
- filters -= P
+ if(active_filters.Find(P))
+ active_filters -= P
P.air.volume = 200
switch(P.mode)
@@ -48,12 +48,12 @@
if(ATM_OUTPUT)
output = P
if(ATM_O2 to ATM_N2O)
- filters += P
+ active_filters += P
/obj/machinery/atmospherics/omni/filter/error_check()
- if(!input || !output || !filters)
+ if(!input || !output || !active_filters)
return 1
- if(filters.len < 1) //requires at least 1 filter ~otherwise why are you using a filter?
+ if(active_filters.len < 1) //requires at least 1 filter ~otherwise why are you using a filter?
return 1
return 0
@@ -80,7 +80,7 @@
input.network.update = 1
if(output.network)
output.network.update = 1
- for(var/datum/omni_port/P in filters)
+ for(var/datum/omni_port/P in active_filters)
if(P.network)
P.network.update = 1
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index a77a76f67b7..78190314f96 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -220,6 +220,9 @@ var/list/gamemode_cache = list()
var/client_error_message = ""
var/client_warn_version = 0
var/client_warn_message = ""
+#if DM_VERSION > 511
+ var/list/client_blacklist_version = list()
+#endif
//Mark-up enabling
var/allow_chat_markup = 0
@@ -764,6 +767,11 @@ var/list/gamemode_cache = list()
if("client_warn_message")
config.client_warn_message = value
+#if DM_VERSION > 511
+ if("client_blacklist_version")
+ config.client_blacklist_version = splittext(value, ";")
+#endif
+
if("allow_chat_markup")
config.allow_chat_markup = 1
@@ -836,7 +844,7 @@ var/list/gamemode_cache = list()
if ("explosion_z_threshold")
iterative_explosives_z_threshold = text2num(value)
-
+
if ("explosion_z_mult")
iterative_explosives_z_multiplier = text2num(value)
diff --git a/code/datums/uplink/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm
index bdbc9d5f1d4..6817b7464bb 100644
--- a/code/datums/uplink/uplink_categories.dm
+++ b/code/datums/uplink/uplink_categories.dm
@@ -17,7 +17,7 @@
if(item.can_view(U))
return 1
- if(!antag_roles.len)
+ if(!LAZYLEN(antag_roles))
return 1
return 0
diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm
index 81f782eb695..89058dbee8b 100644
--- a/code/game/machinery/doors/brigdoors.dm
+++ b/code/game/machinery/doors/brigdoors.dm
@@ -38,8 +38,11 @@
var/datum/browser/menu = new( null, "brig_timer", "Brig Timer", 400, 300 )
/obj/machinery/door_timer/Initialize()
- . = ..()
+ ..()
+ return INITIALIZE_HINT_LATELOAD
+
+/obj/machinery/door_timer/LateInitialize()
for(var/obj/machinery/door/window/brigdoor/M in SSmachinery.all_machines)
if (M.id == src.id)
targets += M
diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm
index 12c4628964c..8cafa442855 100644
--- a/code/game/mecha/combat/combat.dm
+++ b/code/game/mecha/combat/combat.dm
@@ -252,13 +252,13 @@
/obj/mecha/combat/Topic(href,href_list)
..()
- var/datum/topic_input/filter = new (href,href_list)
- if(filter.get("close"))
+ var/datum/topic_input/old_filter = new (href,href_list)
+ if(old_filter.get("close"))
am = null
return
/*
- if(filter.get("saminput"))
- if(md5(filter.get("saminput")) == am)
+ if(old_filter.get("saminput"))
+ if(md5(old_filter.get("saminput")) == am)
occupant_message("From the lies of the Antipath, Circuit preserve us.")
am = null
return
diff --git a/code/game/mecha/equipment/tools/medical_tools.dm b/code/game/mecha/equipment/tools/medical_tools.dm
index 2d730a78a92..86df1feb459 100644
--- a/code/game/mecha/equipment/tools/medical_tools.dm
+++ b/code/game/mecha/equipment/tools/medical_tools.dm
@@ -89,15 +89,15 @@
/obj/item/mecha_parts/mecha_equipment/tool/sleeper/Topic(href,href_list)
..()
- var/datum/topic_input/filter = new /datum/topic_input(href,href_list)
- if(filter.get("eject"))
+ var/datum/topic_input/old_filter = new /datum/topic_input(href,href_list)
+ if(old_filter.get("eject"))
go_out()
- if(filter.get("view_stats"))
+ if(old_filter.get("view_stats"))
chassis.occupant << browse(get_occupant_stats(),"window=msleeper")
onclose(chassis.occupant, "msleeper")
return
- if(filter.get("inject"))
- inject_reagent(filter.getType("inject",/datum/reagent),filter.getObj("source"))
+ if(old_filter.get("inject"))
+ inject_reagent(old_filter.getType("inject",/datum/reagent),old_filter.getObj("source"))
return
/obj/item/mecha_parts/mecha_equipment/tool/sleeper/proc/get_occupant_stats()
@@ -322,19 +322,19 @@
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun/Topic(href,href_list)
..()
- var/datum/topic_input/filter = new (href,href_list)
- if(filter.get("toggle_mode"))
+ var/datum/topic_input/old_filter = new (href,href_list)
+ if(old_filter.get("toggle_mode"))
mode = !mode
update_equip_info()
return
- if(filter.get("select_reagents"))
+ if(old_filter.get("select_reagents"))
processed_reagents.len = 0
var/m = 0
var/message
for(var/i=1 to known_reagents.len)
if(m>=synth_speed)
break
- var/reagent = filter.get("reagent_[i]")
+ var/reagent = old_filter.get("reagent_[i]")
if(reagent && (reagent in known_reagents))
message = "[m ? ", " : null][known_reagents[reagent]]"
processed_reagents += reagent
@@ -346,14 +346,14 @@
occupant_message("Reagent processing started.")
log_message("Reagent processing started.")
return
- if(filter.get("show_reagents"))
+ if(old_filter.get("show_reagents"))
chassis.occupant << browse(get_reagents_page(),"window=msyringegun")
- if(filter.get("purge_reagent"))
- var/reagent = filter.get("purge_reagent")
+ if(old_filter.get("purge_reagent"))
+ var/reagent = old_filter.get("purge_reagent")
if(reagent)
reagents.del_reagent(reagent)
return
- if(filter.get("purge_all"))
+ if(old_filter.get("purge_all"))
reagents.clear_reagents()
return
return
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 9dd42cc7f44..ccf34303b5d 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -1582,10 +1582,10 @@
return
if(usr.stat > 0)
return
- var/datum/topic_input/filter = new /datum/topic_input(href,href_list)
+ var/datum/topic_input/old_filter = new /datum/topic_input(href,href_list)
if(href_list["select_equip"])
if(usr != src.occupant) return
- var/obj/item/mecha_parts/mecha_equipment/equip = filter.getObj("select_equip")
+ var/obj/item/mecha_parts/mecha_equipment/equip = old_filter.getObj("select_equip")
if(equip)
src.selected = equip
src.occupant_message("You switch to [equip]")
@@ -1616,7 +1616,7 @@
return
if(href_list["rfreq"])
if(usr != src.occupant) return
- var/new_frequency = (radio.frequency + filter.getNum("rfreq"))
+ var/new_frequency = (radio.frequency + old_filter.getNum("rfreq"))
if ((radio.frequency < PUBLIC_LOW_FREQ || radio.frequency > PUBLIC_HIGH_FREQ))
new_frequency = sanitize_frequency(new_frequency)
radio.set_frequency(new_frequency)
@@ -1658,11 +1658,11 @@
return
if(href_list["req_access"] && add_req_access)
if(!in_range(src, usr)) return
- output_access_dialog(filter.getObj("id_card"),filter.getMob("user"))
+ output_access_dialog(old_filter.getObj("id_card"),old_filter.getMob("user"))
return
if(href_list["maint_access"] && maint_access)
if(!in_range(src, usr)) return
- var/mob/user = filter.getMob("user")
+ var/mob/user = old_filter.getMob("user")
if(user)
if(state==0)
state = 1
@@ -1670,18 +1670,18 @@
else if(state==1)
state = 0
user << "The securing bolts are now hidden."
- output_maintenance_dialog(filter.getObj("id_card"),user)
+ output_maintenance_dialog(old_filter.getObj("id_card"),user)
return
if(href_list["set_internal_tank_valve"] && state >=1)
if(!in_range(src, usr)) return
- var/mob/user = filter.getMob("user")
+ var/mob/user = old_filter.getMob("user")
if(user)
var/new_pressure = input(user,"Input new output pressure","Pressure setting",internal_tank_valve) as num
if(new_pressure)
internal_tank_valve = new_pressure
user << "The internal pressure valve has been set to [internal_tank_valve]kPa."
if(href_list["remove_passenger"] && state >= 1)
- var/mob/user = filter.getMob("user")
+ var/mob/user = old_filter.getMob("user")
var/list/passengers = list()
for (var/obj/item/mecha_parts/mecha_equipment/tool/passenger/P in contents)
if (P.occupant)
@@ -1705,20 +1705,20 @@
P.go_out()
P.log_message("[occupant] was removed.")
return
- if(href_list["add_req_access"] && add_req_access && filter.getObj("id_card"))
+ if(href_list["add_req_access"] && add_req_access && old_filter.getObj("id_card"))
if(!in_range(src, usr)) return
- operation_req_access += filter.getNum("add_req_access")
- output_access_dialog(filter.getObj("id_card"),filter.getMob("user"))
+ operation_req_access += old_filter.getNum("add_req_access")
+ output_access_dialog(old_filter.getObj("id_card"),old_filter.getMob("user"))
return
- if(href_list["del_req_access"] && add_req_access && filter.getObj("id_card"))
+ if(href_list["del_req_access"] && add_req_access && old_filter.getObj("id_card"))
if(!in_range(src, usr)) return
- operation_req_access -= filter.getNum("del_req_access")
- output_access_dialog(filter.getObj("id_card"),filter.getMob("user"))
+ operation_req_access -= old_filter.getNum("del_req_access")
+ output_access_dialog(old_filter.getObj("id_card"),old_filter.getMob("user"))
return
if(href_list["finish_req_access"])
if(!in_range(src, usr)) return
add_req_access = 0
- var/mob/user = filter.getMob("user")
+ var/mob/user = old_filter.getMob("user")
user << browse(null,"window=exosuit_add_access")
return
if(href_list["dna_lock"])
@@ -1751,9 +1751,9 @@
/*
if(href_list["debug"])
if(href_list["set_i_dam"])
- setInternalDamage(filter.getNum("set_i_dam"))
+ setInternalDamage(old_filter.getNum("set_i_dam"))
if(href_list["clear_i_dam"])
- clearInternalDamage(filter.getNum("clear_i_dam"))
+ clearInternalDamage(old_filter.getNum("clear_i_dam"))
return
*/
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index e1e866209f9..1cf5b2fcaba 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -45,19 +45,19 @@
/obj/machinery/computer/mecha/Topic(href, href_list)
if(..())
return
- var/datum/topic_input/filter = new /datum/topic_input(href,href_list)
+ var/datum/topic_input/old_filter = new /datum/topic_input(href,href_list)
if(href_list["send_message"])
- var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("send_message")
+ var/obj/item/mecha_parts/mecha_tracking/MT = old_filter.getObj("send_message")
var/message = sanitize(input(usr,"Input message","Transmit message") as text)
var/obj/mecha/M = MT.in_mecha()
if(message && M)
M.occupant_message(message)
return
if(href_list["shock"])
- var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("shock")
+ var/obj/item/mecha_parts/mecha_tracking/MT = old_filter.getObj("shock")
MT.shock()
if(href_list["get_log"])
- var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("get_log")
+ var/obj/item/mecha_parts/mecha_tracking/MT = old_filter.getObj("get_log")
stored_data = MT.get_mecha_log()
screen = 1
if(href_list["return"])
diff --git a/code/game/objects/effects/chem/chemsmoke.dm b/code/game/objects/effects/chem/chemsmoke.dm
index 647a9bd4ab9..d0e2656a5dc 100644
--- a/code/game/objects/effects/chem/chemsmoke.dm
+++ b/code/game/objects/effects/chem/chemsmoke.dm
@@ -228,6 +228,7 @@
/datum/effect/effect/system/smoke_spread/chem/spores/start()
..()
if(seed.get_trait(TRAIT_SPREAD))
+ var/sporecount = 0
for(var/turf/T in targetTurfs)
var/bad_turf = 0
for(var/obj/O in T)
@@ -236,8 +237,9 @@
break
if(bad_turf)
continue
- if(prob(min(seed.get_trait(TRAIT_POTENCY),50)))
+ if(prob(min(seed.get_trait(TRAIT_POTENCY),50)) && sporecount < max(1,round(seed.get_trait(TRAIT_POTENCY)/20),1))
new /obj/machinery/portable_atmospherics/hydroponics/soil/invisible(T,seed)
+ sporecount++
//------------------------------------------
diff --git a/code/game/objects/items/weapons/landmines.dm b/code/game/objects/items/weapons/landmines.dm
index 1b7bed7fea0..29a35e8d05d 100644
--- a/code/game/objects/items/weapons/landmines.dm
+++ b/code/game/objects/items/weapons/landmines.dm
@@ -50,7 +50,7 @@
spark(src, 3, alldirs)
if(ishuman(L))
L.Weaken(2)
- explosion(loc, 0, 1, 2, 3)
+ explosion(loc, 0, 2, 2, 3)
qdel(src)
/obj/item/weapon/landmine/Crossed(AM as mob|obj)
diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm
index 2e25f34f26f..59b00823ff0 100644
--- a/code/game/objects/items/weapons/storage/wallets.dm
+++ b/code/game/objects/items/weapons/storage/wallets.dm
@@ -30,7 +30,8 @@
/obj/item/weapon/reagent_containers/hypospray/autoinjector,
/obj/item/weapon/screwdriver,
/obj/item/weapon/stamp,
- /obj/item/device/paicard)
+ /obj/item/device/paicard,
+ /obj/item/fluff)
slot_flags = SLOT_ID
var/obj/item/weapon/card/id/front_id = null
diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm
index cd18138e987..17f77eb45c3 100644
--- a/code/modules/client/client procs.dm
+++ b/code/modules/client/client procs.dm
@@ -328,9 +328,22 @@
if (holder)
src << "Admins get a free pass. However, please update your BYOND as soon as possible. Certain things may cause crashes if you play with your present version."
else
+ log_access("Failed Login: [key] [computer_id] [address] - Outdated BYOND major version: [byond_version].")
del(src)
return 0
+#if DM_VERSION > 511
+ if (LAZYLEN(config.client_blacklist_version))
+ var/client_version = "[byond_version].[byond_build]"
+ if (client_version in config.client_blacklist_version)
+ src << "Your version of BYOND is explicitly blacklisted from joining this server!"
+ src << "Your current version: [client_version]."
+ src << "Visit http://www.byond.com/download/ to download a different version. Try looking for a newer one, or go one lower."
+ log_access("Failed Login: [key] [computer_id] [address] - Blacklisted BYOND version: [client_version].")
+ del(src)
+ return 0
+#endif
+
//preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum)
prefs = preferences_datums[ckey]
if(!prefs)
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index ef2c03d3416..c040510f6cf 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -268,17 +268,17 @@ All custom items with worn sprites must follow the contained sprite system: http
icon_state = "zakiya_sketchpad"
/obj/item/weapon/clipboard/fluff/zakiya_sketchpad/New()
- ..()
- new /obj/item/weapon/paper(src)
- new /obj/item/weapon/paper(src)
- new /obj/item/weapon/paper(src)
- new /obj/item/weapon/paper(src)
- new /obj/item/weapon/paper(src)
- new /obj/item/weapon/paper(src)
- new /obj/item/weapon/paper(src)
- new /obj/item/weapon/paper(src)
- new /obj/item/weapon/paper(src)
- new /obj/item/weapon/paper(src)
+ ..()
+ new /obj/item/weapon/paper(src)
+ new /obj/item/weapon/paper(src)
+ new /obj/item/weapon/paper(src)
+ new /obj/item/weapon/paper(src)
+ new /obj/item/weapon/paper(src)
+ new /obj/item/weapon/paper(src)
+ new /obj/item/weapon/paper(src)
+ new /obj/item/weapon/paper(src)
+ new /obj/item/weapon/paper(src)
+ new /obj/item/weapon/paper(src)
/obj/item/weapon/clipboard/fluff/zakiya_sketchpad/update_icon()
if(toppaper)
@@ -679,7 +679,7 @@ All custom items with worn sprites must follow the contained sprite system: http
/obj/item/weapon/coin/fluff/raymond_coin //Engraved Coin - Raymond Hawkins - aboshehab
name = "engraved coin"
desc = "A coin of light and bright with one side having an engraving of a greek Lamba sign, and on the back the initials of R.H. are engraved."
- icon = 'icons/obj/custom_items/raymond_coin.dmi'
+ icon = 'icons/obj/custom_items/raymond_items.dmi'
icon_state = "raymond_coin"
@@ -1685,7 +1685,7 @@ All custom items with worn sprites must follow the contained sprite system: http
/obj/item/clothing/head/beret/fluff/chunley_beret //Sol's Dog Handler Beret - Freya Chunley - thesmiley
name = "sol's dog handler beret"
- desc = "A scarlet military beret worn by the Sol Alliance Military Police dog handling unit. The symbol on the cap is that of a grey wolf's head on white. It quivers menacingly. \
+ desc = "A scarlet military beret worn by the Sol Alliance Military Police dog handling unit. The symbol on the cap is that of a grey wolf's head on white. It quivers menacingly. \
Upon flipping it you see a name tag with the word \"CHUNLEY\" written in on it with a very sloppy hand write."
icon = 'icons/obj/custom_items/chunley_beret.dmi'
icon_state = "chunley_beret"
@@ -1710,4 +1710,170 @@ All custom items with worn sprites must follow the contained sprite system: http
contained_sprite = TRUE
flags_inv = HIDEEARS|HIDEFACE
body_parts_covered = FACE
- w_class = 3
\ No newline at end of file
+ w_class = 3
+
+
+/obj/item/weapon/crowbar/fluff/grajahn_crowbar //Crowbar of Divine Strength - Es'tana Grajahn - ezuo
+ name = "crowbar of divine strength"
+ desc = "An ordinary crowbar that has been painted red, and had some lights rigged to it. It pulsates a yellow light."
+ icon = 'icons/obj/custom_items/grajahn_crowbar.dmi'
+ icon_state = "grajahn_crowbar"
+ item_state = "grajahn_crowbar"
+ contained_sprite = TRUE
+
+
+/obj/item/weapon/storage/wallet/fluff/raymond_wallet //Black Leather Wallet - Raymond Hawkins - aboshehab
+ name = "black leather wallet"
+ desc = "A sleek black leather wallet, with the initials of \"J.H.\" visible at the front side. It's got an old yet maintained look to it."
+ icon = 'icons/obj/custom_items/raymond_items.dmi'
+ icon_state = "raymond_wallet"
+
+/obj/item/weapon/storage/wallet/fluff/raymond_wallet/update_icon()
+ return
+
+/obj/item/fluff/raymond_tablet //Holo Tablet - Raymond Hawkins - aboshehab
+ name = "holo tablet"
+ desc = "A thin electronic device that projects holographic images stored on it."
+ icon = 'icons/obj/custom_items/raymond_items.dmi'
+ icon_state = "raymond_tablet"
+ w_class = 2
+ var/picture = null
+
+/obj/item/fluff/raymond_tablet/attack_self(mob/user as mob)
+ if (use_check(user, USE_DISALLOW_SILICONS))
+ return
+
+ var/list/pictures = list("22-01-2460", "07-11-2459", "03-08-2459", "08-03-2452", "18-06-2437", "01-01-2434")
+
+ var/selection = input("Which picture do you want to see?", "Holo tablet picture selection.") as null|anything in pictures
+
+ if (!selection)
+ return
+
+ picture = selection
+
+/obj/item/fluff/raymond_tablet/examine(mob/user)
+ ..()
+ if(!picture)
+ to_chat(user, "\The [src]'s screen is empty.")
+ return
+ if(in_range(user, src) || isobserver(user))
+ show_picture(user)
+ else
+ to_chat(user, "You have to go closer if you want to read it.")
+
+/obj/item/fluff/raymond_tablet/proc/show_picture(mob/user)
+ var/desc
+
+ switch(picture)
+ if("22-01-2460")
+ desc = "This image shows a group of four outside with a scene looks to be a camp out in a forest. You see Raymond Hawkins sitting around a campfire with the three others, which you may know as Annabelle Hawkins, \
+ Lily Hawkins and Robert Hawkins, his children."
+
+ if("07-11-2459")
+ desc = "This image shows two people, Raymond Hawkins and Robert Hawkins, with the latter being a boy in his early teens. The setting is that of a gun range, with Robert operating a sidearm. \
+ Raymond is standing nearby guiding and instructing him on his posture."
+
+ if("03-08-2459")
+ desc = "This image shows two people, Raymond Hawkins and Lily Hawkins, with the latter being a girl in her early twenties. The setting is that of an arena, Raymond dressed casually and Lily in a Jiu Jitsu uniform, \
+ the belt being an alternation between black and red. She's got a winners medal around her neck, making a peace sign with her right hand while having a grin on her face, posing for a picture with Raymond."
+
+ if("08-03-2452")
+ desc = "This image shows two people, Raymond Hawkins and Annabelle Hawkins, the former visibly a decade younger yet thinner, and not in the healthy way. The later looks to be in their late teens. The setting is that of a restaurant, \
+ a more high end one, with the two of them seated opposite of each other, posing for a picture. Annabelle especially looks incredibly happy."
+
+ if("18-06-2437")
+ desc = "This image shows a group of five posing together for a picture, the surrounding indicates this as a place of military decorum, people dressed in Sol Navy dress uniforms and people in civilian clothing spread around in groups, indicating some form of graduation ceremony. \
+ Raymond is in his mid twenties, dressed in full dress uniform standing with four others. One you might know as Stephanie Hawkins, dressed in the same way, looking to be in her mid twenties as well. A boy in his early teens is also standing, \
+ which you may know as Robert Hawkins, his brother. The last two are Jack Hawkins and Martha Hawkins, both looking to be in their early fifties, his parents."
+
+ if("01-01-2434")
+ desc = "This image shows a large gathering, the scenery and attire indicative of a wedding. Two people stick out, Raymond Hawkins, looking to be in his early twenties dressed in a suit dancing with his bride, \
+ which you may know as Stephanie Hawkins. They look content and happy, the atmosphere ecstatic."
+
+ show_browser(user, "
You can see on the screen of the tablet:
[desc]", "window=Holo Tablet")
+
+
+/obj/item/weapon/material/knife/fluff/yumi_knife //Cutting Metal - Yumi Yotin - trickingtrapster
+ name = "cutting metal"
+ desc = "Looks like a piece of sheet metal, sharpened on one end."
+ icon = 'icons/obj/custom_items/yotin_knife.dmi'
+ icon_state = "yotin_knife"
+
+
+/obj/item/clothing/suit/storage/toggle/fr_jacket/fluff/volvalaad_jacket //Paramedic's Jacket - Richard Volvalaad - t1gws
+ name = "paramedic's jacket"
+ desc = "A jacket worn by trained emergency medical personnel, this one has a gold trim and emblem."
+ icon = 'icons/obj/custom_items/volvalaad_items.dmi'
+ icon_state = "volvalaad_jacket"
+ item_state = "volvalaad_jacket"
+ icon_open = "volvalaad_jacket_open"
+ icon_closed = "volvalaad_jacket"
+ contained_sprite = TRUE
+
+/obj/item/clothing/suit/storage/toggle/fluff/volvalaad_coat //Dominian Noble Coat - Richard Volvalaad - t1gws
+ name = "dominian noble coat"
+ desc = "This is a coat often worn by the Dominian Nobility, this one is black and blue."
+ icon = 'icons/obj/custom_items/volvalaad_items.dmi'
+ icon_state = "volvalaad_coat"
+ item_state = "volvalaad_coat"
+ icon_open = "volvalaad_coat_open"
+ icon_closed = "volvalaad_coat"
+ contained_sprite = TRUE
+
+
+/obj/item/weapon/paper/fluff/jawdat_paper //Manifesto of the PRA - Rrazujun Rrhazkal-Jawdat - jackboot
+ name = "manifesto of the PRA"
+ desc = "This is the manifesto of the People's Republic of Adhomai, written by many different Tajara thinkers in the 2430's. Depending on who you ask it is either an enlightening document that showcases the great \
+ intellectual and cultural genius of Tajara civilization, or a dense collection of gibberish commie nonsense."
+ icon = 'icons/obj/custom_items/jawdat_paper.dmi'
+ icon_state = "jawdat_paper"
+ info = "Manifesto of the Parizahra Zhahrazjujz'tajara Akzatauzjauna'azahrazakahuz Hadii
\
+
\
+ Written: Late 2432;
\
+ First Published: February 2433
\
+ Translated by Comrade Aurauz'hurl Aizhunua
\
+ A Rrak'narr is haunting the Njarir'Akhran. The Rrak'narr of classlessism. Where have not the Njarir'Akhran blasted classlessism? Where not have the nobility ruthlessly uprooted our supporters \
+ like they were tearing up weeds from their gardens? Despite their dismissal, the fact that the Njarir'Akhran are so desperate to exterminate us brings us two inevitable facts:
\
+
\
+ 1) Revolutionary ideology is already cemented amongst Tajara.
\
+ 2) It is time for supporters of a classless society to throw off their cloaks and set aside their daggers and pick up the rifle to meet the reactionary bourgeois in the open field.
\
+
\
+ To that end, Comrade Al'mari Hadii has coalesced the many supporters and thinkers of the Revolution to bring to life this manifesto of our people, our nation, and our Revolution.
\
+ This is a Revolution that will make the Old Order buckle before the strength of the working class until it collapses into ruin. Remember, dear comrade, all of the contents of this manifesto are to justify one simple fact.
\
+ This one fact has been unsuccessfully suppressed by the Njarir'Akhran, only to live on in the burning spirit of every man, woman, and kit. The simple fact that no Tajara is born inherently better than another.
\
+
\
+ Chapter 1:The Ruling Class and the Working Class
\
+ Chapter 2: Revolutionaries and Classlessism
\
+ Chapter 3: The Modern Njarir'Akhran Bourgeois
\
+ Chapter 4: Classlessism: Bridging Egalitarianism and Collectivism
\
+ Chapter 5: The Human Question: Neo-Feudalistic Classism
\
+ Chapter 6: The Great Awakening: Classlessism With Tajara Characteristics In The Greater Galaxy
\
+ Chapter 7: Aiairu'kuul Dialectic Theory On Trans-Substational Class Elevation
\
+ Chapter 8: Breaking The Chains: Persuading Non-Tajara To Support Their Own Liberation
\
+ Chapter 9: The Obliteration Of Class: The Final Goal
\
+ Chapter 10: Closing Arguments: Al'Mari's Vision Of A People's Republic"
+
+/obj/item/weapon/paper/fluff/jawdat_paper/update_icon()
+ return
+
+/obj/item/weapon/folder/red/manifesto/Initialize()
+ . = ..()
+ new /obj/item/weapon/paper/fluff/jawdat_paper(src)
+ new /obj/item/weapon/paper/fluff/jawdat_paper(src)
+ new /obj/item/weapon/paper/fluff/jawdat_paper(src)
+ new /obj/item/weapon/paper/fluff/jawdat_paper(src)
+ new /obj/item/weapon/paper/fluff/jawdat_paper(src)
+ new /obj/item/weapon/paper/fluff/jawdat_paper(src)
+ new /obj/item/weapon/paper/fluff/jawdat_paper(src)
+ new /obj/item/weapon/paper/fluff/jawdat_paper(src)
+ new /obj/item/weapon/paper/fluff/jawdat_paper(src)
+ new /obj/item/weapon/paper/fluff/jawdat_paper(src)
+ new /obj/item/weapon/paper/fluff/jawdat_paper(src)
+
+
+/obj/item/clothing/accessory/holster/thigh/fluff/rifler_holster //Rifler's Holster - Sophie Rifler - shodan43893
+ name = "tan leather thigh holster"
+ desc = "A version of the security thigh holster done up in tan leather - this one appears to have the word \"Rifler\" engraved down the side. It appears to be rather well made and hard wearing; more of a worker's holster than a show piece."
+ icon = 'icons/obj/custom_items/rifler_holster.dmi'
+ icon_state = "rifler_holster"
diff --git a/code/modules/holodeck/HolodeckObjects.dm b/code/modules/holodeck/HolodeckObjects.dm
index cae97fe91c8..011436675df 100644
--- a/code/modules/holodeck/HolodeckObjects.dm
+++ b/code/modules/holodeck/HolodeckObjects.dm
@@ -470,6 +470,8 @@
icon_dead = "penguin_baby_dead"
/mob/living/simple_animal/penguin/holodeck/emperor
+ name = "emperor penguin"
+ desc = "Emperor of all he surveys."
/mob/living/simple_animal/penguin/holodeck/gib()
derez() //holograms can't gib
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index a762be0eb73..1927e238ee1 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -401,6 +401,7 @@
set_trait(TRAIT_BIOLUM,1)
set_trait(TRAIT_IDEAL_LIGHT,1)
set_trait(TRAIT_LIGHT_TOLERANCE,2)
+ set_trait(TRAIT_ENDURANCE,50)
set_trait(TRAIT_BIOLUM_COLOUR,"#E6E600")
set_trait(TRAIT_PRODUCT_ICON,"alien3")
set_trait(TRAIT_PRODUCT_COLOUR,"#E6E600")
@@ -418,6 +419,7 @@
..()
set_trait(TRAIT_BIOLUM_PWR,-1.5)
set_trait(TRAIT_POTENCY,60)
+ set_trait(TRAIT_ENDURANCE,75)
set_trait(TRAIT_IDEAL_LIGHT,0)
set_trait(TRAIT_LIGHT_TOLERANCE,8)
set_trait(TRAIT_BIOLUM_COLOUR,"#FFFFFF")
diff --git a/code/modules/hydroponics/seed_storage.dm b/code/modules/hydroponics/seed_storage.dm
index 760231710bc..9fa19851ae8 100644
--- a/code/modules/hydroponics/seed_storage.dm
+++ b/code/modules/hydroponics/seed_storage.dm
@@ -74,8 +74,7 @@
/obj/item/seeds/towermycelium = 3,
/obj/item/seeds/watermelonseed = 3,
/obj/item/seeds/wheatseed = 3,
- /obj/item/seeds/whitebeetseed = 3,
- /obj/item/seeds/koisspore = 3
+ /obj/item/seeds/whitebeetseed = 3
)
/obj/machinery/seed_storage/xenobotany
diff --git a/code/modules/hydroponics/trays/tray.dm b/code/modules/hydroponics/trays/tray.dm
index daf28aad10b..479b4a0a55a 100644
--- a/code/modules/hydroponics/trays/tray.dm
+++ b/code/modules/hydroponics/trays/tray.dm
@@ -579,7 +579,10 @@
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
user.visible_message("\The [seed.display_name] has been attacked by [user] with \the [O]!")
if(!dead)
- health -= O.force
+ var/total_damage = O.force
+ if ((O.sharp) || (O.damtype == "fire")) //fire and sharp things are more effective when dealing with plants
+ total_damage = 2*O.force
+ health -= total_damage
check_health()
return
diff --git a/code/modules/integrated_electronics/core/helpers.dm b/code/modules/integrated_electronics/core/helpers.dm
index e221d0c656f..35f7c60374b 100644
--- a/code/modules/integrated_electronics/core/helpers.dm
+++ b/code/modules/integrated_electronics/core/helpers.dm
@@ -40,8 +40,6 @@
A.push_data()
/datum/integrated_io/proc/get_data()
- if(isnull(data))
- return
if(isweakref(data))
return data.resolve()
return data
diff --git a/code/modules/integrated_electronics/subtypes/logic.dm b/code/modules/integrated_electronics/subtypes/logic.dm
index 8bf55649ec5..60edfa66859 100644
--- a/code/modules/integrated_electronics/subtypes/logic.dm
+++ b/code/modules/integrated_electronics/subtypes/logic.dm
@@ -1,7 +1,7 @@
/obj/item/integrated_circuit/logic
name = "logic gate"
desc = "This tiny chip will decide for you!"
- extended_desc = "Logic circuits will treat a null, 0, and a \"\" string value as FALSE and anything else as TRUE."
+ extended_desc = "Logic circuits will treat a null, 0, and a \"\" string value as FALSE and anything else as TRUE. If inputs are of mismatching type, expect undocumented behaviour."
complexity = 3
outputs = list("result" = IC_PINTYPE_BOOLEAN)
activators = list("compare" = IC_PINTYPE_PULSE_IN)
@@ -22,7 +22,11 @@
/obj/item/integrated_circuit/logic/binary/do_work()
var/data1 = get_pin_data(IC_INPUT, 1)
var/data2 = get_pin_data(IC_INPUT, 2)
- var/result = !!do_compare(data1, data2)
+
+ var/result = FALSE
+ if (comparable(data1, data2))
+ result = !!do_compare(data1, data2)
+
set_pin_data(IC_OUTPUT, 1, result)
push_data()
@@ -34,6 +38,18 @@
/obj/item/integrated_circuit/logic/binary/proc/do_compare(A, B)
return FALSE
+/obj/item/integrated_circuit/logic/binary/proc/comparable(A, B)
+ if (isnum(A) && isnum(B))
+ . = TRUE
+ else if (istext(A) && istext(B))
+ . = TRUE
+ else if (islist(A) && islist(B))
+ . = TRUE
+ else if (isdatum(A) && isdatum(B))
+ . = TRUE
+ else
+ . = FALSE
+
/obj/item/integrated_circuit/logic/unary
inputs = list(
"A" = IC_PINTYPE_ANY
diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm
index d2dc327a3c7..94d627fdedc 100644
--- a/code/modules/materials/materials.dm
+++ b/code/modules/materials/materials.dm
@@ -408,7 +408,11 @@ var/list/name_to_material
/material/plasteel/titanium
name = "titanium"
stack_type = /obj/item/stack/material/titanium
+ integrity = 600
conductivity = 2.38
+ hardness = 90
+ weight = 25
+ protectiveness = 25
icon_base = "metal"
door_icon_base = "metal"
icon_colour = "#D1E6E3"
diff --git a/code/modules/mining/mine_turf_types.dm b/code/modules/mining/mine_turf_types.dm
index 9b86a651033..40e9c26027f 100644
--- a/code/modules/mining/mine_turf_types.dm
+++ b/code/modules/mining/mine_turf_types.dm
@@ -88,11 +88,9 @@
/turf/simulated/floor/asteroid/ash
name = "ash"
- icon = 'icons/turf/map_placeholders.dmi'
icon_state = "ash"
desc = "A fine grey ash. Looks pretty tightly packed."
smooth = SMOOTH_MORE | SMOOTH_BORDER | SMOOTH_NO_CLEAR_ICON
- gender = PLURAL
base_icon = 'icons/turf/smooth/ash.dmi'
base_icon_state = "ash"
footstep_sound = "sandstep"
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 99159de8384..baae359a057 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -15,6 +15,10 @@ var/list/mineral_can_smooth_with = list(
/turf/simulated/shuttle
)
+// Some extra types for the surface to keep things pretty.
+/turf/simulated/mineral/surface
+ mined_turf = /turf/simulated/floor/asteroid/ash
+
/turf/simulated/mineral //wall piece
name = "rock"
icon = 'icons/turf/map_placeholders.dmi'
@@ -34,7 +38,7 @@ var/list/mineral_can_smooth_with = list(
density = 1
blocks_air = 1
temperature = T0C
- var/mined_turf = /turf/simulated/floor/asteroid
+ var/mined_turf = /turf/simulated/floor/asteroid/ash/rocky
var/ore/mineral
var/mined_ore = 0
var/last_act = 0
@@ -501,14 +505,14 @@ var/list/mineral_can_smooth_with = list(
// Setting icon/icon_state initially will use these values when the turf is built on/replaced.
// This means you can put grass on the asteroid etc.
/turf/simulated/floor/asteroid
- name = "ash"
+ name = "coder's blight"
icon = 'icons/turf/map_placeholders.dmi'
- icon_state = "ash"
- desc = "A fine grey ash. Looks pretty tightly packed."
- smooth = SMOOTH_MORE | SMOOTH_BORDER | SMOOTH_NO_CLEAR_ICON
+ icon_state = ""
+ desc = "An exposed developer texture. Someone wasn't paying attention."
+ smooth = SMOOTH_FALSE
smoothing_hints = SMOOTHHINT_CUT_F | SMOOTHHINT_ONLY_MATCH_TURF | SMOOTHHINT_TARGETS_NOT_UNIQUE
gender = PLURAL
- base_icon = 'icons/turf/smooth/ash.dmi'
+ base_icon = 'icons/turf/map_placeholders.dmi'
base_icon_state = "ash"
initial_flooring = null
diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm
index 5ecae44b822..7b358cbed0b 100644
--- a/code/modules/mob/living/bot/cleanbot.dm
+++ b/code/modules/mob/living/bot/cleanbot.dm
@@ -291,7 +291,7 @@ var/list/cleanbot_types // Going to use this to generate a list of types once th
get_targets()
if("patrol")
should_patrol = !should_patrol
- patrol_path = null
+ patrol_path = list()
if("freq")
var/freq = text2num(input("Select frequency for navigation beacons", "Frequnecy", num2text(beacon_freq / 10))) * 10
if (freq > 0)
diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm
index 47f2798aaf1..b73c563a54a 100644
--- a/code/modules/mob/living/bot/medbot.dm
+++ b/code/modules/mob/living/bot/medbot.dm
@@ -303,7 +303,7 @@
if((H.getToxLoss() >= heal_threshold) && (!H.reagents.has_reagent(treatment_tox)))
return treatment_tox
- for(var/datum/disease/D in H.viruses)
+ for(var/datum/disease2/disease/D in H.virus2)
if (!H.reagents.has_reagent(treatment_virus))
return treatment_virus // STOP DISEASE FOREVER
diff --git a/code/modules/mob/living/simple_animal/constructs/soulstone.dm b/code/modules/mob/living/simple_animal/constructs/soulstone.dm
index 0e3b2179fcc..4102df60dfc 100644
--- a/code/modules/mob/living/simple_animal/constructs/soulstone.dm
+++ b/code/modules/mob/living/simple_animal/constructs/soulstone.dm
@@ -211,7 +211,7 @@
Z << "You are still bound to serve your creator, follow their orders and help them complete their goals at all costs."
Z.cancel_camera()
qdel(src)
-/obj/item/device/soulstone/proc/transfer_soul(var/choice as text, var/target, var/mob/U as mob).
+/obj/item/device/soulstone/proc/transfer_soul(var/choice as text, var/target, var/mob/U as mob)
switch(choice)
if("VICTIM")
transfer_human(target,U)
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index 1f025901d7e..4d6de6246af 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -302,7 +302,7 @@
// Penguins
/mob/living/simple_animal/penguin
- name = "\improper King penguin"
+ name = "penguin"
desc = "A king of the icy regions."
icon_state = "penguin"
icon_living = "penguin"
@@ -310,7 +310,7 @@
speak = list("Gah Gah!", "NOOT NOOT!", "NOOT!", "Noot", "noot", "Prah!", "Grah!")
speak_emote = list("squawks", "gakkers")
emote_hear = list("squawk!", "gakkers!", "noots.","NOOTS!")
- emote_see = list("shakes its beak.", "flaps its wings.","preens itself.")
+ emote_see = list("shakes its beak", "flaps its wings","preens itself")
faction = list("penguin")
speak_chance = 1
turns_per_move = 10
@@ -318,9 +318,10 @@
response_disarm = "bops"
response_harm = "kicks"
attacktext = "kicked"
+ mob_size = 2
/mob/living/simple_animal/penguin/baby
- name = "\improper baby penguin"
+ name = "baby penguin"
desc = "Can't fly and barely waddles, yet the prince of all chicks."
icon_state = "penguin_baby"
icon_living = "penguin_baby"
@@ -334,7 +335,6 @@
desc = "Who would do such a thing? You monster!"
/mob/living/simple_animal/penguin/emperor
- name = "Emperor penguin"
+ name = "emperor penguin"
desc = "Emperor of all he surveys."
- density = 0
- mob_size = 2
+
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index b98c4397268..98bd0d27214 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -670,12 +670,13 @@ proc/is_blind(A)
/mob/living/simple_animal/hostile/assess_perp(var/obj/access_obj, var/check_access, var/auth_weapons, var/check_records, var/check_arrest)
var/threatcount = ..()
- if(. == SAFE_PERP)
+ if(threatcount == SAFE_PERP)
return SAFE_PERP
- if(!istype(src, /mob/living/simple_animal/hostile/retaliate/goat))
- threatcount += 4
- return threatcount
+ if(istype(src, /mob/living/simple_animal/hostile/retaliate/goat) || istype(src, /mob/living/simple_animal/hostile/commanded))
+ return threatcount
+
+ return threatcount + 4
/mob/living/proc/bucklecheck(var/mob/living/user)
diff --git a/code/modules/nano/modules/exosuit_control.dm b/code/modules/nano/modules/exosuit_control.dm
index ad15db46afd..87174b3e5e6 100644
--- a/code/modules/nano/modules/exosuit_control.dm
+++ b/code/modules/nano/modules/exosuit_control.dm
@@ -33,22 +33,22 @@
/datum/nano_module/exosuit_control/Topic(href, href_list)
if(..())
return
- var/datum/topic_input/filter = new /datum/topic_input(href,href_list)
+ var/datum/topic_input/old_filter = new /datum/topic_input(href,href_list)
if(href_list["send_message"])
- var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("send_message")
+ var/obj/item/mecha_parts/mecha_tracking/MT = old_filter.getObj("send_message")
var/message = sanitize(input(usr,"Input message","Transmit message") as text)
var/obj/mecha/M = MT.in_mecha()
if(message && M)
M.occupant_message(message)
return
if(href_list["shock"])
- var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("shock")
+ var/obj/item/mecha_parts/mecha_tracking/MT = old_filter.getObj("shock")
var/response = alert(usr,"Are you certain you wish to terminate this exosuit? Executing this procedure will render it inoperable, and should only be used in extreme circumstances. Improper use will result in your being held liable for damage to Nanotrasen property","Confirm shutdown","Destroy","Cancel")
if (response == "Destroy")
MT.shock(usr)
if(href_list["get_log"])
- var/obj/item/mecha_parts/mecha_tracking/MT = filter.getObj("get_log")
+ var/obj/item/mecha_parts/mecha_tracking/MT = old_filter.getObj("get_log")
stored_data = MT.get_mecha_log()
screen = 1
if(href_list["return"])
diff --git a/code/modules/organs/subtypes/parasite.dm b/code/modules/organs/subtypes/parasite.dm
index eebe0dae190..4eb1a32964c 100644
--- a/code/modules/organs/subtypes/parasite.dm
+++ b/code/modules/organs/subtypes/parasite.dm
@@ -48,6 +48,9 @@
/obj/item/organ/parasite/kois/process()
..()
+ if (!owner)
+ return
+
if(prob(10) && !(owner.species.flags & NO_PAIN))
owner << "You feel a stinging pain in your abdomen!"
owner.emote("me",1,"winces slightly.")
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index 4b60296d329..586e4fc006e 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -94,7 +94,7 @@
if(href_list["togglep"])
if(!wires.IsIndexCut(PARTICLE_TOGGLE_WIRE))
- src.toggle_power()
+ src.toggle_power(usr)
else if(href_list["scan"])
src.part_scan()
@@ -212,11 +212,11 @@
return 0
-/obj/machinery/particle_accelerator/control_box/proc/toggle_power()
+/obj/machinery/particle_accelerator/control_box/proc/toggle_power(mob/user)
src.active = !src.active
- investigate_log("turned [active?"ON":"OFF"] by [usr ? usr.key : "outside forces"]","singulo")
- message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(usr, usr.client)](?) in ([x],[y],[z] - JMP)",0,1)
- log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr.ckey]([usr]) in ([x],[y],[z])",ckey=key_name(usr))
+ investigate_log("turned [active?"ON":"OFF"] by [user ? user.key : "outside forces"]","singulo")
+ message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(user, TRUE, highlight_special = TRUE)] in ([x],[y],[z] - JMP)",0,1)
+ log_game("PA Control Computer turned [active ?"ON":"OFF"] by [key_name(user)] in ([x],[y],[z])",ckey=key_name(user))
if(src.active)
update_use_power(2)
for(var/obj/structure/particle_accelerator/part in connected_parts)
diff --git a/code/modules/projectiles/guns/energy/modular.dm b/code/modules/projectiles/guns/energy/modular.dm
index 91baefa02b1..2b11c518447 100644
--- a/code/modules/projectiles/guns/energy/modular.dm
+++ b/code/modules/projectiles/guns/energy/modular.dm
@@ -127,7 +127,7 @@
burst += modifier.burst
burst_delay += modifier.burst_delay
max_shots *= modifier.shots
- force += modifier.gun_force
+ force = min(force + modifier.gun_force, 40)
chargetime += modifier.chargetime*10
accuracy += modifier.accuracy
criticality *= modifier.criticality
diff --git a/code/modules/projectiles/targeting/targeting_triggers.dm b/code/modules/projectiles/targeting/targeting_triggers.dm
index 8435dc6d0a5..4c165ea658e 100644
--- a/code/modules/projectiles/targeting/targeting_triggers.dm
+++ b/code/modules/projectiles/targeting/targeting_triggers.dm
@@ -10,7 +10,7 @@
/obj/aiming_overlay/proc/trigger(var/perm)
- if((user.client.prefs.toggles_secondary & SAFETY_CHECK) && user.a_intent != I_HURT) //Check this first to save time.
+ if(user && user.client && (user.client.prefs.toggles_secondary & SAFETY_CHECK) && user.a_intent != I_HURT) //Check this first to save time.
user << "You refrain from firing, as you aren't on harm intent."
return
if(!owner || !aiming_with || !aiming_at || !locked)
diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm
index f4a37290f00..15d7153febf 100644
--- a/code/modules/random_map/drop/droppod.dm
+++ b/code/modules/random_map/drop/droppod.dm
@@ -210,10 +210,7 @@
// Chuck them into the pod.
var/automatic_pod
if(spawned_mob && selected_player)
- if(selected_player.mob.mind)
- selected_player.mob.mind.transfer_to(spawned_mob)
- else
- spawned_mob.ckey = selected_player.mob.ckey
+ spawned_mob.ckey = selected_player.mob.ckey
spawned_mobs = list(spawned_mob)
message_admins("[key_name_admin(usr)] dropped a pod containing \the [spawned_mob] ([spawned_mob.key]) at ([usr.x],[usr.y],[usr.z])")
log_admin("[key_name(usr)] dropped a pod containing \the [spawned_mob] ([spawned_mob.key]) at ([usr.x],[usr.y],[usr.z])",admin_key=key_name(usr),ckey=key_name(spawned_mob))
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 9e78dca6812..290fdda4810 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -33,17 +33,16 @@
reagents.add_reagent("nutriment",nutriment_amt,nutriment_desc)
/obj/item/weapon/reagent_containers/food/snacks/proc/On_Consume(var/mob/M)
- if(!usr) usr = M
if(!reagents.total_volume)
M.visible_message("[M] finishes eating \the [src].","You finish eating \the [src].")
- usr.drop_from_inventory(src) //so icons update :[
+ M.drop_from_inventory(src) //so icons update :[
if(trash)
if(ispath(trash,/obj/item))
- var/obj/item/TrashItem = new trash(usr)
- usr.put_in_hands(TrashItem)
+ var/obj/item/TrashItem = new trash(M)
+ M.put_in_hands(TrashItem)
else if(istype(trash,/obj/item))
- usr.put_in_hands(trash)
+ M.put_in_hands(trash)
qdel(src)
return
@@ -390,7 +389,9 @@
if(!src && !user.client)
user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]")
qdel(src)
- On_Consume(user)
+
+ if (reagents)
+ On_Consume(user)
//////////////////////////////////////////////////
////////////////////////////////////////////Snacks
@@ -4874,4 +4875,4 @@
bitesize = 5
center_of_mass = list("x"=16, "y"=16)
nutriment_desc = list("regret" = 6)
- nutriment_amt = 6
\ No newline at end of file
+ nutriment_amt = 6
diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm
index 59fc39a3897..5edc7e12d30 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle.dm
+++ b/code/modules/reagents/reagent_containers/glass/bottle.dm
@@ -258,7 +258,7 @@
amount_per_transfer_from_this = 5
Initialize()
- . = ..
+ . = ..()
var/datum/reagents/R = new/datum/reagents(20)
reagents = R
R.my_atom = src
diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm
index 6d1c46d9fb2..6d1df1fe9f0 100644
--- a/code/modules/reagents/reagent_dispenser.dm
+++ b/code/modules/reagents/reagent_dispenser.dm
@@ -166,6 +166,9 @@
explode()
/obj/structure/reagent_dispensers/fueltank/proc/explode()
+ if (QDELETED(src))
+ return
+
if (reagents.total_volume > 500)
explosion(src.loc,1,2,4)
else if (reagents.total_volume > 100)
diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm
index d5f2cb7731a..1f09d92ca4f 100644
--- a/code/modules/shieldgen/sheldwallgen.dm
+++ b/code/modules/shieldgen/sheldwallgen.dm
@@ -58,6 +58,9 @@
power = 0
return 0
var/turf/T = src.loc
+ if (!istype(T))
+ power = 0
+ return 0
var/obj/structure/cable/C = T.get_cable_node()
var/datum/powernet/PN
@@ -106,7 +109,7 @@
"You hear heavy droning fade out")
icon_state = "Shield_Gen"
src.active = 0
- for(var/dir in list(1,2,4,8))
+ for(var/dir in list(1,2,4,8))
cleanup(dir)
/obj/machinery/shieldwallgen/proc/setup_field(var/NSEW = 0)
diff --git a/code/modules/shieldgen/shield_capacitor.dm b/code/modules/shieldgen/shield_capacitor.dm
index bde7ecd1e64..76bb28e1df0 100644
--- a/code/modules/shieldgen/shield_capacitor.dm
+++ b/code/modules/shieldgen/shield_capacitor.dm
@@ -28,7 +28,7 @@
if(get_dir(src, possible_gen) == src.dir)
possible_gen.owned_capacitor = src
break
-
+
/obj/machinery/shield_capacitor/emag_act(var/remaining_charges, var/mob/user)
if(prob(75))
src.locked = !src.locked
@@ -106,7 +106,13 @@
//see if we can connect to a power net.
var/datum/powernet/PN
var/turf/T = src.loc
+
+ if (!istype(T))
+ active = 0
+ return
+
var/obj/structure/cable/C = T.get_cable_node()
+
if (C)
PN = C.powernet
diff --git a/config/example/config.txt b/config/example/config.txt
index e702a751c0f..efa4c41b255 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -5,7 +5,7 @@
ALERT_GREEN All threats to the station have passed. Security may not have weapons visible, privacy laws are once again fully enforced.
ALERT_BLUE_UPTO The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible, random searches are permitted.
ALERT_BLUE_DOWNTO The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed.
-ALERT_YELLOW_TO The station is now under an elevated alert status due to a confirmed biological hazard. All crew are to follow command instruction in order to ensure a safe return to standard operations.
+ALERT_YELLOW_TO The station is now under an elevated alert status due to a confirmed biological hazard. All crew are to follow command instruction in order to ensure a safe return to standard operations.
ALERT_RED_UPTO There is an immediate serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised.
ALERT_RED_DOWNTO The self-destruct mechanism has been deactivated, there is still however an immediate serious threat to the station. Security may have weapons unholstered at all times, random searches are allowed and advised.
ALERT_DELTA The station's self-destruct mechanism has been engaged. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.
@@ -436,6 +436,9 @@ MERCHANT_CHANCE 20
#CLIENT_ERROR_MESSAGE Your version of BYOND is not supported. Please upgrade.
#CLIENT_WARN_VERSION 510
#CLIENT_WARN_MESSAGE BYOND is really close to releasing 510 beta as a stable release, please take time to try it out. Reports are that the client preforms better then the version you are using, and also handles network lag better. Shortly after it's release we will end up using 510 client features and you will be forced to update.
+## These versions are never permitted to join. Only works if the server is compiled in and running 512.
+## Keep the list semi-colon separated, in format of MAJOR.MINOR;MAJOR.MINOR
+#CLIENT_BLACKLIST_VERSION 123.4567
## Uncomment to enable simple Skype/Discord style markup over OOC, LOOC, and say.
#ALLOW_CHAT_MARKUP
diff --git a/config/names/last.txt b/config/names/last.txt
index 5b41e53aae8..6080967e2da 100644
--- a/config/names/last.txt
+++ b/config/names/last.txt
@@ -502,7 +502,6 @@ Stamos
Sagan
Hawking
Dawkins
-Goebbles
McShain
McDonohugh
Power
diff --git a/html/changelog.html b/html/changelog.html
index 59cae6eb432..5cbc3b85d05 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -56,6 +56,25 @@
-->
+
11 February 2018
+
Lohikar updated:
+
+ - The asteroid's sprites should no longer get fucked up by shuttle movement, explosions, or mining.
+ - Breaking asteroid floors on the lowest level will now break to openspace/space instead of more asteroid.
+
+
+
04 February 2018
+
Alberyk updated:
+
+ - Sharp weapons and welders are twice as effective in destroying plants.
+ - Removed k'ois seeds from the botany's seed storage.
+
+
LordFowl updated:
+
+ - The number of spores released by a plant is now dependent on the plants potency.
+ - K'ois health has been reduced by half.
+
+
31 January 2018
LordFowl updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 26456d99312..7e20d38b0c2 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -5127,3 +5127,17 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
LordFowl:
- balance: Both versions of K'ois mycosis will mature at a doubled rate.
- rscadd: Added SSD timers for when examining inactive/disconnected mobs.
+2018-02-04:
+ Alberyk:
+ - rscadd: Sharp weapons and welders are twice as effective in destroying plants.
+ - rscdel: Removed k'ois seeds from the botany's seed storage.
+ LordFowl:
+ - tweak: The number of spores released by a plant is now dependent on the plants
+ potency.
+ - balance: K'ois health has been reduced by half.
+2018-02-11:
+ Lohikar:
+ - bugfix: The asteroid's sprites should no longer get fucked up by shuttle movement,
+ explosions, or mining.
+ - tweak: Breaking asteroid floors on the lowest level will now break to openspace/space
+ instead of more asteroid.
diff --git a/html/templates/welcome_screen.html b/html/templates/welcome_screen.html
index 87f824f50bd..80beb9bb15f 100644
--- a/html/templates/welcome_screen.html
+++ b/html/templates/welcome_screen.html
@@ -163,11 +163,15 @@
window.location = command;
});
+
// Operations before closing.
$(window).unload(function() {
- window.location = '?JSlink=updateHashes;' + jQuery.param(hashesToUpdate);
+ try {
+ window.location = '?JSlink=updateHashes;' + jQuery.param(hashesToUpdate);
+ } catch (e) { }
});
+
var edat = getCookie('E-DAT');
if (!edat)
{
diff --git a/icons/mob/custom_synthetic.dmi b/icons/mob/custom_synthetic.dmi
index 297aa14052e..d039ef2265f 100644
Binary files a/icons/mob/custom_synthetic.dmi and b/icons/mob/custom_synthetic.dmi differ
diff --git a/icons/obj/custom_items/grajahn_crowbar.dmi b/icons/obj/custom_items/grajahn_crowbar.dmi
new file mode 100644
index 00000000000..b17c41692a3
Binary files /dev/null and b/icons/obj/custom_items/grajahn_crowbar.dmi differ
diff --git a/icons/obj/custom_items/jawdat_paper.dmi b/icons/obj/custom_items/jawdat_paper.dmi
new file mode 100644
index 00000000000..546e523a512
Binary files /dev/null and b/icons/obj/custom_items/jawdat_paper.dmi differ
diff --git a/icons/obj/custom_items/raymond_coin.dmi b/icons/obj/custom_items/raymond_coin.dmi
deleted file mode 100644
index 75079d24660..00000000000
Binary files a/icons/obj/custom_items/raymond_coin.dmi and /dev/null differ
diff --git a/icons/obj/custom_items/raymond_items.dmi b/icons/obj/custom_items/raymond_items.dmi
new file mode 100644
index 00000000000..a8d441157f4
Binary files /dev/null and b/icons/obj/custom_items/raymond_items.dmi differ
diff --git a/icons/obj/custom_items/rifler_holster.dmi b/icons/obj/custom_items/rifler_holster.dmi
new file mode 100644
index 00000000000..62253a7a536
Binary files /dev/null and b/icons/obj/custom_items/rifler_holster.dmi differ
diff --git a/icons/obj/custom_items/volvalaad_items.dmi b/icons/obj/custom_items/volvalaad_items.dmi
new file mode 100644
index 00000000000..782c9870c40
Binary files /dev/null and b/icons/obj/custom_items/volvalaad_items.dmi differ
diff --git a/icons/obj/custom_items/yotin_knife.dmi b/icons/obj/custom_items/yotin_knife.dmi
new file mode 100644
index 00000000000..80724c8faa1
Binary files /dev/null and b/icons/obj/custom_items/yotin_knife.dmi differ
diff --git a/icons/turf/map_placeholders.dmi b/icons/turf/map_placeholders.dmi
index 1f10dbd656a..8fdec8d22ec 100644
Binary files a/icons/turf/map_placeholders.dmi and b/icons/turf/map_placeholders.dmi differ
diff --git a/maps/_common/areas/shuttles.dm b/maps/_common/areas/shuttles.dm
index bc50eff3a54..96cf4af643e 100644
--- a/maps/_common/areas/shuttles.dm
+++ b/maps/_common/areas/shuttles.dm
@@ -41,7 +41,7 @@
/area/shuttle/arrival/station
icon_state = "shuttle"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
station_area = 1
/area/shuttle/escape
@@ -51,7 +51,7 @@
/area/shuttle/escape/station
name = "\improper Emergency Shuttle Station"
icon_state = "shuttle2"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
station_area = 1
/area/shuttle/escape/centcom
@@ -71,7 +71,7 @@
/area/shuttle/escape_pod1/station
icon_state = "shuttle2"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
station_area = 1
/area/shuttle/escape_pod1/centcom
@@ -89,7 +89,7 @@
/area/shuttle/escape_pod2/station
icon_state = "shuttle2"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
station_area = 1
/area/shuttle/escape_pod2/centcom
@@ -107,7 +107,7 @@
/area/shuttle/escape_pod3/station
icon_state = "shuttle2"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
station_area = 1
/area/shuttle/escape_pod3/centcom
@@ -125,7 +125,7 @@
/area/shuttle/escape_pod5/station
icon_state = "shuttle2"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
station_area = 1
/area/shuttle/escape_pod5/centcom
@@ -157,7 +157,7 @@
/area/shuttle/transport1/station
icon_state = "shuttle"
name = "\improper Transport Shuttle"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
station_area = 1
/area/shuttle/specops/centcom
@@ -169,7 +169,7 @@
/area/shuttle/specops/station
icon_state = "shuttlered2"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
station_area = 1
/area/shuttle/syndicate_elite
@@ -182,7 +182,7 @@
/area/shuttle/syndicate_elite/station
icon_state = "shuttlered2"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
station_area = 1
/area/shuttle/administration
@@ -197,7 +197,7 @@
/area/shuttle/administration/station
name = "\improper Administration Shuttle"
icon_state = "shuttlered2"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
station_area = 1
/area/shuttle/research
diff --git a/maps/_common/areas/special.dm b/maps/_common/areas/special.dm
index 44ba048c521..8ad04594e80 100644
--- a/maps/_common/areas/special.dm
+++ b/maps/_common/areas/special.dm
@@ -134,7 +134,7 @@
name = "\improper Surface of the Station"
icon_state = "southwest"
station_area = 1
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
/area/syndicate_station/above
name = "\improper Above the Station"
@@ -147,13 +147,13 @@
/area/syndicate_station/caverns
name = "\improper Caverns"
icon_state = "southeast"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
/area/syndicate_station/arrivals_dock
name = "\improper Docked with Station"
icon_state = "shuttle"
station_area = 1
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
/area/syndicate_station/transit
name = "\improper Hyperspace"
@@ -190,7 +190,7 @@
name = "\improper Surface of the Station"
icon_state = "southwest"
station_area = 1
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
/area/skipjack_station/above
name = "\improper Above the Station"
@@ -203,7 +203,7 @@
/area/skipjack_station/cavern
name = "\improper Caverns"
icon_state = "southeast"
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
//DJSTATION
@@ -249,7 +249,7 @@
name = "\improper Docked with station"
icon_state = "southwest"
station_area = 1
- base_turf = /turf/simulated/floor/asteroid
+ base_turf = /turf/simulated/floor/asteroid/ash
/area/beach
name = "Keelin's private beach"
diff --git a/maps/aurora/aurora-1_centcomm.dmm b/maps/aurora/aurora-1_centcomm.dmm
index 208c4289da1..da9e6e83e87 100644
--- a/maps/aurora/aurora-1_centcomm.dmm
+++ b/maps/aurora/aurora-1_centcomm.dmm
@@ -3716,7 +3716,7 @@
/turf/space/transit/north/shuttlespace_ns12,
/area/template_noop)
"akd" = (
-/turf/simulated/shuttle/plating,
+/turf/space,
/turf/simulated/shuttle/wall/dark{
dir = 8;
icon_state = "diagonalWall3"
@@ -3744,7 +3744,7 @@
/turf/template_noop,
/area/shuttle/syndicate_elite/mothership)
"akh" = (
-/turf/simulated/shuttle/plating,
+/turf/space,
/turf/simulated/shuttle/wall/dark{
dir = 6;
icon_state = "diagonalWall3"
@@ -4309,8 +4309,9 @@
/turf/space/transit/north/shuttlespace_ns8,
/area/template_noop)
"alt" = (
-/turf/simulated/shuttle/plating,
+/turf/space,
/turf/simulated/shuttle/wall/dark{
+ dir = 5;
icon_state = "diagonalWall3"
},
/area/shuttle/syndicate_elite/mothership)
@@ -4329,7 +4330,7 @@
/turf/simulated/shuttle/plating,
/area/shuttle/syndicate_elite/mothership)
"alv" = (
-/turf/simulated/shuttle/plating,
+/turf/space,
/turf/simulated/shuttle/wall/dark{
dir = 4;
icon_state = "diagonalWall3"
@@ -22116,6 +22117,42 @@
icon_state = "diagonalWall3"
},
/area/space)
+"aWO" = (
+/turf/space,
+/turf/simulated/shuttle/wall/dark{
+ dir = 8;
+ icon_state = "diagonalWall3"
+ },
+/area/syndicate_mothership{
+ name = "\improper Ninja Base"
+ })
+"aWP" = (
+/turf/space,
+/turf/simulated/shuttle/wall/dark{
+ dir = 6;
+ icon_state = "diagonalWall3"
+ },
+/area/syndicate_mothership{
+ name = "\improper Ninja Base"
+ })
+"aWQ" = (
+/obj/structure/table/rack,
+/obj/item/weapon/storage/toolbox/syndicate,
+/turf/simulated/shuttle/floor{
+ icon_state = "floor4"
+ },
+/area/syndicate_mothership{
+ name = "\improper Ninja Base"
+ })
+"aWR" = (
+/turf/space,
+/turf/simulated/shuttle/wall/dark{
+ dir = 4;
+ icon_state = "diagonalWall3"
+ },
+/area/syndicate_mothership{
+ name = "\improper Ninja Base"
+ })
(1,1,1) = {"
aaa
@@ -61748,7 +61785,7 @@ aaM
aaM
aaM
ahq
-aki
+aWO
akj
akF
akK
@@ -62263,7 +62300,7 @@ aaM
aaM
ahq
akk
-aky
+aWQ
aky
aky
akW
@@ -62776,7 +62813,7 @@ aaM
aaM
aaM
ahq
-aki
+aWP
akj
akF
akK
@@ -62784,7 +62821,7 @@ akK
akZ
akj
akj
-aki
+aWR
ahq
aaM
aaM
diff --git a/maps/aurora/aurora-6_surface.dmm b/maps/aurora/aurora-6_surface.dmm
index 1cbd0ac67e9..d483d1ae617 100644
--- a/maps/aurora/aurora-6_surface.dmm
+++ b/maps/aurora/aurora-6_surface.dmm
@@ -30,7 +30,7 @@
/turf/simulated/floor/airless,
/area/solar/fore)
"ag" = (
-/turf/simulated/mineral,
+/turf/simulated/mineral/surface,
/area/mine/unexplored)
"ah" = (
/obj/structure/cable/yellow,
@@ -7495,7 +7495,7 @@
/turf/simulated/floor/tiled,
/area/tcommsat/entrance)
"nj" = (
-/turf/simulated/mineral,
+/turf/simulated/mineral/surface,
/area/tcommsat/entrance)
"nk" = (
/obj/structure/extinguisher_cabinet{
@@ -15044,7 +15044,7 @@
/turf/simulated/floor/wood,
/area/crew_quarters/sleep/bedrooms)
"BM" = (
-/turf/simulated/mineral,
+/turf/simulated/mineral/surface,
/area/mine/explored)
"BN" = (
/obj/structure/disposalpipe/segment,
@@ -15180,7 +15180,7 @@
/turf/simulated/floor/plating,
/area/hallway/secondary/entry/aft)
"BZ" = (
-/turf/simulated/mineral,
+/turf/simulated/mineral/surface,
/area/bridge/levela)
"Ca" = (
/obj/structure/ladder/up{
diff --git a/maps/aurora/code/aurora.dm b/maps/aurora/code/aurora.dm
index 4b785211c1a..543533bf78f 100644
--- a/maps/aurora/code/aurora.dm
+++ b/maps/aurora/code/aurora.dm
@@ -13,10 +13,10 @@
base_turf_by_z = list(
"1" = /turf/space,
"2" = /turf/space,
- "3" = /turf/simulated/floor/asteroid/ash,
- "4" = /turf/simulated/floor/asteroid/ash,
- "5" = /turf/simulated/floor/asteroid/ash,
- "6" = /turf/space,
+ "3" = /turf/space,
+ "4" = /turf/simulated/floor/asteroid/ash/rocky,
+ "5" = /turf/simulated/floor/asteroid/ash/rocky,
+ "6" = /turf/simulated/floor/asteroid/ash,
"7" = /turf/space,
"8" = /turf/space,
"9" = /turf/space