From 6f5f92247aa40b4cb4be71e153b0c37e09b1eb24 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Thu, 25 Dec 2014 21:31:20 -0500 Subject: [PATCH 1/5] Xeno balancing Makes xenos slightly faster across the board, so that sentinels are now on par with humans in terms of base speed. Makes facehuggers become stunned when thrown, removes helmet protection. --- .../carbon/human/species/xenomorphs/alien_facehugger.dm | 8 +++++--- .../carbon/human/species/xenomorphs/alien_species.dm | 8 ++++---- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm index da591f0570..dcc3af220e 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm @@ -96,8 +96,8 @@ var/const/MAX_ACTIVE_TIME = 400 ..() if(stat == CONSCIOUS) icon_state = "[initial(icon_state)]" - Attach(hit_atom) throwing = 0 + GoIdle(30,50) //stunned for a few seconds - allows throwing them to be useful for positioning but not as an offensive action (unless you're setting up a trap) /obj/item/clothing/mask/facehugger/proc/Attach(M as mob) @@ -124,12 +124,14 @@ var/const/MAX_ACTIVE_TIME = 400 L.visible_message("\red \b [src] leaps at [L]'s face!") + /* Tentatively removed since huggers can't be thrown anymore if(ishuman(L)) var/mob/living/carbon/human/H = L if(H.head && H.head.flags & HEADCOVERSMOUTH) H.visible_message("\red \b [src] smashes against [H]'s [H.head]!") Die() return + */ if(iscarbon(M)) var/mob/living/carbon/target = L @@ -191,7 +193,7 @@ var/const/MAX_ACTIVE_TIME = 400 return -/obj/item/clothing/mask/facehugger/proc/GoIdle() +/obj/item/clothing/mask/facehugger/proc/GoIdle(var/min_time=MIN_ACTIVE_TIME, var/max_time=MAX_ACTIVE_TIME) if(stat == DEAD || stat == UNCONSCIOUS) return @@ -200,7 +202,7 @@ var/const/MAX_ACTIVE_TIME = 400 stat = UNCONSCIOUS icon_state = "[initial(icon_state)]_inactive" - spawn(rand(MIN_ACTIVE_TIME,MAX_ACTIVE_TIME)) + spawn(rand(min_time,max_time)) GoActive() return diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm index 64d5974f25..d36267adab 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm @@ -110,7 +110,7 @@ name = "Xenomorph Drone" caste_name = "drone" weeds_plasma_rate = 15 - slowdown = 2 + slowdown = 1 tail = "xenos_drone_tail" rarity_value = 5 @@ -149,7 +149,7 @@ name = "Xenomorph Hunter" weeds_plasma_rate = 5 caste_name = "hunter" - slowdown = -1 + slowdown = -2 total_health = 150 tail = "xenos_hunter_tail" @@ -177,7 +177,7 @@ name = "Xenomorph Sentinel" weeds_plasma_rate = 10 caste_name = "sentinel" - slowdown = 1 + slowdown = 0 total_health = 125 tail = "xenos_sentinel_tail" @@ -209,7 +209,7 @@ weeds_heal_rate = 5 weeds_plasma_rate = 20 caste_name = "queen" - slowdown = 5 + slowdown = 4 tail = "xenos_queen_tail" rarity_value = 10 From fe348726f2c18803b9d11a2109236ac2ce7bc92d Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 27 Dec 2014 17:10:34 -0500 Subject: [PATCH 2/5] Alien weed regeneration now mends broken bones Also, weed regeneration is reduced unless xenos are resting. --- .../human/species/xenomorphs/alien_species.dm | 33 +++++++++++++++---- code/modules/organs/organ_external.dm | 9 +++++ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm index d36267adab..86593e6e8f 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm @@ -86,17 +86,38 @@ if(!environment) return if(environment.gas["phoron"] > 0 || locate(/obj/effect/alien/weeds) in T) - if(H.health >= H.maxHealth - H.getCloneLoss()) + if(!regenerate(H)) var/datum/organ/internal/xenos/plasmavessel/P = H.internal_organs_by_name["plasma vessel"] P.stored_plasma += weeds_plasma_rate P.stored_plasma = min(max(P.stored_plasma,0),P.max_plasma) - else - H.adjustBruteLoss(-weeds_heal_rate) - H.adjustFireLoss(-weeds_heal_rate) - H.adjustOxyLoss(-weeds_heal_rate) - H.adjustToxLoss(-weeds_heal_rate) ..() +/datum/species/xenos/proc/regenerate(var/mob/living/carbon/human/H) + var/heal_rate = weeds_heal_rate + var/mend_prob = 10 + if (!H.resting) + heal_rate = weeds_heal_rate / 3 + mend_prob = 1 + + //first heal damages + if (H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss()) + H.adjustBruteLoss(-heal_rate) + H.adjustFireLoss(-heal_rate) + H.adjustOxyLoss(-heal_rate) + H.adjustToxLoss(-heal_rate) + if (prob(5)) + H << "\green You feel a soothing sensation come over you..." + return 1 + + //next mend broken bones, approx 10 ticks each + for(var/datum/organ/external/E in H.bad_external_organs) + if (E.status & ORGAN_BROKEN) + if (prob(mend_prob)) + if (E.mend_fracture()) + H << "\green You feel something mend itself inside your [E.display_name]." + return 1 + + return 0 /datum/species/xenos/handle_login_special(var/mob/living/carbon/human/H) H.AddInfectionImages() diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 24b84050d0..e340909790 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -764,6 +764,15 @@ Note that amputating the affected organ does in fact remove the infection from t suit.supporting_limbs |= src return +/datum/organ/external/proc/mend_fracture() + if(status & ORGAN_ROBOT) + return 0 //ORGAN_BROKEN doesn't have the same meaning for robot limbs + if(brute_dam > min_broken_damage * config.organ_health_multiplier) + return 0 //will just immediately fracture again + + status &= ~ORGAN_BROKEN + return 1 + /datum/organ/external/proc/robotize() src.status &= ~ORGAN_BROKEN src.status &= ~ORGAN_BLEEDING From f3d7e0853c48ba11900ce99498d9863847f11300 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 27 Dec 2014 17:10:57 -0500 Subject: [PATCH 3/5] Replaces a few old for loops with visible_message() --- .../human/species/xenomorphs/alien_powers.dm | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm index d53343b4c2..470ab5773b 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm @@ -93,8 +93,7 @@ return if(check_alien_ability(75,1,"egg sac")) - for(var/mob/O in viewers(src, null)) - O.show_message(text("\green [src] has laid an egg!"), 1) + visible_message("\green [src] has laid an egg!") new /obj/effect/alien/egg(loc) return @@ -110,9 +109,7 @@ return if(check_alien_ability(500)) - src << "\green You begin to evolve!" - for(var/mob/O in viewers(src, null)) - O.show_message(text("\green [src] begins to twist and contort!"), 1) + visible_message("\green [src] begins to twist and contort!", "\green You begin to evolve!") src.set_species("Xenomorph Queen") return @@ -123,8 +120,7 @@ set category = "Abilities" if(check_alien_ability(50,1,"resin spinner")) - for(var/mob/O in viewers(src, null)) - O.show_message(text("\green [src] has planted some alien weeds!"), 1) + visible_message("\green [src] has planted some alien weeds!") new /obj/effect/alien/weeds/node(loc) return @@ -176,11 +172,7 @@ src << "You cannot spit neurotoxin in your current state." return - src << "\green You spit neurotoxin at [target]." - - for(var/mob/O in oviewers()) - if ((O.client && !(O.blinded ))) - O << "\red [src] spits neurotoxin at [target]!" + visible_message("[src] spits neurotoxin at [target]!", "\green You spit neurotoxin at [target].") //I'm not motivated enough to revise this. Prjectile code in general needs update. // Maybe change this to use throw_at? ~ Z @@ -218,9 +210,7 @@ if(!check_alien_ability(75,1,"resin spinner")) return - src << "\green You shape a [choice]." - for(var/mob/O in viewers(src, null)) - O.show_message(text("\red [src] vomits up a thick purple substance and begins to shape it!"), 1) + visible_message("[src] vomits up a thick purple substance and begins to shape it!", "\green You shape a [choice].") switch(choice) if("resin door") new /obj/structure/mineral_door/resin(loc) From 6cf010f7377fc87eb5a0dbfbee8bda5d6a699226 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 28 Dec 2014 02:06:02 -0500 Subject: [PATCH 4/5] Converts \green macro to span tag --- .../species/xenomorphs/alien_facehugger.dm | 2 +- .../human/species/xenomorphs/alien_powers.dm | 28 +++++++++---------- .../human/species/xenomorphs/alien_species.dm | 4 +-- code/stylesheet.dm | 5 ++++ 4 files changed, 22 insertions(+), 17 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm index dcc3af220e..6079a3c044 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm @@ -97,7 +97,7 @@ var/const/MAX_ACTIVE_TIME = 400 if(stat == CONSCIOUS) icon_state = "[initial(icon_state)]" throwing = 0 - GoIdle(30,50) //stunned for a few seconds - allows throwing them to be useful for positioning but not as an offensive action (unless you're setting up a trap) + GoIdle(30,100) //stunned for a few seconds - allows throwing them to be useful for positioning but not as an offensive action (unless you're setting up a trap) /obj/item/clothing/mask/facehugger/proc/Attach(M as mob) diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm index 470ab5773b..0f942f3c4d 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm @@ -59,12 +59,12 @@ set category = "Abilities" if (get_dist(src,M) <= 1) - src << "\green You need to be closer." + src << "You need to be closer." return var/datum/organ/internal/xenos/plasmavessel/I = M.internal_organs_by_name["plasma vessel"] if(!istype(I)) - src << "\green Their plasma vessel is missing." + src << "Their plasma vessel is missing." return var/amount = input("Amount:", "Transfer Plasma to [M]") as num @@ -72,8 +72,8 @@ amount = abs(round(amount)) if(check_alien_ability(amount,0,"plasma vessel")) M.gain_plasma(amount) - M << "\green [src] has transfered [amount] plasma to you." - src << "\green You have transferred [amount] plasma to [M]" + M << "[src] has transfered [amount] plasma to you." + src << "You have transferred [amount] plasma to [M]." return // Queen verbs. @@ -93,7 +93,7 @@ return if(check_alien_ability(75,1,"egg sac")) - visible_message("\green [src] has laid an egg!") + visible_message("[src] has laid an egg!") new /obj/effect/alien/egg(loc) return @@ -109,7 +109,7 @@ return if(check_alien_ability(500)) - visible_message("\green [src] begins to twist and contort!", "\green You begin to evolve!") + visible_message("[src] begins to twist and contort!", "You begin to evolve!") src.set_species("Xenomorph Queen") return @@ -120,7 +120,7 @@ set category = "Abilities" if(check_alien_ability(50,1,"resin spinner")) - visible_message("\green [src] has planted some alien weeds!") + visible_message("[src] has planted some alien weeds!") new /obj/effect/alien/weeds/node(loc) return @@ -130,14 +130,14 @@ set category = "Abilities" if(!O in oview(1)) - src << "\green [O] is too far away." + src << "[O] is too far away." return // OBJ CHECK if(isobj(O)) var/obj/I = O if(I.unacidable) //So the aliens don't destroy energy fields/singularies/other aliens/etc with their acid. - src << "\green You cannot dissolve this object." + src << "You cannot dissolve this object." return // TURF CHECK @@ -145,18 +145,18 @@ var/turf/T = O // R WALL if(istype(T, /turf/simulated/wall/r_wall)) - src << "\green You cannot dissolve this object." + src << "You cannot dissolve this object." return // R FLOOR if(istype(T, /turf/simulated/floor/engine)) - src << "\green You cannot dissolve this object." + src << "You cannot dissolve this object." return else// Not a type we can acid. return if(check_alien_ability(200,0,"acid gland")) new /obj/effect/alien/acid(get_turf(O), O) - visible_message("\green [src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!") + visible_message("[src] vomits globs of vile stuff all over [O]. It begins to sizzle and melt under the bubbling mess of acid!") return @@ -172,7 +172,7 @@ src << "You cannot spit neurotoxin in your current state." return - visible_message("[src] spits neurotoxin at [target]!", "\green You spit neurotoxin at [target].") + visible_message("[src] spits neurotoxin at [target]!", "You spit neurotoxin at [target].") //I'm not motivated enough to revise this. Prjectile code in general needs update. // Maybe change this to use throw_at? ~ Z @@ -210,7 +210,7 @@ if(!check_alien_ability(75,1,"resin spinner")) return - visible_message("[src] vomits up a thick purple substance and begins to shape it!", "\green You shape a [choice].") + visible_message("[src] vomits up a thick purple substance and begins to shape it!", "You shape a [choice].") switch(choice) if("resin door") new /obj/structure/mineral_door/resin(loc) diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm index 86593e6e8f..029ca336e2 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm @@ -106,7 +106,7 @@ H.adjustOxyLoss(-heal_rate) H.adjustToxLoss(-heal_rate) if (prob(5)) - H << "\green You feel a soothing sensation come over you..." + H << "You feel a soothing sensation come over you..." return 1 //next mend broken bones, approx 10 ticks each @@ -114,7 +114,7 @@ if (E.status & ORGAN_BROKEN) if (prob(mend_prob)) if (E.mend_fracture()) - H << "\green You feel something mend itself inside your [E.display_name]." + H << "You feel something mend itself inside your [E.display_name]." return 1 return 0 diff --git a/code/stylesheet.dm b/code/stylesheet.dm index c722d86dd5..8a3eaf1a40 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -63,6 +63,8 @@ h1.alert, h2.alert {color: #000000;} .emote {font-style: italic;} +/* Game Messages */ + .attack {color: #ff0000;} .moderate {color: #CC0000;} .disarm {color: #990000;} @@ -73,6 +75,9 @@ h1.alert, h2.alert {color: #000000;} .rose {color: #ff5050;} .info {color: #0000CC;} .notice {color: #000099;} +.alium {color: #00ff00;} + +/* Languages */ .alien {color: #543354;} .tajaran {color: #803B56;} From 3bc118b5e634632c4969212bc48983da5c45deec Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 28 Dec 2014 02:15:37 -0500 Subject: [PATCH 5/5] Weed regeneration heals internal organs --- .../carbon/human/species/xenomorphs/alien_species.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm index 029ca336e2..51e466f176 100644 --- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm +++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm @@ -109,6 +109,14 @@ H << "You feel a soothing sensation come over you..." return 1 + //next internal organs + for(var/datum/organ/internal/I in H.internal_organs) + if(I.damage > 0) + I.damage = max(I.damage - heal_rate, 0) + if (prob(5)) + H << "You feel a soothing sensation within your [I.parent_organ]..." + return 1 + //next mend broken bones, approx 10 ticks each for(var/datum/organ/external/E in H.bad_external_organs) if (E.status & ORGAN_BROKEN)