Merge remote-tracking branch 'upstream/master' into night_shift

# Conflicts:
#	code/world.dm
This commit is contained in:
tigercat2000
2018-04-02 17:24:36 -07:00
35 changed files with 473 additions and 93 deletions
+51 -28
View File
@@ -7,12 +7,16 @@
bomb_name = "tripwire mine"
secured = 0 // toggle_secure()'ed in New() for correct adding to processing_objects, won't work otherwise
dir = EAST
var/on = 0
var/visible = 0
var/visible = 1
var/obj/effect/beam/i_beam/first = null
var/obj/effect/beam/i_beam/last = null
var/max_nesting_level = 10
var/turf/fire_location
var/emission_cycles = 0
var/emission_cap = 20
/obj/item/device/assembly/infra/Destroy()
if(first)
@@ -22,7 +26,11 @@
return ..()
/obj/item/device/assembly/infra/describe()
return "The infrared trigger is [on?"on":"off"]."
return "The assembly is [secured ? "secure" : "not secure"]. The infrared trigger is [on ? "on" : "off"]."
/obj/item/device/assembly/infra/examine(mob/user)
..()
to_chat(user, describe())
/obj/item/device/assembly/infra/activate()
if(!..()) return 0//Cooldown check
@@ -36,11 +44,22 @@
processing_objects.Add(src)
else
on = 0
if(first) qdel(first)
if(first)
qdel(first)
processing_objects.Remove(src)
update_icon()
return secured
/obj/item/device/assembly/infra/New()
..()
if(!secured)
toggle_secure()
/obj/item/device/assembly/infra/proc/arm() // Forces the device to arm no matter its current state.
if(!secured) // Checked because arm() might be called sometime after the object is spawned.
toggle_secure()
on = 1
/obj/item/device/assembly/infra/update_icon()
overlays.Cut()
attached_overlays = list()
@@ -51,38 +70,22 @@
if(holder)
holder.update_icon()
/obj/item/device/assembly/infra/proc/get_valid_loc(atom/A, atom/prev, level = 0)
if(!A)
A = loc
if(!prev)
prev = src
if(level > max_nesting_level)
return null
else if(isturf(A))
return A
else if(isobj(A))
var/obj/O = A
if(isassembly(A) || O.IsAssemblyHolder() || istype(A, /obj/item/device/onetankbomb))
return .(A.loc, A, level + 1)
else if(ismob(A))
var/mob/user = A
if(user.get_active_hand() == prev || user.get_inactive_hand() == prev)
return .(A.loc, A, level + 1)
return null
/obj/item/device/assembly/infra/process()
if(!on || fire_location != get_turf(loc))
if(first)
qdel(first)
return
var/turf/T = get_turf(src)
if(first && (!on || !fire_location || fire_location != T || emission_cycles >= emission_cap))
qdel(first)
return
if(!on)
return
if(!secured)
return
if(first && last)
last.process()
emission_cycles++
return
var/turf/T = get_valid_loc()
if(T)
fire_location = T
emission_cycles = 0
var/obj/effect/beam/i_beam/I = new /obj/effect/beam/i_beam(T)
I.master = src
I.density = 1
@@ -124,6 +127,8 @@
return 0
pulse(0)
audible_message("[bicon(src)] *beep* *beep*", null, 3)
if(first)
qdel(first)
cooldown = 2
spawn(10)
process_cooldown()
@@ -177,6 +182,21 @@
if(usr.machine == src)
interact(usr)
if(first)
qdel(first)
/obj/item/device/assembly/infra/armed/New()
..()
spawn(3)
if(holder)
if(holder.master)
dir = holder.master.dir
arm()
/obj/item/device/assembly/infra/armed/stealth
visible = 0
/***************************IBeam*********************************/
@@ -191,6 +211,8 @@
var/limit = null
var/visible = 0.0
var/left = null
var/life_cycles = 0
var/life_cap = 20
anchored = 1.0
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
@@ -209,7 +231,8 @@
transform = turn(matrix(), dir2angle(dir))
/obj/effect/beam/i_beam/process()
if((loc.density || !(master)))
life_cycles++
if(loc.density || !master || life_cycles >= life_cap)
qdel(src)
return
if(left > 0)
+1
View File
@@ -131,6 +131,7 @@
desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
icon_state = "clown"
item_state = "clown_hat"
flags = NODROP
/obj/item/clothing/mask/gas/sexyclown
name = "sexy-clown wig and mask"
+1 -1
View File
@@ -562,7 +562,7 @@
log_robot("[key_name(speaker)] : [message]")
var/message_start = "<i><span class='game say'>[name], <span class='name'>[speaker.name]</span>"
var/message_body = "<span class='message'>[speaker.say_quote(message)],</i> <span class='ibm'>\"[message]\"</span></span></span>"
var/message_body = "<span class='message'>[speaker.say_quote(message)],</i><span class='robot'>\"[message]\"</span></span></span>"
for(var/mob/M in dead_mob_list)
if(!isnewplayer(M) && !isbrain(M))
@@ -166,6 +166,9 @@
set category = "Robot Commands"
set name = "Power Warning"
if(handle_emote_CD(50))
return
if(!is_component_functioning("power cell") || !cell || !cell.charge)
visible_message("The power warning light on <span class='name'>[src]</span> flashes urgently.",\
"You announce you are operating in low power mode.")
@@ -49,6 +49,8 @@ var/list/robot_verbs_default = list(
var/datum/wires/robot/wires = null
var/opened = 0
var/custom_panel = null
var/list/custom_panel_names = list("Cricket")
var/emagged = 0
var/list/force_modules = list()
@@ -314,6 +316,7 @@ var/list/robot_verbs_default = list(
module_sprites["Default"] = "Service2"
module_sprites["Standard"] = "robotServ"
module_sprites["Noble-SRV"] = "Noble-SRV"
module_sprites["Cricket"] = "Cricket-SERV"
if("Miner")
module = new /obj/item/weapon/robot_module/miner(src)
@@ -325,6 +328,7 @@ var/list/robot_verbs_default = list(
module_sprites["Treadhead"] = "Miner"
module_sprites["Standard"] = "robotMine"
module_sprites["Noble-DIG"] = "Noble-DIG"
module_sprites["Cricket"] = "Cricket-MINE"
if("Medical")
module = new /obj/item/weapon/robot_module/medical(src)
@@ -337,6 +341,7 @@ var/list/robot_verbs_default = list(
module_sprites["Needles"] = "medicalrobot"
module_sprites["Standard"] = "robotMedi"
module_sprites["Noble-MED"] = "Noble-MED"
module_sprites["Cricket"] = "Cricket-MEDI"
status_flags &= ~CANPUSH
if("Security")
@@ -348,6 +353,7 @@ var/list/robot_verbs_default = list(
module_sprites["Bloodhound"] = "bloodhound"
module_sprites["Standard"] = "robotSecy"
module_sprites["Noble-SEC"] = "Noble-SEC"
module_sprites["Cricket"] = "Cricket-SEC"
status_flags &= ~CANPUSH
if("Engineering")
@@ -360,6 +366,7 @@ var/list/robot_verbs_default = list(
module_sprites["Landmate"] = "landmate"
module_sprites["Standard"] = "robotEngi"
module_sprites["Noble-ENG"] = "Noble-ENG"
module_sprites["Cricket"] = "Cricket-ENGI"
magpulse = 1
if("Janitor")
@@ -370,6 +377,7 @@ var/list/robot_verbs_default = list(
module_sprites["Mop Gear Rex"] = "mopgearrex"
module_sprites["Standard"] = "robotJani"
module_sprites["Noble-CLN"] = "Noble-CLN"
module_sprites["Cricket"] = "Cricket-JANI"
if("Combat")
module = new /obj/item/weapon/robot_module/combat(src)
@@ -968,6 +976,9 @@ var/list/robot_verbs_default = list(
if(custom_sprite) //Custom borgs also have custom panels, heh
panelprefix = "[ckey]"
if(custom_panel in custom_panel_names) //For default borgs with different panels
panelprefix = custom_panel
if(wiresexposed)
overlays += "[panelprefix]-openpanel +w"
else if(cell)
@@ -1289,6 +1300,8 @@ var/list/robot_verbs_default = list(
module.module_type = "Brobot"
update_module_icon()
lockcharge = null
var/list/names = splittext(icontype, "-")
custom_panel = trim(names[1])
else
to_chat(src, "Something is badly wrong with the sprite selection. Harass a coder.")
icon_state = module_sprites[1]
@@ -175,3 +175,5 @@
eats_mice = 0
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
melee_damage_lower = 5
melee_damage_upper = 15
@@ -37,4 +37,6 @@
faction = list("syndicate")
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
minbodytemp = 0
minbodytemp = 0
melee_damage_lower = 10
melee_damage_upper = 20
@@ -17,8 +17,8 @@
response_disarm = "gently pushes aside"
response_harm = "kicks"
gold_core_spawnable = CHEM_MOB_SPAWN_FRIENDLY
melee_damage_lower = 18
melee_damage_upper = 18
melee_damage_lower = 0
melee_damage_upper = 0
health = 50
maxHealth = 50
speed = 2
@@ -28,4 +28,4 @@
/mob/living/simple_animal/pet/sloth/paperwork
name = "Paperwork"
desc = "Cargo's pet sloth. About as useful as the rest of the techs."
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
@@ -687,7 +687,15 @@
"STOP HOT-WIRING THE ENGINE, FUCKING CHRIST!",
"Wire the solars, you lazy bums!",
"WHO TOOK THE DAMN HARDSUITS?",
"OH GOD ITS FREE CALL THE SHUTTLE")
"OH GOD ITS FREE CALL THE SHUTTLE",
"Why are there so many atmos alerts?",
"OH GOD WHY WOULD YOU TURN ON THE PA BEFORE CONTAINMENT IS UP?",
"Remember to lock the emitters!",
"Stop goofing off and repair the goddam station!",
"The singularity is not your friend!",
"What were the wires again?",
"Goddam emaggers!"
)
gold_core_spawnable = CHEM_MOB_SPAWN_INVALID
/mob/living/simple_animal/parrot/Poly/New()
+11 -1
View File
@@ -1,6 +1,7 @@
/mob/new_player
var/ready = 0
var/spawning = 0//Referenced when you want to delete the new_player later on in the code.
var/skip_antag = 0 //For declining an antag roll this round.
var/spawning = 0 //Referenced when you want to delete the new_player later on in the code.
var/totalPlayers = 0 //Player counts for the Lobby tab
var/totalPlayersReady = 0
universal_speak = 1
@@ -31,6 +32,11 @@
if(!ready) output += "<p><a href='byond://?src=[UID()];ready=1'>Declare Ready</A></p>"
else output += "<p><b>You are ready</b> (<a href='byond://?src=[UID()];ready=2'>Cancel</A>)</p>"
var/list/antags = client.prefs.be_special
if(antags && antags.len)
if(!skip_antag) output += "<p><a href='byond://?src=[UID()];skip_antag=1'>Global Antag Candidancy</A>"
else output += "<p><a href='byond://?src=[UID()];skip_antag=2'>Global Antag Candidancy</A>"
output += "<br /><small>You are <b>[skip_antag ? "ineligable" : "eligable"]</b> for all antag roles.</small></p>"
else
output += "<p><a href='byond://?src=[UID()];manifest=1'>View the Crew Manifest</A></p>"
output += "<p><a href='byond://?src=[UID()];late_join=1'>Join Game!</A></p>"
@@ -111,6 +117,10 @@
ready = !ready
new_player_panel_proc()
if(href_list["skip_antag"])
skip_antag = !skip_antag
new_player_panel_proc()
if(href_list["refresh"])
src << browse(null, "window=playersetup") //closes the player setup window
new_player_panel_proc()
+6
View File
@@ -274,6 +274,9 @@
if(!MP)
return 0
if(!GAMEMODE_IS_NUCLEAR)
if(ispath(MP, /mob/living/simple_animal/pet/cat/Syndi))
return 0
if(ispath(MP, /mob/living/simple_animal/pet/cat))
return 1
if(ispath(MP, /mob/living/simple_animal/pet/corgi))
@@ -288,6 +291,9 @@
return 1
if(ispath(MP, /mob/living/simple_animal/pony))
return 1
if(!GAMEMODE_IS_NUCLEAR)
if(ispath(MP, /mob/living/simple_animal/pet/fox/Syndifox))
return 0
if(ispath(MP, /mob/living/simple_animal/pet/fox))
return 1
if(ispath(MP, /mob/living/simple_animal/chick))
@@ -30,7 +30,6 @@
name = "miniature energy gun"
desc = "A small, pistol-sized energy gun with a built-in flashlight. It has two settings: stun and kill."
icon_state = "mini"
item_state = "gun"
w_class = WEIGHT_CLASS_SMALL
ammo_x_offset = 2
charge_sections = 3
@@ -896,7 +896,7 @@
/datum/design/mech_disabler
name = "Exosuit Weapon (CH-PD Disabler)"
desc = "Allows for the construction of CH-PD Disabler."
id = "mech_laser"
id = "mech_disabler"
build_type = MECHFAB
req_tech = list("combat" = 3)
build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/disabler
@@ -27,6 +27,10 @@
//Will not be announced if you try to set to the same level as it already is
if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != security_level)
if(level >= SEC_LEVEL_RED && security_level < SEC_LEVEL_RED)
// Mark down this time to prevent shuttle cheese
shuttle_master.emergency_sec_level_time = world.time
switch(level)
if(SEC_LEVEL_GREEN)
security_announcement_down.Announce("All threats to the station have passed. All weapons need to be holstered and privacy laws are once again fully enforced.","Attention! Security level lowered to green.")