Merge pull request #5 from Citadel-Station-13/master

Further updating
This commit is contained in:
TaxMaster
2017-03-31 17:12:00 -05:00
committed by GitHub
63 changed files with 508 additions and 7496 deletions
+132 -52
View File
@@ -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
File diff suppressed because it is too large Load Diff
+1
View File
@@ -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()
+69 -7
View File
@@ -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
View File
@@ -1,3 +1,4 @@
/area/maintenance/bar
name = "Maintenance Bar"
icon = 'code/citadel/icons/areas.dmi'
icon_state = "maintbar"
Binary file not shown.

After

Width:  |  Height:  |  Size: 403 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 B

After

Width:  |  Height:  |  Size: 405 B

+6 -5
View File
@@ -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))
+33 -22
View File
@@ -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"
-1
View File
@@ -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
+24 -15
View File
@@ -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
+8 -12
View File
@@ -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.")
+3 -2
View File
@@ -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
+4
View File
@@ -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 ..()
+8 -2
View File
@@ -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)
+4
View File
@@ -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")
+12
View File
@@ -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
+1
View File
@@ -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
+5 -2
View File
@@ -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
+2
View File
@@ -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
+3 -1
View File
@@ -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"
+2 -2
View File
@@ -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)
+3
View File
@@ -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>"
+4 -1
View File
@@ -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)
+8 -1
View File
@@ -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()
-1
View File
@@ -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
+37 -36
View File
@@ -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
+54 -48
View File
@@ -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"
+13 -7
View File
@@ -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
+3 -2
View File
@@ -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
+1 -1
View File
@@ -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)
+4
View File
@@ -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)
+1
View File
@@ -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
+3 -3
View File
@@ -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
+4 -3
View File
@@ -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
+8 -5
View File
@@ -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
+1
View File
@@ -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"
-36
View File
@@ -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."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 843 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.