diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 67f3d777443..db6b9ed0112 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -862,19 +862,6 @@
origin_tech = "combat=2;materials=2"
*/
-/obj/item/weapon/gun/projectile/detective
- desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
- name = ".38 revolver"
- icon_state = "detective"
- w_class = 3.0
- throw_speed = 2
- throw_range = 10
- force = 14.0
- m_amt = 1000
- origin_tech = "combat=2;materials=2"
-
-
-
/obj/item/weapon/hand_tele
name = "hand tele"
icon = 'device.dmi'
diff --git a/code/game/jobs/jobprocs.dm b/code/game/jobs/jobprocs.dm
index 0be1763a9f9..3a5686b67cd 100644
--- a/code/game/jobs/jobprocs.dm
+++ b/code/game/jobs/jobprocs.dm
@@ -609,7 +609,7 @@
src.loc = S.loc
// if(S.name == "Cyborg")
// src.Robotize()
- else
+ /*else
var/list/L = list()
for(var/area/arrival/start/S in world)
L += S
@@ -627,6 +627,7 @@
if(clear)
NL += T
src.loc = pick(NL)
+ */
if(src.mind.assigned_role == "Cyborg")
src << "YOU ARE GETTING BORGED NOW"
src.Robotize()
diff --git a/code/game/objects/devices/PDA/PDA.dm b/code/game/objects/devices/PDA/PDA.dm
index 69936503fef..ff10315987f 100644
--- a/code/game/objects/devices/PDA/PDA.dm
+++ b/code/game/objects/devices/PDA/PDA.dm
@@ -626,7 +626,7 @@
name = "PDA-[owner] ([ownjob])"
user << "\blue Card scanned."
else
- var/input=alert("Would you like to inert the card or update owner information?",,"Insert","Update")
+ var/input=alert("Would you like to insert the card or update owner information?",,"Insert","Update")
//Basic safety check. If either both objects are held by user or PDA is on ground and card is in hand.
if ( ( (src in user.contents) && (C in user.contents)) || (istype(loc, /turf) && in_range(src, user) && (C in user.contents)) )
diff --git a/code/game/objects/items/weapons/guns_new.dm b/code/game/objects/items/weapons/guns_new.dm
index 37cbc1fe3ed..ca272f94525 100644
--- a/code/game/objects/items/weapons/guns_new.dm
+++ b/code/game/objects/items/weapons/guns_new.dm
@@ -17,9 +17,9 @@ var/const/PROJECTILE_DART = 8
icon_state = "bullet"
density = 1
throwforce = 0.1 //an attempt to make it possible to shoot your way through space
- unacidable = 1//Just to be sure.
- anchored = 1.0
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
+ unacidable = 1 //Just to be sure.
+ anchored = 1 // I'm not sure if it is a good idea. Bullets sucked to space and curve trajectories near singularity could be awesome. --rastaf0
+ flags = FPRINT | TABLEPASS | CONDUCT | ONBELT // ONBELT???
var
def_zone = ""
damage_type = PROJECTILE_BULLET
@@ -58,25 +58,23 @@ var/const/PROJECTILE_DART = 8
icon_state = "cbbolt"
Bump(atom/A as mob|obj|turf|area)
+ if(firer && istype(A, /mob))
+ var/mob/M = A
+ if(!silenced)
+ visible_message("\red [A.name] has been shot by [firer.name].", "\blue You hear a [istype(src, /obj/item/projectile/beam) ? "gunshot" : "laser blast"].")
+ else
+ M << "\red You've been shot!"
+ if(istype(firer, /mob))
+ M.attack_log += text("[] []/[] shot []/[] with a []", world.time, firer, firer.ckey, M, M.ckey, src)
+ firer.attack_log += text("[] []/[] shot []/[] with a []", world.time, firer, firer.ckey, M, M.ckey, src)
+ else
+ M.attack_log += text("[] UNKOWN SUBJECT (No longer exists) shot []/[] with a []", world.time, M, M.ckey, src)
spawn(0)
if(A)
A.bullet_act(damage_type, src, def_zone)
if(istype(A,/turf) && !istype(src, /obj/item/projectile/beam))
for(var/obj/O in A)
O.bullet_act(damage_type, src, def_zone)
- if(firer && istype(A, /mob))
- var/mob/M = A
- if(!silenced)
- visible_message("\red [A.name] has been shot by [firer.name].", "\blue You hear a [istype(src, /obj/item/projectile/beam) ? "gunshot" : "laser blast"].")
- else
- if(M)
- if(M.client)
- M << "\red You've been shot!"
- if(istype(firer, /mob))
- M.attack_log += text("[] []/[] shot []/[] with a []", world.time, firer, firer.client, M, M.client, src)
- firer.attack_log += text("[] []/[] shot []/[] with a []", world.time, firer, firer.client, M, M.client, src)
- else
- M.attack_log += text("[] UNKOWN SUBJECT (No longer exists) shot []/[] with a []", world.time, M, M.client, src)
del(src)
return
@@ -201,8 +199,19 @@ var/const/PROJECTILE_DART = 8
for(var/i = 1, i <= 7, i++)
stored_ammo += new /obj/item/ammo_casing/c38(src)
update_icon()
+/*
+ shotgun
+ name = "ammo box (12gauge)"
+ desc = "A box of 12 gauge shell"
+ icon_state = "" //no sprite :'(
+ caliber = "shotgun"
+ m_amt = 25000
-
+ New()
+ BB = new /obj/item/projectile/shotgun(src)
+ src.pixel_x = rand(-10.0, 10)
+ src.pixel_y = rand(-10.0, 10)
+*/
///////////////////////////////////////////////
//////////////////////Guns/////////////////////
///////////////////////////////////////////////
@@ -259,7 +268,7 @@ var/const/PROJECTILE_DART = 8
return 0
New()
- for(var/i = 1, i <= 7, i++)
+ for(var/i = 1, i <= max_shells, i++)
loaded += new /obj/item/ammo_casing(src)
update_icon()
@@ -293,12 +302,12 @@ var/const/PROJECTILE_DART = 8
detective
desc = "A cheap Martian knock-off of a Smith & Wesson Model 10. Uses .38-Special rounds."
name = ".38 revolver"
- max_shells = 7
+ icon_state = "detective"
force = 14.0
caliber = "38"
New()
- for(var/i = 1, i <= 7, i++)
+ for(var/i = 1, i <= max_shells, i++)
loaded += new /obj/item/ammo_casing/c38(src)
update_icon()
@@ -323,6 +332,8 @@ var/const/PROJECTILE_DART = 8
caliber = "shotgun"
New()
+ for(var/i = 1, i <= max_shells, i++)
+ loaded += new /obj/item/ammo_casing/shotgun/beanbag(src)
update_icon()
combat
@@ -333,6 +344,10 @@ var/const/PROJECTILE_DART = 8
flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
max_shells = 8
origin_tech = "combat=3"
+ New()
+ for(var/i = 1, i <= max_shells, i++)
+ loaded += new /obj/item/ammo_casing/shotgun(src)
+ update_icon()
energy
icon_state = "energy"
@@ -395,7 +410,7 @@ var/const/PROJECTILE_DART = 8
icon_state = "caplaser"
desc = "This is an antique laser gun. All craftsmanship is of the highest quality. It is decorated with assistant leather and chrome. The object menaces with spikes of energy. On the item is an image of Space Station 13. The station is exploding."
force = 10
- origin_tech = null
+ origin_tech = null //forgotten technology of ancients lol
cyborg
load_into_chamber()
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index c7f26631650..2033ecc568f 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -439,7 +439,9 @@
// attack with hand - remove cell (if cover open) or interact with the APC
/obj/machinery/power/apc/attack_hand(mob/user)
- add_fingerprint(user)
+ if (!can_use())
+ return
+ src.add_fingerprint(user)
if(opened && (!istype(user, /mob/living/silicon)))
if(cell)
usr.put_in_hand(cell)
@@ -452,7 +454,8 @@
charging = 0
src.updateicon()
return
- if(stat & (BROKEN|MAINT)) return
+ if(stat & (BROKEN|MAINT))
+ return
if(ishuman(user))
if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
@@ -701,126 +704,169 @@
src.aidisabled = 0
src.updateDialog()
-/obj/machinery/power/apc/Topic(href, href_list)
- ..()
- if (((in_range(src, usr) && istype(src.loc, /turf))) || ((istype(usr, /mob/living/silicon) && !(src.aidisabled))))
- usr.machine = src
- if (href_list["apcwires"])
- var/t1 = text2num(href_list["apcwires"])
- if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) ))
- usr << "You need wirecutters!"
- return
- if (src.isWireColorCut(t1))
- src.mend(t1)
- else
- src.cut(t1)
- else if (href_list["pulse"])
- var/t1 = text2num(href_list["pulse"])
- if (!istype(usr.equipped(), /obj/item/device/multitool))
- usr << "You need a multitool!"
- return
- if (src.isWireColorCut(t1))
- usr << "You can't pulse a cut wire."
- return
- else
- src.pulse(t1)
- else if (href_list["lock"])
- coverlocked = !coverlocked
-
- else if (href_list["breaker"])
- operating = !operating
- src.update()
- updateicon()
-
- else if (href_list["cmode"])
- chargemode = !chargemode
- if(!chargemode)
- charging = 0
- updateicon()
-
- else if (href_list["eqp"])
- var/val = text2num(href_list["eqp"])
-
- equipment = (val==1) ? 0 : val
-
- updateicon()
- update()
-
- else if (href_list["lgt"])
- var/val = text2num(href_list["lgt"])
-
- lighting = (val==1) ? 0 : val
-
- updateicon()
- update()
- else if (href_list["env"])
- var/val = text2num(href_list["env"])
-
- environ = (val==1) ? 0 :val
-
- updateicon()
- update()
- else if( href_list["close"] )
- usr << browse(null, "window=apc")
- usr.machine = null
- return
- else if (href_list["close2"])
- usr << browse(null, "window=apcwires")
- usr.machine = null
- return
-
- else if (href_list["overload"])
- if( istype(usr, /mob/living/silicon) && !src.aidisabled )
- src.overload_lighting()
-
- else if (href_list["malfhack"])
- var/mob/living/silicon/ai/malfai = usr
- if( istype(malfai, /mob/living/silicon/ai) && !src.aidisabled )
- if (malfai.malfhacking)
- malfai << "You are already hacking an APC."
- return
- malfai << "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process."
- malfai.malfhack = src
- malfai.malfhacking = 1
- sleep(600)
- if (!src.aidisabled)
- malfai.malfhack = null
- malfai.malfhacking = 0
- if (ticker.mode.config_tag == "malfunction")
- if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
- ticker.mode:apcs++
- src.malfai = usr
- src.locked = 1
- if (src.cell)
- if (src.cell.charge > 0)
- src.cell.charge = 0
- cell.corrupt()
- src.malfhack = 1
- malfai << "Hack complete. The APC is now under your exclusive control. Discharging cell to fuse interface."
- updateicon()
-
- var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
- smoke.set_up(3, 0, src.loc)
- smoke.attach(src)
- smoke.start()
- var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- for(var/mob/M in viewers(src))
- M.show_message("\red The [src.name] suddenly lets out a blast of smoke and some sparks!", 3, "\red You hear sizzling electronics.", 2)
- else
- malfai << "Hack complete. The APC is now under your exclusive control. Unable to fuse interface due to insufficient cell charge."
- else
- malfai << "Hack complete. The APC is now under your exclusive control. Unable to fuse interface due to lack of cell to discharge."
-
-
- src.updateDialog()
- return
-
- else
+/obj/machinery/power/apc/proc/can_use() //used by attack_hand() and Topic()
+ if (usr.stat)
+ usr << "\red You must be conscious to use this [src]!"
+ return 0
+ if ( ! (istype(usr, /mob/living/carbon/human) || \
+ istype(usr, /mob/living/silicon) || \
+ istype(usr, /mob/living/carbon/monkey) /*&& ticker && ticker.mode.name == "monkey"*/) )
+ usr << "\red You don't have the dexterity to use this [src]!"
usr << browse(null, "window=apc")
usr.machine = null
+ return 0
+ if(usr.restrained())
+ usr << "\red You must have free hands to use this [src]"
+ return 0
+ if(usr.lying)
+ usr << "\red You must stand to use this [src]!"
+ return 0
+ if (istype(usr, /mob/living/silicon))
+ var/mob/living/silicon/ai/AI = usr
+ var/mob/living/silicon/robot/robot = usr
+ if ( \
+ src.aidisabled || \
+ malfhack && istype(malfai) && \
+ ( \
+ (istype(AI) && malfai!=AI) || \
+ (istype(robot) && (robot in malfai.connected_robots)) \
+ ) \
+ )
+ usr << "\red \The [src] have AI control disabled!"
+ usr << browse(null, "window=apc")
+ usr.machine = null
+ return 0
+ else
+ if ((!in_range(src, usr) || !istype(src.loc, /turf)))
+ usr << browse(null, "window=apc")
+ usr.machine = null
+ return 0
+ var/mob/living/carbon/human/H = usr
+ if (istype(H))
+ if(H.brainloss >= 60)
+ for(var/mob/M in viewers(src, null))
+ M << "\red [H] stares cluelessly at [src] and drools."
+ return 0
+ else if(prob(H.brainloss))
+ usr << "\red You momentarily forget how to use [src]."
+ return 0
+ return 1
+/obj/machinery/power/apc/Topic(href, href_list)
+ if (!can_use())
+ return
+ src.add_fingerprint(usr)
+ usr.machine = src
+ if (href_list["apcwires"])
+ var/t1 = text2num(href_list["apcwires"])
+ if (!( istype(usr.equipped(), /obj/item/weapon/wirecutters) ))
+ usr << "You need wirecutters!"
+ return
+ if (src.isWireColorCut(t1))
+ src.mend(t1)
+ else
+ src.cut(t1)
+ else if (href_list["pulse"])
+ var/t1 = text2num(href_list["pulse"])
+ if (!istype(usr.equipped(), /obj/item/device/multitool))
+ usr << "You need a multitool!"
+ return
+ if (src.isWireColorCut(t1))
+ usr << "You can't pulse a cut wire."
+ return
+ else
+ src.pulse(t1)
+ else if (href_list["lock"])
+ coverlocked = !coverlocked
+
+ else if (href_list["breaker"])
+ operating = !operating
+ src.update()
+ updateicon()
+
+ else if (href_list["cmode"])
+ chargemode = !chargemode
+ if(!chargemode)
+ charging = 0
+ updateicon()
+
+ else if (href_list["eqp"])
+ var/val = text2num(href_list["eqp"])
+
+ equipment = (val==1) ? 0 : val
+
+ updateicon()
+ update()
+
+ else if (href_list["lgt"])
+ var/val = text2num(href_list["lgt"])
+
+ lighting = (val==1) ? 0 : val
+
+ updateicon()
+ update()
+ else if (href_list["env"])
+ var/val = text2num(href_list["env"])
+
+ environ = (val==1) ? 0 :val
+
+ updateicon()
+ update()
+ else if( href_list["close"] )
+ usr << browse(null, "window=apc")
+ usr.machine = null
+ return
+ else if (href_list["close2"])
+ usr << browse(null, "window=apcwires")
+ usr.machine = null
+ return
+
+ else if (href_list["overload"])
+ if( istype(usr, /mob/living/silicon) && !src.aidisabled )
+ src.overload_lighting()
+
+ else if (href_list["malfhack"])
+ var/mob/living/silicon/ai/malfai = usr
+ if( istype(malfai, /mob/living/silicon/ai) && !src.aidisabled )
+ if (malfai.malfhacking)
+ malfai << "You are already hacking an APC."
+ return
+ malfai << "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process."
+ malfai.malfhack = src
+ malfai.malfhacking = 1
+ sleep(600)
+ if (!src.aidisabled)
+ malfai.malfhack = null
+ malfai.malfhacking = 0
+ if (ticker.mode.config_tag == "malfunction")
+ if (src.z == 1) //if (is_type_in_list(get_area(src), the_station_areas))
+ ticker.mode:apcs++
+ src.malfai = usr
+ src.locked = 1
+ if (src.cell)
+ if (src.cell.charge > 0)
+ src.cell.charge = 0
+ cell.corrupt()
+ src.malfhack = 1
+ malfai << "Hack complete. The APC is now under your exclusive control. Discharging cell to fuse interface."
+ updateicon()
+
+ var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
+ smoke.set_up(3, 0, src.loc)
+ smoke.attach(src)
+ smoke.start()
+ var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ for(var/mob/M in viewers(src))
+ M.show_message("\red The [src.name] suddenly lets out a blast of smoke and some sparks!", 3, "\red You hear sizzling electronics.", 2)
+ else
+ malfai << "Hack complete. The APC is now under your exclusive control. Unable to fuse interface due to insufficient cell charge."
+ else
+ malfai << "Hack complete. The APC is now under your exclusive control. Unable to fuse interface due to lack of cell to discharge."
+
+
+ src.updateDialog()
return
/obj/machinery/power/apc/proc/ion_act()
diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi
index ce47d8f39ea..60ec3095a89 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 004fb3eae05..eae9c08920f 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -129,7 +129,6 @@
#define FILE_DIR "icons/turf"
#define FILE_DIR "interface"
#define FILE_DIR "maps"
-#define FILE_DIR "maps/backup"
#define FILE_DIR "sound"
#define FILE_DIR "sound/ambience"
#define FILE_DIR "sound/announcer"