Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/obj/structure/flora/ausbushes/moghes
icon = 'modular_starfly/modules/desert-resources/icons/obj/flora/desert.dmi'
icon_state = "firstbush_1"

/obj/structure/flora/ausbushes/moghes/firstbush1
icon_state = "firstbush_1"

/obj/structure/flora/ausbushes/moghes/firstbush2
icon_state = "firstbush_2"

/obj/structure/flora/ausbushes/moghes/firstbush3
icon_state = "firstbush_3"

/obj/structure/flora/ausbushes/moghes/firstbush4
icon_state = "firstbush_4"

/obj/structure/flora/ausbushes/moghes/fullgrass1
icon_state = "fullgrass_1"

/obj/structure/flora/ausbushes/moghes/fullgrass2
icon_state = "fullgrass_2"

/obj/structure/flora/ausbushes/moghes/fullgrass3
icon_state = "fullgrass_3"

/obj/structure/flora/ausbushes/moghes/grassbush1
icon_state = "grassybush_1"

/obj/structure/flora/ausbushes/moghes/grassbush2
icon_state = "grassybush_2"

/obj/structure/flora/ausbushes/moghes/grassbush3
icon_state = "grassybush_3"

/obj/structure/flora/ausbushes/moghes/grassbush4
icon_state = "grassybush_4"

/obj/structure/flora/ausbushes/moghes/sparsegrass1
icon_state = "sparsegrass_1"

/obj/structure/flora/ausbushes/moghes/sparsegrass2
icon_state = "sparsegrass_2"

/obj/structure/flora/ausbushes/moghes/sparsegrass3
icon_state = "sparsegrass_3"
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
/obj/structure/sign/flag/hegemony
name = "Sothrai Hegemony Blood Horizon flag"
desc = "The national flag of the Sothrai Hegemony. The red streak of the horizon represents the brutality of Moghes, kept at bay by guiding hands of the Sothrai Hegemon."
icon = 'modular_starfly/modules/desert-resources/icons/obj/structures/signs/wallflags.dmi'
icon_state = "flag_hegemony"
item_flag = /obj/item/sign/flag/hegemony

/obj/item/sign/flag/hegemony
name = "folded Sothrai Hegemony Blood Horizon flag"
desc = "The national flag of the Sothrai Hegemony. The red streak of the horizon represents the brutality of Moghes, kept at bay by guiding hands of the Sothrai Hegemon."
icon = 'modular_starfly/modules/desert-resources/icons/obj/structures/signs/wallflags.dmi'
icon_state = "folded_hegemony"
sign_path = /obj/structure/sign/flag/hegemony
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
/mob/living/simple_animal/threshbeast
name = "threshbeast"
desc = "Large herbivorous reptiles native to Moghes, the azkrazal or 'threshbeast' is commonly used as a mount, beast of burden, or convenient food source by Unathi. They are highly valued for their speed and strength, capable of running at 30-42 miles per hour at top speed. Their favorite foods are grasses and cactus fruits"
icon = 'modular_starfly/modules/desert-resources/icons/mob/moghes/threshbeast.dmi'
icon_state = "threshbeast"
icon_living = "threshbeast"
icon_dead = "threshbeast_dead"
butcher_results = list(/obj/item/stack/sheet/animalhide/lizard = 2, /obj/item/food/meat/slab = 6)
response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "pushes"
response_disarm_simple = "pushes"
response_harm_continuous = "strikes"
response_harm_simple = "strikes"
speak_chance = 1
turns_per_move = 5
speak_emote = list("chuffs", "hisses", "bellows")
emote_hear = list("chuffs", "hisses", "bellows")
emote_see = list("shakes its head", "thumps its tail")
mob_biotypes = MOB_ORGANIC|MOB_BEAST|MOB_REPTILE
move_resist = MOVE_FORCE_VERY_STRONG
food_type = list(/obj/item/food/grown/ash_flora/cactus_fruit, /obj/item/food/grown/ash_flora/fern, /obj/item/food/grown/grass, /obj/item/food/grown/grass/fairy, /obj/item/food/grown/grass/carpet) // Herbivore
base_pixel_x = -15
maxHealth = 100
health = 100
tame_chance = 15
bonus_tame_chance = 30
speed = 3
harm_intent_damage = 0
melee_damage_lower = 12
melee_damage_upper = 20
var/saddled = FALSE

/mob/living/simple_animal/threshbeast/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/saddle) && !saddled)
if(tame && do_after(user, 55, target=src))
user.visible_message("<span class='notice'>You manage to put [O] on [src], you can now ride [p_them()].</span>")
qdel(O)
saddled = TRUE
can_buckle = TRUE
buckle_lying = FALSE
add_overlay("threshbeast_saddled")
var/datum/component/riding/D = LoadComponent(/datum/component/riding)
D.set_riding_offsets(RIDING_OFFSET_ALL, list(TEXT_NORTH = list(0, 8), TEXT_SOUTH = list(0, 8), TEXT_EAST = list(-2, 8), TEXT_WEST = list(2, 8)))
D.set_vehicle_dir_layer(SOUTH, ABOVE_MOB_LAYER)
D.set_vehicle_dir_layer(NORTH, OBJ_LAYER)
D.set_vehicle_dir_layer(EAST, OBJ_LAYER)
D.set_vehicle_dir_layer(WEST, OBJ_LAYER)
D.drive_verb = "ride"
else
user.visible_message("<span class='warning'>[src] is rocking around! You can't put the saddle on!</span>")
return
..()

/mob/living/simple_animal/threshbeast/brown
icon_state = "threshbeastbrown"
icon_living = "threshbeastbrown"
icon_dead = "threshbeastbrown_dead"

/mob/living/simple_animal/threshbeast/grey
icon_state = "threshbeastgrey"
icon_living = "threshbeastgrey"
icon_dead = "threshbeastgrey_dead"

/mob/living/simple_animal/threshbeast/red
icon_state = "threshbeastred"
icon_living = "threshbeastred"
icon_dead = "threshbeastred_dead"

/mob/living/simple_animal/miervesh
name = "Mier'vesh"
desc = "A small, sweet-tempered flying reptile from Moghes. Frequently samples the air with a long, thin forked tongue. They are popular animals among Ouerean Unathi as they are small and sweet tempered, making them slow to respond to danger." //'
icon = 'modular_starfly/modules/desert-resources/icons/mob/moghes/miervesh.dmi'
icon_state = "miervesh-1"
icon_living = "miervesh-1"
icon_dead = "miervesh-1-dead"
density = FALSE
health = 4
maxHealth = 4
butcher_results = list(/obj/item/food/meat/slab/chicken = 1)
melee_damage_upper = 2
melee_damage_lower = 0
speak_chance = 1
speak = list("Chirp!","peep!","tweet!")
speak_emote = list("croons","chirps","hisses")
emote_hear = list("croons.","chirps.","hisses.")
emote_see = list("pecks at the ground","flaps its wings","flicks out its tongue")
turns_per_move = 5

response_help_continuous = "pets"
response_help_simple = "pet"
response_disarm_continuous = "gently moves aside"
response_disarm_simple = "gently move aside"
response_harm_continuous = "swats"
response_harm_simple = "swat"
a_intent = INTENT_HARM //wild animals aren't going to be your best friend, but a player-controlled one might be tame enough.
attack_verb_continuous = "chomps"
attack_verb_simple = "chomp"
friendly_verb_continuous = "grooms"
friendly_verb_simple = "groom"
mob_size = MOB_SIZE_SMALL
movement_type = FLYING

/mob/living/simple_animal/miervesh/red
icon_state = "miervesh-2"
icon_living = "miervesh-2"
icon_dead = "miervesh-2-dead"
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/obj/machinery/light/street
name = "street light"
icon = 'modular_starfly/modules/desert-resources/icons/obj/lighting_32x50.dmi'
base_state = "streetlight"
icon_state= "streetlight-on"
desc = "A cheaper-quality streetlight used in small towns."
layer = ABOVE_OBJ_LAYER
brightness = 10

obj/machinery/light/street/broken
status = LIGHT_BROKEN
icon_state = "streetlight-broken"

obj/machinery/light/street/pawn
name = "pawn shop lamp"
base_state = "pawnlight"
icon_state = "pawnlight-on"
desc = "Traditionally, pawn shops used to have lamps featuring three bulbs by their signs. Many pawn shops still use imagery featuring these lamps to this day."
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
5 changes: 4 additions & 1 deletion shiptest.dme
Original file line number Diff line number Diff line change
Expand Up @@ -1227,7 +1227,6 @@
#include "code\game\machinery\telecomms\machines\server.dm"
#include "code\game\MapData\outposts\cybersun_gas_giant.dm"
#include "code\game\MapData\shuttles\independent_shetland.dm"
#include "code\game\MapData\shuttles\independent_shetland.dm"
#include "code\game\MapData\shuttles\misc.dm"
#include "code\game\MapData\shuttles\pgf_bolide.dm"
#include "code\game\MapData\shuttles\pgf_crying_sun.dm"
Expand Down Expand Up @@ -3826,6 +3825,10 @@
#include "modular_starfly\modules\admin_verb_freeze\overlays.dm"
#include "modular_starfly\modules\cryosleep_symptoms\cryopod.dm"
#include "modular_starfly\modules\cryosleep_symptoms\game_options.dm"
#include "modular_starfly\modules\desert-resources\code\game\objects\structures\flora.dm"
#include "modular_starfly\modules\desert-resources\code\game\objects\structures\signs\signs_flags.dm"
#include "modular_starfly\modules\desert-resources\code\modules\mob\living\simple_animal\friendly\moghes.dm"
#include "modular_starfly\modules\desert-resources\code\modules\power\lighting.dm"
#include "modular_starfly\modules\new_wearables\contraband.dm"
#include "modular_starfly\modules\new_wearables\loadout_accessories.dm"
#include "modular_starfly\modules\new_wearables\loadout_hat.dm"
Expand Down
3 changes: 3 additions & 0 deletions tools/starfly/ci/lint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ echo "# Checking shiptest.dme"
echo "## Checking FILE_DIR directives in shiptest.dme"
tools/starfly/ci/check_file_dir.sh

echo "## Checking include types in shiptest.dme"
python3 tools/starfly/python/check_dme_includes.py shiptest.dme

echo "## Checking include order in shiptest.dme"
python3 tools/starfly/python/check_dme_order.py shiptest.dme

Expand Down
64 changes: 64 additions & 0 deletions tools/starfly/python/check_dme_includes.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
#!/usr/bin/env python3
# check_dme_includes.py
# Copyright 2026 Patrick Meade.
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#----------------------------------------------------------------------------

import sys
from pathlib import Path

EXPECTED_SUFFIXES = [".dm", ".dmf"]

def get_includes(file_path):
with open(file_path, 'r') as file:
lines = file.readlines()

includes = [line for line in lines if line.strip().startswith('#include')]
paths = [line.split('#include')[1].strip().strip('"') for line in includes]
return paths

def check_dme_include_types(file_path):
# until we know otherwise, all the path suffixes are legitimate
all_good = True

# get all of the include paths from the .dme file
paths = get_includes(file_path)

# for each include path in the dme file
for include_path_str in paths:
# turn it into a python Path object
include_path = Path(include_path_str)

# if the path suffix is NOT one of the ones we expect
if include_path.suffix not in EXPECTED_SUFFIXES:
# set the all_good flag to False
all_good = False
# tell the user what we found
print(f'#include "{include_path_str}" has suffix "{include_path.suffix}"')

# if we found an error
if not all_good:
print(f"Some #include paths in {file_path} are a little sus.")

# return our result to ther caller
return all_good


if __name__ == "__main__":
file_path = sys.argv[1]
if not check_dme_include_types(file_path):
sys.exit(1)
else:
print("All #include paths have suffixes we expected.")