From d681b0358174e889a3dc484420720027a5e531f4 Mon Sep 17 00:00:00 2001 From: "noisomehollow@lycos.com" Date: Wed, 22 Dec 2010 02:54:52 +0000 Subject: [PATCH] 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 --- code/FEA/FEA_fire.dm | 2 +- code/defines/obj.dm | 10 +- code/game/gamemodes/wizard/spell6.dm | 1 + code/game/machinery/singularity.dm | 2 +- code/game/magic/cultist/ritual.dm | 1 + code/game/magic/magicmonster.dm | 1 + code/game/objects/alien/acid.dm | 3 - code/game/objects/alien/defines.dm | 4 +- code/game/objects/effect_system.dm | 1 + code/game/objects/lamarr.dm | 2 +- code/game/objects/livestock.dm | 2 +- code/modules/admin/verbs/randomverbs.dm | 6 +- code/modules/admin/verbs/striketeam.dm | 12 +-- .../carbon/alien/humanoid/alien_powers.dm | 101 +++++++++++------- .../mob/living/carbon/alien/humanoid/emote.dm | 8 +- .../living/carbon/alien/humanoid/humanoid.dm | 1 + 16 files changed, 96 insertions(+), 61 deletions(-) diff --git a/code/FEA/FEA_fire.dm b/code/FEA/FEA_fire.dm index 6eec1fc8271..582a65f74cd 100644 --- a/code/FEA/FEA_fire.dm +++ b/code/FEA/FEA_fire.dm @@ -46,8 +46,8 @@ obj //Icon for fire on turfs, also helps for nurturing small fires until they are full tile anchored = 1 - mouse_opacity = 0 + unacidable = 1//So you can't melt fire with acid. //luminosity = 3 diff --git a/code/defines/obj.dm b/code/defines/obj.dm index e9029aabccb..984fa33c3a9 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -40,7 +40,7 @@ anchored = 1 layer = 99 mouse_opacity = 0 - unacidable = 1 + unacidable = 1//Just to be sure. /obj/admins name = "admins" @@ -56,7 +56,7 @@ desc = "FUCK FUCK FUCK AAAHHH" icon_state = "bhole2" opacity = 0 - unacidable = 1 //well, if you got that close, you're fucked anyway, but... + unacidable = 1 density = 0 anchored = 1 var/datum/effects/system/harmless_smoke_spread/smoke @@ -66,6 +66,7 @@ /obj/beam name = "beam" + unacidable = 1//Just to be sure. /obj/beam/a_laser name = "a laser" @@ -111,6 +112,7 @@ icon = 'projectiles.dmi' icon_state = "bullet" density = 1 + unacidable = 1//Just to be sure. var/yo = null var/xo = null var/current = null @@ -512,6 +514,7 @@ name = "manifest" icon = 'screen1.dmi' icon_state = "x" + unacidable = 1//Just to be sure. /obj/morgue name = "morgue" @@ -578,7 +581,7 @@ icon = 'stationobjs.dmi' icon_state = "portal" density = 1 - unacidable = 1 + unacidable = 1//Can't destroy energy portals. var/failchance = 5 var/obj/item/target = null var/creator = null @@ -706,6 +709,7 @@ desc = "A display case for prized possessions." density = 1 anchored = 1 + unacidable = 1//Dissolving the case would also delete the gun. var/health = 30 var/occupied = 1 var/destroyed = 0 diff --git a/code/game/gamemodes/wizard/spell6.dm b/code/game/gamemodes/wizard/spell6.dm index 6df673c0b61..592a8088ce8 100644 --- a/code/game/gamemodes/wizard/spell6.dm +++ b/code/game/gamemodes/wizard/spell6.dm @@ -6,6 +6,7 @@ anchored = 1.0 opacity = 0 density = 1 + unacidable = 1 /client/proc/forcewall() diff --git a/code/game/machinery/singularity.dm b/code/game/machinery/singularity.dm index da23b4736fc..8cb9ac01d9d 100644 --- a/code/game/machinery/singularity.dm +++ b/code/game/machinery/singularity.dm @@ -53,7 +53,7 @@ However people seem to like it for some reason. icon_state = "Singularity" anchored = 1 density = 1 -// unacidable = 1 //oh the hilarity. + unacidable = 1 //Don't comment this out. var/active = 0 var/energy = 10 var/Dtime = null diff --git a/code/game/magic/cultist/ritual.dm b/code/game/magic/cultist/ritual.dm index 0d05fc30d15..a21d1a32d5b 100644 --- a/code/game/magic/cultist/ritual.dm +++ b/code/game/magic/cultist/ritual.dm @@ -33,6 +33,7 @@ var/runedec = 0 icon = 'rune.dmi' icon_state = "1" var/visibility = 0 + unacidable = 1 var diff --git a/code/game/magic/magicmonster.dm b/code/game/magic/magicmonster.dm index f3c259465d3..634ec20b092 100644 --- a/code/game/magic/magicmonster.dm +++ b/code/game/magic/magicmonster.dm @@ -16,6 +16,7 @@ layer = 5.0 density = 1 anchored = 0 + unacidable = 1 //Creature is not harmed by acid. var/state = 0 diff --git a/code/game/objects/alien/acid.dm b/code/game/objects/alien/acid.dm index ceeb9e2634b..bd2bc9e8c3b 100644 --- a/code/game/objects/alien/acid.dm +++ b/code/game/objects/alien/acid.dm @@ -1,8 +1,5 @@ /obj/alien/acid/proc/tick() ticks += 1 - if(target.unacidable) - del(src) - return for(var/mob/O in hearers(src, null)) O.show_message("\green [src.target] sizzles and begins to melt under the bubbling mess of acid!", 1) if(prob(ticks*10)) diff --git a/code/game/objects/alien/defines.dm b/code/game/objects/alien/defines.dm index 528e1e6c950..694e591dc64 100644 --- a/code/game/objects/alien/defines.dm +++ b/code/game/objects/alien/defines.dm @@ -2,7 +2,7 @@ name = "alien thing" desc = "theres something alien about this" icon = 'alien.dmi' - unacidable = 1 //alien acid don't melts alien things... + unacidable = 1 //Aliens won't ment their own. /obj/alien/egg desc = "It looks like a weird egg" @@ -39,7 +39,7 @@ density = 1 opacity = 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 diff --git a/code/game/objects/effect_system.dm b/code/game/objects/effect_system.dm index 607237c501a..22b7126abfd 100644 --- a/code/game/objects/effect_system.dm +++ b/code/game/objects/effect_system.dm @@ -10,6 +10,7 @@ would spawn and follow the beaker, even if it is carried or thrown. name = "effects" icon = 'effects.dmi' mouse_opacity = 0 + unacidable = 1//So effects are not targeted by alien acid. flags = TABLEPASS /obj/effects/water diff --git a/code/game/objects/lamarr.dm b/code/game/objects/lamarr.dm index 884f8cc3272..87fdbafdca2 100644 --- a/code/game/objects/lamarr.dm +++ b/code/game/objects/lamarr.dm @@ -5,7 +5,7 @@ desc = "A glass lab container for storing interesting creatures." density = 1 anchored = 1 - unacidable = 1 + unacidable = 1//Dissolving the case would also delete Lamarr var/health = 30 var/occupied = 1 var/destroyed = 0 diff --git a/code/game/objects/livestock.dm b/code/game/objects/livestock.dm index a4eeb015726..9b83e8973c3 100644 --- a/code/game/objects/livestock.dm +++ b/code/game/objects/livestock.dm @@ -7,7 +7,7 @@ layer = 5.0 density = 1 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 diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index e91461cd157..7c7ed5923d1 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -290,9 +290,9 @@ They spawn as an assistant but there is no announcement. /N */ var/GKEY = input 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) - if(G.key==input) + if(G.key==input||GKEY) GDEL = G GNAME = G.real_name else @@ -321,7 +321,7 @@ They spawn as an assistant but there is no announcement. /N */ new_character.loc = spawn_here 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 // preferences.copy_to(new_character) new_character.dna.ready_dna(new_character) diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index e0430bc00c7..eb6ee7532a4 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -58,12 +58,12 @@ var/global/sent_strike_team = 0 else new_commando.age = rand(35,45) 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. new_commando.mind = new new_commando.mind.current = new_commando new_commando.mind.assigned_role = "Death Commando" - new_commando.mind.store_memory("Nuke Code: \red [nuke_code].") + new_commando.mind.store_memory("Nuke Code: \red [nuke_code].")//So they don't forget their code or mission. new_commando.mind.store_memory("Mission: \red [input].") del(STARTLOC) @@ -107,8 +107,8 @@ var/global/sent_strike_team = 0 GUN.bullets = 7 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) -//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. +/*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.*/ var/obj/item/weapon/card/id/W = new(new_commando) 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. for(var/mob/dead/observer/G in world) 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.inactivity/10)/60) <= 5) //Removing it allows even the caller to jump in. + 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. Good for testing. candidates.Add(G) if(candidates.len) var/mob/dead/observer/G = pick(candidates) diff --git a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm index 3dbc8a833a5..65c3202d180 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/alien_powers.dm @@ -1,16 +1,17 @@ -/*NOTE: - -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? +/*NOTES: +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() set name = "Invisibility (50)" set desc = "Makes you invisible for 30 seconds" @@ -38,7 +39,7 @@ Also perhaps only queens can do that? set category = "Alien" if(src.stat) - src << "You must be concious to do this" + src << "You must be concious to do this." return if(src.toxloss >= 25) src.toxloss -= 25 @@ -88,7 +89,7 @@ Also perhaps only queens can do that? set category = "Alien" if(src.stat) - src << "You must be concious to do this" + src << "You must be concious to do this." return if(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() set name = "Call facehuggers (5)" - set desc = "Makes all nearby facehuggers follow you." + set desc = "Makes all nearby facehuggers follow you" set category = "Alien" if(src.stat) - src << "You must be concious to do this" + src << "You must be concious to do this." return if(src.toxloss >= 5) @@ -180,11 +181,11 @@ Also perhaps only queens can do that? /mob/living/carbon/alien/humanoid/verb/evolve() // -- TLE 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" if(src.stat) - src << "You must be concious to do this" + src << "You must be concious to do this." return if(!src.toxloss) @@ -203,7 +204,7 @@ Also perhaps only queens can do that? /mob/living/carbon/alien/humanoid/verb/resinwall() // -- TLE 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" if(src.stat) @@ -224,13 +225,13 @@ Also perhaps only queens can do that? /mob/living/carbon/alien/humanoid/proc/ventcrawl() // -- TLE 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" // if(!istype(V,/obj/machinery/atmoalter/siphs/fullairsiphon/air_vent)) // return if(src.stat) - src << "You must be concious to do this" + src << "You must be concious to do this." return var/vent_found = 0 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) 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 [src] vomits globs of vile stuff all over [src]!"), 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 desc = "Drench an object in acid, destroying it over time." set category = "Alien" + var/obj/A if(src.stat) - src << "You must be concious to do this" + src << "You must be concious to do this." 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)) return - - if(O.unacidable) //noize, don't fucking touch this and learn, why algorithms must be universal when possible (here it IS possible) - src << "You cannot spit acid over this." - 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.stat) + src << "You must be concious to do this." + return 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 - src.toxloss -= 200 - var/obj/alien/acid/A = new(O.loc) - A.target = O - for(var/mob/M in viewers(src, null)) - M.show_message(text("\green [src] vomits globs of vile stuff all over [O]!"), 1) - A.tick() \ No newline at end of file + O.acid() diff --git a/code/modules/mob/living/carbon/alien/humanoid/emote.dm b/code/modules/mob/living/carbon/alien/humanoid/emote.dm index 6d1de65b604..0c371f617b8 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/emote.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/emote.dm @@ -34,7 +34,7 @@ message = "The [src.name] roars." m_type = 2 if("tail") - message = "The [src.name] waves his tail." + message = "The [src.name] waves its tail." m_type = 1 if("gasp") message = "The [src.name] gasps." @@ -56,7 +56,7 @@ message = "The [src.name] moans!" m_type = 2 if("nod") - message = "The [src.name] nods his head." + message = "The [src.name] nods its head." m_type = 1 if("sit") message = "The [src.name] sits down." @@ -79,11 +79,11 @@ message = "The [src.name] rolls." m_type = 1 if("shake") - message = "The [src.name] shakes his head." + message = "The [src.name] shakes its head." m_type = 1 if("gnarl") if (!muzzled) - message = "The [src.name] gnarls and shows his teeth.." + message = "The [src.name] gnarls and shows its teeth.." m_type = 2 if("jump") message = "The [src.name] jumps!" diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 84ff7b6660e..3e58c490d4f 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -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() 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/corrode_target //So aliens propely get two acid verbs. /N var/datum/reagents/R = new/datum/reagents(100) reagents = R R.my_atom = src