Login

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download | RSS feed

 А
 Б
 В
 Г
 Д
 Е
 Ж
 З
 И
 Й
 К
 Л
 М
 Н
 О
 П
 Р
 С
 Т
 У
 Ф
   Как известно, году  эдак в1997я начал
писать  игру Worms.Тогда же я узнал, что
этим  же  занимаются ещё по крайней мере 4
человека/группы. В связи с этим фактом мне
пришло  в  голову  объединить мои и чьи-то
там  ещё  усилия  и закончить наконец этот
проект, если  не самолично, то хотя бы при
моём  участии(прославиться решил ;).Было
принято  решение зарелизить исходник в од-
ном из номеровZX-Guide.Однако номера шли
и шли,а исходник всё не был и не был опуб-
ликован,потому что под тяжестью работы над
журналом  мне постоянно не хватало времени
привести программу в приблизительно удобо-
варимый вид.
   Это и сейчас не полностью сделано.Так,в
программе есть неиспользуемые части,остав-
шиеся от предыдущих версий,а некоторые ра-
бочие  фрагменты программы не подключены в
главный цикл. Но за 4 года в программе по-
явились вещи,над которыми стоило работать:
  - Fast Mapping 30x17(он самый,родной;)
при карте 93x32(93x22 занято,верх пустой,
внизу речка)
  - Fast Worms 8x8 Print(выводятся непо-
средственно на экран.Возможно одновременно
использовать 64 (если не ошибаюсь) фазы. Я
подсчитал: этого  достаточно  для  эпизода
взрыва - см. ниже).Скора эта процедура не
inner loop'ом(он обычный, его 8 штук:
  LD A,(DE)
  OR (HL)
  LD (DE),A
  INC H
  INC E | DEC E
  LD A,(DE)
  OR (HL)
  LD (DE),A
  INC H
  INC D
и т.д.,с установленном в нужном местеDOWN
DE),она скора внешней частью - пересчётом
списка координат червей в регистры и вызо-
вом этого inner loop'а.Весь прикол в кома-
ндах:
  LD SP,IY
  POP DE
  ...
  RET;go to inner loop
которые берут два адреса из таблицы. Таких
таблиц  две: для верхней половины экрана и
для нижней. Так избегается юла,и во многом
из-за этой конструкции высота экрана равна
17 знакомест.(Такая же высота,в принципе,
получалась и исходя из требований дизайна)
  - Random  Map Generator- этим я должен
гордиться;) Карта получается по форме один
в один как оригинал,причём алгоритм приду-
мал я сам. В спектрумовских аналогахWorms
ничего подобного до сих пор не было.
  - Random Worms Placing Routine- случа-
йная  расстановка червей на созданной кар-
те. Алгоритм очень простой,но опять-таки я
вроде бы первый,кто его реализовал наZX.
  - Логический конвейер,а проще говоря -
полёт  червей. Очень  быстро работает, хо-
тя  достаточно примитивно - так, катящийся
червь не сбивает стоящего собрата.Да и во-
обще,он пока не катится. Раньше(при более
древней версии движка)он катался и крути-
лся  в полёте(именно из-за этого и катал-
ся, принцип DIZZY).Так что эта программа
будет  в любом случае дорабатываться лично
мной.

  Итак, ещё раз о том,зачем это опублико-
вано.
   Я обязательно хочу,чтобы наSpeccyпоя-
вилась играWorms,причём  она была реали-
зована при моём участии. Для этого я пока-
зываю  исходник тому, кто его поймёт. Этот
человек может принять 3 решения:
  а)"Диман,я беру твой движок,дорабатывай
поскорее,я допишу остальное(да оно,собст-
венно, и дописано;)"
  б)"Мне  сильно понравилась эта и вон та
процедурка, дай-ка  я  её  позаимствую для
своей  версии. Тебе  не сильно напряжно её
довести до ума?"
  в)"Я тут  посмотрел на твой исходник, а
потом на свой(или наоборот;)и решил: пи-
сать вормов будешь ты. Мои сорсы прилагаю-
тся".
   Одно  из  преимуществ перед демоверсией
уже видно.Другой плюс в том,что я не пложу
новых демоверсий и не нервирую этим народ.
Третий плюс в том,что видно,ЧТО и КАК сде-
лано,что не даёт мне обманывать юзера тем,
что "всё почти  дописано", в то время как,
например, отсутствовал бы генератор карты.
Ведь нас уже обманывали так, правда?
  Что тут и как.
   Для  более плавного скроллинга(при по-
лёте  снаряда  это  важно)я решил двигать
карту  если  не попиксельно, то по крайней
мере по 2 точки.Этим определилось всё рас-
пределение  памяти: 4 странички  под копии
карты,ещё одна под червей и bounding маску
карты(карта в 2 раза меньше,пиксель в ко-
торой указывает,что в этом месте червь до-
лжен стоять,не просачиваясь сквозь землю),
внизу выводилка, таблицы и остальная часть
программы.В свободной части верхней памяти
- спрайты.Меню при нехватке памяти - подг-
ружаемое.
   Панелька статуса и  панелька для выбора
оружия нарисованы. По-моему,цветовое реше-
ние этих панелек очень удачно и вполне ко-
мпенсирует  чёрно-белую  центральную часть
экрана. Графика для карты пробная(выдрана
из demoF.A.),но вполне терпимая. Графика
для червей недорисована.
  Кстати,графика для карты лежит в форма-
теSCUT1.1- можете загружать и редактиро-
вать ;)
   Игра должна работать в нескольких осно-
вных эпизодах:
  - Управление червём.Минимум  загружен-
ности процессора: только мэппинг,вывод од-
ного червя и его кинематика. Остальные че-
рви вместе с надписями нарисованы на самой
карте.(В текущем сорсе - только надписи.)
Проблема: у червя,стоящего на самом верху,
надпись на карте  не  поместится. Решение:
кидать надпись спрайтом, времени  много, а
часть памяти на этом этапе свободна.(Пока
не реализовано.)
  - Полёт снаряда.Аналогично по времени,
но вместо червя - снаряд. Процедура следя-
щей камеры достаточно простая: просто дер-
жать снаряд в центре.
  - Взрыв и последующие за ним полёты по-
дорванных червей.Самая времяёмкая часть.В
самом  плохом случае это 16 летящих червей
(реализовано),8 летящих  мин(не реализо-
вано),4 обломкаCluster Bomb(см.описание
в ZX-Guide 2.5 trash).Алгоритм  следящей
камеры  не  придуман. Поскольку для тупого
сравнивания координат червей и мин требуе-
тся значительное количество времени,то уп-
рощаем задачу:сперва проверяется,не попали
ли движущиеся черви на стоячие мины, а по-
том - движущиеся  мины  на стоячих червей.
Выигрыш  где-то в 3-4 раза. По-видимому, в
оригинале такой же алгоритм.Ничего сложно-
го здесь не предвидится, т.к.стоячие и ле-
тящие черви уже хранятся раздельно.Кстати,
в основном списке(который  обрабатывается
конвейером)по 6 байт на червя:
     Lspr, Hspr, X/4, Y, Vx, Vy
   гдеspr- это 2 байта:
L=xxSPRITE
H=110M0001(еслиH=1,то конец списка)
  xx= младшие 2 бита X-координаты;
  SPRITE= 6 бит номера спрайта;
  M= 1 бит зеркального отражения.
Есть ещё дополнительные  списки: для энер-
гии, имён червей и т.п.
  - Убавление энергии и самоубийства чер-
вей.Требования к времени - частично как в
первом эпизоде,частично как в третьем(так
как сцены прощания червей и взрывы череду-
ются).
  - Ход  компьютера.Со  временем траблов
нет, но  от  самого интеллекта есть только
идеи. Например, червь  выбирает ближайшего
врага(если  он не впритык - иначе динамит
или  в  морду),берёт  гранату и кидает по
баллистической напролом. В оригинале обна-
ружена  тенденция  стелять  в  стрелявшего
раньше.
  - Управление  червём в момент, когда он
качается  на  верёвке.Идей  алгоритма нет
вообще! В каждой  реализации на  оффтопике
верёвка работает по-разному!
  -Ну,имелочи:скидывание призов,анима-
ции телепорта,пневмобура,камикадзе и т.п.
  Вот что надо написать.
   А в исходнике можно:R- генерить новую
карту,S- сменить спрайт червя.
  Ну и напоследок:объяснит ли кто мне на-
конец, что означают буквы"KO"между лине-
йками энергий команд??? Может,это какой-то
символ? На  этом же месте может высвечива-
ться остаток времени раунда, если включить
соответствующий флажок...╖√   °ХVкл √■   ¤╡THUm°Ья  ╫        √√√V$UP%кк~┐ц║ЪJкДкк@JпU║лn╫я¤^╡)@ўzDu╡И2▌UU╗ ¤[ї╣пў╡R╓еHФДBJЯъ+ Хя▀vяz╘е%кJ@ДР%Bе(╘#)ў╜/ S@7RФСI
Х┴!*B"PВ)TААeu_ ┴JJжTд1Rд@╗╩Ч ]0ндАHАРбФкйTн"Кў┤Mп╢И%A%JR*R-JzДе*JEYTЯэ╖я■аў*Zе*╓ёlкVй)░I*ДеZРРФ╡дJЎМняанR┼UjФЖйJФ$JTеЕJ╡}z╓я я  ╓)_н~сяIкRл}*╡u▌√ў┐  я▀╡╡к@┐╝╡^▐ъ     ў ▀▀wMTРАїV┐¤ўйDА┐ zв*]┐ф^кеZ╜$@uUXTРvиHРUP@мmXАPTJ
  Ў я■4u╪ЗPФ
Uy)
кFDU╒Ввиuh
╓P░╞$M║ЕU═U8└░сDUhШ▄4аqб┬└Ь5Q(рQA@
R╨U
"H??8`yс╨
)hH°2м┐Э╜R7P5? lбx╝Q╖А.Tщc ╒ZR`Цh└рокJ$@FFFFFFFFDBBBBBB-╕В √0Щ]=╨4>yА5QZ@Х&├TVюSQФФ╒@Ю@,рЩр`║F(&А─!р┤PаpЮF$PHЮ!с<рс
?ЪLРиH#Ё(░РбЮXP·<╨бА┤ш°  ЪP░╤┤и4FFFFFFFFB║MZщп[╕╡Wш   я|╥╬H▓╫ФUо
ЦAЩ5■) %бVж¤ФvпжбЪФи╡А0с├
ХA7TнА>hБ├ЗЗ¤ЙVб сBДЗ№$_А*hА@ДЕ ЁVПАAГ № └P' АХЁ┤р  ■08  П└ Ш&┤є   >А|   Ё    ▓GGGGGGGGЁ   ■<)D№    ·BР@ШO    ■А!    ■9@мш     
I    ■<┤ <    РА▀    >@$И°■   ё└П    ■U:и ■_ ё─П А   ┤  Ё ∙р$Я■ч  ┤ш  р т ■с чФGGGGGGGGGGGO ў р Ё   уА Ф°ч p Ё   уА▓*Ц ч Ё ▒ ц Аtч■`■8р? └Ю-м ■ 0<└ └░  ■ 8 └  └М6Ў ■ °? └  └R
┤ № °? А  └GGGGGGGOGGGGGG6╝╧№ °? └ └╡╨П№ °┐ А └Ф╧№ Я      ° └с└Ъ№ ■ Up° °с└P.Q  А ЮИю┐   ▄ °┴└Д№  А     █U*? °├└╡+P ўА ° °?├└Ря  ° р?├└╓OGGGGGGGGGGO?№╧  ° Ё ГА╨#╟ ? 8?Ё ЗАД|я А■0?° ЗА╡"P  └■p?№0 ЗАФ   уА? p  < я╘/°АA  є└ р  №  T¤  └  р  ■  ■°°     рў    ■▐GGGGGGOOGGGGGGB|    є└у    №Р
РD    уАу    °]№?    єАў   ¤°А*@         ёЁ°@_ч   ■Я  ёр╒╟  ╟■?   └ЪРя ■№П № АЎ/^РC ▀Ё°П▀?№°GGGGGGGGGGGOP░ Яфр  ¤Z@╘ [└ ·wр
TШW├л И\HЧЇ┴░Т╚P ·# ┴@к №FFFFF с0╚Ф!РRbЕHВfа╒ р@"q")к,ВV@#·А!5@M9HI"а<6УУЯXДQ#hУDeВD@rВk$еФОX▓хФT*лб╘Ё·FFFFF.А▄╒Ц~АкпЮ>ка$RVкккнJэUл(╕А%ID"RU   ¤uV╒ЩА Z█5┐  ·д▓Х        PКP БФэ~║MФА%Nє╡iRBДКJРR%<Ё
ў╒o{▐ї5Hд ИикЖеJPРМP!аQФдyfыlдИЕHТ    TU+H╡9UF!Є└√╓кk╓х*HД(кHЙгsД}ЇбТдй~╗ √▌]bЕ╖vЕ*╩%gТ,╪Д(T
кw╜v¤&лwв╓в
1RХTаAг█В?■╗KФrUЙBЙTФИ]¤YйD E@НоZ}e(ЦЙ$(DTТJпWЎюэ╗ЇдЧаП╛║╗j~   √   їн╜й╤"V╖|ЦF▀ещ0 RкRЧu(ФмyNР*╘╨ 
Фе{▐ я   эJ╡A       %┴Pе·╓KўяыZ▀      UkWъТBЧ▒hЦ┐`!╫╘(HоQ% Фел.d║кPАЕ(ш└* ╖█╒^кмKкФ╢▒EZ'╪ЙГ▒        ZпЫ╘
Htе   Ю@С #щжRTJRХ*V6ёjФв)┐нP╜И)TеYNмї·л)aБГYV╒Z╓y▀╒э█▀j╥зBКХ%QheTФКZФ,JЭ¤)Z╡Гt3)U:RФдФе)VYї┌╥еTА!A╘д)<▀п [╜кнJвР JHШЙ─$(ДBХ╜k▀¤[ZКp В╜Q Е!Сkы│еъ╚▒kZл№)¤!)Ъў┐k╝К╒е)┌╡Ъ┌|й╓TЭ-RФе*Сюл  МJлV ¤╫{zХ-kжkVэєъы╡ыZХы[W■U   ВJK  ы}U■ыR┌н║┌■O ╢но╡m-RФ▐  Бi  oVХ-ZФцKV┐/┌╫╡zРАвjB■o  °▐%W  гyJ╢дJЯ}√ √я{▌G■   ¤ +  с/  ю}Z▄л√ЎЁлno ·ж1H[Хя√Ц■_  ▌Nъ▀  ╧√w╖ j╪пTТ▀   н_╫ї╡z╡П?  р)_  ъ ╗¤э┐?J┐     №kЄДИW■ЁFе   яij╩ТY■e     Ь└o╤ZWп№э[_  ─┬J%└'Jд!Э*пъkьKЧ■ё■!_у ▐  ї ¤Д┐ IZ[|$ХАW/  яNэ▀ы ыъ[╫ _АGZе%JЮА3YЁ╠пЧ  ╚╜_ў ═┐■┐lИ╕йE@нНаЗ  ъюл  ЭхVА▌АЕ" HИА:С└DлЫ  Щ·O▀  SиVpsА*╚BЙVU1н\з╟  │N╗   Э╖▐?ЭА╗j(lЙ[╡А
╘Ф╔  │║╜ ■ЛнтyАн┌╫Х*n┌└2╒^ч┬  m╛╧ ¤Яo┌эр+R%l@Ыд░кФр№9┌ ў ¤3пz
z╒JоиB╡I-BшАDз═┐·╗√╪K Є<ж└·jдЧ@T
%EЎАЭS`K╥=j■Ї фЫ/█А√Ц▓╣{sнBJ╛ j╓@DаmФ%▀▀∙ыН4яЇ04¤■╒н╩S╤е_▄╨
Ъ#@
Vя▐╤i]╦└%{Z╖{к╤йJ.н┌YUБ∙PХ№╡ыnк:╞ал-ъЩ ╨▌ыkV$Хк~
NTПP▀пU_|  !╥znўЎ╓ nя ╘Я·╩R