CandleStatusActive = 0x0280
CandleStatusInactive = 0x0000
MaxCandleActive = 4
-function StageNumber() { return byte(0xc02b) }
+function Stage() { return byte(0xc02b) }
function Candle(i) { return CandleStart + i * CandleSize }
function CandleStatus(i) { return word(Candle(i) + 0) }
function CandleID(i) { return byte(Candle(i) + 28) }
+function Score() { return dword(0xc034) }
+function ScoreIncreased() { return prev(Score()) < Score() }
+function Lives() { return byte(0xc040) }
+function LivesIncreased() { return prev(Lives()) < Lives() }
gCandleID = 0
-function gCheckItemCollected(index) {
- return once(
- ((prev(CandleStatus(index))-CandleStatus(index))*256+CandleID(index)) == (CandleStatusActive-CandleStatusInactive)*256+gCandleID
- )
+gStage = 0
+function gCheckItemCollectedWithoutScore(index) {
+ return ((prev(CandleStatus(index))-CandleStatus(index))*256+CandleID(index)) == (CandleStatusActive-CandleStatusInactive)*256+gCandleID
}
function gCheckCandleCollected(id) {
gCandleID = id
- return any_of(range(0, 4), gCheckItemCollected)
+ return once(Stage() == gStage && any_of(range(0, 4), gCheckItemCollectedWithoutScore))
}
function CheckAllCandles() {
- return all_of(range(0, 4), gCheckCandleCollected)
+ collected = disable_when(!(ScoreIncreased() || LivesIncreased()), until=ScoreIncreased() || LivesIncreased())
+ gStage = 0
+ collected = collected && all_of(range(0, 0x27), gCheckCandleCollected)
+ gStage = 1
+ collected = collected && all_of(range(1, 1), gCheckCandleCollected)
+ return collected
}
-achievement(title = "RATools Test", description = "Get the Candle", points = 0,
- trigger = CheckAllCandles())
\ No newline at end of file
+achievement(title = "RATools Test", description = "Get the Candles", points = 0,
+ trigger = CheckAllCandles())