Login

Subversion Repositories NedoOS

Rev

Rev 289 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

;-------------------------------------------------------------------------------------
;DEFINES

; GAME SPECIFIC DEFINES

MAX_ENEMIES=7
        if COMPACTDATA

AREADATA=$

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;init area up to $074b
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
UnusedVariable db 0

ObjectOffset          db 0;= $08

FrameCounter          db 0;= $09

SavedJoypadBits       ;= $06fc
SavedJoypad1Bits      db 0;= $06fc
SavedJoypad2Bits      db 0;= $06fd
JoypadBitMask         db 0;= $074a

A_B_Buttons           db 0;= $0a
PreviousA_B_Buttons   db 0;= $0d
Up_Down_Buttons       db 0;= $0b
Left_Right_Buttons    db 0;= $0c

GameEngineSubroutine  db 0;= $0e

ScreenRoutineTask     db 0;= $073c

DemoAction            db 0;= $0717
DemoActionTimer       db 0;= $0718

TimerControl          db 0;= $0747

;Sprite_Data           ;= $0200
;Sprite_Y_Position=Sprite_Data     ;db 0;= $0200
;Sprite_Tilenumber=Sprite_Data+1     ;db 0;= $0201
;Sprite_Attributes=Sprite_Data+2     ;db 0;= $0202
;Sprite_X_Position=Sprite_Data+3     ;db 0;= $0203
;256 bytes

ScreenEdge_PageLoc    ;= $071a
ScreenLeft_PageLoc    db 0;= $071a
ScreenRight_PageLoc   db 0;= $071b
ScreenEdge_X_Pos      ;= $071c
ScreenLeft_X_Pos      db 0;= $071c
ScreenRight_X_Pos     db 0;= $071d

PlayerFacingDir       db 0;= $33
DestinationPageLoc    db 0;= $34
VictoryWalkControl    db 0;= $35
PrimaryMsgCounter     db 0;= $0719
SecondaryMsgCounter   db 0;= $0749

HorizontalScroll      db 0;= $073f
VerticalScroll        db 0;= $0740
ScrollLock            db 0;= $0723
ScrollThirtyTwo       db 0;= $073d
Player_X_Scroll       db 0;= $06ff

AreaData              ;= $e7
AreaDataLow           db 0;= $e7
AreaDataHigh          db 0;= $e8
EnemyData             ;= $e9
EnemyDataLow          db 0;= $e9
EnemyDataHigh         db 0;= $ea

AreaParserTaskNum     db 0;= $071f
ColumnSets            db 0;= $071e
CurrentPageLoc        db 0;= $0725
CurrentColumnPos      db 0;= $0726
BackloadingFlag       db 0;= $0728
BehindAreaParserFlag  db 0;= $0729
AreaObjectPageLoc     db 0;= $072a
AreaObjectPageSel     db 0;= $072b
AreaDataOffset        db 0;= $072c
AreaObjOffsetBuffer   db 0;= $072d
AreaObjectLength      db 0;= $0730
StaircaseControl      db 0;= $0734
AreaObjectHeight      db 0;= $0735
MushroomLedgeHalfLen  db 0;= $0736
EnemyDataOffset       db 0;= $0739
EnemyObjectPageLoc    db 0;= $073a
EnemyObjectPageSel    db 0;= $073b

BlockBufferColumnPos  db 0;= $06a0
MetatileBuffer        ds 0x0d;0xd0;???;= $06a1

CurrentNTAddr_Low     db 0;= $0721
CurrentNTAddr_High    db 0;= $0720
AttributeBuffer       db 0;= $03f9

LoopCommand           db 0;= $0745

DigitModifier         ds 6;???;= $0134

VerticalFlipFlag      db 0;= $0109
FloateyNum_Control    ds MAX_ENEMIES;???;= $0110
ShellChainCounter     ds MAX_ENEMIES;???;= $0125
FloateyNum_Timer      ds MAX_ENEMIES;???;= $012c
FloateyNum_X_Pos      ds MAX_ENEMIES;???;= $0117
FloateyNum_Y_Pos      ds MAX_ENEMIES;???;= $011e
FlagpoleFNum_Y_Pos    db 0;= $010d
FlagpoleFNum_YMFDummy db 0;= $010e
FlagpoleScore         db 0;= $010f
FlagpoleCollisionYPos db 0;= $070f
StompChainCounter     db 0;= $0484

;VRAM_Buffer1_Offset   db 0;= $0300
;VRAM_Buffer1          ds 63;???;= $0301
;VRAM_Buffer2_Offset   db 0;= $0340
;VRAM_Buffer2          ds TitleScreenDataSize-64;63;???;= $0341 ;следующий блок данных в $0363, но нужен буфер до 0x043a

Sprite0HitDetectFlag  db 0;= $0722
ColorRotateOffset     db 0;= $06d4

TerrainControl        db 0;= $0727
AreaStyle             db 0;= $0733
ForegroundScenery     db 0;= $0741
BackgroundScenery     db 0;= $0742
CloudTypeOverride     db 0;= $0743
BackgroundColorCtrl   db 0;= $0744

PlayerEntranceCtrl    db 0;= $0710
GameTimerSetting      db 0;= $0715
WarpZoneControl       db 0;= $06d6
ChangeAreaTimer       db 0;= $06de

MultiLoopCorrectCntr  db 0;= $06d9
MultiLoopPassCntr     db 0;= $06da

SecondaryHardMode     db 0;= $06cc

CoinTallyFor1Ups      db 0;= $0748

BalPlatformAlignment  db 0;= $03a0
Platform_X_Scroll     db 0;= $03a1
PlatformCollisionFlag db 0;= $03a2
YPlatformTopYPos      db 0;= $0401
YPlatformCenterYPos   db 0;= $58

BrickCoinTimerFlag    db 0;= $06bc
StarFlagTaskControl   db 0;= $0746

SprShuffleAmtOffset   db 0;= $06e0
SprShuffleAmt         ds 3;= $06e1
SprDataOffset         ;= $06e4
Player_SprDataOffset  db 0;= $06e4
Enemy_SprDataOffset   ds MAX_ENEMIES;???;= $06e5
Block_SprDataOffset   ;= $06ec
Alt_SprDataOffset     ds 2;???;= $06ec
Bubble_SprDataOffset  ds 3;???;= $06ee
FBall_SprDataOffset   ds 2;???;= $06f1
Misc_SprDataOffset    ds 15;???;= $06f3
SprDataOffset_Ctrl    db 0;= $03ee

Player_State          db 0;= $1d ;0=ground, 1=jumping/swimming?, 2=falling, 3=climbing
Enemy_State           ds MAX_ENEMIES-1;???;= $1e ;-1???
Fireball_State        ds 2;???;= $24
Block_State           ds 4;???;= $26
Misc_State            ds 15;???;= $2a

Player_MovingDir      db 0;= $45
Enemy_MovingDir       db 0;= $46

SprObject_X_Speed     ;= $57
Player_X_Speed        db 0;= $57
Enemy_X_Speed         ds MAX_ENEMIES-1;???;= $58 ;-1???
Fireball_X_Speed      ds 2;???;= $5e
Block_X_Speed         ds 4;???;= $60
Misc_X_Speed          ds 9;???;= $64

Jumpspring_FixedYPos  db 0;= $58 ;=Enemy_X_Speed???
JumpspringAnimCtrl    db 0;= $070e
JumpspringForce       db 0;= $06db

SprObject_PageLoc     ;= $6d
Player_PageLoc        db 0;= $6d
Enemy_PageLoc         ds MAX_ENEMIES-1;???;= $6e ;-1???
Fireball_PageLoc      ds 2;???;= $74
Block_PageLoc         ds 4;???;= $76
Misc_PageLoc          ds 9;???;= $7a
Bubble_PageLoc        ds 3;???;= $83

SprObject_X_Position  ;= $86
Player_X_Position     db 0;= $86
Enemy_X_Position      ds MAX_ENEMIES-1;???;= $87 ;-1???
Fireball_X_Position   ds 2;???;= $8d
Block_X_Position      ds 4;???;= $8f
Misc_X_Position       ds 9;???;= $93
Bubble_X_Position     ds 3;???;= $9c

SprObject_Y_Speed     ;= $9f
Player_Y_Speed        db 0;= $9f
Enemy_Y_Speed         ds MAX_ENEMIES-1;???;= $a0 ;-1???
Fireball_Y_Speed      ds 2;???;= $a6
Block_Y_Speed         ds 4;???;= $a8
Misc_Y_Speed          ds 9;???;= $ac

SprObject_Y_HighPos   ;= $b5
Player_Y_HighPos      db 0;= $b5
Enemy_Y_HighPos       ds MAX_ENEMIES-1;???;= $b6 ;-1???
Fireball_Y_HighPos    ds 2;???;= $bc
Block_Y_HighPos       ds 4;???;= $be
Misc_Y_HighPos        ds 9;???;= $c2
Bubble_Y_HighPos      ds 3;???;= $cb

SprObject_Y_Position  ;= $ce
Player_Y_Position     db 0;= $ce
Enemy_Y_Position      ds MAX_ENEMIES-1;???;= $cf ;-1???
Fireball_Y_Position   ds 2;???;= $d5
Block_Y_Position      ds 4;???;= $d7
Misc_Y_Position       ds 9;???;= $db
Bubble_Y_Position     ds 3;???;= $e4

SprObject_Rel_XPos    ;= $03ad
Player_Rel_XPos       db 0;= $03ad
Enemy_Rel_XPos        db 0;= $03ae
Fireball_Rel_XPos     db 0;= $03af
Bubble_Rel_XPos       db 0;= $03b0
Block_Rel_XPos        ds 2;= $03b1
Misc_Rel_XPos         db 0;= $03b3

SprObject_Rel_YPos    ;= $03b8
Player_Rel_YPos       db 0;= $03b8
Enemy_Rel_YPos        db 0;= $03b9
Fireball_Rel_YPos     db 0;= $03ba
Bubble_Rel_YPos       db 0;= $03bb
Block_Rel_YPos        ds 2;= $03bc
Misc_Rel_YPos         db 0;= $03be

SprObject_SprAttrib   ;= $03c4
Player_SprAttrib      db 0;= $03c4
Enemy_SprAttrib       ds MAX_ENEMIES;???;= $03c5

SprObject_X_MoveForce db 0;= $0400
Enemy_X_MoveForce     ds MAX_ENEMIES;???;= $0401

SprObject_YMF_Dummy   ;= $0416
Player_YMF_Dummy      db 0;= $0416
Enemy_YMF_Dummy       ds MAX_ENEMIES;???;= $0417
Bubble_YMF_Dummy      ds 3;???;= $042c

SprObject_Y_MoveForce ;= $0433
Player_Y_MoveForce    db 0;= $0433
Enemy_Y_MoveForce     ds MAX_ENEMIES+1;???;= $0434 ;+1????
Block_Y_MoveForce     db 2*2;???;= $043c

DisableCollisionDet   db 0;= $0716
Player_CollisionBits  db 0;= $0490
Enemy_CollisionBits   ds MAX_ENEMIES;???;= $0491

SprObj_BoundBoxCtrl   ;= $0499
Player_BoundBoxCtrl   db 0;= $0499
Enemy_BoundBoxCtrl    ds MAX_ENEMIES-1;???;= $049a ;-1???
Fireball_BoundBoxCtrl ds 2;???;= $04a0
Misc_BoundBoxCtrl     ds 9;???;= $04a2 ;начиная с объекта #9 идут misc objects (что это???)

EnemyFrenzyBuffer     db 0;= $06cb
EnemyFrenzyQueue      db 0;= $06cd
Enemy_Flag            ds MAX_ENEMIES;???;= $0f
Enemy_ID              ds MAX_ENEMIES;???;= $16

PlayerGfxOffset       db 0;= $06d5
Player_XSpeedAbsolute db 0;= $0700
FrictionAdderHigh     db 0;= $0701
FrictionAdderLow      db 0;= $0702
RunningSpeed          db 0;= $0703
SwimmingFlag          db 0;= $0704
Player_X_MoveForce    db 0;= $0705
DiffToHaltJump        db 0;= $0706
JumpOrigin_Y_HighPos  db 0;= $0707
JumpOrigin_Y_Position db 0;= $0708
VerticalForce         db 0;= $0709
VerticalForceDown     db 0;= $070a
PlayerChangeSizeFlag  db 0;= $070b
PlayerAnimTimerSet    db 0;= $070c
PlayerAnimCtrl        db 0;= $070d
DeathMusicLoaded      db 0;= $0712
FlagpoleSoundQueue    db 0;= $0713
CrouchingFlag         db 0;= $0714
MaximumLeftSpeed      db 0;= $0450
MaximumRightSpeed     db 0;= $0456

SprObject_OffscrBits  ;= $03d0
Player_OffscreenBits  db 0;= $03d0
Enemy_OffscreenBits   db 0;= $03d1
FBall_OffscreenBits   db 0;= $03d2
Bubble_OffscreenBits  db 0;= $03d3
Block_OffscreenBits   db 0;= $03d4
Misc_OffscreenBits    db 0;= $03d6
EnemyOffscrBitsMasked ds MAX_ENEMIES;???;= $03d8

Cannon_Offset         db 0;= $046a
Cannon_PageLoc        ds 6;???;= $046b
Cannon_X_Position     ds 6;???;= $0471
Cannon_Y_Position     ds 6;???;= $0477
Cannon_Timer          ds 6;???;= $047d

Whirlpool_Offset      =Cannon_Offset;= $046a
Whirlpool_PageLoc     =Cannon_PageLoc;= $046b
Whirlpool_LeftExtent  =Cannon_X_Position;= $0471
Whirlpool_Length      =Cannon_Y_Position;= $0477
Whirlpool_Flag        =Cannon_Timer;= $047d

VineFlagOffset        db 0;= $0398
VineHeight            db 0;= $0399
VineObjOffset         ds 3;???;= $039a
VineStart_Y_Position  db 0;= $039d

Block_Orig_YPos       ds 2;???;= $03e4
Block_BBuf_Low        ds 2;???;= $03e6
Block_Metatile        ds 2;???;= $03e8
Block_PageLoc2        ds 2;???;= $03ea
Block_RepFlag         ds 2;???;= $03ec
Block_ResidualCounter db 0;= $03f0
Block_Orig_XPos       ds 2;???;= $03f1

BoundingBox_UL_Corner ;= $04ac
BoundingBox_UL_XPos   db 0;= $04ac
BoundingBox_UL_YPos   db 0;= $04ad
BoundingBox_LR_Corner ;= $04ae
BoundingBox_DR_XPos   db 0;= $04ae
BoundingBox_DR_YPos   db 0;= $04af
EnemyBoundingBoxCoord ds 4*MAX_ENEMIES;???;= $04b0

PowerUpType           db 0;= $39

FireballBouncingFlag  ds MAX_ENEMIES;???;= $3a
FireballCounter       db 0;= $06ce
FireballThrowingTimer db 0;= $0711

HammerEnemyOffset     ds MAX_ENEMIES;???;= $06ae
JumpCoinMiscOffset    db 0;= $06b7

        align 16;256 ;не помогает
Block_Buffer_1        ds 0xd0;= $0500 ;at least +$b4 ;13 строк по 16 блоков
Block_Buffer_2        ds 0xd0;= $05d0

HammerThrowingTimer   ds MAX_ENEMIES;???;= $03a2
HammerBroJumpTimer    ds MAX_ENEMIES;???;= $3c
Misc_Collision_Flag   ds MAX_ENEMIES;???;= $06be

RedPTroopaOrigXPos    ds MAX_ENEMIES;???;= $0401
RedPTroopaCenterYPos  ds MAX_ENEMIES;???;= $58

XMovePrimaryCounter   ds MAX_ENEMIES;???;= $a0
XMoveSecondaryCounter ds MAX_ENEMIES;???;= $58

CheepCheepMoveMFlag   ds MAX_ENEMIES;???;= $58
CheepCheepOrigYPos    ds MAX_ENEMIES;???;= $0434
BitMFilter            db 0;= $06dd

LakituReappearTimer   db 0;= $06d1
LakituMoveSpeed       ds MAX_ENEMIES;???;= $58
LakituMoveDirection   ds MAX_ENEMIES;???;= $a0

FirebarSpinState_Low  ds MAX_ENEMIES;???;= $58
FirebarSpinState_High ds MAX_ENEMIES;???;= $a0
FirebarSpinSpeed      ds MAX_ENEMIES;???;= $0388
FirebarSpinDirection  ds MAX_ENEMIES;???;= $34

DuplicateObj_Offset   db 0;= $06cf
NumberofGroupEnemies  db 0;= $06d3

BlooperMoveCounter    ds MAX_ENEMIES;???;= $a0
BlooperMoveSpeed      ds MAX_ENEMIES;???;= $58

BowserBodyControls    db 0;= $0363
BowserFeetCounter     db 0;= $0364
BowserMovementSpeed   db 0;= $0365
BowserOrigXPos        db 0;= $0366
BowserFlameTimerCtrl  db 0;= $0367
BowserFront_Offset    db 0;= $0368
BridgeCollapseOffset  db 0;= $0369
BowserGfxFlag         db 0;= $036a
BowserHitPoints       db 0;= $0483
MaxRangeFromOrigin    db 0;= $06dc

BowserFlamePRandomOfs ds MAX_ENEMIES;???;= $0417

PiranhaPlantUpYPos    ds MAX_ENEMIES;???;= $0417
PiranhaPlantDownYPos  ds MAX_ENEMIES;???;= $0434
PiranhaPlant_Y_Speed  ds MAX_ENEMIES;???;= $58
PiranhaPlant_MoveFlag ds MAX_ENEMIES;???;= $a0

FireworksCounter      db 0;= $06d7
ExplosionGfxCounter   ds MAX_ENEMIES;???;= $58
ExplosionTimerCounter ds MAX_ENEMIES;???;= $a0

;sound related defines
NoteLenLookupTblOfs   db 0;= $f0

Square1SoundBuffer    db 0;= $f1
Square2SoundBuffer    db 0;= $f2
NoiseSoundBuffer      db 0;= $f3
AreaMusicBuffer       db 0;= $f4
MusicData             db 0;= $f5
MusicDataLow          db 0;= $f5
MusicDataHigh         db 0;= $f6
MusicOffset_Square2   db 0;= $f7
MusicOffset_Square1   db 0;= $f8
MusicOffset_Triangle  db 0;= $f9

PauseSoundQueue       db 0;= $fa
AreaMusicQueue        db 0;= $fb
EventMusicQueue       db 0;= $fc
NoiseSoundQueue       db 0;= $fd
Square2SoundQueue     db 0;= $fe
Square1SoundQueue     db 0;= $ff

AREADATA_end=$

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;init game up to $076f
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
AreaType              db 0;= $074e
AreaAddrsLOffset      db 0;= $074f
AreaPointer           db 0;= $0750

FetchNewGameTimerFlag db 0;= $0757
GameTimerExpiredFlag  db 0;= $0759

JoypadOverride        db 0;= $0758

EntrancePage          db 0;= $0751
AltEntranceControl    db 0;= $0752

CurrentPlayer         db 0;= $0753
PlayerSize            db 0;= $0754
PlayerStatus          db 0;= $0756

Player_Pos_ForScroll  db 0;= $0755
ScrollAmount          db 0;= $0775

OnscreenPlayerInfo    ;= $075a
NumberofLives         db 0;= $075a ;used by current player
HalfwayPage           db 0;= $075b
LevelNumber           db 0;= $075c ;the actual dash number
Hidden1UpFlag         db 0;= $075d
CoinTally             db 0;= $075e
WorldNumber           db 0;= $075f
AreaNumber            db 0;= $0760 ;internal number used to find areas

OffscreenPlayerInfo   ;= $0761
OffScr_NumberofLives  db 0;= $0761 ;used by offscreen player
OffScr_HalfwayPage    db 0;= $0762
OffScr_LevelNumber    db 0;= $0763
OffScr_Hidden1UpFlag  db 0;= $0764
OffScr_CoinTally      db 0;= $0765
OffScr_WorldNumber    db 0;= $0766
OffScr_AreaNumber     db 0;= $0767

ScrollFractional      db 0;= $0768
DisableIntermediate   db 0;= $0769
PrimaryHardMode       db 0;= $076a ;secondaryhardmode is below and cleared every time!!!
WorldSelectNumber     db 0;= $076b

GAMEDATA_end=$

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;reinit mem up to $07d6 ;don't clear topscore, continueworld, worldselectenebleflag
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
OperMode              db 0;= $0770
OperMode_Task         db 0;= $0772
VRAM_Buffer_AddrCtrl  db 0;= $0773
DisableScreenFlag     db 0;= $0774
GamePauseStatus       db 0;= $0776
GamePauseTimer        db 0;= $0777

Mirror_PPU_CTRL_REG1  db 0;= $0778
Mirror_PPU_CTRL_REG2  db 0;= $0779

NumberOfPlayers       db 0;= $077a

IntervalTimerControl  db 0;= $077f

Timers                ;= $0780
SelectTimer           db 0;= $0780
PlayerAnimTimer       db 0;= $0781
JumpSwimTimer         db 0;= $0782
RunningTimer          db 0;= $0783
BlockBounceTimer      db 0;= $0784
SideCollisionTimer    db 0;= $0785
JumpspringTimer       db 0;= $0786
GameTimerCtrlTimer    db 0;= $0787
                ds 1
ClimbSideTimer        db 0;= $0789
EnemyFrameTimer       db 0;= $078a
                ds 4
FrenzyEnemyTimer      db 0;= $078f
BowserFireBreathTimer db 0;= $0790
StompTimer            db 0;= $0791
AirBubbleTimer        db 0;= $0792
                ds 2
ScrollIntervalTimer   db 0;= $0795
EnemyIntervalTimer    db 0;= $0796
                ds 6
BrickCoinTimer        db 0;= $079d
InjuryTimer           db 0;= $079e
StarInvincibleTimer   db 0;= $079f
ScreenTimer           db 0;= $07a0
WorldEndTimer         db 0;= $07a1
DemoTimer             db 0;= $07a2
        ;ds Timers+0x24-$
                ds 4

PseudoRandomBitReg    db 0;= $07a7
        ;display "PseudoRandomBitReg-Timers=",PseudoRandomBitReg-Timers

;sound related defines
MusicOffset_Noise     db 0;= $07b0
EventMusicBuffer      db 0;= $07b1
PauseSoundBuffer      db 0;= $07b2

Squ2_NoteLenBuffer    db 0;= $07b3
Squ2_NoteLenCounter   db 0;= $07b4
Squ2_EnvelopeDataCtrl db 0;= $07b5
Squ1_NoteLenCounter   db 0;= $07b6
Squ1_EnvelopeDataCtrl db 0;= $07b7
Tri_NoteLenBuffer     db 0;= $07b8
Tri_NoteLenCounter    db 0;= $07b9
Noise_BeatLenCounter  db 0;= $07ba
Squ1_SfxLenCounter    db 0;= $07bb
Squ2_SfxLenCounter    db 0;= $07bd
Sfx_SecondaryCounter  db 0;= $07be
Noise_SfxLenCounter   db 0;= $07bf

DAC_Counter           db 0;= $07c0
NoiseDataLoopbackOfs  db 0;= $07c1
NoteLengthTblAdder    db 0;= $07c4
AreaMusicBuffer_Alt   db 0;= $07c5
PauseModeFlag         db 0;= $07c6
GroundMusicHeaderOfs  db 0;= $07c7
AltRegContentFlag     db 0;= $07ca

WARMMEMDATA_end=$

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;init mem up to $07fe
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DisplayDigits         ;= $07d7
TopScoreDisplay       ds 6;= $07d7
ScoreAndCoinDisplay   ;= $07dd
PlayerScoreDisplay    ds 6;= $07dd ;почему тут? это всё блок DisplayDigits
        ds DisplayDigits+($07f8-$07d7)-$ ;TODO убрать
GameTimerDisplay      ds 6;???;= $07f8 ;почему тут? это всё блок DisplayDigits

WorldSelectEnableFlag db 0;= $07fc
ContinueWorld         db 0;= $07fd
WarmBootValidation    db 0;= $07ff

MEMDATA_end=$

        else
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;        
AREADATA=0x100
AREADATA_end    = $074b
GAMEDATA_end    = $076f
WARMMEMDATA_end        = $07d6;WarmBootOffset
MEMDATA_end        = $07fe;ColdBootOffset
        ;display "MEMDATA_end=",MEMDATA_end
        ;display "AREADATA=",AREADATA
        ;display "MEMDATA_end-AREADATA=",MEMDATA_end-AREADATA

ObjectOffset          = SCRATCHPAD+$08

FrameCounter          = SCRATCHPAD+$09

SavedJoypadBits       = $06fc
SavedJoypad1Bits      = $06fc
SavedJoypad2Bits      = $06fd
JoypadBitMask         = $074a
JoypadOverride        = $0758

A_B_Buttons           = SCRATCHPAD+$0a
PreviousA_B_Buttons   = SCRATCHPAD+$0d
Up_Down_Buttons       = SCRATCHPAD+$0b
Left_Right_Buttons    = SCRATCHPAD+$0c

GameEngineSubroutine  = SCRATCHPAD+$0e

Mirror_PPU_CTRL_REG1  = $0778
Mirror_PPU_CTRL_REG2  = $0779

OperMode              = $0770
OperMode_Task         = $0772
ScreenRoutineTask     = $073c

GamePauseStatus       = $0776
GamePauseTimer        = $0777

DemoAction            = $0717
DemoActionTimer       = $0718

TimerControl          = $0747
IntervalTimerControl  = $077f

Timers                = $0780
SelectTimer           = $0780
PlayerAnimTimer       = $0781
JumpSwimTimer         = $0782
RunningTimer          = $0783
BlockBounceTimer      = $0784
SideCollisionTimer    = $0785
JumpspringTimer       = $0786
GameTimerCtrlTimer    = $0787
ClimbSideTimer        = $0789
EnemyFrameTimer       = $078a
FrenzyEnemyTimer      = $078f
BowserFireBreathTimer = $0790
StompTimer            = $0791
AirBubbleTimer        = $0792
 ;нижеследующие таймеры уменьшаются только раз в 21 фрейм
ScrollIntervalTimer   = $0795
EnemyIntervalTimer    = $0796
BrickCoinTimer        = $079d
InjuryTimer           = $079e
StarInvincibleTimer   = $079f
ScreenTimer           = $07a0
WorldEndTimer         = $07a1
DemoTimer             = $07a2

Sprite_Data           = $0200

Sprite_Y_Position     = $0200
Sprite_Tilenumber     = $0201
Sprite_Attributes     = $0202
Sprite_X_Position     = $0203

ScreenEdge_PageLoc    = $071a
ScreenEdge_X_Pos      = $071c
ScreenLeft_PageLoc    = $071a
ScreenRight_PageLoc   = $071b
ScreenLeft_X_Pos      = $071c
ScreenRight_X_Pos     = $071d

PlayerFacingDir       = SCRATCHPAD+$33
DestinationPageLoc    = SCRATCHPAD+$34
VictoryWalkControl    = SCRATCHPAD+$35
ScrollFractional      = $0768
PrimaryMsgCounter     = $0719
SecondaryMsgCounter   = $0749

HorizontalScroll      = $073f
VerticalScroll        = $0740
ScrollLock            = $0723
ScrollThirtyTwo       = $073d
Player_X_Scroll       = $06ff
Player_Pos_ForScroll  = $0755
ScrollAmount          = $0775

AreaData              = SCRATCHPAD+$e7
AreaDataLow           = SCRATCHPAD+$e7
AreaDataHigh          = SCRATCHPAD+$e8
EnemyData             = SCRATCHPAD+$e9
EnemyDataLow          = SCRATCHPAD+$e9
EnemyDataHigh         = SCRATCHPAD+$ea

AreaParserTaskNum     = $071f
ColumnSets            = $071e
CurrentPageLoc        = $0725
CurrentColumnPos      = $0726
BackloadingFlag       = $0728
BehindAreaParserFlag  = $0729
AreaObjectPageLoc     = $072a
AreaObjectPageSel     = $072b
AreaDataOffset        = $072c
AreaObjOffsetBuffer   = $072d
AreaObjectLength      = $0730
StaircaseControl      = $0734
AreaObjectHeight      = $0735
MushroomLedgeHalfLen  = $0736
EnemyDataOffset       = $0739
EnemyObjectPageLoc    = $073a
EnemyObjectPageSel    = $073b
MetatileBuffer        = $06a1
BlockBufferColumnPos  = $06a0
CurrentNTAddr_Low     = $0721
CurrentNTAddr_High    = $0720
AttributeBuffer       = $03f9

LoopCommand           = $0745

DisplayDigits         = $07d7
TopScoreDisplay       = $07d7
ScoreAndCoinDisplay   = $07dd
PlayerScoreDisplay    = $07dd
GameTimerDisplay      = $07f8
DigitModifier         = SCRATCHPAD2+$0134

VerticalFlipFlag      = SCRATCHPAD2+$0109
FloateyNum_Control    = SCRATCHPAD2+$0110
ShellChainCounter     = SCRATCHPAD2+$0125
FloateyNum_Timer      = SCRATCHPAD2+$012c
FloateyNum_X_Pos      = SCRATCHPAD2+$0117
FloateyNum_Y_Pos      = SCRATCHPAD2+$011e
FlagpoleFNum_Y_Pos    = SCRATCHPAD2+$010d
FlagpoleFNum_YMFDummy = SCRATCHPAD2+$010e
FlagpoleScore         = SCRATCHPAD2+$010f
FlagpoleCollisionYPos = $070f
StompChainCounter     = $0484

VRAM_Buffer1_Offset   = $0300
VRAM_Buffer1          = $0301
VRAM_Buffer2_Offset   = $0340
VRAM_Buffer2          = $0341
VRAM_Buffer_AddrCtrl  = $0773
Sprite0HitDetectFlag  = $0722
DisableScreenFlag     = $0774
DisableIntermediate   = $0769
ColorRotateOffset     = $06d4

TerrainControl        = $0727
AreaStyle             = $0733
ForegroundScenery     = $0741
BackgroundScenery     = $0742
CloudTypeOverride     = $0743
BackgroundColorCtrl   = $0744
AreaType              = $074e
AreaAddrsLOffset      = $074f
AreaPointer           = $0750

PlayerEntranceCtrl    = $0710
GameTimerSetting      = $0715
AltEntranceControl    = $0752
EntrancePage          = $0751
NumberOfPlayers       = $077a
WarpZoneControl       = $06d6
ChangeAreaTimer       = $06de

MultiLoopCorrectCntr  = $06d9
MultiLoopPassCntr     = $06da

FetchNewGameTimerFlag = $0757
GameTimerExpiredFlag  = $0759

PrimaryHardMode       = $076a
SecondaryHardMode     = $06cc
WorldSelectNumber     = $076b
WorldSelectEnableFlag = $07fc
ContinueWorld         = $07fd

CurrentPlayer         = $0753
PlayerSize            = $0754
PlayerStatus          = $0756

OnscreenPlayerInfo    = $075a
NumberofLives         = $075a ;used by current player
HalfwayPage           = $075b
LevelNumber           = $075c ;the actual dash number
Hidden1UpFlag         = $075d
CoinTally             = $075e
WorldNumber           = $075f
AreaNumber            = $0760 ;internal number used to find areas

CoinTallyFor1Ups      = $0748

OffscreenPlayerInfo   = $0761
OffScr_NumberofLives  = $0761 ;used by offscreen player
OffScr_HalfwayPage    = $0762
OffScr_LevelNumber    = $0763
OffScr_Hidden1UpFlag  = $0764
OffScr_CoinTally      = $0765
OffScr_WorldNumber    = $0766
OffScr_AreaNumber     = $0767

BalPlatformAlignment  = $03a0
Platform_X_Scroll     = $03a1
PlatformCollisionFlag = $03a2
YPlatformTopYPos      = $0401
YPlatformCenterYPos   = SCRATCHPAD+$58

BrickCoinTimerFlag    = $06bc
StarFlagTaskControl   = $0746

PseudoRandomBitReg    = $07a7
WarmBootValidation    = $07ff

SprShuffleAmtOffset   = $06e0
SprShuffleAmt         = $06e1
SprDataOffset         = $06e4
Player_SprDataOffset  = $06e4
Enemy_SprDataOffset   = $06e5
Block_SprDataOffset   = $06ec
Alt_SprDataOffset     = $06ec
Bubble_SprDataOffset  = $06ee
FBall_SprDataOffset   = $06f1
Misc_SprDataOffset    = $06f3
SprDataOffset_Ctrl    = $03ee

Player_State          = SCRATCHPAD+$1d
Enemy_State           = SCRATCHPAD+$1e
Fireball_State        = SCRATCHPAD+$24
Block_State           = SCRATCHPAD+$26
Misc_State            = SCRATCHPAD+$2a

Player_MovingDir      = SCRATCHPAD+$45
Enemy_MovingDir       = SCRATCHPAD+$46

SprObject_X_Speed     = SCRATCHPAD+$57
Player_X_Speed        = SCRATCHPAD+$57
Enemy_X_Speed         = SCRATCHPAD+$58
Fireball_X_Speed      = SCRATCHPAD+$5e
Block_X_Speed         = SCRATCHPAD+$60
Misc_X_Speed          = SCRATCHPAD+$64

Jumpspring_FixedYPos  = SCRATCHPAD+$58
JumpspringAnimCtrl    = $070e
JumpspringForce       = $06db

SprObject_PageLoc     = SCRATCHPAD+$6d
Player_PageLoc        = SCRATCHPAD+$6d
Enemy_PageLoc         = SCRATCHPAD+$6e
Fireball_PageLoc      = SCRATCHPAD+$74
Block_PageLoc         = SCRATCHPAD+$76
Misc_PageLoc          = SCRATCHPAD+$7a
Bubble_PageLoc        = SCRATCHPAD+$83

SprObject_X_Position  = SCRATCHPAD+$86
Player_X_Position     = SCRATCHPAD+$86
Enemy_X_Position      = SCRATCHPAD+$87
Fireball_X_Position   = SCRATCHPAD+$8d
Block_X_Position      = SCRATCHPAD+$8f
Misc_X_Position       = SCRATCHPAD+$93
Bubble_X_Position     = SCRATCHPAD+$9c

SprObject_Y_Speed     = SCRATCHPAD+$9f
Player_Y_Speed        = SCRATCHPAD+$9f
Enemy_Y_Speed         = SCRATCHPAD+$a0
Fireball_Y_Speed      = SCRATCHPAD+$a6
Block_Y_Speed         = SCRATCHPAD+$a8
Misc_Y_Speed          = SCRATCHPAD+$ac

SprObject_Y_HighPos   = SCRATCHPAD+$b5
Player_Y_HighPos      = SCRATCHPAD+$b5
Enemy_Y_HighPos       = SCRATCHPAD+$b6
Fireball_Y_HighPos    = SCRATCHPAD+$bc
Block_Y_HighPos       = SCRATCHPAD+$be
Misc_Y_HighPos        = SCRATCHPAD+$c2
Bubble_Y_HighPos      = SCRATCHPAD+$cb

SprObject_Y_Position  = SCRATCHPAD+$ce
Player_Y_Position     = SCRATCHPAD+$ce
Enemy_Y_Position      = SCRATCHPAD+$cf
Fireball_Y_Position   = SCRATCHPAD+$d5
Block_Y_Position      = SCRATCHPAD+$d7
Misc_Y_Position       = SCRATCHPAD+$db
Bubble_Y_Position     = SCRATCHPAD+$e4

SprObject_Rel_XPos    = $03ad
Player_Rel_XPos       = $03ad
Enemy_Rel_XPos        = $03ae
Fireball_Rel_XPos     = $03af
Bubble_Rel_XPos       = $03b0
Block_Rel_XPos        = $03b1
Misc_Rel_XPos         = $03b3

SprObject_Rel_YPos    = $03b8
Player_Rel_YPos       = $03b8
Enemy_Rel_YPos        = $03b9
Fireball_Rel_YPos     = $03ba
Bubble_Rel_YPos       = $03bb
Block_Rel_YPos        = $03bc
Misc_Rel_YPos         = $03be

SprObject_SprAttrib   = $03c4
Player_SprAttrib      = $03c4
Enemy_SprAttrib       = $03c5

SprObject_X_MoveForce = $0400
Enemy_X_MoveForce     = $0401

SprObject_YMF_Dummy   = $0416
Player_YMF_Dummy      = $0416
Enemy_YMF_Dummy       = $0417
Bubble_YMF_Dummy      = $042c

SprObject_Y_MoveForce = $0433
Player_Y_MoveForce    = $0433
Enemy_Y_MoveForce     = $0434
Block_Y_MoveForce     = $043c

DisableCollisionDet   = $0716
Player_CollisionBits  = $0490
Enemy_CollisionBits   = $0491

SprObj_BoundBoxCtrl   = $0499
Player_BoundBoxCtrl   = $0499
Enemy_BoundBoxCtrl    = $049a
Fireball_BoundBoxCtrl = $04a0
Misc_BoundBoxCtrl     = $04a2

EnemyFrenzyBuffer     = $06cb
EnemyFrenzyQueue      = $06cd
Enemy_Flag            = SCRATCHPAD+$0f
Enemy_ID              = SCRATCHPAD+$16

PlayerGfxOffset       = $06d5
Player_XSpeedAbsolute = $0700
FrictionAdderHigh     = $0701
FrictionAdderLow      = $0702
RunningSpeed          = $0703
SwimmingFlag          = $0704
Player_X_MoveForce    = $0705
DiffToHaltJump        = $0706
JumpOrigin_Y_HighPos  = $0707
JumpOrigin_Y_Position = $0708
VerticalForce         = $0709
VerticalForceDown     = $070a
PlayerChangeSizeFlag  = $070b
PlayerAnimTimerSet    = $070c
PlayerAnimCtrl        = $070d
DeathMusicLoaded      = $0712
FlagpoleSoundQueue    = $0713
CrouchingFlag         = $0714
MaximumLeftSpeed      = $0450
MaximumRightSpeed     = $0456

SprObject_OffscrBits  = $03d0
Player_OffscreenBits  = $03d0
Enemy_OffscreenBits   = $03d1
FBall_OffscreenBits   = $03d2
Bubble_OffscreenBits  = $03d3
Block_OffscreenBits   = $03d4
Misc_OffscreenBits    = $03d6
EnemyOffscrBitsMasked = $03d8

Cannon_Offset         = $046a
Cannon_PageLoc        = $046b
Cannon_X_Position     = $0471
Cannon_Y_Position     = $0477
Cannon_Timer          = $047d

Whirlpool_Offset      = $046a
Whirlpool_PageLoc     = $046b
Whirlpool_LeftExtent  = $0471
Whirlpool_Length      = $0477
Whirlpool_Flag        = $047d

VineFlagOffset        = $0398
VineHeight            = $0399
VineObjOffset         = $039a
VineStart_Y_Position  = $039d

Block_Orig_YPos       = $03e4
Block_BBuf_Low        = $03e6
Block_Metatile        = $03e8
Block_PageLoc2        = $03ea
Block_RepFlag         = $03ec
Block_ResidualCounter = $03f0
Block_Orig_XPos       = $03f1

BoundingBox_UL_XPos   = $04ac
BoundingBox_UL_YPos   = $04ad
BoundingBox_DR_XPos   = $04ae
BoundingBox_DR_YPos   = $04af
BoundingBox_UL_Corner = $04ac
BoundingBox_LR_Corner = $04ae
EnemyBoundingBoxCoord = $04b0

PowerUpType           = SCRATCHPAD+$39

FireballBouncingFlag  = SCRATCHPAD+$3a
FireballCounter       = $06ce
FireballThrowingTimer = $0711

HammerEnemyOffset     = $06ae
JumpCoinMiscOffset    = $06b7

Block_Buffer_1        = $0500
Block_Buffer_2        = $05d0

HammerThrowingTimer   = $03a2
HammerBroJumpTimer    = SCRATCHPAD+$3c
Misc_Collision_Flag   = $06be

RedPTroopaOrigXPos    = $0401
RedPTroopaCenterYPos  = SCRATCHPAD+$58

XMovePrimaryCounter   = SCRATCHPAD+$a0
XMoveSecondaryCounter = SCRATCHPAD+$58

CheepCheepMoveMFlag   = SCRATCHPAD+$58
CheepCheepOrigYPos    = $0434
BitMFilter            = $06dd

LakituReappearTimer   = $06d1
LakituMoveSpeed       = SCRATCHPAD+$58
LakituMoveDirection   = SCRATCHPAD+$a0

FirebarSpinState_Low  = SCRATCHPAD+$58
FirebarSpinState_High = SCRATCHPAD+$a0
FirebarSpinSpeed      = $0388
FirebarSpinDirection  = SCRATCHPAD+$34

DuplicateObj_Offset   = $06cf
NumberofGroupEnemies  = $06d3

BlooperMoveCounter    = SCRATCHPAD+$a0
BlooperMoveSpeed      = SCRATCHPAD+$58

BowserBodyControls    = $0363
BowserFeetCounter     = $0364
BowserMovementSpeed   = $0365
BowserOrigXPos        = $0366
BowserFlameTimerCtrl  = $0367
BowserFront_Offset    = $0368
BridgeCollapseOffset  = $0369
BowserGfxFlag         = $036a
BowserHitPoints       = $0483
MaxRangeFromOrigin    = $06dc

BowserFlamePRandomOfs = $0417

PiranhaPlantUpYPos    = $0417
PiranhaPlantDownYPos  = $0434
PiranhaPlant_Y_Speed  = SCRATCHPAD+$58
PiranhaPlant_MoveFlag = SCRATCHPAD+$a0

FireworksCounter      = $06d7
ExplosionGfxCounter   = SCRATCHPAD+$58
ExplosionTimerCounter = SCRATCHPAD+$a0

;sound related defines
Squ2_NoteLenBuffer    = $07b3
Squ2_NoteLenCounter   = $07b4
Squ2_EnvelopeDataCtrl = $07b5
Squ1_NoteLenCounter   = $07b6
Squ1_EnvelopeDataCtrl = $07b7
Tri_NoteLenBuffer     = $07b8
Tri_NoteLenCounter    = $07b9
Noise_BeatLenCounter  = $07ba
Squ1_SfxLenCounter    = $07bb
Squ2_SfxLenCounter    = $07bd
Sfx_SecondaryCounter  = $07be
Noise_SfxLenCounter   = $07bf

PauseSoundQueue       = SCRATCHPAD+$fa
Square1SoundQueue     = SCRATCHPAD+$ff
Square2SoundQueue     = SCRATCHPAD+$fe
NoiseSoundQueue       = SCRATCHPAD+$fd
AreaMusicQueue        = SCRATCHPAD+$fb
EventMusicQueue       = SCRATCHPAD+$fc

Square1SoundBuffer    = SCRATCHPAD+$f1
Square2SoundBuffer    = SCRATCHPAD+$f2
NoiseSoundBuffer      = SCRATCHPAD+$f3
AreaMusicBuffer       = SCRATCHPAD+$f4
EventMusicBuffer      = $07b1
PauseSoundBuffer      = $07b2

MusicData             = SCRATCHPAD+$f5
MusicDataLow          = SCRATCHPAD+$f5
MusicDataHigh         = SCRATCHPAD+$f6
MusicOffset_Square2   = SCRATCHPAD+$f7
MusicOffset_Square1   = SCRATCHPAD+$f8
MusicOffset_Triangle  = SCRATCHPAD+$f9
MusicOffset_Noise     = $07b0

NoteLenLookupTblOfs   = SCRATCHPAD+$f0
DAC_Counter           = $07c0
NoiseDataLoopbackOfs  = $07c1
NoteLengthTblAdder    = $07c4
AreaMusicBuffer_Alt   = $07c5
PauseModeFlag         = $07c6
GroundMusicHeaderOfs  = $07c7
AltRegContentFlag     = $07ca

UnusedVariable = $06c9
        endif

;-------------------------------------------------------------------------------------
;CONSTANTS

;sound effects constants
Sfx_SmallJump         = %10000000
Sfx_Flagpole          = %01000000
Sfx_Fireball          = %00100000
Sfx_PipeDown_Injury   = %00010000
Sfx_EnemySmack        = %00001000
Sfx_EnemyStomp        = %00000100
Sfx_Bump              = %00000010
Sfx_BigJump           = %00000001

Sfx_BowserFall        = %10000000
Sfx_ExtraLife         = %01000000
Sfx_PowerUpGrab       = %00100000
Sfx_TimerTick         = %00010000
Sfx_Blast             = %00001000
Sfx_GrowVine          = %00000100
Sfx_GrowPowerUp       = %00000010
Sfx_CoinGrab          = %00000001

Sfx_BowserFlame       = %00000010
Sfx_BrickShatter      = %00000001

;music constants
Silence               = %10000000

StarPowerMusic        = %01000000
PipeIntroMusic        = %00100000
CloudMusic            = %00010000
CastleMusic           = %00001000
UndergroundMusic      = %00000100
WaterMusic            = %00000010
GroundMusic           = %00000001

TimeRunningOutMusic   = %01000000
EndOfLevelMusic       = %00100000
AltGameOverMusic      = %00010000
EndOfCastleMusic      = %00001000
VictoryMusic          = %00000100
GameOverMusic         = %00000010
DeathMusic            = %00000001

;enemy object constants
GreenKoopa            = $00
BuzzyBeetle           = $02
RedKoopa              = $03
HammerBro             = $05
Goomba                = $06
Bloober               = $07
BulletBill_FrenzyVar  = $08
GreyCheepCheep        = $0a
RedCheepCheep         = $0b
Podoboo               = $0c
PiranhaPlant          = $0d
GreenParatroopaJump   = $0e
RedParatroopa         = $0f
GreenParatroopaFly    = $10
Lakitu                = $11
Spiny                 = $12
FlyCheepCheepFrenzy   = $14
FlyingCheepCheep      = $14
BowserFlame           = $15
Fireworks             = $16
BBill_CCheep_Frenzy   = $17
Stop_Frenzy           = $18
Bowser                = $2d
PowerUpObject         = $2e
VineObject            = $2f
FlagpoleFlagObject    = $30
StarFlagObject        = $31
JumpspringObject      = $32
BulletBill_CannonVar  = $33
RetainerObject        = $35
TallEnemy             = $09

;other constants
World1 = 0
World2 = 1
World3 = 2
World4 = 3
World5 = 4
World6 = 5
World7 = 6
World8 = 7
Level1 = 0
Level2 = 1
Level3 = 2
Level4 = 3

TitleScreenDataOffset = $1ec0 ;in chr ROM
TitleScreenDataSize = 0x140
SoundMemory           = $07b0

A_Button              = %10000000
B_Button              = %01000000
Select_Button         = %00100000
Start_Button          = %00010000
Up_Dir                = %00001000
Down_Dir              = %00000100
Left_Dir              = %00000010
Right_Dir             = %00000001

TitleScreenModeValue  = 0
GameModeValue         = 1
VictoryModeValue      = 2
GameOverModeValue     = 3