Super Mario

Компьютеры прошлого, не попавшие в другие разделы

Moderator: Shaos

vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Super Mario

Post by vinxru »

Залип на неделю, ничего с собой поделать не могу. :)

Занимаюсь реверс инженерингом Супер Марио. Пишу на Си. Давным давно я задумал перенести его на советские компьтеры. Так, что бы геймплей был 1 в 1.

Музыку из Марио я давно выдрал, и давно сделал демо программу для Апогея (клон Радио 86РК) демонстрирующую, как будет выглядеть Марио и что это в принцепи возможно.

Image
(На палитру и прозрачность пока пофиг)

Какие успехи
1) Музыкальная часть полностью расшифрована и портирована на 8080 и КР580ВИ53
2) Работа с видеопроцессором полностью переписана и адаптирована.
2) Программу построения уровней я написал, но проверял пока на первом уровне.
3) Логика моба "Гриб" написана
4) Управление Марио повторено на 100% (разбег, торможение, прыжки, прыжки с разбегу)
5) Бонусы работают (грибы бегают, звездочки прыгают по экрану), время работает.

Сейчас занимаюсь отладкой взаимодействия мобов, игрока и карты.

Ну и главная цель разобраться с функцией/именем каждой переменной.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

Насколько я знаю, что уже лет 7-10 назад SMB был отреверсирован и аккуратно откомментирован. Исходники гуглятся в принципе не сложно.
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Я искал ведь и ничего не нашел.

Видел несколько похожих Марио, но всё это лишь подобия.
User avatar
Lavr
Supreme God
Posts: 16703
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

Никогда не играл в эту игру... может к сожалению, а может и нет...
iLavr
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Фанаты NES однозначно соглашаются с тем, что это лучшая игра на NES. (Не считая продолжений этой игры).

А на советских компах с играми не очень хорошо.

Вот я и подумал, что стоит её перенести. Причем, перенести одинв один со всеми глюками.

Прикиньте, текстовый Марио на 86РК :)

Я с самых первых часов ковыряния стал находить всякие закладки, например если нажать A+Start в меню, то продолжишь играть с того же мира, где погиб. Уверен на все 200%, что это давно всем известно, но вдруг есть другие, неизвестные глюки и закладки.

А так же научится писать марио-подобные игры :)

Пока что пытаюсь найти ошибку в программе контроля пересечения Марио и мобов. Всё было бы просто, но там куча неизвестных полка переменных.
User avatar
MC68k
Retired
Posts: 1328
Joined: 25 Jul 2011 00:14
Location: WWW

Post by MC68k »

Lavr wrote:Никогда не играл в эту игру... может к сожалению, а может и нет...
дай я пожму тебе руку
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Как будто я в неё играл :)
User avatar
MC68k
Retired
Posts: 1328
Joined: 25 Jul 2011 00:14
Location: WWW

Post by MC68k »

vinxru wrote:Как будто я в неё играл :)
и тебе тоже.

да, марио вроде как на спек пилили, но что-то не срослось. лучше пили рокманов или гунисов.
User avatar
HardWareMan
Banned
Posts: 2139
Joined: 20 Mar 2005 13:41
Location: От туда

Post by HardWareMan »

vinxru wrote:Я искал ведь и ничего не нашел.

Видел несколько похожих Марио, но всё это лишь подобия.
Вот, нашел. Шедевр врать не будет.
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Во, спасибо. А я не нашел :)

А я делаю вот такую штуку.

Code: Select all

// a=0 Рисуем верхнюю строку подписей
// a=1 WORLD
// a=2 TIMEUP / LUIGI TIMEUP
// a=3 GAME OVER / MARIO GAME OVER
// a=4 WELCOME TO WARP ZONE 432
// a=5 WELCOME TO WARP ZONE 5
// a=6 WELCOME TO WARP ZONE 876
void drawScreen_8808() {
// DEBUG
//  m.switch2_73C--;
//  m.menuPlayer_77A = 1;
//  a = 5;

  static uchar byte_87FE[] = { 0,0,0x27,0x27,0x46,0x4E,0x59,0x61,0x6E,0x6E };

  uchar a1 = a;			// PHA

  // Расчет смещения
  y = a << 1;			// ASL A TAY
  if(y >= 4) {			// CPY #4 BCC loc_881B
    if(y >= 8) y = 8;		// CPY #8 BCC loc_8815 LDY #8 loc_8815:
    if(m.menuPlayer_77A==0) y++;	// LDA m.menuPlayer_77A BNE loc_881B INY
  }				// loc_881B:
  x = byte_87FE[y];		// LDX m.byte_87FE,Y

  // Вывод на экран
  y = 0;			// LDY #0
  do {				// loc_8820:
    a = byte_8752[x];		// LDA m.byte_8752,X
    if(a==0xFF) break;		// CMP #$FF BEQ loc_882E
    (&m.byte_301)[y] = a;		// STA m.byte_301,Y
    x++; y++;			// INX INY
  } while(y!=0);		// BNE loc_8820 loc_882E:
  (&m.byte_301)[y] = 0;		// LDA #0 STA m.byte_301,Y

  // Это вывод WELCOME TO WARP ZONE
  x = a = a1;			// PLA TAX
  if(a >= 4) { void loc_8882(); loc_8882(); return; }	// CMP #4 BCS loc_8882

  x--;				// DEX
  if(x == 0) {	// BNE loc_885F
    // Заставка WORLD. Выводим жизни.
    a = m.lives_75A+1;		// LDA m.lives_75A CLC ADC #1
    if(a >= 10) {			// CMP #$A BCC loc_884D
      a -= 10;			// SBC #$A
      m.byte_308 = 0x9F;		// LDY #$9F STY	m.byte_308
    }				// loc_884D:
    m.byte_309 = a;			// STA m.byte_309
    // Выводим уровень
    m.byte_314 = m.world_h_75F+1;	// LDY m.world_h_75F INY STY m.byte_314
    m.byte_316 = m.world_l_75C+1;	// LDY m.world_l_75C INY STY m.byte_316
    return; // RTS
  } // loc_885F:
  
  // Игра на одного, не выводим MARIO/LUIGI
  if(m.menuPlayer_77A==0) return;	// LDA m.menuPlayer_77A BEQ locret_8881
  
  // Какая то блокировка
  a = m.byte_753;			// LDA m.byte_753
  x--;				// DEX
  if(x==0 && m.switch0_770!=3) {	// BNE loc_8873 LDY m.switch0_770 CPY #3 BEQ loc_8873
    a ^= 1;			// EOR #1  
  }				// loc_8873:
  if((a & 1)==0) return;	// LSR A BCC locret_8881

  // Заменяем надпись MARIO на LUIGI
  y = 4;			// LDY #4
  do {
    (&m.byte_304)[y] = byte_87ED[y];	// LDA m.byte_87ED,Y STA m.byte_304,Y
    y--;			// DEY
  } while(y < 0x80);		// BPL loc_8878
}				// RTS
b2m
Devil
Posts: 908
Joined: 26 May 2003 06:57

Post by b2m »

vinxru wrote:А я делаю вот такую штуку.
Это у тебя автоматом генерится, что-ли?
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Ручками. Но есть идея на будущее, сделать автоматическое преобразование. А потом автоматическую оптимизацию и рефакторинг, что бы код красиво выглядел.
User avatar
Lavr
Supreme God
Posts: 16703
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

vinxru wrote:Ручками. Но есть идея на будущее, сделать автоматическое преобразование. А потом автоматическую оптимизацию и рефакторинг, что бы код красиво выглядел.
Ручками - декомпильнул ASSM-комментарии?
iLavr
vinxru
Retired
Posts: 587
Joined: 27 Mar 2013 04:55
Location: 62.192.229.16

Post by vinxru »

Сначала в IDA сделал ассемблерный файл, а потом дня три делал Си-шную программу.

Ошибок море, сначала оно даже не запускалось. Теперь по мелочи глючит. Например, черепахой нельзя сбивать грибы, но можно других черепах.
User avatar
Lavr
Supreme God
Posts: 16703
Joined: 21 Oct 2009 08:08
Location: Россия

Post by Lavr »

HardWareMan wrote:
vinxru wrote:Я искал ведь и ничего не нашел.
Видел несколько похожих Марио...
Вот, нашел. Шедевр врать не будет.
Хардыч, меня по твоей ссылке вот что заинтересовало неожиданно:
Solomon's Key - интересно, что в игре используется кооперативная многозадачность!
Но что-то я не понял - где там по ссылке исходники? Вроде как там разговор о ботах на С идёт...
iLavr