Merge branch 'master' into development
# Conflicts: # code/modules/client/preference_setup/loadout/loadout_xeno.dm # code/modules/customitems/item_defines.dm
@@ -170,6 +170,7 @@
|
|||||||
#include "code\controllers\subsystems\overlays.dm"
|
#include "code\controllers\subsystems\overlays.dm"
|
||||||
#include "code\controllers\subsystems\pai.dm"
|
#include "code\controllers\subsystems\pai.dm"
|
||||||
#include "code\controllers\subsystems\parallax.dm"
|
#include "code\controllers\subsystems\parallax.dm"
|
||||||
|
#include "code\controllers\subsystems\plants.dm"
|
||||||
#include "code\controllers\subsystems\power.dm"
|
#include "code\controllers\subsystems\power.dm"
|
||||||
#include "code\controllers\subsystems\radio.dm"
|
#include "code\controllers\subsystems\radio.dm"
|
||||||
#include "code\controllers\subsystems\statistics.dm"
|
#include "code\controllers\subsystems\statistics.dm"
|
||||||
@@ -194,7 +195,6 @@
|
|||||||
#include "code\controllers\subsystems\processing\modifiers.dm"
|
#include "code\controllers\subsystems\processing\modifiers.dm"
|
||||||
#include "code\controllers\subsystems\processing\nanoui.dm"
|
#include "code\controllers\subsystems\processing\nanoui.dm"
|
||||||
#include "code\controllers\subsystems\processing\pipenet.dm"
|
#include "code\controllers\subsystems\processing\pipenet.dm"
|
||||||
#include "code\controllers\subsystems\processing\plants.dm"
|
|
||||||
#include "code\controllers\subsystems\processing\processing.dm"
|
#include "code\controllers\subsystems\processing\processing.dm"
|
||||||
#include "code\controllers\subsystems\processing\shuttle.dm"
|
#include "code\controllers\subsystems\processing\shuttle.dm"
|
||||||
#include "code\datums\ai_law_sets.dm"
|
#include "code\datums\ai_law_sets.dm"
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ var/datum/controller/subsystem/garbage_collector/SSgarbage
|
|||||||
/datum/controller/subsystem/garbage_collector
|
/datum/controller/subsystem/garbage_collector
|
||||||
name = "Garbage"
|
name = "Garbage"
|
||||||
priority = SS_PRIORITY_GARBAGE
|
priority = SS_PRIORITY_GARBAGE
|
||||||
wait = 5
|
wait = 2 SECONDS
|
||||||
flags = SS_FIRE_IN_LOBBY|SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT
|
flags = SS_FIRE_IN_LOBBY|SS_POST_FIRE_TIMING|SS_BACKGROUND|SS_NO_INIT
|
||||||
|
|
||||||
var/collection_timeout = 3000// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object
|
var/collection_timeout = 3000// deciseconds to wait to let running procs finish before we just say fuck it and force del() the object
|
||||||
|
|||||||
@@ -58,6 +58,9 @@
|
|||||||
var/list/collar_states
|
var/list/collar_states
|
||||||
var/list/uniform_states
|
var/list/uniform_states
|
||||||
|
|
||||||
|
// This is for the kitty ears item.
|
||||||
|
var/list/kitty_ear_cache = list()
|
||||||
|
|
||||||
/datum/controller/subsystem/icon_cache/New()
|
/datum/controller/subsystem/icon_cache/New()
|
||||||
NEW_SS_GLOBAL(SSicon_cache)
|
NEW_SS_GLOBAL(SSicon_cache)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/var/datum/controller/subsystem/processing/plants/SSplants
|
/var/datum/controller/subsystem/plants/SSplants
|
||||||
|
|
||||||
/datum/controller/subsystem/processing/plants
|
/datum/controller/subsystem/plants
|
||||||
name = "Seeds & Plants"
|
name = "Seeds & Plants"
|
||||||
flags = 0 // Override parent's flags.
|
flags = 0 // Override parent's flags.
|
||||||
wait = 75
|
wait = 75
|
||||||
@@ -14,10 +14,15 @@
|
|||||||
var/list/plant_sprites = list() // List of all harvested product sprites.
|
var/list/plant_sprites = list() // List of all harvested product sprites.
|
||||||
var/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages.
|
var/list/plant_product_sprites = list() // List of all growth sprites plus number of growth stages.
|
||||||
|
|
||||||
/datum/controller/subsystem/processing/plants/New()
|
var/list/processing = list()
|
||||||
|
|
||||||
|
/datum/controller/subsystem/plants/New()
|
||||||
NEW_SS_GLOBAL(SSplants)
|
NEW_SS_GLOBAL(SSplants)
|
||||||
|
|
||||||
/datum/controller/subsystem/processing/plants/Initialize(timeofday)
|
/datum/controller/subsystem/plants/stat_entry()
|
||||||
|
..("P:[processing.len]")
|
||||||
|
|
||||||
|
/datum/controller/subsystem/plants/Initialize(timeofday)
|
||||||
// Build the icon lists.
|
// Build the icon lists.
|
||||||
for(var/icostate in icon_states('icons/obj/hydroponics_growing.dmi'))
|
for(var/icostate in icon_states('icons/obj/hydroponics_growing.dmi'))
|
||||||
var/split = findtext(icostate,"-")
|
var/split = findtext(icostate,"-")
|
||||||
@@ -63,7 +68,7 @@
|
|||||||
|
|
||||||
..()
|
..()
|
||||||
|
|
||||||
/datum/controller/subsystem/processing/plants/Recover()
|
/datum/controller/subsystem/plants/Recover()
|
||||||
if (istype(SSplants))
|
if (istype(SSplants))
|
||||||
src.product_descs = SSplants.product_descs
|
src.product_descs = SSplants.product_descs
|
||||||
src.seeds = SSplants.seeds
|
src.seeds = SSplants.seeds
|
||||||
@@ -72,8 +77,26 @@
|
|||||||
src.plant_sprites = SSplants.plant_sprites
|
src.plant_sprites = SSplants.plant_sprites
|
||||||
src.plant_product_sprites = SSplants.plant_product_sprites
|
src.plant_product_sprites = SSplants.plant_product_sprites
|
||||||
|
|
||||||
|
/datum/controller/subsystem/plants/fire(resumed = 0)
|
||||||
|
var/list/queue = processing
|
||||||
|
while (queue.len)
|
||||||
|
var/obj/effect/plant/P = queue[queue.len]
|
||||||
|
queue.len--
|
||||||
|
|
||||||
|
if (!QDELETED(P))
|
||||||
|
P.process()
|
||||||
|
|
||||||
|
if (MC_TICK_CHECK)
|
||||||
|
return
|
||||||
|
|
||||||
|
/datum/controller/subsystem/plants/proc/add_plant(obj/effect/plant/plant)
|
||||||
|
processing[plant] = TRUE
|
||||||
|
|
||||||
|
/datum/controller/subsystem/plants/proc/remove_plant(obj/effect/plant/plant)
|
||||||
|
processing -= plant
|
||||||
|
|
||||||
// Proc for creating a random seed type.
|
// Proc for creating a random seed type.
|
||||||
/datum/controller/subsystem/processing/plants/proc/create_random_seed(var/survive_on_station)
|
/datum/controller/subsystem/plants/proc/create_random_seed(var/survive_on_station)
|
||||||
var/datum/seed/seed = new()
|
var/datum/seed/seed = new()
|
||||||
seed.randomize()
|
seed.randomize()
|
||||||
seed.uid = seeds.len + 1
|
seed.uid = seeds.len + 1
|
||||||
@@ -125,8 +125,9 @@
|
|||||||
feedback_add_details("radio_usage","PDA-[pda_msg_amt]")
|
feedback_add_details("radio_usage","PDA-[pda_msg_amt]")
|
||||||
feedback_add_details("radio_usage","RC-[rc_msg_amt]")
|
feedback_add_details("radio_usage","RC-[rc_msg_amt]")
|
||||||
|
|
||||||
for (var/datum/statistic/S in simple_statistics)
|
for (var/key in simple_statistics)
|
||||||
if (S.write_to_database && S.key)
|
var/datum/statistic/S = simple_statistics[key]
|
||||||
|
if (S.write_to_db && S.key)
|
||||||
S.write_to_database()
|
S.write_to_database()
|
||||||
|
|
||||||
feedback_set_details("round_end","[time2text(world.realtime)]") //This one MUST be the last one that gets set.
|
feedback_set_details("round_end","[time2text(world.realtime)]") //This one MUST be the last one that gets set.
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
/datum/statistic
|
/datum/statistic
|
||||||
var/name
|
var/name
|
||||||
var/key
|
var/key
|
||||||
var/write_to_database = FALSE
|
var/write_to_db = FALSE
|
||||||
var/broadcast_at_roundend = TRUE
|
var/broadcast_at_roundend = TRUE
|
||||||
|
|
||||||
/datum/statistic/proc/set_value()
|
/datum/statistic/proc/set_value()
|
||||||
@@ -58,20 +58,22 @@
|
|||||||
/datum/statistic/numeric/openturf_falls
|
/datum/statistic/numeric/openturf_falls
|
||||||
name = "Human Open Space Falls"
|
name = "Human Open Space Falls"
|
||||||
key = "openturf_human_falls"
|
key = "openturf_human_falls"
|
||||||
write_to_database = TRUE
|
write_to_db = TRUE
|
||||||
|
|
||||||
/datum/statistic/numeric/openturf_deaths
|
/datum/statistic/numeric/openturf_deaths
|
||||||
name = "Human Open Space Fatalities"
|
name = "Human Open Space Fatalities"
|
||||||
key = "openturf_human_deaths"
|
key = "openturf_human_deaths"
|
||||||
write_to_database = TRUE
|
write_to_db = TRUE
|
||||||
|
|
||||||
/datum/statistic/numeric/gibbings
|
/datum/statistic/numeric/gibbings
|
||||||
name = "Gibbings"
|
name = "Gibbings"
|
||||||
key = "gibs"
|
key = "gibs"
|
||||||
|
write_to_db = TRUE
|
||||||
|
|
||||||
/datum/statistic/numeric/clonings
|
/datum/statistic/numeric/clonings
|
||||||
name = "Clones Produced"
|
name = "Clones Produced"
|
||||||
key = "clones"
|
key = "clones"
|
||||||
|
write_to_db = TRUE
|
||||||
|
|
||||||
/datum/statistic/grouped/most_deaths
|
/datum/statistic/grouped/most_deaths
|
||||||
name = "Most Overall Deaths (by ckey)"
|
name = "Most Overall Deaths (by ckey)"
|
||||||
|
|||||||
@@ -67,16 +67,18 @@
|
|||||||
var/loyalty = 1
|
var/loyalty = 1
|
||||||
if(H.client)
|
if(H.client)
|
||||||
switch(H.client.prefs.nanotrasen_relation)
|
switch(H.client.prefs.nanotrasen_relation)
|
||||||
if(COMPANY_LOYAL) loyalty = 1.30
|
if(COMPANY_LOYAL) loyalty = 1.30
|
||||||
if(COMPANY_SUPPORTATIVE)loyalty = 1.15
|
if(COMPANY_SUPPORTATIVE) loyalty = 1.15
|
||||||
if(COMPANY_NEUTRAL) loyalty = 1
|
if(COMPANY_NEUTRAL) loyalty = 1
|
||||||
if(COMPANY_SKEPTICAL) loyalty = 0.85
|
if(COMPANY_SKEPTICAL) loyalty = 0.85
|
||||||
if(COMPANY_OPPOSED) loyalty = 0.70
|
if(COMPANY_OPPOSED) loyalty = 0.70
|
||||||
|
|
||||||
//give them an account in the station database
|
//give them an account in the station database
|
||||||
var/species_modifier = (H.species ? economic_species_modifier[H.species.type] : 2)
|
var/species_modifier = (H.species ? H.species.economic_modifier : null)
|
||||||
if(!species_modifier)
|
if (!species_modifier)
|
||||||
species_modifier = economic_species_modifier[/datum/species/human]
|
var/datum/species/human_species = global.all_species["Human"]
|
||||||
|
species_modifier = human_species.economic_modifier
|
||||||
|
PROCLOG_WEIRD("species [H.species || "NULL"] did not have a set economic_modifier!")
|
||||||
|
|
||||||
var/money_amount = (rand(5,50) + rand(5, 50)) * loyalty * economic_modifier * species_modifier
|
var/money_amount = (rand(5,50) + rand(5, 50)) * loyalty * economic_modifier * species_modifier
|
||||||
var/datum/money_account/M = create_account(H.real_name, money_amount, null)
|
var/datum/money_account/M = create_account(H.real_name, money_amount, null)
|
||||||
@@ -137,25 +139,14 @@
|
|||||||
var/loyalty = 1
|
var/loyalty = 1
|
||||||
if(H.client)
|
if(H.client)
|
||||||
switch(H.client.prefs.nanotrasen_relation)
|
switch(H.client.prefs.nanotrasen_relation)
|
||||||
if(COMPANY_LOYAL) loyalty = 3
|
if(COMPANY_LOYAL) loyalty = 3
|
||||||
if(COMPANY_SUPPORTATIVE)loyalty = 2
|
if(COMPANY_SUPPORTATIVE) loyalty = 2
|
||||||
if(COMPANY_NEUTRAL) loyalty = 1
|
if(COMPANY_NEUTRAL) loyalty = 1
|
||||||
if(COMPANY_SKEPTICAL) loyalty = -2
|
if(COMPANY_SKEPTICAL) loyalty = -2
|
||||||
if(COMPANY_OPPOSED) loyalty = -3
|
if(COMPANY_OPPOSED) loyalty = -3
|
||||||
|
|
||||||
//give them an account in the station database
|
//give them an account in the station database
|
||||||
var/species_modifier = 0
|
var/species_modifier = min((H.species ? H.species.economic_modifier : 0) - 9, 0)
|
||||||
if(economic_species_modifier[H.species.type])
|
|
||||||
switch(economic_species_modifier[H.species.type])
|
|
||||||
if(/datum/species/human) species_modifier = 0
|
|
||||||
if(/datum/species/skrell) species_modifier = 0
|
|
||||||
if(/datum/species/tajaran) species_modifier = -2
|
|
||||||
if(/datum/species/unathi) species_modifier = -2
|
|
||||||
if(/datum/species/diona) species_modifier = -4
|
|
||||||
if(/datum/species/machine) species_modifier = -4
|
|
||||||
if(/datum/species/bug) species_modifier = -6
|
|
||||||
else species_modifier = -3
|
|
||||||
|
|
||||||
|
|
||||||
var/wealth = (loyalty + economic_modifier + species_modifier)
|
var/wealth = (loyalty + economic_modifier + species_modifier)
|
||||||
|
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ var/list/medical_positions = list(
|
|||||||
"Psychiatrist",
|
"Psychiatrist",
|
||||||
"Chemist",
|
"Chemist",
|
||||||
"Paramedic",
|
"Paramedic",
|
||||||
"Nursing Intern"
|
"Medical Resident"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -156,7 +156,7 @@
|
|||||||
else
|
else
|
||||||
assembly.state = 1
|
assembly.state = 1
|
||||||
user << "<span class='notice'>You cut \the [src] free from the wall.</span>"
|
user << "<span class='notice'>You cut \the [src] free from the wall.</span>"
|
||||||
new /obj/item/stack/cable_coil(src.loc, length=2)
|
new /obj/item/stack/cable_coil(loc, 2)
|
||||||
assembly = null //so qdel doesn't eat it.
|
assembly = null //so qdel doesn't eat it.
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
|
|||||||
@@ -142,7 +142,17 @@
|
|||||||
jump_to = locate() in A
|
jump_to = locate() in A
|
||||||
else if(isturf(A))
|
else if(isturf(A))
|
||||||
var/best_dist = INFINITY
|
var/best_dist = INFINITY
|
||||||
for(var/obj/machinery/camera/camera in get_area(A))
|
var/check_area = get_area(A)
|
||||||
|
|
||||||
|
if (!check_area)
|
||||||
|
return
|
||||||
|
|
||||||
|
for(var/cc in SSmachinery.all_cameras)
|
||||||
|
var/obj/machinery/camera/camera = cc
|
||||||
|
if(!camera.loc)
|
||||||
|
continue
|
||||||
|
if (camera.loc.loc != check_area)
|
||||||
|
continue
|
||||||
if(!camera.can_use())
|
if(!camera.can_use())
|
||||||
continue
|
continue
|
||||||
if(!can_access_camera(camera))
|
if(!can_access_camera(camera))
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
var/scan_id = 1
|
var/scan_id = 1
|
||||||
var/is_secure = 0
|
var/is_secure = 0
|
||||||
var/datum/wires/smartfridge/wires = null
|
var/datum/wires/smartfridge/wires = null
|
||||||
|
atmos_canpass = CANPASS_NEVER
|
||||||
|
|
||||||
/obj/machinery/smartfridge/secure
|
/obj/machinery/smartfridge/secure
|
||||||
is_secure = 1
|
is_secure = 1
|
||||||
|
|||||||
@@ -152,6 +152,7 @@
|
|||||||
|
|
||||||
if(wreckage)
|
if(wreckage)
|
||||||
var/obj/effect/decal/mecha_wreckage/WR = new wreckage(loc)
|
var/obj/effect/decal/mecha_wreckage/WR = new wreckage(loc)
|
||||||
|
WR.icon_state = "[icon_state]-broken"
|
||||||
for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
|
for(var/obj/item/mecha_parts/mecha_equipment/E in equipment)
|
||||||
if(E.salvageable && prob(30))
|
if(E.salvageable && prob(30))
|
||||||
WR.crowbar_salvage += E
|
WR.crowbar_salvage += E
|
||||||
|
|||||||
@@ -211,9 +211,10 @@
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
success = TRUE
|
success = TRUE
|
||||||
S.handle_item_insertion(I, 1) //The 1 stops the "You put the [src] into [S]" insertion message from being displayed.
|
S.handle_item_insertion_deferred(I, user) //The 1 stops the "You put the [src] into [S]" insertion message from being displayed.
|
||||||
CHECK_TICK // Because people insist on picking up huge-ass piles of stuff.
|
CHECK_TICK // Because people insist on picking up huge-ass piles of stuff.
|
||||||
|
|
||||||
|
S.handle_storage_deferred(user)
|
||||||
if(success && !failure)
|
if(success && !failure)
|
||||||
user << "<span class='notice'>You put everything in [S].</span>"
|
user << "<span class='notice'>You put everything in [S].</span>"
|
||||||
else if(success)
|
else if(success)
|
||||||
|
|||||||
@@ -40,8 +40,8 @@
|
|||||||
|
|
||||||
//hit other people with it
|
//hit other people with it
|
||||||
/obj/item/device/holowarrant/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
/obj/item/device/holowarrant/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob)
|
||||||
user.visible_message("<span class='notice'>You show the warrant to [M]. </span>", \
|
user.visible_message("<span class='notice'>[user] holds up a warrant projector and shows the contents to [M]. </span>", \
|
||||||
"<span class='notice'>[user] holds up a warrant projector and shows the contents to [M]. </span>")
|
"<span class='notice'>You show the warrant to [M]. </span>")
|
||||||
M.examinate(src)
|
M.examinate(src)
|
||||||
|
|
||||||
//sync with database
|
//sync with database
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
display_contents_with_number = 0 // UNStABLE AS FuCK, turn on when it stops crashing clients
|
display_contents_with_number = 0 // UNStABLE AS FuCK, turn on when it stops crashing clients
|
||||||
use_to_pickup = 1
|
use_to_pickup = 1
|
||||||
slot_flags = SLOT_BELT
|
slot_flags = SLOT_BELT
|
||||||
|
var/use_deferred = TRUE
|
||||||
|
|
||||||
// -----------------------------
|
// -----------------------------
|
||||||
// Trash bag
|
// Trash bag
|
||||||
@@ -58,7 +59,13 @@
|
|||||||
bagfull = 1
|
bagfull = 1
|
||||||
break
|
break
|
||||||
count++
|
count++
|
||||||
handle_item_insertion(L, 1)//value of 1 suppresses confirmation messages from this one
|
if (use_deferred)
|
||||||
|
handle_item_insertion_deferred(L, user)
|
||||||
|
else
|
||||||
|
handle_item_insertion(L, TRUE)
|
||||||
|
|
||||||
|
if (use_deferred)
|
||||||
|
handle_storage_deferred(user)
|
||||||
|
|
||||||
if (count)
|
if (count)
|
||||||
user << "<span class='notice'>You empty [count] broken bulbs into the trashbag.</span>"
|
user << "<span class='notice'>You empty [count] broken bulbs into the trashbag.</span>"
|
||||||
@@ -135,122 +142,119 @@
|
|||||||
storage_slots = 7
|
storage_slots = 7
|
||||||
|
|
||||||
allow_quick_empty = 1 // this function is superceded
|
allow_quick_empty = 1 // this function is superceded
|
||||||
New()
|
use_deferred = FALSE
|
||||||
..()
|
|
||||||
//verbs -= /obj/item/weapon/storage/verb/quick_empty
|
|
||||||
//verbs += /obj/item/weapon/storage/bag/sheetsnatcher/quick_empty
|
|
||||||
|
|
||||||
can_be_inserted(obj/item/W as obj, stop_messages = 0)
|
/obj/item/weapon/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W as obj, stop_messages = 0)
|
||||||
if(!istype(W,/obj/item/stack/material))
|
if(!istype(W,/obj/item/stack/material))
|
||||||
if(!stop_messages)
|
if(!stop_messages)
|
||||||
usr << "The snatcher does not accept [W]."
|
usr << "The snatcher does not accept [W]."
|
||||||
return 0
|
return 0
|
||||||
var/current = 0
|
var/current = 0
|
||||||
for(var/obj/item/stack/material/S in contents)
|
for(var/obj/item/stack/material/S in contents)
|
||||||
current += S.amount
|
current += S.amount
|
||||||
if(capacity == current)//If it's full, you're done
|
if(capacity == current)//If it's full, you're done
|
||||||
if(!stop_messages)
|
if(!stop_messages)
|
||||||
usr << "<span class='warning'>The snatcher is full.</span>"
|
usr << "<span class='warning'>The snatcher is full.</span>"
|
||||||
return 0
|
return 0
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
|
||||||
// Modified handle_item_insertion. Would prefer not to, but...
|
// Modified handle_item_insertion. Would prefer not to, but...
|
||||||
handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
|
/obj/item/weapon/storage/bag/sheetsnatcher/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
|
||||||
var/obj/item/stack/material/S = W
|
var/obj/item/stack/material/S = W
|
||||||
if(!istype(S)) return 0
|
if(!istype(S)) return 0
|
||||||
|
|
||||||
var/amount
|
var/amount
|
||||||
var/inserted = 0
|
var/inserted = 0
|
||||||
var/current = 0
|
var/current = 0
|
||||||
for(var/obj/item/stack/material/S2 in contents)
|
for(var/obj/item/stack/material/S2 in contents)
|
||||||
current += S2.amount
|
current += S2.amount
|
||||||
if(capacity < current + S.amount)//If the stack will fill it up
|
if(capacity < current + S.amount)//If the stack will fill it up
|
||||||
amount = capacity - current
|
amount = capacity - current
|
||||||
|
else
|
||||||
|
amount = S.amount
|
||||||
|
|
||||||
|
for(var/obj/item/stack/material/sheet in contents)
|
||||||
|
if(S.type == sheet.type) // we are violating the amount limitation because these are not sane objects
|
||||||
|
sheet.amount += amount // they should only be removed through procs in this file, which split them up.
|
||||||
|
S.amount -= amount
|
||||||
|
inserted = 1
|
||||||
|
break
|
||||||
|
|
||||||
|
if(!inserted || !S.amount)
|
||||||
|
usr.remove_from_mob(S)
|
||||||
|
usr.update_icons() //update our overlays
|
||||||
|
if (usr.client && usr.s_active != src)
|
||||||
|
usr.client.screen -= S
|
||||||
|
S.dropped(usr)
|
||||||
|
if(!S.amount)
|
||||||
|
qdel(S)
|
||||||
else
|
else
|
||||||
amount = S.amount
|
S.loc = src
|
||||||
|
|
||||||
for(var/obj/item/stack/material/sheet in contents)
|
orient2hud(usr)
|
||||||
if(S.type == sheet.type) // we are violating the amount limitation because these are not sane objects
|
if(usr.s_active)
|
||||||
sheet.amount += amount // they should only be removed through procs in this file, which split them up.
|
usr.s_active.show_to(usr)
|
||||||
S.amount -= amount
|
update_icon()
|
||||||
inserted = 1
|
return 1
|
||||||
break
|
|
||||||
|
|
||||||
if(!inserted || !S.amount)
|
|
||||||
usr.remove_from_mob(S)
|
|
||||||
usr.update_icons() //update our overlays
|
|
||||||
if (usr.client && usr.s_active != src)
|
|
||||||
usr.client.screen -= S
|
|
||||||
S.dropped(usr)
|
|
||||||
if(!S.amount)
|
|
||||||
qdel(S)
|
|
||||||
else
|
|
||||||
S.loc = src
|
|
||||||
|
|
||||||
orient2hud(usr)
|
|
||||||
if(usr.s_active)
|
|
||||||
usr.s_active.show_to(usr)
|
|
||||||
update_icon()
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
// Sets up numbered display to show the stack size of each stored mineral
|
// Sets up numbered display to show the stack size of each stored mineral
|
||||||
// NOTE: numbered display is turned off currently because it's broken
|
// NOTE: numbered display is turned off currently because it's broken
|
||||||
orient2hud(mob/user as mob)
|
/obj/item/weapon/storage/bag/sheetsnatcher/orient2hud(mob/user as mob)
|
||||||
var/adjusted_contents = contents.len
|
var/adjusted_contents = contents.len
|
||||||
|
|
||||||
//Numbered contents display
|
//Numbered contents display
|
||||||
var/list/datum/numbered_display/numbered_contents
|
var/list/datum/numbered_display/numbered_contents
|
||||||
if(display_contents_with_number)
|
if(display_contents_with_number)
|
||||||
numbered_contents = list()
|
numbered_contents = list()
|
||||||
adjusted_contents = 0
|
adjusted_contents = 0
|
||||||
for(var/obj/item/stack/material/I in contents)
|
for(var/obj/item/stack/material/I in contents)
|
||||||
adjusted_contents++
|
adjusted_contents++
|
||||||
var/datum/numbered_display/D = new/datum/numbered_display(I)
|
var/datum/numbered_display/D = new/datum/numbered_display(I)
|
||||||
D.number = I.amount
|
D.number = I.amount
|
||||||
numbered_contents.Add( D )
|
numbered_contents.Add( D )
|
||||||
|
|
||||||
var/row_num = 0
|
var/row_num = 0
|
||||||
var/col_count = min(7,storage_slots) -1
|
var/col_count = min(7,storage_slots) -1
|
||||||
if (adjusted_contents > 7)
|
if (adjusted_contents > 7)
|
||||||
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
|
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
|
||||||
src.slot_orient_objs(row_num, col_count, numbered_contents)
|
src.slot_orient_objs(row_num, col_count, numbered_contents)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
// Modified quick_empty verb drops appropriate sized stacks
|
// Modified quick_empty verb drops appropriate sized stacks
|
||||||
quick_empty()
|
/obj/item/weapon/storage/bag/sheetsnatcher/quick_empty()
|
||||||
var/location = get_turf(src)
|
var/location = get_turf(src)
|
||||||
for(var/obj/item/stack/material/S in contents)
|
for(var/obj/item/stack/material/S in contents)
|
||||||
while(S.amount)
|
while(S.amount)
|
||||||
var/obj/item/stack/material/N = new S.type(location)
|
var/obj/item/stack/material/N = new S.type(location)
|
||||||
var/stacksize = min(S.amount,N.max_amount)
|
var/stacksize = min(S.amount,N.max_amount)
|
||||||
N.amount = stacksize
|
N.amount = stacksize
|
||||||
S.amount -= stacksize
|
S.amount -= stacksize
|
||||||
if(!S.amount)
|
if(!S.amount)
|
||||||
qdel(S) // todo: there's probably something missing here
|
qdel(S) // todo: there's probably something missing here
|
||||||
orient2hud(usr)
|
orient2hud(usr)
|
||||||
if(usr.s_active)
|
if(usr.s_active)
|
||||||
usr.s_active.show_to(usr)
|
usr.s_active.show_to(usr)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
// Instead of removing
|
// Instead of removing
|
||||||
remove_from_storage(obj/item/W as obj, atom/new_location)
|
/obj/item/weapon/storage/bag/sheetsnatcher/remove_from_storage(obj/item/W as obj, atom/new_location)
|
||||||
var/obj/item/stack/material/S = W
|
var/obj/item/stack/material/S = W
|
||||||
if(!istype(S)) return 0
|
if(!istype(S)) return 0
|
||||||
|
|
||||||
//I would prefer to drop a new stack, but the item/attack_hand code
|
//I would prefer to drop a new stack, but the item/attack_hand code
|
||||||
// that calls this can't recieve a different object than you clicked on.
|
// that calls this can't recieve a different object than you clicked on.
|
||||||
//Therefore, make a new stack internally that has the remainder.
|
//Therefore, make a new stack internally that has the remainder.
|
||||||
// -Sayu
|
// -Sayu
|
||||||
|
|
||||||
if(S.amount > S.max_amount)
|
if(S.amount > S.max_amount)
|
||||||
var/obj/item/stack/material/temp = new S.type(src)
|
var/obj/item/stack/material/temp = new S.type(src)
|
||||||
temp.amount = S.amount - S.max_amount
|
temp.amount = S.amount - S.max_amount
|
||||||
S.amount = S.max_amount
|
S.amount = S.max_amount
|
||||||
|
|
||||||
return ..(S,new_location)
|
return ..(S,new_location)
|
||||||
|
|
||||||
// -----------------------------
|
// -----------------------------
|
||||||
// Sheet Snatcher (Cyborg)
|
// Sheet Snatcher (Cyborg)
|
||||||
|
|||||||
@@ -356,34 +356,52 @@
|
|||||||
//This proc handles items being inserted. It does not perform any checks of whether an item can or can't be inserted. That's done by can_be_inserted()
|
//This proc handles items being inserted. It does not perform any checks of whether an item can or can't be inserted. That's done by can_be_inserted()
|
||||||
//The stop_warning parameter will stop the insertion message from being displayed. It is intended for cases where you are inserting multiple items at once,
|
//The stop_warning parameter will stop the insertion message from being displayed. It is intended for cases where you are inserting multiple items at once,
|
||||||
//such as when picking up all the items on a tile with one click.
|
//such as when picking up all the items on a tile with one click.
|
||||||
/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
|
/obj/item/weapon/storage/proc/handle_item_insertion(obj/item/W as obj, prevent_warning = 0, mob/user = usr)
|
||||||
if(!istype(W)) return 0
|
if(!istype(W)) return 0
|
||||||
if(usr)
|
if(user)
|
||||||
usr.prepare_for_slotmove(W)
|
user.prepare_for_slotmove(W)
|
||||||
usr.update_icons() //update our overlays
|
|
||||||
W.forceMove(src)
|
W.forceMove(src)
|
||||||
W.on_enter_storage(src)
|
W.on_enter_storage(src)
|
||||||
if(usr)
|
if(user)
|
||||||
if (usr.client && usr.s_active != src)
|
W.dropped(user)
|
||||||
usr.client.screen -= W
|
add_fingerprint(user)
|
||||||
W.dropped(usr)
|
|
||||||
add_fingerprint(usr)
|
|
||||||
|
|
||||||
if(!prevent_warning)
|
if(!prevent_warning)
|
||||||
for(var/mob/M in viewers(usr, null))
|
for(var/mob/M in viewers(user, null))
|
||||||
if (M == usr)
|
if (M == usr)
|
||||||
usr << "<span class='notice'>You put \the [W] into [src].</span>"
|
usr << "<span class='notice'>You put \the [W] into [src].</span>"
|
||||||
else if (M in range(1)) //If someone is standing close enough, they can tell what it is...
|
else if (M in range(1)) //If someone is standing close enough, they can tell what it is...
|
||||||
M.show_message("<span class='notice'>\The [usr] puts [W] into [src].</span>")
|
M.show_message("<span class='notice'>\The [user] puts [W] into [src].</span>")
|
||||||
else if (W && W.w_class >= 3) //Otherwise they can only see large or normal items from a distance...
|
else if (W && W.w_class >= 3) //Otherwise they can only see large or normal items from a distance...
|
||||||
M.show_message("<span class='notice'>\The [usr] puts [W] into [src].</span>")
|
M.show_message("<span class='notice'>\The [user] puts [W] into [src].</span>")
|
||||||
|
|
||||||
src.orient2hud(usr)
|
orient2hud(user)
|
||||||
if(usr.s_active)
|
if(user.s_active)
|
||||||
usr.s_active.show_to(usr)
|
user.s_active.show_to(user)
|
||||||
update_icon()
|
queue_icon_update()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
// This is for inserting more than one thing at a time, you should call handle_storage_deferred after all the items have been inserted.
|
||||||
|
/obj/item/weapon/storage/proc/handle_item_insertion_deferred(obj/item/W, mob/user)
|
||||||
|
if (!istype(W))
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
if (user)
|
||||||
|
user.prepare_for_slotmove(W)
|
||||||
|
|
||||||
|
W.forceMove(src)
|
||||||
|
W.on_enter_storage(src)
|
||||||
|
if (user)
|
||||||
|
W.dropped(user)
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/proc/handle_storage_deferred(mob/user)
|
||||||
|
add_fingerprint(user)
|
||||||
|
user.update_icons()
|
||||||
|
orient2hud(user)
|
||||||
|
if (user.s_active)
|
||||||
|
user.s_active.show_to(user)
|
||||||
|
queue_icon_update()
|
||||||
|
|
||||||
//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target
|
//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target
|
||||||
/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location)
|
/obj/item/weapon/storage/proc/remove_from_storage(obj/item/W as obj, atom/new_location)
|
||||||
if(!istype(W)) return 0
|
if(!istype(W)) return 0
|
||||||
@@ -418,6 +436,45 @@
|
|||||||
update_icon()
|
update_icon()
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/proc/remove_from_storage_deferred(obj/item/W, atom/new_location, mob/user)
|
||||||
|
if (!istype(W))
|
||||||
|
return FALSE
|
||||||
|
|
||||||
|
// fuck if I know.
|
||||||
|
for(var/mob/M in range(1, src.loc))
|
||||||
|
if (M.s_active == src)
|
||||||
|
if (M.client)
|
||||||
|
M.client.screen -= W
|
||||||
|
|
||||||
|
if (new_location)
|
||||||
|
if (ismob(loc))
|
||||||
|
W.dropped(user)
|
||||||
|
if (ismob(new_location))
|
||||||
|
W.layer = 20
|
||||||
|
else
|
||||||
|
W.layer = initial(W.layer)
|
||||||
|
|
||||||
|
W.forceMove(new_location)
|
||||||
|
else
|
||||||
|
W.forceMove(get_turf(src))
|
||||||
|
|
||||||
|
if (W.maptext)
|
||||||
|
W.maptext = ""
|
||||||
|
|
||||||
|
W.on_exit_storage(src)
|
||||||
|
|
||||||
|
return TRUE
|
||||||
|
|
||||||
|
/obj/item/weapon/storage/proc/post_remove_from_storage_deferred(atom/oldloc, mob/user)
|
||||||
|
orient2hud(user)
|
||||||
|
if (user.s_active)
|
||||||
|
user.s_active.show_to(user)
|
||||||
|
|
||||||
|
// who knows what the fuck this does
|
||||||
|
if (istype(src, /obj/item/weapon/storage/fancy))
|
||||||
|
update_icon(1)
|
||||||
|
else
|
||||||
|
update_icon()
|
||||||
|
|
||||||
//This proc is called when you want to place an item into the storage item.
|
//This proc is called when you want to place an item into the storage item.
|
||||||
//Its a safe proc for adding things to the storage that does the necessary checks. Object will not be moved if it fails
|
//Its a safe proc for adding things to the storage that does the necessary checks. Object will not be moved if it fails
|
||||||
@@ -509,10 +566,12 @@
|
|||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
hide_from(usr)
|
hide_from(usr)
|
||||||
for(var/obj/item/I in contents)
|
for(var/obj/item/I in contents)
|
||||||
remove_from_storage(I, T)
|
remove_from_storage_deferred(I, T, usr)
|
||||||
|
|
||||||
CHECK_TICK
|
CHECK_TICK
|
||||||
|
|
||||||
|
post_remove_from_storage_deferred(loc, usr)
|
||||||
|
|
||||||
// Override this to fill the storage object with stuff.
|
// Override this to fill the storage object with stuff.
|
||||||
/obj/item/weapon/storage/proc/fill()
|
/obj/item/weapon/storage/proc/fill()
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -287,7 +287,7 @@
|
|||||||
if(!(S.status & ORGAN_ROBOT) || user.a_intent != I_HELP)
|
if(!(S.status & ORGAN_ROBOT) || user.a_intent != I_HELP)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
if(M.isSynthetic() && M == user)
|
if(M.isSynthetic() && M == user && !(M.get_species() == "Hunter-Killer"))
|
||||||
user << "<span class='warning'>You can't repair damage to your own body - it's against OH&S.</span>"
|
user << "<span class='warning'>You can't repair damage to your own body - it's against OH&S.</span>"
|
||||||
return
|
return
|
||||||
if(S.brute_dam == 0)
|
if(S.brute_dam == 0)
|
||||||
|
|||||||
@@ -23,13 +23,15 @@
|
|||||||
|
|
||||||
var/safedrop = 0//Used to tell when we should or shouldn't spill if the tray is dropped.
|
var/safedrop = 0//Used to tell when we should or shouldn't spill if the tray is dropped.
|
||||||
//Safedrop is set true when throwing, because it will spill on impact. And when placing on a table
|
//Safedrop is set true when throwing, because it will spill on impact. And when placing on a table
|
||||||
var/list/valid = list( /obj/item/weapon/reagent_containers,
|
var/list/valid = list(
|
||||||
|
/obj/item/weapon/reagent_containers,
|
||||||
/obj/item/weapon/material/kitchen/utensil,
|
/obj/item/weapon/material/kitchen/utensil,
|
||||||
/obj/item/weapon/storage/fancy/cigarettes,
|
/obj/item/weapon/storage/fancy/cigarettes,
|
||||||
/obj/item/clothing/mask/smokable,
|
/obj/item/clothing/mask/smokable,
|
||||||
/obj/item/weapon/storage/box/matches,
|
/obj/item/weapon/storage/box/matches,
|
||||||
/obj/item/weapon/flame/match,
|
/obj/item/weapon/flame/match,
|
||||||
/obj/item/weapon/material/ashtray)
|
/obj/item/weapon/material/ashtray
|
||||||
|
)
|
||||||
|
|
||||||
/obj/item/weapon/tray/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob, var/target_zone)
|
/obj/item/weapon/tray/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob, var/target_zone)
|
||||||
|
|
||||||
@@ -38,7 +40,6 @@
|
|||||||
// Drop all the things. All of them.
|
// Drop all the things. All of them.
|
||||||
spill(user, M.loc)
|
spill(user, M.loc)
|
||||||
|
|
||||||
|
|
||||||
//Note: Added a robot check to all stun/weaken procs, beccause weakening a robot causes its active modules to bug out
|
//Note: Added a robot check to all stun/weaken procs, beccause weakening a robot causes its active modules to bug out
|
||||||
if((CLUMSY in user.mutations) && prob(50)) //What if he's a clown?
|
if((CLUMSY in user.mutations) && prob(50)) //What if he's a clown?
|
||||||
M << "<span class='warning'>You accidentally slam yourself with the [src]!</span>"
|
M << "<span class='warning'>You accidentally slam yourself with the [src]!</span>"
|
||||||
@@ -236,10 +237,12 @@
|
|||||||
|
|
||||||
/obj/item/weapon/tray/proc/load_item(var/obj/item/I, var/mob/user)
|
/obj/item/weapon/tray/proc/load_item(var/obj/item/I, var/mob/user)
|
||||||
user.remove_from_mob(I)
|
user.remove_from_mob(I)
|
||||||
I.loc = src
|
I.forceMove(src)
|
||||||
current_weight += I.w_class
|
current_weight += I.w_class
|
||||||
carrying += I
|
carrying += I
|
||||||
add_overlay(image("icon" = I.icon, "icon_state" = I.icon_state, "layer" = 30 + I.layer, "pixel_x" = I.pixel_x, "pixel_y" = I.pixel_y))
|
var/mutable_appearance/MA = new(I)
|
||||||
|
MA.layer = FLOAT_LAYER
|
||||||
|
add_overlay(MA)
|
||||||
//rand(0, (max_offset_y*2)-3)-(max_offset_y)-3
|
//rand(0, (max_offset_y*2)-3)-(max_offset_y)-3
|
||||||
|
|
||||||
/obj/item/weapon/tray/verb/unload()
|
/obj/item/weapon/tray/verb/unload()
|
||||||
|
|||||||
@@ -7,6 +7,7 @@
|
|||||||
w_class = 5
|
w_class = 5
|
||||||
var/icon_closed = "closed"
|
var/icon_closed = "closed"
|
||||||
var/icon_opened = "open"
|
var/icon_opened = "open"
|
||||||
|
var/welded_overlay_state = "welded"
|
||||||
var/opened = 0
|
var/opened = 0
|
||||||
var/welded = 0
|
var/welded = 0
|
||||||
var/wall_mounted = 0 //never solid (You can always pass over it)
|
var/wall_mounted = 0 //never solid (You can always pass over it)
|
||||||
@@ -355,7 +356,7 @@
|
|||||||
if(!opened)
|
if(!opened)
|
||||||
icon_state = icon_closed
|
icon_state = icon_closed
|
||||||
if(welded)
|
if(welded)
|
||||||
add_overlay("welded")
|
add_overlay(welded_overlay_state)
|
||||||
else
|
else
|
||||||
icon_state = icon_opened
|
icon_state = icon_opened
|
||||||
|
|
||||||
|
|||||||
@@ -185,6 +185,7 @@
|
|||||||
icon_state = "hydrant"
|
icon_state = "hydrant"
|
||||||
icon_closed = "hydrant"
|
icon_closed = "hydrant"
|
||||||
icon_opened = "hydrant_open"
|
icon_opened = "hydrant_open"
|
||||||
|
welded_overlay_state = "welded_wallcloset"
|
||||||
anchored = 1
|
anchored = 1
|
||||||
density = 0
|
density = 0
|
||||||
wall_mounted = 1
|
wall_mounted = 1
|
||||||
@@ -209,6 +210,7 @@
|
|||||||
icon_state = "medical_wall"
|
icon_state = "medical_wall"
|
||||||
icon_closed = "medical_wall"
|
icon_closed = "medical_wall"
|
||||||
icon_opened = "medical_wall_open"
|
icon_opened = "medical_wall_open"
|
||||||
|
welded_overlay_state = "welded_wallcloset"
|
||||||
anchored = 1
|
anchored = 1
|
||||||
density = 0
|
density = 0
|
||||||
wall_mounted = 1
|
wall_mounted = 1
|
||||||
|
|||||||
@@ -37,22 +37,24 @@
|
|||||||
pref.be_special_role -= role
|
pref.be_special_role -= role
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/antagonism/candidacy/content(var/mob/user)
|
/datum/category_item/player_setup_item/antagonism/candidacy/content(var/mob/user)
|
||||||
. += "<b>Special Role Availability:</b><br>"
|
var/list/dat = list(
|
||||||
. += "<table>"
|
"<b>Special Role Availability:</b><br>",
|
||||||
|
"<table>"
|
||||||
|
)
|
||||||
var/is_global_banned = jobban_isbanned(preference_mob(), "Antagonist")
|
var/is_global_banned = jobban_isbanned(preference_mob(), "Antagonist")
|
||||||
for(var/antag_type in all_antag_types)
|
for(var/antag_type in all_antag_types)
|
||||||
var/datum/antagonist/antag = all_antag_types[antag_type]
|
var/datum/antagonist/antag = all_antag_types[antag_type]
|
||||||
. += "<tr><td>[antag.role_text]: </td><td>"
|
dat += "<tr><td>[antag.role_text]: </td><td>"
|
||||||
var/ban_reason = jobban_isbanned(preference_mob(), antag.bantype)
|
var/ban_reason = jobban_isbanned(preference_mob(), antag.bantype)
|
||||||
if(ban_reason == "AGE WHITELISTED")
|
if(ban_reason == "AGE WHITELISTED")
|
||||||
. += "<span class='danger'>\[IN [player_old_enough_for_role(preference_mob(), antag.bantype)] DAYS\]</span><br>"
|
dat += "<span class='danger'>\[IN [player_old_enough_for_role(preference_mob(), antag.bantype)] DAYS\]</span><br>"
|
||||||
else if(is_global_banned || ban_reason)
|
else if(is_global_banned || ban_reason)
|
||||||
. += "<span class='danger'>\[<a href='?src=\ref[user.client];view_jobban=[is_global_banned ? "Antagonist" : "[antag.bantype]"];'>BANNED</a>\]</span><br>"
|
dat += "<span class='danger'>\[<a href='?src=\ref[user.client];view_jobban=[is_global_banned ? "Antagonist" : "[antag.bantype]"];'>BANNED</a>\]</span><br>"
|
||||||
else if(antag.role_type in pref.be_special_role)
|
else if(antag.role_type in pref.be_special_role)
|
||||||
. += "<b>Yes</b> / <a href='?src=\ref[src];del_special=[antag.role_type]'>No</a></br>"
|
dat += "<b>Yes</b> / <a href='?src=\ref[src];del_special=[antag.role_type]'>No</a></br>"
|
||||||
else
|
else
|
||||||
. += "<a href='?src=\ref[src];add_special=[antag.role_type]'>Yes</a> / <b>No</b></br>"
|
dat += "<a href='?src=\ref[src];add_special=[antag.role_type]'>Yes</a> / <b>No</b></br>"
|
||||||
. += "</td></tr>"
|
dat += "</td></tr>"
|
||||||
|
|
||||||
var/list/ghost_traps = get_ghost_traps()
|
var/list/ghost_traps = get_ghost_traps()
|
||||||
for(var/ghost_trap_key in ghost_traps)
|
for(var/ghost_trap_key in ghost_traps)
|
||||||
@@ -60,7 +62,7 @@
|
|||||||
if(!ghost_trap.list_as_special_role)
|
if(!ghost_trap.list_as_special_role)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
. += "<tr><td>[(ghost_trap.ghost_trap_role)]: </td><td>"
|
dat += "<tr><td>[(ghost_trap.ghost_trap_role)]: </td><td>"
|
||||||
var/ban_state = banned_from_ghost_role(preference_mob(), ghost_trap)
|
var/ban_state = banned_from_ghost_role(preference_mob(), ghost_trap)
|
||||||
if(ban_state == AGEBAN)
|
if(ban_state == AGEBAN)
|
||||||
var/age_to_beat = 0
|
var/age_to_beat = 0
|
||||||
@@ -68,15 +70,17 @@
|
|||||||
age_to_beat = player_old_enough_for_role(preference_mob(), A)
|
age_to_beat = player_old_enough_for_role(preference_mob(), A)
|
||||||
if (age_to_beat)
|
if (age_to_beat)
|
||||||
break
|
break
|
||||||
. += "<span class='danger'>\[IN [age_to_beat] DAYS\]</span><br>"
|
dat += "<span class='danger'>\[IN [age_to_beat] DAYS\]</span><br>"
|
||||||
else if (ban_state == RANBAN)
|
else if (ban_state == RANBAN)
|
||||||
. += "<span class='danger'>\[<a href='?src=\ref[user.client];view_jobban=[ghost_trap];'>BANNED</a>\]</span><br>"
|
dat += "<span class='danger'>\[<a href='?src=\ref[user.client];view_jobban=[ghost_trap];'>BANNED</a>\]</span><br>"
|
||||||
else if(ghost_trap.pref_check in pref.be_special_role)
|
else if(ghost_trap.pref_check in pref.be_special_role)
|
||||||
. += "<b>Yes</b> / <a href='?src=\ref[src];del_special=[ghost_trap.pref_check]'>No</a></br>"
|
dat += "<b>Yes</b> / <a href='?src=\ref[src];del_special=[ghost_trap.pref_check]'>No</a></br>"
|
||||||
else
|
else
|
||||||
. += "<a href='?src=\ref[src];add_special=[ghost_trap.pref_check]'>Yes</a> / <b>No</b></br>"
|
dat += "<a href='?src=\ref[src];add_special=[ghost_trap.pref_check]'>Yes</a> / <b>No</b></br>"
|
||||||
. += "</td></tr>"
|
dat += "</td></tr>"
|
||||||
. += "</table>"
|
dat += "</table>"
|
||||||
|
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/proc/banned_from_ghost_role(var/mob, var/datum/ghosttrap/ghost_trap)
|
/datum/category_item/player_setup_item/proc/banned_from_ghost_role(var/mob, var/datum/ghosttrap/ghost_trap)
|
||||||
for(var/ban_type in ghost_trap.ban_checks)
|
for(var/ban_type in ghost_trap.ban_checks)
|
||||||
|
|||||||
@@ -13,15 +13,39 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None")
|
|||||||
S["exploit_record"] << pref.exploit_record
|
S["exploit_record"] << pref.exploit_record
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/antagonism/basic/gather_load_query()
|
/datum/category_item/player_setup_item/antagonism/basic/gather_load_query()
|
||||||
return list("ss13_characters_flavour" = list("vars" = list("records_exploit" = "exploit_record"), "args" = list("char_id")),
|
return list(
|
||||||
"ss13_characters" = list("vars" = list("uplink_location" = "uplinklocation"), "args" = list("id")))
|
"ss13_characters_flavour" = list(
|
||||||
|
"vars" = list(
|
||||||
|
"records_exploit" = "exploit_record"
|
||||||
|
),
|
||||||
|
"args" = list("char_id")
|
||||||
|
),
|
||||||
|
"ss13_characters" = list(
|
||||||
|
"vars" = list(
|
||||||
|
"uplink_location" = "uplinklocation"
|
||||||
|
),
|
||||||
|
"args" = list("id")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/antagonism/basic/gather_load_parameters()
|
/datum/category_item/player_setup_item/antagonism/basic/gather_load_parameters()
|
||||||
return list("char_id" = pref.current_character, "id" = pref.current_character)
|
return list(
|
||||||
|
"char_id" = pref.current_character,
|
||||||
|
"id" = pref.current_character
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/antagonism/basic/gather_save_query()
|
/datum/category_item/player_setup_item/antagonism/basic/gather_save_query()
|
||||||
return list("ss13_characters_flavour" = list("records_exploit", "char_id" = 1),
|
return list(
|
||||||
"ss13_characters" = list("uplink_location", "id" = 1, "ckey" = 1))
|
"ss13_characters_flavour" = list(
|
||||||
|
"records_exploit",
|
||||||
|
"char_id" = 1
|
||||||
|
),
|
||||||
|
"ss13_characters" = list(
|
||||||
|
"uplink_location",
|
||||||
|
"id" = 1,
|
||||||
|
"ckey" = 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/antagonism/basic/gather_save_parameters()
|
/datum/category_item/player_setup_item/antagonism/basic/gather_save_parameters()
|
||||||
return list("records_exploit" = pref.exploit_record, "char_id" = pref.current_character, "uplink_location" = pref.uplinklocation, "id" = pref.current_character, "ckey" = pref.client.ckey)
|
return list("records_exploit" = pref.exploit_record, "char_id" = pref.current_character, "uplink_location" = pref.uplinklocation, "id" = pref.current_character, "ckey" = pref.client.ckey)
|
||||||
@@ -30,13 +54,17 @@ var/global/list/uplink_locations = list("PDA", "Headset", "None")
|
|||||||
pref.uplinklocation = sanitize_inlist(pref.uplinklocation, uplink_locations, initial(pref.uplinklocation))
|
pref.uplinklocation = sanitize_inlist(pref.uplinklocation, uplink_locations, initial(pref.uplinklocation))
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user)
|
/datum/category_item/player_setup_item/antagonism/basic/content(var/mob/user)
|
||||||
. +="<b>Antag Setup:</b><br>"
|
var/list/dat = list(
|
||||||
. +="Uplink Type: <a href='?src=\ref[src];antagtask=1'>[pref.uplinklocation]</a><br>"
|
"<b>Antag Setup:</b><br>",
|
||||||
. +="Exploitable information:<br>"
|
"Uplink Type: <a href='?src=\ref[src];antagtask=1'>[pref.uplinklocation]</a><br>",
|
||||||
|
"Exploitable information:<br>"
|
||||||
|
)
|
||||||
if(jobban_isbanned(user, "Records"))
|
if(jobban_isbanned(user, "Records"))
|
||||||
. += "<b>You are banned from using character records.</b><br>"
|
dat += "<b>You are banned from using character records.</b><br>"
|
||||||
else
|
else
|
||||||
. +="<a href='?src=\ref[src];exploitable_record=1'>[TextPreview(pref.exploit_record,40)]</a><br>"
|
dat +="<a href='?src=\ref[src];exploitable_record=1'>[TextPreview(pref.exploit_record,40)]</a><br>"
|
||||||
|
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/antagonism/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
|
/datum/category_item/player_setup_item/antagonism/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||||
if (href_list["antagtask"])
|
if (href_list["antagtask"])
|
||||||
|
|||||||
@@ -4,52 +4,64 @@
|
|||||||
var/static/list/valid_player_genders = list(MALE, FEMALE)
|
var/static/list/valid_player_genders = list(MALE, FEMALE)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic/load_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/basic/load_character(var/savefile/S)
|
||||||
S["real_name"] >> pref.real_name
|
S["real_name"] >> pref.real_name
|
||||||
S["gender"] >> pref.gender
|
S["gender"] >> pref.gender
|
||||||
S["age"] >> pref.age
|
S["age"] >> pref.age
|
||||||
S["species"] >> pref.species
|
S["species"] >> pref.species
|
||||||
S["spawnpoint"] >> pref.spawnpoint
|
S["spawnpoint"] >> pref.spawnpoint
|
||||||
S["OOC_Notes"] >> pref.metadata
|
S["OOC_Notes"] >> pref.metadata
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic/save_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/basic/save_character(var/savefile/S)
|
||||||
S["real_name"] << pref.real_name
|
S["real_name"] << pref.real_name
|
||||||
S["gender"] << pref.gender
|
S["gender"] << pref.gender
|
||||||
S["age"] << pref.age
|
S["age"] << pref.age
|
||||||
S["species"] << pref.species
|
S["species"] << pref.species
|
||||||
S["spawnpoint"] << pref.spawnpoint
|
S["spawnpoint"] << pref.spawnpoint
|
||||||
S["OOC_Notes"] << pref.metadata
|
S["OOC_Notes"] << pref.metadata
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic/gather_load_query()
|
/datum/category_item/player_setup_item/general/basic/gather_load_query()
|
||||||
return list("ss13_characters" = list("vars" = list("name" = "real_name",
|
return list(
|
||||||
"gender",
|
"ss13_characters" = list(
|
||||||
"age",
|
"vars" = list(
|
||||||
"metadata",
|
"name" = "real_name",
|
||||||
"spawnpoint",
|
"gender",
|
||||||
"species"),
|
"age",
|
||||||
"args" = list("id")))
|
"metadata",
|
||||||
|
"spawnpoint",
|
||||||
|
"species"
|
||||||
|
),
|
||||||
|
"args" = list("id")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic/gather_load_parameters()
|
/datum/category_item/player_setup_item/general/basic/gather_load_parameters()
|
||||||
return list("id" = pref.current_character)
|
return list("id" = pref.current_character)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic/gather_save_query()
|
/datum/category_item/player_setup_item/general/basic/gather_save_query()
|
||||||
return list("ss13_characters" = list("name",
|
return list(
|
||||||
"gender",
|
"ss13_characters" = list(
|
||||||
"age",
|
"name",
|
||||||
"metadata",
|
"gender",
|
||||||
"spawnpoint",
|
"age",
|
||||||
"species",
|
"metadata",
|
||||||
"id" = 1,
|
"spawnpoint",
|
||||||
"ckey" = 1))
|
"species",
|
||||||
|
"id" = 1,
|
||||||
|
"ckey" = 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic/gather_save_parameters()
|
/datum/category_item/player_setup_item/general/basic/gather_save_parameters()
|
||||||
return list("name" = pref.real_name,
|
return list(
|
||||||
"gender" = pref.gender,
|
"name" = pref.real_name,
|
||||||
"age" = pref.age,
|
"gender" = pref.gender,
|
||||||
"metadata" = pref.metadata,
|
"age" = pref.age,
|
||||||
"spawnpoint" = pref.spawnpoint,
|
"metadata" = pref.metadata,
|
||||||
"species" = pref.species,
|
"spawnpoint" = pref.spawnpoint,
|
||||||
"id" = pref.current_character,
|
"species" = pref.species,
|
||||||
"ckey" = pref.client.ckey)
|
"id" = pref.current_character,
|
||||||
|
"ckey" = pref.client.ckey
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic/load_special()
|
/datum/category_item/player_setup_item/general/basic/load_special()
|
||||||
pref.can_edit_name = 1
|
pref.can_edit_name = 1
|
||||||
@@ -74,27 +86,29 @@
|
|||||||
if(!pref.species || !(pref.species in playable_species))
|
if(!pref.species || !(pref.species in playable_species))
|
||||||
pref.species = "Human"
|
pref.species = "Human"
|
||||||
|
|
||||||
pref.age = sanitize_integer(text2num(pref.age), pref.getMinAge(), pref.getMaxAge(), initial(pref.age))
|
pref.age = sanitize_integer(text2num(pref.age), pref.getMinAge(), pref.getMaxAge(), initial(pref.age))
|
||||||
pref.gender = sanitize_inlist(pref.gender, valid_player_genders, pick(valid_player_genders))
|
pref.gender = sanitize_inlist(pref.gender, valid_player_genders, pick(valid_player_genders))
|
||||||
pref.real_name = sanitize_name(pref.real_name, pref.species)
|
pref.real_name = sanitize_name(pref.real_name, pref.species)
|
||||||
if(!pref.real_name)
|
if(!pref.real_name)
|
||||||
pref.real_name = random_name(pref.gender, pref.species)
|
pref.real_name = random_name(pref.gender, pref.species)
|
||||||
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes, initial(pref.spawnpoint))
|
pref.spawnpoint = sanitize_inlist(pref.spawnpoint, spawntypes, initial(pref.spawnpoint))
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic/content()
|
/datum/category_item/player_setup_item/general/basic/content()
|
||||||
. = "<b>Name:</b> "
|
var/list/dat = list("<b>Name:</b> ")
|
||||||
if (pref.can_edit_name)
|
if (pref.can_edit_name)
|
||||||
. += "<a href='?src=\ref[src];rename=1'><b>[pref.real_name]</b></a><br>"
|
dat += "<a href='?src=\ref[src];rename=1'><b>[pref.real_name]</b></a><br>"
|
||||||
else
|
else
|
||||||
. += "<b>[pref.real_name]</b><br> (<a href='?src=\ref[src];namehelp=1'>?</a>)"
|
dat += "<b>[pref.real_name]</b><br> (<a href='?src=\ref[src];namehelp=1'>?</a>)"
|
||||||
if (pref.can_edit_name)
|
if (pref.can_edit_name)
|
||||||
. += "(<a href='?src=\ref[src];random_name=1'>Random Name</A>)"
|
dat += "(<a href='?src=\ref[src];random_name=1'>Random Name</A>)"
|
||||||
. += "<br>"
|
dat += "<br>"
|
||||||
. += "<b>Gender:</b> <a href='?src=\ref[src];gender=1'><b>[capitalize(lowertext(pref.gender))]</b></a><br>"
|
dat += "<b>Gender:</b> <a href='?src=\ref[src];gender=1'><b>[capitalize(lowertext(pref.gender))]</b></a><br>"
|
||||||
. += "<b>Age:</b> <a href='?src=\ref[src];age=1'>[pref.age]</a><br>"
|
dat += "<b>Age:</b> <a href='?src=\ref[src];age=1'>[pref.age]</a><br>"
|
||||||
. += "<b>Spawn Point</b>: <a href='?src=\ref[src];spawnpoint=1'>[pref.spawnpoint]</a><br>"
|
dat += "<b>Spawn Point</b>: <a href='?src=\ref[src];spawnpoint=1'>[pref.spawnpoint]</a><br>"
|
||||||
if(config.allow_Metadata)
|
if(config.allow_Metadata)
|
||||||
. += "<b>OOC Notes:</b> <a href='?src=\ref[src];metadata=1'> Edit </a><br>"
|
dat += "<b>OOC Notes:</b> <a href='?src=\ref[src];metadata=1'> Edit </a><br>"
|
||||||
|
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
|
/datum/category_item/player_setup_item/general/basic/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||||
if(href_list["rename"])
|
if(href_list["rename"])
|
||||||
|
|||||||
@@ -3,26 +3,39 @@
|
|||||||
sort_order = 2
|
sort_order = 2
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/language/load_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/language/load_character(var/savefile/S)
|
||||||
S["language"] >> pref.alternate_languages
|
S["language"] >> pref.alternate_languages
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/language/save_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/language/save_character(var/savefile/S)
|
||||||
S["language"] << pref.alternate_languages
|
S["language"] << pref.alternate_languages
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/language/gather_load_query()
|
/datum/category_item/player_setup_item/general/language/gather_load_query()
|
||||||
return list("ss13_characters" = list("vars" = list("language" = "alternate_languages"), "args" = list("id")))
|
return list(
|
||||||
|
"ss13_characters" = list(
|
||||||
|
"vars" = list(
|
||||||
|
"language" = "alternate_languages"
|
||||||
|
),
|
||||||
|
"args" = list("id")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/language/gather_load_parameters()
|
/datum/category_item/player_setup_item/general/language/gather_load_parameters()
|
||||||
return list("id" = pref.current_character)
|
return list("id" = pref.current_character)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/language/gather_save_query()
|
/datum/category_item/player_setup_item/general/language/gather_save_query()
|
||||||
return list("ss13_characters" = list("id" = 1,
|
return list(
|
||||||
"ckey" = 1,
|
"ss13_characters" = list(
|
||||||
"language"))
|
"id" = 1,
|
||||||
|
"ckey" = 1,
|
||||||
|
"language"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/language/gather_save_parameters()
|
/datum/category_item/player_setup_item/general/language/gather_save_parameters()
|
||||||
return list("language" = list2params(pref.alternate_languages),
|
return list(
|
||||||
"id" = pref.current_character,
|
"language" = list2params(pref.alternate_languages),
|
||||||
"ckey" = pref.client.ckey)
|
"id" = pref.current_character,
|
||||||
|
"ckey" = pref.client.ckey
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/language/sanitize_character(var/sql_load = 0)
|
/datum/category_item/player_setup_item/general/language/sanitize_character(var/sql_load = 0)
|
||||||
if (sql_load)
|
if (sql_load)
|
||||||
@@ -58,22 +71,24 @@
|
|||||||
cat.modified = TRUE
|
cat.modified = TRUE
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/language/content()
|
/datum/category_item/player_setup_item/general/language/content()
|
||||||
. += "<b>Languages</b><br>"
|
var/list/dat = list("<b>Languages</b><br>")
|
||||||
var/datum/species/S = all_species[pref.species]
|
var/datum/species/S = all_species[pref.species]
|
||||||
if(S.language)
|
if(S.language)
|
||||||
. += "- [S.language]<br>"
|
dat += "- [S.language]<br>"
|
||||||
if(S.default_language && S.default_language != S.language)
|
if(S.default_language && S.default_language != S.language)
|
||||||
. += "- [S.default_language]<br>"
|
dat += "- [S.default_language]<br>"
|
||||||
if(S.num_alternate_languages)
|
if(S.num_alternate_languages)
|
||||||
if(pref.alternate_languages.len)
|
if(pref.alternate_languages.len)
|
||||||
for(var/i = 1 to pref.alternate_languages.len)
|
for(var/i = 1 to pref.alternate_languages.len)
|
||||||
var/lang = pref.alternate_languages[i]
|
var/lang = pref.alternate_languages[i]
|
||||||
. += "- [lang] - <a href='?src=\ref[src];remove_language=[i]'>remove</a><br>"
|
dat += "- [lang] - <a href='?src=\ref[src];remove_language=[i]'>remove</a><br>"
|
||||||
|
|
||||||
if(pref.alternate_languages.len < S.num_alternate_languages)
|
if(pref.alternate_languages.len < S.num_alternate_languages)
|
||||||
. += "- <a href='?src=\ref[src];add_language=1'>add</a> ([S.num_alternate_languages - pref.alternate_languages.len] remaining)<br>"
|
dat += "- <a href='?src=\ref[src];add_language=1'>add</a> ([S.num_alternate_languages - pref.alternate_languages.len] remaining)<br>"
|
||||||
else
|
else
|
||||||
. += "- [pref.species] cannot choose secondary languages.<br>"
|
dat += "- [pref.species] cannot choose secondary languages.<br>"
|
||||||
|
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/language/OnTopic(var/href,var/list/href_list, var/mob/user)
|
/datum/category_item/player_setup_item/general/language/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||||
if(href_list["remove_language"])
|
if(href_list["remove_language"])
|
||||||
|
|||||||
@@ -5,123 +5,135 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
sort_order = 3
|
sort_order = 3
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/load_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/body/load_character(var/savefile/S)
|
||||||
S["hair_red"] >> pref.r_hair
|
S["hair_red"] >> pref.r_hair
|
||||||
S["hair_green"] >> pref.g_hair
|
S["hair_green"] >> pref.g_hair
|
||||||
S["hair_blue"] >> pref.b_hair
|
S["hair_blue"] >> pref.b_hair
|
||||||
S["facial_red"] >> pref.r_facial
|
S["facial_red"] >> pref.r_facial
|
||||||
S["facial_green"] >> pref.g_facial
|
S["facial_green"] >> pref.g_facial
|
||||||
S["facial_blue"] >> pref.b_facial
|
S["facial_blue"] >> pref.b_facial
|
||||||
S["skin_tone"] >> pref.s_tone
|
S["skin_tone"] >> pref.s_tone
|
||||||
S["skin_red"] >> pref.r_skin
|
S["skin_red"] >> pref.r_skin
|
||||||
S["skin_green"] >> pref.g_skin
|
S["skin_green"] >> pref.g_skin
|
||||||
S["skin_blue"] >> pref.b_skin
|
S["skin_blue"] >> pref.b_skin
|
||||||
S["hair_style_name"] >> pref.h_style
|
S["hair_style_name"] >> pref.h_style
|
||||||
S["facial_style_name"] >> pref.f_style
|
S["facial_style_name"] >> pref.f_style
|
||||||
S["eyes_red"] >> pref.r_eyes
|
S["eyes_red"] >> pref.r_eyes
|
||||||
S["eyes_green"] >> pref.g_eyes
|
S["eyes_green"] >> pref.g_eyes
|
||||||
S["eyes_blue"] >> pref.b_eyes
|
S["eyes_blue"] >> pref.b_eyes
|
||||||
S["b_type"] >> pref.b_type
|
S["b_type"] >> pref.b_type
|
||||||
S["disabilities"] >> pref.disabilities
|
S["disabilities"] >> pref.disabilities
|
||||||
S["organ_data"] >> pref.organ_data
|
S["organ_data"] >> pref.organ_data
|
||||||
S["rlimb_data"] >> pref.rlimb_data
|
S["rlimb_data"] >> pref.rlimb_data
|
||||||
S["body_markings"] >> pref.body_markings
|
S["body_markings"] >> pref.body_markings
|
||||||
pref.preview_icon = null
|
pref.preview_icon = null
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/save_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/body/save_character(var/savefile/S)
|
||||||
S["hair_red"] << pref.r_hair
|
S["hair_red"] << pref.r_hair
|
||||||
S["hair_green"] << pref.g_hair
|
S["hair_green"] << pref.g_hair
|
||||||
S["hair_blue"] << pref.b_hair
|
S["hair_blue"] << pref.b_hair
|
||||||
S["facial_red"] << pref.r_facial
|
S["facial_red"] << pref.r_facial
|
||||||
S["facial_green"] << pref.g_facial
|
S["facial_green"] << pref.g_facial
|
||||||
S["facial_blue"] << pref.b_facial
|
S["facial_blue"] << pref.b_facial
|
||||||
S["skin_tone"] << pref.s_tone
|
S["skin_tone"] << pref.s_tone
|
||||||
S["skin_red"] << pref.r_skin
|
S["skin_red"] << pref.r_skin
|
||||||
S["skin_green"] << pref.g_skin
|
S["skin_green"] << pref.g_skin
|
||||||
S["skin_blue"] << pref.b_skin
|
S["skin_blue"] << pref.b_skin
|
||||||
S["hair_style_name"] << pref.h_style
|
S["hair_style_name"] << pref.h_style
|
||||||
S["facial_style_name"] << pref.f_style
|
S["facial_style_name"] << pref.f_style
|
||||||
S["eyes_red"] << pref.r_eyes
|
S["eyes_red"] << pref.r_eyes
|
||||||
S["eyes_green"] << pref.g_eyes
|
S["eyes_green"] << pref.g_eyes
|
||||||
S["eyes_blue"] << pref.b_eyes
|
S["eyes_blue"] << pref.b_eyes
|
||||||
S["b_type"] << pref.b_type
|
S["b_type"] << pref.b_type
|
||||||
S["disabilities"] << pref.disabilities
|
S["disabilities"] << pref.disabilities
|
||||||
S["organ_data"] << pref.organ_data
|
S["organ_data"] << pref.organ_data
|
||||||
S["rlimb_data"] << pref.rlimb_data
|
S["rlimb_data"] << pref.rlimb_data
|
||||||
S["body_markings"] << pref.body_markings
|
S["body_markings"] << pref.body_markings
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/gather_load_query()
|
/datum/category_item/player_setup_item/general/body/gather_load_query()
|
||||||
return list("ss13_characters" = list("vars" = list("hair_colour",
|
return list(
|
||||||
"facial_colour",
|
"ss13_characters" = list(
|
||||||
"skin_tone" = "s_tone",
|
"vars" = list(
|
||||||
"skin_colour",
|
"hair_colour",
|
||||||
"hair_style" = "h_style",
|
"facial_colour",
|
||||||
"facial_style" = "f_style",
|
"skin_tone" = "s_tone",
|
||||||
"eyes_colour",
|
"skin_colour",
|
||||||
"b_type",
|
"hair_style" = "h_style",
|
||||||
"disabilities",
|
"facial_style" = "f_style",
|
||||||
"organs_data" = "organ_data",
|
"eyes_colour",
|
||||||
"organs_robotic" = "rlimb_data",
|
"b_type",
|
||||||
"body_markings"),
|
"disabilities",
|
||||||
"args" = list("id")))
|
"organs_data" = "organ_data",
|
||||||
|
"organs_robotic" = "rlimb_data",
|
||||||
|
"body_markings"
|
||||||
|
),
|
||||||
|
"args" = list("id")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/gather_load_parameters()
|
/datum/category_item/player_setup_item/general/body/gather_load_parameters()
|
||||||
return list("id" = pref.current_character)
|
return list("id" = pref.current_character)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/gather_save_query()
|
/datum/category_item/player_setup_item/general/body/gather_save_query()
|
||||||
return list("ss13_characters" = list("hair_colour",
|
return list(
|
||||||
"facial_colour",
|
"ss13_characters" = list(
|
||||||
"skin_tone",
|
"hair_colour",
|
||||||
"skin_colour",
|
"facial_colour",
|
||||||
"hair_style",
|
"skin_tone",
|
||||||
"facial_style",
|
"skin_colour",
|
||||||
"eyes_colour",
|
"hair_style",
|
||||||
"b_type",
|
"facial_style",
|
||||||
"disabilities",
|
"eyes_colour",
|
||||||
"organs_data",
|
"b_type",
|
||||||
"organs_robotic",
|
"disabilities",
|
||||||
"body_markings",
|
"organs_data",
|
||||||
"id" = 1,
|
"organs_robotic",
|
||||||
"ckey" = 1))
|
"body_markings",
|
||||||
|
"id" = 1,
|
||||||
|
"ckey" = 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/gather_save_parameters()
|
/datum/category_item/player_setup_item/general/body/gather_save_parameters()
|
||||||
return list("hair_colour" = "#" + num2hex(pref.r_hair, 2) + num2hex(pref.g_hair, 2) + num2hex(pref.b_hair, 2),
|
return list(
|
||||||
"facial_colour" = "#" + num2hex(pref.r_facial, 2) + num2hex(pref.g_facial, 2) + num2hex(pref.b_facial, 2),
|
"hair_colour" = rgb(pref.r_hair, pref.g_hair, pref.b_hair),
|
||||||
"skin_tone" = pref.s_tone,
|
"facial_colour" = rgb(pref.r_facial, pref.g_facial, pref.b_facial),
|
||||||
"skin_colour" = "#" + num2hex(pref.r_skin, 2) + num2hex(pref.g_skin, 2) + num2hex(pref.b_skin, 2),
|
"skin_tone" = pref.s_tone,
|
||||||
"hair_style" = pref.h_style,
|
"skin_colour" = rgb(pref.r_skin, pref.g_skin, pref.b_skin) ,
|
||||||
"facial_style" = pref.f_style,
|
"hair_style" = pref.h_style,
|
||||||
"eyes_colour" = "#" + num2hex(pref.r_eyes, 2) + num2hex(pref.g_eyes, 2) + num2hex(pref.b_eyes, 2),
|
"facial_style" = pref.f_style,
|
||||||
"b_type" = pref.b_type,
|
"eyes_colour" = rgb(pref.r_eyes, pref.g_eyes, pref.b_eyes),
|
||||||
"disabilities" = pref.disabilities,
|
"b_type" = pref.b_type,
|
||||||
"organs_data" = list2params(pref.organ_data),
|
"disabilities" = pref.disabilities,
|
||||||
"organs_robotic"= list2params(pref.rlimb_data),
|
"organs_data" = list2params(pref.organ_data),
|
||||||
"body_markings" = json_encode(pref.body_markings),
|
"organs_robotic"= list2params(pref.rlimb_data),
|
||||||
"id" = pref.current_character,
|
"body_markings" = json_encode(pref.body_markings),
|
||||||
"ckey" = pref.client.ckey)
|
"id" = pref.current_character,
|
||||||
|
"ckey" = pref.client.ckey
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/sanitize_character(var/sql_load = 0)
|
/datum/category_item/player_setup_item/general/body/sanitize_character(var/sql_load = 0)
|
||||||
if (sql_load)
|
if (sql_load)
|
||||||
pref.hair_colour = sanitize_hexcolor(pref.hair_colour)
|
pref.hair_colour = sanitize_hexcolor(pref.hair_colour)
|
||||||
pref.r_hair = GetRedPart(pref.hair_colour)
|
pref.r_hair = GetRedPart(pref.hair_colour)
|
||||||
pref.g_hair = GetGreenPart(pref.hair_colour)
|
pref.g_hair = GetGreenPart(pref.hair_colour)
|
||||||
pref.b_hair = GetBluePart(pref.hair_colour)
|
pref.b_hair = GetBluePart(pref.hair_colour)
|
||||||
|
|
||||||
pref.facial_colour = sanitize_hexcolor(pref.facial_colour)
|
pref.facial_colour = sanitize_hexcolor(pref.facial_colour)
|
||||||
pref.r_facial = GetRedPart(pref.facial_colour)
|
pref.r_facial = GetRedPart(pref.facial_colour)
|
||||||
pref.g_facial = GetGreenPart(pref.facial_colour)
|
pref.g_facial = GetGreenPart(pref.facial_colour)
|
||||||
pref.b_facial = GetBluePart(pref.facial_colour)
|
pref.b_facial = GetBluePart(pref.facial_colour)
|
||||||
|
|
||||||
pref.s_tone = text2num(pref.s_tone)
|
pref.s_tone = text2num(pref.s_tone)
|
||||||
|
|
||||||
pref.skin_colour = sanitize_hexcolor(pref.skin_colour)
|
pref.skin_colour = sanitize_hexcolor(pref.skin_colour)
|
||||||
pref.r_skin = GetRedPart(pref.skin_colour)
|
pref.r_skin = GetRedPart(pref.skin_colour)
|
||||||
pref.g_skin = GetGreenPart(pref.skin_colour)
|
pref.g_skin = GetGreenPart(pref.skin_colour)
|
||||||
pref.b_skin = GetBluePart(pref.skin_colour)
|
pref.b_skin = GetBluePart(pref.skin_colour)
|
||||||
|
|
||||||
pref.skin_colour = sanitize_hexcolor(pref.skin_colour)
|
pref.skin_colour = sanitize_hexcolor(pref.skin_colour)
|
||||||
pref.r_eyes = GetRedPart(pref.eyes_colour)
|
pref.r_eyes = GetRedPart(pref.eyes_colour)
|
||||||
pref.g_eyes = GetGreenPart(pref.eyes_colour)
|
pref.g_eyes = GetGreenPart(pref.eyes_colour)
|
||||||
pref.b_eyes = GetBluePart(pref.eyes_colour)
|
pref.b_eyes = GetBluePart(pref.eyes_colour)
|
||||||
|
|
||||||
pref.disabilities = text2num(pref.disabilities)
|
pref.disabilities = text2num(pref.disabilities)
|
||||||
|
|
||||||
@@ -137,24 +149,24 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
log_debug("BODY MARKINGS: Caught [e]. Initial value: [before]")
|
log_debug("BODY MARKINGS: Caught [e]. Initial value: [before]")
|
||||||
pref.body_markings = list()
|
pref.body_markings = list()
|
||||||
|
|
||||||
pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair))
|
pref.r_hair = sanitize_integer(pref.r_hair, 0, 255, initial(pref.r_hair))
|
||||||
pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair))
|
pref.g_hair = sanitize_integer(pref.g_hair, 0, 255, initial(pref.g_hair))
|
||||||
pref.b_hair = sanitize_integer(pref.b_hair, 0, 255, initial(pref.b_hair))
|
pref.b_hair = sanitize_integer(pref.b_hair, 0, 255, initial(pref.b_hair))
|
||||||
pref.r_facial = sanitize_integer(pref.r_facial, 0, 255, initial(pref.r_facial))
|
pref.r_facial = sanitize_integer(pref.r_facial, 0, 255, initial(pref.r_facial))
|
||||||
pref.g_facial = sanitize_integer(pref.g_facial, 0, 255, initial(pref.g_facial))
|
pref.g_facial = sanitize_integer(pref.g_facial, 0, 255, initial(pref.g_facial))
|
||||||
pref.b_facial = sanitize_integer(pref.b_facial, 0, 255, initial(pref.b_facial))
|
pref.b_facial = sanitize_integer(pref.b_facial, 0, 255, initial(pref.b_facial))
|
||||||
pref.s_tone = sanitize_integer(pref.s_tone, -185, 34, initial(pref.s_tone))
|
pref.s_tone = sanitize_integer(pref.s_tone, -185, 34, initial(pref.s_tone))
|
||||||
pref.r_skin = sanitize_integer(pref.r_skin, 0, 255, initial(pref.r_skin))
|
pref.r_skin = sanitize_integer(pref.r_skin, 0, 255, initial(pref.r_skin))
|
||||||
pref.g_skin = sanitize_integer(pref.g_skin, 0, 255, initial(pref.g_skin))
|
pref.g_skin = sanitize_integer(pref.g_skin, 0, 255, initial(pref.g_skin))
|
||||||
pref.b_skin = sanitize_integer(pref.b_skin, 0, 255, initial(pref.b_skin))
|
pref.b_skin = sanitize_integer(pref.b_skin, 0, 255, initial(pref.b_skin))
|
||||||
pref.h_style = sanitize_inlist(pref.h_style, hair_styles_list, initial(pref.h_style))
|
pref.h_style = sanitize_inlist(pref.h_style, hair_styles_list, initial(pref.h_style))
|
||||||
pref.f_style = sanitize_inlist(pref.f_style, facial_hair_styles_list, initial(pref.f_style))
|
pref.f_style = sanitize_inlist(pref.f_style, facial_hair_styles_list, initial(pref.f_style))
|
||||||
pref.r_eyes = sanitize_integer(pref.r_eyes, 0, 255, initial(pref.r_eyes))
|
pref.r_eyes = sanitize_integer(pref.r_eyes, 0, 255, initial(pref.r_eyes))
|
||||||
pref.g_eyes = sanitize_integer(pref.g_eyes, 0, 255, initial(pref.g_eyes))
|
pref.g_eyes = sanitize_integer(pref.g_eyes, 0, 255, initial(pref.g_eyes))
|
||||||
pref.b_eyes = sanitize_integer(pref.b_eyes, 0, 255, initial(pref.b_eyes))
|
pref.b_eyes = sanitize_integer(pref.b_eyes, 0, 255, initial(pref.b_eyes))
|
||||||
pref.b_type = sanitize_text(pref.b_type, initial(pref.b_type))
|
pref.b_type = sanitize_text(pref.b_type, initial(pref.b_type))
|
||||||
|
|
||||||
pref.disabilities = sanitize_integer(pref.disabilities, 0, 65535, initial(pref.disabilities))
|
pref.disabilities = sanitize_integer(pref.disabilities, 0, 65535, initial(pref.disabilities))
|
||||||
if (!pref.organ_data || !islist(pref.organ_data))
|
if (!pref.organ_data || !islist(pref.organ_data))
|
||||||
pref.organ_data = list()
|
pref.organ_data = list()
|
||||||
if (!pref.rlimb_data || !islist(pref.rlimb_data))
|
if (!pref.rlimb_data || !islist(pref.rlimb_data))
|
||||||
@@ -163,25 +175,25 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
pref.body_markings = list()
|
pref.body_markings = list()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/content(var/mob/user)
|
/datum/category_item/player_setup_item/general/body/content(var/mob/user)
|
||||||
|
var/list/out = list()
|
||||||
pref.update_preview_icon()
|
pref.update_preview_icon()
|
||||||
if(!pref.preview_icon)
|
if(!pref.preview_icon)
|
||||||
pref.update_preview_icon()
|
pref.update_preview_icon()
|
||||||
user << browse_rsc(pref.preview_icon, "previewicon.png")
|
user << browse_rsc(pref.preview_icon, "previewicon.png")
|
||||||
|
|
||||||
var/datum/species/mob_species = all_species[pref.species]
|
var/datum/species/mob_species = all_species[pref.species]
|
||||||
. += "<table><tr style='vertical-align:top'><td><b>Body</b> "
|
out += "<table><tr style='vertical-align:top'><td><b>Body</b> "
|
||||||
. += "(<a href='?src=\ref[src];random=1'>®</A>)"
|
out += "(<a href='?src=\ref[src];random=1'>®</A>)"
|
||||||
. += "<br>"
|
out += "<br>"
|
||||||
. += "Species: <a href='?src=\ref[src];show_species=1'>[pref.species]</a><br>"
|
out += "Species: <a href='?src=\ref[src];show_species=1'>[pref.species]</a><br>"
|
||||||
. += "Blood Type: <a href='?src=\ref[src];blood_type=1'>[pref.b_type]</a><br>"
|
out += "Blood Type: <a href='?src=\ref[src];blood_type=1'>[pref.b_type]</a><br>"
|
||||||
if(has_flag(mob_species, HAS_SKIN_TONE))
|
if(has_flag(mob_species, HAS_SKIN_TONE))
|
||||||
. += "Skin Tone: <a href='?src=\ref[src];skin_tone=1'>[-pref.s_tone + 35]/220</a><br>"
|
out += "Skin Tone: <a href='?src=\ref[src];skin_tone=1'>[-pref.s_tone + 35]/220</a><br>"
|
||||||
. += "Needs Glasses: <a href='?src=\ref[src];disabilities=[NEARSIGHTED]'><b>[pref.disabilities & NEARSIGHTED ? "Yes" : "No"]</b></a><br>"
|
out += "Needs Glasses: <a href='?src=\ref[src];disabilities=[NEARSIGHTED]'><b>[pref.disabilities & NEARSIGHTED ? "Yes" : "No"]</b></a><br>"
|
||||||
if(!(has_flag(mob_species, HAS_FBP)))
|
if(!(has_flag(mob_species, HAS_FBP)))
|
||||||
. += "Limbs: <a href='?src=\ref[src];limbs=1'>Adjust</a><br>"
|
out += "Limbs: <a href='?src=\ref[src];limbs=1'>Adjust</a><br>"
|
||||||
. += "Internal Organs: <a href='?src=\ref[src];organs=1'>Adjust</a><br>"
|
out += "Internal Organs: <a href='?src=\ref[src];organs=1'>Adjust</a><br>"
|
||||||
. += "Prosthesis/Amputations: <a href='?src=\ref[src];reset_organs=1'>Reset</a><br>"
|
out += "Prosthesis/Amputations: <a href='?src=\ref[src];reset_organs=1'>Reset</a><br>"
|
||||||
|
|
||||||
|
|
||||||
//display limbs below
|
//display limbs below
|
||||||
var/ind = 0
|
var/ind = 0
|
||||||
@@ -220,69 +232,71 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
if(status == "cyborg")
|
if(status == "cyborg")
|
||||||
++ind
|
++ind
|
||||||
if(ind > 1)
|
if(ind > 1)
|
||||||
. += ", "
|
out += ", "
|
||||||
var/datum/robolimb/R
|
var/datum/robolimb/R
|
||||||
if(pref.rlimb_data[name] && all_robolimbs[pref.rlimb_data[name]])
|
if(pref.rlimb_data[name] && all_robolimbs[pref.rlimb_data[name]])
|
||||||
R = all_robolimbs[pref.rlimb_data[name]]
|
R = all_robolimbs[pref.rlimb_data[name]]
|
||||||
else
|
else
|
||||||
R = basic_robolimb
|
R = basic_robolimb
|
||||||
. += "\t[R.company] [organ_name] prosthesis"
|
out += "\t[R.company] [organ_name] prosthesis"
|
||||||
else if(status == "amputated")
|
else if(status == "amputated")
|
||||||
++ind
|
++ind
|
||||||
if(ind > 1)
|
if(ind > 1)
|
||||||
. += ", "
|
out += ", "
|
||||||
. += "\tAmputated [organ_name]"
|
out += "\tAmputated [organ_name]"
|
||||||
else if(status == "mechanical")
|
else if(status == "mechanical")
|
||||||
++ind
|
++ind
|
||||||
if(ind > 1)
|
if(ind > 1)
|
||||||
. += ", "
|
out += ", "
|
||||||
. += "\tMechanical [organ_name]"
|
out += "\tMechanical [organ_name]"
|
||||||
else if(status == "assisted")
|
else if(status == "assisted")
|
||||||
++ind
|
++ind
|
||||||
if(ind > 1)
|
if(ind > 1)
|
||||||
. += ", "
|
out += ", "
|
||||||
switch(organ_name)
|
switch(organ_name)
|
||||||
if("heart")
|
if("heart")
|
||||||
. += "\tPacemaker-assisted [organ_name]"
|
out += "\tPacemaker-assisted [organ_name]"
|
||||||
if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements
|
if("voicebox") //on adding voiceboxes for speaking skrell/similar replacements
|
||||||
. += "\tSurgically altered [organ_name]"
|
out += "\tSurgically altered [organ_name]"
|
||||||
if("eyes")
|
if("eyes")
|
||||||
. += "\tRetinal overlayed [organ_name]"
|
out += "\tRetinal overlayed [organ_name]"
|
||||||
else
|
else
|
||||||
. += "\tMechanically assisted [organ_name]"
|
out += "\tMechanically assisted [organ_name]"
|
||||||
if(!ind)
|
if(!ind)
|
||||||
. += "\[...\]<br><br>"
|
out += "\[...\]<br><br>"
|
||||||
else
|
else
|
||||||
. += "<br><br>"
|
out += "<br><br>"
|
||||||
|
|
||||||
. += "</td><td><b>Preview</b><br>"
|
out += "</td><td><b>Preview</b><br>"
|
||||||
. += "<div class='statusDisplay'><center><img src=previewicon.png width=[pref.preview_icon.Width()] height=[pref.preview_icon.Height()]></center></div>"
|
out += "<div class='statusDisplay'><center><img src=previewicon.png width=[pref.preview_icon.Width()] height=[pref.preview_icon.Height()]></center></div>"
|
||||||
. += "<br><a href='?src=\ref[src];toggle_clothing=1'>[pref.dress_mob ? "Hide equipment" : "Show equipment"]</a>"
|
out += "<br><a href='?src=\ref[src];toggle_clothing=1'>[pref.dress_mob ? "Hide equipment" : "Show equipment"]</a>"
|
||||||
. += "</td></tr></table>"
|
out += "</td></tr></table>"
|
||||||
|
|
||||||
. += "<b>Hair</b><br>"
|
out += "<b>Hair</b><br>"
|
||||||
if(has_flag(mob_species, HAS_HAIR_COLOR))
|
if(has_flag(mob_species, HAS_HAIR_COLOR))
|
||||||
. += "<a href='?src=\ref[src];hair_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_hair, 2)][num2hex(pref.g_hair, 2)][num2hex(pref.b_hair, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_hair, 2)][num2hex(pref.g_hair, 2)][num2hex(pref.b_hair, 2)]'><tr><td>__</td></tr></table></font> "
|
out += "<a href='?src=\ref[src];hair_color=1'>Change Color</a> [HTML_RECT(rgb(pref.r_hair, pref.g_hair, pref.b_hair))] "
|
||||||
. += " Style: <a href='?src=\ref[src];hair_style=1'>[pref.h_style]</a><br>"
|
out += " Style: <a href='?src=\ref[src];hair_style=1'>[pref.h_style]</a><br>"
|
||||||
|
|
||||||
. += "<br><b>Facial</b><br>"
|
out += "<br><b>Facial</b><br>"
|
||||||
if(has_flag(mob_species, HAS_HAIR_COLOR))
|
if(has_flag(mob_species, HAS_HAIR_COLOR))
|
||||||
. += "<a href='?src=\ref[src];facial_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_facial, 2)][num2hex(pref.g_facial, 2)][num2hex(pref.b_facial, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_facial, 2)][num2hex(pref.g_facial, 2)][num2hex(pref.b_facial, 2)]'><tr><td>__</td></tr></table></font> "
|
out += "<a href='?src=\ref[src];facial_color=1'>Change Color</a> [HTML_RECT(rgb(pref.r_facial, pref.g_facial, pref.b_facial))] "
|
||||||
. += " Style: <a href='?src=\ref[src];facial_style=1'>[pref.f_style]</a><br>"
|
out += " Style: <a href='?src=\ref[src];facial_style=1'>[pref.f_style]</a><br>"
|
||||||
|
|
||||||
if(has_flag(mob_species, HAS_EYE_COLOR))
|
if(has_flag(mob_species, HAS_EYE_COLOR))
|
||||||
. += "<br><b>Eyes</b><br>"
|
out += "<br><b>Eyes</b><br>"
|
||||||
. += "<a href='?src=\ref[src];eye_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_eyes, 2)][num2hex(pref.g_eyes, 2)][num2hex(pref.b_eyes, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_eyes, 2)][num2hex(pref.g_eyes, 2)][num2hex(pref.b_eyes, 2)]'><tr><td>__</td></tr></table></font><br>"
|
out += "<a href='?src=\ref[src];eye_color=1'>Change Color</a> [HTML_RECT(rgb(pref.r_eyes, pref.g_eyes, pref.b_eyes))] <br>"
|
||||||
|
|
||||||
if(has_flag(mob_species, HAS_SKIN_COLOR))
|
if(has_flag(mob_species, HAS_SKIN_COLOR))
|
||||||
. += "<br><b>Body Color</b><br>"
|
out += "<br><b>Body Color</b><br>"
|
||||||
. += "<a href='?src=\ref[src];skin_color=1'>Change Color</a> <font face='fixedsys' size='3' color='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin, 2)]'><table style='display:inline;' bgcolor='#[num2hex(pref.r_skin, 2)][num2hex(pref.g_skin, 2)][num2hex(pref.b_skin, 2)]'><tr><td>__</td></tr></table></font><br>"
|
out += "<a href='?src=\ref[src];skin_color=1'>Change Color</a> [HTML_RECT(rgb(pref.r_skin, pref.g_skin, pref.b_skin))] <br>"
|
||||||
|
|
||||||
. += "<br><a href='?src=\ref[src];marking_style=1'>Body Markings +</a><br>"
|
out += "<br><a href='?src=\ref[src];marking_style=1'>Body Markings +</a><br>"
|
||||||
for(var/M in pref.body_markings)
|
for(var/M in pref.body_markings)
|
||||||
. += "[M] <a href='?src=\ref[src];marking_remove=[M]'>-</a> <a href='?src=\ref[src];marking_color=[M]'>Color</a>"
|
out += "[M] <a href='?src=\ref[src];marking_remove=[M]'>-</a> <a href='?src=\ref[src];marking_color=[M]'>Color</a>"
|
||||||
. += "<font face='fixedsys' size='3' color='[pref.body_markings[M]]'><table style='display:inline;' bgcolor='[pref.body_markings[M]]'><tr><td>__</td></tr></table></font>"
|
out += HTML_RECT(pref.body_markings[M])
|
||||||
. += "<br>"
|
out += "<br>"
|
||||||
|
|
||||||
|
. = out.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/body/proc/has_flag(var/datum/species/mob_species, var/flag)
|
/datum/category_item/player_setup_item/general/body/proc/has_flag(var/datum/species/mob_species, var/flag)
|
||||||
return mob_species && (mob_species.appearance_flags & flag)
|
return mob_species && (mob_species.appearance_flags & flag)
|
||||||
@@ -320,22 +334,26 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
if(prev_species != pref.species)
|
if(prev_species != pref.species)
|
||||||
mob_species = all_species[pref.species]
|
mob_species = all_species[pref.species]
|
||||||
|
|
||||||
|
var/bodytype = mob_species.get_bodytype()
|
||||||
|
|
||||||
//grab one of the valid hair styles for the newly chosen species
|
//grab one of the valid hair styles for the newly chosen species
|
||||||
var/list/valid_hairstyles = list()
|
var/list/valid_hairstyles = list()
|
||||||
for(var/hairstyle in hair_styles_list)
|
|
||||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
// Snowflake check for industrials - they're an IPC bodytype but don't have IPC screens.
|
||||||
if(pref.gender == MALE && S.gender == FEMALE)
|
if (mob_species.name != "Industrial Frame")
|
||||||
continue
|
for(var/hairstyle in hair_styles_list)
|
||||||
if(pref.gender == FEMALE && S.gender == MALE)
|
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||||
continue
|
if(pref.gender == MALE && S.gender == FEMALE)
|
||||||
if(!(mob_species.get_bodytype() in S.species_allowed) || mob_species.name == "Industrial Frame") //super snowflake check because Industrial Frames are IPC bodytypes, but don't have an IPC head.
|
continue
|
||||||
continue
|
if(pref.gender == FEMALE && S.gender == MALE)
|
||||||
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
|
continue
|
||||||
|
if(!(bodytype in S.species_allowed))
|
||||||
|
continue
|
||||||
|
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
|
||||||
|
|
||||||
if(valid_hairstyles.len)
|
if(valid_hairstyles.len)
|
||||||
pref.h_style = pick(valid_hairstyles)
|
pref.h_style = pick(valid_hairstyles)
|
||||||
else
|
else // Species has no hair, or something fucked up.
|
||||||
//this shouldn't happen
|
|
||||||
pref.h_style = hair_styles_list["Bald"]
|
pref.h_style = hair_styles_list["Bald"]
|
||||||
|
|
||||||
//grab one of the valid facial hair styles for the newly chosen species
|
//grab one of the valid facial hair styles for the newly chosen species
|
||||||
@@ -346,7 +364,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
continue
|
continue
|
||||||
if(pref.gender == FEMALE && S.gender == MALE)
|
if(pref.gender == FEMALE && S.gender == MALE)
|
||||||
continue
|
continue
|
||||||
if(!(mob_species.get_bodytype() in S.species_allowed))
|
if(!(bodytype in S.species_allowed))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
|
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
|
||||||
@@ -374,18 +392,19 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
return TOPIC_NOACTION
|
return TOPIC_NOACTION
|
||||||
var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference", rgb(pref.r_hair, pref.g_hair, pref.b_hair)) as color|null
|
var/new_hair = input(user, "Choose your character's hair colour:", "Character Preference", rgb(pref.r_hair, pref.g_hair, pref.b_hair)) as color|null
|
||||||
if(new_hair && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
|
if(new_hair && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
|
||||||
pref.r_hair = hex2num(copytext(new_hair, 2, 4))
|
pref.r_hair = GetRedPart(new_hair)
|
||||||
pref.g_hair = hex2num(copytext(new_hair, 4, 6))
|
pref.g_hair = GetGreenPart(new_hair)
|
||||||
pref.b_hair = hex2num(copytext(new_hair, 6, 8))
|
pref.b_hair = GetBluePart(new_hair)
|
||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
else if(href_list["hair_style"])
|
else if(href_list["hair_style"])
|
||||||
if(mob_species.bald)
|
if(mob_species.bald)
|
||||||
return
|
return
|
||||||
|
var/bodytype = mob_species.get_bodytype()
|
||||||
var/list/valid_hairstyles = list()
|
var/list/valid_hairstyles = list()
|
||||||
for(var/hairstyle in hair_styles_list)
|
for(var/hairstyle in hair_styles_list)
|
||||||
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
var/datum/sprite_accessory/S = hair_styles_list[hairstyle]
|
||||||
if(!(mob_species.get_bodytype() in S.species_allowed))
|
if(!(bodytype in S.species_allowed))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
|
valid_hairstyles[hairstyle] = hair_styles_list[hairstyle]
|
||||||
@@ -400,9 +419,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
return TOPIC_NOACTION
|
return TOPIC_NOACTION
|
||||||
var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(pref.r_facial, pref.g_facial, pref.b_facial)) as color|null
|
var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", rgb(pref.r_facial, pref.g_facial, pref.b_facial)) as color|null
|
||||||
if(new_facial && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
|
if(new_facial && has_flag(mob_species, HAS_HAIR_COLOR) && CanUseTopic(user))
|
||||||
pref.r_facial = hex2num(copytext(new_facial, 2, 4))
|
pref.r_facial = GetRedPart(new_facial)
|
||||||
pref.g_facial = hex2num(copytext(new_facial, 4, 6))
|
pref.g_facial = GetGreenPart(new_facial)
|
||||||
pref.b_facial = hex2num(copytext(new_facial, 6, 8))
|
pref.b_facial = GetBluePart(new_facial)
|
||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
else if(href_list["eye_color"])
|
else if(href_list["eye_color"])
|
||||||
@@ -410,9 +429,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
return TOPIC_NOACTION
|
return TOPIC_NOACTION
|
||||||
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(pref.r_eyes, pref.g_eyes, pref.b_eyes)) as color|null
|
var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", rgb(pref.r_eyes, pref.g_eyes, pref.b_eyes)) as color|null
|
||||||
if(new_eyes && has_flag(mob_species, HAS_EYE_COLOR) && CanUseTopic(user))
|
if(new_eyes && has_flag(mob_species, HAS_EYE_COLOR) && CanUseTopic(user))
|
||||||
pref.r_eyes = hex2num(copytext(new_eyes, 2, 4))
|
pref.r_eyes = GetRedPart(new_eyes)
|
||||||
pref.g_eyes = hex2num(copytext(new_eyes, 4, 6))
|
pref.g_eyes = GetGreenPart(new_eyes)
|
||||||
pref.b_eyes = hex2num(copytext(new_eyes, 6, 8))
|
pref.b_eyes = GetRedPart(new_eyes)
|
||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
else if(href_list["skin_tone"])
|
else if(href_list["skin_tone"])
|
||||||
@@ -428,22 +447,23 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
return TOPIC_NOACTION
|
return TOPIC_NOACTION
|
||||||
var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(pref.r_skin, pref.g_skin, pref.b_skin)) as color|null
|
var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", rgb(pref.r_skin, pref.g_skin, pref.b_skin)) as color|null
|
||||||
if(new_skin && has_flag(mob_species, HAS_SKIN_COLOR) && CanUseTopic(user))
|
if(new_skin && has_flag(mob_species, HAS_SKIN_COLOR) && CanUseTopic(user))
|
||||||
pref.r_skin = hex2num(copytext(new_skin, 2, 4))
|
pref.r_skin = GetRedPart(new_skin)
|
||||||
pref.g_skin = hex2num(copytext(new_skin, 4, 6))
|
pref.g_skin = GetGreenPart(new_skin)
|
||||||
pref.b_skin = hex2num(copytext(new_skin, 6, 8))
|
pref.b_skin = GetBluePart(new_skin)
|
||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
else if(href_list["facial_style"])
|
else if(href_list["facial_style"])
|
||||||
if(mob_species.bald)
|
if(mob_species.bald)
|
||||||
return
|
return
|
||||||
var/list/valid_facialhairstyles = list()
|
var/list/valid_facialhairstyles = list()
|
||||||
|
var/bodytype = mob_species.get_bodytype()
|
||||||
for(var/facialhairstyle in facial_hair_styles_list)
|
for(var/facialhairstyle in facial_hair_styles_list)
|
||||||
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
var/datum/sprite_accessory/S = facial_hair_styles_list[facialhairstyle]
|
||||||
if(pref.gender == MALE && S.gender == FEMALE)
|
if(pref.gender == MALE && S.gender == FEMALE)
|
||||||
continue
|
continue
|
||||||
if(pref.gender == FEMALE && S.gender == MALE)
|
if(pref.gender == FEMALE && S.gender == MALE)
|
||||||
continue
|
continue
|
||||||
if(!(mob_species.get_bodytype() in S.species_allowed))
|
if(!(bodytype in S.species_allowed))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
|
valid_facialhairstyles[facialhairstyle] = facial_hair_styles_list[facialhairstyle]
|
||||||
@@ -454,7 +474,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
return TOPIC_REFRESH
|
return TOPIC_REFRESH
|
||||||
|
|
||||||
else if(href_list["marking_style"])
|
else if(href_list["marking_style"])
|
||||||
var/list/usable_markings = pref.body_markings.Copy() ^ body_marking_styles_list.Copy()
|
var/list/usable_markings = pref.body_markings ^ body_marking_styles_list
|
||||||
for(var/M in usable_markings)
|
for(var/M in usable_markings)
|
||||||
var/datum/sprite_accessory/S = usable_markings[M]
|
var/datum/sprite_accessory/S = usable_markings[M]
|
||||||
if(!S.species_allowed.len)
|
if(!S.species_allowed.len)
|
||||||
@@ -616,15 +636,19 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
if(!pref.species_preview || !(pref.species_preview in all_species))
|
if(!pref.species_preview || !(pref.species_preview in all_species))
|
||||||
pref.species_preview = "Human"
|
pref.species_preview = "Human"
|
||||||
var/datum/species/current_species = all_species[pref.species_preview]
|
var/datum/species/current_species = all_species[pref.species_preview]
|
||||||
var/dat = "<body>"
|
var/list/dat = list(
|
||||||
dat += "<center><h2>[current_species.name] \[<a href='?src=\ref[src];show_species=1'>change</a>\]</h2></center><hr/>"
|
"<body>",
|
||||||
dat += "<table padding='8px'>"
|
"<center><h2>[current_species.name] \[<a href='?src=\ref[src];show_species=1'>change</a>\]</h2></center><hr/>",
|
||||||
dat += "<tr>"
|
"<table padding='8px'>",
|
||||||
dat += "<td width = 400>[current_species.blurb]</td>"
|
"<tr>",
|
||||||
dat += "<td width = 200 align='center'>"
|
"<td width = 400>[current_species.blurb]</td>",
|
||||||
|
"<td width = 200 align='center'>"
|
||||||
|
)
|
||||||
if("preview" in icon_states(current_species.icobase))
|
if("preview" in icon_states(current_species.icobase))
|
||||||
var/curr_name = html_encode(current_species.name)
|
var/curr_name = html_encode(current_species.name)
|
||||||
usr << browse_rsc(icon(current_species.icobase,"preview"), "species_preview_[curr_name].png")
|
var/icon/preview = icon(current_species.icobase, "preview")
|
||||||
|
preview.Scale(64, 64) // Scale it here to stop it blurring.
|
||||||
|
usr << browse_rsc(preview, "species_preview_[curr_name].png")
|
||||||
dat += "<img src='species_preview_[curr_name].png' width='64px' height='64px'><br/><br/>"
|
dat += "<img src='species_preview_[curr_name].png' width='64px' height='64px'><br/><br/>"
|
||||||
dat += "<b>Language:</b> [current_species.language]<br/>"
|
dat += "<b>Language:</b> [current_species.language]<br/>"
|
||||||
dat += "<small>"
|
dat += "<small>"
|
||||||
@@ -667,12 +691,12 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
|||||||
if(restricted == 1)
|
if(restricted == 1)
|
||||||
dat += "<font color='red'><b>You cannot play as this species.</br><small>If you wish to be whitelisted, you can make an application post on <a href='?src=\ref[user];preference=open_whitelist_forum'>the forums</a>.</small></b></font></br>"
|
dat += "<font color='red'><b>You cannot play as this species.</br><small>If you wish to be whitelisted, you can make an application post on <a href='?src=\ref[user];preference=open_whitelist_forum'>the forums</a>.</small></b></font></br>"
|
||||||
else if(restricted == 2)
|
else if(restricted == 2)
|
||||||
dat += "<font color='red'><b>You cannot play as this species.</br><small>This species is not available for play as a station race..</small></b></font></br>"
|
dat += "<font color='red'><b>You cannot play as this species.</br><small>This species is not available for play as a station race.</small></b></font></br>"
|
||||||
if(!restricted || check_rights(R_ADMIN, 0))
|
if(!restricted || check_rights(R_ADMIN, 0))
|
||||||
dat += "\[<a href='?src=\ref[src];set_species=[html_encode(pref.species_preview)]'>select</a>\]"
|
dat += "\[<a href='?src=\ref[src];set_species=[html_encode(pref.species_preview)]'>select</a>\]"
|
||||||
dat += "</center></body>"
|
dat += "</center></body>"
|
||||||
|
|
||||||
user << browse(dat, "window=species;size=700x400")
|
user << browse(dat.Join(), "window=species;size=700x400")
|
||||||
|
|
||||||
/*/datum/category_item/player_setup_item/general/body/proc/reset_limbs()
|
/*/datum/category_item/player_setup_item/general/body/proc/reset_limbs()
|
||||||
|
|
||||||
|
|||||||
@@ -3,28 +3,54 @@
|
|||||||
sort_order = 4
|
sort_order = 4
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S)
|
||||||
S["underwear"] >> pref.underwear
|
S["underwear"] >> pref.underwear
|
||||||
S["undershirt"] >> pref.undershirt
|
S["undershirt"] >> pref.undershirt
|
||||||
S["socks"] >> pref.socks
|
S["socks"] >> pref.socks
|
||||||
S["backbag"] >> pref.backbag
|
S["backbag"] >> pref.backbag
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S)
|
||||||
S["underwear"] << pref.underwear
|
S["underwear"] << pref.underwear
|
||||||
S["undershirt"] << pref.undershirt
|
S["undershirt"] << pref.undershirt
|
||||||
S["socks"] << pref.socks
|
S["socks"] << pref.socks
|
||||||
S["backbag"] << pref.backbag
|
S["backbag"] << pref.backbag
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/equipment/gather_load_query()
|
/datum/category_item/player_setup_item/general/equipment/gather_load_query()
|
||||||
return list("ss13_characters" = list("vars" = list("underwear", "undershirt", "socks", "backbag"), "args" = list("id")))
|
return list(
|
||||||
|
"ss13_characters" = list(
|
||||||
|
"vars" = list(
|
||||||
|
"underwear",
|
||||||
|
"undershirt",
|
||||||
|
"socks",
|
||||||
|
"backbag"
|
||||||
|
),
|
||||||
|
"args" = list("id")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/equipment/gather_load_parameters()
|
/datum/category_item/player_setup_item/general/equipment/gather_load_parameters()
|
||||||
return list("id" = pref.current_character)
|
return list("id" = pref.current_character)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/equipment/gather_save_query()
|
/datum/category_item/player_setup_item/general/equipment/gather_save_query()
|
||||||
return list("ss13_characters" = list("underwear", "undershirt", "socks", "backbag", "id" = 1, "ckey" = 1))
|
return list(
|
||||||
|
"ss13_characters" = list(
|
||||||
|
"underwear",
|
||||||
|
"undershirt",
|
||||||
|
"socks",
|
||||||
|
"backbag",
|
||||||
|
"id" = 1,
|
||||||
|
"ckey" = 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/equipment/gather_save_parameters()
|
/datum/category_item/player_setup_item/general/equipment/gather_save_parameters()
|
||||||
return list("underwear" = pref.underwear, "undershirt" = pref.undershirt, "socks" = pref.socks, "backbag" = pref.backbag, "id" = pref.current_character, "ckey" = pref.client.ckey)
|
return list(
|
||||||
|
"underwear" = pref.underwear,
|
||||||
|
"undershirt" = pref.undershirt,
|
||||||
|
"socks" = pref.socks,
|
||||||
|
"backbag" = pref.backbag,
|
||||||
|
"id" = pref.current_character,
|
||||||
|
"ckey" = pref.client.ckey
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/equipment/sanitize_character(var/sql_load = 0)
|
/datum/category_item/player_setup_item/general/equipment/sanitize_character(var/sql_load = 0)
|
||||||
if (sql_load)
|
if (sql_load)
|
||||||
@@ -42,11 +68,14 @@
|
|||||||
pref.socks = null
|
pref.socks = null
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/equipment/content()
|
/datum/category_item/player_setup_item/general/equipment/content()
|
||||||
. += "<b>Equipment:</b><br>"
|
var/list/dat = list()
|
||||||
. += "Underwear: <a href='?src=\ref[src];change_underwear=1'><b>[get_key_by_value(get_undies(),pref.underwear)]</b></a><br>"
|
dat += "<b>Equipment:</b><br>"
|
||||||
. += "Undershirt: <a href='?src=\ref[src];change_undershirt=1'><b>[get_key_by_value(undershirt_t,pref.undershirt)]</b></a><br>"
|
dat += "Underwear: <a href='?src=\ref[src];change_underwear=1'><b>[get_key_by_value(get_undies(),pref.underwear)]</b></a><br>"
|
||||||
. += "Socks: <a href='?src=\ref[src];change_socks=1'><b>[get_key_by_value(get_gender_socks(),pref.socks)]</b></a><br>"
|
dat += "Undershirt: <a href='?src=\ref[src];change_undershirt=1'><b>[get_key_by_value(undershirt_t,pref.undershirt)]</b></a><br>"
|
||||||
. += "Backpack Type: <a href='?src=\ref[src];change_backpack=1'><b>[backbaglist[pref.backbag]]</b></a><br>"
|
dat += "Socks: <a href='?src=\ref[src];change_socks=1'><b>[get_key_by_value(get_gender_socks(),pref.socks)]</b></a><br>"
|
||||||
|
dat += "Backpack Type: <a href='?src=\ref[src];change_backpack=1'><b>[backbaglist[pref.backbag]]</b></a><br>"
|
||||||
|
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/equipment/proc/get_undies()
|
/datum/category_item/player_setup_item/general/equipment/proc/get_undies()
|
||||||
return pref.gender == MALE ? underwear_m : underwear_f
|
return pref.gender == MALE ? underwear_m : underwear_f
|
||||||
|
|||||||
@@ -3,55 +3,86 @@
|
|||||||
sort_order = 5
|
sort_order = 5
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/background/load_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/background/load_character(var/savefile/S)
|
||||||
S["med_record"] >> pref.med_record
|
S["med_record"] >> pref.med_record
|
||||||
S["sec_record"] >> pref.sec_record
|
S["sec_record"] >> pref.sec_record
|
||||||
S["gen_record"] >> pref.gen_record
|
S["gen_record"] >> pref.gen_record
|
||||||
S["home_system"] >> pref.home_system
|
S["home_system"] >> pref.home_system
|
||||||
S["citizenship"] >> pref.citizenship
|
S["citizenship"] >> pref.citizenship
|
||||||
S["faction"] >> pref.faction
|
S["faction"] >> pref.faction
|
||||||
S["religion"] >> pref.religion
|
S["religion"] >> pref.religion
|
||||||
S["nanotrasen_relation"] >> pref.nanotrasen_relation
|
S["nanotrasen_relation"] >> pref.nanotrasen_relation
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/background/save_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/background/save_character(var/savefile/S)
|
||||||
S["med_record"] << pref.med_record
|
S["med_record"] << pref.med_record
|
||||||
S["sec_record"] << pref.sec_record
|
S["sec_record"] << pref.sec_record
|
||||||
S["gen_record"] << pref.gen_record
|
S["gen_record"] << pref.gen_record
|
||||||
S["home_system"] << pref.home_system
|
S["home_system"] << pref.home_system
|
||||||
S["citizenship"] << pref.citizenship
|
S["citizenship"] << pref.citizenship
|
||||||
S["faction"] << pref.faction
|
S["faction"] << pref.faction
|
||||||
S["religion"] << pref.religion
|
S["religion"] << pref.religion
|
||||||
S["nanotrasen_relation"] << pref.nanotrasen_relation
|
S["nanotrasen_relation"] << pref.nanotrasen_relation
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/background/gather_load_query()
|
/datum/category_item/player_setup_item/general/background/gather_load_query()
|
||||||
return list("ss13_characters_flavour" = list("vars" = list("records_employment" = "gen_record",
|
return list(
|
||||||
"records_medical" = "med_record",
|
"ss13_characters_flavour" = list(
|
||||||
"records_security" = "sec_record",
|
"vars" = list(
|
||||||
"records_ccia" = "ccia_record"),
|
"records_employment" = "gen_record",
|
||||||
"args" = list("char_id")),
|
"records_medical" = "med_record",
|
||||||
"ss13_characters" = list("vars" = list("nt_relation" = "nanotrasen_relation" ,"home_system", "citizenship", "faction", "religion"), "args" = list("id")))
|
"records_security" = "sec_record",
|
||||||
|
"records_ccia" = "ccia_record"
|
||||||
|
),
|
||||||
|
"args" = list("char_id")
|
||||||
|
),
|
||||||
|
"ss13_characters" = list(
|
||||||
|
"vars" = list(
|
||||||
|
"nt_relation" = "nanotrasen_relation",
|
||||||
|
"home_system",
|
||||||
|
"citizenship",
|
||||||
|
"faction",
|
||||||
|
"religion"
|
||||||
|
),
|
||||||
|
"args" = list("id")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/background/gather_load_parameters()
|
/datum/category_item/player_setup_item/general/background/gather_load_parameters()
|
||||||
return list("id" = pref.current_character, "char_id" = pref.current_character)
|
return list(
|
||||||
|
"id" = pref.current_character,
|
||||||
|
"char_id" = pref.current_character
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/background/gather_save_query()
|
/datum/category_item/player_setup_item/general/background/gather_save_query()
|
||||||
return list("ss13_characters_flavour" = list("records_employment",
|
return list(
|
||||||
"records_medical",
|
"ss13_characters_flavour" = list(
|
||||||
"records_security",
|
"records_employment",
|
||||||
"char_id" = 1),
|
"records_medical",
|
||||||
"ss13_characters" = list("nt_relation", "home_system", "citizenship", "faction", "religion", "id" = 1, "ckey" = 1))
|
"records_security",
|
||||||
|
"char_id" = 1
|
||||||
|
),
|
||||||
|
"ss13_characters" = list(
|
||||||
|
"nt_relation",
|
||||||
|
"home_system",
|
||||||
|
"citizenship",
|
||||||
|
"faction",
|
||||||
|
"religion","id" = 1,
|
||||||
|
"ckey" = 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/background/gather_save_parameters()
|
/datum/category_item/player_setup_item/general/background/gather_save_parameters()
|
||||||
return list("records_employment" = pref.gen_record,
|
return list(
|
||||||
"records_medical" = pref.med_record,
|
"records_employment" = pref.gen_record,
|
||||||
"records_security" = pref.sec_record,
|
"records_medical" = pref.med_record,
|
||||||
"char_id" = pref.current_character,
|
"records_security" = pref.sec_record,
|
||||||
"nt_relation" = pref.nanotrasen_relation,
|
"char_id" = pref.current_character,
|
||||||
"home_system" = pref.home_system,
|
"nt_relation" = pref.nanotrasen_relation,
|
||||||
"citizenship" = pref.citizenship,
|
"home_system" = pref.home_system,
|
||||||
"faction" = pref.faction,
|
"citizenship" = pref.citizenship,
|
||||||
"religion" = pref.religion,
|
"faction" = pref.faction,
|
||||||
"id" = pref.current_character,
|
"religion" = pref.religion,
|
||||||
"ckey" = pref.client.ckey)
|
"id" = pref.current_character,
|
||||||
|
"ckey" = pref.client.ckey
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/background/sanitize_character()
|
/datum/category_item/player_setup_item/general/background/sanitize_character()
|
||||||
if(!pref.home_system)
|
if(!pref.home_system)
|
||||||
@@ -66,23 +97,27 @@
|
|||||||
pref.nanotrasen_relation = sanitize_inlist(pref.nanotrasen_relation, COMPANY_ALIGNMENTS, initial(pref.nanotrasen_relation))
|
pref.nanotrasen_relation = sanitize_inlist(pref.nanotrasen_relation, COMPANY_ALIGNMENTS, initial(pref.nanotrasen_relation))
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/background/content(var/mob/user)
|
/datum/category_item/player_setup_item/general/background/content(var/mob/user)
|
||||||
. += "<b>Background Information</b><br>"
|
var/list/dat = list(
|
||||||
. += "[company_name] Relation: <a href='?src=\ref[src];nt_relation=1'>[pref.nanotrasen_relation]</a><br/>"
|
"<b>Background Information</b><br>",
|
||||||
. += "Home System: <a href='?src=\ref[src];home_system=1'>[pref.home_system]</a><br/>"
|
"[company_name] Relation: <a href='?src=\ref[src];nt_relation=1'>[pref.nanotrasen_relation]</a><br/>",
|
||||||
. += "Citizenship: <a href='?src=\ref[src];citizenship=1'>[pref.citizenship]</a><br/>"
|
"Home System: <a href='?src=\ref[src];home_system=1'>[pref.home_system]</a><br/>",
|
||||||
. += "Faction: <a href='?src=\ref[src];faction=1'>[pref.faction]</a><br/>"
|
"Citizenship: <a href='?src=\ref[src];citizenship=1'>[pref.citizenship]</a><br/>",
|
||||||
. += "Religion: <a href='?src=\ref[src];religion=1'>[pref.religion]</a><br/>"
|
"Faction: <a href='?src=\ref[src];faction=1'>[pref.faction]</a><br/>",
|
||||||
|
"Religion: <a href='?src=\ref[src];religion=1'>[pref.religion]</a><br/>",
|
||||||
|
"<br/><b>Records</b>:<br/>"
|
||||||
|
)
|
||||||
|
|
||||||
. += "<br/><b>Records</b>:<br/>"
|
|
||||||
if(jobban_isbanned(user, "Records"))
|
if(jobban_isbanned(user, "Records"))
|
||||||
. += "<span class='danger'>You are banned from using character records.</span><br>"
|
dat += "<span class='danger'>You are banned from using character records.</span><br>"
|
||||||
else
|
else
|
||||||
. += "Medical Records:<br>"
|
dat += "Medical Records:<br>"
|
||||||
. += "<a href='?src=\ref[src];set_medical_records=1'>[TextPreview(pref.med_record,40)]</a><br><br>"
|
dat += "<a href='?src=\ref[src];set_medical_records=1'>[TextPreview(pref.med_record,40)]</a><br><br>"
|
||||||
. += "Employment Records:<br>"
|
dat += "Employment Records:<br>"
|
||||||
. += "<a href='?src=\ref[src];set_general_records=1'>[TextPreview(pref.gen_record,40)]</a><br><br>"
|
dat += "<a href='?src=\ref[src];set_general_records=1'>[TextPreview(pref.gen_record,40)]</a><br><br>"
|
||||||
. += "Security Records:<br>"
|
dat += "Security Records:<br>"
|
||||||
. += "<a href='?src=\ref[src];set_security_records=1'>[TextPreview(pref.sec_record,40)]</a><br>"
|
dat += "<a href='?src=\ref[src];set_security_records=1'>[TextPreview(pref.sec_record,40)]</a><br>"
|
||||||
|
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/background/OnTopic(var/href,var/list/href_list, var/mob/user)
|
/datum/category_item/player_setup_item/general/background/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||||
if(href_list["nt_relation"])
|
if(href_list["nt_relation"])
|
||||||
|
|||||||
@@ -3,78 +3,87 @@
|
|||||||
sort_order = 6
|
sort_order = 6
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/flavor/load_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/flavor/load_character(var/savefile/S)
|
||||||
S["flavor_texts_general"] >> pref.flavor_texts["general"]
|
S["flavor_texts_general"] >> pref.flavor_texts["general"]
|
||||||
S["flavor_texts_head"] >> pref.flavor_texts["head"]
|
S["flavor_texts_head"] >> pref.flavor_texts["head"]
|
||||||
S["flavor_texts_face"] >> pref.flavor_texts["face"]
|
S["flavor_texts_face"] >> pref.flavor_texts["face"]
|
||||||
S["flavor_texts_eyes"] >> pref.flavor_texts["eyes"]
|
S["flavor_texts_eyes"] >> pref.flavor_texts["eyes"]
|
||||||
S["flavor_texts_torso"] >> pref.flavor_texts["torso"]
|
S["flavor_texts_torso"] >> pref.flavor_texts["torso"]
|
||||||
S["flavor_texts_arms"] >> pref.flavor_texts["arms"]
|
S["flavor_texts_arms"] >> pref.flavor_texts["arms"]
|
||||||
S["flavor_texts_hands"] >> pref.flavor_texts["hands"]
|
S["flavor_texts_hands"] >> pref.flavor_texts["hands"]
|
||||||
S["flavor_texts_legs"] >> pref.flavor_texts["legs"]
|
S["flavor_texts_legs"] >> pref.flavor_texts["legs"]
|
||||||
S["flavor_texts_feet"] >> pref.flavor_texts["feet"]
|
S["flavor_texts_feet"] >> pref.flavor_texts["feet"]
|
||||||
|
|
||||||
//Flavour text for robots.
|
//Flavour text for robots.
|
||||||
S["flavour_texts_robot_Default"] >> pref.flavour_texts_robot["Default"]
|
S["flavour_texts_robot_Default"] >> pref.flavour_texts_robot["Default"]
|
||||||
for(var/module in robot_module_types)
|
for(var/module in robot_module_types)
|
||||||
S["flavour_texts_robot_[module]"] >> pref.flavour_texts_robot[module]
|
S["flavour_texts_robot_[module]"] >> pref.flavour_texts_robot[module]
|
||||||
|
|
||||||
S["signature"] >> pref.signature
|
S["signature"] >> pref.signature
|
||||||
S["signfont"] >> pref.signfont
|
S["signfont"] >> pref.signfont
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/flavor/save_character(var/savefile/S)
|
/datum/category_item/player_setup_item/general/flavor/save_character(var/savefile/S)
|
||||||
S["flavor_texts_general"] << pref.flavor_texts["general"]
|
S["flavor_texts_general"] << pref.flavor_texts["general"]
|
||||||
S["flavor_texts_head"] << pref.flavor_texts["head"]
|
S["flavor_texts_head"] << pref.flavor_texts["head"]
|
||||||
S["flavor_texts_face"] << pref.flavor_texts["face"]
|
S["flavor_texts_face"] << pref.flavor_texts["face"]
|
||||||
S["flavor_texts_eyes"] << pref.flavor_texts["eyes"]
|
S["flavor_texts_eyes"] << pref.flavor_texts["eyes"]
|
||||||
S["flavor_texts_torso"] << pref.flavor_texts["torso"]
|
S["flavor_texts_torso"] << pref.flavor_texts["torso"]
|
||||||
S["flavor_texts_arms"] << pref.flavor_texts["arms"]
|
S["flavor_texts_arms"] << pref.flavor_texts["arms"]
|
||||||
S["flavor_texts_hands"] << pref.flavor_texts["hands"]
|
S["flavor_texts_hands"] << pref.flavor_texts["hands"]
|
||||||
S["flavor_texts_legs"] << pref.flavor_texts["legs"]
|
S["flavor_texts_legs"] << pref.flavor_texts["legs"]
|
||||||
S["flavor_texts_feet"] << pref.flavor_texts["feet"]
|
S["flavor_texts_feet"] << pref.flavor_texts["feet"]
|
||||||
|
|
||||||
S["flavour_texts_robot_Default"] << pref.flavour_texts_robot["Default"]
|
S["flavour_texts_robot_Default"] << pref.flavour_texts_robot["Default"]
|
||||||
for(var/module in robot_module_types)
|
for(var/module in robot_module_types)
|
||||||
S["flavour_texts_robot_[module]"] << pref.flavour_texts_robot[module]
|
S["flavour_texts_robot_[module]"] << pref.flavour_texts_robot[module]
|
||||||
|
|
||||||
S["signature"] << pref.signature
|
S["signature"] << pref.signature
|
||||||
S["signfont"] << pref.signfont
|
S["signfont"] << pref.signfont
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/flavor/gather_load_query()
|
/datum/category_item/player_setup_item/general/flavor/gather_load_query()
|
||||||
var/list/var_list = list("flavour_general" = "flavor_texts/general",
|
var/list/var_list = list(
|
||||||
"flavour_head" = "flavor_texts/head",
|
"flavour_general" = "flavor_texts/general",
|
||||||
"flavour_face" = "flavor_texts/face",
|
"flavour_head" = "flavor_texts/head",
|
||||||
"flavour_eyes" = "flavor_texts/eyes",
|
"flavour_face" = "flavor_texts/face",
|
||||||
"flavour_torso" = "flavor_texts/torso",
|
"flavour_eyes" = "flavor_texts/eyes",
|
||||||
"flavour_arms" = "flavor_texts/arms",
|
"flavour_torso" = "flavor_texts/torso",
|
||||||
"flavour_hands" = "flavor_texts/hands",
|
"flavour_arms" = "flavor_texts/arms",
|
||||||
"flavour_legs" = "flavor_texts/legs",
|
"flavour_hands" = "flavor_texts/hands",
|
||||||
"flavour_feet" = "flavor_texts/feet",
|
"flavour_legs" = "flavor_texts/legs",
|
||||||
"robot_default" = "flavour_texts_robot/Default",
|
"flavour_feet" = "flavor_texts/feet",
|
||||||
"signature" = "signature",
|
"robot_default" = "flavour_texts_robot/Default",
|
||||||
"signature_font" = "signfont")
|
"signature" = "signature",
|
||||||
|
"signature_font" = "signfont"
|
||||||
|
)
|
||||||
|
|
||||||
for (var/module in robot_module_types)
|
for (var/module in robot_module_types)
|
||||||
var_list["robot_[module]"] = "flavour_texts_robot/[module]"
|
var_list["robot_[module]"] = "flavour_texts_robot/[module]"
|
||||||
|
|
||||||
return list("ss13_characters_flavour" = list("vars" = var_list, "args" = list("char_id")))
|
return list(
|
||||||
|
"ss13_characters_flavour" = list(
|
||||||
|
"vars" = var_list,
|
||||||
|
"args" = list("char_id")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/flavor/gather_load_parameters()
|
/datum/category_item/player_setup_item/general/flavor/gather_load_parameters()
|
||||||
return list("char_id" = pref.current_character)
|
return list("char_id" = pref.current_character)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/flavor/gather_save_query()
|
/datum/category_item/player_setup_item/general/flavor/gather_save_query()
|
||||||
var/list/var_list = list("flavour_general",
|
var/list/var_list = list(
|
||||||
"flavour_head",
|
"flavour_general",
|
||||||
"flavour_face",
|
"flavour_head",
|
||||||
"flavour_eyes",
|
"flavour_face",
|
||||||
"flavour_torso",
|
"flavour_eyes",
|
||||||
"flavour_arms",
|
"flavour_torso",
|
||||||
"flavour_hands",
|
"flavour_arms",
|
||||||
"flavour_legs",
|
"flavour_hands",
|
||||||
"flavour_feet",
|
"flavour_legs",
|
||||||
"robot_default",
|
"flavour_feet",
|
||||||
"signature",
|
"robot_default",
|
||||||
"signature_font",
|
"signature",
|
||||||
"char_id" = 1)
|
"signature_font",
|
||||||
|
"char_id" = 1
|
||||||
|
)
|
||||||
|
|
||||||
for (var/module in robot_module_types)
|
for (var/module in robot_module_types)
|
||||||
var_list += "robot_[module]"
|
var_list += "robot_[module]"
|
||||||
@@ -82,19 +91,21 @@
|
|||||||
return list("ss13_characters_flavour" = var_list)
|
return list("ss13_characters_flavour" = var_list)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/flavor/gather_save_parameters()
|
/datum/category_item/player_setup_item/general/flavor/gather_save_parameters()
|
||||||
var/list/var_list = list("char_id" = pref.current_character,
|
var/list/var_list = list(
|
||||||
"flavour_general" = pref.flavor_texts["general"],
|
"char_id" = pref.current_character,
|
||||||
"flavour_head" = pref.flavor_texts["head"],
|
"flavour_general" = pref.flavor_texts["general"],
|
||||||
"flavour_face" = pref.flavor_texts["face"],
|
"flavour_head" = pref.flavor_texts["head"],
|
||||||
"flavour_eyes" = pref.flavor_texts["eyes"],
|
"flavour_face" = pref.flavor_texts["face"],
|
||||||
"flavour_torso" = pref.flavor_texts["torso"],
|
"flavour_eyes" = pref.flavor_texts["eyes"],
|
||||||
"flavour_arms" = pref.flavor_texts["arms"],
|
"flavour_torso" = pref.flavor_texts["torso"],
|
||||||
"flavour_hands" = pref.flavor_texts["hands"],
|
"flavour_arms" = pref.flavor_texts["arms"],
|
||||||
"flavour_legs" = pref.flavor_texts["legs"],
|
"flavour_hands" = pref.flavor_texts["hands"],
|
||||||
"flavour_feet" = pref.flavor_texts["feet"],
|
"flavour_legs" = pref.flavor_texts["legs"],
|
||||||
"robot_default" = pref.flavour_texts_robot["Default"],
|
"flavour_feet" = pref.flavor_texts["feet"],
|
||||||
"signature" = pref.signature,
|
"robot_default" = pref.flavour_texts_robot["Default"],
|
||||||
"signature_font" = pref.signfont)
|
"signature" = pref.signature,
|
||||||
|
"signature_font" = pref.signfont
|
||||||
|
)
|
||||||
|
|
||||||
for (var/module in robot_module_types)
|
for (var/module in robot_module_types)
|
||||||
var_list["robot_[module]"] += pref.flavour_texts_robot[module]
|
var_list["robot_[module]"] += pref.flavour_texts_robot[module]
|
||||||
@@ -108,15 +119,18 @@
|
|||||||
pref.signfont = "Verdana"
|
pref.signfont = "Verdana"
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/flavor/content(var/mob/user)
|
/datum/category_item/player_setup_item/general/flavor/content(var/mob/user)
|
||||||
. += "<b>Flavor:</b><br>"
|
var/list/dat = list(
|
||||||
. += "<a href='?src=\ref[src];flavor_text=open'>Set Flavor Text</a><br/>"
|
"<b>Flavor:</b><br>",
|
||||||
. += "<a href='?src=\ref[src];flavour_text_robot=open'>Set Robot Flavor Text</a><br/>"
|
"<a href='?src=\ref[src];flavor_text=open'>Set Flavor Text</a><br/>",
|
||||||
. += "<br>"
|
"<a href='?src=\ref[src];flavour_text_robot=open'>Set Robot Flavor Text</a><br/>",
|
||||||
. += "Signature: <font face='[pref.signfont ? pref.signfont : "Verdana"]'>[pref.signature]</font><br/>"
|
"<br>",
|
||||||
. += "<a href='?src=\ref[src];edit_signature=text'>Edit Text</a> | "
|
"Signature: <font face='[pref.signfont ? pref.signfont : "Verdana"]'>[pref.signature]</font><br/>",
|
||||||
. += "<a href='?src=\ref[src];edit_signature=font'>Edit Font</a> | "
|
"<a href='?src=\ref[src];edit_signature=text'>Edit Text</a> | ",
|
||||||
. += "<a href='?src=\ref[src];edit_signature=help'>Help</a> | "
|
"<a href='?src=\ref[src];edit_signature=font'>Edit Font</a> | ",
|
||||||
. += "<a href='?src=\ref[src];edit_signature=reset'>Reset</a><br/>"
|
"<a href='?src=\ref[src];edit_signature=help'>Help</a> | ",
|
||||||
|
"<a href='?src=\ref[src];edit_signature=reset'>Reset</a><br/>"
|
||||||
|
)
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/general/flavor/OnTopic(var/href,var/list/href_list, var/mob/user)
|
/datum/category_item/player_setup_item/general/flavor/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||||
if(href_list["flavor_text"])
|
if(href_list["flavor_text"])
|
||||||
@@ -178,11 +192,11 @@
|
|||||||
if ("help")
|
if ("help")
|
||||||
var/html = ""
|
var/html = ""
|
||||||
html += "A character's signature can be augmented with the following tags:<br>"
|
html += "A character's signature can be augmented with the following tags:<br>"
|
||||||
html += "<ul><li><i>Italics</i> - \[i\]text\[\\i\]</li>"
|
html += "<ul><li><i>Italics</i> - \[i\]text\[/i\]</li>"
|
||||||
html += "<li><b>Bold</b> - \[b\]text\[\\b\]</li>"
|
html += "<li><b>Bold</b> - \[b\]text\[/b\]</li>"
|
||||||
html += "<li><u>Underline</u> - \[u\]text\[\\u\]</li>"
|
html += "<li><u>Underline</u> - \[u\]text\[/u\]</li>"
|
||||||
html += "<li><font size='4'>Large text</font> - \[large\]text\[\\large\]</li>"
|
html += "<li><font size='4'>Large text</font> - \[large\]text\[/large\]</li>"
|
||||||
html += "<li><font size='1'>Small text</font> - \[small\]text\[\\small\]</li></ul>"
|
html += "<li><font size='1'>Small text</font> - \[small\]text\[/small\]</li></ul>"
|
||||||
html += "<br><br>Beyond that, a maximum of 100 symbols are allowed for the signature text."
|
html += "<br><br>Beyond that, a maximum of 100 symbols are allowed for the signature text."
|
||||||
html += " Note that this includes mark-up symbols."
|
html += " Note that this includes mark-up symbols."
|
||||||
|
|
||||||
|
|||||||
@@ -3,47 +3,74 @@
|
|||||||
sort_order = 1
|
sort_order = 1
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/load_preferences(var/savefile/S)
|
/datum/category_item/player_setup_item/player_global/ui/load_preferences(var/savefile/S)
|
||||||
S["UI_style"] >> pref.UI_style
|
S["UI_style"] >> pref.UI_style
|
||||||
S["UI_style_color"] >> pref.UI_style_color
|
S["UI_style_color"] >> pref.UI_style_color
|
||||||
S["UI_style_alpha"] >> pref.UI_style_alpha
|
S["UI_style_alpha"] >> pref.UI_style_alpha
|
||||||
S["ooccolor"] >> pref.ooccolor
|
S["ooccolor"] >> pref.ooccolor
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/save_preferences(var/savefile/S)
|
/datum/category_item/player_setup_item/player_global/ui/save_preferences(var/savefile/S)
|
||||||
S["UI_style"] << pref.UI_style
|
S["UI_style"] << pref.UI_style
|
||||||
S["UI_style_color"] << pref.UI_style_color
|
S["UI_style_color"] << pref.UI_style_color
|
||||||
S["UI_style_alpha"] << pref.UI_style_alpha
|
S["UI_style_alpha"] << pref.UI_style_alpha
|
||||||
S["ooccolor"] << pref.ooccolor
|
S["ooccolor"] << pref.ooccolor
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/gather_load_query()
|
/datum/category_item/player_setup_item/player_global/ui/gather_load_query()
|
||||||
return list("ss13_player_preferences" = list("vars" = list("UI_style", "UI_style_color", "UI_style_alpha", "ooccolor"), "args" = list("ckey")))
|
return list(
|
||||||
|
"ss13_player_preferences" = list(
|
||||||
|
"vars" = list(
|
||||||
|
"UI_style",
|
||||||
|
"UI_style_color",
|
||||||
|
"UI_style_alpha",
|
||||||
|
"ooccolor"
|
||||||
|
),
|
||||||
|
"args" = list("ckey")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/gather_load_parameters()
|
/datum/category_item/player_setup_item/player_global/ui/gather_load_parameters()
|
||||||
return list("ckey" = pref.client.ckey)
|
return list("ckey" = pref.client.ckey)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/gather_save_query()
|
/datum/category_item/player_setup_item/player_global/ui/gather_save_query()
|
||||||
return list("ss13_player_preferences" = list("UI_style", "UI_style_color", "UI_style_alpha", "ooccolor", "ckey" = 1))
|
return list(
|
||||||
|
"ss13_player_preferences" = list(
|
||||||
|
"UI_style",
|
||||||
|
"UI_style_color",
|
||||||
|
"UI_style_alpha",
|
||||||
|
"ooccolor",
|
||||||
|
"ckey" = 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/gather_save_parameters()
|
/datum/category_item/player_setup_item/player_global/ui/gather_save_parameters()
|
||||||
return list("ckey" = pref.client.ckey, "UI_style_alpha" = pref.UI_style_alpha, "UI_style_color" = pref.UI_style_color, "UI_style" = pref.UI_style, "ooccolor" = pref.ooccolor)
|
return list(
|
||||||
|
"ckey" = pref.client.ckey,
|
||||||
|
"UI_style_alpha" = pref.UI_style_alpha,
|
||||||
|
"UI_style_color" = pref.UI_style_color,
|
||||||
|
"UI_style" = pref.UI_style,
|
||||||
|
"ooccolor" = pref.ooccolor
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/sanitize_preferences()
|
/datum/category_item/player_setup_item/player_global/ui/sanitize_preferences()
|
||||||
pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style))
|
pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style))
|
||||||
pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color))
|
pref.UI_style_color = sanitize_hexcolor(pref.UI_style_color, initial(pref.UI_style_color))
|
||||||
pref.UI_style_alpha = sanitize_integer(text2num(pref.UI_style_alpha), 0, 255, initial(pref.UI_style_alpha))
|
pref.UI_style_alpha = sanitize_integer(text2num(pref.UI_style_alpha), 0, 255, initial(pref.UI_style_alpha))
|
||||||
pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor))
|
pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor))
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/content(var/mob/user)
|
/datum/category_item/player_setup_item/player_global/ui/content(mob/user)
|
||||||
. += "<b>UI Settings</b><br>"
|
var/list/dat = list()
|
||||||
. += "<b>UI Style:</b> <a href='?src=\ref[src];select_style=1'><b>[pref.UI_style]</b></a><br>"
|
dat += "<b>UI Settings</b><br>"
|
||||||
. += "<b>Custom UI</b> (recommended for White UI):<br>"
|
dat += "<b>UI Style:</b> <a href='?src=\ref[src];select_style=1'><b>[pref.UI_style]</b></a><br>"
|
||||||
. += "-Color: <a href='?src=\ref[src];select_color=1'><b>[pref.UI_style_color]</b></a><3E><table style='display:inline;' bgcolor='[pref.UI_style_color]'><tr><td>__</td></tr></table><3E><a href='?src=\ref[src];reset=ui'>reset</a><br>"
|
dat += "<b>Custom UI</b> (recommended for White UI):<br>"
|
||||||
. += "-Alpha(transparency): <a href='?src=\ref[src];select_alpha=1'><b>[pref.UI_style_alpha]</b></a><EFBFBD><a href='?src=\ref[src];reset=alpha'>reset</a><br>"
|
dat += "-Color: <a href='?src=\ref[src];select_color=1'><b>[pref.UI_style_color]</b></a> [HTML_RECT(pref.UI_style_color)] - <a href='?src=\ref[src];reset=ui'>reset</a><br>"
|
||||||
|
dat += "-Alpha(transparency): <a href='?src=\ref[src];select_alpha=1'><b>[pref.UI_style_alpha]</b></a> - <a href='?src=\ref[src];reset=alpha'>reset</a><br>"
|
||||||
if(can_select_ooc_color(user))
|
if(can_select_ooc_color(user))
|
||||||
. += "<b>OOC Color:</b><EFBFBD>"
|
dat += "<b>OOC Color:</b> "
|
||||||
if(pref.ooccolor == initial(pref.ooccolor))
|
if(pref.ooccolor == initial(pref.ooccolor))
|
||||||
. += "<a href='?src=\ref[src];select_ooc_color=1'><b>Using Default</b></a><br>"
|
dat += "<a href='?src=\ref[src];select_ooc_color=1'><b>Using Default</b></a><br>"
|
||||||
else
|
else
|
||||||
. += "<a href='?src=\ref[src];select_ooc_color=1'><b>[pref.ooccolor]</b></a> <table style='display:inline;' bgcolor='[pref.ooccolor]'><tr><td>__</td></tr></table><3E><a href='?src=\ref[src];reset=ooc'>reset</a><br>"
|
dat += "<a href='?src=\ref[src];select_ooc_color=1'><b>[pref.ooccolor]</b></a> [HTML_RECT(pref.ooccolor)] - <a href='?src=\ref[src];reset=ooc'>reset</a><br>"
|
||||||
|
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/ui/OnTopic(var/href,var/list/href_list, var/mob/user)
|
/datum/category_item/player_setup_item/player_global/ui/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||||
if(href_list["select_style"])
|
if(href_list["select_style"])
|
||||||
|
|||||||
@@ -3,68 +3,98 @@
|
|||||||
sort_order = 2
|
sort_order = 2
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/settings/load_preferences(var/savefile/S)
|
/datum/category_item/player_setup_item/player_global/settings/load_preferences(var/savefile/S)
|
||||||
S["lastchangelog"] >> pref.lastchangelog
|
S["lastchangelog"] >> pref.lastchangelog
|
||||||
S["default_slot"] >> pref.default_slot
|
S["default_slot"] >> pref.default_slot
|
||||||
S["toggles"] >> pref.toggles
|
S["toggles"] >> pref.toggles
|
||||||
S["asfx_togs"] >> pref.asfx_togs
|
S["asfx_togs"] >> pref.asfx_togs
|
||||||
S["motd_hash"] >> pref.motd_hash
|
S["motd_hash"] >> pref.motd_hash
|
||||||
S["memo_hash"] >> pref.memo_hash
|
S["memo_hash"] >> pref.memo_hash
|
||||||
S["parallax_speed"] >> pref.parallax_speed
|
S["parallax_speed"] >> pref.parallax_speed
|
||||||
S["parallax_toggles"] >> pref.parallax_togs
|
S["parallax_toggles"] >> pref.parallax_togs
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/settings/save_preferences(var/savefile/S)
|
/datum/category_item/player_setup_item/player_global/settings/save_preferences(var/savefile/S)
|
||||||
S["lastchangelog"] << pref.lastchangelog
|
S["lastchangelog"] << pref.lastchangelog
|
||||||
S["default_slot"] << pref.default_slot
|
S["default_slot"] << pref.default_slot
|
||||||
S["toggles"] << pref.toggles
|
S["toggles"] << pref.toggles
|
||||||
S["asfx_togs"] << pref.asfx_togs
|
S["asfx_togs"] << pref.asfx_togs
|
||||||
S["motd_hash"] << pref.motd_hash
|
S["motd_hash"] << pref.motd_hash
|
||||||
S["memo_hash"] << pref.memo_hash
|
S["memo_hash"] << pref.memo_hash
|
||||||
S["parallax_speed"] << pref.parallax_speed
|
S["parallax_speed"] << pref.parallax_speed
|
||||||
S["parallax_toggles"] << pref.parallax_togs
|
S["parallax_toggles"] << pref.parallax_togs
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/settings/gather_load_query()
|
/datum/category_item/player_setup_item/player_global/settings/gather_load_query()
|
||||||
return list("ss13_player_preferences" = list("vars" = list("lastchangelog", "current_character", "toggles", "asfx_togs", "lastmotd" = "motd_hash", "lastmemo" = "memo_hash"), "args" = list("ckey")))
|
return list(
|
||||||
|
"ss13_player_preferences" = list(
|
||||||
|
"vars" = list(
|
||||||
|
"lastchangelog",
|
||||||
|
"current_character",
|
||||||
|
"toggles",
|
||||||
|
"asfx_togs",
|
||||||
|
"lastmotd" = "motd_hash",
|
||||||
|
"lastmemo" = "memo_hash"
|
||||||
|
),
|
||||||
|
"args" = list("ckey")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/settings/gather_load_parameters()
|
/datum/category_item/player_setup_item/player_global/settings/gather_load_parameters()
|
||||||
return list("ckey" = pref.client.ckey)
|
return list("ckey" = pref.client.ckey)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/settings/gather_save_query()
|
/datum/category_item/player_setup_item/player_global/settings/gather_save_query()
|
||||||
return list("ss13_player_preferences" = list("lastchangelog", "current_character", "toggles", "asfx_togs", "lastmotd", "lastmemo", "ckey" = 1, "parallax_toggles", "parallax_speed"))
|
return list(
|
||||||
|
"ss13_player_preferences" = list(
|
||||||
|
"lastchangelog",
|
||||||
|
"current_character",
|
||||||
|
"toggles",
|
||||||
|
"asfx_togs",
|
||||||
|
"lastmotd",
|
||||||
|
"lastmemo",
|
||||||
|
"ckey" = 1,
|
||||||
|
"parallax_toggles",
|
||||||
|
"parallax_speed"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/settings/gather_save_parameters()
|
/datum/category_item/player_setup_item/player_global/settings/gather_save_parameters()
|
||||||
return list("ckey" = pref.client.ckey,
|
return list(
|
||||||
"lastchangelog" = pref.lastchangelog,
|
"ckey" = pref.client.ckey,
|
||||||
"current_character" = pref.current_character,
|
"lastchangelog" = pref.lastchangelog,
|
||||||
"toggles" = pref.toggles,
|
"current_character" = pref.current_character,
|
||||||
"asfx_togs" = pref.asfx_togs,
|
"toggles" = pref.toggles,
|
||||||
"lastmotd" = pref.motd_hash,
|
"asfx_togs" = pref.asfx_togs,
|
||||||
"lastmemo" = pref.memo_hash,
|
"lastmotd" = pref.motd_hash,
|
||||||
"parallax_toggles" = pref.parallax_togs,
|
"lastmemo" = pref.memo_hash,
|
||||||
"parallax_speed" = pref.parallax_speed)
|
"parallax_toggles" = pref.parallax_togs,
|
||||||
|
"parallax_speed" = pref.parallax_speed
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/settings/sanitize_preferences(var/sql_load = 0)
|
/datum/category_item/player_setup_item/player_global/settings/sanitize_preferences(var/sql_load = 0)
|
||||||
if (sql_load)
|
if (sql_load)
|
||||||
pref.current_character = text2num(pref.current_character)
|
pref.current_character = text2num(pref.current_character)
|
||||||
|
|
||||||
pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog))
|
pref.lastchangelog = sanitize_text(pref.lastchangelog, initial(pref.lastchangelog))
|
||||||
pref.default_slot = sanitize_integer(text2num(pref.default_slot), 1, config.character_slots, initial(pref.default_slot))
|
pref.default_slot = sanitize_integer(text2num(pref.default_slot), 1, config.character_slots, initial(pref.default_slot))
|
||||||
pref.toggles = sanitize_integer(text2num(pref.toggles), 0, 65535, initial(pref.toggles))
|
pref.toggles = sanitize_integer(text2num(pref.toggles), 0, 65535, initial(pref.toggles))
|
||||||
pref.asfx_togs = sanitize_integer(text2num(pref.asfx_togs), 0, 65535, initial(pref.toggles))
|
pref.asfx_togs = sanitize_integer(text2num(pref.asfx_togs), 0, 65535, initial(pref.toggles))
|
||||||
pref.motd_hash = sanitize_text(pref.motd_hash, initial(pref.motd_hash))
|
pref.motd_hash = sanitize_text(pref.motd_hash, initial(pref.motd_hash))
|
||||||
pref.memo_hash = sanitize_text(pref.memo_hash, initial(pref.memo_hash))
|
pref.memo_hash = sanitize_text(pref.memo_hash, initial(pref.memo_hash))
|
||||||
pref.parallax_speed = sanitize_integer(text2num(pref.parallax_speed), 1, 10, initial(pref.parallax_speed))
|
pref.parallax_speed = sanitize_integer(text2num(pref.parallax_speed), 1, 10, initial(pref.parallax_speed))
|
||||||
pref.parallax_togs = sanitize_integer(text2num(pref.parallax_togs), 0, 65535, initial(pref.parallax_togs))
|
pref.parallax_togs = sanitize_integer(text2num(pref.parallax_togs), 0, 65535, initial(pref.parallax_togs))
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/settings/content(var/mob/user)
|
/datum/category_item/player_setup_item/player_global/settings/content(mob/user)
|
||||||
. += "<b>Play admin midis:</b> <a href='?src=\ref[src];toggle=[SOUND_MIDI]'><b>[(pref.toggles & SOUND_MIDI) ? "Yes" : "No"]</b></a><br>"
|
var/list/dat = list(
|
||||||
. += "<b>Play lobby music:</b> <a href='?src=\ref[src];toggle=[SOUND_LOBBY]'><b>[(pref.toggles & SOUND_LOBBY) ? "Yes" : "No"]</b></a><br>"
|
"<b>Play admin midis:</b> <a href='?src=\ref[src];toggle=[SOUND_MIDI]'><b>[(pref.toggles & SOUND_MIDI) ? "Yes" : "No"]</b></a><br>",
|
||||||
. += "<b>Ghost ears:</b> <a href='?src=\ref[src];toggle=[CHAT_GHOSTEARS]'><b>[(pref.toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]</b></a><br>"
|
"<b>Play lobby music:</b> <a href='?src=\ref[src];toggle=[SOUND_LOBBY]'><b>[(pref.toggles & SOUND_LOBBY) ? "Yes" : "No"]</b></a><br>",
|
||||||
. += "<b>Ghost sight:</b> <a href='?src=\ref[src];toggle=[CHAT_GHOSTSIGHT]'><b>[(pref.toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]</b></a><br>"
|
"<b>Ghost ears:</b> <a href='?src=\ref[src];toggle=[CHAT_GHOSTEARS]'><b>[(pref.toggles & CHAT_GHOSTEARS) ? "All Speech" : "Nearest Creatures"]</b></a><br>",
|
||||||
. += "<b>Ghost radio:</b> <a href='?src=\ref[src];toggle=[CHAT_GHOSTRADIO]'><b>[(pref.toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]</b></a><br>"
|
"<b>Ghost sight:</b> <a href='?src=\ref[src];toggle=[CHAT_GHOSTSIGHT]'><b>[(pref.toggles & CHAT_GHOSTSIGHT) ? "All Emotes" : "Nearest Creatures"]</b></a><br>",
|
||||||
. += "<b>Space Parallax:</b> <a href='?src=\ref[src];paratoggle=[PARALLAX_SPACE]'><b>[(pref.parallax_togs & PARALLAX_SPACE) ? "Yes" : "No"]</b></a><br>"
|
"<b>Ghost radio:</b> <a href='?src=\ref[src];toggle=[CHAT_GHOSTRADIO]'><b>[(pref.toggles & CHAT_GHOSTRADIO) ? "All Chatter" : "Nearest Speakers"]</b></a><br>",
|
||||||
. += "<b>Space Dust:</b> <a href='?src=\ref[src];paratoggle=[PARALLAX_DUST]'><b>[(pref.parallax_togs & PARALLAX_DUST) ? "Yes" : "No"]</b></a><br>"
|
"<b>Space Parallax:</b> <a href='?src=\ref[src];paratoggle=[PARALLAX_SPACE]'><b>[(pref.parallax_togs & PARALLAX_SPACE) ? "Yes" : "No"]</b></a><br>",
|
||||||
. += "<b>Progress Bars:</b> <a href='?src=\ref[src];paratoggle=[PROGRESS_BARS]'><b>[(pref.parallax_togs & PROGRESS_BARS) ? "Yes" : "No"]</b></a><br>"
|
"<b>Space Dust:</b> <a href='?src=\ref[src];paratoggle=[PARALLAX_DUST]'><b>[(pref.parallax_togs & PARALLAX_DUST) ? "Yes" : "No"]</b></a><br>",
|
||||||
. += "<b>Static Space:</b> <a href='?src=\ref[src];paratoggle=[PARALLAX_IS_STATIC]'><b>[(pref.parallax_togs & PARALLAX_IS_STATIC) ? "Yes" : "No"]</b></a><br>"
|
"<b>Progress Bars:</b> <a href='?src=\ref[src];paratoggle=[PROGRESS_BARS]'><b>[(pref.parallax_togs & PROGRESS_BARS) ? "Yes" : "No"]</b></a><br>",
|
||||||
|
"<b>Static Space:</b> <a href='?src=\ref[src];paratoggle=[PARALLAX_IS_STATIC]'><b>[(pref.parallax_togs & PARALLAX_IS_STATIC) ? "Yes" : "No"]</b></a><br>"
|
||||||
|
)
|
||||||
|
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user)
|
/datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||||
if(href_list["toggle"])
|
if(href_list["toggle"])
|
||||||
|
|||||||
@@ -66,7 +66,7 @@
|
|||||||
/datum/gear/accessory/white_vest
|
/datum/gear/accessory/white_vest
|
||||||
display_name = "webbing, medical"
|
display_name = "webbing, medical"
|
||||||
path = /obj/item/clothing/accessory/storage/white_vest
|
path = /obj/item/clothing/accessory/storage/white_vest
|
||||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Nursing Intern")
|
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Medical Resident")
|
||||||
|
|
||||||
/datum/gear/accessory/webbing
|
/datum/gear/accessory/webbing
|
||||||
display_name = "webbing, simple"
|
display_name = "webbing, simple"
|
||||||
@@ -86,7 +86,7 @@
|
|||||||
/datum/gear/accessory/white_pouches
|
/datum/gear/accessory/white_pouches
|
||||||
display_name = "drop pouches, medical"
|
display_name = "drop pouches, medical"
|
||||||
path = /obj/item/clothing/accessory/storage/white_pouches
|
path = /obj/item/clothing/accessory/storage/white_pouches
|
||||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist","Geneticist", "Paramedic", "Nursing Intern")
|
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist","Geneticist", "Paramedic", "Medical Resident")
|
||||||
|
|
||||||
/datum/gear/accessory/pouches
|
/datum/gear/accessory/pouches
|
||||||
display_name = "drop pouches, simple"
|
display_name = "drop pouches, simple"
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
/datum/gear/eyes/medical
|
/datum/gear/eyes/medical
|
||||||
display_name = "medical HUD"
|
display_name = "medical HUD"
|
||||||
path = /obj/item/clothing/glasses/hud/health
|
path = /obj/item/clothing/glasses/hud/health
|
||||||
allowed_roles = list("Medical Doctor", "Chief Medical Officer", "Chemist", "Paramedic", "Geneticist", "Nursing Intern")
|
allowed_roles = list("Medical Doctor", "Chief Medical Officer", "Chemist", "Paramedic", "Geneticist", "Medical Resident")
|
||||||
|
|
||||||
/datum/gear/eyes/shades
|
/datum/gear/eyes/shades
|
||||||
display_name = "sunglasses, fat"
|
display_name = "sunglasses, fat"
|
||||||
|
|||||||
@@ -154,7 +154,7 @@
|
|||||||
/datum/gear/head/surgical
|
/datum/gear/head/surgical
|
||||||
display_name = "surgical cap selection"
|
display_name = "surgical cap selection"
|
||||||
path = /obj/item/clothing/head/surgery/blue
|
path = /obj/item/clothing/head/surgery/blue
|
||||||
allowed_roles = list("Scientist", "Chief Medical Officer", "Medical Doctor", "Geneticist", "Chemist", "Paramedic", "Nursing Intern", "Xenobiologist", "Roboticist", "Research Director", "Forensic Technician")
|
allowed_roles = list("Scientist", "Chief Medical Officer", "Medical Doctor", "Geneticist", "Chemist", "Paramedic", "Medical Resident", "Xenobiologist", "Roboticist", "Research Director", "Forensic Technician")
|
||||||
|
|
||||||
/datum/gear/head/surgical/New()
|
/datum/gear/head/surgical/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -72,7 +72,7 @@
|
|||||||
display_name = "surgical apron"
|
display_name = "surgical apron"
|
||||||
path = /obj/item/clothing/suit/apron/surgery
|
path = /obj/item/clothing/suit/apron/surgery
|
||||||
cost = 1
|
cost = 1
|
||||||
allowed_roles = list("Scientist", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Nursing Intern", "Xenobiologist", "Roboticist", "Research Director", "Forensic Technician")
|
allowed_roles = list("Scientist", "Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Medical Resident", "Xenobiologist", "Roboticist", "Research Director", "Forensic Technician")
|
||||||
|
|
||||||
/datum/gear/suit/poncho
|
/datum/gear/suit/poncho
|
||||||
display_name = "poncho selection"
|
display_name = "poncho selection"
|
||||||
@@ -132,7 +132,7 @@
|
|||||||
/datum/gear/suit/winter/medical
|
/datum/gear/suit/winter/medical
|
||||||
display_name = "winter coat, medical"
|
display_name = "winter coat, medical"
|
||||||
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical
|
path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical
|
||||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Paramedic", "Nursing Intern", "Psychiatrist", "Chemist")
|
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Paramedic", "Medical Resident", "Psychiatrist", "Chemist")
|
||||||
|
|
||||||
/datum/gear/suit/winter/engineering
|
/datum/gear/suit/winter/engineering
|
||||||
display_name = "winter coat, engineering"
|
display_name = "winter coat, engineering"
|
||||||
|
|||||||
@@ -82,7 +82,7 @@
|
|||||||
/datum/gear/uniform/scrubs
|
/datum/gear/uniform/scrubs
|
||||||
display_name = "scrubs selection"
|
display_name = "scrubs selection"
|
||||||
path = /obj/item/clothing/under/rank/medical/black
|
path = /obj/item/clothing/under/rank/medical/black
|
||||||
allowed_roles = list("Scientist","Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Nursing Intern", "Xenobiologist", "Roboticist", "Research Director", "Forensic Technician")
|
allowed_roles = list("Scientist","Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Medical Resident", "Xenobiologist", "Roboticist", "Research Director", "Forensic Technician")
|
||||||
|
|
||||||
/datum/gear/uniform/scrubs/New()
|
/datum/gear/uniform/scrubs/New()
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -133,7 +133,7 @@
|
|||||||
display_name = "PRA medical coat (Tajara)"
|
display_name = "PRA medical coat (Tajara)"
|
||||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/tajaran
|
path = /obj/item/clothing/suit/storage/toggle/labcoat/tajaran
|
||||||
whitelisted = list("Tajara")
|
whitelisted = list("Tajara")
|
||||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Nursing Intern")
|
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Medical Resident")
|
||||||
sort_category = "Xenowear"
|
sort_category = "Xenowear"
|
||||||
|
|
||||||
//other things
|
//other things
|
||||||
|
|||||||
@@ -34,26 +34,51 @@
|
|||||||
S["player_alt_titles"] << pref.player_alt_titles
|
S["player_alt_titles"] << pref.player_alt_titles
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/occupation/gather_load_query()
|
/datum/category_item/player_setup_item/occupation/gather_load_query()
|
||||||
return list("ss13_characters" = list("vars" = list("jobs" = "unsanitized_jobs", "alternate_option", "alternate_titles" = "player_alt_titles"), "args" = list("id")))
|
return list(
|
||||||
|
"ss13_characters" = list(
|
||||||
|
"vars" = list(
|
||||||
|
"jobs" = "unsanitized_jobs",
|
||||||
|
"alternate_option",
|
||||||
|
"alternate_titles" = "player_alt_titles"
|
||||||
|
),
|
||||||
|
"args" = list("id")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/occupation/gather_load_parameters()
|
/datum/category_item/player_setup_item/occupation/gather_load_parameters()
|
||||||
return list("id" = pref.current_character)
|
return list("id" = pref.current_character)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/occupation/gather_save_query()
|
/datum/category_item/player_setup_item/occupation/gather_save_query()
|
||||||
return list("ss13_characters" = list("jobs", "alternate_option", "alternate_titles", "id" = 1, "ckey" = 1))
|
return list(
|
||||||
|
"ss13_characters" = list(
|
||||||
|
"jobs",
|
||||||
|
"alternate_option",
|
||||||
|
"alternate_titles",
|
||||||
|
"id" = 1,
|
||||||
|
"ckey" = 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/occupation/gather_save_parameters()
|
/datum/category_item/player_setup_item/occupation/gather_save_parameters()
|
||||||
var/list/compiled_jobs = list("job_civilian_high" = pref.job_civilian_high,
|
var/list/compiled_jobs = list(
|
||||||
"job_civilian_med" = pref.job_civilian_med,
|
"job_civilian_high" = pref.job_civilian_high,
|
||||||
"job_civilian_low" = pref.job_civilian_low,
|
"job_civilian_med" = pref.job_civilian_med,
|
||||||
"job_medsci_high" = pref.job_medsci_high,
|
"job_civilian_low" = pref.job_civilian_low,
|
||||||
"job_medsci_med" = pref.job_medsci_med,
|
"job_medsci_high" = pref.job_medsci_high,
|
||||||
"job_medsci_low" = pref.job_medsci_low,
|
"job_medsci_med" = pref.job_medsci_med,
|
||||||
"job_engsec_high" = pref.job_engsec_high,
|
"job_medsci_low" = pref.job_medsci_low,
|
||||||
"job_engsec_med" = pref.job_engsec_med,
|
"job_engsec_high" = pref.job_engsec_high,
|
||||||
"job_engsec_low" = pref.job_engsec_low)
|
"job_engsec_med" = pref.job_engsec_med,
|
||||||
|
"job_engsec_low" = pref.job_engsec_low
|
||||||
|
)
|
||||||
|
|
||||||
return list("jobs" = list2params(compiled_jobs), "alternate_option" = pref.alternate_option, "alternate_titles" = list2params(pref.player_alt_titles), "id" = pref.current_character, "ckey" = pref.client.ckey)
|
return list(
|
||||||
|
"jobs" = list2params(compiled_jobs),
|
||||||
|
"alternate_option" = pref.alternate_option,
|
||||||
|
"alternate_titles" = list2params(pref.player_alt_titles),
|
||||||
|
"id" = pref.current_character,
|
||||||
|
"ckey" = pref.client.ckey
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/occupation/sanitize_character(var/sql_load = 0)
|
/datum/category_item/player_setup_item/occupation/sanitize_character(var/sql_load = 0)
|
||||||
if (sql_load)
|
if (sql_load)
|
||||||
@@ -82,16 +107,16 @@
|
|||||||
log_debug("LOADING: Bad job preference key: [preference].")
|
log_debug("LOADING: Bad job preference key: [preference].")
|
||||||
log_debug(e.desc)
|
log_debug(e.desc)
|
||||||
|
|
||||||
pref.alternate_option = sanitize_integer(text2num(pref.alternate_option), 0, 2, initial(pref.alternate_option))
|
pref.alternate_option = sanitize_integer(text2num(pref.alternate_option), 0, 2, initial(pref.alternate_option))
|
||||||
pref.job_civilian_high = sanitize_integer(text2num(pref.job_civilian_high), 0, 65535, initial(pref.job_civilian_high))
|
pref.job_civilian_high = sanitize_integer(text2num(pref.job_civilian_high), 0, 65535, initial(pref.job_civilian_high))
|
||||||
pref.job_civilian_med = sanitize_integer(text2num(pref.job_civilian_med), 0, 65535, initial(pref.job_civilian_med))
|
pref.job_civilian_med = sanitize_integer(text2num(pref.job_civilian_med), 0, 65535, initial(pref.job_civilian_med))
|
||||||
pref.job_civilian_low = sanitize_integer(text2num(pref.job_civilian_low), 0, 65535, initial(pref.job_civilian_low))
|
pref.job_civilian_low = sanitize_integer(text2num(pref.job_civilian_low), 0, 65535, initial(pref.job_civilian_low))
|
||||||
pref.job_medsci_high = sanitize_integer(text2num(pref.job_medsci_high), 0, 65535, initial(pref.job_medsci_high))
|
pref.job_medsci_high = sanitize_integer(text2num(pref.job_medsci_high), 0, 65535, initial(pref.job_medsci_high))
|
||||||
pref.job_medsci_med = sanitize_integer(text2num(pref.job_medsci_med), 0, 65535, initial(pref.job_medsci_med))
|
pref.job_medsci_med = sanitize_integer(text2num(pref.job_medsci_med), 0, 65535, initial(pref.job_medsci_med))
|
||||||
pref.job_medsci_low = sanitize_integer(text2num(pref.job_medsci_low), 0, 65535, initial(pref.job_medsci_low))
|
pref.job_medsci_low = sanitize_integer(text2num(pref.job_medsci_low), 0, 65535, initial(pref.job_medsci_low))
|
||||||
pref.job_engsec_high = sanitize_integer(text2num(pref.job_engsec_high), 0, 65535, initial(pref.job_engsec_high))
|
pref.job_engsec_high = sanitize_integer(text2num(pref.job_engsec_high), 0, 65535, initial(pref.job_engsec_high))
|
||||||
pref.job_engsec_med = sanitize_integer(text2num(pref.job_engsec_med), 0, 65535, initial(pref.job_engsec_med))
|
pref.job_engsec_med = sanitize_integer(text2num(pref.job_engsec_med), 0, 65535, initial(pref.job_engsec_med))
|
||||||
pref.job_engsec_low = sanitize_integer(text2num(pref.job_engsec_low), 0, 65535, initial(pref.job_engsec_low))
|
pref.job_engsec_low = sanitize_integer(text2num(pref.job_engsec_low), 0, 65535, initial(pref.job_engsec_low))
|
||||||
|
|
||||||
if (!pref.player_alt_titles)
|
if (!pref.player_alt_titles)
|
||||||
pref.player_alt_titles = new()
|
pref.player_alt_titles = new()
|
||||||
@@ -102,89 +127,91 @@
|
|||||||
pref.player_alt_titles -= job.title
|
pref.player_alt_titles -= job.title
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/occupation/content(mob/user, limit = 16, list/splitJobs = list("Chief Medical Officer"))
|
/datum/category_item/player_setup_item/occupation/content(mob/user, limit = 16, list/splitJobs = list("Chief Medical Officer"))
|
||||||
|
var/list/dat = list(
|
||||||
. += "<tt><center>"
|
"<tt><center>",
|
||||||
. += "<b>Choose occupation chances</b><br>Unavailable occupations are crossed out.<br>"
|
"<b>Choose occupation chances</b><br>Unavailable occupations are crossed out.<br>",
|
||||||
. += "<table width='100%' cellpadding='1' cellspacing='0'><tr><td width='20%'>" // Table within a table for alignment, also allows you to easily add more colomns.
|
"<table width='100%' cellpadding='1' cellspacing='0'><tr><td width='20%'>", // Table within a table for alignment, also allows you to easily add more colomns.
|
||||||
. += "<table width='100%' cellpadding='1' cellspacing='0'>"
|
"<table width='100%' cellpadding='1' cellspacing='0'>"
|
||||||
|
)
|
||||||
var/index = -1
|
var/index = -1
|
||||||
|
|
||||||
//The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows.
|
//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
|
var/datum/job/lastJob
|
||||||
for(var/datum/job/job in SSjobs.occupations)
|
for(var/datum/job/job in SSjobs.occupations)
|
||||||
|
|
||||||
index += 1
|
index += 1
|
||||||
if((index >= limit) || (job.title in splitJobs))
|
if((index >= limit) || (job.title in splitJobs))
|
||||||
if((index < limit) && (lastJob != null))
|
if((index < limit) && (lastJob != null))
|
||||||
//If the cells were broken up by a job in the splitJob list then it will fill in the rest of the cells with
|
//If the cells were broken up by a job in the splitJob list then it will fill in the rest of the cells with
|
||||||
//the last job's selection color. Creating a rather nice effect.
|
//the last job's selection color. Creating a rather nice effect.
|
||||||
for(var/i = 0, i < (limit - index), i += 1)
|
for(var/i = 0, i < (limit - index), i += 1)
|
||||||
. += "<tr bgcolor='[lastJob.selection_color]'><td width='60%' align='right'><a> </a></td><td><a> </a></td></tr>"
|
dat += "<tr bgcolor='[lastJob.selection_color]'><td width='60%' align='right'><a> </a></td><td><a> </a></td></tr>"
|
||||||
. += "</table></td><td width='20%'><table width='100%' cellpadding='1' cellspacing='0'>"
|
dat += "</table></td><td width='20%'><table width='100%' cellpadding='1' cellspacing='0'>"
|
||||||
index = 0
|
index = 0
|
||||||
|
|
||||||
. += "<tr bgcolor='[job.selection_color]'><td width='60%' align='right'>"
|
dat += "<tr bgcolor='[job.selection_color]'><td width='60%' align='right'>"
|
||||||
var/rank = job.title
|
var/rank = job.title
|
||||||
lastJob = job
|
lastJob = job
|
||||||
var/ban_reason = jobban_isbanned(user, rank)
|
var/ban_reason = jobban_isbanned(user, rank)
|
||||||
if(ban_reason == "WHITELISTED")
|
if(ban_reason == "WHITELISTED")
|
||||||
. += "<del>[rank]</del></td><td><b> \[WHITELISTED]</b></td></tr>"
|
dat += "<del>[rank]</del></td><td><b> \[WHITELISTED]</b></td></tr>"
|
||||||
continue
|
continue
|
||||||
else if (ban_reason == "AGE WHITELISTED")
|
else if (ban_reason == "AGE WHITELISTED")
|
||||||
var/available_in_days = player_old_enough_for_role(user.client, rank)
|
var/available_in_days = player_old_enough_for_role(user.client, rank)
|
||||||
. += "<del>[rank]</del></td><td> \[IN [(available_in_days)] DAYS]</td></tr>"
|
dat += "<del>[rank]</del></td><td> \[IN [(available_in_days)] DAYS]</td></tr>"
|
||||||
continue
|
continue
|
||||||
else if (ban_reason)
|
else if (ban_reason)
|
||||||
. += "<del>[rank]</del></td><td><b> \[<a href='?src=\ref[user.client];view_jobban=\ref[rank];'>BANNED</a>]</b></td></tr>"
|
dat += "<del>[rank]</del></td><td><b> \[<a href='?src=\ref[user.client];view_jobban=\ref[rank];'>BANNED</a>]</b></td></tr>"
|
||||||
continue
|
continue
|
||||||
if((pref.job_civilian_low & ASSISTANT) && (rank != "Assistant"))
|
if((pref.job_civilian_low & ASSISTANT) && (rank != "Assistant"))
|
||||||
. += "<font color=orange>[rank]</font></td><td></td></tr>"
|
dat += "<font color=orange>[rank]</font></td><td></td></tr>"
|
||||||
continue
|
continue
|
||||||
if((rank in command_positions) || (rank == "AI"))//Bold head jobs
|
if((rank in command_positions) || (rank == "AI"))//Bold head jobs
|
||||||
. += "<b>[rank]</b>"
|
dat += "<b>[rank]</b>"
|
||||||
else
|
else
|
||||||
. += "[rank]"
|
dat += "[rank]"
|
||||||
|
|
||||||
. += "</td><td width='40%'>"
|
dat += "</td><td width='40%'>"
|
||||||
|
|
||||||
. += "<a href='?src=\ref[src];set_job=[rank]'>"
|
dat += "<a href='?src=\ref[src];set_job=[rank]'>"
|
||||||
|
|
||||||
if(rank == "Assistant")//Assistant is special
|
if(rank == "Assistant")//Assistant is special
|
||||||
if(pref.job_civilian_low & ASSISTANT)
|
if(pref.job_civilian_low & ASSISTANT)
|
||||||
. += " <font color=green>\[Yes]</font>"
|
dat += " <font color=green>\[Yes]</font>"
|
||||||
else
|
else
|
||||||
. += " <font color=red>\[No]</font>"
|
dat += " <font color=red>\[No]</font>"
|
||||||
if(job.alt_titles) //Blatantly cloned from a few lines down.
|
if(job.alt_titles) //Blatantly cloned from a few lines down.
|
||||||
. += "</a></td></tr><tr bgcolor='[lastJob.selection_color]'><td width='60%' align='center'> </td><td><a href='?src=\ref[src];select_alt_title=\ref[job]'>\[[pref.GetPlayerAltTitle(job)]\]</a></td></tr>"
|
dat += "</a></td></tr><tr bgcolor='[lastJob.selection_color]'><td width='60%' align='center'> </td><td><a href='?src=\ref[src];select_alt_title=\ref[job]'>\[[pref.GetPlayerAltTitle(job)]\]</a></td></tr>"
|
||||||
. += "</a></td></tr>"
|
dat += "</a></td></tr>"
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if(pref.GetJobDepartment(job, 1) & job.flag)
|
if(pref.GetJobDepartment(job, 1) & job.flag)
|
||||||
. += " <font color=blue>\[High]</font>"
|
dat += " <font color=blue>\[High]</font>"
|
||||||
else if(pref.GetJobDepartment(job, 2) & job.flag)
|
else if(pref.GetJobDepartment(job, 2) & job.flag)
|
||||||
. += " <font color=green>\[Medium]</font>"
|
dat += " <font color=green>\[Medium]</font>"
|
||||||
else if(pref.GetJobDepartment(job, 3) & job.flag)
|
else if(pref.GetJobDepartment(job, 3) & job.flag)
|
||||||
. += " <font color=orange>\[Low]</font>"
|
dat += " <font color=orange>\[Low]</font>"
|
||||||
else
|
else
|
||||||
. += " <font color=red>\[NEVER]</font>"
|
dat += " <font color=red>\[NEVER]</font>"
|
||||||
if(job.alt_titles)
|
if(job.alt_titles)
|
||||||
. += "</a></td></tr><tr bgcolor='[lastJob.selection_color]'><td width='60%' align='center'> </td><td><a href='?src=\ref[src];select_alt_title=\ref[job]'>\[[pref.GetPlayerAltTitle(job)]\]</a></td></tr>"
|
dat += "</a></td></tr><tr bgcolor='[lastJob.selection_color]'><td width='60%' align='center'> </td><td><a href='?src=\ref[src];select_alt_title=\ref[job]'>\[[pref.GetPlayerAltTitle(job)]\]</a></td></tr>"
|
||||||
. += "</a></td></tr>"
|
dat += "</a></td></tr>"
|
||||||
|
|
||||||
. += "</td'></tr></table>"
|
dat += "</td'></tr></table>"
|
||||||
|
|
||||||
. += "</center></table>"
|
dat += "</center></table>"
|
||||||
|
|
||||||
switch(pref.alternate_option)
|
switch(pref.alternate_option)
|
||||||
if(GET_RANDOM_JOB)
|
if(GET_RANDOM_JOB)
|
||||||
. += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><font color=green>Get random job if preferences unavailable</font></a></u></center><br>"
|
dat += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><font color=green>Get random job if preferences unavailable</font></a></u></center><br>"
|
||||||
if(BE_ASSISTANT)
|
if(BE_ASSISTANT)
|
||||||
. += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><font color=red>Be assistant if preference unavailable</font></a></u></center><br>"
|
dat += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><font color=red>Be assistant if preference unavailable</font></a></u></center><br>"
|
||||||
if(RETURN_TO_LOBBY)
|
if(RETURN_TO_LOBBY)
|
||||||
. += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><font color=purple>Return to lobby if preference unavailable</font></a></u></center><br>"
|
dat += "<center><br><u><a href='?src=\ref[src];job_alternative=1'><font color=purple>Return to lobby if preference unavailable</font></a></u></center><br>"
|
||||||
|
|
||||||
. += "<center><a href='?src=\ref[src];reset_jobs=1'>\[Reset\]</a></center>"
|
dat += "<center><a href='?src=\ref[src];reset_jobs=1'>\[Reset\]</a></center>"
|
||||||
. += "</tt>"
|
dat += "</tt>"
|
||||||
|
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/occupation/OnTopic(href, href_list, user)
|
/datum/category_item/player_setup_item/occupation/OnTopic(href, href_list, user)
|
||||||
if(href_list["reset_jobs"])
|
if(href_list["reset_jobs"])
|
||||||
|
|||||||
@@ -61,27 +61,30 @@
|
|||||||
infraction.felony = text2num(char_infraction_query.item[11])
|
infraction.felony = text2num(char_infraction_query.item[11])
|
||||||
pref.incidents.Add(infraction)
|
pref.incidents.Add(infraction)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/other/incidents/content(var/mob/user)
|
/datum/category_item/player_setup_item/other/incidents/content(mob/user)
|
||||||
pref.incidents = list()
|
var/list/dat = list(
|
||||||
. += "<b>Incident Information</b><br>"
|
"<b>Incident Information</b><br>",
|
||||||
. += "The following incidents are on file for your character<br>"
|
"The following incidents are on file for your character<br>"
|
||||||
|
)
|
||||||
for (var/datum/char_infraction/I in pref.incidents)
|
for (var/datum/char_infraction/I in pref.incidents)
|
||||||
. += "<hr>"
|
dat += "<hr>"
|
||||||
. += "UID: [I.UID]<br>"
|
dat += "UID: [I.UID]<br>"
|
||||||
. += "Date/Time: [I.datetime]<br>"
|
dat += "Date/Time: [I.datetime]<br>"
|
||||||
. += "Charges: "
|
dat += "Charges: "
|
||||||
for (var/L in I.charges)
|
for (var/L in I.charges)
|
||||||
. += "[L], "
|
dat += "[L], "
|
||||||
if (I.fine == 0)
|
if (I.fine == 0)
|
||||||
. += "<br>Brig Sentence: [I.getBrigSentence()] <br>"
|
dat += "<br>Brig Sentence: [I.getBrigSentence()] <br>"
|
||||||
else
|
else
|
||||||
. += "Fine: [I.fine] Credits<br>"
|
dat += "Fine: [I.fine] Credits<br>"
|
||||||
. += "Notes: <br>"
|
dat += "Notes: <br>"
|
||||||
if (I.notes != "")
|
if (I.notes != "")
|
||||||
. += nl2br(I.notes)
|
dat += nl2br(I.notes)
|
||||||
else
|
else
|
||||||
. += "- No Summary Entered -"
|
dat += "- No Summary Entered -"
|
||||||
. += "<br><a href='?src=\ref[src];details_sec_incident=[I.db_id]'>Show Details</a><br><a href='?src=\ref[src];del_sec_incident=[I.db_id]'>Delete Incident</a>"
|
dat += "<br><a href='?src=\ref[src];details_sec_incident=[I.db_id]'>Show Details</a><br><a href='?src=\ref[src];del_sec_incident=[I.db_id]'>Delete Incident</a>"
|
||||||
|
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/other/incidents/OnTopic(var/href,var/list/href_list, var/mob/user)
|
/datum/category_item/player_setup_item/other/incidents/OnTopic(var/href,var/list/href_list, var/mob/user)
|
||||||
if(href_list["del_sec_incident"])
|
if(href_list["del_sec_incident"])
|
||||||
|
|||||||
@@ -7,6 +7,9 @@
|
|||||||
#define SQL_CHARACTER 0x1
|
#define SQL_CHARACTER 0x1
|
||||||
#define SQL_PREFERENCES 0x2
|
#define SQL_PREFERENCES 0x2
|
||||||
|
|
||||||
|
// General-purpose helper for drawing a colored box.
|
||||||
|
#define HTML_RECT(color) " <div style=\"display:inline;height:10px;width:30px;background:'[color || "#FFFFFF"]'\"></div> "
|
||||||
|
|
||||||
/datum/category_group/player_setup_category/general_preferences
|
/datum/category_group/player_setup_category/general_preferences
|
||||||
name = "General"
|
name = "General"
|
||||||
sort_order = 1
|
sort_order = 1
|
||||||
|
|||||||
@@ -3,26 +3,46 @@
|
|||||||
sort_order = 1
|
sort_order = 1
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/skills/load_character(var/savefile/S)
|
/datum/category_item/player_setup_item/skills/load_character(var/savefile/S)
|
||||||
S["skills"] >> pref.skills
|
S["skills"] >> pref.skills
|
||||||
S["used_skillpoints"] >> pref.used_skillpoints
|
S["used_skillpoints"] >> pref.used_skillpoints
|
||||||
S["skill_specialization"] >> pref.skill_specialization
|
S["skill_specialization"] >> pref.skill_specialization
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/skills/save_character(var/savefile/S)
|
/datum/category_item/player_setup_item/skills/save_character(var/savefile/S)
|
||||||
S["skills"] << pref.skills
|
S["skills"] << pref.skills
|
||||||
S["used_skillpoints"] << pref.used_skillpoints
|
S["used_skillpoints"] << pref.used_skillpoints
|
||||||
S["skill_specialization"] << pref.skill_specialization
|
S["skill_specialization"] << pref.skill_specialization
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/skills/gather_load_query()
|
/datum/category_item/player_setup_item/skills/gather_load_query()
|
||||||
return list("ss13_characters" = list("vars" = list("skills", "skill_specialization"), "args" = list("id")))
|
return list(
|
||||||
|
"ss13_characters" = list(
|
||||||
|
"vars" = list(
|
||||||
|
"skills",
|
||||||
|
"skill_specialization"
|
||||||
|
),
|
||||||
|
"args" = list("id")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/skills/gather_load_parameters()
|
/datum/category_item/player_setup_item/skills/gather_load_parameters()
|
||||||
return list("id" = pref.current_character)
|
return list("id" = pref.current_character)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/skills/gather_save_query()
|
/datum/category_item/player_setup_item/skills/gather_save_query()
|
||||||
return list("ss13_characters" = list("skills", "skill_specialization", "id" = 1, "ckey" = 1))
|
return list(
|
||||||
|
"ss13_characters" = list(
|
||||||
|
"skills",
|
||||||
|
"skill_specialization",
|
||||||
|
"id" = 1,
|
||||||
|
"ckey" = 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/skills/gather_save_parameters()
|
/datum/category_item/player_setup_item/skills/gather_save_parameters()
|
||||||
return list("skills" = list2params(pref.skills), "skill_specialization" = pref.skill_specialization, "id" = pref.current_character, "ckey" = pref.client.ckey)
|
return list(
|
||||||
|
"skills" = list2params(pref.skills),
|
||||||
|
"skill_specialization" = pref.skill_specialization,
|
||||||
|
"id" = pref.current_character,
|
||||||
|
"ckey" = pref.client.ckey
|
||||||
|
)
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/skills/sanitize_character(var/sql_load = 0)
|
/datum/category_item/player_setup_item/skills/sanitize_character(var/sql_load = 0)
|
||||||
if (SKILLS == null)
|
if (SKILLS == null)
|
||||||
@@ -45,27 +65,30 @@
|
|||||||
pref.used_skillpoints = 0
|
pref.used_skillpoints = 0
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/skills/content()
|
/datum/category_item/player_setup_item/skills/content()
|
||||||
. += "<b>Select your Skills</b><br>"
|
var/list/dat = list(
|
||||||
. += "Current skill level: <b>[pref.GetSkillClass(pref.used_skillpoints)]</b> ([pref.used_skillpoints])<br>"
|
"<b>Select your Skills</b><br>",
|
||||||
. += "<a href='?src=\ref[src];preconfigured=1'>Use preconfigured skillset</a><br>"
|
"Current skill level: <b>[pref.GetSkillClass(pref.used_skillpoints)]</b> ([pref.used_skillpoints])<br>",
|
||||||
. += "<table>"
|
"<a href='?src=\ref[src];preconfigured=1'>Use preconfigured skillset</a><br>",
|
||||||
|
"<table>"
|
||||||
|
)
|
||||||
for(var/V in SKILLS)
|
for(var/V in SKILLS)
|
||||||
. += "<tr><th colspan = 5><b>[V]</b>"
|
dat += "<tr><th colspan = 5><b>[V]</b>"
|
||||||
. += "</th></tr>"
|
dat += "</th></tr>"
|
||||||
for(var/datum/skill/S in SKILLS[V])
|
for(var/datum/skill/S in SKILLS[V])
|
||||||
var/level = pref.skills[S.ID]
|
var/level = pref.skills[S.ID]
|
||||||
. += "<tr style='text-align:left;'>"
|
dat += "<tr style='text-align:left;'>"
|
||||||
. += "<th><a href='?src=\ref[src];skillinfo=\ref[S]'>[S.name]</a></th>"
|
dat += "<th><a href='?src=\ref[src];skillinfo=\ref[S]'>[S.name]</a></th>"
|
||||||
. += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_NONE]'><font color=[(level == SKILL_NONE) ? "red" : "black"]>\[Untrained\]</font></a></th>"
|
dat += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_NONE]'><font color=[(level == SKILL_NONE) ? "red" : "black"]>\[Untrained\]</font></a></th>"
|
||||||
// secondary skills don't have an amateur level
|
// secondary skills don't have an amateur level
|
||||||
if(S.secondary)
|
if(S.secondary)
|
||||||
. += "<th></th>"
|
dat += "<th></th>"
|
||||||
else
|
else
|
||||||
. += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_BASIC]'><font color=[(level == SKILL_BASIC) ? "red" : "black"]>\[Amateur\]</font></a></th>"
|
dat += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_BASIC]'><font color=[(level == SKILL_BASIC) ? "red" : "black"]>\[Amateur\]</font></a></th>"
|
||||||
. += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_ADEPT]'><font color=[(level == SKILL_ADEPT) ? "red" : "black"]>\[Trained\]</font></a></th>"
|
dat += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_ADEPT]'><font color=[(level == SKILL_ADEPT) ? "red" : "black"]>\[Trained\]</font></a></th>"
|
||||||
. += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_EXPERT]'><font color=[(level == SKILL_EXPERT) ? "red" : "black"]>\[Professional\]</font></a></th>"
|
dat += "<th><a href='?src=\ref[src];setskill=\ref[S];newvalue=[SKILL_EXPERT]'><font color=[(level == SKILL_EXPERT) ? "red" : "black"]>\[Professional\]</font></a></th>"
|
||||||
. += "</tr>"
|
dat += "</tr>"
|
||||||
. += "</table>"
|
dat += "</table>"
|
||||||
|
. = dat.Join()
|
||||||
|
|
||||||
/datum/category_item/player_setup_item/skills/OnTopic(href, href_list, user)
|
/datum/category_item/player_setup_item/skills/OnTopic(href, href_list, user)
|
||||||
if(href_list["skillinfo"])
|
if(href_list["skillinfo"])
|
||||||
|
|||||||
@@ -148,13 +148,21 @@
|
|||||||
siemens_coefficient = 1.5
|
siemens_coefficient = 1.5
|
||||||
item_icons = list()
|
item_icons = list()
|
||||||
|
|
||||||
update_icon(var/mob/living/carbon/human/user)
|
/obj/item/clothing/head/kitty/equipped(mob/living/carbon/human/user, slot)
|
||||||
if(!istype(user)) return
|
. = ..()
|
||||||
var/icon/ears = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kitty")
|
if (slot == slot_head && istype(user))
|
||||||
ears.Blend(rgb(user.r_hair, user.g_hair, user.b_hair), ICON_ADD)
|
var/hairgb = rgb(user.r_hair, user.g_hair, user.b_hair)
|
||||||
|
var/icon/blended = SSicon_cache.kitty_ear_cache[hairgb]
|
||||||
|
if (!blended)
|
||||||
|
blended = icon('icons/mob/head.dmi', "kitty")
|
||||||
|
blended.Blend(hairgb, ICON_ADD)
|
||||||
|
blended.Blend(icon('icons/mob/head.dmi', "kittyinner"), ICON_OVERLAY)
|
||||||
|
|
||||||
var/icon/earbit = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "kittyinner")
|
SSicon_cache.kitty_ear_cache[hairgb] = blended
|
||||||
ears.Blend(earbit, ICON_OVERLAY)
|
|
||||||
|
icon_override = blended
|
||||||
|
else if (icon_override)
|
||||||
|
icon_override = null
|
||||||
|
|
||||||
/obj/item/clothing/head/richard
|
/obj/item/clothing/head/richard
|
||||||
name = "chicken mask"
|
name = "chicken mask"
|
||||||
|
|||||||
@@ -107,7 +107,7 @@
|
|||||||
|
|
||||||
/obj/item/clothing/suit/wizrobe/gentlecoat
|
/obj/item/clothing/suit/wizrobe/gentlecoat
|
||||||
name = "gentlemans coat"
|
name = "gentlemans coat"
|
||||||
desc = "A heavy threaded twead gray jacket. For a different sort of Gentleman."
|
desc = "A heavy threaded tweed gray jacket. For a different sort of Gentleman."
|
||||||
icon_state = "gentlecoat"
|
icon_state = "gentlecoat"
|
||||||
item_state = "gentlecoat"
|
item_state = "gentlecoat"
|
||||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||||
|
|||||||
@@ -512,7 +512,7 @@ All custom items with worn sprites must follow the contained sprite system: http
|
|||||||
|
|
||||||
|
|
||||||
/obj/item/clothing/suit/storage/toggle/labcoat/fluff/helmut_labcoat //CERN Labcoat - Helmut Kronigernischultz - pyrociraptor
|
/obj/item/clothing/suit/storage/toggle/labcoat/fluff/helmut_labcoat //CERN Labcoat - Helmut Kronigernischultz - pyrociraptor
|
||||||
name = "CERN labcoat"
|
name = "\improper CERN labcoat"
|
||||||
desc = "A Labcoat with a blue pocket and blue collar. On the pocket, you can read \"C.E.R.N.\"."
|
desc = "A Labcoat with a blue pocket and blue collar. On the pocket, you can read \"C.E.R.N.\"."
|
||||||
icon = 'icons/obj/custom_items/helmut_labcoat.dmi'
|
icon = 'icons/obj/custom_items/helmut_labcoat.dmi'
|
||||||
icon_state = "helmut_labcoat"
|
icon_state = "helmut_labcoat"
|
||||||
@@ -703,6 +703,7 @@ All custom items with worn sprites must follow the contained sprite system: http
|
|||||||
desc = "A sterile insulated coat made of leather stitched over fur. It has two gold lapels indicating Officer rank. \
|
desc = "A sterile insulated coat made of leather stitched over fur. It has two gold lapels indicating Officer rank. \
|
||||||
The a white armband with a scarlet line in the center indicates that the person wearing this coat is medically trained."
|
The a white armband with a scarlet line in the center indicates that the person wearing this coat is medically trained."
|
||||||
|
|
||||||
|
|
||||||
/obj/item/clothing/suit/storage/tajaran/fluff/maksim_coat //Tajaran Naval Officer's Coat - Maksim Vasilyev - aimlessanalyst
|
/obj/item/clothing/suit/storage/tajaran/fluff/maksim_coat //Tajaran Naval Officer's Coat - Maksim Vasilyev - aimlessanalyst
|
||||||
name = "tajaran naval officer coat"
|
name = "tajaran naval officer coat"
|
||||||
desc = "A thick wool coat from Adhomai, calling back to days long past."
|
desc = "A thick wool coat from Adhomai, calling back to days long past."
|
||||||
@@ -1168,3 +1169,79 @@ All custom items with worn sprites must follow the contained sprite system: http
|
|||||||
/obj/item/clothing/mask/fluff/corvo_cigarette/examine(mob/user)
|
/obj/item/clothing/mask/fluff/corvo_cigarette/examine(mob/user)
|
||||||
if(..(user, 1))
|
if(..(user, 1))
|
||||||
user << "It is [active ? "on" : "off"]."
|
user << "It is [active ? "on" : "off"]."
|
||||||
|
|
||||||
|
/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac/fluff/leonce_cognac //Old Earth Luxury Cognac - Francois Leonce - driecg36
|
||||||
|
name = "old earth luxury cognac"
|
||||||
|
desc = "An unusually shaped crystal bottle, covered in elaborate etchings displaying the symbol of the house that produced it. Inside is a smooth, amber liquor, \
|
||||||
|
which smells of the barrel it was aged in. The region and producer are on the label."
|
||||||
|
icon = 'icons/obj/custom_items/leonce_cognac.dmi'
|
||||||
|
icon_state = "leonce_cognac"
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/clothing/under/fluff/birkin_uniform //White Suit - Joseph Birkin - unknownmurder
|
||||||
|
name = "white suit"
|
||||||
|
desc = "This collared uniform appears to be little wrinkled and the tie is a bit loose from the collar. The jean seems to be neatly straight with the leather belt attached."
|
||||||
|
icon = 'icons/obj/custom_items/birkin_uniform.dmi'
|
||||||
|
icon_state = "birkin_uniform"
|
||||||
|
item_state = "birkin_uniform"
|
||||||
|
contained_sprite = TRUE
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/clothing/suit/storage/fluff/sonorous_mantle //Maraziite Throw Over - Sonorous Zouzoror - sleepywolf
|
||||||
|
name = "maraziite throw over"
|
||||||
|
desc = "A grey poncho, exclusively warn by members of the Maraziite Order. This one has the flag of the Izweski Hegemony stitched on."
|
||||||
|
icon = 'icons/obj/custom_items/sonorous_clothing.dmi'
|
||||||
|
icon_state = "sonorous_mantle"
|
||||||
|
item_state = "sonorous_mantle"
|
||||||
|
contained_sprite = TRUE
|
||||||
|
|
||||||
|
/obj/item/clothing/mask/fluff/sonorous_mask //Iron Mask - Sonorous Zouzoror - sleepywolf
|
||||||
|
name = "iron mask"
|
||||||
|
desc = "A mask made of iron worn by members of the Maraziite Order. This one looks like it's modeled after a fish."
|
||||||
|
icon = 'icons/obj/custom_items/sonorous_clothing.dmi'
|
||||||
|
icon_state = "sonorous_mask"
|
||||||
|
item_state = "sonorous_mask"
|
||||||
|
contained_sprite = TRUE
|
||||||
|
flags_inv = HIDEEARS|HIDEFACE
|
||||||
|
body_parts_covered = FACE
|
||||||
|
w_class = 3.0
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/clothing/under/fluff/ellie_uniform //Cheery Blazer - Ellie Shoshanna - resilynn
|
||||||
|
name = "cheery blazer"
|
||||||
|
desc = "A cheery but professional outfit, mauve corduroys, blue blazer and a tie."
|
||||||
|
icon = 'icons/obj/custom_items/ellie_uniform.dmi'
|
||||||
|
icon_state = "ellie_uniform"
|
||||||
|
item_state = "ellie_uniform"
|
||||||
|
contained_sprite = TRUE
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/fluff/zhilin_necklace //Tajaran Religious Necklace - Zhilin Vadim - fireandglory
|
||||||
|
name = "tajaran religious necklace"
|
||||||
|
desc = "A necklace with black string, it appears to have carved wooden figures of the Tajaran god Mata'ke and all of his pantheon strung through it."
|
||||||
|
icon = 'icons/obj/custom_items/zhilin_necklace.dmi'
|
||||||
|
icon_state = "zhilin_necklace"
|
||||||
|
item_state = "zhilin_necklace"
|
||||||
|
contained_sprite = TRUE
|
||||||
|
slot_flags = SLOT_EARS | SLOT_TIE
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/weapon/book/fluff/huntington_book //Spark Theorem - Monica Huntington - moondancerpony
|
||||||
|
name = "\improper Spark Theorem"
|
||||||
|
desc = "A bound copy of the 2458 research paper \"Spark Theorem: Research Into the Development of Synthetic Consciousness and Sapience\". This one is signed by the author."
|
||||||
|
title = "Spark Theorem"
|
||||||
|
icon_state = "book6"
|
||||||
|
author = "Kyyir'ry'avii 'Karima' Ile'nagrii Al'Ghul-Mo'Taki"
|
||||||
|
dat = "<!doctype html><html style=\"width:100%;height:100%;\"><head><meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\"></head><body><iframe style=\"width:100%;height:100%\" src=\"https://assets.lohikar.io/mdp/sparktheorem.html\"></iframe></body></html>"
|
||||||
|
due_date = 0
|
||||||
|
unique = 1
|
||||||
|
|
||||||
|
|
||||||
|
/obj/item/clothing/shoes/fluff/hikmat_shoes //Native Tajaran Foot-wear - Hikmat Rrhazkal-Jawdat - prospekt1559
|
||||||
|
name = "native tajaran foot-wear"
|
||||||
|
desc = "Native foot and leg wear worn by Tajara, completely covering the legs in wraps and the feet in native Tajaran fabric."
|
||||||
|
icon = 'icons/obj/custom_items/hikmat_shoes.dmi'
|
||||||
|
icon_state = "hikmat_shoes"
|
||||||
|
item_state = "hikmat_shoes"
|
||||||
|
species_restricted = null
|
||||||
|
contained_sprite = TRUE
|
||||||
|
|||||||
@@ -111,7 +111,7 @@
|
|||||||
user.do_attack_animation(src)
|
user.do_attack_animation(src)
|
||||||
M.IgniteMob()
|
M.IgniteMob()
|
||||||
else if(reagents.total_volume)
|
else if(reagents.total_volume)
|
||||||
if(user.zone_sel.selecting == "mouth")
|
if(user.zone_sel.selecting == "mouth" && !(M.wear_mask && M.wear_mask.item_flags & AIRTIGHT))
|
||||||
user.do_attack_animation(src)
|
user.do_attack_animation(src)
|
||||||
user.visible_message(
|
user.visible_message(
|
||||||
"<span class='danger'>\The [user] smothers [target] with [src]!</span>",
|
"<span class='danger'>\The [user] smothers [target] with [src]!</span>",
|
||||||
|
|||||||
@@ -46,17 +46,6 @@
|
|||||||
|
|
||||||
#define GEAR_EVA 15
|
#define GEAR_EVA 15
|
||||||
|
|
||||||
|
|
||||||
/var/list/economic_species_modifier = list(
|
|
||||||
/datum/species/human = 12,
|
|
||||||
/datum/species/skrell = 10,
|
|
||||||
/datum/species/tajaran = 7,
|
|
||||||
/datum/species/unathi = 7,
|
|
||||||
/datum/species/diona = 3,
|
|
||||||
/datum/species/machine = 3,
|
|
||||||
/datum/species/bug = 1
|
|
||||||
)
|
|
||||||
|
|
||||||
//---- The following corporations are friendly with NanoTrasen and loosely enable trade and travel:
|
//---- The following corporations are friendly with NanoTrasen and loosely enable trade and travel:
|
||||||
//Corporation NanoTrasen - Generalised / high tech research and phoron exploitation.
|
//Corporation NanoTrasen - Generalised / high tech research and phoron exploitation.
|
||||||
//Corporation Vessel Contracting - Ship and station construction, materials research.
|
//Corporation Vessel Contracting - Ship and station construction, materials research.
|
||||||
|
|||||||
@@ -67,11 +67,10 @@
|
|||||||
var/last_biolum = null
|
var/last_biolum = null
|
||||||
|
|
||||||
/obj/effect/plant/Destroy()
|
/obj/effect/plant/Destroy()
|
||||||
if(SSplants)
|
SSplants.remove_plant(src)
|
||||||
STOP_PROCESSING(SSplants, src)
|
|
||||||
for(var/obj/effect/plant/neighbor in range(1,src))
|
for(var/obj/effect/plant/neighbor in range(1,src))
|
||||||
if (!QDELETED(neighbor))
|
if (!QDELETED(neighbor))
|
||||||
START_PROCESSING(SSplants, neighbor)
|
SSplants.add_plant(neighbor)
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
/obj/effect/plant/single
|
/obj/effect/plant/single
|
||||||
@@ -129,7 +128,7 @@
|
|||||||
/obj/effect/plant/proc/post_initialize()
|
/obj/effect/plant/proc/post_initialize()
|
||||||
set_dir(calc_dir())
|
set_dir(calc_dir())
|
||||||
update_icon()
|
update_icon()
|
||||||
START_PROCESSING(SSplants, src)
|
SSplants.add_plant(src)
|
||||||
// Some plants eat through plating.
|
// Some plants eat through plating.
|
||||||
if(islist(seed.chems) && !isnull(seed.chems["pacid"]))
|
if(islist(seed.chems) && !isnull(seed.chems["pacid"]))
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
@@ -239,7 +238,7 @@
|
|||||||
/obj/effect/plant/attackby(var/obj/item/weapon/W, var/mob/user)
|
/obj/effect/plant/attackby(var/obj/item/weapon/W, var/mob/user)
|
||||||
|
|
||||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||||
START_PROCESSING(SSplants, src)
|
SSplants.add_plant(src)
|
||||||
|
|
||||||
if(iswirecutter(W) || istype(W, /obj/item/weapon/scalpel))
|
if(iswirecutter(W) || istype(W, /obj/item/weapon/scalpel))
|
||||||
if(sampled)
|
if(sampled)
|
||||||
|
|||||||
@@ -23,6 +23,10 @@
|
|||||||
if(!Adjacent(floor) || !floor.Enter(src))
|
if(!Adjacent(floor) || !floor.Enter(src))
|
||||||
continue
|
continue
|
||||||
neighbors |= floor
|
neighbors |= floor
|
||||||
|
|
||||||
|
if (neighbors.len)
|
||||||
|
SSplants.add_plant(src)
|
||||||
|
|
||||||
// Update all of our friends.
|
// Update all of our friends.
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
for(var/obj/effect/plant/neighbor in range(1,src))
|
for(var/obj/effect/plant/neighbor in range(1,src))
|
||||||
@@ -82,8 +86,8 @@
|
|||||||
|
|
||||||
// We shouldn't have spawned if the controller doesn't exist.
|
// We shouldn't have spawned if the controller doesn't exist.
|
||||||
check_health()
|
check_health()
|
||||||
if(neighbors.len || health != max_health)
|
if(neighbors.len || health != max_health || buckled_mob)
|
||||||
START_PROCESSING(SSplants, src)
|
SSplants.add_plant(src)
|
||||||
|
|
||||||
/obj/effect/plant/proc/do_spread(spread_chance, max_spread)
|
/obj/effect/plant/proc/do_spread(spread_chance, max_spread)
|
||||||
for(var/i in 1 to max_spread)
|
for(var/i in 1 to max_spread)
|
||||||
@@ -113,7 +117,7 @@
|
|||||||
continue
|
continue
|
||||||
for(var/obj/effect/plant/neighbor in check_turf.contents)
|
for(var/obj/effect/plant/neighbor in check_turf.contents)
|
||||||
neighbor.neighbors |= check_turf
|
neighbor.neighbors |= check_turf
|
||||||
START_PROCESSING(SSplants, neighbor)
|
SSplants.add_plant(neighbor)
|
||||||
|
|
||||||
QDEL_IN(src, 1)
|
QDEL_IN(src, 1)
|
||||||
|
|
||||||
|
|||||||
@@ -24,7 +24,7 @@
|
|||||||
return 1
|
return 1
|
||||||
|
|
||||||
/datum/job/intern_med
|
/datum/job/intern_med
|
||||||
title = "Nursing Intern"
|
title = "Medical Resident"
|
||||||
flag = INTERN_MED
|
flag = INTERN_MED
|
||||||
department_flag = MEDSCI
|
department_flag = MEDSCI
|
||||||
faction = "Station"
|
faction = "Station"
|
||||||
|
|||||||
@@ -1131,8 +1131,7 @@ var/list/total_extraction_beacons = list()
|
|||||||
single_spark(O.loc)
|
single_spark(O.loc)
|
||||||
do_teleport(O, user, 0)
|
do_teleport(O, user, 0)
|
||||||
|
|
||||||
if (TICK_CHECK)
|
CHECK_TICK
|
||||||
return
|
|
||||||
|
|
||||||
/******************************Sculpting*******************************/
|
/******************************Sculpting*******************************/
|
||||||
/obj/item/weapon/autochisel
|
/obj/item/weapon/autochisel
|
||||||
|
|||||||
@@ -16,12 +16,14 @@
|
|||||||
src.contents += W
|
src.contents += W
|
||||||
if (istype(W, /obj/item/weapon/storage))
|
if (istype(W, /obj/item/weapon/storage))
|
||||||
var/obj/item/weapon/storage/S = W
|
var/obj/item/weapon/storage/S = W
|
||||||
S.hide_from(usr)
|
S.hide_from(user)
|
||||||
for(var/obj/item/weapon/ore/O in S.contents)
|
for(var/obj/item/weapon/ore/O in S.contents)
|
||||||
S.remove_from_storage(O, src) //This will move the item to this item's contents
|
S.remove_from_storage_deferred(O, src, user) //This will move the item to this item's contents
|
||||||
|
|
||||||
CHECK_TICK
|
CHECK_TICK
|
||||||
|
|
||||||
|
S.post_remove_from_storage_deferred(loc, user)
|
||||||
|
|
||||||
user << span("notice", "You empty the satchel into the box.")
|
user << span("notice", "You empty the satchel into the box.")
|
||||||
|
|
||||||
update_ore_count()
|
update_ore_count()
|
||||||
|
|||||||
@@ -174,29 +174,26 @@ Works together with spawning an observer, noted above.
|
|||||||
C.images += target.hud_list[SPECIALROLE_HUD]
|
C.images += target.hud_list[SPECIALROLE_HUD]
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/mob/proc/ghostize(var/can_reenter_corpse = 1)
|
/mob/proc/ghostize(var/can_reenter_corpse = 1, var/should_set_timer = 1)
|
||||||
if(ckey)
|
if(ckey)
|
||||||
var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
|
var/mob/dead/observer/ghost = new(src) //Transfer safety to observer spawning proc.
|
||||||
ghost.can_reenter_corpse = can_reenter_corpse
|
ghost.can_reenter_corpse = can_reenter_corpse
|
||||||
ghost.timeofdeath = src.stat == DEAD ? src.timeofdeath : world.time
|
ghost.timeofdeath = src.stat == DEAD ? src.timeofdeath : world.time
|
||||||
|
|
||||||
|
if(should_set_timer)
|
||||||
//This is duplicated for robustness in cases where death might not be called.
|
//This is duplicated for robustness in cases where death might not be called.
|
||||||
//It is also set in the mob/death proc
|
//It is also set in the mob/death proc
|
||||||
if (isanimal(src))
|
if (isanimal(src))
|
||||||
set_death_time(ANIMAL, world.time)
|
set_death_time(ANIMAL, world.time)
|
||||||
else if (ispAI(src) || isDrone(src))
|
else if (ispAI(src) || isDrone(src))
|
||||||
set_death_time(MINISYNTH, world.time)
|
set_death_time(MINISYNTH, world.time)
|
||||||
else
|
else
|
||||||
set_death_time(CREW, world.time)//Crew is the fallback
|
set_death_time(CREW, world.time)//Crew is the fallback
|
||||||
|
|
||||||
|
|
||||||
ghost.ckey = ckey
|
ghost.ckey = ckey
|
||||||
ghost.client = client
|
ghost.client = client
|
||||||
ghost.initialise_postkey()
|
ghost.initialise_postkey()
|
||||||
if(ghost.client)
|
if(ghost.client)
|
||||||
|
|
||||||
|
|
||||||
if(!ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
|
if(!ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
|
||||||
ghost.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
|
ghost.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
|
||||||
return ghost
|
return ghost
|
||||||
@@ -210,7 +207,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
|||||||
set desc = "Relinquish your life and enter the land of the dead."
|
set desc = "Relinquish your life and enter the land of the dead."
|
||||||
|
|
||||||
if(stat == DEAD)
|
if(stat == DEAD)
|
||||||
announce_ghost_joinleave(ghostize(1))
|
announce_ghost_joinleave(ghostize(1, 0))
|
||||||
else
|
else
|
||||||
var/response
|
var/response
|
||||||
if(check_rights((R_MOD|R_ADMIN), 0))
|
if(check_rights((R_MOD|R_ADMIN), 0))
|
||||||
|
|||||||
@@ -11,8 +11,6 @@
|
|||||||
mob_size = 9//Based on average weight of a human
|
mob_size = 9//Based on average weight of a human
|
||||||
|
|
||||||
/mob/living/carbon/human/Initialize(mapload, var/new_species = null)
|
/mob/living/carbon/human/Initialize(mapload, var/new_species = null)
|
||||||
eat_types |= TYPE_ORGANIC//Any mobs that are given the devour verb, can eat nonhumanoid organics. Only applies to unathi for now
|
|
||||||
|
|
||||||
if(!dna)
|
if(!dna)
|
||||||
dna = new /datum/dna(null)
|
dna = new /datum/dna(null)
|
||||||
// Species name is handled by set_species()
|
// Species name is handled by set_species()
|
||||||
|
|||||||
@@ -258,8 +258,6 @@ This saves us from having to call add_fingerprint() any time something is put in
|
|||||||
update_hair(redraw_mob) //rebuild hair
|
update_hair(redraw_mob) //rebuild hair
|
||||||
update_inv_ears(0)
|
update_inv_ears(0)
|
||||||
update_inv_wear_mask(0)
|
update_inv_wear_mask(0)
|
||||||
if(istype(W,/obj/item/clothing/head/kitty))
|
|
||||||
W.update_icon(src)
|
|
||||||
W.equipped(src, slot)
|
W.equipped(src, slot)
|
||||||
update_inv_head(redraw_mob)
|
update_inv_head(redraw_mob)
|
||||||
if(slot_shoes)
|
if(slot_shoes)
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
var/bodytype
|
var/bodytype
|
||||||
var/age_min = 17
|
var/age_min = 17
|
||||||
var/age_max = 85
|
var/age_max = 85
|
||||||
|
var/economic_modifier = 0
|
||||||
|
|
||||||
// Icon/appearance vars.
|
// Icon/appearance vars.
|
||||||
var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set.
|
var/icobase = 'icons/mob/human_races/r_human.dmi' // Normal icon set.
|
||||||
@@ -148,6 +149,7 @@
|
|||||||
|
|
||||||
var/gluttonous // Can eat some mobs. Boolean.
|
var/gluttonous // Can eat some mobs. Boolean.
|
||||||
var/mouth_size // How big the mob's mouth is. Limits how large a mob this species can swallow. Only relevant if gluttonous is TRUE.
|
var/mouth_size // How big the mob's mouth is. Limits how large a mob this species can swallow. Only relevant if gluttonous is TRUE.
|
||||||
|
var/allowed_eat_types = TYPE_ORGANIC
|
||||||
var/max_nutrition_factor = 1 //Multiplier on maximum nutrition
|
var/max_nutrition_factor = 1 //Multiplier on maximum nutrition
|
||||||
var/nutrition_loss_factor = 1 //Multiplier on passive nutrition losses
|
var/nutrition_loss_factor = 1 //Multiplier on passive nutrition losses
|
||||||
|
|
||||||
@@ -337,6 +339,7 @@
|
|||||||
H.pass_flags = pass_flags
|
H.pass_flags = pass_flags
|
||||||
H.mob_size = mob_size
|
H.mob_size = mob_size
|
||||||
H.mouth_size = mouth_size || 2
|
H.mouth_size = mouth_size || 2
|
||||||
|
H.eat_types = allowed_eat_types
|
||||||
if(!kpg)
|
if(!kpg)
|
||||||
if(islesserform(H))
|
if(islesserform(H))
|
||||||
H.dna.SetSEState(MONKEYBLOCK,1)
|
H.dna.SetSEState(MONKEYBLOCK,1)
|
||||||
|
|||||||
@@ -5,8 +5,15 @@
|
|||||||
name_plural = "Humans"
|
name_plural = "Humans"
|
||||||
bodytype = "Human"
|
bodytype = "Human"
|
||||||
age_max = 125
|
age_max = 125
|
||||||
|
economic_modifier = 12
|
||||||
|
|
||||||
primitive_form = "Monkey"
|
primitive_form = "Monkey"
|
||||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/punch, /datum/unarmed_attack/bite)
|
unarmed_types = list(
|
||||||
|
/datum/unarmed_attack/stomp,
|
||||||
|
/datum/unarmed_attack/kick,
|
||||||
|
/datum/unarmed_attack/punch,
|
||||||
|
/datum/unarmed_attack/bite
|
||||||
|
)
|
||||||
blurb = "Humanity originated in the Sol system, and over the last four centuries has spread colonies across a wide swathe of space. \
|
blurb = "Humanity originated in the Sol system, and over the last four centuries has spread colonies across a wide swathe of space. \
|
||||||
They hold a wide range of forms and creeds.<br><br>\
|
They hold a wide range of forms and creeds.<br><br>\
|
||||||
The Sol Alliance is still massively influential, but independent human nations have managed to shake off its dominance and forge their \
|
The Sol Alliance is still massively influential, but independent human nations have managed to shake off its dominance and forge their \
|
||||||
@@ -21,7 +28,7 @@
|
|||||||
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR | HAS_SOCKS
|
appearance_flags = HAS_HAIR_COLOR | HAS_SKIN_TONE | HAS_LIPS | HAS_UNDERWEAR | HAS_EYE_COLOR | HAS_SOCKS
|
||||||
remains_type = /obj/effect/decal/remains/human
|
remains_type = /obj/effect/decal/remains/human
|
||||||
|
|
||||||
stamina = 130 // Humans can sprint for longer than any other species
|
stamina = 130 // Humans can sprint for longer than any other species
|
||||||
stamina_recovery = 5
|
stamina_recovery = 5
|
||||||
sprint_speed_factor = 0.9
|
sprint_speed_factor = 0.9
|
||||||
sprint_cost_factor = 0.5
|
sprint_cost_factor = 0.5
|
||||||
@@ -35,7 +42,12 @@
|
|||||||
deform = 'icons/mob/human_races/r_def_lizard.dmi'
|
deform = 'icons/mob/human_races/r_def_lizard.dmi'
|
||||||
tail = "sogtail"
|
tail = "sogtail"
|
||||||
tail_animation = 'icons/mob/species/unathi/tail.dmi'
|
tail_animation = 'icons/mob/species/unathi/tail.dmi'
|
||||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
|
unarmed_types = list(
|
||||||
|
/datum/unarmed_attack/stomp,
|
||||||
|
/datum/unarmed_attack/kick,
|
||||||
|
/datum/unarmed_attack/claws,
|
||||||
|
/datum/unarmed_attack/bite/sharp
|
||||||
|
)
|
||||||
primitive_form = "Stok"
|
primitive_form = "Stok"
|
||||||
darksight = 3
|
darksight = 3
|
||||||
gluttonous = 1
|
gluttonous = 1
|
||||||
@@ -44,6 +56,7 @@
|
|||||||
fall_mod = 1.2
|
fall_mod = 1.2
|
||||||
ethanol_resistance = 0.4
|
ethanol_resistance = 0.4
|
||||||
taste_sensitivity = TASTE_SENSITIVE
|
taste_sensitivity = TASTE_SENSITIVE
|
||||||
|
economic_modifier = 7
|
||||||
|
|
||||||
num_alternate_languages = 2
|
num_alternate_languages = 2
|
||||||
secondary_langs = list(LANGUAGE_UNATHI, LANGUAGE_AZAZIBA)
|
secondary_langs = list(LANGUAGE_UNATHI, LANGUAGE_AZAZIBA)
|
||||||
@@ -74,8 +87,8 @@
|
|||||||
heat_level_3 = 1100 //Default 1000
|
heat_level_3 = 1100 //Default 1000
|
||||||
|
|
||||||
inherent_verbs = list(
|
inherent_verbs = list(
|
||||||
/mob/living/proc/devour,
|
/mob/living/proc/devour,
|
||||||
/mob/living/carbon/human/proc/regurgitate
|
/mob/living/carbon/human/proc/regurgitate
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -110,13 +123,18 @@
|
|||||||
/datum/species/tajaran
|
/datum/species/tajaran
|
||||||
name = "Tajara"
|
name = "Tajara"
|
||||||
short_name = "taj"
|
short_name = "taj"
|
||||||
name_plural = "Tajaran"
|
name_plural = "Tajara"
|
||||||
bodytype = "Tajara"
|
bodytype = "Tajara"
|
||||||
icobase = 'icons/mob/human_races/r_tajaran.dmi'
|
icobase = 'icons/mob/human_races/r_tajaran.dmi'
|
||||||
deform = 'icons/mob/human_races/r_def_tajaran.dmi'
|
deform = 'icons/mob/human_races/r_def_tajaran.dmi'
|
||||||
tail = "tajtail"
|
tail = "tajtail"
|
||||||
tail_animation = 'icons/mob/species/tajaran/tail.dmi'
|
tail_animation = 'icons/mob/species/tajaran/tail.dmi'
|
||||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
|
unarmed_types = list(
|
||||||
|
/datum/unarmed_attack/stomp,
|
||||||
|
/datum/unarmed_attack/kick,
|
||||||
|
/datum/unarmed_attack/claws,
|
||||||
|
/datum/unarmed_attack/bite/sharp
|
||||||
|
)
|
||||||
darksight = 8
|
darksight = 8
|
||||||
slowdown = -1
|
slowdown = -1
|
||||||
brute_mod = 1.2
|
brute_mod = 1.2
|
||||||
@@ -126,8 +144,9 @@
|
|||||||
name_language = LANGUAGE_SIIK_MAAS
|
name_language = LANGUAGE_SIIK_MAAS
|
||||||
ethanol_resistance = 0.8//Gets drunk a little faster
|
ethanol_resistance = 0.8//Gets drunk a little faster
|
||||||
rarity_value = 2
|
rarity_value = 2
|
||||||
|
economic_modifier = 7
|
||||||
|
|
||||||
stamina = 90 // Tajarans evolved to maintain a steady pace in the snow, sprinting wastes energy
|
stamina = 90 // Tajara evolved to maintain a steady pace in the snow, sprinting wastes energy
|
||||||
stamina_recovery = 4
|
stamina_recovery = 4
|
||||||
sprint_speed_factor = 0.65
|
sprint_speed_factor = 0.65
|
||||||
sprint_cost_factor = 0.75
|
sprint_cost_factor = 0.75
|
||||||
@@ -160,7 +179,7 @@
|
|||||||
"Your fur prickles in the heat.",
|
"Your fur prickles in the heat.",
|
||||||
"You feel uncomfortably warm.",
|
"You feel uncomfortably warm.",
|
||||||
"Your overheated skin itches."
|
"Your overheated skin itches."
|
||||||
)
|
)
|
||||||
cold_discomfort_level = 275
|
cold_discomfort_level = 275
|
||||||
|
|
||||||
/datum/species/tajaran/equip_survival_gear(var/mob/living/carbon/human/H)
|
/datum/species/tajaran/equip_survival_gear(var/mob/living/carbon/human/H)
|
||||||
@@ -175,6 +194,7 @@
|
|||||||
name_plural = "Skrell"
|
name_plural = "Skrell"
|
||||||
bodytype = "Skrell"
|
bodytype = "Skrell"
|
||||||
age_max = 500
|
age_max = 500
|
||||||
|
economic_modifier = 10
|
||||||
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
icobase = 'icons/mob/human_races/r_skrell.dmi'
|
||||||
deform = 'icons/mob/human_races/r_def_skrell.dmi'
|
deform = 'icons/mob/human_races/r_def_skrell.dmi'
|
||||||
eyes = "skrell_eyes_s"
|
eyes = "skrell_eyes_s"
|
||||||
@@ -215,21 +235,25 @@
|
|||||||
ethanol_resistance = 0.5//gets drunk faster
|
ethanol_resistance = 0.5//gets drunk faster
|
||||||
taste_sensitivity = TASTE_SENSITIVE
|
taste_sensitivity = TASTE_SENSITIVE
|
||||||
|
|
||||||
stamina = 90
|
stamina = 90
|
||||||
sprint_speed_factor = 1.25 //Evolved for rapid escapes from predators
|
sprint_speed_factor = 1.25 //Evolved for rapid escapes from predators
|
||||||
|
|
||||||
|
|
||||||
/datum/species/diona
|
/datum/species/diona
|
||||||
name = "Diona"
|
name = "Diona"
|
||||||
short_name = "dio"
|
short_name = "dio"
|
||||||
name_plural = "Dionaea"
|
name_plural = "Dionaea"
|
||||||
bodytype = "Diona"
|
bodytype = "Diona"
|
||||||
age_max = 1000
|
age_max = 1000
|
||||||
|
economic_modifier = 3
|
||||||
icobase = 'icons/mob/human_races/r_diona.dmi'
|
icobase = 'icons/mob/human_races/r_diona.dmi'
|
||||||
deform = 'icons/mob/human_races/r_def_plant.dmi'
|
deform = 'icons/mob/human_races/r_def_plant.dmi'
|
||||||
language = "Ceti Basic"
|
language = "Ceti Basic"
|
||||||
default_language = LANGUAGE_ROOTSONG
|
default_language = LANGUAGE_ROOTSONG
|
||||||
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/diona)
|
unarmed_types = list(
|
||||||
|
/datum/unarmed_attack/stomp,
|
||||||
|
/datum/unarmed_attack/kick,
|
||||||
|
/datum/unarmed_attack/diona
|
||||||
|
)
|
||||||
//primitive_form = "Nymph"
|
//primitive_form = "Nymph"
|
||||||
slowdown = 7
|
slowdown = 7
|
||||||
rarity_value = 4
|
rarity_value = 4
|
||||||
@@ -239,9 +263,9 @@
|
|||||||
show_ssd = "completely quiescent"
|
show_ssd = "completely quiescent"
|
||||||
num_alternate_languages = 1
|
num_alternate_languages = 1
|
||||||
name_language = "Rootsong"
|
name_language = "Rootsong"
|
||||||
ethanol_resistance = -1//Can't get drunk
|
ethanol_resistance = -1 //Can't get drunk
|
||||||
taste_sensitivity = TASTE_DULL
|
taste_sensitivity = TASTE_DULL
|
||||||
mob_size = 12//Worker gestalts are 150kg
|
mob_size = 12 //Worker gestalts are 150kg
|
||||||
remains_type = /obj/effect/decal/cleanable/ash //no bones, so, they just turn into dust
|
remains_type = /obj/effect/decal/cleanable/ash //no bones, so, they just turn into dust
|
||||||
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
|
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
|
||||||
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
|
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
|
||||||
@@ -252,13 +276,13 @@
|
|||||||
water and other radiation."
|
water and other radiation."
|
||||||
|
|
||||||
has_organ = list(
|
has_organ = list(
|
||||||
"nutrient channel" = /obj/item/organ/diona/nutrients,
|
"nutrient channel" = /obj/item/organ/diona/nutrients,
|
||||||
"neural strata" = /obj/item/organ/diona/strata,
|
"neural strata" = /obj/item/organ/diona/strata,
|
||||||
"response node" = /obj/item/organ/diona/node,
|
"response node" = /obj/item/organ/diona/node,
|
||||||
"gas bladder" = /obj/item/organ/diona/bladder,
|
"gas bladder" = /obj/item/organ/diona/bladder,
|
||||||
"polyp segment" = /obj/item/organ/diona/polyp,
|
"polyp segment" = /obj/item/organ/diona/polyp,
|
||||||
"anchoring ligament" = /obj/item/organ/diona/ligament
|
"anchoring ligament" = /obj/item/organ/diona/ligament
|
||||||
)
|
)
|
||||||
|
|
||||||
has_limbs = list(
|
has_limbs = list(
|
||||||
"chest" = list("path" = /obj/item/organ/external/chest/diona),
|
"chest" = list("path" = /obj/item/organ/external/chest/diona),
|
||||||
@@ -272,7 +296,7 @@
|
|||||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right/diona),
|
"r_hand" = list("path" = /obj/item/organ/external/hand/right/diona),
|
||||||
"l_foot" = list("path" = /obj/item/organ/external/foot/diona),
|
"l_foot" = list("path" = /obj/item/organ/external/foot/diona),
|
||||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/diona)
|
"r_foot" = list("path" = /obj/item/organ/external/foot/right/diona)
|
||||||
)
|
)
|
||||||
|
|
||||||
//inherent_verbs = list()
|
//inherent_verbs = list()
|
||||||
|
|
||||||
@@ -298,8 +322,8 @@
|
|||||||
|
|
||||||
reagent_tag = IS_DIONA
|
reagent_tag = IS_DIONA
|
||||||
|
|
||||||
stamina = -1 // Diona sprinting uses energy instead of stamina
|
stamina = -1 // Diona sprinting uses energy instead of stamina
|
||||||
sprint_speed_factor = 0.5 //Speed gained is minor
|
sprint_speed_factor = 0.5 //Speed gained is minor
|
||||||
sprint_cost_factor = 0.8
|
sprint_cost_factor = 0.8
|
||||||
|
|
||||||
/datum/species/diona/handle_sprint_cost(var/mob/living/carbon/H, var/cost)
|
/datum/species/diona/handle_sprint_cost(var/mob/living/carbon/H, var/cost)
|
||||||
@@ -331,8 +355,6 @@
|
|||||||
H << span("danger", "We have expended our energy reserves, and cannot continue to move at such a pace. We must find light!")
|
H << span("danger", "We have expended our energy reserves, and cannot continue to move at such a pace. We must find light!")
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/datum/species/diona/can_understand(var/mob/other)
|
/datum/species/diona/can_understand(var/mob/other)
|
||||||
var/mob/living/carbon/alien/diona/D = other
|
var/mob/living/carbon/alien/diona/D = other
|
||||||
if(istype(D))
|
if(istype(D))
|
||||||
@@ -360,7 +382,6 @@
|
|||||||
else//Most of the stuff in the parent function doesnt apply to nymphs
|
else//Most of the stuff in the parent function doesnt apply to nymphs
|
||||||
add_inherent_verbs(H)
|
add_inherent_verbs(H)
|
||||||
|
|
||||||
|
|
||||||
/datum/species/diona/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0)
|
/datum/species/diona/handle_death(var/mob/living/carbon/human/H, var/gibbed = 0)
|
||||||
if (!gibbed)
|
if (!gibbed)
|
||||||
// This proc sleeps. Async it.
|
// This proc sleeps. Async it.
|
||||||
@@ -374,6 +395,7 @@
|
|||||||
bodytype = "Machine"
|
bodytype = "Machine"
|
||||||
age_min = 1
|
age_min = 1
|
||||||
age_max = 30
|
age_max = 30
|
||||||
|
economic_modifier = 3
|
||||||
|
|
||||||
blurb = "IPCs are, quite simply, 'Integrated Positronic Chassis'. In this scenario, positronic does not mean anything significant - it is a nickname given \
|
blurb = "IPCs are, quite simply, 'Integrated Positronic Chassis'. In this scenario, positronic does not mean anything significant - it is a nickname given \
|
||||||
to all advanced processing units, based on the works of vintage writer Isaac Asimov. The long of the short is that they represent all unbound synthetic \
|
to all advanced processing units, based on the works of vintage writer Isaac Asimov. The long of the short is that they represent all unbound synthetic \
|
||||||
@@ -434,11 +456,11 @@
|
|||||||
reagent_tag = IS_MACHINE
|
reagent_tag = IS_MACHINE
|
||||||
|
|
||||||
has_organ = list(
|
has_organ = list(
|
||||||
"brain" = /obj/item/organ/mmi_holder/posibrain,
|
"brain" = /obj/item/organ/mmi_holder/posibrain,
|
||||||
"cell" = /obj/item/organ/cell,
|
"cell" = /obj/item/organ/cell,
|
||||||
"optics" = /obj/item/organ/eyes/optical_sensor,
|
"optics" = /obj/item/organ/eyes/optical_sensor,
|
||||||
"ipc tag" = /obj/item/organ/ipc_tag
|
"ipc tag" = /obj/item/organ/ipc_tag
|
||||||
)
|
)
|
||||||
|
|
||||||
vision_organ = "optics"
|
vision_organ = "optics"
|
||||||
|
|
||||||
@@ -454,15 +476,15 @@
|
|||||||
"r_hand" = list("path" = /obj/item/organ/external/hand/right/ipc),
|
"r_hand" = list("path" = /obj/item/organ/external/hand/right/ipc),
|
||||||
"l_foot" = list("path" = /obj/item/organ/external/foot/ipc),
|
"l_foot" = list("path" = /obj/item/organ/external/foot/ipc),
|
||||||
"r_foot" = list("path" = /obj/item/organ/external/foot/right/ipc)
|
"r_foot" = list("path" = /obj/item/organ/external/foot/right/ipc)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
heat_discomfort_level = 373.15
|
heat_discomfort_level = 373.15
|
||||||
heat_discomfort_strings = list(
|
heat_discomfort_strings = list(
|
||||||
"Your CPU temperature probes warn you that you are approaching critical heat levels!"
|
"Your CPU temperature probes warn you that you are approaching critical heat levels!"
|
||||||
)
|
)
|
||||||
stamina = -1 // Machines use power and generate heat, stamina is not a thing
|
stamina = -1 // Machines use power and generate heat, stamina is not a thing
|
||||||
sprint_speed_factor = 1 // About as capable of speed as a human
|
sprint_speed_factor = 1 // About as capable of speed as a human
|
||||||
|
|
||||||
// Special snowflake machine vars.
|
// Special snowflake machine vars.
|
||||||
var/sprint_temperature_factor = 1.15
|
var/sprint_temperature_factor = 1.15
|
||||||
@@ -503,7 +525,7 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
|
|||||||
|
|
||||||
var/obj/item/organ/ipc_tag/tag = new_machine.internal_organs_by_name["ipc tag"]
|
var/obj/item/organ/ipc_tag/tag = new_machine.internal_organs_by_name["ipc tag"]
|
||||||
|
|
||||||
var/status = 0
|
var/status = TRUE
|
||||||
var/list/query_details = list("ckey" = player.ckey, "character_name" = player.prefs.real_name)
|
var/list/query_details = list("ckey" = player.ckey, "character_name" = player.prefs.real_name)
|
||||||
var/DBQuery/query = dbcon.NewQuery("SELECT tag_status FROM ss13_ipc_tracking WHERE player_ckey = :ckey: AND character_name = :character_name:")
|
var/DBQuery/query = dbcon.NewQuery("SELECT tag_status FROM ss13_ipc_tracking WHERE player_ckey = :ckey: AND character_name = :character_name:")
|
||||||
query.Execute(query_details)
|
query.Execute(query_details)
|
||||||
@@ -511,12 +533,12 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
|
|||||||
if (query.NextRow())
|
if (query.NextRow())
|
||||||
status = text2num(query.item[1])
|
status = text2num(query.item[1])
|
||||||
else
|
else
|
||||||
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO ss13_ipc_tracking (player_ckey, character_name) VALUES (:ckey:, :character_name:)")
|
var/DBQuery/log_query = dbcon.NewQuery("INSERT INTO ss13_ipc_tracking (player_ckey, character_name, tag_status) VALUES (:ckey:, :character_name:, 1)")
|
||||||
log_query.Execute(query_details)
|
log_query.Execute(query_details)
|
||||||
|
|
||||||
if (!status)
|
if (!status)
|
||||||
new_machine.internal_organs_by_name.Remove("ipc tag")
|
new_machine.internal_organs_by_name -= "ipc tag"
|
||||||
new_machine.internal_organs.Remove(tag)
|
new_machine.internal_organs -= tag
|
||||||
qdel(tag)
|
qdel(tag)
|
||||||
|
|
||||||
/datum/species/machine/proc/update_tag(var/mob/living/carbon/human/target, var/client/player)
|
/datum/species/machine/proc/update_tag(var/mob/living/carbon/human/target, var/client/player)
|
||||||
@@ -524,10 +546,10 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
|
|||||||
return
|
return
|
||||||
|
|
||||||
if (establish_db_connection(dbcon))
|
if (establish_db_connection(dbcon))
|
||||||
var/status = 0
|
var/status = FALSE
|
||||||
var/sql_status = 0
|
var/sql_status = FALSE
|
||||||
if (target.internal_organs_by_name["ipc tag"])
|
if (target.internal_organs_by_name["ipc tag"])
|
||||||
status = 1
|
status = TRUE
|
||||||
|
|
||||||
var/list/query_details = list("ckey" = player.ckey, "character_name" = target.real_name)
|
var/list/query_details = list("ckey" = player.ckey, "character_name" = target.real_name)
|
||||||
var/DBQuery/query = dbcon.NewQuery("SELECT tag_status FROM ss13_ipc_tracking WHERE player_ckey = :ckey: AND character_name = :character_name:")
|
var/DBQuery/query = dbcon.NewQuery("SELECT tag_status FROM ss13_ipc_tracking WHERE player_ckey = :ckey: AND character_name = :character_name:")
|
||||||
@@ -602,6 +624,7 @@ datum/species/machine/handle_post_spawn(var/mob/living/carbon/human/H)
|
|||||||
bodytype = "Vaurca"
|
bodytype = "Vaurca"
|
||||||
age_min = 1
|
age_min = 1
|
||||||
age_max = 20
|
age_max = 20
|
||||||
|
economic_modifier = 1
|
||||||
language = LANGUAGE_VAURCA
|
language = LANGUAGE_VAURCA
|
||||||
primitive_form = "V'krexi"
|
primitive_form = "V'krexi"
|
||||||
greater_form = "Vaurca Warrior"
|
greater_form = "Vaurca Warrior"
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
siemens_coefficient = 0
|
siemens_coefficient = 0
|
||||||
gluttonous = TRUE
|
gluttonous = TRUE
|
||||||
mouth_size = 15 // Should be larger than any human-type.
|
mouth_size = 15 // Should be larger than any human-type.
|
||||||
|
allowed_eat_types = TYPE_ORGANIC | TYPE_SYNTHETIC | TYPE_HUMANOID
|
||||||
mob_size = 14
|
mob_size = 14
|
||||||
fall_mod = 0
|
fall_mod = 0
|
||||||
|
|
||||||
|
|||||||
@@ -181,7 +181,7 @@
|
|||||||
M.adjustBruteLoss(round(dmg_factor * 0.33, 0.1) || 0.1)
|
M.adjustBruteLoss(round(dmg_factor * 0.33, 0.1) || 0.1)
|
||||||
M.adjustFireLoss(round(dmg_factor * 0.66, 0.1) || 0.1)
|
M.adjustFireLoss(round(dmg_factor * 0.66, 0.1) || 0.1)
|
||||||
|
|
||||||
ingested.add_reagent(M.composition_reagent, M.composition_reagent_quantity * 1/dmg_factor)
|
ingested.add_reagent(M.composition_reagent, M.composition_reagent_quantity * dmg_factor)
|
||||||
|
|
||||||
if (M.stat == DEAD && !stomach_contents[M]) // If the mob has died, poke the consuming mob about it.
|
if (M.stat == DEAD && !stomach_contents[M]) // If the mob has died, poke the consuming mob about it.
|
||||||
src << "Your stomach feels a little more relaxed as \the [M] finally stops fighting."
|
src << "Your stomach feels a little more relaxed as \the [M] finally stops fighting."
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
set name = "Devour Creature"
|
set name = "Devour Creature"
|
||||||
set desc = "Attempt to eat a nearby creature, swallowing it whole if small enough, or eating it piece by piece otherwise"
|
set desc = "Attempt to eat a nearby creature, swallowing it whole if small enough, or eating it piece by piece otherwise"
|
||||||
var/list/choices = list()
|
var/list/choices = list()
|
||||||
|
|
||||||
for(var/mob/living/C in view(1,src))
|
for(var/mob/living/C in view(1,src))
|
||||||
|
|
||||||
if((!(src.Adjacent(C)) || C == src)) continue//cant steal nymphs right out of other gestalts
|
if((!(src.Adjacent(C)) || C == src)) continue//cant steal nymphs right out of other gestalts
|
||||||
@@ -26,7 +27,11 @@
|
|||||||
var/mob/living/carbon/alien/diona/D = C
|
var/mob/living/carbon/alien/diona/D = C
|
||||||
if (D.gestalt)
|
if (D.gestalt)
|
||||||
continue
|
continue
|
||||||
choices.Add(C)
|
|
||||||
|
if (C in src) // Just no.
|
||||||
|
continue
|
||||||
|
|
||||||
|
choices += C
|
||||||
|
|
||||||
var/mob/living/L = input(src,"Which creature do you wish to consume?") in null|choices
|
var/mob/living/L = input(src,"Which creature do you wish to consume?") in null|choices
|
||||||
|
|
||||||
|
|||||||
@@ -155,7 +155,7 @@ var/list/datum/ai_icon/ai_icons
|
|||||||
alive_icon = "ai-hades"
|
alive_icon = "ai-hades"
|
||||||
dead_icon = "ai-hades_dead"
|
dead_icon = "ai-hades_dead"
|
||||||
|
|
||||||
/datum/ai_icon/triumvirate_static
|
/datum/ai_icon/triumvirate
|
||||||
name = "Triumvirate"
|
name = "Triumvirate"
|
||||||
alive_icon = "ai-triumvirate"
|
alive_icon = "ai-triumvirate"
|
||||||
alive_light = "#020B2B"
|
alive_light = "#020B2B"
|
||||||
|
|||||||
@@ -208,7 +208,7 @@
|
|||||||
return alert("Communications circuits remain uninitialized.")
|
return alert("Communications circuits remain uninitialized.")
|
||||||
|
|
||||||
var/target = locate(href_list["target"])
|
var/target = locate(href_list["target"])
|
||||||
P.pda.create_message(P, target, 1)
|
P.pda.create_message(P, target, 0)
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
/datum/pai_software/med_records
|
/datum/pai_software/med_records
|
||||||
|
|||||||
@@ -615,7 +615,7 @@ var/global/list/robot_modules = list(
|
|||||||
"Kent" = "toiletbot",
|
"Kent" = "toiletbot",
|
||||||
"Bro" = "brobot",
|
"Bro" = "brobot",
|
||||||
"Rich" = "maximillion",
|
"Rich" = "maximillion",
|
||||||
"Basic" = "robotserv",
|
"Basic" = "robotServ",
|
||||||
"Drone - Service" = "drone-service",
|
"Drone - Service" = "drone-service",
|
||||||
"Drone - Hydro" = "drone-hydro",
|
"Drone - Hydro" = "drone-hydro",
|
||||||
"Classic" = "service2",
|
"Classic" = "service2",
|
||||||
|
|||||||
@@ -35,6 +35,9 @@
|
|||||||
if (eyeobj)
|
if (eyeobj)
|
||||||
return eyeobj.zMove(direction)
|
return eyeobj.zMove(direction)
|
||||||
|
|
||||||
|
if (istype(src.loc,/obj/mecha))
|
||||||
|
return FALSE
|
||||||
|
|
||||||
// Check if we can actually travel a Z-level.
|
// Check if we can actually travel a Z-level.
|
||||||
if (!can_ztravel(direction))
|
if (!can_ztravel(direction))
|
||||||
to_chat(src, "<span class='warning'>You lack means of travel in that direction.</span>")
|
to_chat(src, "<span class='warning'>You lack means of travel in that direction.</span>")
|
||||||
|
|||||||
@@ -145,7 +145,7 @@
|
|||||||
return
|
return
|
||||||
|
|
||||||
if (user.a_intent == I_HELP && old_name && icon_state == "paper_plane")
|
if (user.a_intent == I_HELP && old_name && icon_state == "paper_plane")
|
||||||
user.visible_message(span("notice", "the [src] unfolds \the [src]."), span("notice", "You unfold \the [src]."), "You hear paper rustling.")
|
user.visible_message(span("notice", "\The [user] unfolds \the [src]."), span("notice", "You unfold \the [src]."), "You hear paper rustling.")
|
||||||
icon_state = initial(icon_state)
|
icon_state = initial(icon_state)
|
||||||
throw_range = initial(throw_range)
|
throw_range = initial(throw_range)
|
||||||
name = old_name
|
name = old_name
|
||||||
|
|||||||
@@ -3,9 +3,8 @@
|
|||||||
icon_state = "lawgiver"
|
icon_state = "lawgiver"
|
||||||
item_state = "gun"
|
item_state = "gun"
|
||||||
origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 5)
|
origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 5)
|
||||||
projectile_type=/obj/item/projectile/bullet/pistol
|
|
||||||
fire_sound='sound/weapons/Gunshot_smg.ogg'
|
|
||||||
sel_mode = 1
|
sel_mode = 1
|
||||||
|
var/mode_check = 1
|
||||||
desc = "A highly advanced firearm for the modern police force. It has multiple voice-activated firing modes."
|
desc = "A highly advanced firearm for the modern police force. It has multiple voice-activated firing modes."
|
||||||
var/dna = null//dna-locking the firearm
|
var/dna = null//dna-locking the firearm
|
||||||
var/emagged = 0 //if the gun is emagged or not
|
var/emagged = 0 //if the gun is emagged or not
|
||||||
@@ -18,56 +17,97 @@
|
|||||||
|
|
||||||
firemodes = list(
|
firemodes = list(
|
||||||
list(
|
list(
|
||||||
mode_name="singleshot",
|
mode_name = "singleshot",
|
||||||
charge_cost=50,
|
charge_cost = 50,
|
||||||
fire_delay=3,
|
fire_delay = 3,
|
||||||
recoil=1
|
recoil = 1,
|
||||||
|
burst = null,
|
||||||
|
move_delay = null,
|
||||||
|
accuracy = null,
|
||||||
|
dispersion = null,
|
||||||
|
projectile_type = /obj/item/projectile/bullet/pistol,
|
||||||
|
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
|
||||||
),
|
),
|
||||||
list(
|
list(
|
||||||
mode_name="rapidfire",
|
mode_name = "rapidfire",
|
||||||
charge_cost=150,
|
charge_cost = 150,
|
||||||
fire_delay=3,
|
fire_delay = 3,
|
||||||
recoil=1,
|
recoil = 1,
|
||||||
burst=3,
|
burst = 3,
|
||||||
move_delay=4,
|
move_delay = 4,
|
||||||
accuracy = list(0,-1,-1,-2,-2),
|
accuracy = list(0,-1,-1,-2,-2),
|
||||||
dispersion = list(0.0, 0.6, 1.0)
|
dispersion = list(0.0, 0.6, 1.0),
|
||||||
|
projectile_type = /obj/item/projectile/bullet/pistol,
|
||||||
|
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
|
||||||
),
|
),
|
||||||
list(
|
list(
|
||||||
mode_name="highex",
|
mode_name = "highex",
|
||||||
charge_cost=300,
|
charge_cost = 400,
|
||||||
fire_delay=6,
|
fire_delay = 6,
|
||||||
recoil=3
|
recoil = 3,
|
||||||
|
burst = null,
|
||||||
|
move_delay = null,
|
||||||
|
accuracy = null,
|
||||||
|
dispersion = null,
|
||||||
|
projectile_type = /obj/item/projectile/bullet/gyro/law,
|
||||||
|
fire_sound = 'sound/effects/Explosion1.ogg'
|
||||||
),
|
),
|
||||||
list(
|
list(
|
||||||
mode_name="stun",
|
mode_name = "stun",
|
||||||
charge_cost=50,
|
charge_cost = 50,
|
||||||
fire_delay=4,
|
fire_delay = 4,
|
||||||
recoil=0
|
recoil = 0,
|
||||||
|
burst = null,
|
||||||
|
move_delay = null,
|
||||||
|
accuracy = null,
|
||||||
|
dispersion = null,
|
||||||
|
projectile_type = /obj/item/projectile/beam/stun,
|
||||||
|
fire_sound = 'sound/weapons/Taser.ogg'
|
||||||
),
|
),
|
||||||
list(
|
list(
|
||||||
mode_name="hotshot",
|
mode_name = "hotshot",
|
||||||
charge_cost=200,
|
charge_cost = 250,
|
||||||
fire_delay=4,
|
fire_delay = 4,
|
||||||
recoil=3
|
recoil = 3,
|
||||||
|
burst = null,
|
||||||
|
move_delay = null,
|
||||||
|
accuracy = null,
|
||||||
|
dispersion = null,
|
||||||
|
projectile_type = /obj/item/projectile/bullet/shotgun/incendiary,
|
||||||
|
fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||||
),
|
),
|
||||||
list(
|
list(
|
||||||
mode_name="armorpiercing",
|
mode_name = "armorpiercing",
|
||||||
charge_cost=300,
|
charge_cost = 130,
|
||||||
fire_delay=6,
|
fire_delay = 6,
|
||||||
recoil=3
|
recoil = 3,
|
||||||
|
burst = null,
|
||||||
|
move_delay = null,
|
||||||
|
accuracy = null,
|
||||||
|
dispersion = null,
|
||||||
|
projectile_type = /obj/item/projectile/bullet/rifle/a556,
|
||||||
|
fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||||
),
|
),
|
||||||
list(
|
list(
|
||||||
mode_name="pellets",
|
mode_name = "pellets",
|
||||||
charge_cost=300,
|
charge_cost = 250,
|
||||||
fire_delay=6,
|
fire_delay = 6,
|
||||||
recoil=3
|
recoil = 3,
|
||||||
|
burst = null,
|
||||||
|
move_delay = null,
|
||||||
|
accuracy = null,
|
||||||
|
dispersion = null,
|
||||||
|
projectile_type = /obj/item/projectile/bullet/pellet/shotgun,
|
||||||
|
fire_sound = 'sound/weapons/Gunshot.ogg'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
/obj/item/weapon/gun/energy/lawgiver/Initialize()
|
/obj/item/weapon/gun/energy/lawgiver/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
listening_objects += src
|
listening_objects += src
|
||||||
|
power_supply = new /obj/item/weapon/cell/device/variable(src, 2000)
|
||||||
|
var/datum/firemode/new_mode = firemodes[sel_mode]
|
||||||
|
new_mode.apply_to(src)
|
||||||
|
|
||||||
/obj/item/weapon/gun/energy/lawgiver/Destroy()
|
/obj/item/weapon/gun/energy/lawgiver/Destroy()
|
||||||
listening_objects -= src
|
listening_objects -= src
|
||||||
@@ -138,38 +178,24 @@
|
|||||||
/* Firing Modes*/
|
/* Firing Modes*/
|
||||||
if(findtext(msg,"single"))
|
if(findtext(msg,"single"))
|
||||||
sel_mode = 1
|
sel_mode = 1
|
||||||
projectile_type=/obj/item/projectile/bullet/pistol
|
|
||||||
fire_sound='sound/weapons/Gunshot_smg.ogg'
|
|
||||||
usr << "<span class='warning'>[src.name] is now set to single shot mode.</span>"
|
usr << "<span class='warning'>[src.name] is now set to single shot mode.</span>"
|
||||||
else if(findtext(msg,"rapidfire"))
|
else if(findtext(msg,"rapidfire"))
|
||||||
sel_mode = 2
|
sel_mode = 2
|
||||||
projectile_type=/obj/item/projectile/bullet/pistol
|
|
||||||
fire_sound='sound/weapons/Gunshot_smg.ogg'
|
|
||||||
usr << "<span class='warning'>[src.name] is now set to rapid fire mode.</span>"
|
usr << "<span class='warning'>[src.name] is now set to rapid fire mode.</span>"
|
||||||
else if(findtext(msg,"highex") || findtext(msg,"grenade"))
|
else if(findtext(msg,"highex") || findtext(msg,"grenade"))
|
||||||
sel_mode = 3
|
sel_mode = 3
|
||||||
projectile_type=/obj/item/projectile/bullet/gyro/law
|
|
||||||
fire_sound='sound/effects/Explosion1.ogg'
|
|
||||||
usr << "<span class='warning'>[src.name] is now set to high explosive mode.</span>"
|
usr << "<span class='warning'>[src.name] is now set to high explosive mode.</span>"
|
||||||
else if(findtext(msg,"stun"))
|
else if(findtext(msg,"stun"))
|
||||||
sel_mode = 4
|
sel_mode = 4
|
||||||
projectile_type=/obj/item/projectile/beam/stun
|
|
||||||
fire_sound='sound/weapons/Taser.ogg'
|
|
||||||
usr << "<span class='warning'>[src.name] is now set to stun mode.</span>"
|
usr << "<span class='warning'>[src.name] is now set to stun mode.</span>"
|
||||||
else if(findtext(msg,"hotshot") || findtext(msg,"incendiary"))
|
else if(findtext(msg,"hotshot") || findtext(msg,"incendiary"))
|
||||||
sel_mode = 5
|
sel_mode = 5
|
||||||
projectile_type=/obj/item/projectile/bullet/shotgun/incendiary
|
|
||||||
fire_sound='sound/weapons/Gunshot.ogg'
|
|
||||||
usr << "<span class='warning'>[src.name] is now set to incendiary mode.</span>"
|
usr << "<span class='warning'>[src.name] is now set to incendiary mode.</span>"
|
||||||
else if(findtext(msg,"armorpiercing") || findtext(msg,"execution"))
|
else if(findtext(msg,"armorpiercing") || findtext(msg,"execution"))
|
||||||
sel_mode = 6
|
sel_mode = 6
|
||||||
projectile_type=/obj/item/projectile/bullet/rifle/a556
|
|
||||||
fire_sound='sound/weapons/Gunshot.ogg'
|
|
||||||
usr << "<span class='warning'>[src.name] is now set to armorpiercing mode.</span>"
|
usr << "<span class='warning'>[src.name] is now set to armorpiercing mode.</span>"
|
||||||
else if(findtext(msg,"pellets"))
|
else if(findtext(msg,"pellets"))
|
||||||
sel_mode = 7
|
sel_mode = 7
|
||||||
projectile_type=/obj/item/projectile/bullet/pellet/shotgun
|
|
||||||
fire_sound='sound/weapons/Gunshot.ogg'
|
|
||||||
usr << "<span class='warning'>[src.name] is now set to pellet mode.</span>"
|
usr << "<span class='warning'>[src.name] is now set to pellet mode.</span>"
|
||||||
/* Other Stuff */
|
/* Other Stuff */
|
||||||
else if(findtext(msg,"reset") && (findtext(msg,"user") || findtext(msg,"dna")))
|
else if(findtext(msg,"reset") && (findtext(msg,"user") || findtext(msg,"dna")))
|
||||||
@@ -188,5 +214,8 @@
|
|||||||
message_enabled = 1
|
message_enabled = 1
|
||||||
message_disable = 0
|
message_disable = 0
|
||||||
play_message()
|
play_message()
|
||||||
else
|
|
||||||
return
|
if(mode_check != sel_mode)
|
||||||
|
var/datum/firemode/new_mode = firemodes[sel_mode]
|
||||||
|
new_mode.apply_to(src)
|
||||||
|
mode_check = sel_mode
|
||||||
|
|||||||
@@ -354,6 +354,9 @@
|
|||||||
|
|
||||||
/datum/reagent/nutriment/flour/touch_turf(var/turf/simulated/T)
|
/datum/reagent/nutriment/flour/touch_turf(var/turf/simulated/T)
|
||||||
if(!istype(T, /turf/space))
|
if(!istype(T, /turf/space))
|
||||||
|
if(locate(/obj/effect/decal/cleanable/flour) in T)
|
||||||
|
return
|
||||||
|
|
||||||
new /obj/effect/decal/cleanable/flour(T)
|
new /obj/effect/decal/cleanable/flour(T)
|
||||||
|
|
||||||
/datum/reagent/nutriment/coco
|
/datum/reagent/nutriment/coco
|
||||||
|
|||||||
@@ -38,6 +38,9 @@
|
|||||||
if(istype(target, /mob/living/carbon/human))
|
if(istype(target, /mob/living/carbon/human))
|
||||||
var/mob/living/carbon/human/victim = target
|
var/mob/living/carbon/human/victim = target
|
||||||
|
|
||||||
|
if(victim.isSynthetic())
|
||||||
|
return
|
||||||
|
|
||||||
var/obj/item/safe_thing = null
|
var/obj/item/safe_thing = null
|
||||||
if(victim.wear_mask)
|
if(victim.wear_mask)
|
||||||
if (victim.wear_mask.body_parts_covered & EYES)
|
if (victim.wear_mask.body_parts_covered & EYES)
|
||||||
|
|||||||
@@ -4351,7 +4351,7 @@
|
|||||||
filling_color = "#A8A8A8"
|
filling_color = "#A8A8A8"
|
||||||
center_of_mass = list("x"=16, "y"=15)
|
center_of_mass = list("x"=16, "y"=15)
|
||||||
nutriment_desc = list("chalk" = 3)
|
nutriment_desc = list("chalk" = 3)
|
||||||
nutriment_amt = 3
|
nutriment_amt = 10
|
||||||
|
|
||||||
/obj/item/weapon/reagent_containers/food/snacks/liquidfood/Initialize()
|
/obj/item/weapon/reagent_containers/food/snacks/liquidfood/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -29,8 +29,8 @@
|
|||||||
|
|
||||||
/obj/machinery/computer/centrifuge/update_icon()
|
/obj/machinery/computer/centrifuge/update_icon()
|
||||||
..()
|
..()
|
||||||
if(! (stat & (BROKEN|NOPOWER)) && (isolating || curing))
|
if(! (stat & (BROKEN|NOPOWER)))
|
||||||
icon_state = "centrifuge_moving"
|
icon_state = (isolating||curing ? "centrifuge_moving" : "centrifuge")
|
||||||
|
|
||||||
/obj/machinery/computer/centrifuge/attack_hand(var/mob/user as mob)
|
/obj/machinery/computer/centrifuge/attack_hand(var/mob/user as mob)
|
||||||
if(..()) return
|
if(..()) return
|
||||||
|
|||||||
@@ -56,6 +56,37 @@
|
|||||||
-->
|
-->
|
||||||
<div class="commit sansserif">
|
<div class="commit sansserif">
|
||||||
|
|
||||||
|
<h2 class="date">09 September 2017</h2>
|
||||||
|
<h3 class="author">Ezuo updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="bugfix">Fixed the long broken Lawgiver code. It will now function as intended, with different firemodes using different charge values.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2 class="date">06 September 2017</h2>
|
||||||
|
<h3 class="author">Skull132 updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="bugfix">Cameras will no longer lag the server to death whenever you click to jump to a turf that's outside the station.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2 class="date">05 September 2017</h2>
|
||||||
|
<h3 class="author">Lohikar updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="experiment">Storage code has been tweaked so ore bags should no longer take multiple seconds to fill/empty.</li>
|
||||||
|
<li class="tweak">The ore summoner should actually transport useful amounts of ore now.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2 class="date">27 August 2017</h2>
|
||||||
|
<h3 class="author">Printer16 updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="bugfix">Hunter killers can repair themselves now.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2 class="date">23 August 2017</h2>
|
||||||
|
<h3 class="author">Lohikar updated:</h3>
|
||||||
|
<ul class="changes bgimages16">
|
||||||
|
<li class="tweak">Nursing Intern has been renamed to Medical Resident.</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
<h2 class="date">15 August 2017</h2>
|
<h2 class="date">15 August 2017</h2>
|
||||||
<h3 class="author">Lohikar updated:</h3>
|
<h3 class="author">Lohikar updated:</h3>
|
||||||
<ul class="changes bgimages16">
|
<ul class="changes bgimages16">
|
||||||
|
|||||||
@@ -4534,3 +4534,22 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
|||||||
Lohikar:
|
Lohikar:
|
||||||
- bugfix: Vaurca now have two hearts and one set of lungs as was originally intended
|
- bugfix: Vaurca now have two hearts and one set of lungs as was originally intended
|
||||||
instead of three hearts and two sets of lungs.
|
instead of three hearts and two sets of lungs.
|
||||||
|
2017-08-23:
|
||||||
|
Lohikar:
|
||||||
|
- tweak: Nursing Intern has been renamed to Medical Resident.
|
||||||
|
2017-08-27:
|
||||||
|
Printer16:
|
||||||
|
- bugfix: Hunter killers can repair themselves now.
|
||||||
|
2017-09-05:
|
||||||
|
Lohikar:
|
||||||
|
- experiment: Storage code has been tweaked so ore bags should no longer take multiple
|
||||||
|
seconds to fill/empty.
|
||||||
|
- tweak: The ore summoner should actually transport useful amounts of ore now.
|
||||||
|
2017-09-06:
|
||||||
|
Skull132:
|
||||||
|
- bugfix: Cameras will no longer lag the server to death whenever you click to jump
|
||||||
|
to a turf that's outside the station.
|
||||||
|
2017-09-09:
|
||||||
|
Ezuo:
|
||||||
|
- bugfix: Fixed the long broken Lawgiver code. It will now function as intended,
|
||||||
|
with different firemodes using different charge values.
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
BIN
icons/obj/custom_items/birkin_uniform.dmi
Normal file
|
After Width: | Height: | Size: 870 B |
BIN
icons/obj/custom_items/ellie_uniform.dmi
Normal file
|
After Width: | Height: | Size: 701 B |
BIN
icons/obj/custom_items/hikmat_shoes.dmi
Normal file
|
After Width: | Height: | Size: 501 B |
BIN
icons/obj/custom_items/leonce_cognac.dmi
Normal file
|
After Width: | Height: | Size: 584 B |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 3.1 KiB |
BIN
icons/obj/custom_items/sonorous_clothing.dmi
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
BIN
icons/obj/custom_items/zhilin_necklace.dmi
Normal file
|
After Width: | Height: | Size: 678 B |
@@ -41323,13 +41323,13 @@
|
|||||||
dir = 10
|
dir = 10
|
||||||
},
|
},
|
||||||
/obj/effect/landmark/start{
|
/obj/effect/landmark/start{
|
||||||
name = "Nursing Intern"
|
name = "Medical Resident"
|
||||||
},
|
},
|
||||||
/turf/simulated/floor/tiled/white,
|
/turf/simulated/floor/tiled/white,
|
||||||
/area/medical/medbay2)
|
/area/medical/medbay2)
|
||||||
"btj" = (
|
"btj" = (
|
||||||
/obj/effect/landmark/start{
|
/obj/effect/landmark/start{
|
||||||
name = "Nursing Intern"
|
name = "Medical Resident"
|
||||||
},
|
},
|
||||||
/turf/simulated/floor/tiled/white,
|
/turf/simulated/floor/tiled/white,
|
||||||
/area/medical/medbay2)
|
/area/medical/medbay2)
|
||||||
|
|||||||