mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Merge pull request #358 from SkyMarshal/master
Fixes for *custom v/h emotes, as well as some other stuff.
This commit is contained in:
@@ -175,8 +175,7 @@
|
||||
H.apply_damage(0.5*damage, BRUTE, "r_arm")
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/B = new(src.loc)
|
||||
B.blood_DNA = H.dna.unique_enzymes
|
||||
B.blood_type = H.b_type
|
||||
B.blood_DNA = list(list(H.dna.unique_enzymes, H.dna.btype))
|
||||
|
||||
H:weakened = max(H:weakened,2)
|
||||
H:updatehealth()
|
||||
|
||||
@@ -714,8 +714,11 @@ turf/proc/add_bloody_footprints(mob/living/carbon/human/M,leaving,d,info)
|
||||
this.dir = d
|
||||
this.desc = "These bloody footprints appear to have been made by [info]."
|
||||
if(istype(M,/mob/living/carbon/human))
|
||||
this.blood_DNA.len++
|
||||
this.blood_DNA[this.blood_DNA.len] = list(M.dna.unique_enzymes,M.b_type)
|
||||
if(this.blood_DNA.len)
|
||||
this.blood_DNA.len++
|
||||
this.blood_DNA[this.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
|
||||
else
|
||||
this.blood_DNA = list(list(M.dna.unique_enzymes,M.dna.b_type))
|
||||
|
||||
proc/get_tracks(mob/M)
|
||||
if(istype(M,/mob/living))
|
||||
|
||||
@@ -148,12 +148,12 @@
|
||||
I.Blend(new /icon('blood.dmi', "itemblood"),ICON_MULTIPLY)
|
||||
I.Blend(new /icon(src.icon, src.icon_state),ICON_UNDERLAY)
|
||||
src.icon = I
|
||||
if(src.blood_DNA)
|
||||
if(src.blood_DNA.len)
|
||||
src.blood_DNA.len++
|
||||
src.blood_DNA[src.blood_DNA.len] = list(M.dna.unique_enzymes,M.b_type)
|
||||
src.blood_DNA[src.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
|
||||
else
|
||||
var/list/blood_DNA_temp[1]
|
||||
blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.b_type)
|
||||
blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.dna.b_type)
|
||||
src.blood_DNA = blood_DNA_temp
|
||||
else if (istype(src, /turf/simulated))
|
||||
var/turf/simulated/source2 = src
|
||||
@@ -172,22 +172,19 @@
|
||||
this.viruses += newDisease
|
||||
newDisease.holder = this
|
||||
else if (istype(src, /mob/living/carbon/human))
|
||||
if(src.blood_DNA)
|
||||
if(src.blood_DNA.len)
|
||||
src.blood_DNA.len++
|
||||
src.blood_DNA[src.blood_DNA.len] = list(M.dna.unique_enzymes,M.b_type)
|
||||
src.blood_DNA[src.blood_DNA.len] = list(M.dna.unique_enzymes,M.dna.b_type)
|
||||
else
|
||||
var/list/blood_DNA_temp[1]
|
||||
blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.b_type)
|
||||
blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.dna.b_type)
|
||||
src.blood_DNA = blood_DNA_temp
|
||||
else
|
||||
return
|
||||
else
|
||||
var/list/L = params2list(src.blood_DNA)
|
||||
L -= M.dna.unique_enzymes
|
||||
while(L.len >= 3)
|
||||
L -= L[1]
|
||||
L += M.dna.unique_enzymes
|
||||
src.blood_DNA = list2params(L)
|
||||
var/list/blood_DNA_temp[1]
|
||||
blood_DNA_temp[1] = list(M.dna.unique_enzymes, M.dna.b_type)
|
||||
src.blood_DNA = blood_DNA_temp
|
||||
return
|
||||
|
||||
/atom/proc/add_vomit_floor(mob/living/carbon/M as mob, var/toxvomit = 0)
|
||||
|
||||
@@ -55,7 +55,6 @@ Devices and Tools;
|
||||
/obj/item/device/radio/headset/traitor:3:Headset with Binary Translator;
|
||||
/obj/item/weapon/plastique:2:C-4 (Destroys walls);
|
||||
/obj/item/weapon/syndie/c4explosive:4:Low Power Explosive Charge, with Detonator;
|
||||
/obj/item/weapon/syndie/c4explosive/heavy:7:High (!) Power Explosive Charge, with Detonator;
|
||||
/obj/item/device/powersink:5:Powersink (DANGER!);
|
||||
/obj/machinery/singularity_beacon/syndicate:7:Singularity Beacon (DANGER!);
|
||||
Whitespace:Seperator;
|
||||
@@ -69,6 +68,8 @@ Badassery;
|
||||
/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);
|
||||
Whitespace:Seperator;"}
|
||||
|
||||
//obj/item/weapon/syndie/c4explosive/heavy:7:High (!) Power Explosive Charge, with Detonator;
|
||||
|
||||
/datum/game_mode/proc/announce() //to be calles when round starts
|
||||
world << "<B>Notice</B>: [src] did not define announce()"
|
||||
|
||||
|
||||
@@ -806,7 +806,7 @@
|
||||
|
||||
var/obj/effect/decal/cleanable/blood/B = new(src.loc)
|
||||
B.blood_DNA.len++
|
||||
B.blood_DNA[B.blood_DNA.len] = list(H.dna.unique_enzymes, H.b_type)
|
||||
B.blood_DNA[B.blood_DNA.len] = list(H.dna.unique_enzymes, H.dna.b_type)
|
||||
|
||||
bloodiness += 4
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
<BR>
|
||||
<B>Name:</B> [src.victim.real_name]<BR>
|
||||
<B>Age:</B> [!isnull(src.victim.age) ? src.victim.age : "Undetermined"]<BR>
|
||||
<B>Blood Type:</B> [src.victim.b_type]<BR>
|
||||
<B>Blood Type:</B> [src.victim.dna.b_type]<BR>
|
||||
<BR>
|
||||
<B>Health:</B> [src.victim.health]<BR>
|
||||
<B>Brute Damage:</B> [src.victim.getBruteLoss()]<BR>
|
||||
|
||||
@@ -404,7 +404,7 @@ Pod/Blast Doors computer
|
||||
G.fields["fingerprint"] = text("[]", md5(H.dna.uni_identity))
|
||||
G.fields["p_stat"] = "Active"
|
||||
G.fields["m_stat"] = "Stable"
|
||||
M.fields["b_type"] = text("[]", H.b_type)
|
||||
M.fields["b_type"] = text("[]", H.dna.b_type)
|
||||
M.fields["b_dna"] = H.dna.unique_enzymes
|
||||
M.fields["mi_dis"] = "None"
|
||||
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
|
||||
@@ -428,7 +428,7 @@ Pod/Blast Doors computer
|
||||
L.fields["age"] = H.age
|
||||
L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
|
||||
L.fields["rank"] = H.mind.assigned_role
|
||||
L.fields["b_type"] = H.b_type
|
||||
L.fields["b_type"] = H.dna.b_type
|
||||
L.fields["b_dna"] = H.dna.unique_enzymes
|
||||
L.fields["enzymes"] = H.dna.struc_enzymes
|
||||
L.fields["identity"] = H.dna.uni_identity
|
||||
@@ -481,7 +481,7 @@ Pod/Blast Doors computer
|
||||
G.fields["fingerprint"] = text("[]", md5(H.dna.uni_identity))
|
||||
G.fields["p_stat"] = "Active"
|
||||
G.fields["m_stat"] = "Stable"
|
||||
M.fields["b_type"] = text("[]", H.b_type)
|
||||
M.fields["b_type"] = text("[]", H.dna.b_type)
|
||||
M.fields["b_dna"] = H.dna.unique_enzymes
|
||||
M.fields["mi_dis"] = "None"
|
||||
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
|
||||
@@ -505,7 +505,7 @@ Pod/Blast Doors computer
|
||||
L.fields["age"] = H.age
|
||||
L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
|
||||
L.fields["rank"] = H.mind.assigned_role
|
||||
L.fields["b_type"] = H.b_type
|
||||
L.fields["b_type"] = H.dna.b_type
|
||||
L.fields["b_dna"] = H.dna.unique_enzymes
|
||||
L.fields["enzymes"] = H.dna.struc_enzymes
|
||||
L.fields["identity"] = H.dna.uni_identity
|
||||
|
||||
@@ -46,7 +46,7 @@ obj/machinery/scanner/attack_hand(mob/living/carbon/human/user)
|
||||
lastuser = user.real_name
|
||||
var/mname = user.real_name
|
||||
var/dna = user.dna.unique_enzymes
|
||||
var/bloodtype = user.b_type
|
||||
var/bloodtype = user.dna.b_type
|
||||
var/fingerprint = md5(user.dna.uni_identity)
|
||||
var/list/marks = list()
|
||||
var/age = user.age
|
||||
|
||||
@@ -555,8 +555,11 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
R.word2 = w2
|
||||
R.word3 = w3
|
||||
R.check_icon()
|
||||
R.blood_DNA.len++
|
||||
R.blood_DNA[R.blood_DNA.len] = list(H.dna.unique_enzymes, H.b_type)
|
||||
if(R.blood_DNA.len)
|
||||
R.blood_DNA.len++
|
||||
R.blood_DNA[R.blood_DNA.len] = list(H.dna.unique_enzymes, H.dna.b_type)
|
||||
else
|
||||
R.blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type))
|
||||
return
|
||||
else
|
||||
user << "The book seems full of illegible scribbles. Is this a joke?"
|
||||
@@ -601,8 +604,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
|
||||
var/obj/effect/rune/R = new /obj/effect/rune
|
||||
if(istype(user, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = user
|
||||
R.blood_DNA.len++
|
||||
R.blood_DNA[R.blood_DNA.len] = list(H.dna.unique_enzymes, H.b_type)
|
||||
R.blood_DNA = list(list(H.dna.unique_enzymes, H.dna.b_type))
|
||||
switch(r)
|
||||
if("teleport")
|
||||
var/list/words = list("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
|
||||
|
||||
@@ -119,6 +119,7 @@ MASS SPECTROMETER
|
||||
F.fingerprints = md5(M.dna.uni_identity)
|
||||
F.icon_state = "fingerprint1"
|
||||
F.name = text("FPrintC- '[M.name]'")
|
||||
|
||||
user << "\blue Done printing."
|
||||
user << text("\blue [M]'s Fingerprints: [md5(M.dna.uni_identity)]")
|
||||
if ( !(M.blood_DNA) )
|
||||
@@ -126,7 +127,7 @@ MASS SPECTROMETER
|
||||
else
|
||||
user << "\blue Blood found on [M]. Analysing..."
|
||||
spawn(15)
|
||||
for(var/i = 1, i < M.blood_DNA.len, i++)
|
||||
for(var/i = 1, i <= M.blood_DNA.len, i++)
|
||||
var/list/templist = M.blood_DNA[i]
|
||||
user << "\blue Blood type: [templist[2]]\nDNA: [templist[1]]"
|
||||
return
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/mob/living/carbon/human/emote(var/act,var/m_type=1,var/message = null)
|
||||
var/param = null
|
||||
|
||||
if (findtext(act, "-", 1, null))
|
||||
var/t1 = findtext(act, "-", 1, null)
|
||||
if (findtext(act, " ", 1, null))
|
||||
var/t1 = findtext(act, " ", 1, null)
|
||||
param = copytext(act, t1 + 1, length(act) + 1)
|
||||
act = copytext(act, 1, t1)
|
||||
|
||||
@@ -50,22 +50,33 @@
|
||||
m_type = 1
|
||||
|
||||
if ("custom")
|
||||
var/input = input("Choose an emote to display.") as text|null
|
||||
if (!input)
|
||||
return
|
||||
input = sanitize(input)
|
||||
var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
|
||||
if (input2 == "Visible")
|
||||
m_type = 0
|
||||
if(copytext(param,1,2) == "v")
|
||||
m_type = 1
|
||||
else if (input2 == "Hearable")
|
||||
if (src.miming)
|
||||
return
|
||||
else if(copytext(param,1,2) == "h")
|
||||
m_type = 2
|
||||
else
|
||||
alert("Unable to use this emote, must be either hearable or visible.")
|
||||
var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
|
||||
if (input2 == "Visible")
|
||||
m_type = 1
|
||||
else if (input2 == "Hearable")
|
||||
m_type = 2
|
||||
else
|
||||
alert("Unable to use this emote, must be either hearable or visible.")
|
||||
return
|
||||
if(m_type)
|
||||
param = trim(copytext(param,2))
|
||||
else
|
||||
param = trim(param)
|
||||
var/input
|
||||
if(!param)
|
||||
input = input("Choose an emote to display.") as text|null
|
||||
else
|
||||
input = param
|
||||
if(input)
|
||||
message = "<B>[src]</B> [input]"
|
||||
else
|
||||
return
|
||||
message = "<B>[src]</B> [input]"
|
||||
|
||||
if ("me")
|
||||
if(silent)
|
||||
return
|
||||
@@ -186,6 +197,20 @@
|
||||
message = "<B>[src]</B> makes a weak noise."
|
||||
m_type = 2
|
||||
|
||||
if ("breathe")
|
||||
message = "<B>[src]</B> breathes."
|
||||
m_type = 1
|
||||
holdbreath = 0
|
||||
|
||||
if ("stopbreath")
|
||||
message = "<B>[src]</B> stops breathing..."
|
||||
m_type = 1
|
||||
|
||||
if ("holdbreath")
|
||||
message = "<B>[src]</B> stops breathing..."
|
||||
m_type = 1
|
||||
holdbreath = 1
|
||||
|
||||
if ("deathgasp")
|
||||
message = "<B>[src]</B> seizes up and falls limp, \his eyes dead and lifeless..."
|
||||
m_type = 1
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
|
||||
if (src.stat == 1 || stat == 2)
|
||||
usr << "\red [name] doesn't seem to be responding to anything around [t_him], [t_his] eyes closed as though asleep."
|
||||
if(health < 0 && distance <= 3)
|
||||
if((!isbreathing || holdbreath) && distance <= 3)
|
||||
usr << "\red [name] does not appear to be breathing."
|
||||
if(istype(usr, /mob/living/carbon/human) && usr.stat == 0 && src.stat == 1 && distance <= 1)
|
||||
for(var/mob/O in viewers(usr.loc, null))
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
var/b_eyes = 0.0
|
||||
var/s_tone = 0.0
|
||||
var/age = 30.0
|
||||
var/b_type
|
||||
// var/b_type
|
||||
|
||||
var/obj/item/clothing/suit/wear_suit = null
|
||||
var/obj/item/clothing/under/w_uniform = null
|
||||
|
||||
@@ -10,6 +10,8 @@
|
||||
|
||||
// used to do some stuff only on every X life tick
|
||||
life_tick = 0
|
||||
isbreathing = 1
|
||||
holdbreath = 0
|
||||
|
||||
/mob/living/carbon/human/Life()
|
||||
set invisibility = 0
|
||||
@@ -272,16 +274,37 @@
|
||||
var/datum/air_group/breath
|
||||
// HACK NEED CHANGING LATER
|
||||
if(health < config.health_threshold_dead)
|
||||
losebreath++
|
||||
isbreathing = 0
|
||||
spawn emote("stopbreath")
|
||||
|
||||
if(losebreath>0 && prob(90)) //Suffocating so do not take a breath
|
||||
losebreath--
|
||||
if (prob(75)) //High chance of gasping for air
|
||||
spawn emote("gasp")
|
||||
if(holdbreath)
|
||||
isbreathing = 0
|
||||
|
||||
if(isbreathing)
|
||||
// are we running out of air in our lungs?
|
||||
if(losebreath > 0)
|
||||
// inaprovaline prevents the need to breathe for a while
|
||||
if(reagents.has_reagent("inaprovaline"))
|
||||
losebreath = 0
|
||||
else
|
||||
// we're running out of air, gasp for it!
|
||||
if (prob(25)) //High chance of gasping for air
|
||||
spawn emote("gasp")
|
||||
else if(health >= 0)
|
||||
if(holdbreath)
|
||||
// we're simply holding our breath, see if we can hold it longer
|
||||
if(health < 30)
|
||||
holdbreath = 0
|
||||
isbreathing = 1
|
||||
spawn emote("custom h inhales sharply.")
|
||||
else
|
||||
isbreathing = 1
|
||||
emote("breathe")
|
||||
else
|
||||
if(istype(loc, /obj/))
|
||||
var/obj/location_as_object = loc
|
||||
location_as_object.handle_internal_lifeform(src, 0)
|
||||
else
|
||||
if(isbreathing)
|
||||
//First, check for air from internal atmosphere (using an air tank and mask generally)
|
||||
breath = get_breath_from_internal(BREATH_VOLUME) // Super hacky -- TLE
|
||||
//breath = get_breath_from_internal(0.5) // Manually setting to old BREATH_VOLUME amount -- TLE
|
||||
|
||||
@@ -51,15 +51,15 @@
|
||||
src << "To use something, simply double-click it."
|
||||
src << "Currently right-click functions will not work for the AI (except examine), and will either be replaced with dialogs or won't be usable by the AI."
|
||||
src << "Remember to <b>adjust your camera network</b> if you are having difficulty navigating the camera networks with the arrow keys or clicking on certain objects.<br>"
|
||||
src << "<br><b><font color=red>IMPORTANT GAMEPLAY ASPECTS:</font></b>"
|
||||
src << "1.) Act like an AI. If someone is breaking into your upload, say something like \"Alert. Unauthorised Access Detected: AI Upload.\" not \"Help! Urist is trying to subvert me!\""
|
||||
src << "2.) Do not watch the traitor like a hawk alerting the station to his/her every move. This relates to 1."
|
||||
src << "3.) You are theoretically omniscient, but you should not be Beepsky 5000, laying down the law left and right. That is security's job. Instead, try to keep the station productive and effective. (Feel free to report the location of major violence and crimes and all that, just do not be the evil thing looking over peoples shoulders)"
|
||||
src << "<br>We want everyone to have a good time, so we, the admins, will try to correct you if you stray from these rules. Just try to keep it sensible."
|
||||
|
||||
if (!(ticker && ticker.mode && (mind in ticker.mode.malf_ai)))
|
||||
show_laws()
|
||||
src << "<b>These laws may be changed by other players, or by you being the traitor.</b>"
|
||||
src << "<br><b><font color=red>IMPORTANT GAMEPLAY ASPECTS:</font></b>"
|
||||
src << "1.) Act like an AI. If someone is breaking into your upload, say something like \"Alert. Unauthorised Access Detected: AI Upload.\" not \"Help! Urist is trying to subvert me!\""
|
||||
src << "2.) Do not watch the traitor like a hawk alerting the station to his/her every move. This relates to 1."
|
||||
src << "3.) You are theoretically omniscient, but you should not be Beepsky 5000, laying down the law left and right. That is security's job. Instead, try to keep the station productive and effective. (Feel free to report the location of major violence and crimes and all that, just do not be the evil thing looking over peoples shoulders)"
|
||||
src << "<br>We want everyone to have a good time, so we, the admins, will try to correct you if you stray from these rules. Just try to keep it sensible."
|
||||
job = "AI"
|
||||
|
||||
spawn(0)
|
||||
|
||||
@@ -119,6 +119,12 @@
|
||||
if (!(ticker && ticker.mode && (O.mind in ticker.mode.malf_ai)))
|
||||
O.show_laws()
|
||||
O << "<b>These laws may be changed by other players, or by you being the traitor.</b>"
|
||||
O << "<br><b><font color=red>IMPORTANT GAMEPLAY ASPECTS:</font></b>"
|
||||
O << "1.) Act like an AI. If someone is breaking into your upload, say something like \"Alert. Unauthorised Access Detected: AI Upload.\" not \"Help! Urist is trying to subvert me!\""
|
||||
O << "2.) Do not watch the traitor like a hawk alerting the station to his/her every move. This relates to 1."
|
||||
O << "3.) You are theoretically omniscient, but you should not be Beepsky 5000, laying down the law left and right. That is security's job. Instead, try to keep the station productive and effective. (Feel free to report the location of major violence and crimes and all that, just do not be the evil thing looking over peoples shoulders)"
|
||||
O << "<br>We want everyone to have a good time, so we, the admins, will try to correct you if you stray from these rules. Just try to keep it sensible."
|
||||
|
||||
|
||||
O.verbs += /mob/living/silicon/ai/proc/ai_call_shuttle
|
||||
O.verbs += /mob/living/silicon/ai/proc/show_laws_verb
|
||||
|
||||
Reference in New Issue
Block a user