TG: There's a metric assload of stuff here, mostly in preparation to my massive

traitor expansion, so I'll try to be brief:

- I added in the foundations for traitor factions. See factions.dm for all the
different faction datums. They don't do anything yet.

- I completely ported mob/var/mutations from a bitfield to a generic list.
Mutation enumerated-identifiers are added into this list. For instance, TK = 1,
COLD_RESISTANCE = 2, XRAY = 3, etc... The purpose of this was because bitwise
operations could not actually be used after a certain size (because BYOND is
stuck in the 16bit era).

- I've added in completely-functional nano-augmentations. Check under
implantnanoaug.dm for a list of implants and implaners. As mentioned previously,
they are completely functional but may be slightly OP. Among these nanoaugs are
Super Strength, Psionic Radar, Electric Hands, Energy Blade/Sword Synthesizer,
Rebreather, Dermal Armor, Combat Reflexes, and Regenerative Nanorobots. I won't
go into detail as to what they do, but hopefully they should be self-
explanitory. If not, check out their descriptions in the file previously
mentioned.

- Added in a future traitor item, the Mind Batterer. Along with it a new .ogg
file.

- New telecomms bus mainframe sprite, thanks to WJohnston.

- New holdable shield, sprites courtesy of Muncher (i had to mangle the side
sprites because of a technical little issue. I'll change it back to the original
soon). It can be retracted and expanded. Probably only going to be given to
traitors.

- A couple of minor bugfixes here and there, along with some code tidying.

Hope this isn't too large a commit. I intended it to be MUCH larger, but I've
decided to split up my Traitor Factions expansion into smaller commits.
Revision: r3692
Author: 	 vageyenaman
This commit is contained in:
Erthilo
2012-06-02 19:46:18 +01:00
parent f90ec4b414
commit 36effbacc2
100 changed files with 1455 additions and 483 deletions
+7 -3
View File
@@ -1,5 +1,3 @@
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
#define SOLID 1
#define LIQUID 2
#define GAS 3
@@ -865,7 +863,7 @@ datum
if(!M) M = holder.my_atom
if(!data) data = 1
data++
M.mutations = 0
M.mutations = list()
M.disabilities = 0
M.jitteriness = 0
if(volume > REAGENTS_OVERDOSE)
@@ -1761,6 +1759,12 @@ datum
reagent_state = GAS
color = "#404030" // rgb: 64, 64, 48
ultraglue
name = "Ulta Glue"
id = "glue"
description = "An extremely powerful bonding agent."
color = "#FFFFCC" // rgb: 255, 255, 204
diethylamine
name = "Diethylamine"
id = "diethylamine"
+1 -1
View File
@@ -995,7 +995,7 @@
if(!T.dna)
usr << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)"
return
if(T.mutations2 & NOCLONE) //target done been et, no more blood in him
if(NOCLONE in T.mutations) //target done been et, no more blood in him
user << "\red You are unable to locate any blood."
return
if(ishuman(T))
@@ -679,7 +679,7 @@
attack_verb = "slash"
if (prob(90))
if (M.mutations & HULK)//HULK SMASH
if ((HULK in M.mutations) || (SUPRSTR in M.augmentations))//HULK SMASH
damage += 14
spawn(0)
Paralyse(5)
@@ -1,4 +1,4 @@
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/mob/living/carbon/alien/humanoid
var/oxygen_alert = 0
@@ -127,15 +127,15 @@
handle_mutations_and_radiation()
if(src.getFireLoss())
if(src.mutations & COLD_RESISTANCE || prob(50))
if((COLD_RESISTANCE in src.mutations) || prob(50))
switch(src.getFireLoss())
if(1 to 50)
src.adjustFireLoss(-1)
if(51 to 100)
src.adjustFireLoss(-5)
if (src.mutations & HULK && src.health <= 25)
src.mutations &= ~HULK
if ((HULK in src.mutations) && src.health <= 25)
src.mutations.Remove(HULK)
src << "\red You suddenly feel very weak."
Weaken(3)
emote("collapse")
@@ -284,7 +284,7 @@
breath.toxins -= toxins_used
breath.oxygen += toxins_used
if(breath.temperature > (T0C+66) && !(src.mutations & COLD_RESISTANCE)) // Hot air hurts :(
if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in src.mutations)) // Hot air hurts :(
if(prob(20))
src << "\red You feel a searing heat in your lungs!"
fire_alert = max(fire_alert, 1)
@@ -340,7 +340,7 @@
thermal_protection += 0.2
if(wear_suit && (wear_suit.flags & SUITSPACE))
thermal_protection += 3
if(src.mutations & COLD_RESISTANCE)
if(COLD_RESISTANCE in src.mutations)
thermal_protection += 5
return thermal_protection
@@ -364,16 +364,17 @@
if(reagents) reagents.metabolize(src)
/*if(src.nutrition > 500 && !(src.mutations & FAT))
/* if(src.nutrition > 500 && !(FAT in src.mutations))
if(prob(5 + round((src.nutrition - 200) / 2)))
src << "\red You suddenly feel blubbery!"
src.mutations |= FAT
update_body()
if (src.nutrition < 100 && src.mutations & FAT)
src.mutations.Add(FAT)
// update_body()
if (src.nutrition < 100 && (FAT in src.mutations))
if(prob(round((50 - src.nutrition) / 100)))
src << "\blue You feel fit again!"
src.mutations &= ~FAT
update_body()*/
src.mutations.Remove(FAT)
// update_body()
*/
if (src.nutrition > 0)
src.nutrition -= HUNGER_FACTOR
@@ -488,7 +489,7 @@
handle_regular_hud_updates()
if (src.stat == 2 || src.mutations & XRAY)
if (src.stat == 2 || (XRAY in src.mutations))
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
@@ -28,7 +28,7 @@
now_pushing = 1
if(ismob(AM))
var/mob/tmob = AM
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
/*
if(prob(70))
src << "\red <B>You fail to push [tmob]'s fat ass out of the way.</B>"
@@ -444,7 +444,7 @@
attack_verb = "slash"
if (prob(90))
if (M.mutations & HULK)
if ((HULK in M.mutations) || (SUPRSTR in M.augmentations))
damage += 5
spawn(0)
Paralyse(1)
@@ -1,4 +1,4 @@
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/mob/living/carbon/alien/larva
var/oxygen_alert = 0
@@ -259,7 +259,7 @@
breath.toxins -= toxins_used
breath.oxygen += toxins_used
if(breath.temperature > (T0C+66) && !(mutations & COLD_RESISTANCE)) // Hot air hurts :(
if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in src.mutations)) // Hot air hurts :(
if(prob(20))
src << "\red You feel a searing heat in your lungs!"
fire_alert = max(fire_alert, 1)
@@ -287,16 +287,17 @@
if(reagents) reagents.metabolize(src)
/* if(nutrition > 500 && !(mutations & FAT))
/* if(nutrition > 500 && !(FAT in src.mutations))
if(prob(5 + round((nutrition - 200) / 2)))
src << "\red You suddenly feel blubbery!"
mutations |= FAT
update_body()
if (nutrition < 100 && mutations & FAT)
mutations.Add(FAT)
// update_body()
if (nutrition < 100 && (FAT in src.mutations))
if(prob(round((50 - nutrition) / 100)))
src << "\blue You feel fit again!"
mutations &= ~FAT
update_body()*/
mutations.Add(FAT)
// update_body()
*/
if (nutrition > 0)
nutrition-= HUNGER_FACTOR
@@ -411,7 +412,7 @@
handle_regular_hud_updates()
if (stat == 2 || mutations & XRAY)
if (stat == 2 || (XRAY in src.mutations))
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
+1 -1
View File
@@ -243,7 +243,7 @@
handle_regular_hud_updates()
if (stat == 2 || mutations & XRAY)
if (stat == 2 || (XRAY in src.mutations))
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
+3 -3
View File
@@ -5,9 +5,9 @@
src.nutrition -= HUNGER_FACTOR/10
if(src.m_intent == "run")
src.nutrition -= HUNGER_FACTOR/10
/*if(src.mutations & FAT && src.m_intent == "run" && src.bodytemperature <= 360)
src.bodytemperature += 2*/
/* if((FAT in src.mutations) && src.m_intent == "run" && src.bodytemperature <= 360)
src.bodytemperature += 2
*/
/mob/living/carbon/relaymove(var/mob/user, direction)
if(user in src.stomach_contents)
if(prob(40))
@@ -100,17 +100,17 @@
return ..(gibbed)
/mob/living/carbon/human/proc/ChangeToHusk()
if(mutations & HUSK)
if(HUSK in src.mutations)
return
var/datum/organ/external/head/head = get_organ("head")
if(head)
head.disfigured = 1
name = get_visible_name()
mutations |= HUSK
mutations.Add(HUSK)
update_body()
return
/mob/living/carbon/human/proc/Drain()
ChangeToHusk()
mutations2 |= NOCLONE
mutations.Add(NOCLONE)
return
+160
View File
@@ -786,3 +786,163 @@
src.hud_used.hotkey_ui_hidden = 1
/*
Radar-related things
*/
/mob/living/carbon/human/proc/close_radar()
radar_open = 0
for(var/obj/screen/x in client.screen)
if( (x.name == "radar" && x.icon == 'radar.dmi') || (x in radar_blips) )
client.screen -= x
del(x)
place_radar_closed()
/mob/living/carbon/human/proc/place_radar_closed()
var/obj/screen/closedradar = new()
closedradar.icon = 'radar.dmi'
closedradar.icon_state = "radarclosed"
closedradar.screen_loc = "WEST,NORTH-1"
closedradar.name = "radar closed"
client.screen += closedradar
/mob/living/carbon/human/proc/start_radar()
for(var/obj/screen/x in client.screen)
if(x.name == "radar closed" && x.icon == 'radar.dmi')
client.screen -= x
del(x)
var/obj/screen/cornerA = new()
cornerA.icon = 'radar.dmi'
cornerA.icon_state = "radar(1,1)"
cornerA.screen_loc = "WEST,NORTH-2"
cornerA.name = "radar"
var/obj/screen/cornerB = new()
cornerB.icon = 'radar.dmi'
cornerB.icon_state = "radar(2,1)"
cornerB.screen_loc = "WEST+1,NORTH-2"
cornerB.name = "radar"
var/obj/screen/cornerC = new()
cornerC.icon = 'radar.dmi'
cornerC.icon_state = "radar(1,2)"
cornerC.screen_loc = "WEST,NORTH-1"
cornerC.name = "radar"
var/obj/screen/cornerD = new()
cornerD.icon = 'radar.dmi'
cornerD.icon_state = "radar(2,2)"
cornerD.screen_loc = "WEST+1,NORTH-1"
cornerD.name = "radar"
client.screen += cornerA
client.screen += cornerB
client.screen += cornerC
client.screen += cornerD
radar_open = 1
while(radar_open && (RADAR in augmentations))
update_radar()
sleep(6)
/mob/living/carbon/human/proc/update_radar()
if(!client) return
var/list/found_targets = list()
var/max_dist = 29 // 29 tiles is the max distance
// If the mob is inside a turf, set the center to the object they're in
var/atom/distance_ref = src
if(!isturf(src.loc))
distance_ref = loc
// Clear the radar_blips cache
for(var/x in radar_blips)
client.screen -= x
del(x)
radar_blips = list()
var/starting_px = 3
var/starting_py = 3
for(var/mob/living/M in orange(max_dist, distance_ref))
if(M.stat == 2) continue
found_targets.Add(M)
for(var/obj/effect/critter/C in orange(max_dist, distance_ref))
if(!C.alive) continue
found_targets.Add(C)
for(var/obj/mecha/M in orange(max_dist, distance_ref))
if(!M.occupant) continue
found_targets.Add(M)
for(var/obj/structure/closet/C in orange(max_dist, distance_ref))
for(var/mob/living/M in C.contents)
if(M.stat == 2) continue
found_targets.Add(M)
// Loop through all living mobs in a range.
for(var/atom/A in found_targets)
var/a_x = A.x
var/a_y = A.y
if(!isturf(A.loc))
a_x = A.loc.x
a_y = A.loc.y
var/blip_x = max_dist + (-( distance_ref.x-a_x ) ) + starting_px
var/blip_y = max_dist + (-( distance_ref.y-a_y ) ) + starting_py
var/obj/screen/blip = new()
blip.icon = 'radar.dmi'
blip.name = "Blip"
blip.layer = 21
blip.screen_loc = "WEST:[blip_x-1],NORTH-2:[blip_y-1]" // offset -1 because the center of the blip is not at the bottomleft corner (14)
if(istype(A, /mob/living))
var/mob/living/M = A
if(ishuman(M))
if(M:wear_id)
var/job = M:wear_id:GetJobName()
if(job == "Security Officer")
blip.icon_state = "secblip"
blip.name = "Security Officer"
else if(job == "Captain" || job == "Research Director" || job == "Chief Engineer" || job == "Chief Medical Officer" || job == "Head of Security" || job == "Head of Personnel")
blip.icon_state = "headblip"
blip.name = "Station Head"
else
blip.icon_state = "civblip"
blip.name = "Civilian"
else
blip.icon_state = "civblip"
blip.name = "Civilian"
else if(issilicon(M))
blip.icon_state = "roboblip"
blip.name = "Robotic Organism"
else
blip.icon_state = "unknownblip"
blip.name = "Unknown Organism"
else if(istype(A, /obj/effect/critter))
blip.icon_state = "unknownblip"
blip.name = "Unknown Organism"
else if(istype(A, /obj/mecha))
blip.icon_state = "roboblip"
blip.name = "Robotic Organism"
radar_blips.Add(blip)
client.screen += blip
+15 -15
View File
@@ -301,12 +301,12 @@
if(tally < 0)
tally = 0
if(mutations & mRun)
tally = 0
if(istype(M) && M.lying) //Pulling lying down people is slower
tally += 3
if(mRun in mutations)
tally = 0
return tally
/mob/living/carbon/human/Stat()
@@ -871,19 +871,19 @@
body_overlays_standing.Cut()
body_overlays_lying.Cut()
if (mutations & HULK)
if (HULK in mutations)
body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "hulk_[gender]_s")
body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "hulk_[gender]_l")
if (mutations & COLD_RESISTANCE)
if (COLD_RESISTANCE in mutations)
body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "fire_s")
body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "fire_l")
if (mutations & TK)
if (TK in mutations)
body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "telekinesishead_s")
body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "telekinesishead_l")
if (mutations & LASER)
if (LASER in mutations)
body_overlays_standing += image("icon" = 'genetics.dmi', "icon_state" = "lasereyes_s")
body_overlays_lying += image("icon" = 'genetics.dmi', "icon_state" = "lasereyes_l")
@@ -1396,7 +1396,7 @@
stand_icon = new /icon('human.dmi', "torso_[g]_s")
lying_icon = new /icon('human.dmi', "torso_[g]_l")
var/husk = (mutations & HUSK)
var/husk = (HUSK in mutations)
stand_icon.Blend(new /icon('human.dmi', "chest_[g]_s"), ICON_OVERLAY)
lying_icon.Blend(new /icon('human.dmi', "chest_[g]_l"), ICON_OVERLAY)
@@ -2605,24 +2605,24 @@ It can still be worn/put on as normal.
heal_overall_damage(0, -amount)
/mob/living/carbon/human/Stun(amount)
if(mutations & HULK)
if(HULK in mutations)
return
..()
/mob/living/carbon/human/Weaken(amount)
if(mutations & HULK)
if(HULK in mutations)
return
..()
/mob/living/carbon/human/Paralyse(amount)
if(mutations & HULK)
if(HULK in mutations)
return
..()
/mob/living/carbon/human/proc/morph()
set name = "Morph"
set category = "Superpower"
if(!(src.mutations & mMorph))
if(!(mMorph in mutations))
src.verbs -= /mob/living/carbon/human/proc/morph
return
@@ -2711,7 +2711,7 @@ It can still be worn/put on as normal.
/mob/living/carbon/human/proc/remotesay()
set name = "Project mind"
set category = "Superpower"
if(!(src.mutations & mRemotetalk))
if(!(mRemotetalk in src.mutations))
src.verbs -= /mob/living/carbon/human/proc/remotesay
return
var/list/creatures = list()
@@ -2720,7 +2720,7 @@ It can still be worn/put on as normal.
var/mob/target = input ("Who do you want to project your mind to ?") as mob in creatures
var/say = input ("What do you wish to say")
if(target.mutations & mRemotetalk)
if(mRemotetalk in target.mutations)
target.show_message("\blue You hear [src.real_name]'s voice: [say]")
else
target.show_message("\blue You hear a voice that seems to echo around the room: [say]")
@@ -2734,7 +2734,7 @@ It can still be worn/put on as normal.
set name = "Remote View"
set category = "Superpower"
if(!(src.mutations & mRemote))
if(!(mRemote in src.mutations))
reset_view(0)
remoteobserve = null
src.verbs -= /mob/living/carbon/human/proc/remoteobserve
@@ -44,7 +44,9 @@
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/armor_block = run_armor_check(affecting, "melee")
if(M.mutations & HULK) damage += 5
if(HULK in M.mutations) damage += 5
if(SUPRSTR in M.augmentations) damage += 5
playsound(loc, "punch", 25, 1, -1)
visible_message("\red <B>[M] has punched [src]!</B>")
@@ -103,6 +105,28 @@
return 1
if("hurt")
if(ELECTRICHANDS in M.augmentations)
var/gendertxt = "their"
if(M.gender == "male")
gendertxt = "his"
if(M.gender == "female")
gendertxt = "her"
visible_message("\red <B>[M] has shocked [src] with [gendertxt] bare hands!</B>")
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Used Electric Hands nanoaug power on [src.name] ([src.ckey])</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been shocked by [M.name] with the Electric Hands nanoaug ([M.ckey])</font>")
log_admin("ATTACK: [M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name] ([src.ckey]), shocking them .")
message_admins("ATTACK: [M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name] ([src.ckey]), shocking them .")
log_attack("<font color='red'>[M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name] ([src.ckey]), shocking them </font>")
var/armorblock = run_armor_check(M.zone_sel.selecting, "energy")
apply_effects(5,5,0,0,5,0,0,armorblock)
return
if(M.type != /mob/living/carbon/human/tajaran)
M.attack_log += text("\[[time_stamp()]\] <font color='red'>Punched [src.name] ([src.ckey])</font>")
src.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been punched by [M.name] ([M.ckey])</font>")
@@ -143,7 +167,8 @@
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
var/armor_block = run_armor_check(affecting, "melee")
if(M.mutations & HULK) damage += 5
if(HULK in M.mutations) damage += 5
if(SUPRSTR in M.augmentations) damage += 5
switch(attack_verb)
if(("slash") || ("scratch"))
@@ -57,6 +57,9 @@
if(blocked)
damage = (damage/(blocked+1))
if(DERMALARMOR in augmentations)
damage = damage - (round(damage*0.35)) // reduce damage by 35%
switch(damagetype)
if(BRUTE)
organ.take_damage(damage, 0, sharp, used_weapon)
@@ -10,6 +10,12 @@ emp_act
/mob/living/carbon/human/bullet_act(var/obj/item/projectile/P, var/def_zone)
if(REFLEXES in augmentations)
if(prob(50))
var/message = pick("[src] skillfully dodges the [P.name]!", "[src] ducks, dodging the [P.name]!", "[src] effortlessly jumps out of the way of the [P.name]!", "[src] dodges the [P.name] in one graceful movement!", "[src] leans back, dodging the [P.name] narrowly!")
visible_message("\red <B>[message]</B>")
return -1
if(wear_suit && istype(wear_suit, /obj/item/clothing/suit/armor/laserproof))
if(istype(P, /obj/item/projectile/energy) || istype(P, /obj/item/projectile/beam))
var/reflectchance = 40 - round(P.damage/3)
@@ -198,4 +204,4 @@ emp_act
if(src.wear_suit) src.wear_suit.add_blood(src)
if(src.w_uniform) src.w_uniform.add_blood(src)
UpdateDamageIcon()
UpdateDamageIcon()
+52 -24
View File
@@ -1,4 +1,4 @@
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
#define HUMAN_MAX_OXYLOSS 3 //Defines how much oxyloss humans can get per tick. No air applies this value.
@@ -165,7 +165,7 @@
handle_disabilities()
if(mutations2 & mHallucination)
if(mHallucination in mutations)
hallucination = 100
halloss = 0
@@ -195,7 +195,7 @@
Paralyse(15)
setHalLoss(99)
if(mutations2 & mSmallsize)
if(mSmallsize in mutations)
if(!(pass_flags & PASSTABLE))
pass_flags |= PASSTABLE
else
@@ -204,7 +204,7 @@
if (mutations & mRegen)
if (mRegen in mutations)
adjustBruteLoss(-2)
adjustToxLoss(-2)
adjustOxyLoss(-2)
@@ -217,24 +217,24 @@
updatehealth()
if(!(/mob/living/carbon/human/proc/morph in src.verbs))
if(mutations & mMorph)
if(mMorph in mutations)
src.verbs += /mob/living/carbon/human/proc/morph
else
if(!(mutations & mMorph))
if(!(mMorph in mutations))
src.verbs -= /mob/living/carbon/human/proc/morph
if(!(/mob/living/carbon/human/proc/remoteobserve in src.verbs))
if(mutations & mRemote)
if(mRemote in mutations)
src.verbs += /mob/living/carbon/human/proc/remoteobserve
else
if(!(mutations & mRemote))
if(!(mRemote in mutations))
src.verbs -= /mob/living/carbon/human/proc/remoteobserve
if(!(/mob/living/carbon/human/proc/remotesay in src.verbs))
if(mutations & mRemotetalk)
if(mRemotetalk in mutations)
src.verbs += /mob/living/carbon/human/proc/remotesay
else
if(!(mutations & mRemotetalk))
if(!(mRemotetalk in mutations))
src.verbs -= /mob/living/carbon/human/proc/remotesay
@@ -285,11 +285,37 @@
handle_mutations_and_radiation()
if(getFireLoss())
if(mutations & COLD_RESISTANCE || (prob(1) && prob(75)))
if((COLD_RESISTANCE in mutations) || (prob(1) && prob(75)))
heal_organ_damage(0,1)
if (mutations & HULK && health <= 25)
mutations &= ~HULK
// Make nanoregen heal youu, -3 all damage types
if(NANOREGEN in augmentations)
var/healed = 0
if(getToxLoss())
adjustToxLoss(-3)
healed = 1
if(getOxyLoss())
adjustOxyLoss(-3)
healed = 1
if(getCloneLoss())
adjustCloneLoss(-3)
healed = 1
if(getBruteLoss())
heal_organ_damage(3,0)
healed = 1
if(getFireLoss())
heal_organ_damage(0,3)
healed = 1
if(halloss > 0)
halloss -= 3
if(halloss < 0) halloss = 0
healed = 1
if(healed)
if(prob(5))
src << "\blue You feel your wounds mending..."
if ((HULK in mutations) && health <= 25)
mutations.Remove(HULK)
src << "\red You suddenly feel very weak."
Weaken(3)
emote("collapse")
@@ -463,7 +489,7 @@
canmove = 1
handle_breath(datum/gas_mixture/breath)
if(nodamage || (mutations & mNobreath))
if(nodamage || REBREATHER in augmentations || (mNobreath in mutations))
return
if(!breath || (breath.total_moles == 0))
@@ -552,7 +578,7 @@
SA.moles = 0 //Hack to stop the damned surgeon from giggling.
if(breath.temperature > (T0C+66) && !(mutations & COLD_RESISTANCE)) // Hot air hurts :(
if(breath.temperature > (T0C+66) && !(COLD_RESISTANCE in mutations)) // Hot air hurts :(
if(prob(20))
src << "\red You feel a searing heat in your lungs!"
fire_alert = max(fire_alert, 1)
@@ -659,6 +685,8 @@
*/
//Account for massive pressure differences. Done by Polymorph
var/pressure = environment.return_pressure()
if(!istype(wear_suit, /obj/item/clothing/suit/space) && !istype(wear_suit, /obj/item/clothing/suit/fire))
/*if(pressure < 20)
@@ -714,7 +742,7 @@
thermal_protection += 3
if(head && (head.flags & HEADSPACE))
thermal_protection += 1
if(mutations & COLD_RESISTANCE)
if(COLD_RESISTANCE in mutations)
thermal_protection += 5
return thermal_protection
@@ -794,15 +822,15 @@
adjustToxLoss(-1)
adjustOxyLoss(-1)
/*if(overeatduration > 500 && !(mutations & FAT))
/* if(overeatduration > 500 && !(FAT in mutations))
src << "\red You suddenly feel blubbery!"
mutations |= FAT
mutations.Add(FAT)
update_body()
if (overeatduration < 100 && mutations & FAT)
if ((overeatduration < 100 && (FAT in mutations)))
src << "\blue You feel fit again!"
mutations &= ~FAT
update_body()*/
mutations.Remove(FAT)
update_body()
*/
// nutrition decrease
if (nutrition > 0 && stat != 2)
// sleeping slows the metabolism, hunger increases more slowly
@@ -1097,7 +1125,7 @@
// Handle special vision stuff, such as thermals or ghost vision
// -------------------------------------------------------------
if (stat == 2 || mutations & XRAY)
if (stat == 2 || (XRAY in mutations))
sight |= SEE_TURFS
sight |= SEE_MOBS
sight |= SEE_OBJS
@@ -1387,7 +1415,7 @@
if (machine)
if (!( machine.check_eye(src) ))
reset_view(null)
else if(!(mutations & mRemote) && !client.adminobs)
else if(!(mRemote in mutations) && !client.adminobs)
reset_view(null)
if(remoteobserve)
remoteobserve = null
@@ -505,6 +505,16 @@
O.show_message(text("\red [] has grabbed [] passively!", M, src), 1)
else
if(ELECTRICHANDS in M.augmentations)
var/gendertxt = "their"
if(M.gender == "male")
gendertxt = "his"
if(M.gender == "female")
gendertxt = "her"
visible_message("\red <B>[M] has shocked [src] with [gendertxt] bare hands!</B>")
return
var/damage = rand(1, 9)
var/attack_verb
@@ -521,7 +531,7 @@
attacked += 10
if (prob(90))
if (M.mutations & HULK)
if ((HULK in M.mutations) || (SUPRSTR in M.augmentations))
damage += 5
if(Victim)
Victim = null
+14 -6
View File
@@ -13,6 +13,7 @@
var/oxygen_alert = 0
var/toxins_alert = 0
var/fire_alert = 0
var/temperature_alert = 0
@@ -131,15 +132,15 @@
handle_mutations_and_radiation()
if(src.getFireLoss())
if(src.mutations & COLD_RESISTANCE || prob(50))
if((COLD_RESISTANCE in mutations) || prob(50))
switch(src.getFireLoss())
if(1 to 50)
src.adjustFireLoss(-1)
if(51 to 100)
src.adjustFireLoss(-5)
if (src.mutations & HULK && src.health <= 25)
src.mutations &= ~HULK
if ((HULK in mutations) && src.health <= 25)
src.mutations.Remove(HULK)
src << "\red You suddenly feel very weak."
Weaken(3)
emote("collapse")
@@ -369,7 +370,10 @@
if(stat==2)
bodytemperature += 0.1*(environment.temperature - bodytemperature)*environment_heat_capacity/(environment_heat_capacity + 270000)
//Account for massive pressure differences
var/pressure = environment.return_pressure()
// if(!wear_suit) Monkies cannot into space.
@@ -384,6 +388,9 @@
if(pressure > HAZARD_HIGH_PRESSURE)
adjustBruteLoss(min((10+(round(pressure/(HIGH_STEP_PRESSURE)-2)*5)),MAX_PRESSURE_DAMAGE))
return //TODO: DEFERRED
handle_temperature_damage(body_part, exposed_temperature, exposed_intensity)
@@ -405,7 +412,7 @@
src.drowsyness--
src.eye_blurry = max(2, src.eye_blurry)
if (prob(5))
src.sleeping = 1
src.sleeping += 1
Paralyse(5)
confused = max(0, confused - 1)
@@ -527,7 +534,7 @@
handle_regular_hud_updates()
if (src.stat == 2 || src.mutations & XRAY)
if (src.stat == 2 || (XRAY in mutations))
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
@@ -566,6 +573,7 @@
src.healths.icon_state = "health6"
else
src.healths.icon_state = "health7"
if (pressure)
var/datum/gas_mixture/environment = loc.return_air()
if(environment)
@@ -668,4 +676,4 @@
if (mind.special_role == "Changeling" && changeling)
changeling.chem_charges = between(0, ((max((0.9 - (changeling.chem_charges / 50)), 0.1)*changeling.chem_recharge_multiplier) + changeling.chem_charges), changeling.chem_storage)
if ((changeling.geneticdamage > 0))
changeling.geneticdamage = changeling.geneticdamage-1
changeling.geneticdamage = changeling.geneticdamage-1
@@ -98,7 +98,7 @@
if(ismob(AM))
var/mob/tmob = AM
/*
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
if(prob(70))
usr << "\red <B>You fail to push [tmob]'s fat ass out of the way.</B>"
now_pushing = 0
@@ -167,7 +167,7 @@
for(var/mob/O in viewers(src, null))
O.show_message(text("\red <B>[M.name] has bit []!</B>", src), 1)
var/damage = rand(1, 5)
if (mutations & HULK) damage += 10
if (HULK in mutations) damage += 10
adjustBruteLoss(damage)
updatehealth()
+1 -1
View File
@@ -14,7 +14,7 @@
if(BRUTE)
adjustBruteLoss(damage/(blocked+1), used_weapon)
if(BURN)
if(mutations & COLD_RESISTANCE) damage = 0
if(COLD_RESISTANCE in mutations) damage = 0
adjustFireLoss(damage/(blocked+1), used_weapon)
if(TOX)
adjustToxLoss(damage/(blocked+1))
+3 -3
View File
@@ -17,10 +17,10 @@
//sort of a legacy burn method for /electrocute, /shock, and the e_chair
/mob/living/proc/burn_skin(burn_amount, used_weapon = null)
if(istype(src, /mob/living/carbon/human))
if(src.mutations2 & mShock)
if(mShock in src.mutations)
return 0
//world << "DEBUG: burn_skin(), mutations=[mutations]"
if (src.mutations & COLD_RESISTANCE) //fireproof
if (COLD_RESISTANCE in src.mutations) //fireproof
return 0
var/mob/living/carbon/human/H = src //make this damage method divide the damage to be done among all the body parts, then burn each body part for that much damage. will have better effect then just randomly picking a body part
var/divided_damage = (burn_amount)/(H.organs.len)
@@ -30,7 +30,7 @@
H.updatehealth()
return 1
else if(istype(src, /mob/living/carbon/monkey))
if (src.mutations & COLD_RESISTANCE) //fireproof
if (COLD_RESISTANCE in src.mutations) //fireproof
return 0
var/mob/living/carbon/monkey/M = src
M.adjustFireLoss(burn_amount)
@@ -153,7 +153,7 @@
handle_regular_hud_updates()
if (src.stat == 2 || src.mutations & XRAY || src.sight_mode & BORGXRAY)
if (src.stat == 2 || XRAY in mutations || src.sight_mode & BORGXRAY)
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
@@ -331,7 +331,7 @@
if(ismob(AM))
var/mob/tmob = AM
/*
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
if(prob(20))
usr << "\red <B>You fail to push [tmob]'s fat ass out of the way.</B>"
now_pushing = 0
+8 -9
View File
@@ -196,15 +196,12 @@
var/datum/dna/dna = null//Carbon
var/radiation = 0.0//Carbon
var/mutations = 0//Carbon
var/mutations2 = 0//Carbon
//telekinesis = 1
//firemut = 2
//xray = 4
//hulk = 8
//clumsy = 16
//obese = 32
//husk = 64
var/list/mutations = list() //Carbon -- Doohl
//see: setup.dm for list of mutations
var/list/augmentations = list() //Carbon -- Doohl
//see: setup.dm for list of augmentations
var/tkdisable = 0//For remote viewing and stuff. Disables TK.
var/voice_name = "unidentifiable voice"
@@ -293,4 +290,6 @@ the mob is also allowed to move without any sort of restriction. For instance, i
var/grav_delay = 0
var/being_strangled = 0
var/list/radar_blips = list() // list of screen objects, radar blips
var/radar_open = 0 // nonzero is radar is open
+42 -17
View File
@@ -4,6 +4,7 @@
icon_state = "grabbed"
var/obj/screen/grab/hud1 = null
var/mob/affecting = null
var/atom/movable/structure = null // if the grab is not grabbing a mob
var/mob/assailant = null
var/state = 1.0
var/killing = 0.0
@@ -21,32 +22,52 @@
spawn(0)
del(src)
return grabee
else if(structure)
var/grabee = structure
spawn(0)
del(src)
return grabee
return null
/obj/item/weapon/grab/proc/synch()
if(affecting.anchored)//This will prevent from grabbing people that are anchored.
del(src)
if (assailant.r_hand == src)
hud1.screen_loc = ui_rhand
else
hud1.screen_loc = ui_lhand
if(affecting)
if(affecting.anchored)//This will prevent from grabbing people that are anchored.
del(src)
if (assailant.r_hand == src)
hud1.screen_loc = ui_rhand
else
hud1.screen_loc = ui_lhand
return
/obj/item/weapon/grab/process()
if(!assailant || !affecting)
del(src)
return
if ((!( isturf(assailant.loc) ) || (!( isturf(affecting.loc) ) || (assailant.loc != affecting.loc && get_dist(assailant, affecting) > 1))))
//SN src = null
if(!assailant || (!affecting && !structure))
del(src)
return
if(affecting && !structure)
if ((!( isturf(assailant.loc) ) || (!( isturf(affecting.loc) ) || (assailant.loc != affecting.loc && get_dist(assailant, affecting) > 1))))
//SN src = null
del(src)
return
else if(!affecting && structure)
if (!isturf(structure.loc) || !isturf(structure.loc) || (assailant.loc != structure.loc && get_dist(assailant, structure) > 1))
del(src)
return
if (assailant.client)
assailant.client.screen -= hud1
assailant.client.screen += hud1
if (assailant.pulling == affecting)
if (assailant.pulling == affecting || assailant.pulling == structure)
assailant.pulling = null
if (structure)
structure.loc = assailant.loc
structure.layer = assailant.layer + 1
if (state <= 2)
allow_upgrade = 1
if ((assailant.l_hand && assailant.l_hand != src && istype(assailant.l_hand, /obj/item/weapon/grab)))
@@ -117,6 +138,9 @@
/obj/item/weapon/grab/proc/s_dbclick(obj/screen/S as obj)
//if ((assailant.next_move > world.time && !( last_suffocate < world.time + 2 )))
// return
if (!affecting)
return
if ((!( assailant.canmove ) || assailant.lying))
del(src)
return
@@ -137,12 +161,12 @@
return
else
if (state < 3)
/*if(istype(affecting, /mob/living/carbon/human))
/* if(istype(affecting, /mob/living/carbon/human))
var/mob/living/carbon/human/H = affecting
if(H.mutations & FAT)
if(FAT in H.mutations)
assailant << "\blue You can't strangle [affecting] through all that fat!"
return*/
return
*/
/*Hrm might want to add this back in
//we should be able to strangle the Captain if he is wearing a hat
for(var/obj/item/clothing/C in list(H.head, H.wear_suit, H.wear_mask, H.w_uniform))
@@ -205,6 +229,7 @@
/obj/item/weapon/grab/attack(mob/M as mob, mob/user as mob)
if(!affecting) return
if (M == affecting)
if (state < 3)
s_dbclick(hud1)
@@ -212,7 +237,7 @@
s_click(hud1)
return
if(M == assailant && state >= 2)
if( ( ishuman(user) && (user.mutations & FAT) && ismonkey(affecting) ) || ( isalien(user) && iscarbon(affecting) ) )
if( ( ishuman(user) && (FAT in user.mutations) && ismonkey(affecting) ) || ( isalien(user) && iscarbon(affecting) ) )
var/mob/living/carbon/attacker = user
for(var/mob/N in viewers(user, null))
if(N.client)
+8 -2
View File
@@ -554,6 +554,12 @@
usr:inv3.icon_state = "inv3"
usr:module_active = null
if("radar")
usr:close_radar()
if("radar closed")
usr:start_radar()
if("Allow Walking")
if(gun_click_time > world.time - 30) //give them 3 seconds between mode changes.
return
@@ -687,7 +693,7 @@
displaytime = 4
usr.next_move = world.time + 100
usr.last_special = world.time + 100
if(isalienadult(usr) || usr.mutations & HULK)//Don't want to do a lot of logic gating here.
if(isalienadult(usr) || (HULK in usr.mutations) || (SUPRSTR in usr.augmentations))//Don't want to do a lot of logic gating here.
usr << "\green You attempt to break \the [usr:handcuffed]. (This will take around 5 seconds and you need to stand still)"
for(var/mob/O in viewers(usr))
O.show_message(text("\red <B>[] is trying to break \the [usr:handcuffed]!</B>", usr), 1)
@@ -737,7 +743,7 @@
if(istype(usr, /mob/living/carbon/human) && istype(usr:wear_suit, /obj/item/clothing/suit/straight_jacket) && usr:canmove && (usr.last_special <= world.time))
usr.next_move = world.time + 200
usr.last_special = world.time + 200
if(isalienadult(usr) || usr.mutations & HULK)//Don't want to do a lot of logic gating here.
if(isalienadult(usr) || (HULK in usr.mutations) || (SUPRSTR in usr.augmentations))//Don't want to do a lot of logic gating here.
usr << "\green You attempt to break out of your straight jacket. (This will take around 5 seconds and you need to stand still)"
for(var/mob/O in viewers(usr))
O.show_message(text("\red <B>[] is trying to break out of \his straight jacket!</B>", usr), 1)
+2 -2
View File
@@ -72,7 +72,7 @@
now_pushing = 1
if(ismob(AM))
var/mob/tmob = AM
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
if(prob(5))
src << "\red <B>You fail to push [tmob]'s fat ass out of the way.</B>"
now_pushing = 0
@@ -204,7 +204,7 @@
now_pushing = 1
if(ismob(AM))
var/mob/tmob = AM
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
if(prob(50))
src << "\red <B>You fail to push [tmob]'s fat ass out of the way.</B>"
now_pushing = 0
+2 -2
View File
@@ -350,11 +350,11 @@
now_pushing = 1
if(ismob(AM))
var/mob/tmob = AM
if(istype(tmob, /mob/living/carbon/human) && tmob.mutations & FAT)
/* if(istype(tmob, /mob/living/carbon/human) && (FAT in tmob.mutations))
if(prob(70))
src << "\red <B>You fail to push [tmob]'s fat ass out of the way.</B>"
now_pushing = 0
return
return*/
if(tmob.nopush)
now_pushing = 0
return
+3 -4
View File
@@ -1,5 +1,3 @@
//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
/obj/item/weapon/paper
name = "paper"
gender = PLURAL
@@ -60,10 +58,11 @@
set category = "Object"
set src in usr
if ((usr.mutations & CLUMSY) && prob(50))
if ((CLUMSY in usr.mutations) && prob(50))
usr << "\red You cut yourself on the paper."
return
var/n_name = copytext(sanitize(input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text),1,MAX_NAME_LEN)
var/n_name = input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text
n_name = copytext(n_name, 1, 32)
if ((loc == usr && usr.stat == 0))
name = "paper[(n_name ? text("- '[n_name]'") : null)]"
add_fingerprint(usr)
+1 -1
View File
@@ -297,7 +297,7 @@
else
prot = 1
if(prot > 0 || (user.mutations & COLD_RESISTANCE))
if(prot > 0 || (COLD_RESISTANCE in user.mutations))
user << "You remove the light [fitting]"
else
user << "You try to remove the light [fitting], but you burn your hand on it!"
+4 -4
View File
@@ -114,12 +114,12 @@
update_icon()
return
if (prob(50))
if (M.paralysis < 60 && (!(M.mutations & 8)) )
if (M.paralysis < 60 && (!(HULK in M.mutations)) )
M.paralysis = 60
else
if (M.weakened < 60 && (!(M.mutations & 8)) )
if (M.weakened < 60 && (!(HULK in M.mutations)) )
M.weakened = 60
if (M.stuttering < 60 && (!(M.mutations & 8)) )
if (M.stuttering < 60 && (!(HULK in M.mutations)) )
M.stuttering = 60
if(silenced)
playsound(user, fire_sound, 10, 1)
@@ -147,7 +147,7 @@
proc/Fire(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, params)//TODO: go over this
if(istype(user, /mob/living))
var/mob/living/M = user
if ((M.mutations & CLUMSY) && prob(50)) ///Who ever came up with this...
if ((CLUMSY in M.mutations) && prob(50)) ///Who ever came up with this...
M << "\red \the [src] blows up in your face."
M.take_organ_damage(0,20)
M.drop_item()
+1 -1
View File
@@ -541,7 +541,7 @@
AM.loc = src
/*if(istype(AM, /mob/living/carbon/human))
var/mob/living/carbon/human/H = AM
if(H.mutations & FAT) // is a human and fat?
if(FAT in H.mutations) // is a human and fat?
has_fat_guy = 1 // set flag on holder
*/
if(istype(AM, /obj/structure/bigDelivery))// && !hasmob) Already have a check for this.