| |
Space Organic Intro [2022] |
Credits :
SIDs used in this release :
Download :
Look for downloads on external sites:
Pokefinder.org
Production Info Submitted by zscs on 17 August 2023
I really loved to code this intro. In S-MON $c000, of course. :D Here you can find some more details.
SCREEN:
ln# d012 badl*: scr: col: *$d011=$1b /badline
-----------------------------------------------------
!00 $31 $33 $0400 $d800 stars
01 $39 $3b $0428 $d828 stars
02 $41 $43 $0450 $d850 stars + planet ln.0
03 $49 $4b $0478 $d878 stars + planet ln.1
04 $51 $53 $04a0 $d8a0 stars + planet ln.2 (+blue 'X')
05 $59 $5b $04c8 $d8c8 stars + planet ln.3
06 $61 $63 $04f0 $d8f0 stars + planet ln.4
07 $69 $6b $0518 $d918 stars + planet ln.5
08 $71 $73 $0540 $d940 stars + planet ln.6
09 $79 $7b $0568 $d968 stars
!10 $81 $83 $0590 $d990 text: 'PRESENTS:' (with hires sprite overlay)
11 $89 $8b $05b8 $d9b8 <empty>
12 $91 $93 $05e0 $d9e0 text: 'space organic intro'
13 $99 $9b $0608 $da08 <empty>
!14 $a1 $a3 $0630 $da30 2x2 scroll, ln.0
15 $a9 $ab $0658 $da58 2x2 scroll, ln.1
16 $b1 $b3 $0680 $da80 <empty>
!17 $b9 $bb $06a8 $daa8 logo ln.0
18 $c1 $c3 $06d0 $dad0 logo ln.1
19 $c9 $cb $06f8 $daf8 logo ln.2
20 $d1 $d3 $0720 $db20 logo ln.3
21 $d9 $db $0748 $db48 logo ln.4
22 $e1 $e3 $0770 $db70 logo ln.5
23 $e9 $eb $0798 $db98 <empty>
24 $f1 $f3 $07c0 $dbc0 <empty>
Sprites: screen top-left X: #24/$18, Y: #50/$32
----------------------
DATA: C: code, G: graphics, D: data, S: sprites, V/P: value/pointer
*******************************************************************
---------------------------------------------------------------------
d $0800 - 0cff 2x2 charset, Char data
d $0d00 - 0dff 2x2 charset, Map data ($0d00: 1st row, $0d80: 2nd row)
d $0e00 - 0e3f 2x2 chars - length ($01 or $02)
d $0e80 - 0eff sinus (1-16 movement, 128 positions)
d $0f00 - 0f29 -- ..temp converter from 0f00-0f30 for 2x2charset..
d $0f30 - 0f3f raster colours behind 2x2 scroll
d $1000 - 1e98 music
d $1ea0 - 1fff --
d $2000 - 26ff 1x1 charset + hires overlay data
d $2700 - 27ff --
C $2800 - 2fb0 RESERVED for CODE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
d $2fc0 - 2fe8 1-line text/credits shown after pressing SPACE
d $3000 - 33ff 2x2 scroll text. Special chars: $1f - following char will be the speed.
...zero is pause for ~4-5 secs. $ff: end
d $3400 - 37e7 screen data (during init, copied to $0400)
s $3800 - 393e Planet's MC grey sprites (5 pcs: $07f8...: $e0, $e1, $e2, $e3, $e4)
s $3940 - 3bbe Planet's hires 'X' sprites (animation with 5-5 sprites) ($e5-$ee)
s $3bc0 - 3dbe Excess logo's MC sprites (8 pcs) ($ef-$f6)
s $3dc0 - 3e7e 'presents:' hires sprite overlay (3 pcs) ($f7, $f8, $f9)
s $3e80 - 3ebe 2x2 scroll's left-most char (1st 8-bit column of sprite) ($fa)
s $3ec0 - 3fbe 2x2 scroll fade-in/out hires sprites (2 left: $fb-fc, 2 right: $fd-fe)
d sinus data for Planet and stars movement
d $1fc0 - 1fdf 'x' sprites anim position (1-5)
--
Code/Routines:
c $0e40 - little stars cycling
c $0f60 - 31 NOP+RTS
c $0f80 - 29 NOP+BIT $EA+RTS
c $0fa0 - space pressed: screen clear + credits + reset
c $1ea0 - Planet's stars movement logic
c $1f80 - Planet's 'X' sprite anim logic
c $27a0 - check music: snare
c $27b0 - in case of snare: colour roll in stars next to the Excess logo #1 -> JMP $0e40
c $2800 - start
c $2950 - Excess stars colour set #2
c $29a0 - Excess stars colour set #1
c $2a00 - main routine / raster interrupts
c $2b00 - 2x2 scroll routine: main logic
c $2c00 - set Planet sprite data
c $2ca0 - Planet X and Y offset set
c $2cd0 - 'presents:' sprite overlay
c $2d20 - 'X' sprites: sprite set at $07fd-fe
c $2d40 - 2x2 scroll sprite init
c $2e40 - Excess logo sprites init
c $2ed0 - Excess logo: 2 sprites colour change
--
VARIABLES (ZERO PAGE, memory addr):
v $2d planet - X offset (0-7), added to $C8/$D016
v $2e planet - y offset (0-7), added to $18/$d011
v $2f 2x2 scroll 8-pixel position
v $30 2x2 scroll pause counter (decreasing to zero)
v $31 2x2 scroll's tile position (1: first char, 2: second char drawn)
v $32 2x2 scroll's tile width (1: 1-char, 2: 2 chars wide)
v $33 - 34 scroll position (default: $3000)
v $35 2x2 scroll speed (1-7)
v $36 current char
v $37 - 38 16-bit temporary value (e.g.: 2x2 temporary 16-bit value for sprite copy)
v $2afe, 2aff 2x2 scroll left char, 1st row and 2nd row char value (offset on $0d00)
v $2ca1 Planet: sinus position, X
v $2cb3 Planet: sinus position, Y
v 39 'X' sprite anim position (1-5)
v 3a Excess logo X offset
v 3b star animation counter (besides the Planet)
RUNTIME Plan:
-------------
$2a00 - all main code sections, separated by raster interrupts.
Nr#: $D012: $2a00,X: $D018: $D016: $D011: ($D0xx value only, if change is made)
00 2e 00 $18 $c8+x $18+y
.0: init and set D016 and D011 (X + Y movement of the Planet, 7 sprites)
X offset: 2d, Y offset: 2e
.1: init sprites and set coordinates (Planet)
.2: 2x2 scroll logic + 1 sprite (left-most/41th char, copied from $0630 and $0658)
.3: 5 stars fade our/in in 'Excess' logo
01 7e 30 $c8 $1b
.0: init and set D016 and D011 (static, $c8 and $1b)
.1: 3-sprite 'presents:' hires sprite overlay init/set
.2: play music (JSR $1003)
02 9e 52 $12 $c8+x
.0: set D018, D016 (D016: c8 + $2f)
.1: init and set coordinates for the 2x2 scroll's sprites (5 pcs)
.2: rasterbars from $a1 (16 pixel rows)
.3: 'X' sprite anim position
03 b6 77 $18 $c8
.0: init and set d018 and D016
.1: init sprites and set coordinates (Excess logo, 8 sprites)
04 d1 99
.0: right before $D012=#$d6 set sprites MC1 and MC2 to $0a and $05 (for sprites #06 and #07)
.1: star animation logic
.2: colour cycling for text 'name of the game' ($05e0 row)
.3: Planet's movement logic / calculate coordinates
.4:
05 fa b7 $13
.0: set $D011 = #$13
.1: lda $adad
06 00 $1b
.0: set $d011 = #$1b
.0: lda dc01 ; and #10 ; beq *reset
colours:
0 - @ - black
1 - a - white
2 - b - red
3 - c - cyan
4 - d - purple
5 - e - green
6 - f - blue
7 - g - yellow
8 - h - orange
9 - i - brown
a - j - light red
b - k - dark grey
c - l - grey
d - m - light green
e - n - light blue
f - o - light grey
Sprite parameters - Planet: ( note: screen top-left X: #24/$18, Y: #50/$32 )
- row #02 (3rd): $07fx X-coord.: Y-coordinate:
- MC sprite #0: 8-$e0 $a0 $42 (left-upper)
- MC sprite #1: 9-$e1 $b8 $42 (upper-mid)
- MC sprite #2: a-$e2 $a0 $5a (mid-left)
- MC sprite #3: b-$e3 $a0 $6f (bottom-left)
- MC sprite #4: c-$e4 $de $5a (right part, -2 pixel aligned)
- Hires sprite #5: d-$e5+x1*2 $b8 $52 (cyan/$03 hires sprite)
- Hires sprite #6: e-$e6+x2*2 $b8 $52 (blue/$0e hires sprite)
- $d010: $00 (X coordinate offset/ 256)
- $d015: $7f (%01111111 - 1: sprite enabled)
- $d017/d01d: $00 (x/y double)
- $d01b: $7f (sprite priority register, 1 = Sprite #x is behind screen contents)
- $d01c: $1f (%00011111 - MC or hires, 0 = Sprite #x is single color; 1 = Sprite #x is multicolor)
- $d025: $0f ( sprite MC colour 1 / %01 )
- $d026: $0c ( sprite MC colour 2 / %11 )
- $d027-d02b: $01 ( white )
- $d02c: $03 ( cyan )
- $d02d: $0e ( blue )
Sprite parameters - 'presents:'
- row #10: $07fx X-coord.: Y-coordinate:
- hires sprite #0: 8-$f7 $98 $82
- hires sprite #1: 9-$f8 $b0 $82
- hires sprite #2: a-$f9 $c8 $82
- $d010: $00 (X coordinate offset/ 256)
- $d015: $07 (%00000111 - 1: sprite enabled)
- $d017/d01d: $00 (x/y double)
- $d01b: $00 (sprite priority register, 1 = Sprite #x is behind screen contents)
- $d01c: $00 (%00000000 - MC or hires, 0 = Sprite #x is single color; 1 = Sprite #x is multicolor)
- $d027-d029: $0b ( dark grey )
Sprite parameters - 2x2 scroller (+1 char in left sprite column, 2-2 fade-in/out hires sprites)
- row #14: $07f[x] X-coord.: Y-coordinate:(X offset: $2f)
- hires sprite #0: 8-fa $18+x $a2
- hires sprite #1: 9-fb $18 $a2
- hires sprite #2: a-fc $18 $a2
- hires sprite #3: b-fd $40 $a2
- hires sprite #4: c-fe $40 $a2
- $d010: $18 (X coordinate offset/ 256: %00011000)
- $d015: $1f (%00011111 - 1: sprite enabled)
- $d017/d01d: $00 (x/y double)
- $d01b: $1e (sprite priority register, 1 = Sprite #x is behind screen contents)
- $d01c: $00 (%00011111 - MC or hires, 0 = Sprite #x is single color; 1 = Sprite #x is multicolor)
- $d027: $00 ( black - reason: charset used here is inverted, rasters/$d021 colour will be the colour )
- $d028: $0b
- $d029: $0c
- $d02a: $0b
- $d02b: $0c
Sprite parameters - Excess logo: ($07f8-ff: $ef-$f6)
- row #02 (3rd): X-coord.: Y-coordinate:
- MC sprite #0: $70 $c2
- MC sprite #1: $88 $c2
- MC sprite #2: $a0 $c2
- MC sprite #3: $b8 $c2
- MC sprite #4: $d0 $c2
- MC sprite #5: $e8 $c2
- MC sprite #6: $a8 $d7 ($d025 = $0a / red!)
- MC sprite #7: $d8 $d7 ($d025 = $0a / red!)
- $d010: $00 (X coordinate offset/ 256)
- $d015: $ff (%11111111 - 1: sprite enabled)
- $d017/d01d: $00 (x/y double)
- $d01b: $ff (sprite priority register, 1 = Sprite #x is behind screen contents)
- $d01c: $ff (%11111111 - MC or hires, 0 = Sprite #x is single color; 1 = Sprite #x is multicolor)
- $d025: $0f ( sprite MC colour 1 / %01 )
- $d026: $0c ( sprite MC colour 2 / %11 )
- $d027-d02c: $01 ( white )
- $d02d-d02e: $07 ( yellow )
Music 3rd channel intrument values> @ $17c7:
code: colours:
- $c7: 9 5 d f b c 3 1
- $a8: bass 1 3 c b f d 5 9
- $eb: snare >animated<
- $c4:
| Production Info Submitted by zscs on 1 August 2022
- 2x2 scroll chars compressed (153 chars used only) and using 2x2-char tiles, because why not. And 40(+1)-char wide. Bit more difficult to code the scroller for this but I took it as a challenge. Also speed control and pause functions are implemented. Coded it from zero, no copy.
- 2x2 charset: originally created it upon request from 'The Enemy'. I hope he doesn't mind I use it here. ;)
- 1x1 charset created by me for an another intro but decided to use it here as well.
- Planet was originally created for a 'The Expanse' theme demo (?) along with other special, NUFLI-like graphics. Maybe you'll see all those graphics soon, somewhere. ;-)
- Organic-style Excess logo was my idea, spent quite a lot of time to draw it in PixCen. How I created: used the unrestricted mode in PixCen, pixeled it (keep in my all the restrictions) and as soon as I felt it final, re-drawn the hires char layer in CharPad and also the MC sprites layer in SpritePad afterwards. Very time-consuming, took some errors as well that I had to correct but I don't know any other tool which supported my special 'enhanced gfx modes' fully.
- tried to keep everything below $4000 to fit in 16k. Because of the graphics data I had to optimize the code and also left some planned effects out. Even if I merged e.g. 1x1 font and all hires overlay data to 1 font only. But this intro uses 31 sprites in overall. Planet uses 7 sprites (2 of them animated), 'presents:' text 3 sprites, 2x2 scroller 5 sprites and Excess logo uses 8 sprites.
- because the lack of free space there is no fade-in / fade-out, only a small 'credits' text after pressing Space.
- those little stars around the Planet are realtime calculated, based on a little sinus table. I had a very limited free space so only 3 different movement calculated. Also the colours of stars are changing time to time, kind of 'randomly'.
- 100% coded in S-MON $C000 (ouch!) :-) |
|
|
|
| Search CSDb |
| Navigate | |
|
| Detailed Info | |
|
| Fun Stuff | |
· Goofs · Hidden Parts · Trivia
|
|
| Forum | |
|
| Support CSDb | |
|
| |
|