Merge branch 'master' of https://github.com/tgstation/tgstation into TiredOfTheInconsistency

This commit is contained in:
Cyberboss
2017-03-24 16:34:20 -04:00
71 changed files with 522 additions and 399 deletions
+29 -15
View File
@@ -2493,7 +2493,8 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/door/airlock/maintenance_hatch{
name = "Maintenance Hatch";
req_access_txt = "12"
req_access_txt = "0";
req_one_access_txt = "32;47;48"
},
/obj/effect/turf_decal/stripes/line{
dir = 2
@@ -9688,7 +9689,7 @@
/obj/structure/table/wood,
/obj/effect/decal/cleanable/dirt,
/obj/item/clothing/suit/suspenders,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/turf/open/floor/plasteel/redblue,
/area/maintenance/fpmaint2/fore_port_maintenance)
"atx" = (
@@ -32058,7 +32059,7 @@
/area/space)
"bjo" = (
/obj/structure/rack,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
name = "2maintenance loot spawner"
@@ -38443,10 +38444,13 @@
/turf/closed/wall/r_wall,
/area/engine/break_room)
"bvt" = (
/obj/machinery/computer/atmos_control,
/obj/machinery/status_display{
pixel_x = -32
},
/obj/structure/cable/white{
icon_state = "0-4"
},
/obj/machinery/modular_computer/console/preset/engineering,
/turf/open/floor/plasteel/caution{
dir = 8
},
@@ -38466,6 +38470,9 @@
name = "Atmospheric Technician"
},
/obj/effect/turf_decal/bot,
/obj/structure/cable/white{
icon_state = "1-8"
},
/turf/open/floor/plasteel,
/area/atmos)
"bvw" = (
@@ -57270,9 +57277,6 @@
/turf/open/floor/plating,
/area/engine/engineering)
"cde" = (
/obj/machinery/computer/monitor{
name = "Engineering Power Monitoring Console"
},
/obj/machinery/firealarm{
dir = 8;
pixel_x = -24;
@@ -57289,6 +57293,7 @@
dir = 1;
name = "engineering camera"
},
/obj/machinery/modular_computer/console/preset/engineering,
/turf/open/floor/plasteel/vault,
/area/engine/engineering)
"cdf" = (
@@ -97079,8 +97084,8 @@
})
"dAG" = (
/obj/structure/rack,
/obj/effect/landmark/costume,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/item/clothing/neck/tie/black,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/neutral/side{
@@ -97796,8 +97801,8 @@
"dBY" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/rack,
/obj/effect/landmark/costume,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/effect/spawner/lootdrop/maintenance,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/neutral/side{
@@ -98551,7 +98556,7 @@
})
"dDp" = (
/obj/structure/closet/crate,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/effect/spawner/lootdrop/maintenance,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
@@ -103451,7 +103456,7 @@
/area/maintenance/fpmaint2/aft_port_maintenance)
"dMJ" = (
/obj/structure/closet,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/effect/spawner/lootdrop/maintenance,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -111346,7 +111351,7 @@
/obj/structure/table/wood,
/obj/effect/decal/cleanable/dirt,
/obj/item/clothing/shoes/jackboots,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/structure/sign/poster/contraband/random{
pixel_y = -32
},
@@ -112886,6 +112891,15 @@
/area/engine/gravity_generator{
name = "Atmospherics Engine"
})
"ehz" = (
/obj/structure/chair/office/dark{
dir = 8
},
/obj/structure/cable/white{
icon_state = "4-8"
},
/turf/open/floor/plasteel/neutral,
/area/atmos)
(1,1,1) = {"
aaa
@@ -139729,7 +139743,7 @@ bqf
brq
bsD
aZq
bvu
ehz
bvu
byX
aIZ
+9 -11
View File
@@ -9905,7 +9905,7 @@
/area/maintenance/starboard)
"arI" = (
/obj/structure/rack,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/starboard)
@@ -23791,9 +23791,6 @@
d2 = 4;
icon_state = "0-4"
},
/obj/machinery/computer/monitor{
name = "Engineering Power Monitoring Console"
},
/obj/machinery/status_display{
density = 0;
layer = 4;
@@ -23805,6 +23802,7 @@
dir = 2;
network = list("SS13")
},
/obj/machinery/modular_computer/console/preset/engineering,
/turf/open/floor/plasteel/vault,
/area/engine/engineering)
"aPX" = (
@@ -24416,8 +24414,8 @@
/area/crew_quarters/locker)
"aRa" = (
/obj/structure/rack,
/obj/effect/landmark/costume,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/item/clothing/mask/balaclava,
/obj/machinery/airalarm{
dir = 8;
@@ -51223,8 +51221,8 @@
dir = 8;
layer = 2.9
},
/obj/effect/landmark/costume,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/effect/spawner/lootdrop/costume,
/turf/open/floor/plating,
/area/maintenance/fpmaint2{
name = "Port Maintenance"
@@ -51235,8 +51233,8 @@
dir = 8;
layer = 2.9
},
/obj/effect/landmark/costume,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/effect/spawner/lootdrop/costume,
/turf/open/floor/plating,
/area/maintenance/fpmaint2{
name = "Port Maintenance"
@@ -81754,7 +81752,7 @@
})
"cJY" = (
/obj/structure/rack,
/obj/effect/landmark/costume,
/obj/effect/spawner/lootdrop/costume,
/obj/effect/spawner/lootdrop/maintenance{
lootcount = 2;
name = "2maintenance loot spawner"
+19 -7
View File
@@ -776,9 +776,10 @@
tag = "icon-0-2";
icon_state = "0-2"
},
/obj/structure/grille,
/obj/structure/window/reinforced/fulltile,
/turf/open/floor/plating,
/obj/machinery/modular_computer/console/preset/command,
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/bridge)
"abo" = (
/turf/open/floor/plasteel/vault{
@@ -21889,12 +21890,12 @@
icon_state = "1-2"
},
/obj/effect/turf_decal/bot,
/obj/structure/cable/white{
icon_state = "2-4"
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"aIx" = (
/obj/machinery/computer/monitor{
name = "Engineering Power Monitoring Console"
},
/obj/machinery/light_switch{
pixel_x = 38;
pixel_y = 24
@@ -21907,6 +21908,7 @@
req_access_txt = "10"
},
/obj/effect/turf_decal/bot,
/obj/machinery/modular_computer/console/preset/engineering,
/turf/open/floor/plasteel,
/area/engine/engineering)
"aIy" = (
@@ -41983,6 +41985,16 @@
},
/turf/open/floor/circuit/green,
/area/engine/engineering)
"buW" = (
/obj/structure/cable/white{
tag = "icon-0-2";
icon_state = "0-2"
},
/obj/machinery/modular_computer/console/preset/research,
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/bridge)
(1,1,1) = {"
aaa
@@ -84210,7 +84222,7 @@ aav
aaH
aaQ
abb
abn
buW
abF
ack
adc
@@ -45713,13 +45713,11 @@
},
/area/engine/engineering)
"bME" = (
/obj/machinery/computer/monitor{
name = "Engineering Power Monitoring Console"
},
/obj/structure/cable{
icon_state = "0-2";
d2 = 2
},
/obj/machinery/modular_computer/console/preset/engineering,
/turf/open/floor/plasteel/yellow/side{
dir = 1
},
+6
View File
@@ -1,6 +1,12 @@
//These are all the different status effects. Use the paths for each effect in the defines.
#define STATUS_EFFECT_MULTIPLE 0 //if it allows multiple instances of the effect
#define STATUS_EFFECT_UNIQUE 1 //if it allows only one, preventing new instances
#define STATUS_EFFECT_REPLACE 2 //if it allows only one, but new instances replace
#define BASIC_STATUS_EFFECT /datum/status_effect //Has no effect.
///////////
+5 -5
View File
@@ -214,7 +214,7 @@ Proc for attack log creation, because really why not
stoplag()
if (progress)
progbar.update(world.time - starttime)
if(!user || !target)
if(QDELETED(user) || QDELETED(target))
. = 0
break
if(uninterruptible)
@@ -266,11 +266,11 @@ Proc for attack log creation, because really why not
drifting = 0
Uloc = user.loc
if(!user || user.stat || user.weakened || user.stunned || (!drifting && user.loc != Uloc) || (extra_checks && !extra_checks.Invoke()))
if(QDELETED(user) || user.stat || user.weakened || user.stunned || (!drifting && user.loc != Uloc) || (extra_checks && !extra_checks.Invoke()))
. = 0
break
if(Tloc && (!target || Tloc != target.loc))
if(!QDELETED(Tloc) && (QDELETED(target) || Tloc != target.loc))
if((Uloc != Tloc || Tloc != user) && !drifting)
. = 0
break
@@ -316,7 +316,7 @@ Proc for attack log creation, because really why not
sleep(1)
if(progress)
progbar.update(world.time - starttime)
if(!user || !targets)
if(QDELETED(user) || !targets)
. = 0
break
if(uninterruptible)
@@ -327,7 +327,7 @@ Proc for attack log creation, because really why not
user_loc = user.loc
for(var/atom/target in targets)
if((!drifting && user_loc != user.loc) || originalloc[target] != target.loc || user.get_active_held_item() != holding || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
if((!drifting && user_loc != user.loc) || QDELETED(target) || originalloc[target] != target.loc || user.get_active_held_item() != holding || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
. = 0
break mainloop
if(progbar)
+14 -1
View File
@@ -81,12 +81,25 @@ SUBSYSTEM_DEF(persistence)
var/saved_messages = json_decode(saved_json)
for(var/item in saved_messages)
var/turf/T = locate(item["x"], item["y"], ZLEVEL_STATION)
if(!islist(item))
continue
var/xvar = item["x"]
var/yvar = item["y"]
var/zvar = item["z"]
if(!xvar || !yvar || !zvar)
continue
var/turf/T = locate(xvar, yvar, zvar)
if(!isturf(T))
continue
if(locate(/obj/structure/chisel_message) in T)
continue
var/obj/structure/chisel_message/M = new(T)
M.unpack(item)
if(!M.loc)
M.persists = FALSE
+5 -1
View File
@@ -333,6 +333,10 @@
/datum/action/item_action/hands_free/shift_nerves
name = "Shift Nerves"
/datum/action/item_action/explosive_implant
check_flags = 0
name = "Activate Explosive Implant"
/datum/action/item_action/toggle_research_scanner
name = "Toggle Research Scanner"
button_icon_state = "scan_mode"
@@ -467,4 +471,4 @@
/datum/action/item_action/bhop
name = "Activate Jump Boots"
desc = "Activates the jump boot's internal propulsion system, allowing the user to dash over 4-wide gaps."
button_icon_state = "jetboot"
button_icon_state = "jetboot"
+3 -1
View File
@@ -44,6 +44,7 @@
id = "vanguard"
duration = 200
tick_interval = 0 //tick as fast as possible
status_type = STATUS_EFFECT_REPLACE
alert_type = /obj/screen/alert/status_effect/vanguard
var/datum/progressbar/progbar
@@ -58,7 +59,8 @@
if(istype(L)) //this is probably more safety than actually needed
var/vanguard = L.stun_absorption["vanguard"]
desc = initial(desc)
desc += "<br><b>[vanguard["stuns_absorbed"] * 2]</b> seconds of stuns held back.<br><b>[round(min(vanguard["stuns_absorbed"] * 0.25, 20)) * 2]</b> seconds of stun will affect you."
desc += "<br><b>[vanguard["stuns_absorbed"] * 2]</b> seconds of stuns held back.\
[ratvar_awakens ? "":"<br><b>[round(min(vanguard["stuns_absorbed"] * 0.25, 20)) * 2]</b> seconds of stun will affect you."]"
..()
/datum/status_effect/vanguard_shield/Destroy()
+1 -1
View File
@@ -1,7 +1,7 @@
/datum/status_effect/freon
id = "frozen"
duration = 100
unique = TRUE
status_type = STATUS_EFFECT_UNIQUE
alert_type = /obj/screen/alert/status_effect/freon
var/icon/cube
+11 -3
View File
@@ -9,7 +9,7 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f
var/duration = -1 //How long the status effect lasts in DECISECONDS. Enter -1 for an effect that never ends unless removed through some means.
var/tick_interval = 10 //How many deciseconds between ticks, approximately. Leave at 10 for every second.
var/mob/living/owner //The mob affected by the status effect.
var/unique = TRUE //If there can be multiple status effects of this type on one mob.
var/status_type = STATUS_EFFECT_UNIQUE //How many of the effect can be on one mob, and what happens when you try to add another
var/alert_type = /obj/screen/alert/status_effect //the alert thrown by the status effect, contains name and description
/datum/status_effect/New(mob/living/new_owner)
@@ -57,6 +57,11 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f
/datum/status_effect/proc/on_apply() //Called whenever the buff is applied.
/datum/status_effect/proc/tick() //Called every tick.
/datum/status_effect/proc/on_remove() //Called whenever the buff expires or is removed.
/datum/status_effect/proc/be_replaced() //Called instead of on_remove when a status effect is replaced by itself
owner.clear_alert(id)
LAZYREMOVE(owner.status_effects, src)
owner = null
qdel(src)
////////////////
// ALERT HOOK //
@@ -76,8 +81,11 @@ var/global/list/all_status_effects = list() //a list of all status effects, if f
var/datum/status_effect/S1 = effect
LAZYINITLIST(status_effects)
for(var/datum/status_effect/S in status_effects)
if(S.id == initial(S1.id) && initial(S1.unique))
return
if(S.id == initial(S1.id) && S.status_type)
if(S.status_type == STATUS_EFFECT_REPLACE)
S.be_replaced()
else
return
S1 = new effect(src)
. = S1
@@ -112,7 +112,7 @@
/obj/effect/clockwork/spatial_gateway/Bumped(atom/A)
..()
if(isliving(A) || istype(A, /obj/item))
if(A && !QDELETED(A))
pass_through_gateway(A)
/obj/effect/clockwork/spatial_gateway/proc/pass_through_gateway(atom/movable/A, no_cost)
@@ -17,11 +17,20 @@
timeout_time = 50
/datum/clockwork_scripture/ranged_ability/linked_vanguard/check_special_requirements()
if(islist(invoker.stun_absorption) && invoker.stun_absorption["vanguard"] && invoker.stun_absorption["vanguard"]["end_time"] > world.time)
if(!ratvar_awakens && islist(invoker.stun_absorption) && invoker.stun_absorption["vanguard"] && invoker.stun_absorption["vanguard"]["end_time"] > world.time)
to_chat(invoker, "<span class='warning'>You are already shielded by a Vanguard!</span>")
return FALSE
return TRUE
/datum/clockwork_scripture/ranged_ability/linked_vanguard/scripture_effects()
if(ratvar_awakens) //hey, ratvar's up! give everybody stun immunity.
for(var/mob/living/L in view(7, get_turf(invoker)))
if(L.stat != DEAD && is_servant_of_ratvar(L))
L.apply_status_effect(STATUS_EFFECT_VANGUARD)
CHECK_TICK
return TRUE
return ..()
//Judicial Marker: places a judicial marker at a target location
/datum/clockwork_scripture/ranged_ability/judicial_marker
name = "Judicial Marker"
@@ -74,13 +74,19 @@
quickbind_desc = "Allows you to temporarily absorb stuns. All stuns absorbed will affect you when disabled."
/datum/clockwork_scripture/vanguard/check_special_requirements()
if(islist(invoker.stun_absorption) && invoker.stun_absorption["vanguard"] && invoker.stun_absorption["vanguard"]["end_time"] > world.time)
if(!ratvar_awakens && islist(invoker.stun_absorption) && invoker.stun_absorption["vanguard"] && invoker.stun_absorption["vanguard"]["end_time"] > world.time)
to_chat(invoker, "<span class='warning'>You are already shielded by a Vanguard!</span>")
return FALSE
return TRUE
/datum/clockwork_scripture/vanguard/scripture_effects()
invoker.apply_status_effect(STATUS_EFFECT_VANGUARD)
if(ratvar_awakens)
for(var/mob/living/L in view(7, get_turf(invoker)))
if(L.stat != DEAD && is_servant_of_ratvar(L))
L.apply_status_effect(STATUS_EFFECT_VANGUARD)
CHECK_TICK
else
invoker.apply_status_effect(STATUS_EFFECT_VANGUARD)
return TRUE
+5 -3
View File
@@ -37,9 +37,11 @@
active_apc.update_icon()
active_apc = null
/obj/machinery/computer/apc_control/attack_ai(mob/living/AI) //You already have APC access, cheater!
AI << "<span class='warning'>[src] does not support AI control.</span>"
return
/obj/machinery/computer/apc_control/attack_ai(mob/living/AI)
if(!IsAdminGhost(src))
to_chat(AI,"<span class='warning'>[src] does not support AI control.</span>") //You already have APC access, cheater!
return
..(AI)
/obj/machinery/computer/apc_control/proc/check_apc(obj/machinery/power/apc/APC)
return APC.z == z && !APC.malfhack && !APC.aidisabled && !APC.emagged && !APC.stat && !istype(APC.area, /area/ai_monitored) && !APC.area.outdoors
-1
View File
@@ -34,7 +34,6 @@
/obj/item/toy/redbutton = 2,
/obj/item/toy/talking/owl = 2,
/obj/item/toy/talking/griffin = 2,
/obj/item/toy/talking/skeleton = 2,
/obj/item/weapon/coin/antagtoken = 2,
/obj/item/stack/tile/fakespace/loaded = 2,
/obj/item/stack/tile/fakepit/loaded = 2,
+3 -3
View File
@@ -12,7 +12,7 @@ var/const/SAFETY_COOLDOWN = 100
var/icon_name = "grinder-o"
var/blood = 0
var/eat_dir = WEST
var/amount_produced = 1
var/amount_produced = 50
var/datum/material_container/materials
var/crush_damage = 1000
var/eat_victim_items = TRUE
@@ -40,9 +40,9 @@ var/const/SAFETY_COOLDOWN = 100
mat_mod = 2 * B.rating
mat_mod *= 50000
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
amt_made = 25 * M.rating //% of materials salvaged
amt_made = 12.5 * M.rating //% of materials salvaged
materials.max_amount = mat_mod
amount_produced = min(100, amt_made)
amount_produced = min(50, amt_made) + 50
/obj/machinery/recycler/examine(mob/user)
..()
+3 -4
View File
@@ -33,7 +33,7 @@
light_color = LIGHT_COLOR_BROWN
/obj/machinery/computer/slot_machine/New()
/obj/machinery/computer/slot_machine/Initialize()
..()
jackpots = rand(1, 4) //false hope
plays = rand(75, 200)
@@ -47,9 +47,8 @@
toggle_reel_spin(0)
for(var/cointype in typesof(/obj/item/weapon/coin))
var/obj/item/weapon/coin/C = new cointype(src)
coinvalues["[cointype]"] = C.value
qdel(C)
var/obj/item/weapon/coin/C = cointype
coinvalues["[cointype]"] = initial(C.value)
/obj/machinery/computer/slot_machine/Destroy()
if(balance)
+1
View File
@@ -528,6 +528,7 @@
if(icon_vend) //Show the vending animation if needed
flick(icon_vend,src)
new R.product_path(get_turf(src))
feedback_add_details("vending_machine_usage","[R.product_path]|[src.type]")
vend_ready = 1
return
-147
View File
@@ -84,153 +84,6 @@
start_landmarks_list -= src
return ..()
//Costume spawner landmarks
/obj/effect/landmark/costume/New() //costume spawner, selects a random subclass and disappears
var/list/options = typesof(/obj/effect/landmark/costume)
var/PICK= options[rand(1,options.len)]
new PICK(src.loc)
qdel(src)
//SUBCLASSES. Spawn a bunch of items and disappear likewise
/obj/effect/landmark/costume/chicken/New()
new /obj/item/clothing/suit/chickensuit(src.loc)
new /obj/item/clothing/head/chicken(src.loc)
new /obj/item/weapon/reagent_containers/food/snacks/egg(src.loc)
qdel(src)
/obj/effect/landmark/costume/gladiator/New()
new /obj/item/clothing/under/gladiator(src.loc)
new /obj/item/clothing/head/helmet/gladiator(src.loc)
qdel(src)
/obj/effect/landmark/costume/madscientist/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/suit/toggle/labcoat/mad(src.loc)
qdel(src)
/obj/effect/landmark/costume/elpresidente/New()
new /obj/item/clothing/under/gimmick/rank/captain/suit(src.loc)
new /obj/item/clothing/head/flatcap(src.loc)
new /obj/item/clothing/mask/cigarette/cigar/havana(src.loc)
new /obj/item/clothing/shoes/jackboots(src.loc)
qdel(src)
/obj/effect/landmark/costume/nyangirl/New()
new /obj/item/clothing/under/schoolgirl(src.loc)
new /obj/item/clothing/head/kitty(src.loc)
new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc)
qdel(src)
/obj/effect/landmark/costume/maid/New()
new /obj/item/clothing/under/skirt/black(src.loc)
var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears )
new CHOICE(src.loc)
new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc)
qdel(src)
/obj/effect/landmark/costume/butler/New()
new /obj/item/clothing/tie/waistcoat(src.loc)
new /obj/item/clothing/under/suit_jacket(src.loc)
new /obj/item/clothing/head/that(src.loc)
qdel(src)
/obj/effect/landmark/costume/highlander/New()
new /obj/item/clothing/under/kilt(src.loc)
new /obj/item/clothing/head/beret(src.loc)
qdel(src)
/obj/effect/landmark/costume/prig/New()
new /obj/item/clothing/tie/waistcoat(src.loc)
new /obj/item/clothing/glasses/monocle(src.loc)
var/CHOICE= pick( /obj/item/clothing/head/bowler, /obj/item/clothing/head/that)
new CHOICE(src.loc)
new /obj/item/clothing/shoes/sneakers/black(src.loc)
new /obj/item/weapon/cane(src.loc)
new /obj/item/clothing/under/sl_suit(src.loc)
new /obj/item/clothing/mask/fakemoustache(src.loc)
qdel(src)
/obj/effect/landmark/costume/plaguedoctor/New()
new /obj/item/clothing/suit/bio_suit/plaguedoctorsuit(src.loc)
new /obj/item/clothing/head/plaguedoctorhat(src.loc)
new /obj/item/clothing/mask/gas/plaguedoctor(src.loc)
qdel(src)
/obj/effect/landmark/costume/nightowl/New()
new /obj/item/clothing/suit/toggle/owlwings(src.loc)
new /obj/item/clothing/under/owl(src.loc)
new /obj/item/clothing/mask/gas/owl_mask(src.loc)
qdel(src)
/obj/effect/landmark/costume/thegriffin/New()
new /obj/item/clothing/suit/toggle/owlwings/griffinwings(src.loc)
new /obj/item/clothing/shoes/griffin(src.loc)
new /obj/item/clothing/under/griffin(src.loc)
new /obj/item/clothing/head/griffin(src.loc)
qdel(src)
/obj/effect/landmark/costume/waiter/New()
new /obj/item/clothing/under/waiter(src.loc)
var/CHOICE= pick( /obj/item/clothing/head/kitty, /obj/item/clothing/head/rabbitears)
new CHOICE(src.loc)
new /obj/item/clothing/suit/apron(src.loc)
qdel(src)
/obj/effect/landmark/costume/pirate/New()
new /obj/item/clothing/under/pirate(src.loc)
new /obj/item/clothing/suit/pirate(src.loc)
var/CHOICE = pick( /obj/item/clothing/head/pirate , /obj/item/clothing/head/bandana )
new CHOICE(src.loc)
new /obj/item/clothing/glasses/eyepatch(src.loc)
qdel(src)
/obj/effect/landmark/costume/commie/New()
new /obj/item/clothing/under/soviet(src.loc)
new /obj/item/clothing/head/ushanka(src.loc)
qdel(src)
/obj/effect/landmark/costume/imperium_monk/New()
new /obj/item/clothing/suit/imperium_monk(src.loc)
if (prob(25))
new /obj/item/clothing/mask/gas/cyborg(src.loc)
qdel(src)
/obj/effect/landmark/costume/holiday_priest/New()
new /obj/item/clothing/suit/holidaypriest(src.loc)
qdel(src)
/obj/effect/landmark/costume/marisawizard/fake/New()
new /obj/item/clothing/shoes/sandal/marisa(src.loc)
new /obj/item/clothing/head/wizard/marisa/fake(src.loc)
new/obj/item/clothing/suit/wizrobe/marisa/fake(src.loc)
qdel(src)
/obj/effect/landmark/costume/cutewitch/New()
new /obj/item/clothing/under/sundress(src.loc)
new /obj/item/clothing/head/witchwig(src.loc)
new /obj/item/weapon/staff/broom(src.loc)
qdel(src)
/obj/effect/landmark/costume/fakewizard/New()
new /obj/item/clothing/shoes/sandal(src.loc)
new /obj/item/clothing/suit/wizrobe/fake(src.loc)
new /obj/item/clothing/head/wizard/fake(src.loc)
new /obj/item/weapon/staff/(src.loc)
qdel(src)
/obj/effect/landmark/costume/sexyclown/New()
new /obj/item/clothing/mask/gas/sexyclown(src.loc)
new /obj/item/clothing/under/rank/clown/sexy(src.loc)
qdel(src)
/obj/effect/landmark/costume/sexymime/New()
new /obj/item/clothing/mask/gas/sexymime(src.loc)
new /obj/item/clothing/under/sexymime(src.loc)
qdel(src)
//Department Security spawns
/obj/effect/landmark/start/depsec
@@ -0,0 +1,170 @@
/obj/effect/spawner/bundle
name = "bundle spawner"
icon = 'icons/mob/screen_gen.dmi'
icon_state = "x2"
color = "#00FF00"
var/list/items
/obj/effect/spawner/bundle/Initialize(mapload)
..()
if(items && items.len)
var/turf/T = get_turf(src)
for(var/path in items)
new path(T)
qdel(src)
/obj/effect/spawner/bundle/costume/chicken
name = "chicken costume spawner"
items = list(
/obj/item/clothing/suit/chickensuit,
/obj/item/clothing/head/chicken,
/obj/item/weapon/reagent_containers/food/snacks/egg)
/obj/effect/spawner/bundle/costume/gladiator
name = "gladitator costume spawner"
items = list(
/obj/item/clothing/under/gladiator,
/obj/item/clothing/head/helmet/gladiator)
/obj/effect/spawner/bundle/costume/madscientist
name = "mad scientist costume spawner"
items = list(
/obj/item/clothing/under/gimmick/rank/captain/suit,
/obj/item/clothing/head/flatcap,
/obj/item/clothing/suit/toggle/labcoat/mad)
/obj/effect/spawner/bundle/costume/elpresidente
name = "el presidente costume spawner"
items = list(
/obj/item/clothing/under/gimmick/rank/captain/suit,
/obj/item/clothing/head/flatcap,
/obj/item/clothing/mask/cigarette/cigar/havana,
/obj/item/clothing/shoes/jackboots)
/obj/effect/spawner/bundle/costume/nyangirl
name = "nyangirl costume spawner"
items = list(
/obj/item/clothing/under/schoolgirl,
/obj/item/clothing/head/kitty,
/obj/item/clothing/glasses/sunglasses/blindfold)
/obj/effect/spawner/bundle/costume/maid
name = "maid costume spawner"
items = list(
/obj/item/clothing/under/skirt/black,
/obj/effect/spawner/lootdrop/minor/beret_or_rabbitears,
/obj/item/clothing/glasses/sunglasses/blindfold)
/obj/effect/spawner/bundle/costume/butler
name = "butler costume spawner"
items = list(
/obj/item/clothing/tie/waistcoat,
/obj/item/clothing/under/suit_jacket,
/obj/item/clothing/head/that)
/obj/effect/spawner/bundle/costume/highlander
name = "highlander costume spawner"
items = list(
/obj/item/clothing/under/kilt,
/obj/item/clothing/head/beret)
/obj/effect/spawner/bundle/costume/prig
name = "prig costume spawner"
items = list(
/obj/item/clothing/tie/waistcoat,
/obj/item/clothing/glasses/monocle,
/obj/effect/spawner/lootdrop/minor/bowler_or_that,
/obj/item/clothing/shoes/sneakers/black,
/obj/item/weapon/cane,
/obj/item/clothing/under/sl_suit,
/obj/item/clothing/mask/fakemoustache)
/obj/effect/spawner/bundle/costume/plaguedoctor
name = "plague doctor costume spawner"
items = list(
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit,
/obj/item/clothing/head/plaguedoctorhat,
/obj/item/clothing/mask/gas/plaguedoctor)
/obj/effect/spawner/bundle/costume/nightowl
name = "night owl costume spawner"
items = list(
/obj/item/clothing/suit/toggle/owlwings,
/obj/item/clothing/under/owl,
/obj/item/clothing/mask/gas/owl_mask)
/obj/effect/spawner/bundle/costume/griffin
name = "griffin costume spawner"
items = list(
/obj/item/clothing/suit/toggle/owlwings/griffinwings,
/obj/item/clothing/shoes/griffin,
/obj/item/clothing/under/griffin,
/obj/item/clothing/head/griffin)
/obj/effect/spawner/bundle/costume/waiter
name = "waiter costume spawner"
items = list(
/obj/item/clothing/under/waiter,
/obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears,
/obj/item/clothing/suit/apron)
/obj/effect/spawner/bundle/costume/pirate
name = "pirate costume spawner"
items = list(
/obj/item/clothing/under/pirate,
/obj/item/clothing/suit/pirate,
/obj/effect/spawner/lootdrop/minor/pirate_or_bandana,
/obj/item/clothing/glasses/eyepatch)
/obj/effect/spawner/bundle/costume/commie
name = "commie costume spawner"
items = list(
/obj/item/clothing/under/soviet,
/obj/item/clothing/head/ushanka)
/obj/effect/spawner/bundle/costume/imperium_monk
name = "imperium monk costume spawner"
items = list(
/obj/item/clothing/suit/imperium_monk,
/obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask)
/obj/effect/spawner/bundle/costume/holiday_priest
name = "holiday priest costume spawner"
items = list(
/obj/item/clothing/suit/holidaypriest)
/obj/effect/spawner/bundle/costume/marisawizard
name = "marisa wizard costume spawner"
items = list(
/obj/item/clothing/shoes/sandal/marisa,
/obj/item/clothing/head/wizard/marisa/fake,
/obj/item/clothing/suit/wizrobe/marisa/fake)
/obj/effect/spawner/bundle/costume/cutewitch
name = "cute witch costume spawner"
items = list(
/obj/item/clothing/under/sundress,
/obj/item/clothing/head/witchwig,
/obj/item/weapon/staff/broom)
/obj/effect/spawner/bundle/costume/wizard
name = "wizard costume spawner"
items = list(
/obj/item/clothing/shoes/sandal,
/obj/item/clothing/suit/wizrobe/fake,
/obj/item/clothing/head/wizard/fake,
/obj/item/weapon/staff)
/obj/effect/spawner/bundle/costume/sexyclown
name = "sexy clown costume spawner"
items = list(
/obj/item/clothing/mask/gas/sexyclown,
/obj/item/clothing/under/rank/clown/sexy)
/obj/effect/spawner/bundle/costume/sexymime
name = "sexy mime costume spawner"
items = list(
/obj/item/clothing/mask/gas/sexymime,
/obj/item/clothing/under/sexymime)
+52 -8
View File
@@ -3,24 +3,27 @@
icon_state = "x2"
color = "#00FF00"
var/lootcount = 1 //how many items will be spawned
var/lootdoubles = 1 //if the same item can be spawned twice
var/lootdoubles = TRUE //if the same item can be spawned twice
var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect)
/obj/effect/spawner/lootdrop/New()
/obj/effect/spawner/lootdrop/Initialize(mapload)
..()
if(loot && loot.len)
for(var/i = lootcount, i > 0, i--)
if(!loot.len) break
var/turf/T = get_turf(src)
while(lootcount && loot.len)
var/lootspawn = pickweight(loot)
if(!lootdoubles)
loot.Remove(lootspawn)
if(lootspawn)
new lootspawn(get_turf(src))
new lootspawn(T)
lootcount--
qdel(src)
/obj/effect/spawner/lootdrop/armory_contraband
name = "armory contraband gun spawner"
lootdoubles = 0
lootdoubles = FALSE
loot = list(
/obj/item/weapon/gun/ballistic/automatic/pistol = 8,
@@ -144,7 +147,7 @@
/obj/item/weapon/wirecutters = 1,
/obj/item/weapon/wrench = 4,
/obj/item/weapon/relic = 3,
/obj/item/weaponcrafting/reciever = 2,
/obj/item/weaponcrafting/receiver = 2,
/obj/item/clothing/head/cone = 2,
/obj/item/weapon/grenade/smokebomb = 2,
/obj/item/device/geiger_counter = 3,
@@ -165,7 +168,7 @@
/obj/effect/spawner/lootdrop/crate_spawner
name = "lootcrate spawner" //USE PROMO CODE "SELLOUT" FOR 20% OFF!
lootdoubles = 0
lootdoubles = FALSE
loot = list(
/obj/structure/closet/crate/secure/loot = 20,
@@ -194,3 +197,44 @@
loot = list(
/obj/effect/decal/remains/xeno = 49,
/obj/effect/spawner/xeno_egg_delivery = 1)
/obj/effect/spawner/lootdrop/costume
name = "random costume spawner"
/obj/effect/spawner/lootdrop/costume/Initialize()
loot = list()
for(var/path in subtypesof(/obj/effect/spawner/bundle/costume))
loot[path] = TRUE
..()
// Minor lootdrops follow
/obj/effect/spawner/lootdrop/minor/beret_or_rabbitears
name = "beret or rabbit ears spawner"
loot = list(
/obj/item/clothing/head/beret = 1,
/obj/item/clothing/head/rabbitears = 1)
/obj/effect/spawner/lootdrop/minor/bowler_or_that
name = "bowler or top hat spawner"
loot = list(
/obj/item/clothing/head/bowler = 1,
/obj/item/clothing/head/that = 1)
/obj/effect/spawner/lootdrop/minor/kittyears_or_rabbitears
name = "kitty ears or rabbit ears spawner"
loot = list(
/obj/item/clothing/head/kitty = 1,
/obj/item/clothing/head/rabbitears = 1)
/obj/effect/spawner/lootdrop/minor/pirate_or_bandana
name = "pirate hat or bandana spawner"
loot = list(
/obj/item/clothing/head/pirate = 1,
/obj/item/clothing/head/bandana = 1)
/obj/effect/spawner/lootdrop/minor/twentyfive_percent_cyborg_mask
name = "25% cyborg mask spawner"
loot = list(
/obj/item/clothing/mask/gas/cyborg = 25,
"" = 75)
+1 -1
View File
@@ -721,7 +721,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
var/mob/M = loc
M.put_in_hands(inserted_item)
else
inserted_item.forceMove(loc)
inserted_item.forceMove(get_turf(src))
to_chat(usr, "<span class='notice'>You remove \the [inserted_item] from \the [src].</span>")
inserted_item = null
update_icon()
@@ -300,7 +300,9 @@
return
/obj/item/device/radio/headset/AltClick(mob/user)
/obj/item/device/radio/headset/AltClick(mob/living/user)
if(!istype(user) || !Adjacent(user) || user.incapacitated())
return
if (command)
use_command = !use_command
to_chat(user, "<span class='notice'>You toggle high-volume mode.</span>")
to_chat(user, "<span class='notice'>You toggle high-volume mode [use_command ? "on" : "off"].</span>")
-75
View File
@@ -554,81 +554,6 @@
chattering = TRUE
phomeme = "griffin"
/obj/item/toy/talking/skeleton
name = "skeleton action figure"
desc = "An action figure modeled after 'Oh-cee', the original content \
skeleton.\nNot suitable for infants or assistants under 36 months \
of age."
icon_state = "skeletonprize"
attack_verb = list("boned", "dunked on", "worked down to the bone")
chattering = TRUE
var/list/regular_messages = list(
"Why was the skeleton such a bad liar? \
Because you can see right through him!",
"When does a skeleton laugh? When something tickles his funny bone!",
"Why couldn't the skeleton win the beauty contest? \
Because he had no body!",
"What do you call a skeleton in the winter? A numbskull!",
"What did the skeleton say before eating? Bone appetit!",
"What type of art do skeletons like? Skulltures!",
"What instrument do skeletons play? The trom-bone!",
"Why are skeletons always so calm? \
Because nothing gets under their skin!",
"How did the skeleton know it was going to rain? \
He could feel it in his bones.",
"Why did the skeleton go to the hospital? \
To get his ghoul stones removed.",
"Why can't skeletons play music in churches? \
Because they have no organs.",
"There's a skeleton inside everyone! Except slime people I guess...",
"The birds are too busy to notice me acting in the shadows!",
"Giraffes have the same number of bones in their necks as humans. \
You should never trust a giraffe.",
"When I meet a dog in the street, I always offer it a bone!",
"In corsetry, a bone is one of the rigid parts of a corset that \
forms its frame and gives it rigidity.",
"A person who plays the trombone is called a trombonist or \
trombone player.",
"Remember, compromise is for those without backbones!",
"If you go up to the captain and say the word 'bone' repeatedly, \
eventually he'll brig you.",
"Yo ho ho, shiver me bones!",
"So what you're saying is, you only love me for my legs?",
"You will never again find socks that match!",
"BONES! BONES! BONES!",
"Bones absorb x-rays, which is why radiation gives you superpowers.",
"Oh-cee! The ORIGINAL CONTENT SKELETON. Suitable for ages 36 months \
and up.",
"I just don't have the heart to judge you.",
"I don't have the stomach for this.",
"I'm a fighter, not a liver.",
"How can I see without eyeballs?",
"Ask your parents about 'boning', before you get pregnant.",
"Remember, a dog is for life, not just for christmas.")
/obj/item/toy/talking/skeleton/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is trying to commit suicide with [src].</span>")
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.set_species(/datum/species/skeleton)
toy_talk(user, "RATTLE ME BONES")
user.Stun(5)
sleep(20)
return OXYLOSS
/obj/item/toy/talking/skeleton/generate_messages()
return list(pick(regular_messages))
/obj/item/toy/talking/skeleton/toy_talk(user, message)
phomeme = pick("sans", "papyrus")
span = "danger [phomeme]"
..()
/*
|| A Deck of Cards for playing various games of chance ||
*/
@@ -3,10 +3,13 @@
desc = "And boom goes the weasel."
icon_state = "explosive"
origin_tech = "materials=2;combat=3;biotech=4;syndicate=4"
actions_types = list(/datum/action/item_action/explosive_implant)
// Explosive implant action is always availible.
var/weak = 2
var/medium = 0.8
var/heavy = 0.4
var/delay = 7
var/popup = FALSE // is the DOUWANNABLOWUP window open?
/obj/item/weapon/implant/explosive/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
@@ -27,8 +30,12 @@
/obj/item/weapon/implant/explosive/activate(cause)
if(!cause || !imp_in)
return 0
if(cause == "action_button" && alert(imp_in, "Are you sure you want to activate your [name]? This will cause you to explode!", "[name] Confirmation", "Yes", "No") != "Yes")
return 0
if(cause == "action_button" || !popup)
popup = TRUE
var/response = alert(imp_in, "Are you sure you want to activate your [name]? This will cause you to explode!", "[name] Confirmation", "Yes", "No")
popup = FALSE
if(response == "No")
return 0
heavy = round(heavy)
medium = round(medium)
weak = round(weak)
+14 -1
View File
@@ -81,7 +81,11 @@
/obj/structure/flora/tree/jungle
name = "tree"
icon_state = "tree"
desc = "It's seriously hampering your view of the jungle."
icon = 'icons/obj/flora/jungletrees.dmi'
pixel_x = -48
pixel_y = -20
/obj/structure/flora/tree/jungle/Initialize()
icon_state = "[icon_state][rand(1, 3)]"
@@ -335,12 +339,13 @@
/obj/structure/flora/rock/jungle
icon_state = "pile of rocks"
desc = "A pile of rocks."
icon_state = "rocks"
icon = 'icons/obj/flora/jungleflora.dmi'
density = FALSE
/obj/structure/flora/rock/jungle/Initialize()
..()
icon_state = "[icon_state][rand(1,5)]"
icon_state = "[initial(icon_state)][rand(1,5)]"
//Jungle bushes
@@ -364,9 +369,17 @@
icon_state = "bush"
icon = 'icons/obj/flora/largejungleflora.dmi'
pixel_x = -16
pixel_y = -12
layer = ABOVE_ALL_MOB_LAYER
/obj/structure/flora/rock/pile/largejungle
name = "rocks"
icon_state = "rocks"
icon = 'icons/obj/flora/largejungleflora.dmi'
density = FALSE
pixel_x = -16
pixel_y = -16
/obj/structure/flora/rock/jungle/Initialize()
..()
icon_state = "[initial(icon_state)][rand(1,3)]"
+14 -22
View File
@@ -9,7 +9,7 @@
obj_integrity = 50
max_integrity = 50
layer = LATTICE_LAYER //under pipes
var/obj/item/stack/rods/stored
var/number_of_rods = 1
canSmoothWith = list(/obj/structure/lattice,
/turf/open/floor,
/turf/closed/wall,
@@ -17,26 +17,20 @@
smooth = SMOOTH_MORE
// flags = CONDUCT
/obj/structure/lattice/New()
/obj/structure/lattice/Initialize(mapload)
..()
for(var/obj/structure/lattice/LAT in src.loc)
for(var/obj/structure/lattice/LAT in loc)
if(LAT != src)
qdel(LAT)
stored = new/obj/item/stack/rods(src)
/obj/structure/lattice/Destroy()
qdel(stored)
stored = null
return ..()
/obj/structure/lattice/blob_act(obj/structure/blob/B)
return
/obj/structure/lattice/ratvar_act()
if(IsEven(x + y))
new/obj/structure/lattice/clockwork(loc)
new /obj/structure/lattice/clockwork(loc)
else
new/obj/structure/lattice/clockwork/large(loc)
new /obj/structure/lattice/clockwork/large(loc)
/obj/structure/lattice/attackby(obj/item/C, mob/user, params)
if(istype(C, /obj/item/weapon/wirecutters))
@@ -48,8 +42,7 @@
/obj/structure/lattice/deconstruct(disassembled = TRUE)
if(!(flags & NODECONSTRUCT))
stored.forceMove(get_turf(src))
stored = null
new /obj/item/stack/rods(get_turf(src), amount=number_of_rods)
qdel(src)
/obj/structure/lattice/singularity_pull(S, current_size)
@@ -61,15 +54,15 @@
desc = "A lightweight support lattice. These hold the Justicar's station together."
icon = 'icons/obj/smooth_structures/lattice_clockwork.dmi'
/obj/structure/lattice/clockwork/New()
/obj/structure/lattice/clockwork/Initialize(mapload)
..()
ratvar_act()
/obj/structure/lattice/clockwork/ratvar_act()
if(IsOdd(x+y))
new/obj/structure/lattice/clockwork/large(loc)
new /obj/structure/lattice/clockwork/large(loc) // deletes old one
/obj/structure/lattice/clockwork/large/New()
/obj/structure/lattice/clockwork/large/Initialize(mapload)
..()
icon = 'icons/obj/smooth_structures/lattice_clockwork_large.dmi'
pixel_x = -9
@@ -77,7 +70,7 @@
/obj/structure/lattice/clockwork/large/ratvar_act()
if(IsEven(x + y))
new/obj/structure/lattice/clockwork(loc)
new /obj/structure/lattice/clockwork(loc)
/obj/structure/lattice/catwalk
name = "catwalk"
@@ -87,13 +80,12 @@
smooth = SMOOTH_TRUE
canSmoothWith = null
/obj/structure/lattice/catwalk/New()
/obj/structure/lattice/catwalk/Initialize(mapload)
..()
stored.amount++
stored.update_icon()
number_of_rods++
/obj/structure/lattice/catwalk/ratvar_act()
new/obj/structure/lattice/catwalk/clockwork(loc)
new /obj/structure/lattice/catwalk/clockwork(loc)
/obj/structure/lattice/catwalk/Move()
var/turf/T = loc
@@ -111,7 +103,7 @@
name = "clockwork catwalk"
icon = 'icons/obj/smooth_structures/catwalk_clockwork.dmi'
/obj/structure/lattice/catwalk/clockwork/New()
/obj/structure/lattice/catwalk/clockwork/Initialize(mapload)
..()
new /obj/effect/overlay/temp/ratvar/floor/catwalk(loc)
new /obj/effect/overlay/temp/ratvar/beam/catwalk(loc)
+1 -1
View File
@@ -1,5 +1,5 @@
/obj/structure/trap
name = "IT'S A TARP"
name = "IT'S A TRAP"
desc = "stepping on me is a guaranteed bad day"
icon = 'icons/obj/hand_of_god_structures.dmi'
icon_state = "trap"
-1
View File
@@ -1592,7 +1592,6 @@
/obj/item/toy/talking/AI,
/obj/item/toy/talking/owl,
/obj/item/toy/talking/griffin,
/obj/item/toy/talking/skeleton,
/obj/item/toy/nuke,
/obj/item/toy/minimeteor,
/obj/item/toy/carpplushie,
+2 -2
View File
@@ -2,11 +2,11 @@
// PARTS //
/obj/item/weaponcrafting/reciever
/obj/item/weaponcrafting/receiver
name = "modular receiver"
desc = "A prototype modular receiver and trigger assembly for a firearm."
icon = 'icons/obj/improvised.dmi'
icon_state = "reciever"
icon_state = "receiver"
/obj/item/weaponcrafting/stock
name = "rifle stock"
+1 -1
View File
@@ -254,7 +254,7 @@
/datum/crafting_recipe/ishotgun
name = "Improvised Shotgun"
result = /obj/item/weapon/gun/ballistic/revolver/doublebarrel/improvised
reqs = list(/obj/item/weaponcrafting/reciever = 1,
reqs = list(/obj/item/weaponcrafting/receiver = 1,
/obj/item/pipe = 1,
/obj/item/weaponcrafting/stock = 1,
/obj/item/stack/packageWrap = 5)
+8 -2
View File
@@ -192,10 +192,14 @@
var/turf/T = get_turf(src)
data["x"] = T.x
data["y"] = T.y
data["z"] = T.z
data["like_keys"] = like_keys
data["dislike_keys"] = dislike_keys
/obj/structure/chisel_message/proc/unpack(list/data)
if(!islist(data))
return
hidden_message = data["hidden_message"]
creator_name = data["creator_name"]
creator_key = data["creator_key"]
@@ -209,8 +213,10 @@
var/x = data["x"]
var/y = data["y"]
var/turf/newloc = locate(x, y, ZLEVEL_STATION)
forceMove(newloc)
var/z = data["z"]
var/turf/newloc = locate(x, y, z)
if(isturf(newloc))
forceMove(newloc)
update_icon()
/obj/structure/chisel_message/examine(mob/user)
+13 -11
View File
@@ -270,7 +270,7 @@
explosion(src.loc,-1,1,3,adminlog = notify_admins)
qdel(src)
/obj/item/weapon/ore/New()
/obj/item/weapon/ore/Initialize()
..()
pixel_x = rand(0,16)-8
pixel_y = rand(0,8)-8
@@ -297,68 +297,73 @@
var/cooldown = 0
var/value = 1
/obj/item/weapon/coin/New()
/obj/item/weapon/coin/Initialize()
..()
pixel_x = rand(0,16)-8
pixel_y = rand(0,8)-8
icon_state = "coin_[cmineral]_heads"
if(cmineral)
name = "[cmineral] coin"
/obj/item/weapon/coin/examine(mob/user)
..()
if(value)
to_chat(user, "<span class='info'>It's worth [value] credit\s.</span>")
/obj/item/weapon/coin/gold
name = "gold coin"
cmineral = "gold"
icon_state = "coin_gold_heads"
value = 50
materials = list(MAT_GOLD = MINERAL_MATERIAL_AMOUNT*0.2)
/obj/item/weapon/coin/silver
name = "silver coin"
cmineral = "silver"
icon_state = "coin_silver_heads"
value = 20
materials = list(MAT_SILVER = MINERAL_MATERIAL_AMOUNT*0.2)
/obj/item/weapon/coin/diamond
name = "diamond coin"
cmineral = "diamond"
icon_state = "coin_diamond_heads"
value = 500
materials = list(MAT_DIAMOND = MINERAL_MATERIAL_AMOUNT*0.2)
/obj/item/weapon/coin/iron
name = "iron coin"
cmineral = "iron"
icon_state = "coin_iron_heads"
value = 1
materials = list(MAT_METAL = MINERAL_MATERIAL_AMOUNT*0.2)
/obj/item/weapon/coin/plasma
name = "plasma coin"
cmineral = "plasma"
icon_state = "coin_plasma_heads"
value = 100
materials = list(MAT_PLASMA = MINERAL_MATERIAL_AMOUNT*0.2)
/obj/item/weapon/coin/uranium
name = "uranium coin"
cmineral = "uranium"
icon_state = "coin_uranium_heads"
value = 80
materials = list(MAT_URANIUM = MINERAL_MATERIAL_AMOUNT*0.2)
/obj/item/weapon/coin/clown
name = "bananium coin"
cmineral = "bananium"
icon_state = "coin_bananium_heads"
value = 1000 //makes the clown cry
materials = list(MAT_BANANIUM = MINERAL_MATERIAL_AMOUNT*0.2)
/obj/item/weapon/coin/adamantine
name = "adamantine coin"
cmineral = "adamantine"
icon_state = "coin_adamantine_heads"
value = 1500
/obj/item/weapon/coin/mythril
name = "mythril coin"
cmineral = "mythril"
icon_state = "coin_mythril_heads"
value = 3000
@@ -379,9 +384,6 @@
sideslist = list("valid", "salad")
value = 0
/obj/item/weapon/coin/antagtoken/New()
return
/obj/item/weapon/coin/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/CC = W
@@ -411,12 +413,12 @@
else ..()
/obj/item/weapon/coin/attack_self(mob/user)
if(cooldown < world.time - 15)
if(cooldown > world.time)
if(string_attached) //does the coin have a wire attached
to_chat(user, "<span class='warning'>The coin won't flip very well with something attached!</span>" )
return //do not flip the coin
var/coinflip = pick(sideslist)
cooldown = world.time
cooldown = world.time + 15
flick("coin_[cmineral]_flip", src)
icon_state = "coin_[cmineral]_[coinflip]"
playsound(user.loc, 'sound/items/coinflip.ogg', 50, 1)
@@ -7,6 +7,8 @@
species_traits = list(MUTCOLORS,EYECOLOR,LIPS)
mutant_bodyparts = list("tail_lizard", "snout", "spines", "horns", "frills", "body_markings", "legs")
mutant_organs = list(/obj/item/organ/tongue/lizard)
coldmod = 1.5
heatmod = 0.67
default_features = list("mcolor" = "0F0", "tail" = "Smooth", "snout" = "Round", "horns" = "None", "frills" = "None", "spines" = "None", "body_markings" = "None", "legs" = "Normal Legs")
attack_verb = "slash"
attack_sound = 'sound/weapons/slash.ogg'
@@ -38,4 +40,4 @@
name = "Ash Walker"
id = "ashlizard"
limbs_id = "lizard"
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,NOBREATH,NOGUNS,DIGITIGRADE)
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,NOBREATH,NOGUNS,DIGITIGRADE)
@@ -164,7 +164,7 @@
M.emote("scream")
/datum/reagent/blob/blazing_oil/extinguish_reaction(obj/structure/blob/B)
B.take_damage(rand(1, 3), BURN, "energy")
B.take_damage(1.5, BURN, "energy")
/datum/reagent/blob/blazing_oil/damage_reaction(obj/structure/blob/B, damage, damage_type, damage_flag)
if(damage_type == BURN && damage_flag != "energy")
@@ -616,6 +616,14 @@
build_path = /obj/item/weapon/restraints/handcuffs
category = list("hacked", "Security")
/datum/design/receiver
name = "Modular Receiver"
id = "reciever"
build_type = AUTOLATHE
materials = list(MAT_METAL = 15000)
build_path = /obj/item/weaponcrafting/receiver
category = list("hacked", "Security")
/datum/design/shotgun_slug
name = "Shotgun slug"
id = "shotgun_slug"
@@ -177,16 +177,6 @@
build_path = /obj/item/weapon/gun/energy/wormhole_projector
category = list("Weapons")
/datum/design/reciever
name = "Modular Receiver"
desc = "A prototype modular receiver and trigger assembly for a variety of firearms."
id = "reciever"
req_tech = list("combat" = 4, "materials" = 4)
build_type = PROTOLATHE
materials = list(MAT_METAL = 6500, MAT_SILVER = 500)
build_path = /obj/item/weaponcrafting/reciever
category = list("Weapons")
//WT550 Mags
/datum/design/mag_oldsmg
+6 -6
View File
@@ -66,12 +66,12 @@
/obj/docking_port/mobile/arrivals/check()
. = ..()
if(perma_docked)
if(mode != SHUTTLE_CALL)
sound_played = FALSE
mode = SHUTTLE_IDLE
else
else
SendToStation()
return
@@ -79,7 +79,7 @@
if(!CheckTurfsPressure())
damaged = FALSE
if(console)
console.say("Repairs complete, launching soon.")
console.say("Repairs complete, launching soon.")
return
//If this proc is high on the profiler add a cooldown to the stuff after this line
@@ -93,7 +93,7 @@
if(mode != SHUTTLE_CALL)
sound_played = FALSE
mode = SHUTTLE_IDLE
else
else
SendToStation()
return
@@ -130,7 +130,7 @@
var/dockTime = config.arrivals_shuttle_dock_window
if(mode == SHUTTLE_CALL && timeLeft(1) > dockTime)
if(console)
console.say(damaged ? "Initiating emergency docking for repairs!" : "Now approaching: [SSmapping.config.map_name].")
console.say(damaged ? "Initiating emergency docking for repairs!" : "Now approaching: [station_name()].")
hyperspace_sound(HYPERSPACE_LAUNCH, areas) //for the new guy
setTimer(dockTime)
@@ -174,7 +174,7 @@
/obj/docking_port/mobile/arrivals/proc/RequireUndocked(mob/user)
if(mode == SHUTTLE_CALL || damaged)
return
Launch(TRUE)
user << "<span class='notice'>Calling your shuttle. One moment...</span>"
@@ -651,10 +651,6 @@
if("papyrus")
. |= SPAN_PAPYRUS
/obj/item/organ/tongue/bone/chatter
name = "chattering bone \"tongue\""
chattering = TRUE
/obj/item/organ/tongue/robot
name = "robotic voicebox"
desc = "A voice synthesizer that can interface with organic lifeforms."
+42 -27
View File
@@ -55,6 +55,48 @@
-->
<div class="commit sansserif">
<h2 class="date">24 March 2017</h2>
<h3 class="author">BeeSting12 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Auxiliary base maintenance airlock now requires the proper access. Sorry greyshirts, no loot for you!</li>
</ul>
<h3 class="author">Cyberboss updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">The recycler's base reclaim rate has been buffed from 1% to 50%. Manipulator upgrades now give +12.5% per level instead of +25%</li>
<li class="bugfix">You can now successfully remove a pen from a PDA while it's in a container</li>
</ul>
<h3 class="author">Fox McCloud updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Modular receiver removed from the protolathe to autolathe</li>
<li class="tweak">Modular receiver cost is now 15,000 metal</li>
</ul>
<h3 class="author">Joan updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Fixes structures being unable to go through spatial gateways.</li>
<li class="tweak">Blazing Oil blobs take 33% less damage from water.</li>
</ul>
<h3 class="author">Penguaro updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">[Meta] Replaced Power Monitoring Console in Engineering with Modular Engineering Console</li>
<li class="rscadd">[Pubby] Replaced Power Monitoring Console in Engineering with Modular Engineering Console</li>
<li class="rscadd">[Omega] Replaced Power Monitoring Console in Engineering with Modular Engineering Console</li>
<li class="rscadd">[Omega] Added RD and Command Modular Consoles to Bridge</li>
<li class="rscadd">[Delta] Replaced Power Monitoring Console in Engineering with Modular Engineering Console</li>
<li class="rscadd">[Delta] Replaced duplicate Atmospherics Monitoring Console in Atmo with Modular Engineering Console</li>
</ul>
<h3 class="author">coiax updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Destroying a lich's body does not destroy the lich permanently, provided the phylactery is intact.</li>
<li class="rscadd">A lich will respawn three minutes after its death, provided the phylactery is intact.</li>
<li class="rscadd">The Soul Bind spell is forgotten after cast, respawn is now automatic.</li>
<li class="rscdel">Stationloving objects like the nuke disk are not valid objects for a phylactery.</li>
<li class="rscadd">Explosive implants can always be triggered via action button, even if unconscious.</li>
</ul>
<h3 class="author">rock updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">lizards are hurt slightly more by cold but less by heat. this does not mean they are more resistant to being lasered, fortunately.</li>
</ul>
<h2 class="date">23 March 2017</h2>
<h3 class="author">Joan updated:</h3>
<ul class="changes bgimages16">
@@ -1841,33 +1883,6 @@
<li class="rscadd">The Delta emergency shuttle now travels towards the south, rather than the north. This changes nothing except which direction the stars rushing past the windows are moving.</li>
<li class="bugfix">Fixed dragging the spawn protection traps on CTF.</li>
</ul>
<h2 class="date">20 January 2017</h2>
<h3 class="author">CoreOverload updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Any sharp item can now be used for "incise" surgery step, with 30% success probability.</li>
</ul>
<h3 class="author">Joan updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Sentinel's Compromise will also convert oxygen damage into half toxin, in addition to brute and burn.</li>
<li class="tweak">Reduced the Ark of the Clockwork Justicar's health from 600 to 500</li>
<li class="rscadd">You can now pull objects past the Ark of the Clockwork Justicar without them being moved and or destroyed by its power.</li>
</ul>
<h3 class="author">MrStonedOne updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Server side timing of the parallax shuttle launch animation now runs on client time rather than byond time/server time. This will fix the odd issues it has during lag. The parallax shuttle slowdown animation will still have issues, those will be fixed in another more involved update to shuttles.</li>
<li class="rscadd">The window will flash in the taskbar when a new round is ready and about to start.</li>
</ul>
<h3 class="author">Tofa01 updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Moved The CentComm station 6 tiles to the left in order to prevent large shuttles such as "asteroid with engines on it" from clipping off the end of the right side of the map.</li>
</ul>
<h3 class="author">XDTM updated:</h3>
<ul class="changes bgimages16">
<li class="bugfix">Chameleon PDAs can now morph into assistant PDAs.</li>
<li class="bugfix">A few iconless items have been blacklisted from chameleon clothing.</li>
<li class="tweak">Reviver implants now warn you when they're turning on or off, or when giving a heart attack due to EMP.</li>
</ul>
</div>
<b>GoonStation 13 Development Team</b>
+38
View File
@@ -10301,3 +10301,41 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- tweak: Alt-clicking a command headset toggles HIGH VOLUME mode.
coiax:
- bugfix: A dead AI no longer counts as an "unconverted AI" for clockcult.
2017-03-24:
BeeSting12:
- bugfix: Auxiliary base maintenance airlock now requires the proper access. Sorry
greyshirts, no loot for you!
Cyberboss:
- tweak: The recycler's base reclaim rate has been buffed from 1% to 50%. Manipulator
upgrades now give +12.5% per level instead of +25%
- bugfix: You can now successfully remove a pen from a PDA while it's in a container
Fox McCloud:
- rscadd: Modular receiver removed from the protolathe to autolathe
- tweak: Modular receiver cost is now 15,000 metal
Joan:
- bugfix: Fixes structures being unable to go through spatial gateways.
- tweak: Blazing Oil blobs take 33% less damage from water.
Penguaro:
- rscadd: '[Meta] Replaced Power Monitoring Console in Engineering with Modular
Engineering Console'
- rscadd: '[Pubby] Replaced Power Monitoring Console in Engineering with Modular
Engineering Console'
- rscadd: '[Omega] Replaced Power Monitoring Console in Engineering with Modular
Engineering Console'
- rscadd: '[Omega] Added RD and Command Modular Consoles to Bridge'
- rscadd: '[Delta] Replaced Power Monitoring Console in Engineering with Modular
Engineering Console'
- rscadd: '[Delta] Replaced duplicate Atmospherics Monitoring Console in Atmo with
Modular Engineering Console'
coiax:
- rscadd: Destroying a lich's body does not destroy the lich permanently, provided
the phylactery is intact.
- rscadd: A lich will respawn three minutes after its death, provided the phylactery
is intact.
- rscadd: The Soul Bind spell is forgotten after cast, respawn is now automatic.
- rscdel: Stationloving objects like the nuke disk are not valid objects for a phylactery.
- rscadd: Explosive implants can always be triggered via action button, even if
unconscious.
rock:
- tweak: lizards are hurt slightly more by cold but less by heat. this does not
mean they are more resistant to being lasered, fortunately.
@@ -1,11 +0,0 @@
author: "coiax"
delete-after: True
changes:
- rscadd: "Destroying a lich's body does not destroy the lich permanently,
provided the phylactery is intact."
- rscadd: "A lich will respawn three minutes after its death, provided the
phylactery is intact."
- rscadd: "The Soul Bind spell is forgotten after cast, respawn is now
automatic."
- rscdel: "Stationloving objects like the nuke disk are not valid objects for
a phylactery."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 479 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 994 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 774 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 681 B

After

Width:  |  Height:  |  Size: 681 B

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+1
View File
@@ -669,6 +669,7 @@
#include "code\game\objects\effects\effect_system\effects_sparks.dm"
#include "code\game\objects\effects\effect_system\effects_water.dm"
#include "code\game\objects\effects\spawners\bombspawner.dm"
#include "code\game\objects\effects\spawners\bundle.dm"
#include "code\game\objects\effects\spawners\gibspawner.dm"
#include "code\game\objects\effects\spawners\lootdrop.dm"
#include "code\game\objects\effects\spawners\structure.dm"