Category: Goonies

28
Май
2023

Допиливаем переход

Допилил переход в новый уровень – сделал исчезновение врагов в момент ухода Балбеса в дверь, как и в оригинале. Теперь черепа не торчат застывшими во время доигрывания музыки успешного завершения уровня. Так же мигающие справа внизу головы всех собранных гномов теперь всегда отображены во время перехода. Раньше было как получится – они же мигали.

27
Май
2023

Переход готов!

Сделал процедуру перехода между уровнями. Немного ее надо еще допилить – музыка в мультике не синхронизирована и еще надо нечисть стереть при уходе в дверь. Пришлось поправить спрайты анимации ухода в дверь, чтобы они подходили и для черепа-телепорта и для двери в следующий уровень. Помимо этого сделал мигание собранных “голов”, вывод кода быстрого доступа к уровню, обмен данными между памятью и диском (загрузка заставки и обратная загрузка данных). Движемся вперед 🙂

21
Май
2023

Первая заставка

Прицепил модуль заставок (мультиков) к основной игре. Пока что он играет первую заставку. Заодно перерисовал буквы GOONIES, чтобы было больше похоже на оригинал, а также поигрался с переключением палитр на лету, чтобы текст копирайтов был белым.

01
Май
2023

Двери

Начал работу над дверями. Входные двери должны появляться при входе в лабиринт, потом исчезать. Оказалось, открытые двери не были нарисованы, пришлось рисовать. Теперь двери успешно появляются, но пока не исчезают. Адрес вывода Балбеса при входе тоже будет, как и должен, привязываться ко входным дверям. Поправил несколько глюков, населил первую сцену второго лабиринта (не)живностью.

30
Апр
2023

Доделан загрузчик

Сегодня доделал загрузчик – теперь игра сама читает с диска любой лабиринт без участия OS. Для пробы прогулялся по второму уровню (пока еще почти без нежити). Теперь надо сделать сам процесс перехода, со всеми этими дверями открытыми/закрытыми/исчезающими.

28
Апр
2023

Поиск файла в ANDOS, MKDOS, CSIDOS

Доделал “загрузчик-поисковик” для ANDOS, MKDOS, CSIDOS – трех живых дисковых систем БК. Часть файлов я гружу через ЕМТ 36, как и в Принце, т.к. при любом раскладе это работает, пока из памяти не выброшена сама система. Это заодно решает проблему возможной фрагментации файлов в ANDOS, т.к. при загрузке через ЕМТ 36 ANDOS сама ищет все блоки файла. Так что Принцу на фрагментацию плевать, хотя некоторые почему-то думают, что это не так.

Перед тем, как систему выбросить, нужно на диске найти первые блоки тех файлов, с которыми потребуется работать уже без средств операционки. В каждой системе есть свой способ поиска файлов на диске. Для ANDOS и MKDOS это просто вызовы процедур поиска с определенными параметрами, а вот в CSIDOS это ЕМТ 115, а это значит, что вектор обработчика ЕМТ уже другой, не “десяточный”. К тому же, CSIDOS сидит в 7 странице ОЗУ, а остальные в 4-й. Да и имя файла каждой подавай в своем формате для поиска. Пришлось немного поизголяться. Загрузка первых файлов через ЕМТ 36 заодно заставляет системы уже держать каталог нужного диска в памяти, что упрощает (наверное) дело.

P.S. да, я в курсе, что есть “универсальный загрузчик для всех ОС”, но так там исходники для новомодного pdpy с километровыми именами меток и прочими наворотами, так что для моей среды разработки (micro1103) переделывать его замаешься.

Вот исходник загрузчика, авось кому пригодится:

;определение среды запуска
;загрузка основных файлов

Setup:  mov  #6000,@#177716 ; 1-40k, 4-100k
        mov  #4000,r1
        mov  #fnmtab,r5
1l:     tst  (r5)
        beq  0e
        call @#lemt36 ;загрузка через емт36
        br   1l

0e:    ;определяем OS, пока не испорчена стр 7 (там csidos)
        clrb @#rundos ;0=Andos 1=MKDOS 377=CSIDOS
        mov  @#120000,r5
        cmp  r5,#517
        beq  0andos
        cmp  r5,#460
        bne  0csi
        incb @#rundos
        call @#mksrch ;поиск в mkdos
        br   0all
0csi:   comb @#rundos
        call @#cssrch ;поиск в csidos
        br   0all
0andos: call @#ansrch

0all:  ;r0=первый блок LEVELS.DAT
       ;вписываем начальные блоки всех лабиринтов
        mov  #filtab,r1
        mov  #5,r2
0fl:    mov  r0,(r1)+
        add  #12,r0
        sob  r2,0fl

;грузим на стр 7, теперь csidos можно портить
        mov  #fnmtb2,r5
        call @#lemt36
        ....
        ret

cssrch: ;ищем в CSIDOS
        mov  #54400,@#177716 ;7 в 40к, нужно для CSI
        call @#45010        ;init
        mov  #csidoz,r0
        emt  115
        bcc  0ok
        halt                ;не нашли
0ok:    mov  @#41524,r0      ;адр записи о файле
        mov  16(r0),r0       ;номер первого блока
        mov  #100113,@#30    ;восстанавливаем вектор ЕМТ БК0010
        ret

ansrch: ;поиск в каталоге ANDOS
        mov  #flevls,r1
        call @120216
        bcc 0ok
        halt
0ok:    ;вычисляем начальные блоки
        mov  32(r2),r0      ;нач кластер из каталога
        inc  r0
        asl  r0
        asl  r0             ;номер блока
        ret

mksrch: ;поиск в каталоге MKDOS
        mov  #mklvls,r3
        mov  #bemt36+6,r4
        mov  #17,r0
0m:     movb (r3)+,(r4)+ ;вписываем имя
        sob  r0,0m
        mov  #bemt36,@#306
        mov  @#120014,r3 ;адр буфера чтения каталога
        call @120026
        bcc  0ok
        halt
0ok:    mov  20(r3),r0
        ret

lemt36: mov  #40000,@#bemt36+2 ;адр загрузки
        cmp  (r5),#6000 ;lbhisub?
        bne  2l
        mov  #62000,@#bemt36+2 ;для lbhisub другой
2l:     mov  (r5)+,@#177716 ;стр памяти
        mov  #bemt36+6,r4 ;
        mov  #10,r0
0l:     mov  (r5)+,(r4)+ ;имя файла
        sob  r0,0l
        mov  #bemt36,r1
        emt  36
        ret

fnmtab: .#26000 ;2-40k, 4-100k
        .a:ANIMS.DAT
        .b:0 .#0.#0.#0

        .#36000 ;3-40k ELTS
        .a:WALLS.DAT
        .b:0 .#0.#0.#0

        .#16000 ;5-40k
        .a:MUSIC.DAT
        .b:0 .#0.#0.#0

        .#6000 ;1-40k
        .a:LBHISUB.DAT
        .b:0 .#0.#0
        .#0

fnmtb2: .#56000 ;7-40k
        .a:HISUB.DAT
        .b:0 .#0.#0.#0

flevls: .a:LEVELS DAT
        .b:0
mklvls: .a:LEVELS.DAT
        .b:40.b:40.b:40.b:40.b:0
        .e

rundos: .b:0
        .b:0 ;free

FILTAB: .#0 .#0 .#0 .#0 .#0 ;номера первых блоков файлов

bemt36: .#3 .#40000 .#0 .+60
csidoz: .b:2 .b:0 .#40000 .#220
        .a:LEVELS.DAT
        .+4 .#0 .#1000 .#0 .+22
END