LynxJam2023 - day 10
I didn't like the way to use one bitmap data for every wall of my game while, with using stretch, tilt and flipping, I could use only a 1/4 of what I use today.
I know this day would come : the jam limits the game to be one block so resource is limited.
But I also know it won't be easy...and I was right
Flip
This one is the easier one :
- add HFLIP and/or VFLIP to sprctl0
- adjust hpos and vpos accordingly : +width if you HFLIP, +height if you VFLIP
Tilt
This one is not that hard too.
If you followed Alex's tutorial, you know what it does : add X pixels every line.
But it took me some times to understand how to substract X pixels per line
- select the right CC65's sprite struct : SCB_REHVxxT
- use the right sprctl1 : REVHxxT
- set the value without forgetting it's a 8bit.8bit fixed point value (like scaling)
I use the macro (x) << 8 to set a pixel tilting.
For small sprites, you'll probably want to use subpixel tilting, so you need to set the 8.8 full value
What if you want to negative tilting ? well, (-3)<<8 does the trick ;)
Stretch
This one was a nightmare for me....
I spent half of my time fighting with it because, since tilting and stretching are somewhat connected for me, I tough stretching was pixels based too!
I missed a details on Alex's tutorial .... but with the help of 42Bastian, Vince and the official doc, I suddenly understood my (big) mistake.
The modification consists of adding the 16 bit stretch value ('STRETCH') to the 16 bit size value ('HSIZE') at the end of the processing of a scan line.
This one killed me!
HSIZE is not the width of the sprite but the scale of the sprite.
So stretch adds with hscale value to define a new horizontal scale every line.
Every line, sprite scale is HPOS + line*STRETCH
If you're sprite is 50 pixels and you set a stretch value of 1<<8, you don't ask 1 pixel per line...but 50 !!
Like tilting,
- select the right CC65's sprite struct : SCB_REHVxxS
- use the right sprctl1 : REVHxxS
- set the value without forgetting it's a 8bit.8bit fixed point value (like scaling)
Stretch + negative Tilt
When I finally understood how it works, this let me with one last problem : how to stretch AND tilt to make something like a trapeze ?
Answer : You'll need to use stretching and negative tilting.
But since stretch is scale and tilt is pixel, you can't do : stretch = 2*tilt
I first define how much pixels I want for tilting then compute the stretch value needed this way
X = tilting pixels * -2 stretch.H = X / sprite.width if X % sprite.width == 0 stretch.L = 0 else stretch.L = sprite.width / (X - (stretch.H * sprite.width))
Note : you can't make it dynamic by code since you don't know what is sprite.width on code side (buried in sprite.data)
Get Hero Dust
Hero Dust
Mini First person Dungeon Explorer for Atari Lynx
Status | Released |
Author | KanedaFr |
Genre | Role Playing |
More posts
- LynxJam2023 - day 11Dec 09, 2023
- LynxJam2023 - day 9Dec 06, 2023
- LynxJam2023 - day 5Dec 01, 2023
- LynxJam2023 - day 4Nov 30, 2023
- LynxJam2023 - day 3Nov 29, 2023
- LynxJam2023 - day 2Nov 28, 2023
- LynxJam2023 - day 1Nov 28, 2023
- LynxJam2023 - day 0Nov 28, 2023
Comments
Log in with itch.io to leave a comment.
Awesome devlog!
Thanks you for the devlog, and nice to see I did not chosed also a Dungeon Master like (this was one my ideas)
Just a small remark
You can define the action point of the sprite and this impact the FLIP (and also TILT & STRETCH)
For example, if you have a 17x17 sprite and define action point in the middle at (9,9), flipping horizontally or vertically will not require to adjust coordinates.
But as you use TILT & STRETCH also, it may imply some side effects...