diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 67f3d77744..db6b9ed011 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 0be1763a9f..3a5686b67c 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 69936503fe..ff10315987 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 37cbc1fe3e..ca272f9452 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 c7f2663165..2033ecc568 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 ce47d8f39e..60ec3095a8 100644
Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index 004fb3eae0..eae9c08920 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"