Перейти к содержимому

Таблица лидеров


Популярные публикации

Отображаются публикации с наибольшей репутацией на 28.06.2018 во всех областях

  1. 1 балл
    Создатели фильма недавно сообщили, что в случае успеха сольника Бамблби они запустят в производство сольник про Прайма и рассмотрят вариант сиквела Бамблби. Мысленно скрещиваю пальцы - надеюсь, что хоть как-то закончат вторую трилогию, пускай и сольниками.
  2. 1 балл
    Слушайте, забаньте этого чела уже. Видно же что это бот.
  3. 1 балл
    Ох... Увы, но это был крик души. Я уже больше не могу все это терпеть. Это нубство... Этих нубов... Они еще ничего не умеют, ничему не научились, но пафос и дерзость от них так и идет без остановки... На это все просто невозможно смотреть. Я не хотел опускаться до его уровня, но боюсь другого языка он не понимает... Меня никто никогда раньше не оскорблял... Я всегда готов помочь другим ромхакерам чем могу и пытаюсь давать советы и критику чтобы новички понимали что так хаки не делаются... Но когда вот такой индивид пишет подобное в мою сторону я не могу просто молчать и быть выше него. Куда еще выше то? Позориться? Да. Мой текст был слишком резким, грубым. Я писал на эмоциях, на его уровне, чтобы даже конченому нубу было ясна моя мысль при прочтении. Но давай отбросим все это, неужели тебе не ясна сама суть текста(проблемы)? Я продолжаю общаться с нормальными ромхакерами и им эта ситуация с нубством тоже очень не нравится. Но нубство победить нельзя пока отсутствуют нормальные модераторы в этой теме. Те кто будут следить за качеством работ, и удалять подобные работы которые делает Sonic and Tails Fan. Он ведь совсем не хочет учиться... Нет. Он делает какой то мусор, и посылает всех кто не лестно отзывается о его работе. Думаю люди которые меня лайкнули понимают что происходит с этим сайтом и российским ромхакингом в целом... Разве не видно как опустела эта тема? Все ушли как раз таки из такого нубства которое допускают модераторы своим бездействием. Все сейчас сидят на иностранных сайтах. И все типа хорошо, там порядок... На счет позора... Я уж и не знаю как еще хуже можно опозориться... Думаю нахождение в этой теме и да и на сайте в целом и есть настоящий позор для ромхакера. Мне плевать на репутацию, так как она здесь ничего не стоит. Я больше сюда не вернусь, поэтому я позволяю себе выражать свои мысли, а не писать адекватно лишь бы не обидеть ребенка хацкера... Я пишу правду. Как есть... Вся эта ситуация продолжается многие и многие годы... Всему рано или поздно приходит конец. Я написал свое мнение и я не о чем не жалею. Потому что я написал то что думаю, без лицемерия и какой либо жалости к оппоненту.
  4. 1 балл
    Приснилось, что вокруг меня бегают котята. Причём все они были таких расцветок, каких у кошек не бывает. Мне один приглянулся, я его выловила - у него был такой насыщенный тёмно-вельветовый цвет. Красавец.
  5. 1 балл
    Всегда хотел тут что-то написать, но не знал что. Вот наконец придумал. Вход в спецуровни через чекпоинты (как в sonic2) Прежде чем начать делать всё по этому гайду, предлагаю вам скачать готовый ром и оценить результат. Вдруг он вам не понравится. Скачать Портировать звездочки для чекпоинта будем из дизасембла Sonic2 от Xenowhirl (Скачать тут) Откроем исходники обоих соников и перейдем к Obj79. Они в основном похожи, но в sonic2 у чекпоинта есть одна дополнительная роутина, которая как раз нам и нужна. Приступаем к портированию. В sonic1.asm найдите Obj79_Index и после строки dc.w Obj79_Twirl-Obj79_Index вставьте dc.w Obj79_Star-Obj79_Index Теперь в s2.asm найдите Obj79_MakeSpecialStars и скопируйте весь код до строки JmpTo2_AnimateSprite и вставьте его в sonic1.asm перед Map_obj79. Obj79_MakeSpecialStars: moveq #4-1,d1 ; execute the loop 4 times (1 for each star) moveq #0,d2 - bsr.w SingleObjLoad2 bne.s return_1F534 _move.b 0(a0),0(a1) ; load obj79 move.l #Obj79_MapUnc_1F4A0,mappings(a1) move.w #$47C,art_tile(a1) move.b #4,render_flags(a1) move.b #8,routine(a1) ; => Obj79_Star move.w x_pos(a0),d0 move.w d0,x_pos(a1) move.w d0,objoff_30(a1) move.w y_pos(a0),d0 subi.w #$30,d0 move.w d0,y_pos(a1) move.w d0,objoff_32(a1) move.b priority(a0),priority(a1) move.b #8,width_pixels(a1) move.b #1,mapping_frame(a1) move.w #-$400,x_vel(a1) move.w #0,y_vel(a1) move.w d2,objoff_34(a1) ; set the angle addi.w #$40,d2 ; increase the angle for next time dbf d1,- ; loop return_1F534: rts ; =========================================================================== ; loc_1F536: Obj79_Star: move.b collision_property(a0),d0 beq.w loc_1F554 andi.b #1,d0 beq.s + move.b #1,($FFFFF7CD).w move.b #$10,(Game_Mode).w ; => SpecialStage + clr.b collision_property(a0) loc_1F554: addi.w #$A,objoff_34(a0) move.w objoff_34(a0),d0 andi.w #$FF,d0 jsr (CalcSine).l asr.w #5,d0 asr.w #3,d1 move.w d1,d3 move.w objoff_34(a0),d2 andi.w #$3E0,d2 lsr.w #5,d2 moveq #2,d5 moveq #0,d4 cmpi.w #$10,d2 ble.s + neg.w d1 + andi.w #$F,d2 cmpi.w #8,d2 ble.s loc_1F594 neg.w d2 andi.w #7,d2 loc_1F594: lsr.w #1,d2 beq.s + add.w d1,d4 + asl.w #1,d1 dbf d5,loc_1F594 asr.w #4,d4 add.w d4,d0 addq.w #1,objoff_36(a0) move.w objoff_36(a0),d1 cmpi.w #$80,d1 beq.s loc_1F5BE bgt.s loc_1F5C4 loc_1F5B4: muls.w d1,d0 muls.w d1,d3 asr.w #7,d0 asr.w #7,d3 bra.s loc_1F5D6 ; =========================================================================== loc_1F5BE: move.b #$D8,collision_flags(a0) loc_1F5C4: cmpi.w #$180,d1 ble.s loc_1F5D6 neg.w d1 addi.w #$200,d1 bmi.w JmpTo10_DeleteObject bra.s loc_1F5B4 ; =========================================================================== loc_1F5D6: move.w objoff_30(a0),d2 add.w d3,d2 move.w d2,x_pos(a0) move.w objoff_32(a0),d2 add.w d0,d2 move.w d2,y_pos(a0) addq.b #1,anim_frame(a0) move.b anim_frame(a0),d0 andi.w #6,d0 lsr.w #1,d0 cmpi.b #3,d0 bne.s + moveq #1,d0 + move.b d0,mapping_frame(a0) bra.w JmpTo_MarkObjGone ; =========================================================================== JmpTo10_DeleteObject jmp DeleteObject ; =========================================================================== nop JmpTo_MarkObjGone jmp MarkObjGone В таком виде код работать не будет, поэтому надо его поправить. В Obj79_MakeSpecialStars замените - (минус) на Obj79_MakeStarsLoop: Ниже замените bsr.w SingleObjLoad2 на jsr SingleObjLoad2 Ниже _move.b 0(a0),0(a1) на move.b 0(a0),0(a1) Перед return_1F534 замените dbf d1,- на dbf d1Obj79_MakeStarsLoop В Obj79_Star замените плюсы на loc_1F553 В loc_1F554 замените плюсы на loc_1F555 В loc_1F594 замените плюсы на loc_1F595 В loc_1F5D6 замените плюсы на loc_1F5D7 Теперь нам надо заменить все константы на байты. Можно конечно сами константы добавить, но я их не особо люблю и поэтому предлагаю избавиться от них. Во всём новом коде находим и заменяем: Obj79_MapUnc_1F4A0 -> Map_obj79b mappings ->$04 art_tile -> $02 render_flags -> $01 routine -> $24 x_pos -> $08 y_pos -> $0C objoff_30 -> $30 objoff_32 -> $32 priority -> $18 width_pixels -> $19 mapping_frame -> $1A x_vel -> $10 y_vel -> $12 objoff_34 -> $34 collision_property -> $21 Game_Mode -> $FFFFF600 objoff_36 -> $36 collision_flags -> $20 anim_frame -> $1B Проверяем... ага, нету мапингов... да и скажу сразу, арта звездочек тоже нету. Не буду рассказывать как их выдрать, а просто приложу архив с уже готовым артом и мапингами. https://yadi.sk/d/lDeBb4Pykc8fP Теперь в коде добавим новые мапинги. Рядом с Map_obj79 добавьте Map_obj79b: include "_maps\obj79b.asm" Снова проверяем и... Скомпилировалось, но звездочки не появляются. Если ещё раз сравнить код из sonic1 и sonic2, то можно увидеть ещё одну важную деталь. В s2.asm в Obj79_CheckActivation в конце есть 3 строчки, которые нам нужны. Копируем и переносим в sonic1.asm перед loc_16F76. Замените в этом коде Ring_count на $FFFFFE20, а loc_1F206 на loc_16F76. При компиляции будет ошибка. Проблема в том, что код стал длинне и некоторые быстрые переходы уже не достают до нужного им кода. В Obj79_HitLamp найдите строчку bcc.s locret_16F90 и сотрите в ней .s Снова проверяем. Работает! Работает, но не совсем. Звездочки отображаются не правильно и мы не попадаем в спец уровень при их прикосновении. Исправляем. Переходим к Obj79_MakeStarsLoop, находим там строчку move.w #$47C,$02(a1) и меняем тут значение с $47C на $7A0. Это адресс, из которого будет браться арт для звездочек. В sonic2 этот арт лежит в другом месте, поэтому такой баг получился. Если у вас в хаке есть спиндеш, то адрес надо указать $6C0 (или $D800/$20, как предлагается в гиде по добавлению спиндеша). Осталось исправить одну вещь, перемещение в спец уровень. Переходим к Obj79_Star. Честно скажу, не знаю в чём проблема, просто замените эти 6 строк на это move.b #$D7,$20(a0) tst.b $21(a0) beq.s loc_1F554 move.b #$10,($FFFFF600).w (первые 2 строчки взяты из кода бампера) Готово. Всё должно работать как надо. Если у вас что-то не получилось, то вот полный готовый код чекпоинта. ; --------------------------------------------------------------------------- ; Object 79 - lamppost ; --------------------------------------------------------------------------- Obj79: ; XREF: Obj_Index moveq #0,d0 move.b $24(a0),d0 move.w Obj79_Index(pc,d0.w),d1 jsr Obj79_Index(pc,d1.w) jmp MarkObjGone ; =========================================================================== Obj79_Index: dc.w Obj79_Main-Obj79_Index dc.w Obj79_BlueLamp-Obj79_Index dc.w Obj79_AfterHit-Obj79_Index dc.w Obj79_Twirl-Obj79_Index dc.w Obj79_Star-Obj79_Index ; =========================================================================== Obj79_Main: ; XREF: Obj79_Index addq.b #2,$24(a0) move.l #Map_obj79,4(a0) move.w #$7A0,2(a0) move.b #4,1(a0) move.b #8,$19(a0) move.b #5,$18(a0) lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 bclr #7,2(a2,d0.w) btst #0,2(a2,d0.w) bne.s Obj79_RedLamp move.b ($FFFFFE30).w,d1 andi.b #$7F,d1 move.b $28(a0),d2 ; get lamppost number andi.b #$7F,d2 cmp.b d2,d1 ; is lamppost number higher than the number hit? bcs.s Obj79_BlueLamp ; if yes, branch Obj79_RedLamp: bset #0,2(a2,d0.w) move.b #4,$24(a0) ; run "Obj79_AfterHit" routine move.b #3,$1A(a0) ; use red lamppost frame rts ; =========================================================================== Obj79_BlueLamp: ; XREF: Obj79_Index tst.w ($FFFFFE08).w ; is debug mode being used? bne.w locret_16F90 ; if yes, branch tst.b ($FFFFF7C8).w bmi.w locret_16F90 move.b ($FFFFFE30).w,d1 andi.b #$7F,d1 move.b $28(a0),d2 andi.b #$7F,d2 cmp.b d2,d1 bcs.s Obj79_HitLamp lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 bset #0,2(a2,d0.w) move.b #4,$24(a0) move.b #3,$1A(a0) bra.w locret_16F90 ; =========================================================================== Obj79_HitLamp: move.w ($FFFFD008).w,d0 sub.w 8(a0),d0 addq.w #8,d0 cmpi.w #$10,d0 bcc.w locret_16F90 move.w ($FFFFD00C).w,d0 sub.w $C(a0),d0 addi.w #$40,d0 cmpi.w #$68,d0 bcc locret_16F90 move.w #$A1,d0 jsr (PlaySound_Special).l ; play lamppost sound addq.b #2,$24(a0) jsr SingleObjLoad bne.s loc_16F76 move.b #$79,0(a1) ; load twirling lamp object move.b #6,$24(a1) ; use "Obj79_Twirl" routine move.w 8(a0),$30(a1) move.w $C(a0),$32(a1) subi.w #$18,$32(a1) move.l #Map_obj79,4(a1) move.w #$7A0,2(a1) move.b #4,1(a1) move.b #8,$19(a1) move.b #4,$18(a1) move.b #2,$1A(a1) move.w #$20,$36(a1) cmpi.w #$32,($FFFFFE20).w bcs.s loc_16F76 bsr.w Obj79_MakeSpecialStars loc_16F76: move.b #1,$1A(a0) ; use "post only" frame, with no lamp bsr.w Obj79_StoreInfo lea ($FFFFFC00).w,a2 moveq #0,d0 move.b $23(a0),d0 bset #0,2(a2,d0.w) locret_16F90: rts ; =========================================================================== Obj79_AfterHit: ; XREF: Obj79_Index rts ; =========================================================================== Obj79_Twirl: ; XREF: Obj79_Index subq.w #1,$36(a0) bpl.s loc_16FA0 move.b #4,$24(a0) loc_16FA0: move.b $26(a0),d0 subi.b #$10,$26(a0) subi.b #$40,d0 jsr (CalcSine).l muls.w #$C00,d1 swap d1 add.w $30(a0),d1 move.w d1,8(a0) muls.w #$C00,d0 swap d0 add.w $32(a0),d0 move.w d0,$C(a0) rts ; =========================================================================== ; --------------------------------------------------------------------------- ; Subroutine to store information when you hit a lamppost ; --------------------------------------------------------------------------- Obj79_StoreInfo: ; XREF: Obj79_HitLamp move.b $28(a0),($FFFFFE30).w ; lamppost number move.b ($FFFFFE30).w,($FFFFFE31).w move.w 8(a0),($FFFFFE32).w ; x-position move.w $C(a0),($FFFFFE34).w ; y-position move.w ($FFFFFE20).w,($FFFFFE36).w ; rings move.b ($FFFFFE1B).w,($FFFFFE54).w ; lives move.l ($FFFFFE22).w,($FFFFFE38).w ; time move.b ($FFFFF742).w,($FFFFFE3C).w ; routine counter for dynamic level mod move.w ($FFFFF72E).w,($FFFFFE3E).w ; lower y-boundary of level move.w ($FFFFF700).w,($FFFFFE40).w ; screen x-position move.w ($FFFFF704).w,($FFFFFE42).w ; screen y-position move.w ($FFFFF708).w,($FFFFFE44).w ; bg position move.w ($FFFFF70C).w,($FFFFFE46).w ; bg position move.w ($FFFFF710).w,($FFFFFE48).w ; bg position move.w ($FFFFF714).w,($FFFFFE4A).w ; bg position move.w ($FFFFF718).w,($FFFFFE4C).w ; bg position move.w ($FFFFF71C).w,($FFFFFE4E).w ; bg position move.w ($FFFFF648).w,($FFFFFE50).w ; water height move.b ($FFFFF64D).w,($FFFFFE52).w ; rountine counter for water move.b ($FFFFF64E).w,($FFFFFE53).w ; water direction rts ; --------------------------------------------------------------------------- ; Subroutine to load stored info when you start a level from a lamppost ; --------------------------------------------------------------------------- ; ||||||||||||||| S U B R O U T I N E ||||||||||||||||||||||||||||||||||||||| Obj79_LoadInfo: ; XREF: LevelSizeLoad move.b ($FFFFFE31).w,($FFFFFE30).w move.w ($FFFFFE32).w,($FFFFD008).w move.w ($FFFFFE34).w,($FFFFD00C).w move.w ($FFFFFE36).w,($FFFFFE20).w move.b ($FFFFFE54).w,($FFFFFE1B).w clr.w ($FFFFFE20).w clr.b ($FFFFFE1B).w move.l ($FFFFFE38).w,($FFFFFE22).w move.b #59,($FFFFFE25).w subq.b #1,($FFFFFE24).w move.b ($FFFFFE3C).w,($FFFFF742).w move.b ($FFFFFE52).w,($FFFFF64D).w move.w ($FFFFFE3E).w,($FFFFF72E).w move.w ($FFFFFE3E).w,($FFFFF726).w move.w ($FFFFFE40).w,($FFFFF700).w move.w ($FFFFFE42).w,($FFFFF704).w move.w ($FFFFFE44).w,($FFFFF708).w move.w ($FFFFFE46).w,($FFFFF70C).w move.w ($FFFFFE48).w,($FFFFF710).w move.w ($FFFFFE4A).w,($FFFFF714).w move.w ($FFFFFE4C).w,($FFFFF718).w move.w ($FFFFFE4E).w,($FFFFF71C).w cmpi.b #1,($FFFFFE10).w bne.s loc_170E4 move.w ($FFFFFE50).w,($FFFFF648).w move.b ($FFFFFE52).w,($FFFFF64D).w move.b ($FFFFFE53).w,($FFFFF64E).w loc_170E4: tst.b ($FFFFFE30).w bpl.s locret_170F6 move.w ($FFFFFE32).w,d0 subi.w #$A0,d0 move.w d0,($FFFFF728).w locret_170F6: rts ; End of function Obj79_LoadInfo Obj79_MakeSpecialStars: moveq #4-1,d1 ; execute the loop 4 times (1 for each star) moveq #0,d2 Obj79_MakeStarsLoop: jsr SingleObjLoad2 bne.s return_1F534 move.b 0(a0),0(a1) ; load obj79 move.l #Map_obj79b,$04(a1) move.w #$7A0,$02(a1) move.b #4,$01(a1) move.b #8,$24(a1) ; => Obj79_Star move.w $08(a0),d0 move.w d0,$08(a1) move.w d0,$30(a1) move.w $0C(a0),d0 subi.w #$30,d0 move.w d0,$0C(a1) move.w d0,$32(a1) move.b $18(a0),$18(a1) move.b #8,$19(a1) move.b #1,$1A(a1) move.w #-$400,$10(a1) move.w #0,$12(a1) move.w d2,$34(a1) ; set the angle addi.w #$40,d2 ; increase the angle for next time dbf d1,Obj79_MakeStarsLoop ; loop return_1F534: rts ; =========================================================================== ; loc_1F536: Obj79_Star: move.b #$D7,$20(a0) tst.b $21(a0) beq.s loc_1F554 move.b #$10,($FFFFF600).w loc_1F553: clr.b $21(a0) loc_1F554: addi.w #$A,$34(a0) move.w $34(a0),d0 andi.w #$FF,d0 jsr (CalcSine).l asr.w #5,d0 asr.w #3,d1 move.w d1,d3 move.w $34(a0),d2 andi.w #$3E0,d2 lsr.w #5,d2 moveq #2,d5 moveq #0,d4 cmpi.w #$10,d2 ble.s loc_1F555 neg.w d1 loc_1F555: andi.w #$F,d2 cmpi.w #8,d2 ble.s loc_1F594 neg.w d2 andi.w #7,d2 loc_1F594: lsr.w #1,d2 beq.s loc_1F595 add.w d1,d4 loc_1F595: asl.w #1,d1 dbf d5,loc_1F594 asr.w #4,d4 add.w d4,d0 addq.w #1,$36(a0) move.w $36(a0),d1 cmpi.w #$80,d1 beq.s loc_1F5BE bgt.s loc_1F5C4 loc_1F5B4: muls.w d1,d0 muls.w d1,d3 asr.w #7,d0 asr.w #7,d3 bra.s loc_1F5D6 ; =========================================================================== loc_1F5BE: move.b #$D8,$20(a0) loc_1F5C4: cmpi.w #$180,d1 ble.s loc_1F5D6 neg.w d1 addi.w #$200,d1 bmi.w JmpTo10_DeleteObject bra.s loc_1F5B4 ; =========================================================================== loc_1F5D6: move.w $30(a0),d2 add.w d3,d2 move.w d2,$08(a0) move.w $32(a0),d2 add.w d0,d2 move.w d2,$0C(a0) addq.b #1,$1B(a0) move.b $1B(a0),d0 andi.w #6,d0 lsr.w #1,d0 cmpi.b #3,d0 bne.s loc_1F5D7 moveq #1,d0 loc_1F5D7: move.b d0,$1A(a0) bra.w JmpTo_MarkObjGone ; =========================================================================== JmpTo10_DeleteObject jmp DeleteObject ; =========================================================================== nop JmpTo_MarkObjGone jmp MarkObjGone ; =========================================================================== ; --------------------------------------------------------------------------- ; Sprite mappings - lamppost ; --------------------------------------------------------------------------- Map_obj79: include "_maps\obj79.asm" Map_obj79b: include "_maps\obj79b.asm" Так же выложу дизасембл с уже выполненым гайдом. https://yadi.sk/d/z_rjrPVskc8wc Гайд составлен мною, в кредитах указывать не обязательно. Всё-равно никто не укажет :)
Таблица лидеров находится в часовом поясе Москва/GMT+03:00
×