Jump to content

Recommended Posts

This one includes the game and 7 demos. Tests fine with Classic99, JS99er and MAME. Also sold as a ROM Cartridge. If you have problems with the menu, the game is available on its own below.

 

nono8.bin

image.png.fd1c472c227e23eeda61eacceaf285f4.png

The game without the demos.

nonoc.bin


 


- - - - -
We'll make up a game based on Nonogram.

 

:)

 

Edited by sometimes99er
Video now unavailable. Put in another.
  • Like 2
Link to comment
https://forums.atariage.com/topic/179732-nonogram-game-released/
Share on other sites

 

 


Are you planning on using GM2?

 

Earlier this year I was looking around for something suitable with the Basic on Cart Contest (BoCC), and this (Nonogram) is one of those (ideas stored for later). This is an experiment from back then and obviously using GM1.

nonogram0002.png

This was loosely based on a my memory of the arcade Logic Pro and still photos of Picture Sudoku. Today I've looked at and played versions for GameBoy, Sega Master System, Flash and Java including one for my mobile phone.

icon_smile.gif

Edited by sometimes99er

More experiments with main game graphics. For now I'll stick with BM1 (standard graphic mode). Cursor being 3 double sized sprites - of which 2 should move along the axes (helping you out). Notice board shadow on the second one.

nonogram0005.gif

Most often I see board sizes in multiples of 5. We could have a few 5x5 for starters, then 10x10 and maybe 15x15, which by definition would need all characters on screen in height (15 cells, a max of 8 numbers and bottom line). Think I'll stick with 10x10 all through.

icon_smile.gif

Edited by sometimes99er

Looks cool! A few thoughts that come to mind when I look at it and think about the game-play:

 

* The drop shadow adds a little extra flare, but is common... but that "reflection" trick you do so well might look sweet!?

 

* Since the biggest pattern would be 15x15, that would easily fit in one 16x16 sprite, so it might be nice to display a "pixel size" version of the puzzle as you work on it.

 

* If you were to use GM2, maybe spice up the play field "Konami" style with 3D looking tiles (two colors each and a light-hint in the corner), etc.

 

* Have some music playing, and maybe sound effects.

 

* I wonder if there is some way to add short term rewards in the game, like the pattern matching games (think Bejeweled, etc.) where you get a "reward" every time you match 3 or more tiles. In a lot of books on games I have read, a common theme is to give the player short-term (every 10 to 30 seconds, which would be like getting a power up, matching 3 or more tiles, shooting the 5 enemies in front of you, etc.), medium-term goals (end of the level), and long-term goals (end of game).

 

Anyway, it is looking nice and I think it will be fun to play. Like I said above, I had never heard of the game, and I'm going to wait and play yours first.

Thanks for feedback. icon_smile.gif

Yeah, the drop shadow looks rather common, not all that slick, a bit retro actually, I even went and checked out the old "A-maze-ing" cartridge (PHM 3030), but that's something else.

nonogram0008.png

Eh, "reflection" like in mirror/water reflection ?

nonogram0009.png

Yep, some of the games I've looked at have a tiny version (image) displayed, and at a later stage in the individual puzzle, will often suggest what the hidden image might be - like if it's an umbrella or a house.

I think I'll try and stick with something simple and maybe/hopefully slick instead of something at first impressive, but maybe a bit distracting to the eye while playing. Well, actually the grid itself takes one color, so I think that would only leave room for vertical gradients. On the other hand, the grid could be left out, if all 3 "states" (free, taken and marked) help create the grid illusion. Again the cursor only moves in a grid. The "free" could be all one color, no grid. Alignment could then be a minor issue, feature or challenge. Might be an idea for different "sets" of colors and graphics.

I would definitely like some jolly music. Soundeffects might be an option. First priority though will be to get the game playable (at least meeting the deadline). Have to take a look at Tursi's music to soundlist tool (my own projects in this respect have stalled somewhat).

I think I might be adding a "time bar". When time runs out the puzzle will clear, and you have to start all over - very annoying. I could use the 9901 timer, but will use the frame update rate. This will have the effect of stressing 60Hz users more than 50Hz. Love that.

Other than that at least an end-of-game "show" would be nice.

icon_smile.gif

Edited by sometimes99er
I think I might be adding a "time bar". When time runs out the puzzle will clear, and you have to start all over - very annoying. I could use the 9901 timer, but will use the frame update rate. This will have the effect of stressing 60Hz users more than 50Hz. Love that.

 

There's a nice easy trick for this that works quite well -- code your game for 50hz, and if running at 60hz, just skip every 6th interrupt. This way you still run 50 times a second, and it's actually reliable enough even for audio playlists to sound correct.

 

The trick I've not seen on the TI is how to reliably detect which console you are on. I can only think that you'd have to count cycles between vertical blanks or something like that. :/

The trick I've not seen on the TI is how to reliably detect which console you are on. I can only think that you'd have to count cycles between vertical blanks or something like that. :/

Thanks for inputs. :)

 

I think it's automatically done in Spectra2 at startup - counting the cycles and making the information available for the game programmer. Very cool.

 

I like my twist on 60Hz users, but also I would like music to sound the same ...

 

:)

There's a nice easy trick for this that works quite well -- code your game for 50hz, and if running at 60hz, just skip every 6th interrupt. This way you still run 50 times a second, and it's actually reliable enough even for audio playlists to sound correct.

I suspect I'm not going to have sprites or scrolls moving nicely at exactly 1 pixel per frame in this game, and under any circumstance this trick is a very nice one. Once you know what you're running on (50 or 60Hz), it's a very nice and simple trick - surely one to remember. Also since we've got a nice share of 50Hz developers here at AtariAge/in Europe. - Myself though is only running emulation. I'd love to test on the iron, but sometimes you have to make choices. Wife would explode in my face if I bought one. She's smart and knows stuff - or I tell her too much ...

 

:)

Edited by sometimes99er
I think I might be adding a "time bar". When time runs out the puzzle will clear, and you have to start all over - very annoying. I could use the 9901 timer, but will use the frame update rate. This will have the effect of stressing 60Hz users more than 50Hz. Love that.

 

There's a nice easy trick for this that works quite well -- code your game for 50hz, and if running at 60hz, just skip every 6th interrupt. This way you still run 50 times a second, and it's actually reliable enough even for audio playlists to sound correct.

 

The trick I've not seen on the TI is how to reliably detect which console you are on. I can only think that you'd have to count cycles between vertical blanks or something like that. :/

 

You could conceivably detect which console you are using by utilizing the 9901 timer since it's rate is based on the system clock. It should be possible to wait for a VDP interrupt trigger, load the 9901 timer with a large number such as 2000, wait for another interrupt event and read out the timer. The 50 hertz machine should yield a smaller (the timer counts down) number in the 9901 register than the 60 hertz machine.

 

Your test has to use a cut off point that is approximate as the odds of nailing the edge of the event right every time are slim.

 

IIRC one 60 hertz VDP interrupt equals about 782 9901 clock ticks which would yield a readout of around 1218 (2000-782 ticks.) A 50 hertz cycle should yield a final result of around 1062 (2000-938.) Those numbers are far enough apart for a conclusive result in practical use. Using 1140 as the cut off point one could safely assume that a final timer result less than 1140 would indicate a 50 hertz machine and greater than 1140 would indicate a 60 hertz machine.

 

I don't think this method would be any better than counting cycles in a tight loop bound by the interrupts (which is what I think Retro did.) I also don't know for certain if this would work as I have never seen a 50 hertz machine but it oughta. ;-)

 

You could conceivable just shit can the VDP interrupt and use the 9901 timer all together. The SID player does this to avoid all the 50/60 conflict among other reasons.

 

 

 

I could post some code later if someone with a 50 hertz machine wants to test this theory out.

Edited by marc.hull

Using 1140 as the cut off point one could safely assume that a final timer result less than 1140 would indicate a 50 hertz machine and greater than 1140 would indicate a 60 hertz machine.

 

I could post some code later if someone with a 50 hertz machine wants to test this theory out.

Thanks for the values. Much appreciated. Would be nice if someone could test the very plausible theory. :)

There's a nice easy trick for this that works quite well -- code your game for 50hz, and if running at 60hz, just skip every 6th interrupt. This way you still run 50 times a second, and it's actually reliable enough even for audio playlists to sound correct.

I suspect I'm not going to have sprites or scrolls moving nicely at exactly 1 pixel per frame in this game, and under any circumstance this trick is a very nice one. Once you know what you're running on (50 or 60Hz), it's a very nice and simple trick - surely one to remember. Also since we've got a nice share of 50Hz developers here at AtariAge/in Europe. - Myself though is only running emulation. I'd love to test on the iron, but sometimes you have to make choices. Wife would explode in my face if I bought one. She's smart and knows stuff - or I tell her too much ...

 

Even for movement, it works better than you'd think. I used this trick on all of my Playstation 1 demos and never noticed anything (I run at 60hz, so I would be the one affected). ;) Classic99 can emulate 50hz and 60hz, but to be honest I don't know if 50hz still works. ;) At any rate, since 60hz definately does work, you can try it under emulation and still see what it looks like. :)

Classic99 can emulate 50hz and 60hz, but to be honest I don't know if 50hz still works.

I don't use it (50Hz in Classic99). Funny things happen to sound here at my end. I have a temporary example for you at YouTube ... /watch?v=t6_Kmt5IJBE

 

;)

 

Edit: Video removed.

Edited by sometimes99er

Classic99 can emulate 50hz and 60hz, but to be honest I don't know if 50hz still works.

I don't use it (50Hz in Classic99). Funny things happen to sound here at my end. I have a temporary example for you at YouTube ... /watch?v=t6_Kmt5IJBE

 

;)

 

hehe.. so I see!! oi! It sounds like the audio code is expecting a 60hz tick, rather than checking how much audio to generate. That doesn't surprise me, I intended the timing around that core to be temporary, but it has lasted much longer than I expected. I also considered just removing 50hz, but I think it will all work right when the fabled "timing rewrite of the VDP" happens. ;)

Just a bit of progress in the graphical department.

nonogram0014.gif

Notes
- Title added.
- Timer added.
- 10x10 board itself centered horizontally.
- Room for 5 numbers at the top and to the left.
- Colors adjusted.

Maybe I should just leave the cursor and aligners white instead flashing ...

icon_smile.gif

Edited by sometimes99er

Hehe, thanks Tursi. With this one I'm not trying to be impressive but rather a bit minimal and hopefully then also a bit slick. Not completely satisfied with color palette as is. Settled for a font. 0222 from the collection and modified somewhat. Light green on dark green for now. Think I will have something called Level and not Stage or Problem. Since cartridge format is not an option in this Rainy Day Game Contest, I changed my present setup to output EA3.

icon_smile.gif

Edited by sometimes99er

Palette changed mainly to get better contrast on numbers and grid. That's black numbers on dark green changed to black on light yellow, and painted areas changed from dark blue in black to dark green in black. Text was light green on dark green, but that has changed to black on light yellow.

icon_smile.gif

nonogram0017.png

Edited by sometimes99er

Title slightly changed. Top unchanged. Middle raised. Bottom more fat. I think the letter R looks better now.

nonogram0018.png

Preliminary routines

  • VDP registers, patterns, colors and lists.
  • Title draw.
  • Board clear.
  • Board details, tube and fluid fill.

:)

Edited by sometimes99er

Only implemented cursor flash routine. It's 6 frames of black, 3 frames of grey, 6 frames of white, 3 frames of grey and then looping. 4-2 is too fast. Object code attached.

 

Game

 

There are different approaches. A wrong move could give penalty on the timer. Others only check for the solution and no clue is given whether you're on right track or not. You might then end up in a situation with a solution you think is right but nothing happens. Your solution is then wrong, and often you would want to start all over. A reset option would be nice. Some adds time when you make a correct move. Some games have a progress percentage. Oh, and I should not forget the "pixel size" version suggested by matthew180 in post #7.

 

Puzzles

 

Maybe I should rename level and call it puzzle. I guess I'll store a puzzle in 10 words. Don't know if I'll name the puzzles - only revealed when completed. If you can't make out what the puzzle/image looks like, then the name should help you recognise. Instead of being able to go to any level, maybe you could enter the name, and then go to that puzzle or in fact the puzzle right after - a way of coming back to the game without a game state save (I don't want to save/update from assembler - too lazy - and I'm trying to keep an 8K cartridge output open as a after contest option).

 

Memory

 

I guess I'll keep the board state in VDP - on screen. A complete check against the solution - for whatever game options (see top) - would be like reading 10 rows from VDP - 100 bytes. Does not sound very efficient, but then I guess we have more than enough CPU time. Keeping in mind that I'd like to keep variables in ScratchPad (the 8K cart option). Maybe I should just keep the board state in ScratchPad ...

 

:)

 

 

 

Place NO in DSK1. E/A-cart, 3 Load and run, file name DSK1.NO, program name S.

Edited by sometimes99er

You can move the cursors around using joystick and/or keyboard. If you hold a direction or key it will start auto repeating. Auto wrapping too (move right all the time and you will reappear on the left). Keys are E, S, D and X ... Should I change that to W, A, S and D ?

Please test in both emulator(s) and on the real iron (I'm emulator only). And please do report any strange behavior. icon_ponder.gif

Routines added

  • Joystick and keyboard reading
  • User input repeat delay
  • Update cursors

icon_smile.gif

Edited by sometimes99er

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...