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