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
This commit is contained in:
rastaf.zero@gmail.com
2011-02-15 20:09:12 +00:00
parent c77c307200
commit 2d443ca199
25 changed files with 2263 additions and 2050 deletions

View File

@@ -101,6 +101,7 @@ var
viroMax = 1
wardenMax = 1
cmoMax = 1
mimeMax = 1
list/bombers = list( )
list/admin_log = list ( )

View File

@@ -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

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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)

View File

@@ -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

View File

@@ -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

File diff suppressed because it is too large Load Diff

View File

@@ -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)

View File

@@ -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)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -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

View File

@@ -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)

View File

@@ -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"

View File

@@ -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 @@
":<3A>" = "binary",
":<3A>" = "alientalk",
":<3A>" = "Syndicate",
":<3A>" = "Mining",
":<3A>" = "Cargo",
)
message_mode = keys[channel_prefix]

View File

@@ -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) ))

View File

@@ -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>"

View File

@@ -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