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
@@ -31,8 +31,8 @@
var/datum/changeling/changeling = user.mind.changeling
var/mob/living/carbon/human/target = user.pulling
changeling.isabsorbing = 1
for(var/stage = 1, stage<=3, stage++)
switch(stage)
for(var/i in 1 to 3)
switch(i)
if(1)
to_chat(user, "<span class='notice'>This creature is compatible. We must hold still...</span>")
if(2)
@@ -42,12 +42,13 @@
to_chat(target, "<span class='userdanger'>You feel a sharp stabbing pain!</span>")
target.take_overall_damage(40)
feedback_add_details("changeling_powers","A[stage]")
feedback_add_details("changeling_powers","Absorb DNA|[i]")
if(!do_mob(user, target, 150))
to_chat(user, "<span class='warning'>Our absorption of [target] has been interrupted!</span>")
changeling.isabsorbing = 0
return
feedback_add_details("changeling_powers","Absorb DNA|4")
user.visible_message("<span class='danger'>[user] sucks the fluids from [target]!</span>", "<span class='notice'>We have absorbed [target].</span>")
to_chat(target, "<span class='userdanger'>You are absorbed by the changeling!</span>")
@@ -99,7 +100,7 @@
target.death(0)
target.Drain()
return 1
return TRUE
@@ -17,6 +17,5 @@
user.reagents.add_reagent("changelingAdrenaline", 10)
user.reagents.add_reagent("changelingAdrenaline2", 2) //For a really quick burst of speed
user.adjustStaminaLoss(-75)
feedback_add_details("changeling_powers","UNS")
return 1
return TRUE
@@ -53,9 +53,7 @@
addtimer(CALLBACK(src, .proc/dissolve_cocoon, user, C), 25) //Very short because it's just webs
used = TRUE
if(used)
feedback_add_details("changeling_powers","BD")
return 1
return used
/obj/effect/proc_holder/changeling/biodegrade/proc/dissolve_handcuffs(mob/living/carbon/human/user, obj/O)
if(O && user.handcuffed == O)
@@ -13,18 +13,16 @@
var/mob/living/carbon/human/H = user //SHOULD always be human, because req_human = 1
if(!istype(H)) // req_human could be done in can_sting stuff.
return
var/datum/mutation/human/HM = mutations_list[CHAMELEON]
var/datum/mutation/human/HM = GLOB.mutations_list[CHAMELEON]
if(HM in H.dna.mutations)
HM.force_lose(H)
else
HM.force_give(H)
feedback_add_details("changeling_powers","CS")
return 1
return TRUE
/obj/effect/proc_holder/changeling/chameleon_skin/on_refund(mob/user)
if(user.has_dna())
var/mob/living/carbon/C = user
var/datum/mutation/human/HM = mutations_list[CHAMELEON]
var/datum/mutation/human/HM = GLOB.mutations_list[CHAMELEON]
if(HM in C.dna.mutations)
HM.force_lose(C)
@@ -15,10 +15,7 @@
to_chat(user, "<span class='notice'>We distort our form to hide from the AI</span>")
user.digitalcamo = 1
user.digitalinvis = 1
feedback_add_details("changeling_powers","CAM")
return 1
return TRUE
/obj/effect/proc_holder/changeling/digitalcamo/on_refund(mob/user)
user.digitalcamo = 0
@@ -19,9 +19,7 @@
user.update_canmove()
addtimer(CALLBACK(src, .proc/ready_to_regenerate, user), LING_FAKEDEATH_TIME, TIMER_UNIQUE)
feedback_add_details("changeling_powers","FD")
return 1
return TRUE
/obj/effect/proc_holder/changeling/fakedeath/proc/ready_to_regenerate(mob/user)
if(user && user.mind && user.mind.changeling && user.mind.changeling.purchasedpowers)
@@ -1,11 +1,7 @@
/obj/effect/proc_holder/changeling/fleshmend
name = "Fleshmend"
desc = "Our flesh rapidly regenerates, healing our burns, bruises and \
shortness of breath. Effectiveness decreases with quick, \
repeated use."
helptext = "Heals a moderate amount of damage over a short period of \
time. Can be used while unconscious. Does not regrow limbs or \
restore lost blood."
desc = "Our flesh rapidly regenerates, healing our burns, bruises and shortness of breath. Effectiveness decreases with quick, repeated use."
helptext = "Heals a moderate amount of damage over a short period of time. Can be used while unconscious. Does not regrow limbs or restore lost blood."
chemical_cost = 20
dna_cost = 2
req_stat = UNCONSCIOUS
@@ -37,9 +33,7 @@
recent_uses++
INVOKE_ASYNC(src, .proc/fleshmend, user)
feedback_add_details("changeling_powers","RR")
return 1
return TRUE
/obj/effect/proc_holder/changeling/fleshmend/proc/fleshmend(mob/living/user)
@@ -26,7 +26,6 @@
S.Weaken(3)
var/turf = get_turf(user)
user.gib()
feedback_add_details("changeling_powers","LR")
. = TRUE
sleep(5) // So it's not killed in explosion
var/mob/living/simple_animal/hostile/headcrab/crab = new(turf)
@@ -6,7 +6,7 @@
dna_cost = 0
chemical_cost = -1
/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(var/mob/user)
/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(mob/user, is_respec)
..()
var/datum/changeling/changeling=user.mind.changeling
changeling.changeling_speak = 1
@@ -17,10 +17,9 @@
var/obj/effect/proc_holder/changeling/hivemind_download/S2 = new
if(!changeling.has_sting(S2))
changeling.purchasedpowers+=S2
return
// HIVE MIND UPLOAD/DOWNLOAD DNA
var/list/datum/dna/hivemind_bank = list()
GLOBAL_LIST_EMPTY(hivemind_bank)
/obj/effect/proc_holder/changeling/hivemind_upload
name = "Hive Channel DNA"
@@ -32,7 +31,7 @@ var/list/datum/dna/hivemind_bank = list()
var/datum/changeling/changeling = user.mind.changeling
var/list/names = list()
for(var/datum/changelingprofile/prof in changeling.stored_profiles)
if(!(prof in hivemind_bank))
if(!(prof in GLOB.hivemind_bank))
names += prof.name
if(names.len <= 0)
@@ -49,10 +48,9 @@ var/list/datum/dna/hivemind_bank = list()
var/datum/changelingprofile/uploaded_dna = new chosen_dna.type
chosen_dna.copy_profile(uploaded_dna)
hivemind_bank += uploaded_dna
GLOB.hivemind_bank += uploaded_dna
to_chat(user, "<span class='notice'>We channel the DNA of [chosen_name] to the air.</span>")
feedback_add_details("changeling_powers","HU")
return 1
return TRUE
/obj/effect/proc_holder/changeling/hivemind_download
name = "Hive Absorb DNA"
@@ -73,7 +71,7 @@ var/list/datum/dna/hivemind_bank = list()
/obj/effect/proc_holder/changeling/hivemind_download/sting_action(mob/user)
var/datum/changeling/changeling = user.mind.changeling
var/list/names = list()
for(var/datum/changelingprofile/prof in hivemind_bank)
for(var/datum/changelingprofile/prof in GLOB.hivemind_bank)
if(!(prof in changeling.stored_profiles))
names[prof.name] = prof
@@ -92,5 +90,4 @@ var/list/datum/dna/hivemind_bank = list()
chosen_prof.copy_profile(downloaded_prof)
changeling.add_profile(downloaded_prof)
to_chat(user, "<span class='notice'>We absorb the DNA of [S] from the air.</span>")
feedback_add_details("changeling_powers","HD")
return 1
return TRUE
@@ -1,5 +1,5 @@
/obj/effect/proc_holder/changeling/humanform
name = "Human form"
name = "Human Form"
desc = "We change into a human."
chemical_cost = 5
genetic_damage = 3
@@ -30,5 +30,4 @@
var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS)
changeling_transform(newmob, chosen_prof)
feedback_add_details("changeling_powers","LFT")
return 1
return TRUE
@@ -1,5 +1,5 @@
/obj/effect/proc_holder/changeling/lesserform
name = "Lesser form"
name = "Lesser Form"
desc = "We debase ourselves and become lesser. We become a monkey."
chemical_cost = 5
dna_cost = 1
@@ -13,6 +13,4 @@
to_chat(user, "<span class='warning'>Our genes cry out!</span>")
user.monkeyize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE)
feedback_add_details("changeling_powers","LF")
return 1
return TRUE
@@ -48,7 +48,7 @@
if(3)
to_chat(user, "<span class='notice'>We mold the [target]'s mind like clay, granting [target.p_them()] the ability to speak in the hivemind!</span>")
to_chat(target, "<span class='userdanger'>A migraine throbs behind your eyes, you hear yourself screaming - but your mouth has not opened!</span>")
for(var/mob/M in mob_list)
for(var/mob/M in GLOB.mob_list)
if(M.lingcheck() == 2)
to_chat(M, "<i><font color=#800080>We can sense a foreign presence in the hivemind...</font></i>")
target.mind.linglink = 1
@@ -56,7 +56,7 @@
to_chat(target, "<font color=#800040><span class='boldannounce'>You can now communicate in the changeling hivemind, say \":g message\" to communicate!</span>")
target.reagents.add_reagent("salbutamol", 40) // So they don't choke to death while you interrogate them
sleep(1800)
feedback_add_details("changeling_powers","A [i]")
feedback_add_details("changeling_powers","Hivemind Link|[i]")
if(!do_mob(user, target, 20))
to_chat(user, "<span class='warning'>Our link with [target] has ended!</span>")
changeling.islinking = 0
@@ -24,5 +24,4 @@
changeling.chem_recharge_slowdown += 0.5
to_chat(user, "<span class='notice'>We shape our glands to take the voice of <b>[mimic_voice]</b>, this will slow down regenerating chemicals while active.</span>")
to_chat(user, "<span class='notice'>Use this power again to return to our original voice and return chemical production to normal levels.</span>")
feedback_add_details("changeling_powers","MV")
return TRUE
@@ -5,6 +5,7 @@
Space Suit
Shield
Armor
Tentacles
*/
@@ -125,7 +126,7 @@
var/datum/changeling/changeling = user.mind.changeling
changeling.chem_recharge_slowdown += recharge_slowdown
return 1
return TRUE
//fancy headers yo
@@ -228,7 +229,7 @@
desc = "A fleshy tentacle that can stretch out and grab things or people."
icon = 'icons/obj/weapons.dmi'
icon_state = "tentacle"
item_state = null
item_state = "tentacle"
flags = ABSTRACT | NODROP | DROPDEL | NOBLUDGEON
w_class = WEIGHT_CLASS_HUGE
ammo_type = /obj/item/ammo_casing/magic/tentacle
@@ -251,6 +252,11 @@
/obj/item/weapon/gun/magic/tentacle/shoot_with_empty_chamber(mob/living/user as mob|obj)
to_chat(user, "<span class='warning'>The [name] is not ready yet.<span>")
/obj/item/weapon/gun/magic/tentacle/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] coils [src] tightly around [user.p_their()] neck! It looks like [user.p_theyre()] trying to commit suicide!</span>")
return (OXYLOSS)
/obj/item/ammo_casing/magic/tentacle
name = "tentacle"
desc = "a tentacle."
@@ -336,11 +342,11 @@
var/obj/item/I = C.get_active_held_item()
if(I)
if(C.drop_item())
C.visible_message("<span class='danger'>[I] is yanked off of [C]'s hand by [src]!</span>","<span class='userdanger'>A tentacle pulls [I] away from you!</span>")
C.visible_message("<span class='danger'>[I] is yanked off [C]'s hand by [src]!</span>","<span class='userdanger'>A tentacle pulls [I] away from you!</span>")
on_hit(I) //grab the item as if you had hit it directly with the tentacle
return 1
else
to_chat(firer, "<span class='danger'>You can't seem to pry [I] off of [C]'s hands!<span>")
to_chat(firer, "<span class='danger'>You can't seem to pry [I] off [C]'s hands!<span>")
return 0
else
to_chat(firer, "<span class='danger'>[C] has nothing in hand to disarm!<span>")
@@ -389,7 +395,7 @@
var/obj/item/weapon/shield/changeling/S = ..(user)
S.remaining_uses = round(changeling.absorbedcount * 3)
return 1
return TRUE
/obj/item/weapon/shield/changeling
name = "shield-like mass"
@@ -41,5 +41,4 @@
for(var/datum/disease/D in user.viruses)
D.cure()
feedback_add_details("changeling_powers","AP")
return 1
return TRUE
@@ -31,3 +31,4 @@
var/mob/living/carbon/human/H = user
H.restore_blood()
H.remove_all_embedded_objects()
return TRUE
@@ -26,8 +26,7 @@
user.regenerate_organs()
to_chat(user, "<span class='notice'>We have revived ourselves.</span>")
user.mind.changeling.purchasedpowers -= src
feedback_add_details("changeling_powers","CR")
return 1
return TRUE
/obj/effect/proc_holder/changeling/revive/can_be_used_by(mob/user)
if((user.stat != DEAD) && !(user.status_flags & FAKEDEATH))
@@ -24,9 +24,7 @@
for(var/obj/machinery/light/L in range(4, user))
L.on = 1
L.break_light_tube()
feedback_add_details("changeling_powers","RS")
return 1
return TRUE
/obj/effect/proc_holder/changeling/dissonant_shriek
name = "Dissonant Shriek"
@@ -40,6 +38,4 @@
L.on = 1
L.break_light_tube()
empulse(get_turf(user), 2, 5, 1)
return 1
return TRUE
@@ -9,5 +9,4 @@
//Makes some spiderlings. Good for setting traps and causing general trouble.
/obj/effect/proc_holder/changeling/spiders/sting_action(mob/user)
spawn_atom_to_turf(/obj/structure/spider/spiderling/hunter, user, 2, FALSE)
feedback_add_details("changeling_powers","SI")
return 1
return TRUE
@@ -23,6 +23,11 @@
user.Weaken(3)
user.emote("gasp")
INVOKE_ASYNC(src, .proc/muscle_loop, user)
return TRUE
/obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user)
while(active)
user.status_flags |= GOTTAGOFAST
if(user.stat != CONSCIOUS || user.staminaloss >= 90)
@@ -41,10 +46,6 @@
sleep(40)
while(!active) //Damage stacks decrease fairly rapidly while not in sanic mode
if(stacks >= 1)
stacks--
while(!active && stacks) //Damage stacks decrease fairly rapidly while not in sanic mode
stacks--
sleep(20)
feedback_add_details("changeling_powers","SANIC")
return 1
@@ -101,10 +101,9 @@
C.take_bodypart_damage(20, 0) //The process is extremely painful
target.visible_message("<span class='danger'>[target] begins to violenty convulse!</span>","<span class='userdanger'>You feel a tiny prick and a begin to uncontrollably convulse!</span>")
feedback_add_details("changeling_powers","TS")
. = TRUE
sleep(10)
if(istype(C))
sleep(10)
C.real_name = NewDNA.real_name
NewDNA.transfer_identity(C, transfer_SE=1)
C.updateappearance(mutcolor_update=1)
@@ -152,9 +151,7 @@
playsound(target, 'sound/effects/blobattack.ogg', 30, 1)
addtimer(CALLBACK(src, .proc/remove_fake, target, blade), 600)
feedback_add_details("changeling_powers","AS")
return 1
return TRUE
/obj/effect/proc_holder/changeling/sting/false_armblade/proc/remove_fake(mob/target, obj/item/weapon/melee/arm_blade/false/blade)
playsound(target, 'sound/effects/blobattack.ogg', 30, 1)
@@ -182,8 +179,7 @@
add_logs(user, target, "stung", "extraction sting")
if(!(user.mind.changeling.has_dna(target.dna)))
user.mind.changeling.add_new_profile(target, user)
feedback_add_details("changeling_powers","ED")
return 1
return TRUE
/obj/effect/proc_holder/changeling/sting/mute
name = "Mute Sting"
@@ -196,8 +192,7 @@
/obj/effect/proc_holder/changeling/sting/mute/sting_action(mob/user, mob/living/carbon/target)
add_logs(user, target, "stung", "mute sting")
target.silent += 30
feedback_add_details("changeling_powers","MS")
return 1
return TRUE
/obj/effect/proc_holder/changeling/sting/blind
name = "Blind Sting"
@@ -213,8 +208,7 @@
target.become_nearsighted()
target.blind_eyes(20)
target.blur_eyes(40)
feedback_add_details("changeling_powers","BS")
return 1
return TRUE
/obj/effect/proc_holder/changeling/sting/LSD
name = "Hallucination Sting"
@@ -227,8 +221,7 @@
/obj/effect/proc_holder/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target)
add_logs(user, target, "stung", "LSD sting")
addtimer(CALLBACK(src, .proc/hallucination_time, target), rand(300,600))
feedback_add_details("changeling_powers","HS")
return 1
return TRUE
/obj/effect/proc_holder/changeling/sting/LSD/proc/hallucination_time(mob/living/carbon/target)
if(target)
@@ -246,5 +239,4 @@
add_logs(user, target, "stung", "cryo sting")
if(target.reagents)
target.reagents.add_reagent("frostoil", 30)
feedback_add_details("changeling_powers","CS")
return 1
return TRUE
@@ -107,9 +107,7 @@
return
changeling_transform(user, chosen_prof)
feedback_add_details("changeling_powers","TR")
return 1
return TRUE
/datum/changeling/proc/select_dna(var/prompt, var/title, var/mob/living/carbon/user)
var/list/names = list("Drop Flesh Disguise")
@@ -121,8 +119,8 @@
return
if(chosen_name == "Drop Flesh Disguise")
for(var/slot in slots)
if(istype(user.vars[slot], slot2type[slot]))
for(var/slot in GLOB.slots)
if(istype(user.vars[slot], GLOB.slot2type[slot]))
qdel(user.vars[slot])
var/datum/changelingprofile/prof = get_dna(chosen_name)