Skip to content

Commit

Permalink
Merge pull request #456 from Glyphee/floran-wants-to-stab
Browse files Browse the repository at this point in the history
Floran wants to stab
  • Loading branch information
dwasint authored Nov 7, 2023
2 parents 44e2db5 + 0a00db3 commit 5631779
Show file tree
Hide file tree
Showing 22 changed files with 304 additions and 5 deletions.
1 change: 1 addition & 0 deletions code/__DEFINES/DNA.dm
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,7 @@
#define ORGAN_SLOT_EXTERNAL_ANIME_HEAD "anime_head"
#define ORGAN_SLOT_EXTERNAL_ANIME_CHEST "anime_chest"
#define ORGAN_SLOT_EXTERNAL_ANIME_BOTTOM "anime_bottom"
#define ORGAN_SLOT_EXTERNAL_FLORAN_LEAVES "floran_leaves"

/// Xenomorph organ slots
#define ORGAN_SLOT_XENO_ACIDGLAND "acid_gland"
Expand Down
3 changes: 3 additions & 0 deletions code/__DEFINES/external_organs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@
#define ORGAN_COLOR_HAIR (1<<2)
///uses the parents anime color
#define ORGAN_COLOR_ANIME (1<<3)
///uses the parents mutcolor secondary
#define ORGAN_COLOR_MUTSECONDARY (1<<4)

///Tail wagging
#define WAG_ABLE (1<<0)
#define WAG_WAGGING (1<<1)
5 changes: 3 additions & 2 deletions code/__DEFINES/is_helpers.dm
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list(
#define isgolem(A) (is_species(A, /datum/species/golem))
#define islizard(A) (is_species(A, /datum/species/lizard))
#define isplasmaman(A) (is_species(A, /datum/species/plasmaman))
#define issimian(A) (is_species(A, /datum/species/simian))
#define issimian(A) (is_species(A, /datum/species/simian)) //Monkestation Addition
#define ispodperson(A) (is_species(A, /datum/species/pod))
#define isflyperson(A) (is_species(A, /datum/species/fly))
#define isjellyperson(A) (is_species(A, /datum/species/jelly))
Expand All @@ -97,7 +97,8 @@ GLOBAL_LIST_INIT(turfs_openspace, typecacheof(list(
#define isandroid(A) (is_species(A, /datum/species/android))
#define isnightmare(A) (is_species(A, /datum/species/shadow/nightmare))
#define isipc(A) (is_species(A, /datum/species/ipc))
#define isgoblin(A) (is_species(A, /datum/species/goblin))//monkestation addition
#define isgoblin(A) (is_species(A, /datum/species/goblin)) //Monkestation Addition
#define isfloran(A) (is_species(A, /datum/species/floran)) //Monkestation Addition


//More carbon mobs
Expand Down
5 changes: 3 additions & 2 deletions code/__DEFINES/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -128,8 +128,9 @@
#define SPECIES_ZOMBIE_KROKODIL "krokodil_zombie"
#define SPECIES_OOZELING "oozeling"
#define SPECIES_IPC "ipc"
#define SPECIES_SIMIAN "simian"
#define SPECIES_GOBLIN "goblin"//monkestation addition
#define SPECIES_SIMIAN "simian" //Monkestation Addition
#define SPECIES_GOBLIN "goblin" //Monkestation Addition
#define SPECIES_FLORAN "floran" //Monkestation Addition
// Like species IDs, but not specifically attached a species.
#define BODYPART_ID_ALIEN "alien"
#define BODYPART_ID_ROBOTIC "robotic"
Expand Down
1 change: 1 addition & 0 deletions code/__HELPERS/global_lists.dm
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_appendages, GLOB.arachnid_appendages_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_chelicerae, GLOB.arachnid_chelicerae_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list) //Monkestation Addition
init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list) //Monkestation Addition

//Species
for(var/spath in subtypesof(/datum/species))
Expand Down
5 changes: 4 additions & 1 deletion code/__HELPERS/mobs.dm
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,8 @@
init_sprite_accessory_subtypes(/datum/sprite_accessory/arachnid_chelicerae, GLOB.arachnid_chelicerae_list)
if(!GLOB.goblin_ears_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/goblin_ears, GLOB.goblin_ears_list)
if(!GLOB.floran_leaves_list.len)
init_sprite_accessory_subtypes(/datum/sprite_accessory/floran_leaves, GLOB.floran_leaves_list)
//Monkestation Addition End

//For now we will always return none for tail_human and ears. | "For now" he says.
Expand Down Expand Up @@ -142,7 +144,8 @@
"arachnid_appendages" = pick(GLOB.arachnid_appendages_list), //Monkestation Addition
"arachnid_chelicerae" = pick(GLOB.arachnid_chelicerae_list), //Monkestation Addition
"animecolor" = "#[pick("7F","FF")][pick("7F","FF")][pick("7F","FF")]", //Monkestation Addition
"goblin_ears" = pick(GLOB.goblin_ears_list) //Monkestation Addition
"goblin_ears" = pick(GLOB.goblin_ears_list), //Monkestation Addition
"floran_leaves" = pick(GLOB.floran_leaves_list), //Monkestation Addition
))

/proc/random_hairstyle(gender)
Expand Down
2 changes: 2 additions & 0 deletions code/_globalvars/lists/flavor_misc.dm
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ GLOBAL_LIST_EMPTY(anime_bottom_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(arachnid_appendages_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(arachnid_chelicerae_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(goblin_ears_list) //Monkestation Addition
GLOBAL_LIST_EMPTY(floran_leaves_list) //Monkestation Addition

GLOBAL_LIST_INIT(color_list_ethereal, list(
"Blue" = "#3399ff",
Expand All @@ -58,6 +59,7 @@ GLOBAL_LIST_INIT(color_list_ethereal, list(
"Cyan Blue" = "#00ffff",
"Dark Blue" = "#6666ff",
"Dark Fuschia" = "#cc0066",

"Dark Green" = "#37835b",
"Dark Red" = "#9c3030",
"Dull Yellow" = "#fbdf56",
Expand Down
5 changes: 5 additions & 0 deletions code/datums/bodypart_overlays/mutant_bodypart_overlay.dm
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,11 @@
return
var/mob/living/carbon/human/human_owner = ownerlimb.owner
draw_color = human_owner.dna.features["animecolor"]
if(ORGAN_COLOR_MUTSECONDARY)
if(!ishuman(ownerlimb.owner))
return
var/mob/living/carbon/human/human_owner = ownerlimb.owner
draw_color = human_owner.dna.features["mcolor_secondary"]

return TRUE

Expand Down
1 change: 1 addition & 0 deletions code/modules/mob/living/carbon/human/dummy.dm
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ INITIALIZE_IMMEDIATE(/mob/living/carbon/human/dummy)
target.dna.features["arachnid_appendages"] = "Long" //Monkestation Addition
target.dna.features["arachnid_chelicerae"] = "Basic" //Monkestation Addition
target.dna.features["goblin_ears"] = "Normal" //Monkestation Addition
target.dna.features["floran_leaves"] = "Furnivour" //Monkestation Addition

/// Provides a dummy that is consistently bald, white, naked, etc.
/mob/living/carbon/human/dummy/consistent
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions config/game_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,7 @@ ROUNDSTART_RACES arachnid
## Races that are better than humans in some ways, but worse in others
ROUNDSTART_RACES ethereal
ROUNDSTART_RACES goblin
ROUNDSTART_RACES floran
#ROUNDSTART_RACES jelly
#ROUNDSTART_RACES abductor
#ROUNDSTART_RACES synth
Expand Down
Binary file modified icons/mob/species/human/human_face.dmi
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/datum/preference/choiced/floran_leaves
savefile_key = "feature_floran_leaves"
savefile_identifier = PREFERENCE_CHARACTER
category = PREFERENCE_CATEGORY_FEATURES
main_feature_name = "Floran Leaves"
should_generate_icons = TRUE

/datum/preference/choiced/floran_leaves/init_possible_values()
return possible_values_for_sprite_accessory_list_for_body_part(
GLOB.floran_leaves_list,
"floran_leaves",
list("ADJ"),
)

/datum/preference/choiced/floran_leaves/apply_to_human(mob/living/carbon/human/target, value)
target.dna.features["floran_leaves"] = value
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/datum/sprite_accessory/floran_leaves
icon = 'monkestation/icons/mob/species/floran/floran_leaves.dmi'
color_src = MUTCOLORS_SECONDARY
//Should be MUTCOLORS_SECONDARY, but while its not working it will be the inverse of MUTCOLORS

/datum/sprite_accessory/floran_leaves/furnivour
name = "Furnivour"
icon_state = "furnivour"

/datum/sprite_accessory/floran_leaves/leaf
name = "Leaf"
icon_state = "leaf"

/datum/sprite_accessory/floran_leaves/pelt
name = "Pelt"
icon_state = "pelt"

/datum/sprite_accessory/floran_leaves/savage
name = "Savage"
icon_state = "savage"

/datum/sprite_accessory/floran_leaves/survivalist
name = "Survivalist"
icon_state = "survivalist"
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
/datum/species/floran
name = "\improper Floran"
plural_form = "Florans"
id = SPECIES_FLORAN
sexes = FALSE
species_traits = list(
MUTCOLORS,
MUTCOLORS_SECONDARY,
NO_UNDERWEAR,
)
inherent_traits = list(
TRAIT_PLANT_SAFE,
TRAIT_NO_JUMPSUIT,
)
external_organs = list(
/obj/item/organ/external/pod_hair = "None",
/obj/item/organ/external/floran_leaves = "Furnivour",
)
inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT
inherent_factions = list(FACTION_PLANTS, FACTION_VINES)
burnmod = 1.8
heatmod = 0.67 //Same as lizard people
coldmod = 1.5 //Same as lizard people
speedmod = -0.1 //Same as arachnids
payday_modifier = 0.75
meat = /obj/item/food/meat/slab/human/mutant/plant
exotic_blood = /datum/reagent/water
// disliked_food = VEGETABLES | FRUIT | GRAIN
liked_food = MEAT | BUGS | GORE
changesource_flags = MIRROR_BADMIN | WABBAJACK | MIRROR_MAGIC | MIRROR_PRIDE | RACE_SWAP | ERT_SPAWN | SLIME_EXTRACT
species_language_holder = /datum/language_holder/plant

bodypart_overrides = list(
BODY_ZONE_L_ARM = /obj/item/bodypart/arm/left/floran,
BODY_ZONE_R_ARM = /obj/item/bodypart/arm/right/floran,
BODY_ZONE_HEAD = /obj/item/bodypart/head/floran,
BODY_ZONE_L_LEG = /obj/item/bodypart/leg/left/floran,
BODY_ZONE_R_LEG = /obj/item/bodypart/leg/right/floran,
BODY_ZONE_CHEST = /obj/item/bodypart/chest/floran,
)
mutanttongue = /obj/item/organ/internal/tongue/lizard
mutanteyes = /obj/item/organ/internal/eyes/floran

ass_image = 'icons/ass/asspodperson.png'

/datum/species/floran/spec_life(mob/living/carbon/human/H, seconds_per_tick, times_fired)
if(H.stat == DEAD)
return

var/light_amount = 0
if(isturf(H.loc))
var/turf/T = H.loc
light_amount = min(1, T.get_lumcount()) - 0.5
if(light_amount > 0.3)
H.heal_overall_damage(brute = 0.5 * seconds_per_tick, burn = 0.5 * seconds_per_tick, required_bodytype = BODYTYPE_ORGANIC) //Lowered to 0.25
H.adjustToxLoss(-0.5 * seconds_per_tick)
H.adjustOxyLoss(-0.5 * seconds_per_tick)

/datum/species/floran/on_species_gain(mob/living/carbon/new_floran, datum/species/old_species, pref_load)
. = ..()
if(ishuman(new_floran))
update_mail_goodies(new_floran)

/datum/species/floran/update_quirk_mail_goodies(mob/living/carbon/human/recipient, datum/quirk/quirk, list/mail_goodies = list())
if(istype(quirk, /datum/quirk/blooddeficiency))
mail_goodies += list(
/obj/item/reagent_containers/blood/podperson
)
return ..()

/datum/species/floran/handle_chemicals(datum/reagent/chem, mob/living/carbon/human/H, seconds_per_tick, times_fired)
if(chem.type == /datum/reagent/toxin/plantbgone)
H.adjustToxLoss(3 * REM * seconds_per_tick)
H.reagents.remove_reagent(chem.type, REAGENTS_METABOLISM * seconds_per_tick)
return TRUE
if(chem.type == /datum/reagent/potassium) //Floran "blood" is water, water does not like potassium
to_chat(H, span_danger("You feel your skin bubble and pop painfully!"))
H.adjustBruteLoss(10*REM, FALSE)
return TRUE
return ..()

/datum/species/floran/randomize_features(mob/living/carbon/human_mob)
randomize_external_organs(human_mob)

/datum/species/floran/get_scream_sound(mob/living/carbon/human/human)
return pick(
'sound/voice/lizard/lizard_scream_1.ogg',
'sound/voice/lizard/lizard_scream_2.ogg',
'sound/voice/lizard/lizard_scream_3.ogg',
'monkestation/sound/voice/screams/lizard/lizard_scream_5.ogg',
)

/datum/species/floran/get_laugh_sound(mob/living/carbon/human/human)
return 'monkestation/sound/voice/laugh/lizard/lizard_laugh.ogg'

/datum/species/floran/get_species_description()
return "Plant-based humanoids, they are extremely violent carnivores with no central government or power structure, \
split into numerous tribes spread across the universe, each led by a Greenfinger. \
Though they are biologically a single-sex race, they may adapt sexually dimorphic physical traits and male/female identities if they so choose. \
Their speech is often simplistic, and they tend to hisss their sibilantsss. \
Their primary drives are hunting, acquiring trophies, fighting, eating meat, and more hunting. \
It is speculated that their general casual view towards killing and consuming other intelligent species stems from not viewing \"meat\" as \"alive\" in \
the same sense they are. However, as the Floran spread throughout the galaxy, more and more individuals are recognizing a need to integrate, \
make friends, and maybe not stab anyone that slightly inconveniences them. (E.I. THIS IS NOT AN EXCUSE TO RDM)"

/datum/species/floran/create_pref_unique_perks()
var/list/to_add = list()

to_add += list(
list(
SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
SPECIES_PERK_ICON = "",
SPECIES_PERK_NAME = "Carnivore",
SPECIES_PERK_DESC = "As a vicious carnivore, your claws do more damage to your prey.",
),
list(
SPECIES_PERK_TYPE = SPECIES_POSITIVE_PERK,
SPECIES_PERK_ICON = "",
SPECIES_PERK_NAME = "Photosynthesis",
SPECIES_PERK_DESC = "Your green skin slowly heals itself while it is illuminated.",
),
list(
SPECIES_PERK_TYPE = SPECIES_NEGATIVE_PERK,
SPECIES_PERK_ICON = "",
SPECIES_PERK_NAME = "Flammable Skin",
SPECIES_PERK_DESC = "Your flammable skin is highly susceptible to burn damage.",
),
)

return to_add


/obj/item/organ/external/floran_leaves
name = "floran leaves"
desc = "you shouldn't see this"
organ_flags = ORGAN_UNREMOVABLE
icon_state = "floran_leaves"
icon = 'monkestation/icons/obj/medical/organs/organs.dmi'

preference = "feature_floran_leaves"
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_EXTERNAL_FLORAN_LEAVES

use_mob_sprite_as_obj_sprite = TRUE
bodypart_overlay = /datum/bodypart_overlay/mutant/floran_leaves

/datum/bodypart_overlay/mutant/floran_leaves
layers = EXTERNAL_ADJACENT
feature_key = "floran_leaves"
37 changes: 37 additions & 0 deletions monkestation/code/modules/surgery/bodyparts/floran_bodyparts.dm
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
/obj/item/bodypart/head/floran
icon_greyscale = 'monkestation/icons/mob/species/floran/bodyparts.dmi'
limb_id = SPECIES_FLORAN
is_dimorphic = FALSE

/obj/item/bodypart/chest/floran
icon_greyscale = 'monkestation/icons/mob/species/floran/bodyparts.dmi'
limb_id = SPECIES_FLORAN
is_dimorphic = FALSE

/obj/item/bodypart/arm/left/floran
icon_greyscale = 'monkestation/icons/mob/species/floran/bodyparts.dmi'
limb_id = SPECIES_FLORAN
unarmed_attack_verb = "slash"
unarmed_damage_high = 15
unarmed_damage_low = 5
unarmed_attack_effect = ATTACK_EFFECT_CLAW
unarmed_attack_sound = 'sound/weapons/slice.ogg'
unarmed_miss_sound = 'sound/weapons/slashmiss.ogg'

/obj/item/bodypart/arm/right/floran
icon_greyscale = 'monkestation/icons/mob/species/floran/bodyparts.dmi'
limb_id = SPECIES_FLORAN
unarmed_attack_verb = "slash"
unarmed_damage_high = 15
unarmed_damage_low = 5
unarmed_attack_effect = ATTACK_EFFECT_CLAW
unarmed_attack_sound = 'sound/weapons/slice.ogg'
unarmed_miss_sound = 'sound/weapons/slashmiss.ogg'

/obj/item/bodypart/leg/left/floran
icon_greyscale = 'monkestation/icons/mob/species/floran/bodyparts.dmi'
limb_id = SPECIES_FLORAN

/obj/item/bodypart/leg/right/floran
icon_greyscale = 'monkestation/icons/mob/species/floran/bodyparts.dmi'
limb_id = SPECIES_FLORAN
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
/obj/item/organ/external/floran_leaves
name = "floran leaves"
desc = "you shouldn't see this"
organ_flags = ORGAN_UNREMOVABLE
icon_state = "floran_leaves"
icon = 'monkestation/icons/obj/medical/organs/organs.dmi'

preference = "feature_floran_leaves"
zone = BODY_ZONE_CHEST
slot = ORGAN_SLOT_EXTERNAL_FLORAN_LEAVES

use_mob_sprite_as_obj_sprite = TRUE
bodypart_overlay = /datum/bodypart_overlay/mutant/floran_leaves

/datum/bodypart_overlay/mutant/floran_leaves
layers = EXTERNAL_ADJACENT
feature_key = "floran_leaves"
// color_source = ORGAN_COLOR_MUTSECONDARY

var/color_swapped_layer = EXTERNAL_ADJACENT//Remove when MUTCOLORS_SECONDARY works
var/color_inverse_base = 255//Remove when MUTCOLORS_SECONDARY works

/datum/bodypart_overlay/mutant/floran_leaves/get_global_feature_list()
return GLOB.floran_leaves_list

/datum/bodypart_overlay/mutant/floran_leaves/color_image(image/overlay, draw_layer, obj/item/bodypart/limb)//Remove when MUTCOLORS_SECONDARY works
if(draw_layer != bitflag_to_layer(color_swapped_layer))
return ..()

if(draw_color)
var/list/rgb_list = rgb2num(draw_color)
overlay.color = rgb(color_inverse_base - rgb_list[1], color_inverse_base - rgb_list[2], color_inverse_base - rgb_list[3])
else
overlay.color = null

/datum/bodypart_overlay/mutant/floran_leaves/get_base_icon_state()
return sprite_datum.icon_state

/datum/bodypart_overlay/mutant/floran_leaves/can_draw_on_bodypart(mob/living/carbon/human/human)
. = ..()
if(human.wear_suit && (human.wear_suit.flags_inv & HIDEJUMPSUIT))
return FALSE
Loading

0 comments on commit 5631779

Please sign in to comment.