Moved into their own folder and got split into three files.
Damage  zones have been regrouped slightly to make it easier to deal with them. Currently the organ groups are head, l/r leg, l/r arm, and head.

Attacking:
Armor is properly checked.
Currently aiming for the chest gives a higher chance to stun whereas the head will stun for longer.
Stungloves/Disarm now show up in the attack log.
Stungloves ignore intent.

Silicon:
AI units can now move between cams that are not on the ss13 network.
Cyborg's alert screen should not longer pop up every time they get an alert if they have opened it once during the round.
Robot vision now uses the standard amount of energy.

Gamemodes:
Added Deuryn's unrev message.
Runes can only be examined if you are close to them.
Moved the Loyalty implants to the HoS' locker at the request of HerpA.
Nuke agents now come with explosive implants that will activate upon death.

Projectiles:
Once again went though the gun code and cleaned things up, it is much better now.
Bullet_act fixed up and most mobs now use the one in living, just overload it if they need to do something diff.
Freeze /caplaser/xbow no longer have an infinite loop.
Shotguns have to be pumped manually.

Went though the latest runtime log.

Power cells now use return on their give/use procs

Assemblies have been reworked and are nearly finished, just need to finish up the special assembly code, redo the signalers, and add one or two new assembly items.
Laying down will now only take 3 ticks to get up, from 5.

You can no longer punch people on the spawn screen.

This is a big one and was cleared by two heads, TK will only allow you to pick up items.  If you have an item in your hand it will act normal.

This revision got much larger than originally intended my tests show everything is working fine, but you never know.  Ill likely do more mob teaks in the next few days.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@2333 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
mport2004@gmail.com
2011-10-08 10:38:01 +00:00
parent ad80137505
commit 62e28c2abf
148 changed files with 6638 additions and 8653 deletions
+2 -2
View File
@@ -106,8 +106,8 @@
return result
/proc/setblock(istring, blocknumber, replacement, blocksize)
var/result
result = getleftblocks(istring, blocknumber, blocksize) + replacement + getrightblocks(istring, blocknumber, blocksize)
if(!istring || !blocknumber || !replacement || !blocksize) return 0
var/result = getleftblocks(istring, blocknumber, blocksize) + replacement + getrightblocks(istring, blocknumber, blocksize)
return result
/proc/add_zero2(t, u)
+3 -10
View File
@@ -211,17 +211,10 @@
bullet_act(var/obj/item/projectile/Proj)
for(var/i = 1, i<= Proj.mobdamage.len, i++)
switch(i)
if(1)
var/d = Proj.mobdamage[BRUTE]
health -= (d / max(src.brute_resist,1))
if(2)
var/d = Proj.mobdamage[BURN]
health -= (d / max(src.fire_resist,1))
//health -= Proj.damage
..()
if(!Proj) return
src.health -= Proj.damage
update()
return 0
attackby(var/obj/item/weapon/W, var/mob/user)
+2 -2
View File
@@ -15,7 +15,7 @@
desc = "A hood worn by the followers of Nar-Sie."
see_face = 0
flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES
armor = list(melee = 30, bullet = 10, laser = 5, taser = 5, bomb = 0, bio = 0, rad = 0)
armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0)
@@ -27,4 +27,4 @@
flags = FPRINT | TABLEPASS | ONESIZEFITSALL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade)
armor = list(melee = 50, bullet = 30, laser = 50, taser = 20, bomb = 25, bio = 10, rad = 0)
armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0)
@@ -208,7 +208,7 @@ This could be a lot better but I'm too tired atm.*/
return
if (targloc == curloc)
return
var/obj/item/projectile/dart/A = new /obj/item/projectile/dart(U.loc)
var/obj/item/projectile/energy/dart/A = new /obj/item/projectile/energy/dart(U.loc)
A.current = curloc
A.yo = targloc.y - curloc.y
A.xo = targloc.x - curloc.x
@@ -1382,9 +1382,8 @@ It is possible to destroy the net by the occupant or someone else.
bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
healthcheck()
return
return 0
ex_act(severity)
switch(severity)
+4 -1
View File
@@ -222,8 +222,11 @@
synd_mob.equip_if_possible(new /obj/item/weapon/card/id/syndicate(synd_mob), synd_mob.slot_wear_id)
synd_mob.equip_if_possible(new /obj/item/weapon/storage/backpack(synd_mob), synd_mob.slot_back)
synd_mob.equip_if_possible(new /obj/item/ammo_magazine/c45(synd_mob), synd_mob.slot_in_backpack)
synd_mob.equip_if_possible(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), synd_mob.slot_in_backpack) //Because it needed to be upgraded by someone - Micro
synd_mob.equip_if_possible(new /obj/item/weapon/reagent_containers/pill/cyanide(synd_mob), synd_mob.slot_in_backpack)
synd_mob.equip_if_possible(new /obj/item/weapon/gun/projectile/automatic/mini_uzi(synd_mob), synd_mob.slot_belt)
var/obj/item/weapon/implant/explosive/E = new/obj/item/weapon/implant/explosive(synd_mob)
E.imp_in = synd_mob
E.implanted = 1
return 1
+1 -1
View File
@@ -265,7 +265,7 @@ datum/objective/steal
var/global/possible_items_special[] = list(
"nuclear authentication disk" = /obj/item/weapon/disk/nuclear,
"nuclear gun" = /obj/item/weapon/gun/energy/nuclear,
"nuclear gun" = /obj/item/weapon/gun/energy/gun/nuclear,
"diamond drill" = /obj/item/weapon/pickaxe/diamonddrill,
"bag of holding" = /obj/item/weapon/storage/backpack/holding,
"hyper-capacity cell" = /obj/item/weapon/cell/hyper,
+1 -1
View File
@@ -172,7 +172,7 @@
if(rev_mind in revolutionaries)
revolutionaries -= rev_mind
rev_mind.special_role = null
rev_mind.current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary!</B></FONT>"
rev_mind.current << "\red <FONT size = 3><B>You have been brainwashed! You are no longer a revolutionary! Your memory is hazy from the time you were a rebel, and you cannot remember a thing!</B></FONT>"
update_rev_icons_removed(rev_mind)
for(var/mob/living/M in view(rev_mind.current))
M << "[rev_mind.current] looks like they just remembered their real allegiance!"
+2 -2
View File
@@ -141,8 +141,8 @@
var/turf/T = get_turf(src.loc)
if(T)
for(var/mob/M in T)
M.bullet_act(Proj, def_zone)
..()
Proj.on_hit(M,M.bullet_act(Proj, def_zone))
return
-72
View File
@@ -738,78 +738,6 @@ table tr:first-child th:first-child { border: none;}
spawn(rand(0,15))
update_icon()
/*/obj/machinery/alarm/Click()
if(istype(usr, /mob/living/silicon/ai))
return examine()
return ..()*/
/*
/obj/machinery/alarm/examine()
set src in oview(1)
if(usr.stat)
return
if(stat & (NOPOWER|BROKEN))
return
if(!(istype(usr, /mob/living/carbon/human) || ticker))
if (!istype(usr, /mob/living/silicon/ai))
usr << "\red You don't have the dexterity to do this!"
return
if (get_dist(usr, src) <= 3 || istype(usr, /mob/living/silicon/ai))
var/turf/T = src.loc
if (!( istype(T, /turf) ))
return
var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2
turf_total = max(turf_total, 1)
usr.show_message("\blue <B>Results:</B>", 1)
var/t = ""
var/t1 = turf_total / CELLSTANDARD * 100
if ((90 < t1 && t1 < 110))
usr.show_message(text("\blue Air Pressure: []%", t1), 1)
else
usr.show_message(text("\blue Air Pressure:\red []%", t1), 1)
t1 = T.n2 / turf_total * 100
t1 = round(t1, 0.0010)
if ((60 < t1 && t1 < 80))
t += text("<font color=blue>Nitrogen: []</font> ", t1)
else
t += text("<font color=red>Nitrogen: []</font> ", t1)
t1 = T.oxygen / turf_total * 100
t1 = round(t1, 0.0010)
if ((20 < t1 && t1 < 24))
t += text("<font color=blue>Oxygen: []</font> ", t1)
else
t += text("<font color=red>Oxygen: []</font> ", t1)
t1 = T.poison / turf_total * 100
t1 = round(t1, 0.0010)
if (t1 < 0.5)
t += text("<font color=blue>Plasma: []</font> ", t1)
else
t += text("<font color=red>Plasma: []</font> ", t1)
t1 = T.co2 / turf_total * 100
t1 = round(t1, 0.0010)
if (t1 < 1)
t += text("<font color=blue>CO2: []</font> ", t1)
else
t += text("<font color=red>CO2: []</font> ", t1)
t1 = T.sl_gas / turf_total * 100
t1 = round(t1, 0.0010)
if (t1 < 5)
t += text("<font color=blue>NO2: []</font>", t1)
else
t += text("<font color=red>NO2: []</font>", t1)
t1 = T.temp - T0C
if (T.temp > 326.444 || T.temp < 282.591)
t += text("<br><font color=red>Temperature: []</font>", t1)
else
t += text("<br><font color=blue>Temperature: []</font>", t1)
usr.show_message(t, 1)
return
else
usr << "\blue <B>You are too far away.</B>"
*/
/obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume)
if(src.detecting)
if(temperature > T0C+200)
+4 -4
View File
@@ -249,13 +249,13 @@ var/global/list/autolathe_recipes = list( \
new /obj/item/ammo_casing/shotgun/beanbag(), \
new /obj/item/ammo_magazine/c38(), \
new /obj/item/device/taperecorder(), \
new /obj/item/device/igniter(), \
new /obj/item/device/assembly/igniter(), \
new /obj/item/device/infra_sensor(), \
new /obj/item/device/radio/signaler(), \
new /obj/item/device/assembly/signaler(), \
new /obj/item/device/radio/headset(), \
new /obj/item/device/radio(), \
new /obj/item/device/infra(), \
new /obj/item/device/timer(), \
new /obj/item/device/assembly/infra(), \
new /obj/item/device/assembly/timer(), \
)
var/global/list/autolathe_recipes_hidden = list( \
+1 -1
View File
@@ -242,7 +242,7 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
new /obj/item/weapon/reagent_containers/glass/bucket(Tsec)
new /obj/item/device/prox_sensor(Tsec)
new /obj/item/device/assembly/prox_sensor(Tsec)
if (prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
+10 -10
View File
@@ -688,7 +688,7 @@ Auto Patrol: []"},
Sa.build_step = 1
Sa.overlays += image('aibots.dmi', "hs_hole")
Sa.created_name = src.name
new /obj/item/device/prox_sensor(Tsec)
new /obj/item/device/assembly/prox_sensor(Tsec)
var/obj/item/weapon/melee/baton/B = new /obj/item/weapon/melee/baton(Tsec)
B.charges = 0
@@ -724,7 +724,7 @@ Auto Patrol: []"},
if (src.emagged)
A = new /obj/item/projectile/beam( loc )
else
A = new /obj/item/projectile/electrode( loc )
A = new /obj/item/projectile/energy/electrode( loc )
if (!( istype(U, /turf) ))
//A = null
@@ -786,7 +786,7 @@ Auto Patrol: []"},
/obj/item/weapon/ed209_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if (((istype(W, /obj/item/robot_parts/l_leg)) || (istype(W, /obj/item/robot_parts/r_leg))) && (src.build_step == 0 || src.build_step == 1))
if(((istype(W, /obj/item/robot_parts/l_leg)) || (istype(W, /obj/item/robot_parts/r_leg))) && (src.build_step == 0 || src.build_step == 1))
src.build_step++
user << "You add the robot leg to [src]!"
src.name = "legs/frame assembly"
@@ -799,26 +799,26 @@ Auto Patrol: []"},
del(W)
else if (istype(W, /obj/item/clothing/suit/armor/vest) && (src.build_step == 2))
else if(istype(W, /obj/item/clothing/suit/armor/vest) && (src.build_step == 2))
src.build_step++
user << "You add the armor to [src]!"
src.name = "vest/legs/frame assembly"
src.item_state = "ed209_shell"
src.icon_state = "ed209_shell"
del(W)
else if ((istype(W, /obj/item/weapon/weldingtool) && W:welding) && (src.build_step == 3))
else if((istype(W, /obj/item/weapon/weldingtool) && W:welding) && (src.build_step == 3))
if (W:remove_fuel(0,user))
src.build_step++
src.name = "shielded frame assembly"
user << "You welded the vest to [src]!"
else if (istype(W, /obj/item/clothing/head/helmet) && (src.build_step == 4))
else if(istype(W, /obj/item/clothing/head/helmet) && (src.build_step == 4))
src.build_step++
user << "You add the helmet to [src]!"
src.name = "covered and shielded frame assembly"
src.item_state = "ed209_hat"
src.icon_state = "ed209_hat"
del(W)
else if (istype(W, /obj/item/device/prox_sensor) && (src.build_step == 5))
else if(isprox(W) && (src.build_step == 5))
src.build_step++
user << "You add the prox sensor to [src]!"
src.name = "prox/covered and armed the frame assembly"
@@ -835,7 +835,7 @@ Auto Patrol: []"},
src.build_step++
user << "\blue You wire the ED-209 assembly!"
src.name = "Wired ED-209 Assembly"
else if (istype(W, /obj/item/weapon/gun/energy/taser) && (src.build_step == 7))
else if(istype(W, /obj/item/weapon/gun/energy/taser) && (src.build_step == 7))
src.build_step++
user << "You add the taser gun to [src]!"
src.name = "Taser/Wired ED-209 Assembly"
@@ -851,7 +851,7 @@ Auto Patrol: []"},
src.build_step++
src.name = "Armed ED-209 Assembly"
user << "\blue Taser gun attached!"
else if ((istype(W, /obj/item/weapon/cell)) && (src.build_step >= 9))
else if((istype(W, /obj/item/weapon/cell)) && (src.build_step >= 9))
src.build_step++
user << "You complete the ED-209!"
var/obj/machinery/bot/ed209/S = new /obj/machinery/bot/ed209
@@ -860,7 +860,7 @@ Auto Patrol: []"},
del(W)
del(src)
else if (istype(W, /obj/item/weapon/pen))
else if(istype(W, /obj/item/weapon/pen))
var/t = input(user, "Enter new robot name", src.name, src.created_name) as text
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
if (!t)
+2 -2
View File
@@ -347,7 +347,7 @@
var/obj/item/weapon/storage/toolbox/mechanical/N = new /obj/item/weapon/storage/toolbox/mechanical(Tsec)
N.contents = list()
new /obj/item/device/prox_sensor(Tsec)
new /obj/item/device/assembly/prox_sensor(Tsec)
if (prob(50))
new /obj/item/robot_parts/l_arm(Tsec)
@@ -386,7 +386,7 @@
/obj/item/weapon/toolbox_tiles/attackby(var/obj/item/W, mob/user as mob)
..()
if(istype(W, /obj/item/device/prox_sensor))
if(isprox(W))
var/obj/item/weapon/toolbox_tiles_sensor/B = new /obj/item/weapon/toolbox_tiles_sensor
B.loc = user
if (user.r_hand == W)
+5 -5
View File
@@ -446,7 +446,7 @@
return
/obj/machinery/bot/medbot/bullet_act(var/obj/item/projectile/Proj)
if (Proj.flag == "taser")
if(Proj.flag == "taser")
src.stunned = min(stunned+10,20)
..()
@@ -463,7 +463,7 @@
new /obj/item/weapon/storage/firstaid(Tsec)
new /obj/item/device/prox_sensor(Tsec)
new /obj/item/device/assembly/prox_sensor(Tsec)
new /obj/item/device/healthanalyzer(Tsec)
@@ -568,14 +568,14 @@
/obj/item/weapon/firstaid_arm_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
if ((istype(W, /obj/item/device/healthanalyzer)) && (!src.build_step))
if((istype(W, /obj/item/device/healthanalyzer)) && (!src.build_step))
src.build_step++
user << "You add the health sensor to [src]!"
src.name = "First aid/robot arm/health analyzer assembly"
src.overlays += image('aibots.dmi', "na_scanner")
del(W)
else if ((istype(W, /obj/item/device/prox_sensor)) && (src.build_step == 1))
else if((isprox(W)) && (src.build_step == 1))
src.build_step++
user << "You complete the Medibot! Beep boop."
var/obj/machinery/bot/medbot/S = new /obj/machinery/bot/medbot
@@ -585,7 +585,7 @@
del(W)
del(src)
else if (istype(W, /obj/item/weapon/pen))
else if(istype(W, /obj/item/weapon/pen))
var/t = input(user, "Enter new robot name", src.name, src.created_name) as text
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
if (!t)
+7 -9
View File
@@ -182,7 +182,6 @@
/obj/machinery/bot/mulebot/bullet_act()
if(prob(50) && !isnull(load))
load.bullet_act()
unload(0)
if(prob(25))
src.visible_message("\red Something shorts out inside [src]!")
@@ -794,13 +793,12 @@
*/
var/damage = rand(5,15)
H.TakeDamage("head", 2*damage, 0)
H.TakeDamage("chest",2*damage, 0)
H.TakeDamage("l_leg",0.5*damage, 0)
H.TakeDamage("r_leg",0.5*damage, 0)
H.TakeDamage("l_arm",0.5*damage, 0)
H.TakeDamage("r_arm",0.5*damage, 0)
H.apply_damage(2*damage, BRUTE, "head")
H.apply_damage(2*damage, BRUTE, "chest")
H.apply_damage(0.5*damage, BRUTE, "l_leg")
H.apply_damage(0.5*damage, BRUTE, "r_leg")
H.apply_damage(0.5*damage, BRUTE, "l_arm")
H.apply_damage(0.5*damage, BRUTE, "r_arm")
var/obj/effect/decal/cleanable/blood/B = new(src.loc)
B.blood_DNA = H.dna.unique_enzymes
@@ -950,7 +948,7 @@
src.visible_message("\red <B>[src] blows apart!</B>", 1)
var/turf/Tsec = get_turf(src)
new /obj/item/device/prox_sensor(Tsec)
new /obj/item/device/assembly/prox_sensor(Tsec)
new /obj/item/stack/rods(Tsec)
new /obj/item/stack/rods(Tsec)
new /obj/item/weapon/cable_coil/cut(Tsec)
+8 -8
View File
@@ -669,7 +669,7 @@ Auto Patrol: []"},
Sa.build_step = 1
Sa.overlays += image('aibots.dmi', "hs_hole")
Sa.created_name = src.name
new /obj/item/device/prox_sensor(Tsec)
new /obj/item/device/assembly/prox_sensor(Tsec)
var/obj/item/weapon/melee/baton/B = new /obj/item/weapon/melee/baton(Tsec)
B.charges = 0
@@ -697,16 +697,16 @@ Auto Patrol: []"},
//Secbot Construction
/obj/item/clothing/head/helmet/attackby(var/obj/item/device/radio/signaler/S, mob/user as mob)
/obj/item/clothing/head/helmet/attackby(var/obj/item/device/assembly/signaler/S, mob/user as mob)
..()
if (!istype(S, /obj/item/device/radio/signaler))
if (!issignaler(S))
..()
return
if (src.type != /obj/item/clothing/head/helmet) //Eh, but we don't want people making secbots out of space helmets.
return
if (!S.b_stat)
if (!S.secured)
return
else
var/obj/item/weapon/secbot_assembly/A = new /obj/item/weapon/secbot_assembly
@@ -731,21 +731,21 @@ Auto Patrol: []"},
src.overlays += image('aibots.dmi', "hs_hole")
user << "You weld a hole in [src]!"
else if ((istype(W, /obj/item/device/prox_sensor)) && (src.build_step == 1))
else if(isprox(W) && (src.build_step == 1))
src.build_step++
user << "You add the prox sensor to [src]!"
src.overlays += image('aibots.dmi', "hs_eye")
src.name = "helmet/signaler/prox sensor assembly"
del(W)
else if (((istype(W, /obj/item/robot_parts/l_arm)) || (istype(W, /obj/item/robot_parts/r_arm))) && (src.build_step == 2))
else if(((istype(W, /obj/item/robot_parts/l_arm)) || (istype(W, /obj/item/robot_parts/r_arm))) && (src.build_step == 2))
src.build_step++
user << "You add the robot arm to [src]!"
src.name = "helmet/signaler/prox sensor/robot arm assembly"
src.overlays += image('aibots.dmi', "hs_arm")
del(W)
else if ((istype(W, /obj/item/weapon/melee/baton)) && (src.build_step >= 3))
else if((istype(W, /obj/item/weapon/melee/baton)) && (src.build_step >= 3))
src.build_step++
user << "You complete the Securitron! Beep boop."
var/obj/machinery/bot/secbot/S = new /obj/machinery/bot/secbot
@@ -754,7 +754,7 @@ Auto Patrol: []"},
del(W)
del(src)
else if (istype(W, /obj/item/weapon/pen))
else if(istype(W, /obj/item/weapon/pen))
var/t = input(user, "Enter new robot name", src.name, src.created_name) as text
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
if (!t)
+2 -6
View File
@@ -12,12 +12,8 @@
var/best_dist = INFINITY //infinity
var/best_cam = null
for(var/obj/machinery/camera/C in A)
if(usr:network != C.network)
continue // different network (syndicate)
if(C.z != usr.z)
continue // different viewing plane
if(!C.status)
continue // ignore disabled cameras
if(usr:network != C.network) continue
if(!C.status) continue // ignore disabled cameras
var/dist = get_dist(src, C)
if(dist < best_dist)
best_dist = dist
-28
View File
@@ -138,19 +138,6 @@ for reference:
else
return 0
/* bullet_act(flag, A as obj)
switch(flag)
if (PROJECTILE_BULLET)
src.health -= 20
if (PROJECTILE_WEAKBULLET) //Detective's revolver fires marshmallows
src.health -= 2
if (PROJECTILE_LASER)
src.health -= 20
if (PROJECTILE_PULSE)
src.health -=50
if (src.health <= 0)
src.explode()
These should not block bullets/N */
//Actual Deployable machinery stuff
@@ -274,21 +261,6 @@ These should not block bullets/N */
else
return 0
/* bullet_act(flag, A as obj)
switch(flag)
if (PROJECTILE_BULLET)
src.health -= 20
if (PROJECTILE_WEAKBULLET) //Detective's revolver fires marshmallows
src.health -= 2
if (PROJECTILE_LASER)
src.health -= 20
if (PROJECTILE_PULSE)
src.health -=50
if (src.health <= 0)
src.explode()
These should not block bullets/N */
proc/explode()
for(var/mob/O in hearers(src, null))
+5 -5
View File
@@ -687,14 +687,14 @@ About the new airlock wires panel:
src.pulse(t1)
else if(href_list["signaler"])
var/wirenum = text2num(href_list["signaler"])
if(!istype(usr.equipped(), /obj/item/device/radio/signaler))
if(!istype(usr.equipped(), /obj/item/device/assembly/signaler))
usr << "You need a signaller!"
return
if(src.isWireColorCut(wirenum))
usr << "You can't attach a signaller to a cut wire."
return
var/obj/item/device/radio/signaler/R = usr.equipped()
if(!R.b_stat)
var/obj/item/device/assembly/signaler/R = usr.equipped()
if(R.secured)
usr << "This radio can't be attached!"
return
var/mob/M = usr
@@ -707,7 +707,7 @@ About the new airlock wires panel:
if(!(src.signalers[wirenum]))
usr << "There's no signaller attached to that wire!"
return
var/obj/item/device/radio/signaler/R = src.signalers[wirenum]
var/obj/item/device/assembly/signaler/R = src.signalers[wirenum]
R.loc = usr.loc
R.airlock_wire = null
src.signalers[wirenum] = null
@@ -865,7 +865,7 @@ About the new airlock wires panel:
return src.attack_hand(user)
else if (istype(C, /obj/item/device/multitool))
return src.attack_hand(user)
else if (istype(C, /obj/item/device/radio/signaler))
else if (istype(C, /obj/item/device/assembly/signaler))
return src.attack_hand(user)
else if (istype(C, /obj/item/weapon/pai_cable)) // -- TLE
var/obj/item/weapon/pai_cable/cable = C
+11 -32
View File
@@ -165,7 +165,7 @@ Neutralize All Unidentified Life Signs: []<BR>"},
Gun.power_supply.charge=gun_charge
Gun.update_icon()
if(prob(50)) new /obj/item/stack/sheet/metal( loc, rand(1,4))
if(prob(50)) new /obj/item/device/prox_sensor(locate(x,y,z))
if(prob(50)) new /obj/item/device/assembly/prox_sensor(locate(x,y,z))
else
user << "You remove the turret but did not manage to salvage anything."
del(src)
@@ -466,7 +466,7 @@ Neutralize All Unidentified Life Signs: []<BR>"},
var/obj/item/projectile/A
if(!installation) // if for some reason the turret has no gun (ie, admin spawned) it resorts to basic taser shots
A = new /obj/item/projectile/electrode( loc )
A = new /obj/item/projectile/energy/electrode( loc )
if(!emagged) use_power(200)
else use_power(400)
playsound(src.loc, 'Taser.ogg', 75, 1)
@@ -481,18 +481,13 @@ Neutralize All Unidentified Life Signs: []<BR>"},
playsound(src.loc, E.fire_sound, 10, 1)
// All energy-based weapons are applicable
if (istype(E, /obj/item/weapon/gun/energy/laser))
if(istype(E, /obj/item/weapon/gun/energy/laser))
A = new /obj/item/projectile/beam( loc )
A.original = target.loc
icon_state = "orange_target_prism"
if(!emagged) use_power(500)
else use_power(1000)
else if (istype(E, /obj/item/weapon/gun/energy/shockgun))
A = new /obj/item/projectile/beam/fireball( loc )
A.original = target.loc
icon_state = "orange_target_prism"
if(!emagged) use_power(500)
else use_power(1000)
else if(istype(E, /obj/item/weapon/gun/energy/pulse_rifle))
A = new /obj/item/projectile/beam/pulse( loc )
A.original = target.loc
@@ -501,20 +496,11 @@ Neutralize All Unidentified Life Signs: []<BR>"},
else use_power(1400)
else if(istype(E, /obj/item/weapon/gun/energy/taser) || istype(E, /obj/item/weapon/gun/energy/stunrevolver))
A = new /obj/item/projectile/electrode( loc )
A = new /obj/item/projectile/energy/electrode( loc )
icon_state = "target_prism"
if(!emagged) use_power(200)
else use_power(400)
else if(istype(E, /obj/item/weapon/gun/energy/freeze))
A = new /obj/item/projectile/freeze( loc )
A.original = target.loc
var/obj/item/projectile/freeze/F = A
F.temperature = rand(0, 200)
icon_state = "target_prism"
if(!emagged) use_power(300)
else use_power(600)
else if(istype(E, /obj/item/weapon/gun/energy/lasercannon))
A = new /obj/item/projectile/beam/heavylaser( loc )
A.original = target.loc
@@ -522,29 +508,22 @@ Neutralize All Unidentified Life Signs: []<BR>"},
if(!emagged) use_power(600)
else use_power(1200)
else if(istype(E, /obj/item/weapon/gun/energy/shockgun))
A = new /obj/item/projectile/beam/fireball( loc )
A.original = target.loc
icon_state = "orange_target_prism"
if(!emagged) use_power(500)
else use_power(1000)
else if(istype(E, /obj/item/weapon/gun/energy/decloner))
A = new /obj/item/projectile/declone( loc )
A = new /obj/item/projectile/energy/declone( loc )
A.original = target.loc
icon_state = "orange_target_prism"
if(!emagged) use_power(600)
else use_power(1200)
else if(istype(E, /obj/item/weapon/gun/energy/crossbow))
A = new /obj/item/projectile/bolt( loc )
A = new /obj/item/projectile/energy/bolt( loc )
A.original = target.loc
icon_state = "orange_target_prism"
if(!emagged) use_power(50)
else use_power(100)
else if(istype(E, /obj/item/weapon/gun/energy/crossbow/largecrossbow))
A = new /obj/item/projectile/largebolt( loc )
A = new /obj/item/projectile/energy/bolt/large( loc )
A.original = target.loc
icon_state = "orange_target_prism"
if(!emagged) use_power(125)
@@ -553,7 +532,7 @@ Neutralize All Unidentified Life Signs: []<BR>"},
else // Energy gun shots
if(!emagged) // if it hasn't been emagged, it uses normal taser shots
A = new /obj/item/projectile/electrode( loc )
A = new /obj/item/projectile/energy/electrode( loc )
icon_state = "target_prism"
use_power(200)
@@ -666,7 +645,7 @@ Neutralize All Unidentified Life Signs: []<BR>"},
return
if(4)
if(istype(W, /obj/item/device/prox_sensor))
if(isprox(W))
build_step = 5
user << "\blue You add the prox sensor to the turret."
del(W)
@@ -753,7 +732,7 @@ Neutralize All Unidentified Life Signs: []<BR>"},
if(5)
user << "You remove the prox sensor from the turret frame."
new/obj/item/device/prox_sensor(locate(x,y,z))
new/obj/item/device/assembly/prox_sensor(locate(x,y,z))
build_step = 4
+1 -1
View File
@@ -15,7 +15,7 @@ obj/machinery/recharger
if (src.charging || src.charging2)
return
if (istype(G, /obj/item/weapon/gun/energy))
if (istype(G, /obj/item/weapon/gun/energy/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow))
if (istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow))
user << "Your gun's recharge port was removed to make room for a miniaturized reactor."
return
user.drop_item()
+1 -1
View File
@@ -194,7 +194,7 @@
A.original = target.loc
use_power(500)
else
A = new /obj/item/projectile/electrode( loc )
A = new /obj/item/projectile/energy/electrode( loc )
use_power(200)
A.current = T
A.yo = U.y - T.y
+19 -57
View File
@@ -51,6 +51,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
runewords-=wordhide
/obj/effect/rune
desc = ""
anchored = 1
icon = 'rune.dmi'
icon_state = "1"
@@ -101,10 +102,24 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
AI.client.images += blood
examine()
set src in view(2)
if(!iscultist(usr))
usr << "A strange collection of symbols drawn in blood."
else
if(desc && !usr.stat)
usr << "It reads: <i>[desc]</i>."
sleep(30)
explosion(src.loc, 0, 2, 5, 5)
if(src)
del(src)
return
if(!desc)
usr << "A spell circle drawn in blood. It reads: <i>[word1] [word2] [word3]</i>."
else
usr << "Explosive Runes inscription in blood. It reads: <i>[desc]</i>."
return
attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/tome) && iscultist(user))
@@ -118,6 +133,7 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
return
return
attack_hand(mob/user as mob)
if(!iscultist(user))
user << "You can't mouth the arcane scratchings without fumbling over them."
@@ -740,6 +756,8 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
R.word3=wordtech
R.loc = user.loc
R.check_icon()
/obj/item/weapon/paperscrap
name = "scrap of paper"
icon_state = "scrap"
@@ -760,59 +778,3 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
proc/view_scrap(var/viewer)
viewer << browse(data)
/obj/item/weapon/paper/talisman
icon_state = "papertalisman"
var/imbue = null
var/uses = 0
attack_self(mob/living/user as mob)
if(iscultist(user))
switch(imbue)
if("newtome")
call(/obj/effect/rune/proc/tomesummon)()
if("armor")
call(/obj/effect/rune/proc/armor)()
if("emp")
call(/obj/effect/rune/proc/emp)(usr.loc,3)
if("conceal")
call(/obj/effect/rune/proc/obscure)(2)
if("revealrunes")
call(/obj/effect/rune/proc/revealrunes)(src)
if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
call(/obj/effect/rune/proc/teleport)(imbue)
if("communicate")
call(/obj/effect/rune/proc/communicate)()
if("deafen")
call(/obj/effect/rune/proc/deafen)()
if("blind")
call(/obj/effect/rune/proc/blind)()
if("runestun")
user << "\red To use this talisman, attack your target directly."
return
if("supply")
supply()
user.take_organ_damage(5, 0)
if(src && src.imbue!="supply" && src.imbue!="runestun")
del(src)
return
else
user << "You see strange symbols on the paper. Are they supposed to mean something?"
return
attack(mob/living/carbon/T as mob, mob/living/user as mob)
if(iscultist(user))
if(imbue == "runestun")
user.take_organ_damage(5, 0)
call(/obj/effect/rune/proc/runestun)(T)
del(src)
else
..() ///If its some other talisman, use the generic attack code, is this supposed to work this way?
else
..()
/obj/item/weapon/paper/talisman/supply
imbue = "supply"
uses = 3
@@ -1,48 +0,0 @@
/obj/item/weapon/paper/talisman/proc/supply(var/key)
if (!src.uses)
del(src)
return
var/dat = "<B>There are [src.uses] bloody runes on the parchment.</B><BR>"
dat += "Please choose the chant to be imbued into the fabric of reality.<BR>"
dat += "<HR>"
dat += "<A href='?src=\ref[src];rune=newtome'>N'ath reth sh'yro eth d'raggathnor!</A> - Allows you to summon a new arcane tome.<BR>"
dat += "<A href='?src=\ref[src];rune=teleport'>Sas'so c'arta forbici!</A> - Allows you to move to a rune with the same last word.<BR>"
dat += "<A href='?src=\ref[src];rune=emp'>Ta'gh fara'qha fel d'amar det!</A> - Allows you to destroy technology in a short range.<BR>"
dat += "<A href='?src=\ref[src];rune=conceal'>Kla'atu barada nikt'o!</A> - Allows you to conceal the runes you placed on the floor.<BR>"
dat += "<A href='?src=\ref[src];rune=communicate'>O bidai nabora se'sma!</A> - Allows you to coordinate with others of your cult.<BR>"
dat += "<A href='?src=\ref[src];rune=runestun'>Fuu ma'jin</A> - Allows you to stun a person by attacking them with the talisman.<BR>"
usr << browse(dat, "window=id_com;size=350x200")
return
/obj/item/weapon/paper/talisman/Topic(href, href_list)
if (!src)
return
if (usr.stat || usr.restrained() || !in_range(src, usr))
return
if (href_list["rune"])
switch(href_list["rune"])
if("newtome")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "newtome"
if("teleport")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "[pick("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")]"
T.info = "[T.imbue]"
if("emp")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "emp"
if("conceal")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "conceal"
if("communicate")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "communicate"
if("runestun")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "runestun"
src.uses--
supply()
return
+110
View File
@@ -0,0 +1,110 @@
/obj/item/weapon/paper/talisman
icon_state = "papertalisman"
var/imbue = null
var/uses = 0
examine()
set src in view(2)
..()
return
attack_self(mob/living/user as mob)
if(iscultist(user))
switch(imbue)
if("newtome")
call(/obj/effect/rune/proc/tomesummon)()
if("armor")
call(/obj/effect/rune/proc/armor)()
if("emp")
call(/obj/effect/rune/proc/emp)(usr.loc,3)
if("conceal")
call(/obj/effect/rune/proc/obscure)(2)
if("revealrunes")
call(/obj/effect/rune/proc/revealrunes)(src)
if("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri")
call(/obj/effect/rune/proc/teleport)(imbue)
if("communicate")
call(/obj/effect/rune/proc/communicate)()
if("deafen")
call(/obj/effect/rune/proc/deafen)()
if("blind")
call(/obj/effect/rune/proc/blind)()
if("runestun")
user << "\red To use this talisman, attack your target directly."
return
if("supply")
supply()
user.take_organ_damage(5, 0)
if(src && src.imbue!="supply" && src.imbue!="runestun")
del(src)
return
else
user << "You see strange symbols on the paper. Are they supposed to mean something?"
return
attack(mob/living/carbon/T as mob, mob/living/user as mob)
if(iscultist(user))
if(imbue == "runestun")
user.take_organ_damage(5, 0)
call(/obj/effect/rune/proc/runestun)(T)
del(src)
else
..() ///If its some other talisman, use the generic attack code, is this supposed to work this way?
else
..()
proc/supply(var/key)
if (!src.uses)
del(src)
return
var/dat = "<B>There are [src.uses] bloody runes on the parchment.</B><BR>"
dat += "Please choose the chant to be imbued into the fabric of reality.<BR>"
dat += "<HR>"
dat += "<A href='?src=\ref[src];rune=newtome'>N'ath reth sh'yro eth d'raggathnor!</A> - Allows you to summon a new arcane tome.<BR>"
dat += "<A href='?src=\ref[src];rune=teleport'>Sas'so c'arta forbici!</A> - Allows you to move to a rune with the same last word.<BR>"
dat += "<A href='?src=\ref[src];rune=emp'>Ta'gh fara'qha fel d'amar det!</A> - Allows you to destroy technology in a short range.<BR>"
dat += "<A href='?src=\ref[src];rune=conceal'>Kla'atu barada nikt'o!</A> - Allows you to conceal the runes you placed on the floor.<BR>"
dat += "<A href='?src=\ref[src];rune=communicate'>O bidai nabora se'sma!</A> - Allows you to coordinate with others of your cult.<BR>"
dat += "<A href='?src=\ref[src];rune=runestun'>Fuu ma'jin</A> - Allows you to stun a person by attacking them with the talisman.<BR>"
usr << browse(dat, "window=id_com;size=350x200")
return
talisman/Topic(href, href_list)
if(!src) return
if (usr.stat || usr.restrained() || !in_range(src, usr)) return
if (href_list["rune"])
switch(href_list["rune"])
if("newtome")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "newtome"
if("teleport")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "[pick("ire", "ego", "nahlizet", "certum", "veri", "jatkaa", "balaq", "mgar", "karazet", "geeri", "orkan", "allaq")]"
T.info = "[T.imbue]"
if("emp")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "emp"
if("conceal")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "conceal"
if("communicate")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "communicate"
if("runestun")
var/obj/item/weapon/paper/talisman/T = new /obj/item/weapon/paper/talisman(get_turf(usr))
T.imbue = "runestun"
src.uses--
supply()
return
/obj/item/weapon/paper/talisman/supply
imbue = "supply"
uses = 3
-297
View File
@@ -1,297 +0,0 @@
// BLATANTLY ripped from the facehugger.dm alien code. -- TLE
#define viewrange 7 //min 2
// Returns the surrounding cardinal turfs with open links
// Including through doors openable with the ID
// Includes spacetiles
/*
/obj/creature
name = "creature"
desc = "A sanity-destroying otherthing."
icon = 'otherthing.dmi'
icon_state = "otherthing"
layer = 5.0
density = 1
anchored = 0
unacidable = 1 //Creature is not harmed by acid.
var/state = 0
var/list/path = new/list()
var/frustration = 0
var/mob/living/carbon/target
var/list/path_target = new/list()
var/turf/trg_idle
var/list/path_idle = new/list()
var/alive = 1 //1 alive, 0 dead
var/health = 25
var/maxhealth = 25
var/cycle_pause = 5
flags = 258.0
New()
..()
health = maxhealth
src.process()
examine()
set src in view()
..()
if(!alive)
usr << text("\red <B>the thing isn't moving</B>")
else if (src.health > 15)
usr << text("\red <B>A sanity-destroying otherthing.</B>")
else
usr << text("\red <B>the thing looks hurt</B>")
return
attack_hand(user as mob)
return
attackby(obj/item/weapon/W as obj, mob/user as mob)
switch(W.damtype)
if("fire")
src.health -= W.force * 2
if("brute")
src.health -= W.force * 1
else
if (src.health <= 0)
src.death()
else if (W.force)
if(ishuman(user) || ismonkey(user))
src.target = user
src.state = 1
..()
bullet_act(var/obj/item/projectile/Proj)
health -= round(Proj.damage / 2)
healthcheck()
ex_act(severity)
switch(severity)
if(1.0)
src.death()
if(2.0)
src.health -= 15
healthcheck()
return
meteorhit()
src.death()
return
blob_act()
if(prob(50))
src.death()
return
Bumped(AM as mob|obj)
if(ismob(AM) && (ishuman(AM) || ismonkey(AM)) )
src.target = AM
set_attack()
else if(ismob(AM))
spawn(0)
var/turf/T = get_turf(src)
AM:loc = T
Bump(atom/A)
if(ismob(A) && (ishuman(A) || ismonkey(A)))
src.target = A
set_attack()
else if(ismob(A))
src.loc = A:loc
temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)
if(exposed_temperature > 200)
health -= 5
healthcheck()
proc/set_attack()
state = 1
if(path_idle.len) path_idle = new/list()
trg_idle = null
proc/set_idle()
state = 2
if (path_target.len) path_target = new/list()
target = null
frustration = 0
proc/set_null()
state = 0
if (path_target.len) path_target = new/list()
if (path_idle.len) path_idle = new/list()
target = null
trg_idle = null
frustration = 0
proc/process()
set background = 1
var/quick_move = 0
if (!alive)
return
if (!target)
if (path_target.len) path_target = new/list()
var/last_health = INFINITY
for (var/mob/living/carbon/C in range(viewrange-2,src.loc))
if (C.stat == 2 || !can_see(src,C,viewrange))
continue
if(C:stunned || C:paralysis || C:weakened)
target = C
break
if(C:health < last_health)
last_health = C:health
target = C
if(target)
set_attack()
else if(state != 2)
set_idle()
idle()
else if(target)
var/turf/distance = get_dist(src, target)
set_attack()
if(can_see(src,target,viewrange))
if(distance <= 1)
for(var/mob/O in viewers(world.view,src))
O.show_message("\red <B>[src.target] has been attacked by [src]!</B>", 1, "\red You hear the sounds of combat", 2)
target:bruteloss += rand(1,10)
sleep(5)
//target:paralysis = max(target:paralysis, 10)
else
step_towards(src,get_step_towards2(src , target))
set_null()
spawn(cycle_pause) src.process()
return
else
if( !path_target.len )
path_attack(target)
if(!path_target.len)
set_null()
spawn(cycle_pause) src.process()
return
else
var/turf/next = path_target[1]
if(next in range(1,src))
path_attack(target)
if(!path_target.len)
src.frustration += 5
else
next = path_target[1]
path_target -= next
step_towards(src,next)
quick_move = 1
if (get_dist(src, src.target) >= distance) src.frustration++
else src.frustration--
if(frustration >= 35) set_null()
if(quick_move)
spawn(cycle_pause/2)
src.process()
else
spawn(cycle_pause)
src.process()
proc/idle()
set background = 1
var/quick_move = 0
if(state != 2 || !alive || target) return
if(!path_idle.len)
path_idle(trg_idle)
if(!path_idle.len)
trg_idle = null
set_idle()
spawn(cycle_pause) src.idle()
return
else
step(src,pick(cardinal))
else
if(can_see(src,trg_idle,viewrange))
switch(get_dist(src, trg_idle))
if(1)
if(istype(trg_idle,/obj/effect/alien/weeds))
step_towards(src,get_step_towards2(src , trg_idle))
if(2 to INFINITY)
step_towards(src,get_step_towards2(src , trg_idle))
if(path_idle.len) path_idle = new/list()
/*
if(viewrange+1 to INFINITY)
step_towards(src,get_step_towards2(src , trg_idle))
if(path_idle.len) path_idle = new/list()
quick_move = 1
*/
else
var/turf/next = path_idle[1]
if(!next in range(1,src))
path_idle(trg_idle)
if(!path_idle.len)
spawn(cycle_pause) src.idle()
return
else
next = path_idle[1]
path_idle -= next
step_towards(src,next)
quick_move = 1
if(quick_move)
spawn(cycle_pause/2)
idle()
else
spawn(cycle_pause)
idle()
proc/path_idle(var/atom/trg)
path_idle = AStar(src.loc, get_turf(trg), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, null, null)
path_idle = reverselist(path_idle)
proc/path_attack(var/atom/trg)
target = trg
path_target = AStar(src.loc, target.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 250, null, null)
path_target = reverselist(path_target)
proc/death()
if(!alive) return
src.alive = 0
density = 0
icon_state = "dead"
set_null()
for(var/mob/O in hearers(src, null))
O.show_message("\red <B>[src] falls over dead!</B>", 1)
proc/healthcheck()
if (src.health <= 0)
src.death()
*/
+1 -1
View File
@@ -28,7 +28,7 @@ datum/controller/game_controller
setupgenetics()
SetupJobs("config/jobs.txt")
// SetupJobs("config/jobs.txt")
//setupcorpses() Not used any more.
syndicate_code_phrase = generate_code_phrase()//Sets up code phrase for traitors, for the round.
+2 -2
View File
@@ -124,7 +124,7 @@
return
playsound(chassis, 'Laser.ogg', 50, 1)
var/obj/item/projectile/electrode/A = new /obj/item/projectile/electrode(curloc)
var/obj/item/projectile/energy/electrode/A = new /obj/item/projectile/energy/electrode(curloc)
A.original = targloc
A.current = curloc
A.yo = targloc.y - curloc.y
@@ -289,7 +289,7 @@
continue
playsound(chassis, 'Gunshot.ogg', 50, 1)
var/obj/item/projectile/weakbullet/A = new /obj/item/projectile/weakbullet(curloc)
var/obj/item/projectile/bullet/weakbullet/A = new /obj/item/projectile/bullet/weakbullet(curloc)
src.projectiles--
A.original = targloc
A.current = curloc
+7 -6
View File
@@ -280,12 +280,13 @@
for(var/T in possible_int_damage)
if(internal_damage & T)
possible_int_damage -= T
var/int_dam_flag = pick(possible_int_damage)
if(int_dam_flag)
src.internal_damage |= int_dam_flag
src.pr_internal_damage.start()
src.log_append_to_last("Internal damage of type [int_dam_flag].[ignore_threshold?"Ignoring damage threshold.":null]",1)
src.occupant << sound('warning-buzzer.ogg',wait=0)
if(possible_int_damage)
var/int_dam_flag = pick(possible_int_damage)
if(int_dam_flag)
src.internal_damage |= int_dam_flag
src.pr_internal_damage.start()
src.log_append_to_last("Internal damage of type [int_dam_flag].[ignore_threshold?"Ignoring damage threshold.":null]",1)
src.occupant << sound('warning-buzzer.ogg',wait=0)
if(prob(5))
if(ignore_threshold || src.health*100/initial(src.health)<src.internal_damage_threshold)
var/obj/item/mecha_parts/mecha_equipment/destr = safepick(equipment)
+6 -8
View File
@@ -138,19 +138,17 @@
var/obj/item/weapon/tank/plasma/PT = new(V)
var/obj/item/weapon/tank/oxygen/OT = new(V)
var/obj/item/device/radio/signaler/S = new(V)
var/obj/item/device/assembly/signaler/S = new(V)
V.tank_one = PT
V.tank_two = OT
V.attached_device = S
S.holder = V
S.Secure()
S.toggle_secure()
PT.master = V
OT.master = V
S.b_stat = 0
PT.air_contents.temperature = btemp1 + T0C
OT.air_contents.temperature = btemp2 + T0C
@@ -163,14 +161,14 @@
var/obj/item/weapon/tank/plasma/PT = new(V)
var/obj/item/weapon/tank/oxygen/OT = new(V)
var/obj/item/device/prox_sensor/P = new(V)
var/obj/item/device/assembly/prox_sensor/P = new(V)
V.tank_one = PT
V.tank_two = OT
V.attached_device = P
P.holder = V
P.Secure()
P.toggle_secure()
PT.master = V
OT.master = V
@@ -187,14 +185,14 @@
var/obj/item/weapon/tank/plasma/PT = new(V)
var/obj/item/weapon/tank/oxygen/OT = new(V)
var/obj/item/device/timer/T = new(V)
var/obj/item/device/assembly/timer/T = new(V)
V.tank_one = PT
V.tank_two = OT
V.attached_device = T
T.holder = V
T.Secure()
T.toggle_secure()
PT.master = V
OT.master = V
T.time = 30
+3 -3
View File
@@ -6,9 +6,9 @@
new /obj/item/ammo_magazine/c45( src )
new /obj/item/weapon/storage/handcuff_kit( src )
new /obj/item/weapon/storage/flashbang_kit( src )
new /obj/item/weapon/gun/energy( src )
new /obj/item/weapon/gun/energy( src )
new /obj/item/weapon/gun/energy( src )
new /obj/item/weapon/gun/energy/gun( src )
new /obj/item/weapon/gun/energy/gun( src )
new /obj/item/weapon/gun/energy/gun( src )
new /obj/item/weapon/pinpointer( src )
new /obj/item/weapon/pinpointer( src )
new /obj/item/weapon/pinpointer( src )
+1 -1
View File
@@ -98,7 +98,7 @@
New()
..()
sleep(2)
new /obj/item/device/radio/signaler(src)
new /obj/item/device/assembly/signaler(src)
new /obj/item/device/radio/electropack(src)
new /obj/item/device/radio/electropack(src)
new /obj/item/device/radio/electropack(src)
+7 -18
View File
@@ -4,8 +4,6 @@
/obj/structure/secure_closet/personal/New()
..()
spawn(2)
new /obj/item/device/radio/signaler( src )
new /obj/item/weapon/pen( src )
new /obj/item/weapon/storage/backpack( src )
new /obj/item/device/radio/headset( src )
return
@@ -24,25 +22,19 @@
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
user.drop_item()
if (W) W.loc = src.loc
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
if(istype(W, /obj/item/device/pda))
var/obj/item/device/pda/pda = W
W = pda.id
else if(istype(W, /obj/item/weapon/card/id))
if(src.broken)
user << "\red It appears to be broken."
return
var/obj/item/weapon/card/id/I = W
if (src.allowed(user) || !src.registered || (istype(I) && (src.registered == I.registered)))
if(!I || !I.registered) return
if(src.allowed(user) || !src.registered || (istype(I) && (src.registered == I.registered)))
//they can open all lockers, or nobody owns this, or they own this locker
src.locked = !( src.locked )
for(var/mob/O in viewers(user, 3))
if ((O.client && !( O.blinded )))
O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user)
if(src.locked)
src.icon_state = src.icon_locked
else
src.icon_state = src.icon_closed
if (!src.registered)
if(src.locked) src.icon_state = src.icon_locked
else src.icon_state = src.icon_closed
if(!src.registered)
src.registered = I.registered
src.desc = "Owned by [I.registered]."
else
@@ -60,9 +52,6 @@
playsound(src.loc, "sparks", 50, 1)
for(var/mob/O in viewers(user, 3))
O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
else
for(var/mob/O in viewers(user, 3))
O.show_message(text("\blue The locker has been broken by [] with an electromagnetic card!", user), 1, text("You hear a faint electrical spark."), 2)
else
user << "\red Access Denied"
return
+4 -3
View File
@@ -15,7 +15,7 @@
new /obj/item/clothing/shoes/brown( src )
new /obj/item/device/radio/headset/heads/captain( src )
new /obj/item/weapon/reagent_containers/food/drinks/flask(src)
new /obj/item/weapon/gun/energy( src )
new /obj/item/weapon/gun/energy/gun( src )
return
@@ -35,7 +35,7 @@
new /obj/item/clothing/shoes/brown(src)
new /obj/item/weapon/storage/id_kit(src)
new /obj/item/weapon/storage/id_kit( src )
new /obj/item/weapon/gun/energy(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/device/flash(src)
new /obj/item/clothing/glasses/sunglasses(src)
return
@@ -55,10 +55,11 @@
new /obj/item/clothing/head/helmet(src)
new /obj/item/device/radio/headset/heads/hos(src)
new /obj/item/weapon/shield/riot(src)
new /obj/item/weapon/gun/energy(src)
new /obj/item/weapon/gun/energy/gun(src)
new /obj/item/device/flash(src)
new /obj/item/clothing/glasses/sunglasses/sechud(src)
new /obj/item/weapon/storage/flashbang_kit(src)
new /obj/item/weapon/storage/lockbox/loyalty()
new /obj/item/weapon/melee/baton(src)
return
+3 -1
View File
@@ -103,10 +103,12 @@ MASS SPECTROMETER
/obj/item/device/detective_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
if (!istype(M))
if (!ishuman(M))
user << "\red [M] is not humas and cannot have the fingerprints."
return 0
if (( !( istype(M.dna, /datum/dna) ) || M.gloves) )
user << "\blue No fingerprints found on [M]"
return 0
else
if ((src.amount < 1 && src.printing))
user << text("\blue Fingerprints scanned on [M]. Need more cards to print.")
+1 -2
View File
@@ -335,8 +335,7 @@ steam.start() -- spawns the effect
if(air_group || (height==0)) return 1
if(istype(mover, /obj/item/projectile/beam))
var/obj/item/projectile/beam/B = mover
B.damage = 10//testing, will just hardcode for now
B.mobdamage = new/list(BRUTE = 0 , BURN = 10, TOX = 0, OXY = 0, CLONE = 0)
B.damage = (B.damage/2)
return 1
@@ -8,12 +8,12 @@
protective_temperature = 1000
flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
armor = list(melee = 40, bullet = 30, laser = 20, taser = 15, bomb = 25, bio = 10, rad = 10)
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/gun,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
slowdown = 9
var/fuel = 0
var/list/togglearmor = list(melee = 90, bullet = 70, laser = 60, taser = 40, bomb = 75, bio = 75, rad = 75)
var/list/togglearmor = list(melee = 90, bullet = 70, laser = 60,energy = 40, bomb = 75, bio = 75, rad = 75)
var/active = 0
var/helmrequired = 1
@@ -199,7 +199,7 @@
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
see_face = 0.0
item_state = "swat"
armor = list(melee = 40, bullet = 30, laser = 20, taser = 15, bomb = 25, bio = 10, rad = 10)
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
var/obj/item/clothing/suit/powered/parent
proc/atmotoggle()
@@ -237,7 +237,7 @@
desc = "Not for rookies."
flags = FPRINT | TABLEPASS
item_state = "swat"
armor = list(melee = 40, bullet = 30, laser = 20, taser = 15, bomb = 25, bio = 10, rad = 10)
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
/obj/item/clothing/shoes/powered
name = "Powered armor"
@@ -245,7 +245,7 @@
desc = "Not for rookies."
flags = FPRINT | TABLEPASS
item_state = "swat"
armor = list(melee = 40, bullet = 30, laser = 20, taser = 15, bomb = 25, bio = 10, rad = 10)
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
obj/item/clothing/suit/powered/spawnable/badmin
@@ -90,7 +90,7 @@
/obj/item/powerarmor/reactive
name = "Adminbus power armor reactive plating"
desc = "Made with the rare Badminium molecule."
var/list/togglearmor = list(melee = 250, bullet = 100, laser = 100, taser = 100, bomb = 100, bio = 100, rad = 100)
var/list/togglearmor = list(melee = 250, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100)
//Good lord an active energy axe does 150 damage a swing? Anyway, barring var editing, this armor loadout should be impervious to anything. Enjoy, badmins~ --NEO
toggle(sudden = 0)
@@ -116,7 +116,7 @@
centcomm
name = "CentComm power armor reactive plating"
desc = "Pretty effective against everything, not perfect though."
togglearmor = list(melee = 90, bullet = 70, laser = 60, taser = 40, bomb = 75, bio = 75, rad = 75)
togglearmor = list(melee = 90, bullet = 70, laser = 60,energy = 40, bomb = 75, bio = 75, rad = 75)
slowdown = 2
@@ -149,24 +149,20 @@
parent.gas_transfer_coefficient = 1
parent.permeability_coefficient = 1
parent.heat_transfer_coefficient = 1
parent.radiation_protection = 0
parent.flags &= ~SUITSPACE
if(parent.helmrequired)
parent.helm.gas_transfer_coefficient = 1
parent.helm.permeability_coefficient = 1
parent.helm.heat_transfer_coefficient = 1
parent.helm.radiation_protection = 0
parent.helm.flags &= ~HEADSPACE
if(parent.glovesrequired)
parent.gloves.gas_transfer_coefficient = 1
parent.gloves.permeability_coefficient = 1
parent.gloves.heat_transfer_coefficient = 1
parent.gloves.radiation_protection = 0
if(parent.shoesrequired)
parent.shoes.gas_transfer_coefficient = 1
parent.shoes.permeability_coefficient = 1
parent.shoes.heat_transfer_coefficient = 1
parent.shoes.radiation_protection = 0
sealed = 0
if(0)
@@ -174,24 +170,20 @@
parent.gas_transfer_coefficient = 0.01
parent.permeability_coefficient = 0.02
parent.heat_transfer_coefficient = 0.02
parent.radiation_protection = 0.75
parent.flags |= SUITSPACE
if(parent.helmrequired)
parent.helm.gas_transfer_coefficient = 0.01
parent.helm.permeability_coefficient = 0.02
parent.helm.heat_transfer_coefficient = 0.02
parent.helm.radiation_protection = 0.75
parent.helm.flags |= HEADSPACE
if(parent.glovesrequired)
parent.gloves.gas_transfer_coefficient = 0.01
parent.gloves.permeability_coefficient = 0.02
parent.gloves.heat_transfer_coefficient = 0.02
parent.gloves.radiation_protection = 0.75
if(parent.shoesrequired)
parent.shoes.gas_transfer_coefficient = 0.01
parent.shoes.permeability_coefficient = 0.02
parent.shoes.heat_transfer_coefficient = 0.02
parent.shoes.radiation_protection = 0.75
sealed = 1
adminbus
@@ -221,7 +213,6 @@
parent.helm.gas_transfer_coefficient = 0.01
parent.helm.permeability_coefficient = 0.02
parent.helm.heat_transfer_coefficient = 0.02
parent.helm.radiation_protection = 0.75
parent.helm.flags |= HEADSPACE
user << "\blue Helmet atmospheric seals engaged."
if(manual)
@@ -234,7 +225,6 @@
parent.helm.gas_transfer_coefficient = 1
parent.helm.permeability_coefficient = 1
parent.helm.heat_transfer_coefficient = 1
parent.helm.radiation_protection = 0
parent.helm.flags &= ~HEADSPACE
if(manual)
for (var/armorvar in helm.armor)
+2 -140
View File
@@ -307,146 +307,8 @@
if (istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if (ishuman(user) || isrobot(user) || ismonkey(user) || isalien(user))
if (!( def_zone ))
var/mob/user2 = user
var/t = user2:zone_sel.selecting
if ((t in list( "eyes", "mouth" )))
t = "head"
def_zone = ran_zone(t)
var/datum/organ/external/affecting
if (H.organs[text("[]", def_zone)])
affecting = H.organs[text("[]", def_zone)]
var/hit_area = parse_zone(def_zone)
var/list/armor = H.getarmor(affecting, "melee")
//Grabbing the set of clothing that offers the best protective value against melee attacks to that area. --NEO
for(var/mob/O in viewers(M, null))
O.show_message(text("\red <B>[] has been attacked in the [] with [][] </B>", M, hit_area, src, (user ? text(" by [].", user) : ".")), 1)
if (istype(affecting, /datum/organ/external))
var/b_dam = (src.damtype == "brute" ? src.force : 0)
var/f_dam = (src.damtype == "fire" ? src.force : 0)
if (M.mutations & COLD_RESISTANCE)
f_dam = 0
if (def_zone == "head")
if (b_dam && prob(armor["armor"] - src.force))
if (prob(20))
affecting.take_damage(power, 0)
else
H.show_message("\red Your [armor["clothes"]] has protected you from a hit to the head.")
return
if ((b_dam && prob(src.force + affecting.brute_dam + affecting.burn_dam)))
var/time = rand(10, 120)
if (prob(90))
if (H.paralysis < time)
H.paralysis = time
else
if (H.weakened < time)
H.weakened = time
if(H.stat != 2) H.stat = 1
for(var/mob/O in viewers(M, null))
O.show_message(text("\red <B>[] has been knocked unconscious!</B>", H), 1, "\red You hear someone fall.", 2)
if (prob(50))
if (/*ticker.mode.name == "revolution" && */ M != user)
ticker.mode.remove_revolutionary(H.mind)
if (b_dam && prob(25 + (b_dam * 2)))
src.add_blood(H)
if (prob(33))
var/turf/location = H.loc
if (istype(location, /turf/simulated))
location.add_blood(H)
if (H.wear_mask)
H.wear_mask.add_blood(H)
if (H.head)
H.head.add_blood(H)
if (H.glasses && prob(33))
H.glasses.add_blood(H)
if (istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/user2 = user
if (user2.gloves)
user2.gloves.add_blood(H)
else
user2.add_blood(H)
if (prob(15))
if (user2.wear_suit)
user2.wear_suit.add_blood(H)
else if (user2.w_uniform)
user2.w_uniform.add_blood(H)
affecting.take_damage(b_dam, f_dam)
else if (def_zone == "chest" || def_zone == "groin")
if (b_dam && prob(armor["armor"] - src.force))
H.show_message("\red Your [armor["clothes"]] has protected you from a hit to the [affecting.name].")
return
if (b_dam && ((istype(H.r_hand, /obj/item/weapon/shield/riot))) && prob(90 - src.force))
H.show_message("\red You have been protected from a hit to the [affecting.name].")
return
if (b_dam && ((istype(H.l_hand, /obj/item/weapon/shield/riot))) && prob(90 - src.force))
H.show_message("\red You have been protected from a hit to the [affecting.name].")
return
if ((b_dam && prob(src.force + affecting.brute_dam + affecting.burn_dam)))
if (prob(50))
if (H.weakened < 5)
H.weakened = 5
for(var/mob/O in viewers(H, null))
O.show_message(text("\red <B>[] has been knocked down!</B>", H), 1, "\red You hear someone fall.", 2)
else
if (H.stunned < 2)
H.stunned = 2
for(var/mob/O in viewers(H, null))
O.show_message(text("\red <B>[] has been stunned!</B>", H), 1)
if(H.stat != 2) H.stat = 1
if (b_dam && prob(25 + (b_dam * 2)))
src.add_blood(H)
if (prob(33))
var/turf/location = H.loc
if (istype(location, /turf/simulated))
location.add_blood(H)
if (H.wear_suit)
H.wear_suit.add_blood(H)
if (H.w_uniform)
H.w_uniform.add_blood(H)
if (istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/user2 = user
if (user2.gloves)
user2.gloves.add_blood(H)
else
user2.add_blood(H)
if (prob(15))
if (user2.wear_suit)
user2.wear_suit.add_blood(H)
else if (user2.w_uniform)
user2.w_uniform.add_blood(H)
affecting.take_damage(b_dam, f_dam)
else
if (b_dam && prob(armor["armor"] - src.force))
H.show_message("\red Your [armor["clothes"]] has protected you from a hit to the [affecting.name].")
return
if (b_dam && prob(25 + (b_dam * 2)))
src.add_blood(H)
if (prob(33))
var/turf/location = H.loc
if (istype(location, /turf/simulated))
location.add_blood(H)
if (H.wear_suit)
H.wear_suit.add_blood(H)
if (H.w_uniform)
H.w_uniform.add_blood(H)
if (istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/user2 = user
if (user2.gloves)
user2.gloves.add_blood(H)
else
user2.add_blood(H)
if (prob(15))
if (user2.wear_suit)
user2.wear_suit.add_blood(H)
else if (user2.w_uniform)
user2.w_uniform.add_blood(H)
affecting.take_damage(b_dam, f_dam)
H.UpdateDamageIcon() ///Only reference I can find on the attack() proc actually changing mob icon -Agouri
if(istype(M, /mob/living/carbon/human))
M:attacked_by(src, user, def_zone)
else
switch(src.damtype)
if("brute")
@@ -45,11 +45,11 @@ BIKE HORN
/obj/item/weapon/soap/afterattack(atom/target, mob/user as mob)
if(istype(target,/obj/effect/decal/cleanable))
del(target)
user << "\blue You scrub the [target.name] out."
del(target)
else
target.clean_blood()
user << "\blue You clean the [target.name]."
target.clean_blood()
return
/obj/item/weapon/bikehorn/attack_self(mob/user as mob)
@@ -2,7 +2,7 @@
..()
weldtool = new/obj/item/weapon/weldingtool(src)
weldtool.status = 0
igniter = new/obj/item/device/igniter(src)
igniter = new/obj/item/device/assembly/igniter(src)
igniter.secured = 0
src.status = 1
update_icon()
@@ -31,7 +31,7 @@
operating = 0//cooldown
turf/previousturf = null
obj/item/weapon/weldingtool/weldtool = null
obj/item/device/igniter/igniter = null
obj/item/device/assembly/igniter/igniter = null
obj/item/weapon/tank/plasma/ptank = null
@@ -103,8 +103,8 @@
update_icon()
return
if(istype(W, /obj/item/device/igniter))
var/obj/item/device/igniter/I = W
if(isigniter(W))
var/obj/item/device/assembly/igniter/I = W
if(I.secured) return 0
user.remove_from_mob(I)
I.loc = src
@@ -1 +0,0 @@
@@ -110,7 +110,7 @@ Implant Specifics:<BR>"}
activate(var/cause)
if((!cause) || (!src.imp_in)) return 0
explosion(src, -1, 0, 1, 3, 0)//This might be a bit much, dono will have to see.
explosion(src, -1, 0, 2, 3, 0)//This might be a bit much, dono will have to see.
if(src.imp_in)
src.imp_in.gib()
@@ -191,7 +191,7 @@ STUN BATON
user.weakened = max(3 * force, user.weakened)
if(ishuman(user))
var/mob/living/carbon/human/H = user
H.TakeDamage("head", 2 * force, 0)
H.apply_damage(2*force, BRUTE, "head")
else
user.take_organ_damage(2*force)
return
+23 -16
View File
@@ -167,24 +167,31 @@ CRAYONS
layer = 2.1
anchored = 1
/obj/effect/decal/cleanable/crayon/New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
..()
loc = location
name = type
desc = "A [type] drawn in crayon."
examine()
set src in view(2)
..()
return
switch(type)
if("rune")
type = "rune[rand(1,6)]"
if("graffiti")
type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")
var/icon/mainOverlay = new/icon('crayondecal.dmi',"[type]",2.1)
var/icon/shadeOverlay = new/icon('crayondecal.dmi',"[type]s",2.1)
New(location,main = "#FFFFFF",shade = "#000000",var/type = "rune")
..()
loc = location
mainOverlay.Blend(main,ICON_ADD)
shadeOverlay.Blend(shade,ICON_ADD)
name = type
desc = "A [type] drawn in crayon."
overlays += mainOverlay
overlays += shadeOverlay
switch(type)
if("rune")
type = "rune[rand(1,6)]"
if("graffiti")
type = pick("amyjon","face","matt","revolution","engie","guy","end","dwarf","uboa")
var/icon/mainOverlay = new/icon('crayondecal.dmi',"[type]",2.1)
var/icon/shadeOverlay = new/icon('crayondecal.dmi',"[type]s",2.1)
mainOverlay.Blend(main,ICON_ADD)
shadeOverlay.Blend(shade,ICON_ADD)
overlays += mainOverlay
overlays += shadeOverlay
+7 -6
View File
@@ -35,19 +35,20 @@
update_icon()
//TODO: Have this take an assemblyholder
else if(item.IsAssembly())
if(item:secured)
else if(isassembly(item))
var/obj/item/device/assembly/A = item
if(A.secured)
user << "\red The device is secured!"
return
if(attached_device)
user << "\red There is already an device attached to the valve, remove it first!"
return
user.remove_from_mob(item)
attached_device = item
item.loc = src
attached_device = A
A.loc = src
user << "\blue You attach the [item] to the valve controls and secure it!"
item:holder = src
item:Secure()
A.holder = src
A.toggle_secure()
bombers += "[key_name(user)] attached a [item] to a transfer valve."
message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
+1 -1
View File
@@ -31,7 +31,7 @@
if(istype(Proj ,/obj/item/projectile/beam/pulse))
src.ex_act(2)
..()
return
return 0
/turf/Enter(atom/movable/mover as mob|obj, atom/forget as mob|obj|turf|area)
if (!mover || !isturf(mover.loc))