| |
Digger
Registered: Mar 2005 Posts: 437 |
Moving sprite pointers addresses
Is it possible to shift sprite pointers locations by fiddling with DMA delay or in any other way? |
|
| |
Krill
Registered: Apr 2002 Posts: 2980 |
They are hardwired to $03f8..$03ff within the current screen area and can't be moved elsewhere.
What you can do is move them into the visible screen area using linecrunch, but this is usually a big nuisance with linecrunch.
You can within certain limits counter this by switching screen areas around sprite fetch, so that the offending sprite pointers aren't displayed as chars, but your desired chars are displayed instead.
What do you want to achieve by moving sprite pointers? |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
once I had the weird idea to change screen pointer right before after char gfx fetches, so that onscreen sprite pointers doesnt matter :) |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting Oswaldonce I had the weird idea to change screen pointer right before after char gfx fetches, so that onscreen sprite pointers doesnt matter :) That's basically the same as
Quoting Krillswitching screen areas around sprite fetch, so that the offending sprite pointers aren't displayed as chars, but your desired chars are displayed instead =) |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
ah cool, I thought its something else.
my guess is digger working on some kind of demopart so his best bet is to try and hide it, maybe keep sprite pointers const and animate sprite data, etc. |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Whatever he's doing, asking this kind of overly specific question always reeks like an XY problem. |
| |
Digger
Registered: Mar 2005 Posts: 437 |
Thanks, I was wondering if I could update them in any other way that would give me more options than $d018/$dd00 (16 screens * 4 banks = almost 64 combinations). I have routine that switches all 8 pointers per line but still, thought maybe there's a holy grail somewhere :) |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: Thanks, I was wondering if I could update them in any other way that would give me more options than $d018/$dd00 (16 screens * 4 banks = almost 64 combinations). I have routine that switches all 8 pointers per line but still, thought maybe there's a holy grail somewhere :)
If you do it per line, like in a twister you place the sprites with 1 line separation in y. Thus the first 0..23 bytes will be rendered into the sprites per line and a simply.
lda #$xx
sta $x3f8
sta $x3f9
sta $x3fa
sta $x3fb
sta $x3fc
sta $x3fd
sta $x3fe
sta $x3ff |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
I would recommend setting them apart by 2 lines. Then not stretching sprites for a line will give you a whole new 256 unique sprite patterns for all 8 sprites. :) This may be helpful in some scenarios. |
| |
Digger
Registered: Mar 2005 Posts: 437 |
@JA: Yeah, I am already doing it (1 line apart), but I was thinking if this could be abused even further ;-)
@Krill: Nice, I saw that being used but never understood it! What's the max offset, thus number of 256 line combinations? |
| |
Krill
Registered: Apr 2002 Posts: 2980 |
Quoting Digger@Krill: Nice, I saw that being used but never understood it! What's the max offset, thus number of 256 line combinations? floor(21 / numsprites). So 2 for 8 sprites, 3 for 7 sprites, etc. - Note that this is for one VIC bank, so you can still switch back and forth between sprite sets using $dd00 (but then must write the pointers to a location depending on the used VIC bank, of course). |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
I usually just move the sprites 8 lines up and start stretch on offset 24 in the sprite |
| |
JackAsser
Registered: Jun 2002 Posts: 2014 |
Quote: I usually just move the sprites 8 lines up and start stretch on offset 24 in the sprite
Ahh WITHIN a frame. Sorry nm me! |
| |
Oswald
Registered: Apr 2002 Posts: 5094 |
the 2 line offset is nice, didnt know about that.
" if this could be abused even further ;-)"
how about spritecrunch with the Y offsetted sprites :P or just any combination of these to make more then 256 lines happen just a wild idea, might work out in some special cases or might not. |