Inferno #06
03 декабря 2004

Gamedev - о сборке игры Wolfenstein 2004. Часть 1.

               Тетрадь о сборке Wolfenstein 2004.

В квадратных скобках - дополнения для читателя. То, что было ок- 
вадрачено в тетради,здесь в фигурных скобках. Текст в косых чер- 
тах - зачёркнутый. 
                            [стр.1]
12xii03 
WaterSun [один из chip'ов Moran'а] free=#4200, т.е. player=#6000
etc. Наложил меню Nikfe X-Color.
Загрузчик универсальный. Сначала искать на диске, потом в архиве
{потом на др. диске, архиве?}. Как грузить файлы >32k (меню,
хелп...)??? Всё ок, через буфер.
IMVEC=#5b00 - плохо! [Теперь] CHNMAP-512. SBPL [место размещения
5-секторного WAV-плейера под Sound Blaster, выкинутого из игры в
2000 году] не смещён, но надо бы.
SCALTAB [таблица, содержащая высоты и текстуры всех полустолбцов
экрана] заполняется в LINES [цикл сканирования стен для нового
кадра] не через INC H...DEC H [для стен верхнее и нижнее данное
в SCALTAB совпадают], а через LDIR после SCAN. Из п/п SCAN [п/п
сканирования карты по определенному направлению] исключены
коррекции DXNOW, DYNOW [вектор сканирования. Теперь
корректируется снаружи - чтобы использовать SCAN для зрения
монстров. Но оказалось неудобно из-за переменных процедуры.
Зрение монстров должно вызываться по прерыванию, а сканирование
стен - мимо прерывания, в то время как переменные п/п лежат в
опредёленном месте]
[кнопка] N [позже выкинута] = nomonsters (+1 fps) [замерено на
 карте Entering the castle, интеллекта монстров тогда не было]
       POOR          MEDIUM        HI-END
      128k          256k          1M
 menus:{AY???(FD!)}  COVOX FB      SD 
      NO DIG
turbo:~100%         ~140%         >=200% 
 video:small         big           big 
      i-lace        i-lace        full
 [i-lace - расчет только каждой 2-й строчки]
      interscan     interscan     full
[interscan - расчет каждого 4-го столбца, а не 2-го. Настройка
"ray precision"] [сбоку подписано: "почти как надо", "quadrascan
13xii", "full при nokey"] [quadrascan - расчет каждого 8-го
столбца, как в DooM-B]
 speed:80%(6 frm)    100%(5 frm)   120%(4 frm) 
      {3d13          turboload     3d13}
      mono          mono          color walls/goods/monsters
 /countmonsters =10   =20           =40/ 
      -             screenmsgs    screenmsgs+digisound
 menu: load          memory(packed) memory 
       no handmove   yes handmove  yes handmove
       -             cached        cached (detect?)
      -             moused        moused (detect?)
music:/off/on       on            on 
troops off          on            on 
[появились кнопки I (нынешняя R) и H. V и T (нынешняя M) уже
были]
13xii 
+экстраполяция quad[rascan] с сообщением. Quadrascan: крайняя
правая четверка экстраполируется:
A    B    C 
C=2B-A. Возможно переполнение. Убийство [переполнения]: перенос 
при сдвиге д.б. равен переносу при вычитании. [это про высоты.
Переполнение координаты в текстуре исправлено 16viii04]
+ожид. отпуск. клавиш.
Почему RL иногда тормозит? вместе с музыкой
/а) потерян хвост цепочки монстров/ 
/б) неверное кол-во ракет/ 
/в) сист. регистры? FIXED/ 
г) SCMONS0 неверный выход FIXED. 
Нужен time out.
Висло при самоубийстве FIXED (EI).
Ракету сильно уносит в сторону, куда смотришь. 13xii: ADD->SBC
(KR).
Самопроизвольно появляется scull key FIXED: везде XOR A/OR D.
FIXED divtab (восьмерки вместо 1,2) [таблица размера шариков]
Когда кончаются патроны и видно оружие, удар рукой действует на
расстоянии FIXED:
/push bc/ 
CALL NZ,BOOH 
/pop bc/ 
=>LD C,A 
Действует и исчезает звезда (под ней уменьшается защита, как в
Quake), IV, QD. Считает пока 8bit числами, без атрибутов [в
Quake IV, QD и звезда окрашивали поле зрения игрока каждая
по-своему]. Зато мерцает при исчезании.
[процедуры] CROSS, AYOFF, /OUTME/ [теперь] в модуле.
В цикле RL - monster (RLMONS0) не восст-ся адрес HL FIXED.
Общие убийства монстров с коррекцией по QD. Раненых бить можно
[раньше было нельзя]. Интересный эффект: если стрелять из
PERFORATOR'а до трупов, то патронов тратится больше, чем если бы
вовремя прекратить. Хорошо! /при убийстве PERFORATOR'ом может
повиснуть/ Нужны разбросы силы попадания.
При невзятии heal [из-за энергии>100] энергия уменьшалась до 100
FIXED. VASE дает 1% heal. VASE и TREAS[URE] дают деньги (их не
видно). Если сбить защиту, имея звезду, исчезает картинка; если
защиты уже нет, то она всё равно показывается после исчезания
звезды FIXED.
                            [стр.2]
14xii 
[В этот день текстуры монстров и предметов были окончательно
размещены по двум страничкам. Zombieman - в PGSPR, остальные
монстры - в PRSPR2. Монстры рисовались в разные времена в
следующем порядке: zm, cacodemon, commander, herr major(by shiru
otaku), dog(сконверчен из оригинального Wolfenstein), ogre,
hitler(сделан из herr major'а) В тетради стрелочками указано,
каких фаз исправлялись координаты в таблице MONSTAB, там числа в
другом формате и потому содержали ошибки. Исправлялось 4i,
15xii, 20vii, 28vii, 14viii. Числа означают, кто по какой
X-координате лежит в PGSPR2]
shiru (lord) [herr major] 
attack: 0-16 
move1: 17-25 
move2: 36-53 
scared: 54-71 
cacodemon 
caco: 72-83 - attack?    
scared: 84-95 - norm?    симм[етричный спрайт] 
dying: 96-107 - scared? / 
troop: 108-119 - только низ 15xii 
lamer [commander] 
move1: 120-133 
move2: 134-148 
scared/attack: 149-162 
dog 
move1: 163-174  
move2: 175-185 -low 
attack: 186-199 
scared: 200-211 - low 
ogre =demon [Спрайт демона не нарисован. Ogre и demon отличаются 
друг от друга энергией]
move1: 212-226 
move2: 227-240 
scared: 241-255 
6 монстров, демона (N16 [по нумерации предметов в WolfEd])
меняем на ogre (N19). Брать время действия QD, IV и 666 из карты
OK 17xii. FIXED: было prizes, надо got.
SETACNT [отсчитывать время] в игровых циклах?
 SPR [N12-13]                 N17  N18   N15   N14   N19   N16 
    zm                      shiru caco  lamer  dog  ogre  demon
   E=70                     E=200 E=250 E=120 E=50 E=150  E=250
    0      3      6     9     C    F    12    15    18    1B
0 move1/2  G    bigAM  col <- 
3 {move2}  R  пулемет {boom} | 
6  back  MegaH  rifle  стол  | 
9 attack   RL   heal   rock  |           как в zm 
C  ранен  ammo   IV    елка  | 
F умираю  bull  666   {cell} | 
12 troop  roc  vase50$  QD --то есть здесь 
 15  -     key chest500$ | 
           ^^^     <-----логически здесь [для п/п COLLnM]
        (не более 1)
хотя... пусть закр. двери открываются навсегда! и ключи
декрементируются. ORG '($+255)*256=ORG $+255/256<8=DS .(-$)
Собака не влезает в ниж. часть [текстуры] FIXED 17xii
Виснет иногда при попад. из RL+QD FIXED
Дорисовал посл. стр. графики + QD
15xii 
MONSTR [процедура разворачивания в SCALTAB монстров и предметов
по их координатам]: в T10MONS [таблица монстров, которые должны
мыслить в данный момент. Максимум 10. Впоследствии
ликвидирована] все типы монстров, кроме трупов. Шагают все.
Адреса+4! Пока собаку убить нельзя, кроме как из RL.
16xii 
Дорисовал L3. При вызове MONSTR важна глубина и содержимое
стека. Пули летают через все предметы (низкие), кроме трупа
Cacodemon'а. Можно убить собаку, кроме как рукой. Рукой нельзя.
17xii 
При добавлении нет переполнения. Проблема с трупами - они могут
завалить проход! Можно считать камни и трупы разными (сделано),
все трупы проходимыми. В 256[k] можно добавить лишние спрайты.
????up-настройка. MAIN "WOLF*". При загр. ур. ATR=color, keys,
shots, killed, got, timer=0. При пуске SETATR=ATR. Опустил
собаку. Перенес PRSPR и т.д. в PP[исходник W3D?PP*.H]
 NoGet   POP AF - либо AF, либо адрес вых. из п/п ADD100 
         POP BC - в начале [п/п] было POP DE,HL..PUSH HL,BC
        PUSH DE:RET
В RL теперь 0 патронов. Зап[ертые] двери открываются насовсем,
ведётся учет ключей.
                            [стр.3]
18xii 
(John) надо убирать прицел при RL и руке тоже 19xii FIXED. Надо
[Chip Tracker] плейер с IM2, но виснет. И EXX не определить.
Стены [перед запуском WolfEd] вертятся сами [из вертикального
спрайта делается горизонтальный]. Файлы[, перенесенные] в
[директивы] DD: TILE, ICONS!, убраны ORG $-...
WED[он же WolfEd]: в каталоге быстрая стрелка, Demon=250 ед.,
прав[ильное] опр[еделение] мыши [было через порт #ff, теперь
через вектор прерывания], FIXED bug: CS/Z - стереть, [CS/]X -
стереть в буфер FIXED 19xii, [CS/]C - взять[, V - вставить].
CALL SCRLCONT:LD A,E! SEL_TRI: 0 - выделяем, -1 - уже выделено
(исх. сост.) S-kill sel., D-beg.sel., F-end sel. CLICK1 - почему
4 ADD A,A?
20xii 
Трудно ловить прерывание прямо в главном цикле [цифрового
плейера] - т.к. могут возникнуть недоинкрементированные адреса.
Лучше определить кол-во циклов во фрейме и после гл. цикла
сделать EI:JR $ [HALT] Время плывёт...
Убрал из TOPO.CHI ненужный сэмпл - for HELP? м.б. это ремикс
старого музона Moran'а? MAX SMPLS=#9900
WaterSun: #BB00-#4200=#7900 SMPLS. Нестаб. ШД [шина данных на
моем пентагоне]? I=59 не раб. [позже выяснилось, что компьютер
не виноват] Удалось сделать висящие прерывания, с предупрежд-ем
только перехода ч/з хвост сэмпла. Но откуда еще щелчки?
Возможно, из-за сверх-offset'ов. Исправил PLAYER10: не грузит
дальше пустого сэмпла. Но играбельность не гарантир-ся... Виснет
на WaterSun(!) Если есть сэмплы 0,2,3,..., играет плохо. С "1" -
лучше. Щелкает на [позициях] #18-1c. Сэмпл 7 не помогает против
свиста в "6". /6-й на месте 1-го уже не свистит :- глюк на
G-1F#1 6070./ Свист от запорченного #FFXX! [Вариант плейера
под Covox при вызове прерывания] может перепутать DE<>HL FIXED
23xii - сразу меньше бульканий.
22xii 
Дорисовал менюшку [исправил на картинке Никфа "Greetings" на
"Options"]
23xii 
Глюк в плейере - не декодировал часть сэмплов, портит #FFFE.
Сделал рулилку по опциям [с цифровой музыкой на фоне]. SD play
(не проверено). Была разница SD-COV=33-8, стала =33-16.
Надо в PLAYER'е и в самом CHIP'е убить LD E,A:... A,E из INCD2/4
(SDPLAY) FIXED 24xii
2i04 
WED10 в одном файле (шрифт по 2 байта в одном). Пробный
загрузчик #3d13 - работает. AYPLAY [плейер звуковых эффектов в
WOLF]: L-частота; автовыбор канала B/C для ooh/aah ([выбирается
канал,] где нет ENV), автовкл. TONE (не было).
Музыка MUZ#...C, без иниц-ции (PT Util). Костяк для SAVE/LOAD
"WOLFSAV#" Они д/б одинакового размера (сейчас 1k:
ENDMONS-GAMEDATA, плюс надо подгружать muz, gfx и карту) и
д[олжны] писаться поверх. Надо предусмотреть DISK FULL [при
free<saved] и INVALID FILE [при savedsize<>overwrittenfilesize
или при loadfilesize>BC].
+селектор типа компа, music=SHARMY. Музыка и графика -
подгружаемые. Драйвер и плейер(?) в общих адресах для всех? и
шрифт тоже? Загрузка с CS=safe mode? firstrun mode?
Время должно течь в игровых циклах везде. [Сетевой] обмен тоже
по игровым циклам, тогда не д.б. разной скорости.
Options [должны быть] 
game speed 
music ON/OFF... - OFF/SELECT (для уровня с 1-го по играемый) 
AY effects volume ... +0 
window BIG/SMALL 
precision HI-MED-LOW 
high memory gfx ON/OFF 
title screens lace OFF/PLAIN/WAVE [gigascreen нельзя - на 
экранах diamond штриховка]
digital music [AY]/COV/SD/NONE - port ... 
loader #3d13/turbo 
reinit disk model - disk A/B/C/D 
save 
reset to defaults (для опр. типа компа - 3 шт) 
3i 
Prizes есть? FIXED. Убить level, muznr, gfxnr. Вместо них поле
"WLF" [потом пришлось возвращать обратно]
TURBO SOUND для эффектов?
                            [стр.4]
Сохранять в DEMos пакеты наподобие обменных (их же?) каждый
игровой цикл. Назад не прокрутить, вперёд - ускорить частоту
игр. циклов. При обмене только полное соотв-е игровых
пространств!
xy 
XY 
angle - на момент выстрела, т.е. конец игр. цикла 
#weapon 
[патроны] 
shot Y/N 
open Y/N 
{energy     
armor      -до хода монстров или после? 
armor type / 
keys 
QD,666,IV} 
global time и др. - в заголовок, туда же табл. MONSTRS? 
Как уничтожать взорвавшиеся шары? Контролировать только в конце
 цикла?
          PL1           PL2
          ...           ...
          игра          игра
       ---------      -----------
        выстрел    / мой выстрел - CURMON(Mid)
         обмен    /                    здесь уже нужно знать их!
                  /   обмен - или LOAD/SAVE.Здесь же спецкнопки?
     его выстрел /   выстрел монстров - коллизии?             ^
     ---------      -----------                               |
 обработка энергий  обработка энергий - или вне прерыв-й       | 
          ...             ...                (эквивалентно?)   |
                             (только OPEN, FIRE, LOAD, SAVE 8i4)
При смене скорости игр. цикла нужно менять скорость MOVE [п/п
движения игрока] и MOVEKR [п/п движения шара/ракеты] или двигать
шарики неплавно. Двери: контролируемую (грубую) коорд-ту менять
каждый цикл. Для отображ-я использовать уточнение счетчиком +=51
(тем, к-й для цикла [теперь там не счетчик, а таблица во frame+1
байт с -1 в конце]) Цикл =5FRM. Выстрел в нем. FPS, LEG, QD,
666, IV, изм[енение] цвета экрана тоже. Изм[енение] цвета экрана
также в HARMME, причем время в зав. от силы повреждения/16.
Межуровневые картинки надо скрыть и вместе с тем улучшить
сжатие... в WOLF1 без заXORивания, а дальше можно выдумать.
AY digiplayer глючит :( RECODE и так не нужно... Из-за C48<>C48A
FIXED 3i4. Первый UNILOAD'er: в резиденте 2 операции: INI и
LOAD. Теоретически можно использовать возм-сть обмена экранов,
тогда UNILOAD сможет делать дисковые операции с любой памятью
без резидента.
4i 
Надо иниц[иализа]цию /с черным экраном/ - это не надо, есть 1k
буфер. Чтение каталога RAR и приведение имен к 8.1. Депакер
через буфер 1k в той же страничке - тогда не нужен paklen. В
дескрипторе всего один лишний байт - позиция в секторе (вместо
secsz, при установленном bit7 в sect#). Т.е. хватает 14 байт.
При желании можно грузить и файлы ч/з буфер в 1k, тогда не будет
наложения ост. части сектора (но неск. медленно - однако таких
файлов мало => незаметно). HISCORE, SETUP и отгрузки надо
сохранять ч/з одну и ту же п/п - fixedsize, overwrite. HISCORE
зашифрованный и не текстом? SETUP в конце добивается Enter'ами
до 1k? Можно ограничить каталог только теми файлами, к-е
фигурируют в SETUP (можно их вызов не по имени, а по коду в
SETUP).
Убито затирание #5b00 в INI.
AYPLAY - [более скорое] время обрезания звука не по VOL=0, а по
VOL=6.
6i 
П/п-мы загрузки файлов уровня. При вводе SAVE/LOAD выкл. музыка
и ставится IMER=EI:RET.
7i 
Адрес монстра, если его нет под прицелом,=#00XX. Считаются
shots&killed, в конце игры - totalsh и totalki, а тж. totalgo и
totalti, показыв-ся время. [По кнопке C] показ-ся total time, в
уровне - без учета времени уровня. Все файлы заглавные [потому
что строчные буквы в шрифте - русские].
Почему в MSG включается PGICO?
Почему виснет #3d13 в игре? IM1, EI, бейсик почти чист (кроме
#5E00), stack=#5FF1... IY сбит!
                            [стр.5]
Шарики пропадают на лету?
Сообщения теперь не затираются - идут сплошным потоком даже при
затемнённом экране (верх 1/3 не чистится). TCHREC [одна из 2
таблиц для построения больший таблицы чанков], MAKCHTB [п/п
построения этой таблицы] не затираются.
[Сделаны] отгрузки.
Пока не сохр-ся параметры дверей и шары - их надо еще обнулять
при загр. уровня FIXED. Не перерис-ся пушка FIXED.
Почему нет сообщ-я NO FILE? FIXED. При загрузке проверяется
переполн-е длины! [в BC указывают макс. длину] При обмене не
нужно передавать параметры ботов - их каждый комп может гонять
самостоятельно. Надо только RND-генераторы совместить (не
обяз.=0).
Пришлось [в обработчике прерываний запоминать по] PUSH:POP
[содержимое] (CURPG) [текущая включенная страница, обновляется в
п/п OUTME], т.к. F66 [шрифт 6x6 для цифр] теперь в страничке.
Убито 7 байт в конце 4-й и 8-й процедур масштабир-я [из тех,
которые генерируются в #0000 или #6000]. PGLOAD [страница
дискового драйвера]=PGICO [страница спрайтов оружия и иконок].
Почему закрываются снова запечатанные двери? При шаге открытия 1
этого не было.
INC A          
JR Z,NOclEX    вот это 
DEC A          /FIXED 8i4 
...#BF...-#BF / 
Двери закрываются плотно (убито JR Z... в OPEN) 8i4.
В SAVE/LOAD в конце DI:IM 2, но _до_ этого NOKEY [п/п ожидания
отпускания клавиш] 8i4.
Если locked door в процессе открытия, но открываю др. дверь, то
locked закрывается! (а ключа уже нет) FIXED 8i4
(BIT 5,A:JR Z:XOR A в OPEN2).
После загрузки моргает экран :( но вроде не сбрасывается...
сброситься может, если LOAD при незаполненной SCALTAB. FIXED
8i4: SCALTAB в отгрузке; изначально в нем PGWALL.
Вернул шрифт для цифр в PRS [п/п печати шрифтом 8x8, дежащим по
адресу FONT] (в [п/п] FPS [включен] PGICO [где лежит этот
шрифт]).
Если коллизия в IMER, то либо удаление не в ней, либо вместо
удаления - установка бита удаленности (можно с чисткой в конце
кадра - довольно трудно,- можно без), либо построение табл.
вимимых монстров в IMER (скорость при ~10FPS хуже не станет, но
проблемы...). Оч. удобно RES 7,Y - в SCMONS0 [цикл перебора
монстров для вывода на экран и контроля счетчиков их
ранения/гибели] само фильтруется, но в кругах - надо
искусственно 9i4 пока не по прерыв-ю.
[Знакоместные] строки 4-7 стираются вместе с низом экрана при
LOAD - остаются только 0-3 9i4.
QD,IV,666 исчезают некрасиво (/#3D00 не содержит 9 нулей???/ не
была вкл. PGICO) FIXED 9i4.
При 666 взятие защиты стирало звёздочку FIXED 9i4.
При SAVE/LOAD//EXIT/ не выключался кэш FIXED 9i4 п/п IM1, потом
IM2. TRUP [выход из игры - поражение] вызывается после кадра по
HEAL=0 9i4. Монстры уже обрабатываются так.
QD не работало на монстров FIXED 9i4 и на игрока тоже FIXED 9i4.
Один раз при QD во время самоубийства RL на ниж. половине экрана
в середине был кусок левоты :( Ещё левота проскакивала при
загрузке - в верх. части.
10i 
Нет SP в COLLIS и TRUP. Сделана обработка коллизий в IMER -
предметы резиновые :) yx, YX - для прерыв-я, LBC/LDE/LHL - для
OFF-INT.
24i 
FPS считается правильно (для посл. неск. секунд) - копятся NFPS
и AFPS, когда переполнение - делятся пополам. "DISK OVERFLOW"
вроде должно выводиться. Надо ускорить derar в UNILD (FIXED 25i)
и пофиксить (не строится пустое дерево) (FIXED 25i). Ускорил
сканирование при поиске коллизий. Всё равно 9.8fps<10fps (I[ray
precision]=3, V[video size]=16)
                            [стр.6]
25i 
CURPG=#5B5C. MONSTERS [таблица размещения предметов и врагов -
по 8 байт на штуку] по адресу div8<3 (ORG -$&7) [для шагания по
таблице командами INC L]. Все равно <10fps. Не видит 2-й файл в
архиве - FIXED. Случайное движение монстров. Но коллизия иногда
вешает комп %(. Почему? Страничка не виновата (PGMAIN). Монстры
честно удаляются установкой RES 7,Y (оно и проверяется).
Сделал N10MON [текущее число монстров в ныне не существующей
таблице T10MONS]=0 при загрузке уровня. /Виноват LD (IX),A, но
почему? или/ это опять DB "---- по TAB<>8! [при TAB<>8 и
незакрытой кавычке аласм компилировал лишний байт RST#38] FIXED.
Абсолютно синхронное движение (варианты: 4frm,5,6).
Не должны двигаться трупы и т.п. Только FASE=0! Но должны думать
(видеть спиной) при FASE=6 и стрелять через время при FASE=9. Из
FASE=0 должны периодически переходить в FASE=9. Не стреляющие
должны идти примерно на игрока и нападать там.
27i 
Надо после каждого вызова MOVKR проверять на взрыв; оно так и
есть.
28i 
Табл. T10MONS нельзя составлять OFFINT - нельзя будет делать
demos! FIXED 1ii
31i 
Правильно перекрываются объекты разной высоты. Объект также
теперь видно, только если видно его середину (speed up). INKEY
[опрос клавиш движения], CHVIDE [смена размера экрана по кн.V] -
в модуле. Только почему-то мало FPS :( Надо объективное
timedemo. В стоячем положении (нет клавиш и поворотов) картинка
строится с QSC[ray precision]=1. Надо отключабельно (FIXED 18ii
кнопка B [при сборке игры убрана]).
Более линейное движение врагов. Проц. RND=RAND/256.
RAND=RAND*17+20981 [числа взяты от фонаря]. При старте уровня
(не LOAD):=0.
1ii 
FIXED T10MONS (таблица уничтожена). Попадал, даже есть не
нацелен. Было убито (CURMON+2)=0 перед SCMONS0 FIXED. Нельзя
записать демку из-за CURMON :( Придётся его и расст-е в (Mid)
хранить тоже.
3ii 
Дуплексный режим по AY был бы быстрее? Вряд ли...
6ii 
В UNILOAD должен быть WOLFNT, {FONT66}, INKEY, {SETIM}, SHUTAY.
Наличие CACHE и K.MOUSE тестируется [должно!] при запуске меню
игры!
Quit to: 
CACHE pg0 ->0 
CACHE pg0 ->#66 
CACHE pg1 ->0 
CACHE pg1 ->#66 
GLUK (через CACHE. Можно ли без?) CACHE: 10:IN A,(#7b) при вкл. 
128pg1 и DOS (сойдёт и для QC2.82 - там начало #38). NOCACHE:
OUT (C),A /в начале DOS/ или в конце (#3FD1=OUTI). Тогда переход
на RST #38 [которого д.б. много в конце странички Gluk'а, и
который в Gluk Service содержит команду] RET (SP=ПЗУ).
Естественно, DI. А как попасть в DOS? Или при вкл. pg1 войти в
#3D44 (RET). [Реально лишь при знании содержимого #3dxx в
страничке Gluk Service. Там в определенном месте должен быть RET
(условный или безусловный)]
128 MENU 
48 BASIC /48k {/128k} 
48 BASIC /MAX 
ASM #51 
STS #57 
DOS /48k {/128k} 
DOS /MAX 
{Quick #17?} - сохранённый в TOPMEM или не надо? 
boot 
7ii 
Попадание [монстра] и попытку выстрела RL [монстра] нужно
рассчитывать процедурой SCAN в направлении монстр->игрок (шаг
равен этому вектору / длину(sqrt(dx¤+dy¤)) * k. или делить на 2,
пока не попадет в диапазон).
Каков радиус соприкосновения шара со стеной? надо <128. Кажись,
вообще у стенки.
16ii 
В PLAUTO2 [в цифровом плейере] автоопределение скорости
компьютера по 8 прерываниям. Почему-то числа в табл. частот
получились не расчётные :(
18ii 
Монстр должен повернуться, когда он в квадрате /клипирования/
коллизии X,Y{+-1}. Тогда не нужно лишний раз перебирать. OK, но
пока в цикле HODMONS. Как бы ещё ускорить переборы?
А. сканирование; 
Б. ход монстров; 
В. коллизии. 
Цикл коллизии теперь без IX! MONSTERS=7.35fps, NOMONS>9fps с
музыкой. Везде, где можно, RET и JR, JP по оптимуму, избегаются
редкие действия... 10fps=350.000 t/кадр (music~17500 t = 5%)
Кнопка B ON-OFF уточнение quadrascan/interscan для FPS...
Если неберущийся предмет лежит на берущемся, то в половине
случаев взять нельзя.
                            [стр.7]
Итак, для выстрела (ON-INT): SCAN работает по переменным: DXNOW
(dx = +-.15 [бит]), DYNOW (dy = +-.15), LBC+2 (y = 16.), LDE+1
(x = 16.) и LHL+1 (адрес!) [и флагу Z]. Результат: D=scale (вот
это нам нужно), C=texX, E=ID, B=pg. Результат в D нужно сравнить
с расстоянием до цели.
Почему удаление казалось бы лишних команд в новом CHIP player'е
портит сэмплы? FIXED 19ii. Не клался 0 в частоту "R--". Теперь
играет и без прерываний (причём с возм-стью оптимизации под
ON-INT и под OFF-INT). Ошибка в скорости уже терпимее: +-1.5%.
28ii 
Перевел сорсы в MAIN #C6 [раньше одни исходники на моих дисках
были настроены на #C6, другие - на #46. Теперь везде #C6]. При
im2 плейер играет COVOX 7bit [это не настоящие 7bit: каналы
складываются попарно, делятся на 2, потом опять склыдываются и
делятся на 2], звучит лучше.
2iii 
При DI попробовал 7bit - чуть лучше, но на грани слышимости :(
[а частота дискретизации меньше]



Другие статьи номера:

Inferno - Вступление от редактора.

Интервью - интервью с AIG - кодером из группы MKHG.

Sofтинка - ACE 0.888: отличия от 0.666

Sofтинка - макро-ассемблер отладчик ALASM 4.47: отличия от 4.44

For Coderz - Арифметическое кодирование.

Inferno - Авторы журнала.

Sofтинка - BGE 4 графический редактор для ZX.

События - The Compo 2: результаты голосования.

For Coderz - Декомпиляция программ - оживление старых прог.

Inferno - Ошибки в предыдущих номерах.

For Coderz - Маленькие программерские хитрости.

DIY - Схема моего электрофумигатора.

Gameland - о пройденных играх: Imperia 2, Hexagonal Filler, From Beyond.

Железо - устройство расширенной клавиатуры (58 клавиш).

Gamedev - Игровой цикл - цикл, внутри которого вызываются все подпрограммы игры.

Gameland - прохождение Lords of Time от Level 9.

For Coderz - Макросы ч.2 - облегчаем себе жизнь при программировании.

Inferno - Письма в редакцию.

Gameland - прохождение уровней игры Чёрный Ворон.

For Coderz - Описание модульной структуры программ.

Inferno - Об оболочке.

Sofтинка - преимущества упаковочного алгоритма Optimal LZH.

События - серпуховский фестиваль ParaDiGMus party 2003. Как это было.

События - серпуховский фестиваль ParaDiGMus party 2003. Afterparty.

Gameland - прохождение игры The Price of Magik от Level 9.

Железо - Описание блока памяти от принтера Robotron CM 6329.01 M. Часть 1.

Железо - Описание блока памяти от принтера Robotron CM 6329.01 M. Часть 2.

Реклама - реклама и объявления.

DIY - советы по ремонту часов, Dream Cast и джойстика.

Интервью - Интервью с Shaitan/Stars of Keladan: Interred Inferno.

Gameland - прохождение игры Snowball от Level 9.

Железо - Видеомагнитофон GoldStar RN800AW Art vision. История ремонта.

Железо - Видеомагнитофон GoldStar RN800AW Art vision. Советы по разборке и ремонту.

Интервью - интервью с музыкантом Visual^Extreme (Сергей Агапов).

Gamedev - о сборке игры Wolfenstein 2004. Часть 1.

Gamedev - о сборке игры Wolfenstein 2004. Часть 2.

For Coderz - Как получить на звуковом устройстве больше бит.


Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Scene - эпический отчет о поездке CPU на CAFe'2002.
Реклама - Ввели мы здесь раздел `РЕКЛАМА`, дабы рекламировали здесь спектрумисты свои творения...
Программы - Презентация проигрывателя мелодий X-Player v7.0 и теста конфигурации компьютера Test Machine v5.03

В этот день...   17 июля