April sync (#360)

* Maps and things no code/icons

* helpers defines globalvars

* Onclick world.dm orphaned_procs

* subsystems

Round vote and shuttle autocall done here too

* datums

* Game folder

* Admin - chatter modules

* clothing - mining

* modular computers - zambies

* client

* mob level 1

* mob stage 2 + simple_animal

* silicons n brains

* mob stage 3 + Alien/Monkey

* human mobs

* icons updated

* some sounds

* emitter y u no commit

* update tgstation.dme

* compile fixes

* travis fixes

Also removes Fast digest mode, because reasons.

* tweaks for travis Mentors are broke again

Also fixes Sizeray guns

* oxygen loss fix for vore code.

* removes unused code

* some code updates

* bulk fixes

* further fixes

* outside things

* whoops.

* Maint bar ported

* GLOBs.
This commit is contained in:
Poojawa
2017-04-13 23:37:00 -05:00
committed by GitHub
parent cdc32c98fa
commit 7e9b96a00f
1322 changed files with 174827 additions and 23888 deletions
+1 -1
View File
@@ -23,7 +23,7 @@
armor = list(melee = 40, bullet = 40, laser = 50, energy = 35, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100)
max_temperature = 35000
leg_overload_coeff = 100
operation_req_access = list(access_syndicate)
operation_req_access = list(GLOB.access_syndicate)
wreckage = /obj/structure/mecha_wreckage/gygax/dark
max_equip = 4
+3 -3
View File
@@ -10,7 +10,7 @@
armor = list(melee = -20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100)
max_temperature = 25000
infra_luminosity = 5
operation_req_access = list(access_theatre)
operation_req_access = list(GLOB.access_theatre)
wreckage = /obj/structure/mecha_wreckage/honker
add_req_access = 0
max_equip = 3
@@ -68,7 +68,7 @@
<script language='javascript' type='text/javascript'>
[js_byjax]
[js_dropdowns]
function ticker() {
function SSticker() {
setInterval(function(){
window.location='byond://?src=\ref[src]&update_content=1';
document.body.style.color = get_rand_color_string();
@@ -86,7 +86,7 @@
window.onload = function() {
dropdowns();
ticker();
SSticker();
}
</script>
</head>
+3 -3
View File
@@ -10,7 +10,7 @@
max_temperature = 60000
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
infra_luminosity = 3
operation_req_access = list(access_cent_specops)
operation_req_access = list(GLOB.access_cent_specops)
wreckage = /obj/structure/mecha_wreckage/marauder
add_req_access = 0
internal_damage_threshold = 25
@@ -45,7 +45,7 @@
desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel."
name = "\improper Seraph"
icon_state = "seraph"
operation_req_access = list(access_cent_specops)
operation_req_access = list(GLOB.access_cent_specops)
step_in = 3
obj_integrity = 550
wreckage = /obj/structure/mecha_wreckage/seraph
@@ -71,7 +71,7 @@
desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model."
name = "\improper Mauler"
icon_state = "mauler"
operation_req_access = list(access_syndicate)
operation_req_access = list(GLOB.access_syndicate)
wreckage = /obj/structure/mecha_wreckage/mauler
max_equip = 5
+1 -1
View File
@@ -10,7 +10,7 @@
armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100)
max_temperature = 15000
wreckage = /obj/structure/mecha_wreckage/reticence
operation_req_access = list(access_theatre)
operation_req_access = list(GLOB.access_theatre)
add_req_access = 0
internal_damage_threshold = 25
max_equip = 2
@@ -112,6 +112,7 @@
var/scanning = 0
/obj/item/mecha_parts/mecha_equipment/mining_scanner/New()
..()
START_PROCESSING(SSobj, src)
/obj/item/mecha_parts/mecha_equipment/mining_scanner/attach(obj/mecha/M)
@@ -199,11 +199,11 @@
var/mode = 0 //0 - deconstruct, 1 - wall or floor, 2 - airlock.
/obj/item/mecha_parts/mecha_equipment/rcd/New()
rcd_list += src
GLOB.rcd_list += src
..()
/obj/item/mecha_parts/mecha_equipment/rcd/Destroy()
rcd_list -= src
GLOB.rcd_list -= src
return ..()
/obj/item/mecha_parts/mecha_equipment/rcd/action(atom/target)
@@ -420,7 +420,7 @@
if(!PN)
PN = new()
powernets += PN
GLOB.powernets += PN
NC.powernet = PN
PN.cables += NC
NC.mergeConnectedNetworks(NC.d2)
+2 -2
View File
@@ -95,7 +95,7 @@
return
interact(user)
/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = default_state)
/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "mech_bay_power_console", "Mech Bay Power Control Console", 400, 170, master_ui, state)
@@ -130,7 +130,7 @@
return
recharge_port = locate(/obj/machinery/mech_bay_recharge_port) in range(1)
if(!recharge_port )
for(var/D in cardinal)
for(var/D in GLOB.cardinal)
var/turf/A = get_step(src, D)
A = get_step(A, D)
recharge_port = locate(/obj/machinery/mech_bay_recharge_port) in A
+55 -16
View File
@@ -8,7 +8,7 @@
use_power = 1
idle_power_usage = 20
active_power_usage = 5000
req_access = list(access_robotics)
req_access = list(GLOB.access_robotics)
var/time_coeff = 1
var/component_coeff = 1
var/datum/material_container/materials
@@ -37,7 +37,7 @@
/obj/machinery/mecha_part_fabricator/New()
..()
files = new /datum/research(src) //Setup the research data holder.
materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM))
materials = new(src, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TITANIUM, MAT_BLUESPACE))
var/obj/item/weapon/circuitboard/machine/B = new /obj/item/weapon/circuitboard/machine/mechfab(null)
B.apply_default_parts(src)
@@ -430,22 +430,13 @@
return 1
if(istype(W, /obj/item/stack/sheet))
if(panel_open)
to_chat(user, "<span class='warning'>You can't load [src] while it's opened!</span>")
return 1
if(being_built)
to_chat(user, "<span class='warning'>\The [src] is currently processing! Please wait until completion.</span>")
if(!is_insertion_ready(user))
return 1
var/material_amount = materials.get_item_material_amount(W)
if(!material_amount)
to_chat(user, "<span class='warning'>This object does not contain sufficient amounts of materials to be accepted by [src].</span>")
return 1
if(!materials.has_space(material_amount))
to_chat(user, "<span class='warning'>\The [src] is full. Please remove some materials from [src] in order to insert more.</span>")
return 1
if(!user.temporarilyRemoveItemFromInventory(W))
to_chat(user, "<span class='warning'>\The [W] is stuck to you and cannot be placed into [src].</span>")
if(!try_insert(user, W, material_amount))
return 1
var/inserted = materials.insert_item(W)
@@ -457,7 +448,31 @@
var/mat_overlay = "fab-load-[material2name(W.materials[1])]"
add_overlay(mat_overlay)
sleep(10)
cut_overlay(mat_overlay) //No matter what the overlay shall still be deleted
if(!QDELETED(src))
cut_overlay(mat_overlay) //No matter what the overlay shall still be deleted
updateUsrDialog()
else if(istype(W, /obj/item/weapon/ore/bluespace_crystal))
if(!is_insertion_ready(user))
return 1
var/material_amount = materials.get_item_material_amount(W)
if(!try_insert(user, W, material_amount))
return 1
var/inserted = materials.insert_item(W)
if(inserted)
to_chat(user, "<span class='notice'>You add [W] to the [src].</span>")
if(W && W.materials.len)
qdel(W)
var/mat_overlay = "fab-load-bluespace"
add_overlay(mat_overlay)
sleep(10)
if(!QDELETED(src))
cut_overlay(mat_overlay)
updateUsrDialog()
@@ -466,3 +481,27 @@
/obj/machinery/mecha_part_fabricator/proc/material2name(ID)
return copytext(ID,2)
/obj/machinery/mecha_part_fabricator/proc/is_insertion_ready(mob/user)
if(panel_open)
to_chat(user, "<span class='warning'>You can't load [src] while it's opened!</span>")
return FALSE
if(being_built)
to_chat(user, "<span class='warning'>\The [src] is currently processing! Please wait until completion.</span>")
return FALSE
return TRUE
/obj/machinery/mecha_part_fabricator/proc/try_insert(mob/user, obj/item/I, material_amount)
if(!material_amount)
to_chat(user, "<span class='warning'>This object does not contain sufficient amounts of materials to be accepted by [src].</span>")
return FALSE
if(!materials.has_space(material_amount))
to_chat(user, "<span class='warning'>\The [src] is full. Please remove some materials from [src] in order to insert more.</span>")
return FALSE
if(!user.temporarilyRemoveItemFromInventory(I))
to_chat(user, "<span class='warning'>\The [I] is stuck to you and cannot be placed into [src].</span>")
return FALSE
return TRUE
+23 -17
View File
@@ -65,7 +65,7 @@
var/internal_damage = 0 //contains bitflags
var/list/operation_req_access = list()//required access level for mecha operation
var/list/internals_req_access = list(access_engine,access_robotics)//required access level to open cell compartment
var/list/internals_req_access = list(GLOB.access_engine,GLOB.access_robotics)//required access level to open cell compartment
var/wreckage
@@ -132,11 +132,11 @@
smoke_system.attach(src)
add_cell()
START_PROCESSING(SSobj, src)
poi_list |= src
GLOB.poi_list |= src
log_message("[src.name] created.")
mechas_list += src //global mech list
GLOB.mechas_list += src //global mech list
prepare_huds()
var/datum/atom_hud/data/diagnostic/diag_hud = huds[DATA_HUD_DIAGNOSTIC]
var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC]
diag_hud.add_to_hud(src)
diag_hud_set_mechhealth()
diag_hud_set_mechcell()
@@ -185,7 +185,7 @@
if(AI)
AI.gib() //No wreck, no AI to recover
STOP_PROCESSING(SSobj, src)
poi_list.Remove(src)
GLOB.poi_list.Remove(src)
equipment.Cut()
cell = null
internal_tank = null
@@ -200,7 +200,7 @@
qdel(smoke_system)
smoke_system = null
mechas_list -= src //global mech list
GLOB.mechas_list -= src //global mech list
return ..()
////////////////////////
@@ -382,17 +382,16 @@
/obj/mecha/proc/drop_item()//Derpfix, but may be useful in future for engineering exosuits.
return
/obj/mecha/Hear(message, atom/movable/speaker, message_langs, raw_message, radio_freq, list/spans)
/obj/mecha/Hear(message, atom/movable/speaker, message_language, raw_message, radio_freq, list/spans, message_mode)
if(speaker == occupant)
if(radio.broadcasting)
radio.talk_into(speaker, text, , spans)
radio.talk_into(speaker, text, , spans, message_language)
//flick speech bubble
var/list/speech_bubble_recipients = list()
for(var/mob/M in get_hearers_in_view(7,src))
if(M.client)
speech_bubble_recipients.Add(M.client)
spawn(0)
flick_overlay(image('icons/mob/talk.dmi', src, "machine[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30)
INVOKE_ASYNC(GLOBAL_PROC, /.proc/flick_overlay, image('icons/mob/talk.dmi', src, "machine[say_test(raw_message)]",MOB_LAYER+1), speech_bubble_recipients, 30)
////////////////////////////
///// Action processing ////
@@ -663,9 +662,11 @@
AI.ai_restore_power()//So the AI initially has power.
AI.control_disabled = 1
AI.radio_enabled = 0
AI.disconnect_shell()
RemoveActions(AI, TRUE)
occupant = null
AI.forceMove(card)
card.AI = AI
occupant = null
AI.controlled_mech = null
AI.remote_control = null
icon_state = initial(icon_state)+"-open"
@@ -686,10 +687,12 @@
if(!AI)
to_chat(user, "<span class='warning'>There is no AI currently installed on this device.</span>")
return
else if(AI.stat || !AI.client)
if(AI.deployed_shell) //Recall AI if shelled so it can be checked for a client
AI.disconnect_shell()
if(AI.stat || !AI.client)
to_chat(user, "<span class='warning'>[AI.name] is currently unresponsive, and cannot be uploaded.</span>")
return
else if(occupant || dna_lock) //Normal AIs cannot steal mechs!
if(occupant || dna_lock) //Normal AIs cannot steal mechs!
to_chat(user, "<span class='warning'>Access denied. [name] is [occupant ? "currently occupied" : "secured with a DNA lock"].")
return
AI.control_disabled = 0
@@ -715,7 +718,10 @@
to_chat(AI, "[AI.can_dominate_mechs ? "<span class='announce'>Takeover of [name] complete! You are now loaded onto the onboard computer. Do not attempt to leave the station sector!</span>" \
: "<span class='notice'>You have been uploaded to a mech's onboard computer."]")
to_chat(AI, "<span class='reallybig boldnotice'>Use Middle-Mouse to activate mech functions and equipment. Click normally for AI interactions.</span>")
GrantActions(AI, !AI.can_dominate_mechs)
if(interaction == AI_TRANS_FROM_CARD)
GrantActions(AI, FALSE) //No eject/return to core action for AI uploaded by card
else
GrantActions(AI, !AI.can_dominate_mechs)
//An actual AI (simple_animal mecha pilot) entering the mech
@@ -1005,7 +1011,7 @@
/obj/mecha/proc/log_message(message as text,red=null)
log.len++
log[log.len] = list("time"="[worldtime2text()]","date","year"="[year_integer+540]","message"="[red?"<font color='red'>":null][message][red?"</font>":null]")
log[log.len] = list("time"="[worldtime2text()]","date","year"="[GLOB.year_integer+540]","message"="[red?"<font color='red'>":null][message][red?"</font>":null]")
return log.len
/obj/mecha/proc/log_append_to_last(message as text,red=null)
@@ -1013,8 +1019,8 @@
last_entry["message"] += "<br>[red?"<font color='red'>":null][message][red?"</font>":null]"
return
var/year = time2text(world.realtime,"YYYY")
var/year_integer = text2num(year) // = 2013???
GLOBAL_VAR_INIT(year, time2text(world.realtime,"YYYY"))
GLOBAL_VAR_INIT(year_integer, text2num(year)) // = 2013???
///////////////////////
///// Power stuff /////
+2 -1
View File
@@ -25,7 +25,8 @@
var/obj/mecha/chassis
/datum/action/innate/mecha/Grant(mob/living/L, obj/mecha/M)
chassis = M
if(M)
chassis = M
..()
/datum/action/innate/mecha/Destroy()
+9 -9
View File
@@ -3,7 +3,7 @@
desc = "Used to remotely locate or lockdown exosuits."
icon_screen = "mecha"
icon_keyboard = "tech_key"
req_access = list(access_robotics)
req_access = list(GLOB.access_robotics)
circuit = /obj/item/weapon/circuitboard/computer/mecha_control
var/list/located = list()
var/screen = 0
@@ -17,7 +17,7 @@
if(screen == 0)
dat += "<h3>Tracking beacons data</h3>"
var/list/trackerlist = list()
for(var/obj/mecha/MC in mechas_list)
for(var/obj/mecha/MC in GLOB.mechas_list)
trackerlist += MC.trackers
for(var/obj/item/mecha_parts/mecha_tracking/TR in trackerlist)
var/answer = TR.get_mecha_info()
@@ -75,13 +75,13 @@
return 0
var/obj/mecha/M = src.loc
var/cell_charge = M.get_charge()
var/answer = {"<b>Name:</b> [M.name]<br>
<b>Integrity:</b> [M.obj_integrity/M.max_integrity*100]%<br>
<b>Cell charge:</b> [isnull(cell_charge)?"Not found":"[M.cell.percent()]%"]<br>
<b>Airtank:</b> [M.return_pressure()]kPa<br>
<b>Pilot:</b> [M.occupant||"None"]<br>
<b>Location:</b> [get_area(M)||"Unknown"]<br>
<b>Active equipment:</b> [M.selected||"None"]<br>"}
var/answer = {"<b>Name:</b> [M.name]
<b>Integrity:</b> [M.obj_integrity/M.max_integrity*100]%
<b>Cell charge:</b> [isnull(cell_charge)?"Not found":"[M.cell.percent()]%"]
<b>Airtank:</b> [M.return_pressure()]kPa
<b>Pilot:</b> [M.occupant||"None"]
<b>Location:</b> [get_area(M)||"Unknown"]
<b>Active equipment:</b> [M.selected||"None"] "}
if(istype(M, /obj/mecha/working/ripley))
var/obj/mecha/working/ripley/RM = M
answer += "<b>Used cargo space:</b> [RM.cargo.len/RM.cargo_capacity*100]%<br>"
+2 -2
View File
@@ -72,7 +72,7 @@
/obj/mecha/attack_animal(mob/living/simple_animal/user)
log_message("Attack by simple animal. Attacker - [user].",1)
if(!user.melee_damage_upper && !user.obj_damage)
user.emote("custom", message = "[user.friendly] [src]")
user.emote("custom", message = "[user.friendly] [src].")
return 0
else
var/play_soundeffect = 1
@@ -312,7 +312,7 @@
L.narsie_act()
/obj/mecha/ratvar_act()
if((ratvar_awakens || clockwork_gateway_activated) && occupant)
if((GLOB.ratvar_awakens || GLOB.clockwork_gateway_activated) && occupant)
if(is_servant_of_ratvar(occupant)) //reward the minion that got a mech by repairing it
full_repair(TRUE)
else
+2 -2
View File
@@ -20,7 +20,7 @@
<script language='javascript' type='text/javascript'>
[js_byjax]
[js_dropdowns]
function ticker() {
function SSticker() {
setInterval(function(){
window.location='byond://?src=\ref[src]&update_content=1';
}, 1000);
@@ -28,7 +28,7 @@
window.onload = function() {
dropdowns();
ticker();
SSticker();
}
</script>
</head>
+2 -2
View File
@@ -17,7 +17,7 @@
if(H.glasses && istype(H.glasses, /obj/item/clothing/glasses/hud))
occupant_message("<span class='warning'>Your [H.glasses] prevent you from using the built-in medical hud.</span>")
else
var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED]
var/datum/atom_hud/data/human/medical/advanced/A = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
A.add_hud_to(H)
builtin_hud_user = 1
return 1
@@ -27,7 +27,7 @@
/obj/mecha/medical/odysseus/go_out()
if(ishuman(occupant) && builtin_hud_user)
var/mob/living/carbon/human/H = occupant
var/datum/atom_hud/data/human/medical/advanced/A = huds[DATA_HUD_MEDICAL_ADVANCED]
var/datum/atom_hud/data/human/medical/advanced/A = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
A.remove_hud_from(H)
..()
return