mirror of
https://gitlab.com/camelot/kickc.git
synced 2025-08-09 20:25:17 +00:00
86 lines
1.9 KiB
Plaintext
86 lines
1.9 KiB
Plaintext
|
|
// Angles: sf[0.8] : $80=PI, $100 = 2*PI
|
|
// Values: sin(x) in [-1;1] sf[0.16] : -1.0: -$7fff 1.0:$7fff
|
|
|
|
import "c64"
|
|
import "fastmultiply"
|
|
|
|
byte* SCREEN = $0400;
|
|
byte* SPRITE = $3000;
|
|
|
|
byte* COS = $2000;
|
|
byte* SIN = COS+$40; // sin(x) = cos(x+PI/2)
|
|
|
|
void main() {
|
|
asm { sei }
|
|
init();
|
|
anim();
|
|
}
|
|
|
|
void init() {
|
|
mulf_init();
|
|
*SPRITES_ENABLE = %11111111;
|
|
byte* sprites_ptr = SCREEN+$3f8;
|
|
byte spr_x = 60;
|
|
for(byte i: 0..7) {
|
|
byte i2 = i<<1;
|
|
sprites_ptr[i] = (byte)(SPRITE/$40);
|
|
SPRITES_XPOS[i2] = spr_x;
|
|
SPRITES_YPOS[i2] = spr_x;
|
|
SPRITES_COLS[i] = GREEN;
|
|
spr_x += 24;
|
|
}
|
|
|
|
}
|
|
|
|
void anim() {
|
|
signed word min = 1000;
|
|
signed word max = -1000;
|
|
|
|
byte angle = 0;
|
|
signed byte x = 89; // signed fixed[7.0]
|
|
signed byte y = 0;
|
|
|
|
while(true) {
|
|
while(*RASTER!=$ff) {}
|
|
(*BORDERCOL)++;
|
|
|
|
signed byte cos_a = (signed byte) COS[angle]; // signed fixed[0.7]
|
|
mulf8s_prepare(cos_a);
|
|
signed word xr = mulf8s_prepared(x)<<1; // signed fixed[8.8]
|
|
signed word yr = mulf8s_prepared(y)<<1; // signed fixed[8.8]
|
|
|
|
signed byte sin_a = (signed byte) SIN[angle]; // signed fixed[0.7]
|
|
mulf8s_prepare(sin_a);
|
|
xr -= mulf8s_prepared(y)<<1; // signed fixed[8.8]
|
|
yr += mulf8s_prepared(x)<<1; // signed fixed[8.8]
|
|
|
|
signed word xpos = ((signed byte) >xr) + 89 + 24 + 60;
|
|
signed word ypos = ((signed byte) >yr) + 89 + 51;
|
|
SPRITES_XPOS[0] = <xpos;
|
|
*SPRITES_XMSB = >xpos;
|
|
SPRITES_YPOS[0] = <ypos;
|
|
angle++;
|
|
(*BORDERCOL)--;
|
|
}
|
|
}
|
|
|
|
kickasm(pc COS) {{
|
|
{
|
|
.var min = -$7fff
|
|
.var max = $7fff
|
|
.var ampl = max-min;
|
|
.for(var i=0;i<$140;i++) {
|
|
.var rad = i*2*PI/256;
|
|
.byte >round(min+(ampl/2)+(ampl/2)*cos(rad))
|
|
}
|
|
}
|
|
}}
|
|
|
|
kickasm(pc SPRITE, resource "balloon.png") {{
|
|
.var pic = LoadPicture("balloon.png", List().add($000000, $ffffff))
|
|
.for (var y=0; y<21; y++)
|
|
.for (var x=0;x<3; x++)
|
|
.byte pic.getSinglecolorByte(x,y)
|
|
}}
|