mirror of
https://github.com/exoticorn/microw8.git
synced 2026-01-20 11:16:42 +01:00
first unoptimized version of blitSprite & grabSprite
This commit is contained in:
21
examples/curlywas/sprites.cwa
Normal file
21
examples/curlywas/sprites.cwa
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
include "../include/microw8-api.cwa"
|
||||||
|
|
||||||
|
const SPRITE = 0x20000;
|
||||||
|
|
||||||
|
export fn upd() {
|
||||||
|
cls(0);
|
||||||
|
let t = time();
|
||||||
|
let i: i32;
|
||||||
|
loop spriteLoop {
|
||||||
|
let inline x = sin(t * -1.3 + i as f32 / 8_f) * 180_f + 160_f;
|
||||||
|
let inline y = sin(t * 1.7 + i as f32 / 9_f) * 140_f + 120_f;
|
||||||
|
blitSprite(SPRITE, 16, x as i32, y as i32, 0x100);
|
||||||
|
branch_if (i +:= 1) < 200: spriteLoop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
start fn start() {
|
||||||
|
printChar('OO');
|
||||||
|
circle(8_f, 8_f, 6_f, 75);
|
||||||
|
grabSprite(SPRITE, 16, 0, 0, 0);
|
||||||
|
}
|
||||||
@@ -35,6 +35,8 @@ import "env.circle_outline" fn circle_outline(f32, f32, f32, i32);
|
|||||||
import "env.exp" fn exp(f32) -> f32;
|
import "env.exp" fn exp(f32) -> f32;
|
||||||
import "env.playNote" fn playNote(i32, i32);
|
import "env.playNote" fn playNote(i32, i32);
|
||||||
import "env.sndGes" fn sndGes(i32) -> f32;
|
import "env.sndGes" fn sndGes(i32) -> f32;
|
||||||
|
import "env.blitSprite" fn blitSprite(i32, i32, i32, i32, i32);
|
||||||
|
import "env.grabSprite" fn grabSprite(i32, i32, i32, i32, i32);
|
||||||
|
|
||||||
const TIME_MS = 0x40;
|
const TIME_MS = 0x40;
|
||||||
const GAMEPAD = 0x44;
|
const GAMEPAD = 0x44;
|
||||||
|
|||||||
@@ -35,6 +35,8 @@
|
|||||||
(import "env" "exp" (func $exp (param f32) (result f32)))
|
(import "env" "exp" (func $exp (param f32) (result f32)))
|
||||||
(import "env" "playNote" (func $playNote (param i32) (param i32)))
|
(import "env" "playNote" (func $playNote (param i32) (param i32)))
|
||||||
(import "env" "sndGes" (func $sndGes (param i32) (result f32)))
|
(import "env" "sndGes" (func $sndGes (param i32) (result f32)))
|
||||||
|
(import "env" "blitSprite" (func $blitSprite (param i32) (param i32) (param i32) (param i32) (param i32)))
|
||||||
|
(import "env" "grabSprite" (func $grabSprite (param i32) (param i32) (param i32) (param i32) (param i32)))
|
||||||
|
|
||||||
;; to use defines, include this file with a preprocessor
|
;; to use defines, include this file with a preprocessor
|
||||||
;; like gpp (https://logological.org/gpp).
|
;; like gpp (https://logological.org/gpp).
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -352,6 +352,60 @@ export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) {
|
|||||||
setPixel(i32.trunc_sat_f32_s(x1 + f * dx), i32.trunc_sat_f32_s(y1 + f * dy), col);
|
setPixel(i32.trunc_sat_f32_s(x1 + f * dx), i32.trunc_sat_f32_s(y1 + f * dy), col);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export fn blitSprite(sprite: i32, size: i32, x: i32, y: i32, control: i32) {
|
||||||
|
let width = size & 65535;
|
||||||
|
let height = select(size >> 16, size >> 16, width);
|
||||||
|
let trans = (control & 511) - 256;
|
||||||
|
let flip_x = 1 - ((control >> 8) & 2);
|
||||||
|
let flip_y = 1 - ((control >> 9) & 2);
|
||||||
|
if flip_x < 0 {
|
||||||
|
sprite += width - 1;
|
||||||
|
}
|
||||||
|
if flip_y < 0 {
|
||||||
|
sprite += (height - 1) * width;
|
||||||
|
}
|
||||||
|
|
||||||
|
let ly = 0;
|
||||||
|
loop yloop {
|
||||||
|
let lx = 0;
|
||||||
|
loop xloop {
|
||||||
|
let col = (sprite + lx * flip_x + ly * flip_y * height)?0;
|
||||||
|
if col != trans {
|
||||||
|
setPixel(x + lx, y + ly, col);
|
||||||
|
}
|
||||||
|
branch_if (lx +:= 1) < width: xloop;
|
||||||
|
}
|
||||||
|
branch_if (ly +:= 1) < height: yloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export fn grabSprite(sprite: i32, size: i32, x: i32, y: i32, control: i32) {
|
||||||
|
let width = size & 65535;
|
||||||
|
let height = select(size >> 16, size >> 16, width);
|
||||||
|
let trans = (control & 511) - 256;
|
||||||
|
let flip_x = 1 - ((control >> 8) & 2);
|
||||||
|
let flip_y = 1 - ((control >> 9) & 2);
|
||||||
|
if flip_x < 0 {
|
||||||
|
sprite += width - 1;
|
||||||
|
}
|
||||||
|
if flip_y < 0 {
|
||||||
|
sprite += (height - 1) * width;
|
||||||
|
}
|
||||||
|
|
||||||
|
let ly = 0;
|
||||||
|
loop yloop {
|
||||||
|
let lx = 0;
|
||||||
|
loop xloop {
|
||||||
|
let col = getPixel(x + lx, y + ly);
|
||||||
|
if col != trans {
|
||||||
|
(sprite + lx * flip_x + ly * flip_y * height)?0 = col;
|
||||||
|
}
|
||||||
|
branch_if (lx +:= 1) < width: xloop;
|
||||||
|
}
|
||||||
|
branch_if (ly +:= 1) < height: yloop;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//////////
|
//////////
|
||||||
// TEXT //
|
// TEXT //
|
||||||
//////////
|
//////////
|
||||||
|
|||||||
@@ -169,6 +169,21 @@ impl BaseModule {
|
|||||||
add_function(&mut functions, &type_map, "playNote", &[I32, I32], None);
|
add_function(&mut functions, &type_map, "playNote", &[I32, I32], None);
|
||||||
add_function(&mut functions, &type_map, "sndGes", &[I32], Some(F32));
|
add_function(&mut functions, &type_map, "sndGes", &[I32], Some(F32));
|
||||||
|
|
||||||
|
add_function(
|
||||||
|
&mut functions,
|
||||||
|
&type_map,
|
||||||
|
"blitSprite",
|
||||||
|
&[I32, I32, I32, I32, I32],
|
||||||
|
None,
|
||||||
|
);
|
||||||
|
add_function(
|
||||||
|
&mut functions,
|
||||||
|
&type_map,
|
||||||
|
"grabSprite",
|
||||||
|
&[I32, I32, I32, I32, I32],
|
||||||
|
None,
|
||||||
|
);
|
||||||
|
|
||||||
for i in functions.len()..64 {
|
for i in functions.len()..64 {
|
||||||
add_function(
|
add_function(
|
||||||
&mut functions,
|
&mut functions,
|
||||||
|
|||||||
Reference in New Issue
Block a user