Gameboy Development Forum

Discussion about software development for the old-school Gameboys, ranging from the "Gray brick" to Gameboy Color
(Launched in 2008)

You are not logged in.

Ads

#1 2019-12-28 11:13:12

0x7f
Member
Registered: 2019-11-24
Posts: 57

New game: Genesis

Hi, I want to share with you the latest status of my project. Genesis is a shooter which is inspired by Solar Striker or Nemesis. The game features at the moment two levels and five different powerups.

Here are some screenshots:
https://drive.google.com/thumbnail?id=1DdH5qufGLxupkaBGfRYAi2eZaZAlP6M8 https://drive.google.com/thumbnail?id=1jLYr_mYrS4LgEe0V53yo9YCVnhnl7jKg https://drive.google.com/thumbnail?id=12t6CbqtLf11fxaC9alBiof3y5lX5GF8B

Here you can downlaod the demo:
https://drive.google.com/open?id=1M_QRm … gEzlEYz0Yw

I would be glad about some feedback!

Last edited by 0x7f (2019-12-29 07:52:09)

Offline

 

#2 2020-01-01 18:03:20

h0tp3ngu1n
Member
Registered: 2019-08-18
Posts: 25

Re: New game: Genesis

Sorry I don't have any feedback, but awesome game so far!

Offline

 

#3 2020-01-02 06:54:14

0x7f
Member
Registered: 2019-11-24
Posts: 57

Re: New game: Genesis

Hi h0tp3ngu1n,
thanks. Do you find the "one hit game over" concept is to hard? I thought about a life system which is quite common for such games but since the difficulty is not high I decided to make it this way.

Offline

 

#4 2020-01-02 07:57:44

h0tp3ngu1n
Member
Registered: 2019-08-18
Posts: 25

Re: New game: Genesis

I think it works. I personally find it to be hard, but it's not frustrating. It feels like an arcade game, where you constantly lose and keep putting more quarters in until you eventually beat it (or lose all your money trying, lol)

Offline

 

#5 2020-01-04 07:52:29

Jonas
Member
From: Frankfurt, Germany
Registered: 2016-06-06
Posts: 111
Website

Re: New game: Genesis

Looks good and very much like a Solar Striker clone. I'm working on a similar project but don't have anything to show yet.

I think you should give the player more than one life simply because that's what you expect when you play a game of this kind.

Also, I think the difficulty is not very challenging. I'm normally very bad when it comes to playing shmups, but in this case it took me only a few tries to beat stage 1. When I arrived at stage 2, I beat it in my first attempt (including the boss).

Anyways, well done and keep working on it! smile

Last edited by Jonas (2020-01-04 18:47:17)

Offline

 

#6 2020-01-04 10:03:15

Ardis
Member
From: USA
Registered: 2019-06-06
Posts: 48
Website

Re: New game: Genesis

One hit game overs are fine as long as it feels like the game is playing fair. The learning curve set by presenting different enemy behaviors one at a time helps a lot with that.


Also known as Arvex in other places.

Interceptor (Demo)
https://arvex.itch.io/interceptor

Offline

 

#7 2020-01-05 13:59:23

0x7f
Member
Registered: 2019-11-24
Posts: 57

Re: New game: Genesis

Hi Jonas,

yes, because of the missing life system I wanted to make the game not too hard. The coming stages will be more difficult. It also depends on the powerups you get. With a good weapon it is easy to beat the boss.

Offline

 

#8 2020-01-06 18:01:54

bbbbbr
Member
Registered: 2019-03-04
Posts: 101

Re: New game: Genesis

Thanks for sharing the game!

The gameplay and movement feel good. They have the the right speed and pace. The graphics look good too.

A pause feature would be nice. smile

A shield power-up can be nice middle ground in a one-life game.

Offline

 

#9 2020-01-07 09:55:54

0x7f
Member
Registered: 2019-11-24
Posts: 57

Re: New game: Genesis

Hi bbbbbr,

thanks! I already have implemented pause feature in the latest version. The shield powerup is a good idea. Maybe I will add this...

Offline

 

#10 2020-02-11 09:19:09

0x7f
Member
Registered: 2019-11-24
Posts: 57

Re: New game: Genesis

Hi,

I completed Genesis and added the following features:

- 4 levels
- New title screen with high score
- HUD with shield energy, weapon energy and score
- New shield powerup

Here you can download the final ROM:
https://drive.google.com/open?id=1cItIW … bCpQDkGe43

I programmed the game with 100% GBDK. Hope you like it!

Offline

 

#11 2020-02-13 16:33:17

bbbbbr
Member
Registered: 2019-03-04
Posts: 101

Re: New game: Genesis

Great update, the gradual increase in difficulty keeps it engaging.

I'm always interested in process and tools- if you have anything you'd like to share about what you used to make the game or how it was made, it would be interesting to hear.

Last edited by bbbbbr (2020-02-13 16:35:34)

Offline

 

#12 2020-02-13 16:55:16

Jonas
Member
From: Frankfurt, Germany
Registered: 2016-06-06
Posts: 111
Website

Re: New game: Genesis

Very well done and definitely an improvement compared to the first version! Is this the final version or are you still working on it?

Offline

 

#13 2020-02-14 09:02:31

0x7f
Member
Registered: 2019-11-24
Posts: 57

Re: New game: Genesis

Hi,

I just used the Gameboy Tile Designer and Map Builder together with GDBK-N and the latest SDCC 3.9.0. To fix the banking problem of GBDK-N I used the standard GBDK linker instead of the one comming with GBDK-N (thanks to Zalo for the hint). Let me know if you want to know any programming details.

Yes, the game is finished and I stopped working on it.

Offline

 

#14 2020-02-16 15:14:32

Jonas
Member
From: Frankfurt, Germany
Registered: 2016-06-06
Posts: 111
Website

Re: New game: Genesis

I gave it another try over the weekend and it's really entertaining to play.

In the first stage it's a bit too easy to dodge the enemies and bullets, but  I keep dying in the third stage. That's where I regularly die in Solar Striker, so the overall difficulty seems to be just right.

I like that the enemy projectiles aim very precisely, maybe you could give us some detail on how that is done.

Offline

 

#15 2020-02-17 13:27:35

0x7f
Member
Registered: 2019-11-24
Posts: 57

Re: New game: Genesis

Hi Jonas, sure.

the enemy shots are generated using the bresenham's line algorithm by drawing a line from the enemy to the player. The algorithm uses only additions and a division by two which can be done with a right shift.

Offline

 

#16 2020-02-20 07:03:21

Jonas
Member
From: Frankfurt, Germany
Registered: 2016-06-06
Posts: 111
Website

Re: New game: Genesis

Thanks! Looked it up and it seems to be a clever choice. I might have to solve the same problem for the game I'm working on, so it's good to know.

Offline

 

#17 2020-04-14 13:48:32

0x7f
Member
Registered: 2019-11-24
Posts: 57

Re: New game: Genesis

Here is a longplay for Genesis.

https://www.youtube.com/watch?v=EVlsc2Z804Q

Last edited by 0x7f (2020-04-14 13:51:21)

Offline

 

#18 2020-04-28 08:02:45

Zalo
Member
From: Spain
Registered: 2016-07-26
Posts: 103
Website

Re: New game: Genesis

The performance is really cool
No source code?

Offline

 

#19 2020-04-29 11:52:20

0x7f
Member
Registered: 2019-11-24
Posts: 57

Re: New game: Genesis

Offline

 

#20 2020-04-30 01:07:30

Zalo
Member
From: Spain
Registered: 2016-07-26
Posts: 103
Website

Re: New game: Genesis

thanks!

Offline

 

#21 2020-05-06 01:12:15

cybjo
New member
Registered: 2020-05-06
Posts: 1

Re: New game: Genesis

just played, pretty fun game.

Wish I had more lives.

Offline

 

#22 2020-05-06 13:03:42

0x7f
Member
Registered: 2019-11-24
Posts: 57

Re: New game: Genesis

big_smile The source code is available in the link above... If you want you can reduce the damage and compile it again.

Last edited by 0x7f (2020-05-06 13:04:22)

Offline

 

#23 2020-05-20 17:32:28

toxa
Member
Registered: 2020-02-13
Posts: 279

Re: New game: Genesis

calculated the profiling statistics... impressed!

Code:

_main:_init_registers                                             MIN:      68 AVG:     68.00 95P:      68 MAX:      68   TOTAL: 0x0000000000000044 NCALLS: 1
_main:_init_title:_clear_sprite                                   MIN:     181 AVG:    181.00 95P:     181 MAX:     181   TOTAL: 0x0000000000001c48 NCALLS: 40
_main:_init_title:_set_music                                      MIN:    1567 AVG:   1567.00 95P:    1567 MAX:    1567   TOTAL: 0x000000000000061f NCALLS: 1
_main:_init_title                                                 MIN:   33964 AVG:  33964.00 95P:   33964 MAX:   33964   TOTAL: 0x00000000000084ac NCALLS: 1
_main:_update_title:_play_music                                   MIN:      25 AVG:     64.63 95P:     208 MAX:     406   TOTAL: 0x00000000000057db NCALLS: 348
_main:_update_title:_play_sound                                   MIN:      28 AVG:     35.47 95P:      28 MAX:     181   TOTAL: 0x0000000000003039 NCALLS: 348
_main:_update_title                                               MIN:     104 AVG:    474.86 95P:     837 MAX:   96966   TOTAL: 0x0000000000028584 NCALLS: 348
_main:_lcd_isr                                                    MIN:       8 AVG:      8.00 95P:       8 MAX:       8   TOTAL: 0x0000000000005a18 NCALLS: 2883
_main:_vbl_isr                                                    MIN:       8 AVG:      8.00 95P:       8 MAX:       8   TOTAL: 0x0000000000005a10 NCALLS: 2882
_main:_update_title:_set_sound                                    MIN:      89 AVG:     89.00 95P:      89 MAX:      89   TOTAL: 0x0000000000000059 NCALLS: 1
_main:_update_title:_init_stage:_lcd_isr                          MIN:       8 AVG:      8.00 95P:       8 MAX:       8   TOTAL: 0x0000000000000028 NCALLS: 5
_main:_update_title:_init_stage:_vbl_isr                          MIN:       8 AVG:      8.00 95P:       8 MAX:       8   TOTAL: 0x0000000000000028 NCALLS: 5
_main:_update_title:_init_stage:_get_sprite                       MIN:      53 AVG:    182.50 95P:     312 MAX:     312   TOTAL: 0x00000000000005b4 NCALLS: 8
_main:_update_title:_init_stage:_update_hud                       MIN:     951 AVG:    966.33 95P:     988 MAX:     988   TOTAL: 0x0000000000000b53 NCALLS: 3
_main:_update_title:_init_stage:_stop_music                       MIN:      26 AVG:     26.00 95P:      26 MAX:      26   TOTAL: 0x000000000000001a NCALLS: 1
_main:_update_title:_init_stage:_set_music                        MIN:    1567 AVG:   1567.00 95P:    1567 MAX:    1567   TOTAL: 0x000000000000061f NCALLS: 1
_main:_update_title:_init_stage                                   MIN:   95038 AVG:  95038.00 95P:   95038 MAX:   95038   TOTAL: 0x000000000001733e NCALLS: 1
_main:_update_stage:_update_player                                MIN:      28 AVG:    284.22 95P:     441 MAX:    2602   TOTAL: 0x00000000000afd4c NCALLS: 2534
_main:_update_stage:_update_player_shots                          MIN:     301 AVG:    431.35 95P:     715 MAX:    1136   TOTAL: 0x000000000010adab NCALLS: 2534
_main:_update_stage:_update_powerup                               MIN:      10 AVG:     16.87 95P:      23 MAX:     223   TOTAL: 0x000000000000a703 NCALLS: 2534
_main:_update_stage:_update_enemys                                MIN:     301 AVG:   1199.40 95P:    3369 MAX:    4538   TOTAL: 0x00000000002e6035 NCALLS: 2534
_main:_update_stage:_update_big_enemy                             MIN:      10 AVG:     10.00 95P:      10 MAX:      10   TOTAL: 0x00000000000062fc NCALLS: 2534
_main:_update_stage:_update_enemy_shots                           MIN:     301 AVG:    301.00 95P:     301 MAX:     301   TOTAL: 0x00000000000ba36e NCALLS: 2534
_main:_update_stage:_update_explosions                            MIN:     301 AVG:    321.19 95P:     402 MAX:    1409   TOTAL: 0x00000000000c6b42 NCALLS: 2534
_main:_update_stage:_update_collisions                            MIN:     596 AVG:    960.32 95P:    1780 MAX:    7941   TOTAL: 0x00000000002521ac NCALLS: 2534
_main:_update_stage:_play_music                                   MIN:      25 AVG:     82.62 95P:     317 MAX:     419   TOTAL: 0x00000000000331d1 NCALLS: 2534
_main:_update_stage:_play_sound                                   MIN:      28 AVG:     69.09 95P:     181 MAX:     313   TOTAL: 0x000000000002abea NCALLS: 2534
_main:_update_stage                                               MIN:    2125 AVG:   4012.40 95P:    7279 MAX:   53003   TOTAL: 0x00000000009b3422 NCALLS: 2535
_main:_update_stage:_clear_sprite                                 MIN:     181 AVG:    181.00 95P:     181 MAX:     181   TOTAL: 0x000000000000043e NCALLS: 6
_main:_update_stage:_new_enemy:_get_sprite                        MIN:      53 AVG:    208.50 95P:     460 MAX:     534   TOTAL: 0x0000000000003c45 NCALLS: 74
_main:_update_stage:_new_enemy                                    MIN:     869 AVG:   1197.73 95P:    1744 MAX:    1892   TOTAL: 0x000000000000ad1c NCALLS: 37
_main:_update_stage:_update_enemys:_get_mov_data                  MIN:     113 AVG:    113.00 95P:     113 MAX:     113   TOTAL: 0x0000000000051a90 NCALLS: 2960
_main:_update_stage:_update_player:_set_sound                     MIN:      89 AVG:     89.00 95P:      89 MAX:      89   TOTAL: 0x00000000000016f2 NCALLS: 66
_main:_update_stage:_update_player:_new_player_shot:_get_sprite   MIN:      53 AVG:    178.58 95P:     423 MAX:     497   TOTAL: 0x0000000000002e0a NCALLS: 66
_main:_update_stage:_update_player:_new_player_shot               MIN:     443 AVG:    586.17 95P:     821 MAX:     893   TOTAL: 0x000000000000971f NCALLS: 66
_main:_update_stage:_update_collisions:_clear_sprite              MIN:     181 AVG:    181.00 95P:     181 MAX:     181   TOTAL: 0x00000000000037db NCALLS: 79
_main:_update_stage:_update_collisions:_new_explosion:_get_sprite MIN:      53 AVG:    141.03 95P:     460 MAX:     497   TOTAL: 0x0000000000001ff4 NCALLS: 58
_main:_update_stage:_update_collisions:_new_explosion:_set_sound  MIN:      89 AVG:     89.00 95P:      89 MAX:      89   TOTAL: 0x0000000000000a15 NCALLS: 29
_main:_update_stage:_update_collisions:_new_explosion             MIN:     850 AVG:    997.14 95P:    1629 MAX:    1664   TOTAL: 0x00000000000070f5 NCALLS: 29
_main:_update_stage:_update_collisions:_update_hud                MIN:     887 AVG:    950.09 95P:    1007 MAX:    1019   TOTAL: 0x0000000000007a79 NCALLS: 33
_main:_update_stage:_update_explosions:_clear_sprite              MIN:     181 AVG:    181.00 95P:     181 MAX:     181   TOTAL: 0x0000000000002902 NCALLS: 58
_main:_update_stage:_update_player_shots:_clear_sprite            MIN:     181 AVG:    181.00 95P:     181 MAX:     181   TOTAL: 0x00000000000022a5 NCALLS: 49
_main:_update_stage:_update_collisions:_set_sound                 MIN:      89 AVG:     89.00 95P:      89 MAX:      89   TOTAL: 0x0000000000000321 NCALLS: 9
_main:_update_stage:_update_collisions:_random                    MIN:      55 AVG:     55.00 95P:      55 MAX:      55   TOTAL: 0x00000000000000a5 NCALLS: 3
_main:_update_stage:_update_collisions:_new_powerup:_get_sprite   MIN:     423 AVG:    478.50 95P:     534 MAX:     534   TOTAL: 0x000000000000077a NCALLS: 4
_main:_update_stage:_update_collisions:_new_powerup               MIN:      11 AVG:    980.33 95P:    1539 MAX:    1539   TOTAL: 0x0000000000000b7d NCALLS: 3
_main:_update_stage:_update_player:_update_hud                    MIN:     924 AVG:    974.91 95P:    1028 MAX:    1030   TOTAL: 0x000000000000a790 NCALLS: 44
_main:_update_stage:_update_enemys:_clear_sprite                  MIN:     181 AVG:    181.00 95P:     181 MAX:     181   TOTAL: 0x0000000000000cba NCALLS: 18
_main:_update_stage:_get_sprite                                   MIN:      53 AVG:    182.50 95P:     312 MAX:     312   TOTAL: 0x00000000000005b4 NCALLS: 8
_main:_update_stage:_lcd_isr                                      MIN:       8 AVG:      8.00 95P:       8 MAX:       8   TOTAL: 0x0000000000000008 NCALLS: 1
_main:_update_stage:_vbl_isr                                      MIN:       8 AVG:      8.00 95P:       8 MAX:       8   TOTAL: 0x0000000000000008 NCALLS: 1
_main:_update_stage:_update_highscore                             MIN:     123 AVG:    123.00 95P:     123 MAX:     123   TOTAL: 0x000000000000007b NCALLS: 1
_main:_update_stage:_init_title:_clear_sprite                     MIN:     181 AVG:    181.00 95P:     181 MAX:     181   TOTAL: 0x0000000000001c48 NCALLS: 40
_main:_update_stage:_init_title:_set_music                        MIN:    1567 AVG:   1567.00 95P:    1567 MAX:    1567   TOTAL: 0x000000000000061f NCALLS: 1
_main:_update_stage:_init_title                                   MIN:   33964 AVG:  33964.00 95P:   33964 MAX:   33964   TOTAL: 0x00000000000084ac NCALLS: 1

ps: added 95 percentile (95% of calls are faster than value)

Last edited by toxa (2020-05-21 04:58:54)

Offline

 

#24 2020-05-24 08:58:41

gameboy79
New member
Registered: 2020-04-10
Posts: 9

Re: New game: Genesis

I played it and it is really fun, great job! smile

One question (before I dive into the sources): How do you layout the level (enemy spawning in particular)? Is it random or are there any spawn points?

Offline

 

#25 2020-05-24 12:48:01

0x7f
Member
Registered: 2019-11-24
Posts: 57

Re: New game: Genesis

Hi, no the levels are not random. I have for each level a big array holding all the information. In detail one enemy is represented by 6 bytes in the array:

1 Counter defining the number of frames before the enemy is generated
2 Action
3 X position
4 Y position
5 Type
6 Move option

A stage_counter is load with the first byte and then decreased every frame. When the stage_counter reaches zero the enemy is generated. You can find the mechanics in the update_stage function.

Last edited by 0x7f (2020-05-24 13:28:32)

Offline

 

Board footer

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson