This commit is contained in:
SandPoot
2022-02-20 21:13:55 -03:00
64 changed files with 1002 additions and 612 deletions
+10 -1
View File
@@ -11,7 +11,8 @@
6. [Pull Request Process](#pull-request-process)
7. [Porting features/sprites/sounds/tools from other codebases](#porting-featuresspritessoundstools-from-other-codebases)
8. [Banned content](#banned-content)
9. [A word on Git](#a-word-on-git)
9. [Content requiring prior approval](#content-requiring-prior-approval)
10. [A word on Git](#a-word-on-git)
## Reporting Issues
If you ever encounter a bug in-game, the best way to let a coder know about it is with our GitHub Issue Tracker. Please make sure you use the supplied issue template, and include the round ID for the server.
@@ -678,6 +679,14 @@ Do not add any of the following in a Pull Request or risk getting the PR closed:
Just because something isn't on this list doesn't mean that it's acceptable. Use common sense above all else.
## Content requiring prior approval
Certain types of changes may require prior approval from maintainers. This currently includes:
* Code adding, removing, or updating the availability of alien races/species/human mutants. This includes pull requests attempting to add or remove features from said races/species/mutants. (Requires approval from at least one maintainer)
* Code adding, removing, or modifying the functionality of adult-oriented features (such as, but not limited to: vore, genitals, MKUltra, and more). This also includes pull requests attempting to add or remove these features outright. (Requires approval from at least half of the formal maintainer team)
If a PR contains any of the above content, and it lacks prior approval, then it may closed at maintainer discretion. Prior approval requires an @Maintainer ping in a relevant development/code or staff channel on the Discord. This is primarily to limit the impact of PRs that're created in bad faith, or are otherwise counterproductive to the server's health.
## A word on Git
This repository uses `LF` line endings for all code as specified in the **.gitattributes** and **.editorconfig** files.
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
BIN
View File
Binary file not shown.
-1
View File
@@ -76,7 +76,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list(
#define isvampire(A) (is_species(A,/datum/species/vampire))
#define isdullahan(A) (is_species(A, /datum/species/dullahan))
#define isangel(A) (is_species(A, /datum/species/angel))
#define ismush(A) (is_species(A, /datum/species/mush))
#define isshadow(A) (is_species(A, /datum/species/shadow))
#define isrobotic(A) (is_species(A, /datum/species/ipc) || is_species(A, /datum/species/synthliz) || is_species(A, /datum/species/mammal/synthetic))
+11 -1
View File
@@ -3,7 +3,6 @@
#define SPECIES_ABDUCTOR "abductor"
#define SPECIES_ANDROID "android"
#define SPECIES_ANGEL "angel"
#define SPECIES_MAMMAL "mammal"
#define SPECIES_MAMMAL_SYNTHETIC "mammal_synthetic"
#define SPECIES_ARACHNID "arachnid"
@@ -53,3 +52,14 @@
#define SPECIES_CATEGORY_SHADOW "shadow"
#define SPECIES_CATEGORY_SKELETON "skeleton"
#define SPECIES_CATEGORY_UNDEAD "undead"
//Species Wing Type Defines ----------------------
#define SPECIES_WINGS_ANGEL list("Angel")
#define SPECIES_WINGS_DRAGON list("Dragon") //could also be considered demon wings or bat wings?
#define SPECIES_WINGS_ROBOT list("Robotic")
#define SPECIES_WINGS_INSECT list("Fly") //"hey when can we have something besides giant fly wings?" "when you sprite it!"
#define SPECIES_WINGS_SKELETAL list("Skeleton")
#define SPECIES_WINGS_MOTH list("Megamoth","Mothra")
#define SPECIES_WINGS_JELLY list("Angel") //no actual slime wings present right now, but I'm making this in the event someone wants to sprite slime wings.
#define SPECIES_WINGS_ALL list("Angel","Dragon","Robotic","Fly","Skeleton","Megamoth","Mothra") //keep this updated
+2 -2
View File
@@ -591,9 +591,9 @@
switch(child)
if(/datum)
return null
if(/obj || /mob)
if(/obj, /mob)
return /atom/movable
if(/area || /turf)
if(/area, /turf)
return /atom
else
return /datum
+1
View File
@@ -224,6 +224,7 @@
else
to_chat(owner, "<span class='userdanger'>You feel your heart lurching in your chest...</span>")
owner.adjustOxyLoss(8)
else
/datum/brain_trauma/severe/discoordination
name = "Discoordination"
+1 -1
View File
@@ -30,7 +30,7 @@
return
switch(stage)
if(2 || 3) //Pretend to be a cold and give time to spread.
if(2, 3) //Pretend to be a cold and give time to spread.
if(prob(8))
affected_mob.emote("sneeze")
if(prob(8))
+1 -1
View File
@@ -374,7 +374,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
radio_freq = FREQ_ENGINEERING
if("security")
radio_freq = FREQ_SECURITY
if("cargobay" || "mining")
if("cargobay", "mining")
radio_freq = FREQ_SUPPLY
Radio.set_frequency(radio_freq)
@@ -380,6 +380,8 @@ GENETICS SCANNER
mutant = TRUE
else if (S.mutantstomach != initial(S.mutantstomach))
mutant = TRUE
else if (S.flying_species != initial(S.flying_species))
mutant = TRUE
msg += "\t<span class='info'>Reported Species: [H.spec_trait_examine_font()][H.dna.custom_species ? H.dna.custom_species : S.name]</font></span>\n"
msg += "\t<span class='info'>Base Species: [H.spec_trait_examine_font()][S.name]</font></span>\n"
@@ -53,7 +53,6 @@
desc = "A satchel that opens into a localized pocket of Blue Space."
icon_state = "holdingsat"
item_state = "holdingsat"
species_exception = list(/datum/species/angel)
/obj/item/storage/backpack/holding/duffel
name = "duffel bag of holding"
@@ -190,7 +189,6 @@
name = "satchel"
desc = "A trendy looking satchel."
icon_state = "satchel-norm"
species_exception = list(/datum/species/angel) //satchels can be equipped since they are on the side, not back
/obj/item/storage/backpack/satchel/leather
name = "leather satchel"
-1
View File
@@ -719,7 +719,6 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
icon = 'icons/obj/smooth_structures/rplasma_window.dmi'
icon_state = "rplasmawindow"
dir = FULLTILE_WINDOW_DIR
state = PRWINDOW_SECURE
max_integrity = 1000
fulltile = TRUE
flags_1 = PREVENT_CLICK_UNDER_1
-9
View File
@@ -53,15 +53,6 @@
return
cmd_show_exp_panel(M.client)
else if(href_list["toggleexempt"])
if(!check_rights(R_ADMIN))
return
var/client/C = locate(href_list["toggleexempt"]) in GLOB.clients
if(!C)
to_chat(usr, "<span class='danger'>ERROR: Client not found.</span>")
return
toggle_exempt_status(C)
else if(href_list["makeAntag"])
if(!check_rights(R_ADMIN))
return
@@ -70,9 +70,9 @@
/obj/machinery/atmospherics/pipe/layer_manifold/SetInitDirections()
switch(dir)
if(NORTH || SOUTH)
if(NORTH, SOUTH)
initialize_directions = NORTH|SOUTH
if(EAST || WEST)
if(EAST, WEST)
initialize_directions = EAST|WEST
/obj/machinery/atmospherics/pipe/layer_manifold/isConnectable(obj/machinery/atmospherics/target, given_layer)
+17
View File
@@ -119,6 +119,23 @@
to_chat(user, "<span class='notice'>Your Clown Mask has now morphed into [choice], all praise the Honkmother!</span>")
return TRUE
/obj/item/clothing/mask/gas/clown_hat_polychromic
name = "polychromic clown wig and mask"
desc = "A true prankster's facial attire. A clown is incomplete without his wig and mask."
clothing_flags = ALLOWINTERNALS
icon_state = "clown"
item_state = "clown_hat"
dye_color = "clown"
w_class = WEIGHT_CLASS_SMALL
flags_cover = MASKCOVERSEYES
resistance_flags = FLAMMABLE
dog_fashion = /datum/dog_fashion/head/clown
var/list/poly_colors = list("#FF8000", "#FFFFFF", "#FF0000", "#0000FF", "#FFFF00")
/obj/item/clothing/mask/gas/clown_hat_polychromic/ComponentInitialize()
. = ..()
AddElement(/datum/element/polychromic, poly_colors, 5, names = list("Hair", "Frame", "Mouth", "Eyes", "Markings"))
/obj/item/clothing/mask/gas/clown_hat/sexy
name = "sexy-clown wig and mask"
desc = "A feminine clown mask for the dabbling crossdressers or female entertainers."
@@ -234,7 +234,6 @@ Contains:
icon_state = "ert_medical"
item_state = "ert_medical"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/med
species_exception = list(/datum/species/angel)
//Red alert ERT
@@ -296,7 +295,6 @@ Contains:
icon_state = "ert_medical-alert"
item_state = "ert_medical-alert"
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/med
species_exception = list(/datum/species/angel)
/obj/item/clothing/suit/space/eva
name = "EVA suit"
@@ -32,6 +32,20 @@
can_adjust = FALSE
mutantrace_variation = STYLE_DIGITIGRADE //The clown suit must look funny, no taur alpha masks where possible.
/obj/item/clothing/under/rank/civilian/polychromic_clown
name = "polychromic clown suit"
desc = "<i>'HONK!'</i>"
icon_state = "clown"
item_state = "clown"
fitted = FEMALE_UNIFORM_TOP
can_adjust = FALSE
mutantrace_variation = STYLE_DIGITIGRADE //The clown suit must look funny, no taur alpha masks where possible.
var/list/poly_colors = list("#FF0000", "#FF99FF", "#FFFF00", "#FFFFFF")
/obj/item/clothing/under/rank/civilian/polychromic_clown/ComponentInitialize()
. = ..()
AddElement(/datum/element/polychromic, poly_colors, 4)
/obj/item/clothing/under/rank/civilian/clown/blue
name = "blue clown suit"
desc = "<i>'BLUE HONK!'</i>"
@@ -12,21 +12,16 @@
/obj/machinery/hydroponics/proc/mutation_roll(mob/user)
switch(rand(100))
switch(rand(1, 100))
if(91 to 100)
adjustHealth(-10)
visible_message("<span class='warning'>\The [myseed.plantname] starts to wilt and burn!</span>")
return
if(41 to 90)
if(myseed && !self_sustaining) //Stability
myseed.adjust_instability(5)
return
if(21 to 40)
visible_message("<span class='notice'>\The [myseed.plantname] appears unusually reactive...</span>")
return
if(11 to 20)
mutateweed()
return
if(1 to 10)
mutatepest(user)
return
+38
View File
@@ -17,6 +17,13 @@
ui = new(user, src, "TrackedPlaytime")
ui.open()
/datum/job_report_menu/ui_data(mob/user)
var/list/data = list()
data["exemptStatus"] = (owner.prefs?.db_flags & DB_FLAG_EXEMPT)
return data
/datum/job_report_menu/ui_static_data()
if (!CONFIG_GET(flag/use_exp_tracking))
return list("failReason" = JOB_REPORT_MENU_FAIL_REASON_TRACKING_DISABLED)
@@ -42,8 +49,39 @@
data["livingTime"] = play_records[EXP_TYPE_LIVING]
data["ghostTime"] = play_records[EXP_TYPE_GHOST]
data["adminTime"] = play_records[EXP_TYPE_ADMIN] ? play_records[EXP_TYPE_ADMIN] : 0
data["isAdmin"] = check_rights(R_ADMIN, show_msg = FALSE)
return data
/datum/job_report_menu/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if(.)
return
switch(action)
if("toggle_exempt")
if(!check_rights(R_ADMIN))
message_admins("[ADMIN_LOOKUPFLW(usr)] attempted to toggle job playtime exempt status without admin rights.")
log_admin("[ADMIN_LOOKUPFLW(usr)] attempted to toggle job playtime exempt status without admin rights.")
to_chat(usr, span_danger("ERROR: Insufficient admin rights."), confidential = TRUE)
return TRUE
var/datum/admins/viewer_admin_datum = GLOB.admin_datums[usr.ckey]
if(!viewer_admin_datum)
message_admins("[ADMIN_LOOKUPFLW(usr)] attempted to toggle job playtime exempt status without admin datum for their ckey.")
log_admin("[ADMIN_LOOKUPFLW(usr)] attempted to toggle job playtime exempt status without admin datum for their ckey.")
to_chat(usr, span_danger("ERROR: Insufficient admin rights."), confidential = TRUE)
return TRUE
if(QDELETED(owner))
to_chat(usr, span_danger("ERROR: Client not found."), confidential = TRUE)
return TRUE
viewer_admin_datum.toggle_exempt_status(owner)
return TRUE
#undef JOB_REPORT_MENU_FAIL_REASON_TRACKING_DISABLED
#undef JOB_REPORT_MENU_FAIL_REASON_NO_RECORDS
@@ -694,16 +694,20 @@
/datum/reagent/flightpotion/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1)
if(iscarbon(M) && M.stat != DEAD)
if(!ishumanbasic(M) || reac_volume < 5) // implying xenohumans are holy
var/mob/living/carbon/C = M
if(reac_volume < 5)
if(method == INGEST && show_message)
to_chat(M, "<span class='notice'><i>You feel nothing but a terrible aftertaste.</i></span>")
to_chat(C, "<span class='notice'><i>You feel nothing but a terrible aftertaste.</i></span>")
return ..()
to_chat(M, "<span class='userdanger'>A terrible pain travels down your back as wings burst out!</span>")
M.set_species(/datum/species/angel)
playsound(M.loc, 'sound/items/poster_ripped.ogg', 50, 1, -1)
M.adjustBruteLoss(20)
M.emote("scream")
var/has_wings = (C.dna.species.mutant_bodyparts["deco_wings"] && C.dna.features["deco_wings"] != "None" || C.dna.species.mutant_bodyparts["insect_wings"] && C.dna.features["insect_wings"] != "None")
var/has_functional_wings = (C.dna.species.mutant_bodyparts["wings"] != null)
to_chat(C, "<span class='userdanger'>A terrible pain travels down your back as [has_wings || has_functional_wings ? "your wings transform" : "wings burst out"]!</span>")
C.dna.species.GiveSpeciesFlight(C, has_functional_wings ? TRUE : FALSE) //give them the full list of wing choices if this is their second flight potion
to_chat(C, "<span class='notice'>You feel blessed!</span>")
ADD_TRAIT(C, TRAIT_HOLY, SPECIES_TRAIT) //implying anyone is truly holy in a setting where people throw tantrums when things aren't violent
playsound(C.loc, 'sound/items/poster_ripped.ogg', 50, TRUE, -1)
C.adjustBruteLoss(20)
C.emote("scream")
..()
@@ -1,4 +1,8 @@
//Angel Wings
//Functional Wings
/datum/sprite_accessory/wings
icon = 'icons/mob/wings_functional.dmi'
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
/datum/sprite_accessory/wings/none
name = "None"
@@ -9,23 +13,12 @@
return (!H.dna.features["wings"] || H.dna.features["wings"] == "None" || (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception))))
/datum/sprite_accessory/wings_open
icon = 'icons/mob/wings.dmi'
icon = 'icons/mob/wings_functional.dmi'
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
/datum/sprite_accessory/wings_open/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
return (H.wear_suit && (H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)) || H.dna.species.mutant_bodyparts["wings"])
/datum/sprite_accessory/wings_open/angel
name = "Angel"
icon_state = "angel"
color_src = 0
dimension_x = 46
center = TRUE
dimension_y = 34
/datum/sprite_accessory/wings
icon = 'icons/mob/wings.dmi'
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
/datum/sprite_accessory/wings/angel
name = "Angel"
@@ -36,6 +29,114 @@
dimension_y = 34
locked = TRUE
/datum/sprite_accessory/wings_open/angel
name = "Angel"
icon_state = "angel"
color_src = 0
dimension_x = 46
center = TRUE
dimension_y = 34
/datum/sprite_accessory/wings/dragon
name = "Dragon"
icon_state = "dragon"
dimension_x = 96
center = TRUE
dimension_y = 32
locked = TRUE
/datum/sprite_accessory/wings_open/dragon
name = "Dragon"
icon_state = "dragon"
dimension_x = 96
center = TRUE
dimension_y = 32
/datum/sprite_accessory/wings/megamoth
name = "Megamoth"
icon_state = "megamoth"
color_src = FALSE
dimension_x = 96
center = TRUE
dimension_y = 32
locked = TRUE
/datum/sprite_accessory/wings_open/megamoth
name = "Megamoth"
icon_state = "megamoth"
color_src = FALSE
dimension_x = 96
center = TRUE
dimension_y = 32
/datum/sprite_accessory/wings/mothra
name = "Mothra"
icon_state = "mothra"
color_src = FALSE
dimension_x = 96
center = TRUE
dimension_y = 32
locked = TRUE
/datum/sprite_accessory/wings_open/mothra
name = "Mothra"
icon_state = "mothra"
color_src = FALSE
dimension_x = 96
center = TRUE
dimension_y = 32
/datum/sprite_accessory/wings/skeleton
name = "Skeleton"
icon_state = "skele"
color_src = FALSE
dimension_x = 96
center = TRUE
dimension_y = 32
locked = TRUE
/datum/sprite_accessory/wings_open/skeleton
name = "Skeleton"
icon_state = "skele"
color_src = FALSE
dimension_x = 96
center = TRUE
dimension_y = 32
/datum/sprite_accessory/wings/robotic
name = "Robotic"
icon_state = "robotic"
color_src = FALSE
dimension_x = 96
center = TRUE
dimension_y = 32
locked = TRUE
/datum/sprite_accessory/wings_open/robotic
name = "Robotic"
icon_state = "robotic"
color_src = FALSE
dimension_x = 96
center = TRUE
dimension_y = 32
/datum/sprite_accessory/wings/fly
name = "Fly"
icon_state = "fly"
color_src = FALSE
dimension_x = 96
center = TRUE
dimension_y = 32
locked = TRUE
/datum/sprite_accessory/wings_open/fly
name = "Fly"
icon_state = "fly"
color_src = FALSE
dimension_x = 96
center = TRUE
dimension_y = 32
// Decorative wings
/datum/sprite_accessory/deco_wings
@@ -43,6 +144,10 @@
color_src = WINGCOLOR
mutant_part_string = "insect_wings"
relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
var/list/upgrade_to = list() //What the wings change to if the mob consumes a flight potion or gains true wings through other means. If it's an empty list, it will pick the species alternative instead.
/datum/sprite_accessory/deco_wings/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
return (H.dna.features["wings"] != "None") //true wings will override decorative wings
/datum/sprite_accessory/deco_wings/none
name = "None"
@@ -57,162 +162,201 @@
center = TRUE
dimension_y = 34
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
upgrade_to = SPECIES_WINGS_ANGEL //obviously
//nonmoth wings
/datum/sprite_accessory/deco_wings/bat
name = "Bat"
icon_state = "bat"
upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/bee
name = "Bee"
icon_state = "bee"
upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/deco_wings/bee2
name = "Small Bee"
icon_state = "beewings"
upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/deco_wings/dragon
name = "Dragon"
icon_state = "dragon"
upgrade_to = SPECIES_WINGS_DRAGON //lol
/datum/sprite_accessory/deco_wings/dragonfly
name = "Dragonfly"
icon_state = "dragonfly"
upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/deco_wings/fairy
name = "Fairy"
icon_state = "fairy"
upgrade_to = SPECIES_WINGS_INSECT //rip people's sparkly wings until someone sprites in some huge fairy wings or something
/datum/sprite_accessory/deco_wings/featheredwing
name = "Feathery"
icon_state = "feathery"
upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/featheredwingmedium
name = "Medium Feathered"
icon_state = "feathered3"
upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/featheredwinglarge
name = "Large Feathered"
icon_state = "feathered2"
upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/harpywings
name = "Harpy"
icon_state = "harpywings"
upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/deco_wings/roboticwing
name = "Robotic"
icon_state = "drago"
upgrade_to = SPECIES_WINGS_ROBOT
/datum/sprite_accessory/deco_wings/succubusblack
name = "Succubus Black"
icon_state = "succubusblack"
upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/succubuspurple
name = "Succubus Purple"
icon_state = "succubuspurple"
upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/succubusred
name = "Succubus Red"
icon_state = "succubusred"
upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/deco_wings/xenobackplate
name = "Xenomorph Backplate"
icon_state = "snagbackplate"
upgrade_to = list()
//moth wings
/datum/sprite_accessory/deco_wings/atlas
name = "Atlas"
icon_state = "atlas"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/brown
name = "Brown"
icon_state = "brown"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/deathhead
name = "Deathshead"
icon_state = "deathhead"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/featherymoth
name = "Feathery Moth Wings"
icon_state = "featherymoth"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/firewatch
name = "Firewatch"
icon_state = "firewatch"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/gothic
name = "Gothic"
icon_state = "gothic"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/jungle
name = "Jungle"
icon_state = "jungle"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/lovers
name = "Lovers"
icon_state = "lovers"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/luna
name = "Luna"
icon_state = "luna"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/monarch
name = "Monarch"
icon_state = "monarch"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/moonfly
name = "Moon Fly"
icon_state = "moonfly"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/oakworm
name = "Oak Worm"
icon_state = "oakworm"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/plain
name = "Plain"
icon_state = "plain"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/plasmafire
name = "Plasma Fire"
icon_state = "plasmafire"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/poison
name = "Poison"
icon_state = "poison"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/punished
name = "Burnt Off"
icon_state = "punished"
upgrade_to = SPECIES_WINGS_MOTH //through TG code moth wings aren't meant to get upgraded if they're burnt off but...
/datum/sprite_accessory/deco_wings/ragged
name = "Ragged"
icon_state = "ragged"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/reddish
name = "Reddish"
icon_state = "redish"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/rosy
name = "Rosy"
icon_state = "rosy"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/royal
name = "Royal"
icon_state = "royal"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/snow
name = "Snow"
icon_state = "snow"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/whitefly
name = "White Fly"
icon_state = "whitefly"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/deco_wings/witchwing
name = "Witch Wing"
icon_state = "witchwing"
upgrade_to = SPECIES_WINGS_MOTH
//INSECT WINGS
@@ -220,67 +364,86 @@
icon = 'icons/mob/wings.dmi'
color_src = WINGCOLOR
relevant_layers = list(BODY_BEHIND_LAYER, BODY_FRONT_LAYER)
var/list/upgrade_to = list()
/datum/sprite_accessory/insect_wings/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
return (H.dna.features["wings"] != "None") //true wings will override decorative wings
//non insect wings
/datum/sprite_accessory/deco_wings/bat
/datum/sprite_accessory/insect_wings/bat
name = "Bat"
icon_state = "bat"
upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/bee
name = "Bee"
icon_state = "bee"
upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/bee2
name = "Small Bee"
icon_state = "beewings"
upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/dragon
name = "Dragon"
icon_state = "dragon"
upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/dragonfly
name = "Dragonfly"
icon_state = "dragonfly"
upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/fairy
name = "Fairy"
icon_state = "fairy"
upgrade_to = SPECIES_WINGS_INSECT
/datum/sprite_accessory/insect_wings/featheredwing
name = "Feathery"
icon_state = "feathery"
upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/featheredwingmedium
name = "Medium Feathered"
icon_state = "feathered3"
upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/featheredwinglarge
name = "Large Feathered"
icon_state = "feathered2"
upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/harpywings
name = "Harpy"
icon_state = "harpywings"
upgrade_to = SPECIES_WINGS_ANGEL
/datum/sprite_accessory/insect_wings/roboticwing
name = "Robotic"
icon_state = "drago"
upgrade_to = SPECIES_WINGS_ROBOT
/datum/sprite_accessory/insect_wings/succubusblack
name = "Succubus Black"
icon_state = "succubusblack"
upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/succubuspurple
name = "Succubus Purple"
icon_state = "succubuspurple"
upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/succubusred
name = "Succubus Red"
icon_state = "succubusred"
upgrade_to = SPECIES_WINGS_DRAGON
/datum/sprite_accessory/insect_wings/xenobackplate
name = "Xenomorph Backplate"
icon_state = "snagbackplate"
upgrade_to = list()
//moth wings
@@ -288,98 +451,122 @@
name = "None"
icon_state = "none"
relevant_layers = null
upgrade_to = list()
/datum/sprite_accessory/insect_wings/atlas
name = "Atlas"
icon_state = "atlas"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/brown
name = "Brown"
icon_state = "brown"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/deathhead
name = "Deathshead"
icon_state = "deathhead"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/featherymoth
name = "Feathery Moth Wings"
icon_state = "featherymoth"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/firewatch
name = "Firewatch"
icon_state = "firewatch"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/gothic
name = "Gothic"
icon_state = "gothic"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/jungle
name = "Jungle"
icon_state = "jungle"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/lovers
name = "Lovers"
icon_state = "lovers"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/luna
name = "Luna"
icon_state = "luna"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/monarch
name = "Monarch"
icon_state = "monarch"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/moonfly
name = "Moon Fly"
icon_state = "moonfly"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/oakworm
name = "Oak Worm"
icon_state = "oakworm"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/plain
name = "Plain"
icon_state = "plain"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/plasmafire
name = "Plasma Fire"
icon_state = "plasmafire"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/poison
name = "Poison"
icon_state = "poison"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/punished
name = "Burnt Off"
icon_state = "punished"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/ragged
name = "Ragged"
icon_state = "ragged"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/reddish
name = "Reddish"
icon_state = "redish"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/rosy
name = "Rosy"
icon_state = "rosy"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/royal
name = "Royal"
icon_state = "royal"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/snow
name = "Snow"
icon_state = "snow"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/whitefly
name = "White Fly"
icon_state = "whitefly"
upgrade_to = SPECIES_WINGS_MOTH
/datum/sprite_accessory/insect_wings/witchwing
name = "Witch Wing"
icon_state = "witchwing"
upgrade_to = SPECIES_WINGS_MOTH
//insect markings
/datum/sprite_accessory/insect_markings // Extra markings for insects ported from tg.
@@ -453,9 +640,11 @@
/datum/sprite_accessory/deco_wings/eyestalks
name = "gazer eyestalks"
icon_state = "eyestalks"
upgrade_to = list() //and suddenly flight potions become a lot more awkward when they gouge your tentacle eyes out.
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
/datum/sprite_accessory/insect_wings/eyestalks
name = "gazer eyestalks"
icon_state = "eyestalks"
upgrade_to = list()
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
@@ -948,9 +948,6 @@
/mob/living/carbon/human/species/android
race = /datum/species/android
/mob/living/carbon/human/species/angel
race = /datum/species/angel
/mob/living/carbon/human/species/corporate
race = /datum/species/corporate
+162 -3
View File
@@ -142,6 +142,15 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
/// A path to an outfit that is important for species life e.g. plasmaman outfit
var/datum/outfit/outfit_important_for_life
///Is this species a flying species? Used as an easy check for some things
var/flying_species = FALSE
///The actual flying ability given to flying species
var/datum/action/innate/flight/fly
///Current wings icon
var/wings_icon = "Angel"
//Dictates which wing icons are allowed for a given species. If count is >1 a radial menu is used to choose between all icons in list
var/list/wings_icons = SPECIES_WINGS_ANGEL
///Species-only traits. Can be found in [code/__DEFINES/DNA.dm]
var/list/species_traits = list(HAS_FLESH,HAS_BONE) //by default they can scar and have bones/flesh unless set to something else
///Generic traits tied to having the species.
@@ -495,6 +504,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
for(var/datum/disease/A in C.diseases)
A.cure(FALSE)
if(flying_species && isnull(fly))
fly = new
fly.Grant(C)
if(ishuman(C))
var/mob/living/carbon/human/H = C
if(NOGENITALS in H.dna.species.species_traits)
@@ -569,6 +582,16 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
if(F)
qdel(F)
if(flying_species)
if(C.movement_type & FLYING)
ToggleFlight(C)
fly.Remove(C)
QDEL_NULL(fly)
if(C.dna && C.dna.species && (C.dna.features["wings"] == wings_icon))
if("wings" in C.dna.species.mutant_bodyparts)
C.dna.species.mutant_bodyparts -= "wings"
C.dna.features["wings"] = "None"
C.update_body()
if(ROBOTIC_LIMBS in species_traits)
for(var/obj/item/bodypart/B in C.bodyparts)
@@ -1186,6 +1209,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
return move_trail */
/datum/species/proc/spec_life(mob/living/carbon/human/H)
if(flying_species) //turns off flight automatically if they can't.
HandleFlight(H)
if(HAS_TRAIT(H, TRAIT_NOBREATH))
H.setOxyLoss(0)
H.losebreath = 0
@@ -2388,10 +2413,13 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
return
////////////
//Stun//
// Stun //
////////////
/datum/species/proc/spec_stun(mob/living/carbon/human/H,amount)
if(flying_species && H.movement_type & FLYING)
ToggleFlight(H,0)
flyslip(H)
if(H)
stop_wagging_tail(H)
. = stunmod * H.physiology.stun_mod * amount
@@ -2401,10 +2429,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
//////////////
/datum/species/proc/space_move(mob/living/carbon/human/H)
return 0
if(H.movement_type & FLYING)
return TRUE
return FALSE
/datum/species/proc/negates_gravity(mob/living/carbon/human/H)
return 0
if(H.movement_type & FLYING)
return TRUE
return FALSE
////////////////
//Tail Wagging//
@@ -2438,3 +2470,130 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
mutant_bodyparts["spines"] = mutant_bodyparts["waggingspines"]
mutant_bodyparts -= "waggingspines"
H.update_body()
///////////////
//FLIGHT SHIT//
///////////////
/datum/species/proc/GiveSpeciesFlight(mob/living/carbon/human/H, all_wings = FALSE)
if(flying_species) //grant them the choice of all wings if they don't have them
all_wings = TRUE
flying_species = TRUE
//CITADEL CHANGE: check if they already have wings, and "evolve" them based off of the wings they have. If they have none, use their species wings basis.
var/list/wingslist
if(all_wings) //give them the full list of wing choices to pick from, typically if they drink a second flight potion
wingslist = SPECIES_WINGS_ALL
else
//why the fuck do we have two different wing types anyways? they're literally almost both using the same wing shit too.
var/datum/sprite_accessory/deco_wings/D = GLOB.deco_wings_list[H.dna.features["deco_wings"]]
var/datum/sprite_accessory/insect_wings/I = GLOB.insect_wings_list[H.dna.features["insect_wings"]]
if(mutant_bodyparts["deco_wings"] && D?.upgrade_to.len) //species check to see if they were allowed to have deco wings
wingslist = D.upgrade_to
else if(mutant_bodyparts["insect_wings"] && I?.upgrade_to.len) //species check to see if they were allowed to have insect wings
wingslist = I.upgrade_to
else
wingslist = wings_icons
if(wingslist.len > 1)
if(!H.client)
wings_icon = pick(wingslist)
else
var/list/wings = list()
for(var/W in wingslist)
var/datum/sprite_accessory/S = GLOB.wings_list[W] //Gets the datum for every wing this species has, then prompts user with a radial menu
var/image/img = image(icon = 'icons/mob/wings_functional.dmi', icon_state = "m_wingsopen_[S.icon_state]_BEHIND") //Process the HUD elements
img.transform *= 0.5
img.pixel_x = -32
if(wings[S.name])
stack_trace("Different wing types with repeated names. Please fix as this may cause issues.")
else
wings[S.name] = img
wings_icon = show_radial_menu(H, H, wings, tooltips = TRUE)
if(!wings_icon)
wings_icon = pick(wings_icons)
else
wings_icon = wingslist[1]
if(isnull(fly))
fly = new
fly.Grant(H)
if(H.dna.features["wings"] != wings_icon)
mutant_bodyparts["wings"] = wings_icon
H.dna.features["wings"] = wings_icon
H.update_body()
/datum/species/proc/HandleFlight(mob/living/carbon/human/H)
if(H.movement_type & FLYING)
if(!CanFly(H))
ToggleFlight(H)
return FALSE
return TRUE
else
return FALSE
/datum/species/proc/CanFly(mob/living/carbon/human/H)
if(H.stat || !(H.mobility_flags & MOBILITY_STAND))
return FALSE
if(H.wear_suit && ((H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)))) //Jumpsuits have tail holes, so it makes sense they have wing holes too
to_chat(H, "<span class='warning'>Your suit blocks your wings from extending!</span>")
return FALSE
var/turf/T = get_turf(H)
if(!T)
return FALSE
var/datum/gas_mixture/environment = T.return_air()
if(environment && !(environment.return_pressure() > 30))
to_chat(H, "<span class='warning'>The atmosphere is too thin for you to fly!</span>")
return FALSE
else
return TRUE
/datum/species/proc/flyslip(mob/living/carbon/human/H)
var/obj/buckled_obj
if(H.buckled)
buckled_obj = H.buckled
to_chat(H, "<span class='notice'>Your wings spazz out and launch you!</span>")
playsound(H.loc, 'sound/misc/slip.ogg', 50, TRUE, -3)
for(var/obj/item/I in H.held_items)
H.accident(I)
var/olddir = H.dir
H.stop_pulling()
if(buckled_obj)
buckled_obj.unbuckle_mob(H)
step(buckled_obj, olddir)
else
new /datum/forced_movement(H, get_ranged_target_turf(H, olddir, 4), 1, FALSE, CALLBACK(H, /mob/living/carbon/.proc/spin, 1, 1))
return TRUE
//UNSAFE PROC, should only be called through the Activate or other sources that check for CanFly
/datum/species/proc/ToggleFlight(mob/living/carbon/human/H)
if(!(H.movement_type & FLYING) && CanFly(H))
stunmod *= 2
speedmod -= 0.35
H.setMovetype(H.movement_type | FLYING)
override_float = TRUE
H.pass_flags |= PASSTABLE
H.OpenWings()
H.update_mobility()
else
stunmod *= 0.5
speedmod += 0.35
H.setMovetype(H.movement_type & ~FLYING)
override_float = FALSE
H.pass_flags &= ~PASSTABLE
H.CloseWings()
/datum/action/innate/flight
name = "Toggle Flight"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_STUN
icon_icon = 'icons/mob/actions/actions_items.dmi'
button_icon_state = "flight"
/datum/action/innate/flight/Activate()
var/mob/living/carbon/human/H = owner
var/datum/species/S = H.dna.species
if(S.CanFly(H))
S.ToggleFlight(H)
if(!(H.movement_type & FLYING))
to_chat(H, "<span class='notice'>You settle gently back onto the ground...</span>")
else
to_chat(H, "<span class='notice'>You beat your wings and begin to hover gently above the ground...</span>")
H.set_resting(FALSE, TRUE)
@@ -12,3 +12,4 @@
species_language_holder = /datum/language_holder/synthetic
limbs_id = SPECIES_SYNTH
species_category = SPECIES_CATEGORY_ROBOT
wings_icons = SPECIES_WINGS_ROBOT
@@ -1,145 +0,0 @@
/datum/species/angel
name = "Angel"
id = SPECIES_ANGEL
default_color = "FFFFFF"
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,HAS_FLESH,HAS_BONE)
mutant_bodyparts = list("tail_human" = "None", "ears" = "None", "wings" = "Angel")
use_skintones = USE_SKINTONES_GRAYSCALE_CUSTOM
no_equip = list(SLOT_BACK)
blacklisted = 1
limbs_id = SPECIES_HUMAN
skinned_type = /obj/item/stack/sheet/animalhide/human
species_category = SPECIES_CATEGORY_BASIC //they're a kind of human
var/datum/action/innate/flight/fly
/datum/species/angel/on_species_gain(mob/living/carbon/human/H, datum/species/old_species)
..()
if(H.dna && H.dna.species && (H.dna.features["wings"] != "Angel"))
if(!H.dna.species.mutant_bodyparts["wings"])
H.dna.species.mutant_bodyparts["wings"] = "Angel"
H.dna.features["wings"] = "Angel"
H.update_body()
if(ishuman(H) && !fly)
fly = new
fly.Grant(H)
ADD_TRAIT(H, TRAIT_HOLY, SPECIES_TRAIT)
/datum/species/angel/on_species_loss(mob/living/carbon/human/H)
if(fly)
fly.Remove(H)
if(H.movement_type & FLYING)
H.setMovetype(H.movement_type & ~FLYING)
ToggleFlight(H,0)
if(H.dna && H.dna.species && (H.dna.features["wings"] == "Angel"))
if(H.dna.species.mutant_bodyparts["wings"])
H.dna.species.mutant_bodyparts -= "wings"
H.dna.features["wings"] = "None"
H.update_body()
REMOVE_TRAIT(H, TRAIT_HOLY, SPECIES_TRAIT)
..()
/datum/species/angel/spec_life(mob/living/carbon/human/H)
HandleFlight(H)
/datum/species/angel/proc/HandleFlight(mob/living/carbon/human/H)
if(H.movement_type & FLYING)
if(!CanFly(H))
ToggleFlight(H,0)
return 0
return 1
else
return 0
/datum/species/angel/proc/CanFly(mob/living/carbon/human/H)
if(!CHECK_MOBILITY(H, MOBILITY_MOVE))
return FALSE
if(H.wear_suit && ((H.wear_suit.flags_inv & HIDEJUMPSUIT) && (!H.wear_suit.species_exception || !is_type_in_list(src, H.wear_suit.species_exception)))) //Jumpsuits have tail holes, so it makes sense they have wing holes too
to_chat(H, "Your suit blocks your wings from extending!")
return FALSE
var/turf/T = get_turf(H)
if(!T)
return FALSE
var/datum/gas_mixture/environment = T.return_air()
if(environment && !(environment.return_pressure() > 30))
to_chat(H, "<span class='warning'>The atmosphere is too thin for you to fly!</span>")
return FALSE
return TRUE
/datum/action/innate/flight
name = "Toggle Flight"
check_flags = AB_CHECK_CONSCIOUS|AB_CHECK_STUN
icon_icon = 'icons/mob/actions/actions_items.dmi'
button_icon_state = "flight"
/datum/action/innate/flight/Activate()
var/mob/living/carbon/human/H = owner
var/datum/species/angel/A = H.dna.species
if(A.CanFly(H))
if(H.movement_type & FLYING)
to_chat(H, "<span class='notice'>You settle gently back onto the ground...</span>")
A.ToggleFlight(H,0)
H.update_mobility()
else
to_chat(H, "<span class='notice'>You beat your wings and begin to hover gently above the ground...</span>")
H.set_resting(FALSE, TRUE)
A.ToggleFlight(H,1)
H.update_mobility()
/datum/species/angel/proc/flyslip(mob/living/carbon/human/H)
var/obj/buckled_obj
if(H.buckled)
buckled_obj = H.buckled
to_chat(H, "<span class='notice'>Your wings spazz out and launch you!</span>")
playsound(H.loc, 'sound/misc/slip.ogg', 50, 1, -3)
for(var/obj/item/I in H.held_items)
H.accident(I)
var/olddir = H.dir
H.stop_pulling()
if(buckled_obj)
buckled_obj.unbuckle_mob(H)
step(buckled_obj, olddir)
else
for(var/i=1, i<5, i++)
spawn (i)
step(H, olddir)
H.spin(1,1)
return 1
/datum/species/angel/spec_stun(mob/living/carbon/human/H,amount)
if(H.movement_type & FLYING)
ToggleFlight(H,0)
flyslip(H)
. = ..()
/datum/species/angel/negates_gravity(mob/living/carbon/human/H)
if(H.movement_type & FLYING)
return 1
/datum/species/angel/space_move(mob/living/carbon/human/H)
if(H.movement_type & FLYING)
return 1
/datum/species/angel/proc/ToggleFlight(mob/living/carbon/human/H,flight)
if(flight && CanFly(H))
stunmod = 2
speedmod = -0.1
H.setMovetype(H.movement_type | FLYING)
override_float = TRUE
H.pass_flags |= PASSTABLE
H.OpenWings()
else
stunmod = 1
speedmod = 0
H.setMovetype(H.movement_type & ~FLYING)
override_float = FALSE
H.pass_flags &= ~PASSTABLE
H.CloseWings()
update_species_slowdown(H)
@@ -57,4 +57,5 @@
exotic_bloodtype = "S"
exotic_blood_color = BLOOD_COLOR_OIL
allowed_limb_ids = list("mammal","aquatic","avian", "human")
species_category = "robot"
species_category = SPECIES_CATEGORY_ROBOT
wings_icons = SPECIES_WINGS_ROBOT
@@ -21,6 +21,7 @@
var/web_cooldown = 200
var/web_ready = TRUE
var/spinner_rate = 25
wings_icons = SPECIES_WINGS_MOTH //Arachnids' phylum is arthropods, which include butterflies. Might as well hit them with moth wings.
/datum/species/arachnid/random_name(gender,unique,lastname)
if(unique)
@@ -19,6 +19,7 @@
tail_type = "mam_tail"
wagging_type = "mam_waggingtail"
species_category = SPECIES_CATEGORY_INSECT
wings_icons = SPECIES_WINGS_INSECT
allowed_limb_ids = list("insect","apid","moth","moth_not_greyscale")
@@ -19,3 +19,4 @@
sexes = 0
gib_types = /obj/effect/gibspawner/robot
species_category = SPECIES_CATEGORY_ROBOT
wings_icons = SPECIES_WINGS_ROBOT
@@ -16,6 +16,7 @@
has_field_of_vision = FALSE //Too much of a trouble, their vision is already bound to their severed head.
species_category = SPECIES_CATEGORY_UNDEAD
var/pumpkin = FALSE
wings_icons = SPECIES_WINGS_SKELETAL //seems suitable for an undead.
var/obj/item/dullahan_relay/myhead
@@ -13,6 +13,7 @@
exotic_bloodtype = "BUG"
exotic_blood_color = BLOOD_COLOR_BUG
species_category = SPECIES_CATEGORY_INSECT
wings_icons = SPECIES_WINGS_INSECT
/datum/species/fly/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H)
if(istype(chem, /datum/reagent/toxin/pestkiller))
@@ -35,6 +35,7 @@
exotic_bloodtype = "S"
exotic_blood_color = BLOOD_COLOR_OIL
species_category = SPECIES_CATEGORY_ROBOT
wings_icons = SPECIES_WINGS_ROBOT
var/datum/action/innate/monitor_change/screen
@@ -29,6 +29,7 @@
tail_type = "mam_tail"
wagging_type = "mam_waggingtail"
species_category = SPECIES_CATEGORY_JELLY
wings_icons = SPECIES_WINGS_JELLY
ass_image = 'icons/ass/assslime.png'
/datum/species/jelly/on_species_loss(mob/living/carbon/C)
@@ -69,6 +70,7 @@
to_chat(H, "<span class='danger'>You feel drained!</span>")
if(H.blood_volume < (BLOOD_VOLUME_BAD*H.blood_ratio))
Cannibalize_Body(H)
..()
/datum/species/jelly/proc/Cannibalize_Body(mob/living/carbon/human/H)
var/list/limbs_to_consume = list(BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG) - H.get_missing_limbs()
@@ -29,6 +29,7 @@
tail_type = "tail_lizard"
wagging_type = "waggingtail_lizard"
species_category = SPECIES_CATEGORY_LIZARD
wings_icons = SPECIES_WINGS_DRAGON
ass_image = 'icons/ass/asslizard.png'
@@ -23,6 +23,7 @@
outfit_important_for_life = /datum/outfit/plasmaman
species_category = SPECIES_CATEGORY_SKELETON
wings_icons = SPECIES_WINGS_SKELETAL
ass_image = 'icons/ass/assplasma.png'
@@ -16,6 +16,7 @@
mutanteyes = /obj/item/organ/eyes/night_vision
species_category = SPECIES_CATEGORY_SHADOW
wings_icons = SPECIES_WINGS_SKELETAL //not sure what's more spooky for these guys - skeleton or dragon?
/datum/species/shadow/on_species_gain(mob/living/carbon/C, datum/species/old_species)
. = ..()
@@ -16,6 +16,7 @@
burnmod = 1.25
species_category = SPECIES_CATEGORY_SKELETON //they have their own category that's disassociated from undead, paired with plasmapeople
wings_icons = SPECIES_WINGS_SKELETAL
/datum/species/skeleton/New()
if(SSevents.holidays && SSevents.holidays[HALLOWEEN]) //skeletons are stronger during the spooky season!
@@ -35,3 +35,4 @@
tail_type = "mam_tail"
wagging_type = "mam_waggingtail"
species_category = SPECIES_CATEGORY_ROBOT
wings_icons = SPECIES_WINGS_ROBOT
@@ -18,6 +18,7 @@
var/datum/species/fake_species = null //a species to do most of our work for us, unless we're damaged
species_language_holder = /datum/language_holder/synthetic
species_category = SPECIES_CATEGORY_ROBOT
wings_icons = SPECIES_WINGS_ROBOT
/datum/species/synth/military
name = "Military Synth"
@@ -15,8 +15,10 @@
skinned_type = /obj/item/stack/sheet/animalhide/human
var/info_text = "You are a <span class='danger'>Vampire</span>. You will slowly but constantly lose blood if outside of a coffin. If inside a coffin, you will slowly heal. You may gain more blood by grabbing a live victim and using your drain ability."
species_category = SPECIES_CATEGORY_UNDEAD
wings_icons = SPECIES_WINGS_DRAGON //closest to "bat" wings.
var/batform_enabled = TRUE
/datum/species/vampire/roundstart
id = SPECIES_VAMPIRE_WEAK
batform_enabled = FALSE
@@ -17,3 +17,4 @@
disliked_food = JUNKFOOD
liked_food = GROSS | MEAT
species_category = SPECIES_CATEGORY_ALIEN
wings_icons = SPECIES_WINGS_DRAGON //most depictions of xenomorphs with wings are closest to this.
@@ -16,6 +16,7 @@
disliked_food = NONE
liked_food = GROSS | MEAT | RAW
species_category = SPECIES_CATEGORY_UNDEAD
wings_icons = SPECIES_WINGS_SKELETAL //eh.
/datum/species/zombie/notspaceproof
id = "notspaceproofzombie"
+1
View File
@@ -144,6 +144,7 @@
newletter = "nglu"
if(5)
newletter = "glor"
else
. += newletter
return sanitize(.)
@@ -347,10 +347,10 @@
var/dir2 = 0
var/dir3 = 0
switch(direction)
if(NORTH||SOUTH)
if(NORTH, SOUTH)
dir2 = 4
dir3 = 8
if(EAST||WEST)
if(EAST, WEST)
dir2 = 1
dir3 = 2
var/turf/T2 = T
@@ -145,6 +145,8 @@
if(7)
new /obj/item/clothing/glasses/sunglasses(src)
new /obj/item/clothing/mask/cigarette/rollie(src)
else
return
/obj/structure/closet/crate/grave/open(mob/living/user, obj/item/S)
if(!opened)
+8 -7
View File
@@ -41,13 +41,14 @@
target.cure_all_traumas(TRAUMA_RESILIENCE_LOBOTOMY)
if(target.mind && target.mind.has_antag_datum(/datum/antagonist/brainwashed))
target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
switch(rand(1,6))//Now let's see what hopefully-not-important part of the brain we cut off
if(1)
target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY)
if(2)
target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY)
if(3)
target.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_SURGERY)
if(prob(50))
switch(rand(1,3))//Now let's see what hopefully-not-important part of the brain we cut off
if(1)
target.gain_trauma_type(BRAIN_TRAUMA_MILD, TRAUMA_RESILIENCE_SURGERY)
if(2)
target.gain_trauma_type(BRAIN_TRAUMA_SEVERE, TRAUMA_RESILIENCE_SURGERY)
if(3)
target.gain_trauma_type(BRAIN_TRAUMA_SPECIAL, TRAUMA_RESILIENCE_SURGERY)
// you're cutting off a part of the brain.w
var/obj/item/organ/brain/B = target.getorganslot(ORGAN_SLOT_BRAIN)
B.applyOrganDamage(50, 100)
+1
View File
@@ -469,6 +469,7 @@ GLOBAL_LIST_EMPTY(vending_products)
freebie(user, 2)
if(16 to 25)
freebie(user, 1)
if(26 to 75)
if(76 to 90)
tilt(user)
if(91 to 100)
@@ -0,0 +1,5 @@
author: "BlueWildrose and tralezab, Wjohnston, Mey Ha Zah, ArcaneDefense, Jack7D1, Papaporo, Sheits & Mqiib from TG and Yog"
delete-after: True
changes:
- rscadd: "TG wing port - All species can now use flight potions and grow wings. Your wing sprite will be based off of what wings you have on your character, or otherwise what species you are if you have no wings."
- bugfix: "Jellypeople did not call the species parent proc on spec_life. Fixed."
@@ -0,0 +1,36 @@
author: "TripleShades"
delete-after: True
changes:
- rscadd: "[Omega] Gateway shutter button"
- rscadd: "[Omega] Signs to the airlocks that lead to space that say SPACE"
- rscadd: "[Omega] Air Alarm for the Turbine itself"
- rscadd: "[Omega] SMES Unit for the Turbine itself"
- rscadd: "[Omega] Firelock to Robotics airlock"
- rscadd: "[Omega] Captain's Office now has a hand teleporter and medal box"
- rscadd: "[Omega] Screwdriver to Chemistry"
- rscadd: "[Omega] Space Cleaner bottle to Medbay"
- rscadd: "[Omega] Limb Grower and Spare Limb Crate to Surgery"
- rscadd: "[Omega] Kinkmate in Dorms"
- rscadd: "[Omega] Lightbulb fixture to Secure Tech Storage"
- rscadd: "[Omega] Armsky is now in the Armoury"
- rscdel: "[Omega] Extra automated announcement machine"
- rscdel: "[Omega] Wall inside of southwest Solar Array window"
- rscdel: "[Omega] Wall inside library maint airlock"
- rscdel: "[Omega] Duplicate Robotics airlock
tweak: [Omega] HoS gun now spawns in HoS locker instead of Captain's locker
tweak: [Omega] Both Solar Arrays now have more windows
tweak: [Omega] PACMAN moved out from behind a Command airlock in Engineering
tweak: [Omega] A few cameras so that they're not sitting improperly on windows
tweak: [Omega] Medbay Surgery now has a surgical duffel instead of strewn about tools
tweak: [Omega] Security Cell 1 is now properly named and has a bed instead of a chair
tweak: [Omega] Toxins scrubber piping now goes through a wall
tweak: [Omega] Robotics trash can is now moved to the small hallway between Robotics and Toxins
tweak: [Omega] Maint Pool drain moved down a tile so it's easier to retrieve lost items"
- bugfix: "[Omega] Lawyer Office access"
- bugfix: "[Omega] Both Solar Arrays are now wired up to power the station properly"
- bugfix: "[Omega] Wire leading to the single Supermatter Emitter should now be properly connected and not diagonal"
- bugfix: "[Omega] Gateway Maint airlock access"
- bugfix: "[Omega] Toxins Launch not being connected to the main air supply"
- bugfix: "[Omega] Toxins Mix Chamber no longer starts bolted"
- bugfix: "[Omega] Missing pipe above Security leading into Perma"
- bugfix: "[Omega] Secure Tech Storage now properly has an area"
@@ -0,0 +1,4 @@
author: "Putnam3145"
delete-after: True
changes:
- bugfix: "Default features on linux auxmos compile now formatted correctly"
@@ -0,0 +1,4 @@
author: "Putnam3145"
delete-after: True
changes:
- bugfix: "reinforced plasma glass windows are buildable"
+10
View File
@@ -74,3 +74,13 @@
- refactor: Refactors give/take > offer/receive
- config: Added Families to the dynamic config
- admin: Adds admin tp Family stuff
2022-02-17:
'[Timberpoes](https://github.com/Timberpoes)':
- admin: Re-added the button to the player playtime panel that lets admins toggle
a player's job playtime exemption status.
2022-02-19:
timothyteakettle:
- rscadd: polychromic clown outfit and mask
2022-02-20:
jupyterkat:
- refactor: switched equalization method to katmos
Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 484 KiB

After

Width:  |  Height:  |  Size: 486 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 104 KiB

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 140 KiB

After

Width:  |  Height:  |  Size: 141 KiB

@@ -30,4 +30,8 @@
name = "Paper mask"
path = /obj/item/clothing/mask/paper
cost = 2
/datum/gear/mask/polychromic_clown
name = "polychromic clown wig and mask"
path = /obj/item/clothing/mask/gas/clown_hat_polychromic
restricted_roles = list("Clown")
@@ -739,3 +739,9 @@
path = /obj/item/clothing/under/rank/cargo/tech/long
subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
restricted_roles = list("Cargo Technician")
/datum/gear/uniform/clown_polychromic
name = "polychromic clown suit"
path = /obj/item/clothing/under/rank/civilian/polychromic_clown
subcategory = LOADOUT_SUBCATEGORY_UNIFORM_JOBS
restricted_roles = list("Clown")
@@ -630,19 +630,19 @@ GLOBAL_LIST_EMPTY(rain_sounds)
playchime = 1
switch(hour)
if(1 || 2)
if(1, 2)
HRimgstate = "asshouroverlay-2" //Now it is ass, mostly because someones going to kill me for the other names.
if(3)
HRimgstate = "asshouroverlay-3"
if(4 || 5)
if(4, 5)
HRimgstate = "asshouroverlay-4"
if(6)
HRimgstate = "asshouroverlay-6"
if(7 || 8)
if(7, 8)
HRimgstate = "asshouroverlay-7"
if(9)
HRimgstate = "asshouroverlay-9"
if(10 || 11)
if(10, 11)
HRimgstate = "asshouroverlay-10"
else
HRimgstate = "asshouroverlay-0" //Station time wraps to 0, and so does our hours.
-1
View File
@@ -2703,7 +2703,6 @@
#include "code\modules\mob\living\carbon\human\innate_abilities\limb_regeneration.dm"
#include "code\modules\mob\living\carbon\human\species_types\abductor.dm"
#include "code\modules\mob\living\carbon\human\species_types\android.dm"
#include "code\modules\mob\living\carbon\human\species_types\angel.dm"
#include "code\modules\mob\living\carbon\human\species_types\anthropomorph.dm"
#include "code\modules\mob\living\carbon\human\species_types\arachnid.dm"
#include "code\modules\mob\living\carbon\human\species_types\bugmen.dm"
+1 -1
View File
@@ -84,7 +84,7 @@ fi
echo "Deploying auxmos..."
git checkout "$AUXMOS_VERSION"
env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features all_reaction_hooks,explosive_decompression -- -C target-cpu=native
env PKG_CONFIG_ALLOW_CROSS=1 ~/.cargo/bin/cargo rustc --release --target=i686-unknown-linux-gnu --features "all_reaction_hooks katmos" -- -C target-cpu=native
mv -f target/i686-unknown-linux-gnu/release/libauxmos.so "$1/libauxmos.so"
cd ..