Added a bunch of new goon powers.

Conflicts:
	code/modules/mob/living/carbon/human/emote.dm
This commit is contained in:
Rob Nelson
2014-01-26 01:40:49 -08:00
committed by ZomgPonies
parent 5c21229153
commit 559700a58b
8 changed files with 561 additions and 19 deletions
+83 -2
View File
@@ -9,7 +9,7 @@
// WAS: /datum/bioEffect/mute
/datum/dna/gene/disability/mute
name = "Mute"
desc = "Completley shuts down the speech center of the subject's brain."
desc = "Completely shuts down the speech center of the subject's brain."
activation_message = "You feel unable to express yourself at all."
deactivation_message = "You feel able to speak freely again."
@@ -278,4 +278,85 @@
C << "\red [src.personalized_stink]"
else
C << "\red [stinkString()]"
*/
*/
////////////////////////////////////////////////////////////////////////
// WAS: /datum/bioEffect/immolate
/datum/dna/gene/basic/grant_spell/immolate
name = "Incendiary Mitochondria"
desc = "The subject becomes able to convert excess cellular energy into thermal energy."
activation_messages = list("You suddenly feel rather hot.")
deactivation_messages = list("You no longer feel uncomfortably hot.")
spelltype=/obj/effect/proc_holder/spell/targeted/immolate
New()
..()
block = IMMOLATEBLOCK
/obj/effect/proc_holder/spell/targeted/immolate
name = "Incendiary Mitochondria"
desc = "The subject becomes able to convert excess cellular energy into thermal energy."
panel = "Mutant Powers"
charge_type = "recharge"
charge_max = 600
clothes_req = 0
stat_allowed = 0
invocation_type = "none"
range = -1
selection_type = "range"
/obj/effect/proc_holder/spell/targeted/immolate/cast(list/targets)
if (istype(usr,/mob/living/))
var/mob/living/L = usr
L.adjust_fire_stacks(0.5) // Same as walking into fire. Was 100 (goon fire)
L.visible_message("\red <b>[L.name]</b> suddenly bursts into flames!")
//playsound(L.loc, 'mag_fireballlaunch.ogg', 50, 0)
return
////////////////////////////////////////////////////////////////////////
// WAS: /datum/bioEffect/melt
/datum/dna/gene/basic/grant_verb/melt
name = "Self Biomass Manipulation"
desc = "The subject becomes able to transform the matter of their cells into a liquid state."
activation_messages = list("You feel strange and jiggly.")
deactivation_messages = list("You feel more solid.")
verbtype=/proc/bioproc_melt
New()
..()
block = MELTBLOCK
/proc/bioproc_melt()
set name = "Dissolve"
set desc = "Transform yourself into a liquified state."
set category = "Mutant Abilities"
if (istype(usr,/mob/living/carbon/human/))
var/mob/living/carbon/human/H = usr
H.visible_message("\red <b>[H.name]'s flesh melts right off! Holy shit!</b>")
//if (H.gender == "female")
// playsound(H.loc, 'female_fallscream.ogg', 50, 0)
//else
// playsound(H.loc, 'male_fallscream.ogg', 50, 0)
//playsound(H.loc, 'bubbles.ogg', 50, 0)
//playsound(H.loc, 'loudcrunch2.ogg', 50, 0)
var/mob/living/carbon/human/skellington/nH = new /mob/living/carbon/human/skellington(H.loc)
nH.real_name = H.real_name
nH.name = "[H.name]'s skeleton"
//H.decomp_stage = 4
nH.brain_op_stage = 4
H.gib(1)
else
usr.visible_message("\red <b>[usr.name] melts into a pile of bloody viscera!</b>")
usr.gib(1)
return
+396 -1
View File
@@ -72,4 +72,399 @@
if((world.time - M.last_movement) >= 30 && !M.stat && M.canmove && !M.restrained())
M.alpha = round(255 * 0.10)
else
M.alpha = round(255 * 0.80)
M.alpha = round(255 * 0.80)
/////////////////////////////////////////////////////////////////////////////////////////
/datum/dna/gene/basic/grant_spell
var/obj/effect/proc_holder/spell/spelltype
activate(var/mob/M, var/connected, var/flags)
..()
M.spell_list += spelltype
return 1
deactivate(var/mob/M, var/connected, var/flags)
..()
M.spell_list -= spelltype
/datum/dna/gene/basic/grant_verb
var/verbtype
activate(var/mob/M, var/connected, var/flags)
..()
M.verbs += verbtype
return 1
deactivate(var/mob/M, var/connected, var/flags)
..()
M.verbs -= verbtype
// WAS: /datum/bioEffect/cryokinesis
/datum/dna/gene/basic/grant_spell/cryo
name = "Cryokinesis"
desc = "Allows the subject to lower the body temperature of others."
activation_messages = list("You notice a strange cold tingle in your fingertips.")
deactivation_messages = list("Your fingers feel warmer.")
spelltype = /obj/effect/proc_holder/spell/targeted/cryokinesis
New()
..()
block = CRYOBLOCK
/obj/effect/proc_holder/spell/targeted/cryokinesis
name = "Cryokinesis"
desc = "Drops the bodytemperature of another person."
panel = "Mutant Powers"
charge_type = "recharge"
charge_max = 600
clothes_req = 0
stat_allowed = 0
invocation_type = "none"
range = 7
selection_type = "range"
var/list/compatible_mobs = list(/mob/living/carbon/human, /mob/living/carbon/monkey)
/obj/effect/proc_holder/spell/targeted/cryokinesis/cast(list/targets)
if(!targets.len)
usr << "<span class='notice'>No target found in range.</span>"
return
var/mob/living/carbon/C = targets[1]
if(!iscarbon(C))
usr << "\red This will only work on normal organic beings."
return
C.bodytemperature = -1500
C.ExtinguishMob()
C.visible_message("\red A cloud of fine ice crystals engulfs [C]!")
//playsound(usr.loc, 'bamf.ogg', 50, 0)
new/obj/effects/self_deleting(C.loc, icon('icons/effects/genetics.dmi', "cryokinesis"))
return
/obj/effects/self_deleting
density = 0
opacity = 0
anchored = 1
icon = null
desc = ""
//layer = 15
New(var/atom/location, var/icon/I, var/duration = 20, var/oname = "something")
src.name = oname
loc=location
src.icon = I
spawn(duration)
del(src)
///////////////////////////////////////////////////////////////////////////////////////////
// WAS: /datum/bioEffect/mattereater
/datum/dna/gene/basic/grant_spell/mattereater
name = "Matter Eater"
desc = "Allows the subject to eat just about anything without harm."
activation_messages = list("You feel hungry.")
deactivation_messages = list("You don't feel quite so hungry anymore.")
spelltype=/obj/effect/proc_holder/spell/targeted/eat
New()
..()
block = EATBLOCK
/obj/effect/proc_holder/spell/targeted/eat
name = "Eat"
desc = "Eat just about anything!"
panel = "Mutant Powers"
charge_type = "recharge"
charge_max = 300
clothes_req = 0
stat_allowed = 0
invocation_type = "none"
range = 1
selection_type = "range"
/obj/effect/proc_holder/spell/targeted/eat/choose_targets(mob/user = usr)
var/list/targets = list()
var/list/possible_targets = list()
for(var/obj/item/O in view_or_range(range, user, selection_type))
possible_targets += O
targets += input("Choose the target for the spell.", "Targeting") as mob in possible_targets
if(!targets.len) //doesn't waste the spell
revert_cast(user)
return
perform(targets)
/obj/effect/proc_holder/spell/targeted/eat/cast(list/targets)
if(!targets.len)
usr << "<span class='notice'>No target found in range.</span>"
return
var/obj/item/the_item = targets[1]
usr.visible_message("\red [usr] eats [the_item].")
playsound(usr.loc, 'sound/items/eatfood.ogg', 50, 0)
del(the_item)
if(ishuman(usr))
var/mob/living/carbon/human/H=usr
for(var/name in H.organs_by_name)
var/datum/organ/external/affecting = null
if(!H.organs[name])
continue
affecting = H.organs[name]
if(!istype(affecting, /datum/organ/external))
continue
affecting.heal_damage(4, 0)
usr:UpdateDamageIcon()
usr:updatehealth()
return
////////////////////////////////////////////////////////////////////////
//WAS: /datum/bioEffect/jumpy
/datum/dna/gene/basic/grant_spell/jumpy
name = "Jumpy"
desc = "Allows the subject to leap great distances."
//cooldown = 30
activation_messages = list("Your leg muscles feel taut and strong.")
deactivation_messages = list("Your leg muscles shrink back to normal.")
spelltype =/obj/effect/proc_holder/spell/targeted/leap
New()
..()
block = JUMPBLOCK
/obj/effect/proc_holder/spell/targeted/leap
name = "Jump"
desc = "Leap great distances!"
panel = "Mutant Powers"
range = -1
include_user = 1
charge_type = "recharge"
charge_max = 30
clothes_req = 0
stat_allowed = 0
invocation_type = "none"
/obj/effect/proc_holder/spell/targeted/leap/cast(list/targets)
if (istype(usr.loc,/mob/))
usr << "\red You can't jump right now!"
return
if (istype(usr.loc,/turf/))
usr.visible_message("\red <b>[usr.name]</b> takes a huge leap!")
playsound(usr.loc, 'sound/weapons/thudswoosh.ogg', 50, 1)
var/prevLayer = usr.layer
usr.layer = 15
for(var/i=0, i<10, i++)
step(usr, usr.dir)
if(i < 5) usr.pixel_y += 8
else usr.pixel_y -= 8
sleep(1)
if (M_FAT in usr.mutations && prob(66))
usr.visible_message("\red <b>[usr.name]</b> crashes due to their heavy weight!")
//playsound(usr.loc, 'zhit.wav', 50, 1)
usr.weakened += 10
usr.stunned += 5
usr.layer = prevLayer
if (istype(usr.loc,/obj/))
var/obj/container = usr.loc
usr << "\red You leap and slam your head against the inside of [container]! Ouch!"
usr.paralysis += 3
usr.weakened += 5
container.visible_message("\red <b>[usr.loc]</b> emits a loud thump and rattles a bit.")
playsound(usr.loc, 'sound/effects/bang.ogg', 50, 1)
var/wiggle = 6
while(wiggle > 0)
wiggle--
container.pixel_x = rand(-3,3)
container.pixel_y = rand(-3,3)
sleep(1)
container.pixel_x = 0
container.pixel_y = 0
return
////////////////////////////////////////////////////////////////////////
// WAS: /datum/bioEffect/polymorphism
/datum/dna/gene/basic/grant_spell/polymorph
name = "Polymorphism"
desc = "Enables the subject to reconfigure their appearance to mimic that of others."
spelltype =/obj/effect/proc_holder/spell/targeted/polymorph
//cooldown = 1800
activation_messages = list("You don't feel entirely like yourself somehow.")
deactivation_messages = list("You feel secure in your identity.")
New()
..()
block = POLYMORPHBLOCK
/obj/effect/proc_holder/spell/targeted/polymorph
name = "Polymorph"
desc = "Mimic the appearance of others!"
panel = "Mutant Powers"
charge_max = 1800
clothes_req = 0
stat_allowed = 0
invocation_type = "none"
range = 1
selection_type = "range"
/obj/effect/proc_holder/spell/targeted/polymorph/cast(list/targets)
var/mob/living/M=targets[1]
if(!ishuman(M))
usr << "\red You can only change your appearance to that of another human."
return
if(!ishuman(usr)) return
//playsound(usr.loc, 'blobattack.ogg', 50, 1)
usr.visible_message("\red [usr]'s body shifts and contorts.")
spawn(10)
if(M && usr)
//playsound(usr.loc, 'gib.ogg', 50, 1)
usr.UpdateAppearance(M.dna.UI)
usr:real_name = M:real_name
usr:name = M:name
////////////////////////////////////////////////////////////////////////
// WAS: /datum/bioEffect/empath
/datum/dna/gene/basic/grant_verb/empath
name = "Empathic Thought"
desc = "The subject becomes able to read the minds of others for certain information."
verbtype = /proc/bioproc_empath
activation_messages = list("You suddenly notice more about others than you did before.")
deactivation_messages = list("You no longer feel able to sense intentions.")
New()
..()
block = EMPATHBLOCK
/proc/bioproc_empath(var/mob/living/carbon/M in range(7,usr))
set name = "Read Mind"
set desc = "Read the minds of others for information."
set category = "Mutant Abilities"
if(!iscarbon(M))
usr << "\red You may only use this on other organic beings."
return
if(usr.stat)
return
if (M_PSY_RESIST in M.mutations)
usr << "\red You can't see into [M.name]'s mind at all!"
return
if (M.stat == 2)
usr << "\red [M.name] is dead and cannot have their mind read."
return
if (M.health < 0)
usr << "\red [M.name] is dying, and their thoughts are too scrambled to read."
return
usr << "\blue Mind Reading of [M.name]:</b>"
var/pain_condition = M.health
// lower health means more pain
var/list/randomthoughts = list("what to have for lunch","the future","the past","money",
"their hair","what to do next","their job","space","amusing things","sad things",
"annoying things","happy things","something incoherent","something they did wrong")
var/thoughts = "thinking about [pick(randomthoughts)]"
if (M.fire_stacks)
pain_condition -= 50
thoughts = "preoccupied with the fire"
if (M.radiation)
pain_condition -= 25
switch(pain_condition)
if (81 to INFINITY)
usr << "\blue <b>Condition</b>: [M.name] feels good."
if (61 to 80)
usr << "\blue <b>Condition</b>: [M.name] is suffering mild pain."
if (41 to 60)
usr << "\blue <b>Condition</b>: [M.name] is suffering significant pain."
if (21 to 40)
usr << "\blue <b>Condition</b>: [M.name] is suffering severe pain."
else
usr << "\blue <b>Condition</b>: [M.name] is suffering excruciating pain."
thoughts = "haunted by their own mortality"
switch(M.a_intent)
if ("help")
usr << "\blue <b>Mood</b>: You sense benevolent thoughts from [M.name]."
if ("disarm")
usr << "\blue <b>Mood</b>: You sense cautious thoughts from [M.name]."
if ("grab")
usr << "\blue <b>Mood</b>: You sense hostile thoughts from [M.name]."
if ("harm")
usr << "\blue <b>Mood</b>: You sense cruel thoughts from [M.name]."
for(var/mob/living/L in view(7,M))
if (L == M)
continue
thoughts = "thinking about punching [L.name]"
break
else
usr << "\blue <b>Mood</b>: You sense strange thoughts from [M.name]."
if (istype(M,/mob/living/carbon/human))
var/numbers[0]
var/mob/living/carbon/human/H = M
if(H.mind && H.mind.initial_account)
numbers += H.mind.initial_account.account_number
numbers += H.mind.initial_account.remote_access_pin
if(numbers.len>0)
usr << "\blue <b>Numbers</b>: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name]."
usr << "\blue <b>Thoughts</b>: [M.name] is currently [thoughts]."
if (/datum/dna/gene/basic/grant_verb/empath in M.active_genes)
M << "\red You sense [usr.name] reading your mind."
else if (prob(5) || M.mind.assigned_role=="Chaplain")
M << "\red You sense someone intruding upon your thoughts..."
return
////////////////////////////////////////////////////////////////////////
// WAS: /datum/bioEffect/superfart
/datum/dna/gene/basic/superfart
name = "High-Pressure Intestines"
desc = "Vastly increases the gas capacity of the subject's digestive tract."
activation_messages = list("You feel bloated and gassy.")
deactivation_messages = list("You no longer feel gassy. What a relief!")
mutation = M_SUPER_FART
New()
..()
block = SUPERFARTBLOCK
+8
View File
@@ -77,6 +77,14 @@
PSYRESISTBLOCK = getAssignedBlock("PSYRESIST", numsToAssign, DNA_HARD_BOUNDS)
SHADOWBLOCK = getAssignedBlock("SHADOW", numsToAssign, DNA_HARDER_BOUNDS)
CHAMELEONBLOCK = getAssignedBlock("CHAMELEON", numsToAssign, DNA_HARDER_BOUNDS)
CRYOBLOCK = getAssignedBlock("CRYO", numsToAssign, DNA_HARD_BOUNDS)
EATBLOCK = getAssignedBlock("EAT", numsToAssign, DNA_HARD_BOUNDS)
JUMPBLOCK = getAssignedBlock("JUMP", numsToAssign, DNA_HARD_BOUNDS)
MELTBLOCK = getAssignedBlock("MELT", numsToAssign)
IMMOLATEBLOCK = getAssignedBlock("IMMOLATE", numsToAssign)
EMPATHBLOCK = getAssignedBlock("EMPATH", numsToAssign, DNA_HARD_BOUNDS)
SUPERFARTBLOCK = getAssignedBlock("SUPERFART", numsToAssign, DNA_HARDER_BOUNDS)
POLYMORPHBLOCK = getAssignedBlock("POLYMORPH", numsToAssign, DNA_HARDER_BOUNDS)
//
// Static Blocks
+1 -1
View File
@@ -523,7 +523,7 @@ steam.start() -- spawns the effect
number = n
cardinals = c
chemholder.reagents.add_reagent("mercury", 50)
chemholder.reagents.add_reagent("space_drugs", rand(1,10))
if(istype(loca, /turf/))
location = loca
+8
View File
@@ -86,6 +86,14 @@ var/SOBERBLOCK = 0
var/PSYRESISTBLOCK = 0
var/SHADOWBLOCK = 0
var/CHAMELEONBLOCK = 0
var/CRYOBLOCK = 0
var/EATBLOCK = 0
var/JUMPBLOCK = 0
var/MELTBLOCK = 0
var/EMPATHBLOCK = 0
var/SUPERFARTBLOCK = 0
var/IMMOLATEBLOCK = 0
var/POLYMORPHBLOCK = 0
var/skipupdate = 0
///////////////
+59 -15
View File
@@ -548,22 +548,66 @@
if(world.time-lastFart >= 600)
message = "<b>[src]</b> [pick("passes wind","farts")]."
m_type = 2
var/location = get_turf(src)
playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
var/turf/location = get_turf(src)
var/aoe_range=2 // Default
if(M_SUPER_FART in mutations)
aoe_range+=5
// If we're wearing a suit, don't blast or gas those around us.
var/wearing_suit=0
var/wearing_mask=0
if(wear_suit && wear_suit.body_parts_covered & LOWER_TORSO)
wearing_suit=1
if (internal != null && wear_mask && (wear_mask.flags & MASKINTERNALS))
wearing_mask=1
// Process toxic farts first.
if(M_TOXIC_FARTS in mutations)
if(wear_suit && wear_suit.body_parts_covered & LOWER_TORSO)
if (internal != null && wear_mask && (wear_mask.flags & MASKINTERNALS))
return
src << "\red You gas yourself!"
reagents.add_reagent("mercury", rand(10,20))
return
var/datum/effect/effect/system/chem_smoke_spread/fart/S = new /datum/effect/effect/system/chem_smoke_spread/fart
S.attach(location)
S.set_up(src, 10, 0, location)
spawn(0)
S.start()
sleep(10)
S.start()
message=""
if(wearing_suit)
if(!wearing_mask)
src << "\red You gas yourself!"
reagents.add_reagent("space_drugs", rand(10,20))
else
// Was /turf/, now /mob/
for(var/mob/M in view(location,2))
// Now, we don't have this:
//new /obj/effects/fart_cloud(T,L)
// But:
// <[REDACTED]> so, what it does is...imagine a 3x3 grid with the person in the center. When someone uses the emote *fart (it's not a spell style ability and has no cooldown), then anyone in the 8 tiles AROUND the person who uses it
// <[REDACTED]> gets between 1 and 10 units of jenkem added to them...we obviously don't have Jenkem, but Space Drugs do literally the same exact thing as Jenkem
// <[REDACTED]> the user, of course, isn't impacted because it's not an actual smoke cloud
// So, let's give 'em space drugs.
M.reagents.add_reagent("space_drugs",rand(1,10))
/*
var/datum/effect/effect/system/smoke_spread/chem/fart/S = new /datum/effect/effect/system/smoke_spread/chem/fart
S.attach(location)
S.set_up(src, 10, 0, location)
spawn(0)
S.start()
sleep(10)
S.start()
*/
if(M_SUPER_FART in mutations)
message=""
playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
visible_message("\red <b>[name]</b> hunches down and grits their teeth!")
if(do_after(usr,30))
visible_message("\red <b>[name]</b> unleashes a [pick("tremendous","gigantic","colossal")] fart!","You hear a [pick("tremendous","gigantic","colossal")] fart.")
//playsound(L.loc, 'superfart.ogg', 50, 0)
if(wearing_suit)
for(var/mob/living/V in view(src,aoe_range))
shake_camera(V,10,5)
if (V == src)
continue
V << "\red You are sent flying!"
V.Weaken(5) // why the hell was this set to 12 christ
step_away(V,location,15)
step_away(V,location,15)
step_away(V,location,15)
else
usr << "\red You were interrupted and couldn't fart! Rude!"
lastFart=world.time
else
message = "<b>[src]</b> strains, and nothing happens."
@@ -32,6 +32,11 @@
set_species("Vox")
..()
/mob/living/carbon/human/skellington/New()
h_style = "Bald"
set_species("Skellington")
..()
/mob/living/carbon/human/diona/New()
species = new /datum/species/diona(src)
..()
+1
View File
@@ -368,6 +368,7 @@ var/MAX_EXPLOSION_RANGE = 14
#define M_STRONG 202 // (Nothing)
#define M_SOBER 203 // Increased alcohol metabolism
#define M_PSY_RESIST 204 // Block remoteview
#define M_SUPER_FART 205 // Duh
//disabilities
#define NEARSIGHTED 1