как говорится - "век живи,век учись"
спасибо за подробности
Вид для печати
как говорится - "век живи,век учись"
спасибо за подробности
4 табличка это альбомы. cdepc 85930 например это Thriller Миши Джексона.
OSVCD 21653 это саундтрек к The Rocky Horror Picture Show
Clive написал мне в facebook такое:
Насколько я понимаю, он запретил публиковать сырцы (но, думаю, после следующего релиза поделюсь с желающими помочь, но с учетом пожеланий Клайва не раздавать сырцы дальше). Олсо он не против публикации разогнанной версии, что есть гуд. Хочет идей по геймплею для будущего его Саботера 2 - надо будет подкинуть.Цитата:
Hi Alex! Sorry for the slow reply - my laptop screen broke...
I'd love to see the source code again, it's been a loooong time!
I would NOT like you to publish the source code, but the speeded up version would be ok.
I'll be making an updated Sab2 after Sab1, so maybe we could add some of your gameplay ideas in to the Sab2 remake..?
Знатоки английского, фразу про сырцы я не очень понял. Похоже, он явно не против того, чтобы я отправил декомпиленные сырцы ему, ибо он их давно не видел и хочет протащиться от них. Я прав?
Да уж, поди офигеет от тыщ файлов
Хватит подкалывать :) Промеж прочим, из-за тыщи файлов код построения комнаты легко и непринужденно переехал в 3-й банк. Без поиска мильенов хвостов по исходнику. Да и поддержка 15,5 тыс. строк монолитного кода - занятие нифига не приятное. А с учетом будущих переделок разбиение по файлам очень даже пользительно.
Впрочем, Clive получит монолитный дизасм.
Непонятно зачем. И как это приподнести игроку.
---------- Post added at 01:27 ---------- Previous post was at 01:25 ----------
Привет! Проблема решилась. Посмотрю на досуге до чего я не дошел в релоцируемости плеера.
---------- Post added at 01:31 ---------- Previous post was at 01:27 ----------
Олсо сегодня перенес MainMenu в страницу. Скомпилилось, взлетело с небольшими слегка нежданными эффектами. Буду фиксить и буду ловить остальные баги. Место в 5-й, 2-й и 0-й странице стремительно освобождается для новых фич!
http://savepic.ru/7376993.jpg
честно говоря ожидал большего размера,
но печать очень качественная, чётко видны все мелкие детали.
Во вложении первого поста первая версия 128-го саботера. Пока отличается только 128-й музыкой в меню (а внутри - растасованным по страницам кодом). Можно искать баги. Собственно, следующие 2 шага моих - это ускорение отрисовки и подбор звуковых AY-эффектов для событий игры. Ускорю я сам, а вот для переозвучки ищется 2 вещи:
1. Желающие подобрать AY-эффекты (список могу положить сюда).
2. Какая-нибудь прога, которая мне в этом поможет (хотя бы просто вводилка значений для AY-регистров и прослушка получившегося эффекта). Писать самому такое не хочется.
Некоторые события можно озвучивать мини-мелодиями на прерываниях, im2 скоро появится в гемплее для опроса кнопок.
AYFX Editor v0.4
Sound effects cross editor for AY-3-8910/YM2149F and compatible sound chips. Some sound effects and Z80 player for ZX Spectrum are included. English documentation is included.
http://shiru.untergrund.net/pic/ayfxedit.png
неюзабельная aycli от Vitamin'a
Нда, кто-то попортил данные комнатки... Надо подебажить. А пока я положил в первый пост версию с опросом управления на прерывании. Также просьба сравнить и отписаться.
---------- Post added at 01:37 ---------- Previous post was at 00:46 ----------
Починил, но только в версии с "традиционным" управлением. Перезалил в первый пост. В версии с управлением от im2 проблема осталась пока, посему во избежании чудес не надо в ней вызывать лифты и включать/выключать электрический барьер.
мне мерещится, или версия с обычным управлением побыстрее?
Слишком быстро тоже плохо ) Нужно не медленно, не быстро, а нормально.
В принципе, оно может быть и так. В обычной версии клавиатура опрашивается только во время отработки текущего состояния ГГ, но перед каждым ветвлением по состоянию контролов. В версии с im2 - постоянно, в том числе, и во время, например, отрисовки. Может быть, надо один раз опросить клаву перед обработкой текущего состояния? Или оставить все как есть... После выходных попробую сделать версию с однократным опросом.
---------- Post added at 19:14 ---------- Previous post was at 19:13 ----------
Ну, замедлить проще, чем разогнать :)
Еще чуть разогнал 128-го Саботера (вложение в первом посту). Больше разгонять не буду - откровенно тормозных мест не осталось, а вылизывать мелочи можно бесконечно.
Общий результат оптимизации выглядит так: на эталонной картинке главный цикл исполнялся ~500-1000 тыс. тактов, сейчас - ~300-500 тыс тактов.
На очереди переозвучка под AY и GS - оно уберет такую разницу между минимальнлй и максимальной длительностью главного цикла.
Как всегда, найденные баги приветствуются и исправляются! Сильно покопался в ИИ охранников и отрисовщике, от этого могут возникнуть визуальные артефакты, некорректное поведение охранников, неверная обрабока опор для ГГ.
Alex Rider набирает популярность за пределами нашей родины
http://retrogamingmagazine.com/2015/...ming-computer/
только скорее всего автор статьи плохо въехал в-тему и привёл скрины из современного ремейка первой части.
а вот тут более правдоподобный обзор
http://www.indieretronews.com/2015/0...enture-zx.html
На последней ссылке веселый гугльтранслейт :) Их вообще не смущает такое? Alex Rider, напиши им список фич на английском, видишь же, ребята мучаются.
"Pereozvucheny 128-th version AY-effects during the game"
Пометил себе в todo сделать тапку релиза. А то буржуи считают эту версию "a bit faster", мне это кажется несколько скромной оценкой оптимизации. А есть волшебники, которые по trd-образу и коду лоадера сделают +3-версию?
Ну, поскольку никто не откликается вроде, попробую я. Сделал DSK образ для 48-й версии. Для 128-й версии хотелось бы либо код TR-DOS загрузчика на языке ассемблера, либо слова, какой файл куда загрузить, куда передать управление. Дизассемблировать я не.
Версия 128К. Раз в trdos варианте картинки не было, то я и тут не вставил. Если надо, то могу добавить. Игра сделана моноблоком. Особенность оного в +3дос состоит в том, что файл нельзя переименовывать. (хотя, в приципе, можно добавить в файлик несколько байт, что бы это можно было бы делать). Блоки кодов все пакованные и слиты в 1 файл. В образе выложенном присутствует boot который поддерживает "длинные имена". Если эти самые длинные имена используются, то появляется файл catfile. Иначе говоря, в этом самом образе файл самой игры это sab2.bas и ещё 2 файла относятся к буту.
Сорри, написал просьбу сделать +3-версию и свалил в отпуск в царства Природы и Бахуса. Во вложении не-debug-версия, код boot.a80 и сборщика ниже. Желательно релизить на WoS эту версию с загрузчиком по мотивам моего загрузчика.
Boot.a80
Код:MODULE Boot
CLEAR = #fd
NUMBER = #0e
RANDOMIZE = #f9
USR = #c0
REM = #ea
ENTER = #0d
TR_DOS = #3d13
MACRO FINDFILE FileName, Loader_TRDSEC, Loader_LEN
ld de,FileName
call FindFile
set 2,l
ld a,(hl)
ld (Loader_LEN),a
inc hl
ld e,(hl)
inc hl
ld d,(hl)
ld (Loader_TRDSEC),de
ENDM
BasicStart:
Line1:
db #00, #01
dw Line1End - Line1Start
Line1Start:
db CLEAR, "0", NUMBER, #00, #00: dw #5fff: db #00, ":", RANDOMIZE, USR, "0", NUMBER, #00, #00: dw BootCode: db #00, ":", REM
BootCode:
xor a
ld (#8800),a
out (#0fe),a
ld hl,#4000
ld de,#4001
ld bc,#1800
ld (hl),l
ldir
ld (hl),#08
ld bc,#2ff
ldir
ld hl,#8000
ld de,#0000
ld bc,#0805
call TR_DOS
IFDEF IncludePicture
FINDFILE SCRFileName, SCR_TRKSEC, SCR_LEN
ENDIF
FINDFILE Page5FileName, Page5_TRKSEC, Page5_LEN
FINDFILE CodeFileName, Code_TRKSEC, Code_LEN
FINDFILE Page1FileName, Page1_TRKSEC, Page1_LEN
FINDFILE Page3FileName, Page3_TRKSEC, Page3_LEN
FINDFILE Page4FileName, Page4_TRKSEC, Page4_LEN
IFDEF IncludePicture
SCR_TRKSEC = $ + 1
ld de,#0000
SCR_LEN = $ + 2
ld bc,#0005
ld hl,#4000
call TR_DOS
ENDIF
Page5_TRKSEC = $ + 1
ld de,#0000
Page5_LEN = $ + 2
ld bc,#0005
ld hl,#6000
call TR_DOS
Code_TRKSEC = $ + 1
ld de,#0000
Code_LEN = $ + 2
ld bc,#0005
ld hl,EntryPoint
call TR_DOS
di
ld bc,#7ffd
ld a,#11
out (c),a
Page1_TRKSEC = $ + 1
ld de,#0000
Page1_LEN = $ + 2
ld bc,#0005
ld hl,#c000
call TR_DOS
di
ld bc,#7ffd
ld a,#13
out (c),a
Page3_TRKSEC = $ + 1
ld de,#0000
Page3_LEN = $ + 2
ld bc,#0005
ld hl,#c000
call TR_DOS
di
ld bc,#7ffd
ld a,#14
out (c),a
Page4_TRKSEC = $ + 1
ld de,#0000
Page4_LEN = $ + 2
ld bc,#0005
ld hl,#c000
call TR_DOS
ld sp,STACK
ei
jp EntryPoint
SCRFileName:
db "sab2_$ C"
Page5FileName:
db "sab2_5 C"
CodeFileName:
db "sab2_0 C"
Page1FileName:
db "sab2_1 C"
Page3FileName:
db "sab2_3 C"
Page4FileName:
db "sab2_4 C"
FindFile:
ld hl,#8000
.find_loop:
ld a,(hl)
and a
jr z,.file_not_found
ld b,#09
push de
.check_name_loop:
ld a,(de)
cp (hl)
jr nz,.next_file
inc de
inc hl
djnz .check_name_loop
pop de
ret
.next_file:
pop de
ld a,l
and #f0
add #10
ld l,a
jr nc,.find_loop
inc h
jr .find_loop
.file_not_found:
rst #08
db #1a
db ENTER
dw #0000
Line1End:
BasicEnd:
ENDMODULE
[свернуть]
Сборщик:
Saboteur2.a80
Код:DEVICE ZXSPECTRUM48
;DEFINE Debug
IFDEF Debug
DISPLAY "Debug version"
DEFINE Sinclair2
DEFINE InfiniteTime
DEFINE InfiniteEnergy
DEFINE KillByFirstHit
DEFINE BASICFileName "boot.B"
ELSE
DISPLAY "Release version"
DEFINE BASICFileName "SAB2.B"
DEFINE IncludePicture
ENDIF
DEFINE TRDFileName "Saboteur2-128.trd"
EMPTYTRD TRDFileName
INCLUDE "Declarations\Structures.a80"
INCLUDE "Declarations\Enums.a80"
INCLUDE "Declarations\Consts.a80"
ORG #5d3b
INCLUDE "Boot.a80"
SAVETRD TRDFileName, BASICFileName, Boot.BasicStart, Boot.BasicEnd - Boot.BasicStart
IFDEF IncludePicture
ORG #4000
INCBIN "Screen.C"
SAVETRD TRDFileName, "sab2_$.C", #4000, #1b00
ENDIF
ORG #6000
MODULE Page5
INCLUDE "Devices\Text.a80"
INCLUDE "Game\Text.a80"
INCLUDE "Game\Init\Init.a80"
INCLUDE "Game\Init\MissionSettings.a80"
INCLUDE "Game\Init\Briefing.a80"
INCLUDE "Setup.a80"
ENDMODULE
DISPLAY "Entry point at: ", EntryPoint
DISPLAY "Stack at: ", STACK
DISPLAY "Page 5 ends at: ", $
SAVETRD TRDFileName, "sab2_5.C", #6000, $ - #6000
ORG Page2Start
INCLUDE "Devices\MaskTable.a80"
INCLUDE "Devices\Screen_6912.a80"
INCLUDE "Game\Game.a80"
INCLUDE "Devices\HID.a80"
INCLUDE "Devices\Beeper.a80"
DISPLAY "Page 2 Starts at: ", Page2Start
DISPLAY "Code ends at:", $
Page0End:
SAVETRD TRDFileName, "sab2_0.C", EntryPoint, $ - EntryPoint
ORG #c000
MODULE Page1
INCLUDE "MainMenu\MainMenu.a80"
ENDMODULE
DISPLAY "Page 1 ends at: ", $
Page1End:
SAVETRD TRDFileName, "sab2_1.C", #c000, $ - #c000
ORG #c000
MODULE Page3
INCLUDE "Game\LocationBuilder\LocationBuilder.a80"
ENDMODULE
DISPLAY "Page 3 ends at:", $
Page3End:
SAVETRD TRDFileName, "sab2_3.C", #c000, $ - #c000
ORG #0c000
MODULE Page4
INCLUDE "Game\HeroesSprites.a80"
ENDMODULE
DISPLAY "Page 4 ends at: ", $
Page4End:
SAVETRD TRDFileName, "sab2_4.C", #c000, $ - #c000
DISPLAY "Page 5 free space: ", Page5.Setup.Show - #6000
DISPLAY "Page 0 free space: ", #10000 - Page0End
DISPLAY "Page 1 free space: ", #10000 - Page1End
DISPLAY "Page 3 free space: ", #10000 - Page3End
DISPLAY "Page 4 free space: ", #10000 - Page4End
[свернуть]
PS Output компиляции:
Скрытый текст
Код:SjASMPlus Z80 Cross-Assembler v1.07 RC8 (build 06-11-2008)
Pass 1 complete (0 errors)
Pass 2 complete (0 errors)
> Release version
> Normal Energy
> Entry point at: 0x688E
> Stack at: 0x81FF
> Page 5 ends at: 0x7371
> Controls: AZNM[SP]
> Normal Time
> Random kill of guard
> Page 2 Starts at: 0x9500
> Code ends at:0xD664
> Page 1 ends at: 0xD527
> Page 3 ends at:0xEA23
> Page 4 ends at: 0xCDBF
> Page 5 free space: 0x088E
> Page 0 free space: 0x299C
> Page 1 free space: 0x2AD9
> Page 3 free space: 0x15DD
> Page 4 free space: 0x3241
Pass 3 complete
Errors: 0, warnings: 0, compiled: 13932 lines, work time: 0.078 seconds
[Finished in 0.2s]
[свернуть]
Господи, запустил для сравнения оригинальную версию — чуть не помер. КАК я играл в эту тормозную жуть?
Отличная версия, спасибо!
Моя пара предложений:
1) В оригинальной игре есть очень неприятный глюк (фича?) опроса клавиатуры: например, чтобы стоя спиной к врагу, развернуться и ударить, нужно практически ПО-ОЧЕРЕДИ нажать «назад», а потом «удар». Что, конечно, ни в какие ворота.
Предложение: исправить это так, чтобы можно было жать «назад+удар» одновременно и героиня сразу поворачивалась и била? А то это караул какой-то.
2) Может, в главном меню по-умолчанию всё-таки оставить клавиатуру, а не Sinclair 2. Здорово, кстати, что поставили его вместо никому не нужного Protek.
Прошу прощения
128 версия
делаю редефайн
устанавливаю клавиатуру
после старта игры работает только выстрел на пробел
кнопки движения не работают
ЧЯДНТ?
Vadim, спасибо! Выйду из отпуска - положу на WoS.
---------- Post added at 19:50 ---------- Previous post was at 19:25 ----------
Это точно "By design", не баг. Надо сильно подумать как сделать, сходу в существующем коде решение не придумывается. И да, надо тогда так же обрататывать "вниз" + "назад" + "огонь" и "вверх" + "назад" + "огонь". Маловероятно сделать как ты хочешь. В любом случае, раньше следующей недели не займусь.Спасибо за багу, посмотрю. Там был рефакторинг, потом откат. Должно писаться сразу куда надо, а вот куда оно пишется и что при этом ломает - вопрос.
В версии из этого поста должна быть клава по дефолту. На Sinclair 2 мне проще отлаживаться.