Adjustments to alien acid. Aliens should no longer see invalid targets as one of their acid options when using the verb. Right clicking should give the invalid target message when appropriate.

Made a bunch of other things acid proof. Bullets, lasers, runes, etc.
Aliens should no longer emote as male when they are gender neuter. Or maybe plural, who knows.
Tweaked respawn character verb. Hopefully it'll work on the live server now.
Minor Strike Team fix.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@689 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
noisomehollow@lycos.com
2010-12-22 02:54:52 +00:00
parent 0525c4aa69
commit d681b03581
16 changed files with 96 additions and 61 deletions

View File

@@ -46,8 +46,8 @@ obj
//Icon for fire on turfs, also helps for nurturing small fires until they are full tile //Icon for fire on turfs, also helps for nurturing small fires until they are full tile
anchored = 1 anchored = 1
mouse_opacity = 0 mouse_opacity = 0
unacidable = 1//So you can't melt fire with acid.
//luminosity = 3 //luminosity = 3

View File

@@ -40,7 +40,7 @@
anchored = 1 anchored = 1
layer = 99 layer = 99
mouse_opacity = 0 mouse_opacity = 0
unacidable = 1 unacidable = 1//Just to be sure.
/obj/admins /obj/admins
name = "admins" name = "admins"
@@ -56,7 +56,7 @@
desc = "FUCK FUCK FUCK AAAHHH" desc = "FUCK FUCK FUCK AAAHHH"
icon_state = "bhole2" icon_state = "bhole2"
opacity = 0 opacity = 0
unacidable = 1 //well, if you got that close, you're fucked anyway, but... unacidable = 1
density = 0 density = 0
anchored = 1 anchored = 1
var/datum/effects/system/harmless_smoke_spread/smoke var/datum/effects/system/harmless_smoke_spread/smoke
@@ -66,6 +66,7 @@
/obj/beam /obj/beam
name = "beam" name = "beam"
unacidable = 1//Just to be sure.
/obj/beam/a_laser /obj/beam/a_laser
name = "a laser" name = "a laser"
@@ -111,6 +112,7 @@
icon = 'projectiles.dmi' icon = 'projectiles.dmi'
icon_state = "bullet" icon_state = "bullet"
density = 1 density = 1
unacidable = 1//Just to be sure.
var/yo = null var/yo = null
var/xo = null var/xo = null
var/current = null var/current = null
@@ -512,6 +514,7 @@
name = "manifest" name = "manifest"
icon = 'screen1.dmi' icon = 'screen1.dmi'
icon_state = "x" icon_state = "x"
unacidable = 1//Just to be sure.
/obj/morgue /obj/morgue
name = "morgue" name = "morgue"
@@ -578,7 +581,7 @@
icon = 'stationobjs.dmi' icon = 'stationobjs.dmi'
icon_state = "portal" icon_state = "portal"
density = 1 density = 1
unacidable = 1 unacidable = 1//Can't destroy energy portals.
var/failchance = 5 var/failchance = 5
var/obj/item/target = null var/obj/item/target = null
var/creator = null var/creator = null
@@ -706,6 +709,7 @@
desc = "A display case for prized possessions." desc = "A display case for prized possessions."
density = 1 density = 1
anchored = 1 anchored = 1
unacidable = 1//Dissolving the case would also delete the gun.
var/health = 30 var/health = 30
var/occupied = 1 var/occupied = 1
var/destroyed = 0 var/destroyed = 0

View File

@@ -6,6 +6,7 @@
anchored = 1.0 anchored = 1.0
opacity = 0 opacity = 0
density = 1 density = 1
unacidable = 1
/client/proc/forcewall() /client/proc/forcewall()

View File

@@ -53,7 +53,7 @@ However people seem to like it for some reason.
icon_state = "Singularity" icon_state = "Singularity"
anchored = 1 anchored = 1
density = 1 density = 1
// unacidable = 1 //oh the hilarity. unacidable = 1 //Don't comment this out.
var/active = 0 var/active = 0
var/energy = 10 var/energy = 10
var/Dtime = null var/Dtime = null

View File

@@ -33,6 +33,7 @@ var/runedec = 0
icon = 'rune.dmi' icon = 'rune.dmi'
icon_state = "1" icon_state = "1"
var/visibility = 0 var/visibility = 0
unacidable = 1
var var

View File

@@ -16,6 +16,7 @@
layer = 5.0 layer = 5.0
density = 1 density = 1
anchored = 0 anchored = 0
unacidable = 1 //Creature is not harmed by acid.
var/state = 0 var/state = 0

View File

@@ -1,8 +1,5 @@
/obj/alien/acid/proc/tick() /obj/alien/acid/proc/tick()
ticks += 1 ticks += 1
if(target.unacidable)
del(src)
return
for(var/mob/O in hearers(src, null)) for(var/mob/O in hearers(src, null))
O.show_message("\green <B>[src.target] sizzles and begins to melt under the bubbling mess of acid!</B>", 1) O.show_message("\green <B>[src.target] sizzles and begins to melt under the bubbling mess of acid!</B>", 1)
if(prob(ticks*10)) if(prob(ticks*10))

View File

@@ -2,7 +2,7 @@
name = "alien thing" name = "alien thing"
desc = "theres something alien about this" desc = "theres something alien about this"
icon = 'alien.dmi' icon = 'alien.dmi'
unacidable = 1 //alien acid don't melts alien things... unacidable = 1 //Aliens won't ment their own.
/obj/alien/egg /obj/alien/egg
desc = "It looks like a weird egg" desc = "It looks like a weird egg"
@@ -39,7 +39,7 @@
density = 1 density = 1
opacity = 1 opacity = 1
anchored = 1 anchored = 1
unacidable = 0 //...except for resin "wall" since it can block way. unacidable = 0 //So aliens can destroy their own walls if they need to.
var/health = 20 var/health = 20

View File

@@ -10,6 +10,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
name = "effects" name = "effects"
icon = 'effects.dmi' icon = 'effects.dmi'
mouse_opacity = 0 mouse_opacity = 0
unacidable = 1//So effects are not targeted by alien acid.
flags = TABLEPASS flags = TABLEPASS
/obj/effects/water /obj/effects/water

View File

@@ -5,7 +5,7 @@
desc = "A glass lab container for storing interesting creatures." desc = "A glass lab container for storing interesting creatures."
density = 1 density = 1
anchored = 1 anchored = 1
unacidable = 1 unacidable = 1//Dissolving the case would also delete Lamarr
var/health = 30 var/health = 30
var/occupied = 1 var/occupied = 1
var/destroyed = 0 var/destroyed = 0

View File

@@ -7,7 +7,7 @@
layer = 5.0 layer = 5.0
density = 1 density = 1
anchored = 0 anchored = 0
unacidable = 1 unacidable = 1//While not technically mobs, these objects should not be affected by alien acid.
var/state = 0 //0 = null, 1 = attack, 2 = idle var/state = 0 //0 = null, 1 = attack, 2 = idle

View File

@@ -290,9 +290,9 @@ They spawn as an assistant but there is no announcement. /N */
var/GKEY = input var/GKEY = input
var/GNAME = "none" var/GNAME = "none"
var/mob/dead/observer/GDEL //to properly delete the mob later on. var/mob/dead/observer/GDEL //To properly delete the mob later on.
for(var/mob/dead/observer/G in world) for(var/mob/dead/observer/G in world)
if(G.key==input) if(G.key==input||GKEY)
GDEL = G GDEL = G
GNAME = G.real_name GNAME = G.real_name
else else
@@ -321,7 +321,7 @@ They spawn as an assistant but there is no announcement. /N */
new_character.loc = spawn_here new_character.loc = spawn_here
new_character.real_name = GNAME new_character.real_name = GNAME
message_admins("\blue [key_name_admin(usr)] has respawned [GKEY] as [new_character.name].", 1) //Here so it doesn't null name if an admin re-spawns themselves. message_admins("\blue [key_name_admin(usr)] has respawned [GKEY] as [new_character.name].", 1) //Here so it doesn't null client if an admin re-spawns themselves.
new_character.key = GKEY new_character.key = GKEY
// preferences.copy_to(new_character) // preferences.copy_to(new_character)
new_character.dna.ready_dna(new_character) new_character.dna.ready_dna(new_character)

View File

@@ -58,12 +58,12 @@ var/global/sent_strike_team = 0
else else
new_commando.age = rand(35,45) new_commando.age = rand(35,45)
new_commando.b_type = pick("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-") new_commando.b_type = pick("A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-")
new_commando.dna.ready_dna(new_commando) //creates DNA new_commando.dna.ready_dna(new_commando) //Creates DNA
//Creates mind stuff. //Creates mind stuff.
new_commando.mind = new new_commando.mind = new
new_commando.mind.current = new_commando new_commando.mind.current = new_commando
new_commando.mind.assigned_role = "Death Commando" new_commando.mind.assigned_role = "Death Commando"
new_commando.mind.store_memory("<B>Nuke Code:</B> \red [nuke_code].") new_commando.mind.store_memory("<B>Nuke Code:</B> \red [nuke_code].")//So they don't forget their code or mission.
new_commando.mind.store_memory("<B>Mission:</B> \red [input].") new_commando.mind.store_memory("<B>Mission:</B> \red [input].")
del(STARTLOC) del(STARTLOC)
@@ -107,8 +107,8 @@ var/global/sent_strike_team = 0
GUN.bullets = 7 GUN.bullets = 7
new_commando.equip_if_possible(GUN, new_commando.slot_s_store) new_commando.equip_if_possible(GUN, new_commando.slot_s_store)
// new_commando.equip_if_possible(new /obj/item/weapon/gun/energy/pulse_rifle(new_commando), new_commando.slot_l_hand) // new_commando.equip_if_possible(new /obj/item/weapon/gun/energy/pulse_rifle(new_commando), new_commando.slot_l_hand)
//Commented out because Commandos now have their rifles spawn in front of them, along with operation manuals. /*Commented out because Commandos now have their rifles spawn in front of them, along with operation manuals.
//Useful for copy pasta since I'm lazy. Useful for copy pasta since I'm lazy.*/
var/obj/item/weapon/card/id/W = new(new_commando) var/obj/item/weapon/card/id/W = new(new_commando)
W.name = "[new_commando.real_name]'s ID Card" W.name = "[new_commando.real_name]'s ID Card"
@@ -120,8 +120,8 @@ var/global/sent_strike_team = 0
var/list/candidates = list() // Picks a random ghost for the role. Mostly a copy of alien burst code. var/list/candidates = list() // Picks a random ghost for the role. Mostly a copy of alien burst code.
for(var/mob/dead/observer/G in world) for(var/mob/dead/observer/G in world)
if(G.client) if(G.client)
// if(!G.client.holder && ((G.client.inactivity/10)/60) <= 5) //!G.client.holder means that whoever called/has the proc won't be added to the list. if(!G.client.holder && ((G.client.inactivity/10)/60) <= 5) //Whoever called/has the proc won't be added to the list.
if(((G.client.inactivity/10)/60) <= 5) //Removing it allows even the caller to jump in. // if(((G.client.inactivity/10)/60) <= 5) //Removing it allows even the caller to jump in. Good for testing.
candidates.Add(G) candidates.Add(G)
if(candidates.len) if(candidates.len)
var/mob/dead/observer/G = pick(candidates) var/mob/dead/observer/G = pick(candidates)

View File

@@ -1,16 +1,17 @@
/*NOTE: /*NOTES:
Put in power that will lay a facehugger egg but cost a lot of plasma, 250 or something?
Also perhaps only queens can do that?
There are several problems with alien powers right now. I am currently trying to fix the dissolve verb so it makes a lot more sense.
Alien spit is ridiculous and needs to be toned down. It homes in on targets when it should probably work
more like a taser shot but with continuous toxin damage to the target if they are hit.
Invisibility works well but 30 seconds is too long. 15 would be good considering it doesn't cost much and makes the alien a lot more
robust (can't be canceled by anything short of thermals or a superpower).
Vent crawl shouldn't transport the alien to the Prison Station or back. The list should also be in some order since right now it's
often difficult to pick the right destination.
Resin wall should also apply to mobs so that aliens can envelope them in resin (effectively paralyze them) to successfully hatch more
aliens. Perhaps it should also prevent the target from suiciding.
All I can think of right now./N
*/ */
/mob/living/carbon/alien/humanoid/verb/invis() /mob/living/carbon/alien/humanoid/verb/invis()
set name = "Invisibility (50)" set name = "Invisibility (50)"
set desc = "Makes you invisible for 30 seconds" set desc = "Makes you invisible for 30 seconds"
@@ -38,7 +39,7 @@ Also perhaps only queens can do that?
set category = "Alien" set category = "Alien"
if(src.stat) if(src.stat)
src << "You must be concious to do this" src << "You must be concious to do this."
return return
if(src.toxloss >= 25) if(src.toxloss >= 25)
src.toxloss -= 25 src.toxloss -= 25
@@ -88,7 +89,7 @@ Also perhaps only queens can do that?
set category = "Alien" set category = "Alien"
if(src.stat) if(src.stat)
src << "You must be concious to do this" src << "You must be concious to do this."
return return
if(src.toxloss >= 100) if(src.toxloss >= 100)
src.toxloss -= 100 src.toxloss -= 100
@@ -103,11 +104,11 @@ Also perhaps only queens can do that?
/mob/living/carbon/alien/humanoid/verb/call_to() /mob/living/carbon/alien/humanoid/verb/call_to()
set name = "Call facehuggers (5)" set name = "Call facehuggers (5)"
set desc = "Makes all nearby facehuggers follow you." set desc = "Makes all nearby facehuggers follow you"
set category = "Alien" set category = "Alien"
if(src.stat) if(src.stat)
src << "You must be concious to do this" src << "You must be concious to do this."
return return
if(src.toxloss >= 5) if(src.toxloss >= 5)
@@ -180,11 +181,11 @@ Also perhaps only queens can do that?
/mob/living/carbon/alien/humanoid/verb/evolve() // -- TLE /mob/living/carbon/alien/humanoid/verb/evolve() // -- TLE
set name = "Evolve (500)" set name = "Evolve (500)"
set desc = "Produce an interal egg sac capable of spawning children." set desc = "Produce an interal egg sac capable of spawning children"
set category = "Alien" set category = "Alien"
if(src.stat) if(src.stat)
src << "You must be concious to do this" src << "You must be concious to do this."
return return
if(!src.toxloss) if(!src.toxloss)
@@ -203,7 +204,7 @@ Also perhaps only queens can do that?
/mob/living/carbon/alien/humanoid/verb/resinwall() // -- TLE /mob/living/carbon/alien/humanoid/verb/resinwall() // -- TLE
set name = "Shape Resin Wall (200)" set name = "Shape Resin Wall (200)"
set desc = "Produce a wall of resin that blocks entry and line of sight." set desc = "Produce a wall of resin that blocks entry and line of sight"
set category = "Alien" set category = "Alien"
if(src.stat) if(src.stat)
@@ -224,13 +225,13 @@ Also perhaps only queens can do that?
/mob/living/carbon/alien/humanoid/proc/ventcrawl() // -- TLE /mob/living/carbon/alien/humanoid/proc/ventcrawl() // -- TLE
set name = "Crawl through Vent" set name = "Crawl through Vent"
set desc = "Enter an air vent and appear at a random one." set desc = "Enter an air vent and appear at a random one"
set category = "Alien" set category = "Alien"
// if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent)) // if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent))
// return // return
if(src.stat) if(src.stat)
src << "You must be concious to do this" src << "You must be concious to do this."
return return
var/vent_found = 0 var/vent_found = 0
for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src)) for(var/obj/machinery/atmospherics/unary/vent_pump/v in range(1,src))
@@ -288,31 +289,59 @@ Also perhaps only queens can do that?
for(var/obj/alien/facehugger/F in huggers) for(var/obj/alien/facehugger/F in huggers)
F.loc = src.loc F.loc = src.loc
/mob/living/carbon/alien/humanoid/verb/corrode(obj/O as obj in view(1)) // -- TLE
/*Xenos now have a proc and a verb for drenching stuff in acid. I couldn't get them to work right when combined so this was the next best solution.
The first proc defines the acid throw function while the other two work in the game itself. Probably a good idea to revise this later.
I kind of like the right click only--the window version can get a little confusing. Perhaps something telling the alien they need to right click?
/N*/
/obj/proc/acid()
usr.toxloss -= 200
var/obj/alien/acid/A = new(src.loc)
A.target = src
for(var/mob/M in viewers(src, null))
M.show_message(text("\green <B>[src] vomits globs of vile stuff all over [src]!</B>"), 1)
A.tick()
/mob/living/carbon/alien/humanoid/proc/corrode_target() //Aliens only see items on the list of objects that they can actually spit on./N
set name = "Spit Corrosive Acid (200)" set name = "Spit Corrosive Acid (200)"
set desc = "Drench an object in acid, destroying it over time." set desc = "Drench an object in acid, destroying it over time."
set category = "Alien" set category = "Alien"
var/obj/A
if(src.stat) if(src.stat)
src << "You must be concious to do this" src << "You must be concious to do this."
return return
var/list/xeno_target
xeno_target = list("ABORT COMMAND")
for(var/obj/O in view(1))
if(!O.unacidable)
xeno_target.Add(O)
A = input("Corrode which target?", "Targets", A) in xeno_target
if(A == "ABORT COMMAND")
return
if(src.toxloss < 200)
src << "Not enough plasma."
return
if(A in view(1))//Another check to see if the item is in range. So the alien does not run off with the window open.
A.acid()
else
src << "Target is too far away."
return
/mob/living/carbon/alien/humanoid/verb/corrode(obj/O as anything in view(1)) //If they right click to corrode, an error will flash if its an invalid target./N
set name = "Spit Corrosive Acid (200)"
set desc = "Drench an object in acid, destroying it over time."
if(!istype(O, /obj)) if(!istype(O, /obj))
return return
if(src.stat)
if(O.unacidable) //noize, don't fucking touch this and learn, why algorithms must be universal when possible (here it IS possible) src << "You must be concious to do this."
src << "You cannot spit acid over this." return
return //also, if you want list of unacidables - search("unacidable = 1". all files), key_press(F3).
/*if(range(O, src) > 1)
src << "That's too far away!"
return*/
if(src.toxloss < 200) if(src.toxloss < 200)
src << "You don't have enough plasma." src << "Not enough plasma."
return
if(O.unacidable) //So the aliens don't destroy energy fields/singularies/other aliens/etc with their acid.
src << "Cannot destroy this object."
return
else else
src.toxloss -= 200 O.acid()
var/obj/alien/acid/A = new(O.loc)
A.target = O
for(var/mob/M in viewers(src, null))
M.show_message(text("\green <B>[src] vomits globs of vile stuff all over [O]!</B>"), 1)
A.tick()

View File

@@ -34,7 +34,7 @@
message = "<B>The [src.name]</B> roars." message = "<B>The [src.name]</B> roars."
m_type = 2 m_type = 2
if("tail") if("tail")
message = "<B>The [src.name]</B> waves his tail." message = "<B>The [src.name]</B> waves its tail."
m_type = 1 m_type = 1
if("gasp") if("gasp")
message = "<B>The [src.name]</B> gasps." message = "<B>The [src.name]</B> gasps."
@@ -56,7 +56,7 @@
message = "<B>The [src.name]</B> moans!" message = "<B>The [src.name]</B> moans!"
m_type = 2 m_type = 2
if("nod") if("nod")
message = "<B>The [src.name]</B> nods his head." message = "<B>The [src.name]</B> nods its head."
m_type = 1 m_type = 1
if("sit") if("sit")
message = "<B>The [src.name]</B> sits down." message = "<B>The [src.name]</B> sits down."
@@ -79,11 +79,11 @@
message = "<B>The [src.name]</B> rolls." message = "<B>The [src.name]</B> rolls."
m_type = 1 m_type = 1
if("shake") if("shake")
message = "<B>The [src.name]</B> shakes his head." message = "<B>The [src.name]</B> shakes its head."
m_type = 1 m_type = 1
if("gnarl") if("gnarl")
if (!muzzled) if (!muzzled)
message = "<B>The [src.name]</B> gnarls and shows his teeth.." message = "<B>The [src.name]</B> gnarls and shows its teeth.."
m_type = 2 m_type = 2
if("jump") if("jump")
message = "<B>The [src.name]</B> jumps!" message = "<B>The [src.name]</B> jumps!"

View File

@@ -55,6 +55,7 @@ to clean it up, or just beat the shit out of it (which takes ages).
/mob/living/carbon/alien/humanoid/New() /mob/living/carbon/alien/humanoid/New()
spawn (1) spawn (1)
src.verbs += /mob/living/carbon/alien/humanoid/proc/ventcrawl // Give only normal aliens ventcrawling -- TLE src.verbs += /mob/living/carbon/alien/humanoid/proc/ventcrawl // Give only normal aliens ventcrawling -- TLE
src.verbs += /mob/living/carbon/alien/humanoid/proc/corrode_target //So aliens propely get two acid verbs. /N
var/datum/reagents/R = new/datum/reagents(100) var/datum/reagents/R = new/datum/reagents(100)
reagents = R reagents = R
R.my_atom = src R.my_atom = src