@@ -2,15 +2,19 @@ namespace StatusBarKind {
22 export const Progress = StatusBarKind . create ( )
33}
44controller . up . onEvent ( ControllerButtonEvent . Pressed , function ( ) {
5- jump ( sprite_player , constants_gravity , constants_tiles_high_jump )
5+ if ( in_game ) {
6+ jump ( sprite_player , constants_gravity , constants_tiles_high_jump )
7+ }
68} )
79scene . onHitWall ( SpriteKind . Player , function ( sprite , location ) {
810 if ( sprite . isHittingTile ( CollisionDirection . Bottom ) ) {
911 jumps = 0
1012 }
1113} )
1214controller . A . onEvent ( ControllerButtonEvent . Pressed , function ( ) {
13- jump ( sprite_player , constants_gravity , constants_tiles_high_jump )
15+ if ( in_game ) {
16+ jump ( sprite_player , constants_gravity , constants_tiles_high_jump )
17+ }
1418} )
1519scene . onOverlapTile ( SpriteKind . Player , assets . tile `top_spike` , function ( sprite , location ) {
1620 sprite . destroy ( effects . disintegrate , 100 )
@@ -49,19 +53,62 @@ function create_status_bar (sprite: Sprite, tilemap_length: number) {
4953scene . onOverlapTile ( SpriteKind . Player , assets . tile `flag_bottom` , function ( sprite , location ) {
5054 win ( )
5155} )
56+ scene . onOverlapTile ( SpriteKind . Player , assets . tile `auto_jump` , function ( sprite , location ) {
57+ timer . throttle ( "auto_jump" , 100 , function ( ) {
58+ jump ( sprite_player , constants_gravity , constants_tiles_high_jump )
59+ jumps = 0
60+ } )
61+ } )
62+ function prepare_level ( ) {
63+ tiles . placeOnRandomTile ( sprite_player , assets . tile `start` )
64+ tiles . placeOnRandomTile ( sprite_player_cam , assets . tile `start` )
65+ tiles . setTileAt ( tiles . getTilesByType ( assets . tile `start` ) [ 0 ] , assets . tile `transparency8` )
66+ sprite_player . setVelocity ( 48 , 0 )
67+ sprite_player_cam . setVelocity ( 48 , 0 )
68+ create_status_bar ( sprite_player , tiles . tilemapColumns ( ) * tiles . tileWidth ( ) )
69+ scene . cameraFollowSprite ( sprite_player_cam )
70+ }
5271scene . onOverlapTile ( SpriteKind . Player , assets . tile `flag_top` , function ( sprite , location ) {
5372 win ( )
5473} )
74+ scene . onOverlapTile ( SpriteKind . Player , assets . tile `from` , function ( sprite , location ) {
75+ tiles . placeOnRandomTile ( sprite_player , assets . tile `to0` )
76+ } )
5577function make_player ( ) {
5678 sprite_player = sprites . create ( assets . image `character` , SpriteKind . Player )
5779 sprite_player_cam = sprites . create ( assets . image `camera_reference` , SpriteKind . Player )
5880 sprite_player . setFlag ( SpriteFlag . AutoDestroy , true )
5981 sprite_player_cam . setFlag ( SpriteFlag . Ghost , true )
60- scene . cameraFollowSprite ( sprite_player_cam )
82+ sprite_player . ay = constants_gravity
6183}
6284scene . onOverlapTile ( SpriteKind . Player , assets . tile `bottom_spike` , function ( sprite , location ) {
6385 sprite . destroy ( effects . disintegrate , 100 )
6486} )
87+ function select_level ( ) {
88+ color . setPalette (
89+ color . Black
90+ )
91+ blockMenu . setColors ( 1 , 15 )
92+ blockMenu . showMenu ( [ "1" ] , MenuStyle . Grid , MenuLocation . BottomHalf )
93+ blockMenu . setControlsEnabled ( false )
94+ scene . setBackgroundColor ( 13 )
95+ tiles . setSmallTilemap ( tilemap `demo` )
96+ tiles . placeOnRandomTile ( sprite_player , assets . tile `start` )
97+ tiles . setTileAt ( tiles . getTilesByType ( assets . tile `start` ) [ 0 ] , assets . tile `transparency8` )
98+ tiles . coverAllTiles ( assets . tile `auto_jump` , assets . tile `blank` )
99+ tiles . coverAllTiles ( assets . tile `from` , assets . tile `blank` )
100+ tiles . coverAllTiles ( assets . tile `to0` , assets . tile `blank` )
101+ sprite_player . setVelocity ( 48 , 0 )
102+ scene . cameraFollowSprite ( sprite_player )
103+ fade ( false , 2000 , true )
104+ blockMenu . setControlsEnabled ( true )
105+ wait_for_select ( )
106+ fade ( true , 2000 , true )
107+ color . setPalette (
108+ color . Black
109+ )
110+ return parseFloat ( blockMenu . selectedMenuOption ( ) )
111+ }
65112function jump ( sprite : Sprite , gravity : number , tiles2 : number ) {
66113 if ( jumps < constants_max_jumps ) {
67114 sprite . vy = 0 - Math . sqrt ( 2 * ( gravity * ( tiles2 * tiles . tileWidth ( ) ) ) )
@@ -86,42 +133,51 @@ function fade (_in: boolean, duration: number, block: boolean) {
86133 color . pauseUntilFadeDone ( )
87134 }
88135}
136+ function wait_for_select ( ) {
137+ selected = false
138+ while ( ! ( selected ) ) {
139+ pause ( 100 )
140+ }
141+ blockMenu . closeMenu ( )
142+ }
89143sprites . onDestroyed ( SpriteKind . Player , function ( sprite ) {
90144 sprite_player_cam . setVelocity ( 0 , 0 )
91145 timer . after ( 2000 , function ( ) {
92146 game . over ( false )
93147 } )
94148} )
149+ blockMenu . onMenuOptionSelected ( function ( option , index ) {
150+ selected = true
151+ } )
95152function level_1 ( ) {
96153 tiles . setSmallTilemap ( tilemap `level_1` )
97154 scene . setBackgroundColor ( 13 )
98- tiles . placeOnRandomTile ( sprite_player , assets . tile `start` )
99- tiles . placeOnRandomTile ( sprite_player_cam , assets . tile `start` )
100- tiles . setTileAt ( tiles . getTilesByType ( assets . tile `start` ) [ 0 ] , assets . tile `transparency8` )
101- sprite_player . setVelocity ( 48 , 0 )
102- sprite_player_cam . setVelocity ( 48 , 0 )
103- sprite_player . ay = constants_gravity
104- create_status_bar ( sprite_player , tiles . tilemapColumns ( ) * tiles . tileWidth ( ) )
155+ prepare_level ( )
105156}
157+ let selected = false
106158let percent_traveled = 0
107159let sprite_progress_bar : StatusBarSprite = null
108160let sprite_player_cam : Sprite = null
109161let sprite_player : Sprite = null
162+ let in_game = false
110163let won = false
111164let jumps = 0
112165let constants_max_jumps = 0
113166let constants_tiles_high_jump = 0
114167let constants_gravity = 0
115- color . setPalette (
116- color . Black
117- )
118168constants_gravity = 300
119169constants_tiles_high_jump = 3
120170constants_max_jumps = 2
121171jumps = 0
122172won = false
173+ in_game = false
123174make_player ( )
124- level_1 ( )
175+ let selected_level = select_level ( )
176+ pause ( 1000 )
177+ if ( selected_level == 1 ) {
178+ level_1 ( )
179+ }
180+ in_game = true
125181fade ( false , 2000 , false )
126182game . onUpdate ( function ( ) {
127183 sprite_player . vx = 48
0 commit comments