実績マニアへ
For the achievement maniac.

あなたが実績マニアなら、一定の目的の為、メモリマップを欲しているかもしれません。
If you are an achievement maniac, you may want the memory map for a certain purpose.

私はその一部をお見せしたいと思います。
I'm going to show a part of it.

ネタバレが多数含まれます。ご注意下さい。
Be careful, it includes many spoilers.


下にスクロールして下さい。
Please scroll this text.



下にスクロールして下さい。
Please scroll this text.



下にスクロールして下さい。
Please scroll this text.




















(A)重要な5バイト/The important 5 bytes.
(a)7FE00E[2]/ログの準備が完了しているか/Log is Ready
(b)7FE000[1]/ログが有効か/Log enabled
(c)7FE00D[1]/スペシャルモード/Special mode
(d)7FE6FF[1]/集計済みか/Collated

(a)7FE00E[2]/ログの準備が完了しているか/Log is Ready
起動後、ログ用のメモリの準備が完了すると以下の値が書き込まれます。
After booting, following values are written if the memory for logging is ready.

7FE00E:45 ('E')
7FE00F:50 ('P')

起動時のメモリの状態は不定なので、必ずこれらの値を照合して下さい。
As the memory status is unstable at booting, please check these values.

(b)7FE000[1]/ログが有効か/Log enabled
0ならパスワードからスタート、非0なら最初からスタートです。
It's zero if the game starts with password, and non-zero if the game starts from first.

通常、この値が非0であることを確認する必要があります。
In general, please check that this value is non-zero.


(c)7FE00D[1]/スペシャルモード/Special mode
将来のために予約されている変数で、非0だとスペシャルモードのゲームです。
It's reserved variable for future version. If it's non-zero, the game is "special mode."

通常モードでは、ゼロであることを確認して下さい。
For the standard game, please check that this value is zero.

(d)7FE6FF[1]/集計済みか/Collated
ラスボスを倒した後、データの集計が完了すると、非0になります。
After beating the final boss and the collating of logged values, it's non-zero.

いくつかの変数は、集計後に有効な値になります。
Some variable are valid after the collating.


(B)その他の変数/the other variables
えー、疲れた。アセンブリソース丸投げする。類推して。ごめん。
Uh-uh...I'm tired to type! I'm going to show asm text. Please analogize it from variable name. Sry!











%let($7FE000,aLogBase) ;array800

%let(aLogBase+$000,vLogEnabled) ;ログが有効か/vPasswordIsUsedがあるので実は不要のようだ
%let(aLogBase+$00D,vLogSpecialMode) ;スペシャルモードの状態
%let(aLogBase+$00E,aLogIsReady) ;ログ用メモリの準備ができたか/"EP"で完了
%let(aLogBase+$010,aPreviousFrameCounterForLoggingTime) ;array5
%let(aLogBase+$015,vPreviousStageForLoggingTime) ;タイム記録のための直前のステージやゲームの状態
%let(aLogBase+$018,aLogTotalDamage) ;array4
%let(aLogBase+$01C,aLogBoltsUsed) ;array4
%let(aLogBase+$020,aLogTime) ;array50
%let($00,cLogTime_OutOfGame)
%let($0E,cLogTime_Etc)
%let($0F,cLogTime_Working)

%let(aLogBase+$080,aLogTiwnTimesPerStage) ;array20

%let(aLogBase+$0A0,aLogTiwn) ;array2
%let(aLogBase+$0A2,aLogTiwnOnSale) ;array2
%let(aLogBase+$0A4,aLogTiwnForte) ;array2
%let(aLogBase+$0A6,aLogTiwnTotal) ;array2
%let(aLogBase+$0A8,aLogTiwnTotalOnSale) ;array2

%let(aLogBase+$0B0,aLogETank) ;array2
%let(aLogBase+$0B2,aLogETankOnSale) ;array2
%let(aLogBase+$0B4,aLogETankForte) ;array2
%let(aLogBase+$0B6,aLogETankTotal) ;array2
%let(aLogBase+$0B8,aLogETankTotalOnSale) ;array2

%let(aLogBase+$0C0,aLogWTank) ;array2
%let(aLogBase+$0C2,aLogWTankOnSale) ;array2
%let(aLogBase+$0C4,aLogWTankForte) ;array2
%let(aLogBase+$0C6,aLogWTankTotal) ;array2
%let(aLogBase+$0C8,aLogWTankTotalOnSale) ;array2

%let(aLogBase+$0D0,aLogSTank) ;array2
%let(aLogBase+$0D2,aLogSTankOnSale) ;array2
%let(aLogBase+$0D4,aLogSTankForte) ;array2
%let(aLogBase+$0D6,aLogSTankTotal) ;array2
%let(aLogBase+$0D8,aLogSTankTotalOnSale) ;array2

%let(aLogBase+$0E0,aLogBeat) ;array2
%let(aLogBase+$0E2,aLogBeatOnSale) ;array2
%let(aLogBase+$0E4,aLogBeatForte) ;array2 ;便宜的に存在するが使われない
%let(aLogBase+$0E6,aLogBeatTotal) ;array2
%let(aLogBase+$0E8,aLogBeatTotalOnSale) ;array2
;
%let(aLogBase+$100,aLogWepFire) ;array80
%let(aLogBase+$180,aLogWepHit) ;array80
%let($18,cLogWep_NovaBody)
%let($19,cLogWep_RushFreeze) ;射出専用
;武器発射/ヒットログに関するメモ
;08/シェード1 0A/スプリング1 射出はこちらに集約
;0F/シェード2 12/スプリング2 ヒット数のみ
;0C/盾1 射出はカウントしない
;07/ビート 敵に向かい始めると射出扱い/ホットビートはカウントしない

;種だねのログ/武器実績の条件も含む
%let(aLogBase+$200,aLogRedBuster) ;array2
%let(aLogBase+$202,aLogSilverBullet) ;array2
%let(aLogBase+$204,aLogPlasmaStrike) ;array2
%let(aLogBase+$206,aLog3PointBurst) ;array2
%let(aLogBase+$208,aLogYellowCritical) ;array2
%let(aLogBase+$20A,aLogSelfBurningCancel) ;array2
%let(aLogBase+$20C,aLogShieldParry) ;array2
%let(aLogBase+$20E,aLogSpike) ;array2
%let(aLogBase+$210,aLogExit) ;array2
%let(aLogBase+$212,aLogEnter) ;array2
%let(aLogBase+$214,aLogSTankFound) ;array2
%let(aLogBase+$216,aLogAchievement) ;array2
%let(aLogBase+$218,aLogAchievementTotal) ;array2
%let(aLogBase+$21A,aLogBurnt) ;array2
%let(aLogBase+$21C,aLogFrozen) ;array2
%let(aLogBase+$21E,aLogShocked) ;array2
;%let(aLogBase+$220,aLog) ;array2
;%let(aLogBase+$222,aLog) ;array2
;%let(aLogBase+$224,aLog) ;array2
;%let(aLogBase+$226,aLog) ;array2
;%let(aLogBase+$228,aLog) ;array2
;%let(aLogBase+$22A,aLog) ;array2
;%let(aLogBase+$22C,aLog) ;array2
;%let(aLogBase+$22E,aLog) ;array2
%let(aLogBase+$230,aLogJump) ;array4
%let(aLogBase+$234,aLogSlide) ;array4
%let(aLogBase+$238,aLogItemDrop) ;array4
%let(aLogBase+$23C,aLogConsumedEnergyAtSlashWeapon) ;array4
;%let(aLogBase+$240,aLog) ;array4
;%let(aLogBase+$244,aLog) ;array4
;%let(aLogBase+$248,aLog) ;array4
;%let(aLogBase+$24C,aLog) ;array4
%let(aLogBase+$250,aLogSTankFoundStage) ;array10
%let(aLogBase+$260,aLogBusterHitStatus) ;メモリブロックの起点とするため
%let(aLogBase+$260,aLogBusterHitStatusAtGettingFirstWeapon) ;array10
%let(aLogBase+$270,aLogBusterHitStatusAtGettingShield) ;array10
%let(aLogBase+$2A0,aLogSectionDamage) ;メモリブロックの起点とするため
%let(aLogBase+$2A0,aLogDamageBeforeSale) ;array4
%let(aLogBase+$2A4,aLogDamageOnSale) ;array4
%let(aLogBase+$2A8,aLogDamageForte) ;array4

%let(aLogBase+$300,aLogDiaryMisc) ;array40

#if aLogDiaryMisc&$FF ~= 0
    fail aLogDiaryMisc
#endif
%let(aLogDiaryMisc+$00,aDiaryPrevMinute) ;array4
;08-0E
%let(aLogDiaryMisc+$0F,vDiaryDieFrom) ;死因が格納され、やられた時にこの変数で記録される
%let(aLogDiaryMisc+$10,vDiaryStatsLocation) ;現在居る場所の情報が格納される
%let(aLogDiaryMisc+$11,vDiaryStatsCause) ;ダメージを与える前に原因識別のために書き込まれる
%let(aLogDiaryMisc+$12,vDiaryStatsSpike) ;トゲでダメージを受ける瞬間だけダメージ値が書き込まれる
%let(aLogDiaryMisc+$13,vDiaryStatsTelTel) ;テルテルフラッシャー発動中非ゼロ
;
%let(aLogDiaryMisc+$20,vDiaryStatsKilledByOBD) ;OBDに殺された場合FF
%let(aLogDiaryMisc+$21,vDiaryStatsKilledByOBG) ;OBGに殺された場合FF
%let(aLogDiaryMisc+$22,vDiaryStatsKilledByOBH) ;OBHに殺された場合FF
%let(aLogDiaryMisc+$23,vDiaryStatsKilledByOBI) ;OBIに殺された場合FF
%let(aLogDiaryMisc+$24,vDiaryStatsKilledByUnknown) ;正常ではないダイレクトレジスタdの持ち主に殺されたときFF
%let(aLogDiaryMisc+$25,vDiaryStatsKilledByRedJoe) ;レッドジョーに殺された場合FF
%let(aLogDiaryMisc+$26,vDiaryStatsKilledByOBA) ;OBA(自機の処理内)で死んだ時にFF
%let(aLogDiaryMisc+$27,vDiaryStatsKilledBySpike) ;トゲに触って死んだ時にFF
%let(aLogDiaryMisc+$28,vDiaryStatsKilledByBurning) ;炎上してやられた時にFF
;29
%let(aLogDiaryMisc+$2A,aDiaryStatsMurdererD) ;array2 ;殺した者のd
%let(aLogDiaryMisc+$2C,vDiaryStatsMurdererType)  ;殺した者のType
%let(aLogDiaryMisc+$2D,vDiaryStatsMurdererArg)   ;殺した者のArg
%let(aLogDiaryMisc+$2E,vDiaryStatsMurdererArg7F) ;殺した者のArgの下位7bit
;2F

%let(aLogBase+$400,aLogBattle) ;array100
%let(aLogBattle+$000,vLogBOpponent)
%let(aLogBattle+$004,aLogBStartFrame) ;array4
%let(aLogBattle+$008,aLogBStartDamage) ;array4
%let($00,cLogBFreeze)
%let($01,cLogBCloud)
%let($02,cLogBJunk)
%let($03,cLogBTurbo)
%let($04,cLogBSlash)
%let($05,cLogBShade)
%let($06,cLogBBurst)
%let($07,cLogBSpring)
%let($08,cLogBW1)
%let($09,cLogBW2)
%let($0A,cLogBW3)
%let($0B,cLogBWC)
%let($0C,cLogBForte)
%let($10,cLogBMiniFreeze)
%let($11,cLogBMiniCloud)
%let($12,cLogBMiniJunk)
%let($13,cLogBMiniTurbo)
%let($14,cLogBMiniSlash)
%let($15,cLogBMiniShade)
%let($16,cLogBMiniBurst)
%let($17,cLogBMiniSpring)
%let($18,cLogBMiniW2)
%let($19,cLogBMiniW3_1)
%let($1A,cLogBMiniW3_2)
%let($1B,cLogBMiniW3_3)
%let($1C,cLogBWM)
%let(aLogBattle+$020,aLogBWins) ;array20
%let(aLogBattle+$040,aLogBLosses) ;array40
%let(aLogBattle+$080,aLogBMinimumDamage) ;array40
%let(aLogBattle+$0C0,aLogBBestTime) ;array40









%let(aLogBase+$600,aLogStats) ;array100

%let(aLogStats+$00,aLogCostBodyTotal) ;array4
%let(aLogStats+$04,aLogCostBody) ;array4
%let(aLogStats+$08,aLogCostBodyOnSale) ;array4
%let(aLogStats+$0C,aLogCostOverAll) ;array4

%let(aLogStats+$10,aLogCostETankTotal) ;array4
%let(aLogStats+$14,aLogCostETank) ;array4
%let(aLogStats+$18,aLogCostETankOnSale) ;array4

%let(aLogStats+$20,aLogCostWTankTotal) ;array4
%let(aLogStats+$24,aLogCostWTank) ;array4
%let(aLogStats+$28,aLogCostWTankOnSale) ;array4

%let(aLogStats+$30,aLogCostSTankTotal) ;array4
%let(aLogStats+$34,aLogCostSTank) ;array4
%let(aLogStats+$38,aLogCostSTankOnSale) ;array4

%let(aLogStats+$40,aLogCostBeatTotal) ;array4
%let(aLogStats+$44,aLogCostBeat) ;array4
%let(aLogStats+$48,aLogCostBeatOnSale) ;array4

%let(aLogStats+$80,aLogHitRatio) ;array40
%let(aLogStats+$C0,aLogFavFactor) ;array30


%let(aLogStats+$F0,vFavWeapon)
%let(aLogStats+$F1,vEnding)
%let(0,cLogEnding_EconomicPower)
%let(1,cLogEnding_ExpertPlayer)
%let(2,cLogEnding_EverlastingPunishment) ;未使用予定
%let(3,cLogEnding_EnoughPractice) ;未使用予定
%let(aLogStats+$FF,vCollated)

%let(aLogBase+$700,aLogAcBase) ;array40

%let(aLogAcBase+$00,vLogAcNever)
%let(aLogAcBase+$01,vLogAcBuster1)
%let(aLogAcBase+$02,vLogAcBuster2)
%let(aLogAcBase+$03,vLogAcBuster3)
%let(aLogAcBase+$04,vLogAcBuster4)
%let(aLogAcBase+$05,vLogAcFreeze)
%let(aLogAcBase+$06,vLogAcCloud)
%let(aLogAcBase+$07,vLogAcJunk)
%let(aLogAcBase+$08,vLogAcBurst)
%let(aLogAcBase+$09,vLogAcSlash)
%let(aLogAcBase+$0A,vLogAcShade)
%let(aLogAcBase+$0B,vLogAcTurbo)
%let(aLogAcBase+$0C,vLogAcSpring)
%let(aLogAcBase+$0D,vLogAcRush)
%let(aLogAcBase+$0E,vLogAcEddy)
%let(aLogAcBase+$0F,vLogAcBeat)
%let(aLogAcBase+$10,vLogAcNova)
%let(aLogAcBase+$11,vLogAcShield)
%let(aLogAcBase+$12,vLogAcETank1)
%let(aLogAcBase+$13,vLogAcETank2)
%let(aLogAcBase+$14,vLogAcWTank1)
%let(aLogAcBase+$15,vLogAcWTank2)
%let(aLogAcBase+$16,vLogAcSTank1)
%let(aLogAcBase+$17,vLogAcSTank2)
%let(aLogAcBase+$18,vLogAcBeatR1)
%let(aLogAcBase+$19,vLogAcBeatR2)
%let(aLogAcBase+$1A,vLogAcSpike1)
%let(aLogAcBase+$1B,vLogAcSpike2)
%let(aLogAcBase+$1C,vLogAcExit1)
%let(aLogAcBase+$1D,vLogAcExit2)
%let(aLogAcBase+$1E,vLogAcDamage1)
%let(aLogAcBase+$1F,vLogAcDamage2)
%let(aLogAcBase+$20,vLogAcShop1)
%let(aLogAcBase+$21,vLogAcShop2)
%let(aLogAcBase+$22,vLogAcEnter1)
%let(aLogAcBase+$23,vLogAcEnter2)
%let(aLogAcBase+$24,vLogAcCost1)
%let(aLogAcBase+$25,vLogAcCost2)
%let(aLogAcBase+$26,vLogAcTime1)
%let(aLogAcBase+$27,vLogAcTime2)
%let(aLogAcBase+$28,vLogAcLow)
%let(aLogAcBase+$29,vLogAc100)
%let(aLogAcBase+$2A,vLogAcMasterBean)
%let(aLogAcBase+$2B,vLogAcCaptain)
%let(aLogAcBase+$2C,vLogAcRainbow)
%let(aLogAcBase+$2D,vLogAcGladiator)
%let(aLogAcBase+$2E,vLogAcJump)
%let(aLogAcBase+$2F,vLogAcSlide)
%let(aLogAcBase+$30,vLogAcPacifist)
%let(aLogAcBase+$31,vLogAcAllSTank)
%let(aLogAcBase+$32,vLogAcAchievement1)
%let(aLogAcBase+$33,vLogAcAchievement2)
%let(aLogAcBase+$34,vLogAcAchievement3)
%let(aLogAcBase+$35,vLogAcAchievement4)
%let($36,cLogAcCount) ;ダミー実績も含む

cLogAcBuster1 = 2222
cLogAcBuster2 = 10
cLogAcBuster3 = 95
cLogAcBuster4 = 1
cLogAcFreeze = 30
cLogAcCloud = 20
cLogAcJunk = 300
cLogAcBurst = 20
cLogAcSlash = 5
cLogAcShade = 100
cLogAcTurbo = 3
cLogAcSpring = 10
cLogAcRush = 1
cLogAcEddy = 1
cLogAcBeat = 1
cLogAcNova = 30
cLogAcShield = 256
cLogAcETank1 = 0
cLogAcETank2 = 10
cLogAcWTank1 = 0
cLogAcWTank2 = 5
cLogAcSTank1 = 0
cLogAcSTank2 = 5
cLogAcBeatR1 = 0
cLogAcBeatR2 = 20
cLogAcSpike1 = 0
cLogAcSpike2 = 20
cLogAcExit1 = 0
cLogAcExit2 = 5
cLogAcDamage1 = 140
cLogAcDamage2 = 2800
cLogAcShop1 = 0
cLogAcShop2 = 1050
cLogAcEnter1 = 13
cLogAcEnter2 = 25
cLogAcCost1 = 1000
cLogAcCost2 = 1000000
cLogAcTime1 = 270000
cLogAcTime2 = 1080000
;cLogAcLow = 
;cLogAc100 = 
;cLogAcMasterBean = 
;cLogAcCaptain = 
;cLogAcRainbow = 
;cLogAcGladiator = 
cLogAcJump = 400 ;staff record:299(下記参照)
cLogAcSlide = 20 ;staff record:14(Sl:1 Tu:11 Sh:1 W2:1)
cLogAcPacifist = 20 ;staff record:13(Fr:13)
cLogAcAllSTank = 8
cLogAcAchievement1 = 10
cLogAcAchievement2 = 20
cLogAcAchievement3 = 30
cLogAcAchievement4 = 0

;cLogAcJumpのstaff recordの内訳
;バグっぽい仕様も利用。未知のものがあるならもっと行けそう。
;Burst:18 +18
;Cloud:49 +31
;Slash:81 +32
;Shade:108 +27
;Turbo:141 +33
;Junk:174 +33
;Spring:228 +54
;Freeze:240 +12
;W1:260 +20
;W2:266 +6
;W3:271 +5
;W4:271 +0
;W5:299 +28
