Merge branch 'master' of https://github.com/Citadel-Station-13/Citadel-Station-13
@@ -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.
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
@@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 484 KiB After Width: | Height: | Size: 486 KiB |
|
Before Width: | Height: | Size: 104 KiB After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 80 KiB |
|
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
|
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.
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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 ..
|
||||
|
||||
|
||||