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)
|
EXTRA_DATA := $(BG_DATA) $(KID_DATA) $(KID_BIN) $(LVL_DATA)
|
||||||
include $(PROJ_ROOT)/app.mk
|
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
|
TC := $(PROJ_ROOT)/applications/PoP/toolchain
|
||||||
$(BG_DATA): $(TC)/pop_pack_bg.py $(TC)/render_room.py
|
$(BG_DATA): $(TC)/pop_pack_bg.py $(TC)/render_room.py
|
||||||
cd $(TC) && python3 pop_pack_bg.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 atlas_t pot_at; /* chtab_1: зелья (склянка + пузырёк) */
|
||||||
|
|
||||||
static const char *const ENV_ATL[5] = {
|
static const char *const ENV_ATL[5] = {
|
||||||
"pop_env0.atl", "pop_env1.atl", "pop_env2.atl",
|
/* Ресурсы разложены по каталогам образа (8.3, как в DSS): BG — фон,
|
||||||
"pop_env3.atl", "pop_env4.atl"
|
* 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)
|
int pop_bg_load(void)
|
||||||
@@ -34,9 +37,9 @@ int pop_bg_load(void)
|
|||||||
int i;
|
int i;
|
||||||
for (i = 0; i < 5; i++)
|
for (i = 0; i < 5; i++)
|
||||||
if (atlas_load(&env[i], ENV_ATL[i]) != 0) return -1;
|
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(&wall_at, "BG\\pop_wall.atl") != 0) return -1;
|
||||||
if (atlas_load(&fore_at, "pop_fore.atl") != 0) return -1;
|
if (atlas_load(&fore_at, "BG\\pop_fore.atl") != 0) return -1;
|
||||||
if (atlas_load(&pot_at, "pop_pot.atl") != 0) return -1;
|
if (atlas_load(&pot_at, "BG\\pop_pot.atl") != 0) return -1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ static uint8_t sword_ok;
|
|||||||
|
|
||||||
int pop_sword_load(void)
|
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;
|
sword_ok = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -49,11 +49,11 @@ int pop_sword_load(void)
|
|||||||
int pop_kid_load(uint8_t npages)
|
int pop_kid_load(uint8_t npages)
|
||||||
{
|
{
|
||||||
static const char *const names[KID_MAXPAGES] = {
|
static const char *const names[KID_MAXPAGES] = {
|
||||||
"kid0.atl","kid1.atl","kid2.atl","kid3.atl","kid4.atl","kid5.atl",
|
"KID\\kid0.atl","KID\\kid1.atl","KID\\kid2.atl","KID\\kid3.atl","KID\\kid4.atl","KID\\kid5.atl",
|
||||||
"kid6.atl","kid7.atl","kid8.atl","kid9.atl","kid10.atl","kid11.atl",
|
"KID\\kid6.atl","KID\\kid7.atl","KID\\kid8.atl","KID\\kid9.atl","KID\\kid10.atl","KID\\kid11.atl",
|
||||||
"kid12.atl","kid13.atl","kid14.atl","kid15.atl","kid16.atl","kid17.atl",
|
"KID\\kid12.atl","KID\\kid13.atl","KID\\kid14.atl","KID\\kid15.atl","KID\\kid16.atl","KID\\kid17.atl",
|
||||||
"kid18.atl","kid19.atl","kid20.atl","kid21.atl","kid22.atl","kid23.atl",
|
"KID\\kid18.atl","KID\\kid19.atl","KID\\kid20.atl","KID\\kid21.atl","KID\\kid22.atl","KID\\kid23.atl",
|
||||||
"kid24.atl","kid25.atl","kid26.atl","kid27.atl"
|
"KID\\kid24.atl","KID\\kid25.atl","KID\\kid26.atl","KID\\kid27.atl"
|
||||||
};
|
};
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
if (npages > KID_MAXPAGES) npages = KID_MAXPAGES;
|
if (npages > KID_MAXPAGES) npages = KID_MAXPAGES;
|
||||||
|
|||||||
@@ -214,7 +214,7 @@ int main(void)
|
|||||||
}
|
}
|
||||||
pop_cheats = 1; /* режим разработки: читы включены */
|
pop_cheats = 1; /* режим разработки: читы включены */
|
||||||
pop_guard_reset();
|
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");
|
printf("kid_data.bin load failed\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@@ -223,7 +223,7 @@ int main(void)
|
|||||||
puts("kid atlas load failed");
|
puts("kid atlas load failed");
|
||||||
return 1;
|
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) {
|
pop_level_load("a:\\res2001.bin") != 0) {
|
||||||
puts("level load failed");
|
puts("level load failed");
|
||||||
return 1;
|
return 1;
|
||||||
@@ -231,7 +231,7 @@ int main(void)
|
|||||||
|
|
||||||
initgraph();
|
initgraph();
|
||||||
gfx_set_visible_page(0);
|
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_fload(0, "a:\\kid.pal");
|
||||||
gfx_pal_sync(); /* палитра 0 -> плоскость 1 */
|
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 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
|
set -e
|
||||||
|
|
||||||
if [ $# -lt 2 ]; then
|
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:
|
mpartition -I -c -t $CYLS -h $HEADS -s $SECS z:
|
||||||
mformat z:
|
mformat z:
|
||||||
|
|
||||||
|
# Аргумент может быть либо файлом (кладём в корень), либо парой
|
||||||
|
# КАТАЛОГ:файл — тогда каталог создаётся на образе и файл кладётся туда.
|
||||||
|
# Имена на Sprinter/DSS — 8.3, каталоги тоже (KID, GUARD, BG, LEVELS...).
|
||||||
for f in "$@"; do
|
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
|
done
|
||||||
|
|
||||||
echo "--- содержимое образа ---"
|
echo "--- содержимое образа ---"
|
||||||
mdir z:
|
mdir -/ z:
|
||||||
|
|
||||||
# RAW -> CHD (без сжатия = быстро; та же геометрия).
|
# RAW -> CHD (без сжатия = быстро; та же геометрия).
|
||||||
chdman createhd -i "$RAW" -o "$OUT_CHD" -c none \
|
chdman createhd -i "$RAW" -o "$OUT_CHD" -c none \
|
||||||
|
|||||||
Reference in New Issue
Block a user