Merge pull request #1 from Citadel-Station-13/master
I hope this is the right place
This commit is contained in:
@@ -26,6 +26,7 @@
|
|||||||
"g" = (
|
"g" = (
|
||||||
/obj/structure/alien/weeds,
|
/obj/structure/alien/weeds,
|
||||||
/obj/structure/table_frame,
|
/obj/structure/table_frame,
|
||||||
|
/obj/item/organ/alien/plasmavessel/small/tiny,
|
||||||
/turf/open/floor/plating/airless,
|
/turf/open/floor/plating/airless,
|
||||||
/area/ruin/unpowered)
|
/area/ruin/unpowered)
|
||||||
"h" = (
|
"h" = (
|
||||||
@@ -77,9 +78,15 @@
|
|||||||
/obj/structure/alien/weeds,
|
/obj/structure/alien/weeds,
|
||||||
/obj/structure/bed/nest,
|
/obj/structure/bed/nest,
|
||||||
/obj/effect/decal/remains/xeno,
|
/obj/effect/decal/remains/xeno,
|
||||||
|
/obj/item/organ/brain/alien,
|
||||||
|
/turf/open/floor/plating/airless,
|
||||||
|
/area/ruin/unpowered)
|
||||||
|
"s" = (
|
||||||
|
/obj/structure/alien/weeds,
|
||||||
|
/obj/effect/decal/remains/xeno,
|
||||||
|
/obj/item/organ/alien/plasmavessel/small,
|
||||||
/turf/open/floor/plating/airless,
|
/turf/open/floor/plating/airless,
|
||||||
/area/ruin/unpowered)
|
/area/ruin/unpowered)
|
||||||
|
|
||||||
(1,1,1) = {"
|
(1,1,1) = {"
|
||||||
a
|
a
|
||||||
a
|
a
|
||||||
@@ -106,7 +113,7 @@ a
|
|||||||
a
|
a
|
||||||
a
|
a
|
||||||
b
|
b
|
||||||
b
|
s
|
||||||
b
|
b
|
||||||
a
|
a
|
||||||
a
|
a
|
||||||
|
|||||||
@@ -64,12 +64,17 @@
|
|||||||
/obj/structure/chair{
|
/obj/structure/chair{
|
||||||
dir = 4
|
dir = 4
|
||||||
},
|
},
|
||||||
|
/obj/item/clothing/under/polychromic/shirt,
|
||||||
|
/obj/item/clothing/neck/tie/black,
|
||||||
|
/obj/item/clothing/shoes/laceup,
|
||||||
|
/obj/item/storage/wallet/random,
|
||||||
|
/obj/item/clothing/gloves/color/white,
|
||||||
/obj/effect/decal/remains/human,
|
/obj/effect/decal/remains/human,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/ruin/space/has_grav/powered/dinner_for_two)
|
/area/ruin/space/has_grav/powered/dinner_for_two)
|
||||||
"n" = (
|
"n" = (
|
||||||
/obj/structure/table,
|
/obj/structure/table,
|
||||||
/obj/item/candle{
|
/obj/item/candle/infinite{
|
||||||
pixel_y = 5
|
pixel_y = 5
|
||||||
},
|
},
|
||||||
/obj/item/trash/plate{
|
/obj/item/trash/plate{
|
||||||
@@ -84,6 +89,11 @@
|
|||||||
/obj/structure/chair{
|
/obj/structure/chair{
|
||||||
dir = 8
|
dir = 8
|
||||||
},
|
},
|
||||||
|
/obj/item/clothing/under/polychromic/skirt,
|
||||||
|
/obj/item/clothing/shoes/laceup,
|
||||||
|
/obj/item/clothing/gloves/color/white,
|
||||||
|
/obj/item/clothing/glasses/regular,
|
||||||
|
/obj/item/lipstick/random,
|
||||||
/obj/effect/decal/remains/human,
|
/obj/effect/decal/remains/human,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/ruin/space/has_grav/powered/dinner_for_two)
|
/area/ruin/space/has_grav/powered/dinner_for_two)
|
||||||
|
|||||||
@@ -11448,12 +11448,6 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/crew_quarters/fitness)
|
/area/crew_quarters/fitness)
|
||||||
"aAq" = (
|
|
||||||
/obj/machinery/atmospherics/components/unary/tank/air{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating,
|
|
||||||
/area/maintenance/starboard/fore)
|
|
||||||
"aAr" = (
|
"aAr" = (
|
||||||
/obj/structure/closet,
|
/obj/structure/closet,
|
||||||
/obj/effect/decal/cleanable/cobweb,
|
/obj/effect/decal/cleanable/cobweb,
|
||||||
@@ -11963,13 +11957,6 @@
|
|||||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/maintenance/starboard/fore)
|
/area/maintenance/starboard/fore)
|
||||||
"aBD" = (
|
|
||||||
/obj/machinery/meter,
|
|
||||||
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
|
|
||||||
dir = 8
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating,
|
|
||||||
/area/maintenance/starboard/fore)
|
|
||||||
"aBE" = (
|
"aBE" = (
|
||||||
/obj/item/clothing/under/rank/mailman,
|
/obj/item/clothing/under/rank/mailman,
|
||||||
/obj/item/clothing/head/mailman,
|
/obj/item/clothing/head/mailman,
|
||||||
@@ -12352,10 +12339,6 @@
|
|||||||
/obj/effect/spawner/structure/window/reinforced,
|
/obj/effect/spawner/structure/window/reinforced,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/crew_quarters/fitness)
|
/area/crew_quarters/fitness)
|
||||||
"aCx" = (
|
|
||||||
/obj/machinery/atmospherics/components/binary/valve,
|
|
||||||
/turf/open/floor/plating,
|
|
||||||
/area/maintenance/starboard/fore)
|
|
||||||
"aCy" = (
|
"aCy" = (
|
||||||
/obj/effect/decal/cleanable/oil,
|
/obj/effect/decal/cleanable/oil,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
@@ -12961,10 +12944,8 @@
|
|||||||
/turf/open/floor/plasteel/freezer,
|
/turf/open/floor/plasteel/freezer,
|
||||||
/area/crew_quarters/toilet)
|
/area/crew_quarters/toilet)
|
||||||
"aDV" = (
|
"aDV" = (
|
||||||
|
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
|
||||||
/obj/machinery/meter,
|
/obj/machinery/meter,
|
||||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
|
||||||
dir = 5
|
|
||||||
},
|
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/maintenance/starboard/fore)
|
/area/maintenance/starboard/fore)
|
||||||
"aDW" = (
|
"aDW" = (
|
||||||
@@ -56758,6 +56739,12 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/wood,
|
/turf/open/floor/wood,
|
||||||
/area/maintenance/bar)
|
/area/maintenance/bar)
|
||||||
|
"gOZ" = (
|
||||||
|
/obj/machinery/door/airlock/maintenance{
|
||||||
|
req_access_txt = "12"
|
||||||
|
},
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/crew_quarters/fitness)
|
||||||
"gWd" = (
|
"gWd" = (
|
||||||
/obj/structure/cable{
|
/obj/structure/cable{
|
||||||
icon_state = "1-4"
|
icon_state = "1-4"
|
||||||
@@ -56878,6 +56865,12 @@
|
|||||||
/obj/machinery/rnd/production/techfab/department/cargo,
|
/obj/machinery/rnd/production/techfab/department/cargo,
|
||||||
/turf/open/floor/plasteel,
|
/turf/open/floor/plasteel,
|
||||||
/area/quartermaster/office)
|
/area/quartermaster/office)
|
||||||
|
"jnR" = (
|
||||||
|
/obj/machinery/atmospherics/components/binary/valve{
|
||||||
|
dir = 4
|
||||||
|
},
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/maintenance/starboard/fore)
|
||||||
"jqv" = (
|
"jqv" = (
|
||||||
/obj/structure/chair/wood/normal{
|
/obj/structure/chair/wood/normal{
|
||||||
dir = 1
|
dir = 1
|
||||||
@@ -57260,6 +57253,12 @@
|
|||||||
/obj/item/reagent_containers/food/drinks/beer,
|
/obj/item/reagent_containers/food/drinks/beer,
|
||||||
/turf/open/floor/plating,
|
/turf/open/floor/plating,
|
||||||
/area/maintenance/starboard/aft)
|
/area/maintenance/starboard/aft)
|
||||||
|
"rsp" = (
|
||||||
|
/obj/machinery/atmospherics/components/unary/tank/air{
|
||||||
|
dir = 4
|
||||||
|
},
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/maintenance/starboard/fore)
|
||||||
"rBq" = (
|
"rBq" = (
|
||||||
/obj/item/clothing/head/kitty,
|
/obj/item/clothing/head/kitty,
|
||||||
/obj/item/clothing/under/maid,
|
/obj/item/clothing/under/maid,
|
||||||
@@ -57561,6 +57560,13 @@
|
|||||||
},
|
},
|
||||||
/turf/open/floor/wood,
|
/turf/open/floor/wood,
|
||||||
/area/maintenance/bar)
|
/area/maintenance/bar)
|
||||||
|
"vpY" = (
|
||||||
|
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
|
||||||
|
dir = 10
|
||||||
|
},
|
||||||
|
/obj/machinery/meter,
|
||||||
|
/turf/open/floor/plating,
|
||||||
|
/area/maintenance/starboard/fore)
|
||||||
"vxh" = (
|
"vxh" = (
|
||||||
/obj/structure/table,
|
/obj/structure/table,
|
||||||
/obj/effect/spawner/lootdrop/maintenance{
|
/obj/effect/spawner/lootdrop/maintenance{
|
||||||
@@ -96101,12 +96107,12 @@ arj
|
|||||||
auB
|
auB
|
||||||
auB
|
auB
|
||||||
arj
|
arj
|
||||||
arj
|
gOZ
|
||||||
arj
|
arj
|
||||||
anf
|
anf
|
||||||
anf
|
anf
|
||||||
anf
|
rsp
|
||||||
awD
|
rsp
|
||||||
alP
|
alP
|
||||||
aGB
|
aGB
|
||||||
aIf
|
aIf
|
||||||
@@ -96355,14 +96361,14 @@ aaa
|
|||||||
aaa
|
aaa
|
||||||
aaf
|
aaf
|
||||||
aaa
|
aaa
|
||||||
aaa
|
gXs
|
||||||
aaf
|
aoV
|
||||||
aaa
|
|
||||||
aaa
|
|
||||||
alP
|
alP
|
||||||
ayf
|
anf
|
||||||
aBD
|
anf
|
||||||
aCx
|
anf
|
||||||
|
anf
|
||||||
|
aDW
|
||||||
aDV
|
aDV
|
||||||
alP
|
alP
|
||||||
aGL
|
aGL
|
||||||
@@ -96612,15 +96618,15 @@ aaa
|
|||||||
aaa
|
aaa
|
||||||
aaf
|
aaf
|
||||||
aaa
|
aaa
|
||||||
aaa
|
gXs
|
||||||
aaf
|
aoV
|
||||||
aaa
|
|
||||||
aaa
|
|
||||||
alP
|
alP
|
||||||
aAq
|
awD
|
||||||
aAq
|
anf
|
||||||
|
anf
|
||||||
|
anf
|
||||||
aCy
|
aCy
|
||||||
aCG
|
jnR
|
||||||
alP
|
alP
|
||||||
aGL
|
aGL
|
||||||
avI
|
avI
|
||||||
@@ -96877,7 +96883,7 @@ alP
|
|||||||
alP
|
alP
|
||||||
alP
|
alP
|
||||||
alP
|
alP
|
||||||
aDW
|
vpY
|
||||||
aFn
|
aFn
|
||||||
aGP
|
aGP
|
||||||
avI
|
avI
|
||||||
|
|||||||
@@ -4696,7 +4696,7 @@
|
|||||||
},
|
},
|
||||||
/area/abductor_ship)
|
/area/abductor_ship)
|
||||||
"lI" = (
|
"lI" = (
|
||||||
/turf/open/space/transit,
|
/turf/open/space/transit/centcom,
|
||||||
/area/space)
|
/area/space)
|
||||||
"lJ" = (
|
"lJ" = (
|
||||||
/obj/machinery/door/airlock/centcom{
|
/obj/machinery/door/airlock/centcom{
|
||||||
@@ -20511,7 +20511,7 @@ fX
|
|||||||
fX
|
fX
|
||||||
fX
|
fX
|
||||||
fX
|
fX
|
||||||
fY
|
fX
|
||||||
fX
|
fX
|
||||||
fX
|
fX
|
||||||
fX
|
fX
|
||||||
@@ -21282,7 +21282,7 @@ fX
|
|||||||
fX
|
fX
|
||||||
fX
|
fX
|
||||||
fX
|
fX
|
||||||
fX
|
fY
|
||||||
fX
|
fX
|
||||||
fX
|
fX
|
||||||
fX
|
fX
|
||||||
|
|||||||
@@ -97,6 +97,7 @@
|
|||||||
#define NO_DNA_COPY 14
|
#define NO_DNA_COPY 14
|
||||||
#define DRINKSBLOOD 15
|
#define DRINKSBLOOD 15
|
||||||
#define NOEYES 16
|
#define NOEYES 16
|
||||||
|
#define MARKINGS 17
|
||||||
|
|
||||||
#define ORGAN_SLOT_BRAIN "brain"
|
#define ORGAN_SLOT_BRAIN "brain"
|
||||||
#define ORGAN_SLOT_APPENDIX "appendix"
|
#define ORGAN_SLOT_APPENDIX "appendix"
|
||||||
|
|||||||
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
#define R_DEFAULT R_AUTOLOGIN
|
#define R_DEFAULT R_AUTOLOGIN
|
||||||
|
|
||||||
#define R_EVERYTHING (1<<15)-1 //the sum of all other rank permissions, used for +EVERYTHING
|
#define R_EVERYTHING ALL //the sum of all other rank permissions, used for +EVERYTHING
|
||||||
|
|
||||||
#define ADMIN_QUE(user) "(<a href='?_src_=holder;[HrefToken(TRUE)];adminmoreinfo=[REF(user)]'>?</a>)"
|
#define ADMIN_QUE(user) "(<a href='?_src_=holder;[HrefToken(TRUE)];adminmoreinfo=[REF(user)]'>?</a>)"
|
||||||
#define ADMIN_FLW(user) "(<a href='?_src_=holder;[HrefToken(TRUE)];adminplayerobservefollow=[REF(user)]'>FLW</a>)"
|
#define ADMIN_FLW(user) "(<a href='?_src_=holder;[HrefToken(TRUE)];adminplayerobservefollow=[REF(user)]'>FLW</a>)"
|
||||||
|
|||||||
@@ -93,6 +93,7 @@
|
|||||||
#define MUTCOLORS3 36
|
#define MUTCOLORS3 36
|
||||||
#define NOAROUSAL 37 //Stops all arousal effects
|
#define NOAROUSAL 37 //Stops all arousal effects
|
||||||
#define NOGENITALS 38 //Cannot create, use, or otherwise have genitals
|
#define NOGENITALS 38 //Cannot create, use, or otherwise have genitals
|
||||||
|
#define MATRIXED 39 //if icon is color matrix'd
|
||||||
|
|
||||||
//Citadel istypes
|
//Citadel istypes
|
||||||
#define isborer(A) (istype(A, /mob/living/simple_animal/borer))
|
#define isborer(A) (istype(A, /mob/living/simple_animal/borer))
|
||||||
|
|||||||
@@ -97,6 +97,20 @@
|
|||||||
//the define for visible message range in combat
|
//the define for visible message range in combat
|
||||||
#define COMBAT_MESSAGE_RANGE 3
|
#define COMBAT_MESSAGE_RANGE 3
|
||||||
|
|
||||||
|
//Shove knockdown lengths (deciseconds)
|
||||||
|
#define SHOVE_KNOCKDOWN_SOLID 30
|
||||||
|
#define SHOVE_KNOCKDOWN_HUMAN 30
|
||||||
|
#define SHOVE_KNOCKDOWN_TABLE 30
|
||||||
|
#define SHOVE_KNOCKDOWN_COLLATERAL 10
|
||||||
|
//Shove slowdown
|
||||||
|
#define SHOVE_SLOWDOWN_ID "shove_slowdown"
|
||||||
|
#define SHOVE_SLOWDOWN_LENGTH 30
|
||||||
|
#define SHOVE_SLOWDOWN_STRENGTH 0.85 //multiplier
|
||||||
|
//Shove disarming item list
|
||||||
|
GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list(
|
||||||
|
/obj/item/gun)))
|
||||||
|
|
||||||
|
|
||||||
//Combat object defines
|
//Combat object defines
|
||||||
|
|
||||||
//Embedded objects
|
//Embedded objects
|
||||||
@@ -118,6 +132,10 @@
|
|||||||
#define TRIGGER_GUARD_ALLOW_ALL -1
|
#define TRIGGER_GUARD_ALLOW_ALL -1
|
||||||
#define TRIGGER_GUARD_NONE 0
|
#define TRIGGER_GUARD_NONE 0
|
||||||
#define TRIGGER_GUARD_NORMAL 1
|
#define TRIGGER_GUARD_NORMAL 1
|
||||||
|
//E-gun self-recharge values
|
||||||
|
#define EGUN_NO_SELFCHARGE 0
|
||||||
|
#define EGUN_SELFCHARGE 1
|
||||||
|
#define EGUN_SELFCHARGE_BORG 2
|
||||||
|
|
||||||
//Object/Item sharpness
|
//Object/Item sharpness
|
||||||
#define IS_BLUNT 0
|
#define IS_BLUNT 0
|
||||||
|
|||||||
@@ -51,10 +51,11 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
|||||||
|
|
||||||
//Human Overlays Indexes/////////
|
//Human Overlays Indexes/////////
|
||||||
//LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS
|
//LOTS OF CIT CHANGES HERE. BE CAREFUL WHEN UPSTREAM ADDS MORE LAYERS
|
||||||
#define MUTATIONS_LAYER 30 //mutations. Tk headglows, cold resistance glow, etc
|
#define MUTATIONS_LAYER 31 //mutations. Tk headglows, cold resistance glow, etc
|
||||||
#define GENITALS_BEHIND_LAYER 29 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
|
#define GENITALS_BEHIND_LAYER 30 //Some genitalia needs to be behind everything, such as with taurs (Taurs use body_behind_layer
|
||||||
#define BODY_BEHIND_LAYER 28 //certain mutantrace features (tail when looking south) that must appear behind the body parts
|
#define BODY_BEHIND_LAYER 29 //certain mutantrace features (tail when looking south) that must appear behind the body parts
|
||||||
#define BODYPARTS_LAYER 27 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
|
#define BODYPARTS_LAYER 28 //Initially "AUGMENTS", this was repurposed to be a catch-all bodyparts flag
|
||||||
|
#define MARKING_LAYER 27 //Matrixed body markings because clashing with snouts?
|
||||||
#define BODY_ADJ_LAYER 26 //certain mutantrace features (snout, body markings) that must appear above the body parts
|
#define BODY_ADJ_LAYER 26 //certain mutantrace features (snout, body markings) that must appear above the body parts
|
||||||
#define GENITALS_ADJ_LAYER 25
|
#define GENITALS_ADJ_LAYER 25
|
||||||
#define BODY_LAYER 24 //underwear, undershirts, socks, eyes, lips(makeup)
|
#define BODY_LAYER 24 //underwear, undershirts, socks, eyes, lips(makeup)
|
||||||
@@ -82,7 +83,7 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
|||||||
#define HANDS_LAYER 3
|
#define HANDS_LAYER 3
|
||||||
#define BODY_FRONT_LAYER 2
|
#define BODY_FRONT_LAYER 2
|
||||||
#define FIRE_LAYER 1 //If you're on fire
|
#define FIRE_LAYER 1 //If you're on fire
|
||||||
#define TOTAL_LAYERS 30 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
|
#define TOTAL_LAYERS 31 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_;
|
||||||
|
|
||||||
//Human Overlay Index Shortcuts for alternate_worn_layer, layers
|
//Human Overlay Index Shortcuts for alternate_worn_layer, layers
|
||||||
//Because I *KNOW* somebody will think layer+1 means "above"
|
//Because I *KNOW* somebody will think layer+1 means "above"
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
#define NOBLUDGEON (1<<7) // when an item has this it produces no "X has been hit by Y with Z" message in the default attackby()
|
#define NOBLUDGEON (1<<7) // when an item has this it produces no "X has been hit by Y with Z" message in the default attackby()
|
||||||
#define NODROP (1<<8) // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted.
|
#define NODROP (1<<8) // This flag makes it so that an item literally cannot be removed at all, or at least that's how it should be. Only deleted.
|
||||||
#define ABSTRACT (1<<9) // for all things that are technically items but used for various different stuff
|
#define ABSTRACT (1<<9) // for all things that are technically items but used for various different stuff
|
||||||
|
#define IMMUTABLE_SLOW (1<<10) //When players should not be able to change the slowdown of the item (Speed potions, ect)
|
||||||
|
|
||||||
// Flags for the clothing_flags var on /obj/item/clothing
|
// Flags for the clothing_flags var on /obj/item/clothing
|
||||||
|
|
||||||
|
|||||||
@@ -35,7 +35,7 @@
|
|||||||
#define TRANSIT_REQUEST 1
|
#define TRANSIT_REQUEST 1
|
||||||
#define TRANSIT_READY 2
|
#define TRANSIT_READY 2
|
||||||
|
|
||||||
#define SHUTTLE_TRANSIT_BORDER 8
|
#define SHUTTLE_TRANSIT_BORDER 10
|
||||||
|
|
||||||
#define PARALLAX_LOOP_TIME 25
|
#define PARALLAX_LOOP_TIME 25
|
||||||
#define HYPERSPACE_END_TIME 5
|
#define HYPERSPACE_END_TIME 5
|
||||||
|
|||||||
@@ -57,6 +57,7 @@
|
|||||||
#define TRAIT_HEAVY_SLEEPER "heavy_sleeper"
|
#define TRAIT_HEAVY_SLEEPER "heavy_sleeper"
|
||||||
#define TRAIT_NIGHT_VISION "night_vision"
|
#define TRAIT_NIGHT_VISION "night_vision"
|
||||||
#define TRAIT_LIGHT_STEP "light_step"
|
#define TRAIT_LIGHT_STEP "light_step"
|
||||||
|
#define TRAIT_SPEEDY_STEP "speedy_step"
|
||||||
#define TRAIT_SPIRITUAL "spiritual"
|
#define TRAIT_SPIRITUAL "spiritual"
|
||||||
#define TRAIT_VORACIOUS "voracious"
|
#define TRAIT_VORACIOUS "voracious"
|
||||||
#define TRAIT_SELF_AWARE "self_aware"
|
#define TRAIT_SELF_AWARE "self_aware"
|
||||||
@@ -90,4 +91,4 @@
|
|||||||
#define STASIS_MUTE "stasis"
|
#define STASIS_MUTE "stasis"
|
||||||
#define GENETICS_SPELL "genetics_spell"
|
#define GENETICS_SPELL "genetics_spell"
|
||||||
#define EYES_COVERED "eyes_covered"
|
#define EYES_COVERED "eyes_covered"
|
||||||
#define CULT_EYES "cult_eyes"
|
#define CULT_EYES "cult_eyes"
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ GLOBAL_LIST_EMPTY(mam_ears_list)
|
|||||||
GLOBAL_LIST_EMPTY(mam_tails_list)
|
GLOBAL_LIST_EMPTY(mam_tails_list)
|
||||||
GLOBAL_LIST_EMPTY(mam_tails_animated_list)
|
GLOBAL_LIST_EMPTY(mam_tails_animated_list)
|
||||||
GLOBAL_LIST_EMPTY(taur_list)
|
GLOBAL_LIST_EMPTY(taur_list)
|
||||||
|
GLOBAL_LIST_EMPTY(mam_snouts_list)
|
||||||
|
|
||||||
//Exotic Species
|
//Exotic Species
|
||||||
GLOBAL_LIST_EMPTY(exotic_tails_list)
|
GLOBAL_LIST_EMPTY(exotic_tails_list)
|
||||||
@@ -242,7 +243,7 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
|||||||
if("Wolf")
|
if("Wolf")
|
||||||
hdna.features["mam_tail"] = "Wolf"
|
hdna.features["mam_tail"] = "Wolf"
|
||||||
hdna.features["mam_ears"] = "Wolf"
|
hdna.features["mam_ears"] = "Wolf"
|
||||||
hdna.features["snout"] = "Wolf"
|
hdna.features["mam_snouts"] = "Wolf"
|
||||||
hdna.features["mam_body_markings"] = "Wolf"
|
hdna.features["mam_body_markings"] = "Wolf"
|
||||||
hdna.features["mcolor"] = "555"
|
hdna.features["mcolor"] = "555"
|
||||||
hdna.features["mcolor2"] = "999"
|
hdna.features["mcolor2"] = "999"
|
||||||
@@ -250,7 +251,7 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
|||||||
if("Fox")
|
if("Fox")
|
||||||
hdna.features["mam_tail"] = "Fox"
|
hdna.features["mam_tail"] = "Fox"
|
||||||
hdna.features["mam_ears"] = "Fox"
|
hdna.features["mam_ears"] = "Fox"
|
||||||
hdna.features["snout"] = "Fox, Long"
|
hdna.features["mam_snouts"] = "Fox, Long"
|
||||||
hdna.features["mam_body_markings"] = "Fox"
|
hdna.features["mam_body_markings"] = "Fox"
|
||||||
hdna.features["mcolor"] = "f60"
|
hdna.features["mcolor"] = "f60"
|
||||||
hdna.features["mcolor2"] = "fff"
|
hdna.features["mcolor2"] = "fff"
|
||||||
@@ -258,6 +259,6 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
|||||||
if("Fennec")
|
if("Fennec")
|
||||||
hdna.features["mam_tail"] = "Fennec"
|
hdna.features["mam_tail"] = "Fennec"
|
||||||
hdna.features["mam_ears"] = "Fennec"
|
hdna.features["mam_ears"] = "Fennec"
|
||||||
hdna.features["snout"] = "Fox, Short"
|
hdna.features["mam_snouts"] = "Fox, Short"
|
||||||
hdna.features["mam_body_markings"] = "Fox"
|
hdna.features["mam_body_markings"] = "Fox"
|
||||||
H.regenerate_icons()
|
H.regenerate_icons()
|
||||||
|
|||||||
@@ -511,6 +511,13 @@
|
|||||||
var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems)
|
var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems)
|
||||||
announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common
|
announcer.announce("ARRIVAL", character.real_name, rank, list()) //make the list empty to make it announce it in common
|
||||||
|
|
||||||
|
/proc/GetHexColors(const/hexa)
|
||||||
|
return list(
|
||||||
|
GetRedPart(hexa)/ 255,
|
||||||
|
GetGreenPart(hexa)/ 255,
|
||||||
|
GetBluePart(hexa)/ 255
|
||||||
|
)
|
||||||
|
|
||||||
/proc/GetRedPart(const/hexa)
|
/proc/GetRedPart(const/hexa)
|
||||||
return hex2num(copytext(hexa, 2, 4))
|
return hex2num(copytext(hexa, 2, 4))
|
||||||
|
|
||||||
|
|||||||
@@ -37,13 +37,9 @@
|
|||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, GLOB.mam_body_markings_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_body_markings, GLOB.mam_body_markings_list)
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list)
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list)
|
||||||
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_snouts, GLOB.mam_snouts_list)
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails_animated, GLOB.mam_tails_animated_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails_animated, GLOB.mam_tails_animated_list)
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/taur, GLOB.taur_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/taur, GLOB.taur_list)
|
||||||
//avian bodyparts (i swear this isn't starbound)
|
|
||||||
// init_sprite_accessory_subtypes(/datum/sprite_accessory/beaks/avian, GLOB.avian_beaks_list)
|
|
||||||
// init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/avian, GLOB.avian_tails_list)
|
|
||||||
// init_sprite_accessory_subtypes(/datum/sprite_accessory/avian_wings, GLOB.avian_wings_list)
|
|
||||||
// init_sprite_accessory_subtypes(/datum/sprite_accessory/avian_open_wings, GLOB.avian_open_wings_list)
|
|
||||||
//xeno parts (hiss?)
|
//xeno parts (hiss?)
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_head, GLOB.xeno_head_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_head, GLOB.xeno_head_list)
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_tail, GLOB.xeno_tail_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_tail, GLOB.xeno_tail_list)
|
||||||
|
|||||||
+18
-2
@@ -712,7 +712,19 @@ world
|
|||||||
var/static/icon/flat_template = icon('icons/effects/effects.dmi', "nothing")
|
var/static/icon/flat_template = icon('icons/effects/effects.dmi', "nothing")
|
||||||
|
|
||||||
#define BLANK icon(flat_template)
|
#define BLANK icon(flat_template)
|
||||||
#define SET_SELF(SETVAR) var/icon/SELF_ICON=icon(icon(curicon, curstate, base_icon_dir),"",SOUTH,no_anim?1:null);if(A.alpha<255)SELF_ICON.Blend(rgb(255,255,255,A.alpha),ICON_MULTIPLY);if(A.color)SELF_ICON.Blend(A.color,ICON_MULTIPLY);;##SETVAR=SELF_ICON;
|
#define SET_SELF(SETVAR) do { \
|
||||||
|
var/icon/SELF_ICON=icon(icon(curicon, curstate, base_icon_dir),"",SOUTH,no_anim?1:null); \
|
||||||
|
if(A.alpha<255) { \
|
||||||
|
SELF_ICON.Blend(rgb(255,255,255,A.alpha),ICON_MULTIPLY);\
|
||||||
|
} \
|
||||||
|
if(A.color) { \
|
||||||
|
if(islist(A.color)){ \
|
||||||
|
SELF_ICON.MapColors(arglist(A.color))} \
|
||||||
|
else{ \
|
||||||
|
SELF_ICON.Blend(A.color,ICON_MULTIPLY)} \
|
||||||
|
} \
|
||||||
|
##SETVAR=SELF_ICON;\
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#define INDEX_X_LOW 1
|
#define INDEX_X_LOW 1
|
||||||
#define INDEX_X_HIGH 2
|
#define INDEX_X_HIGH 2
|
||||||
@@ -860,7 +872,11 @@ world
|
|||||||
flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1)
|
flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1)
|
||||||
|
|
||||||
if(A.color)
|
if(A.color)
|
||||||
flat.Blend(A.color, ICON_MULTIPLY)
|
if(islist(A.color))
|
||||||
|
flat.MapColors(arglist(A.color))
|
||||||
|
else
|
||||||
|
flat.Blend(A.color, ICON_MULTIPLY)
|
||||||
|
|
||||||
if(A.alpha < 255)
|
if(A.alpha < 255)
|
||||||
flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY)
|
flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY)
|
||||||
|
|
||||||
|
|||||||
@@ -91,6 +91,8 @@
|
|||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_tails, GLOB.mam_tails_list)
|
||||||
if(!GLOB.mam_ears_list.len)
|
if(!GLOB.mam_ears_list.len)
|
||||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list)
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_ears, GLOB.mam_ears_list)
|
||||||
|
if(!GLOB.mam_snouts_list.len)
|
||||||
|
init_sprite_accessory_subtypes(/datum/sprite_accessory/mam_snouts, GLOB.mam_snouts_list)
|
||||||
|
|
||||||
// if(ishuman(src))
|
// if(ishuman(src))
|
||||||
// var/mob/living/carbon/human/H = src
|
// var/mob/living/carbon/human/H = src
|
||||||
@@ -113,11 +115,11 @@
|
|||||||
"mcolor2" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
"mcolor2" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||||
"mcolor3" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
"mcolor3" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||||
"tail_lizard" = pick(GLOB.tails_list_lizard),
|
"tail_lizard" = pick(GLOB.tails_list_lizard),
|
||||||
"tail_human" = "None",
|
"tail_human" = pick(GLOB.tails_list_human),
|
||||||
"wings" = "None",
|
"wings" = "None",
|
||||||
"snout" = pick(GLOB.snouts_list),
|
"snout" = pick(GLOB.snouts_list),
|
||||||
"horns" = pick(GLOB.horns_list),
|
"horns" = pick(GLOB.horns_list),
|
||||||
"ears" = "None",
|
"ears" = pick(GLOB.ears_list),
|
||||||
"frills" = pick(GLOB.frills_list),
|
"frills" = pick(GLOB.frills_list),
|
||||||
"spines" = pick(GLOB.spines_list),
|
"spines" = pick(GLOB.spines_list),
|
||||||
"body_markings" = pick(GLOB.body_markings_list),
|
"body_markings" = pick(GLOB.body_markings_list),
|
||||||
@@ -127,6 +129,7 @@
|
|||||||
"taur" = "None",
|
"taur" = "None",
|
||||||
"mam_body_markings" = pick(GLOB.mam_body_markings_list),
|
"mam_body_markings" = pick(GLOB.mam_body_markings_list),
|
||||||
"mam_ears" = pick(GLOB.mam_ears_list),
|
"mam_ears" = pick(GLOB.mam_ears_list),
|
||||||
|
"mam_snouts" = pick(GLOB.mam_snouts_list),
|
||||||
"mam_tail" = pick(GLOB.mam_tails_list),
|
"mam_tail" = pick(GLOB.mam_tails_list),
|
||||||
"mam_tail_animated" = "None",
|
"mam_tail_animated" = "None",
|
||||||
"xenodorsal" = "Standard",
|
"xenodorsal" = "Standard",
|
||||||
|
|||||||
@@ -192,7 +192,9 @@
|
|||||||
//Set news report and mode result
|
//Set news report and mode result
|
||||||
mode.set_round_result()
|
mode.set_round_result()
|
||||||
|
|
||||||
send2irc("Server", "Round just ended.")
|
var/survival_rate = GLOB.joined_player_list.len ? "[PERCENT(popcount[POPCOUNT_SURVIVORS]/GLOB.joined_player_list.len)]%" : "there's literally no player"
|
||||||
|
|
||||||
|
send2irc("Server", "A round of [mode.name] just ended[mode_result == "undefined" ? "." : " with a [mode_result]."] Survival rate: [survival_rate]")
|
||||||
|
|
||||||
if(length(CONFIG_GET(keyed_list/cross_server)))
|
if(length(CONFIG_GET(keyed_list/cross_server)))
|
||||||
send_news_report()
|
send_news_report()
|
||||||
@@ -583,4 +585,4 @@
|
|||||||
qdel(query_update_everything_ranks)
|
qdel(query_update_everything_ranks)
|
||||||
return
|
return
|
||||||
qdel(query_update_everything_ranks)
|
qdel(query_update_everything_ranks)
|
||||||
qdel(query_check_everything_ranks)
|
qdel(query_check_everything_ranks)
|
||||||
|
|||||||
@@ -6,6 +6,8 @@ GLOBAL_LIST_EMPTY(deadmins) //all ckeys who have used the de-admin verb.
|
|||||||
GLOBAL_LIST_EMPTY(directory) //all ckeys with associated client
|
GLOBAL_LIST_EMPTY(directory) //all ckeys with associated client
|
||||||
GLOBAL_LIST_EMPTY(stealthminID) //reference list with IDs that store ckeys, for stealthmins
|
GLOBAL_LIST_EMPTY(stealthminID) //reference list with IDs that store ckeys, for stealthmins
|
||||||
|
|
||||||
|
GLOBAL_LIST_EMPTY(bunker_passthrough)
|
||||||
|
|
||||||
//Since it didn't really belong in any other category, I'm putting this here
|
//Since it didn't really belong in any other category, I'm putting this here
|
||||||
//This is for procs to replace all the goddamn 'in world's that are chilling around the code
|
//This is for procs to replace all the goddamn 'in world's that are chilling around the code
|
||||||
|
|
||||||
|
|||||||
@@ -125,8 +125,12 @@
|
|||||||
if(prob(33))
|
if(prob(33))
|
||||||
I.add_mob_blood(src)
|
I.add_mob_blood(src)
|
||||||
var/turf/location = get_turf(src)
|
var/turf/location = get_turf(src)
|
||||||
add_splatter_floor(location)
|
if(iscarbon(src))
|
||||||
if(get_dist(user, src) <= 1) //people with TK won't get smeared with blood
|
var/mob/living/carbon/C = src
|
||||||
|
C.bleed(totitemdamage)
|
||||||
|
else
|
||||||
|
add_splatter_floor(location)
|
||||||
|
if(totitemdamage >= 10 && get_dist(user, src) <= 1) //people with TK won't get smeared with blood
|
||||||
user.add_mob_blood(src)
|
user.add_mob_blood(src)
|
||||||
return TRUE //successful attack
|
return TRUE //successful attack
|
||||||
|
|
||||||
@@ -163,4 +167,7 @@
|
|||||||
attack_message = "[user] has [message_verb] [src][message_hit_area] with [I]!"
|
attack_message = "[user] has [message_verb] [src][message_hit_area] with [I]!"
|
||||||
visible_message("<span class='danger'>[attack_message]</span>",\
|
visible_message("<span class='danger'>[attack_message]</span>",\
|
||||||
"<span class='userdanger'>[attack_message]</span>", null, COMBAT_MESSAGE_RANGE)
|
"<span class='userdanger'>[attack_message]</span>", null, COMBAT_MESSAGE_RANGE)
|
||||||
|
if(hit_area == BODY_ZONE_HEAD)
|
||||||
|
if(prob(2))
|
||||||
|
playsound(src, 'sound/weapons/dink.ogg', 30, 1)
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -62,6 +62,8 @@
|
|||||||
|
|
||||||
/datum/config_entry/flag/allow_ai // allow ai job
|
/datum/config_entry/flag/allow_ai // allow ai job
|
||||||
|
|
||||||
|
/datum/config_entry/flag/allow_ai_multicam //whether the AI can use their multicam
|
||||||
|
|
||||||
/datum/config_entry/flag/disable_human_mood
|
/datum/config_entry/flag/disable_human_mood
|
||||||
|
|
||||||
/datum/config_entry/flag/disable_secborg // disallow secborg module to be chosen.
|
/datum/config_entry/flag/disable_secborg // disallow secborg module to be chosen.
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ SUBSYSTEM_DEF(air_turfs)
|
|||||||
name = "Atmospherics - Turfs"
|
name = "Atmospherics - Turfs"
|
||||||
init_order = INIT_ORDER_AIR_TURFS
|
init_order = INIT_ORDER_AIR_TURFS
|
||||||
priority = FIRE_PRIORITY_AIR_TURFS
|
priority = FIRE_PRIORITY_AIR_TURFS
|
||||||
wait = 1
|
wait = 2
|
||||||
flags = SS_BACKGROUND
|
flags = SS_BACKGROUND
|
||||||
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
|
runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME
|
||||||
var/list/currentrun = list()
|
var/list/currentrun = list()
|
||||||
|
|||||||
@@ -435,11 +435,13 @@ GLOBAL_LIST_EMPTY(the_station_areas)
|
|||||||
GLOB.the_gateway.awaygate = new_gate
|
GLOB.the_gateway.awaygate = new_gate
|
||||||
GLOB.the_gateway.wait = world.time
|
GLOB.the_gateway.wait = world.time
|
||||||
|
|
||||||
/datum/controller/subsystem/mapping/proc/RequestBlockReservation(width, height, z, type = /datum/turf_reservation, turf_type_override)
|
/datum/controller/subsystem/mapping/proc/RequestBlockReservation(width, height, z, type = /datum/turf_reservation, turf_type_override, border_type_override)
|
||||||
UNTIL(initialized && !clearing_reserved_turfs)
|
UNTIL(initialized && !clearing_reserved_turfs)
|
||||||
var/datum/turf_reservation/reserve = new type
|
var/datum/turf_reservation/reserve = new type
|
||||||
if(turf_type_override)
|
if(turf_type_override)
|
||||||
reserve.turf_type = turf_type_override
|
reserve.turf_type = turf_type_override
|
||||||
|
if(border_type_override)
|
||||||
|
reserve.borderturf = border_type_override
|
||||||
if(!z)
|
if(!z)
|
||||||
for(var/i in levels_by_trait(ZTRAIT_RESERVED))
|
for(var/i in levels_by_trait(ZTRAIT_RESERVED))
|
||||||
if(reserve.Reserve(width, height, i))
|
if(reserve.Reserve(width, height, i))
|
||||||
|
|||||||
@@ -443,17 +443,22 @@ SUBSYSTEM_DEF(shuttle)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
var/transit_path = /turf/open/space/transit
|
var/transit_path = /turf/open/space/transit
|
||||||
|
var/border_path = /turf/open/space/transit/border
|
||||||
switch(travel_dir)
|
switch(travel_dir)
|
||||||
if(NORTH)
|
if(NORTH)
|
||||||
transit_path = /turf/open/space/transit/north
|
transit_path = /turf/open/space/transit/north
|
||||||
|
border_path = /turf/open/space/transit/border/north
|
||||||
if(SOUTH)
|
if(SOUTH)
|
||||||
transit_path = /turf/open/space/transit/south
|
transit_path = /turf/open/space/transit/south
|
||||||
|
border_path = /turf/open/space/transit/border/south
|
||||||
if(EAST)
|
if(EAST)
|
||||||
transit_path = /turf/open/space/transit/east
|
transit_path = /turf/open/space/transit/east
|
||||||
|
border_path = /turf/open/space/transit/border/east
|
||||||
if(WEST)
|
if(WEST)
|
||||||
transit_path = /turf/open/space/transit/west
|
transit_path = /turf/open/space/transit/west
|
||||||
|
border_path = /turf/open/space/transit/border/west
|
||||||
|
|
||||||
var/datum/turf_reservation/proposal = SSmapping.RequestBlockReservation(transit_width, transit_height, null, /datum/turf_reservation/transit, transit_path)
|
var/datum/turf_reservation/proposal = SSmapping.RequestBlockReservation(transit_width, transit_height, null, /datum/turf_reservation/transit, transit_path, border_path)
|
||||||
|
|
||||||
if(!istype(proposal))
|
if(!istype(proposal))
|
||||||
return FALSE
|
return FALSE
|
||||||
|
|||||||
@@ -269,7 +269,7 @@ SUBSYSTEM_DEF(timer)
|
|||||||
var/new_bucket_count
|
var/new_bucket_count
|
||||||
var/i = 1
|
var/i = 1
|
||||||
for (i in 1 to length(alltimers))
|
for (i in 1 to length(alltimers))
|
||||||
var/datum/timedevent/timer = alltimers[1]
|
var/datum/timedevent/timer = alltimers[i]
|
||||||
if (!timer)
|
if (!timer)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|||||||
@@ -463,4 +463,3 @@
|
|||||||
// so just reset the user mob's machine var
|
// so just reset the user mob's machine var
|
||||||
if(src && src.mob)
|
if(src && src.mob)
|
||||||
src.mob.unset_machine()
|
src.mob.unset_machine()
|
||||||
return
|
|
||||||
|
|||||||
+4
-1
@@ -8,6 +8,7 @@
|
|||||||
var/datum/species/species = new /datum/species/human //The type of mutant race the player is if applicable (i.e. potato-man)
|
var/datum/species/species = new /datum/species/human //The type of mutant race the player is if applicable (i.e. potato-man)
|
||||||
var/list/features = list("FFF") //first value is mutant color
|
var/list/features = list("FFF") //first value is mutant color
|
||||||
var/real_name //Stores the real name of the person who originally got this dna datum. Used primarely for changelings,
|
var/real_name //Stores the real name of the person who originally got this dna datum. Used primarely for changelings,
|
||||||
|
var/nameless = FALSE
|
||||||
var/list/mutations = list() //All mutations are from now on here
|
var/list/mutations = list() //All mutations are from now on here
|
||||||
var/list/temporary_mutations = list() //Timers for temporary mutations
|
var/list/temporary_mutations = list() //Timers for temporary mutations
|
||||||
var/list/previous = list() //For temporary name/ui/ue/blood_type modifications
|
var/list/previous = list() //For temporary name/ui/ue/blood_type modifications
|
||||||
@@ -43,6 +44,7 @@
|
|||||||
destination.set_species(species.type, icon_update=0)
|
destination.set_species(species.type, icon_update=0)
|
||||||
destination.dna.features = features.Copy()
|
destination.dna.features = features.Copy()
|
||||||
destination.dna.real_name = real_name
|
destination.dna.real_name = real_name
|
||||||
|
destination.dna.nameless = nameless
|
||||||
destination.dna.temporary_mutations = temporary_mutations.Copy()
|
destination.dna.temporary_mutations = temporary_mutations.Copy()
|
||||||
if(ishuman(destination))
|
if(ishuman(destination))
|
||||||
var/mob/living/carbon/human/H = destination
|
var/mob/living/carbon/human/H = destination
|
||||||
@@ -59,6 +61,7 @@
|
|||||||
new_dna.features = features.Copy()
|
new_dna.features = features.Copy()
|
||||||
new_dna.species = new species.type
|
new_dna.species = new species.type
|
||||||
new_dna.real_name = real_name
|
new_dna.real_name = real_name
|
||||||
|
new_dna.nameless = nameless
|
||||||
new_dna.mutations = mutations.Copy()
|
new_dna.mutations = mutations.Copy()
|
||||||
|
|
||||||
/datum/dna/proc/add_mutation(mutation_name)
|
/datum/dna/proc/add_mutation(mutation_name)
|
||||||
@@ -199,7 +202,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/datum/dna/proc/is_same_as(datum/dna/D)
|
/datum/dna/proc/is_same_as(datum/dna/D)
|
||||||
if(uni_identity == D.uni_identity && struc_enzymes == D.struc_enzymes && real_name == D.real_name)
|
if(uni_identity == D.uni_identity && struc_enzymes == D.struc_enzymes && real_name == D.real_name && nameless == D.nameless)
|
||||||
if(species.type == D.species.type && features == D.features && blood_type == D.blood_type)
|
if(species.type == D.species.type && features == D.features && blood_type == D.blood_type)
|
||||||
return 1
|
return 1
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -109,6 +109,10 @@
|
|||||||
description = "<span class='warning'>It sure is dark around here...</span>\n"
|
description = "<span class='warning'>It sure is dark around here...</span>\n"
|
||||||
mood_change = -3
|
mood_change = -3
|
||||||
|
|
||||||
|
/datum/mood_event/brightlight
|
||||||
|
description = "<span class='warning'>The light feels unbearable...</span>\n"
|
||||||
|
mood_change = -3
|
||||||
|
|
||||||
/datum/mood_event/family_heirloom_missing
|
/datum/mood_event/family_heirloom_missing
|
||||||
description = "<span class='warning'>I'm missing my family heirloom...</span>\n"
|
description = "<span class='warning'>I'm missing my family heirloom...</span>\n"
|
||||||
mood_change = -4
|
mood_change = -4
|
||||||
|
|||||||
@@ -458,7 +458,7 @@
|
|||||||
var/old_health
|
var/old_health
|
||||||
|
|
||||||
/datum/status_effect/kindle/tick()
|
/datum/status_effect/kindle/tick()
|
||||||
owner.Knockdown(15)
|
owner.Knockdown(15, TRUE, FALSE, 15)
|
||||||
if(iscarbon(owner))
|
if(iscarbon(owner))
|
||||||
var/mob/living/carbon/C = owner
|
var/mob/living/carbon/C = owner
|
||||||
C.silent = max(2, C.silent)
|
C.silent = max(2, C.silent)
|
||||||
|
|||||||
@@ -58,6 +58,14 @@
|
|||||||
gain_text = "<span class='notice'>You walk with a little more litheness.</span>"
|
gain_text = "<span class='notice'>You walk with a little more litheness.</span>"
|
||||||
lose_text = "<span class='danger'>You start tromping around like a barbarian.</span>"
|
lose_text = "<span class='danger'>You start tromping around like a barbarian.</span>"
|
||||||
|
|
||||||
|
/datum/quirk/quick_step
|
||||||
|
name = "Quick Step"
|
||||||
|
desc = "You walk with determined strides, and out-pace most people when walking."
|
||||||
|
value = 2
|
||||||
|
mob_trait = TRAIT_SPEEDY_STEP
|
||||||
|
gain_text = "<span class='notice'>You feel determined. No time to lose.</span>"
|
||||||
|
lose_text = "<span class='danger'>You feel less determined. What's the rush, man?</span>"
|
||||||
|
|
||||||
/datum/quirk/musician
|
/datum/quirk/musician
|
||||||
name = "Musician"
|
name = "Musician"
|
||||||
desc = "You can tune handheld musical instruments to play melodies that clear certain negative effects and soothe the soul."
|
desc = "You can tune handheld musical instruments to play melodies that clear certain negative effects and soothe the soul."
|
||||||
|
|||||||
@@ -41,8 +41,8 @@
|
|||||||
heirloom_type = /obj/item/paint/anycolor
|
heirloom_type = /obj/item/paint/anycolor
|
||||||
heirloom_type = /obj/item/bikehorn/golden
|
heirloom_type = /obj/item/bikehorn/golden
|
||||||
if("Mime")
|
if("Mime")
|
||||||
heirloom_type = /obj/item/toy/dummy
|
|
||||||
heirloom_type = /obj/item/paint/anycolor
|
heirloom_type = /obj/item/paint/anycolor
|
||||||
|
heirloom_type = /obj/item/toy/dummy
|
||||||
if("Cook")
|
if("Cook")
|
||||||
heirloom_type = /obj/item/kitchen/knife/scimitar
|
heirloom_type = /obj/item/kitchen/knife/scimitar
|
||||||
if("Medical Doctor")
|
if("Medical Doctor")
|
||||||
@@ -52,7 +52,7 @@
|
|||||||
if("Atmospheric Technician")
|
if("Atmospheric Technician")
|
||||||
heirloom_type = /obj/item/extinguisher/mini/family
|
heirloom_type = /obj/item/extinguisher/mini/family
|
||||||
if("Lawyer")
|
if("Lawyer")
|
||||||
heirloom_type = /obj/item/gavelhammer
|
heirloom_type = /obj/item/storage/briefcase/lawyer/family
|
||||||
if("Janitor")
|
if("Janitor")
|
||||||
heirloom_type = /obj/item/mop
|
heirloom_type = /obj/item/mop
|
||||||
if("Security Officer")
|
if("Security Officer")
|
||||||
@@ -61,6 +61,10 @@
|
|||||||
heirloom_type = /obj/item/toy/plush/slimeplushie
|
heirloom_type = /obj/item/toy/plush/slimeplushie
|
||||||
if("Assistant")
|
if("Assistant")
|
||||||
heirloom_type = /obj/item/storage/toolbox/mechanical/old/heirloom
|
heirloom_type = /obj/item/storage/toolbox/mechanical/old/heirloom
|
||||||
|
if("Chaplain")
|
||||||
|
heirloom_type = /obj/item/camera/spooky/family
|
||||||
|
if("Captain")
|
||||||
|
heirloom_type = /obj/item/clothing/accessory/medal/gold/captain/family
|
||||||
if(!heirloom_type)
|
if(!heirloom_type)
|
||||||
heirloom_type = pick(
|
heirloom_type = pick(
|
||||||
/obj/item/toy/cards/deck,
|
/obj/item/toy/cards/deck,
|
||||||
@@ -154,6 +158,21 @@
|
|||||||
else
|
else
|
||||||
SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "nyctophobia")
|
SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "nyctophobia")
|
||||||
|
|
||||||
|
/datum/quirk/lightless
|
||||||
|
name = "Light Sensitivity"
|
||||||
|
desc = "Bright lights irritate you. Your eyes start to water, your skin feels itchy against the photon radiation, and your hair gets dry and frizzy. Maybe it's a medical condition. If only Nanotrasen was more considerate of your needs..."
|
||||||
|
value = -1
|
||||||
|
gain_text = "<span class='danger'>The safty of light feels off...</span>"
|
||||||
|
lose_text = "<span class='notice'>Enlighing.</span>"
|
||||||
|
|
||||||
|
/datum/quirk/lightless/on_process()
|
||||||
|
var/turf/T = get_turf(quirk_holder)
|
||||||
|
var/lums = T.get_lumcount()
|
||||||
|
if(lums >= 0.8)
|
||||||
|
SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "brightlight", /datum/mood_event/brightlight)
|
||||||
|
else
|
||||||
|
SEND_SIGNAL(quirk_holder, COMSIG_CLEAR_MOOD_EVENT, "brightlight")
|
||||||
|
|
||||||
/datum/quirk/nonviolent
|
/datum/quirk/nonviolent
|
||||||
name = "Pacifist"
|
name = "Pacifist"
|
||||||
desc = "The thought of violence makes you sick. So much so, in fact, that you can't hurt anyone."
|
desc = "The thought of violence makes you sick. So much so, in fact, that you can't hurt anyone."
|
||||||
|
|||||||
@@ -56,19 +56,6 @@ GLOBAL_VAR(changeling_team_objective_type) //If this is not null, we hand our th
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
/datum/game_mode/changeling/post_setup()
|
/datum/game_mode/changeling/post_setup()
|
||||||
//Decide if it's ok for the lings to have a team objective
|
|
||||||
//And then set it up to be handed out in forge_changeling_objectives
|
|
||||||
var/list/team_objectives = subtypesof(/datum/objective/changeling_team_objective)
|
|
||||||
var/list/possible_team_objectives = list()
|
|
||||||
for(var/T in team_objectives)
|
|
||||||
var/datum/objective/changeling_team_objective/CTO = T
|
|
||||||
|
|
||||||
if(changelings.len >= initial(CTO.min_lings))
|
|
||||||
possible_team_objectives += T
|
|
||||||
|
|
||||||
if(possible_team_objectives.len && prob(20*changelings.len))
|
|
||||||
GLOB.changeling_team_objective_type = pick(possible_team_objectives)
|
|
||||||
|
|
||||||
for(var/datum/mind/changeling in changelings)
|
for(var/datum/mind/changeling in changelings)
|
||||||
log_game("[key_name(changeling)] has been selected as a changeling")
|
log_game("[key_name(changeling)] has been selected as a changeling")
|
||||||
var/datum/antagonist/changeling/new_antag = new()
|
var/datum/antagonist/changeling/new_antag = new()
|
||||||
|
|||||||
@@ -131,10 +131,10 @@ Credit where due:
|
|||||||
config_tag = "clockwork_cult"
|
config_tag = "clockwork_cult"
|
||||||
antag_flag = ROLE_SERVANT_OF_RATVAR
|
antag_flag = ROLE_SERVANT_OF_RATVAR
|
||||||
false_report_weight = 10
|
false_report_weight = 10
|
||||||
required_players = 24
|
required_players = 20
|
||||||
required_enemies = 4
|
required_enemies = 2
|
||||||
recommended_enemies = 4
|
recommended_enemies = 4
|
||||||
enemy_minimum_age = 14
|
enemy_minimum_age = 7
|
||||||
protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain") //Silicons can eventually be converted
|
protected_jobs = list("AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain") //Silicons can eventually be converted
|
||||||
restricted_jobs = list("Chaplain", "Captain")
|
restricted_jobs = list("Chaplain", "Captain")
|
||||||
announce_span = "brass"
|
announce_span = "brass"
|
||||||
|
|||||||
@@ -37,10 +37,10 @@
|
|||||||
false_report_weight = 10
|
false_report_weight = 10
|
||||||
restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel")
|
restricted_jobs = list("Chaplain","AI", "Cyborg", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel")
|
||||||
protected_jobs = list()
|
protected_jobs = list()
|
||||||
required_players = 24
|
required_players = 20
|
||||||
required_enemies = 4
|
required_enemies = 2
|
||||||
recommended_enemies = 4
|
recommended_enemies = 4
|
||||||
enemy_minimum_age = 14
|
enemy_minimum_age = 7
|
||||||
|
|
||||||
announce_span = "cult"
|
announce_span = "cult"
|
||||||
announce_text = "Some crew members are trying to start a cult to Nar'Sie!\n\
|
announce_text = "Some crew members are trying to start a cult to Nar'Sie!\n\
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
name = "nuclear emergency"
|
name = "nuclear emergency"
|
||||||
config_tag = "nuclear"
|
config_tag = "nuclear"
|
||||||
false_report_weight = 10
|
false_report_weight = 10
|
||||||
required_players = 30 // 30 players - 3 players to be the nuke ops = 27 players remaining
|
required_players = 28 // 30 players - 3 players to be the nuke ops = 25 players remaining
|
||||||
required_enemies = 2
|
required_enemies = 2
|
||||||
recommended_enemies = 5
|
recommended_enemies = 5
|
||||||
antag_flag = ROLE_OPERATIVE
|
antag_flag = ROLE_OPERATIVE
|
||||||
enemy_minimum_age = 14
|
enemy_minimum_age = 7
|
||||||
|
|
||||||
announce_span = "danger"
|
announce_span = "danger"
|
||||||
announce_text = "Syndicate forces are approaching the station in an attempt to destroy it!\n\
|
announce_text = "Syndicate forces are approaching the station in an attempt to destroy it!\n\
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
required_players = 20
|
required_players = 20
|
||||||
required_enemies = 1
|
required_enemies = 1
|
||||||
recommended_enemies = 1
|
recommended_enemies = 1
|
||||||
enemy_minimum_age = 14
|
enemy_minimum_age = 7
|
||||||
round_ends_with_antag_death = 1
|
round_ends_with_antag_death = 1
|
||||||
announce_span = "danger"
|
announce_span = "danger"
|
||||||
announce_text = "There is a space wizard attacking the station!\n\
|
announce_text = "There is a space wizard attacking the station!\n\
|
||||||
|
|||||||
@@ -227,7 +227,7 @@
|
|||||||
if((mob_occupant.stat == DEAD) || (mob_occupant.suiciding) || mob_occupant.hellbound) //Autoeject corpses and suiciding dudes.
|
if((mob_occupant.stat == DEAD) || (mob_occupant.suiciding) || mob_occupant.hellbound) //Autoeject corpses and suiciding dudes.
|
||||||
connected_message("Clone Rejected: Deceased.")
|
connected_message("Clone Rejected: Deceased.")
|
||||||
if(internal_radio)
|
if(internal_radio)
|
||||||
SPEAK("The cloning of [mob_occupant.real_name] has been \
|
SPEAK("The cloning has been \
|
||||||
aborted due to unrecoverable tissue failure.")
|
aborted due to unrecoverable tissue failure.")
|
||||||
go_out()
|
go_out()
|
||||||
mob_occupant.apply_vore_prefs()
|
mob_occupant.apply_vore_prefs()
|
||||||
@@ -261,7 +261,7 @@
|
|||||||
else if((mob_occupant.cloneloss <= (100 - heal_level)))
|
else if((mob_occupant.cloneloss <= (100 - heal_level)))
|
||||||
connected_message("Cloning Process Complete.")
|
connected_message("Cloning Process Complete.")
|
||||||
if(internal_radio)
|
if(internal_radio)
|
||||||
SPEAK("The cloning cycle of [mob_occupant.real_name] is complete.")
|
SPEAK("The cloning cycle is complete.")
|
||||||
|
|
||||||
// If the cloner is upgraded to debugging high levels, sometimes
|
// If the cloner is upgraded to debugging high levels, sometimes
|
||||||
// organs and limbs can be missing.
|
// organs and limbs can be missing.
|
||||||
@@ -319,7 +319,7 @@
|
|||||||
return
|
return
|
||||||
else
|
else
|
||||||
connected_message("Emergency Ejection")
|
connected_message("Emergency Ejection")
|
||||||
SPEAK("An emergency ejection of [clonemind.name] has occurred. Survival not guaranteed.")
|
SPEAK("An emergency ejection of the current clone has occurred. Survival not guaranteed.")
|
||||||
to_chat(user, "<span class='notice'>You force an emergency ejection. </span>")
|
to_chat(user, "<span class='notice'>You force an emergency ejection. </span>")
|
||||||
go_out()
|
go_out()
|
||||||
mob_occupant.apply_vore_prefs()
|
mob_occupant.apply_vore_prefs()
|
||||||
@@ -412,7 +412,7 @@
|
|||||||
var/mob/living/mob_occupant = occupant
|
var/mob/living/mob_occupant = occupant
|
||||||
if(mob_occupant && prob(100/(severity*efficiency)))
|
if(mob_occupant && prob(100/(severity*efficiency)))
|
||||||
connected_message(Gibberish("EMP-caused Accidental Ejection", 0))
|
connected_message(Gibberish("EMP-caused Accidental Ejection", 0))
|
||||||
SPEAK(Gibberish("Exposure to electromagnetic fields has caused the ejection of [mob_occupant.real_name] prematurely." ,0))
|
SPEAK(Gibberish("Exposure to electromagnetic fields has caused the ejection of, ERROR: John Doe, prematurely." ,0))
|
||||||
mob_occupant.apply_vore_prefs()
|
mob_occupant.apply_vore_prefs()
|
||||||
go_out()
|
go_out()
|
||||||
|
|
||||||
|
|||||||
@@ -53,70 +53,8 @@
|
|||||||
/obj/item/clothing/shoes/wheelys = 8,
|
/obj/item/clothing/shoes/wheelys = 8,
|
||||||
/obj/item/clothing/shoes/kindleKicks = 8,
|
/obj/item/clothing/shoes/kindleKicks = 8,
|
||||||
/obj/item/storage/belt/military/snack = 8,
|
/obj/item/storage/belt/military/snack = 8,
|
||||||
/obj/item/toy/plush/lizardplushie = 1,
|
/obj/item/toy/plush/random = 450
|
||||||
/obj/item/toy/plush/lizardplushie/durgit = 1,
|
)//plushies have a 0.6 chance
|
||||||
/obj/item/toy/plush/lizardplushie/rio = 1,
|
|
||||||
/obj/item/toy/plush/lizardplushie/urinsu = 1,
|
|
||||||
/obj/item/toy/plush/lizardplushie/arfrehn = 1,
|
|
||||||
/obj/item/toy/plush/lizardplushie/soars = 1,
|
|
||||||
/obj/item/toy/plush/lizardplushie/ghostie = 1,
|
|
||||||
/obj/item/toy/plush/lizardplushie/amber = 1,
|
|
||||||
/obj/item/toy/plush/lizardplushie/cyan = 1,
|
|
||||||
/obj/item/toy/plush/lizardplushie/meena = 1,
|
|
||||||
/obj/item/toy/plush/lizardplushie/stalks = 1,
|
|
||||||
/obj/item/toy/plush/lizardplushie/kobold = 1,
|
|
||||||
/obj/item/toy/plush/lizardplushie/gorgi = 1,
|
|
||||||
/obj/item/toy/plush/lizardplushie/almaz = 1,
|
|
||||||
/obj/item/toy/plush/snakeplushie/sasha = 1,
|
|
||||||
/obj/item/toy/plush/snakeplushie/shay = 1,
|
|
||||||
/obj/item/toy/plush/snakeplushie/vulken = 1,
|
|
||||||
/obj/item/toy/plush/mothplushie = 1,
|
|
||||||
/obj/item/toy/plush/mothplushie/bumble = 1,
|
|
||||||
/obj/item/toy/plush/mothplushie/nameko = 1,
|
|
||||||
/obj/item/toy/plush/mothplushie/suru = 1,
|
|
||||||
/obj/item/toy/plush/xeno = 1,
|
|
||||||
/obj/item/toy/plush/lampplushie = 1,
|
|
||||||
/obj/item/toy/plush/borgplushie = 1,
|
|
||||||
/obj/item/toy/plush/borgplushie/medihound = 1,
|
|
||||||
/obj/item/toy/plush/borgplushie/scrubpuppy = 1,
|
|
||||||
/obj/item/toy/plush/borgplushie/seeking = 1,
|
|
||||||
/obj/item/toy/plush/borgplushie/neeb = 1,
|
|
||||||
/obj/item/toy/plush/bird = 1,
|
|
||||||
/obj/item/toy/plush/bird/esela = 1,
|
|
||||||
/obj/item/toy/plush/bird/jahonna = 1,
|
|
||||||
/obj/item/toy/plush/bird/krick = 1,
|
|
||||||
/obj/item/toy/plush/bird/birddi = 1,
|
|
||||||
/obj/item/toy/plush/bird/jewel = 1,
|
|
||||||
/obj/item/toy/plush/mammal = 1,
|
|
||||||
/obj/item/toy/plush/mammal/dubious = 1,
|
|
||||||
/obj/item/toy/plush/mammal/gladwyn = 1,
|
|
||||||
/obj/item/toy/plush/mammal/gavin = 1,
|
|
||||||
/obj/item/toy/plush/mammal/blep = 1,
|
|
||||||
/obj/item/toy/plush/mammal/circe = 1,
|
|
||||||
/obj/item/toy/plush/mammal/pavel = 1,
|
|
||||||
/obj/item/toy/plush/mammal/oten = 1,
|
|
||||||
/obj/item/toy/plush/mammal/ray = 1,
|
|
||||||
/obj/item/toy/plush/mammal/dawud = 1,
|
|
||||||
/obj/item/toy/plush/mammal/edgar = 1,
|
|
||||||
/obj/item/toy/plush/mammal/frank = 1,
|
|
||||||
/obj/item/toy/plush/mammal/poojawa = 1,
|
|
||||||
/obj/item/toy/plush/mammal/hazel = 1,
|
|
||||||
/obj/item/toy/plush/mammal/jermaine = 1,
|
|
||||||
/obj/item/toy/plush/mammal/gunther = 1,
|
|
||||||
/obj/item/toy/plush/mammal/fox = 1,
|
|
||||||
/obj/item/toy/plush/mammal/zed = 1,
|
|
||||||
/obj/item/toy/plush/mammal/dog = 1,
|
|
||||||
/obj/item/toy/plush/mammal/dog/frost = 1,
|
|
||||||
/obj/item/toy/plush/mammal/dog/atticus = 1,
|
|
||||||
/obj/item/toy/plush/mammal/dog/fletch = 1,
|
|
||||||
/obj/item/toy/plush/mammal/dog/vincent = 1,
|
|
||||||
/obj/item/toy/plush/mammal/dog/zigfried = 1,
|
|
||||||
/obj/item/toy/plush/mammal/dog/nikolai = 1,
|
|
||||||
/obj/item/toy/plush/catgirl = 1,
|
|
||||||
/obj/item/toy/plush/catgirl/skylar = 1,
|
|
||||||
/obj/item/toy/plush/catgirl/mikeel = 1,
|
|
||||||
/obj/item/toy/plush/catgirl/robin = 1
|
|
||||||
)
|
|
||||||
|
|
||||||
light_color = LIGHT_COLOR_GREEN
|
light_color = LIGHT_COLOR_GREEN
|
||||||
|
|
||||||
|
|||||||
@@ -327,7 +327,11 @@
|
|||||||
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
|
L.adjustBruteLoss(DOOR_CRUSH_DAMAGE)
|
||||||
var/turf/location = get_turf(src)
|
var/turf/location = get_turf(src)
|
||||||
//add_blood doesn't work for borgs/xenos, but add_blood_floor does.
|
//add_blood doesn't work for borgs/xenos, but add_blood_floor does.
|
||||||
L.add_splatter_floor(location)
|
if(iscarbon(L))
|
||||||
|
var/mob/living/carbon/C = L
|
||||||
|
C.bleed(DOOR_CRUSH_DAMAGE)
|
||||||
|
else
|
||||||
|
L.add_splatter_floor(location)
|
||||||
for(var/obj/mecha/M in get_turf(src))
|
for(var/obj/mecha/M in get_turf(src))
|
||||||
M.take_damage(DOOR_CRUSH_DAMAGE)
|
M.take_damage(DOOR_CRUSH_DAMAGE)
|
||||||
|
|
||||||
|
|||||||
@@ -544,8 +544,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
|||||||
var/matrix/M = matrix(transform)
|
var/matrix/M = matrix(transform)
|
||||||
M.Turn(rand(-170, 170))
|
M.Turn(rand(-170, 170))
|
||||||
transform = M
|
transform = M
|
||||||
pixel_x = rand(-12, 12)
|
pixel_x = rand(-8, 8)
|
||||||
pixel_y = rand(-12, 12)
|
pixel_y = rand(-8, 8)
|
||||||
|
|
||||||
/obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/storage
|
/obj/item/proc/remove_item_from_storage(atom/newLoc) //please use this if you're going to snowflake an item out of a obj/item/storage
|
||||||
if(!newLoc)
|
if(!newLoc)
|
||||||
|
|||||||
@@ -8,72 +8,70 @@
|
|||||||
item_state = "candle1"
|
item_state = "candle1"
|
||||||
w_class = WEIGHT_CLASS_TINY
|
w_class = WEIGHT_CLASS_TINY
|
||||||
light_color = LIGHT_COLOR_FIRE
|
light_color = LIGHT_COLOR_FIRE
|
||||||
|
heat = 1000
|
||||||
var/wax = 1000
|
var/wax = 1000
|
||||||
var/lit = FALSE
|
var/lit = FALSE
|
||||||
var/infinite = FALSE
|
var/infinite = FALSE
|
||||||
var/start_lit = FALSE
|
var/start_lit = FALSE
|
||||||
heat = 1000
|
|
||||||
|
|
||||||
/obj/item/candle/Initialize()
|
/obj/item/candle/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
if(start_lit)
|
if(start_lit)
|
||||||
// No visible message
|
light()
|
||||||
light(show_message = FALSE)
|
|
||||||
|
|
||||||
/obj/item/candle/update_icon()
|
/obj/item/candle/update_icon()
|
||||||
var/i
|
icon_state = "candle[(wax > 400) ? ((wax > 750) ? 1 : 2) : 3][lit ? "_lit" : ""]"
|
||||||
if(wax>750)
|
|
||||||
i = 1
|
|
||||||
else if(wax>400)
|
|
||||||
i = 2
|
|
||||||
else i = 3
|
|
||||||
icon_state = "candle[i][lit ? "_lit" : ""]"
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/candle/attackby(obj/item/W, mob/user, params)
|
/obj/item/candle/attackby(obj/item/W, mob/user, params)
|
||||||
..()
|
|
||||||
var/msg = W.ignition_effect(src, user)
|
var/msg = W.ignition_effect(src, user)
|
||||||
if(msg)
|
if(msg)
|
||||||
light(msg)
|
light(msg)
|
||||||
|
else
|
||||||
|
return ..()
|
||||||
|
|
||||||
/obj/item/candle/fire_act(exposed_temperature, exposed_volume)
|
/obj/item/candle/fire_act(exposed_temperature, exposed_volume)
|
||||||
if(!src.lit)
|
if(!lit)
|
||||||
light() //honk
|
light() //honk
|
||||||
..()
|
return ..()
|
||||||
|
|
||||||
|
/obj/item/candle/is_hot()
|
||||||
|
return lit * heat
|
||||||
|
|
||||||
/obj/item/candle/proc/light(show_message)
|
/obj/item/candle/proc/light(show_message)
|
||||||
if(!src.lit)
|
if(!lit)
|
||||||
src.lit = TRUE
|
lit = TRUE
|
||||||
//src.damtype = "fire"
|
|
||||||
if(show_message)
|
if(show_message)
|
||||||
usr.visible_message(show_message)
|
usr.visible_message(show_message)
|
||||||
set_light(CANDLE_LUMINOSITY, 0.8)
|
set_light(CANDLE_LUMINOSITY)
|
||||||
START_PROCESSING(SSobj, src)
|
START_PROCESSING(SSobj, src)
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
|
/obj/item/candle/proc/put_out_candle()
|
||||||
|
if(!lit)
|
||||||
|
return
|
||||||
|
lit = FALSE
|
||||||
|
update_icon()
|
||||||
|
set_light(0)
|
||||||
|
return TRUE
|
||||||
|
|
||||||
|
/obj/item/candle/extinguish()
|
||||||
|
put_out_candle()
|
||||||
|
return ..()
|
||||||
|
|
||||||
/obj/item/candle/process()
|
/obj/item/candle/process()
|
||||||
if(!lit)
|
if(!lit)
|
||||||
return
|
return PROCESS_KILL
|
||||||
if(!infinite)
|
if(!infinite)
|
||||||
wax--
|
wax--
|
||||||
if(!wax)
|
if(!wax)
|
||||||
new/obj/item/trash/candle(src.loc)
|
new /obj/item/trash/candle(loc)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
update_icon()
|
update_icon()
|
||||||
open_flame()
|
open_flame()
|
||||||
|
|
||||||
/obj/item/candle/attack_self(mob/user)
|
/obj/item/candle/attack_self(mob/user)
|
||||||
if(lit)
|
if(put_out_candle())
|
||||||
user.visible_message(
|
user.visible_message("<span class='notice'>[user] snuffs [src].</span>")
|
||||||
"<span class='notice'>[user] snuffs [src].</span>")
|
|
||||||
lit = FALSE
|
|
||||||
update_icon()
|
|
||||||
set_light(0)
|
|
||||||
|
|
||||||
/obj/item/candle/is_hot()
|
|
||||||
return lit * heat
|
|
||||||
|
|
||||||
|
|
||||||
/obj/item/candle/infinite
|
/obj/item/candle/infinite
|
||||||
infinite = TRUE
|
infinite = TRUE
|
||||||
|
|||||||
@@ -227,7 +227,7 @@
|
|||||||
repetition++
|
repetition++
|
||||||
addtimer(CALLBACK(src, /obj/item/extinguisher/proc/move_chair, B, movementdirection, repetition), timer_seconds)
|
addtimer(CALLBACK(src, /obj/item/extinguisher/proc/move_chair, B, movementdirection, repetition), timer_seconds)
|
||||||
|
|
||||||
/obj/item/extinguisher/AltClick(mob/user)
|
/obj/item/extinguisher/screwdriver_act(mob/user, obj/item/tool)
|
||||||
if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
if(!user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
|
||||||
return
|
return
|
||||||
EmptyExtinguisher(user)
|
EmptyExtinguisher(user)
|
||||||
@@ -242,3 +242,4 @@
|
|||||||
theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS)
|
theturf.MakeSlippery(TURF_WET_WATER, min_wet_time = 10 SECONDS, wet_time_to_add = 5 SECONDS)
|
||||||
|
|
||||||
user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "<span class='info'>You quietly empty out \the [src] using its release valve.</span>")
|
user.visible_message("[user] empties out \the [src] onto the floor using the release valve.", "<span class='info'>You quietly empty out \the [src] using its release valve.</span>")
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,8 @@
|
|||||||
addtimer(CALLBACK(src, .proc/prime), isnull(delayoverride)? det_time : delayoverride)
|
addtimer(CALLBACK(src, .proc/prime), isnull(delayoverride)? det_time : delayoverride)
|
||||||
|
|
||||||
/obj/item/grenade/proc/prime()
|
/obj/item/grenade/proc/prime()
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
log_game("Grenade detonation at [AREACOORD(T)], location [loc]")
|
||||||
|
|
||||||
/obj/item/grenade/proc/update_mob()
|
/obj/item/grenade/proc/update_mob()
|
||||||
if(ismob(loc))
|
if(ismob(loc))
|
||||||
|
|||||||
@@ -359,6 +359,16 @@
|
|||||||
if(mood_message)
|
if(mood_message)
|
||||||
desc += mood_message
|
desc += mood_message
|
||||||
|
|
||||||
|
/obj/item/toy/plush/random
|
||||||
|
name = "Illegal plushie"
|
||||||
|
desc = "Something fucked up"
|
||||||
|
|
||||||
|
/obj/item/toy/plush/random/Initialize()
|
||||||
|
..()
|
||||||
|
var/newtype = pick(subtypesof(/obj/item/toy/plush))
|
||||||
|
new newtype(loc)
|
||||||
|
return INITIALIZE_HINT_QDEL
|
||||||
|
|
||||||
/obj/item/toy/plush/carpplushie
|
/obj/item/toy/plush/carpplushie
|
||||||
name = "space carp plushie"
|
name = "space carp plushie"
|
||||||
desc = "An adorable stuffed toy that resembles a space carp."
|
desc = "An adorable stuffed toy that resembles a space carp."
|
||||||
@@ -495,6 +505,10 @@
|
|||||||
icon_state = "rio"
|
icon_state = "rio"
|
||||||
item_state = "rio"
|
item_state = "rio"
|
||||||
|
|
||||||
|
/obj/item/toy/plush/lizardplushie/dan
|
||||||
|
icon_state = "dan"
|
||||||
|
item_state = "dan"
|
||||||
|
|
||||||
/obj/item/toy/plush/lizardplushie/urinsu
|
/obj/item/toy/plush/lizardplushie/urinsu
|
||||||
icon_state = "urinsu"
|
icon_state = "urinsu"
|
||||||
item_state = "urinsu"
|
item_state = "urinsu"
|
||||||
@@ -546,7 +560,7 @@
|
|||||||
icon_state = "plushie_snake"
|
icon_state = "plushie_snake"
|
||||||
item_state = "plushie_snake"
|
item_state = "plushie_snake"
|
||||||
attack_verb = list("bitten", "hissed", "tail slapped")
|
attack_verb = list("bitten", "hissed", "tail slapped")
|
||||||
squeak_override = list('sound/voice/lowHiss2.ogg' = 1)
|
squeak_override = list('modular_citadel/sound/voice/hiss.ogg' = 1)
|
||||||
|
|
||||||
/obj/item/toy/plush/snakeplushie/sasha
|
/obj/item/toy/plush/snakeplushie/sasha
|
||||||
icon_state = "sasha"
|
icon_state = "sasha"
|
||||||
@@ -560,6 +574,10 @@
|
|||||||
icon_state = "vulken"
|
icon_state = "vulken"
|
||||||
item_state = "vulken"
|
item_state = "vulken"
|
||||||
|
|
||||||
|
/obj/item/toy/plush/snakeplushie/jecca
|
||||||
|
icon_state = "jecca"
|
||||||
|
item_state = "jecca"
|
||||||
|
|
||||||
/obj/item/toy/plush/nukeplushie
|
/obj/item/toy/plush/nukeplushie
|
||||||
name = "operative plushie"
|
name = "operative plushie"
|
||||||
desc = "A stuffed toy that resembles a syndicate nuclear operative. The tag claims operatives to be purely fictitious."
|
desc = "A stuffed toy that resembles a syndicate nuclear operative. The tag claims operatives to be purely fictitious."
|
||||||
@@ -669,20 +687,27 @@
|
|||||||
icon_state = "jewel"
|
icon_state = "jewel"
|
||||||
item_state = "jewel"
|
item_state = "jewel"
|
||||||
|
|
||||||
/obj/item/toy/plush/mammal
|
/obj/item/toy/plush/sergal
|
||||||
name = "mammal plushie"
|
name = "sergal plushie"
|
||||||
desc = "An adorable stuffed toy resembling some sort of mammallian crew member."
|
desc = "An adorable stuffed plushie that resembles a sagaru."
|
||||||
icon_state = "faux"
|
icon_state = "faux"
|
||||||
item_state = "faux"
|
item_state = "faux"
|
||||||
|
squeak_override = list('modular_citadel/sound/voice/merp.ogg' = 1)
|
||||||
|
|
||||||
/obj/item/toy/plush/mammal/dubious
|
/obj/item/toy/plush/sergal/gladwyn
|
||||||
icon_state = "dubious"
|
|
||||||
item_state = "dubious"
|
|
||||||
|
|
||||||
/obj/item/toy/plush/mammal/gladwyn
|
|
||||||
icon_state = "gladwyn"
|
icon_state = "gladwyn"
|
||||||
item_state = "gladwyn"
|
item_state = "gladwyn"
|
||||||
|
|
||||||
|
/obj/item/toy/plush/sergal/jermaine
|
||||||
|
icon_state = "jermaine"
|
||||||
|
item_state = "jermaine"
|
||||||
|
|
||||||
|
/obj/item/toy/plush/mammal
|
||||||
|
name = "mammal plushie"
|
||||||
|
desc = "An adorable stuffed toy resembling some sort of crew member."
|
||||||
|
icon_state = "dubious"
|
||||||
|
item_state = "dubious"
|
||||||
|
|
||||||
/obj/item/toy/plush/mammal/gavin
|
/obj/item/toy/plush/mammal/gavin
|
||||||
icon_state = "gavin"
|
icon_state = "gavin"
|
||||||
item_state = "gavin"
|
item_state = "gavin"
|
||||||
@@ -695,6 +720,10 @@
|
|||||||
icon_state = "circe"
|
icon_state = "circe"
|
||||||
item_state = "circe"
|
item_state = "circe"
|
||||||
|
|
||||||
|
/obj/item/toy/plush/mammal/robin
|
||||||
|
icon_state = "robin"
|
||||||
|
item_state = "robin"
|
||||||
|
|
||||||
/obj/item/toy/plush/mammal/pavel
|
/obj/item/toy/plush/mammal/pavel
|
||||||
icon_state = "pavel"
|
icon_state = "pavel"
|
||||||
item_state = "pavel"
|
item_state = "pavel"
|
||||||
@@ -731,10 +760,6 @@
|
|||||||
icon_state = "joker"
|
icon_state = "joker"
|
||||||
item_state = "joker"
|
item_state = "joker"
|
||||||
|
|
||||||
/obj/item/toy/plush/mammal/jermaine
|
|
||||||
icon_state = "jermaine"
|
|
||||||
item_state = "jermaine"
|
|
||||||
|
|
||||||
/obj/item/toy/plush/mammal/gunther
|
/obj/item/toy/plush/mammal/gunther
|
||||||
icon_state = "gunther"
|
icon_state = "gunther"
|
||||||
item_state = "gunther"
|
item_state = "gunther"
|
||||||
@@ -743,6 +768,11 @@
|
|||||||
icon_state = "fox"
|
icon_state = "fox"
|
||||||
item_state = "fox"
|
item_state = "fox"
|
||||||
|
|
||||||
|
/obj/item/toy/plush/mammal/rae
|
||||||
|
desc = "An adorable stuffed toy of an artic fox."
|
||||||
|
icon_state = "rae"
|
||||||
|
item_state = "rae"
|
||||||
|
|
||||||
/obj/item/toy/plush/mammal/zed
|
/obj/item/toy/plush/mammal/zed
|
||||||
icon_state = "zed"
|
icon_state = "zed"
|
||||||
item_state = "zed"
|
item_state = "zed"
|
||||||
@@ -782,9 +812,13 @@
|
|||||||
icon_state = "nikolai"
|
icon_state = "nikolai"
|
||||||
item_state = "nikolai"
|
item_state = "nikolai"
|
||||||
|
|
||||||
|
/obj/item/toy/plush/mammal/dog/flynn
|
||||||
|
icon_state = "flynn"
|
||||||
|
item_state = "flynn"
|
||||||
|
|
||||||
/obj/item/toy/plush/catgirl
|
/obj/item/toy/plush/catgirl
|
||||||
name = "feline plushie"
|
name = "feline plushie"
|
||||||
desc = "An adorable stuffed toy that resembles a felinid."
|
desc = "An adorable stuffed toy that resembles a feline."
|
||||||
icon_state = "bailey"
|
icon_state = "bailey"
|
||||||
item_state = "bailey"
|
item_state = "bailey"
|
||||||
attack_verb = list("headbutt", "scritched", "bit")
|
attack_verb = list("headbutt", "scritched", "bit")
|
||||||
@@ -802,9 +836,17 @@
|
|||||||
attack_verb = list("powergamed", "merged", "tabled")
|
attack_verb = list("powergamed", "merged", "tabled")
|
||||||
squeak_override = list('sound/effects/meow1.ogg' = 1)
|
squeak_override = list('sound/effects/meow1.ogg' = 1)
|
||||||
|
|
||||||
/obj/item/toy/plush/catgirl/robin
|
/obj/item/toy/plush/catgirl/drew
|
||||||
icon_state = "robin"
|
icon_state = "drew"
|
||||||
item_state = "robin"
|
item_state = "drew"
|
||||||
|
|
||||||
|
/obj/item/toy/plush/catgirl/fermis
|
||||||
|
name = "medcat plushie"
|
||||||
|
desc = "An affectionate stuffed toy that resembles a certain medcat, comes complete with battery operated wagging tail!! You get the impression she's cheering you on to to find happiness and be kind to people."
|
||||||
|
icon_state = "fermis"
|
||||||
|
item_state = "fermis"
|
||||||
|
attack_verb = list("cuddled", "petpatted", "wigglepurred")
|
||||||
|
squeak_override = list('modular_citadel/sound/voice/merowr.ogg' = 1)
|
||||||
|
|
||||||
/obj/item/toy/plush/awakenedplushie/ComponentInitialize()
|
/obj/item/toy/plush/awakenedplushie/ComponentInitialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -93,7 +93,7 @@
|
|||||||
desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate."
|
desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate."
|
||||||
icon_state = "cyborg_upgrade3"
|
icon_state = "cyborg_upgrade3"
|
||||||
require_module = 1
|
require_module = 1
|
||||||
module_type = /obj/item/robot_module/security
|
//module_type = /obj/item/robot_module/security
|
||||||
|
|
||||||
/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R, user = usr)
|
/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R, user = usr)
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|||||||
@@ -30,6 +30,30 @@
|
|||||||
/obj/item/storage/briefcase/lawyer
|
/obj/item/storage/briefcase/lawyer
|
||||||
folder_path = /obj/item/folder/blue
|
folder_path = /obj/item/folder/blue
|
||||||
|
|
||||||
|
/obj/item/storage/briefcase/lawyer/family
|
||||||
|
name = "battered briefcase"
|
||||||
|
desc = "An old briefcase, this one has seen better days in its time. It's clear they don't make them nowadays as good as they used to. The corners are modified with metal trim adding in weight!"
|
||||||
|
|
||||||
|
/obj/item/storage/briefcase/lawyer/family/PopulateContents()
|
||||||
|
new /obj/item/stamp/law(src)
|
||||||
|
new /obj/item/pen/fountain(src)
|
||||||
|
new /obj/item/paper_bin(src)
|
||||||
|
new /obj/item/storage/box/evidence(src)
|
||||||
|
new /obj/item/storage/box/lawyer(src)
|
||||||
|
|
||||||
|
/obj/item/storage/box/lawyer
|
||||||
|
name = "Box of lawyer tools"
|
||||||
|
desc = "A custom made box, full of items used by a Lawyer, all packed into one box!"
|
||||||
|
|
||||||
|
/obj/item/storage/box/lawyer/PopulateContents()
|
||||||
|
new /obj/item/clothing/gloves/color/white(src)
|
||||||
|
new /obj/item/folder/white(src)
|
||||||
|
new /obj/item/clothing/glasses/regular(src)
|
||||||
|
new /obj/item/folder/red(src)
|
||||||
|
new /obj/item/gavelhammer(src)
|
||||||
|
new /obj/item/stack/sheet/cloth(src)
|
||||||
|
new /obj/item/reagent_containers/glass/beaker/waterbottle(src)
|
||||||
|
|
||||||
/obj/item/storage/briefcase/lawyer/PopulateContents()
|
/obj/item/storage/briefcase/lawyer/PopulateContents()
|
||||||
new /obj/item/stamp/law(src)
|
new /obj/item/stamp/law(src)
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -75,7 +75,11 @@
|
|||||||
L.visible_message("<span class='danger'>[user] slams [L] onto the meat spike!</span>", "<span class='userdanger'>[user] slams you onto the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
|
L.visible_message("<span class='danger'>[user] slams [L] onto the meat spike!</span>", "<span class='userdanger'>[user] slams you onto the meat spike!</span>", "<span class='italics'>You hear a squishy wet noise.</span>")
|
||||||
L.forceMove(drop_location())
|
L.forceMove(drop_location())
|
||||||
L.emote("scream")
|
L.emote("scream")
|
||||||
L.add_splatter_floor()
|
if(iscarbon(L))
|
||||||
|
var/mob/living/carbon/C = L
|
||||||
|
C.bleed(30)
|
||||||
|
else
|
||||||
|
L.add_splatter_floor()
|
||||||
L.adjustBruteLoss(30)
|
L.adjustBruteLoss(30)
|
||||||
L.setDir(2)
|
L.setDir(2)
|
||||||
buckle_mob(L, force=1)
|
buckle_mob(L, force=1)
|
||||||
|
|||||||
@@ -51,6 +51,20 @@
|
|||||||
new /obj/item/stack/rods(get_turf(src), number_of_rods)
|
new /obj/item/stack/rods(get_turf(src), number_of_rods)
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|
||||||
|
/obj/structure/lattice/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
|
||||||
|
if(the_rcd.mode == RCD_FLOORWALL)
|
||||||
|
return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 2)
|
||||||
|
|
||||||
|
/obj/structure/lattice/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
|
||||||
|
if(passed_mode == RCD_FLOORWALL)
|
||||||
|
to_chat(user, "<span class='notice'>You build a floor.</span>")
|
||||||
|
var/turf/T = src.loc
|
||||||
|
if(isspaceturf(T))
|
||||||
|
T.PlaceOnTop(/turf/open/floor/plating)
|
||||||
|
qdel(src)
|
||||||
|
return TRUE
|
||||||
|
return FALSE
|
||||||
|
|
||||||
/obj/structure/lattice/singularity_pull(S, current_size)
|
/obj/structure/lattice/singularity_pull(S, current_size)
|
||||||
if(current_size >= STAGE_FOUR)
|
if(current_size >= STAGE_FOUR)
|
||||||
deconstruct()
|
deconstruct()
|
||||||
|
|||||||
+20
-7
@@ -1,4 +1,4 @@
|
|||||||
/proc/playsound(atom/source, soundin, vol as num, vary, extrarange as num, falloff, frequency = null, channel = 0, pressure_affected = TRUE, ignore_walls = TRUE)
|
/proc/playsound(atom/source, soundin, vol as num, vary, extrarange as num, falloff, frequency = null, channel = 0, pressure_affected = TRUE, ignore_walls = TRUE, soundenvwet = -10000, soundenvdry = 0)
|
||||||
if(isarea(source))
|
if(isarea(source))
|
||||||
throw EXCEPTION("playsound(): source is an area")
|
throw EXCEPTION("playsound(): source is an area")
|
||||||
return
|
return
|
||||||
@@ -21,13 +21,16 @@
|
|||||||
for(var/P in listeners)
|
for(var/P in listeners)
|
||||||
var/mob/M = P
|
var/mob/M = P
|
||||||
if(get_dist(M, turf_source) <= maxdistance)
|
if(get_dist(M, turf_source) <= maxdistance)
|
||||||
M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S)
|
M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S, soundenvwet, soundenvdry)
|
||||||
for(var/P in SSmobs.dead_players_by_zlevel[z])
|
for(var/P in SSmobs.dead_players_by_zlevel[z])
|
||||||
var/mob/M = P
|
var/mob/M = P
|
||||||
if(get_dist(M, turf_source) <= maxdistance)
|
if(get_dist(M, turf_source) <= maxdistance)
|
||||||
M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S)
|
M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S, soundenvwet, soundenvdry)
|
||||||
|
|
||||||
/mob/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, channel = 0, pressure_affected = TRUE, sound/S, envwet = -10000, envdry = 0)
|
/mob/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, channel = 0, pressure_affected = TRUE, sound/S, envwet = -10000, envdry = 0, manual_x, manual_y)
|
||||||
|
if(audiovisual_redirect)
|
||||||
|
var/turf/T = get_turf(src)
|
||||||
|
audiovisual_redirect.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S, 0, -1000, turf_source.x - T.x, turf_source.y - T.y)
|
||||||
if(!client || !can_hear())
|
if(!client || !can_hear())
|
||||||
return
|
return
|
||||||
|
|
||||||
@@ -49,7 +52,9 @@
|
|||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
|
|
||||||
//sound volume falloff with distance
|
//sound volume falloff with distance
|
||||||
var/distance = get_dist(T, turf_source)
|
var/distance = 0
|
||||||
|
if(!manual_x && !manual_y)
|
||||||
|
distance = get_dist(T, turf_source)
|
||||||
|
|
||||||
S.volume -= max(distance - world.view, 0) * 2 //multiplicative falloff to add on top of natural audio falloff.
|
S.volume -= max(distance - world.view, 0) * 2 //multiplicative falloff to add on top of natural audio falloff.
|
||||||
|
|
||||||
@@ -77,9 +82,17 @@
|
|||||||
if(S.volume <= 0)
|
if(S.volume <= 0)
|
||||||
return //No sound
|
return //No sound
|
||||||
|
|
||||||
var/dx = turf_source.x - T.x // Hearing from the right/left
|
var/dx = 0 // Hearing from the right/left
|
||||||
|
if(!manual_x)
|
||||||
|
dx = turf_source.x - T.x
|
||||||
|
else
|
||||||
|
dx = manual_x
|
||||||
S.x = dx
|
S.x = dx
|
||||||
var/dz = turf_source.y - T.y // Hearing from infront/behind
|
var/dz = 0 // Hearing from infront/behind
|
||||||
|
if(!manual_x)
|
||||||
|
dz = turf_source.y - T.y
|
||||||
|
else
|
||||||
|
dz = manual_y
|
||||||
S.z = dz
|
S.z = dz
|
||||||
// The y value is for above your head, but there is no ceiling in 2d spessmens.
|
// The y value is for above your head, but there is no ceiling in 2d spessmens.
|
||||||
S.y = 1
|
S.y = 1
|
||||||
|
|||||||
@@ -245,6 +245,10 @@
|
|||||||
return 0
|
return 0
|
||||||
if(C.m_intent == MOVE_INTENT_WALK && (lube&NO_SLIP_WHEN_WALKING))
|
if(C.m_intent == MOVE_INTENT_WALK && (lube&NO_SLIP_WHEN_WALKING))
|
||||||
return 0
|
return 0
|
||||||
|
if(ishuman(C) && (lube&NO_SLIP_WHEN_WALKING))
|
||||||
|
var/mob/living/carbon/human/H = C
|
||||||
|
if(!H.sprinting && H.getStaminaLoss() >= 20)
|
||||||
|
return 0
|
||||||
if(!(lube&SLIDE_ICE))
|
if(!(lube&SLIDE_ICE))
|
||||||
to_chat(C, "<span class='notice'>You slipped[ O ? " on the [O.name]" : ""]!</span>")
|
to_chat(C, "<span class='notice'>You slipped[ O ? " on the [O.name]" : ""]!</span>")
|
||||||
playsound(C.loc, 'sound/misc/slip.ogg', 50, 1, -3)
|
playsound(C.loc, 'sound/misc/slip.ogg', 50, 1, -3)
|
||||||
|
|||||||
@@ -126,6 +126,17 @@
|
|||||||
else
|
else
|
||||||
to_chat(user, "<span class='danger'>You hit [src], to no effect!</span>")
|
to_chat(user, "<span class='danger'>You hit [src], to no effect!</span>")
|
||||||
|
|
||||||
|
/turf/open/floor/plating/foam/rcd_vals(mob/user, obj/item/construction/rcd/the_rcd)
|
||||||
|
if(the_rcd.mode == RCD_FLOORWALL)
|
||||||
|
return list("mode" = RCD_FLOORWALL, "delay" = 0, "cost" = 1)
|
||||||
|
|
||||||
|
/turf/open/floor/plating/foam/rcd_act(mob/user, obj/item/construction/rcd/the_rcd, passed_mode)
|
||||||
|
if(passed_mode == RCD_FLOORWALL)
|
||||||
|
to_chat(user, "<span class='notice'>You build a floor.</span>")
|
||||||
|
ChangeTurf(/turf/open/floor/plating)
|
||||||
|
return TRUE
|
||||||
|
return FALSE
|
||||||
|
|
||||||
/turf/open/floor/plating/foam/ex_act()
|
/turf/open/floor/plating/foam/ex_act()
|
||||||
..()
|
..()
|
||||||
ScrapeAway()
|
ScrapeAway()
|
||||||
|
|||||||
@@ -26,7 +26,30 @@
|
|||||||
/turf/open/space/transit/east
|
/turf/open/space/transit/east
|
||||||
dir = EAST
|
dir = EAST
|
||||||
|
|
||||||
/turf/open/space/transit/Entered(atom/movable/AM, atom/OldLoc)
|
/turf/open/space/transit/border
|
||||||
|
opacity = TRUE
|
||||||
|
|
||||||
|
/turf/open/space/transit/border/south
|
||||||
|
dir = SOUTH
|
||||||
|
|
||||||
|
/turf/open/space/transit/border/north
|
||||||
|
dir = NORTH
|
||||||
|
|
||||||
|
/turf/open/space/transit/border/west
|
||||||
|
dir = WEST
|
||||||
|
|
||||||
|
/turf/open/space/transit/border/east
|
||||||
|
dir = EAST
|
||||||
|
|
||||||
|
/turf/open/space/transit/centcom
|
||||||
|
dir = SOUTH
|
||||||
|
|
||||||
|
/turf/open/space/transit/centcom/Entered(atom/movable/AM, atom/OldLoc)
|
||||||
|
..()
|
||||||
|
if(!locate(/obj/structure/lattice) in src)
|
||||||
|
throw_atom(AM)
|
||||||
|
|
||||||
|
/turf/open/space/transit/border/Entered(atom/movable/AM, atom/OldLoc)
|
||||||
..()
|
..()
|
||||||
if(!locate(/obj/structure/lattice) in src)
|
if(!locate(/obj/structure/lattice) in src)
|
||||||
throw_atom(AM)
|
throw_atom(AM)
|
||||||
@@ -66,6 +89,8 @@
|
|||||||
|
|
||||||
var/turf/T = locate(_x, _y, _z)
|
var/turf/T = locate(_x, _y, _z)
|
||||||
AM.forceMove(T)
|
AM.forceMove(T)
|
||||||
|
var/turf/throwturf = get_ranged_target_turf(T, dir, 1)
|
||||||
|
AM.safe_throw_at(throwturf, 1, 4, null, FALSE)
|
||||||
|
|
||||||
|
|
||||||
/turf/open/space/transit/CanBuildHere()
|
/turf/open/space/transit/CanBuildHere()
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
|
|
||||||
/mob/living/carbon/human/virtual_reality/proc/revert_to_reality(deathchecks = TRUE)
|
/mob/living/carbon/human/virtual_reality/proc/revert_to_reality(deathchecks = TRUE)
|
||||||
if(real_mind && mind)
|
if(real_mind && mind)
|
||||||
|
real_mind.current.audiovisual_redirect = null
|
||||||
real_mind.current.ckey = ckey
|
real_mind.current.ckey = ckey
|
||||||
real_mind.current.stop_sound_channel(CHANNEL_HEARTBEAT)
|
real_mind.current.stop_sound_channel(CHANNEL_HEARTBEAT)
|
||||||
if(deathchecks && vr_sleeper)
|
if(deathchecks && vr_sleeper)
|
||||||
|
|||||||
@@ -93,6 +93,7 @@
|
|||||||
to_chat(occupant, "<span class='warning'>Transferring to virtual reality...</span>")
|
to_chat(occupant, "<span class='warning'>Transferring to virtual reality...</span>")
|
||||||
if(vr_human && vr_human.stat == CONSCIOUS && !vr_human.real_mind)
|
if(vr_human && vr_human.stat == CONSCIOUS && !vr_human.real_mind)
|
||||||
SStgui.close_user_uis(occupant, src)
|
SStgui.close_user_uis(occupant, src)
|
||||||
|
human_occupant.audiovisual_redirect = vr_human
|
||||||
vr_human.real_mind = human_occupant.mind
|
vr_human.real_mind = human_occupant.mind
|
||||||
vr_human.ckey = human_occupant.ckey
|
vr_human.ckey = human_occupant.ckey
|
||||||
to_chat(vr_human, "<span class='notice'>Transfer successful! You are now playing as [vr_human] in VR!</span>")
|
to_chat(vr_human, "<span class='notice'>Transfer successful! You are now playing as [vr_human] in VR!</span>")
|
||||||
@@ -166,11 +167,13 @@
|
|||||||
vr_human.undershirt = H.undershirt
|
vr_human.undershirt = H.undershirt
|
||||||
vr_human.underwear = H.underwear
|
vr_human.underwear = H.underwear
|
||||||
vr_human.updateappearance(TRUE, TRUE, TRUE)
|
vr_human.updateappearance(TRUE, TRUE, TRUE)
|
||||||
|
vr_human.give_genitals(TRUE) //CITADEL ADD
|
||||||
if(outfit)
|
if(outfit)
|
||||||
var/datum/outfit/O = new outfit()
|
var/datum/outfit/O = new outfit()
|
||||||
O.equip(vr_human)
|
O.equip(vr_human)
|
||||||
if(transfer && H.mind)
|
if(transfer && H.mind)
|
||||||
SStgui.close_user_uis(H, src)
|
SStgui.close_user_uis(H, src)
|
||||||
|
H.audiovisual_redirect = vr_human
|
||||||
vr_human.ckey = H.ckey
|
vr_human.ckey = H.ckey
|
||||||
|
|
||||||
/obj/machinery/vr_sleeper/proc/cleanup_vr_human()
|
/obj/machinery/vr_sleeper/proc/cleanup_vr_human()
|
||||||
@@ -227,4 +230,4 @@
|
|||||||
for (var/mob/living/carbon/human/virtual_reality/H in vr_area)
|
for (var/mob/living/carbon/human/virtual_reality/H in vr_area)
|
||||||
if (H.stat == DEAD && !H.vr_sleeper && !H.real_mind)
|
if (H.stat == DEAD && !H.vr_sleeper && !H.real_mind)
|
||||||
qdel(H)
|
qdel(H)
|
||||||
addtimer(CALLBACK(src, .proc/clean_up), 3 MINUTES)
|
addtimer(CALLBACK(src, .proc/clean_up), 3 MINUTES)
|
||||||
|
|||||||
@@ -605,6 +605,24 @@
|
|||||||
world.update_status()
|
world.update_status()
|
||||||
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle AI", "[!alai ? "Disabled" : "Enabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle AI", "[!alai ? "Disabled" : "Enabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|
||||||
|
/datum/admins/proc/toggleMulticam()
|
||||||
|
set category = "Server"
|
||||||
|
set desc="Turns mutlicam on and off."
|
||||||
|
set name="Toggle Multicam"
|
||||||
|
var/almcam = CONFIG_GET(flag/allow_ai_multicam)
|
||||||
|
CONFIG_SET(flag/allow_ai_multicam, !almcam)
|
||||||
|
if (almcam)
|
||||||
|
to_chat(world, "<B>The AI no longer has multicam.</B>")
|
||||||
|
for(var/i in GLOB.ai_list)
|
||||||
|
var/mob/living/silicon/ai/aiPlayer = i
|
||||||
|
if(aiPlayer.multicam_on)
|
||||||
|
aiPlayer.end_multicam()
|
||||||
|
else
|
||||||
|
to_chat(world, "<B>The AI now has multicam.</B>")
|
||||||
|
log_admin("[key_name(usr)] toggled AI multicam.")
|
||||||
|
world.update_status()
|
||||||
|
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Multicam", "[!almcam ? "Disabled" : "Enabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|
||||||
/datum/admins/proc/toggleaban()
|
/datum/admins/proc/toggleaban()
|
||||||
set category = "Server"
|
set category = "Server"
|
||||||
set desc="Respawn basically"
|
set desc="Respawn basically"
|
||||||
|
|||||||
@@ -70,6 +70,8 @@ GLOBAL_LIST_INIT(admin_verbs_admin, world.AVerbsAdmin())
|
|||||||
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
|
/client/proc/cmd_admin_pm_context, /*right-click adminPM interface*/
|
||||||
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
|
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
|
||||||
/client/proc/panicbunker,
|
/client/proc/panicbunker,
|
||||||
|
/client/proc/addbunkerbypass,
|
||||||
|
/client/proc/revokebunkerbypass,
|
||||||
/client/proc/stop_sounds,
|
/client/proc/stop_sounds,
|
||||||
/client/proc/hide_verbs, /*hides all our adminverbs*/
|
/client/proc/hide_verbs, /*hides all our adminverbs*/
|
||||||
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
|
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
|
||||||
@@ -118,6 +120,7 @@ GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer())
|
|||||||
/datum/admins/proc/toggleaban,
|
/datum/admins/proc/toggleaban,
|
||||||
/client/proc/everyone_random,
|
/client/proc/everyone_random,
|
||||||
/datum/admins/proc/toggleAI,
|
/datum/admins/proc/toggleAI,
|
||||||
|
/datum/admins/proc/toggleMulticam,
|
||||||
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
|
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
|
||||||
/client/proc/cmd_debug_del_all,
|
/client/proc/cmd_debug_del_all,
|
||||||
/client/proc/toggle_random_events,
|
/client/proc/toggle_random_events,
|
||||||
@@ -232,6 +235,8 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list(
|
|||||||
/proc/release,
|
/proc/release,
|
||||||
/client/proc/reload_admins,
|
/client/proc/reload_admins,
|
||||||
/client/proc/panicbunker,
|
/client/proc/panicbunker,
|
||||||
|
/client/proc/addbunkerbypass,
|
||||||
|
/client/proc/revokebunkerbypass,
|
||||||
/client/proc/admin_change_sec_level,
|
/client/proc/admin_change_sec_level,
|
||||||
/client/proc/toggle_nuke,
|
/client/proc/toggle_nuke,
|
||||||
/client/proc/cmd_display_del_log,
|
/client/proc/cmd_display_del_log,
|
||||||
|
|||||||
@@ -714,7 +714,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null
|
|||||||
SDQL_print(x, text_list)
|
SDQL_print(x, text_list)
|
||||||
if (!isnull(x) && !isnum(x) && L[x] != null)
|
if (!isnull(x) && !isnum(x) && L[x] != null)
|
||||||
text_list += " -> "
|
text_list += " -> "
|
||||||
SDQL_print(L[L[x]])
|
SDQL_print(L[L[x]], text_list)
|
||||||
text_list += "]<br>"
|
text_list += "]<br>"
|
||||||
else
|
else
|
||||||
if(isnull(object))
|
if(isnull(object))
|
||||||
|
|||||||
@@ -184,6 +184,9 @@
|
|||||||
/proc/_list_swap(list/L, Index1, Index2)
|
/proc/_list_swap(list/L, Index1, Index2)
|
||||||
L.Swap(Index1, Index2)
|
L.Swap(Index1, Index2)
|
||||||
|
|
||||||
|
/proc/_list_get(list/L, index)
|
||||||
|
return L[index]
|
||||||
|
|
||||||
/proc/_walk(ref, dir, lag)
|
/proc/_walk(ref, dir, lag)
|
||||||
walk(ref, dir, lag)
|
walk(ref, dir, lag)
|
||||||
|
|
||||||
|
|||||||
@@ -13,3 +13,28 @@
|
|||||||
if (new_pb && !SSdbcore.Connect())
|
if (new_pb && !SSdbcore.Connect())
|
||||||
message_admins("The Database is not connected! Panic bunker will not work until the connection is reestablished.")
|
message_admins("The Database is not connected! Panic bunker will not work until the connection is reestablished.")
|
||||||
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Panic Bunker", "[new_pb ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Panic Bunker", "[new_pb ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||||
|
|
||||||
|
/client/proc/addbunkerbypass(ckeytobypass as text)
|
||||||
|
set category = "Special Verbs"
|
||||||
|
set name = "Add PB Bypass"
|
||||||
|
set desc = "Allows a given ckey to connect despite the panic bunker for a given round."
|
||||||
|
if(!CONFIG_GET(flag/sql_enabled))
|
||||||
|
to_chat(usr, "<span class='adminnotice'>The Database is not enabled!</span>")
|
||||||
|
return
|
||||||
|
|
||||||
|
GLOB.bunker_passthrough |= ckey(ckeytobypass)
|
||||||
|
log_admin("[key_name(usr)] has added [ckeytobypass] to the current round's bunker bypass list.")
|
||||||
|
message_admins("[key_name(usr)] has added [ckeytobypass] to the current round's bunker bypass list.")
|
||||||
|
|
||||||
|
/client/proc/revokebunkerbypass(ckeytobypass as text)
|
||||||
|
set category = "Special Verbs"
|
||||||
|
set name = "Revoke PB Bypass"
|
||||||
|
set desc = "Revoke's a ckey's permission to bypass the panic bunker for a given round."
|
||||||
|
if(!CONFIG_GET(flag/sql_enabled))
|
||||||
|
to_chat(usr, "<span class='adminnotice'>The Database is not enabled!</span>")
|
||||||
|
return
|
||||||
|
|
||||||
|
GLOB.bunker_passthrough -= ckey(ckeytobypass)
|
||||||
|
log_admin("[key_name(usr)] has removed [ckeytobypass] from the current round's bunker bypass list.")
|
||||||
|
message_admins("[key_name(usr)] has removed [ckeytobypass] from the current round's bunker bypass list.")
|
||||||
|
|
||||||
|
|||||||
@@ -34,6 +34,8 @@
|
|||||||
var/mimicing = ""
|
var/mimicing = ""
|
||||||
var/canrespec = 0
|
var/canrespec = 0
|
||||||
var/changeling_speak = 0
|
var/changeling_speak = 0
|
||||||
|
var/loudfactor = 0 //Used for blood tests. At 4, blood tests will succeed. At 10, blood tests will result in an explosion.
|
||||||
|
var/bloodtestwarnings = 0 //Used to track if the ling has been notified that they will pass blood tests.
|
||||||
var/datum/dna/chosen_dna
|
var/datum/dna/chosen_dna
|
||||||
var/obj/effect/proc_holder/changeling/sting/chosen_sting
|
var/obj/effect/proc_holder/changeling/sting/chosen_sting
|
||||||
var/datum/cellular_emporium/cellular_emporium
|
var/datum/cellular_emporium/cellular_emporium
|
||||||
@@ -71,8 +73,6 @@
|
|||||||
reset_powers()
|
reset_powers()
|
||||||
create_initial_profile()
|
create_initial_profile()
|
||||||
if(give_objectives)
|
if(give_objectives)
|
||||||
if(team_mode)
|
|
||||||
forge_team_objectives()
|
|
||||||
forge_objectives()
|
forge_objectives()
|
||||||
remove_clownmut()
|
remove_clownmut()
|
||||||
. = ..()
|
. = ..()
|
||||||
@@ -123,6 +123,8 @@
|
|||||||
/datum/antagonist/changeling/proc/reset_powers()
|
/datum/antagonist/changeling/proc/reset_powers()
|
||||||
if(purchasedpowers)
|
if(purchasedpowers)
|
||||||
remove_changeling_powers()
|
remove_changeling_powers()
|
||||||
|
loudfactor = 0
|
||||||
|
bloodtestwarnings = 0
|
||||||
//Repurchase free powers.
|
//Repurchase free powers.
|
||||||
for(var/path in all_powers)
|
for(var/path in all_powers)
|
||||||
var/obj/effect/proc_holder/changeling/S = new path()
|
var/obj/effect/proc_holder/changeling/S = new path()
|
||||||
@@ -174,6 +176,13 @@
|
|||||||
geneticpoints -= thepower.dna_cost
|
geneticpoints -= thepower.dna_cost
|
||||||
purchasedpowers += thepower
|
purchasedpowers += thepower
|
||||||
thepower.on_purchase(owner.current)
|
thepower.on_purchase(owner.current)
|
||||||
|
loudfactor += thepower.loudness
|
||||||
|
if(loudfactor >= 4 && !bloodtestwarnings)
|
||||||
|
to_chat(owner.current, "<span class='warning'>Our blood is growing flammable. Our blood will react violently to heat.</span>")
|
||||||
|
bloodtestwarnings = 1
|
||||||
|
if(loudfactor >= 10 && bloodtestwarnings < 2)
|
||||||
|
to_chat(owner.current, "<span class='warning'>Our blood has grown extremely flammable. Our blood will react explosively to heat.</span>")
|
||||||
|
bloodtestwarnings = 2
|
||||||
|
|
||||||
/datum/antagonist/changeling/proc/readapt()
|
/datum/antagonist/changeling/proc/readapt()
|
||||||
if(!ishuman(owner.current))
|
if(!ishuman(owner.current))
|
||||||
@@ -182,6 +191,7 @@
|
|||||||
if(canrespec)
|
if(canrespec)
|
||||||
to_chat(owner.current, "<span class='notice'>We have removed our evolutions from this form, and are now ready to readapt.</span>")
|
to_chat(owner.current, "<span class='notice'>We have removed our evolutions from this form, and are now ready to readapt.</span>")
|
||||||
reset_powers()
|
reset_powers()
|
||||||
|
playsound(get_turf(owner.current), 'sound/effects/lingreadapt.ogg', 75, TRUE, 5, soundenvwet = 0)
|
||||||
canrespec = 0
|
canrespec = 0
|
||||||
SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, "Readapt")
|
SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, "Readapt")
|
||||||
return 1
|
return 1
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
var/req_stat = CONSCIOUS // CONSCIOUS, UNCONSCIOUS or DEAD
|
var/req_stat = CONSCIOUS // CONSCIOUS, UNCONSCIOUS or DEAD
|
||||||
var/always_keep = 0 // important for abilities like revive that screw you if you lose them.
|
var/always_keep = 0 // important for abilities like revive that screw you if you lose them.
|
||||||
var/ignores_fakedeath = FALSE // usable with the FAKEDEATH flag
|
var/ignores_fakedeath = FALSE // usable with the FAKEDEATH flag
|
||||||
|
var/loudness = 0 //Determines how much having this ability will affect changeling blood tests. At 4, the blood will react violently and turn to ash, creating a unique message in the process. At 10, the blood will explode when heated.
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/proc_holder/changeling/proc/on_purchase(mob/user, is_respec)
|
/obj/effect/proc_holder/changeling/proc/on_purchase(mob/user, is_respec)
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
/obj/effect/proc_holder/changeling/biodegrade
|
/obj/effect/proc_holder/changeling/biodegrade
|
||||||
name = "Biodegrade"
|
name = "Biodegrade"
|
||||||
desc = "Dissolves restraints or other objects preventing free movement."
|
desc = "Dissolves restraints or other objects preventing free movement."
|
||||||
helptext = "This is obvious to nearby people, and can destroy standard restraints and closets."
|
helptext = "This is obvious to nearby people, and can destroy standard restraints and closets. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat."
|
||||||
chemical_cost = 30 //High cost to prevent spam
|
chemical_cost = 30 //High cost to prevent spam
|
||||||
|
loudness = 1
|
||||||
dna_cost = 2
|
dna_cost = 2
|
||||||
req_human = 1
|
req_human = 1
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
/obj/effect/proc_holder/changeling/digitalcamo
|
/obj/effect/proc_holder/changeling/digitalcamo
|
||||||
name = "Digital Camouflage"
|
name = "Digital Camouflage"
|
||||||
desc = "By evolving the ability to distort our form and proportions, we defeat common algorithms used to detect lifeforms on cameras."
|
desc = "By evolving the ability to distort our form and proportions, we defeat common algorithms used to detect lifeforms on cameras."
|
||||||
helptext = "We cannot be tracked by camera or seen by AI units while using this skill. However, humans looking at us will find us... uncanny."
|
helptext = "We cannot be tracked by camera or seen by AI units while using this skill. However, humans looking at us will find us... uncanny. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat."
|
||||||
dna_cost = 1
|
dna_cost = 1
|
||||||
|
loudness = 1
|
||||||
|
|
||||||
//Prevents AIs tracking you but makes you easily detectable to the human-eye.
|
//Prevents AIs tracking you but makes you easily detectable to the human-eye.
|
||||||
/obj/effect/proc_holder/changeling/digitalcamo/sting_action(mob/user)
|
/obj/effect/proc_holder/changeling/digitalcamo/sting_action(mob/user)
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/obj/effect/proc_holder/changeling/headcrab
|
/obj/effect/proc_holder/changeling/headcrab
|
||||||
name = "Last Resort"
|
name = "Last Resort"
|
||||||
desc = "We sacrifice our current body in a moment of need, placing us in control of a vessel."
|
desc = "We sacrifice our current body in a moment of need, placing us in control of a vessel."
|
||||||
helptext = "We will be placed in control of a small, fragile creature. We may attack a corpse like this to plant an egg which will slowly mature into a new form for us."
|
helptext = "We will be placed in control of a small, fragile creature. We may attack a corpse like this to plant an egg which will slowly mature into a new form for us. This ability is loud, and might cause our blood to react violently to heat."
|
||||||
chemical_cost = 20
|
chemical_cost = 20
|
||||||
dna_cost = 1
|
dna_cost = 1
|
||||||
|
loudness = 2
|
||||||
req_human = 1
|
req_human = 1
|
||||||
|
|
||||||
/obj/effect/proc_holder/changeling/headcrab/sting_action(mob/user)
|
/obj/effect/proc_holder/changeling/headcrab/sting_action(mob/user)
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
name = "Hivemind Communication"
|
name = "Hivemind Communication"
|
||||||
desc = "We tune our senses to the airwaves to allow us to discreetly communicate and exchange DNA with other changelings."
|
desc = "We tune our senses to the airwaves to allow us to discreetly communicate and exchange DNA with other changelings."
|
||||||
helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives."
|
helptext = "We will be able to talk with other changelings with :g. Exchanged DNA do not count towards absorb objectives."
|
||||||
dna_cost = 0
|
dna_cost = 1
|
||||||
chemical_cost = -1
|
chemical_cost = -1
|
||||||
|
|
||||||
/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(mob/user, is_respec)
|
/obj/effect/proc_holder/changeling/hivemind_comms/on_purchase(mob/user, is_respec)
|
||||||
@@ -17,6 +17,9 @@
|
|||||||
var/obj/effect/proc_holder/changeling/hivemind_download/S2 = new
|
var/obj/effect/proc_holder/changeling/hivemind_download/S2 = new
|
||||||
if(!changeling.has_sting(S2))
|
if(!changeling.has_sting(S2))
|
||||||
changeling.purchasedpowers+=S2
|
changeling.purchasedpowers+=S2
|
||||||
|
var/obj/effect/proc_holder/changeling/linglink/S3 = new
|
||||||
|
if(!changeling.has_sting(S3))
|
||||||
|
changeling.purchasedpowers+=S3
|
||||||
|
|
||||||
// HIVE MIND UPLOAD/DOWNLOAD DNA
|
// HIVE MIND UPLOAD/DOWNLOAD DNA
|
||||||
GLOBAL_LIST_EMPTY(hivemind_bank)
|
GLOBAL_LIST_EMPTY(hivemind_bank)
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
/obj/effect/proc_holder/changeling/lesserform
|
/obj/effect/proc_holder/changeling/lesserform
|
||||||
name = "Lesser Form"
|
name = "Lesser Form"
|
||||||
desc = "We debase ourselves and become lesser. We become a monkey."
|
desc = "We debase ourselves and become lesser. We become a monkey. This ability is loud, and might cause our blood to react violently to heat."
|
||||||
chemical_cost = 5
|
chemical_cost = 5
|
||||||
dna_cost = 1
|
dna_cost = 1
|
||||||
|
loudness = 2
|
||||||
req_human = 1
|
req_human = 1
|
||||||
|
|
||||||
//Transform into a monkey.
|
//Transform into a monkey.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
name = "Hivemind Link"
|
name = "Hivemind Link"
|
||||||
desc = "Link your victim's mind into the hivemind for personal interrogation."
|
desc = "Link your victim's mind into the hivemind for personal interrogation."
|
||||||
chemical_cost = 0
|
chemical_cost = 0
|
||||||
dna_cost = 0
|
dna_cost = -1
|
||||||
req_human = 1
|
req_human = 1
|
||||||
|
|
||||||
/obj/effect/proc_holder/changeling/linglink/can_sting(mob/living/carbon/user)
|
/obj/effect/proc_holder/changeling/linglink/can_sting(mob/living/carbon/user)
|
||||||
|
|||||||
@@ -134,9 +134,10 @@
|
|||||||
/obj/effect/proc_holder/changeling/weapon/arm_blade
|
/obj/effect/proc_holder/changeling/weapon/arm_blade
|
||||||
name = "Arm Blade"
|
name = "Arm Blade"
|
||||||
desc = "We reform one of our arms into a deadly blade."
|
desc = "We reform one of our arms into a deadly blade."
|
||||||
helptext = "We may retract our armblade in the same manner as we form it. Cannot be used while in lesser form."
|
helptext = "We may retract our armblade in the same manner as we form it. Cannot be used while in lesser form. This ability is loud, and might cause our blood to react violently to heat."
|
||||||
chemical_cost = 20
|
chemical_cost = 20
|
||||||
dna_cost = 2
|
dna_cost = 2
|
||||||
|
loudness = 2
|
||||||
req_human = 1
|
req_human = 1
|
||||||
weapon_type = /obj/item/melee/arm_blade
|
weapon_type = /obj/item/melee/arm_blade
|
||||||
weapon_name_simple = "blade"
|
weapon_name_simple = "blade"
|
||||||
@@ -215,9 +216,11 @@
|
|||||||
desc = "We ready a tentacle to grab items or victims with."
|
desc = "We ready a tentacle to grab items or victims with."
|
||||||
helptext = "We can use it once to retrieve a distant item. If used on living creatures, the effect depends on the intent: \
|
helptext = "We can use it once to retrieve a distant item. If used on living creatures, the effect depends on the intent: \
|
||||||
Help will simply drag them closer, Disarm will grab whatever they're holding instead of them, Grab will put the victim in our hold after catching it, \
|
Help will simply drag them closer, Disarm will grab whatever they're holding instead of them, Grab will put the victim in our hold after catching it, \
|
||||||
and Harm will stun it, and stab it if we're also holding a sharp weapon. Cannot be used while in lesser form."
|
and Harm will stun it, and stab it if we're also holding a sharp weapon. Cannot be used while in lesser form.\
|
||||||
|
This ability is loud, and might cause our blood to react violently to heat."
|
||||||
chemical_cost = 10
|
chemical_cost = 10
|
||||||
dna_cost = 2
|
dna_cost = 2
|
||||||
|
loudness = 2
|
||||||
req_human = 1
|
req_human = 1
|
||||||
weapon_type = /obj/item/gun/magic/tentacle
|
weapon_type = /obj/item/gun/magic/tentacle
|
||||||
weapon_name_simple = "tentacle"
|
weapon_name_simple = "tentacle"
|
||||||
@@ -393,9 +396,10 @@
|
|||||||
/obj/effect/proc_holder/changeling/weapon/shield
|
/obj/effect/proc_holder/changeling/weapon/shield
|
||||||
name = "Organic Shield"
|
name = "Organic Shield"
|
||||||
desc = "We reform one of our arms into a hard shield."
|
desc = "We reform one of our arms into a hard shield."
|
||||||
helptext = "Organic tissue cannot resist damage forever; the shield will break after it is hit too much. The more genomes we absorb, the stronger it is. Cannot be used while in lesser form."
|
helptext = "Organic tissue cannot resist damage forever; the shield will break after it is hit too much. The more genomes we absorb, the stronger it is. Cannot be used while in lesser form. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat."
|
||||||
chemical_cost = 20
|
chemical_cost = 20
|
||||||
dna_cost = 1
|
dna_cost = 1
|
||||||
|
loudness = 1
|
||||||
req_human = 1
|
req_human = 1
|
||||||
|
|
||||||
weapon_type = /obj/item/shield/changeling
|
weapon_type = /obj/item/shield/changeling
|
||||||
@@ -445,9 +449,10 @@
|
|||||||
/obj/effect/proc_holder/changeling/suit/organic_space_suit
|
/obj/effect/proc_holder/changeling/suit/organic_space_suit
|
||||||
name = "Organic Space Suit"
|
name = "Organic Space Suit"
|
||||||
desc = "We grow an organic suit to protect ourselves from space exposure."
|
desc = "We grow an organic suit to protect ourselves from space exposure."
|
||||||
helptext = "We must constantly repair our form to make it space-proof, reducing chemical production while we are protected. Cannot be used in lesser form."
|
helptext = "We must constantly repair our form to make it space-proof, reducing chemical production while we are protected. Cannot be used in lesser form. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat."
|
||||||
chemical_cost = 20
|
chemical_cost = 20
|
||||||
dna_cost = 2
|
dna_cost = 2
|
||||||
|
loudness = 1
|
||||||
req_human = 1
|
req_human = 1
|
||||||
|
|
||||||
suit_type = /obj/item/clothing/suit/space/changeling
|
suit_type = /obj/item/clothing/suit/space/changeling
|
||||||
@@ -492,9 +497,10 @@
|
|||||||
/obj/effect/proc_holder/changeling/suit/armor
|
/obj/effect/proc_holder/changeling/suit/armor
|
||||||
name = "Chitinous Armor"
|
name = "Chitinous Armor"
|
||||||
desc = "We turn our skin into tough chitin to protect us from damage."
|
desc = "We turn our skin into tough chitin to protect us from damage."
|
||||||
helptext = "Upkeep of the armor requires a low expenditure of chemicals. The armor is strong against brute force, but does not provide much protection from lasers. Cannot be used in lesser form."
|
helptext = "Upkeep of the armor requires a low expenditure of chemicals. The armor is strong against brute force, but does not provide much protection from lasers. Cannot be used in lesser form. This ability is loud, and might cause our blood to react violently to heat."
|
||||||
chemical_cost = 20
|
chemical_cost = 20
|
||||||
dna_cost = 1
|
dna_cost = 1
|
||||||
|
loudness = 2
|
||||||
req_human = 1
|
req_human = 1
|
||||||
recharge_slowdown = 0.25
|
recharge_slowdown = 0.25
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/obj/effect/proc_holder/changeling/resonant_shriek
|
/obj/effect/proc_holder/changeling/resonant_shriek
|
||||||
name = "Resonant Shriek"
|
name = "Resonant Shriek"
|
||||||
desc = "Our lungs and vocal cords shift, allowing us to briefly emit a noise that deafens and confuses the weak-minded."
|
desc = "Our lungs and vocal cords shift, allowing us to briefly emit a noise that deafens and confuses the weak-minded."
|
||||||
helptext = "Emits a high-frequency sound that confuses and deafens humans, blows out nearby lights and overloads cyborg sensors."
|
helptext = "Emits a high-frequency sound that confuses and deafens humans, blows out nearby lights and overloads cyborg sensors. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat."
|
||||||
chemical_cost = 20
|
chemical_cost = 20
|
||||||
dna_cost = 1
|
dna_cost = 1
|
||||||
|
loudness = 1
|
||||||
req_human = 1
|
req_human = 1
|
||||||
|
|
||||||
//A flashy ability, good for crowd control and sewing chaos.
|
//A flashy ability, good for crowd control and sewing chaos.
|
||||||
@@ -25,13 +26,16 @@
|
|||||||
for(var/obj/machinery/light/L in range(4, user))
|
for(var/obj/machinery/light/L in range(4, user))
|
||||||
L.on = 1
|
L.on = 1
|
||||||
L.break_light_tube()
|
L.break_light_tube()
|
||||||
|
playsound(get_turf(user), 'sound/effects/lingscreech.ogg', 75, TRUE, 5, soundenvwet = 0)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
/obj/effect/proc_holder/changeling/dissonant_shriek
|
/obj/effect/proc_holder/changeling/dissonant_shriek
|
||||||
name = "Dissonant Shriek"
|
name = "Dissonant Shriek"
|
||||||
desc = "We shift our vocal cords to release a high-frequency sound that overloads nearby electronics."
|
desc = "We shift our vocal cords to release a high-frequency sound that overloads nearby electronics."
|
||||||
|
helptext = "Emits a high-frequency sound that overloads nearby electronics. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat."
|
||||||
chemical_cost = 20
|
chemical_cost = 20
|
||||||
dna_cost = 1
|
dna_cost = 1
|
||||||
|
loudness = 1
|
||||||
|
|
||||||
//A flashy ability, good for crowd control and sewing chaos.
|
//A flashy ability, good for crowd control and sewing chaos.
|
||||||
/obj/effect/proc_holder/changeling/dissonant_shriek/sting_action(mob/user)
|
/obj/effect/proc_holder/changeling/dissonant_shriek/sting_action(mob/user)
|
||||||
@@ -39,4 +43,5 @@
|
|||||||
L.on = 1
|
L.on = 1
|
||||||
L.break_light_tube()
|
L.break_light_tube()
|
||||||
empulse(get_turf(user), 2, 5, 1)
|
empulse(get_turf(user), 2, 5, 1)
|
||||||
|
playsound(get_turf(user), 'sound/effects/lingempscreech.ogg', 75, TRUE, 5, soundenvwet = 0)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
/obj/effect/proc_holder/changeling/spiders
|
/obj/effect/proc_holder/changeling/spiders
|
||||||
name = "Spread Infestation"
|
name = "Spread Infestation"
|
||||||
desc = "Our form divides, creating arachnids which will grow into deadly beasts."
|
desc = "Our form divides, creating arachnids which will grow into deadly beasts."
|
||||||
helptext = "The spiders are thoughtless creatures, and may attack their creators when fully grown. Requires at least 3 DNA gained through Absorb, and not through DNA sting."
|
helptext = "The spiders are thoughtless creatures, and may attack their creators when fully grown. Requires at least 3 DNA gained through Absorb, and not through DNA sting. This ability is very loud, and will guarantee that our blood will react violently to heat."
|
||||||
chemical_cost = 45
|
chemical_cost = 45
|
||||||
dna_cost = 1
|
dna_cost = 1
|
||||||
|
loudness = 4
|
||||||
req_absorbs = 3
|
req_absorbs = 3
|
||||||
|
|
||||||
//Makes some spiderlings. Good for setting traps and causing general trouble.
|
//Makes some spiderlings. Good for setting traps and causing general trouble.
|
||||||
|
|||||||
@@ -64,10 +64,11 @@
|
|||||||
/obj/effect/proc_holder/changeling/sting/transformation
|
/obj/effect/proc_holder/changeling/sting/transformation
|
||||||
name = "Transformation Sting"
|
name = "Transformation Sting"
|
||||||
desc = "We silently sting a human, injecting a retrovirus that forces them to transform."
|
desc = "We silently sting a human, injecting a retrovirus that forces them to transform."
|
||||||
helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human."
|
helptext = "The victim will transform much like a changeling would. Does not provide a warning to others. Mutations will not be transferred, and monkeys will become human. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat."
|
||||||
sting_icon = "sting_transform"
|
sting_icon = "sting_transform"
|
||||||
chemical_cost = 50
|
chemical_cost = 50
|
||||||
dna_cost = 3
|
dna_cost = 3
|
||||||
|
loudness = 1
|
||||||
var/datum/changelingprofile/selected_dna = null
|
var/datum/changelingprofile/selected_dna = null
|
||||||
|
|
||||||
/obj/effect/proc_holder/changeling/sting/transformation/Click()
|
/obj/effect/proc_holder/changeling/sting/transformation/Click()
|
||||||
@@ -111,10 +112,11 @@
|
|||||||
/obj/effect/proc_holder/changeling/sting/false_armblade
|
/obj/effect/proc_holder/changeling/sting/false_armblade
|
||||||
name = "False Armblade Sting"
|
name = "False Armblade Sting"
|
||||||
desc = "We silently sting a human, injecting a retrovirus that mutates their arm to temporarily appear as an armblade."
|
desc = "We silently sting a human, injecting a retrovirus that mutates their arm to temporarily appear as an armblade."
|
||||||
helptext = "The victim will form an armblade much like a changeling would, except the armblade is dull and useless."
|
helptext = "The victim will form an armblade much like a changeling would, except the armblade is dull and useless. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat."
|
||||||
sting_icon = "sting_armblade"
|
sting_icon = "sting_armblade"
|
||||||
chemical_cost = 20
|
chemical_cost = 20
|
||||||
dna_cost = 1
|
dna_cost = 1
|
||||||
|
loudness = 1
|
||||||
|
|
||||||
/obj/item/melee/arm_blade/false
|
/obj/item/melee/arm_blade/false
|
||||||
desc = "A grotesque mass of flesh that used to be your arm. Although it looks dangerous at first, you can tell it's actually quite dull and useless."
|
desc = "A grotesque mass of flesh that used to be your arm. Although it looks dangerous at first, you can tell it's actually quite dull and useless."
|
||||||
@@ -183,10 +185,11 @@
|
|||||||
/obj/effect/proc_holder/changeling/sting/mute
|
/obj/effect/proc_holder/changeling/sting/mute
|
||||||
name = "Mute Sting"
|
name = "Mute Sting"
|
||||||
desc = "We silently sting a human, completely silencing them for a short time."
|
desc = "We silently sting a human, completely silencing them for a short time."
|
||||||
helptext = "Does not provide a warning to the victim that they have been stung, until they try to speak and cannot."
|
helptext = "Does not provide a warning to the victim that they have been stung, until they try to speak and cannot. This ability is loud, and might cause our blood to react violently to heat."
|
||||||
sting_icon = "sting_mute"
|
sting_icon = "sting_mute"
|
||||||
chemical_cost = 20
|
chemical_cost = 20
|
||||||
dna_cost = 2
|
dna_cost = 2
|
||||||
|
loudness = 2
|
||||||
|
|
||||||
/obj/effect/proc_holder/changeling/sting/mute/sting_action(mob/user, mob/living/carbon/target)
|
/obj/effect/proc_holder/changeling/sting/mute/sting_action(mob/user, mob/living/carbon/target)
|
||||||
log_combat(user, target, "stung", "mute sting")
|
log_combat(user, target, "stung", "mute sting")
|
||||||
@@ -196,10 +199,11 @@
|
|||||||
/obj/effect/proc_holder/changeling/sting/blind
|
/obj/effect/proc_holder/changeling/sting/blind
|
||||||
name = "Blind Sting"
|
name = "Blind Sting"
|
||||||
desc = "Temporarily blinds the target."
|
desc = "Temporarily blinds the target."
|
||||||
helptext = "This sting completely blinds a target for a short time."
|
helptext = "This sting completely blinds a target for a short time. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat."
|
||||||
sting_icon = "sting_blind"
|
sting_icon = "sting_blind"
|
||||||
chemical_cost = 25
|
chemical_cost = 25
|
||||||
dna_cost = 1
|
dna_cost = 1
|
||||||
|
loudness = 1
|
||||||
|
|
||||||
/obj/effect/proc_holder/changeling/sting/blind/sting_action(mob/user, mob/living/carbon/target)
|
/obj/effect/proc_holder/changeling/sting/blind/sting_action(mob/user, mob/living/carbon/target)
|
||||||
log_combat(user, target, "stung", "blind sting")
|
log_combat(user, target, "stung", "blind sting")
|
||||||
@@ -229,10 +233,11 @@
|
|||||||
/obj/effect/proc_holder/changeling/sting/cryo
|
/obj/effect/proc_holder/changeling/sting/cryo
|
||||||
name = "Cryogenic Sting"
|
name = "Cryogenic Sting"
|
||||||
desc = "We silently sting a human with a cocktail of chemicals that freeze them."
|
desc = "We silently sting a human with a cocktail of chemicals that freeze them."
|
||||||
helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing."
|
helptext = "Does not provide a warning to the victim, though they will likely realize they are suddenly freezing. This ability is somewhat loud, and carries a small risk of our blood gaining violent sensitivity to heat."
|
||||||
sting_icon = "sting_cryo"
|
sting_icon = "sting_cryo"
|
||||||
chemical_cost = 15
|
chemical_cost = 15
|
||||||
dna_cost = 2
|
dna_cost = 2
|
||||||
|
loudness = 1
|
||||||
|
|
||||||
/obj/effect/proc_holder/changeling/sting/cryo/sting_action(mob/user, mob/target)
|
/obj/effect/proc_holder/changeling/sting/cryo/sting_action(mob/user, mob/target)
|
||||||
log_combat(user, target, "stung", "cryo sting")
|
log_combat(user, target, "stung", "cryo sting")
|
||||||
|
|||||||
@@ -194,10 +194,12 @@
|
|||||||
else
|
else
|
||||||
L.visible_message("<span class='warning'>[L]'s eyes blaze with brilliant light!</span>", \
|
L.visible_message("<span class='warning'>[L]'s eyes blaze with brilliant light!</span>", \
|
||||||
"<span class='userdanger'>Your vision suddenly screams with white-hot light!</span>")
|
"<span class='userdanger'>Your vision suddenly screams with white-hot light!</span>")
|
||||||
L.Knockdown(160)
|
L.Knockdown(15, TRUE, FALSE, 15)
|
||||||
L.adjustStaminaLoss(140) // now kindle works pretty much like bloodcult stun knockdown and stamcrit wise
|
|
||||||
L.apply_status_effect(STATUS_EFFECT_KINDLE)
|
L.apply_status_effect(STATUS_EFFECT_KINDLE)
|
||||||
L.flash_act(1, 1)
|
L.flash_act(1, 1)
|
||||||
|
if(issilicon(target))
|
||||||
|
var/mob/living/silicon/S = L
|
||||||
|
S.emp_act(EMP_HEAVY)
|
||||||
if(iscultist(L))
|
if(iscultist(L))
|
||||||
L.adjustFireLoss(15)
|
L.adjustFireLoss(15)
|
||||||
..()
|
..()
|
||||||
|
|||||||
@@ -185,6 +185,9 @@ structure_check() searches for nearby cultist structures required for the invoca
|
|||||||
color = RUNE_COLOR_OFFER
|
color = RUNE_COLOR_OFFER
|
||||||
req_cultists = 1
|
req_cultists = 1
|
||||||
rune_in_use = FALSE
|
rune_in_use = FALSE
|
||||||
|
var/mob/living/currentconversionman
|
||||||
|
var/conversiontimeout
|
||||||
|
var/conversionresult
|
||||||
|
|
||||||
/obj/effect/rune/convert/do_invoke_glow()
|
/obj/effect/rune/convert/do_invoke_glow()
|
||||||
return
|
return
|
||||||
@@ -241,6 +244,21 @@ structure_check() searches for nearby cultist structures required for the invoca
|
|||||||
to_chat(M, "<span class='warning'>Something is shielding [convertee]'s mind!</span>")
|
to_chat(M, "<span class='warning'>Something is shielding [convertee]'s mind!</span>")
|
||||||
log_game("Offer rune failed - convertee had anti-magic")
|
log_game("Offer rune failed - convertee had anti-magic")
|
||||||
return 0
|
return 0
|
||||||
|
to_chat(convertee, "<span class='cult italic'><b>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \
|
||||||
|
and something evil takes root.</b></span>")
|
||||||
|
to_chat(convertee, "<span class='cult italic'>Do you wish to embrace the Geometer of Blood? <a href='?src=\ref[src];signmeup=1'>Click here to stop resisting the truth.</a> Or you could choose to continue resisting...</span>")
|
||||||
|
currentconversionman = convertee
|
||||||
|
conversiontimeout = world.time + (10 SECONDS)
|
||||||
|
convertee.Stun(100)
|
||||||
|
conversionresult = FALSE
|
||||||
|
while(world.time < conversiontimeout && convertee && !conversionresult)
|
||||||
|
stoplag(1)
|
||||||
|
currentconversionman = null
|
||||||
|
if(convertee && get_turf(convertee) != get_turf(src))
|
||||||
|
return FALSE
|
||||||
|
if(!conversionresult && convertee)
|
||||||
|
do_sacrifice(convertee, invokers)
|
||||||
|
return FALSE
|
||||||
var/brutedamage = convertee.getBruteLoss()
|
var/brutedamage = convertee.getBruteLoss()
|
||||||
var/burndamage = convertee.getFireLoss()
|
var/burndamage = convertee.getFireLoss()
|
||||||
if(brutedamage || burndamage)
|
if(brutedamage || burndamage)
|
||||||
@@ -252,8 +270,6 @@ structure_check() searches for nearby cultist structures required for the invoca
|
|||||||
SSticker.mode.add_cultist(convertee.mind, 1)
|
SSticker.mode.add_cultist(convertee.mind, 1)
|
||||||
new /obj/item/melee/cultblade/dagger(get_turf(src))
|
new /obj/item/melee/cultblade/dagger(get_turf(src))
|
||||||
convertee.mind.special_role = ROLE_CULTIST
|
convertee.mind.special_role = ROLE_CULTIST
|
||||||
to_chat(convertee, "<span class='cult italic'><b>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \
|
|
||||||
and something evil takes root.</b></span>")
|
|
||||||
to_chat(convertee, "<span class='cult italic'><b>Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\
|
to_chat(convertee, "<span class='cult italic'><b>Assist your new compatriots in their dark dealings. Your goal is theirs, and theirs is yours. You serve the Geometer above all else. Bring it back.\
|
||||||
</b></span>")
|
</b></span>")
|
||||||
if(ishuman(convertee))
|
if(ishuman(convertee))
|
||||||
@@ -313,6 +329,12 @@ structure_check() searches for nearby cultist structures required for the invoca
|
|||||||
sacrificial.gib()
|
sacrificial.gib()
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
/obj/effect/rune/convert/Topic(href, href_list)
|
||||||
|
if(href_list["signmeup"])
|
||||||
|
if(currentconversionman == usr)
|
||||||
|
conversionresult = TRUE
|
||||||
|
else
|
||||||
|
to_chat(usr, "<span class='cult italic'><b>Your fate has already been set in stone.</b></span>")
|
||||||
|
|
||||||
|
|
||||||
/obj/effect/rune/empower
|
/obj/effect/rune/empower
|
||||||
@@ -442,9 +464,9 @@ structure_check() searches for nearby cultist structures required for the invoca
|
|||||||
//Ritual of Dimensional Rending: Calls forth the avatar of Nar'Sie upon the station.
|
//Ritual of Dimensional Rending: Calls forth the avatar of Nar'Sie upon the station.
|
||||||
/obj/effect/rune/narsie
|
/obj/effect/rune/narsie
|
||||||
cultist_name = "Nar'Sie"
|
cultist_name = "Nar'Sie"
|
||||||
cultist_desc = "tears apart dimensional barriers, calling forth the Geometer. Requires 9 invokers."
|
cultist_desc = "tears apart dimensional barriers, calling forth the Geometer. Requires 9 invokers, minus one for every 3 sacrifices."
|
||||||
invocation = "TOK-LYR RQA-NAP G'OLT-ULOFT!!"
|
invocation = "TOK-LYR RQA-NAP G'OLT-ULOFT!!"
|
||||||
req_cultists = 9
|
req_cultists = 1
|
||||||
icon = 'icons/effects/96x96.dmi'
|
icon = 'icons/effects/96x96.dmi'
|
||||||
color = RUNE_COLOR_DARKRED
|
color = RUNE_COLOR_DARKRED
|
||||||
icon_state = "rune_large"
|
icon_state = "rune_large"
|
||||||
@@ -471,6 +493,10 @@ structure_check() searches for nearby cultist structures required for the invoca
|
|||||||
if(!is_station_level(z))
|
if(!is_station_level(z))
|
||||||
return
|
return
|
||||||
var/mob/living/user = invokers[1]
|
var/mob/living/user = invokers[1]
|
||||||
|
if(invokers.len < 9 - (GLOB.sacrificed.len * 0.35))
|
||||||
|
to_chat(user, "<span class='danger'>You need at least [(9 - (GLOB.sacrificed.len * 0.35)) - invokers.len] more adjacent cultists to use this rune in such a manner.</span>")
|
||||||
|
fail_invoke()
|
||||||
|
return
|
||||||
var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
|
var/datum/antagonist/cult/user_antag = user.mind.has_antag_datum(/datum/antagonist/cult,TRUE)
|
||||||
var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives
|
var/datum/objective/eldergod/summon_objective = locate() in user_antag.cult_team.objectives
|
||||||
var/area/place = get_area(src)
|
var/area/place = get_area(src)
|
||||||
|
|||||||
@@ -61,6 +61,8 @@
|
|||||||
//Actually transfer the gas
|
//Actually transfer the gas
|
||||||
var/datum/gas_mixture/removed = air2.remove(transfer_moles)
|
var/datum/gas_mixture/removed = air2.remove(transfer_moles)
|
||||||
|
|
||||||
|
removed.react(src)
|
||||||
|
|
||||||
update_parents()
|
update_parents()
|
||||||
|
|
||||||
return removed
|
return removed
|
||||||
|
|||||||
@@ -24,6 +24,19 @@
|
|||||||
description = "Station 49 is looking to kickstart their research program. Ship them a tank full of Tritium."
|
description = "Station 49 is looking to kickstart their research program. Ship them a tank full of Tritium."
|
||||||
gas_type = /datum/gas/tritium
|
gas_type = /datum/gas/tritium
|
||||||
|
|
||||||
|
/datum/bounty/item/engineering/pacman
|
||||||
|
name = "P.A.C.M.A.N.-type portable generator"
|
||||||
|
description = "A neighboring station had a problem with their SMES, and now need something to power their communications console. Can you send them a P.AC.M.A.N.?"
|
||||||
|
reward = 3500 //2500 for the cargo one
|
||||||
|
wanted_types = list(/obj/machinery/power/port_gen/pacman)
|
||||||
|
|
||||||
|
/datum/bounty/item/engineering/canisters
|
||||||
|
name = "Gas Canisters"
|
||||||
|
description = "After a recent debacle in a nearby sector, 10 gas canisters are needed for containing an experimental aerosol before it kills all the local fauna."
|
||||||
|
reward = 5000
|
||||||
|
required_count = 10 //easy to make
|
||||||
|
wanted_types = list(/obj/machinery/portable_atmospherics/canister)
|
||||||
|
|
||||||
/datum/bounty/item/engineering/energy_ball
|
/datum/bounty/item/engineering/energy_ball
|
||||||
name = "Contained Tesla Ball"
|
name = "Contained Tesla Ball"
|
||||||
description = "Station 24 is being overrun by hordes of angry Mothpeople. They are requesting the ultimate bug zapper."
|
description = "Station 24 is being overrun by hordes of angry Mothpeople. They are requesting the ultimate bug zapper."
|
||||||
|
|||||||
@@ -57,3 +57,71 @@
|
|||||||
description = "Central Command has run out of heavy duty pipe cleaners. Can you ship over a cat tail to help us out?"
|
description = "Central Command has run out of heavy duty pipe cleaners. Can you ship over a cat tail to help us out?"
|
||||||
reward = 3000
|
reward = 3000
|
||||||
wanted_types = list(/obj/item/organ/tail/cat)
|
wanted_types = list(/obj/item/organ/tail/cat)
|
||||||
|
|
||||||
|
/datum/bounty/item/medical/blood
|
||||||
|
name = "Generic Blood"
|
||||||
|
description = "Nanotrasen's annual blood drive is back up to full speed, following the garlic incident. Good blood in good volumes accepted for Credit returns."
|
||||||
|
reward = 3500
|
||||||
|
required_count = 600
|
||||||
|
wanted_types = list(/datum/reagent/blood)
|
||||||
|
|
||||||
|
/* If anyone wants to try and fix/work, go for it
|
||||||
|
/datum/bounty/item/medical/medibot // Mob so this dosn't work yet*
|
||||||
|
name = "Medibot"
|
||||||
|
description = "A sister station is dealing with um problem, they need a medibot to help treat their wounded..."
|
||||||
|
reward = 3000
|
||||||
|
wanted_types = list(/mob/living/simple_animal/bot/medbot)
|
||||||
|
|
||||||
|
/datum/bounty/item/medical/bloodl //Dosnt work do to how blood is yet*
|
||||||
|
name = "L-type Blood"
|
||||||
|
description = "After a small scuffle, a few of our lizard employees need another blood transfusion."
|
||||||
|
reward = 4000
|
||||||
|
required_count = 200
|
||||||
|
wanted_types = (L,/datum/reagent/blood)
|
||||||
|
if(istype(L,/datum/reagent/blood))
|
||||||
|
wanted_types += L
|
||||||
|
|
||||||
|
/datum/bounty/item/medical/bloodu //Dosnt work do to how blood is yet*
|
||||||
|
name = "U-Type Blood"
|
||||||
|
description = "After dealing with a small revolt in a local penal colony, the colony's anemic CMO needs blood, urgently. With his compromised immune system, only the best blood can be used."
|
||||||
|
reward = 5500 // Rarer blood
|
||||||
|
required_count = 200
|
||||||
|
wanted_types = (U,/datum/reagent/blood)
|
||||||
|
if(istype(U,/datum/reagent/blood))
|
||||||
|
wanted_types += U
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
/datum/bounty/item/medical/surgery
|
||||||
|
name = "Surgery tool implants"
|
||||||
|
description = "Our medical interns keep dropping their Shambler's Juice while they're performing open heart surgery. One of them even had the audacity to say he only had two hands!"
|
||||||
|
reward = 10000
|
||||||
|
required_count = 3
|
||||||
|
wanted_types = list(/obj/item/organ/cyberimp/arm/surgery)
|
||||||
|
|
||||||
|
/datum/bounty/item/medical/chemmaker
|
||||||
|
name = "Portable Chem Dispenser"
|
||||||
|
description = "After a new chemist mixed up some water and a banana, we lost our only chem dispenser. Please send us a replacement and you will be compensated."
|
||||||
|
reward = 7000
|
||||||
|
wanted_types = list(/obj/machinery/chem_dispenser)
|
||||||
|
|
||||||
|
/datum/bounty/item/medical/advhealthscaner
|
||||||
|
name = "Advanced Health Analyzer"
|
||||||
|
description = "A ERT Medical unit needs the new 'advanced health analyzer', for a mission at a Station 4. Can you send some?."
|
||||||
|
reward = 4000
|
||||||
|
required_count = 5
|
||||||
|
wanted_types = list(/obj/item/healthanalyzer/advanced)
|
||||||
|
|
||||||
|
/datum/bounty/item/medical/wallmounts
|
||||||
|
name = "Defibrillator wall mounts"
|
||||||
|
description = "New Space OSHA regulation state that are new cloning medical wing needs a few 'Easy to access defibrillartors'. Can you send a few before we get a lawsuit?"
|
||||||
|
reward = 5000
|
||||||
|
required_count = 3
|
||||||
|
wanted_types = list(/obj/machinery/defibrillator_mount)
|
||||||
|
|
||||||
|
/datum/bounty/item/medical/defibrillator
|
||||||
|
name = "New defibillators"
|
||||||
|
description = "After years of storge are defibrillator units have become more liabilities then we want. Please send us some new ones to replace these old ones."
|
||||||
|
reward = 5000
|
||||||
|
required_count = 5
|
||||||
|
wanted_types = list(/obj/item/defibrillator)
|
||||||
|
|||||||
@@ -49,3 +49,17 @@
|
|||||||
reward = 5000
|
reward = 5000
|
||||||
required_count = 3
|
required_count = 3
|
||||||
wanted_types = list(/obj/item/kitchen/knife/combat/bone)
|
wanted_types = list(/obj/item/kitchen/knife/combat/bone)
|
||||||
|
|
||||||
|
/datum/bounty/item/mining/basalt
|
||||||
|
name = "Artificial Basalt Tiles"
|
||||||
|
description = "Central Command's Ash Walker exhibit needs to be expanded again, we just need some more basalt flooring."
|
||||||
|
reward = 5000
|
||||||
|
required_count = 60
|
||||||
|
wanted_types = list(/obj/item/stack/tile/basalt)
|
||||||
|
|
||||||
|
/datum/bounty/item/mining/fruit
|
||||||
|
name = "Cactus Fruit"
|
||||||
|
description = "Central Command's Ash Walker habitat needs more fauna, send us some local fruit seeds!"
|
||||||
|
reward = 2000
|
||||||
|
required_count = 1
|
||||||
|
wanted_types = list(/obj/item/seeds/lavaland/cactus)
|
||||||
|
|||||||
@@ -64,3 +64,55 @@
|
|||||||
description = "With the price of rechargers on the rise, upper management is interested in purchasing guns that are self-powered. If you ship one, they'll pay."
|
description = "With the price of rechargers on the rise, upper management is interested in purchasing guns that are self-powered. If you ship one, they'll pay."
|
||||||
reward = 10000
|
reward = 10000
|
||||||
wanted_types = list(/obj/item/gun/energy/e_gun/nuclear)
|
wanted_types = list(/obj/item/gun/energy/e_gun/nuclear)
|
||||||
|
|
||||||
|
/datum/bounty/item/science/bscells
|
||||||
|
name = "Bluespace Power Cells"
|
||||||
|
description = "Someone in upper management keeps using the excuse that his tablet battery dies when he's in the middle of work. This will be the last time he doesn't have his presentation, I swear to -"
|
||||||
|
reward = 7000
|
||||||
|
required_count = 10 //Easy to make
|
||||||
|
wanted_types = list(/obj/item/stock_parts/cell/bluespace)
|
||||||
|
|
||||||
|
/datum/bounty/item/science/t4manip
|
||||||
|
name = "Femto-Manipulators"
|
||||||
|
description = "One of our Chief Engineers has OCD. Can you send us some femto-manipulators so he stops complaining that his ID doesn't fit perfectly in the PDA slot?"
|
||||||
|
reward = 7000
|
||||||
|
required_count = 20 //Easy to make
|
||||||
|
wanted_types = list(/obj/item/stock_parts/manipulator/femto)
|
||||||
|
|
||||||
|
/datum/bounty/item/science/t4bins
|
||||||
|
name = "Bluespace Matter Bins"
|
||||||
|
description = "The local Janitorial union has gone on strike. Can you send us some bluespace bins so we don't have to take out our own trash?"
|
||||||
|
reward = 7000
|
||||||
|
required_count = 20 //Easy to make
|
||||||
|
wanted_types = list(/obj/item/stock_parts/matter_bin/bluespace)
|
||||||
|
|
||||||
|
/datum/bounty/item/science/t4capacitor
|
||||||
|
name = "Quadratic Capacitor"
|
||||||
|
description = "One of our linguists doesn't understand why they're called Quadratic capacitors. Can you give him a few so he leaves us alone about it?"
|
||||||
|
reward = 7000
|
||||||
|
required_count = 20 //Easy to make
|
||||||
|
wanted_types = list(/obj/item/stock_parts/capacitor/quadratic)
|
||||||
|
|
||||||
|
/datum/bounty/item/science/t4triphasic
|
||||||
|
name = "Triphasic Scanning Module"
|
||||||
|
description = "One of our scientists got into the liberty caps and is demanding new scanning modules so he can talk to ghosts. At this point we just want him out of our office."
|
||||||
|
reward = 7000
|
||||||
|
required_count = 20 //Easy to make
|
||||||
|
wanted_types = list(/obj/item/stock_parts/scanning_module/triphasic)
|
||||||
|
|
||||||
|
/datum/bounty/item/science/t4microlaser
|
||||||
|
name = "Quad-Ultra Micro-Laser"
|
||||||
|
description = "The cats on Vega 9 are breeding out of control. We need something to corral them into one area so we can saturation bomb it."
|
||||||
|
reward = 7000
|
||||||
|
required_count = 20 //Easy to make
|
||||||
|
wanted_types = list(/obj/item/stock_parts/micro_laser/quadultra)
|
||||||
|
|
||||||
|
/datum/bounty/item/science/fakecrystals
|
||||||
|
name = "synthetic bluespace crystals"
|
||||||
|
description = "Don't, uh, tell anyone, but one of our BSA arrays might have had a little... accident. Send us some bluespace crystals so we can recalibrate it before anyone realizes. The whole set uses artificial bluespace crystals, so we need and not any other type of bluespace crystals..."
|
||||||
|
reward = 10000
|
||||||
|
required_count = 5
|
||||||
|
wanted_types = list(/obj/item/stack/ore/bluespace_crystal/artificial)
|
||||||
|
exclude_types = list(/obj/item/stack/ore/bluespace_crystal,
|
||||||
|
/obj/item/stack/sheet/bluespace_crystal,
|
||||||
|
/obj/item/stack/ore/bluespace_crystal/refined)
|
||||||
|
|||||||
@@ -11,3 +11,44 @@
|
|||||||
reward = 2000
|
reward = 2000
|
||||||
required_count = 3
|
required_count = 3
|
||||||
wanted_types = list(/obj/machinery/recharger)
|
wanted_types = list(/obj/machinery/recharger)
|
||||||
|
|
||||||
|
/datum/bounty/item/security/practice
|
||||||
|
name = "Practice Laser Gun"
|
||||||
|
description = "Nanotrasen Military Academy is conducting routine marksmanship exercises. The clown hid all the practice lasers, and we're not using live weapons after last time."
|
||||||
|
reward = 3000
|
||||||
|
required_count = 3
|
||||||
|
wanted_types = list(/obj/item/gun/energy/laser/practice)
|
||||||
|
|
||||||
|
/datum/bounty/item/security/flashshield
|
||||||
|
name = "Strobe Shield"
|
||||||
|
description = "One of our Emergency Response Agents thinks there's vampires in a local station. Send him something to help with his fear of the dark and protect him, too."
|
||||||
|
reward = 5000
|
||||||
|
wanted_types = list(/obj/item/assembly/flash/shield)
|
||||||
|
|
||||||
|
/datum/bounty/item/security/sechuds
|
||||||
|
name = "Sec HUDs"
|
||||||
|
description = "Nanotrasen military academy has started to train officers how to use Sec HUDs to the fullest affect. Please send spare Sec HUDs so we can teach the men."
|
||||||
|
reward = 3000
|
||||||
|
required_count = 5
|
||||||
|
wanted_types = list(/obj/item/clothing/glasses/hud/security)
|
||||||
|
|
||||||
|
/datum/bounty/item/security/techslugs
|
||||||
|
name = "Tech Slugs"
|
||||||
|
description = "Nanotrasen Military Academy is conducting an ammo loading and use lessons, on the new 'Tech Slugs'. Problem is we don't have any, please fix this..."
|
||||||
|
reward = 7500
|
||||||
|
required_count = 15
|
||||||
|
wanted_types = list(/obj/item/ammo_casing/shotgun/techshell)
|
||||||
|
|
||||||
|
/datum/bounty/item/security/WT550
|
||||||
|
name = "Spare WT-550 clips"
|
||||||
|
description = "Nanotrasen Military Academy's ammunition is running low, please send in spare ammo for practice."
|
||||||
|
reward = 7500
|
||||||
|
required_count = 5
|
||||||
|
wanted_types = list(/obj/item/ammo_box/magazine/wt550m9)
|
||||||
|
|
||||||
|
/datum/bounty/item/security/pins
|
||||||
|
name = "Test range firing pins"
|
||||||
|
description = "Nanotrasen Military Academy just got a new set of guns, sadly they didn't come with any pins. Can you send us some Test range locked firing pins?"
|
||||||
|
reward = 5000
|
||||||
|
required_count = 3
|
||||||
|
wanted_types = list(/obj/item/firing_pin/test_range)
|
||||||
|
|||||||
+68
-72
@@ -622,7 +622,7 @@
|
|||||||
|
|
||||||
|
|
||||||
/datum/supply_pack/security/armory/wt550
|
/datum/supply_pack/security/armory/wt550
|
||||||
name = "WT-550 Auto Rifle Crate"
|
name = "WT-550 Semi-Auto Rifle Crate"
|
||||||
desc = "Contains two high-powered, semiautomatic rifles chambered in 4.6x30mm. Requires Armory access to open."
|
desc = "Contains two high-powered, semiautomatic rifles chambered in 4.6x30mm. Requires Armory access to open."
|
||||||
cost = 3500
|
cost = 3500
|
||||||
contains = list(/obj/item/gun/ballistic/automatic/wt550,
|
contains = list(/obj/item/gun/ballistic/automatic/wt550,
|
||||||
@@ -630,8 +630,8 @@
|
|||||||
crate_name = "auto rifle crate"
|
crate_name = "auto rifle crate"
|
||||||
|
|
||||||
/datum/supply_pack/security/armory/wt550ammo
|
/datum/supply_pack/security/armory/wt550ammo
|
||||||
name = "WT-550 Auto Rifle Ammo Crate"
|
name = "WT-550 Semi-Auto SMG Ammo Crate"
|
||||||
desc = "Contains four 20-round magazines for the WT-550 Auto Rifle. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
desc = "Contains four 20-round magazines for the WT-550 Semi-Auto SMG. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
||||||
cost = 2500
|
cost = 2500
|
||||||
contains = list(/obj/item/ammo_box/magazine/wt550m9,
|
contains = list(/obj/item/ammo_box/magazine/wt550m9,
|
||||||
/obj/item/ammo_box/magazine/wt550m9,
|
/obj/item/ammo_box/magazine/wt550m9,
|
||||||
@@ -639,9 +639,9 @@
|
|||||||
/obj/item/ammo_box/magazine/wt550m9)
|
/obj/item/ammo_box/magazine/wt550m9)
|
||||||
crate_name = "auto rifle ammo crate"
|
crate_name = "auto rifle ammo crate"
|
||||||
|
|
||||||
/datum/supply_pack/security/armory/wt550ammo_nonlethal // Takes around 11 shots to stun crit someone
|
/datum/supply_pack/security/armory/wt550ammo_nonlethal // Takes around 12 shots to stun crit someone
|
||||||
name = "WT-550 Auto Rifle Non-Lethal Ammo Crate"
|
name = "WT-550 Semi-Auto SMG Non-Lethal Ammo Crate"
|
||||||
desc = "Contains four 20-round magazines for the WT-550 Auto Rifle. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
desc = "Contains four 20-round magazines for the WT-550 Semi-Auto SMG. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
||||||
cost = 1500
|
cost = 1500
|
||||||
contains = list(/obj/item/ammo_box/magazine/wt550m9/wtrubber,
|
contains = list(/obj/item/ammo_box/magazine/wt550m9/wtrubber,
|
||||||
/obj/item/ammo_box/magazine/wt550m9/wtrubber,
|
/obj/item/ammo_box/magazine/wt550m9/wtrubber,
|
||||||
@@ -650,8 +650,8 @@
|
|||||||
crate_name = "auto rifle ammo crate"
|
crate_name = "auto rifle ammo crate"
|
||||||
|
|
||||||
/datum/supply_pack/security/armory/wt550ammo_special
|
/datum/supply_pack/security/armory/wt550ammo_special
|
||||||
name = "WT-550 Auto Rifle Special Ammo Crate"
|
name = "WT-550 Semi-Auto SMG Special Ammo Crate"
|
||||||
desc = "Contains 2 20-round Armour Piercing and Incendiary magazines for the WT-550 Auto Rifle. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
desc = "Contains 2 20-round Armour Piercing and Incendiary magazines for the WT-550 Semi-Auto SMG. Each magazine is designed to facilitate rapid tactical reloads. Requires Armory access to open."
|
||||||
cost = 4500
|
cost = 4500
|
||||||
contains = list(/obj/item/ammo_box/magazine/wt550m9/wtap,
|
contains = list(/obj/item/ammo_box/magazine/wt550m9/wtap,
|
||||||
/obj/item/ammo_box/magazine/wt550m9/wtap,
|
/obj/item/ammo_box/magazine/wt550m9/wtap,
|
||||||
@@ -1500,7 +1500,7 @@
|
|||||||
/obj/item/flashlight/lamp,
|
/obj/item/flashlight/lamp,
|
||||||
/obj/item/flashlight/lamp/green,
|
/obj/item/flashlight/lamp/green,
|
||||||
/obj/item/storage/box/lights/mixed)
|
/obj/item/storage/box/lights/mixed)
|
||||||
crate_name = "advanced lighting crate"
|
crate_name = "advanced lighting crate"
|
||||||
crate_type = /obj/structure/closet/crate/secure
|
crate_type = /obj/structure/closet/crate/secure
|
||||||
|
|
||||||
/datum/supply_pack/service/cargo_supples
|
/datum/supply_pack/service/cargo_supples
|
||||||
@@ -1724,6 +1724,39 @@
|
|||||||
crate_name = "beekeeping starter crate"
|
crate_name = "beekeeping starter crate"
|
||||||
crate_type = /obj/structure/closet/crate/hydroponics
|
crate_type = /obj/structure/closet/crate/hydroponics
|
||||||
|
|
||||||
|
/datum/supply_pack/organic/candy
|
||||||
|
name = "Candy Crate"
|
||||||
|
desc = "For people that have a insatiable sweet tooth! Has ten candies to be eaten up.."
|
||||||
|
cost = 2500
|
||||||
|
var/num_contained = 10 //number of items picked to be contained in a randomised crate
|
||||||
|
contains = list(/obj/item/reagent_containers/food/snacks/candy,
|
||||||
|
/obj/item/reagent_containers/food/snacks/lollipop,
|
||||||
|
/obj/item/reagent_containers/food/snacks/gumball,
|
||||||
|
/obj/item/reagent_containers/food/snacks/chocolateegg,
|
||||||
|
/obj/item/reagent_containers/food/snacks/donut,
|
||||||
|
/obj/item/reagent_containers/food/snacks/cookie,
|
||||||
|
/obj/item/reagent_containers/food/snacks/sugarcookie,
|
||||||
|
/obj/item/reagent_containers/food/snacks/chococornet,
|
||||||
|
/obj/item/reagent_containers/food/snacks/mint,
|
||||||
|
/obj/item/reagent_containers/food/snacks/spiderlollipop,
|
||||||
|
/obj/item/reagent_containers/food/snacks/chococoin,
|
||||||
|
/obj/item/reagent_containers/food/snacks/fudgedice,
|
||||||
|
/obj/item/reagent_containers/food/snacks/chocoorange,
|
||||||
|
/obj/item/reagent_containers/food/snacks/honeybar,
|
||||||
|
/obj/item/reagent_containers/food/snacks/tinychocolate,
|
||||||
|
/obj/item/reagent_containers/food/snacks/spacetwinkie,
|
||||||
|
/obj/item/reagent_containers/food/snacks/syndicake,
|
||||||
|
/obj/item/reagent_containers/food/snacks/cheesiehonkers,
|
||||||
|
/obj/item/reagent_containers/food/snacks/sugarcookie/spookyskull,
|
||||||
|
/obj/item/reagent_containers/food/snacks/sugarcookie/spookycoffin,
|
||||||
|
/obj/item/reagent_containers/food/snacks/candy_corn,
|
||||||
|
/obj/item/reagent_containers/food/snacks/candiedapple,
|
||||||
|
/obj/item/reagent_containers/food/snacks/chocolatebar,
|
||||||
|
/obj/item/reagent_containers/food/snacks/candyheart,
|
||||||
|
/obj/item/storage/fancy/heart_box,
|
||||||
|
/obj/item/storage/fancy/donut_box)
|
||||||
|
crate_name = "candy crate"
|
||||||
|
|
||||||
/datum/supply_pack/organic/cutlery
|
/datum/supply_pack/organic/cutlery
|
||||||
name = "Kitchen Cutlery Deluxe Set"
|
name = "Kitchen Cutlery Deluxe Set"
|
||||||
desc = "Need to slice and dice away those ''Tomatos'' well we got what you need! From a nice set of knifes, forks, plates, glasses, and a whetstone for when you got some grizzle that is a bit harder to slice then normal."
|
desc = "Need to slice and dice away those ''Tomatos'' well we got what you need! From a nice set of knifes, forks, plates, glasses, and a whetstone for when you got some grizzle that is a bit harder to slice then normal."
|
||||||
@@ -1892,6 +1925,27 @@
|
|||||||
crate_name = "seeds crate"
|
crate_name = "seeds crate"
|
||||||
crate_type = /obj/structure/closet/crate/hydroponics
|
crate_type = /obj/structure/closet/crate/hydroponics
|
||||||
|
|
||||||
|
/datum/supply_pack/organic/vday
|
||||||
|
name = "Surplus Valentine Crate"
|
||||||
|
desc = "Turns out we got warehouses of this love-y dove-y crap. Were sending out small barged buddle of Valentine gear. This crate has two boxes of chocolate, three poppy flowers, five candy hearts, and three cards."
|
||||||
|
cost = 3000
|
||||||
|
contraband = TRUE
|
||||||
|
contains = list(/obj/item/storage/fancy/heart_box,
|
||||||
|
/obj/item/storage/fancy/heart_box,
|
||||||
|
/obj/item/reagent_containers/food/snacks/grown/poppy,
|
||||||
|
/obj/item/reagent_containers/food/snacks/grown/poppy,
|
||||||
|
/obj/item/reagent_containers/food/snacks/grown/poppy,
|
||||||
|
/obj/item/reagent_containers/food/snacks/candyheart,
|
||||||
|
/obj/item/reagent_containers/food/snacks/candyheart,
|
||||||
|
/obj/item/reagent_containers/food/snacks/candyheart,
|
||||||
|
/obj/item/reagent_containers/food/snacks/candyheart,
|
||||||
|
/obj/item/reagent_containers/food/snacks/candyheart,
|
||||||
|
/obj/item/valentine,
|
||||||
|
/obj/item/valentine,
|
||||||
|
/obj/item/valentine)
|
||||||
|
crate_name = "valentine crate"
|
||||||
|
crate_type = /obj/structure/closet/crate/secure
|
||||||
|
|
||||||
/datum/supply_pack/organic/exoticseeds
|
/datum/supply_pack/organic/exoticseeds
|
||||||
name = "Exotic Seeds Crate"
|
name = "Exotic Seeds Crate"
|
||||||
desc = "Any entrepreneuring botanist's dream. Contains twelve different seeds, including three replica-pod seeds and two mystery seeds!"
|
desc = "Any entrepreneuring botanist's dream. Contains twelve different seeds, including three replica-pod seeds and two mystery seeds!"
|
||||||
@@ -2303,69 +2357,11 @@
|
|||||||
desc = "Plush tide station wide. Contains 5 random plushies for you to love. Warranty void if your love violates the terms of use."
|
desc = "Plush tide station wide. Contains 5 random plushies for you to love. Warranty void if your love violates the terms of use."
|
||||||
cost = 1500 // or play the arcade machines ya lazy bum
|
cost = 1500 // or play the arcade machines ya lazy bum
|
||||||
num_contained = 5
|
num_contained = 5
|
||||||
contains = list(/obj/item/toy/plush/lizardplushie,
|
contains = list(/obj/item/toy/plush/random,
|
||||||
/obj/item/toy/plush/lizardplushie/durgit,
|
/obj/item/toy/plush/random,
|
||||||
/obj/item/toy/plush/lizardplushie/rio,
|
/obj/item/toy/plush/random,
|
||||||
/obj/item/toy/plush/lizardplushie/urinsu,
|
/obj/item/toy/plush/random,
|
||||||
/obj/item/toy/plush/lizardplushie/arfrehn,
|
/obj/item/toy/plush/random) //I'm lazy
|
||||||
/obj/item/toy/plush/lizardplushie/soars,
|
|
||||||
/obj/item/toy/plush/lizardplushie/ghostie,
|
|
||||||
/obj/item/toy/plush/lizardplushie/amber,
|
|
||||||
/obj/item/toy/plush/lizardplushie/cyan,
|
|
||||||
/obj/item/toy/plush/lizardplushie/meena,
|
|
||||||
/obj/item/toy/plush/lizardplushie/stalks,
|
|
||||||
/obj/item/toy/plush/lizardplushie/kobold,
|
|
||||||
/obj/item/toy/plush/lizardplushie/gorgi,
|
|
||||||
/obj/item/toy/plush/lizardplushie/almaz,
|
|
||||||
/obj/item/toy/plush/snakeplushie/sasha,
|
|
||||||
/obj/item/toy/plush/snakeplushie/shay,
|
|
||||||
/obj/item/toy/plush/snakeplushie/vulken,
|
|
||||||
/obj/item/toy/plush/mothplushie,
|
|
||||||
/obj/item/toy/plush/mothplushie/bumble,
|
|
||||||
/obj/item/toy/plush/mothplushie/nameko,
|
|
||||||
/obj/item/toy/plush/mothplushie/suru,
|
|
||||||
/obj/item/toy/plush/xeno,
|
|
||||||
/obj/item/toy/plush/lampplushie,
|
|
||||||
/obj/item/toy/plush/borgplushie,
|
|
||||||
/obj/item/toy/plush/borgplushie/medihound,
|
|
||||||
/obj/item/toy/plush/borgplushie/scrubpuppy,
|
|
||||||
/obj/item/toy/plush/borgplushie/seeking,
|
|
||||||
/obj/item/toy/plush/borgplushie/neeb,
|
|
||||||
/obj/item/toy/plush/bird,
|
|
||||||
/obj/item/toy/plush/bird/esela,
|
|
||||||
/obj/item/toy/plush/bird/jahonna,
|
|
||||||
/obj/item/toy/plush/bird/krick,
|
|
||||||
/obj/item/toy/plush/bird/birddi,
|
|
||||||
/obj/item/toy/plush/bird/jewel,
|
|
||||||
/obj/item/toy/plush/mammal,
|
|
||||||
/obj/item/toy/plush/mammal/dubious,
|
|
||||||
/obj/item/toy/plush/mammal/gladwyn,
|
|
||||||
/obj/item/toy/plush/mammal/gavin,
|
|
||||||
/obj/item/toy/plush/mammal/blep,
|
|
||||||
/obj/item/toy/plush/mammal/circe,
|
|
||||||
/obj/item/toy/plush/mammal/pavel,
|
|
||||||
/obj/item/toy/plush/mammal/oten,
|
|
||||||
/obj/item/toy/plush/mammal/ray,
|
|
||||||
/obj/item/toy/plush/mammal/dawud,
|
|
||||||
/obj/item/toy/plush/mammal/edgar,
|
|
||||||
/obj/item/toy/plush/mammal/frank,
|
|
||||||
/obj/item/toy/plush/mammal/poojawa,
|
|
||||||
/obj/item/toy/plush/mammal/hazel,
|
|
||||||
/obj/item/toy/plush/mammal/jermaine,
|
|
||||||
/obj/item/toy/plush/mammal/gunther,
|
|
||||||
/obj/item/toy/plush/mammal/fox,
|
|
||||||
/obj/item/toy/plush/mammal/zed,
|
|
||||||
/obj/item/toy/plush/mammal/dog,
|
|
||||||
/obj/item/toy/plush/mammal/dog/frost,
|
|
||||||
/obj/item/toy/plush/mammal/dog/atticus,
|
|
||||||
/obj/item/toy/plush/mammal/dog/fletch,
|
|
||||||
/obj/item/toy/plush/mammal/dog/vincent,
|
|
||||||
/obj/item/toy/plush/mammal/dog/zigfried,
|
|
||||||
/obj/item/toy/plush/mammal/dog/nikolai,
|
|
||||||
/obj/item/toy/plush/catgirl,
|
|
||||||
/obj/item/toy/plush/catgirl/skylar,
|
|
||||||
/obj/item/toy/plush/catgirl/mikeel,
|
|
||||||
/obj/item/toy/plush/catgirl/robin)
|
|
||||||
crate_name = "plushie crate"
|
crate_name = "plushie crate"
|
||||||
crate_type = /obj/structure/closet/crate/wooden
|
crate_type = /obj/structure/closet/crate/wooden
|
||||||
|
|
||||||
|
|||||||
@@ -72,4 +72,6 @@
|
|||||||
|
|
||||||
var/list/credits //lazy list of all credit object bound to this client
|
var/list/credits //lazy list of all credit object bound to this client
|
||||||
|
|
||||||
var/datum/player_details/player_details //these persist between logins/logouts during the same round.
|
var/datum/player_details/player_details //these persist between logins/logouts during the same round.
|
||||||
|
|
||||||
|
var/list/char_render_holders //Should only be a key-value list of north/south/east/west = obj/screen.
|
||||||
|
|||||||
@@ -454,6 +454,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
|
|||||||
GLOB.ahelp_tickets.ClientLogout(src)
|
GLOB.ahelp_tickets.ClientLogout(src)
|
||||||
GLOB.directory -= ckey
|
GLOB.directory -= ckey
|
||||||
GLOB.clients -= src
|
GLOB.clients -= src
|
||||||
|
QDEL_LIST_ASSOC_VAL(char_render_holders)
|
||||||
if(movingmob != null)
|
if(movingmob != null)
|
||||||
movingmob.client_mobs_in_contents -= mob
|
movingmob.client_mobs_in_contents -= mob
|
||||||
UNSETEMPTY(movingmob.client_mobs_in_contents)
|
UNSETEMPTY(movingmob.client_mobs_in_contents)
|
||||||
@@ -498,7 +499,7 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
|
|||||||
qdel(query_client_in_db)
|
qdel(query_client_in_db)
|
||||||
return
|
return
|
||||||
if(!query_client_in_db.NextRow())
|
if(!query_client_in_db.NextRow())
|
||||||
if (CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey])
|
if (CONFIG_GET(flag/panic_bunker) && !holder && !GLOB.deadmins[ckey] && !(ckey in GLOB.bunker_passthrough))
|
||||||
log_access("Failed Login: [key] - New account attempting to connect during panic bunker")
|
log_access("Failed Login: [key] - New account attempting to connect during panic bunker")
|
||||||
message_admins("<span class='adminnotice'>Failed Login: [key] - New account attempting to connect during panic bunker</span>")
|
message_admins("<span class='adminnotice'>Failed Login: [key] - New account attempting to connect during panic bunker</span>")
|
||||||
to_chat(src, "<span class='notice'>You must first join the Discord to verify your account before joining this server.<br>To do so, read the rules and post a request in the #station-access-requests channel under the \"Main server\" category in the Discord server linked here: <a href='https://discord.gg/E6SQuhz'>https://discord.gg/E6SQuhz</a></span>") //CIT CHANGE - makes the panic bunker disconnect message point to the discord
|
to_chat(src, "<span class='notice'>You must first join the Discord to verify your account before joining this server.<br>To do so, read the rules and post a request in the #station-access-requests channel under the \"Main server\" category in the Discord server linked here: <a href='https://discord.gg/E6SQuhz'>https://discord.gg/E6SQuhz</a></span>") //CIT CHANGE - makes the panic bunker disconnect message point to the discord
|
||||||
@@ -877,3 +878,23 @@ GLOBAL_LIST_EMPTY(external_rsc_urls)
|
|||||||
/client/proc/AnnouncePR(announcement)
|
/client/proc/AnnouncePR(announcement)
|
||||||
if(prefs && prefs.chat_toggles & CHAT_PULLR)
|
if(prefs && prefs.chat_toggles & CHAT_PULLR)
|
||||||
to_chat(src, announcement)
|
to_chat(src, announcement)
|
||||||
|
|
||||||
|
/client/proc/show_character_previews(mutable_appearance/MA)
|
||||||
|
var/pos = 0
|
||||||
|
for(var/D in GLOB.cardinals)
|
||||||
|
pos++
|
||||||
|
var/obj/screen/O = LAZYACCESS(char_render_holders, "[D]")
|
||||||
|
if(!O)
|
||||||
|
O = new
|
||||||
|
LAZYSET(char_render_holders, "[D]", O)
|
||||||
|
screen |= O
|
||||||
|
O.appearance = MA
|
||||||
|
O.dir = D
|
||||||
|
O.screen_loc = "character_preview_map:0,[pos]"
|
||||||
|
|
||||||
|
/client/proc/clear_character_previews()
|
||||||
|
for(var/index in char_render_holders)
|
||||||
|
var/obj/screen/S = char_render_holders[index]
|
||||||
|
screen -= S
|
||||||
|
qdel(S)
|
||||||
|
char_render_holders = null
|
||||||
|
|||||||
+2212
-2119
File diff suppressed because it is too large
Load Diff
@@ -235,6 +235,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
|||||||
|
|
||||||
//Character
|
//Character
|
||||||
S["real_name"] >> real_name
|
S["real_name"] >> real_name
|
||||||
|
S["nameless"] >> nameless
|
||||||
S["name_is_always_random"] >> be_random_name
|
S["name_is_always_random"] >> be_random_name
|
||||||
S["body_is_always_random"] >> be_random_body
|
S["body_is_always_random"] >> be_random_body
|
||||||
S["gender"] >> gender
|
S["gender"] >> gender
|
||||||
@@ -301,6 +302,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
|||||||
S["feature_mam_ears"] >> features["mam_ears"]
|
S["feature_mam_ears"] >> features["mam_ears"]
|
||||||
S["feature_mam_tail_animated"] >> features["mam_tail_animated"]
|
S["feature_mam_tail_animated"] >> features["mam_tail_animated"]
|
||||||
S["feature_taur"] >> features["taur"]
|
S["feature_taur"] >> features["taur"]
|
||||||
|
S["feature_mam_snouts"] >> features["mam_snouts"]
|
||||||
//Xeno features
|
//Xeno features
|
||||||
S["feature_xeno_tail"] >> features["xenotail"]
|
S["feature_xeno_tail"] >> features["xenotail"]
|
||||||
S["feature_xeno_dors"] >> features["xenodorsal"]
|
S["feature_xeno_dors"] >> features["xenodorsal"]
|
||||||
@@ -362,6 +364,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
|||||||
if(!features["mcolor"] || features["mcolor"] == "#000")
|
if(!features["mcolor"] || features["mcolor"] == "#000")
|
||||||
features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
|
features["mcolor"] = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F")
|
||||||
|
|
||||||
|
nameless = sanitize_integer(nameless, 0, 1, initial(nameless))
|
||||||
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
|
be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name))
|
||||||
be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body))
|
be_random_body = sanitize_integer(be_random_body, 0, 1, initial(be_random_body))
|
||||||
|
|
||||||
@@ -427,6 +430,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
|||||||
|
|
||||||
//Character
|
//Character
|
||||||
WRITE_FILE(S["real_name"] , real_name)
|
WRITE_FILE(S["real_name"] , real_name)
|
||||||
|
WRITE_FILE(S["nameless"] , nameless)
|
||||||
WRITE_FILE(S["name_is_always_random"] , be_random_name)
|
WRITE_FILE(S["name_is_always_random"] , be_random_name)
|
||||||
WRITE_FILE(S["body_is_always_random"] , be_random_body)
|
WRITE_FILE(S["body_is_always_random"] , be_random_body)
|
||||||
WRITE_FILE(S["gender"] , gender)
|
WRITE_FILE(S["gender"] , gender)
|
||||||
|
|||||||
@@ -24,6 +24,8 @@
|
|||||||
var/can_flashlight = 0
|
var/can_flashlight = 0
|
||||||
var/scan_reagents = 0 //Can the wearer see reagents while it's equipped?
|
var/scan_reagents = 0 //Can the wearer see reagents while it's equipped?
|
||||||
|
|
||||||
|
var/blocks_shove_knockdown = FALSE //Whether wearing the clothing item blocks the ability for shove to knock down.
|
||||||
|
|
||||||
var/clothing_flags = NONE
|
var/clothing_flags = NONE
|
||||||
|
|
||||||
//Var modification - PLEASE be careful with this I know who you are and where you live
|
//Var modification - PLEASE be careful with this I know who you are and where you live
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
desc = "Standard Security gear. Protects the head from impacts."
|
desc = "Standard Security gear. Protects the head from impacts."
|
||||||
icon_state = "helmet"
|
icon_state = "helmet"
|
||||||
item_state = "helmet"
|
item_state = "helmet"
|
||||||
armor = list("melee" = 35, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||||
flags_inv = HIDEEARS
|
flags_inv = HIDEEARS
|
||||||
cold_protection = HEAD
|
cold_protection = HEAD
|
||||||
min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT
|
min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT
|
||||||
|
|||||||
@@ -139,7 +139,7 @@
|
|||||||
name = "security beret"
|
name = "security beret"
|
||||||
desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."
|
desc = "A robust beret with the security insignia emblazoned on it. Uses reinforced fabric to offer sufficient protection."
|
||||||
icon_state = "beret_badge"
|
icon_state = "beret_badge"
|
||||||
armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50)
|
armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||||
strip_delay = 60
|
strip_delay = 60
|
||||||
dog_fashion = null
|
dog_fashion = null
|
||||||
|
|
||||||
@@ -152,7 +152,7 @@
|
|||||||
name = "warden's beret"
|
name = "warden's beret"
|
||||||
desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class."
|
desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class."
|
||||||
icon_state = "wardenberet"
|
icon_state = "wardenberet"
|
||||||
armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 50)
|
armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50)
|
||||||
strip_delay = 60
|
strip_delay = 60
|
||||||
|
|
||||||
/obj/item/clothing/head/beret/sec/navyofficer
|
/obj/item/clothing/head/beret/sec/navyofficer
|
||||||
|
|||||||
@@ -110,13 +110,14 @@
|
|||||||
|
|
||||||
/obj/item/clothing/suit/armor/riot
|
/obj/item/clothing/suit/armor/riot
|
||||||
name = "riot suit"
|
name = "riot suit"
|
||||||
desc = "A suit of semi-flexible polycarbonate body armor with heavy padding to protect against melee attacks."
|
desc = "A suit of semi-flexible polycarbonate body armor with heavy padding to protect against melee attacks. Helps the wearer resist shoving in close quarters."
|
||||||
icon_state = "riot"
|
icon_state = "riot"
|
||||||
item_state = "swat_suit"
|
item_state = "swat_suit"
|
||||||
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
body_parts_covered = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||||
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
cold_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||||
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
heat_protection = CHEST|GROIN|LEGS|FEET|ARMS|HANDS
|
||||||
armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
|
armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
|
||||||
|
blocks_shove_knockdown = TRUE
|
||||||
strip_delay = 80
|
strip_delay = 80
|
||||||
equip_delay_other = 60
|
equip_delay_other = 60
|
||||||
|
|
||||||
|
|||||||
@@ -158,14 +158,14 @@
|
|||||||
icon_state = "bronze_heart"
|
icon_state = "bronze_heart"
|
||||||
|
|
||||||
/obj/item/clothing/accessory/medal/engineer
|
/obj/item/clothing/accessory/medal/engineer
|
||||||
name = "\"Shift's Best Electrician\" award"
|
name = "\"Shift's Best Electrician\" award"
|
||||||
desc = "An award bestowed upon engineers who have excelled at keeping the station running in the best possible condition against all odds."
|
desc = "An award bestowed upon engineers who have excelled at keeping the station running in the best possible condition against all odds."
|
||||||
icon_state = "engineer"
|
icon_state = "engineer"
|
||||||
|
|
||||||
/obj/item/clothing/accessory/medal/greytide
|
/obj/item/clothing/accessory/medal/greytide
|
||||||
name = "\"Greytider of the shift\" award"
|
name = "\"Greytider of the shift\" award"
|
||||||
desc = "An award for only the most annoying of assistants. Locked doors mean nothing to you and behaving is not in your vocabulary"
|
desc = "An award for only the most annoying of assistants. Locked doors mean nothing to you and behaving is not in your vocabulary"
|
||||||
icon_state = "greytide"
|
icon_state = "greytide"
|
||||||
|
|
||||||
/obj/item/clothing/accessory/medal/ribbon
|
/obj/item/clothing/accessory/medal/ribbon
|
||||||
name = "ribbon"
|
name = "ribbon"
|
||||||
@@ -178,9 +178,9 @@
|
|||||||
desc = "An award bestowed only upon those cargotechs who have exhibited devotion to their duty in keeping with the highest traditions of Cargonia."
|
desc = "An award bestowed only upon those cargotechs who have exhibited devotion to their duty in keeping with the highest traditions of Cargonia."
|
||||||
|
|
||||||
/obj/item/clothing/accessory/medal/ribbon/medical_doctor
|
/obj/item/clothing/accessory/medal/ribbon/medical_doctor
|
||||||
name = "\"doctor of the shift\" award"
|
name = "\"doctor of the shift\" award"
|
||||||
desc = "An award bestowed only upon the most capable doctors who have upheld the Hippocratic Oath to the best of their ability"
|
desc = "An award bestowed only upon the most capable doctors who have upheld the Hippocratic Oath to the best of their ability"
|
||||||
icon_state = "medical_doctor"
|
icon_state = "medical_doctor"
|
||||||
|
|
||||||
/obj/item/clothing/accessory/medal/silver
|
/obj/item/clothing/accessory/medal/silver
|
||||||
name = "silver medal"
|
name = "silver medal"
|
||||||
@@ -211,6 +211,12 @@
|
|||||||
desc = "A golden medal awarded exclusively to those promoted to the rank of captain. It signifies the codified responsibilities of a captain to Nanotrasen, and their undisputable authority over their crew."
|
desc = "A golden medal awarded exclusively to those promoted to the rank of captain. It signifies the codified responsibilities of a captain to Nanotrasen, and their undisputable authority over their crew."
|
||||||
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
|
||||||
|
|
||||||
|
/obj/item/clothing/accessory/medal/gold/captain/family
|
||||||
|
name = "old medal of captaincy"
|
||||||
|
desc = "A rustic badge pure gold, has been through hell and back by the looks, the syndcate have been after these by the looks of it for generations..."
|
||||||
|
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 10) //Pure gold
|
||||||
|
materials = list(MAT_GOLD=2000)
|
||||||
|
|
||||||
/obj/item/clothing/accessory/medal/gold/heroism
|
/obj/item/clothing/accessory/medal/gold/heroism
|
||||||
name = "medal of exceptional heroism"
|
name = "medal of exceptional heroism"
|
||||||
desc = "An extremely rare golden medal awarded only by CentCom. To receive such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders."
|
desc = "An extremely rare golden medal awarded only by CentCom. To receive such a medal is the highest honor and as such, very few exist. This medal is almost never awarded to anybody but commanders."
|
||||||
@@ -234,8 +240,6 @@
|
|||||||
name = "nobel sciences award"
|
name = "nobel sciences award"
|
||||||
desc = "A plasma medal which represents significant contributions to the field of science or engineering."
|
desc = "A plasma medal which represents significant contributions to the field of science or engineering."
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////////////
|
////////////
|
||||||
//Armbands//
|
//Armbands//
|
||||||
////////////
|
////////////
|
||||||
|
|||||||
@@ -93,6 +93,15 @@
|
|||||||
else if(length(blood_dna))
|
else if(length(blood_dna))
|
||||||
AddComponent(/datum/component/forensics, null, null, blood_dna)
|
AddComponent(/datum/component/forensics, null, null, blood_dna)
|
||||||
bloody_hands = rand(2, 4)
|
bloody_hands = rand(2, 4)
|
||||||
|
if(head)
|
||||||
|
head.add_blood_DNA(blood_dna)
|
||||||
|
update_inv_head()
|
||||||
|
else if(wear_mask)
|
||||||
|
wear_mask.add_blood_DNA(blood_dna)
|
||||||
|
update_inv_wear_mask()
|
||||||
|
if(wear_neck)
|
||||||
|
wear_neck.add_blood_DNA(blood_dna)
|
||||||
|
update_inv_neck()
|
||||||
update_inv_gloves() //handles bloody hands overlays and updating
|
update_inv_gloves() //handles bloody hands overlays and updating
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|
||||||
|
|||||||
@@ -89,13 +89,24 @@
|
|||||||
icon_state = "jdonut1"
|
icon_state = "jdonut1"
|
||||||
extra_reagent = "cherryjelly"
|
extra_reagent = "cherryjelly"
|
||||||
foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT
|
foodtype = JUNKFOOD | GRAIN | FRIED | FRUIT
|
||||||
|
|
||||||
/obj/item/reagent_containers/food/snacks/donut/meat
|
/obj/item/reagent_containers/food/snacks/donut/meat
|
||||||
bonus_reagents = list("ketchup" = 1)
|
bonus_reagents = list("ketchup" = 1)
|
||||||
list_reagents = list("nutriment" = 3, "ketchup" = 2)
|
list_reagents = list("nutriment" = 3, "ketchup" = 2)
|
||||||
tastes = list("meat" = 1)
|
tastes = list("meat" = 1)
|
||||||
foodtype = JUNKFOOD | MEAT | GROSS | FRIED
|
foodtype = JUNKFOOD | MEAT | GROSS | FRIED
|
||||||
|
|
||||||
|
/obj/item/reagent_containers/food/snacks/donut/semen
|
||||||
|
name = "\"cream\" donut"
|
||||||
|
desc = "That cream looks a little runny..."
|
||||||
|
icon_state = "donut3"
|
||||||
|
bitesize = 10
|
||||||
|
bonus_reagents = list("semen" = 1)
|
||||||
|
list_reagents = list("nutriment" = 3, "sugar" = 2, "semen" = 5)
|
||||||
|
filling_color = "#FFFFFF"
|
||||||
|
tastes = list("donut" = 1, "salt" = 3)
|
||||||
|
foodtype = JUNKFOOD | GRAIN | FRIED | SUGAR
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////MUFFINS////////////////////////////////////////////
|
////////////////////////////////////////////MUFFINS////////////////////////////////////////////
|
||||||
|
|
||||||
|
|||||||
@@ -23,6 +23,16 @@
|
|||||||
result = /obj/item/reagent_containers/food/snacks/donut
|
result = /obj/item/reagent_containers/food/snacks/donut
|
||||||
subcategory = CAT_PASTRY
|
subcategory = CAT_PASTRY
|
||||||
|
|
||||||
|
/datum/crafting_recipe/food/donut
|
||||||
|
time = 15
|
||||||
|
name = "Semen donut"
|
||||||
|
reqs = list(
|
||||||
|
/datum/reagent/consumable/semen = 10,
|
||||||
|
/obj/item/reagent_containers/food/snacks/pastrybase = 1
|
||||||
|
)
|
||||||
|
result = /obj/item/reagent_containers/food/snacks/donut/semen
|
||||||
|
subcategory = CAT_PASTRY
|
||||||
|
|
||||||
datum/crafting_recipe/food/donut/meat
|
datum/crafting_recipe/food/donut/meat
|
||||||
time = 15
|
time = 15
|
||||||
name = "Meat donut"
|
name = "Meat donut"
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ Captain
|
|||||||
|
|
||||||
/datum/job/captain/announce(mob/living/carbon/human/H)
|
/datum/job/captain/announce(mob/living/carbon/human/H)
|
||||||
..()
|
..()
|
||||||
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.real_name] on deck!"))
|
SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, .proc/minor_announce, "Captain [H.nameless ? "" : "[H.real_name] "]on deck!"))
|
||||||
|
|
||||||
/datum/outfit/job/captain
|
/datum/outfit/job/captain
|
||||||
name = "Captain"
|
name = "Captain"
|
||||||
|
|||||||
@@ -193,6 +193,12 @@
|
|||||||
if(!J)
|
if(!J)
|
||||||
J = SSjob.GetJob(H.job)
|
J = SSjob.GetJob(H.job)
|
||||||
|
|
||||||
|
if(H.nameless && J.dresscodecompliant)
|
||||||
|
if(J.title in GLOB.command_positions)
|
||||||
|
H.real_name = J.title
|
||||||
|
else
|
||||||
|
H.real_name = "[J.title] #[rand(10000, 99999)]"
|
||||||
|
|
||||||
var/obj/item/card/id/C = H.wear_id
|
var/obj/item/card/id/C = H.wear_id
|
||||||
if(istype(C))
|
if(istype(C))
|
||||||
C.access = J.get_access()
|
C.access = J.get_access()
|
||||||
|
|||||||
@@ -9,9 +9,11 @@
|
|||||||
var/top_right_coords[3]
|
var/top_right_coords[3]
|
||||||
var/wipe_reservation_on_release = TRUE
|
var/wipe_reservation_on_release = TRUE
|
||||||
var/turf_type = /turf/open/space
|
var/turf_type = /turf/open/space
|
||||||
|
var/borderturf
|
||||||
|
|
||||||
/datum/turf_reservation/transit
|
/datum/turf_reservation/transit
|
||||||
turf_type = /turf/open/space/transit
|
turf_type = /turf/open/space/transit
|
||||||
|
borderturf = /turf/open/space/transit/border
|
||||||
|
|
||||||
/datum/turf_reservation/proc/Release()
|
/datum/turf_reservation/proc/Release()
|
||||||
var/v = reserved_turfs.Copy()
|
var/v = reserved_turfs.Copy()
|
||||||
@@ -20,6 +22,12 @@
|
|||||||
SSmapping.used_turfs -= i
|
SSmapping.used_turfs -= i
|
||||||
SSmapping.reserve_turfs(v)
|
SSmapping.reserve_turfs(v)
|
||||||
|
|
||||||
|
/datum/turf_reservation/transit/Release()
|
||||||
|
for(var/turf/open/space/transit/T in reserved_turfs)
|
||||||
|
for(var/atom/movable/AM in T)
|
||||||
|
T.throw_atom(AM)
|
||||||
|
. = ..()
|
||||||
|
|
||||||
/datum/turf_reservation/proc/Reserve(width, height, zlevel)
|
/datum/turf_reservation/proc/Reserve(width, height, zlevel)
|
||||||
if(width > world.maxx || height > world.maxy || width < 1 || height < 1)
|
if(width > world.maxx || height > world.maxy || width < 1 || height < 1)
|
||||||
return FALSE
|
return FALSE
|
||||||
@@ -60,7 +68,10 @@
|
|||||||
T.flags_1 &= ~UNUSED_RESERVATION_TURF_1
|
T.flags_1 &= ~UNUSED_RESERVATION_TURF_1
|
||||||
SSmapping.unused_turfs["[T.z]"] -= T
|
SSmapping.unused_turfs["[T.z]"] -= T
|
||||||
SSmapping.used_turfs[T] = src
|
SSmapping.used_turfs[T] = src
|
||||||
T.ChangeTurf(turf_type, turf_type)
|
if(borderturf && (T.x == BL.x || T.x == TR.x || T.y == BL.y || T.y == TR.y))
|
||||||
|
T.ChangeTurf(borderturf, borderturf)
|
||||||
|
else
|
||||||
|
T.ChangeTurf(turf_type, turf_type)
|
||||||
src.width = width
|
src.width = width
|
||||||
src.height = height
|
src.height = height
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|||||||
@@ -239,10 +239,10 @@
|
|||||||
if(ishostile(target))
|
if(ishostile(target))
|
||||||
var/mob/living/simple_animal/hostile/H = target
|
var/mob/living/simple_animal/hostile/H = target
|
||||||
if(H.ranged) //briefly delay ranged attacks
|
if(H.ranged) //briefly delay ranged attacks
|
||||||
if(H.ranged_cooldown_time >= world.time)
|
if(H.ranged_cooldown >= world.time)
|
||||||
H.ranged_cooldown_time += bonus_value
|
H.ranged_cooldown += bonus_value
|
||||||
else
|
else
|
||||||
H.ranged_cooldown_time = bonus_value + world.time
|
H.ranged_cooldown = bonus_value + world.time
|
||||||
|
|
||||||
//magmawing watcher
|
//magmawing watcher
|
||||||
/obj/item/crusher_trophy/blaster_tubes/magma_wing
|
/obj/item/crusher_trophy/blaster_tubes/magma_wing
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
var/obj/item/card/id/inserted_id
|
var/obj/item/card/id/inserted_id
|
||||||
var/list/prize_list = list( //if you add something to this, please, for the love of god, sort it by price/type. use tabs and not spaces.
|
var/list/prize_list = list( //if you add something to this, please, for the love of god, sort it by price/type. use tabs and not spaces.
|
||||||
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
|
new /datum/data/mining_equipment("1 Marker Beacon", /obj/item/stack/marker_beacon, 10),
|
||||||
|
new /datum/data/mining_equipment("50 Point Transfer Card", /obj/item/card/mining_point_card, 50),
|
||||||
new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
|
new /datum/data/mining_equipment("10 Marker Beacons", /obj/item/stack/marker_beacon/ten, 100),
|
||||||
new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
|
new /datum/data/mining_equipment("30 Marker Beacons", /obj/item/stack/marker_beacon/thirty, 300),
|
||||||
new /datum/data/mining_equipment("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100),
|
new /datum/data/mining_equipment("Whiskey", /obj/item/reagent_containers/food/drinks/bottle/whiskey, 100),
|
||||||
@@ -23,7 +24,7 @@
|
|||||||
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
|
new /datum/data/mining_equipment("Shelter Capsule", /obj/item/survivalcapsule, 400),
|
||||||
new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500),
|
new /datum/data/mining_equipment("GAR Meson Scanners", /obj/item/clothing/glasses/meson/gar, 500),
|
||||||
new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
|
new /datum/data/mining_equipment("Explorer's Webbing", /obj/item/storage/belt/mining, 500),
|
||||||
new /datum/data/mining_equipment("Point Transfer Card", /obj/item/card/mining_point_card, 500),
|
new /datum/data/mining_equipment("500 Point Transfer Card", /obj/item/card/mining_point_card/mp500, 500),
|
||||||
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600),
|
new /datum/data/mining_equipment("Brute First-Aid Kit", /obj/item/storage/firstaid/brute, 600),
|
||||||
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
|
new /datum/data/mining_equipment("Tracking Implant Kit", /obj/item/storage/box/minertracker, 600),
|
||||||
new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 750),
|
new /datum/data/mining_equipment("Survival Medipen", /obj/item/reagent_containers/hypospray/medipen/survival, 750),
|
||||||
@@ -41,6 +42,9 @@
|
|||||||
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
|
new /datum/data/mining_equipment("Lazarus Injector", /obj/item/lazarus_injector, 1000),
|
||||||
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
|
new /datum/data/mining_equipment("Silver Pickaxe", /obj/item/pickaxe/silver, 1000),
|
||||||
new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1000),
|
new /datum/data/mining_equipment("Mining Conscription Kit", /obj/item/storage/backpack/duffelbag/mining_conscript, 1000),
|
||||||
|
new /datum/data/mining_equipment("1000 Point Transfer Card", /obj/item/card/mining_point_card/mp1000, 1000),
|
||||||
|
new /datum/data/mining_equipment("1500 Point Transfer Card", /obj/item/card/mining_point_card/mp1500, 1500),
|
||||||
|
new /datum/data/mining_equipment("2000 Point Transfer Card", /obj/item/card/mining_point_card/mp2000, 2000),
|
||||||
new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/tank/jetpack/suit, 2000),
|
new /datum/data/mining_equipment("Jetpack Upgrade", /obj/item/tank/jetpack/suit, 2000),
|
||||||
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
|
new /datum/data/mining_equipment("Space Cash", /obj/item/stack/spacecash/c1000, 2000),
|
||||||
new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
|
new /datum/data/mining_equipment("Mining Hardsuit", /obj/item/clothing/suit/space/hardsuit/mining, 2000),
|
||||||
@@ -245,12 +249,30 @@
|
|||||||
w_class = WEIGHT_CLASS_TINY
|
w_class = WEIGHT_CLASS_TINY
|
||||||
|
|
||||||
/**********************Mining Point Card**********************/
|
/**********************Mining Point Card**********************/
|
||||||
|
//mp = Miner Pointers
|
||||||
|
//c = Cash
|
||||||
|
//TODO add in cr = Credits for cargo
|
||||||
/obj/item/card/mining_point_card
|
/obj/item/card/mining_point_card
|
||||||
name = "mining points card"
|
name = "mining points card"
|
||||||
desc = "A small card preloaded with mining points. Swipe your ID card over it to transfer the points, then discard."
|
desc = "A small card preloaded with mining points. Swipe your ID card over it to transfer the points, then discard. This one only holds a small 50 points on it."
|
||||||
icon_state = "data_1"
|
icon_state = "data_1"
|
||||||
var/points = 500
|
var/points = 50
|
||||||
|
|
||||||
|
/obj/item/card/mining_point_card/mp500
|
||||||
|
desc = "A small card preloaded with 500 mining points. Swipe your ID card over it to transfer the points, then discard."
|
||||||
|
points = 500
|
||||||
|
|
||||||
|
/obj/item/card/mining_point_card/mp1000
|
||||||
|
desc = "A small card preloaded with 1000 mining points. Swipe your ID card over it to transfer the points, then discard."
|
||||||
|
points = 1000
|
||||||
|
|
||||||
|
/obj/item/card/mining_point_card/mp1500
|
||||||
|
desc = "A small card preloaded with 1500 mining points. Swipe your ID card over it to transfer the points, then discard."
|
||||||
|
points = 1500
|
||||||
|
|
||||||
|
/obj/item/card/mining_point_card/mp2000
|
||||||
|
desc = "A small card preloaded with 2000 mining points. Swipe your ID card over it to transfer the points, then discard."
|
||||||
|
points = 2000
|
||||||
|
|
||||||
/obj/item/card/mining_point_card/attackby(obj/item/I, mob/user, params)
|
/obj/item/card/mining_point_card/attackby(obj/item/I, mob/user, params)
|
||||||
if(istype(I, /obj/item/card/id))
|
if(istype(I, /obj/item/card/id))
|
||||||
|
|||||||
@@ -20,17 +20,19 @@
|
|||||||
features = random_features()
|
features = random_features()
|
||||||
age = rand(AGE_MIN,AGE_MAX)
|
age = rand(AGE_MIN,AGE_MAX)
|
||||||
|
|
||||||
/datum/preferences/proc/update_preview_icon(nude = FALSE)
|
/datum/preferences/proc/update_preview_icon()
|
||||||
// Silicons only need a very basic preview since there is no customization for them.
|
// Silicons only need a very basic preview since there is no customization for them.
|
||||||
|
// var/wide_icon = FALSE //CITDEL THINGS
|
||||||
|
// if(features["taur"] != "None")
|
||||||
|
// wide_icon = TRUE
|
||||||
|
|
||||||
if(job_engsec_high)
|
if(job_engsec_high)
|
||||||
switch(job_engsec_high)
|
switch(job_engsec_high)
|
||||||
if(AI_JF)
|
if(AI_JF)
|
||||||
preview_icon = icon('icons/mob/ai.dmi', "AI", SOUTH)
|
parent.show_character_previews(image('icons/mob/ai.dmi', icon_state = "AI", dir = SOUTH))
|
||||||
preview_icon.Scale(64, 64)
|
|
||||||
return
|
return
|
||||||
if(CYBORG)
|
if(CYBORG)
|
||||||
preview_icon = icon('icons/mob/robots.dmi', "robot", SOUTH)
|
parent.show_character_previews(image('icons/mob/robots.dmi', icon_state = "robot", dir = SOUTH))
|
||||||
preview_icon.Scale(64, 64)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
// Set up the dummy for its photoshoot
|
// Set up the dummy for its photoshoot
|
||||||
@@ -57,30 +59,11 @@
|
|||||||
previewJob = job
|
previewJob = job
|
||||||
break
|
break
|
||||||
|
|
||||||
if(previewJob && !nude)
|
if(previewJob)
|
||||||
mannequin.job = previewJob.title
|
if(current_tab != 2)
|
||||||
previewJob.equip(mannequin, TRUE)
|
mannequin.job = previewJob.title
|
||||||
COMPILE_OVERLAYS(mannequin)
|
previewJob.equip(mannequin, TRUE)
|
||||||
CHECK_TICK
|
|
||||||
preview_icon = icon('icons/effects/effects.dmi', "nothing")
|
|
||||||
preview_icon.Scale(48+32, 16+32)
|
|
||||||
CHECK_TICK
|
|
||||||
mannequin.setDir(NORTH)
|
|
||||||
|
|
||||||
var/icon/stamp = getFlatIcon(mannequin)
|
COMPILE_OVERLAYS(mannequin)
|
||||||
CHECK_TICK
|
parent.show_character_previews(new /mutable_appearance(mannequin))
|
||||||
preview_icon.Blend(stamp, ICON_OVERLAY, 25, 17)
|
|
||||||
CHECK_TICK
|
|
||||||
mannequin.setDir(WEST)
|
|
||||||
stamp = getFlatIcon(mannequin)
|
|
||||||
CHECK_TICK
|
|
||||||
preview_icon.Blend(stamp, ICON_OVERLAY, 1, 9)
|
|
||||||
CHECK_TICK
|
|
||||||
mannequin.setDir(SOUTH)
|
|
||||||
stamp = getFlatIcon(mannequin)
|
|
||||||
CHECK_TICK
|
|
||||||
preview_icon.Blend(stamp, ICON_OVERLAY, 49, 1)
|
|
||||||
CHECK_TICK
|
|
||||||
preview_icon.Scale(preview_icon.Width() * 2, preview_icon.Height() * 2) // Scaling here to prevent blurring in the browser.
|
|
||||||
CHECK_TICK
|
|
||||||
unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)
|
unset_busy_human_dummy(DUMMY_HUMAN_SLOT_PREFERENCES)
|
||||||
|
|||||||
@@ -364,6 +364,12 @@
|
|||||||
name = "Over Eye"
|
name = "Over Eye"
|
||||||
icon_state = "hair_shortovereye"
|
icon_state = "hair_shortovereye"
|
||||||
|
|
||||||
|
//Donator item - fractious
|
||||||
|
/datum/sprite_accessory/hair/over_eye_fr
|
||||||
|
name = "Over Eye (fract)"
|
||||||
|
icon_state = "hair_shortovereye_1f"
|
||||||
|
ckeys_allowed = list("fractious")
|
||||||
|
|
||||||
/datum/sprite_accessory/hair/parted
|
/datum/sprite_accessory/hair/parted
|
||||||
name = "Parted"
|
name = "Parted"
|
||||||
icon_state = "hair_parted"
|
icon_state = "hair_parted"
|
||||||
@@ -1516,18 +1522,3 @@
|
|||||||
/datum/sprite_accessory/moth_wings/snow
|
/datum/sprite_accessory/moth_wings/snow
|
||||||
name = "Snow"
|
name = "Snow"
|
||||||
icon_state = "snow"
|
icon_state = "snow"
|
||||||
|
|
||||||
//Lunasune
|
|
||||||
/datum/sprite_accessory/mam_ears/lunasune
|
|
||||||
name = "lunasune"
|
|
||||||
icon_state = "lunasune"
|
|
||||||
hasinner = 1
|
|
||||||
extra = TRUE
|
|
||||||
extra_color_src = MUTCOLORS2
|
|
||||||
ckeys_allowed = list("invader4352")
|
|
||||||
|
|
||||||
/datum/sprite_accessory/mam_tails/lunasune
|
|
||||||
name = "lunasune"
|
|
||||||
icon_state = "lunasune"
|
|
||||||
extra = TRUE
|
|
||||||
ckeys_allowed = list("invader4352")
|
|
||||||
|
|||||||
@@ -198,6 +198,11 @@
|
|||||||
for(var/V in roundstart_quirks)
|
for(var/V in roundstart_quirks)
|
||||||
var/datum/quirk/T = V
|
var/datum/quirk/T = V
|
||||||
blood_data["quirks"] += T.type
|
blood_data["quirks"] += T.type
|
||||||
|
blood_data["changeling_loudness"] = 0
|
||||||
|
if(mind)
|
||||||
|
var/datum/antagonist/changeling/ling = mind.has_antag_datum(/datum/antagonist/changeling)
|
||||||
|
if(istype(ling))
|
||||||
|
blood_data["changeling_loudness"] = ling.loudfactor
|
||||||
return blood_data
|
return blood_data
|
||||||
|
|
||||||
//get the id of the substance this mob use as blood.
|
//get the id of the substance this mob use as blood.
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user