@@ -1,6 +1,6 @@
|
||||
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
|
||||
"aaa" = (
|
||||
/turf/open/space,
|
||||
/turf/open/space/basic,
|
||||
/area/space)
|
||||
"aab" = (
|
||||
/obj/docking_port/stationary{
|
||||
@@ -43163,6 +43163,10 @@
|
||||
},
|
||||
/obj/item/device/radio/off,
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/machinery/light_switch{
|
||||
pixel_x = -27;
|
||||
pixel_y = 4
|
||||
},
|
||||
/turf/open/floor/plasteel/red/side{
|
||||
dir = 8
|
||||
},
|
||||
@@ -43642,8 +43646,14 @@
|
||||
/area/construction)
|
||||
"bRo" = (
|
||||
/obj/machinery/computer/secure_data,
|
||||
/obj/machinery/light_switch{
|
||||
pixel_x = 27
|
||||
/obj/machinery/computer/security/telescreen{
|
||||
desc = "Used for watching the Engine.";
|
||||
dir = 8;
|
||||
layer = 4;
|
||||
name = "Engine Monitor";
|
||||
network = list("Engine");
|
||||
pixel_x = 30;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel/red/side{
|
||||
dir = 4
|
||||
@@ -55527,8 +55537,9 @@
|
||||
pixel_y = -26
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Engineering Supermatter North";
|
||||
c_tag = "Engineering Supermatter Fore";
|
||||
dir = 1;
|
||||
network = list("SS13","Engine");
|
||||
pixel_x = 23
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
@@ -55726,7 +55737,7 @@
|
||||
"cqD" = (
|
||||
/obj/structure/sign/radiation,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cqE" = (
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/machinery/door/airlock/glass_engineering{
|
||||
@@ -55735,11 +55746,11 @@
|
||||
req_access_txt = "10"
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cqF" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/general/visible,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cqG" = (
|
||||
/obj/structure/rack,
|
||||
/obj/item/weapon/storage/box/rubbershot{
|
||||
@@ -55903,7 +55914,7 @@
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cra" = (
|
||||
/obj/machinery/atmospherics/components/binary/pump{
|
||||
dir = 1;
|
||||
@@ -55919,7 +55930,7 @@
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"crb" = (
|
||||
/obj/machinery/atmospherics/components/binary/pump{
|
||||
dir = 2;
|
||||
@@ -55928,7 +55939,7 @@
|
||||
},
|
||||
/obj/effect/decal/cleanable/dirt,
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"crc" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
@@ -56065,7 +56076,7 @@
|
||||
dir = 6
|
||||
},
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"crt" = (
|
||||
/obj/machinery/door/airlock/glass_engineering{
|
||||
heat_proof = 1;
|
||||
@@ -56073,20 +56084,20 @@
|
||||
req_access_txt = "10"
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cru" = (
|
||||
/obj/machinery/meter,
|
||||
/obj/machinery/atmospherics/pipe/simple/general/visible{
|
||||
dir = 5
|
||||
},
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"crv" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/general/visible{
|
||||
dir = 10
|
||||
},
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"crw" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||
dir = 5
|
||||
@@ -56220,7 +56231,7 @@
|
||||
dir = 9
|
||||
},
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"crJ" = (
|
||||
/obj/structure/lattice,
|
||||
/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
|
||||
@@ -56527,7 +56538,7 @@
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"csB" = (
|
||||
/obj/item/weapon/wirecutters,
|
||||
/obj/structure/lattice,
|
||||
@@ -60202,7 +60213,7 @@
|
||||
"cAm" = (
|
||||
/obj/machinery/power/supermatter_shard/crystal,
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cAn" = (
|
||||
/obj/structure/cable/yellow{
|
||||
d1 = 2;
|
||||
@@ -60475,7 +60486,7 @@
|
||||
"cAP" = (
|
||||
/obj/structure/sign/fire,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cAQ" = (
|
||||
/obj/structure/chair,
|
||||
/turf/open/floor/plating,
|
||||
@@ -61898,9 +61909,9 @@
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Engineering Supermatter West";
|
||||
c_tag = "Engineering Supermatter Port";
|
||||
dir = 4;
|
||||
network = list("SS13")
|
||||
network = list("SS13","Engine")
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
@@ -61923,11 +61934,11 @@
|
||||
"cEf" = (
|
||||
/obj/machinery/ai_status_display,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEg" = (
|
||||
/obj/machinery/status_display,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEh" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
@@ -61949,9 +61960,9 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Engineering Supermatter East";
|
||||
c_tag = "Engineering Supermatter Starboard";
|
||||
dir = 8;
|
||||
network = list("SS13");
|
||||
network = list("SS13","Engine");
|
||||
pixel_x = 0;
|
||||
pixel_y = 0
|
||||
},
|
||||
@@ -62047,7 +62058,7 @@
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEu" = (
|
||||
/obj/machinery/power/rad_collector{
|
||||
anchored = 1
|
||||
@@ -62057,7 +62068,7 @@
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEv" = (
|
||||
/obj/structure/grille,
|
||||
/obj/structure/window/reinforced/highpressure/fulltile,
|
||||
@@ -62065,7 +62076,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEw" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber{
|
||||
dir = 8;
|
||||
@@ -62073,14 +62084,14 @@
|
||||
scrub_Toxins = 0
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEx" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump{
|
||||
dir = 4;
|
||||
on = 1
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEy" = (
|
||||
/obj/structure/grille,
|
||||
/obj/structure/window/reinforced/highpressure/fulltile,
|
||||
@@ -62089,7 +62100,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEz" = (
|
||||
/obj/machinery/power/rad_collector{
|
||||
anchored = 1
|
||||
@@ -62099,7 +62110,7 @@
|
||||
icon_state = "0-4"
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEA" = (
|
||||
/obj/machinery/door/poddoor/shutters/preopen{
|
||||
id = "engsm";
|
||||
@@ -62116,7 +62127,7 @@
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEB" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
@@ -62239,7 +62250,7 @@
|
||||
},
|
||||
/obj/item/weapon/tank/internals/plasma,
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEN" = (
|
||||
/obj/machinery/power/rad_collector{
|
||||
anchored = 1
|
||||
@@ -62309,7 +62320,7 @@
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cEU" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
@@ -62407,7 +62418,7 @@
|
||||
dir = 5
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cFf" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_scrubber{
|
||||
dir = 8;
|
||||
@@ -62430,7 +62441,7 @@
|
||||
dir = 9
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cFi" = (
|
||||
/obj/machinery/power/rad_collector{
|
||||
anchored = 1
|
||||
@@ -62456,7 +62467,7 @@
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cFk" = (
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 8
|
||||
@@ -62546,7 +62557,7 @@
|
||||
"cFw" = (
|
||||
/obj/structure/sign/electricshock,
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/engineering)
|
||||
/area/engine/supermatter)
|
||||
"cFx" = (
|
||||
/obj/machinery/ai_status_display,
|
||||
/turf/closed/wall/r_wall,
|
||||
@@ -62671,8 +62682,9 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Engineering Supermatter Center";
|
||||
c_tag = "Engineering Supermatter Aft";
|
||||
dir = 2;
|
||||
network = list("SS13","Engine");
|
||||
pixel_x = 23
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
@@ -65190,6 +65202,74 @@
|
||||
/obj/structure/grille,
|
||||
/turf/open/floor/plating,
|
||||
/area/shuttle/arrival)
|
||||
"cMC" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/supermatter)
|
||||
"cMD" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/supermatter)
|
||||
"cME" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/supermatter)
|
||||
"cMF" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/supermatter)
|
||||
"cMG" = (
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/supermatter)
|
||||
"cMH" = (
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/supermatter)
|
||||
"cMI" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/supermatter)
|
||||
"cMJ" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/supermatter)
|
||||
"cMK" = (
|
||||
/obj/structure/grille,
|
||||
/obj/structure/window/reinforced/highpressure/fulltile,
|
||||
/turf/open/floor/plating,
|
||||
/area/engine/supermatter)
|
||||
"cML" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/supermatter)
|
||||
"cMM" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/engine/supermatter)
|
||||
"cMN" = (
|
||||
/obj/structure/cable{
|
||||
d1 = 1;
|
||||
d2 = 8;
|
||||
icon_state = "1-8"
|
||||
},
|
||||
/obj/machinery/computer/security/telescreen{
|
||||
desc = "Used for watching the Engine.";
|
||||
dir = 8;
|
||||
layer = 4;
|
||||
name = "Engine Monitor";
|
||||
network = list("Engine");
|
||||
pixel_x = 30;
|
||||
pixel_y = 0
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"cMO" = (
|
||||
/obj/machinery/power/rad_collector{
|
||||
anchored = 1
|
||||
},
|
||||
/obj/structure/cable/yellow{
|
||||
d2 = 8;
|
||||
icon_state = "0-8"
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Supermatter Chamber";
|
||||
dir = 2;
|
||||
network = list("Engine");
|
||||
pixel_x = 23
|
||||
},
|
||||
/turf/open/floor/engine,
|
||||
/area/engine/supermatter)
|
||||
|
||||
(1,1,1) = {"
|
||||
aaa
|
||||
@@ -93392,11 +93472,11 @@ cpy
|
||||
cDv
|
||||
cDD
|
||||
cqU
|
||||
ccw
|
||||
cMC
|
||||
cMO
|
||||
cEu
|
||||
cEu
|
||||
cEu
|
||||
ccw
|
||||
cMC
|
||||
cFL
|
||||
cGf
|
||||
cGw
|
||||
@@ -93648,12 +93728,12 @@ chV
|
||||
cDq
|
||||
cqf
|
||||
cqD
|
||||
ccw
|
||||
cMC
|
||||
crs
|
||||
cEv
|
||||
cEv
|
||||
cFe
|
||||
ccw
|
||||
cMC
|
||||
cFM
|
||||
czE
|
||||
cGx
|
||||
@@ -94151,7 +94231,7 @@ ccw
|
||||
ccw
|
||||
ccw
|
||||
cdk
|
||||
cja
|
||||
cMN
|
||||
cgR
|
||||
ckK
|
||||
clJ
|
||||
@@ -94164,10 +94244,10 @@ cqg
|
||||
cqE
|
||||
cqZ
|
||||
crt
|
||||
czE
|
||||
cMG
|
||||
cAm
|
||||
czE
|
||||
cMm
|
||||
cMG
|
||||
cMK
|
||||
cFO
|
||||
csC
|
||||
csQ
|
||||
@@ -94675,13 +94755,13 @@ ccw
|
||||
cii
|
||||
cDq
|
||||
cqi
|
||||
ccw
|
||||
cMC
|
||||
cAP
|
||||
crv
|
||||
cEy
|
||||
cEy
|
||||
cFh
|
||||
ccw
|
||||
cMC
|
||||
cFQ
|
||||
czE
|
||||
cGx
|
||||
@@ -94934,11 +95014,11 @@ cDr
|
||||
cDw
|
||||
cDE
|
||||
cEa
|
||||
ccw
|
||||
cMC
|
||||
cEz
|
||||
cEz
|
||||
cEz
|
||||
ccw
|
||||
cMC
|
||||
cFR
|
||||
cGf
|
||||
cGz
|
||||
|
||||
@@ -12,5 +12,6 @@ var/list/combatlog = list()
|
||||
var/list/IClog = list()
|
||||
var/list/OOClog = list()
|
||||
var/list/adminlog = list()
|
||||
var/list/mentorlog = list ()
|
||||
|
||||
var/list/active_turfs_startlist = list()
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
//THIS FILE CONTAINS CONSTANTS, PROCS, DEFINES, AND OTHER THINGS//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//THIS FILE CONTAINS CONSTANTS, PROCS, AND OTHER THINGS//
|
||||
/////////////////////////////////////////////////////////
|
||||
|
||||
/mob/proc/setClickCooldown(var/timeout)
|
||||
next_move = max(world.time + timeout, next_move)
|
||||
|
||||
@@ -154,14 +155,75 @@ var/global/dlooc_allowed = 1
|
||||
|
||||
/mob/living/carbon/human/proc/is_bodypart_exposed(bodypart)
|
||||
|
||||
/mob/living/carbon/proc/is_groin_exposed()
|
||||
for(var/obj/item/I in get_equipped_items())
|
||||
/mob/living/carbon/proc/is_groin_exposed(var/list/L)
|
||||
if(!L)
|
||||
L = get_equipped_items()
|
||||
for(var/obj/item/I in L)
|
||||
if(I.body_parts_covered & GROIN)
|
||||
return 0
|
||||
return 1
|
||||
|
||||
/mob/living/carbon/proc/is_chest_exposed()
|
||||
for(var/obj/item/I in get_equipped_items())
|
||||
/mob/living/carbon/proc/is_chest_exposed(var/list/L)
|
||||
if(!L)
|
||||
L = get_equipped_items()
|
||||
for(var/obj/item/I in L)
|
||||
if(I.body_parts_covered & CHEST)
|
||||
return 0
|
||||
return 1
|
||||
return 1
|
||||
|
||||
////////////////////////
|
||||
//DANGER | DEBUG PROCS//
|
||||
////////////////////////
|
||||
|
||||
/client/proc/give_humans_genitals()
|
||||
set name = "Mass Give Genitals"
|
||||
set category = "Dangerous"
|
||||
set desc = "Gives every human mob genitals for testing purposes. WARNING: NOT FOR LIVE SERVER USAGE!!"
|
||||
|
||||
log_admin("[src] gave everyone genitals.")
|
||||
message_admins("[src] gave everyone genitals.")
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
if(H.gender == MALE)
|
||||
H.give_penis()
|
||||
H.give_balls()
|
||||
else
|
||||
H.give_vagina()
|
||||
H.give_womb()
|
||||
H.give_breasts()
|
||||
|
||||
/client/proc/test_mammal_overlays()
|
||||
set name = "Mass Give Mammalitus"
|
||||
set category = "Dangerous"
|
||||
set desc = "Turns every human into a mammal with tails, ears, etc. WARNING: NOT FOR LIVE SERVER USAGE!!"
|
||||
|
||||
log_admin("[src] turned everyone into mammals.")
|
||||
message_admins("[src] turned everyone into mammals.")
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
if(!H.dna)
|
||||
continue
|
||||
var/datum/dna/hdna = H.dna
|
||||
H.set_species(/datum/species/mammal)
|
||||
var/subspec = pick("Fox","Wolf","Fennec")
|
||||
switch(subspec)
|
||||
if("Wolf")
|
||||
hdna.features["mam_tail"] = "Wolf"
|
||||
hdna.features["mam_ears"] = "Wolf"
|
||||
hdna.features["snout"] = "Wolf"
|
||||
hdna.features["mam_body_markings"] = "Wolf"
|
||||
hdna.features["mcolor"] = "555"
|
||||
hdna.features["mcolor2"] = "999"
|
||||
hdna.features["mcolor3"] = "999"
|
||||
if("Fox")
|
||||
hdna.features["mam_tail"] = "Fox"
|
||||
hdna.features["mam_ears"] = "Fox"
|
||||
hdna.features["snout"] = "Fox, Long"
|
||||
hdna.features["mam_body_markings"] = "Fox"
|
||||
hdna.features["mcolor"] = "f60"
|
||||
hdna.features["mcolor2"] = "fff"
|
||||
hdna.features["mcolor3"] = "fff"
|
||||
if("Fennec")
|
||||
hdna.features["mam_tail"] = "Fennec"
|
||||
hdna.features["mam_ears"] = "Fennec"
|
||||
hdna.features["snout"] = "Fox, Short"
|
||||
hdna.features["mam_body_markings"] = "Fox"
|
||||
H.regenerate_icons()
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
/area/maintenance/bar
|
||||
name = "Maintenance Bar"
|
||||
icon = 'code/citadel/icons/areas.dmi'
|
||||
icon_state = "maintbar"
|
||||
|
After Width: | Height: | Size: 403 B |
|
Before Width: | Height: | Size: 298 B After Width: | Height: | Size: 405 B |
@@ -12,21 +12,22 @@
|
||||
var/amount = 2
|
||||
producing = TRUE
|
||||
|
||||
/obj/item/organ/genital/breasts/New()
|
||||
..()
|
||||
/obj/item/organ/genital/breasts/Initialize()
|
||||
create_reagents(fluid_max_volume)
|
||||
reagents.add_reagent(fluid_id, fluid_max_volume)
|
||||
update()
|
||||
|
||||
/obj/item/organ/genital/breasts/on_life()
|
||||
if(QDELETED(src))
|
||||
return
|
||||
if(!reagents || !owner)
|
||||
return
|
||||
reagents.maximum_volume = fluid_max_volume
|
||||
if(fluid_id && producing)
|
||||
generate_milk()
|
||||
|
||||
/obj/item/organ/genital/breasts/proc/generate_milk()
|
||||
if(!owner)
|
||||
return FALSE
|
||||
if(owner.stat == DEAD)
|
||||
return FALSE
|
||||
reagents.isolate_reagent(fluid_id)
|
||||
reagents.add_reagent(fluid_id, (fluid_mult * fluid_rate))
|
||||
reagents.add_reagent(fluid_id, (fluid_mult * fluid_rate))
|
||||
|
||||
@@ -13,16 +13,19 @@
|
||||
var/producing = FALSE
|
||||
|
||||
/obj/item/organ/genital/Initialize()
|
||||
..()
|
||||
reagents = create_reagents(fluid_max_volume)
|
||||
update()
|
||||
|
||||
/obj/item/organ/genital/Destroy()
|
||||
remove_ref()
|
||||
if(owner)
|
||||
Remove(owner, 1)//this should remove references to it, so it can be GCd correctly
|
||||
update_link()
|
||||
update_link()//this should remove any other links it has
|
||||
return ..()
|
||||
|
||||
/obj/item/organ/genital/proc/update()
|
||||
if(QDELETED(src))
|
||||
return
|
||||
update_size()
|
||||
update_appearance()
|
||||
update_link()
|
||||
@@ -33,6 +36,8 @@
|
||||
|
||||
/obj/item/organ/genital/proc/update_link()
|
||||
|
||||
/obj/item/organ/genital/proc/remove_ref()
|
||||
|
||||
/obj/item/organ/genital/Insert(mob/living/carbon/M, special = 0)
|
||||
..()
|
||||
update()
|
||||
@@ -47,6 +52,7 @@
|
||||
var/obj/item/organ/genital/GtoClean
|
||||
for(GtoClean in internal_organs)
|
||||
qdel(GtoClean)
|
||||
|
||||
if(dna.features["has_cock"])
|
||||
give_penis()
|
||||
if(dna.features["has_balls"])
|
||||
@@ -92,7 +98,7 @@
|
||||
// T.color = skintone2hex(skin_tone)
|
||||
// else
|
||||
// T.color = "#[dna.features["balls_color"]]"
|
||||
T.size = dna.features["bals_size"]
|
||||
T.size = dna.features["balls_size"]
|
||||
T.sack_size = dna.features["balls_sack_size"]
|
||||
T.fluid_id = dna.features["balls_fluid"]
|
||||
T.fluid_rate = dna.features["balls_cum_rate"]
|
||||
@@ -101,7 +107,7 @@
|
||||
T.update()
|
||||
|
||||
/mob/living/carbon/human/proc/give_breasts()
|
||||
if(!has_dna())
|
||||
if(!dna)
|
||||
return FALSE
|
||||
if(NOGENITALS in dna.species.species_traits)
|
||||
return FALSE
|
||||
@@ -116,7 +122,7 @@
|
||||
/mob/living/carbon/human/proc/give_ovipositor()
|
||||
/mob/living/carbon/human/proc/give_eggsack()
|
||||
/mob/living/carbon/human/proc/give_vagina()
|
||||
if(!has_dna())
|
||||
if(!dna)
|
||||
return FALSE
|
||||
if(NOGENITALS in dna.species.species_traits)
|
||||
return FALSE
|
||||
@@ -126,10 +132,10 @@
|
||||
if(dna.species.use_skintones && dna.features["genitals_use_skintone"])
|
||||
V.color = skintone2hex(skin_tone)
|
||||
else
|
||||
V.color = dna.features["vag_color"]
|
||||
V.color = "[dna.features["vag_color"]]"
|
||||
V.update()
|
||||
/mob/living/carbon/human/proc/give_womb()
|
||||
if(!has_dna())
|
||||
if(!dna)
|
||||
return FALSE
|
||||
if(NOGENITALS in dna.species.species_traits)
|
||||
return FALSE
|
||||
@@ -163,19 +169,20 @@
|
||||
update_genitals()
|
||||
|
||||
/mob/living/carbon/human/proc/update_genitals()
|
||||
dna.species.handle_genitals(src)
|
||||
if(src && !QDELETED(src))
|
||||
dna.species.handle_genitals(src)
|
||||
|
||||
/datum/species/proc/handle_genitals(mob/living/carbon/human/H)
|
||||
if(!H)
|
||||
if(!H)//no args
|
||||
CRASH("H = null")
|
||||
if(!H.internal_organs.len)
|
||||
if(!LAZYLEN(H.internal_organs))//if they have no organs, we're done
|
||||
return
|
||||
if(NOGENITALS in species_traits)
|
||||
if(NOGENITALS in species_traits)//golems and such
|
||||
return
|
||||
|
||||
var/list/genitals_to_add = list()
|
||||
var/list/relevent_layers = list(GENITALS_BEHIND_LAYER, GENITALS_ADJ_LAYER, GENITALS_FRONT_LAYER)
|
||||
var/list/standing = list()
|
||||
var/list/genitals_to_add = list()
|
||||
var/list/relevent_layers = list(GENITALS_BEHIND_LAYER, GENITALS_ADJ_LAYER, GENITALS_FRONT_LAYER)
|
||||
var/list/standing = list()
|
||||
var/size
|
||||
|
||||
H.remove_overlay(GENITALS_BEHIND_LAYER)
|
||||
@@ -185,12 +192,15 @@
|
||||
if(H.disabilities & HUSK)
|
||||
return
|
||||
//start scanning for genitals
|
||||
if(H.has_penis() && H.is_groin_exposed())
|
||||
genitals_to_add += H.getorganslot("penis")
|
||||
if(H.has_breasts() && H.is_chest_exposed())
|
||||
genitals_to_add += H.getorganslot("breasts")
|
||||
if(H.has_vagina() && H.is_groin_exposed())
|
||||
genitals_to_add += H.getorganslot("vagina")
|
||||
var/list/worn_stuff = H.get_equipped_items()//cache this list so it's not built again
|
||||
if(H.is_groin_exposed(worn_stuff))
|
||||
if(H.has_penis())
|
||||
genitals_to_add += H.getorganslot("penis")
|
||||
if(H.has_vagina())
|
||||
genitals_to_add += H.getorganslot("vagina")
|
||||
if(H.is_chest_exposed(worn_stuff))
|
||||
if(H.has_breasts())
|
||||
genitals_to_add += H.getorganslot("breasts")
|
||||
var/image/I
|
||||
//start applying overlays
|
||||
for(var/layer in relevent_layers)
|
||||
@@ -230,8 +240,9 @@
|
||||
else
|
||||
I.color = "#[H.dna.features["mcolor3"]]"
|
||||
standing += I
|
||||
H.overlays_standing[layer] = standing.Copy()
|
||||
standing = list()
|
||||
if(LAZYLEN(standing))
|
||||
H.overlays_standing[layer] = standing.Copy()
|
||||
standing = list()
|
||||
|
||||
H.apply_overlay(GENITALS_BEHIND_LAYER)
|
||||
H.apply_overlay(GENITALS_ADJ_LAYER)
|
||||
|
||||
@@ -7,10 +7,6 @@
|
||||
color_src = "cock_color"
|
||||
locked = 0
|
||||
|
||||
/datum/sprite_accessory/penis/none
|
||||
icon_state = "none"
|
||||
name = "None"
|
||||
|
||||
/datum/sprite_accessory/penis/human
|
||||
icon_state = "human"
|
||||
name = "Human"
|
||||
@@ -40,9 +36,6 @@
|
||||
color_src = MUTCOLORS2 //I'll have skin_tone override this if the species uses them
|
||||
locked = 0
|
||||
/*!!ULTRACOMPRESSEDEDITION!!*/
|
||||
/datum/sprite_accessory/breasts/none
|
||||
icon_state = "none"
|
||||
name = "None"
|
||||
/datum/sprite_accessory/breasts/a
|
||||
icon_state = "a"
|
||||
name = "A"
|
||||
|
||||
@@ -13,5 +13,4 @@
|
||||
var/girth_ratio = COCK_GIRTH_RATIO_DEF //citadel_defines.dm for these defines
|
||||
var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF
|
||||
var/list/oviflags = list()
|
||||
|
||||
var/obj/item/organ/eggsack/linked_eggsack
|
||||
|
||||
@@ -9,43 +9,47 @@
|
||||
can_masturbate_with = 1
|
||||
size = 2 //arbitrary value derived from length and girth for sprites.
|
||||
var/length = 6 //inches
|
||||
var/cached_length //used to detect a change in length
|
||||
var/girth = 0
|
||||
var/girth_ratio = COCK_GIRTH_RATIO_DEF //0.73; check citadel_defines.dm
|
||||
var/knot_girth_ratio = KNOT_GIRTH_RATIO_DEF
|
||||
var/list/dickflags = list()
|
||||
var/list/knotted_types = list("", "barbknot")
|
||||
var/list/knotted_types = list("knotted", "barbknot")
|
||||
var/obj/item/organ/genital/testicles/linked_balls
|
||||
|
||||
/obj/item/organ/genital/penis/Initialize()
|
||||
update()
|
||||
|
||||
/obj/item/organ/genital/penis/update()
|
||||
update_size()
|
||||
update_appearance()
|
||||
update_link()
|
||||
|
||||
/obj/item/organ/genital/penis/update_size()
|
||||
if(length == cached_length)
|
||||
return
|
||||
switch(length)
|
||||
if(-INFINITY to 5)
|
||||
size = 1
|
||||
if(5 to 9)
|
||||
size = 2
|
||||
if(9 to 12)
|
||||
size = 3//no new sprites for anything larger
|
||||
if(9 to 15)
|
||||
if(9 to INFINITY)
|
||||
size = 3//no new sprites for anything larger yet
|
||||
/* if(9 to 15)
|
||||
size = 3
|
||||
if(15 to INFINITY)
|
||||
size = 3
|
||||
size = 3*/
|
||||
girth = (length * girth_ratio)
|
||||
cached_length = length
|
||||
|
||||
/obj/item/organ/genital/penis/update_appearance()
|
||||
var/string = "penis_[lowertext(shape)]_[size]"
|
||||
icon_state = sanitize_text(string)
|
||||
// name = "[shape] penis"
|
||||
desc = "That's a [lowertext(shape)] penis. You estimate it's about [round(length, 0.25)] inch[length > 1 ? "es" : ""] long and [round(girth, 0.25)] inch[length > 1 ? "es" : ""] around."
|
||||
if(!owner)
|
||||
return
|
||||
color = "#[owner.dna.features["cock_color"]]"
|
||||
var/lowershape = lowertext(shape)
|
||||
if(lowershape in knotted_types)
|
||||
if(lowershape == "barbknot")
|
||||
lowershape = "barbed, knotted"
|
||||
desc = "That's a [lowershape] penis. You estimate it's about [round(length, 0.25)] inch[length > 1 ? "es" : ""] long, [round(girth, 0.25)] inch[length > 1 ? "es" : ""] around the shaft \
|
||||
and [round(length * knot_girth_ratio, 0.25)] inch[length > 1 ? "es" : ""] around the knot."
|
||||
else
|
||||
desc = "That's a [lowershape] penis. You estimate it's about [round(length, 0.25)] inch[length > 1 ? "es" : ""] long and [round(girth, 0.25)] inch[length > 1 ? "es" : ""] around."
|
||||
if(owner)
|
||||
color = "#[owner.dna.features["cock_color"]]"
|
||||
|
||||
/obj/item/organ/genital/penis/update_link()
|
||||
if(owner)
|
||||
@@ -56,3 +60,8 @@
|
||||
if(linked_balls)
|
||||
linked_balls.linked_penis = null
|
||||
linked_balls = null
|
||||
|
||||
/obj/item/organ/genital/penis/remove_ref()
|
||||
if(linked_balls)
|
||||
linked_balls.linked_penis = null
|
||||
linked_balls = null
|
||||
|
||||
@@ -20,24 +20,19 @@
|
||||
update()
|
||||
|
||||
/obj/item/organ/genital/testicles/on_life()
|
||||
if(fluid_id && producing)
|
||||
if(QDELETED(src))
|
||||
return
|
||||
if(reagents && producing)
|
||||
generate_cum()
|
||||
|
||||
/obj/item/organ/genital/testicles/proc/generate_cum()
|
||||
reagents.maximum_volume = fluid_max_volume
|
||||
if(reagents.total_volume >= reagents.maximum_volume)
|
||||
if(sent_full_message < 0)
|
||||
if(!sent_full_message)
|
||||
send_full_message()
|
||||
sent_full_message = 1
|
||||
return FALSE
|
||||
sent_full_message = 0
|
||||
if(!owner && linked_penis)
|
||||
if(linked_penis.linked_balls == src)
|
||||
linked_penis.linked_balls = null
|
||||
linked_penis = null
|
||||
return FALSE
|
||||
if(!reagents)
|
||||
create_reagents(fluid_max_volume)
|
||||
update_link()
|
||||
if(!linked_penis)
|
||||
return FALSE
|
||||
@@ -45,12 +40,13 @@
|
||||
reagents.add_reagent(fluid_id, (fluid_mult * fluid_rate))//generate the cum
|
||||
|
||||
/obj/item/organ/genital/testicles/update_link()
|
||||
if(owner)
|
||||
if(owner && !QDELETED(src))
|
||||
linked_penis = (owner.getorganslot("penis"))
|
||||
if(linked_penis)
|
||||
linked_penis.linked_balls = src
|
||||
else if(linked_penis != null)
|
||||
linked_penis.linked_balls = null
|
||||
else
|
||||
if(linked_penis)
|
||||
linked_penis.linked_balls = null
|
||||
linked_penis = null
|
||||
|
||||
/obj/item/organ/genital/testicles/proc/send_full_message(msg = "Your balls finally feel full, again.")
|
||||
|
||||
@@ -8,8 +8,9 @@
|
||||
can_masturbate_with = 1
|
||||
w_class = 3
|
||||
var/wetness = 1
|
||||
var/capacity_length = 8//D E P T H
|
||||
var/capacity_girth = 8
|
||||
var/cap_length = 8//D E P T H (cap = capacity)
|
||||
var/cap_girth = 12
|
||||
var/cap_girth_ratio = 1.5
|
||||
var/clits = 1
|
||||
var/clit_diam = 0.25
|
||||
var/clit_len = 0.25
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
/obj/item/organ/genital/womb
|
||||
name = "womb"
|
||||
desc = "A female reproductive organ."
|
||||
icon = 'code/citadel/icons/vagina.dmi'
|
||||
icon_state = "womb"
|
||||
zone = "groin"
|
||||
slot = "womb"
|
||||
w_class = 3
|
||||
fluid_id = "femcum"
|
||||
var/obj/item/organ/genital/vagina/linked_vag
|
||||
|
||||
/obj/item/organ/genital/womb/Destroy()
|
||||
return ..()
|
||||
@@ -48,8 +48,6 @@ obj/item/weapon/dildo/proc/update_appearance()
|
||||
switch(dildo_size)
|
||||
if(1)
|
||||
sizeword = "small "
|
||||
if(2)
|
||||
sizeword = ""
|
||||
if(3)
|
||||
sizeword = "big "
|
||||
if(4)
|
||||
@@ -60,6 +58,14 @@ obj/item/weapon/dildo/proc/update_appearance()
|
||||
name = "[sizeword][dildo_shape] [can_customize ? "custom " : ""][dildo_type]"
|
||||
|
||||
obj/item/weapon/dildo/AltClick(mob/living/user)
|
||||
if(QDELETED(src))
|
||||
return
|
||||
if(!isliving(user))
|
||||
return
|
||||
if(isAI(user))
|
||||
return
|
||||
if(user.stat > 0)//unconscious or dead
|
||||
return
|
||||
customize(user)
|
||||
|
||||
obj/item/weapon/dildo/proc/customize(mob/living/user)
|
||||
|
||||
@@ -691,6 +691,10 @@
|
||||
config.forbid_peaceborg = 1
|
||||
if("silent_ai")
|
||||
config.silent_ai = 1
|
||||
if ("mentor_mobname_only")
|
||||
config.mentors_mobname_only = 1
|
||||
if ("mentor_legacy_system")
|
||||
config.mentor_legacy_system = 1
|
||||
if("silent_borg")
|
||||
config.silent_borg = 1
|
||||
if("sandbox_autoclose")
|
||||
|
||||
@@ -47,6 +47,8 @@ var/datum/controller/subsystem/shuttle/SSshuttle
|
||||
|
||||
var/lockdown = FALSE //disallow transit after nuke goes off
|
||||
|
||||
var/auto_call = 72000 //time before in deciseconds in which the shuttle is auto called. Default is 2 hours.
|
||||
|
||||
/datum/controller/subsystem/shuttle/New()
|
||||
NEW_SS_GLOBAL(SSshuttle)
|
||||
|
||||
@@ -279,6 +281,8 @@ var/datum/controller/subsystem/shuttle/SSshuttle
|
||||
log_game("There is no means of calling the shuttle anymore. Shuttle automatically called.")
|
||||
message_admins("All the communications consoles were destroyed and all AIs are inactive. Shuttle called.")
|
||||
|
||||
|
||||
|
||||
/datum/controller/subsystem/shuttle/proc/registerHostileEnvironment(datum/bad)
|
||||
hostileEnvironments[bad] = TRUE
|
||||
checkHostileEnvironment()
|
||||
@@ -349,6 +353,14 @@ var/datum/controller/subsystem/shuttle/SSshuttle
|
||||
if(!(M in transit_requesters))
|
||||
transit_requesters += M
|
||||
|
||||
/datum/controller/subsystem/shuttle/proc/autoEnd()
|
||||
if(world.time > auto_call && EMERGENCY_IDLE_OR_RECALLED) //3 hours
|
||||
SSshuttle.emergency.request(null, 1.5)
|
||||
priority_announce("The shift has come to an end and the shuttle called.")
|
||||
log_game("Round time limit reached. Shuttle has been auto-called.")
|
||||
message_admins("Round time limit reached. Shuttle called.")
|
||||
|
||||
|
||||
/datum/controller/subsystem/shuttle/proc/generate_transit_dock(obj/docking_port/mobile/M)
|
||||
// First, determine the size of the needed zone
|
||||
// Because of shuttle rotation, the "width" of the shuttle is not
|
||||
|
||||
@@ -125,6 +125,7 @@ var/datum/controller/subsystem/ticker/ticker
|
||||
check_queue()
|
||||
check_maprotate()
|
||||
scripture_states = scripture_unlock_alert(scripture_states)
|
||||
SSshuttle.autoEnd()
|
||||
|
||||
if(!mode.explosion_in_progress && mode.check_finished() || force_ending)
|
||||
current_state = GAME_STATE_FINISHED
|
||||
|
||||
@@ -79,9 +79,12 @@ var/datum/controller/subsystem/timer/SStimer
|
||||
do
|
||||
var/datum/callback/callBack = timer.callBack
|
||||
if (!callBack)
|
||||
message_admins("The timer SS has crashed because a timer did not return a callback. MC restarted automatically. Timer hash: [timer.hash]")
|
||||
qdel(timer)
|
||||
bucket_resolution = null //force bucket recreation
|
||||
CRASH("Invalid timer: timer.timeToRun=[timer.timeToRun]||QDELETED(timer)=[QDELETED(timer)]||world.time=[world.time]||head_offset=[head_offset]||practical_offset=[practical_offset]||timer.spent=[timer.spent]")
|
||||
Recreate_MC()
|
||||
//I really don't know if I should keep this crash log in; I feel like it might cause problems.
|
||||
// CRASH("Invalid timer: timer.timeToRun=[timer.timeToRun]||QDELETED(timer)=[QDELETED(timer)]||world.time=[world.time]||head_offset=[head_offset]||practical_offset=[practical_offset]||timer.spent=[timer.spent]")
|
||||
|
||||
if (!timer.spent)
|
||||
spent += timer
|
||||
@@ -222,7 +225,7 @@ var/datum/controller/subsystem/timer/SStimer
|
||||
ctts.Insert(src, I)
|
||||
break
|
||||
else
|
||||
ctts += src
|
||||
ctts += src
|
||||
return
|
||||
|
||||
//get the list of buckets
|
||||
|
||||
@@ -38,6 +38,8 @@
|
||||
//if they differ between directions, otherwise use the
|
||||
//generic variables
|
||||
/datum/riding/proc/handle_vehicle_offsets()
|
||||
if(!ridden || QDELETED(ridden))
|
||||
return
|
||||
if(ridden.has_buckled_mobs())
|
||||
for(var/m in ridden.buckled_mobs)
|
||||
var/mob/living/buckled_mob = m
|
||||
|
||||
@@ -16,7 +16,9 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
|
||||
/*-----------------------------------------------------------------------------*/
|
||||
|
||||
/area/engine
|
||||
/area/engine/supermatter
|
||||
name = "Supermatter Engine"
|
||||
icon_state = "engine_sm"
|
||||
|
||||
/area/ai_monitored //stub defined ai_monitored.dm
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ var/global/list/datum/stack_recipe/sandstone_recipes = list ( \
|
||||
materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT)
|
||||
sheettype = "sandstone"
|
||||
|
||||
/obj/item/stack/sheet/mineral/sandstone/New(var/loc, var/amount=null)
|
||||
/obj/item/stack/sheet/mineral/sandstone/Initialize(mapload, new_amount, merge = TRUE)
|
||||
recipes = sandstone_recipes
|
||||
pixel_x = rand(0,4)-4
|
||||
pixel_y = rand(0,4)-4
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
turf_type = /turf/open/floor/light
|
||||
var/state = 0
|
||||
|
||||
/obj/item/stack/tile/light/New(var/loc, var/amount=null)
|
||||
/obj/item/stack/tile/light/Initialize(mapload, new_amount, merge = TRUE)
|
||||
..()
|
||||
if(prob(5))
|
||||
state = 3 //broken
|
||||
|
||||
@@ -184,6 +184,16 @@
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack(src)
|
||||
|
||||
/obj/item/weapon/storage/box/medipens/survival
|
||||
name = "Survival pen bundle"
|
||||
desc = "a box with several survival pens inside, welcome to immortality!!"
|
||||
illustration = "syringe"
|
||||
|
||||
/obj/item/weapon/storage/box/medipens/survival/New()
|
||||
..()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/medipen/survival(src)
|
||||
|
||||
/obj/item/weapon/storage/box/beakers
|
||||
name = "box of beakers"
|
||||
illustration = "beaker"
|
||||
|
||||
@@ -219,11 +219,11 @@
|
||||
return
|
||||
if(!use_preloader && path == type) // Don't no-op if the map loader requires it to be reconstructed
|
||||
return src
|
||||
|
||||
var/old_baseturf = baseturf
|
||||
changing_turf = TRUE
|
||||
qdel(src) //Just get the side effects and call Destroy
|
||||
var/turf/W = new path(src)
|
||||
|
||||
W.baseturf = old_baseturf
|
||||
if(!defer_change)
|
||||
W.AfterChange(ignore_air)
|
||||
|
||||
|
||||
@@ -162,6 +162,9 @@ var/global/BSACooldown = 0
|
||||
body += "<A href='?_src_=holder;tdome2=\ref[M]'>Thunderdome 2</A> | "
|
||||
body += "<A href='?_src_=holder;tdomeadmin=\ref[M]'>Thunderdome Admin</A> | "
|
||||
body += "<A href='?_src_=holder;tdomeobserve=\ref[M]'>Thunderdome Observer</A> | "
|
||||
body += "<A href='?_src_=holder;mentor=\ref[M]'>Make Mentor</A> | "
|
||||
body += "<A href='?_src_=holder;removementor=\ref[M]'>Remove Mentor</A> | "
|
||||
|
||||
|
||||
body += "<br>"
|
||||
body += "</body></html>"
|
||||
|
||||
@@ -14,6 +14,7 @@ var/list/admin_verbs_default = list(
|
||||
/client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
|
||||
/client/proc/investigate_show, /*various admintools for investigation. Such as a singulo grief-log*/
|
||||
/client/proc/secrets,
|
||||
/client/proc/restart_controller,
|
||||
/client/proc/reload_admins,
|
||||
/client/proc/reload_mentors,
|
||||
/client/proc/reestablish_db_connection,/*reattempt a connection to the database*/
|
||||
@@ -132,7 +133,6 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/cmd_debug_mob_lists,
|
||||
/client/proc/cmd_admin_delete,
|
||||
/client/proc/cmd_debug_del_all,
|
||||
/client/proc/restart_controller,
|
||||
/client/proc/enable_debug_verbs,
|
||||
/client/proc/callproc,
|
||||
/client/proc/callproc_datum,
|
||||
@@ -143,6 +143,9 @@ var/list/admin_verbs_debug = list(
|
||||
/client/proc/check_bomb_impacts,
|
||||
/proc/machine_upgrade,
|
||||
/client/proc/populate_world,
|
||||
//citadel code
|
||||
/client/proc/give_humans_genitals,
|
||||
/client/proc/test_mammal_overlays,
|
||||
/client/proc/get_dynex_power, //*debug verbs for dynex explosions.
|
||||
/client/proc/get_dynex_range, //*debug verbs for dynex explosions.
|
||||
/client/proc/set_dynex_scale,
|
||||
|
||||
@@ -247,7 +247,10 @@
|
||||
excited_group.dismantle_cooldown = 0
|
||||
atmos_cooldown = 0
|
||||
|
||||
/turf/open/proc/high_pressure_movements()
|
||||
/turf/proc/high_pressure_movements()
|
||||
return
|
||||
|
||||
/turf/open/high_pressure_movements()
|
||||
for(var/atom/movable/M in src)
|
||||
M.experience_pressure_difference(pressure_difference, pressure_direction)
|
||||
|
||||
|
||||
@@ -67,7 +67,6 @@
|
||||
|
||||
M.adjustOxyLoss(oxy_damage)
|
||||
M.adjustBruteLoss(brute_damage)
|
||||
equip(M)
|
||||
|
||||
if(ckey)
|
||||
M.ckey = ckey
|
||||
@@ -78,6 +77,7 @@
|
||||
MM.objectives += new/datum/objective(objective)
|
||||
special(M)
|
||||
MM.name = M.real_name
|
||||
equip(M)
|
||||
if(uses > 0)
|
||||
uses--
|
||||
if(!permanent && !uses)
|
||||
@@ -115,6 +115,13 @@
|
||||
/obj/effect/mob_spawn/human/equip(mob/living/carbon/human/H)
|
||||
if(mob_species)
|
||||
H.set_species(mob_species)
|
||||
else
|
||||
//If we're a human, we still need to handle our snowflake code anyway I guess.
|
||||
if (NOAROUSAL in H.dna.species.species_traits)
|
||||
H.canbearoused = FALSE
|
||||
else
|
||||
if(H.client)
|
||||
H.canbearoused = H.client.prefs.arousable
|
||||
if(husk)
|
||||
H.Drain()
|
||||
|
||||
|
||||
@@ -133,7 +133,6 @@ var/list/preferences_datums = list()
|
||||
|
||||
//Mob preview
|
||||
var/icon/preview_icon = null
|
||||
var/icon/nude_preview_icon = null
|
||||
|
||||
//Jobs, uses bitflags
|
||||
var/job_civilian_high = 0
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
#define SAVEFILE_VERSION_MIN 10
|
||||
|
||||
//This is the current version, anything below this will attempt to update (if it's not obsolete)
|
||||
#define SAVEFILE_VERSION_MAX 17
|
||||
#define SAVEFILE_VERSION_MAX 18
|
||||
/*
|
||||
SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Carn
|
||||
This proc checks if the current directory of the savefile S needs updating
|
||||
@@ -125,6 +125,36 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
joblessrole = BEASSISTANT
|
||||
if(current_version < 17)
|
||||
features["legs"] = "Normal Legs"
|
||||
if(current_version < 18)//this should lower the amount of lag when you select or change something.
|
||||
features["mam_body_markings"] = sanitize_inlist(features["mam_body_markings"], mam_body_markings_list)
|
||||
features["mam_ears"] = sanitize_inlist(features["mam_ears"], mam_ears_list)
|
||||
features["mam_tail"] = sanitize_inlist(features["mam_tail"], mam_tails_list)
|
||||
features["taur"] = sanitize_inlist(features["taur"], taur_list)
|
||||
//Xeno features
|
||||
features["xenotail"] = sanitize_inlist(features["xenotail"], xeno_tail_list)
|
||||
features["xenohead"] = sanitize_inlist(features["xenohead"], xeno_head_list)
|
||||
features["xenodorsal"] = sanitize_inlist(features["xenodorsal"], xeno_dorsal_list)
|
||||
//cock features
|
||||
features["has_cock"] = sanitize_integer(features["has_cock"], 0, 1, 0)
|
||||
features["cock_shape"] = sanitize_inlist(features["cock_shape"], cock_shapes_list, "Human")
|
||||
features["cock_color"] = sanitize_hexcolor(features["cock_color"], 3, 0)
|
||||
features["cock_length"] = sanitize_integer(features["cock_length"], COCK_SIZE_MIN, COCK_SIZE_MAX, 6)
|
||||
//balls features
|
||||
features["has_balls"] = sanitize_integer(features["has_balls"], 0, 1, 0)
|
||||
features["balls_color"] = sanitize_hexcolor(features["balls_color"], 3, 0)
|
||||
features["balls_size"] = sanitize_integer(features["balls_size"], BALLS_SIZE_MIN, BALLS_SIZE_MAX, BALLS_SIZE_DEF)
|
||||
features["balls_sack_size"] = sanitize_integer(features["balls_sack_size"], BALLS_SACK_SIZE_MIN, BALLS_SACK_SIZE_MAX, BALLS_SACK_SIZE_DEF)
|
||||
features["balls_fluid"] = sanitize_inlist(features["balls_fluid"], cum_id_list, "semen")
|
||||
//breasts features
|
||||
features["has_breasts"] = sanitize_integer(features["has_breasts"], 0, 1, 0)
|
||||
features["breasts_size"] = sanitize_inlist(features["breasts_size"], breasts_size_list, "C")
|
||||
features["breasts_color"] = sanitize_hexcolor(features["breasts_color"], 3, 0)
|
||||
features["breasts_fluid"] = sanitize_inlist(features["breasts_fluid"], milk_id_list, "milk")
|
||||
//vagina features
|
||||
features["has_vag"] = sanitize_integer(features["has_vag"], 0, 1, 0)
|
||||
features["vag_color"] = sanitize_hexcolor(features["vag_color"], 3, 0)
|
||||
//womb features
|
||||
features["has_womb"] = sanitize_integer(features["has_womb"], 0, 1, 0)
|
||||
|
||||
/datum/preferences/proc/load_path(ckey,filename="preferences.sav")
|
||||
if(!ckey)
|
||||
@@ -300,12 +330,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["feature_lizard_spines"] >> features["spines"]
|
||||
S["feature_lizard_body_markings"] >> features["body_markings"]
|
||||
S["feature_lizard_legs"] >> features["legs"]
|
||||
if(!config.mutant_humans)
|
||||
features["tail_human"] = "none"
|
||||
features["ears"] = "none"
|
||||
else
|
||||
S["feature_human_tail"] >> features["tail_human"]
|
||||
S["feature_human_ears"] >> features["ears"]
|
||||
S["feature_human_tail"] >> features["tail_human"]
|
||||
S["feature_human_ears"] >> features["ears"]
|
||||
S["clown_name"] >> custom_names["clown"]
|
||||
S["mime_name"] >> custom_names["mime"]
|
||||
S["ai_name"] >> custom_names["ai"]
|
||||
@@ -362,6 +388,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
//vagina features
|
||||
S["feature_has_vag"] >> features["has_vag"]
|
||||
S["feature_vag_color"] >> features["vag_color"]
|
||||
//womb features
|
||||
S["feature_has_womb"] >> features["has_womb"]
|
||||
|
||||
//try to fix any outdated data if necessary
|
||||
if(needs_update >= 0)
|
||||
@@ -428,35 +456,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
features["mcolor3"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
|
||||
features["mcolor2"] = sanitize_hexcolor(features["mcolor2"], 3, 0)
|
||||
features["mcolor3"] = sanitize_hexcolor(features["mcolor3"], 3, 0)
|
||||
features["mam_body_markings"] = sanitize_inlist(features["mam_body_markings"], mam_body_markings_list)
|
||||
features["mam_ears"] = sanitize_inlist(features["mam_ears"], mam_ears_list)
|
||||
features["mam_tail"] = sanitize_inlist(features["mam_tail"], mam_tails_list)
|
||||
features["taur"] = sanitize_inlist(features["taur"], taur_list)
|
||||
//Xeno features
|
||||
features["xenotail"] = sanitize_inlist(features["xenotail"], xeno_tail_list)
|
||||
features["xenohead"] = sanitize_inlist(features["xenohead"], xeno_head_list)
|
||||
features["xenodorsal"] = sanitize_inlist(features["xenodorsal"], xeno_dorsal_list)
|
||||
//cock features
|
||||
features["has_cock"] = sanitize_integer(features["has_cock"], 0, 1, 0)
|
||||
features["cock_shape"] = sanitize_inlist(features["cock_shape"], cock_shapes_list, "Human")
|
||||
features["cock_color"] = sanitize_hexcolor(features["cock_color"], 3, 0)
|
||||
features["cock_length"] = sanitize_integer(features["cock_length"], COCK_SIZE_MIN, COCK_SIZE_MAX, 6)
|
||||
//balls features
|
||||
features["has_balls"] = sanitize_integer(features["has_balls"], 0, 1, 0)
|
||||
features["balls_color"] = sanitize_hexcolor(features["balls_color"], 3, 0)
|
||||
features["balls_size"] = sanitize_integer(features["balls_size"], BALLS_SIZE_MIN, BALLS_SIZE_MAX, BALLS_SIZE_DEF)
|
||||
features["balls_sack_size"] = sanitize_integer(features["balls_sack_size"], BALLS_SACK_SIZE_MIN, BALLS_SACK_SIZE_MAX, BALLS_SACK_SIZE_DEF)
|
||||
features["balls_fluid"] = sanitize_inlist(features["balls_fluid"], cum_id_list, "semen")
|
||||
//breasts features
|
||||
features["has_breasts"] = sanitize_integer(features["has_breasts"], 0, 1, 0)
|
||||
features["breasts_size"] = sanitize_inlist(features["breasts_size"], breasts_size_list, "C")
|
||||
features["breasts_color"] = sanitize_hexcolor(features["breasts_color"], 3, 0)
|
||||
features["breasts_fluid"] = sanitize_inlist(features["breasts_fluid"], milk_id_list, "milk")
|
||||
//vagina features
|
||||
features["has_vag"] = sanitize_integer(features["has_vag"], 0, 1, 0)
|
||||
features["vag_color"] = sanitize_hexcolor(features["vag_color"], 3, 0)
|
||||
|
||||
|
||||
return 1
|
||||
|
||||
/datum/preferences/proc/save_character()
|
||||
@@ -553,6 +552,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
//vagina features
|
||||
S["feature_has_vag"] << features["has_vag"]
|
||||
S["feature_vag_color"] << features["vag_color"]
|
||||
//womb features
|
||||
S["feature_has_womb"] << features["has_womb"]
|
||||
|
||||
return 1
|
||||
|
||||
|
||||
@@ -2,59 +2,65 @@
|
||||
set name = "Who"
|
||||
set category = "OOC"
|
||||
|
||||
var/msg = "<b>Current Players:</b>\n"
|
||||
var/msg = ""
|
||||
|
||||
var/list/Lines = list()
|
||||
|
||||
if(holder)
|
||||
if (check_rights(R_ADMIN,0) && isobserver(src.mob))//If they have +ADMIN and are a ghost they can see players IC names and statuses.
|
||||
var/mob/dead/observer/G = src.mob
|
||||
if(!G.started_as_observer)//If you aghost to do this, KorPhaeron will deadmin you in your sleep.
|
||||
log_admin("[key_name(usr)] checked advanced who in-round")
|
||||
for(var/client/C in clients)
|
||||
var/entry = "\t[C.key]"
|
||||
if(C.holder && C.holder.fakekey)
|
||||
entry += " <i>(as [C.holder.fakekey])</i>"
|
||||
if (isnewplayer(C.mob))
|
||||
entry += " - <font color='darkgray'><b>In Lobby</b></font>"
|
||||
else
|
||||
entry += " - Playing as [C.mob.real_name]"
|
||||
switch(C.mob.stat)
|
||||
if(UNCONSCIOUS)
|
||||
entry += " - <font color='darkgray'><b>Unconscious</b></font>"
|
||||
if(DEAD)
|
||||
if(isobserver(C.mob))
|
||||
var/mob/dead/observer/O = C.mob
|
||||
if(O.started_as_observer)
|
||||
entry += " - <font color='gray'>Observing</font>"
|
||||
else
|
||||
entry += " - <font color='black'><b>DEAD</b></font>"
|
||||
else
|
||||
entry += " - <font color='black'><b>DEAD</b></font>"
|
||||
if(is_special_character(C.mob))
|
||||
entry += " - <b><font color='red'>Antagonist</font></b>"
|
||||
entry += " (<A HREF='?_src_=holder;adminmoreinfo=\ref[C.mob]'>?</A>)"
|
||||
entry += " ([round(C.avgping, 1)]ms)"
|
||||
Lines += entry
|
||||
else//If they don't have +ADMIN, only show hidden admins
|
||||
for(var/client/C in clients)
|
||||
var/entry = "\t[C.key]"
|
||||
if(C.holder && C.holder.fakekey)
|
||||
entry += " <i>(as [C.holder.fakekey])</i>"
|
||||
entry += " ([round(C.avgping, 1)]ms)"
|
||||
Lines += entry
|
||||
else
|
||||
for(var/client/C in clients)
|
||||
if(C.holder && C.holder.fakekey)
|
||||
Lines += "[C.holder.fakekey] ([round(C.avgping, 1)]ms)"
|
||||
else
|
||||
Lines += "[C.key] ([round(C.avgping, 1)]ms)"
|
||||
if(length(admins) > 0)
|
||||
Lines += "<b>Admins:</b>"
|
||||
for(var/client/C in sortList(admins))
|
||||
if(!C.holder.fakekey)
|
||||
Lines += "\t <font color='#FF0000'>[C.key]</font>[show_info(C)]"
|
||||
|
||||
for(var/line in sortList(Lines))
|
||||
if(length(mentors) > 0)
|
||||
Lines += "<b>Mentors:</b>"
|
||||
for(var/client/C in sortList(clients))
|
||||
var/mentor = mentor_datums[C.ckey]
|
||||
if(mentor)
|
||||
Lines += "\t <font color='#0033CC'>[C.key]</font>[show_info(C)]"
|
||||
|
||||
Lines += "<b>Players:</b>"
|
||||
for(var/client/C in sortList(clients))
|
||||
if(!check_mentor_other(C) || (C.holder && C.holder.fakekey))
|
||||
Lines += "\t [C.key][show_info(C)]"
|
||||
|
||||
for(var/line in Lines)
|
||||
msg += "[line]\n"
|
||||
|
||||
msg += "<b>Total Players: [length(Lines)]</b>"
|
||||
to_chat(src, msg)
|
||||
src << msg
|
||||
|
||||
/client/proc/show_info(var/client/C)
|
||||
if(!C)
|
||||
return ""
|
||||
|
||||
if(!src.holder)
|
||||
return ""
|
||||
|
||||
var/entry = ""
|
||||
if(C.holder && C.holder.fakekey)
|
||||
entry += " <i>(as [C.holder.fakekey])</i>"
|
||||
if (isnewplayer(C.mob))
|
||||
entry += " - <font color='darkgray'><b>In Lobby</b></font>"
|
||||
else
|
||||
entry += " - Playing as [C.mob.real_name]"
|
||||
switch(C.mob.stat)
|
||||
if(UNCONSCIOUS)
|
||||
entry += " - <font color='darkgray'><b>Unconscious</b></font>"
|
||||
if(DEAD)
|
||||
if(isobserver(C.mob))
|
||||
var/mob/dead/observer/O = C.mob
|
||||
if(O.started_as_observer)
|
||||
entry += " - <font color='gray'>Observing</font>"
|
||||
else
|
||||
entry += " - <font color='black'><b>DEAD</b></font>"
|
||||
else
|
||||
entry += " - <font color='black'><b>DEAD</b></font>"
|
||||
if(is_special_character(C.mob))
|
||||
entry += " - <b><font color='red'>Antagonist</font></b>"
|
||||
entry += " (<A HREF='?_src_=holder;adminmoreinfo=\ref[C.mob]'>?</A>)"
|
||||
entry += " ([round(C.avgping, 1)]ms)"
|
||||
return entry
|
||||
|
||||
/client/verb/adminwho()
|
||||
set category = "Admin"
|
||||
@@ -84,8 +90,8 @@
|
||||
continue //Don't show afk admins to adminwho
|
||||
if(!C.holder.fakekey)
|
||||
msg += "\t[C] is a [C.holder.rank]\n"
|
||||
msg += "<span class='info'>Adminhelps are also sent to Discord. If no admins are available in game adminhelp anyways and an admin on Discord will see it and respond.</span>"
|
||||
to_chat(src, msg)
|
||||
msg += "<span class='info'>Adminhelps are also sent to IRC. If no admins are available in game adminhelp anyways and an admin on IRC will see it and respond.</span>"
|
||||
src << msg
|
||||
|
||||
/client/verb/mentorwho()
|
||||
set category = "Mentor"
|
||||
|
||||
@@ -423,6 +423,7 @@
|
||||
var/list/ammo_copy_vars
|
||||
var/list/gun_copy_vars
|
||||
var/badmin_mode = FALSE
|
||||
var/static/list/blacklisted_vars = list("locs", "loc", "contents", "x", "y", "z")
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/chameleon/New()
|
||||
..()
|
||||
@@ -449,13 +450,18 @@
|
||||
chameleon_ammo_vars = list()
|
||||
chameleon_gun_vars = list()
|
||||
chameleon_projectile_vars = list()
|
||||
for(var/V in chambered.vars)
|
||||
chambered.vars[V] = initial(chambered.vars[V])
|
||||
qdel(chambered.BB)
|
||||
if(chambered)
|
||||
for(var/v in ammo_copy_vars)
|
||||
if(v in blacklisted_vars) //Just in case admins go crazy.
|
||||
continue
|
||||
chambered.vars[v] = initial(chambered.vars[v])
|
||||
for(var/v in gun_copy_vars)
|
||||
if(v in blacklisted_vars)
|
||||
continue
|
||||
vars[v] = initial(vars[v])
|
||||
if(chambered.BB)
|
||||
qdel(chambered.BB)
|
||||
chambered.newshot()
|
||||
for(var/V in vars)
|
||||
vars[V] = initial(vars[V])
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/chameleon/proc/set_chameleon_ammo(obj/item/ammo_casing/AC, passthrough = TRUE, reset = FALSE)
|
||||
if(!istype(AC))
|
||||
@@ -464,7 +470,7 @@
|
||||
for(var/V in ammo_copy_vars)
|
||||
if(AC.vars[V])
|
||||
chameleon_ammo_vars[V] = AC.vars[V]
|
||||
if(chambered.vars[V])
|
||||
if(chambered && chambered.vars[V])
|
||||
chambered.vars[V] = AC.vars[V]
|
||||
if(passthrough)
|
||||
var/obj/item/projectile/P = AC.BB
|
||||
|
||||
@@ -14,7 +14,8 @@
|
||||
if(!mob) return //this doesn't happen
|
||||
|
||||
var/show_char = config.mentors_mobname_only
|
||||
var/mentor_msg = "<span class='mentornotice'><b><font color='purple'>MENTORHELP:</b> <b>[key_name_mentor(src, 1, 0, 1, show_char)]</b>: [msg]</font></span>"
|
||||
var/mentor_msg = "<span class='mentornotice'><b><font color='purple'>MENTORHELP:</b> <b>[key_name_mentor(src, 1, 0, 0, show_char)]</b>: [msg]</font></span>"
|
||||
var/admin_msg = "<span class='mentornotice'><b><font color='purple'>MENTORHELP:</b> <b>[ADMIN_FULLMONTY(src.mob)]</b>: [msg]</font></span>"
|
||||
log_mentor("MENTORHELP: [key_name_mentor(src, 0, 0, 0, 0)]: [msg]")
|
||||
|
||||
for(var/client/X in mentors)
|
||||
@@ -23,7 +24,7 @@
|
||||
|
||||
for(var/client/A in admins)
|
||||
to_chat(A, 'sound/items/bikehorn.ogg')
|
||||
to_chat(A, mentor_msg)
|
||||
to_chat(A, admin_msg)
|
||||
|
||||
to_chat(src, "<span class='mentornotice'><font color='purple'>PM to-<b>Mentors</b>: [msg]</font></span>")
|
||||
return
|
||||
|
||||
@@ -232,7 +232,7 @@
|
||||
if(!(text2path(href_list["release"]) in stack_list))
|
||||
return
|
||||
var/obj/item/stack/sheet/inp = stack_list[text2path(href_list["release"])]
|
||||
var/obj/item/stack/sheet/out = new inp.type(src,merge=FALSE)
|
||||
var/obj/item/stack/sheet/out = new inp.type(src, 0, FALSE)
|
||||
var/desired = input("How many sheets?", "How many sheets to eject?", 1) as null|num
|
||||
out.amount = round(min(desired,50,inp.amount))
|
||||
if(out.amount)
|
||||
|
||||
@@ -51,6 +51,10 @@
|
||||
new /datum/data/mining_equipment("Drone Ranged Upgrade",/obj/item/device/mine_bot_ugprade/cooldown, 600),
|
||||
new /datum/data/mining_equipment("Drone AI Upgrade", /obj/item/slimepotion/sentience/mining, 1000),
|
||||
new /datum/data/mining_equipment("Jump Boots", /obj/item/clothing/shoes/bhop, 2500),
|
||||
new /datum/data/mining_equipment("Survival Knife", /obj/item/weapon/kitchen/knife/combat/survival, 350),
|
||||
new /datum/data/mining_equipment("Survival Pen Economy Pack",/obj/item/weapon/storage/box/medipens/survival, 2000),
|
||||
new /datum/data/mining_equipment("Stimpack", /obj/item/weapon/reagent_containers/hypospray/medipen/stimpack, 250),
|
||||
new /datum/data/mining_equipment("Stimpack Economy Pack",/obj/item/weapon/storage/box/medipens/utility, 1000)
|
||||
)
|
||||
|
||||
/datum/data/mining_equipment
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
if(previewJob && !nude)
|
||||
mannequin.job = previewJob.title
|
||||
previewJob.equip(mannequin, TRUE)
|
||||
mannequin.update_body()
|
||||
CHECK_TICK
|
||||
preview_icon = icon('icons/effects/effects.dmi', "nothing")
|
||||
preview_icon.Scale((112), (32))
|
||||
|
||||
@@ -159,6 +159,11 @@
|
||||
species_traits += DIGITIGRADE
|
||||
if(DIGITIGRADE in species_traits)
|
||||
C.Digitigrade_Leg_Swap(FALSE)
|
||||
if(NOAROUSAL in species_traits)
|
||||
C.canbearoused = FALSE
|
||||
else
|
||||
if(C.client)
|
||||
C.canbearoused = C.client.prefs.arousable
|
||||
|
||||
/datum/species/proc/on_species_loss(mob/living/carbon/C)
|
||||
if(C.dna.species.exotic_bloodtype)
|
||||
@@ -349,8 +354,6 @@
|
||||
H.overlays_standing[BODY_LAYER] = standing
|
||||
|
||||
H.apply_overlay(BODY_LAYER)
|
||||
//citadel code
|
||||
handle_genitals(H)
|
||||
handle_mutant_bodyparts(H)
|
||||
|
||||
/datum/species/proc/handle_mutant_bodyparts(mob/living/carbon/human/H, forced_colour)
|
||||
|
||||
@@ -3,7 +3,7 @@ datum/species/mammal
|
||||
id = "mammal"
|
||||
default_color = "4B4B4B"
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR)
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "snout", "legs", "taur")
|
||||
mutant_bodyparts = list("mam_tail", "mam_ears", "mam_body_markings", "snout", "taur")
|
||||
default_features = list("mcolor" = "FFF","mcolor2" = "FFF","mcolor3" = "FFF", "body_markings" = "None", "mam_tail" = "None", "mam_ears" = "None", "mam_body_markings" = "None", "taur" = "None")
|
||||
attack_verb = "claw"
|
||||
attack_sound = 'sound/weapons/slash.ogg'
|
||||
|
||||
@@ -60,6 +60,7 @@ There are several things that need to be remembered:
|
||||
/mob/living/carbon/human/update_body()
|
||||
remove_overlay(BODY_LAYER)
|
||||
dna.species.handle_body(src)
|
||||
dna.species.handle_genitals(src)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/human/update_fire()
|
||||
@@ -73,6 +74,7 @@ There are several things that need to be remembered:
|
||||
if(!..())
|
||||
icon_render_key = null //invalidate bodyparts cache
|
||||
update_body()
|
||||
update_genitals()
|
||||
update_hair()
|
||||
update_inv_w_uniform()
|
||||
update_inv_wear_id()
|
||||
@@ -256,6 +258,11 @@ There are several things that need to be remembered:
|
||||
if(get_num_legs() <2)
|
||||
return
|
||||
|
||||
if("taur" in dna.species.mutant_bodyparts)
|
||||
var/tpref = dna.features["taur"]
|
||||
if(tpref == "Naga")
|
||||
return
|
||||
|
||||
if(client && hud_used)
|
||||
var/obj/screen/inventory/inv = hud_used.inv_slots[slot_shoes]
|
||||
inv.update_icon()
|
||||
@@ -267,10 +274,7 @@ There are several things that need to be remembered:
|
||||
client.screen += shoes //add it to client's screen
|
||||
update_observer_view(shoes,1)
|
||||
var/image/standing = shoes.build_worn_icon(state = shoes.icon_state, default_layer = SHOES_LAYER, default_icon_file = 'icons/mob/feet.dmi')
|
||||
if("taur" in dna.species.mutant_bodyparts)
|
||||
switch(dna.features["taur"])
|
||||
if(!"Naga" || "None")
|
||||
overlays_standing[SHOES_LAYER] = standing
|
||||
overlays_standing[SHOES_LAYER] = standing
|
||||
|
||||
apply_overlay(SHOES_LAYER)
|
||||
|
||||
|
||||
@@ -376,6 +376,7 @@
|
||||
key = "me"
|
||||
key_third_person = "custom"
|
||||
message = null
|
||||
mob_type_blacklist_typecache = list(/mob/living/brain)
|
||||
|
||||
/datum/emote/living/custom/proc/check_invalid(mob/user, input)
|
||||
. = TRUE
|
||||
|
||||
@@ -320,9 +320,9 @@
|
||||
I = image("icon"='icons/mob/human_parts.dmi', "icon_state"="[species_id]_[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
|
||||
else
|
||||
if(should_draw_gender)
|
||||
I = image("icon"='icons/mob/augments.dmi', "icon_state"="[initial(icon_state)]_[icon_gender]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
|
||||
I = image("icon"= icon, "icon_state"="[body_zone]_[icon_gender]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
|
||||
else
|
||||
I = image("icon"='icons/mob/augments.dmi', "icon_state"="[initial(icon_state)]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
|
||||
I = image("icon"= icon, "icon_state"="[body_zone]", "layer"=-BODYPARTS_LAYER, "dir"=image_dir)
|
||||
standing += I
|
||||
return standing
|
||||
|
||||
@@ -554,4 +554,4 @@
|
||||
icon = 'icons/obj/surgery.dmi'
|
||||
icon_state = "severedtail"
|
||||
color = "#161"
|
||||
var/markings = "Smooth"
|
||||
var/markings = "Smooth"
|
||||
@@ -1,5 +1,3 @@
|
||||
|
||||
|
||||
/obj/item/bodypart/l_arm/robot
|
||||
name = "cyborg left arm"
|
||||
desc = "A skeletal limb wrapped in pseudomuscles, with a low-conductivity case."
|
||||
@@ -7,7 +5,7 @@
|
||||
item_state = "buildpipe"
|
||||
icon = 'icons/obj/robot_parts.dmi'
|
||||
flags = CONDUCT
|
||||
icon_state = "l_arm"
|
||||
icon_state = "borg_l_arm"
|
||||
status = BODYPART_ROBOTIC
|
||||
|
||||
|
||||
@@ -18,7 +16,7 @@
|
||||
item_state = "buildpipe"
|
||||
icon = 'icons/obj/robot_parts.dmi'
|
||||
flags = CONDUCT
|
||||
icon_state = "r_arm"
|
||||
icon_state = "borg_r_arm"
|
||||
status = BODYPART_ROBOTIC
|
||||
|
||||
|
||||
@@ -29,7 +27,7 @@
|
||||
item_state = "buildpipe"
|
||||
icon = 'icons/obj/robot_parts.dmi'
|
||||
flags = CONDUCT
|
||||
icon_state = "l_leg"
|
||||
icon_state = "borg_l_leg"
|
||||
status = BODYPART_ROBOTIC
|
||||
|
||||
|
||||
@@ -40,7 +38,7 @@
|
||||
item_state = "buildpipe"
|
||||
icon = 'icons/obj/robot_parts.dmi'
|
||||
flags = CONDUCT
|
||||
icon_state = "r_leg"
|
||||
icon_state = "borg_r_leg"
|
||||
status = BODYPART_ROBOTIC
|
||||
|
||||
|
||||
@@ -50,7 +48,7 @@
|
||||
item_state = "buildpipe"
|
||||
icon = 'icons/obj/robot_parts.dmi'
|
||||
flags = CONDUCT
|
||||
icon_state = "chest"
|
||||
icon_state = "borg_chest"
|
||||
status = BODYPART_ROBOTIC
|
||||
var/wired = 0
|
||||
var/obj/item/weapon/stock_parts/cell/cell = null
|
||||
@@ -100,7 +98,7 @@
|
||||
item_state = "buildpipe"
|
||||
icon = 'icons/obj/robot_parts.dmi'
|
||||
flags = CONDUCT
|
||||
icon_state = "head"
|
||||
icon_state = "borg_head"
|
||||
status = BODYPART_ROBOTIC
|
||||
var/obj/item/device/assembly/flash/handheld/flash1 = null
|
||||
var/obj/item/device/assembly/flash/handheld/flash2 = null
|
||||
@@ -165,27 +163,27 @@
|
||||
/obj/item/bodypart/l_arm/robot/surplus
|
||||
name = "surplus prosthetic left arm"
|
||||
desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing."
|
||||
icon = 'icons/mob/augments.dmi'
|
||||
icon_state = "surplus_l_arm"
|
||||
icon = 'icons/mob/surplus_augments.dmi'
|
||||
icon_state = "l_arm"
|
||||
max_damage = 20
|
||||
|
||||
/obj/item/bodypart/r_arm/robot/surplus
|
||||
name = "surplus prosthetic right arm"
|
||||
desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing."
|
||||
icon = 'icons/mob/augments.dmi'
|
||||
icon_state = "surplus_r_arm"
|
||||
icon = 'icons/mob/surplus_augments.dmi'
|
||||
icon_state = "r_arm"
|
||||
max_damage = 20
|
||||
|
||||
/obj/item/bodypart/l_leg/robot/surplus
|
||||
name = "surplus prosthetic left leg"
|
||||
desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing."
|
||||
icon = 'icons/mob/augments.dmi'
|
||||
icon_state = "surplus_l_leg"
|
||||
icon = 'icons/mob/surplus_augments.dmi'
|
||||
icon_state = "l_leg"
|
||||
max_damage = 20
|
||||
|
||||
/obj/item/bodypart/r_leg/robot/surplus
|
||||
name = "surplus prosthetic right leg"
|
||||
desc = "A skeletal, robotic limb. Outdated and fragile, but it's still better than nothing."
|
||||
icon = 'icons/mob/augments.dmi'
|
||||
icon = 'icons/mob/surplus_augments.dmi'
|
||||
icon_state = "surplus_r_leg"
|
||||
max_damage = 20
|
||||
max_damage = 20
|
||||
@@ -1,4 +1,3 @@
|
||||
|
||||
/////AUGMENTATION SURGERIES//////
|
||||
|
||||
|
||||
@@ -46,13 +45,15 @@
|
||||
|
||||
//SURGERY STEP SUCCESSES
|
||||
|
||||
/datum/surgery_step/add_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
|
||||
/datum/surgery_step/add_limb/success(mob/user, mob/living/carbon/target, target_zone, obj/item/bodypart/tool, datum/surgery/surgery)
|
||||
if(L)
|
||||
user.visible_message("[user] successfully augments [target]'s [parse_zone(target_zone)]!", "<span class='notice'>You successfully augment [target]'s [parse_zone(target_zone)].</span>")
|
||||
L.change_bodypart_status(BODYPART_ROBOTIC, 1)
|
||||
L.icon = tool.icon
|
||||
L.max_damage = tool.max_damage
|
||||
user.drop_item()
|
||||
qdel(tool)
|
||||
target.update_damage_overlays()
|
||||
target.update_body_parts()
|
||||
target.updatehealth()
|
||||
add_logs(user, target, "augmented", addition="by giving him new [parse_zone(target_zone)] INTENT: [uppertext(user.a_intent)]")
|
||||
else
|
||||
|
||||
@@ -62,6 +62,7 @@
|
||||
S.icon_state = icon_state
|
||||
S.origin_tech = origin_tech
|
||||
S.w_class = w_class
|
||||
S.color = color
|
||||
|
||||
return S
|
||||
|
||||
|
||||
@@ -156,14 +156,17 @@
|
||||
stop_pulling()
|
||||
|
||||
// Inform Admins
|
||||
var/prey_braindead
|
||||
var/prey_stat
|
||||
if(prey.ckey)
|
||||
prey_stat = prey.stat//only return this if they're not an unmonkey or whatever
|
||||
if(!prey.client)//if they disconnected, tell us
|
||||
prey_braindead = 1
|
||||
if (pred == user)
|
||||
message_admins("[key_name(pred)] ate [key_name(prey)]. ([pred ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[pred.x];Y=[pred.y];Z=[pred.z]'>JMP</a>" : "null"])")
|
||||
message_admins("[ADMIN_LOOKUPFLW(pred)] ate [ADMIN_LOOKUPFLW(prey)][!prey_braindead ? "" : " (BRAINDEAD)"][prey_stat ? " (DEAD/UNCONSCIOUS)" : ""].")
|
||||
log_attack("[key_name(pred)] ate [key_name(prey)]")
|
||||
else if (prey == !client && stat != DEAD)
|
||||
message_admins("[key_name(pred)] ate [key_name(prey)] (braindead) ([pred ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[pred.x];Y=[pred.y];Z=[pred.z]'>JMP</a>" : "null"])")
|
||||
log_attack("[key_name(pred)] ate [key_name(prey)] (braindead)")
|
||||
else
|
||||
message_admins("[key_name(user)] forced [key_name(pred)] to eat [key_name(prey)]. ([pred ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[pred.x];Y=[pred.y];Z=[pred.z]'>JMP</a>" : "null"])")
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] forced [ADMIN_LOOKUPFLW(pred)] to eat [ADMIN_LOOKUPFLW(prey)].")
|
||||
log_attack("[key_name(user)] forced [key_name(pred)] to eat [key_name(prey)].")
|
||||
return TRUE
|
||||
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
load_mode()
|
||||
load_motd()
|
||||
load_admins()
|
||||
load_mentors()
|
||||
if(config.usewhitelist)
|
||||
load_whitelist()
|
||||
LoadBans()
|
||||
|
||||
@@ -1,5 +0,0 @@
|
||||
author: "coiax"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Blue circuit floors are now restored to their normal colour if
|
||||
an AI doomsday device is disabled."
|
||||
@@ -1,4 +0,0 @@
|
||||
author: "Lzimann"
|
||||
delete-after: True
|
||||
changes:
|
||||
- bugfix: "Fixes TGUI not working for people without IE11"
|
||||
@@ -1,36 +0,0 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: "Jay"
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
|
||||
# Any changes you've made. See valid prefix list above.
|
||||
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
|
||||
# SCREW THIS UP AND IT WON'T WORK.
|
||||
# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit.
|
||||
# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Added the Give verb in the IC tab."
|
||||
|
||||
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 843 B |
|
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 27 KiB |
|
Before Width: | Height: | Size: 18 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 3.0 KiB |
|
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |