1
- use crate :: { input, labels, util, video} ;
1
+ use crate :: { input, labels, playfield , util, video} ;
2
2
use rusticnes_core:: nes:: NesState ;
3
3
4
4
pub fn get_expected_tilesets ( ) -> ( Vec < u8 > , Vec < u8 > ) {
@@ -8,12 +8,12 @@ pub fn get_expected_tilesets() -> (Vec<u8>, Vec<u8>) {
8
8
let game_tileset = include_bytes ! ( "../../src/chr/game_tileset.chr" ) ;
9
9
let rocket_tileset = include_bytes ! ( "../../src/chr/rocket_tileset.chr" ) ;
10
10
let empty_tileset: Vec < u8 > = vec ! [ 0 ; 0x1000 ] ;
11
-
11
+
12
12
// cnrom limited to reading 8k banks, so pair tilesets accordingly
13
13
let mut tileset1: Vec < u8 > = vec ! [ 0 ; 0x2000 ] ;
14
14
tileset1[ ..0x1000 ] . copy_from_slice ( title_menu_tileset) ;
15
15
tileset1[ 0x1000 ..] . copy_from_slice ( game_tileset) ;
16
-
16
+
17
17
let mut tileset2: Vec < u8 > = vec ! [ 0 ; 0x2000 ] ;
18
18
tileset2[ ..0x1000 ] . copy_from_slice ( rocket_tileset) ;
19
19
tileset2[ 0x1000 ..] . copy_from_slice ( & empty_tileset) ;
@@ -64,7 +64,10 @@ pub fn test() {
64
64
let game_mode = labels:: get ( "gameMode" ) as usize ;
65
65
let main_loop = labels:: get ( "mainLoop" ) ;
66
66
let level_number = labels:: get ( "levelNumber" ) as usize ;
67
- emu. memory . iram_raw [ practise_type] = labels:: get ( "MODE_TETRIS" ) as _ ;
67
+ let score = labels:: get ( "score" ) as usize ;
68
+ let tetris = labels:: get ( "MODE_TETRIS" ) as usize ;
69
+
70
+ emu. memory . iram_raw [ practise_type] = tetris as u8 ;
68
71
emu. memory . iram_raw [ level_number] = 18 ;
69
72
emu. memory . iram_raw [ game_mode] = 4 ;
70
73
emu. registers . pc = main_loop;
@@ -78,6 +81,7 @@ pub fn test() {
78
81
let current_tileset = get_current_tilesets ( & mut emu) ;
79
82
assert_eq ! ( tile_select, 1 ) ;
80
83
assert_eq ! ( current_tileset, tileset1) ;
84
+
81
85
// boot in qual: tileset2, select 0
82
86
emu. p1_input = input:: SELECT ;
83
87
emu. reset ( ) ;
@@ -90,10 +94,55 @@ pub fn test() {
90
94
assert_eq ! ( tile_select, 0 ) ;
91
95
assert_eq ! ( current_tileset, tileset2) ;
92
96
emu. p1_input = 0 ;
93
-
97
+
98
+ // rocket screen: tileset2, select 0
99
+ emu. memory . iram_raw [ practise_type] = tetris as u8 ;
100
+ emu. memory . iram_raw [ level_number] = 12 ;
101
+ emu. memory . iram_raw [ game_mode] = 4 ;
102
+ emu. registers . pc = main_loop;
103
+
104
+ for _ in 0 ..20 {
105
+ emu. run_until_vblank ( ) ;
106
+ // view.render(&mut emu);
107
+ }
108
+ emu. memory . iram_raw [ score] = 0x99 ;
109
+ emu. memory . iram_raw [ score+1 ] = 0x99 ;
110
+ emu. memory . iram_raw [ score+2 ] = 0x99 ;
111
+ playfield:: set_str ( & mut emu, r##"
112
+ ##########
113
+ ##########
114
+ ##########
115
+ ##########
116
+ ##########
117
+ ##########
118
+ ##########
119
+ ##########
120
+ ##########
121
+ ##########
122
+ ##########
123
+ ##########
124
+ ##########
125
+ ##########
126
+ ##########
127
+ ##########
128
+ ##########
129
+ ##########
130
+ ##########
131
+ ##########"## ) ;
132
+
133
+ for _ in 0 ..400 {
134
+ emu. run_until_vblank ( ) ;
135
+ view. render ( & mut emu) ;
136
+ }
137
+
138
+ let tile_select = get_tile_select ( & mut emu) ;
139
+ let current_tileset = get_current_tilesets ( & mut emu) ;
140
+ assert_eq ! ( tile_select, 0 ) ;
141
+ assert_eq ! ( current_tileset, tileset2) ;
142
+
143
+
94
144
//todo:
95
145
// high score entry screen: tileset1, select 0
96
146
97
- // rocket screen: tileset2, select 0
98
147
99
148
}
0 commit comments