Разработка и ромхакинг > Ромхакинг и программирование
[SMD] Sonic 1 hack
<< < (2/5) > >>
HayaoYokogawa:

--- Цитата ---; Vladikcomper: this data was moved to BIN-files, which are updated by S1HS
Obj34_ConData:   incbin   "mapbin\ttlcards_cfg_0.bin"
      incbin   "mapbin\ttlcards_cfg_1.bin"
      incbin   "mapbin\ttlcards_cfg_2.bin"
      incbin   "mapbin\ttlcards_cfg_3.bin"
      incbin   "mapbin\ttlcards_cfg_4.bin"
      incbin   "mapbin\ttlcards_cfg_5.bin"
      incbin   "mapbin\ttlcards_cfg_6.bin"
--- Конец цитаты ---

Блин, а я искал  :lol:

Добавлено позже:
и еще не открывается блин.

Добавлено позже:
Все, что мне надо, нашел. Теперь это надо из Эниггмы превратить в нормальный формат, исправить, и обратно сунуть.

Добавлено позже:
не получилось.
Teffycom:
А что тебе именно нужно?
HayaoYokogawa:
Надо бы маппинги как-то извлечь, или нужно найти *.sep проект  для SonED, чтобы картинку свою поставить. Я анимацию в тайтл скрин вообще убрать хочу.
Segaman:

--- Цитата: HayaoYokogawa от 22 Июль 2011, 13:08:07 ---Надо бы маппинги как-то извлечь, или нужно найти *.sep проект  для SonED, чтобы картинку свою поставить. Я анимацию в тайтл скрин вообще убрать хочу.

--- Конец цитаты ---
найди в коде title screen есть вызов титульного соника.
найди этот обьект, найди его анимацию и в ней убери изменение спрайта.
HayaoYokogawa:
Я не нашел такого файла под тайтл скрин.
Teffycom:
Значит так, графа Соника на тайтл скрине - artnem/titleson.bin, мапсы - _maps/obj0E.asm, анимация соответственно - _anim/obj0E.asm.
HayaoYokogawa:
Да это я знал, мне нужен не сам Соник, а нужна "рамка", из которой он "вылазит".

То есть маппинги. Еще бы поправить маппинги "SONIC HAS PASSED", но я понятия не имею, как. Они в Энигма компрессии и если их расдекомпрессить, то SonMapEd выдает какую-то хрень, а не маппинг.
Teffycom:

--- Цитата ---Да это я знал, мне нужен не сам Соник, а нужна "рамка", из которой он "вылазит".
--- Конец цитаты ---

К сожалению у рамки, о которой ты говоришь, так называемые "плановые" маппинги. Их не отредактируешь сонмапэдом, даже если декомпрессируешь - это да. Редактировать плановые маппинги умеет программа PlaneEd, но работать в ней сложно и неудобно - нужно вручную создавать проект и т.д. В общем, лучше забей на это дело.
HayaoYokogawa:
А если я рисунок сделаю, поможете переделать плиз? ^^
vladikcomper:

--- Цитата ---он витает в воздухе и у него нет хвостов на месте.
--- Конец цитаты ---
То, что объект не касается земли происходит из-за его неверных характеристик. Каждый объект имеет свой "hitbox", условную прямоугольную область, которая задается горизонтальным и вертикальным радиусами. Для границ этой области и просчитываются столкновения, взаимодействие с полом/стенами. Тейлз ниже Соника, и хитбокс и него меньше. А поскольку у твоего объекта остаются все характиристики Соника (ты только заменил спрайт), отсюда и недоставание до пола.

За высоту объекта отвечает байт $16 его структуры. Подробнее про структуры объектов можно прочитать здесь: http://vladikcomper.narod.ru/sonic_reference_view.htm?2
Поищи в самом начале кода Obj01 команду move.b #$13,$16(a0) и измени $13 на $F (это значение я называю по памяти, если не подойдет, попробуй сделать его больше/меньше или посмотреть в Соник 2). Помимо этого, тебе придется найти и заменить такую же команду еще в нескольких местах - значение высоты заново задается после прыжка и спина.

За хвосты отвечает отдельный объект. Зачем? Это сэкономит на количестве спрайтов для самого Тейлза, к тому же у хвостов есть своя физика - например, они меняют свой угол наклона в прыжке, а в Соник 3 хвосты при полете еще и могут нанести урон врагу.
Если хочешь добавить хвосты, придется портировать Obj05 из Соник 2.


--- Цитата ---Все, что мне надо, нашел. Теперь это надо из Эниггмы превратить в нормальный формат, исправить, и обратно сунуть.
--- Конец цитаты ---

Боже, сколько заблуждений по маппингам. Сейчас постараюсь все расставить по своим местам.

То, что ты нашел - Obj34_ConData, вообще не то, что тебе нужно. Это не маппинги, а массив положений Тайтл кардсов на экране.
Все спрайтовые маппинги (если они есть), находятся по лейбелу с названием Map_ObjXX (кроме Соника - Map_Sonic). Нужны маппинги объекта 34? Ищи Map_Obj34.

Но должен предупредить - маппинги Тайтл Кардсов (Obj34), Sonic Has Passed (Obj3A) и Special Stage results (Obj7E) сложны для редактирования в SonMapEd. Дело в том, что в поинтерах (список в самом начале с dc.w, указывает на оффсет маппингов каждого отдельного спрайта) поинтер на спрайт синего овала ссылается на одно и тоже место. То есть, все эти объекты берут спрайт овала из одного места - byte_CB47, что находится внутри Map_Obj34. Если ты вытащищь маппинги Obj7E и Obj3A в отдельный файл, SonMapEd просто не поймет, откуда брать маппинги этого овала. С тайтл кардсами (Obj34) он разберется, но тут поджидает другая беда - при сохранении SonMapEd любит заменять имена всех лейбелов на свои, рандомные. Так что byte_CB47, на который ссылаются другие объекты, станет каким-нибудь SME_c7mzL_192.

Добавлено позже:

--- Цитата: HayaoYokogawa от 23 Июль 2011, 09:07:34 ---То есть маппинги. Еще бы поправить маппинги "SONIC HAS PASSED", но я понятия не имею, как. Они в Энигма компрессии и если их расдекомпрессить, то SonMapEd выдает какую-то хрень, а не маппинг.

--- Конец цитаты ---
Спрайтовые маппинги всегда несжатые. Если они не открываются в SonMapEd'е, значит ты загружаешь не то.
HayaoYokogawa:

--- Цитата ---Если хочешь добавить хвосты, придется портировать Obj05 из Соник 2.
--- Конец цитаты ---
Очень хочу.

--- Цитата ---Спрайтовые маппинги всегда несжатые. Если они не открываются в SonMapEd'е, значит ты загружаешь не то.
--- Конец цитаты ---
mapeni - mappings enigma - то есть сжатые маппинги.

Дык как быть с рамкой?
vladikcomper:

--- Цитата: HayaoYokogawa от 23 Июль 2011, 14:12:23 ---Очень хочу.mapeni - mappings enigma - то есть сжатые маппинги.

Дык как быть с рамкой?

--- Конец цитаты ---
Да, ты прав - маппинги в папке mapeni сжаты алгоритмом Enigma. Но разве я говорил, что в mapeni спрайтовые маппинги? Там-то как раз маппинги планов (aka плановые маппинги, про которые и говорил Cool-Spot). Не будут же весь титульник на спрайтах строить, это выйдет за рамки всех лимитов на Сеге.

Как быть с рамкой? Ну, это зависит от того, что ты хочешь с ней сделать.
Если просто перерисовать пару надписей - тайловый редактор придет на помощь. Берешь файл artnem/titlefor.bin, разжимаешь его и открываешь в редакторе, после чего можно перерисовать нужные надписи.
Если же ты хочешь полностью переделать титульник, изменить его внешний вид, форму или что-то в этом роде, тебе понадобится программа Imagenesis (PlaneEd же нужен, если надо отредактировать маппинги, строить новые в нем не очень удобно). Можешь нарисовать новый титульник в виде обычной картинки, а Imagenesis сгенерирует для него тайлы, маппинги и палитру.
HayaoYokogawa:
отлично, нужна ссылка  :wow: уже нашел

Добавлено позже:
при экспорте в тайлы сказал до свидания и вырубился, сказав что ему не понравился какой-то ocx-файл.  <_<
Teffycom:
Поищи этот файл в гугле и закинь в WINDOWS/System32
HayaoYokogawa:
давно уже догадался, не зря хожу деньги на компах зарабатываю  ^_^

Добавлено позже:
в общем завтра буду вставлять тайтл скрин, отпишусь об успехах

Добавлено позже:
щас начал потихоньку возиться, как отключить Соника на тайтл скрине?
Teffycom:
Закомментируй или удали код суброутины, которая загружает его арт
HayaoYokogawa:
окей, ща попробую

Добавлено позже:
работает, спасибо, щас буду пытаться вставить свой рисунок.

Добавлено позже:
PlaneEd такой нелюдимый, что вообще блин.
Imagenesis сработал правильно, а палитра неправильно понимается SonMapEd.
Проблема остается в маппинге и палитре. Думаю можно попробовать сделать в SonEd по инструкции...

Добавлено позже:
эх блин, ничего не получается.

Добавлено позже:
Imagenesis интересно может корректно маппинг сделать? При открытии в PlaneEd он выдает белиберду.

Как вариант можно как нибудь сделать следующее: в тайл-редакторах при вставке тайла в редактор (кроме TileMolester) прописывает, где висит тайл. TileEd имеет ограниченное пространство в редакторе 128х128, поэтому хитрый план расставить тайлы по порядку, а потом сверху BMP не работает. Я еще думаю, что можно упростить и так кропотливую работу в PlaneEd тем, что TileMolester вставляет картинку просто так, соответственно все тайлы идут очень по порядку и работа в PlaneEd упрощается.

Что думаете?

Добавлено позже:
вот как выглядит маппинг для моей картинки, его бы переделать под энигму чтоль:

--- Цитата ---mapdata_title:
   dc.w   $0000,$0001,$0002,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0004,$0005,$0006,$0007,$0007,$0008,$0009,$000A,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$000B,$000C,$000D,$0003,$0003
   dc.w   $000E,$000F,$0010,$0011,$0001,$0002,$0003,$0003,$0003,$0003,$0012,$0013,$0014,$0015,$0016,$0017,$0018,$0019,$001A,$001B,$001C,$001D,$0003,$0003,$0003,$0003,$000B,$000C,$001E,$001F,$0020,$0021,$0003,$0003
   dc.w   $0022,$0023,$0024,$0025,$0025,$0026,$0027,$0028,$0029,$002A,$002B,$002C,$002D,$002E,$002F,$0030,$0031,$0032,$0033,$0034,$0035,$0036,$0037,$0038,$0039,$003A,$003B,$0025,$0025,$003C,$003D,$003E,$0003,$0003
   dc.w   $0003,$003F,$0040,$0041,$0025,$0025,$0025,$0025,$0025,$0042,$0043,$0044,$0045,$0046,$0047,$0048,$0049,$004A,$004B,$004C,$004D,$004E,$004F,$0025,$0025,$0025,$0025,$0025,$0050,$0051,$0052,$0003,$0003,$0003
   dc.w   $0003,$0003,$0053,$0054,$0055,$0056,$0025,$0025,$0057,$0058,$0059,$005A,$005B,$005C,$005D,$005E,$005F,$0060,$0061,$0062,$0063,$0064,$0065,$0066,$0025,$0025,$0067,$0068,$0069,$006A,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$006B,$006C,$006D,$006E,$0025,$0025,$006F,$0070,$0071,$0072,$0073,$0074,$0075,$0076,$0077,$0078,$0079,$007A,$007B,$007C,$007D,$007E,$0025,$0025,$007F,$0080,$0081,$0082,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$003F,$0083,$0024,$0025,$0025,$0084,$0085,$0086,$0087,$0088,$0073,$0089,$008A,$008B,$008C,$008D,$008E,$008F,$0090,$0091,$0092,$0093,$0094,$0025,$0025,$003C,$0095,$0052,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0003,$0096,$0097,$0041,$0025,$0098,$0099,$009A,$009B,$0073,$0073,$0073,$009C,$009D,$009E,$009F,$00A0,$0073,$00A1,$00A2,$00A3,$00A4,$00A5,$0025,$0050,$00A6,$00A7,$0003,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0003,$0003,$00A8,$00A9,$00AA,$00AB,$00AC,$00AD,$00AE,$0073,$00AF,$00B0,$00B1,$00B2,$00B3,$00B4,$0073,$00B5,$00B6,$0025,$00B7,$00B8,$00B9,$00BA,$00BB,$00BC,$0003,$0003,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0003,$0003,$00BD,$00BE,$00BF,$00C0,$00C1,$00C2,$00C3,$00C4,$00C5,$00C6,$00C7,$00C8,$00C9,$00CA,$00CB,$00CC,$00CD,$00CE,$00CF,$00D0,$00D1,$00D2,$00D3,$00D4,$0003,$0003,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0003,$0003,$0003,$00D5,$00D6,$00D7,$00D8,$00D9,$00DA,$00DB,$00DC,$00DD,$00DE,$00DF,$00E0,$00E1,$00E2,$00E3,$00E4,$00E5,$00E6,$00E7,$00DF,$00E8,$00E9,$0003,$0003,$0003,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0003,$0003,$0003,$0003,$00EA,$00EB,$00EC,$00ED,$00EE,$00EF,$00F0,$00F1,$00F2,$00F3,$00F4,$00F5,$00F6,$00F7,$00F8,$00F9,$00FA,$00FB,$00FC,$00FD,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0003,$0003,$0003,$0003,$00FE,$00FF,$00FF,$00FF,$00FF,$00FF,$0100,$0101,$0102,$0103,$0104,$0105,$0106,$0107,$00FF,$00FF,$00FF,$00FF,$00FF,$0108,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0003,$0109,$010A,$010B,$010C,$00FF,$00FF,$00FF,$00FF,$00FF,$010D,$010E,$010F,$0110,$0111,$0112,$0113,$0114,$00FF,$00FF,$00FF,$00FF,$00FF,$0115,$0116,$0117,$0118,$0003,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0119,$011A,$011B,$011C,$011D,$011E,$011F,$0120,$0121,$0122,$0123,$0124,$0124,$0124,$0124,$0124,$0124,$0125,$0126,$0127,$0120,$011F,$0128,$0129,$012A,$012B,$012C,$012D,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0003,$012E,$0025,$012F,$0130,$0131,$0003,$0003,$0003,$0132,$0133,$0134,$0135,$0136,$0137,$0138,$0139,$013A,$013B,$0003,$0003,$0003,$013C,$013D,$013E,$0025,$013F,$0003,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0140,$0141,$0142,$0143,$0144,$0145,$0003,$0003,$0003,$0003,$0146,$0147,$0148,$0149,$014A,$014B,$014C,$014D,$0003,$0003,$0003,$0003,$014E,$014F,$0150,$0151,$0152,$0153,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0154,$00FF,$0155,$0156,$0157,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0158,$0159,$015A,$00FF,$015B,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$015C,$015D,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$015E,$015F,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003
   dc.w   $0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0003,$0160,$0161,$0162,$0163,$0164,$0165,$0166,$0167,$0168
--- Конец цитаты ---

Добавлено позже:
Пфф, снова облом. Слишком мало места под тайлы.

Добавлено позже:
Знать все на свете нереально,
Но я, мечту свою лелея,
Решил проблему гениально!

Нет, не в Галилео это было мне сказано, но я подумал, и сделал по-другому - переделал тайлы и маппинги titleson.bin, но встала проблема - нужно как-то избавится от анимации. и от рамки.

Добавлено позже:
но, конечно, лучяше сделать так, как я хотел
Teffycom:
Анимация - _anim/obj0E.asm, рамка - artnem/titlefor.bin
HayaoYokogawa:
О хвостах:

нашел в STHOSP:
; ----------------------------------------------------------------------------
; Object 8D - Tails' tails
; ----------------------------------------------------------------------------
; Sprite_1D200:
Obj8D:
      moveq   #0,d0
      move.b   routine(a0),d0
      move.w   Obj8D_States(pc,d0.w),d1
      jmp   Obj8D_States(pc,d1.w)
; ===========================================================================
; off_1D20E:
Obj8D_States:
      dc.w Obj8D_Init-Obj8D_States
      dc.w Obj8D_Main-Obj8D_States
; ===========================================================================
; loc_1D212
Obj8D_Init:
      addq.b   #2,routine(a0) ; => Obj8D_Main
      move.l   #Map_Tails,mappings(a0)
      move.w   #$7A0,art_tile(a0)
   ;   bsr.w   Adjust2PArtPointer
      move.b   #2,priority(a0)
      move.b   #$18,width_pixels(a0)
      move.b   #4,render_flags(a0)

; loc_1D23A:
Obj8D_Main:
   ;   movea.w   parent(a0),a2 ; a2=character
      lea   ($FFFFD000).l,a2 ; a2=character
      move.b   angle(a2),angle(a0)
      move.b   status(a2),status(a0)
      move.w   x_pos(a2),x_pos(a0)
      move.w   y_pos(a2),y_pos(a0)
      andi.w   #$7FFF,art_tile(a0)
      tst.w   art_tile(a2)
      bpl.s   loc_1D286
      ori.w   #$8000,art_tile(a0)

loc_1D286:
      moveq   #0,d0
      move.b   anim(a2),d0
      btst   #5,status(a2)
      beq.s   loc_1D287
      moveq   #4,d0

loc_1D287:
      cmp.b   objoff_30(a0),d0
      beq.s   loc_1D288
      move.b   d0,objoff_30(a0)
      move.b   Obj8DAniSelection(pc,d0.w),anim(a0)

loc_1D288:
      lea   (Obj8DAniData).l,a1
      bsr.w   Tails_Animate_Part2
      bsr.w   LoadTailsTailsDynPLC
      jsr   (DisplaySprite).l
      rts
; ===========================================================================
; animation master script table for the tails
; chooses which animation script to run depending on what Tails is doing
; byte_1D29E:
Obj8DAniSelection:
   dc.b   0,0   ; TailsAni_Walk,Run   ->
   dc.b   3   ; TailsAni_Roll      -> Directional
   dc.b   3   ; TailsAni_Roll2   -> Directional
   dc.b   9   ; TailsAni_Push      -> Pushing
   dc.b   1   ; TailsAni_Wait      -> Swish
   dc.b   0   ; TailsAni_Balance   -> Blank
   dc.b   2   ; TailsAni_LookUp   -> Flick
   dc.b   1   ; TailsAni_Duck      -> Swish
   dc.b   0,0,0   ; TailsAni_Dummy1,2,3   ->
   dc.b   0   ; TailsAni_HaulAss   ->
   dc.b   8   ; TailsAni_Stop      -> Skidding
   dc.b   0,0   ; TailsAni_Float,2   ->
   dc.b   0   ; TailsAni_Spring   ->
   dc.b   0   ; TailsAni_Hang      ->
   dc.b   0,0   ; TailsAni_Blink,2   ->
   dc.b   $A   ; TailsAni_Hang2   -> Hanging
   dc.b   0   ; TailsAni_Bubble   ->
   dc.b   0,0,0,0   ; TailsAni_Death,2,3,4   ->
   dc.b   0,0   ; TailsAni_Hurt,Slide   ->
   dc.b   0   ; TailsAni_Blank   ->
   dc.b   0,0   ; TailsAni_Dummy4,5   ->
   dc.b   7   ; TailsAni_Spindash   -> Spindash
   dc.b   0   ; TailsAni_Fly      ->
   dc.b   0   ; TailsAni_FlyTired
   dc.b   0   ; TailsAni_Swim
   dc.b   0   ; TailsAni_Swim2
   dc.b   0   ; TailsAni_SwimTired
   even


; ---------------------------------------------------------------------------
; Animation script - Tails' tails
; ---------------------------------------------------------------------------
; off_1D2C0:
Obj8DAniData:
   dc.w Obj8DAni_Blank-Obj8DAniData   ; 0
   dc.w Obj8DAni_Swish-Obj8DAniData   ; 1
   dc.w Obj8DAni_Flick-Obj8DAniData   ; 2
   dc.w Obj8DAni_Directional-Obj8DAniData   ; 3
   dc.w Obj8DAni_DownLeft-Obj8DAniData   ; 4
   dc.w Obj8DAni_Down-Obj8DAniData   ; 5
   dc.w Obj8DAni_DownRight-Obj8DAniData   ; 6
   dc.w Obj8DAni_Spindash-Obj8DAniData   ; 7
   dc.w Obj8DAni_Skidding-Obj8DAniData   ; 8
   dc.w Obj8DAni_Pushing-Obj8DAniData   ; 9
   dc.w Obj8DAni_Hanging-Obj8DAniData   ;$A
Obj8DAni_Blank:      dc.b $20,  0,$FF
Obj8DAni_Swish:      dc.b   7,  9, $A, $B, $C, $D,$FF
Obj8DAni_Flick:      dc.b   3,  9, $A, $B, $C, $D,$FD,  1
Obj8DAni_Directional:   dc.b $FC,$49,$4A,$4B,$4C,$FF ; Tails is moving right
Obj8DAni_DownLeft:   dc.b   3,$4D,$4E,$4F,$50,$FF ; Tails is moving up-right
Obj8DAni_Down:      dc.b   3,$51,$52,$53,$54,$FF ; Tails is moving up
Obj8DAni_DownRight:   dc.b   3,$55,$56,$57,$58,$FF ; Tails is moving up-left
Obj8DAni_Spindash:   dc.b   2,$81,$82,$83,$84,$FF
Obj8DAni_Skidding:   dc.b   2,$87,$88,$89,$8A,$FF
Obj8DAni_Pushing:   dc.b   9,$87,$88,$89,$8A,$FF
Obj8DAni_Hanging:   dc.b   9,$81,$82,$83,$84,$FF
   even
; ===========================================================================
Я все правильно понял, только не понял, куда тыкать в sonic1.asm.
Teffycom:
Там много надо чего править.
Навигация
Главная страница сообщений
Следующая страница
Предыдущая страница

Перейти к полной версии