We just released a Feb. 5 '89 prototype of DuckTales for the NES!
If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!
If you'd like to support our preservation efforts (and this wasn't cheap), please consider donating or supporting us on Patreon. Thank you!
Bugs:Super Mario Bros.
Jump to navigation
Jump to search
This page details bugs of Super Mario Bros..
Bug des œufs de Hériss
Voisi comment la vitesse des œufs de Hériss est calculée et storée.
DifLoop: lda PRDiffAdjustData,y ;get three values and save them sta $01,x ;to $01-$03 iny iny ;increment Y four bytes for each value iny iny dex ;decrement X for each one bpl DifLoop ;loop until all three are written ldx ObjectOffset ;get enemy object buffer offset jsr PlayerLakituDiff ;move enemy, change direction, get value - difference ldy Player_X_Speed ;check player's horizontal speed cpy #$08 bcs SetSpSpd ;if moving faster than a certain amount, branch elsewhere tay ;otherwise save value in A to Y for now lda PseudoRandomBitReg+1,x and #%00000011 ;get one of the LSFR parts and save the 2 LSB beq UsePosv ;branch if neither bits are set tya eor #%11111111 ;otherwise get two's compliment of Y tay iny UsePosv: tya ;put value from A in Y back to A A=SpeedVar SetSpSpd: jsr SmallBBox ;set bounding box control, etc. A=SpeedVar ...
Tout va bien pour l'instant. Le A register store la valeur de vitesse appropriée.
SmallBBox: lda #$09 ;set specific bounding box size control A=09 bne SetBBox ;unconditional branch A=09
Oups, en sautant au sous-programme de la boîte de délimitation écrase A! Tout ça pour rien.
SetBBox: sta Enemy_BoundBoxCtrl,x ;set bounding box control here A=09 lda #$02 ;set moving direction for left A=02 sta Enemy_MovingDir,x A=02 InitVStf: lda #$00 ;initialize vertical speed A=00 sta Enemy_Y_Speed,x ;and movement force A=00 sta Enemy_Y_MoveForce,x A=00 rts A=00
Maintenant A finit étant égal à 00. À présent le jeu retourne au sous-programme SetSpSpd...
... ldy #$02 ;Set Y to 02 (Leftwards) A=00 sta Enemy_X_Speed,x ;Set Spiny egg speed to A (00) A=00 cmp #$00 ;Now check if speed is negative... A=00 bmi SpinyRte ;...but A is always 00. No branch. A=00 dey ;Set Y to 01 (Rightwards) SpinyRte: sty Enemy_MovingDir,x ;Set moving direction.
...et la vitesse fixée à 0. Moving direction est fixée à À droite, mais vu que l'œuf n'a pas de mouvement horizontal et que la direction est réinitialisée quand l'ennemis Hériss est généré, ce qui ne veut pas dire grand chose.
Pour corriger ce bug, déplacez simplement le "jsr SmallBBox" après l'opcode dey.