Merge remote-tracking branch 'citadel/master' into mobility_flags

This commit is contained in:
kevinz000
2020-02-27 20:11:36 -07:00
196 changed files with 170125 additions and 14092 deletions
@@ -170,6 +170,18 @@
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
color_src = MATRIXED
/datum/sprite_accessory/tails/human/twocat
name = "Cat, Double"
icon_state = "twocat"
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
color_src = MATRIXED
/datum/sprite_accessory/tails_animated/human/twocat
name = "Cat, Double"
icon_state = "twocat"
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
color_src = MATRIXED
/datum/sprite_accessory/tails/human/cow
name = "Cow"
icon_state = "cow"
@@ -562,6 +574,14 @@
/datum/sprite_accessory/mam_tails_animated/catbig
name = "Cat, Big"
icon_state = "catbig"
/datum/sprite_accessory/mam_tails/twocat
name = "Cat, Double"
icon_state = "twocat"
/datum/sprite_accessory/mam_tails_animated/twocat
name = "Cat, Double"
icon_state = "twocat"
/datum/sprite_accessory/mam_tails/corvid
name = "Corvid"
+4 -2
View File
@@ -289,7 +289,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES
if(world.time < roundstart_quit_limit)
penalty += roundstart_quit_limit - world.time
if(penalty + world.realtime - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
var/maximumRoundEnd = SSautotransfer.starttime + SSautotransfer.voteinterval * SSautotransfer.maxvotes
if(penalty - SSshuttle.realtimeofstart > maximumRoundEnd + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
penalty = CANT_REENTER_ROUND
if(SEND_SIGNAL(src, COMSIG_MOB_GHOSTIZE, (stat == DEAD) ? TRUE : FALSE, FALSE, (stat == DEAD)? penalty : 0, (stat == DEAD)? TRUE : FALSE) & COMPONENT_BLOCK_GHOSTING)
@@ -323,7 +324,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES
if(world.time < roundstart_quit_limit)
penalty += roundstart_quit_limit - world.time
if(penalty + world.realtime - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
var/maximumRoundEnd = SSautotransfer.starttime + SSautotransfer.voteinterval * SSautotransfer.maxvotes
if(penalty - SSshuttle.realtimeofstart > maximumRoundEnd + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
penalty = CANT_REENTER_ROUND
var/response = alert(src, "Are you -sure- you want to ghost?\n(You are alive. If you ghost whilst alive you won't be able to re-enter this round [penalty ? "or play ghost roles [penalty == CANT_REENTER_ROUND ? "until the round is over" : "for the next [DisplayTimeText(penalty)]"]" : ""]! You can't change your mind so choose wisely!!)","Are you sure you want to ghost?","Ghost","Stay in body")
@@ -397,7 +397,7 @@
var/flavor = print_flavor_text(flavor_text)
if(flavor)
. += flavor
var/temp_flavor = print_flavor_text(flavor_text_2)
var/temp_flavor = print_flavor_text(flavor_text_2,TRUE)
if(temp_flavor)
. += temp_flavor
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, .)
@@ -3,7 +3,7 @@
id = "insect"
default_color = "00FF00"
species_traits = list(LIPS,EYECOLOR,HAIR,FACEHAIR,MUTCOLORS,HORNCOLOR,WINGCOLOR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID, MOB_BUG)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BUG
mutant_bodyparts = list("mam_ears","mam_tail", "taur", "insect_wings","mam_snout", "mam_snouts", "insect_fluff","insect_markings")
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_tail" = "None", "mam_ears" = "None",
"insect_wings" = "None", "insect_fluff" = "None", "mam_snouts" = "None", "taur" = "None", "insect_markings" = "None")
@@ -4,7 +4,7 @@
default_color = "4B4B4B"
should_draw_citadel = TRUE
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR,WINGCOLOR)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BEAST
mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "mam_snouts", "deco_wings", "taur", "horns", "legs")
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "deco_wings" = "None",
"mam_body_markings" = "Husky", "taur" = "None", "horns" = "None", "legs" = "Plantigrade", "meat_type" = "Mammalian")
@@ -57,7 +57,6 @@
default_color = "00FF00"
should_draw_citadel = TRUE
species_traits = list(MUTCOLORS,EYECOLOR,LIPS)
inherent_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
mutant_bodyparts = list("xenotail", "xenohead", "xenodorsal", "mam_body_markings", "taur", "legs")
default_features = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade")
attack_verb = "slash"
@@ -636,7 +636,7 @@
limbs_id = "clockgolem"
info_text = "<span class='bold alloy'>As a </span><span class='bold brass'>Clockwork Golem</span><span class='bold alloy'>, you are faster than other types of golems, and are capable of using guns. On death, you will break down into scrap.</span>"
species_traits = list(NOBLOOD,NO_UNDERWEAR,NOEYES,NOGENITALS,NOAROUSAL)
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
inherent_traits = list(TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTCOLD,TRAIT_RESISTHIGHPRESSURE,TRAIT_RESISTLOWPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_PIERCEIMMUNE,TRAIT_NODISMEMBER)
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
armor = 20 //Reinforced, but much less so to allow for fast movement
@@ -969,7 +969,7 @@
special_names = list("Head", "Broth", "Fracture", "Rattler", "Appetit")
liked_food = GROSS | MEAT | RAW
toxic_food = null
inherent_biotypes = list(MOB_UNDEAD, MOB_HUMANOID)
inherent_biotypes = MOB_UNDEAD|MOB_HUMANOID
mutanttongue = /obj/item/organ/tongue/bone
sexes = FALSE
fixed_mut_color = "ffffff"
@@ -7,13 +7,19 @@
blacklisted = 0
sexes = 0
species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING)
inherent_biotypes = list(MOB_ROBOTIC, MOB_HUMANOID)
inherent_biotypes = MOB_ROBOTIC|MOB_HUMANOID
mutant_bodyparts = list("ipc_screen", "ipc_antenna")
default_features = list("ipc_screen" = "Blank", "ipc_antenna" = "None")
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/ipc
gib_types = list(/obj/effect/gibspawner/ipc, /obj/effect/gibspawner/ipc/bodypartless)
mutanttongue = /obj/item/organ/tongue/robot/ipc
//Just robo looking parts.
mutant_heart = /obj/item/organ/heart/ipc
mutantlungs = /obj/item/organ/lungs/ipc
mutantliver = /obj/item/organ/liver/ipc
mutantstomach = /obj/item/organ/stomach/ipc
mutanteyes = /obj/item/organ/eyes/ipc
exotic_bloodtype = "HF"
var/datum/action/innate/monitor_change/screen
+1 -1
View File
@@ -146,7 +146,7 @@
aiPDA.name = name + " (" + aiPDA.ownjob + ")"
aiMulti = new(src)
radio = new /obj/item/radio/headset/ai(src)
radio = new /obj/item/radio/headset/silicon/ai(src)
aicamera = new/obj/item/camera/siliconcam/ai_camera(src)
deploy_action.Grant(src)
+16 -1
View File
@@ -10,6 +10,7 @@
health = 500
maxHealth = 500
layer = BELOW_MOB_LAYER
var/obj/item/instrument/piano_synth/internal_instrument
silicon_privileges = PRIVILEDGES_PAI
var/datum/element/mob_holder/current_mob_holder //because only a few of their chassis can be actually held.
@@ -27,6 +28,7 @@
var/speakDoubleExclamation = "alarms"
var/speakQuery = "queries"
var/obj/item/radio/headset // The pAI's headset
var/obj/item/pai_cable/cable // The cable we produce and use when door or camera jacking
var/master // Name of the one who commands us
@@ -54,6 +56,7 @@
var/obj/item/integrated_signaler/signaler // AI's signaller
var/encryptmod = FALSE
var/holoform = FALSE
var/canholo = TRUE
var/obj/item/card/id/access_card = null
@@ -84,6 +87,7 @@
var/icon/custom_holoform_icon
/mob/living/silicon/pai/Destroy()
QDEL_NULL(internal_instrument)
if (loc != card)
card.forceMove(drop_location())
card.pai = null
@@ -105,7 +109,7 @@
card = P
signaler = new(src)
if(!radio)
radio = new /obj/item/radio(src)
radio = new /obj/item/radio/headset/silicon/pai(src)
//PDA
pda = new(src)
@@ -295,6 +299,17 @@
/mob/living/silicon/pai/process()
emitterhealth = CLAMP((emitterhealth + emitterregen), -50, emittermaxhealth)
/obj/item/paicard/attackby(obj/item/W, mob/user, params)
..()
user.set_machine(src)
if(pai.encryptmod == TRUE)
if(W.tool_behaviour == TOOL_SCREWDRIVER)
pai.radio.attackby(W, user, params)
else if(istype(W, /obj/item/encryptionkey))
pai.radio.attackby(W, user, params)
else
to_chat(user, "Encryption Key ports not configured.")
/mob/living/silicon/pai/proc/short_radio()
if(radio_short_timerid)
deltimer(radio_short_timerid)
@@ -20,6 +20,8 @@
"universal translator" = 35,
//"projection array" = 15
"remote signaller" = 5,
"loudness booster" = 25,
"encryption keys" = 20
)
/mob/living/silicon/pai/proc/paiInterface()
@@ -50,6 +52,8 @@
left_part = softwareMedicalRecord()
if("securityrecord")
left_part = softwareSecurityRecord()
if("encryptionkeys")
left_part = softwareEncryptionKeys()
if("translator")
left_part = softwareTranslator()
if("atmosensor")
@@ -64,6 +68,8 @@
left_part = softwareCamera()
if("signaller")
left_part = softwareSignal()
if("loudness")
left_part = softwareLoudness()
//usr << browse_rsc('windowbak.png') // This has been moved to the mob's Login() proc
@@ -256,6 +262,9 @@
else
var/datum/atom_hud/med = GLOB.huds[med_hud]
med.remove_hud_from(src)
if("encryptionkeys")
if(href_list["toggle"])
encryptmod = TRUE
if("translator")
if(href_list["toggle"])
grant_all_languages(TRUE)
@@ -271,6 +280,12 @@
var/turf/T = get_turf(loc)
cable = new /obj/item/pai_cable(T)
T.visible_message("<span class='warning'>A port on [src] opens to reveal [cable], which promptly falls to the floor.</span>", "<span class='italics'>You hear the soft click of something light and hard falling to the ground.</span>")
if("loudness")
if(subscreen == 1) // Open Instrument
internal_instrument.interact(src)
if(subscreen == 2) // Change Instrument type
internal_instrument.selectInstrument()
//updateUsrDialog() We only need to account for the single mob this is intended for, and he will *always* be able to call this window
paiInterface() // So we'll just call the update directly rather than doing some default checks
return
@@ -306,6 +321,8 @@
dat += "<a href='byond://?src=[REF(src)];software=[s]'>Camera Jack</a> <br>"
if(s == "remote signaller")
dat += "<a href='byond://?src=[REF(src)];software=signaller;sub=0'>Remote Signaller</a> <br>"
if(s == "loudness booster")
dat += "<a href='byond://?src=[REF(src)];software=loudness;sub=0'>Loudness Booster</a> <br>"
dat += "<br>"
// Advanced
@@ -319,6 +336,8 @@
dat += "<a href='byond://?src=[REF(src)];software=securityhud;sub=0'>Facial Recognition Suite</a>[(secHUD) ? "<font color=#55FF55> On</font>" : "<font color=#FF5555> Off</font>"] <br>"
if(s == "medical HUD")
dat += "<a href='byond://?src=[REF(src)];software=medicalhud;sub=0'>Medical Analysis Suite</a>[(medHUD) ? "<font color=#55FF55> On</font>" : "<font color=#FF5555> Off</font>"] <br>"
if(s == "encryption keys")
dat += "<a href='byond://?src=[REF(src)];software=encryptionkeys;sub=0'>Channel Encryption Firmware</a>[(encryptmod) ? "<font color=#55FF55> On</font>" : "<font color=#FF5555> Off</font>"] <br>"
if(s == "universal translator")
var/datum/language_holder/H = get_language_holder()
dat += "<a href='byond://?src=[REF(src)];software=translator;sub=0'>Universal Translator</a>[H.omnitongue ? "<font color=#55FF55> On</font>" : "<font color=#FF5555> Off</font>"] <br>"
@@ -469,6 +488,14 @@
. += "<pre>Requested security record not found,</pre><BR>"
. += "<BR>\n<A href='?src=[REF(src)];software=securityrecord;sub=0'>Back</A><BR>"
return .
// Encryption Keys
// Encryption kets
/mob/living/silicon/pai/proc/softwareEncryptionKeys()
var/dat = {"<h3>Encryption Key Firmware</h3><br>
When enabled, this device will be able to use up to two (2) encryption keys for departmental channel access.<br><br>
The device is currently [encryptmod ? "<font color=#55FF55>en" : "<font color=#FF5555>dis" ]abled.</font><br>[encryptmod ? "" : "<a href='byond://?src=[REF(src)];software=encryptionkeys;sub=0;toggle=1'>Activate Encryption Key Ports</a><br>"]"}
return dat
// Universal Translator
/mob/living/silicon/pai/proc/softwareTranslator()
@@ -630,3 +657,12 @@
dat += "<br><br>"
dat += "Messages: <hr> [pda.tnote]"
return dat
// Loudness Booster
/mob/living/silicon/pai/proc/softwareLoudness()
if(!internal_instrument)
internal_instrument = new(src)
var/dat = "<h3>Sound Synthetizer</h3>"
dat += "<a href='byond://?src=[REF(src)];software=loudness;sub=1'>Open Synthesizer Interface</a><br>"
dat += "<a href='byond://?src=[REF(src)];software=loudness;sub=2'>Choose Instrument Type</a>"
return dat
@@ -4,7 +4,7 @@
icon = 'icons/mob/mob.dmi'
icon_state = "ghost"
icon_living = "ghost"
mob_biotypes = list(MOB_SPIRIT)
mob_biotypes = MOB_SPIRIT
attacktext = "raises the hairs on the neck of"
response_harm = "disrupts the concentration of"
response_disarm = "wafts"
@@ -18,7 +18,7 @@
pass_flags = PASSTABLE | PASSGRILLE | PASSMOB
ventcrawler = VENTCRAWLER_ALWAYS
mob_size = MOB_SIZE_TINY
mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
mob_biotypes = MOB_ORGANIC|MOB_BEAST
gold_core_spawnable = FRIENDLY_SPAWN
verb_say = "bzzs"
verb_ask = "bzzs inquisitively"
@@ -34,14 +34,12 @@
AddElement(/datum/element/wuv, "bzzs!")
/mob/living/simple_animal/pet/bumbles/update_canmove()
..()
. = ..()
if(client && stat != DEAD)
if (resting)
icon_state = "[icon_living]_rest"
collar_type = "[initial(collar_type)]_rest"
else
icon_state = "[icon_living]"
collar_type = "[initial(collar_type)]"
regenerate_icons()
/mob/living/simple_animal/pet/bumbles/bee_friendly()
@@ -10,7 +10,7 @@
icon_living = "basic"
icon_dead = "basic"
gender = NEUTER
mob_biotypes = list(MOB_ROBOTIC)
mob_biotypes = MOB_ROBOTIC
health = 50
maxHealth = 50
healable = 0
@@ -47,7 +47,7 @@ GLOBAL_LIST_INIT(AISwarmerCapsByType, list(/mob/living/simple_animal/hostile/swa
icon_state = "swarmer_console"
health = 750
maxHealth = 750 //""""low-ish"""" HP because it's a passive boss, and the swarm itself is the real foe
mob_biotypes = list(MOB_ROBOTIC)
mob_biotypes = MOB_ROBOTIC
medal_type = BOSS_MEDAL_SWARMERS
score_type = SWARMER_BEACON_SCORE
faction = list("mining", "boss", "swarmer")
@@ -37,7 +37,7 @@
throw_message = "does nothing to the rocky hide of the"
speed = 2
move_to_delay = 5
mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
mob_biotypes = MOB_ORGANIC|MOB_BEAST
mouse_opacity = MOUSE_OPACITY_ICON
deathmessage = "explodes into gore!"
loot_drop = /obj/item/crusher_trophy/broodmother_tongue
@@ -178,7 +178,7 @@
throw_message = "does nothing to the rocky hide of the"
speed = 2
move_to_delay = 5
mob_biotypes = list(MOB_ORGANIC, MOB_BEAST)
mob_biotypes = MOB_ORGANIC|MOB_BEAST
mouse_opacity = MOUSE_OPACITY_ICON
butcher_results = list()
guaranteed_butcher_results = list(/obj/item/stack/sheet/animalhide/goliath_hide = 1)
@@ -81,11 +81,13 @@
throw_message = "falls right through the strange body of the"
obj_damage = 0
environment_smash = ENVIRONMENT_SMASH_NONE
pass_flags = PASSTABLE
pass_flags = PASSTABLE | PASSMOB //they shouldn't get stuck behind hivelords.
density = FALSE
del_on_death = 1
/mob/living/simple_animal/hostile/asteroid/hivelordbrood/Initialize()
. = ..()
AddComponent(/datum/component/swarming) //oh god not the bees
addtimer(CALLBACK(src, .proc/death), 100)
//Legion
@@ -135,6 +137,11 @@
crusher_drop_mod = 20
dwarf_mob = TRUE
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/beegion
name = "beegion"
desc = "You can still see what was once a human under the shifting mass of - oh my God, those are bees."
brood_type = /mob/living/simple_animal/hostile/poison/bees/toxin
/mob/living/simple_animal/hostile/asteroid/hivelord/legion/death(gibbed)
visible_message("<span class='warning'>The skulls on [src] wail in anger as they flee from their dying host!</span>")
var/turf/T = get_turf(src)
@@ -174,7 +181,6 @@
speak_emote = list("echoes")
attack_sound = 'sound/weapons/pierce.ogg'
throw_message = "is shrugged off by"
pass_flags = PASSTABLE
del_on_death = TRUE
stat_attack = UNCONSCIOUS
robust_searching = 1
@@ -64,7 +64,7 @@
icon_state = "husk"
icon_living = "husk"
icon_dead = "husk"
mob_biotypes = list(MOB_ORGANIC, MOB_HUMANOID)
mob_biotypes = MOB_ORGANIC|MOB_HUMANOID
speak_chance = 0
stat_attack = UNCONSCIOUS //braains
maxHealth = 100