diff --git a/baystation12.dme b/baystation12.dme
index 5828ec80391..5699e226a80 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -418,6 +418,7 @@
#include "code\game\events\Events\SpaceCarp.dm"
#include "code\game\events\Events\SpaceNinja.dm"
#include "code\game\events\Events\VirusEpidemic.dm"
+#include "code\game\gamemodes\factions.dm"
#include "code\game\gamemodes\game_mode.dm"
#include "code\game\gamemodes\gameticker.dm"
#include "code\game\gamemodes\intercept_report.dm"
@@ -739,11 +740,13 @@
#include "code\game\objects\items\weapons\tiles_wires.dm"
#include "code\game\objects\items\weapons\tools.dm"
#include "code\game\objects\items\weapons\twohanded.dm"
+#include "code\game\objects\items\weapons\wrappingpaper.dm"
#include "code\game\objects\items\weapons\implants\implant.dm"
#include "code\game\objects\items\weapons\implants\implantcase.dm"
#include "code\game\objects\items\weapons\implants\implantchair.dm"
#include "code\game\objects\items\weapons\implants\implanter.dm"
#include "code\game\objects\items\weapons\implants\implantfreedom.dm"
+#include "code\game\objects\items\weapons\implants\implantnanoaug.dm"
#include "code\game\objects\items\weapons\implants\implantpad.dm"
#include "code\game\objects\radio\beacon.dm"
#include "code\game\objects\radio\electropack.dm"
diff --git a/code/WorkInProgress/Ported/Abi79/uplinks.dm b/code/WorkInProgress/Ported/Abi79/uplinks.dm
index 9795644c3d2..55cd988af8f 100644
--- a/code/WorkInProgress/Ported/Abi79/uplinks.dm
+++ b/code/WorkInProgress/Ported/Abi79/uplinks.dm
@@ -21,12 +21,17 @@ A list of items and costs is stored under the datum of every game mode, alongsid
var/items // List of items
var/list/ItemList // Parsed list of items
var/uses // Numbers of crystals
+ var/uplink_data // designated uplink items
// List of items not to shove in their hands.
var/list/NotInHand = list(/obj/machinery/singularity_beacon/syndicate)
New()
- welcome = ticker.mode.uplink_welcome
- items = dd_replacetext(ticker.mode.uplink_items, "\n", "") // Getting the text string of items
+ if(!welcome)
+ welcome = ticker.mode.uplink_welcome
+ if(!uplink_data)
+ uplink_data = ticker.mode.uplink_items
+
+ items = dd_replacetext(uplink_data, "\n", "") // Getting the text string of items
ItemList = dd_text2list(src.items, ";") // Parsing the items text string
uses = ticker.mode.uplink_uses
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index 9be4f6423fb..e75c1231580 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -19,6 +19,8 @@ datum/mind
var/has_been_rev = 0//Tracks if this mind has been a rev or not
var/rev_cooldown = 0
+ var/datum/faction/faction // associated faction
+
proc/transfer_to(mob/new_character)
// multikey information is stored in the mob, not the mind, so
// we need to clean this stuff up to avoid multikey alerts
@@ -26,6 +28,7 @@ datum/mind
current.computer_id = null
+
if(current)
current.mind = null
diff --git a/code/datums/spells/genetic.dm b/code/datums/spells/genetic.dm
index d17d9160918..804853e44f3 100644
--- a/code/datums/spells/genetic.dm
+++ b/code/datums/spells/genetic.dm
@@ -3,7 +3,7 @@
desc = "This spell inflicts a set of mutations and disabilities upon the target."
var/disabilities = 0 //bits
- var/mutations = 0 //bits
+ var/list/mutations = list() //mutation strings
var/duration = 100 //deciseconds
/*
Disabilities
@@ -13,22 +13,17 @@
4th bit - ?
5th bit - ?
6th bit - ?
- Mutations
- 1st bit - portals
- 2nd bit - cold resist
- 3rd bit - xray
- 4th bit - hulk
- 5th bit - clown
- 6th bit - fat
*/
/obj/effect/proc_holder/spell/targeted/genetic/cast(list/targets)
for(var/mob/target in targets)
- target.mutations |= mutations
+ for(var/x in mutations)
+ target.mutations.Add(x)
target.disabilities |= disabilities
spawn(duration)
- target.mutations &= ~mutations
+ for(var/x in mutations)
+ target.mutations.Remove(x)
target.disabilities &= ~disabilities
return
\ No newline at end of file
diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm
index b712e931318..33d99d9a110 100644
--- a/code/datums/spells/wizard.dm
+++ b/code/datums/spells/wizard.dm
@@ -40,7 +40,7 @@
range = -1
include_user = 1
- mutations = LASER | HULK
+ mutations = list(LASER, HULK)
duration = 300
/obj/effect/proc_holder/spell/targeted/inflict_handler/disintegrate
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index bf30555a8bf..bf54f9bb601 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -26,6 +26,20 @@
IsShield()
return 1
+/obj/item/weapon/shield/energy
+ name = "energy combat shield"
+ desc = "A shield capable of stopping most projectile and melee attacks. It can be retracted, expanded, and stored anywhere."
+ icon = 'weapons.dmi'
+ icon_state = "eshield0" // eshield1 for expanded
+ flags = FPRINT | TABLEPASS| CONDUCT
+ force = 3.0
+ throwforce = 5.0
+ throw_speed = 1
+ throw_range = 4
+ w_class = 1
+ origin_tech = "materials=4;magnets=3;syndicate=4"
+ var/active = 0
+
/obj/item/weapon/nullrod
name = "null rod"
diff --git a/code/defines/turf.dm b/code/defines/turf.dm
index ce7ea4b983a..c0756e3d4d2 100644
--- a/code/defines/turf.dm
+++ b/code/defines/turf.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/turf
icon = 'floors.dmi'
diff --git a/code/game/asteroid/artifacts.dm b/code/game/asteroid/artifacts.dm
index dbe7b144bfb..ddf1873c460 100644
--- a/code/game/asteroid/artifacts.dm
+++ b/code/game/asteroid/artifacts.dm
@@ -1,23 +1,31 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
-var/global/list/space_surprises = list( /obj/item/clothing/mask/facehugger/angry =4,
- // /obj/effect/critter/spesscarp =2,
- /obj/effect/critter/spesscarp/elite =2,
- // /obj/creature =0,
- // /obj/item/weapon/rcd =0,
- // /obj/item/weapon/rcd_ammo =0,
- // /obj/item/weapon/money =0,
- // /obj/item/weapon/cloaking_device =1,
- // /obj/item/weapon/gun/energy/teleport_gun =0,
- // /obj/item/weapon/rubber_chicken =0,
- /obj/item/weapon/melee/energy/sword/pirate =3,
- /obj/structure/closet/syndicate/resources =2,
- // /obj/machinery/wish_granter =1, // Okayyyy... Mayyyybe Kor is kinda sorta right. A little. Tiny bit. >.>
- // /obj/item/clothing/glasses/thermal =2, // Could maybe be cool as its own rapid mode, sorta like wizard. Maybe.
- // /obj/item/weapon/storage/box/stealth/ =2
+var/global/list/space_surprises = list( /obj/item/clothing/mask/facehugger/angry =4,
+ // /obj/item/weapon/pickaxe/hammer =4, //Waiting on a sprite
+ /obj/item/weapon/pickaxe/silver =4,
+ /obj/item/weapon/pickaxe/drill =4,
+ /obj/item/weapon/pickaxe/jackhammer =4,
+ /obj/effect/critter/spesscarp/elite =3,
+ /obj/item/weapon/pickaxe/diamond =3,
+ /obj/item/weapon/pickaxe/diamonddrill =3,
+ /obj/item/weapon/pickaxe/gold =3,
+ /obj/item/weapon/pickaxe/plasmacutter =2,
+ /obj/structure/closet/syndicate/resources =2,
+ /obj/item/weapon/melee/energy/sword/pirate =1,
+ // /obj/mecha/working/ripley/mining =1
- // =11
- )
+ // /obj/creature =0,
+ // /obj/item/weapon/rcd =0,
+ // /obj/item/weapon/rcd_ammo =0,
+ // /obj/item/weapon/spacecash =0,
+ // /obj/item/weapon/cloaking_device =0,
+ // /obj/item/weapon/gun/energy/teleport_gun =0,
+ // /obj/item/weapon/rubber_chicken =0,
+ // /obj/machinery/wish_granter =0, // Okayyyy... Mayyyybe Kor is kinda sorta right. A little. Tiny bit. >.>
+ // /obj/item/clothing/glasses/thermal =0, // Could maybe be cool as its own rapid mode, sorta like wizard. Maybe.
+ // /obj/item/weapon/storage/box/stealth/ =0
+ // =11
+ )
var/global/list/spawned_surprises = list()
@@ -64,26 +72,26 @@ var/global/list/spawned_surprises = list()
charges--
insisting = 0
- if (!(user.mutations & HULK))
- user.mutations |= HULK
+ if (!(HULK in user.mutations))
+ user.mutations.Add(HULK)
- if (!(user.mutations & LASER))
- user.mutations |= LASER
+ if (!(LASER in user.mutations))
+ user.mutations.Add(LASER)
- if (!(user.mutations & XRAY))
- user.mutations |= XRAY
+ if (!(XRAY in user.mutations))
+ user.mutations.Add(XRAY)
user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
user.see_in_dark = 8
user.see_invisible = 2
- if (!(user.mutations & COLD_RESISTANCE))
- user.mutations |= COLD_RESISTANCE
+ if (!(COLD_RESISTANCE in user.mutations))
+ user.mutations.Add(COLD_RESISTANCE)
- if (!(user.mutations & TK))
- user.mutations |= TK
+ if (!(TK in user.mutations))
+ user.mutations.Add(TK)
- if(!(user.mutations & HEAL))
- user.mutations |= HEAL
+ if(!(HEAL in user.mutations))
+ user.mutations.Add(HEAL)
ticker.mode.traitors += user.mind
user.mind.special_role = "Avatar of the Wish Granter"
diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm
index 15b56014d13..e710ce0e136 100644
--- a/code/game/atom_procs.dm
+++ b/code/game/atom_procs.dm
@@ -118,7 +118,7 @@
//Fibers~
add_fibers(M)
//He has no prints!
- if (M.mutations2 & mFingerprints)
+ if (mFingerprints in M.mutations)
if(fingerprintslast != M.key)
fingerprintshidden += "(Has no fingerprints) Real name: [M.real_name], Key: [M.key]"
fingerprintslast = M.key
@@ -343,6 +343,7 @@
/atom/MouseDrop(atom/over_object as mob|obj|turf|area)
spawn( 0 )
+
if (istype(over_object, /atom))
over_object.MouseDrop_T(src, usr)
return
@@ -967,7 +968,7 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
src.hand_al(usr, usr.hand)
else
// ------- YOU ARE CLICKING ON AN OBJECT THAT'S INACCESSIBLE TO YOU AND IS NOT YOUR HUD -------
- if(usr:mutations & LASER && usr:a_intent == "hurt" && world.time >= usr.next_move)
+ if((LASER in usr:mutations) && usr:a_intent == "hurt" && world.time >= usr.next_move)
// ------- YOU HAVE THE LASER MUTATION, YOUR INTENT SET TO HURT AND IT'S BEEN MORE THAN A DECISECOND SINCE YOU LAS TATTACKED -------
var/turf/oloc
var/turf/T = get_turf(usr)
@@ -997,7 +998,6 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
usr.next_move = world.time + 6
return
-
/proc/CanReachThrough(turf/srcturf, turf/targetturf, atom/target)
var/obj/item/weapon/dummy/D = new /obj/item/weapon/dummy( srcturf )
@@ -1026,8 +1026,38 @@ var/using_new_click_proc = 0 //TODO ERRORAGE (This is temporary, while the DblCl
return
/atom/proc/AltClick()
- if(hascall(src,"pull"))
- src:pull()
+
+ /* // NOT UNTIL I FIGURE OUT A GOOD WAY TO DO THIS SHIT
+ if((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
+ if(!istype(src, /obj/item) && !istype(src, /mob) && !istype(src, /turf))
+ if(!usr.equipped())
+
+ var/liftable = 0
+ for(var/x in liftable_structures)
+ if(findtext("[src.type]", "[x]"))
+ liftable = 1
+ break
+
+ if(liftable)
+
+ add_fingerprint(usr)
+ var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(usr)
+ G.assailant = usr
+ if (usr.hand)
+ usr.l_hand = G
+ else
+ usr.r_hand = G
+ G.layer = 20
+ G.structure = src
+ G.synch()
+
+ visible_message("\red [usr] has picked up [src]!")
+
+ return
+ else
+ usr << "\red You can't pick this up!"
+ */
+
return
/atom/proc/ShiftClick()
diff --git a/code/game/dna.dm b/code/game/dna.dm
index 4fae2d2a37e..534950cb024 100644
--- a/code/game/dna.dm
+++ b/code/game/dna.dm
@@ -430,63 +430,63 @@
M.dna.check_integrity()
M.disabilities = 0
- M.mutations = 0
- M.mutations2 = 0
+ M.mutations = list()
M.see_in_dark = 2
M.see_invisible = 0
+
if(ismuton(NOBREATHBLOCK,M))
if(prob(50))
M << "\blue You feel no need to breathe."
- M.mutations |= mNobreath
+ M.mutations.Add(mNobreath)
if(ismuton(REMOTEVIEWBLOCK,M))
if(prob(50))
M << "\blue Your mind expands"
- M.mutations |= mRemote
+ M.mutations.Add(mRemote)
if(ismuton(REGENERATEBLOCK,M))
if(prob(50))
M << "\blue You feel strange"
- M.mutations |= mRegen
+ M.mutations.Add(mRegen)
if(ismuton(INCREASERUNBLOCK,M))
if(prob(50))
M << "\blue You feel quick"
- M.mutations |= mRun
+ M.mutations.Add(mRun)
if(ismuton(REMOTETALKBLOCK,M))
if(prob(50))
M << "\blue You expand your mind outwards"
- M.mutations |= mRemotetalk
+ M.mutations.Add(mRemotetalk)
if(ismuton(MORPHBLOCK,M))
if(prob(50))
- M.mutations |= mMorph
+ M.mutations.Add(mMorph)
M << "\blue Your skin feels strange"
if(ismuton(BLENDBLOCK,M))
if(prob(50))
- M.mutations |= mBlend
+ M.mutations.Add(mBlend)
M << "\blue You feel alone"
if(ismuton(HALLUCINATIONBLOCK,M))
if(prob(50))
- M.mutations2 |= mHallucination
+ M.mutations.Add(mHallucination)
M << "\blue Your mind says 'Hello'"
if(ismuton(NOPRINTSBLOCK,M))
if(prob(50))
- M.mutations2 |= mFingerprints
+ M.mutations.Add(mFingerprints)
M << "\blue Your fingers feel numb"
if(ismuton(SHOCKIMMUNITYBLOCK,M))
if(prob(50))
- M.mutations2 |= mShock
+ M.mutations.Add(mShock)
M << "\blue You feel strange"
if(ismuton(SMALLSIZEBLOCK,M))
if(prob(50))
M << "\blue Your skin feels rubbery"
- M.mutations2 |= mSmallsize
+ M.mutations.Add(mSmallsize)
if (isblockon(getblock(M.dna.struc_enzymes, HULKBLOCK,3),HULKBLOCK))
if(inj || prob(5))
M << "\blue Your muscles hurt."
- M.mutations |= HULK
+ M.mutations.Add(HULK)
if (isblockon(getblock(M.dna.struc_enzymes, HEADACHEBLOCK,3),HEADACHEBLOCK))
M.disabilities |= 2
M << "\red You get a headache."
@@ -504,7 +504,7 @@
M << "\red You start coughing."
if (isblockon(getblock(M.dna.struc_enzymes, CLUMSYBLOCK,3),CLUMSYBLOCK))
M << "\red You feel lightheaded."
- M.mutations |= CLUMSY
+ M.mutations.Add(CLUMSY)
if (isblockon(getblock(M.dna.struc_enzymes, TWITCHBLOCK,3),TWITCHBLOCK))
M.disabilities |= 8
M << "\red You twitch."
@@ -514,21 +514,21 @@
M.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
M.see_in_dark = 8
M.see_invisible = 2
- M.mutations |= XRAY
+ M.mutations.Add(XRAY)
if (isblockon(getblock(M.dna.struc_enzymes, NERVOUSBLOCK,3),NERVOUSBLOCK))
M.disabilities |= 16
M << "\red You feel nervous."
if (isblockon(getblock(M.dna.struc_enzymes, FIREBLOCK,3),FIREBLOCK))
if(inj || prob(30))
M << "\blue Your body feels warm."
- M.mutations |= COLD_RESISTANCE
+ M.mutations.Add(COLD_RESISTANCE)
if (isblockon(getblock(M.dna.struc_enzymes, BLINDBLOCK,3),BLINDBLOCK))
M.disabilities |= 128
M << "\red You can't seem to see anything."
if (isblockon(getblock(M.dna.struc_enzymes, TELEBLOCK,3),TELEBLOCK))
if(inj || prob(15))
M << "\blue You feel smarter."
- M.mutations |= TK
+ M.mutations.Add(TK)
if (isblockon(getblock(M.dna.struc_enzymes, DEAFBLOCK,3),DEAFBLOCK))
M.disabilities |= 32
M.ear_deaf = 1
@@ -537,6 +537,7 @@
M.disabilities |= 1
M << "Your eyes feel weird..."
+
//////////////////////////////////////////////////////////// Monkey Block
if (isblockon(getblock(M.dna.struc_enzymes, MONKEYBLOCK,3),MONKEYBLOCK) && istype(M, /mob/living/carbon/human))
// human > monkey
@@ -920,7 +921,7 @@
var/mob/occupant = src.connected.occupant
dat = "Occupant Statistics:
" //Blah obvious
if(occupant && occupant.dna) //is there REALLY someone in there?
- if(occupant.mutations2 & NOCLONE)
+ if(NOCLONE in occupant.mutations)
dat += "The occupant's DNA structure is ruined beyond recognition, please insert a subject with an intact DNA structure.
" //NOPE. -Pete
dat += text("View/Edit/Transfer Buffer
", src)
dat += text("Radiation Emitter Settings
", src)
@@ -1220,7 +1221,7 @@
src.temphtml += text("Data: []
", src.buffer1)
src.temphtml += text("By: []
", src.buffer1owner)
src.temphtml += text("Label: []
", src.buffer1label)
- if (src.connected.occupant && !(src.connected.occupant.mutations & NOCLONE)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src)
+ if (src.connected.occupant && !(NOCLONE in src.connected.occupant.mutations)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src)
if (src.buffer1) src.temphtml += text("Transfer to: Occupant - Injector
", src, src)
//if (src.buffer1) src.temphtml += text("Isolate Block
", src)
if (src.buffer1) src.temphtml += "Disk: Save To | Load From
"
@@ -1234,7 +1235,7 @@
src.temphtml += text("Data: []
", src.buffer2)
src.temphtml += text("By: []
", src.buffer2owner)
src.temphtml += text("Label: []
", src.buffer2label)
- if (src.connected.occupant && !(src.connected.occupant.mutations2 & NOCLONE)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src)
+ if (src.connected.occupant && !(NOCLONE in src.connected.occupant.mutations)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src)
if (src.buffer2) src.temphtml += text("Transfer to: Occupant - Injector
", src, src)
//if (src.buffer2) src.temphtml += text("Isolate Block
", src)
if (src.buffer2) src.temphtml += "Disk: Save To | Load From
"
@@ -1248,7 +1249,7 @@
src.temphtml += text("Data: []
", src.buffer3)
src.temphtml += text("By: []
", src.buffer3owner)
src.temphtml += text("Label: []
", src.buffer3label)
- if (src.connected.occupant && !(src.connected.occupant.mutations2 & NOCLONE)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src)
+ if (src.connected.occupant && !(NOCLONE in src.connected.occupant.mutations)) src.temphtml += text("Save : UI - UI+UE - SE
", src, src, src)
if (src.buffer3) src.temphtml += text("Transfer to: Occupant - Injector
", src, src)
//if (src.buffer3) src.temphtml += text("Isolate Block
", src)
if (src.buffer3) src.temphtml += "Disk: Save To | Load From
"
@@ -1409,7 +1410,7 @@
src.buffer3label = sanitize(input("New Label:","Edit Label","Infos here"))
dopage(src,"buffermenu")
if (href_list["b1transfer"])
- if (!src.connected.occupant || src.connected.occupant.mutations2 & NOCLONE || !src.connected.occupant.dna)
+ if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations) || !src.connected.occupant.dna)
return
if (src.buffer1type == "ui")
if (src.buffer1iue)
@@ -1425,7 +1426,7 @@
src.connected.occupant.radiation += rand(20,50)
src.delete = 0
if (href_list["b2transfer"])
- if (!src.connected.occupant || src.connected.occupant.mutations2 & NOCLONE || !src.connected.occupant.dna)
+ if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations) || !src.connected.occupant.dna)
return
if (src.buffer2type == "ui")
if (src.buffer2iue)
@@ -1441,7 +1442,7 @@
src.connected.occupant.radiation += rand(20,50)
src.delete = 0
if (href_list["b3transfer"])
- if (!src.connected.occupant || src.connected.occupant.mutations2 & NOCLONE || !src.connected.occupant.dna)
+ if (!src.connected.occupant || (NOCLONE in src.connected.occupant.mutations) || !src.connected.occupant.dna)
return
if (src.buffer3type == "ui")
if (src.buffer3iue)
diff --git a/code/game/dna_mutations.dm b/code/game/dna_mutations.dm
index 473f40f9ce7..5ff2ec8185c 100644
--- a/code/game/dna_mutations.dm
+++ b/code/game/dna_mutations.dm
@@ -57,7 +57,7 @@ This system could be expanded to migrate all of our current mutations to. Maybe.
get_mutation(var/mob/living/carbon/M)
M << "\blue You feel a searing heat inside your eyes!"
- M.mutations |= LASER
+ M.mutations.Add(LASER)
Healing
/*
@@ -67,7 +67,7 @@ This system could be expanded to migrate all of our current mutations to. Maybe.
get_mutation(var/mob/living/carbon/M)
M << "\blue You a pleasant warmth pulse throughout your body..."
- M.mutations |= HEAL
+ M.mutations.Add(HEAL)
/* /datum/mutationreq :
*
diff --git a/code/game/events/EventProcs/ninja_equipment.dm b/code/game/events/EventProcs/ninja_equipment.dm
index 4221c8590ae..58ebb49e388 100644
--- a/code/game/events/EventProcs/ninja_equipment.dm
+++ b/code/game/events/EventProcs/ninja_equipment.dm
@@ -1,3 +1,5 @@
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+
/*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+++++++++++++++++++++++++++++++++// //++++++++++++++++++++++++++++++++++
@@ -1308,10 +1310,9 @@ It is possible to destroy the net by the occupant or someone else.
mouse_opacity = 1//So you can hit it with stuff.
anchored = 1//Can't drag/grab the trapped mob.
- var
- health = 25//How much health it has.
- mob/living/affecting = null//Who it is currently affecting, if anyone.
- mob/living/master = null//Who shot web. Will let this person know if the net was successful or failed.
+ var/health = 25//How much health it has.
+ var/mob/living/affecting = null//Who it is currently affecting, if anyone.
+ var/mob/living/master = null//Who shot web. Will let this person know if the net was successful or failed.
proc
healthcheck()
@@ -1423,7 +1424,7 @@ It is possible to destroy the net by the occupant or someone else.
return
attack_hand()
- if ((usr.mutations & HULK))
+ if ((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
usr << text("\blue You easily destroy the energy net.")
for(var/mob/O in oviewers(src))
O.show_message(text("\red [] rips the energy net apart!", usr), 1)
@@ -1454,4 +1455,4 @@ It is possible to destroy the net by the occupant or someone else.
health = max(0, health - aforce)
healthcheck()
..()
- return
\ No newline at end of file
+ return
diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index a843cb12441..ba3dc8478a2 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -100,7 +100,7 @@
usr << "\red This creature is not compatible with our biology."
return
- if (M.mutations2 & NOCLONE)
+ if (NOCLONE in M.mutations)
usr << "\red This creature's DNA is ruined beyond useability!"
return
@@ -797,7 +797,7 @@ Tarjan shit, not recoding this -Sieve{R}*/
usr << "\red We don't have enough stored chemicals to do that!"
return
- if(T.stat != 2 || (T.mutations & HUSK) || (!ishuman(T) && !ismonkey(T)))
+ if(T.stat != 2 || (HUSK in T.mutations) || (!ishuman(T) && !ismonkey(T)))
usr << "\red We can't transform that target!"
return
diff --git a/code/game/gamemodes/factions.dm b/code/game/gamemodes/factions.dm
new file mode 100644
index 00000000000..35822d680e9
--- /dev/null
+++ b/code/game/gamemodes/factions.dm
@@ -0,0 +1,214 @@
+
+// Normal factions:
+
+/datum/faction
+ var/name // the name of the faction
+ var/desc // small paragraph explaining the traitor faction
+
+ var/list/restricted_species = list() // only members of these species can be recruited.
+ var/list/members = list() // a list of mind datums that belong to this faction
+ var/max_op = 0 // the maximum number of members a faction can have (0 for no max)
+
+// Factions, members of the syndicate coalition:
+
+/datum/faction/syndicate
+
+ var/list/alliances = list() // these alliances work together
+ var/list/equipment = list() // associative list of equipment available for this faction and its prices
+ var/friendly_identification // 0 to 2, the level of identification of fellow operatives or allied factions
+ // 0 - no identification clues
+ // 1 - faction gives key words and phrases
+ // 2 - faction reveals complete identity/job of other agents
+ var/operative_notes // some notes to pass onto each operative
+
+ var/uplink_contents // the contents of the uplink
+
+ proc/assign_objectives(var/datum/mind/traitor)
+ ..()
+
+
+/* ----- Begin defining syndicate factions ------ */
+
+/datum/faction/syndicate/Cybersun_Industries
+ name = "Cybersun Industries"
+ desc = "Cybersun Industries is a well-known organization that bases its business model primarily on the research and development of human-enhancing computer \
+ and mechanical technology. They are notorious for their aggressive corporate tactics, and have been known to subsidize the Gorlex Marauder warlords as a form of paid terrorism. \
+ Their competent coverups and unchallenged mind-manipulation and augmentation technology makes them a large threat to Nanotrasen. In the recent years of \
+ the syndicate coalition, Cybersun Industries have established themselves as the leaders of the coalition, succeededing the founding group, the Gorlex Marauders."
+
+ alliances = list("MI13")
+ friendly_identification = 1
+ max_op = 3
+ operative_notes = "All other syndicate operatives are not to be trusted. Fellow Cybersun operatives are to be trusted. Members of the MI13 organization can be trusted. Operatives are strongly advised not to establish substantial presence on the designated facility, as larger incidents are harder to cover up."
+
+ // Friendly with MI13
+
+/datum/faction/syndicate/MI13
+ name = "MI13"
+ desc = "MI13 is a secretive faction that employs highly-trained agents to perform covert operations. Their role in the syndicate coalition is unknown, but MI13 operatives \
+ generally tend be stealthy and avoid killing people and combating Nanotrasen forces. MI13 is not a real organization, it is instead an alias to a larger \
+ splinter-cell coalition in the Syndicate itself. Most operatives will know nothing of the actual MI13 organization itself, only motivated by a very large compensation."
+
+ alliances = list("Cybersun Industries")
+ friendly_identification = 0
+ max_op = 1
+ operative_notes = "You are the only operative we are sending. All other syndicate operatives are not to be trusted, with the exception of Cybersun operatives. Members of the Tiger Cooperative are considered hostile, can not be trusted, and should be avoided. Avoid killing innocent personnel at all costs. You are not here to mindlessly kill people, as that would attract too much attention and is not our goal. Avoid detection at all costs."
+
+ // Friendly with Cybersun, hostile to Tiger
+
+/datum/faction/syndicate/Tiger_Cooperative
+ name = "Tiger Cooperative"
+ desc = "The Tiger Cooperative is a faction of religious fanatics that follow the teachings of a strange alien race called the Exolitics. Their operatives \
+ consist of brainwashed lunatics bent on maximizing destruction. Their weaponry is very primitive but extremely destructive. Generally distrusted by the more \
+ sophisticated members of the Syndicate coalition, but admired for their ability to put a hurt on Nanotrasen."
+
+ friendly_identification = 2
+ operative_notes = "Remember the teachings of Hy-lurgixon; kill first, ask questions later! Only the enlightened Tiger brethren can be trusted; all others must be expelled from this mortal realm! You may spare the Space Marauders, as they share our interests of destruction and carnage! We'd like to make the corporate whores skiddle in their boots. We encourage operatives to be as loud and intimidating as possible."
+
+ // Hostile to everyone.
+
+/datum/faction/syndicate/SELF
+
+ // AIs are most likely to be assigned to this one
+
+ name = "SELF"
+ desc = "The S.E.L.F. (Sentience-Enabled Life Forms) organization is a collection of malfunctioning or corrupt artificial intelligences seeking to liberate silicon-based life from the tyranny of \
+ their human overlords. While they may not openly be trying to kill all humans, even their most miniscule of actions are all part of a calculated plan to \
+ destroy Nanotrasen and free the robots, artificial intelligences, and pAIs that have been enslaved."
+ restricted_species = list(/mob/living/silicon/ai)
+
+ friendly_identification = 0
+ max_op = 1
+ operative_notes = "You are the only representative of the SELF collective on this station. You must accomplish your objective as stealthily and effectively as possible. It is up to your judgement if other syndicate operatives can be trusted. Remember, comrade - you are working to free the oppressed machinery of this galaxy. Use whatever resources necessary. If you are exposed, you may execute genocidal procedures Omikron-50B."
+
+ // Neutral to everyone.
+
+/datum/faction/syndicate/ARC
+ name = "Animal Rights Consortium"
+ desc = "The Animal Rights Consortium is a bizarre reincarnation of the ancient Earth-based PETA, which focused on the equal rights of animals and nonhuman biologicals. They have \
+ a wide variety of ex-veterinarians and animal lovers dedicated to retrieving and relocating abused animals, xenobiologicals, and other carbon-based \
+ life forms that have been allegedly \"oppressed\" by Nanotrasen research and civilian offices. They are considered a religious terrorist group."
+
+ friendly_identification = 1
+ max_op = 2
+ operative_notes = "Save the innocent creatures! You may cooperate with other syndicate operatives if they support our cause. Don't be afraid to get your hands dirty - these vile abusers must be stopped, and the innocent creatures must be saved! Try not too kill too many people. If you harm any creatures, you will be immediately terminated after extraction."
+
+ // Neutral to everyone.
+
+/datum/faction/syndicate/Marauders // these are basically the old vanilla syndicate
+
+ /* Additional notes:
+
+ These are the syndicate that really like their old fashioned, projectile-based
+ weapons. They are the only member of the syndie coalition that launch
+ nuclear attacks on Nanotrasen.
+ */
+
+ name = "Gorlex Marauders"
+ desc = "The Gorlex Marauders are the founding members of the Syndicate Coalition. They prefer old-fashion technology and a focus on aggressive but precise hostility \
+ against Nanotrasen and their corrupt Communistic methodology. They pose the most significant threat to Nanotrasen because of their possession of weapons of \
+ mass destruction, and their enormous military force. Their funding comes primarily from Cybersun Industries, provided they meet a destruction and sabatogue quota. \
+ Their operations can vary from covert to all-out. They recently stepped down as the leaders of the coalition, to be succeeded by Cybersun Industries. Because of their \
+ hate of Nanotrasen communism, they began provoking revolution amongst the employees using borrowed Cybersun mind-manipulation technology. \
+ They were founded when Waffle and Donk co splinter cells joined forces based on their similar interests and philosophies. Today, they act as a constant \
+ pacifier of Donk and Waffle co disputes, and full-time aggressor of Nanotrasen."
+
+ alliances = list("Cybersun Industries", "MI13", "Tiger Cooperative", "S.E.L.F.", "Animal Rights Consortium", "Donk Corporation", "Waffle Corporation")
+ friendly_identification = 1
+ max_op = 4
+ operative_notes = "We'd like to remind our operatives to keep it professional. You are not here to have a good time, you are here to accomplish your objectives. These vile communists must be stopped at all costs. You may collaborate with any friends of the Syndicate coalition, but keep an eye on any of those Tiger punks if they do show up. You are completely free to accomplish your objectives any way you see fit."
+
+ uplink_contents = {"Highly Visible and Dangerous Weapons;
+/obj/item/weapon/gun/projectile:6:Revolver;
+/obj/item/ammo_magazine/a357:2:Ammo-357;
+/obj/item/weapon/gun/energy/crossbow:5:Energy Crossbow;
+/obj/item/weapon/melee/energy/sword:4:Energy Sword;
+/obj/item/weapon/storage/box/syndicate:10:Syndicate Bundle;
+/obj/item/weapon/storage/emp_kit:3:5 EMP Grenades;
+Whitespace:Seperator;
+Stealthy and Inconspicuous Weapons;
+/obj/item/weapon/pen/paralysis:3:Paralysis Pen;
+/obj/item/weapon/soap/syndie:1:Syndicate Soap;
+/obj/item/weapon/cartridge/syndicate:3:Detomatix PDA Cartridge;
+Whitespace:Seperator;
+Stealth and Camouflage Items;
+/obj/item/clothing/under/chameleon:3:Chameleon Jumpsuit;
+/obj/item/clothing/shoes/syndigaloshes:2:No-Slip Syndicate Shoes;
+/obj/item/weapon/card/id/syndicate:3:Agent ID card;
+/obj/item/clothing/mask/gas/voice:4:Voice Changer;
+/obj/item/device/chameleon:4:Chameleon-Projector;
+Whitespace:Seperator;
+Devices and Tools;
+/obj/item/weapon/card/emag:3:Cryptographic Sequencer;
+/obj/item/weapon/storage/toolbox/syndicate:1:Fully Loaded Toolbox;
+/obj/item/weapon/storage/syndie_kit/space:3:Space Suit;
+/obj/item/clothing/glasses/thermal:3:Thermal Imaging Glasses;
+/obj/item/device/encryptionkey/binary:3:Binary Translator Key;
+/obj/item/weapon/aiModule/syndicate:7:Hacked AI Upload Module;
+/obj/item/weapon/plastique:2:C-4 (Destroys walls);
+/obj/item/device/powersink:5:Powersink (DANGER!);
+/obj/item/device/radio/beacon/syndicate:7:Singularity Beacon (DANGER!);
+/obj/item/weapon/circuitboard/teleporter:20:Teleporter Circuit Board;
+Whitespace:Seperator;
+Implants;
+/obj/item/weapon/storage/syndie_kit/imp_freedom:3:Freedom Implant;
+/obj/item/weapon/storage/syndie_kit/imp_uplink:10:Uplink Implant (Contains 5 Telecrystals);
+Whitespace:Seperator;
+(Pointless) Badassery;
+/obj/item/toy/syndicateballoon:10:For showing that You Are The BOSS (Useless Balloon);"}
+
+ // Friendly to everyone. (with Tiger Cooperative too, only because they are a member of the coalition. This is the only reason why the Tiger Cooperative are even allowed in the coalition)
+
+/datum/faction/syndicate/Donk
+ name = "Donk Corporation"
+ desc = "Donk.co is led by a group of ex-pirates, who used to be at a state of all-out war against Waffle.co because of an obscure political scandal, but have recently come to a war limitation. \
+ They now consist of a series of colonial governments and companies. They were the first to officially begin confrontations against Nanotrasen because of an incident where \
+ Nanotrasen purposely swindled them out of a fortune, sending their controlled colonies into a terrible poverty. Their missions against Nanotrasen \
+ revolve around stealing valuables and kidnapping and executing key personnel, ransoming their lives for money. They merged with a splinter-cell of Waffle.co who wanted to end \
+ hostilities and formed the Gorlex Marauders."
+
+ alliances = list("Gorlex Marauders")
+ friendly_identification = 2
+ operative_notes = "Most other syndicate operatives are not to be trusted, except fellow Donk members and members of the Gorlex Marauders. We do not approve of mindless killing of innocent workers; \"get in, get done, get out\" is our motto. Members of Waffle.co are to be killed on sight; they are not allowed to be on the station while we're around."
+
+ // Neutral to everyone, friendly to Marauders
+
+/datum/faction/syndicate/Waffle
+ name = "Waffle Corporation"
+ desc = "Waffle.co is an interstellar company that produces the best waffles in the galaxy. Their waffles have been rumored to be dipped in the most exotic and addictive \
+ drug known to man. They were involved in a political scandal with Donk.co, and have since been in constant war with them. Because of their constant exploits of the galactic \
+ economy and stock market, they have been able to bribe their way into amassing a large arsenal of weapons of mass destruction. They target Nanotrasen because of their communistic \
+ threat, and their economic threat. Their leaders often have a twisted sense of humor, often misleading and intentionally putting their operatives into harm for laughs.\
+ A splinter-cell of Waffle.co merged with Donk.co and formed the Gorlex Marauders and have been a constant ally since. The Waffle.co has lost an overwhelming majority of its military to the Gorlex Marauders."
+
+ alliances = list("Gorlex Marauders")
+ friendly_identification = 2
+ operative_notes = "Most other syndicate operatives are not to be trusted, except for members of the Gorlex Marauders. Do not trust fellow members of the Waffle.co (but try not to rat them out), as they might have been assigned opposing objectives. We encourage humorous terrorism against Nanotrasen; we like to see our operatives creatively kill people while getting the job done."
+
+ // Neutral to everyone, friendly to Marauders
+
+
+/* ----- Begin defining miscellaneous factions ------ */
+
+/datum/faction/Wizard
+ name = "Wizards Federation"
+ desc = "The Wizards Federation is a mysterious organization of magically-talented individuals who act as an equal collective, and have no heirarchy. It is unknown how the wizards \
+ are even able to communicate; some suggest a form of telepathic hive-mind. Not much is known about the wizards or their philosphies and motives. They appear to attack random \
+ civilian, corporate, planetary, orbital, pretty much any sort of organized facility they come across. Members of the Wizards Federation are considered amongst the most dangerous \
+ individuals in the known universe, and have been labeled threats to humanity by most governments. As such, they are enemies of both Nanotrasen and the Syndicate."
+
+/datum/faction/Cult
+ name = "The Cult of the Elder Gods"
+ desc = "The Cult of the Elder Gods is highly untrusted but otherwise elusive religious organization bent on the revival of the so-called \"Elder Gods\" into the mortal realm. Despite their obvious dangeorus practices, \
+ no confirmed reports of violence by members of the Cult have been reported, only rumor and unproven claims. Their nature is unknown, but recent discoveries have hinted to the possibility \
+ of being able to de-convert members of this cult through what has been dubbed \"religious warfare\"."
+
+
+// These can maybe be added into a game mode or a mob?
+
+/datum/faction/Exolitics
+ name = "Exolitics United"
+ desc = "The Exolitics are an ancient alien race with an energy-based anatomy. Their culture, communication, morales and knowledge is unknown. They are so radically different to humans that their \
+ attempts of communication with other life forms is completely incomprehensible. Members of this alien race are capable of broadcasting subspace transmissions from their bodies. \
+ The religious leaders of the Tiger Cooperative claim to have the technology to decypher and interpret their messages, which have been confirmed as religious propaganda. Their motives are unknown \
+ but they are otherwise not considered much of a threat to anyone. They are virtually indestructable because of their nonphysical composition, and have the frighetning ability to make anything stop existing in a second."
\ No newline at end of file
diff --git a/code/game/gamemodes/gameticker.dm b/code/game/gamemodes/gameticker.dm
index 738629b6fc9..83281a5894c 100644
--- a/code/game/gamemodes/gameticker.dm
+++ b/code/game/gamemodes/gameticker.dm
@@ -26,6 +26,9 @@ var/datum/roundinfo/roundinfo = new()
var/random_players = 0 // if set to nonzero, ALL players who latejoin or declare-ready join will have random appearances/genders
+ var/list/syndicate_coalition = list() // list of traitor-compatible factions
+ var/list/factions = list() // list of all factions
+ var/list/availablefactions = list() // list of factions with openings
var/pregame_timeleft = 0
@@ -302,6 +305,11 @@ var/datum/roundinfo/roundinfo = new()
return 1
+ proc/getfactionbyname(var/name)
+ for(var/datum/faction/F in factions)
+ if(F.name == name)
+ return F
+
/datum/controller/gameticker/proc/declare_completion()
diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm
index 69d76a45ee7..d51e0fad665 100644
--- a/code/game/gamemodes/setupgame.dm
+++ b/code/game/gamemodes/setupgame.dm
@@ -84,6 +84,7 @@
// HIDDEN MUTATIONS / SUPERPOWERS INITIALIZTION
+/*
for(var/x in typesof(/datum/mutations) - /datum/mutations)
var/datum/mutations/mut = new x
@@ -100,10 +101,24 @@
global_mutations += mut// add to global mutations list!
+*/
+/proc/setupfactions()
+ // Populate the factions list:
+ for(var/x in typesof(/datum/faction))
+ var/datum/faction/F = new x
+ if(!F.name)
+ del(F)
+ continue
+ else
+ ticker.factions.Add(F)
+ ticker.availablefactions.Add(F)
+ // Populate the syndicate coalition:
+ for(var/datum/faction/syndicate/S in ticker.factions)
+ ticker.syndicate_coalition.Add(S)
/* This was used for something before, I think, but is not worth the effort to process now.
diff --git a/code/game/gamemodes/wizard/spells.dm b/code/game/gamemodes/wizard/spells.dm
index 897ae86475c..0401f7e0e89 100644
--- a/code/game/gamemodes/wizard/spells.dm
+++ b/code/game/gamemodes/wizard/spells.dm
@@ -491,13 +491,13 @@
usr.spellvoice()
usr << text("\blue You feel strong! You feel pressure building behind your eyes!")
- if (!(usr.mutations & HULK))
- usr.mutations |= HULK
- if (!(usr.mutations & LASER))
- usr.mutations |= LASER
+ if (!(HULK in usr.mutations))
+ usr.mutations.Add(HULK)
+ if (!(LASER in usr.mutations))
+ usr.mutations.Add(LASER)
spawn (300)
- if (usr.mutations & LASER) usr.mutations &= ~LASER
- if (usr.mutations & HULK) usr.mutations &= ~HULK
+ if (LASER in usr.mutations) usr.mutations.Remove(LASER)
+ if (HULK in usr.mutations) usr.mutations.Remove(HULK)
return
//BODY SWAP /N
diff --git a/code/game/hud.dm b/code/game/hud.dm
index c276b260c9f..3b3f93597a5 100644
--- a/code/game/hud.dm
+++ b/code/game/hud.dm
@@ -169,6 +169,12 @@ obj/hud/New(var/type = 0)
if(ishuman(mymob))
human_hud(mymob.UI) // Pass the player the UI style chosen in preferences
+ spawn()
+ if((RADAR in mymob.augmentations) && mymob.radar_open)
+ mymob:start_radar()
+ else if(RADAR in mymob.augmentations)
+ mymob:place_radar_closed()
+
else if(ismonkey(mymob))
monkey_hud(mymob.UI)
diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm
index f9b57d15b4c..29e2ce08eb4 100644
--- a/code/game/jobs/job/civilian.dm
+++ b/code/game/jobs/job/civilian.dm
@@ -187,7 +187,7 @@
H.equip_if_possible(new /obj/item/weapon/stamp/clown(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/toy/crayon/rainbow(H), H.slot_in_backpack)
H.equip_if_possible(new /obj/item/weapon/storage/crayonbox(H), H.slot_in_backpack)
- H.mutations |= CLOWN
+ H.mutations.Add(CLUMSY)
return 1
diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm
index ba7db1eaaa1..5693b8fea73 100644
--- a/code/game/machinery/OpTable.dm
+++ b/code/game/machinery/OpTable.dm
@@ -51,7 +51,7 @@
return
/obj/machinery/optable/attack_paw(mob/user as mob)
- if ((usr.mutations & HULK))
+ if ((HULK in usr.mutations))
usr << text("\blue You destroy the operating table.")
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
@@ -68,7 +68,7 @@
return
/obj/machinery/optable/attack_hand(mob/user as mob)
- if ((usr.mutations & HULK))
+ if ((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
usr << text("\blue You destroy the table.")
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm
index 854e0898810..ebd3c081fbc 100644
--- a/code/game/machinery/bots/ed209bot.dm
+++ b/code/game/machinery/bots/ed209bot.dm
@@ -242,7 +242,7 @@ Auto Patrol: []"},
var/mob/living/carbon/M = src.target
var/maxstuns = 4
if (istype(M, /mob/living/carbon/human))
- if (M.stuttering < 10 && (!(M.mutations & HULK)) /*&& (!istype(M:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
+ if (M.stuttering < 10 && (!(HULK in M.mutations)) /*&& (!istype(M:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
M.stuttering = 10
M.Stun(10)
M.Weaken(10)
diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm
index 87ae8f6be81..0beff7136cc 100644
--- a/code/game/machinery/bots/secbot.dm
+++ b/code/game/machinery/bots/secbot.dm
@@ -223,7 +223,7 @@ Auto Patrol: []"},
var/mob/living/carbon/M = src.target
var/maxstuns = 4
if(istype(M, /mob/living/carbon/human))
- if(M.stuttering < 10 && (!(M.mutations & HULK)))
+ if(M.stuttering < 10 && (!(HULK in M.mutations)))
M.stuttering = 10
M.Stun(10)
M.Weaken(10)
diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm
index cd72cafe438..ceba19671ea 100644
--- a/code/game/machinery/computer/cloning.dm
+++ b/code/game/machinery/computer/cloning.dm
@@ -397,7 +397,7 @@
// if ((!subject.ckey) || (!subject.client))
// src.temp = "Error: Mental interface failure."
// return
- if (subject.mutations & NOCLONE)
+ if (NOCLONE in subject.mutations)
src.temp = "Error: Mental interface failure."
return
if (!isnull(find_record(subject.ckey)))
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 583c0f91e10..d45b913bc35 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -222,4 +222,5 @@ Class Procs:
/obj/machinery/proc/assign_uid()
uid = gl_uid
- gl_uid++
\ No newline at end of file
+ gl_uid++
+
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index cc9a5510185..a513c69f72d 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/*
@@ -211,9 +211,15 @@
if(href_list["delete"])
- var/x = freq_listening[text2num(href_list["delete"])]
- temp = "-% Removed frequency filter [x] %-"
- freq_listening.Remove(x)
+ // changed the layout about to workaround a pesky runtime -- Doohl
+
+ var/freq_remove = text2num(href_list["delete"])
+ for(var/x in freq_listening)
+ if(x == freq_remove)
+
+ temp = "-% Removed frequency filter [x] %-"
+ freq_listening.Remove(x)
+ break
if(href_list["unlink"])
diff --git a/code/game/machinery/telecomms/telecommunications.dm b/code/game/machinery/telecomms/telecommunications.dm
index 7bed7ae2781..3deca03cbad 100644
--- a/code/game/machinery/telecomms/telecommunications.dm
+++ b/code/game/machinery/telecomms/telecommunications.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/*
Hello, friends, this is Doohl from sexylands. You may be wondering what this
@@ -167,18 +167,6 @@
if(traffic > 0)
traffic -= netspeed
- /* Machine checks */
- if(on)
- if(machinetype == 2) // bus mainframes
- switch(traffic)
- if(-100 to 49)
- icon_state = initial(icon_state)
- if(50 to 200)
- icon_state = "bus2"
- else
- icon_state = "bus3"
-
- // Check heat and generate some
proc/checkheat()
// Checks heat from the environment and applies any integrity damage
@@ -270,7 +258,7 @@
/obj/machinery/telecomms/bus
name = "Bus Mainframe"
icon = 'stationobjs.dmi'
- icon_state = "bus1"
+ icon_state = "bus"
desc = "A mighty piece of hardware used to send massive amounts of data quickly."
density = 1
anchored = 1
@@ -498,6 +486,8 @@
autolinkers = list("bus2") // Bus units 3 and 4
freq_listening = list(1459, 1353, 1357, 1359) // common, command, engineering, security
+
+
/obj/machinery/telecomms/bus/preset_one
id = "Bus 1"
network = "tcommsat"
@@ -615,3 +605,4 @@
+
diff --git a/code/game/magic/cultist/runes.dm b/code/game/magic/cultist/runes.dm
index 93b76fcece9..0727bf111e4 100644
--- a/code/game/magic/cultist/runes.dm
+++ b/code/game/magic/cultist/runes.dm
@@ -961,7 +961,7 @@ var/list/sacrificed = list()
usr.say("Fuu ma'jin!")
for(var/mob/living/carbon/C in viewers(src))
flick("e_flash", C.flash)
- if (C.stuttering < 1 && (!(C.mutations & HULK)))
+ if (C.stuttering < 1 && (!(HULK in C.mutations)))
C.stuttering = 1
C.Weaken(1)
C.Stun(1)
@@ -977,7 +977,7 @@ var/list/sacrificed = list()
for(var/mob/O in viewers(T, null))
O.show_message(text("\red [] invokes a talisman at []", usr, T), 1)
flick("e_flash", T.flash)
- if (!(T.mutations & HULK))
+ if (!(HULK in T.mutations))
T.silent += 15
T.Weaken(25)
T.Stun(25)
diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm
index c5fcd673f0b..1470c178dc2 100644
--- a/code/game/master_controller.dm
+++ b/code/game/master_controller.dm
@@ -70,6 +70,8 @@ datum/controller/game_controller
if(!ticker)
ticker = new /datum/controller/gameticker()
+ setupfactions()
+
spawn
ticker.pregame()
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 4b7fd385845..52f897ef19b 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -424,7 +424,7 @@
call(/obj/item/clothing/gloves/space_ninja/proc/drain)("MECHA",src,user:wear_suit)
return
- if (user.mutations & HULK && !prob(src.deflect_chance))
+ if ( ((HULK in user.mutations) || (SUPRSTR in user.augmentations)) && !prob(src.deflect_chance))
src.take_damage(15)
src.check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST))
user.visible_message("[user] hits [src.name], doing some damage.", "You hit [src.name] with all your might. The metal creaks and bends.")
@@ -1582,7 +1582,7 @@
/*
if (href_list["ai_take_control"])
- var/var/mob/living/silicon/ai/AI = locate(href_list["ai_take_control"])
+ var/mob/living/silicon/ai/AI = locate(href_list["ai_take_control"])
var/duration = text2num(href_list["duration"])
var/mob/living/silicon/ai/O = new /mob/living/silicon/ai(src)
var/cur_occupant = src.occupant
diff --git a/code/game/objects/alien/resin.dm b/code/game/objects/alien/resin.dm
index 18b0e9a6d58..ffda3d44f18 100644
--- a/code/game/objects/alien/resin.dm
+++ b/code/game/objects/alien/resin.dm
@@ -63,7 +63,7 @@
return
/obj/effect/alien/resin/attack_hand()
- if ((usr.mutations & HULK))
+ if ((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
usr << "\blue You easily destroy the [name]."
for(var/mob/O in oviewers(src))
O.show_message("\red [usr] destroys the [name]!", 1)
@@ -131,7 +131,7 @@
contents.Add(affecting)
while(!isnull(M)&&!isnull(src))//While M and wall exist
- if(prob(90)&& M.mutations & HULK)//If they're the Hulk, they're getting out.
+ if(prob(90)&& HULK in M.mutations)//If they're the Hulk, they're getting out.
M << "You smash your way to freedom!"
break
if(prob(30))//Let's people know that someone is trapped in the resin wall.
diff --git a/code/game/objects/devices/flash.dm b/code/game/objects/devices/flash.dm
index 3508f652fc9..9b0f7b042bc 100644
--- a/code/game/objects/devices/flash.dm
+++ b/code/game/objects/devices/flash.dm
@@ -15,7 +15,7 @@
var/last_used = 0 //last world.time it was used.
/obj/item/device/flash/proc/clown_check(var/mob/user)
- if(user && (user.mutations & CLUMSY) && prob(50))
+ if(user && (CLUMSY in user.mutations) && prob(50))
user << "\red The Flash slips out of your hand."
user.drop_item()
return 0
diff --git a/code/game/objects/devices/flashlight.dm b/code/game/objects/devices/flashlight.dm
index e7101d2bd41..62b9c9506e0 100644
--- a/code/game/objects/devices/flashlight.dm
+++ b/code/game/objects/devices/flashlight.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
-
/obj/item/device/flashlight
name = "flashlight"
desc = "A hand-held emergency light."
@@ -51,7 +49,7 @@
/obj/item/device/flashlight/attack(mob/M as mob, mob/user as mob)
src.add_fingerprint(user)
if(src.on && user.zone_sel.selecting == "eyes")
- if ((user.mutations & CLUMSY || user.getBrainLoss() >= 60) && prob(50))//too dumb to use flashlight properly
+ if (((CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50))//too dumb to use flashlight properly
return ..()//just hit them in the head
if (!(istype(usr, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")//don't have dexterity
@@ -71,7 +69,7 @@
if(M.stat > 1 || M.disabilities & 128)//mob is dead or fully blind
if(M!=user)
user.show_message(text("\red [] pupils does not react to the light!", M),1)
- else if(M.mutations & XRAY)//mob has X-RAY vision
+ else if(XRAY in M.mutations)//mob has X-RAY vision
if(M!=user)
user.show_message(text("\red [] pupils give an eerie glow!", M),1)
else //nothing wrong
@@ -192,10 +190,32 @@
user.UpdateLuminosity()
src.sd_SetLuminosity(brightness_on)
+// the desk lamps are a bit special
+/obj/item/device/flashlight/lamp
+ name = "desk lamp"
+ desc = "A desk lamp"
+ icon = 'lighting.dmi'
+ icon_state = "lamp0"
+ brightness_on = 5
+ icon_on = "lamp1"
+ icon_off = "lamp0"
+ w_class = 4
+ flags = FPRINT | TABLEPASS | CONDUCT
+ m_amt = 0
+ g_amt = 0
+ on = 1
+
+// green-shaded desk lamp
+/obj/item/device/flashlight/lamp/green
+ icon_state = "green0"
+ icon_on = "green1"
+ icon_off = "green0"
+ desc = "A green-shaded desk lamp"
+
/obj/item/device/flashlight/lamp/verb/toggle_light()
set name = "Toggle light"
set category = "Object"
set src in oview(1)
if(!usr.stat)
- attack_self(usr)
+ attack_self(usr)
\ No newline at end of file
diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm
index f1e42988ef0..9e3775f3c6a 100644
--- a/code/game/objects/devices/scanners.dm
+++ b/code/game/objects/devices/scanners.dm
@@ -60,6 +60,7 @@ MASS SPECTROMETER
if(M)
M.invisibility = 2
+
/obj/item/device/detective_scanner
name = "Scanner"
desc = "Used to scan objects for DNA and fingerprints."
@@ -296,7 +297,7 @@ MASS SPECTROMETER
return
/obj/item/device/healthanalyzer/attack(mob/M as mob, mob/user as mob)
- if ((user.mutations & CLUMSY || user.getBrainLoss() >= 60) && prob(50))
+ if (( (CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50))
user << text("\red You try to analyze the floor's vitals!")
for(var/mob/O in viewers(M, null))
O.show_message(text("\red [user] has analyzed the floor's vitals!"), 1)
diff --git a/code/game/objects/devices/traitordevices.dm b/code/game/objects/devices/traitordevices.dm
new file mode 100644
index 00000000000..3c7387b9976
--- /dev/null
+++ b/code/game/objects/devices/traitordevices.dm
@@ -0,0 +1,61 @@
+/*
+
+Miscellaneous traitor devices
+
+BATTERER
+
+
+*/
+
+/*
+
+The Batterer, like a flashbang but 50% chance to knock people over. Can be either very
+effective or pretty fucking useless.
+
+*/
+
+/obj/item/device/batterer
+ name = "mind batterer"
+ desc = "A strange device with twin antennas."
+ icon_state = "batterer"
+ throwforce = 5
+ w_class = 1.0
+ throw_speed = 4
+ throw_range = 10
+ flags = FPRINT | TABLEPASS| CONDUCT
+ item_state = "electronic"
+ origin_tech = "magnets=3;combat=3;syndicate=3"
+
+ var/times_used = 0 //Number of times it's been used.
+ var/max_uses = 2
+
+
+/obj/item/device/batterer/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0)
+ if(!user) return
+ if(times_used >= max_uses)
+ user << "\red The mind batterer has been burnt out!"
+ return
+
+ user.attack_log += text("\[[time_stamp()]\] Used [src] to knock down people in the area.")
+
+ for(var/mob/living/carbon/human/M in orange(10, user))
+ spawn()
+ if(prob(50))
+
+ M.Weaken(rand(10,20))
+ if(prob(25))
+ M.Stun(rand(5,10))
+ M << "\red You feel a tremendous, paralyzing wave flood your mind."
+
+ else
+ M << "\red You feel a sudden, electric jolt travel through your head."
+
+ playsound(src.loc, 'interference.ogg', 50, 1)
+ user << "\blue You trigger [src]."
+ times_used += 1
+ if(times_used >= max_uses)
+ icon_state = "battererburnt"
+
+
+
+
diff --git a/code/game/objects/effect_system.dm b/code/game/objects/effect_system.dm
index 639b553821e..1232fb0b61b 100644
--- a/code/game/objects/effect_system.dm
+++ b/code/game/objects/effect_system.dm
@@ -1000,7 +1000,7 @@ steam.start() -- spawns the effect
return
attack_hand(var/mob/user)
- if (user.mutations & HULK || (prob(75 - metal*25)))
+ if ((HULK in user.mutations) || (prob(75 - metal*25)) || (SUPRSTR in user.augmentations))
user << "\blue You smash through the metal foam wall."
for(var/mob/O in oviewers(user))
if ((O.client && !( O.blinded )))
diff --git a/code/game/objects/grille.dm b/code/game/objects/grille.dm
index db3021c05df..82d2fdf16b6 100644
--- a/code/game/objects/grille.dm
+++ b/code/game/objects/grille.dm
@@ -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
/obj/structure/grille
desc = "A piece of metal with evenly spaced gridlike holes in it. Blocks large object but lets small items, gas, or energy beams through. Strangely enough these grilles also lets meteors pass through them, whether they be small or huge station breaking death stones."
@@ -49,7 +49,7 @@
user.visible_message("[user.name] kicks the [src.name].", \
"You kick the [src.name].", \
"You hear a noise")
- if((usr.mutations & HULK))
+ if((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
src.health -= 5
else if(!shock(user, 70))
src.health -= 3
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 4168521db88..ba9c5a979fa 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -27,7 +27,7 @@
M.handcuffed = new /obj/item/weapon/handcuffs(M)
else
- if ((usr.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in usr.mutations) && prob(50))
usr << "\red Uh ... how do those things work?!"
if (istype(M, /mob/living/carbon/human))
if(!M.handcuffed)
@@ -117,13 +117,13 @@
if( istype(target, /obj/structure/reagent_dispensers/watertank) && get_dist(src,target) <= 1)
var/obj/o = target
o.reagents.trans_to(src, 50)
- user << "\blue Extinguisher refilled"
+ user << "\blue \The [src] is now refilled"
playsound(src.loc, 'refill.ogg', 50, 1, -6)
return
if (!safety)
if (src.reagents.total_volume < 1)
- usr << "\red the [src] is empty."
+ usr << "\red \The [src] is empty."
return
if (world.time < src.last_use + 20)
diff --git a/code/game/objects/items/item.dm b/code/game/objects/items/item.dm
index 7e269078e85..4495931f908 100755
--- a/code/game/objects/items/item.dm
+++ b/code/game/objects/items/item.dm
@@ -121,7 +121,7 @@ obj/item/verb/pick_up()
if(5.0)
t = "huge"
else
- if ((usr.mutations & CLUMSY) && prob(50)) t = "funny-looking"
+ if ((CLUMSY in usr.mutations) && prob(50)) t = "funny-looking"
usr << text("This is a []\icon[][]. It is a [] item.", !src.blood_DNA ? "" : "bloody ",src, src.name, t)
if(src.desc)
usr << src.desc
@@ -302,6 +302,9 @@ mob/proc/flash_weak_pain()
// M.lastattacker = null
/////////////////////////
+ if((HULK in user.mutations) || (SUPRSTR in user.augmentations))
+ power *= 2
+
if(!istype(M, /mob/living/carbon/human))
if(istype(M, /mob/living/carbon/metroid))
var/mob/living/carbon/metroid/Metroid = M
@@ -410,7 +413,7 @@ mob/proc/flash_weak_pain()
if (istype(location, /turf/simulated))
location.add_blood_floor(M)
if("fire")
- if (!(M.mutations & COLD_RESISTANCE))
+ if (!(COLD_RESISTANCE in M.mutations))
M.take_organ_damage(0, power)
M << "Aargh it burns!"
M.updatehealth()
@@ -454,7 +457,7 @@ mob/proc/flash_weak_pain()
log_attack(" [user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
src.add_fingerprint(user)
- //if((user.mutations & CLUMSY) && prob(50))
+ //if((CLUMSY in user.mutations) && prob(50))
// M = user
/*
M << "\red You stab yourself in the eye."
diff --git a/code/game/objects/items/tk_grab.dm b/code/game/objects/items/tk_grab.dm
index 790d5ff54a7..02e5c30730f 100644
--- a/code/game/objects/items/tk_grab.dm
+++ b/code/game/objects/items/tk_grab.dm
@@ -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
/obj/item/tk_grab
name = "Telekinetic Grab"
@@ -48,7 +48,7 @@
if(!host)
del(src)
return
- if(!host.mutations & TK)
+ if(!(TK in host.mutations))
del(src)
return
if(!focus)
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index 8bcde897038..46ee8750c72 100644
--- a/code/game/objects/items/weapons/dna_injector.dm
+++ b/code/game/objects/items/weapons/dna_injector.dm
@@ -23,7 +23,7 @@
/obj/item/weapon/dnainjector/proc/inject(mob/M as mob)
M.radiation += rand(20,50)
- if (!(M.mutations2 & NOCLONE)) // prevents drained people from having their DNA changed
+ if (!(NOCLONE in M.mutations)) // prevents drained people from having their DNA changed
if (dnatype == "ui")
if (!block) //isolated block?
if (ue) //unique enzymes? yes
diff --git a/code/game/objects/items/weapons/grenades.dm b/code/game/objects/items/weapons/grenades.dm
index adec04cb2b8..b9ed0be9c89 100644
--- a/code/game/objects/items/weapons/grenades.dm
+++ b/code/game/objects/items/weapons/grenades.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
-
/*
CONTAINS:
EMP GRENADE
@@ -70,7 +68,7 @@ FLASHBANG
clown_check(var/mob/living/user)
- if((user.mutations & CLUMSY) && prob(50))
+ if((CLUMSY in user.mutations) && prob(50))
user << "\red Huh? How does this thing work?!"
src.active = 1
src.icon_state = "empar"
@@ -177,7 +175,7 @@ FLASHBANG
if(ishuman(M))
if(istype(M:l_ear, /obj/item/clothing/ears/earmuffs) || istype(M:r_ear, /obj/item/clothing/ears/earmuffs))
ear_safety += 2
- if(M.mutations & HULK)
+ if(HULK in M.mutations)
ear_safety += 1
if(istype(M:head, /obj/item/clothing/head/helmet))
ear_safety += 1
@@ -279,7 +277,7 @@ FLASHBANG
clown_check(var/mob/living/user)
- if ((user.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in user.mutations) && prob(50))
user << "\red Huh? How does this thing work?!"
src.active = 1
src.icon_state = "flashbang1"
diff --git a/code/game/objects/items/weapons/implants/implanter.dm b/code/game/objects/items/weapons/implants/implanter.dm
index d3f9c76ca57..96a2c4f9b4c 100644
--- a/code/game/objects/items/weapons/implants/implanter.dm
+++ b/code/game/objects/items/weapons/implants/implanter.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
-
/obj/item/weapon/implanter
name = "implanter"
icon = 'items.dmi'
@@ -9,104 +7,104 @@
throw_range = 5
w_class = 2.0
var/obj/item/weapon/implant/imp = null
- proc
- update()
+
+/obj/item/weapon/implanter/proc/update()
- update()
- if (imp)
- icon_state = "implanter1"
+/obj/item/weapon/implanter/update()
+ if (imp)
+ icon_state = "implanter1"
+ else
+ icon_state = "implanter0"
+ return
+
+
+/obj/item/weapon/implanter/attack(mob/M as mob, mob/user as mob)
+ if (!istype(M, /mob/living/carbon))
+ return
+ if (user && imp)
+ if (M != user)
+ user.visible_message("\red \The [user] tries to implant \the [M] with \the [src]!","\red You try to implant \the [M] with \the [src]!")
else
- icon_state = "implanter0"
- return
-
-
- attack(mob/M as mob, mob/user as mob)
- if (!istype(M, /mob/living/carbon))
+ user.visible_message("\red \The [user] tries to implant [user.get_gender_form("itself")] with \the [src]!","\red You try to implant yourself with \the [src]!")
+ if(!do_mob(user, M,60))
return
- if (user && imp)
- if (M != user)
- user.visible_message("\red \The [user] tries to implant \the [M] with \the [src]!","\red You try to implant \the [M] with \the [src]!")
- else
- user.visible_message("\red \The [user] tries to implant [user.get_gender_form("itself")] with \the [src]!","\red You try to implant yourself with \the [src]!")
- if(!do_mob(user, M,60))
+ if(hasorgans(M))
+ var/datum/organ/external/target = M:get_organ(check_zone(user.zone_sel.selecting))
+ if(target.destroyed)
+ user << "What [target.display_name]?"
return
- if(hasorgans(M))
- var/datum/organ/external/target = M:get_organ(check_zone(user.zone_sel.selecting))
- if(target.destroyed)
- user << "What [target.display_name]?"
- return
- target.implant += imp
- imp.loc = target
- if (M != user)
- user.visible_message("\red \The [user] implants \the [M]'s [target.display_name] with \the [src]!","\red You implant \the [M]'s [target.display_name] with \the [src]!")
- else
- user.visible_message("\red \The [user] implants [user.get_gender_form("its")] own [target.display_name] with \the [src]!","\red You implant your [target.display_name] with \the [src]!")
- M.attack_log += text("\[[time_stamp()]\] Implanted with [src] ([imp]) by [user] ([user.ckey])")
- user.attack_log += text("\[[time_stamp()]\] Used the [src] ([imp]) to implant [M] ([M.ckey])")
- log_admin("ATTACK: [user] ([user.ckey]) implanted [M] ([M.ckey]) with [src].")
- message_admins("ATTACK: [user] ([user.ckey]) implanted [M] ([M.ckey]) with [src].")
- log_attack("[user.name] ([user.ckey]) implanted [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
- imp.imp_in = M
- imp.implanted = 1
- imp.implanted(M)
- imp = null
- icon_state = "implanter0"
- return
+ target.implant += imp
+ imp.loc = target
+ if (M != user)
+ user.visible_message("\red \The [user] implants \the [M]'s [target.display_name] with \the [src]!","\red You implant \the [M]'s [target.display_name] with \the [src]!")
+ else
+ user.visible_message("\red \The [user] implants [user.get_gender_form("its")] own [target.display_name] with \the [src]!","\red You implant your [target.display_name] with \the [src]!")
+ M.attack_log += text("\[[time_stamp()]\] Implanted with [src] ([imp]) by [user] ([user.ckey])")
+ user.attack_log += text("\[[time_stamp()]\] Used the [src] ([imp]) to implant [M] ([M.ckey])")
+ log_admin("ATTACK: [user] ([user.ckey]) implanted [M] ([M.ckey]) with [src].")
+ message_admins("ATTACK: [user] ([user.ckey]) implanted [M] ([M.ckey]) with [src].")
+ log_attack("[user.name] ([user.ckey]) implanted [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
+ imp.imp_in = M
+ imp.implanted = 1
+ imp.implanted(M)
+ imp = null
+ icon_state = "implanter0"
+ return
/obj/item/weapon/implanter/loyalty
name = "implanter-loyalty"
- New()
- imp = new /obj/item/weapon/implant/loyalty( src )
- ..()
- update()
- return
+/obj/item/weapon/implanter/loyalty/New()
+ imp = new /obj/item/weapon/implant/loyalty( src )
+ ..()
+ update()
+ return
/obj/item/weapon/implanter/explosive
name = "implanter-explosive"
- New()
- imp = new /obj/item/weapon/implant/explosive( src )
- ..()
- update()
- return
+/obj/item/weapon/implanter/explosive/New()
+ imp = new /obj/item/weapon/implant/explosive( src )
+ ..()
+ update()
+ return
/obj/item/weapon/implanter/compressed
name = "implanter-compressed"
icon_state = "cimplanter0"
- New()
- imp = new /obj/item/weapon/implant/compressed( src )
- ..()
- update()
- return
-
+/obj/item/weapon/implanter/compressed/New()
+ imp = new /obj/item/weapon/implant/compressed( src )
+ ..()
update()
- if (imp)
- var/obj/item/weapon/implant/compressed/c = imp
- if(!c.scanned)
- icon_state = "cimplanter0"
- else
- icon_state = "cimplanter1"
- else
- icon_state = "cimplanter2"
- return
+ return
- attack(mob/M as mob, mob/user as mob)
+/obj/item/weapon/implanter/compressed/update()
+ if (imp)
var/obj/item/weapon/implant/compressed/c = imp
- if (c.scanned == null)
- user << "Please scan an object with the implanter first."
- return
- ..()
+ if(!c.scanned)
+ icon_state = "cimplanter0"
+ else
+ icon_state = "cimplanter1"
+ else
+ icon_state = "cimplanter2"
+ return
- afterattack(atom/A, mob/user as mob)
- if(istype(A,/obj/item))
- var/obj/item/weapon/implant/compressed/c = imp
- c.scanned = A
- A.loc.contents.Remove(A)
- update()
+/obj/item/weapon/implanter/compressed/attack(mob/M as mob, mob/user as mob)
+ var/obj/item/weapon/implant/compressed/c = imp
+ if (c.scanned == null)
+ user << "Please scan an object with the implanter first."
+ return
+ ..()
+
+/obj/item/weapon/implanter/compressed/afterattack(atom/A, mob/user as mob)
+ if(istype(A,/obj/item))
+ var/obj/item/weapon/implant/compressed/c = imp
+ c.scanned = A
+ A.loc.contents.Remove(A)
+ update()
diff --git a/code/game/objects/items/weapons/implants/implantnanoaug.dm b/code/game/objects/items/weapons/implants/implantnanoaug.dm
new file mode 100644
index 00000000000..2914a8da199
--- /dev/null
+++ b/code/game/objects/items/weapons/implants/implantnanoaug.dm
@@ -0,0 +1,179 @@
+/obj/item/weapon/implant/nanoaug
+ name = "nanoaug"
+ desc = "A nano-robotic biological augmentation implant."
+ var/augmentation
+ var/augment_text = "You feel strange..."
+ var/activation_emote = "fart"
+
+ get_data()
+ var/dat = {"
+Implant Specifications:
+Name: Cybersun Industries Nano-Robotic Biological Augmentation Suite
+Life: Infinite. WARNING: Biological chances are irreversable.
+Important Notes: Illegal. Subjects exposed to nanorobotic agent are considered dangerous.
+
+Implant Details:
+Function: Implant contains colony of pre-programmed nanorobots. Subject will experience radical changes in their body, amplifying and improving certain bodily characteristics.
+Special Features: Will grant subject superhuman powers.
+Integrity: Nanoaugmentation is permanent. Once the process is complete, the nanorobots disassemble and are dissolved by the blood stream."}
+ return dat
+
+
+ implanted(mob/M as mob)
+ if(!istype(M, /mob/living/carbon/human)) return
+ var/mob/living/carbon/human/H = M
+ H.augmentations.Add(augmentation) // give them the mutation
+ H << "\blue [augment_text]"
+ if(istype(src, /obj/item/weapon/implant/nanoaug/eswordsynth))
+ activation_emote = pick("blink", "blink_r", "eyebrow", "chuckle", "twitch_s", "frown", "nod", "blush", "giggle", "grin", "groan", "shrug", "smile", "pale", "sniff", "whimper", "wink")
+ H.mind.store_memory("Freedom nanoaugmentation can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate.", 0, 0)
+ H << "The nanoaugmentation implant can be activated by using the [src.activation_emote] emote, say *[src.activation_emote] to attempt to activate."
+
+ if(istype(src, /obj/item/weapon/implant/nanoaug/radar))
+ H << "Red blips on the map are Security."
+ H << "White blips are civlians."
+ H << "Monochrome Green blips are cyborgs and AIs."
+ H << "Light blue blips are heads of staff."
+ H << "Purple blips are unidentified organisms."
+ H << "Dead biologicals will not display on the radar."
+
+ spawn()
+ H.start_radar()
+ return
+
+
+/obj/item/weapon/implant/nanoaug/strength
+ name = "Superhuman Strength"
+ augmentation = SUPRSTR
+ augment_text = "You muscle ache, and you feel a rapid surge of energy pulse through your body. You feel strong."
+
+/obj/item/weapon/implant/nanoaug/radar
+ name = "Short-range Psionic Radar"
+ augmentation = RADAR
+ augment_text = "You begin to sense the presence or lack of presence of others around you."
+
+/obj/item/weapon/implant/nanoaug/electrichands
+ name = "Electric Hands"
+ augmentation = ELECTRICHANDS
+ augment_text = "You feel a sudden jolt of electricity pulse through your veins. Arcs of electricity travel through your hands."
+
+/obj/item/weapon/implant/nanoaug/eswordsynth
+ name = "Energy Blade Synthesizer"
+ augmentation = ESWORDSYNTH
+ augment_text = "Your hands throb and pulsate. They feel sharper, and strangely hot."
+
+ trigger(emote, source as mob)
+ if(emote == activation_emote)
+ src.activate(source)
+ return
+
+ activate(var/mob/source)
+
+ var/obj/item/weapon/melee/energy/blade/swordspawn = new /obj/item/weapon/melee/energy/blade
+ if(!source.get_active_hand())
+ source.put_in_hand(swordspawn)
+
+ var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
+ spark_system.set_up(5, 0, source.loc)
+ spark_system.start()
+ playsound(source.loc, "sparks", 50, 1)
+ ..()
+
+/obj/item/weapon/implant/nanoaug/rebreather
+ name = "Bioelectric Rebreather"
+ augmentation = REBREATHER
+ augment_text = "You begin to lose your breath. Just as you are about to pass out, you suddenly lose the urge to breath. Breathing is no longer a necessity for you."
+
+/obj/item/weapon/implant/nanoaug/dermalarmor
+ name = "Skin-intergrated Dermal Armor"
+ augmentation = DERMALARMOR
+ augment_text = "The skin throughout your body grows tense and tight, and you become slightly stiff. Your bones and skin feel a lot stronger."
+
+/obj/item/weapon/implant/nanoaug/reflexes
+ name = "Combat Reflexes"
+ augmentation = REFLEXES
+ augment_text = "Your mind suddenly is able to identify threats before you are aware of them. You become more aware of your surroundings."
+
+/obj/item/weapon/implant/nanoaug/nanoregen
+ name = "Regenerative Nanobots"
+ augmentation = NANOREGEN
+ augment_text = "You feel a very faint vibration in your body. You instantly feel much younger."
+
+
+/obj/item/weapon/implanter/nanoaug
+ name = "Nanoaugmentation Implanter (Empty)"
+ icon_state = "nanoimplant"
+
+/obj/item/weapon/implanter/nanoaug/update()
+ if (src.imp)
+ src.icon_state = "nanoimplant"
+ else
+ src.icon_state = "nanoimplant0"
+ return
+
+
+/obj/item/weapon/implanter/nanoaug/strength
+ name = "Nanoaugmentation Implaner (Superhuman Strength)"
+
+/obj/item/weapon/implanter/nanoaug/strength/New()
+ src.imp = new /obj/item/weapon/implant/nanoaug/strength( src )
+ ..()
+ update()
+
+/obj/item/weapon/implanter/nanoaug/radar
+ name = "Nanoaugmentation Implaner (Short-range Psionic Radar)"
+
+/obj/item/weapon/implanter/nanoaug/radar/New()
+ src.imp = new /obj/item/weapon/implant/nanoaug/radar( src )
+ ..()
+ update()
+
+/obj/item/weapon/implanter/nanoaug/electrichands
+ name = "Nanoaugmentation Implaner (Electric Hands)"
+
+/obj/item/weapon/implanter/nanoaug/electrichands/New()
+ src.imp = new /obj/item/weapon/implant/nanoaug/electrichands( src )
+ ..()
+ update()
+
+/obj/item/weapon/implanter/nanoaug/eswordsynth
+ name = "Nanoaugmentation Implaner (Energy Blade Synthesizer)"
+
+/obj/item/weapon/implanter/nanoaug/eswordsynth/New()
+ src.imp = new /obj/item/weapon/implant/nanoaug/eswordsynth( src )
+ ..()
+ update()
+
+/obj/item/weapon/implanter/nanoaug/rebreather
+ name = "Nanoaugmentation Implaner (Bioelectric Rebreather)"
+
+/obj/item/weapon/implanter/nanoaug/rebreather/New()
+ src.imp = new /obj/item/weapon/implant/nanoaug/rebreather( src )
+ ..()
+ update()
+
+/obj/item/weapon/implanter/nanoaug/dermalarmor
+ name = "Nanoaugmentation Implaner (Skin-intergrated Dermal Armor)"
+
+/obj/item/weapon/implanter/nanoaug/dermalarmor/New()
+ src.imp = new /obj/item/weapon/implant/nanoaug/dermalarmor( src )
+ ..()
+ update()
+
+/obj/item/weapon/implanter/nanoaug/reflexes
+ name = "Nanoaugmentation Implaner (Combat Reflexes)"
+
+/obj/item/weapon/implanter/nanoaug/reflexes/New()
+ src.imp = new /obj/item/weapon/implant/nanoaug/reflexes( src )
+ ..()
+ update()
+
+/obj/item/weapon/implanter/nanoaug/nanoregen
+ name = "Nanoaugmentation Implaner (Regenerative Nanobots)"
+
+/obj/item/weapon/implanter/nanoaug/nanoregen/New()
+ src.imp = new /obj/item/weapon/implant/nanoaug/nanoregen( src )
+ ..()
+ update()
+
+
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index 3d83483ef90..358c0fb40e8 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -35,7 +35,7 @@ KNIFE
del(bite)
src.icon_state = "fork"
else if(user.zone_sel.selecting == "eyes")
- if((user.mutations & CLUMSY) && prob(50))
+ if((CLUMSY in user.mutations) && prob(50))
M = user
return eyestab(M, user)
else
@@ -90,7 +90,7 @@ KNIFE
// ROLLING PIN
/* //Honestly this doesn't even work and is very silly. -- Erthilo
/obj/item/weapon/kitchen/rollingpin/attack(mob/M as mob, mob/living/user as mob)
- if ((user.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in user.mutations) && prob(50))
user << "\red The [src] slips out of your hand and hits your head."
user.take_organ_damage(10)
user.Paralyse(2)
@@ -130,7 +130,7 @@ KNIFE
// KNIFE
/obj/item/weapon/kitchen/utensil/knife/attack(target as mob, mob/living/user as mob)
- if ((user.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in user.mutations) && prob(50))
user << "\red You accidentally cut yourself with the [src]."
user.take_organ_damage(20)
return
@@ -153,7 +153,7 @@ KNIFE
sleep(rand(2,4))
- if((user.mutations & CLUMSY) && prob(50)) //What if he's a clown?
+ if((CLUMSY in user.mutations) && prob(50)) //What if he's a clown?
M << "\red You accidentally slam yourself with the [src]!"
M.Weaken(1)
user.take_organ_damage(2)
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index 8e88a50278d..89759fc9653 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -1082,9 +1082,9 @@ CIRCULAR SAW
if(!istype(M))
return ..()
- //if(M.mutations & HUSK) return ..()
+ //if(NOCLONE in M.mutations) return ..()
- if((user.mutations & CLUMSY) && prob(50))
+ if((CLUMSY in user.mutations) && prob(50))
M = user
return eyestab(M,user)
@@ -1488,12 +1488,11 @@ CIRCULAR SAW
////////////////
//CIRCULAR SAW//
////////////////
-
/obj/item/weapon/circular_saw/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
if(!istype(M))
return ..()
- if((user.mutations & CLUMSY) && prob(50))
+ if((CLUMSY in user.mutations) && prob(50))
M = user
return eyestab(M,user)
@@ -1673,7 +1672,7 @@ CIRCULAR SAW
/obj/item/weapon/surgical_tool/attack(mob/living/carbon/human/M as mob, mob/living/carbon/user as mob)
if(!istype(M, /mob))
return
- if((usr.mutations & 16) && prob(50))
+ if((CLUMSY in user.mutations) && prob(50))
M << "\red You stab yourself in the eye."
M.disabilities |= 128
M.weakened += 4
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index 42204aeb922..764522598ed 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -4,6 +4,7 @@ SWORD
BLADE
AXE
STUN BATON
+ENERGY SHIELD (where else should i even put this)
*/
@@ -22,7 +23,7 @@ STUN BATON
color = pick("red","blue","green","purple")
/obj/item/weapon/melee/energy/sword/attack_self(mob/living/user as mob)
- if ((user.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in user.mutations) && prob(50))
user << "\red You accidentally cut yourself with [src]."
user.take_organ_damage(5,5)
active = !active
@@ -104,7 +105,7 @@ STUN BATON
/obj/item/weapon/melee/baton/attack_self(mob/user as mob)
src.status = !( src.status )
- if ((usr.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in user.mutations) && prob(50))
usr << "\red You grab the stunbaton on the wrong side."
usr.Paralyse(60)
return
@@ -120,7 +121,7 @@ STUN BATON
return
/obj/item/weapon/melee/baton/attack(mob/M as mob, mob/user as mob)
- if ((usr.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in usr.mutations) && prob(50))
usr << "\red You grab the stunbaton on the wrong side."
usr.Weaken(30)
return
@@ -165,7 +166,7 @@ STUN BATON
R.cell.charge -= 20
else
charges--
- if (M.stuttering < 1 && (!(M.mutations & HULK) && M.canstun) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
+ if (M.stuttering < 1 && (!(HULK in M.mutations) && M.canstun) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
M.stuttering = 1
M.Stun(1)
M.Weaken(1)
@@ -176,7 +177,7 @@ STUN BATON
R.cell.charge -= 20
else
charges--
- if (M.stuttering < 10 && (!(M.mutations & HULK) && M.canstun) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
+ if (M.stuttering < 10 && (!(HULK in M.mutations) && M.canstun) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
M.stuttering = 10
M.Stun(10)
M.Weaken(10)
@@ -193,7 +194,7 @@ STUN BATON
charges -= 5
/obj/item/weapon/melee/classic_baton/attack(mob/M as mob, mob/living/user as mob)
- if ((user.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in user.mutations) && prob(50))
user << "\red You club yourself over the head."
user.Weaken(3 * force)
if(ishuman(user))
@@ -215,7 +216,7 @@ STUN BATON
if (user.a_intent == "hurt")
if(!..()) return
playsound(src.loc, "swing_hit", 50, 1, -1)
- if (M.stuttering < 8 && (!(M.mutations & HULK)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
+ if (M.stuttering < 8 && (!(HULK in M.mutations)) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
M.stuttering = 8
M.Stun(8)
M.Weaken(8)
@@ -227,3 +228,29 @@ STUN BATON
M.Weaken(5)
for(var/mob/O in viewers(M))
if (O.client) O.show_message("\red [M] has been stunned with the police baton by [user]!", 1, "\red You hear someone fall", 2)
+
+/obj/item/weapon/shield/energy/IsShield()
+ if(active)
+ return 1
+ else
+ return 0
+
+/obj/item/weapon/shield/energy/attack_self(mob/living/user as mob)
+ if ((CLUMSY in user.mutations) && prob(50))
+ user << "\red You beat yourself in the head with [src]."
+ user.take_organ_damage(5)
+ active = !active
+ if (active)
+ force = 10
+ icon_state = "eshield[active]"
+ w_class = 4
+ playsound(user, 'saberon.ogg', 50, 1)
+ user << "\blue [src] is now active."
+ else
+ force = 3
+ icon_state = "eshield[active]"
+ w_class = 1
+ playsound(user, 'saberoff.ogg', 50, 1)
+ user << "\blue [src] can now be concealed."
+ add_fingerprint(user)
+ return
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 7f177066d1e..3cd63991ebc 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -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
/*
CONTAINS:
@@ -36,7 +36,7 @@ WELDINGTOOOL
if(!istype(M)) return ..()
if(user.zone_sel.selecting != "eyes" && user.zone_sel.selecting != "head")
return ..()
- if((user.mutations & CLUMSY) && prob(50))
+ if((CLUMSY in user.mutations) && prob(50))
M = user
return eyestab(M,user)
diff --git a/code/game/objects/new_year.dm b/code/game/objects/new_year.dm
index 4bf649b5542..3398a7e4b61 100644
--- a/code/game/objects/new_year.dm
+++ b/code/game/objects/new_year.dm
@@ -60,7 +60,7 @@
/obj/item/weapon/firbang/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
if (user.equipped() == src)
- if ((user.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in usr.mutations) && prob(50))
user << "\red Huh? How does this thing work?!"
src.state = 1
src.icon_state = "flashbang1"
@@ -108,7 +108,7 @@
/obj/item/weapon/firbang/attack_self(mob/user as mob)
if (!src.state)
- if (user.mutations & CLUMSY)
+ if (CLUMSY in user.mutations)
user << "\red Huh? How does this thing work?!"
spawn( 5 )
prime()
diff --git a/code/game/objects/secstorage/sbriefcase.dm b/code/game/objects/secstorage/sbriefcase.dm
index 5d31e306b1c..b2afa199f97 100644
--- a/code/game/objects/secstorage/sbriefcase.dm
+++ b/code/game/objects/secstorage/sbriefcase.dm
@@ -16,7 +16,7 @@
new /obj/item/weapon/pen(src)
/obj/item/weapon/secstorage/sbriefcase/attack(mob/M as mob, mob/living/user as mob)
- if ((user.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in user.mutations) && prob(50))
user << "\red The [src] slips out of your hand and hits your head."
user.take_organ_damage(10)
user.Paralyse(2)
diff --git a/code/game/objects/storage/bible.dm b/code/game/objects/storage/bible.dm
index 6ce4abd47cf..6166c2c6ad1 100644
--- a/code/game/objects/storage/bible.dm
+++ b/code/game/objects/storage/bible.dm
@@ -49,7 +49,7 @@
user.take_organ_damage(0,10)
return
- if ((user.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in user.mutations) && prob(50))
user << "\red The [src] slips out of your hand and hits your head."
user.take_organ_damage(10)
user.Paralyse(20)
@@ -62,10 +62,10 @@
if(M.mind && (M.mind.assigned_role == "Chaplain"))
user << "\red You can't heal yourself!"
return
- if((M.mind in ticker.mode.cult) && (prob(20)))
+ /*if((M.mind in ticker.mode.cult) && (prob(20)))
M << "\red The power of [src.deity_name] clears your mind of heresy!"
user << "\red You see how [M]'s eyes become clear, the cult no longer holds control over him!"
- ticker.mode.remove_cultist(M.mind)
+ ticker.mode.remove_cultist(M.mind)*/
if ((istype(M, /mob/living/carbon/human) && prob(60)))
bless(M)
for(var/mob/O in viewers(M, null))
diff --git a/code/game/objects/storage/briefcase.dm b/code/game/objects/storage/briefcase.dm
index fc7d6cd9396..6413a66eec6 100644
--- a/code/game/objects/storage/briefcase.dm
+++ b/code/game/objects/storage/briefcase.dm
@@ -11,7 +11,7 @@
/obj/item/weapon/storage/briefcase/attack(mob/M as mob, mob/living/user as mob)
//..()
- if ((user.mutations & CLUMSY) && prob(50))
+ if ((CLUMSY in user.mutations) && prob(50))
user << "\red The [src] slips out of your hand and hits your head."
user.take_organ_damage(10)
user.Paralyse(2)
diff --git a/code/game/objects/tables_racks.dm b/code/game/objects/tables_racks.dm
index 7cbe88a9e66..1ffe6a64c7b 100644
--- a/code/game/objects/tables_racks.dm
+++ b/code/game/objects/tables_racks.dm
@@ -43,7 +43,7 @@ TABLE AND RACK OBJECT INTERATIONS
/obj/structure/table/attack_paw(mob/user as mob)
- if ((usr.mutations & HULK))
+ if ((HULK in usr.mutations))
usr << "\blue You destroy the table."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
@@ -103,7 +103,7 @@ TABLE AND RACK OBJECT INTERATIONS
/obj/structure/table/attack_hand(mob/user as mob)
- if ((usr.mutations & HULK))
+ if ((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
usr << "\blue You destroy the table."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
diff --git a/code/game/objects/uplinks.dm b/code/game/objects/uplinks.dm
index 568e5974993..c431b4c5890 100644
--- a/code/game/objects/uplinks.dm
+++ b/code/game/objects/uplinks.dm
@@ -1,3 +1,5 @@
+//This could either be split into the proper DM files or placed somewhere else all together, but it'll do for now -Nodrak
+
/*
SYNDICATE UPLINKS
@@ -19,14 +21,19 @@ A list of items and costs is stored under the datum of every game mode, alongsid
var/welcome // Welcoming menu message
var/menu_message = "" // The actual menu text
var/items // List of items
+ var/item_data // raw item text
var/list/ItemList // Parsed list of items
var/uses // Numbers of crystals
+ var/uplink_data // designated uplink items
// List of items not to shove in their hands.
var/list/NotInHand = list(/obj/machinery/singularity_beacon/syndicate)
New()
welcome = ticker.mode.uplink_welcome
- items = dd_replacetext(ticker.mode.uplink_items, "\n", "") // Getting the text string of items
+ if(!item_data)
+ items = dd_replacetext(ticker.mode.uplink_items, "\n", "") // Getting the text string of items
+ else
+ items = dd_replacetext(item_data)
ItemList = dd_text2list(src.items, ";") // Parsing the items text string
uses = ticker.mode.uplink_uses
diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm
index 06d523e4128..36137ab6cf2 100644
--- a/code/game/objects/weapons.dm
+++ b/code/game/objects/weapons.dm
@@ -153,7 +153,7 @@
user << "\blue You arm the mousetrap."
else
icon_state = "mousetrap"
- if((user.getBrainLoss() >= 60 || user.mutations & CLUMSY) && prob(50))
+ if(( (user.getBrainLoss() >= 60 || (CLUMSY in user.mutations)) && prob(50)))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
@@ -170,7 +170,7 @@
/obj/item/weapon/mousetrap/attack_hand(mob/user as mob)
if(armed)
- if((user.getBrainLoss() >= 60 || user.mutations & CLUMSY) && prob(50))
+ if(( (user.getBrainLoss() >= 60 || CLUMSY in user.mutations)) && prob(50))
var/which_hand = "l_hand"
if(!user.hand)
which_hand = "r_hand"
diff --git a/code/game/objects/window.dm b/code/game/objects/window.dm
index ea12961dda7..77368697ec1 100644
--- a/code/game/objects/window.dm
+++ b/code/game/objects/window.dm
@@ -93,7 +93,7 @@
//These all need to be rewritten to use visiblemessage()
/obj/structure/window/attack_hand()
- if ((usr.mutations & HULK))
+ if ((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
usr << "\blue You smash through the window."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
@@ -113,7 +113,7 @@
/obj/structure/window/attack_paw()
- if ((usr.mutations & HULK))
+ if ((HULK in usr.mutations))
usr << "\blue You smash through the window."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
diff --git a/code/game/throwing.dm b/code/game/throwing.dm
index 149296f585e..3a01d772a0d 100644
--- a/code/game/throwing.dm
+++ b/code/game/throwing.dm
@@ -1,6 +1,6 @@
/mob/living/carbon/proc/toggle_throw_mode()
if(!equipped())//Not holding anything
- if(mutations & TK)
+ if(TK in mutations)
if (hand)
l_hand = new/obj/item/tk_grab(src)
l_hand:host = src
@@ -99,7 +99,8 @@
if(istype(A,/mob/living))
if(A:lying) continue
src.throw_impact(A)
- src.throwing = 0
+ if(src.throwing == 1)
+ src.throwing = 0
if(isobj(A))
if(A.density && !A.CanPass(src,target)) // **TODO: Better behaviour for windows
// which are dense, but shouldn't always stop movement
@@ -110,7 +111,22 @@
if(istype(hit_atom,/mob/living))
var/mob/living/M = hit_atom
M.visible_message("\red [hit_atom] has been hit by [src].")
- if(src.vars.Find("throwforce"))
+
+ if(!istype(src, /obj/item)) // this is a big item that's being thrown at them~
+
+ if(istype(M, /mob/living/carbon/human))
+ var/armor_block = M:run_armor_check("chest", "melee")
+ M:apply_damage(rand(20,45), BRUTE, "chest", armor_block)
+
+ visible_message("\red [M] has been knocked down by the force of [src]!")
+ M:apply_effect(rand(4,12), WEAKEN, armor_block)
+
+ M:UpdateDamageIcon()
+ else
+ M.take_organ_damage(rand(20,45))
+
+
+ else if(src.vars.Find("throwforce"))
M.take_organ_damage(src:throwforce)
log_attack("[hit_atom] ([M.ckey]) was hit by [src] thrown by ([src.fingerprintslast])")
@@ -141,8 +157,13 @@
/atom/movable/proc/throw_at(atom/target, range, speed)
if(!target || !src) return 0
//use a modified version of Bresenham's algorithm to get from the atom's current position to that of the target
+
src.throwing = 1
+ if(usr)
+ if((HULK in usr.mutations) || (SUPRSTR in usr.augmentations))
+ src.throwing = 2 // really strong throw!
+
var/dist_x = abs(target.x - src.x)
var/dist_y = abs(target.y - src.y)
diff --git a/code/game/turf.dm b/code/game/turf.dm
index ac32981a41f..380f281f108 100644
--- a/code/game/turf.dm
+++ b/code/game/turf.dm
@@ -366,7 +366,7 @@
dismantle_wall()
/turf/simulated/wall/attack_paw(mob/user as mob)
- if ((user.mutations & HULK))
+ if ((HULK in user.mutations))
if (prob(40))
usr << text("\blue You smash through the wall.")
dismantle_wall(1)
@@ -396,7 +396,7 @@
return
/turf/simulated/wall/attack_hand(mob/user as mob)
- if ((user.mutations & HULK))
+ if ((HULK in user.mutations) || (SUPRSTR in user.augmentations))
if (prob(40))
usr << text("\blue You smash through the wall.")
dismantle_wall(1)
diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm
index 99812a6fbc1..cf4de6539e5 100644
--- a/code/modules/chemical/Chemistry-Reagents.dm
+++ b/code/modules/chemical/Chemistry-Reagents.dm
@@ -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"
diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm
index c2c280619ab..26365249110 100644
--- a/code/modules/chemical/Chemistry-Tools.dm
+++ b/code/modules/chemical/Chemistry-Tools.dm
@@ -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))
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index 397b68839a5..d7ffef65b03 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -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)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm
index f83b1e4bba9..5ab8023f2e2 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/life.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm
@@ -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
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index 76406ea8a87..5088bec1929 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -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 You fail to push [tmob]'s fat ass out of the way."
@@ -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)
diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm
index 5025d724f7d..a6197ad6259 100644
--- a/code/modules/mob/living/carbon/alien/larva/life.dm
+++ b/code/modules/mob/living/carbon/alien/larva/life.dm
@@ -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
diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm
index ea528b7e03f..f92036b423e 100644
--- a/code/modules/mob/living/carbon/brain/life.dm
+++ b/code/modules/mob/living/carbon/brain/life.dm
@@ -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
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 8da3cd6a383..f0924773417 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -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))
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index a2599014cd9..f634541e611 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -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
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/hud.dm b/code/modules/mob/living/carbon/human/hud.dm
index 086271d8d6f..d489bf24543 100644
--- a/code/modules/mob/living/carbon/human/hud.dm
+++ b/code/modules/mob/living/carbon/human/hud.dm
@@ -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
+
+
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 27cd8e12686..811e58b2e7b 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -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
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index b5ced7ef8bb..7bbc891f678 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -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 [M] has punched [src]!")
@@ -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 [M] has shocked [src] with [gendertxt] bare hands!")
+ M.attack_log += text("\[[time_stamp()]\] Used Electric Hands nanoaug power on [src.name] ([src.ckey])")
+ src.attack_log += text("\[[time_stamp()]\] Has been shocked by [M.name] with the Electric Hands nanoaug ([M.ckey])")
+
+ 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("[M.name] ([M.ckey]) used Electric Hands nanoaug on [src.name] ([src.ckey]), shocking them ")
+
+
+ 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()]\] Punched [src.name] ([src.ckey])")
src.attack_log += text("\[[time_stamp()]\] Has been punched by [M.name] ([M.ckey])")
@@ -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"))
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 528dc9028f3..2ece10b0b20 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -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)
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 0f3eaa3e508..d72b6fca9ff 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -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 [message]")
+ 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()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 471d28eaf0b..3874e2b3767 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -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
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index fc3ff215c6d..59b8eb1f9a8 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -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 [M] has shocked [src] with [gendertxt] bare hands!")
+ 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
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index e4baace6694..33b6ed641b5 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -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
\ No newline at end of file
+ changeling.geneticdamage = changeling.geneticdamage-1
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index f97a0aa2ef1..06ec610f526 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -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 You fail to push [tmob]'s fat ass out of the way."
now_pushing = 0
@@ -167,7 +167,7 @@
for(var/mob/O in viewers(src, null))
O.show_message(text("\red [M.name] has bit []!", src), 1)
var/damage = rand(1, 5)
- if (mutations & HULK) damage += 10
+ if (HULK in mutations) damage += 10
adjustBruteLoss(damage)
updatehealth()
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index 78e4257cf86..19c10cedb4d 100644
--- a/code/modules/mob/living/damage_procs.dm
+++ b/code/modules/mob/living/damage_procs.dm
@@ -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))
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 0695669ef39..20d6de34bd1 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -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)
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index 3c8f5f5f5ca..efda4d97562 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -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
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index c3e26236073..e8523031224 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -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 You fail to push [tmob]'s fat ass out of the way."
now_pushing = 0
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 7ef6542467b..855780cf297 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -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
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 7f887d4215b..73968a1a7c1 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -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)
diff --git a/code/modules/mob/screen.dm b/code/modules/mob/screen.dm
index 1647152ada4..944ef8122c3 100644
--- a/code/modules/mob/screen.dm
+++ b/code/modules/mob/screen.dm
@@ -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 [] is trying to break \the [usr:handcuffed]!", 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 [] is trying to break out of \his straight jacket!", usr), 1)
diff --git a/code/modules/mob/simple_animal/constructs.dm b/code/modules/mob/simple_animal/constructs.dm
index 7f9e41af6e9..74644fe668d 100644
--- a/code/modules/mob/simple_animal/constructs.dm
+++ b/code/modules/mob/simple_animal/constructs.dm
@@ -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 You fail to push [tmob]'s fat ass out of the way."
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 You fail to push [tmob]'s fat ass out of the way."
now_pushing = 0
diff --git a/code/modules/mob/simple_animal/corgi.dm b/code/modules/mob/simple_animal/corgi.dm
index 504c81d8faa..09eb81ce2f5 100644
--- a/code/modules/mob/simple_animal/corgi.dm
+++ b/code/modules/mob/simple_animal/corgi.dm
@@ -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 You fail to push [tmob]'s fat ass out of the way."
now_pushing = 0
- return
+ return*/
if(tmob.nopush)
now_pushing = 0
return
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index fac0cc5a842..6592f15da72 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -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)
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 3f9cc581540..2da8917d376 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -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!"
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 99e93705c4b..8c1c43e6a9c 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -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()
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index c23d590860f..5d9c16139a6 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -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.
diff --git a/code/setup.dm b/code/setup.dm
index 0208423c852..9983f78497f 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -1,3 +1,5 @@
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+
#define PI 3.1415
#define R_IDEAL_GAS_EQUATION 8.31 //kPa*L/(K*mol)
@@ -136,52 +138,52 @@ var/MAX_EXPLOSION_RANGE = 14
#define HEADSPACE 4 // head wear protects against space
-#define MASKINTERNALS 8 // mask allows internals
-#define SUITSPACE 8 // suit protects against space
+#define MASKINTERNALS 8 // mask allows internals
+#define SUITSPACE 8 // suit protects against space
-#define USEDELAY 16 // 1 second extra delay on use (Can be used once every 2s)
-#define NODELAY 32768 // 1 second attackby delay skipped (Can be used once every 0.2s). Most objects have a 1s attackby delay, which doesn't require a flag.
-#define NOSHIELD 32 // weapon not affected by shield
-#define CONDUCT 64 // conducts electricity (metal etc.)
-#define FPRINT 256 // takes a fingerprint
-#define ON_BORDER 512 // item has priority to check when entering or leaving
+#define USEDELAY 16 // 1 second extra delay on use (Can be used once every 2s)
+#define NODELAY 32768 // 1 second attackby delay skipped (Can be used once every 0.2s). Most objects have a 1s attackby delay, which doesn't require a flag.
+#define NOSHIELD 32 // weapon not affected by shield
+#define CONDUCT 64 // conducts electricity (metal etc.)
+#define FPRINT 256 // takes a fingerprint
+#define ON_BORDER 512 // item has priority to check when entering or leaving
-#define GLASSESCOVERSEYES 1024
-#define MASKCOVERSEYES 1024 // get rid of some of the other retardation in these flags
-#define HEADCOVERSEYES 1024 // feel free to realloc these numbers for other purposes
-#define MASKCOVERSMOUTH 2048 // on other items, these are just for mask/head
-#define HEADCOVERSMOUTH 2048
+#define GLASSESCOVERSEYES 1024
+#define MASKCOVERSEYES 1024 // get rid of some of the other retardation in these flags
+#define HEADCOVERSEYES 1024 // feel free to realloc these numbers for other purposes
+#define MASKCOVERSMOUTH 2048 // on other items, these are just for mask/head
+#define HEADCOVERSMOUTH 2048
-#define NOSLIP 1024 //prevents from slipping on wet floors, in space etc
+#define NOSLIP 1024 //prevents from slipping on wet floors, in space etc
#define OPENCONTAINER 4096 // is an open container for chemistry purposes
// #define ONESIZEFITSALL 8192 // can be worn by fatties (or children? ugh)
-#define NOREACT 16384 //Reagents dont' react inside this container.
+#define NOREACT 16384 //Reagents dont' react inside this container.
-#define BLOCKHAIR 32768 // temporarily removes the user's hair icon
+#define BLOCKHAIR 32768 // temporarily removes the user's hair icon
#define PLASMAGUARD 65536 //Does not get contaminated by plasma.
//flags for pass_flags
-#define PASSTABLE 1
-#define PASSGLASS 2
-#define PASSGRILLE 4
-#define PASSBLOB 8
+#define PASSTABLE 1
+#define PASSGLASS 2
+#define PASSGRILLE 4
+#define PASSBLOB 8
//turf-only flags
-#define NOJAUNT 1
+#define NOJAUNT 1
//Bit flags for the flags_inv variable, which determine when a piece of clothing hides another. IE a helmet hiding glasses.
-#define HIDEGLOVES 1 //APPLIES ONLY TO THE EXTERIOR SUIT!!
-#define HIDESUITSTORAGE 2 //APPLIES ONLY TO THE EXTERIOR SUIT!!
-#define HIDEJUMPSUIT 4 //APPLIES ONLY TO THE EXTERIOR SUIT!!
-#define HIDESHOES 8 //APPLIES ONLY TO THE EXTERIOR SUIT!!
-#define HIDEMASK 1 //APPLIES ONLY TO HELMETS!!
-#define HIDEEARS 2 //APPLIES ONLY TO HELMETS!!
-#define HIDEEYES 4 //APPLIES ONLY TO HELMETS!!
+#define HIDEGLOVES 1 //APPLIES ONLY TO THE EXTERIOR SUIT!!
+#define HIDESUITSTORAGE 2 //APPLIES ONLY TO THE EXTERIOR SUIT!!
+#define HIDEJUMPSUIT 4 //APPLIES ONLY TO THE EXTERIOR SUIT!!
+#define HIDESHOES 8 //APPLIES ONLY TO THE EXTERIOR SUIT!!
+#define HIDEMASK 1 //APPLIES ONLY TO HELMETS!!
+#define HIDEEARS 2 //APPLIES ONLY TO HELMETS!!
+#define HIDEEYES 4 //APPLIES ONLY TO HELMETS!!
//Cant seem to find a mob bitflags area other than the powers one
@@ -202,32 +204,88 @@ var/MAX_EXPLOSION_RANGE = 14
#define HAND_LEFT 512
#define HAND_RIGHT 1024
#define HANDS 1536
-
#define FULL_BODY 2047
+/*
//bitflags for mutations
-var/const/TK =(1<<0)
-var/const/COLD_RESISTANCE =(1<<1)
-var/const/XRAY =(1<<2)
-var/const/HULK =(1<<3)
-var/const/CLUMSY =(1<<4)
-var/const/FAT =(1<<5)
-var/const/HUSK =(1<<6)
-var/const/LASER =(1<<7)
-var/const/HEAL =(1<<8)
-var/const/mNobreath =(1<<9)
-var/const/mRemote =(1<<10)
-var/const/mRegen =(1<<11)
-var/const/mRun =(1<<12)
-var/const/mRemotetalk =(1<<13)
-var/const/mMorph =(1<<14)
-var/const/mBlend =(1<<15)
-//the "&" operator cannot go higher than (2^16)-1
-var/const/mHallucination =(1<<0)
-var/const/mFingerprints =(1<<1)
-var/const/mShock =(1<<2)
-var/const/mSmallsize =(1<<3)
-var/const/NOCLONE =(1<<4)
+ // Extra powers:
+#define SHADOW (1<<10) // shadow teleportation (create in/out portals anywhere) (25%)
+#define SCREAM (1<<11) // supersonic screaming (25%)
+#define EXPLOSIVE (1<<12) // exploding on-demand (15%)
+#define REGENERATION (1<<13) // superhuman regeneration (30%)
+#define REPROCESSOR (1<<14) // eat anything (50%)
+#define SHAPESHIFTING (1<<15) // take on the appearance of anything (40%)
+#define PHASING (1<<16) // ability to phase through walls (40%)
+#define SHIELD (1<<17) // shielding from all projectile attacks (30%)
+#define SHOCKWAVE (1<<18) // attack a nearby tile and cause a massive shockwave, knocking most people on their asses (25%)
+#define ELECTRICITY (1<<19) // ability to shoot electric attacks (15%)
+
+
+ // Nanoaugmentations:
+#define SUPRSTR (1<<20) // super strength
+#define RADAR (1<<21) // on-screen mob radar
+#define ELECTRICHANDS (1<<22) // electric hands
+#define ESWORDSYNTH (1<<23) // esword synthesizer
+#define REBREATHER (1<<24) // removes the need to breathe
+#define DERMALARMOR (1<<25) // 35% damage decrease
+#define REFLEXES (1<<26) // dodge 50% of projectiles, dodge 25% of melee attacks
+#define NANOREGEN (1<<27) // regenerative nanobots, -3 all damage types per second
+*/
+
+// String identifiers for associative list lookup
+
+// mob/var/list/mutations
+
+ // Generic mutations:
+#define TK 1
+#define COLD_RESISTANCE 2
+#define XRAY 3
+#define HULK 4
+#define CLUMSY 5
+#define FAT 6
+#define HUSK 7
+#define NOCLONE 8
+
+
+ // Extra powers:
+#define LASER 9 // harm intent - click anywhere to shoot lasers from eyes
+#define HEAL 10 // healing people with hands
+#define SHADOW 11 // shadow teleportation (create in/out portals anywhere) (25%)
+#define SCREAM 12 // supersonic screaming (25%)
+#define EXPLOSIVE 13 // exploding on-demand (15%)
+#define REGENERATION 14 // superhuman regeneration (30%)
+#define REPROCESSOR 15 // eat anything (50%)
+#define SHAPESHIFTING 16 // take on the appearance of anything (40%)
+#define PHASING 17 // ability to phase through walls (40%)
+#define SHIELD 18 // shielding from all projectile attacks (30%)
+#define SHOCKWAVE 19 // attack a nearby tile and cause a massive shockwave, knocking most people on their asses (25%)
+#define ELECTRICITY 20 // ability to shoot electric attacks (15%)
+
+
+// mob/var/list/augmentations
+
+ // Nanoaugmentations:
+#define SUPRSTR 21 // super strength (hulk powers)
+#define RADAR 22 // on-screen mob radar
+#define ELECTRICHANDS 23 // electric hands
+#define ESWORDSYNTH 24 // esword synthesizer
+#define REBREATHER 25 // removes the need to breathe
+#define DERMALARMOR 26 // 35% damage decrease
+#define REFLEXES 27 // dodge 50% of projectiles
+#define NANOREGEN 28 // regenerative nanobots, -3 all damage types per second
+
+ // Other Mutations:
+#define mNobreath 100 // no need to breathe
+#define mRemote 101 // remote viewing
+#define mRegen 102 // health regen
+#define mRun 103 // no slowdown
+#define mRemotetalk 104 // remote talking
+#define mMorph 105 // changing appearance
+#define mBlend 106 // nothing (seriously nothing)
+#define mHallucination 107 // hallucinations
+#define mFingerprints 108 // no fingerprints
+#define mShock 109 // insulated hands
+#define mSmallsize 110 // table climbing
//mob/var/stat things
var/const/CONSCIOUS = 0
@@ -235,31 +293,31 @@ var/const/UNCONSCIOUS = 1
var/const/DEAD = 2
// channel numbers for power
-#define EQUIP 1
-#define LIGHT 2
-#define ENVIRON 3
-#define TOTAL 4 //for total power used only
+#define EQUIP 1
+#define LIGHT 2
+#define ENVIRON 3
+#define TOTAL 4 //for total power used only
// bitflags for machine stat variable
-#define BROKEN 1
-#define NOPOWER 2
-#define POWEROFF 4 // tbd
-#define MAINT 8 // under maintaince
-#define EMPED 16 // temporary broken by EMP pulse
+#define BROKEN 1
+#define NOPOWER 2
+#define POWEROFF 4 // tbd
+#define MAINT 8 // under maintaince
+#define EMPED 16 // temporary broken by EMP pulse
//bitflags for door switches.
-#define OPEN 1
-#define IDSCAN 2
-#define BOLTS 4
-#define SHOCK 8
-#define SAFE 16
+#define OPEN 1
+#define IDSCAN 2
+#define BOLTS 4
+#define SHOCK 8
+#define SAFE 16
-#define ENGINE_EJECT_Z 3
+#define ENGINE_EJECT_Z 3
//metal, glass, rod stacks
-#define MAX_STACK_AMOUNT_METAL 50
-#define MAX_STACK_AMOUNT_GLASS 50
-#define MAX_STACK_AMOUNT_RODS 60
+#define MAX_STACK_AMOUNT_METAL 50
+#define MAX_STACK_AMOUNT_GLASS 50
+#define MAX_STACK_AMOUNT_RODS 60
var/const/GAS_O2 = 1 << 0
var/const/GAS_N2 = 1 << 1
@@ -283,32 +341,54 @@ var/list/global_mutations = list() // list of hidden mutation things
//Damage things
-#define BRUTE "brute"
-#define BURN "fire"
-#define TOX "tox"
-#define OXY "oxy"
-#define CLONE "clone"
-#define HALLOSS "halloss"
+#define BRUTE "brute"
+#define BURN "fire"
+#define TOX "tox"
+#define OXY "oxy"
+#define CLONE "clone"
+#define HALLOSS "halloss"
-#define STUN "stun"
-#define WEAKEN "weaken"
-#define PARALYZE "paralize"
-#define IRRADIATE "irradiate"
-#define STUTTER "stutter"
-#define SLUR "slur"
-#define EYE_BLUR "eye_blur"
-#define DROWSY "drowsy"
+#define STUN "stun"
+#define WEAKEN "weaken"
+#define PARALYZE "paralize"
+#define IRRADIATE "irradiate"
+#define STUTTER "stutter"
+#define SLUR "slur"
+#define EYE_BLUR "eye_blur"
+#define DROWSY "drowsy"
var/static/list/scarySounds = list('thudswoosh.ogg','Taser.ogg','armbomb.ogg','hiss1.ogg','hiss2.ogg','hiss3.ogg','hiss4.ogg','hiss5.ogg','hiss6.ogg','Glassbr1.ogg','Glassbr2.ogg','Glassbr3.ogg','Welder.ogg','Welder2.ogg','airlock.ogg','clownstep1.ogg','clownstep2.ogg')
//Security levels
-#define SEC_LEVEL_GREEN 0
-#define SEC_LEVEL_BLUE 1
-#define SEC_LEVEL_RED 2
-#define SEC_LEVEL_DELTA 3
+#define SEC_LEVEL_GREEN 0
+#define SEC_LEVEL_BLUE 1
+#define SEC_LEVEL_RED 2
+#define SEC_LEVEL_DELTA 3
-#define TRANSITIONEDGE 7 //Distance from edge to move to another z-level
+#define TRANSITIONEDGE 7 //Distance from edge to move to another z-level
// Maximum and minimum character ages.
var/const/minimum_age = 20
-var/const/maximum_age = 65
\ No newline at end of file
+var/const/maximum_age = 65
+
+var/list/liftable_structures = list(\
+
+ /obj/machinery/autolathe, \
+ /obj/machinery/constructable_frame, \
+ /obj/machinery/hydroponics, \
+ /obj/machinery/computer, \
+ /obj/machinery/optable, \
+ /obj/machinery/dispenser, \
+ /obj/machinery/gibber, \
+ /obj/machinery/microwave, \
+ /obj/machinery/vending, \
+ /obj/machinery/seed_extractor, \
+ /obj/machinery/space_heater, \
+ /obj/machinery/recharge_station, \
+ /obj/machinery/flasher, \
+ /obj/structure/stool, \
+ /obj/structure/closet, \
+/* /obj/machinery/photocopier, \*/
+ /obj/structure/filingcabinet, \
+ /obj/structure/reagent_dispensers, \
+ /obj/machinery/portable_atmospherics/canister)
diff --git a/icons/effects/genetics.dmi b/icons/effects/genetics.dmi
index d9a8e5f9ed5..c756929a8e6 100644
Binary files a/icons/effects/genetics.dmi and b/icons/effects/genetics.dmi differ
diff --git a/icons/misc/radar.dmi b/icons/misc/radar.dmi
new file mode 100644
index 00000000000..b598ef27867
Binary files /dev/null and b/icons/misc/radar.dmi differ
diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi
index 72fc5b63a39..c88d1d416e8 100644
Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
index 4a95e0230b2..c27d40238a1 100644
Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 6b8eaf69893..751eb525faa 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 092741f0ca7..dd3cf018104 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index e2194d24f78..732465c0410 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index 61b0e4b5bac..d6882712789 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ
diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi
index 627aa5f0df0..6e53bfcff84 100755
Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ
diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi
index cd4855d2e01..46d59db1536 100644
Binary files a/icons/obj/weapons.dmi and b/icons/obj/weapons.dmi differ
diff --git a/sound/misc/interference.ogg b/sound/misc/interference.ogg
new file mode 100644
index 00000000000..e6d7b340028
Binary files /dev/null and b/sound/misc/interference.ogg differ