mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 18:53:06 +00:00
Merge remote-tracking branch 'upstream/dev-freeze' into dev
Conflicts: code/modules/mob/living/silicon/robot/robot_modules.dm
This commit is contained in:
@@ -17,3 +17,18 @@
|
|||||||
if(A.simulated)
|
if(A.simulated)
|
||||||
return 0
|
return 0
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
// Picks a turf without a mob from the given list of turfs, if one exists.
|
||||||
|
// If no such turf exists, picks any random turf from the given list of turfs.
|
||||||
|
/proc/pick_mobless_turf_if_exists(var/list/start_turfs)
|
||||||
|
if(!start_turfs.len)
|
||||||
|
return null
|
||||||
|
|
||||||
|
var/list/available_turfs = list()
|
||||||
|
for(var/start_turf in start_turfs)
|
||||||
|
var/mob/M = locate() in start_turf
|
||||||
|
if(!M)
|
||||||
|
available_turfs += start_turf
|
||||||
|
if(!available_turfs.len)
|
||||||
|
available_turfs = start_turfs
|
||||||
|
return pick(available_turfs)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ var/datum/antagonist/xenos/borer/borers
|
|||||||
var/obj/item/organ/external/head = host.get_organ("head")
|
var/obj/item/organ/external/head = host.get_organ("head")
|
||||||
borer.host = host
|
borer.host = host
|
||||||
head.implants += borer
|
head.implants += borer
|
||||||
borer.loc = head
|
borer.forceMove(head)
|
||||||
if(!borer.host_brain)
|
if(!borer.host_brain)
|
||||||
borer.host_brain = new(borer)
|
borer.host_brain = new(borer)
|
||||||
borer.host_brain.name = host.name
|
borer.host_brain.name = host.name
|
||||||
|
|||||||
@@ -44,4 +44,4 @@ var/datum/antagonist/xenos/xenomorphs
|
|||||||
player.objectives += new /datum/objective/escape()
|
player.objectives += new /datum/objective/escape()
|
||||||
|
|
||||||
/datum/antagonist/xenos/place_mob(var/mob/living/player)
|
/datum/antagonist/xenos/place_mob(var/mob/living/player)
|
||||||
player.loc = get_turf(pick(get_vents()))
|
player.forceMove(get_turf(pick(get_vents())))
|
||||||
|
|||||||
@@ -23,4 +23,5 @@
|
|||||||
/datum/antagonist/proc/place_mob(var/mob/living/mob)
|
/datum/antagonist/proc/place_mob(var/mob/living/mob)
|
||||||
if(!starting_locations || !starting_locations.len)
|
if(!starting_locations || !starting_locations.len)
|
||||||
return
|
return
|
||||||
mob.loc = pick(starting_locations)
|
var/turf/T = pick_mobless_turf_if_exists(mob)
|
||||||
|
mob.forceMove(T)
|
||||||
|
|||||||
@@ -45,7 +45,7 @@
|
|||||||
return text
|
return text
|
||||||
|
|
||||||
/datum/antagonist/proc/print_player_lite(var/datum/mind/ply)
|
/datum/antagonist/proc/print_player_lite(var/datum/mind/ply)
|
||||||
var/role = ply.special_role ? "\improper[ply.special_role]" : "\improper[ply.assigned_role]"
|
var/role = ply.assigned_role ? "\improper[ply.assigned_role]" : "\improper[ply.special_role]"
|
||||||
var/text = "<br><b>[ply.name]</b> (<b>[ply.key]</b>) as \a <b>[role]</b> ("
|
var/text = "<br><b>[ply.name]</b> (<b>[ply.key]</b>) as \a <b>[role]</b> ("
|
||||||
if(ply.current)
|
if(ply.current)
|
||||||
if(ply.current.stat == DEAD)
|
if(ply.current.stat == DEAD)
|
||||||
|
|||||||
@@ -163,12 +163,14 @@
|
|||||||
|
|
||||||
command_announcement.Announce(fulltext)
|
command_announcement.Announce(fulltext)
|
||||||
|
|
||||||
// Proc: get_all_apcs()
|
// Proc: get_unhacked_apcs()
|
||||||
// Parameters: None
|
// Parameters: None
|
||||||
// Description: Returns a list of all APCs
|
// Description: Returns a list of all unhacked APCs
|
||||||
/proc/get_all_apcs()
|
/proc/get_unhacked_apcs(var/mob/living/silicon/ai/user)
|
||||||
var/list/H = list()
|
var/list/H = list()
|
||||||
for(var/obj/machinery/power/apc/A in machines)
|
for(var/obj/machinery/power/apc/A in machines)
|
||||||
|
if(A.hacker && A.hacker == user)
|
||||||
|
continue
|
||||||
H.Add(A)
|
H.Add(A)
|
||||||
return H
|
return H
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
// END RESEARCH DATUMS
|
// END RESEARCH DATUMS
|
||||||
// BEGIN ABILITY VERBS
|
// BEGIN ABILITY VERBS
|
||||||
|
|
||||||
/datum/game_mode/malfunction/verb/basic_encryption_hack(obj/machinery/power/apc/A as obj in get_all_apcs())
|
/datum/game_mode/malfunction/verb/basic_encryption_hack(obj/machinery/power/apc/A as obj in get_unhacked_apcs(src))
|
||||||
set category = "Software"
|
set category = "Software"
|
||||||
set name = "Basic Encryption Hack"
|
set name = "Basic Encryption Hack"
|
||||||
set desc = "10 CPU - Basic encryption hack that allows you to overtake APCs on the station."
|
set desc = "10 CPU - Basic encryption hack that allows you to overtake APCs on the station."
|
||||||
|
|||||||
@@ -136,7 +136,7 @@
|
|||||||
|
|
||||||
var/datum/language/new_language = all_languages[language]
|
var/datum/language/new_language = all_languages[language]
|
||||||
|
|
||||||
if(!istype(new_language) || new_language in languages)
|
if(!istype(new_language) || (new_language in languages))
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
languages.Add(new_language)
|
languages.Add(new_language)
|
||||||
|
|||||||
@@ -230,7 +230,7 @@
|
|||||||
|
|
||||||
/mob/living/proc/handle_fire()
|
/mob/living/proc/handle_fire()
|
||||||
if(fire_stacks < 0)
|
if(fire_stacks < 0)
|
||||||
fire_stacks = min(0, fire_stacks++) //If we've doused ourselves in water to avoid fire, dry off slowly
|
fire_stacks = min(0, ++fire_stacks) //If we've doused ourselves in water to avoid fire, dry off slowly
|
||||||
|
|
||||||
if(!on_fire)
|
if(!on_fire)
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ var/global/list/robot_modules = list(
|
|||||||
var/list/obj/item/borg/upgrade/supported_upgrades = list()
|
var/list/obj/item/borg/upgrade/supported_upgrades = list()
|
||||||
|
|
||||||
// Bookkeeping
|
// Bookkeeping
|
||||||
var/list/added_languages = list()
|
var/list/original_languages = list()
|
||||||
var/list/added_networks = list()
|
var/list/added_networks = list()
|
||||||
|
|
||||||
/obj/item/weapon/robot_module/New(var/mob/living/silicon/robot/R)
|
/obj/item/weapon/robot_module/New(var/mob/living/silicon/robot/R)
|
||||||
@@ -69,7 +69,7 @@ var/global/list/robot_modules = list(
|
|||||||
for(var/module in modules)
|
for(var/module in modules)
|
||||||
qdel(module)
|
qdel(module)
|
||||||
for(var/synth in synths)
|
for(var/synth in synths)
|
||||||
qdel(synths)
|
qdel(synth)
|
||||||
modules.Cut()
|
modules.Cut()
|
||||||
synths.Cut()
|
synths.Cut()
|
||||||
qdel(emag)
|
qdel(emag)
|
||||||
@@ -105,14 +105,22 @@ var/global/list/robot_modules = list(
|
|||||||
modules += O
|
modules += O
|
||||||
|
|
||||||
/obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R)
|
/obj/item/weapon/robot_module/proc/add_languages(var/mob/living/silicon/robot/R)
|
||||||
|
// Stores the languages as they were before receiving the module, and whether they could be synthezized.
|
||||||
|
for(var/datum/language/language_datum in R.languages)
|
||||||
|
original_languages[language_datum] = (language_datum in R.speech_synthesizer_langs)
|
||||||
|
|
||||||
for(var/language in languages)
|
for(var/language in languages)
|
||||||
if(R.add_language(language, languages[language]))
|
R.add_language(language, languages[language])
|
||||||
added_languages |= language
|
|
||||||
|
|
||||||
/obj/item/weapon/robot_module/proc/remove_languages(var/mob/living/silicon/robot/R)
|
/obj/item/weapon/robot_module/proc/remove_languages(var/mob/living/silicon/robot/R)
|
||||||
for(var/language in added_languages)
|
// Clear all added languages, whether or not we originally had them.
|
||||||
|
for(var/language in languages)
|
||||||
R.remove_language(language)
|
R.remove_language(language)
|
||||||
added_languages.Cut()
|
|
||||||
|
// Then add back all the original languages, and the relevant synthezising ability
|
||||||
|
for(var/original_language in original_languages)
|
||||||
|
R.add_language(original_language, original_languages[original_language])
|
||||||
|
original_languages.Cut()
|
||||||
|
|
||||||
/obj/item/weapon/robot_module/proc/add_camera_networks(var/mob/living/silicon/robot/R)
|
/obj/item/weapon/robot_module/proc/add_camera_networks(var/mob/living/silicon/robot/R)
|
||||||
if(R.camera && (NETWORK_ROBOTS in R.camera.network))
|
if(R.camera && (NETWORK_ROBOTS in R.camera.network))
|
||||||
|
|||||||
@@ -201,16 +201,22 @@
|
|||||||
return universal_speak || (speaking in src.speech_synthesizer_langs) //need speech synthesizer support to vocalize a language
|
return universal_speak || (speaking in src.speech_synthesizer_langs) //need speech synthesizer support to vocalize a language
|
||||||
|
|
||||||
/mob/living/silicon/add_language(var/language, var/can_speak=1)
|
/mob/living/silicon/add_language(var/language, var/can_speak=1)
|
||||||
if (..(language) && can_speak)
|
var/var/datum/language/added_language = all_languages[language]
|
||||||
speech_synthesizer_langs.Add(all_languages[language])
|
if(!added_language)
|
||||||
|
return
|
||||||
|
|
||||||
|
. = ..(language)
|
||||||
|
if (can_speak && (added_language in languages) && !(added_language in speech_synthesizer_langs))
|
||||||
|
speech_synthesizer_langs += added_language
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/mob/living/silicon/remove_language(var/rem_language)
|
/mob/living/silicon/remove_language(var/rem_language)
|
||||||
..(rem_language)
|
var/var/datum/language/removed_language = all_languages[rem_language]
|
||||||
|
if(!removed_language)
|
||||||
|
return
|
||||||
|
|
||||||
for (var/datum/language/L in speech_synthesizer_langs)
|
..(rem_language)
|
||||||
if (L.name == rem_language)
|
speech_synthesizer_langs -= removed_language
|
||||||
speech_synthesizer_langs -= L
|
|
||||||
|
|
||||||
/mob/living/silicon/check_languages()
|
/mob/living/silicon/check_languages()
|
||||||
set name = "Check Known Languages"
|
set name = "Check Known Languages"
|
||||||
|
|||||||
@@ -71,6 +71,14 @@ macro "borghotkeymode"
|
|||||||
name = "SOUTH+REP"
|
name = "SOUTH+REP"
|
||||||
command = ".south"
|
command = ".south"
|
||||||
is-disabled = false
|
is-disabled = false
|
||||||
|
elem
|
||||||
|
name = "INSERT"
|
||||||
|
command = "a-intent right"
|
||||||
|
is-disabled = false
|
||||||
|
elem
|
||||||
|
name = "DELETE"
|
||||||
|
command = "delete-key-pressed"
|
||||||
|
is-disabled = false
|
||||||
elem
|
elem
|
||||||
name = "1"
|
name = "1"
|
||||||
command = "toggle-module 1"
|
command = "toggle-module 1"
|
||||||
@@ -103,14 +111,6 @@ macro "borghotkeymode"
|
|||||||
name = "CTRL+4"
|
name = "CTRL+4"
|
||||||
command = "a-intent left"
|
command = "a-intent left"
|
||||||
is-disabled = false
|
is-disabled = false
|
||||||
elem
|
|
||||||
name = "INSERT"
|
|
||||||
command = "a-intent right"
|
|
||||||
is-disabled = false
|
|
||||||
elem
|
|
||||||
name = "DELETE"
|
|
||||||
command = "delete-key-pressed"
|
|
||||||
is-disabled = false
|
|
||||||
elem
|
elem
|
||||||
name = "5"
|
name = "5"
|
||||||
command = ".me"
|
command = ".me"
|
||||||
@@ -359,7 +359,7 @@ macro "macro"
|
|||||||
is-disabled = false
|
is-disabled = false
|
||||||
elem
|
elem
|
||||||
name = "CTRL+4"
|
name = "CTRL+4"
|
||||||
command = "a-intent hurt"
|
command = "a-intent harm"
|
||||||
is-disabled = false
|
is-disabled = false
|
||||||
elem
|
elem
|
||||||
name = "CTRL+A+REP"
|
name = "CTRL+A+REP"
|
||||||
|
|||||||
Reference in New Issue
Block a user