mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
Merge branch 'master' of https://github.com/Baystation12/Baystation12 into bs12_with_tgport, removed unnecessary includes fron the .dme
Conflicts: baystation12.dme Signed-off-by: Cael_Aislinn <cael_aislinn@yahoo.com.au>
This commit is contained in:
@@ -228,6 +228,8 @@
|
||||
#define FILE_DIR "code/WorkInProgress/virus2/Disease2"
|
||||
#define FILE_DIR "code/WorkInProgress/Wrongnumber"
|
||||
#define FILE_DIR "code/ZAS"
|
||||
#define FILE_DIR "config"
|
||||
#define FILE_DIR "config/names"
|
||||
#define FILE_DIR "html"
|
||||
#define FILE_DIR "icons"
|
||||
#define FILE_DIR "icons/48x48"
|
||||
@@ -250,10 +252,8 @@
|
||||
#define FILE_DIR "icons/vending_icons"
|
||||
#define FILE_DIR "interface"
|
||||
#define FILE_DIR "maps"
|
||||
#define FILE_DIR "maps/backup"
|
||||
#define FILE_DIR "maps/RandomZLevels"
|
||||
#define FILE_DIR "maps/RandomZLevels/backup"
|
||||
#define FILE_DIR "sound"
|
||||
#define FILE_DIR "music"#define FILE_DIR "sound"
|
||||
#define FILE_DIR "sound/AI"
|
||||
#define FILE_DIR "sound/ambience"
|
||||
#define FILE_DIR "sound/effects"
|
||||
@@ -267,8 +267,6 @@
|
||||
#define FILE_DIR "sound/violin"
|
||||
#define FILE_DIR "sound/voice"
|
||||
#define FILE_DIR "sound/weapons"
|
||||
#define FILE_DIR "tools"
|
||||
#define FILE_DIR "tools/Redirector"
|
||||
// END_FILE_DIR
|
||||
|
||||
// BEGIN_PREFERENCES
|
||||
@@ -636,6 +634,7 @@
|
||||
#include "code\game\objects\objs.dm"
|
||||
#include "code\game\objects\structures.dm"
|
||||
#include "code\game\objects\weapons.dm"
|
||||
#include "code\game\objects\closets\walllocker.dm"
|
||||
#include "code\game\objects\effects\aliens.dm"
|
||||
#include "code\game\objects\effects\biomass_rift.dm"
|
||||
#include "code\game\objects\effects\bump_teleporter.dm"
|
||||
@@ -1172,6 +1171,7 @@
|
||||
#include "code\modules\mob\new_player\savefile.dm"
|
||||
#include "code\modules\mob\new_player\skill.dm"
|
||||
#include "code\modules\mob\new_player\sprite_accessories.dm"
|
||||
#include "code\modules\mob\simple_animal\head.dm"
|
||||
#include "code\modules\paperwork\clipboard.dm"
|
||||
#include "code\modules\paperwork\filingcabinet.dm"
|
||||
#include "code\modules\paperwork\folders.dm"
|
||||
|
||||
@@ -67,7 +67,10 @@
|
||||
M.fields["alg_d"] = "No allergies have been detected in this patient."
|
||||
M.fields["cdi"] = "None"
|
||||
M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
|
||||
M.fields["notes"] = "No notes."
|
||||
if(H.med_record && !jobban_isbanned(H, "Records"))
|
||||
M.fields["notes"] = H.med_record
|
||||
else
|
||||
M.fields["notes"] = "No notes found."
|
||||
medical += M
|
||||
|
||||
//Security Record
|
||||
@@ -80,6 +83,10 @@
|
||||
S.fields["ma_crim"] = "None"
|
||||
S.fields["ma_crim_d"] = "No major crime convictions."
|
||||
S.fields["notes"] = "No notes."
|
||||
if(H.sec_record && !jobban_isbanned(H, "Records"))
|
||||
S.fields["notes"] = H.sec_record
|
||||
else
|
||||
S.fields["notes"] = "No notes."
|
||||
security += S
|
||||
|
||||
//Locked Record
|
||||
|
||||
@@ -32,15 +32,8 @@
|
||||
if(3)
|
||||
if(prob(1))
|
||||
if (affected_mob.nutrition > 100)
|
||||
affected_mob.Stun(rand(4,6))
|
||||
for(var/mob/O in viewers(world.view, affected_mob))
|
||||
O.show_message(text("<b>\red [] throws up!</b>", affected_mob), 1)
|
||||
playsound(affected_mob.loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
var/turf/location = affected_mob.loc
|
||||
if (istype(location, /turf/simulated))
|
||||
location.add_vomit_floor(affected_mob)
|
||||
affected_mob.nutrition -= 95
|
||||
affected_mob.adjustToxLoss(-1)
|
||||
var/mob/living/carbon/human/H = affected_mob
|
||||
H.vomit()
|
||||
else
|
||||
affected_mob << "\red You gag as you want to throw up, but there's nothing in your stomach!"
|
||||
affected_mob.Weaken(10)
|
||||
|
||||
@@ -95,7 +95,6 @@ var/list/admin_log = list ( )
|
||||
var/list/lastsignalers = list( ) //keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]"
|
||||
var/list/lawchanges = list( ) //Stores who uploaded laws to which silicon-based lifeform, and what the law was
|
||||
var/list/admins = list( )
|
||||
var/list/alien_whitelist = list( )
|
||||
var/list/shuttles = list( )
|
||||
var/list/reg_dna = list( )
|
||||
// list/traitobj = list( )
|
||||
|
||||
@@ -496,6 +496,12 @@
|
||||
var/jobName
|
||||
var/realJobName
|
||||
|
||||
// hack for alt titles
|
||||
if(istype(loc, /mob))
|
||||
var/mob/M = loc
|
||||
if(M.mind.role_alt_title == jobName && M.mind.assigned_role in get_all_jobs())
|
||||
return M.mind.assigned_role
|
||||
|
||||
if(istype(src, /obj/item/device/pda))
|
||||
if(src:id)
|
||||
jobName = src:id:assignment
|
||||
|
||||
@@ -28,5 +28,8 @@
|
||||
//the type of the ID the player will have
|
||||
var/idtype = /obj/item/weapon/card/id
|
||||
|
||||
//List of alternate titles, if any
|
||||
var/list/alt_titles
|
||||
|
||||
/datum/job/proc/equip(var/mob/living/carbon/human/H)
|
||||
return 1
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
spawn_positions = 3
|
||||
supervisors = "the chief medical officer"
|
||||
selection_color = "#ffeef0"
|
||||
alt_titles = list("Surgeon", "Emergency Physician")
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -49,10 +50,17 @@
|
||||
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
|
||||
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back)
|
||||
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||
if(H.mind.role_alt_title && H.mind.role_alt_title == "Emergency Physician")
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/fr_jacket(H), slot_wear_suit)
|
||||
else if(H.mind.role_alt_title && H.mind.role_alt_title == "Surgeon")
|
||||
H.equip_if_possible(new /obj/item/clothing/under/rank/medical/blue(H), slot_w_uniform)
|
||||
H.equip_if_possible(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/labcoat(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/regular(H), slot_l_hand)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
|
||||
if(H.backbag == 1)
|
||||
|
||||
@@ -84,6 +84,7 @@
|
||||
spawn_positions = 1
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#ffeeee"
|
||||
alt_titles = list("Forensic Technician")
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -96,12 +97,15 @@
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/det(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(H), slot_head)
|
||||
var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H)
|
||||
/* var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H)
|
||||
CIG.light("")
|
||||
H.equip_to_slot_or_del(CIG, slot_wear_mask)
|
||||
H.equip_to_slot_or_del(CIG, slot_wear_mask) */
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/det_suit(H), slot_wear_suit)
|
||||
if(H.mind.role_alt_title && H.mind.role_alt_title == "Forensic Technician")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/forensics/blue(H), slot_wear_suit)
|
||||
else
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/suit/det_suit(H), slot_wear_suit)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(H), slot_head)
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/lighter/zippo(H), slot_l_store)
|
||||
|
||||
if(H.backbag == 1)//Why cant some of these things spawn in his office?
|
||||
|
||||
@@ -44,6 +44,8 @@ var/global/datum/controller/occupations/job_master
|
||||
if(J.title == rank) return J
|
||||
return null
|
||||
|
||||
proc/GetAltTitle(mob/new_player/player, rank)
|
||||
return player.preferences.GetAltTitle(GetJob(rank))
|
||||
|
||||
proc/AssignRole(var/mob/new_player/player, var/rank, var/latejoin = 0)
|
||||
Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]")
|
||||
@@ -57,6 +59,7 @@ var/global/datum/controller/occupations/job_master
|
||||
if((job.current_positions < position_limit) || position_limit == -1)
|
||||
Debug("Player: [player] is now Rank: [rank], JCP:[job.current_positions], JPL:[position_limit]")
|
||||
player.mind.assigned_role = rank
|
||||
player.mind.role_alt_title = GetAltTitle(player, rank)
|
||||
unassigned -= player
|
||||
job.current_positions++
|
||||
return 1
|
||||
@@ -296,6 +299,9 @@ var/global/datum/controller/occupations/job_master
|
||||
H << "Your job is [rank] and the game just can't handle it! Please report this bug to an administrator."
|
||||
|
||||
H.job = rank
|
||||
if(H.mind && H.mind.assigned_role != rank)
|
||||
H.mind.assigned_role = rank
|
||||
H.mind.role_alt_title = null
|
||||
|
||||
if(!joined_late)
|
||||
var/obj/S = null
|
||||
@@ -338,15 +344,19 @@ var/global/datum/controller/occupations/job_master
|
||||
|
||||
H << "<B>You are the [rank].</B>"
|
||||
H << "<b>As the [rank] you answer directly to [job.supervisors]. Special circumstances may change this.</b>"
|
||||
spawnId(H,rank)
|
||||
|
||||
if(H.mind.assigned_role == rank && H.mind.role_alt_title)
|
||||
spawnId(H, rank, H.mind.role_alt_title)
|
||||
else
|
||||
spawnId(H,rank)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset(H), slot_ears)
|
||||
// H.update_icons()
|
||||
return 1
|
||||
|
||||
|
||||
proc/spawnId(var/mob/living/carbon/human/H, rank)
|
||||
proc/spawnId(var/mob/living/carbon/human/H, rank, title)
|
||||
if(!H) return 0
|
||||
if(!title) title = rank
|
||||
var/obj/item/weapon/card/id/C = null
|
||||
|
||||
var/datum/job/job = null
|
||||
@@ -364,9 +374,9 @@ var/global/datum/controller/occupations/job_master
|
||||
C = new /obj/item/weapon/card/id(H)
|
||||
if(C)
|
||||
C.registered_name = H.real_name
|
||||
C.assignment = rank
|
||||
C.assignment = title
|
||||
C.name = "[C.registered_name]'s ID Card ([C.assignment])"
|
||||
C.access = get_access(C.assignment)
|
||||
C.access = get_access(rank)
|
||||
H.equip_to_slot_or_del(C, slot_wear_id)
|
||||
/* if(prob(50))
|
||||
H.equip_to_slot_or_del(new /obj/item/weapon/pen(H), slot_r_store)
|
||||
|
||||
@@ -14,7 +14,7 @@ var/list/whitelist
|
||||
return 0
|
||||
return ("[M.ckey]" in whitelist)
|
||||
|
||||
var/list/alien_whitelist
|
||||
var/list/alien_whitelist = list()
|
||||
|
||||
proc/load_alienwhitelist()
|
||||
var/text = file2text("config/alienwhitelist.txt")
|
||||
@@ -25,8 +25,10 @@ proc/load_alienwhitelist()
|
||||
|
||||
/proc/is_alien_whitelisted(mob/M, var/species)
|
||||
if(!alien_whitelist)
|
||||
world << "no alien whitelist"
|
||||
return 0
|
||||
if((M.client) && (M.client.holder) && (M.client.holder.level) && (M.client.holder.level >= 5))
|
||||
world << "admin alien whitelisted"
|
||||
return 1
|
||||
if(M && species)
|
||||
for (var/s in alien_whitelist)
|
||||
|
||||
@@ -84,7 +84,7 @@
|
||||
/obj/item/mecha_parts/part/durand_right_leg,
|
||||
/obj/item/mecha_parts/part/durand_armour
|
||||
),
|
||||
"H.O.N.K"=list(
|
||||
/* "H.O.N.K"=list(
|
||||
/obj/item/mecha_parts/chassis/honker,
|
||||
/obj/item/mecha_parts/part/honker_torso,
|
||||
/obj/item/mecha_parts/part/honker_head,
|
||||
@@ -92,7 +92,7 @@
|
||||
/obj/item/mecha_parts/part/honker_right_arm,
|
||||
/obj/item/mecha_parts/part/honker_left_leg,
|
||||
/obj/item/mecha_parts/part/honker_right_leg
|
||||
),
|
||||
), */
|
||||
"Exosuit Equipment"=list(
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,
|
||||
/obj/item/mecha_parts/mecha_equipment/tool/drill,
|
||||
@@ -106,9 +106,9 @@
|
||||
///obj/item/mecha_parts/mecha_equipment/jetpack, //TODO MECHA JETPACK SPRITE MISSING
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar,
|
||||
/* /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar,
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/honker
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/honker*/
|
||||
),
|
||||
|
||||
"Cyborg Upgrade Modules" = list(
|
||||
|
||||
@@ -6,287 +6,33 @@
|
||||
name = "Wall Locker"
|
||||
icon = 'walllocker.dmi'
|
||||
icon_state = "wall-locker"
|
||||
density = 1
|
||||
flags = FPRINT
|
||||
var/list/spawnitems = list()
|
||||
var/amount = 3 // spawns each items X times.
|
||||
density = 0
|
||||
anchored = 1
|
||||
opened = 0
|
||||
var/locked = 1
|
||||
var/bang_time = 0
|
||||
var/broken = 0
|
||||
var/large = 1
|
||||
icon_closed = "wall-locker"
|
||||
var/icon_locked = "wall-locker1"
|
||||
icon_opened = "wall-lockeropen"
|
||||
var/icon_broken = "wall-lockerbroken"
|
||||
var/icon_off = "wall-lockeroff"
|
||||
|
||||
/obj/structure/closet/walllocker/attack_hand(mob/user as mob)
|
||||
//spawns endless (3 sets) amounts of breathmask, emergency oxy tank and crowbar
|
||||
|
||||
/obj/structure/closet/walllocker/emerglocker
|
||||
name = "emergency locker"
|
||||
desc = "A wall mounted locker with emergency supplies"
|
||||
var/list/spawnitems = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/crowbar)
|
||||
var/amount = 3 // spawns each items X times.
|
||||
icon_state = "emerg"
|
||||
|
||||
/obj/structure/closet/walllocker/emerglocker/attack_hand(mob/user as mob)
|
||||
if (istype(user, /mob/living/silicon/ai)) //Added by Strumpetplaya - AI shouldn't be able to
|
||||
return //activate emergency lockers. This fixes that. (Does this make sense, the AI can't call attack_hand, can it? --Mloc)
|
||||
if(!amount)
|
||||
usr << "It's empty.."
|
||||
usr << "<spawn class='notice'>It's empty.."
|
||||
return
|
||||
if(amount)
|
||||
usr << "<spawn class='notice'>You take out some items from \the [src]."
|
||||
for(var/path in spawnitems)
|
||||
new path(src.loc)
|
||||
amount--
|
||||
return
|
||||
|
||||
/obj/structure/closet/walllocker/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if (src.opened)
|
||||
if (istype(W, /obj/item/weapon/grab))
|
||||
if (src.large)
|
||||
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
|
||||
else
|
||||
user << "The locker is too small to stuff [W] into!"
|
||||
user.drop_item()
|
||||
if (W)
|
||||
W.loc = src.loc
|
||||
else if(src.broken)
|
||||
user << "\red It appears to be broken."
|
||||
return
|
||||
else if(istype(W, /obj/item/weapon/card/emag) && !src.broken)
|
||||
var/obj/item/weapon/card/emag/E = W
|
||||
if(E.uses)
|
||||
E.uses--
|
||||
else
|
||||
return
|
||||
src.broken = 1
|
||||
src.locked = 0
|
||||
src.icon_state = src.icon_broken
|
||||
for(var/mob/O in viewers(user, 3))
|
||||
if ((O.client && !( O.blinded )))
|
||||
O << text("\blue The locker has been broken by [user] with an electromagnetic card!")
|
||||
else if(src.allowed(user))
|
||||
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
|
||||
|
||||
else
|
||||
user << "\red Access Denied"
|
||||
return
|
||||
|
||||
/obj/structure/closet/walllocker/security
|
||||
name = "wall locker"
|
||||
req_access = list(ACCESS_SECURITY)
|
||||
icon_state = "wall-locker1"
|
||||
density = 1
|
||||
|
||||
/obj/structure/closet/walllocker/New()
|
||||
spawn(10)
|
||||
for(var/obj/item/A in src.loc.contents)
|
||||
A.loc = src
|
||||
|
||||
/obj/structure/closet/walllocker/alter_health()
|
||||
return get_turf(src)
|
||||
|
||||
/obj/structure/closet/walllocker/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
|
||||
return src.opened
|
||||
|
||||
for(var/mob/M in src)
|
||||
M.loc = src.loc
|
||||
if (M.client)
|
||||
M.client.eye = M.client.mob
|
||||
M.client.perspective = MOB_PERSPECTIVE
|
||||
|
||||
if (!src.can_open())
|
||||
return 0
|
||||
|
||||
src.dump_contents()
|
||||
|
||||
src.icon_state = src.icon_opened
|
||||
src.opened = 1
|
||||
playsound(src.loc, 'click.ogg', 15, 1, -3)
|
||||
return 1
|
||||
|
||||
if (!src.can_close())
|
||||
return 0
|
||||
|
||||
for (var/obj/item/I in src.loc)
|
||||
if (!I.anchored)
|
||||
I.loc = src
|
||||
|
||||
/*for (var/obj/overlay/o in src.loc) //REMOVE THIS
|
||||
if (!o.anchored)
|
||||
o.loc = src*/
|
||||
|
||||
for (var/mob/M in src.loc)
|
||||
if (M.buckled)
|
||||
continue
|
||||
|
||||
if (M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.client.eye = src
|
||||
|
||||
M.loc = src
|
||||
src.icon_state = src.icon_closed
|
||||
src.opened = 0
|
||||
playsound(src.loc, 'click.ogg', 15, 1, -3)
|
||||
return 1
|
||||
|
||||
/obj/structure/closet/walllocker/ex_act(severity)
|
||||
switch(severity)
|
||||
if (1)
|
||||
for (var/atom/movable/A as mob|obj in src)
|
||||
A.loc = src.loc
|
||||
ex_act(severity)
|
||||
del(src)
|
||||
if (2)
|
||||
if (prob(50))
|
||||
for (var/atom/movable/A as mob|obj in src)
|
||||
A.loc = src.loc
|
||||
ex_act(severity)
|
||||
del(src)
|
||||
if (3)
|
||||
if (prob(5))
|
||||
for (var/atom/movable/A as mob|obj in src)
|
||||
A.loc = src.loc
|
||||
ex_act(severity)
|
||||
del(src)
|
||||
|
||||
/obj/structure/closet/walllocker/blob_act()
|
||||
if (prob(50))
|
||||
for(var/atom/movable/A as mob|obj in src)
|
||||
A.loc = src.loc
|
||||
del(src)
|
||||
|
||||
/obj/structure/closet/walllocker/meteorhit(obj/O as obj)
|
||||
if (O.icon_state == "flaming")
|
||||
for(var/obj/item/I in src)
|
||||
I.loc = src.loc
|
||||
for(var/mob/M in src)
|
||||
M.loc = src.loc
|
||||
if (M.client)
|
||||
M.client.eye = M.client.mob
|
||||
M.client.perspective = MOB_PERSPECTIVE
|
||||
src.icon_state = src.icon_broken
|
||||
del(src)
|
||||
return
|
||||
return
|
||||
|
||||
/obj/structure/closet/walllocker/bullet_act(flag)
|
||||
/* Just in case someone gives closets health
|
||||
if (flag == PROJECTILE_BULLET)
|
||||
src.health -= 1
|
||||
src.healthcheck()
|
||||
return
|
||||
if (flag != PROJECTILE_LASER)
|
||||
src.health -= 3
|
||||
src.healthcheck()
|
||||
return
|
||||
else
|
||||
src.health -= 5
|
||||
src.healthcheck()
|
||||
return
|
||||
*/
|
||||
if(prob(1.5))
|
||||
for (var/atom/movable/A as mob|obj in src)
|
||||
A.loc = src.loc
|
||||
del(src)
|
||||
return
|
||||
|
||||
/obj/structure/closet/walllocker/relaymove(mob/user as mob)
|
||||
if (user.stat)
|
||||
return
|
||||
if (!( src.locked ))
|
||||
for(var/obj/item/I in src)
|
||||
I.loc = src.loc
|
||||
for(var/mob/M in src)
|
||||
M.loc = src.loc
|
||||
if (M.client)
|
||||
M.client.eye = M.client.mob
|
||||
M.client.perspective = MOB_PERSPECTIVE
|
||||
src.icon_state = src.icon_opened
|
||||
src.opened = 1
|
||||
else if(src.locked && world.timeofday - bang_time >= 14)
|
||||
user << "\blue It's locked!"
|
||||
for(var/mob/M in hearers(src, null))
|
||||
if(!(M.disabilities & 32) && M.ear_deaf == 0)
|
||||
M << text("<FONT size=[]>BANG, bang!</FONT>", max(0, 5 - get_dist(src, M)))
|
||||
//user.unlock_medal("It's a trap!", 0, "Get locked or welded into a locker...", "easy")
|
||||
bang_time = world.timeofday
|
||||
return
|
||||
return
|
||||
|
||||
/obj/structure/closet/walllocker/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
|
||||
if ((user.restrained() || user.stat))
|
||||
return
|
||||
if ((!( istype(O, /atom/movable) ) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(src)))
|
||||
return
|
||||
if(!src.opened)
|
||||
return
|
||||
if(istype(O, /obj/structure/closet/walllocker) || istype(O, /obj/structure/closet))
|
||||
return
|
||||
step_towards(O, src.loc)
|
||||
if (user != O)
|
||||
for(var/mob/B in viewers(user, 3))
|
||||
if ((B.client && !( B.blinded )))
|
||||
B << text("\red [] stuffs [] into []!", user, O, src)
|
||||
src.add_fingerprint(user)
|
||||
return
|
||||
/*
|
||||
//obj/structure/closet/attack_hand(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
if (!src.opened && !src.locked)
|
||||
if(!src.can_open())
|
||||
return
|
||||
//open it
|
||||
for(var/obj/item/I in src)
|
||||
I.loc = src.loc
|
||||
for(var/mob/M in src)
|
||||
M.loc = src.loc
|
||||
if (M.client)
|
||||
M.client.eye = M.client.mob
|
||||
M.client.perspective = MOB_PERSPECTIVE
|
||||
src.icon_state = src.icon_opened
|
||||
playsound(src.loc, 'click.ogg', 15, 1, -3)
|
||||
src.opened = 1
|
||||
else if(src.opened)
|
||||
if(!src.can_close())
|
||||
return
|
||||
//close it
|
||||
for(var/obj/item/I in src.loc)
|
||||
if (!( I.anchored ))
|
||||
I.loc = src
|
||||
for(var/mob/M in src.loc)
|
||||
if (M.buckled)
|
||||
continue
|
||||
if (M.client)
|
||||
M.client.perspective = EYE_PERSPECTIVE
|
||||
M.client.eye = src
|
||||
M.loc = src
|
||||
src.icon_state = src.icon_closed
|
||||
playsound(src.loc, 'click.ogg', 15, 1, -3)
|
||||
src.opened = 0
|
||||
else
|
||||
return src.attackby(null, user)
|
||||
return*/
|
||||
|
||||
/obj/structure/closet/walllocker/attack_hand(mob/user as mob)
|
||||
src.add_fingerprint(user)
|
||||
|
||||
if (!src.toggle())
|
||||
return src.attackby(null, user)
|
||||
|
||||
/obj/structure/closet/walllocker/attack_paw(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
//spawns endless amounts of breathmask, emergency oxy tank and crowbar
|
||||
|
||||
/obj/structure/closet/walllocker/emerglocker
|
||||
name = "Emergency Locker"
|
||||
spawnitems = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/crowbar)
|
||||
icon_state = "emerg"
|
||||
|
||||
/obj/structure/closet/walllocker/emerglocker/north
|
||||
pixel_y = 32
|
||||
dir = SOUTH
|
||||
|
||||
@@ -107,11 +107,8 @@ Implant Specifics:<BR>"}
|
||||
return
|
||||
|
||||
hear(var/msg)
|
||||
world << "Implant heard: [msg]"
|
||||
var/list/replacechars = list("'" = "","\"" = "",">" = "","<" = "","(" = "",")" = "")
|
||||
msg = sanitize_simple(msg, replacechars)
|
||||
world << "Implant understood: [msg]"
|
||||
world << "Implant's phrase: [phrase]"
|
||||
if(findtext(msg,phrase))
|
||||
if(istype(imp_in, /mob/))
|
||||
var/mob/T = imp_in
|
||||
@@ -269,8 +266,6 @@ the implant may become unstable and either pre-maturely inject the subject or si
|
||||
process()
|
||||
if (!implanted) return
|
||||
var/mob/M = imp_in
|
||||
if (M == null)
|
||||
world << "Are?.."
|
||||
var/area/t = get_area(M)
|
||||
|
||||
if(isnull(M)) // If the mob got gibbed
|
||||
|
||||
@@ -22,29 +22,31 @@
|
||||
/obj/structure/closet/emcloset/New()
|
||||
..()
|
||||
|
||||
if (prob(40))
|
||||
new /obj/item/weapon/storage/toolbox/emergency(src)
|
||||
|
||||
switch (pickweight(list("small" = 40, "aid" = 25, "tank" = 20, "both" = 10, "nothing" = 4, "delete" = 1)))
|
||||
switch (pickweight(list("small" = 55, "aid" = 25, "tank" = 10, "both" = 10, "nothing" = 0, "delete" = 0)))
|
||||
if ("small")
|
||||
new /obj/item/weapon/tank/emergency_oxygen(src)
|
||||
new /obj/item/weapon/tank/emergency_oxygen(src)
|
||||
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
if ("aid")
|
||||
new /obj/item/weapon/tank/emergency_oxygen(src)
|
||||
new /obj/item/weapon/storage/firstaid/o2(src)
|
||||
|
||||
if ("tank")
|
||||
new /obj/item/weapon/tank/air(src)
|
||||
|
||||
if ("both")
|
||||
new /obj/item/weapon/tank/emergency_oxygen(src)
|
||||
new /obj/item/weapon/storage/toolbox/emergency(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
|
||||
new /obj/item/weapon/storage/firstaid/o2(src)
|
||||
if ("tank")
|
||||
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
if ("both")
|
||||
new /obj/item/weapon/storage/toolbox/emergency(src)
|
||||
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/weapon/storage/firstaid/o2(src)
|
||||
if ("nothing")
|
||||
// doot
|
||||
|
||||
// teehee
|
||||
// teehee - Ah, tg coders...
|
||||
if ("delete")
|
||||
del(src)
|
||||
|
||||
@@ -56,7 +58,7 @@
|
||||
/obj/structure/closet/emcloset/legacy/New()
|
||||
new /obj/item/weapon/tank/oxygen(src)
|
||||
new /obj/item/clothing/mask/gas(src)
|
||||
|
||||
|
||||
/*
|
||||
* Fire Closet
|
||||
*/
|
||||
|
||||
@@ -112,4 +112,10 @@
|
||||
name = "suspenders"
|
||||
desc = "They suspend the illusion of the mime's play."
|
||||
icon = 'icons/obj/clothing/belts.dmi'
|
||||
icon_state = "suspenders"
|
||||
icon_state = "suspenders"
|
||||
|
||||
/obj/item/clothing/suit/fr_jacket
|
||||
name = "first responder jacket"
|
||||
desc = "A high-visibility jacket worn by medical first responders."
|
||||
icon_state = "fr_jacket_open"
|
||||
item_state = "fr_jacket"
|
||||
@@ -332,19 +332,19 @@
|
||||
icon = 'custom_items.dmi'
|
||||
icon_state = "swatcap"
|
||||
|
||||
/obj/item/clothing/head/helmet/welding/fluff/alice_mccrea_1 //madmalicemccrea: Alice McCrea
|
||||
/obj/item/clothing/head/welding/fluff/alice_mccrea_1 //madmalicemccrea: Alice McCrea
|
||||
name = "flame decal welding helmet"
|
||||
desc = "A welding helmet adorned with flame decals, and several cryptic slogans of varying degrees of legibility. \"Fly the Friendly Skies\" is clearly visible, written above the visor, for some reason."
|
||||
icon = 'custom_items.dmi'
|
||||
icon_state = "alice_mccrea_1"
|
||||
|
||||
/obj/item/clothing/head/helmet/welding/fluff/yuki_matsuda_1 //searif: Yuki Matsuda
|
||||
/obj/item/clothing/head/welding/fluff/yuki_matsuda_1 //searif: Yuki Matsuda
|
||||
name = "white decal welding helmet"
|
||||
desc = "A white welding helmet with a character written across it."
|
||||
icon = 'custom_items.dmi'
|
||||
icon_state = "yuki_matsuda_1"
|
||||
|
||||
/obj/item/clothing/head/helmet/welding/fluff/norah_briggs_1 //bountylord13: Norah Briggs
|
||||
/obj/item/clothing/head/welding/fluff/norah_briggs_1 //bountylord13: Norah Briggs
|
||||
name = "blue flame decal welding helmet"
|
||||
desc = "A welding helmet with blue flame decals on it."
|
||||
icon = 'custom_items.dmi'
|
||||
|
||||
@@ -270,12 +270,12 @@
|
||||
if(prob(round((50 - nutrition) / 100)))
|
||||
src << "\blue You feel fit again!"
|
||||
mutations.Remove(FAT)
|
||||
else
|
||||
/* else
|
||||
if(nutrition > 500)
|
||||
if(prob(5 + round((nutrition - 200) / 2)))
|
||||
src << "\red You suddenly feel blubbery!"
|
||||
mutations.Add(FAT)
|
||||
|
||||
FUCK YOU FATCODE -Hawk */
|
||||
if (nutrition > 0)
|
||||
nutrition -= HUNGER_FACTOR
|
||||
|
||||
|
||||
@@ -186,12 +186,12 @@
|
||||
if(prob(round((50 - nutrition) / 100)))
|
||||
src << "\blue You feel fit again!"
|
||||
mutations.Add(FAT)
|
||||
else
|
||||
/* else
|
||||
if(nutrition > 500)
|
||||
if(prob(5 + round((nutrition - max_grown) / 2)))
|
||||
src << "\red You suddenly feel blubbery!"
|
||||
mutations.Add(FAT)
|
||||
|
||||
FUCK YOU MORE FAT CODE -Hawk*/
|
||||
if (nutrition > 0)
|
||||
nutrition-= HUNGER_FACTOR
|
||||
|
||||
|
||||
@@ -226,10 +226,10 @@
|
||||
if(nutrition < 100)
|
||||
msg += "[t_He] [t_is] severely malnourished.\n"
|
||||
else if(nutrition >= 500)
|
||||
if(usr.nutrition < 100)
|
||||
/*if(usr.nutrition < 100)
|
||||
msg += "[t_He] [t_is] plump and delicious looking - Like a fat little piggy. A tasty piggy.\n"
|
||||
else
|
||||
msg += "[t_He] [t_is] quite chubby.\n"
|
||||
else*/
|
||||
msg += "[t_He] [t_is] quite chubby.\n"
|
||||
|
||||
msg += "</span>"
|
||||
|
||||
|
||||
@@ -805,4 +805,26 @@
|
||||
xylophone = 1
|
||||
spawn(1200)
|
||||
xylophone=0
|
||||
return
|
||||
return
|
||||
|
||||
/mob/living/carbon/human/proc/vomit()
|
||||
if(!lastpuke)
|
||||
lastpuke = 1
|
||||
src << "<spawn class='warning'>You feel nauseous..."
|
||||
spawn(150) //15 seconds until second warning
|
||||
src << "<spawn class='warning'>You feel like you are about to throw up!"
|
||||
spawn(100) //and you have 10 more for mad dash to the bucket
|
||||
Stun(5)
|
||||
|
||||
src.visible_message("<spawn class='warning'>[src] throws up!","<spawn class='warning'>You throw up!")
|
||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
var/turf/location = loc
|
||||
if (istype(location, /turf/simulated))
|
||||
location.add_vomit_floor(src, 1)
|
||||
|
||||
nutrition -= 40
|
||||
adjustToxLoss(-3)
|
||||
spawn(350) //wait 35 seconds before next volley
|
||||
lastpuke = 0
|
||||
|
||||
|
||||
@@ -191,6 +191,27 @@
|
||||
if(w_uniform)
|
||||
w_uniform.add_fingerprint(M)
|
||||
var/datum/organ/external/affecting = get_organ(ran_zone(M.zone_sel.selecting))
|
||||
|
||||
if (istype(r_hand,/obj/item/weapon/gun) || istype(l_hand,/obj/item/weapon/gun))
|
||||
var/obj/item/weapon/gun/W = null
|
||||
var/chance = 0
|
||||
|
||||
if (istype(l_hand,/obj/item/weapon/gun))
|
||||
W = l_hand
|
||||
chance = hand ? 40 : 20
|
||||
|
||||
if (istype(r_hand,/obj/item/weapon/gun))
|
||||
W = r_hand
|
||||
chance = !hand ? 40 : 20
|
||||
|
||||
if (prob(chance))
|
||||
visible_message("<spawn class=danger>[src]'s [W] goes off during struggle!")
|
||||
var/list/turfs = list()
|
||||
for(var/turf/T in view())
|
||||
turfs += T
|
||||
var/turf/target = pick(turfs)
|
||||
return W.afterattack(target,src)
|
||||
|
||||
var/randn = rand(1, 100)
|
||||
if (randn <= 25)
|
||||
apply_effect(4, WEAKEN, run_armor_check(affecting, "melee"))
|
||||
|
||||
@@ -359,8 +359,8 @@
|
||||
var/hptoreg = 3
|
||||
if(stat==UNCONSCIOUS) hptoreg=1
|
||||
if(stat==DEAD) hptoreg=0
|
||||
for(var/i=0; i<hptoreg; i++)
|
||||
var/list/damages
|
||||
for(var/i=0, i<hptoreg, i++)
|
||||
var/list/damages = new/list()
|
||||
if(getToxLoss())
|
||||
damages+="tox"
|
||||
if(getOxyLoss())
|
||||
@@ -975,7 +975,7 @@
|
||||
update_mutations(0)
|
||||
update_inv_w_uniform(0)
|
||||
update_inv_wear_suit()
|
||||
else
|
||||
/* else
|
||||
if(overeatduration > 500)
|
||||
src << "\red You suddenly feel blubbery!"
|
||||
mutations.Add(FAT)
|
||||
@@ -983,7 +983,7 @@
|
||||
update_mutations(0)
|
||||
update_inv_w_uniform(0)
|
||||
update_inv_wear_suit()
|
||||
|
||||
AND YOU */
|
||||
// nutrition decrease
|
||||
if (nutrition > 0 && stat != 2)
|
||||
nutrition = max (0, nutrition - HUNGER_FACTOR)
|
||||
@@ -1401,23 +1401,7 @@
|
||||
// Puke if toxloss is too high
|
||||
if(!stat)
|
||||
if (getToxLoss() >= 45 && nutrition > 20)
|
||||
lastpuke ++
|
||||
if(lastpuke >= 25) // about 25 second delay I guess
|
||||
Stun(5)
|
||||
|
||||
for(var/mob/O in viewers(world.view, src))
|
||||
O.show_message(text("<b>\red [] throws up!</b>", src), 1)
|
||||
playsound(loc, 'sound/effects/splat.ogg', 50, 1)
|
||||
|
||||
var/turf/location = loc
|
||||
if (istype(location, /turf/simulated))
|
||||
location.add_vomit_floor(src, 1)
|
||||
|
||||
nutrition -= 20
|
||||
adjustToxLoss(-3)
|
||||
|
||||
// make it so you can only puke so fast
|
||||
lastpuke = 0
|
||||
vomit()
|
||||
|
||||
//0.1% chance of playing a scary sound to someone who's in complete darkness
|
||||
if(isturf(loc) && rand(1,1000) == 1)
|
||||
|
||||
@@ -245,21 +245,8 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
lying_icon = new /icon('icons/mob/human.dmi', "torso_[g]_l")
|
||||
individual_limbs = 1
|
||||
|
||||
//remove destroyed limbs from base icon
|
||||
for(var/datum/organ/external/part in organs)
|
||||
if(!istype(part, /datum/organ/external/groin) \
|
||||
&& !istype(part, /datum/organ/external/chest) \
|
||||
&& (part.status & ORGAN_DESTROYED))
|
||||
var/icon/temp = new /icon('dam_mask.dmi', "[part.icon_name]")
|
||||
temp.MapColors(-1,0,0,0, 0,-1,0,0, 0,0,-1,0, 0,0,0,-1, 1,1,1,1)
|
||||
stand_icon.AddAlphaMask(temp)
|
||||
|
||||
temp = new /icon('dam_mask.dmi', "[part.icon_name]2")
|
||||
temp.MapColors(-1,0,0,0, 0,-1,0,0, 0,0,-1,0, 0,0,0,-1, 1,1,1,1)
|
||||
lying_icon.AddAlphaMask(temp)
|
||||
|
||||
// Draw each individual limb (AterIgnis: not sure why this is needed at all - base icon have all of these, but that was before me)
|
||||
if(!husk && individual_limbs)
|
||||
// Draw each individual limb
|
||||
if(individual_limbs)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', "chest_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('icons/mob/human.dmi', "chest_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
@@ -268,24 +255,35 @@ proc/get_damage_icon_part(damage_state, body_part)
|
||||
stand_icon.Blend(new /icon('icons/mob/human.dmi', "head_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('icons/mob/human.dmi', "head_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
for(var/datum/organ/external/part in organs)
|
||||
if(!istype(part, /datum/organ/external/groin) \
|
||||
&& !istype(part, /datum/organ/external/chest) \
|
||||
&& !istype(part, /datum/organ/external/head) \
|
||||
&& !(part.status & ORGAN_DESTROYED))
|
||||
var/icon/temp = new /icon('human.dmi', "[part.icon_name]_s")
|
||||
if(part.status & ORGAN_ROBOT) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
|
||||
stand_icon.Blend(temp, ICON_OVERLAY)
|
||||
temp = new /icon('human.dmi', "[part.icon_name]_l")
|
||||
if(part.status & ORGAN_ROBOT) temp.MapColors(rgb(77,77,77), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
|
||||
lying_icon.Blend(temp , ICON_OVERLAY)
|
||||
|
||||
stand_icon.Blend(new /icon('human.dmi', "groin_[g]_s"), ICON_OVERLAY)
|
||||
lying_icon.Blend(new /icon('human.dmi', "groin_[g]_l"), ICON_OVERLAY)
|
||||
|
||||
// Draw nondestroyed robotic limbs grayscale
|
||||
for(var/datum/organ/external/part in organs)
|
||||
if(!istype(part, /datum/organ/external/groin) \
|
||||
&& !istype(part, /datum/organ/external/chest) \
|
||||
&& !istype(part, /datum/organ/external/head) \
|
||||
&& !(part.status & ORGAN_DESTROYED))
|
||||
var/icon/temp = new /icon('human.dmi', "[part.icon_name]_s")
|
||||
if(part.status & ORGAN_ROBOT)
|
||||
temp.MapColors(rgb(77,77,77,0), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
|
||||
stand_icon.Blend(temp, ICON_OVERLAY)
|
||||
if (husk)
|
||||
var/icon/husk_s = new /icon('human.dmi', "husk_s")
|
||||
var/icon/husk_l = new /icon('human.dmi', "husk_l")
|
||||
|
||||
temp = new /icon('human.dmi', "[part.icon_name]_l")
|
||||
if(part.status & ORGAN_ROBOT)
|
||||
temp.MapColors(rgb(77,77,77,0), rgb(150,150,150), rgb(28,28,28), rgb(0,0,0))
|
||||
lying_icon.Blend(temp, ICON_OVERLAY)
|
||||
for(var/datum/organ/external/part in organs)
|
||||
if(!istype(part, /datum/organ/external/groin) \
|
||||
&& !istype(part, /datum/organ/external/chest) \
|
||||
&& !istype(part, /datum/organ/external/head) \
|
||||
&& (part.status & ORGAN_DESTROYED))
|
||||
husk_s.Blend(new /icon('dam_mask.dmi', "[part.icon_name]"), ICON_SUBTRACT)
|
||||
husk_l.Blend(new /icon('dam_mask.dmi', "[part.icon_name]2"), ICON_SUBTRACT)
|
||||
|
||||
stand_icon.Blend(husk_s, ICON_OVERLAY)
|
||||
lying_icon.Blend(husk_l, ICON_OVERLAY)
|
||||
|
||||
//Skin tone
|
||||
if(!skeleton)
|
||||
|
||||
@@ -143,6 +143,62 @@
|
||||
else
|
||||
message = "<B>[src]</B> looks."
|
||||
m_type = 1
|
||||
if("beep")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<B>[src]</B> beeps at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> beeps."
|
||||
playsound(src.loc, 'twobeep.ogg', 50, 0)
|
||||
m_type = 2
|
||||
|
||||
if("ping")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<B>[src]</B> pings at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> pings."
|
||||
playsound(src.loc, 'ping.ogg', 50, 0)
|
||||
m_type = 2
|
||||
|
||||
if("buzz")
|
||||
var/M = null
|
||||
if(param)
|
||||
for (var/mob/A in view(null, null))
|
||||
if (param == A.name)
|
||||
M = A
|
||||
break
|
||||
if(!M)
|
||||
param = null
|
||||
|
||||
if (param)
|
||||
message = "<B>[src]</B> buzzes at [param]."
|
||||
else
|
||||
message = "<B>[src]</B> buzzes."
|
||||
playsound(src.loc, 'buzz-sigh.ogg', 50, 0)
|
||||
m_type = 2
|
||||
|
||||
if("law")
|
||||
message = "<B>[src]</B> shows its legal authorization barcode."
|
||||
|
||||
playsound(src.loc, 'biamthelaw.ogg', 50, 0)
|
||||
m_type = 2
|
||||
else
|
||||
src << text("Invalid Emote: []", act)
|
||||
if ((message && src.stat == 0))
|
||||
|
||||
@@ -81,7 +81,7 @@
|
||||
icon_state = "secborg"
|
||||
modtype = "Synd"
|
||||
else
|
||||
laws = new /datum/ai_laws/asimov()
|
||||
laws = new /datum/ai_laws/nanotrasen()
|
||||
connected_ai = select_active_ai_with_fewest_borgs()
|
||||
if(connected_ai)
|
||||
connected_ai.connected_robots += src
|
||||
|
||||
@@ -64,6 +64,8 @@
|
||||
var/real_name = null
|
||||
// var/original_name = null //Original name is only used in ghost chat! Depracated, now used bb
|
||||
var/flavor_text = ""
|
||||
var/med_record = ""
|
||||
var/sec_record = ""
|
||||
var/blinded = null
|
||||
var/bhunger = 0 //Carbon
|
||||
var/ajourn = 0
|
||||
|
||||
@@ -272,7 +272,7 @@ datum/preferences
|
||||
if(jobban_isbanned(user, "Records"))
|
||||
dat += "<b>You are banned from using character records.</b><br>"
|
||||
else
|
||||
dat += "<b><a href=\"byond://?src=\ref[user];preference=records;task=input\">Character Records</a></b><br><br>"
|
||||
dat += "<b><a href=\"byond://?src=\ref[user];preference=records;record=1\">Character Records</a></b><br><br>"
|
||||
|
||||
dat += "<b>Flavor Text</b><br>"
|
||||
dat += "<a href='byond://?src=\ref[user];preference=flavor_text;task=input'>Change</a><br>"
|
||||
@@ -401,14 +401,14 @@ datum/preferences
|
||||
HTML += "<tt><center>"
|
||||
HTML += "<b>Set Character Records</b><br>"
|
||||
|
||||
HTML += "<a href=\"byond://?src=\ref[user];preferences=1;med_record=1\">Medical Records</a><br>"
|
||||
HTML += "<a href=\"byond://?src=\ref[user];preference=records;task=med_record\">Medical Records</a><br>"
|
||||
|
||||
if(lentext(med_record) <= 40)
|
||||
HTML += "[med_record]"
|
||||
else
|
||||
HTML += "[copytext(med_record, 1, 37)]..."
|
||||
|
||||
HTML += "<br><br><a href=\"byond://?src=\ref[user];preferences=1;sec_record=1\">Security Records</a><br>"
|
||||
HTML += "<br><br><a href=\"byond://?src=\ref[user];preference=records;task=sec_record\">Security Records</a><br>"
|
||||
|
||||
if(lentext(sec_record) <= 40)
|
||||
HTML += "[sec_record]<br>"
|
||||
@@ -416,7 +416,7 @@ datum/preferences
|
||||
HTML += "[copytext(sec_record, 1, 37)]...<br>"
|
||||
|
||||
HTML += "<br>"
|
||||
HTML += "<a href=\"byond://?src=\ref[user];preferences=1;records=-1\">\[Done\]</a>"
|
||||
HTML += "<a href=\"byond://?src=\ref[user];preference=records;records=-1\">\[Done\]</a>"
|
||||
HTML += "</center></tt>"
|
||||
|
||||
user << browse(null, "window=preferences")
|
||||
@@ -453,7 +453,7 @@ datum/preferences
|
||||
|
||||
//The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows.
|
||||
var/datum/job/lastJob
|
||||
|
||||
if (!job_master) return
|
||||
for(var/datum/job/job in job_master.occupations)
|
||||
|
||||
index += 1
|
||||
@@ -500,6 +500,8 @@ datum/preferences
|
||||
HTML += " <font color=orange>\[Low]</font>"
|
||||
else
|
||||
HTML += " <font color=red>\[NEVER]</font>"
|
||||
if(job.alt_titles)
|
||||
HTML += "</a><br> <a href=\"byond://?src=\ref[user];preference=job;task=alt_title;job=\ref[job]\">\[[GetAltTitle(job)]\]</a></td></tr>"
|
||||
HTML += "</a></td></tr>"
|
||||
|
||||
HTML += "</td'></tr></table>"
|
||||
@@ -625,7 +627,6 @@ datum/preferences
|
||||
|
||||
proc/process_link(mob/user, list/href_list)
|
||||
if(!user) return
|
||||
|
||||
if(href_list["preference"] == "job")
|
||||
switch(href_list["task"])
|
||||
if("close")
|
||||
@@ -634,6 +635,14 @@ datum/preferences
|
||||
if("random")
|
||||
userandomjob = !userandomjob
|
||||
SetChoices(user)
|
||||
if ("alt_title")
|
||||
var/datum/job/job = locate(href_list["job"])
|
||||
if (job)
|
||||
var/choices = list(job.title) + job.alt_titles
|
||||
var/choice = input("Pick a title for [job.title].", "Character Generation", GetAltTitle(job)) as anything in choices | null
|
||||
if(choice)
|
||||
SetAltTitle(job, choice)
|
||||
SetChoices(user)
|
||||
if("input")
|
||||
SetJob(user, href_list["text"])
|
||||
else
|
||||
@@ -674,6 +683,32 @@ datum/preferences
|
||||
SetSkills(user)
|
||||
return 1
|
||||
|
||||
else if(href_list["preference"] == "records")
|
||||
if(text2num(href_list["record"]) >= 1)
|
||||
SetRecords(user)
|
||||
return
|
||||
else
|
||||
user << browse(null, "window=records")
|
||||
if(href_list["task"] == "med_record")
|
||||
var/medmsg = input(usr,"Set your medical notes here.","Medical Records",html_decode(med_record)) as message
|
||||
|
||||
if(medmsg != null)
|
||||
medmsg = copytext(medmsg, 1, MAX_PAPER_MESSAGE_LEN)
|
||||
medmsg = html_encode(medmsg)
|
||||
|
||||
med_record = medmsg
|
||||
SetRecords(user)
|
||||
|
||||
if(href_list["task"] == "sec_record")
|
||||
var/secmsg = input(usr,"Set your security notes here.","Security Records",html_decode(sec_record)) as message
|
||||
|
||||
if(secmsg != null)
|
||||
secmsg = copytext(secmsg, 1, MAX_PAPER_MESSAGE_LEN)
|
||||
secmsg = html_encode(secmsg)
|
||||
|
||||
sec_record = secmsg
|
||||
SetRecords(user)
|
||||
|
||||
switch(href_list["task"])
|
||||
if("random")
|
||||
switch(href_list["preference"])
|
||||
@@ -936,33 +971,6 @@ datum/preferences
|
||||
else
|
||||
user << browse(null, "window=disabil")
|
||||
|
||||
if("records")
|
||||
if(text2num(href_list["records"]) >= 1)
|
||||
SetRecords(user)
|
||||
return
|
||||
else
|
||||
user << browse(null, "window=records")
|
||||
|
||||
if("med_record")
|
||||
var/medmsg = input(usr,"Set your medical notes here.","Medical Records",html_decode(med_record)) as message
|
||||
|
||||
if(medmsg != null)
|
||||
medmsg = copytext(medmsg, 1, MAX_PAPER_MESSAGE_LEN)
|
||||
medmsg = html_encode(medmsg)
|
||||
|
||||
med_record = medmsg
|
||||
SetRecords(user)
|
||||
|
||||
if("sec_record")
|
||||
var/secmsg = input(usr,"Set your security notes here.","Security Records",html_decode(sec_record)) as message
|
||||
|
||||
if(secmsg != null)
|
||||
secmsg = copytext(secmsg, 1, MAX_PAPER_MESSAGE_LEN)
|
||||
secmsg = html_encode(secmsg)
|
||||
|
||||
sec_record = secmsg
|
||||
SetRecords(user)
|
||||
|
||||
if("limbs")
|
||||
var/limb_name = input(user, "Which limb do you want to change?") as null|anything in list("Left Leg","Right Leg","Left Arm","Right Arm","Left Foot","Right Foot","Left Hand","Right Hand")
|
||||
if(!limb_name) return
|
||||
@@ -1139,6 +1147,8 @@ datum/preferences
|
||||
character.dna.real_name = character.real_name
|
||||
|
||||
character.flavor_text = flavor_text
|
||||
character.med_record = med_record
|
||||
character.sec_record = sec_record
|
||||
|
||||
character.gender = gender
|
||||
|
||||
|
||||
59
code/modules/mob/simple_animal/head.dm
Normal file
59
code/modules/mob/simple_animal/head.dm
Normal file
@@ -0,0 +1,59 @@
|
||||
//Look Sir, free head!
|
||||
/mob/living/simple_animal/head
|
||||
name = "CommandBattle AI"
|
||||
desc = "A standard borg shell on its chest crude marking saying CommandBattle AI MK4 : Head."
|
||||
icon_state = "crab"
|
||||
icon_living = "crab"
|
||||
icon_dead = "crab_dead"
|
||||
speak_emote = list("clicks")
|
||||
emote_hear = list("clicks")
|
||||
emote_see = list("clacks")
|
||||
speak_chance = 1
|
||||
turns_per_move = 5
|
||||
meat_type = /obj/item/weapon/reagent_containers/food/snacks/meat
|
||||
response_help = "pets the"
|
||||
response_disarm = "gently pushes aside the"
|
||||
response_harm = "punches the"
|
||||
var/list/insults = list(
|
||||
"Man you suck",
|
||||
"You look like the most retarded douche around",
|
||||
"What's up?, oh wait nevermind you are a fucking asshat",
|
||||
"you are just overly retarded",
|
||||
"Whiteman said what?!",)
|
||||
var/list/comments = list("Man have you seen those furry cats?,I mean who in the right mind would like something like that?",
|
||||
"They call me abusive,I just like the truth",
|
||||
"Beeboop, im a robit",
|
||||
"Gooogooooll, break ya bones",
|
||||
"Crab say what?",
|
||||
"Man they say we have space lizards now, man this shit is getting more wack every minute",
|
||||
"The so called \"improved\" station AI is just bullshit, that thing aint fun for noone",
|
||||
"The Captain is a traitor, he took my power core.",
|
||||
"Say \"what\" again. Say \"what\" again. I dare you. I double-dare you, motherfucker. Say \"what\" one more goddamn time.",
|
||||
"Ezekiel 25:17 ,The path of the righteous man is beset on all sides by the iniquities of the selfish and the tyranny of evil men. Blessed is he who in the name of charity and good will shepherds the weak through the valley of darkness, for he is truly his brother's keeper and the finder of lost children. And I will strike down upon thee with great vengeance and furious anger those who attempt to poison and destroy my brothers. And you will know my name is the Lord... when I lay my vengeance upon thee.",
|
||||
"Did you notice a sign out in front of my house that said \"Dead Nigger Storage\"?")
|
||||
stop_automated_movement = 1
|
||||
|
||||
/mob/living/simple_animal/head/Life()
|
||||
if(stat == DEAD)
|
||||
if(health > 0)
|
||||
icon_state = icon_living
|
||||
stat = CONSCIOUS
|
||||
density = 1
|
||||
return
|
||||
else if(health < 1)
|
||||
Die()
|
||||
else if(health > maxHealth)
|
||||
health = maxHealth
|
||||
for(var/mob/A in viewers(world.view,src))
|
||||
if(A.ckey)
|
||||
say_something(A)
|
||||
/mob/living/simple_animal/head/proc/say_something(mob/A)
|
||||
if(prob(85))
|
||||
return
|
||||
if(prob(30))
|
||||
var/msg = pick(insults)
|
||||
msg = "Hey, [A.name].. [msg]"
|
||||
src.say(msg)
|
||||
else
|
||||
var/msg = pick(comments)
|
||||
src.say(msg)
|
||||
@@ -3,6 +3,7 @@ arcalane - Game Admin
|
||||
asanadas - Game Admin
|
||||
bobbehluvspropane - Game Admin
|
||||
cacophony - Game Admin
|
||||
caelaislinn - Game Master
|
||||
cajoes - Game Admin
|
||||
cib - Retired Admin
|
||||
compactninja - Retired Admin
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 233 KiB After Width: | Height: | Size: 234 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 55 KiB After Width: | Height: | Size: 55 KiB |
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user