PoP roomtest: ресурсы по каталогам образа (BG/KID/LEVELS), цель make hdd
Все .atl лежали в корне диска рядом с exe — с атласами стражей корень зарос бы окончательно. Теперь ресурсы разложены по каталогам (8.3, как принято в DSS): BG\ фон (env0..4, wall, fore, pot) KID\ персонаж (kid0..27, kid.pal, sword, kid_data.bin) GUARD\ стражи (появятся здесь) LEVELS\ уровни (res2001.bin) make_hdd.sh принимает аргумент вида КАТАЛОГ:файл — создаёт каталог на образе и кладёт файл туда; без префикса файл идёт в корень. В Makefile roomtest появилась цель `make hdd`, которая собирает образ с этой раскладкой (раньше команда набиралась руками на 15 строк). Проверено в MAME: DSS открывает пути вида KID\kid0.atl — комната рисуется, Kid и факелы на месте, то есть все атласы, палитра, таблицы анимации и уровень грузятся из подкаталогов. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -34,6 +34,19 @@ KID_BIN := $(KID_DIR)/kid_data.bin
|
||||
EXTRA_DATA := $(BG_DATA) $(KID_DATA) $(KID_BIN) $(LVL_DATA)
|
||||
include $(PROJ_ROOT)/app.mk
|
||||
|
||||
# Образ HDD для MAME: ресурсы раскладываются ПО КАТАЛОГАМ (8.3, как в DSS),
|
||||
# чтобы корень диска не зарастал десятками .atl.
|
||||
# BG\ — фон (env/wall/fore/pot)
|
||||
# KID\ — персонаж (kid0..27, палитра, меч, таблицы анимации)
|
||||
# GUARD\ — стражи (появятся здесь же)
|
||||
# LEVELS\ — уровни
|
||||
hdd: $(EXAMPLE).exe
|
||||
$(PROJ_ROOT)/toolchain/make_hdd.sh $(PROJ_ROOT)/mame/v306/IMG/test_hdd.chd \
|
||||
$(EXAMPLE).exe \
|
||||
$(foreach f,$(BG_DATA),BG:$(f)) \
|
||||
$(foreach f,$(KID_DATA) $(KID_BIN),KID:$(f)) \
|
||||
LEVELS:$(LVL_DATA)
|
||||
|
||||
TC := $(PROJ_ROOT)/applications/PoP/toolchain
|
||||
$(BG_DATA): $(TC)/pop_pack_bg.py $(TC)/render_room.py
|
||||
cd $(TC) && python3 pop_pack_bg.py
|
||||
|
||||
@@ -25,8 +25,11 @@ static atlas_t fore_at;
|
||||
static atlas_t pot_at; /* chtab_1: зелья (склянка + пузырёк) */
|
||||
|
||||
static const char *const ENV_ATL[5] = {
|
||||
"pop_env0.atl", "pop_env1.atl", "pop_env2.atl",
|
||||
"pop_env3.atl", "pop_env4.atl"
|
||||
/* Ресурсы разложены по каталогам образа (8.3, как в DSS): BG — фон,
|
||||
* KID — персонаж, GUARD — стражи, LEVELS — уровни. Иначе корень диска
|
||||
* зарастает десятками .atl. */
|
||||
"BG\\pop_env0.atl", "BG\\pop_env1.atl", "BG\\pop_env2.atl",
|
||||
"BG\\pop_env3.atl", "BG\\pop_env4.atl"
|
||||
};
|
||||
|
||||
int pop_bg_load(void)
|
||||
@@ -34,9 +37,9 @@ int pop_bg_load(void)
|
||||
int i;
|
||||
for (i = 0; i < 5; i++)
|
||||
if (atlas_load(&env[i], ENV_ATL[i]) != 0) return -1;
|
||||
if (atlas_load(&wall_at, "pop_wall.atl") != 0) return -1;
|
||||
if (atlas_load(&fore_at, "pop_fore.atl") != 0) return -1;
|
||||
if (atlas_load(&pot_at, "pop_pot.atl") != 0) return -1;
|
||||
if (atlas_load(&wall_at, "BG\\pop_wall.atl") != 0) return -1;
|
||||
if (atlas_load(&fore_at, "BG\\pop_fore.atl") != 0) return -1;
|
||||
if (atlas_load(&pot_at, "BG\\pop_pot.atl") != 0) return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ static uint8_t sword_ok;
|
||||
|
||||
int pop_sword_load(void)
|
||||
{
|
||||
if (atlas_load(&swordp, "sword.atl") != 0) return -1;
|
||||
if (atlas_load(&swordp, "KID\\sword.atl") != 0) return -1;
|
||||
sword_ok = 1;
|
||||
return 0;
|
||||
}
|
||||
@@ -49,11 +49,11 @@ int pop_sword_load(void)
|
||||
int pop_kid_load(uint8_t npages)
|
||||
{
|
||||
static const char *const names[KID_MAXPAGES] = {
|
||||
"kid0.atl","kid1.atl","kid2.atl","kid3.atl","kid4.atl","kid5.atl",
|
||||
"kid6.atl","kid7.atl","kid8.atl","kid9.atl","kid10.atl","kid11.atl",
|
||||
"kid12.atl","kid13.atl","kid14.atl","kid15.atl","kid16.atl","kid17.atl",
|
||||
"kid18.atl","kid19.atl","kid20.atl","kid21.atl","kid22.atl","kid23.atl",
|
||||
"kid24.atl","kid25.atl","kid26.atl","kid27.atl"
|
||||
"KID\\kid0.atl","KID\\kid1.atl","KID\\kid2.atl","KID\\kid3.atl","KID\\kid4.atl","KID\\kid5.atl",
|
||||
"KID\\kid6.atl","KID\\kid7.atl","KID\\kid8.atl","KID\\kid9.atl","KID\\kid10.atl","KID\\kid11.atl",
|
||||
"KID\\kid12.atl","KID\\kid13.atl","KID\\kid14.atl","KID\\kid15.atl","KID\\kid16.atl","KID\\kid17.atl",
|
||||
"KID\\kid18.atl","KID\\kid19.atl","KID\\kid20.atl","KID\\kid21.atl","KID\\kid22.atl","KID\\kid23.atl",
|
||||
"KID\\kid24.atl","KID\\kid25.atl","KID\\kid26.atl","KID\\kid27.atl"
|
||||
};
|
||||
uint8_t i;
|
||||
if (npages > KID_MAXPAGES) npages = KID_MAXPAGES;
|
||||
|
||||
@@ -214,7 +214,7 @@ int main(void)
|
||||
}
|
||||
pop_cheats = 1; /* режим разработки: читы включены */
|
||||
pop_guard_reset();
|
||||
if (pop_kid_data_load("kid_data.bin") != 0) { /* кадры+seqtbl в EMM-странице */
|
||||
if (pop_kid_data_load("KID\\kid_data.bin") != 0) { /* кадры+seqtbl в EMM-странице */
|
||||
printf("kid_data.bin load failed\n");
|
||||
return 1;
|
||||
}
|
||||
@@ -223,7 +223,7 @@ int main(void)
|
||||
puts("kid atlas load failed");
|
||||
return 1;
|
||||
}
|
||||
if (pop_level_load("res2001.bin") != 0 && /* сырой уровень 1 в EMM-страницу */
|
||||
if (pop_level_load("LEVELS\\res2001.bin") != 0 && /* сырой уровень 1 в EMM-страницу */
|
||||
pop_level_load("a:\\res2001.bin") != 0) {
|
||||
puts("level load failed");
|
||||
return 1;
|
||||
@@ -231,7 +231,7 @@ int main(void)
|
||||
|
||||
initgraph();
|
||||
gfx_set_visible_page(0);
|
||||
if (gfx_pal_fload(0, "kid.pal") < 0) /* единая игровая палитра */
|
||||
if (gfx_pal_fload(0, "KID\\kid.pal") < 0) /* единая игровая палитра */
|
||||
gfx_pal_fload(0, "a:\\kid.pal");
|
||||
gfx_pal_sync(); /* палитра 0 -> плоскость 1 */
|
||||
|
||||
|
||||
+13
-2
@@ -11,6 +11,9 @@
|
||||
#
|
||||
# Использование:
|
||||
# toolchain/make_hdd.sh mame/v306/IMG/test_hdd.chd prog.exe data1 data2 ...
|
||||
# toolchain/make_hdd.sh out.chd prog.exe KID:kid0.atl GUARD:g0.atl ...
|
||||
# — аргумент вида КАТАЛОГ:файл кладёт файл в подкаталог образа
|
||||
# (каталог создаётся); без префикса файл идёт в корень.
|
||||
set -e
|
||||
|
||||
if [ $# -lt 2 ]; then
|
||||
@@ -39,12 +42,20 @@ export MTOOLSRC="$MTC" MTOOLS_SKIP_CHECK=1
|
||||
mpartition -I -c -t $CYLS -h $HEADS -s $SECS z:
|
||||
mformat z:
|
||||
|
||||
# Аргумент может быть либо файлом (кладём в корень), либо парой
|
||||
# КАТАЛОГ:файл — тогда каталог создаётся на образе и файл кладётся туда.
|
||||
# Имена на Sprinter/DSS — 8.3, каталоги тоже (KID, GUARD, BG, LEVELS...).
|
||||
for f in "$@"; do
|
||||
mcopy -o "$f" z:
|
||||
case "$f" in
|
||||
*:*) dir="${f%%:*}"; src="${f#*:}"
|
||||
mmd "z:/$dir" 2>/dev/null || true
|
||||
mcopy -o "$src" "z:/$dir/" ;;
|
||||
*) mcopy -o "$f" z: ;;
|
||||
esac
|
||||
done
|
||||
|
||||
echo "--- содержимое образа ---"
|
||||
mdir z:
|
||||
mdir -/ z:
|
||||
|
||||
# RAW -> CHD (без сжатия = быстро; та же геометрия).
|
||||
chdman createhd -i "$RAW" -o "$OUT_CHD" -c none \
|
||||
|
||||
Reference in New Issue
Block a user