diff --git a/code/__defines/mobs_vr.dm b/code/__defines/mobs_vr.dm index be17f09c39..51c65f532b 100644 --- a/code/__defines/mobs_vr.dm +++ b/code/__defines/mobs_vr.dm @@ -25,6 +25,7 @@ #define SPECIES_PROTEAN "Protean" #define SPECIES_RAPALA "Rapala" #define SPECIES_SERGAL "Sergal" +#define SPECIES_ALTEVIAN "Altevian" #define SPECIES_SHADEKIN_CREW "Black-Eyed Shadekin" #define SPECIES_VASILISSAN "Vasilissan" #define SPECIES_VULPKANIN "Vulpkanin" diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index dc13aa2365..d0cdeb0187 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -451,6 +451,8 @@ var/list/mob/living/forced_ambiance_list = new return if(H.incorporeal_move) // VOREstation edit - Phaseshifted beings should not be affected by gravity return + if(H.species.can_zero_g_move || H.species.can_space_freemove) + return if(H.m_intent == "run") H.AdjustStunned(6) diff --git a/code/modules/catalogue/catalogue_data_vr.dm b/code/modules/catalogue/catalogue_data_vr.dm index 52d00f4a74..350ffe088b 100644 --- a/code/modules/catalogue/catalogue_data_vr.dm +++ b/code/modules/catalogue/catalogue_data_vr.dm @@ -93,6 +93,14 @@ comparable conditions as wealthy members of the Diaspora." value = CATALOGUER_REWARD_TRIVIAL +/datum/category_item/catalogue/fauna/altevian + name = "Sapients - Altevian" + desc = "The Altevian are a species of tall, rodent humanoids that are akin to rats for their features. \ + The Altevian, unlike most species, do not have a home planet, nor system, adopting a fully nomadic lifestyle \ + for their survival across the stars. Instead, they have opted to live in massive super capital-class colony-ships \ + with a flagship as their place they would call home." + value = CATALOGUER_REWARD_TRIVIAL + /datum/category_item/catalogue/fauna/shadekin name = "Sapients - Shadekin" desc = "ERROR : No DNA found. ERROR : Ambient energy signature detected. Likely origin from attempt of scanning \ diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index c3eedab5ec..2e880f5e4a 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -202,7 +202,13 @@ if(restrained()) return 0 if(..()) //Can move due to other reasons, don't use jetpack fuel - return 1 + return TRUE + + if(species.can_space_freemove || (species.can_zero_g_move && !istype(get_turf(src), /turf/space))) //VOREStation Edit. + return TRUE //VOREStation Edit. + + if(flying) //VOREStation Edit. If you're flying, you glide around! + return TRUE //VOREStation Edit. //Do we have a working jetpack? var/obj/item/weapon/tank/jetpack/thrust = get_jetpack() @@ -210,22 +216,23 @@ if(thrust) if(((!check_drift) || (check_drift && thrust.stabilization_on)) && (!lying) && (thrust.do_thrust(0.01, src))) inertia_dir = 0 - return 1 - if(flying) //VOREStation Edit. If you're flying, you glide around! - return 0 //VOREStation Edit. + return TRUE - return 0 + return FALSE /mob/living/carbon/human/Process_Spaceslipping(var/prob_slip = 5) //If knocked out we might just hit it and stop. This makes it possible to get dead bodies and such. if(species.flags & NO_SLIP) - return 0 + return FALSE + + if(species.can_space_freemove || species.can_zero_g_move) + return FALSE var/obj/item/weapon/tank/jetpack/thrust = get_jetpack() if(thrust?.can_thrust(0.01)) - return 0 + return FALSE if(stat) prob_slip = 0 // Changing this to zero to make it line up with the comment, and also, make more sense. diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index ff775a5063..5f6a24920e 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -201,7 +201,8 @@ var/has_glowing_eyes = 0 // Whether the eyes are shown above all lighting var/water_movement = 0 // How much faster or slower the species is in water var/snow_movement = 0 // How much faster or slower the species is on snow - + var/can_space_freemove = FALSE // Can we freely move in space? + var/can_zero_g_move = FALSE // What about just in zero-g non-space? var/item_slowdown_mod = 1 // How affected by item slowdown the species is. var/primitive_form // Lesser form, if any (ie. monkey for humans) diff --git a/code/modules/mob/living/carbon/human/species/species_getters.dm b/code/modules/mob/living/carbon/human/species/species_getters.dm index bcb9de1f29..27bb09baa6 100644 --- a/code/modules/mob/living/carbon/human/species/species_getters.dm +++ b/code/modules/mob/living/carbon/human/species/species_getters.dm @@ -103,8 +103,10 @@ if(!name_language) if(gender == FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - else + else if(gender == MALE) return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) + else + return capitalize(prob(50) ? pick(first_names_male) : pick(first_names_female)) + " " + capitalize(pick(last_names)) var/datum/language/species_language = GLOB.all_languages[name_language] if(!species_language) diff --git a/code/modules/mob/living/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm index 0e402ab5c6..dbfab1414f 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm @@ -562,3 +562,60 @@ "You feel uncomfortably warm.", "Your chitin feels hot." ) + +/datum/species/altevian + name = SPECIES_ALTEVIAN + name_plural = "Altevians" + icobase = 'icons/mob/human_races/r_sergal.dmi' + deform = 'icons/mob/human_races/r_def_sergal.dmi' + unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp) + language = LANGUAGE_TAVAN + num_alternate_languages = 3 + secondary_langs = list(LANGUAGE_TAVAN) + name_language = null + color_mult = 1 + inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair) + + min_age = 18 + max_age = 80 + + blurb = "The Altevian are a species of tall, rodent humanoids that are akin to rats for their features. \ + The Altevian, unlike most species, do not have a home planet, nor system, adopting a fully nomadic lifestyle \ + for their survival across the stars. Instead, they have opted to live in massive super capital-class colony-ships \ + with a flagship as their place they would call home." + + wikilink="https://wiki.vore-station.net/Altevian" + + catalogue_data = list(/datum/category_item/catalogue/fauna/altevian) + + spawn_flags = SPECIES_CAN_JOIN + appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR + + flesh_color = "#AFA59E" + base_color = "#777777" + + genders = list(MALE, FEMALE, PLURAL, NEUTER) + + burn_mod = 1.15 + hunger_factor = 0.04 + can_zero_g_move = TRUE + + heat_discomfort_strings = list( + "Your fur prickles in the heat.", + "You feel uncomfortably warm.", + "Your overheated skin itches." + ) + + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 3c513052cf..6da73bc471 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -66,7 +66,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define MOB_DAM_LAYER 4 //Injury overlay sprites like open wounds #define SURGERY_LAYER 5 //Overlays for open surgical sites #define UNDERWEAR_LAYER 6 //Underwear/bras/etc -#define TAIL_SOUTH_LAYER 7 //Tail as viewed from the south +#define TAIL_LOWER_LAYER 7 //Tail as viewed from the south #define SHOES_LAYER_ALT 8 //Shoe-slot item (when set to be under uniform via verb) #define UNIFORM_LAYER 9 //Uniform-slot item #define ID_LAYER 10 //ID-slot item @@ -74,7 +74,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define GLOVES_LAYER 12 //Glove-slot item #define BELT_LAYER 13 //Belt-slot item #define SUIT_LAYER 14 //Suit-slot item -#define TAIL_NORTH_LAYER 15 //Some species have tails to render (As viewed from the N, E, or W) +#define TAIL_UPPER_LAYER 15 //Some species have tails to render (As viewed from the N, E, or W) #define GLASSES_LAYER 16 //Eye-slot item #define BELT_LAYER_ALT 17 //Belt-slot item (when set to be above suit via verb) #define SUIT_STORE_LAYER 18 //Suit storage-slot item @@ -90,7 +90,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define L_HAND_LAYER 28 //Left-hand item #define R_HAND_LAYER 29 //Right-hand item #define WING_LAYER 30 //Wings or protrusions over the suit. -#define TAIL_NORTH_LAYER_ALT 31 //Modified tail-sprite layer. Tend to be larger. +#define TAIL_UPPER_LAYER_ALT 31 //Modified tail-sprite layer. Tend to be larger. #define MODIFIER_EFFECTS_LAYER 32 //Effects drawn by modifiers #define FIRE_LAYER 33 //'Mob on fire' overlay layer #define MOB_WATER_LAYER 34 //'Mob submerged' overlay layer @@ -98,8 +98,6 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define TOTAL_LAYERS 35 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. ////////////////////////////////// -#define GET_TAIL_LAYER (dir == SOUTH ? TAIL_SOUTH_LAYER : TAIL_NORTH_LAYER) - /mob/living/carbon/human var/list/overlays_standing[TOTAL_LAYERS] var/previous_damage_appearance // store what the body last looked like, so we only have to update it if something changed @@ -839,7 +837,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() suit_sprite = INV_SUIT_DEF_ICON var/icon/c_mask = null - var/tail_is_rendered = (overlays_standing[TAIL_NORTH_LAYER] || overlays_standing[TAIL_NORTH_LAYER_ALT] || overlays_standing[TAIL_SOUTH_LAYER]) + var/tail_is_rendered = (overlays_standing[TAIL_UPPER_LAYER] || overlays_standing[TAIL_UPPER_LAYER_ALT] || overlays_standing[TAIL_LOWER_LAYER]) var/valid_clip_mask = tail_style?.clip_mask if(tail_is_rendered && valid_clip_mask && !(istype(suit) && suit.taurized)) //Clip the lower half of the suit off using the tail's clip mask for taurs since taur bodies aren't hidden. @@ -952,19 +950,29 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() apply_layer(L_HAND_LAYER) +/mob/living/carbon/human/proc/get_tail_layer() + var/list/lower_layer_dirs = list(SOUTH) + if(tail_style) + lower_layer_dirs = tail_style.lower_layer_dirs.Copy() + + if(dir in lower_layer_dirs) + return TAIL_LOWER_LAYER + else + return TAIL_UPPER_LAYER + /mob/living/carbon/human/proc/update_tail_showing() if(QDESTROYING(src)) return - remove_layer(TAIL_NORTH_LAYER) - remove_layer(TAIL_NORTH_LAYER_ALT) - remove_layer(TAIL_SOUTH_LAYER) + remove_layer(TAIL_UPPER_LAYER) + remove_layer(TAIL_UPPER_LAYER_ALT) + remove_layer(TAIL_LOWER_LAYER) - var/tail_layer = GET_TAIL_LAYER + var/tail_layer = get_tail_layer() if(src.tail_style && src.tail_style.clip_mask_state) - tail_layer = TAIL_NORTH_LAYER // Use default, let clip mask handle everything - if(tail_alt && tail_layer == TAIL_NORTH_LAYER) - tail_layer = TAIL_NORTH_LAYER_ALT + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything + if(tail_alt && tail_layer == TAIL_UPPER_LAYER) + tail_layer = TAIL_UPPER_LAYER_ALT var/image/tail_image = get_tail_image() if(tail_image) @@ -1003,16 +1011,16 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() return tail_icon /mob/living/carbon/human/proc/set_tail_state(var/t_state) - var/tail_layer = GET_TAIL_LAYER + var/tail_layer = get_tail_layer() if(src.tail_style && src.tail_style.clip_mask_state) - tail_layer = TAIL_NORTH_LAYER // Use default, let clip mask handle everything - if(tail_alt && tail_layer == TAIL_NORTH_LAYER) - tail_layer = TAIL_NORTH_LAYER_ALT + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything + if(tail_alt && tail_layer == TAIL_UPPER_LAYER) + tail_layer = TAIL_UPPER_LAYER_ALT var/image/tail_overlay = overlays_standing[tail_layer] - remove_layer(TAIL_NORTH_LAYER) - remove_layer(TAIL_NORTH_LAYER_ALT) - remove_layer(TAIL_SOUTH_LAYER) + remove_layer(TAIL_UPPER_LAYER) + remove_layer(TAIL_UPPER_LAYER_ALT) + remove_layer(TAIL_LOWER_LAYER) if(tail_overlay) overlays_standing[tail_layer] = tail_overlay @@ -1030,9 +1038,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() return var/t_state = "[species.get_tail(src)]_once" - var/tail_layer = GET_TAIL_LAYER + var/tail_layer = get_tail_layer() if(src.tail_style && src.tail_style.clip_mask_state) - tail_layer = TAIL_NORTH_LAYER // Use default, let clip mask handle everything + tail_layer = TAIL_UPPER_LAYER // Use default, let clip mask handle everything var/image/tail_overlay = overlays_standing[tail_layer] if(tail_overlay && tail_overlay.icon_state == t_state) @@ -1292,9 +1300,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #undef GLOVES_LAYER #undef BELT_LAYER #undef SUIT_LAYER -#undef TAIL_NORTH_LAYER -#undef TAIL_SOUTH_LAYER -#undef GET_TAIL_LAYER +#undef TAIL_UPPER_LAYER +#undef TAIL_LOWER_LAYER #undef GLASSES_LAYER #undef BELT_LAYER_ALT #undef SUIT_STORE_LAYER diff --git a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm index a1c1034be5..cf9632ccda 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm @@ -11,6 +11,8 @@ do_colouration = 0 //Set to 1 to enable coloration using the tail color. species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use + var/list/lower_layer_dirs = list(SOUTH) + /datum/sprite_accessory/tail/New() . = ..() if(clip_mask_icon && clip_mask_state) @@ -1175,6 +1177,14 @@ color_blend_mode = ICON_MULTIPLY ckeys_allowed = list("prettiebyrd") +/datum/sprite_accessory/tail/altevian + name = "Altevian Tail" + icon = 'icons/mob/vore/tails_vr.dmi' + icon_state = "altevian" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + lower_layer_dirs = list(SOUTH, WEST) + /datum/sprite_accessory/tail/tentacle name = "Tentacle, colorable (vwag)" desc = "" @@ -1201,4 +1211,4 @@ /datum/sprite_accessory/tail/longtail/shadekin_tail/shadekin_tail_long name = "Shadekin Long Tail" - icon_state = "shadekin_long_s" + icon_state = "shadekin_long_s" \ No newline at end of file diff --git a/icons/mob/vore/tails_vr.dmi b/icons/mob/vore/tails_vr.dmi index d5a4d7ad57..1b2e946079 100644 Binary files a/icons/mob/vore/tails_vr.dmi and b/icons/mob/vore/tails_vr.dmi differ