diff --git a/CHANGELOG.md b/CHANGELOG.md index 166894fa..f44b6af0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,7 @@ - Pace Trainer - Seed Trainer - Controller input can be enabled outside of Debug Mode +- PAL Mode now has correct SFX - Tweaks to make Garbage Trainer more realistic ## [v2] diff --git a/README.md b/README.md index 8c8d69b0..2b93d91d 100644 --- a/README.md +++ b/README.md @@ -11,16 +11,18 @@ * [Trainers](#modes) * [Tetris](#tetris) * [T-Spins](#t-spins) + * [Seed](#seed) * [Stacking](#stacking) + * [Pace](#pace) * [Setups](#setups) * [Floor](#floor) * [(Quick)Tap](#%28quick%29-tap) * [Garbage](#garbage) * [Drought](#drought) +* [Input Display](#input-display) * [Debug Mode](#debug-mode) * [Level Editor](#level-editor) * [Savestates](#savestates) - * [Controller Input Display](#controller-input-display) * [PAL Mode](#pal-mode) * [Resources](#resources) @@ -50,12 +52,43 @@ Same gameplay as Type-A, with some improvements: no score cap, no rocket, no cur Spawn T-Spins in random positions. Additional entry delay on successful T-Spin to prepare for the next state. +### Seed + +Provides same piece sets for VS battles (or practise). + +Press `select` to generate a random seed. + ### Stacking ![Stacking](/screens/stacking.png) An experiment in highlighting areas of the playfield. +### Pace + +![Pace](/screens/pace.png) + +Indicates how close you are to achieving a score by 230 lines. Loosely based on Tetris rate. + +You can choose scores up to and including 1.5m in increments of 100k. + +This can be adjusted for transition or PAL games; + +| value | score at 130 lines | +| ----- | ------------------ | +| 4 | 201261 | +| 5 | 252936 | +| 6 | 300278 | +| 7 | 353015 | +| 8 | 400356 | +| 9 | 452031 | +| A | 508690 | +| B | 552131 | +| C | 600535 | +| D | 655460 | +| E | 706051 | +| F | 752310 | + ### Setups ![Setups](/screens/setups.png) @@ -102,6 +135,15 @@ Create artificially inflated droughts. Increasing the value causes less I pieces 0 = normal gameplay I = no line pieces +### Input Display + +![Controller](/screens/controller.png) + +In debug mode + +* Select + Right + Toggle controller input display + ## Debug Mode ![Controller](/screens/debug.png) @@ -157,13 +199,6 @@ Savestates require SRAM to work. Tested and working on Everdrive / Emulator / Mi Combined with the level editor, savestates are effective for practising specific scenarios. -### Controller input display - -![Controller](/screens/controller.png) - -* Select + Right - Toggle controller input display - ## PAL Mode Dictate if the NTSC or PAL gameplay mechanics should be used. Should automatically detect region, but can be manually overwritten otherwise. diff --git a/main.asm b/main.asm index 7f1c10fe..763a6c6e 100644 --- a/main.asm +++ b/main.asm @@ -4830,7 +4830,7 @@ targetTable: .byte $5A,$A,$89,$1 ; 7 .byte $B8,$B,$DE,$1 ; 8 .byte $3E,$D,$B,$2 ; 9 - .byte $A0,$F,$5C,$1 ; A + .byte $F2,$E,$A,$2 ; A .byte $2C,$10,$83,$2 ; B .byte $94,$11,$CD,$2 ; C .byte $38,$13,$DC,$2 ; D diff --git a/screens/menu.png b/screens/menu.png index 57c31291..77a77a66 100644 Binary files a/screens/menu.png and b/screens/menu.png differ diff --git a/screens/pace.png b/screens/pace.png new file mode 100644 index 00000000..ee8e1f16 Binary files /dev/null and b/screens/pace.png differ diff --git a/tools/pace.rb b/tools/pace.rb new file mode 100644 index 00000000..945a8b9c --- /dev/null +++ b/tools/pace.rb @@ -0,0 +1,56 @@ +Targets = %q( + .byte $0,$0,$0,$0 + .byte $68,$1,$4B,$0 ; 1 + .byte $F8,$2,$6E,$0 ; 2 + .byte $7E,$4,$9A,$0 ; 3 + .byte $E6,$5,$E5,$0 ; 4 + .byte $6C,$7,$12,$1 ; 5 + .byte $CA,$8,$67,$1 ; 6 + .byte $5A,$A,$89,$1 ; 7 + .byte $B8,$B,$DE,$1 ; 8 + .byte $3E,$D,$B,$2 ; 9 + .byte $F2,$E,$A,$2 ; A + .byte $2C,$10,$83,$2 ; B + .byte $94,$11,$CD,$2 ; C + .byte $38,$13,$DC,$2 ; D + .byte $B4,$14,$13,$3 ; E + .byte $08,$16,$72,$3 +) + .scan(/\$(.+),\$(.+),\$(.+),\$([0-9A-F]+)( |$)/i) + .map.with_index { |a, i| + [ + i.to_s(16).upcase, + (a[1].to_i(16) << 8) + a[0].to_i(16), + (a[3].to_i(16) << 8) + a[2].to_i(16) + ] + } + +def print_pace(threshold, target, range, step = 1) + _, base, mult = Targets[target] + + for i in range + index = i * step + if index <= threshold + points = base + else + points = base + (((index-threshold) / (230.0-threshold)) * mult) + end + + # print " + # T: #{target.to_s(16).upcase}\ + # L: #{index}\ + # M: #{points.floor}\ + # P: #{(points * index).floor}\ + # " + + print "| #{target.to_s(16).upcase} | #{(points * index).floor} |\n" + end +end + +# pp targets + +for target in 0..0xF + print_pace 110, target, 130..130, 1 +end + +# print_pace 110, 0xA, 1..23, 10