/mob/living/silicon gender = NEUTER voice_name = "synthesized voice" var/syndicate = 0 var/datum/ai_laws/laws = null//Now... THEY ALL CAN ALL HAVE LAWS var/list/additional_law_channels = list("State") var/const/MAIN_CHANNEL = "Main Frequency" var/lawchannel = MAIN_CHANNEL // Default channel on which to state laws var/list/stating_laws = list()// Channels laws are currently being stated on var/lawcheck[1] var/ioncheck[1] var/obj/item/device/radio/common_radio immune_to_ssd = 1 var/list/hud_list[9] var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer //Used in say.dm. var/speak_statement = "states" var/speak_exclamation = "declares" var/speak_query = "queries" var/pose //Yes, now AIs can pose too. var/obj/item/device/camera/siliconcam/aiCamera = null //photography var/local_transmit //If set, can only speak to others of the same type within a short range. var/sensor_mode = 0 //Determines the current HUD. #define SEC_HUD 1 //Security HUD mode #define MED_HUD 2 //Medical HUD mode /mob/living/silicon/New() ..() add_language("Galactic Common") /mob/living/silicon/proc/show_laws() return /mob/living/silicon/drop_item() return /mob/living/silicon/emp_act(severity) switch(severity) if(1) src.take_organ_damage(20) Stun(rand(5,10)) if(2) src.take_organ_damage(10) Stun(rand(1,5)) flick("noise", src:flash) src << "\red *BZZZT*" src << "\red Warning: Electromagnetic pulse detected." ..() /mob/living/silicon/stun_effect_act(var/stun_amount, var/agony_amount) return //immune /mob/living/silicon/electrocute_act(var/shock_damage, var/obj/source, var/siemens_coeff = 1.0) if (istype(source, /obj/machinery/containment_field)) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, loc) s.start() shock_damage *= 0.75 //take reduced damage take_overall_damage(0, shock_damage) visible_message("\red [src] was shocked by \the [source]!", \ "\red Energy pulse detected, system damaged!", \ "\red You hear an electrical crack") if(prob(20)) Stun(2) return /mob/living/silicon/proc/damage_mob(var/brute = 0, var/fire = 0, var/tox = 0) return /mob/living/silicon/IsAdvancedToolUser() return 1 /mob/living/silicon/blob_act() if (src.stat != 2) src.adjustBruteLoss(60) src.updatehealth() return 1 return 0 /mob/living/silicon/bullet_act(var/obj/item/projectile/Proj) if(!Proj.nodamage) switch(Proj.damage_type) if(BRUTE) adjustBruteLoss(Proj.damage) if(BURN) adjustFireLoss(Proj.damage) Proj.on_hit(src,2) updatehealth() return 2 /mob/living/silicon/apply_effect(var/effect = 0,var/effecttype = STUN, var/blocked = 0) return 0//The only effect that can hit them atm is flashes and they still directly edit so this works for now /* if(!effect || (blocked >= 2)) return 0 switch(effecttype) if(STUN) stunned = max(stunned,(effect/(blocked+1))) if(WEAKEN) weakened = max(weakened,(effect/(blocked+1))) if(PARALYZE) paralysis = max(paralysis,(effect/(blocked+1))) if(IRRADIATE) radiation += min((effect - (effect*getarmor(null, "rad"))), 0)//Rads auto check armor if(STUTTER) stuttering = max(stuttering,(effect/(blocked+1))) if(EYE_BLUR) eye_blurry = max(eye_blurry,(effect/(blocked+1))) if(DROWSY) drowsyness = max(drowsyness,(effect/(blocked+1))) updatehealth() return 1*/ /proc/islinked(var/mob/living/silicon/robot/bot, var/mob/living/silicon/ai/ai) if(!istype(bot) || !istype(ai)) return 0 if (bot.connected_ai == ai) return 1 return 0 // this function shows the health of the AI in the Status panel /mob/living/silicon/proc/show_system_integrity() if(!src.stat) stat(null, text("System integrity: [round((health/maxHealth)*100)]%")) else stat(null, text("Systems nonfunctional")) // This is a pure virtual function, it should be overwritten by all subclasses /mob/living/silicon/proc/show_malf_ai() return 0 // this function displays the station time in the status panel /mob/living/silicon/proc/show_station_time() stat(null, "Station Time: [worldtime2text()]") // this function displays the shuttles ETA in the status panel if the shuttle has been called /mob/living/silicon/proc/show_emergency_shuttle_eta() if(emergency_shuttle) var/eta_status = emergency_shuttle.get_status_panel_eta() if(eta_status) stat(null, eta_status) // This adds the basic clock, shuttle recall timer, and malf_ai info to all silicon lifeforms /mob/living/silicon/Stat() ..() statpanel("Status") if (src.client.statpanel == "Status") show_station_time() show_emergency_shuttle_eta() show_system_integrity() show_malf_ai() // this function displays the stations manifest in a separate window /mob/living/silicon/proc/show_station_manifest() var/dat dat += "