Az 1986-os Metroid játék visszafejtett, kommentezett forrása
This compressed file contains 9 text files that make up the entire source code for the original Metroid game for the NES. (…) At this time, the source code is still a work in progress but it is much farther along than the original document. The title page is completely documented. The intro routine, end routine, password scheme and sound engine are described in detail. About a third of the game engine is detailed and about half of each game area page.
A játék motorjának lényege így indul:
UpdateWorld:
LCB29: ldx #$00 ;Set start of sprite RAM to $0200.
LCB2B: stx SpritePagePos ;
LCB2D: jsr UpdateEnemies ;($F345)Display of enemies.
LCB30: jsr UpdateProjectiles ;($D4BF)Display of bullets/missiles/bombs.
LCB33: jsr UpdateSamus ;($CC0D)Display/movement of Samus.
LCB36: jsr AreaRoutine ;($95C3)Area specific routine.
LCB39: jsr UpdateElevator ;($D7B3)Display of elevators.
LCB3C: jsr UpdateStatues ;($D9D4)Display of Ridley & Kraid statues.
LCB3F: jsr $FA9D ; destruction of enemies
LCB42: jsr LFC65 ; update of Mellow/Memu enemies
LCB45: jsr LF93B
LCB48: jsr LFBDD ; destruction of green spinners
LCB4B: jsr SamusEnterDoor ;($8B13)Check if Samus entered a door.
LCB4E: jsr $8B79 ; display of doors
LCB51: jsr UpdateTiles ; tile de/regeneration
LCB54: jsr LF034 ; Samus <--> enemies crash detection
LCB57: jsr DisplayBar ;($E0C1)Display of status bar.
jsr LFAF2
jsr CheckMissileToggle
jsr UpdateItems ;($DB37)Display of power-up items.
jsr LFDE3
Aki nem ismerné az eredetit, itt megnézheti, vagy 3DS-re is meg lehet kapni az ambassador program keretén belül, én már próbáltam, csodás.
H2CO3
Ez szép! Gratula a visszafejtőknek (nomeg a sok évtizeddel ezelőtti Nintendonak is)!
alma
ez aztán jól kikapott asm részlet, látszik ,h semmit nem lőssz hozzá, egy rakat subrutin meghívása nem annyira látványos, de persze te ezt nem tudhattad
Dale
@alma: nem bírok elmenni amellett hogy mekkora gyökérséget írtál. Egyrészt Józsi is programozott assemblyben szóval lehet hogy tudja mi az a szubrutin, másrészt pedig ez egy bemutató cikk, nem egy kisebb TL;DR tanulmány amibe beleférne a sok, igen érdekes LDA/STA meg a többi bitművelet. Lásd “A játék motorjának lényege így indul” és valóban, nekem mint öreg 8bit codernek is érdekes hogy milyen szubrutinokat hivogat az “UpdateWorld”, miként építi fel a playfieldet, a kód kommenteket nézve. Ehhez nem kell konkrét optimalizált részletekbe belemenni, ha érdekel bővebben akkor letöltöm a MetroidSource.rar file-t és megnézem jól. De legalább jól megmondtad neki!
angelday
alma, ha belemész a “MetroidGameEnginePage.txt” fájlba és rákeresel arra a részre, amit idéztem, láthatod, hogy ezzel a sorral indul (kiemelés tőlem):
lorinc
Angelday műkedvelő 8 bit kóder (a híres “scroll rutin”, valaki?) – és akkor mi van…
Angelday profi 8 bit kóder, na és _akkor_ mi van?
Kirakta, mert érdekli, nem értjük, de szeretjük