Как отобразить текст Press Start Button — различия между версиями
Red TF (обсуждение | вклад) м (Замена текста — «{{GuideBy|» на «{{Руководство|») |
м |
||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 1: | Строка 1: | ||
{{Руководство|[[Quickman]]}} | {{Руководство|[[Quickman]]}} | ||
− | В [[Sonic the Hedgehog (16- | + | В ''[[Sonic the Hedgehog (16-бит)|Sonic 1]]'' на титульном экране есть объект с надписью "PRESS START BUTTON". Однако, в финальной версии он отсутствует. Точнее, не совсем. Он там, но невидим. Чтобы это исправить, просто иди к Title_LoadText:. Найди этот кусок кода: |
<asm> lea ($FFFFD080).w,a1 | <asm> lea ($FFFFD080).w,a1 | ||
moveq #0,d0 | moveq #0,d0 | ||
Строка 24: | Строка 24: | ||
Теперь ты сможешь увидеть: | Теперь ты сможешь увидеть: | ||
− | [[ | + | [[Файл:S1-PressStart.png]] |
Оригинальное сообщение [[Quickman]] на {{linkRetro|topic=10240|title=форуме Sonic Retro}}: | Оригинальное сообщение [[Quickman]] на {{linkRetro|topic=10240|title=форуме Sonic Retro}}: | ||
− | {{quote|Я наконец-то детально разобрался, почему текст "PRESS START BUTTON" (PSB) не появляется на титульном экране | + | {{quote|Я наконец-то детально разобрался, почему текст "PRESS START BUTTON" (PSB) не появляется на титульном экране ''Sonic 1'', и, учитывая сущность этого, я предполагаю, что это баг в оригинальном коде [[Sonic Team]]. (Удивлены, не правда ли?) |
− | Сейчас, объект PSB инициализируется в слоте объектного RAM $D080 на строке 3237 диассембла, которого я сейчас использую (модифицирован [[Pu7o]] для работы под Линуксом; прямо под лейблом Title_ClrObjRam2, в случае, если в оригинальном диассембле | + | Сейчас, объект PSB инициализируется в слоте объектного RAM $D080 на строке 3237 диассембла, которого я сейчас использую (модифицирован [[Pu7o]] для работы под Линуксом; прямо под лейблом Title_ClrObjRam2, в случае, если в оригинальном диассембле ''Sonic 1'' есть отличия). Тот же кусок RAM перед этим использовался для объекта "SONIC TEAM PRESENTS" (STP) в роутине TitleScreen (строка 3162). |
Причиной того, что текст PSB не появляется, является то, что объект STP пишется в объектный RAM, но роутина TitleScreen очищает только $1C верхних байтов. Любые другие данные между $D09C и $D0A0, использованные перед этим объектом STB, не изменяются. Думаю, именно поэтому, текст PSB не появляется, и, как ни странно, этот баг обнаружить довольно трудно без очень внимательного изучения кода и нескольких довольно приметных вычислений. | Причиной того, что текст PSB не появляется, является то, что объект STP пишется в объектный RAM, но роутина TitleScreen очищает только $1C верхних байтов. Любые другие данные между $D09C и $D0A0, использованные перед этим объектом STB, не изменяются. Думаю, именно поэтому, текст PSB не появляется, и, как ни странно, этот баг обнаружить довольно трудно без очень внимательного изучения кода и нескольких довольно приметных вычислений. | ||
− | Исправление достаточно просто; очистите объектную RAM для объекта по адресу $D080 более тщательно. | | + | Исправление достаточно просто; очистите объектную RAM для объекта по адресу $D080 более тщательно.|[[Quickman]]}} |
[[Категория:Руководства]] | [[Категория:Руководства]] |
Текущая версия на 09:16, 17 мая 2014
(Оригинальное руководство написано Quickman)
В Sonic 1 на титульном экране есть объект с надписью "PRESS START BUTTON". Однако, в финальной версии он отсутствует. Точнее, не совсем. Он там, но невидим. Чтобы это исправить, просто иди к Title_LoadText:. Найди этот кусок кода: <asm> lea ($FFFFD080).w,a1 moveq #0,d0 move.w #7,d1
Title_ClrObjRam2: move.l d0,(a1)+ dbf d1,Title_ClrObjRam2
move.b #$E,($FFFFD040).w ; load big Sonic object</asm> И замени его этим: <asm> lea ($FFFFD080).w,a1
- moveq #0,d0
- move.w #7,d1
- Title_ClrObjRam2
- move.l d0,(a1)+
- dbf d1,Title_ClrObjRam2
jsr DeleteObject2 ; clear object RAM to make room for the "Press Start Button" object move.b #$E,($FFFFD040).w ; load big Sonic object</asm>
Теперь ты сможешь увидеть:
Оригинальное сообщение Quickman на форуме Sonic Retro:
« | Я наконец-то детально разобрался, почему текст "PRESS START BUTTON" (PSB) не появляется на титульном экране Sonic 1, и, учитывая сущность этого, я предполагаю, что это баг в оригинальном коде Sonic Team. (Удивлены, не правда ли?)
Сейчас, объект PSB инициализируется в слоте объектного RAM $D080 на строке 3237 диассембла, которого я сейчас использую (модифицирован Pu7o для работы под Линуксом; прямо под лейблом Title_ClrObjRam2, в случае, если в оригинальном диассембле Sonic 1 есть отличия). Тот же кусок RAM перед этим использовался для объекта "SONIC TEAM PRESENTS" (STP) в роутине TitleScreen (строка 3162). Причиной того, что текст PSB не появляется, является то, что объект STP пишется в объектный RAM, но роутина TitleScreen очищает только $1C верхних байтов. Любые другие данные между $D09C и $D0A0, использованные перед этим объектом STB, не изменяются. Думаю, именно поэтому, текст PSB не появляется, и, как ни странно, этот баг обнаружить довольно трудно без очень внимательного изучения кода и нескольких довольно приметных вычислений. Исправление достаточно просто; очистите объектную RAM для объекта по адресу $D080 более тщательно. |
» |
—Quickman |