Posté le 07/11/2016 à 14:05 Membre depuis le 21/03/2014, 187 messages
Success #alandon# ! Thanks to all who have helped!
Now, I have shrinked the tilemap to my desired grid size (12x12 pix) and thanks to HPMAN's code snippet I can swap out the shrinked tiles with tiles from a different image which is located in the C1/C2 ROMs (but not loaded into VRAM before).

During experimenting, I have found out that vertical shrinking is done by the system by up-scaling or down-scaling of the 16th "pixel line" of the 16th tile (marked in orange color in the following image/video).
That means, if you want to shrink a sprite with a tile-size of 16 or more, you have to split the image and re-assemble it again at the "repeating point" between tile 1 and tile 32 to avoid pixel distortion at the 16th line of tile 16.

Here is a short video which shows the vertical shrinking behavior:


And here are the two images without shadows and with shadows:
background_scale.png background_scale_dark.png

And the code:
void load_background()
{
	short i=0;
	short x=44;
	short y=184;
	short exit_loop=0;

	uint *BGscaleDarkMap; // setup tilemap pointer
	picture background_1;

	volMEMWORD(0x401ffe)=0x0000; // set BG color to black

	initGfx();
	clearFixLayer();
	clearSprites(1, 381);

	palJobPut(1, hypernoid_font_Palettes.palCount, hypernoid_font_Palettes.data); // fix layer palette

	// set up background sprite
	pictureInit(&background_1, &background_scale, 100, 24, x, y, FLIP_NONE); // 19 sprites, 2 palettes
	palJobPut(24, background_scale_Palettes.palCount, background_scale_Palettes.data);

	// load palette of source image
	palJobPut(26, background_scale_dark_Palettes.palCount, background_scale_dark_Palettes.data); // 2 palettes

	SCClose();

	// assign source image tilemap to pointer
	BGscaleDarkMap=(uint*)background_scale_dark.maps[0];

	do
	{
		waitVBlank();

		fixPrintf(2,3,1,3,"i: %05d", i);
		fixPrintf(2,4,1,3,"y: %05d", y);

		p1=volMEMBYTE(P1_CURRENT);
		ps=volMEMBYTE(PS_CURRENT);

		if(p1&JOY_A){if(i<64) i+=1;}
		if(p1&JOY_B){if(i>-191)i-=1;}
		if(p1&JOY_D) exit_loop=1;

		if(p1&JOY_UP)   {y-=1;}
		if(p1&JOY_DOWN) {y+=1;}

		pictureSetPos(&background_1, x, y);

		SCClose();

		// manipulate tilemap -> SCB1 VRAM $0000-$6FFF
		// VRAM SC1 start + start_sprite_no + (64*sprite_no_diff) + start_tile_no + (2*tile_no), tile_count, source_img_palette_no, &source_img_map[18+(32*sprite_no_diff) + tile_no]

		// smiley eyes

		SC1Put(0x0000+6400+(64*7)+36+(2*5),0x01, 26, &BGscaleDarkMap[18+(32*7)+5]); 	// sprite 107 tile 7 = shadow 49 left
		SC1Put(0x0000+6400+(64*8)+36+(2*5),0x01, 26, &BGscaleDarkMap[18+(32*8)+5]); 	// sprite 108 tile 7 = shadow 49 right

		SC1Put(0x0000+6400+(64*7)+36+(2*6),0x01, 26, &BGscaleDarkMap[18+(32*7)+6]); 	// sprite 107 tile 8 = shadow 58 left
		SC1Put(0x0000+6400+(64*8)+36+(2*6),0x01, 26, &BGscaleDarkMap[18+(32*8)+6]); 	// sprite 108 tile 8 = shadow 58 right

		SC1Put(0x0000+6400+(64*7)+36+(2*7),0x01, 26, &BGscaleDarkMap[18+(32*7)+7]); 	// sprite 107 tile 9 = shadow 67 left
		SC1Put(0x0000+6400+(64*8)+36+(2*7),0x01, 26, &BGscaleDarkMap[18+(32*8)+7]); 	// sprite 108 tile 9 = shadow 67 right

		SC1Put(0x0000+6400+(64*11)+36+(2*5),0x01, 26, &BGscaleDarkMap[18+(32*11)+5]); 	// sprite 111 tile 7 = shadow 51 left
		SC1Put(0x0000+6400+(64*12)+36+(2*5),0x01, 26, &BGscaleDarkMap[18+(32*12)+5]); 	// sprite 112 tile 7 = shadow 51 right

		SC1Put(0x0000+6400+(64*11)+36+(2*6),0x01, 26, &BGscaleDarkMap[18+(32*11)+6]); 	// sprite 111 tile 8 = shadow 60 left
		SC1Put(0x0000+6400+(64*12)+36+(2*6),0x01, 26, &BGscaleDarkMap[18+(32*12)+6]); 	// sprite 112 tile 8 = shadow 60 right

		SC1Put(0x0000+6400+(64*11)+36+(2*7),0x01, 26, &BGscaleDarkMap[18+(32*11)+7]); 	// sprite 111 tile 9 = shadow 69 left
		SC1Put(0x0000+6400+(64*12)+36+(2*7),0x01, 26, &BGscaleDarkMap[18+(32*12)+7]); 	// sprite 112 tile 9 = shadow 69 right

		// smiley mouth

		SC1Put(0x0000+6400+(64*3)+36+(2*9),0x01, 26, &BGscaleDarkMap[18+(32*3)+9]); 	// sprite 103 tile 11 = shadow 83 left
		SC1Put(0x0000+6400+(64*4)+36+(2*9),0x01, 26, &BGscaleDarkMap[18+(32*4)+9]); 	// sprite 104 tile 11 = shadow 83 right

		SC1Put(0x0000+6400+(64*5)+36+(2*10),0x01, 26, &BGscaleDarkMap[18+(32*5)+10]); 	// sprite 105 tile 12 = shadow 93 left
		SC1Put(0x0000+6400+(64*6)+36+(2*10),0x01, 26, &BGscaleDarkMap[18+(32*6)+10]); 	// sprite 106 tile 12 = shadow 93 right

		SC1Put(0x0000+6400+(64*7)+36+(2*11),0x01, 26, &BGscaleDarkMap[18+(32*7)+11]); 	// sprite 107 tile 13 = shadow 103 left
		SC1Put(0x0000+6400+(64*8)+36+(2*11),0x01, 26, &BGscaleDarkMap[18+(32*8)+11]); 	// sprite 108 tile 13 = shadow 103 right

		SC1Put(0x0000+6400+(64*9)+36+(2*11),0x01, 26, &BGscaleDarkMap[18+(32*9)+11]);	// sprite 109 tile 13 = shadow 104 left
		SC1Put(0x0000+6400+(64*10)+36+(2*11),0x01, 26, &BGscaleDarkMap[18+(32*10)+11]);	// sprite 110 tile 13 = shadow 104 right

		SC1Put(0x0000+6400+(64*11)+36+(2*11),0x01, 26, &BGscaleDarkMap[18+(32*11)+11]);	// sprite 111 tile 13 = shadow 105 left
		SC1Put(0x0000+6400+(64*12)+36+(2*11),0x01, 26, &BGscaleDarkMap[18+(32*12)+11]);	// sprite 112 tile 13 = shadow 105 right

		SC1Put(0x0000+6400+(64*13)+36+(2*10),0x01, 26, &BGscaleDarkMap[18+(32*13)+10]);	// sprite 113 tile 12 = shadow 97 left
		SC1Put(0x0000+6400+(64*14)+36+(2*10),0x01, 26, &BGscaleDarkMap[18+(32*14)+10]);	// sprite 114 tile 12 = shadow 97 right

		SC1Put(0x0000+6400+(64*15)+36+(2*9),0x01, 26, &BGscaleDarkMap[18+(32*15)+9]);	// sprite 115 tile 11 = shadow 89 left
		SC1Put(0x0000+6400+(64*16)+36+(2*9),0x01, 26, &BGscaleDarkMap[18+(32*16)+9]);	// sprite 116 tile 11 = shadow 89 right

		 // shrink tilemap to 12x12 tiles  -> SCB2 VRAM $8000-$81FF shrinking coefficients

		SC234Put(0x8000+100, 0x0BBF+i); // shrink sprite no. 100
		SC234Put(0x8000+101, 0x0BBF+i); // shrink sprite no. 101
		SC234Put(0x8000+102, 0x0BBF+i); // shrink sprite no. 102
		SC234Put(0x8000+103, 0x0BBF+i); // shrink sprite no. 103
		SC234Put(0x8000+104, 0x0BBF+i); // shrink sprite no. 104
		SC234Put(0x8000+105, 0x0BBF+i); // shrink sprite no. 105
		SC234Put(0x8000+106, 0x0BBF+i); // shrink sprite no. 106
		SC234Put(0x8000+107, 0x0BBF+i); // shrink sprite no. 107
		SC234Put(0x8000+108, 0x0BBF+i); // shrink sprite no. 108
		SC234Put(0x8000+109, 0x0BBF+i); // shrink sprite no. 109
		SC234Put(0x8000+110, 0x0BBF+i); // shrink sprite no. 110
		SC234Put(0x8000+111, 0x0BBF+i); // shrink sprite no. 111
		SC234Put(0x8000+112, 0x0BBF+i); // shrink sprite no. 112
		SC234Put(0x8000+113, 0x0BBF+i); // shrink sprite no. 113
		SC234Put(0x8000+114, 0x0BBF+i); // shrink sprite no. 114
		SC234Put(0x8000+115, 0x0BBF+i); // shrink sprite no. 115
		SC234Put(0x8000+116, 0x0BBF+i); // shrink sprite no. 116
		SC234Put(0x8000+117, 0x0BBF+i); // shrink sprite no. 117
		SC234Put(0x8000+118, 0x0BBF+i); // shrink sprite no. 118

	}while(!(exit_loop==1));
}
Posté le 07/11/2016 à 20:06 Membre depuis le 05/04/2016, 50 messages
Nice. I'm still not sure why you want to swap out tiles for the shadow though, you can save save tile space by simply using an alternate palette (with darker colors) on the same bg tile. Maybe thats a limitation of the library your using though.
Posté le 08/11/2016 à 08:46Edité par NeoHomeBrew le 17/07/2017 à 17:05 Membre depuis le 21/03/2014, 187 messages
Hi Raz,
I would prefer to swap out the image because it gives me the opportunity to create a "softer look" at the corners and the edges.
I haven't added the new background shadows to my game engine yet, hopefully image swap will be fast enough...
Here is a comparison picture - left side image swap, right side palette swap (scaled 2x):

background_shadows.png
Posté le 08/11/2016 à 09:09 Membre depuis le 28/01/2003, 160 messages
You don't need to rework tilemap every frame as you do in the demo, just swap in once and you are good to go. Same with shrinking.
Posté le 08/11/2016 à 12:22 Membre depuis le 05/04/2016, 50 messages
Ok, that makes sence.
Posté le 20/12/2016 à 20:23 Membre depuis le 21/03/2014, 187 messages
Now the block shadow technique has been integrated into the game engine #hamjump#
Also, I have added:
- two new backgrounds + palette swaps for the 2nd and 3rd boss
- new backgrounds for the title, ranking, continue and game-over screen
- auto-animated checkerboard shadows for all three bosses

Would be interested in your opinions about the two new stage designs because I am a bit unsure... are they maybe too colorful or not?

Posté le 21/12/2016 à 13:58 Membre depuis le 05/04/2016, 50 messages
Looking very good. I like the new backgrounds, There may be no need to change the bg's behind the texts though or alter the border colors.
Posté le 22/12/2016 à 22:45 Membre depuis le 13/08/2014, 17 messages
My 2 cents:

It seems a bit repetitive.
Arkanoid is a very well known game, and you captures its spirit very well in my opinion.
Sure is not exactly the same, but you got to find some more "gimmick" to make your game really interesting.

Also you'd be better to avoid same graphics between stages, like the bricks. Simple palette switch looks "cheap" to the eye of most gamers.

In conclusion I think that this game has potential, and it's a very impressive work as first game (i suppose...).

Keep it up!

A final question: I got a problem with the NeoSoundBuilder, which has been shared. My samples once adapted to "16 Bit PCM Signed Mono 18,500hz" as requested, sounds a bit "cracky" in some part.
Your sound is absolutely smooth.

Do u have any suggestion?
Posté le 22/12/2016 à 23:15 Membre depuis le 07/07/2015, 117 messages
@NeoHomeBrew:
your game is awesome, the block shadow technique you added looks very good! top
but Black_Jack is right, simple palette switch looks a bit cheap. try to match your new and nice looking backgrounds!
maybe you can add more 'special' bricks?
- explosive bricks (needs ~10 hits but clears a larger area.
- jelly bricks, ball goes through but with a different angle than before (like light through prism)
- moving bricks, needs 3 hits but with every hit it moves down (or up/left/right?) one field.
- not destroyable bricks
- doors and switches

@Black_Jack:
just lower the wav-volume a bit.
Posté le 24/12/2016 à 12:13 Membre depuis le 21/03/2014, 187 messages
Thanks a lot for your toughts and suggestions guys smile

I am glad that you also think that the new color palettes for the regular and the 2nd & 3rd boss stages fits into the the game, I was afraid that the saturated colors are might look to "candy" .
Yes, I know just do simple palette swaps and re-using the same graphics is lame - it was just a placeholder to show the current color concept and that the new shadow technique is working.
I have planned to create dedicated graphics for the outer frame, the eye blocks and the boss entrance door matching to each boss design. But this will take a lot of time and I wanted to
release a last demo video this year.

@Black_Jack
Take care not to play more than six sounds/music tracks at the same time, exceeding the 6 ADPCM-A channels will cause a cracking sound too.
@Blastar
Thank you for your special blocks suggestions, these are great ideas to make the gameplay in regular stages more interesting, will integrate these into the game in the next year.
@ all
Have a nice christmas & I wish you a good start into 2017! christmas
Posté le 27/12/2016 à 04:09 Membre depuis le 01/07/2016, 3 messages
Superb work! I can't wait to preorder copies for my MVS and Neo-Geo CD system!
avatar
Posté le 27/12/2016 à 10:24 Membre depuis le 11/03/2013, 88 messages
Great NeoHomebrew! These efforts have produced some pretty impressive results #bien#
Posté le 20/04/2017 à 14:01Edité par NeoHomeBrew le 22/04/2017 à 04:02 Membre depuis le 21/03/2014, 187 messages
NeoTurfMasta and HPMAN have provided me their spinner boards and thanks to them I am happy to announce that Hypernoid can now
be played with spinner controls. I have recorded a short comparison video to show how which spinner board has worked out for me.
Warning: This is my first commented video, so please don't judge me too hard on my strange (German accent) english... triroll

Posté le 20/04/2017 à 15:53 Membre depuis le 28/01/2003, 160 messages
Very nice, are you using raw values for movement after all ?

Santaball spinner version incoming? cool


Board also works with pop'n bounce BTW. smile
Posté le 20/04/2017 à 19:08 Membre depuis le 25/09/2004, 19681 messages
Love it !
avatar@originalfei
In pixels we trust.
ORE WO DARE DA TO OMOTTE YAGARU !
Posté le 20/04/2017 à 20:31Edité par NeoHomeBrew le 22/04/2017 à 04:05 Membre depuis le 21/03/2014, 187 messages
Hi HPMAN,

your spinner board works absolutly great with raw values combined with the SpinTrak spinner (http://www.ultimarc.com/SpinTrak.htm) and also with the TurboTwist2 spinner (http://groovygamegear.com/webstore/index.php?main_page=index&cPath=86). Both provide 1200 impulses per 360 degree revolution which turns out to be perfect to move the paddle over 80% the playfield without being forced to release the spinner knob. That means, it works right "out of the box", no translation table needed! It is hard to decide which spinner is better, I like the SpinTrak a little bit more than the TurboTwist2 because of the shorter height (55 mm vs. 85 mm including the fly-weight) and the bigger and more heavier spinner knob.

Yes, SantaBall with spinner support would be great but I am a little afraid to touch that old code again because then I would re-program everything wink But I would do it if you decide to release your spinner board to the public.
Sorry for not to mention in the video that your spinner board also works perfectly with Pop'n Bounce in 7-bit spinner mode mur
Posté le 21/04/2017 à 00:06 Membre depuis le 06/09/2002, 18645 messages
Super nouvelle,
Bon ben M. HPman il va falloir ce mettre à la production ! XD
avatarLa Neo Geo CD à son site (en tout cas elle essaye...): http://neogeocdworld.info/
Le forum de la Neo Geo sur Yaronet: forums/264

Un petit site sur l'Atari Falcon avec plein de trucs bon pour votre poussin: http://falcon.ti-fr.com/
Posté le 22/04/2017 à 03:25 Membre depuis le 21/03/2014, 187 messages
Just want to add two comparison pics of the two spinner devices I have testet with HPMAN's spinner board.
On the left side is the "SpinTrak" spinner and on the right side the "TurboTwist2", both have a great build quality, have enclosed optic sensores, provide 1200 impulses/revolution and can be mounted inside a 28 mm hole.
The Spintrak offers a more heavier weight (378 grams including large fly-weight and knob) and is shorter but more difficult to mount (you can not remove the cable and the fly weight needs to be attached after mounting into the hole).
The TurboTwist2 is a bit lighter (282 grams including fly-weight and "Silver Dome" knob, 314 grams including fly-weight and "TokenTop" knob) is longer but easier to mount (cable removeable, fly weight fits through the 28 mm hole).

Overall, I think the SpinTrak is better for mounting inside a box (because you can use a box with a lower height) and the TurboTwist is better for arcade machine control panels (because it needs less space at the sides and is easier to mount).

spintak-vs-turbotwist2-1.png

spintak-vs-turbotwist2-2.png
Posté le 24/04/2017 à 10:34 Membre depuis le 13/08/2014, 17 messages
Same technology could be extended for Irritating Maze or NAM-1975!!

So the "HPMan's trackball" we saw on YT if I remember well...

If u sell this game, you could offer a "deluxe version" with this analogic controller...the game experience should definetely change!
Posté le 24/04/2017 à 15:47 Membre depuis le 05/04/2016, 50 messages
HPman, will that spinner work with the game 'Pop n Bounce' when the games softdip has been set to use it?

edit... err forget it, I see the question is already answered.
Posté le 26/04/2017 à 21:34 Membre depuis le 29/05/2014, 24 messages
Looking good. Having the spinner will really make the game special. I had a recent experience of playing Arkanoid with a joystick in a bar - really wasn't that much fun without the spinner.
Posté le 17/07/2017 à 16:43 Membre depuis le 21/03/2014, 187 messages
I would like to present my 4th stage boss, the Alien Lizard. A little bit simpler compared to the Worm boss or the Brain boss but therefore much
harder to hit and very challenging due to his differently speeded projectile attacks. The boss is made of six parts, has its own color scheme & frame design,
auto-animated shadow, three destruction phases, ball-following eyes and unique movement/attack patterns depending on the paddle position.

Posté le 18/07/2017 à 00:28 Membre depuis le 26/07/2009, 17 messages
bigeyes
I love the animation of the ship and the projectiles. The rest is very good too, the shadows movements ...
I'm a fan of arkanoid and it really gives me the urge to test boing

Very good work .


Ciao++
Posté le 18/07/2017 à 15:09 Membre depuis le 25/09/2004, 19681 messages
top
avatar@originalfei
In pixels we trust.
ORE WO DARE DA TO OMOTTE YAGARU !
Posté le 29/07/2017 à 20:56 Membre depuis le 13/08/2014, 17 messages
Interesting!


May I suggest u, if didn't already done, to create multi-level screen (maybe 2 or 3 on top of each other) with secret areas and mid-bosses?


Like in "Devil-Crash" kind of games (that was a flipper game actually but I think it could fit here as well).
Posté le 31/07/2017 à 11:50 Membre depuis le 31/07/2017, 15 messages
Wow this looks amazing guys, I've just picked up a CDZ again so any new release is welcome, but looks very professional.

One question about the sound, you say its only 1mb so you can only have 2 tracks on the CD version? One i'm guessing you are not sure how to code CD tracks yet? or Two, why cant you pull data from the CD when you need another music track, i.e when loading level 2 etc?

Anyway great job!
avatar
Posté le 22/08/2017 à 19:05 Membre depuis le 21/03/2014, 187 messages
Hi, sorry for the late response (i was on holiday). Thanks for your comments smile
Because I am working with the NeoBitz NeoSoundbuilder I can only play ADPCM-A samples and as far as I know these are limited to max. 1 MB on the NeoGeo CD-Systems.
I need to find a way to play CDDA audio files for the background music on CD-Systems (https://wiki.neogeodev.org/index.php?title=CDDA)... did someone eventually tried it already?
Posté le 23/08/2017 à 10:52 Membre depuis le 31/07/2017, 15 messages
NeoHomeBrew (./116) :
Hi, sorry for the late response (i was on holiday). Thanks for your comments smile
Because I am working with the NeoBitz NeoSoundbuilder I can only play ADPCM-A samples and as far as I know these are limited to max. 1 MB on the NeoGeo CD-Systems.
I need to find a way to play CDDA audio files for the background music on CD-Systems (https://wiki.neogeodev.org/index.php?title=CDDA)... did someone eventually tried it already?
Didn't the Tetris homebrew game (download in link below) use CDDA? I haven't burned it yet, but the download contains the iso and 2 audio files, maybe open the iso and see what you can find in the code?

http://neogeocdworld.info/medias/iso/

If you need someone to test on real hardware I'm willing to burn a few coasters for the cause!
avatar
Posté le 24/08/2017 à 20:07 Membre depuis le 21/03/2014, 187 messages
Hmm, interesting. After searching the web a while I have just realized that Bey has also used a CCDA track for his NATA demo: topics/187142-natademo-ngcd
Bey, would you maybe share some info on how do you have made it, please? #bateau#
Posté le 24/08/2017 à 23:16 Membre depuis le 28/01/2003, 160 messages
Posté le 25/08/2017 à 18:59 Membre depuis le 21/03/2014, 187 messages
Hi HPMAN,
yes, the bios call method would be desirable... but, as always, the ASM code is the problem...

According to the wiki I think I need to:
1) change "_CDDA_FLAG= 0" in file "crt0_cd.s" to "_CDDA_FLAG= 2" ?
2) call the CDDA routine via ASM
__asm__ ("jsr 0xC0056A");
3) But how to write the command / track number to register D0? As a word? For instance command 04, track no 02 would be 0x0402?
__asm__ ("move.w d0, 0x0402");