General bots-related code cleanup.
Medibot sprite fixed.
Aliens now attack bots instead of opening control window.
All bots can be damaged and repaired.
All bots are effected to EMP now.
Asteroids generation was tuned to do not spawn asteroid on z-level edges.
Enabling admin verbs now wont turn on deadchat if it was turned off.
An emergency toolbox now contain a red crowbar.
Mime job is now available to join as.
Added radio channel for miners, use :h or :d ("diggers" lol) as shortcut.
Added radio channel for cargo techs, use :h or :q as shortcut.
Added a personal headsets to HoP and QM.
Some unrelated runtime errors was fixed.
git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1050 316c924e-a436-60f5-8080-3fe189b3f50e
@@ -101,6 +101,7 @@ var
|
||||
viroMax = 1
|
||||
wardenMax = 1
|
||||
cmoMax = 1
|
||||
mimeMax = 1
|
||||
|
||||
list/bombers = list( )
|
||||
list/admin_log = list ( )
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/obj/item/device/radio
|
||||
icon = 'radio.dmi'
|
||||
name = "station bounced radio"
|
||||
suffix = "\[3\]"
|
||||
icon_state = "walkietalkie"
|
||||
@@ -116,7 +117,7 @@
|
||||
name = "Captain's Headset"
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Command" = 1, "Science" = 0, "Medical" = 0, "Security" = 1, "Engineering" = 0)
|
||||
channels = list("Command" = 1, "Science" = 0, "Medical" = 0, "Security" = 1, "Engineering" = 0, "Mining" = 0, "Cargo" = 0)
|
||||
|
||||
/obj/item/device/radio/headset/heads/rd // -- Bar
|
||||
name = "Research Director's Headset"
|
||||
@@ -134,10 +135,34 @@
|
||||
name = "Chief Engineer's Headset"
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Engineering" = 1, "Command" = 1)
|
||||
channels = list("Engineering" = 1, "Command" = 1, "Mining" = 1)
|
||||
|
||||
/obj/item/device/radio/headset/heads/cmo // -- Bar
|
||||
name = "Chief Medical Officer's Headset"
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Medical" = 1, "Command" = 1)
|
||||
channels = list("Medical" = 1, "Command" = 1)
|
||||
|
||||
/obj/item/device/radio/headset/heads/hop // -- rastaf0
|
||||
name = "Head of Personnel's Headset"
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Command" = 1, "Security" = 1, "Cargo" = 0)
|
||||
|
||||
/obj/item/device/radio/headset/headset_mine // -- rastaf0
|
||||
name = "Mining Radio Headset"
|
||||
icon_state = "mine_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Mining" = 1)
|
||||
|
||||
/obj/item/device/radio/headset/headset_cargo // -- rastaf0
|
||||
name = "Cargo Radio Headset"
|
||||
icon_state = "cargo_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Cargo" = 1)
|
||||
|
||||
/obj/item/device/radio/headset/heads/qm // -- rastaf0 //he is not a real head but he gives orders sometimes
|
||||
name = "Quartermaster's Headset"
|
||||
icon_state = "cargo_headset"
|
||||
item_state = "headset"
|
||||
channels = list("Cargo" = 1, "Mining" = 1) //no command frequency yet
|
||||
|
||||
@@ -376,6 +376,10 @@
|
||||
item_state = "wrench"
|
||||
w_class = 2.0
|
||||
m_amt = 50
|
||||
|
||||
/obj/item/weapon/crowbar/red
|
||||
icon = 'items.dmi'
|
||||
icon_state = "red_crowbar"
|
||||
|
||||
/obj/item/weapon/disk
|
||||
name = "disk"
|
||||
@@ -991,7 +995,7 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
|
||||
|
||||
/obj/item/weapon/syndicate_uplink
|
||||
name = "station bounced radio"
|
||||
icon = 'device.dmi'
|
||||
icon = 'radio.dmi'
|
||||
icon_state = "radio"
|
||||
var/temp = null
|
||||
var/uses = 10.0
|
||||
@@ -1007,7 +1011,7 @@ Total SMES charging rate should not exceed total power generation rate, or an ov
|
||||
|
||||
/obj/item/weapon/SWF_uplink
|
||||
name = "station bounced radio"
|
||||
icon = 'device.dmi'
|
||||
icon = 'radio.dmi'
|
||||
icon_state = "radio"
|
||||
var/temp = null
|
||||
var/uses = 4.0
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
proc/spawn_asteroid(var/atom/start_loc,var/type,var/size,var/richness)//type: 0 or null - random, 1 - nothing, 2 - iron, 3 - silicon
|
||||
if(start_loc.x - size < 3 || start_loc.x + size >= world.maxx - 3 || start_loc.y - size < 3 || start_loc.y + size > world.maxy -3)
|
||||
if(start_loc.x - size < 5 || start_loc.x + size >= world.maxx - 5 || start_loc.y - size < 5 || start_loc.y + size > world.maxy -5)
|
||||
return 0
|
||||
if(!size)
|
||||
size = pick(100;2,50;3,35;4,25;6,10;12)
|
||||
|
||||
@@ -74,6 +74,8 @@ Radio:
|
||||
1359 - Security
|
||||
1441 - death squad
|
||||
1443 - Confession Intercom
|
||||
1349 - Miners
|
||||
1347 - Cargo techs
|
||||
|
||||
Devices:
|
||||
1451 - tracking implant
|
||||
@@ -104,10 +106,12 @@ var/list/radiochannels = list(
|
||||
"Security" = 1359,
|
||||
"Deathsquad" = 1441,
|
||||
"Syndicate" = 1213,
|
||||
"Mining" = 1349,
|
||||
"Cargo" = 1347,
|
||||
)
|
||||
//depenging helpers
|
||||
var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441)
|
||||
var/const/COMM_FREQ = 1353
|
||||
var/list/DEPT_FREQS = list(1351,1355,1357,1359,1213,1441,1349,1347)
|
||||
var/const/COMM_FREQ = 1353 //command, colored gold in chat window
|
||||
var/const/SYND_FREQ = 1213
|
||||
|
||||
#define TRANSMISSION_WIRE 0
|
||||
|
||||
@@ -367,6 +367,7 @@
|
||||
src.equip_if_possible(new /obj/item/device/t_scanner(src), slot_r_store)
|
||||
|
||||
if ("Shaft Miner")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/headset_mine (src), slot_ears)
|
||||
src.equip_if_possible(new /obj/item/clothing/under/color/white(src), slot_w_uniform)
|
||||
src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes)
|
||||
src.equip_if_possible(new /obj/item/clothing/gloves/black(src), slot_gloves)
|
||||
@@ -475,7 +476,7 @@
|
||||
|
||||
|
||||
if ("Head of Personnel")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/headset_com (src), slot_ears) // -- TLE
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/heads/hop (src), slot_ears) // -- TLE
|
||||
src.equip_if_possible(new /obj/item/weapon/storage/backpack(src), slot_back)
|
||||
src.equip_if_possible(new /obj/item/device/pda/heads(src), slot_belt)
|
||||
src.equip_if_possible(new /obj/item/clothing/under/rank/head_of_personnel(src), slot_w_uniform)
|
||||
@@ -546,6 +547,7 @@
|
||||
src.equip_if_possible(new /obj/item/weapon/storage/briefcase(src), slot_l_hand)
|
||||
|
||||
if ("Quartermaster")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/heads/qm (src), slot_ears)
|
||||
src.equip_if_possible(new /obj/item/clothing/gloves/black(src), slot_gloves)
|
||||
src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes)
|
||||
src.equip_if_possible(new /obj/item/clothing/under/rank/cargo(src), slot_w_uniform)
|
||||
@@ -555,6 +557,7 @@
|
||||
//src.equip_if_possible(new /obj/item/clothing/suit/exo_suit(src), slot_wear_suit)
|
||||
|
||||
if ("Cargo Technician")
|
||||
src.equip_if_possible(new /obj/item/device/radio/headset/headset_cargo(src), slot_ears)
|
||||
src.equip_if_possible(new /obj/item/clothing/gloves/black(src), slot_gloves)
|
||||
src.equip_if_possible(new /obj/item/clothing/shoes/black(src), slot_shoes)
|
||||
src.equip_if_possible(new /obj/item/clothing/under/rank/cargo(src), slot_w_uniform)
|
||||
|
||||
@@ -4,9 +4,132 @@
|
||||
icon = 'aibots.dmi'
|
||||
layer = MOB_LAYER
|
||||
var/obj/item/weapon/card/id/botcard // the ID card that the bot "holds"
|
||||
var/on = 1
|
||||
var/health = 0 //do not forget to set health for your bot!
|
||||
var/maxhealth = 0
|
||||
var/fire_dam_coeff = 1.0
|
||||
var/brute_dam_coeff = 1.0
|
||||
|
||||
|
||||
/obj/machinery/bot/proc/turn_on()
|
||||
if (stat)
|
||||
return 0
|
||||
src.on = 1
|
||||
return 1
|
||||
|
||||
/obj/machinery/bot/proc/turn_off()
|
||||
src.on = 0
|
||||
|
||||
/obj/machinery/bot/proc/explode()
|
||||
del(src)
|
||||
|
||||
/obj/machinery/bot/proc/healthcheck()
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
|
||||
/obj/machinery/bot/examine()
|
||||
set src in view()
|
||||
..()
|
||||
if (src.health < maxhealth)
|
||||
if (src.health > maxhealth/3)
|
||||
usr << text("\red [src]'s parts look loose.")
|
||||
else
|
||||
usr << text("\red <B>[src]'s parts look very loose!</B>")
|
||||
return
|
||||
|
||||
/obj/machinery/bot/attack_alien(var/mob/living/carbon/alien/user as mob)
|
||||
/* Well, aliums dislike machines and do not want to caress them.
|
||||
if (user.a_intent == "help")
|
||||
for(var/mob/O in viewers(src, null))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O.show_message(text("\blue [user] caresses [src.name] with its scythe like arm."), 1)
|
||||
else
|
||||
*/
|
||||
src.health -= rand(15,30)*brute_dam_coeff
|
||||
src.visible_message("\red <B>[user] has slashed [src]!</B>")
|
||||
playsound(src.loc, 'slice.ogg', 25, 1, -1)
|
||||
if(prob(10))
|
||||
new /obj/decal/cleanable/oil(src.loc)
|
||||
healthcheck()
|
||||
|
||||
|
||||
|
||||
/obj/machinery/bot/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if (src.health < maxhealth)
|
||||
src.health = min(maxhealth, src.health+25)
|
||||
user.visible_message(
|
||||
"\red [user] repairs [src]!",
|
||||
"\blue You repair [src]!"
|
||||
)
|
||||
else
|
||||
user << "\blue [src] does not need a repair!"
|
||||
else
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
src.health -= W.force * fire_dam_coeff
|
||||
if("brute")
|
||||
src.health -= W.force * brute_dam_coeff
|
||||
..()
|
||||
healthcheck()
|
||||
|
||||
/obj/machinery/bot/bullet_act(flag, A as obj)
|
||||
switch(flag)
|
||||
if (PROJECTILE_BULLET)
|
||||
src.health -= 20
|
||||
//if (PROJECTILE_WEAKBULLET || PROJECTILE_BEANBAG) //Detective's revolver fires marshmallows
|
||||
// src.health -= 2
|
||||
if (PROJECTILE_LASER)
|
||||
src.health -= 10
|
||||
if (PROJECTILE_PULSE)
|
||||
src.health -= 40
|
||||
healthcheck()
|
||||
|
||||
/obj/machinery/bot/meteorhit()
|
||||
src.explode()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/blob_act()
|
||||
src.health -= rand(20,40)*fire_dam_coeff
|
||||
healthcheck()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.explode()
|
||||
return
|
||||
if(2.0)
|
||||
src.health -= rand(5,10)*fire_dam_coeff
|
||||
src.health -= rand(10,20)*brute_dam_coeff
|
||||
healthcheck()
|
||||
return
|
||||
if(3.0)
|
||||
if (prob(50))
|
||||
src.health -= rand(1,5)*fire_dam_coeff
|
||||
src.health -= rand(1,5)*brute_dam_coeff
|
||||
healthcheck()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/bot/emp_act(severity)
|
||||
var/was_on = on
|
||||
stat |= EMPED
|
||||
var/obj/overlay/pulse2 = new/obj/overlay ( src.loc )
|
||||
pulse2.icon = 'effects.dmi'
|
||||
pulse2.icon_state = "empdisable"
|
||||
pulse2.name = "emp sparks"
|
||||
pulse2.anchored = 1
|
||||
pulse2.dir = pick(cardinal)
|
||||
|
||||
spawn(10)
|
||||
del(pulse2)
|
||||
if (on)
|
||||
turn_off()
|
||||
spawn(severity*300)
|
||||
stat &= ~EMPED
|
||||
if (was_on)
|
||||
turn_on()
|
||||
/******************************************************************/
|
||||
// Navigation procs
|
||||
// Used for A-star pathfinding
|
||||
|
||||
@@ -23,7 +23,8 @@
|
||||
density = 0
|
||||
anchored = 0
|
||||
//weight = 1.0E7
|
||||
var/on = 1
|
||||
health = 25
|
||||
maxhealth = 25
|
||||
var/cleaning = 0
|
||||
var/locked = 1
|
||||
var/screwloose = 0
|
||||
@@ -36,15 +37,35 @@
|
||||
var/oldloc = null
|
||||
req_access = list(access_janitor)
|
||||
var/path[] = new()
|
||||
|
||||
|
||||
|
||||
/obj/machinery/bot/cleanbot/New()
|
||||
..()
|
||||
src.get_targets()
|
||||
src.icon_state = "cleanbot[src.on]"
|
||||
|
||||
|
||||
/obj/machinery/bot/cleanbot/attack_hand(user as mob)
|
||||
/obj/machinery/bot/cleanbot/turn_on()
|
||||
. = ..()
|
||||
src.icon_state = "cleanbot[src.on]"
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/cleanbot/turn_off()
|
||||
..()
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.icon_state = "cleanbot[src.on]"
|
||||
src.path = new()
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/cleanbot/attack_hand(mob/user as mob)
|
||||
. = ..()
|
||||
if (.)
|
||||
return
|
||||
usr.machine = src
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/bot/cleanbot/proc/interact(mob/user as mob)
|
||||
var/dat
|
||||
dat += text({"
|
||||
<TT><B>Automatic Station Cleaner v1.0</B></TT><BR><BR>
|
||||
@@ -73,13 +94,10 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
src.add_fingerprint(usr)
|
||||
switch(href_list["operation"])
|
||||
if("start")
|
||||
src.on = !src.on
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.icon_state = "cleanbot[src.on]"
|
||||
src.path = new()
|
||||
src.updateUsrDialog()
|
||||
if (src.on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
if("blood")
|
||||
src.blood =!src.blood
|
||||
src.get_targets()
|
||||
@@ -94,12 +112,10 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/cleanbot/attack_ai()
|
||||
src.on = !src.on
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.icon_state = "cleanbot[src.on]"
|
||||
src.path = new()
|
||||
if (src.on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
|
||||
/obj/machinery/bot/cleanbot/attackby(obj/item/weapon/W, mob/user as mob)
|
||||
if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
@@ -108,7 +124,7 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
user << "You [ src.locked ? "lock" : "unlock"] the [src] behaviour controls."
|
||||
else
|
||||
user << "\red This [src] doesn't seem to accept your authority."
|
||||
if (istype(W, /obj/item/weapon/screwdriver))
|
||||
else if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if(!src.locked)
|
||||
src.panelopen = !src.panelopen
|
||||
user << "You [ src.panelopen ? "open" : "close"] the hidden panel on [src]."
|
||||
@@ -118,6 +134,8 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
src.screwloose = 1
|
||||
src.panelopen = 0
|
||||
src.locked = 1*/
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/bot/cleanbot/process()
|
||||
set background = 1
|
||||
@@ -211,6 +229,24 @@ text("<A href='?src=\ref[src];operation=oddbutton'>[src.oddbutton ? "Yes" : "No"
|
||||
src.anchored = 0
|
||||
src.target = null
|
||||
|
||||
/obj/machinery/bot/cleanbot/explode()
|
||||
src.on = 0
|
||||
src.visible_message("\red <B>[src] blows apart!</B>", 1)
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
new /obj/item/weapon/reagent_containers/glass/bucket(Tsec)
|
||||
|
||||
new /obj/item/device/prox_sensor(Tsec)
|
||||
|
||||
if (prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
|
||||
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/item/weapon/bucket_sensor/attackby(var/obj/item/W, mob/user as mob)
|
||||
if(istype(W, /obj/item/robot_parts/l_arm) || istype(W, /obj/item/robot_parts/r_arm))
|
||||
var/obj/machinery/bot/cleanbot/A = new /obj/machinery/bot/cleanbot
|
||||
|
||||
@@ -34,9 +34,10 @@
|
||||
layer = 5.0
|
||||
density = 0
|
||||
anchored = 0
|
||||
health = 25
|
||||
maxhealth = 25
|
||||
//weight = 1.0E7
|
||||
var/amount = 10
|
||||
var/on = 1
|
||||
var/repairing = 0
|
||||
var/improvefloors = 0
|
||||
var/eattiles = 0
|
||||
@@ -54,7 +55,28 @@
|
||||
..()
|
||||
src.updateicon()
|
||||
|
||||
/obj/machinery/bot/floorbot/attack_hand(user as mob)
|
||||
/obj/machinery/bot/floorbot/turn_on()
|
||||
. = ..()
|
||||
src.updateicon()
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/floorbot/turn_off()
|
||||
..()
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.updateicon()
|
||||
src.path = new()
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/floorbot/attack_hand(mob/user as mob)
|
||||
. = ..()
|
||||
if (.)
|
||||
return
|
||||
usr.machine = src
|
||||
interact(user)
|
||||
|
||||
/obj/machinery/bot/floorbot/proc/interact(mob/user as mob)
|
||||
var/dat
|
||||
dat += "<TT><B>Automatic Station Floor Repairer v1.0</B></TT><BR><BR>"
|
||||
dat += "Status: <A href='?src=\ref[src];operation=start'>[src.on ? "On" : "Off"]</A><BR>"
|
||||
@@ -86,13 +108,15 @@
|
||||
src.amount += loaded
|
||||
user << "\red You load [loaded] tiles into the floorbot. He now contains [src.amount] tiles!"
|
||||
src.updateicon()
|
||||
if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
else if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
|
||||
if(src.allowed(usr))
|
||||
src.locked = !src.locked
|
||||
user << "You [src.locked ? "lock" : "unlock"] the [src] behaviour controls."
|
||||
else
|
||||
user << "The [src] doesn't seem to accept your authority."
|
||||
src.updateUsrDialog()
|
||||
else
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/bot/floorbot/Topic(href, href_list)
|
||||
@@ -102,13 +126,10 @@
|
||||
src.add_fingerprint(usr)
|
||||
switch(href_list["operation"])
|
||||
if("start")
|
||||
src.on = !src.on
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.updateicon()
|
||||
src.path = new()
|
||||
src.updateUsrDialog()
|
||||
if (src.on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
if("improve")
|
||||
src.improvefloors = !src.improvefloors
|
||||
src.updateUsrDialog()
|
||||
@@ -136,12 +157,10 @@
|
||||
|
||||
|
||||
/obj/machinery/bot/floorbot/attack_ai()
|
||||
src.on = !src.on
|
||||
src.target = null
|
||||
src.oldtarget = null
|
||||
src.oldloc = null
|
||||
src.updateicon()
|
||||
src.path = new()
|
||||
if (src.on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
|
||||
/obj/machinery/bot/floorbot/process()
|
||||
set background = 1
|
||||
@@ -327,6 +346,26 @@
|
||||
else
|
||||
src.icon_state = "floorbot[src.on]e"
|
||||
|
||||
/obj/machinery/bot/floorbot/explode()
|
||||
src.on = 0
|
||||
src.visible_message("\red <B>[src] blows apart!</B>", 1)
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
new /obj/item/weapon/storage/toolbox/mechanical(Tsec)
|
||||
|
||||
new /obj/item/device/prox_sensor(Tsec)
|
||||
|
||||
if (prob(50))
|
||||
new /obj/item/robot_parts/l_arm(Tsec)
|
||||
|
||||
if (amount)
|
||||
new /obj/item/stack/tile(Tsec) // only one tile, yes
|
||||
|
||||
var/datum/effects/system/spark_spread/s = new /datum/effects/system/spark_spread
|
||||
s.set_up(3, 1, src)
|
||||
s.start()
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/item/weapon/storage/toolbox/mechanical/attackby(var/obj/item/stack/tile/T, mob/user as mob)
|
||||
|
||||
@@ -11,9 +11,9 @@
|
||||
layer = 5.0
|
||||
density = 1
|
||||
anchored = 0
|
||||
health = 20
|
||||
maxhealth = 20
|
||||
req_access =list(access_medical)
|
||||
var/on = 1
|
||||
var/health = 20
|
||||
var/stunned = 0 //It can be stunned by tasers. Delicate circuits.
|
||||
var/locked = 1
|
||||
var/emagged = 0
|
||||
@@ -79,16 +79,22 @@
|
||||
src.cam.c_tag = src.name
|
||||
src.cam.network = "SS13"
|
||||
|
||||
/obj/machinery/bot/medbot/examine()
|
||||
set src in view()
|
||||
..()
|
||||
/obj/machinery/bot/medbot/turn_on()
|
||||
. = ..()
|
||||
src.icon_state = "medibot[src.on]"
|
||||
src.updateUsrDialog()
|
||||
|
||||
/obj/machinery/bot/medbot/turn_off()
|
||||
..()
|
||||
src.patient = null
|
||||
src.oldpatient = null
|
||||
src.oldloc = null
|
||||
src.path = new()
|
||||
src.currently_healing = 0
|
||||
src.last_found = world.time
|
||||
src.icon_state = "medibot[src.on]"
|
||||
src.updateUsrDialog()
|
||||
|
||||
if (src.health < 20)
|
||||
if (src.health > 15)
|
||||
usr << text("\red [src]'s parts look loose.")
|
||||
else
|
||||
usr << text("\red <B>[src]'s parts look very loose!</B>")
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/attack_ai(mob/user as mob)
|
||||
return toggle_power()
|
||||
@@ -97,6 +103,9 @@
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/bot/medbot/attack_hand(mob/user as mob)
|
||||
. = ..()
|
||||
if (.)
|
||||
return
|
||||
var/dat
|
||||
dat += "<TT><B>Automatic Medical Unit v1.0</B></TT><BR><BR>"
|
||||
dat += "Status: <A href='?src=\ref[src];power=1'>[src.on ? "On" : "Off"]</A><BR>"
|
||||
@@ -190,12 +199,6 @@
|
||||
else
|
||||
user << "\red Access denied."
|
||||
|
||||
else if (istype(W, /obj/item/weapon/screwdriver))
|
||||
if (src.health < initial(src.health))
|
||||
src.health = initial(src.health)
|
||||
for(var/mob/O in viewers(src, null))
|
||||
O << "\red [user] repairs [src]!"
|
||||
|
||||
else if (istype(W, /obj/item/weapon/reagent_containers/glass))
|
||||
if(src.locked)
|
||||
user << "You cannot insert a beaker because the panel is locked!"
|
||||
@@ -212,17 +215,9 @@
|
||||
return
|
||||
|
||||
else
|
||||
switch(W.damtype)
|
||||
if("fire")
|
||||
src.health -= W.force * 0.75
|
||||
if("brute")
|
||||
src.health -= W.force * 0.5
|
||||
else
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
else if (W.force)
|
||||
step_to(src, (get_step_away(src,user)))
|
||||
..()
|
||||
if (health < maxhealth && !istype(W, /obj/item/weapon/screwdriver) && W.force)
|
||||
step_to(src, (get_step_away(src,user)))
|
||||
|
||||
|
||||
/obj/machinery/bot/medbot/process()
|
||||
@@ -317,15 +312,10 @@
|
||||
|
||||
|
||||
/obj/machinery/bot/medbot/proc/toggle_power()
|
||||
src.on = !src.on
|
||||
src.patient = null
|
||||
src.oldpatient = null
|
||||
src.oldloc = null
|
||||
src.path = new()
|
||||
src.currently_healing = 0
|
||||
src.last_found = world.time
|
||||
src.icon_state = "medibot[src.on]"
|
||||
src.updateUsrDialog()
|
||||
if (src.on)
|
||||
turn_off()
|
||||
else
|
||||
turn_on()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/proc/assess_patient(mob/living/carbon/C as mob)
|
||||
@@ -453,43 +443,11 @@
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/bullet_act(flag, A as obj)
|
||||
if (flag == PROJECTILE_BULLET)
|
||||
src.health -= 18
|
||||
if (flag == PROJECTILE_TASER)
|
||||
src.stunned = min(stunned+10,20)
|
||||
..()
|
||||
|
||||
else if (flag == PROJECTILE_TASER)
|
||||
src.stunned += 10
|
||||
if(src.stunned > 20)
|
||||
src.stunned = 20
|
||||
|
||||
else if (flag == PROJECTILE_LASER)
|
||||
src.health -= 8
|
||||
|
||||
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
|
||||
/obj/machinery/bot/medbot/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
src.explode()
|
||||
return
|
||||
if(2.0)
|
||||
src.health -= 15
|
||||
if (src.health <= 0)
|
||||
src.explode()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/meteorhit()
|
||||
src.explode()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/blob_act()
|
||||
if(prob(50))
|
||||
src.explode()
|
||||
return
|
||||
|
||||
/obj/machinery/bot/medbot/proc/explode()
|
||||
/obj/machinery/bot/medbot/explode()
|
||||
src.on = 0
|
||||
for(var/mob/O in hearers(src, null))
|
||||
O.show_message("\red <B>[src] blows apart!</B>", 1)
|
||||
|
||||
@@ -127,7 +127,7 @@
|
||||
radio_controller.add_object(src, control_freq, filter = RADIO_MULEBOT)
|
||||
radio_controller.add_object(src, beacon_freq, filter = RADIO_NAVBEACONS)
|
||||
spawn(10)
|
||||
post_signal(beacon_freq, "findbeacon", "delivery", filter = RADIO_NAVBEACONS)
|
||||
post_signal(beacon_freq, "findbeacon", "delivery", s_filter = RADIO_NAVBEACONS)
|
||||
|
||||
// receive radio signals
|
||||
// can detect bot status signals
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
/obj/item/weapon/storage/toolbox/emergency/New()
|
||||
..()
|
||||
new /obj/item/weapon/crowbar(src)
|
||||
new /obj/item/weapon/crowbar/red(src)
|
||||
new /obj/item/weapon/extinguisher(src)
|
||||
new /obj/item/device/flashlight(src)
|
||||
new /obj/item/device/radio(src)
|
||||
|
||||
@@ -1402,7 +1402,9 @@
|
||||
src << "Here's your rightclick admin verbs back"
|
||||
|
||||
src.verbs -= /client/proc/unstealthadmin
|
||||
var/temp = src.deadchat
|
||||
src.update_admins(src.holder.rank)
|
||||
src.deadchat = temp
|
||||
|
||||
/client/proc/stealthadmin()
|
||||
set name = "Toggle admin verb visibility"
|
||||
|
||||
@@ -63,6 +63,8 @@
|
||||
":b" = "binary",
|
||||
":a" = "alientalk",
|
||||
":t" = "Syndicate",
|
||||
":d" = "Mining",
|
||||
":q" = "Cargo",
|
||||
|
||||
//kinda localization -- rastaf0
|
||||
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
|
||||
@@ -79,6 +81,8 @@
|
||||
":è" = "binary",
|
||||
":ô" = "alientalk",
|
||||
":å" = "Syndicate",
|
||||
":â" = "Mining",
|
||||
":é" = "Cargo",
|
||||
)
|
||||
|
||||
message_mode = keys[channel_prefix]
|
||||
|
||||
@@ -1222,7 +1222,8 @@
|
||||
var/obj/item/weapon/grab/G = src.l_hand
|
||||
if (!( L.container.Find(G.affecting) ))
|
||||
L.container += G.affecting
|
||||
G.affecting.ret_grab(L, 1)
|
||||
if (G.affecting)
|
||||
G.affecting.ret_grab(L, 1)
|
||||
if (istype(src.r_hand, /obj/item/weapon/grab))
|
||||
var/obj/item/weapon/grab/G = src.r_hand
|
||||
if (!( L.container.Find(G.affecting) ))
|
||||
|
||||
@@ -232,6 +232,8 @@ mob/new_player
|
||||
AttemptLateSpawn("Warden", wardenMax)
|
||||
if ("29")
|
||||
AttemptLateSpawn("Shaft Miner", minerMax)
|
||||
if ("30")
|
||||
AttemptLateSpawn("Mime", mimeMax)
|
||||
|
||||
if(!ready && href_list["preferences"])
|
||||
preferences.process_link(src, href_list)
|
||||
@@ -376,6 +378,9 @@ mob/new_player
|
||||
if (IsJobAvailable("Clown",clownMax))
|
||||
dat += "<a href='byond://?src=\ref[src];SelectedJob=15'>Clown</a><br>"
|
||||
|
||||
if (IsJobAvailable("Mime",mimeMax))
|
||||
dat += "<a href='byond://?src=\ref[src];SelectedJob=30'>Mime</a><br>"
|
||||
|
||||
if (IsJobAvailable("Chef",chefMax))
|
||||
dat += "<a href='byond://?src=\ref[src];SelectedJob=16'>Chef</a><br>"
|
||||
|
||||
|
||||
@@ -135,6 +135,7 @@
|
||||
#define NOPOWER 2
|
||||
#define POWEROFF 4 // tbd
|
||||
#define MAINT 8 // under maintaince
|
||||
#define EMPED 16 // temporary broken by EMP pulse
|
||||
|
||||
#define ENGINE_EJECT_Z 3
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<tr>
|
||||
<td valign='top'>
|
||||
<b>Credits: </b><br>
|
||||
<font size='2'><b>Coders:</b> TLE, NEO, Errorage, muskets, veryinky, Skie, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport<br></font>
|
||||
<font size='2'><b>Coders:</b> TLE, NEO, Errorage, muskets, veryinky, Skie, Numbers, Agouri, Noka, Urist McDorf, Uhangi, Darem, Mport, rastaf0<br></font>
|
||||
<font size='2'><b>Spriters:</b> Agouri, Cheridan, Cruazy Guest, Deeaych, Deuryn, Matty406, Microwave, ShiftyEyesShady, Skie, Uhangi, Veyveyr<br></font>
|
||||
<font size='2'><b>Sounds:</b> Skie<br></font>
|
||||
<font size='2'><b>Thanks to:</b> CDK Station devs, GoonStation devs, the original SpaceStation developers and Erikat for the title image</font>
|
||||
@@ -43,6 +43,11 @@
|
||||
<ul>
|
||||
<li><b>Rastaf0 updated:</b>
|
||||
<ul>
|
||||
<li><b><font color='blue'>Added radio channels and headsets for miners (<tt>:h</tt> or <tt>:d</tt> ("diggers" lol)) and for cargo techs (<tt>:h</tt> or <tt>:q</tt> )</font></b></li>
|
||||
<li><b><font color='blue'>Added a personal headsets to HoP and QM.</font></b></li>
|
||||
<li><b><font color='blue'>Aliens now attack bots instead of opening control window.</font></b></li>
|
||||
<li><b><font color='blue'>All bots can be damaged and repaired.</font></b></li>
|
||||
<li><b><font color='blue'>All bots are effected to EMP now.</font></b></li>
|
||||
<li><b><font color='blue'>Atmos now starts with nitrous oxide in storage tank.</font></b></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
||||
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 15 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 4.2 KiB |