diff --git a/code/__defines/mobs_ch.dm b/code/__defines/mobs_ch.dm new file mode 100644 index 0000000000..45114d7cbd --- /dev/null +++ b/code/__defines/mobs_ch.dm @@ -0,0 +1,3 @@ +#define MARKING_NONDIGI_ONLY (1 << 0) +#define MARKING_DIGITIGRADE_ONLY (1 << 1) +#define MARKING_ALL_LEGS MARKING_NONDIGI_ONLY|MARKING_DIGITIGRADE_ONLY diff --git a/code/game/turfs/flooring/flooring_decals_ch.dm b/code/game/turfs/flooring/flooring_decals_ch.dm index 3d648ccb36..1021ae947b 100644 --- a/code/game/turfs/flooring/flooring_decals_ch.dm +++ b/code/game/turfs/flooring/flooring_decals_ch.dm @@ -10,4 +10,4 @@ icon_state = "wood_stairs2" /obj/effect/floor_decal/stairs/dark_stairs - icon_state = "dark_stairs" \ No newline at end of file + icon_state = "dark_stairs" diff --git a/code/game/turfs/flooring/flooring_decals_yw.dm b/code/game/turfs/flooring/flooring_decals_yw.dm index 75983e086f..2c948bb9b3 100644 --- a/code/game/turfs/flooring/flooring_decals_yw.dm +++ b/code/game/turfs/flooring/flooring_decals_yw.dm @@ -18,3 +18,4 @@ /obj/effect/floor_decal/snow/floor/pointy icon_state = "snowfloorpointy" + diff --git a/code/modules/mob/new_player/sprite_accessories_ear_ch.dm b/code/modules/mob/new_player/sprite_accessories_ear_ch.dm index 05533bcc76..0e37e8c9d5 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_ch.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_ch.dm @@ -14,6 +14,24 @@ do_colouration = 1 color_blend_mode = ICON_MULTIPLY +/datum/sprite_accessory/ears/protogen + name = "Protogen" + desc = "" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "protogen" + extra_overlay = "protogen_fluff" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/ears/miqote + name = "Miqo'te" + desc = "" + icon = 'icons/mob/vore/ears_ch.dmi' + icon_state = "miqote" + extra_overlay = "miqote_inner" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + /datum/sprite_accessory/ears/vale name = "VALE Model Ear Coloring" desc = "" diff --git a/code/modules/mob/new_player/sprite_accessories_extra_ch.dm b/code/modules/mob/new_player/sprite_accessories_extra_ch.dm index cb65a846f6..487f6d27aa 100644 --- a/code/modules/mob/new_player/sprite_accessories_extra_ch.dm +++ b/code/modules/mob/new_player/sprite_accessories_extra_ch.dm @@ -1,3 +1,7 @@ +/datum/sprite_accessory/marking + var/digitigrade_acceptance = MARKING_NONDIGI_ONLY + var/digitigrade_icon = 'icons/mob/human_races/markings_digi_ch.dmi' + /datum/sprite_accessory/marking/ch icon = 'icons/mob/human_races/markings_ch.dmi' @@ -149,65 +153,196 @@ color_blend_mode = ICON_MULTIPLY body_parts = list(BP_HEAD) +/datum/sprite_accessory/marking/ch/protogen_snout + name = "Protogen Snout" + icon_state = "protogen_snout" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/ch/hshark_snout + name = "HShark Snout" + icon_state = "hshark_snout" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/ch/hshark_head + name = "HShark Head" + icon_state = "hshark" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/ch/ram_horns + name = "Ram Horns" + icon_state = "ram_horns" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/ch/neckfluff + name = "Neck Fluff" + icon_state = "neckfluff" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/ch/husky_chest + name = "Husky Chest" + icon_state = "husky" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO, BP_GROIN) + +/datum/sprite_accessory/marking/ch/fox_head + name = "Fox Head" + icon_state = "fox" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/ch/fox_chest + name = "Fox Chest" + icon_state = "fox" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO, BP_GROIN) + +/datum/sprite_accessory/marking/ch/fox_hsocks + name = "Fox Hand Socks" + icon_state = "fox" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_ARM, BP_R_HAND, BP_L_ARM, BP_L_HAND) + +/datum/sprite_accessory/marking/ch/fox_lsocks + name = "Fox Leg Socks" + icon_state = "fox" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG,BP_R_FOOT,BP_L_LEG,BP_L_FOOT) + digitigrade_acceptance = MARKING_ALL_LEGS + +/datum/sprite_accessory/marking/ch/tiger_head + name = "Tiger Head" + icon_state = "tiger" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/ch/tiger_chest + name = "Tiger Chest" + icon_state = "tiger" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO, BP_GROIN) + +/datum/sprite_accessory/marking/ch/tiger_arms + name = "Tiger Arms" + icon_state = "tiger" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_ARM, BP_R_HAND, BP_L_ARM, BP_L_HAND) + +/datum/sprite_accessory/marking/ch/tiger_legs + name = "Tiger Legs" + icon_state = "tiger" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG,BP_R_FOOT,BP_L_LEG,BP_L_FOOT) + digitigrade_acceptance = MARKING_ALL_LEGS + +/datum/sprite_accessory/marking/ch/gradient_arms + name = "Gradient Arms" + icon_state = "gradient" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_ARM, BP_R_HAND, BP_L_ARM, BP_L_HAND) + +/datum/sprite_accessory/marking/ch/gradient_legs + name = "Gradient Legs" + icon_state = "gradient" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG,BP_R_FOOT,BP_L_LEG,BP_L_FOOT) + digitigrade_acceptance = MARKING_ALL_LEGS + +/datum/sprite_accessory/marking/ch/hawk_talons + name = "Hawk Talons (Legs)" + icon_state = "hawktalon" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG,BP_R_FOOT,BP_L_LEG,BP_L_FOOT) + digitigrade_acceptance = MARKING_ALL_LEGS + +/datum/sprite_accessory/marking/ch/deer_hooves + name = "Deer Hooves" + icon_state = "deerhoof" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_FOOT, BP_L_FOOT) + digitigrade_acceptance = MARKING_ALL_LEGS + +/datum/sprite_accessory/marking/ch/frills_simple + name = "Frills (Simple)" + icon_state = "frills_simple" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/ch/frills_short + name = "Frills (Short)" + icon_state = "frills_short" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/ch/frills_aquatic + name = "Frills (Aquatic)" + icon_state = "frills_aqua" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) + /datum/sprite_accessory/marking/ch/guilmonhead - name = "Guilmon head" - icon_state = "guilmon_head" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_HEAD) + name = "Guilmon head" + icon_state = "guilmon_head" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_HEAD) /datum/sprite_accessory/marking/ch/guilmonchest - name = "Guilmon Chest" - icon_state = "guilmon_chest" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_TORSO) + name = "Guilmon Chest" + icon_state = "guilmon_chest" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO) /datum/sprite_accessory/marking/ch/guilmonchestmarking - name = "Guilmon Chest Markings" - icon_state = "guilmon_marking" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_TORSO) + name = "Guilmon Chest Markings" + icon_state = "guilmon_marking" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_TORSO) /datum/sprite_accessory/marking/ch/guilmonarms - name = "Guilmon arms" - icon_state = "guilmon" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND) + name = "Guilmon arms" + icon_state = "guilmon" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_ARM,BP_L_ARM,BP_R_HAND,BP_L_HAND) /datum/sprite_accessory/marking/ch/guilmonRLeg - name = "Guilmon Right leg" - icon_state = "guilmon" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_R_LEG) + name = "Guilmon Right leg" + icon_state = "guilmon" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG) /datum/sprite_accessory/marking/ch/guilmonLleg - name = "Guilmon Left leg" - icon_state = "guilmon" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_L_LEG) + name = "Guilmon Left leg" + icon_state = "guilmon" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG) /datum/sprite_accessory/marking/ch/guilmondigiRleg1 - name = "Guilmon digigrade right leg 1" - icon_state = "guilmon_digitigrade_1" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_R_LEG) + name = "Guilmon digigrade right leg 1" + icon_state = "guilmon_digitigrade_1" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG) /datum/sprite_accessory/marking/ch/guilmondigiLleg1 - name = "Guilmon digigrade left leg 1" - icon_state = "guilmon_digitigrade_1" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_L_LEG) + name = "Guilmon digigrade left leg 1" + icon_state = "guilmon_digitigrade_1" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG) /datum/sprite_accessory/marking/ch/guilmondigiRleg2 - name = "Guilmon digigrade right leg 2" - icon_state = "guilmon_digitigrade_2" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_R_LEG) + name = "Guilmon digigrade right leg 2" + icon_state = "guilmon_digitigrade_2" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_R_LEG) /datum/sprite_accessory/marking/ch/guilmondigiLleg2 - name = "Guilmon digigrade left leg 2" - icon_state = "guilmon_digitigrade_2" - color_blend_mode = ICON_MULTIPLY - body_parts = list(BP_L_LEG) + name = "Guilmon digigrade left leg 2" + icon_state = "guilmon_digitigrade_2" + color_blend_mode = ICON_MULTIPLY + body_parts = list(BP_L_LEG) /datum/sprite_accessory/tail/special/orca_tail name = "Orca Tail" @@ -332,6 +467,7 @@ //Digitigrade markings /datum/sprite_accessory/marking/digi icon = 'icons/mob/human_races/markings_digi_ch.dmi' + digitigrade_acceptance = MARKING_DIGITIGRADE_ONLY /datum/sprite_accessory/marking/digi/fullleft name = "Digitigrade Full Left Leg(Only works with digitigrade legs)" diff --git a/code/modules/mob/new_player/sprite_accessories_tail_ch.dm b/code/modules/mob/new_player/sprite_accessories_tail_ch.dm index 8ffb4054c4..a1f1e1734b 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail_ch.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_ch.dm @@ -22,6 +22,17 @@ icon = 'icons/mob/vore/tails_ch.dmi' icon_state = "zorgoia" extra_overlay = "zorgoia_fluff" + extra_overlay2 = "zorgoia_fluff_top" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/leopard + name = "Leopard tail, dual-color (vwag)" + icon = 'icons/mob/vore/tails_ch.dmi' + icon_state = "leopard" + ani_state = "leopard_w" + extra_overlay = "leopard_spots" + extra_overlay_w = "leopard_spots_w" do_colouration = 1 color_blend_mode = ICON_MULTIPLY @@ -144,17 +155,17 @@ extra_overlay = "bigringtail_markings" /datum/sprite_accessory/tail/longtail/desert_nightstalker - name = "Desert Nightstalker Tail (vwag)" - icon = 'icons/mob/vore/taurs_ch.dmi' - icon_state = "nightstalker_desert" - ani_state = "nightstalker_desert_w" - do_colouration = 0 // We're not coloring this, these are pre-colored - color_blend_mode = ICON_ADD + name = "Desert Nightstalker Tail (vwag)" + icon = 'icons/mob/vore/taurs_ch.dmi' + icon_state = "nightstalker_desert" + ani_state = "nightstalker_desert_w" + do_colouration = 0 // We're not coloring this, these are pre-colored + color_blend_mode = ICON_ADD /datum/sprite_accessory/tail/longtail/diamondback_nightstalker - name = "Diamondback Nightstalker Tail (dual-color, vwag)" - icon = 'icons/mob/vore/taurs_ch.dmi' - icon_state = "nightstalker_diamondback" - ani_state = "nightstalker_diamondback_w" - extra_overlay = "nightstalker_diamondback_markings" - extra_overlay_w = "nightstalker_diamondback_markings_w" \ No newline at end of file + name = "Diamondback Nightstalker Tail (dual-color, vwag)" + icon = 'icons/mob/vore/taurs_ch.dmi' + icon_state = "nightstalker_diamondback" + ani_state = "nightstalker_diamondback_w" + extra_overlay = "nightstalker_diamondback_markings" + extra_overlay_w = "nightstalker_diamondback_markings_w" diff --git a/code/modules/player_tips_vr/player_tips_controller_vr.dm b/code/modules/player_tips_vr/player_tips_controller_vr.dm index fc4ffbcf2b..72e756b886 100644 --- a/code/modules/player_tips_vr/player_tips_controller_vr.dm +++ b/code/modules/player_tips_vr/player_tips_controller_vr.dm @@ -30,6 +30,7 @@ Controlled by the player_tips subsystem under code/controllers/subsystems/player to_chat(M, SPAN_NOTICE("[tip]")) last_tip = tip + last_tip_time = world.time tip_delay = rand(min_tip_delay, max_tip_delay) diff --git a/icons/mob/human_races/markings_ch.dmi b/icons/mob/human_races/markings_ch.dmi index 267bcb7bf9..f2600bce01 100644 Binary files a/icons/mob/human_races/markings_ch.dmi and b/icons/mob/human_races/markings_ch.dmi differ diff --git a/icons/mob/human_races/markings_digi_ch.dmi b/icons/mob/human_races/markings_digi_ch.dmi index dbe633fac4..39ccb6a945 100644 Binary files a/icons/mob/human_races/markings_digi_ch.dmi and b/icons/mob/human_races/markings_digi_ch.dmi differ diff --git a/icons/mob/vore/ears_ch.dmi b/icons/mob/vore/ears_ch.dmi index 08497fe609..ff8ff0b410 100644 Binary files a/icons/mob/vore/ears_ch.dmi and b/icons/mob/vore/ears_ch.dmi differ diff --git a/icons/mob/vore/tails_ch.dmi b/icons/mob/vore/tails_ch.dmi index 4d16a9e2dd..7cd1d55711 100644 Binary files a/icons/mob/vore/tails_ch.dmi and b/icons/mob/vore/tails_ch.dmi differ diff --git a/modular_chomp/code/game/objects/structures/desert_planet_structures.dm b/modular_chomp/code/game/objects/structures/desert_planet_structures.dm new file mode 100644 index 0000000000..8c7eafa62f --- /dev/null +++ b/modular_chomp/code/game/objects/structures/desert_planet_structures.dm @@ -0,0 +1,299 @@ +// Props +/obj/structure/prop/desert_rock + icon = 'modular_chomp/icons/obj/desert_planet/desert_rocks.dmi' + desc = "Sandy and smooth from erosion." + density = TRUE + anchored = TRUE + +/obj/structure/prop/desert_rock/rock + name = "desert rock" + +/obj/structure/prop/desert_rock/rock/attack_hand(mob/living/user) + if(user.is_incorporeal()) + return + to_chat(user, "You push on the [src].") + var/movedir = user.dir + if(do_after(user, 3 SECONDS, src)) + step(src, movedir) + +/obj/structure/prop/desert_rock/rock/New() + ..() + icon_state = "desert_rock[rand(0,6)]" + +/obj/structure/prop/desert_rock/pebble + name = "sandy pebble" + density = FALSE + +/obj/structure/prop/desert_rock/pebble/Crossed(atom/movable/AM as mob|obj) + if(AM.is_incorporeal()) + return + if(istype(AM, /mob/living)) + var/mob/living/M = AM + if(M.m_intent == "run" && prob(5)) + M.Weaken(2) + to_chat(M, "You trip over the [src]!") + +/obj/structure/prop/desert_rock/pebble/New() + ..() + icon_state = "desert_pebble[rand(0,6)]" + +/obj/structure/prop/desert_rock/anthill + name = "ant hill" + desc = "See how many ants you can spot." + icon = 'modular_chomp/icons/obj/desert_planet/desert_plants.dmi' + icon_state = "anthill0" + +/obj/structure/prop/desert_rock/anthill/New() + ..() + icon_state = "anthill[rand(0,2)]" + +/obj/structure/prop/desert_planet64x64 + name = "large rock" + desc = "Sandy and smooth from erosion." + icon = 'modular_chomp/icons/obj/desert_planet/desert_props_64x64.dmi' + density = TRUE + anchored = TRUE + can_buckle = FALSE + +/obj/structure/prop/desert_planet64x64/lrock + icon_state = "lrock" + +/obj/structure/prop/desert_planet64x64/lrock1 + icon_state = "lrock1" + +/obj/structure/prop/desert_planet64x64/lrock2 + icon_state = "lrock2" + +/obj/structure/prop/desert_planet64x64/lrock3 + icon_state = "lrock3" + +/obj/structure/prop/desert_planet64x64/lrock4 + icon_state = "lrock4" + +/obj/structure/prop/desert_planet64x64/lribs + name = "ribs" + desc = "Bleached white by baking sunlight." + icon_state = "lribs" + +/obj/structure/prop/desert_planet64x64/lribs1 + name = "ribs" + desc = "Bleached white by baking sunlight." + icon_state = "lribs1" + +/obj/structure/prop/desert_planet64x64/lskull + name = "skull" + desc = "Bleached white by baking sunlight." + icon_state = "lskull" + +/obj/structure/prop/desert_planet64x64/lbone + name = "bone" + desc = "Bleached white by baking sunlight." + icon_state = "lbone" + +/obj/structure/prop/desert_planet64x64/palmuria + name = "palm" + desc = "Stout and bushy." + icon_state = "palmuria" + +/obj/structure/prop/desert_planet64x64/palmuria1 + name = "palm" + desc = "Stout and bushy." + icon_state = "palmuria1" + +/obj/structure/prop/desert_planet160x160 + name = "desert large boulder" + desc = "Sandy and smooth from erosion." + icon = 'modular_chomp/icons/obj/desert_planet/desert_planet_160x160.dmi' + density = TRUE + anchored = TRUE + can_buckle = FALSE + +/obj/structure/prop/desert_planet160x160/largeboulder + icon_state = "large_boulder" + +/obj/structure/prop/desert_planet160x160/tallboulder + icon_state = "tall_boulder" + +/obj/structure/prop/desert_planet160x160/boulder + icon_state = "boulder" + +/obj/structure/prop/desert_planet160x160/lcactus + name = "cactus" + desc = "Large and prickly." + icon_state = "lcactus" + +/obj/structure/prop/desert_planet160x160/lcactus1 + name = "cactus" + desc = "Large and prickly." + icon_state = "lcactus1" + +/obj/structure/prop/desert_planet160x160/lcactus2 + name = "cactus" + desc = "Large and prickly." + icon_state = "lcactus2" + +/obj/structure/prop/desert_planet160x160/lcactus3 + name = "cactus" + desc = "Large and prickly." + icon_state = "lcactus3" + +// Flora +/obj/structure/flora/desert_planet + name = "desert plant" + desc = "Probably a succulent." + icon = 'modular_chomp/icons/obj/desert_planet/desert_plants.dmi' + +/obj/structure/flora/desert_planet/potted_plant + name = "potted plant" + desc = "Colloquially known as a pot plant." + icon_state = "potplant0" + +/obj/structure/flora/desert_planet/potted_plant/New() + ..() + icon_state = "potplant[rand(0,2)]" + +/obj/structure/flora/desert_planet/thicket + name = "thicket" + desc = "Weedy growths." + icon_state = "thicket0" + +/obj/structure/flora/desert_planet/thicket/New() + ..() + icon_state = "thicket[rand(0,6)]" + +/obj/structure/flora/desert_planet/shrub + name = "shrub" + desc = "Dense and weedy." + icon_state = "shrub0" + +/obj/structure/flora/desert_planet/shrub/New() + ..() + icon_state = "shrub[rand(0,5)]" + +/obj/structure/flora/desert_planet/bush + name = "bush" + desc = "Denser and weedier." + icon_state = "bush0" + +/obj/structure/flora/desert_planet/bush/New() + ..() + icon_state = "bush[rand(0,5)]" + +/obj/structure/flora/desert_planet/barrelcacti + name = "barrel cacti" + desc = "Small, adorable, and begging for a hug." + icon_state = "barrelcacti0" + +/obj/structure/flora/desert_planet/barrelcacti/New() + ..() + icon_state = "barrelcacti[rand(0,3)]" + +/obj/structure/flora/desert_planet/palmy + name = "yucca bush" + desc = "Probably not actually a yucca." + icon_state = "palmy0" + +/obj/structure/flora/desert_planet/palmy/New() + ..() + icon_state = "palmy[rand(0,2)]" + +/obj/structure/flora/desert_planet/shrubber + name = "thorny bush" + desc = "Makes for great fur accessories." + icon_state = "shrubber0" + +/obj/structure/flora/desert_planet/shrubber/New() + ..() + icon_state = "shrubber[rand(0,2)]" + +/obj/structure/flora/desert_planet/lbarrelcacti + name = "barrel cactus" + desc = "Absolutely begging for pets." + icon_state = "lbarrelcacti0" + +/obj/structure/flora/desert_planet/lbarrelcacti/New() + ..() + icon_state = "lbarrelcacti[rand(0,2)]" + +// Trees +/obj/structure/flora/tree/desert_planet + name = "palm tree" + desc = "Tall palm tree, makes for a good shade." + icon = 'modular_chomp/icons/obj/desert_planet/desert_planet_160x160.dmi' + density = FALSE + anchored = TRUE + can_buckle = FALSE + product = /obj/item/stack/material/log + product_amount = 50 + health = 2000 + max_health = 2000 + //var/fruit + +/obj/structure/flora/tree/desert_planet/palmtreeb + icon_state = "palmtreeb" + base_state = "palmr" // Necessary for stumps to work. + +/obj/structure/flora/tree/desert_planet/palmtreeb1 + icon_state = "palmtreeb1" + base_state = "palml" + +/obj/structure/flora/tree/desert_planet/palmtree + icon_state = "palmtree" + base_state = "palmr" + +/obj/structure/flora/tree/desert_planet/palmtree1 + icon_state = "palmtree1" + base_state = "palml" + +/obj/structure/flora/tree/desert_planet/mpalmtreeb + icon_state = "mpalmtreeb" + base_state = "palmr" + +/obj/structure/flora/tree/desert_planet/mpalmtreeb1 + icon_state = "mpalmtreeb1" + base_state = "palml" + +/obj/structure/flora/tree/desert_planet/mpalmtree + icon_state = "mpalmtree" + base_state = "palml" + +/obj/structure/flora/tree/desert_planet/mpalmtree1 + icon_state = "mpalmtree1" + base_state = "palmr" + +/obj/structure/flora/tree/desert_planet/spalmtree + icon_state = "spalmtree" + base_state = "palmls" + +/obj/structure/flora/tree/desert_planet/spalmtree1 + icon_state = "spalmtree1" + base_state = "palmrs" + +/obj/structure/flora/tree/desert_planet/spalmtree3 + icon_state = "spalmtree3" + base_state = "palmls" + +/obj/structure/flora/tree/desert_planet/spalmtree4 + icon_state = "spalmtree4" + base_state = "palmrs" + +/obj/structure/flora/tree/desert_planet/desert_tree + name = "barren tree" + desc = "Completely barren." + icon_state = "desert_tree" + base_state = "desert" + +/obj/structure/flora/tree/desert_planet/desert_tree1 + name = "gnarled tree" + desc = "Twisted but living." + icon_state = "desert_tree1" + base_state = "desert" + +/obj/structure/flora/tree/desert_planet/desert_tree3 + name = "hardy tree" + desc = "Thriving despite the conditions." + icon_state = "desert_tree3" + base_state = "desert" + product_amount = 100 + health = 4000 + max_health = 4000 diff --git a/modular_chomp/code/game/turfs/simulated/outdoors/desert_planet.dm b/modular_chomp/code/game/turfs/simulated/outdoors/desert_planet.dm index 58f1b1eea9..7b08e4eb6f 100644 --- a/modular_chomp/code/game/turfs/simulated/outdoors/desert_planet.dm +++ b/modular_chomp/code/game/turfs/simulated/outdoors/desert_planet.dm @@ -1,136 +1,257 @@ -/* Testing +// Parent turf. +/turf/simulated/floor/outdoors/desert_planet + name = "sand" + desc = "Salty and gritty." + icon = 'modular_chomp/icons/turf/desert_tiles.dmi' + icon_edge = 'modular_chomp/icons/turf/outdoors_edge.dmi' + can_dig = FALSE + /turf/simulated/floor/outdoors/desert_planet/sand name = "sand" - desc = "Sandy, taste salty and gritty." - icon = 'modular_chomp/icons/turf/desert_planet.dmi' + desc = "Salty and gritty." + icon_state = "sand0" edge_blending_priority = 2 - turf_layers = list(/turf/simulated/floor/outdoors/rocks) - initial_flooring = /decl/flooring/sand - can_dig = false -*/ + initial_flooring = /decl/flooring/desert_planet/sand -/turf/simulated/floor/outdoors/desert_planet/sand - name = "sand" - desc = "Salty and gritty." - icon = 'modular_chomp/icons/turf/desert_planet.dmi' - icon_state = "sand" - edge_blending_priority = 3 - turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand) +// Necessary to get the edges to generate correctly since we use a random-ish icon_state. Inelegant to hard code, but this is a one-off case. +/turf/simulated/floor/outdoors/desert_planet/sand/get_edge_icon_state() + return "sand" -/* Testing -/decl/flooring/outdoors/sand - name = "sand" - desc = "Salty and gritty." - icon = 'modular_chomp/icons/turf/desert_planet.dmi' - icon_base = "sand" - footstep_sounds = list("human" = list( - 'sound/effects/footstep/asteroid1.ogg', - 'sound/effects/footstep/asteroid2.ogg', - 'sound/effects/footstep/asteroid3.ogg', - 'sound/effects/footstep/asteroid4.ogg', - 'sound/effects/footstep/asteroid5.ogg', - 'sound/effects/footstep/MedDirt1.ogg', - 'sound/effects/footstep/MedDirt2.ogg', - 'sound/effects/footstep/MedDirt3.ogg', - 'sound/effects/footstep/MedDirt4.ogg')) +/turf/simulated/floor/outdoors/desert_planet/sand/Initialize(mapload) + . = ..() + icon_state = "sand[rand(0,2)]" -/turf/simulated/floor/outdoors/sand/Initialize(mapload) - var/possiblesands = list( - "ironsand1" = 50, - "ironsand2" = 1, - "ironsand3" = 1, - "ironsand4" = 1, - "ironsand5" = 1, - "ironsand6" = 1, - "ironsand7" = 1, - "ironsand8" = 1, - "ironsand9" = 1, - "ironsand10" = 1, - "ironsand11" = 1, - "ironsand12" = 1, - "ironsand13" = 1, - "ironsand14" = 1, - "ironsand15" = 1 - - ) - flooring_override = pickweight(possiblesands) - return ..() - -/turf/simulated/floor/water/hotspring - name = "Hotsprings" - desc = "A natural hotspring connecting to an aquifer. It seems the facility was built ontop of it." - edge_blending_priority = -2 - movement_cost = 8 - depth = 2 - water_state = "water_shallow" - outdoors = FALSE - -/turf/simulated/floor/water/hotspring/Entered(atom/movable/AM, atom/oldloc) - if(istype(AM, /mob/living)) - var/mob/living/L = AM - L.update_water() - if(L.check_submerged() <= 0) - return - if(!istype(oldloc, /turf/simulated/floor/water/hotspring)) - to_chat(L, "You feel an overwhelming wave of warmth from entering \the [src]!") - AM.water_act(5) - ..() - - -*/ +/turf/simulated/floor/outdoors/desert_planet/sand/attackby(var/obj/item/W, var/mob/user) + if(istype(W, /obj/item/weapon/shovel)) + to_chat(user, "You begin to remove \the [src] with your [W].") + if(do_after(user, 4 SECONDS * W.toolspeed)) + to_chat(user, "\The [src] has been dug up, and now lies in a pile nearby.") + icon_state = "sand_dug" + new /obj/item/weapon/ore/glass (src) + else + to_chat(user, "You decide to not finish removing \the [src].") + else + ..() /turf/simulated/floor/outdoors/desert_planet/deep_sand name = "sand" - desc = "Salty and gritty." - icon = 'modular_chomp/icons/turf/desert_planet.dmi' - icon_state = "deep_sand" - edge_blending_priority = 2 - turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand) + desc = "Really gets everywhere." + icon_state = "deep_sand0" + edge_blending_priority = 1 + movement_cost = 3 + initial_flooring = /decl/flooring/desert_planet/deep_sand + +/turf/simulated/floor/outdoors/desert_planet/deep_sand/Initialize(mapload) + . = ..() + icon_state = "deep_sand[rand(0,2)]" /turf/simulated/floor/outdoors/desert_planet/grass name = "grass" desc = "Lively green grass, soft to walk on." - icon = 'modular_chomp/icons/turf/desert_planet.dmi' icon_state = "grass" - edge_blending_priority = 6 - turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand) + edge_blending_priority = 5 + initial_flooring = /decl/flooring/desert_planet/grass /turf/simulated/floor/outdoors/desert_planet/deep_grass name = "dense grass" desc = "Dense patch of grass, seems like a soft spot to lay on." - icon = 'modular_chomp/icons/turf/desert_planet.dmi' icon_state = "deep_grass" - edge_blending_priority = 7 - turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand) + edge_blending_priority = 6 + initial_flooring = /decl/flooring/desert_planet/deep_grass /turf/simulated/floor/outdoors/desert_planet/gravel name = "gravel" desc = "Mix of dirt and sand, it crumbles in your hand." - icon = 'modular_chomp/icons/turf/desert_planet.dmi' icon_state = "gravel" - edge_blending_priority = 5 - turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand) + edge_blending_priority = 3 + initial_flooring = /decl/flooring/desert_planet/gravel /turf/simulated/floor/outdoors/desert_planet/mud name = "mud" desc = "Squishy damp dirt, smells muddy." - icon = 'modular_chomp/icons/turf/desert_planet.dmi' icon_state = "mud" edge_blending_priority = 4 - turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand) + initial_flooring = /decl/flooring/desert_planet/mud +// At last we've come full circle, a floor which is actually a wall. +/turf/simulated/floor/outdoors/desert_planet/stonewall + name = "sandstone" + desc = "Rough sandstone." + icon_state = "stonewall" + density = TRUE + opacity = TRUE + edge_blending_priority = 7 + initial_flooring = /decl/flooring/desert_planet/stonewall + turf_layers = list(/turf/simulated/floor/outdoors/rocks) + var/last_act = 0 + +// Stolen from mineral turf code. +/turf/simulated/floor/outdoors/desert_planet/stonewall/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(!user.IsAdvancedToolUser()) + to_chat(user, "You don't have the dexterity to do this!") + return + + if(istype(W, /obj/item/weapon/pickaxe)) + if(!istype(user.loc, /turf)) + return + + var/obj/item/weapon/pickaxe/P = W + if(last_act + P.digspeed > world.time)//prevents message spam + return + last_act = world.time + + playsound(user, P.drill_sound, 20, 1) + to_chat(user, "You start [P.drill_verb].") + + if(do_after(user,P.digspeed)) + + to_chat(user, "You finish [P.drill_verb] \the [src].") + new /obj/item/stack/material/sandstone(src) + density = FALSE + opacity = FALSE + demote() // Converts the turf to the next layer in turf_layers. + ..() + +/turf/simulated/floor/outdoors/desert_planet/sandrock + name = "sandstone tiles" + desc = "Tightly joined in a mesmerizing lattice." + icon_state = "sandrock" + density = TRUE + opacity = TRUE + initial_flooring = /decl/flooring/desert_planet/sandrock + +// Declarations (for initial_flooring) +/decl/flooring/desert_planet // Yeah don't use this one, it's a parent just for setting icon. + name = "desert stuff" + desc = "If you see this, this turf is using the wrong decl." + icon = 'modular_chomp/icons/turf/desert_tiles.dmi' + icon_base = null + +/decl/flooring/desert_planet/sand + name = "sand" + desc = "Salty and gritty." + icon_base = "sand" + has_base_range = 2 + +/decl/flooring/desert_planet/deep_sand + name = "sand" + desc = "Really gets everywhere." + icon_base = "deep_sand" + has_base_range = 2 + +/decl/flooring/desert_planet/grass + name = "grass" + desc = "Lively green grass, soft to walk on." + icon_base = "grass" + +/decl/flooring/desert_planet/deep_grass + name = "dense grass" + desc = "Dense patch of grass, seems like a soft spot to lay on." + icon_base = "deep_grass" + +/decl/flooring/desert_planet/gravel + name = "gravel" + desc = "Mix of dirt and sand, it crumbles in your hand." + icon_base = "gravel" + +/decl/flooring/desert_planet/mud + name = "mud" + desc = "Squishy damp dirt, smells muddy." + icon_base = "mud" + +/decl/flooring/desert_planet/stonewall + name = "sandstone" + desc = "Rough sandstone." + icon_base = "stonewall" + +/decl/flooring/desert_planet/sandrock + name = "sandstone tiles" + desc = "Tightly joined in a mesmerizing lattice." + icon_base = "sandrock" + flags = TURF_HAS_EDGES | TURF_HAS_CORNERS + +/* +/obj/effect/floor_decal/desert_planet/floor/sand0_edge + name = "sand0_edge" + icon = 'icons/turf/desert_planet.dmi' + icon_state = "sand0_edge" + +/obj/effect/floor_decal/desert_planet/floor/gravel_edge + name = "gravel_edge" + icon = 'icons/turf/desert_planet.dmi' + icon_state = "gravel_edge" + +/obj/effect/floor_decal/desert_planet/floor/mud_edge + name = "mud_edge" + icon = 'icons/turf/desert_planet.dmi' + icon_state = "mud_edge" + +/obj/effect/floor_decal/desert_planet/floor/grass_edge + name = "grass_edge" + icon = 'icons/turf/desert_planet.dmi' + icon_state = "grass_edge" + +/obj/effect/floor_decal/desert_planet/floor/deep_grass_edge + name = "deep_grass_edge" + icon = 'icons/turf/desert_planet.dmi' + icon_state = "deep_grass_edge" +*/ + +/* #No idea how water tiles work /turf/simulated/floor/outdoors/desert_planet/water name = "water" desc = "Clear cool water, looks potable." - icon = 'modular_chomp/icons/turf/desert_planet.dmi' + icon = 'icons/turf/desert_planet.dmi' icon_state = "water" - edge_blending_priority = 8 + var/water_state = "water_shallow" + var/under_state = "sand" + can_be_plated = FALSE + outdoors = OUTDOORS_YES + flags = TURF_ACID_IMMUNE + layer = WATER_FLOOR_LAYER + can_dirty = FALSE // It's water + var/depth = 1 // Higher numbers indicates deeper water. + var/reagent_type = "water" + edge_blending_priority = 2 turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand) /turf/simulated/floor/outdoors/desert_planet/deep_water name = "deep water" desc = "deep enough you can't see the bottom of it." - icon = 'modular_chomp/icons/turf/desert_planet.dmi' + icon = 'icons/turf/desert_planet.dmi' icon_state = "deep_water" - edge_blending_priority = 9 + var/water_state = "water_shallow" + var/under_state = "sand" + can_be_plated = FALSE + outdoors = OUTDOORS_YES + flags = TURF_ACID_IMMUNE + layer = WATER_FLOOR_LAYER + can_dirty = FALSE // It's water + var/depth = 2 // Higher numbers indicates deeper water. + var/reagent_type = "water" + edge_blending_priority = 4 turf_layers = list(/turf/simulated/floor/outdoors/desert_planet/sand) + + //I want this for the water tiles +/turf/simulated/floor/water + name = "shallow water" + desc = "A body of water. It seems shallow enough to walk through, if needed." + icon = 'icons/turf/outdoors.dmi' + icon_state = "seashallow" // So it shows up in the map editor as water. + var/water_state = "water_shallow" + var/under_state = "rock" + edge_blending_priority = -1 + movement_cost = 4 + can_be_plated = FALSE + outdoors = OUTDOORS_YES + flags = TURF_ACID_IMMUNE + + layer = WATER_FLOOR_LAYER + + can_dirty = FALSE // It's water + + var/depth = 1 // Higher numbers indicates deeper water. + + var/reagent_type = "water" + // var/datum/looping_sound/water/soundloop CHOMPEdit: Removing soundloop for now. +*/ diff --git a/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/desert_planet_mobs.dm b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/desert_planet_mobs.dm new file mode 100644 index 0000000000..fb6f3a0e00 --- /dev/null +++ b/modular_chomp/code/modules/mob/living/simple_mob/subtypes/vore/desert_planet_mobs.dm @@ -0,0 +1,47 @@ +/mob/living/simple_mob/animal/passive/dog/stray + name = "dog" + desc = "The most standard dog you have ever seen, it even smells like one." + tt_desc = "Canis lupus familiaris" + //faction = "mexico" //They are from Mexico. //Amusing but this prompts aggression from crew-aligned mobs. + + icon = 'modular_chomp/icons/turf/desert_tiles.dmi' + icon_state = "dog" + item_state = "dog" + icon_living = "dog" + icon_rest = "dog" + icon_dead = "dog" + + health = 50 + maxHealth = 50 + + mob_size = MOB_SMALL + pass_flags = PASSTABLE + can_pull_size = ITEMSIZE_TINY + can_pull_mobs = MOB_PULL_NONE + layer = MOB_LAYER + density = 1 + movement_cooldown = 0.75 //roughly a bit faster than a person + + response_help = "pets" + response_disarm = "rolls aside" + response_harm = "stomps" + + melee_damage_lower = 5 + melee_damage_upper = 7 + attacktext = list("nips", "bumps", "scratches") + + vore_taste = "wet dog" + + min_oxy = 16 //Require atleast 16kPA oxygen + minbodytemp = 223 //Below -50 Degrees Celcius + maxbodytemp = 523 //Above 80 Degrees Celcius + heat_damage_per_tick = 3 + cold_damage_per_tick = 3 + + meat_amount = 7 + holder_type = /obj/item/weapon/holder/armadillo + ai_holder_type = /datum/ai_holder/simple_mob/armadillo + + speak_emote = list("rumbles", "chirr?", "churr") + + say_list_type = /datum/say_list/armadillo diff --git a/modular_chomp/code/modules/organs/organ_icon.dm b/modular_chomp/code/modules/organs/organ_icon.dm index 339a45a4f6..6088084a06 100644 --- a/modular_chomp/code/modules/organs/organ_icon.dm +++ b/modular_chomp/code/modules/organs/organ_icon.dm @@ -4,10 +4,11 @@ // preferentially take digitigrade value from owner if available, THEN DNA. // this allows limbs to be set properly when being printed in the bioprinter without an owner // this also allows the preview mannequin to update properly because customisation topic calls don't call a DNA check + var/check_digi = istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot) if(owner) - digitigrade = owner.digitigrade && (istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot)) + digitigrade = check_digi && owner.digitigrade else if(dna) - digitigrade = dna.digitigrade && (istype(src,/obj/item/organ/external/leg) || istype(src,/obj/item/organ/external/foot)) + digitigrade = check_digi && dna.digitigrade var/robotic_digi = prosthetic_digi && digitigrade //could make it so the prosthetic digi var is more of a "does this limb have a custom digitigrade sprite for its robospriting" but this is fine for now @@ -57,13 +58,15 @@ if((!istype(src,/obj/item/organ/external/head) && !(force_icon && !robotic_digi)) || (model && owner && owner.synth_markings)) for(var/M in markings) var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"] - var/isdigitype = istype(mark_style,/datum/sprite_accessory/marking/digi) - if(!(digitigrade ^ isdigitype)) //Equivalent to XNOR; this code will only run if either both digitigrade and isdigitype are true, or if both are false. - var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]") - mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit - add_overlay(mark_s) //So when it's not on your body, it has icons - mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons - icon_cache_key += "[M][markings[M]["color"]]" + var/isdigitype = mark_style.digitigrade_acceptance + if(check_digi) + if (!(isdigitype & (digitigrade ? MARKING_DIGITIGRADE_ONLY : MARKING_NONDIGI_ONLY))) //checks flags based on which digitigrade type the limb is + continue + var/icon/mark_s = new/icon("icon" = digitigrade ? mark_style.digitigrade_icon : mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]") + mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode) // VOREStation edit + add_overlay(mark_s) //So when it's not on your body, it has icons + mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons + icon_cache_key += "[M][markings[M]["color"]]" if(body_hair && islist(h_col) && h_col.len >= 3) var/cache_key = "[body_hair]-[icon_name]-[h_col[1]][h_col[2]][h_col[3]]" if(!limb_icon_cache[cache_key]) diff --git a/modular_chomp/icons/obj/desert_planet/desert_planet_160x160.dmi b/modular_chomp/icons/obj/desert_planet/desert_planet_160x160.dmi new file mode 100644 index 0000000000..2aa297b86c Binary files /dev/null and b/modular_chomp/icons/obj/desert_planet/desert_planet_160x160.dmi differ diff --git a/modular_chomp/icons/obj/desert_planet/desert_plants.dmi b/modular_chomp/icons/obj/desert_planet/desert_plants.dmi new file mode 100644 index 0000000000..3eb6d1c042 Binary files /dev/null and b/modular_chomp/icons/obj/desert_planet/desert_plants.dmi differ diff --git a/modular_chomp/icons/obj/desert_planet/desert_props_64x64.dmi b/modular_chomp/icons/obj/desert_planet/desert_props_64x64.dmi new file mode 100644 index 0000000000..766e457d24 Binary files /dev/null and b/modular_chomp/icons/obj/desert_planet/desert_props_64x64.dmi differ diff --git a/modular_chomp/icons/obj/desert_planet/desert_rocks.dmi b/modular_chomp/icons/obj/desert_planet/desert_rocks.dmi new file mode 100644 index 0000000000..3da476f9dd Binary files /dev/null and b/modular_chomp/icons/obj/desert_planet/desert_rocks.dmi differ diff --git a/modular_chomp/icons/turf/desert_planet.dmi b/modular_chomp/icons/turf/desert_planet.dmi deleted file mode 100644 index c9b6d3a7b5..0000000000 Binary files a/modular_chomp/icons/turf/desert_planet.dmi and /dev/null differ diff --git a/modular_chomp/icons/turf/desert_tiles.dmi b/modular_chomp/icons/turf/desert_tiles.dmi new file mode 100644 index 0000000000..5a4d197acc Binary files /dev/null and b/modular_chomp/icons/turf/desert_tiles.dmi differ diff --git a/modular_chomp/icons/turf/outdoors_edge.dmi b/modular_chomp/icons/turf/outdoors_edge.dmi index c9b6d3a7b5..f94dbd8ee0 100644 Binary files a/modular_chomp/icons/turf/outdoors_edge.dmi and b/modular_chomp/icons/turf/outdoors_edge.dmi differ diff --git a/vorestation.dme b/vorestation.dme index ac88f3b17e..515aa06470 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -71,6 +71,7 @@ #include "code\__defines\misc_ch.dm" #include "code\__defines\misc_vr.dm" #include "code\__defines\mobs.dm" +#include "code\__defines\mobs_ch.dm" #include "code\__defines\mobs_vr.dm" #include "code\__defines\mobs_yw.dm" #include "code\__defines\nifsoft.dm" @@ -4525,6 +4526,7 @@ #include "modular_chomp\code\game\machinery\airconditioner_ch.dm" #include "modular_chomp\code\game\machinery\autolathe_armory.dm" #include "modular_chomp\code\game\objects\items\clockwork\ratvarian_spear.dm" +#include "modular_chomp\code\game\objects\structures\desert_planet_structures.dm" #include "modular_chomp\code\game\objects\structures\loot_pile.dm" #include "modular_chomp\code\game\objects\structures\watercloset_ch.dm" #include "modular_chomp\code\game\objects\structures\crate_lockers\largecrate.dm" @@ -4591,6 +4593,7 @@ #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\mechanical\mecha\gygax.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\occult\constructs\juggernaut.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\bigdragon.dm" +#include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\desert_planet_mobs.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\greatwolf.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\swoopie.dm" #include "modular_chomp\code\modules\mob\living\simple_mob\subtypes\vore\vore.dm"