start text displaying

Signed-off-by: Christine Dodrill <me@christine.website>
This commit is contained in:
Cadey Ratio 2022-07-01 17:10:57 -04:00
parent dcd924cec0
commit f06bdefbe3
10 changed files with 531 additions and 130 deletions

View File

@ -11,7 +11,7 @@
"infinite":false,
"layers":[
{
"data":[1, 1, 1, 1, 1, 19, 20, 21, 1, 1, 1, 1, 1, 1, 1, 36, 53, 38, 1, 1, 1, 1, 1, 1, 86, 88, 104, 1, 1, 17, 1, 1, 1, 1, 105, 1, 1, 1, 1, 1, 1, 1, 1, 1, 105, 1, 1, 1, 81, 1, 1, 1, 1, 1, 105, 67, 66, 97, 98, 99, 1, 68, 1, 1, 105, 66, 67, 114, 115, 116, 1, 103, 88, 88, 106, 1, 1, 100, 118, 101, 1, 1, 1, 1, 103, 88, 88, 88, 107, 88, 11, 13, 1, 12, 1, 1, 1, 1, 1, 1],
"data":[1, 1, 1, 1, 1, 19, 20, 21, 1, 1, 69, 1, 1, 1, 1, 36, 53, 38, 1, 1, 1, 1, 1, 1, 86, 88, 104, 1, 1, 17, 1, 1, 1, 1, 105, 1, 1, 1, 1, 1, 1, 69, 1, 1, 105, 1, 1, 1, 81, 1, 1, 1, 1, 1, 105, 67, 66, 97, 98, 99, 1, 68, 1, 1, 105, 66, 67, 114, 115, 116, 1, 103, 88, 88, 106, 1, 1, 100, 118, 101, 1, 1, 1, 1, 103, 88, 88, 88, 107, 88, 11, 13, 1, 12, 1, 1, 1, 1, 1, 1],
"height":10,
"id":1,
"name":"map",
@ -38,28 +38,6 @@
"x":80.301333604805,
"y":-0.325766059248702
},
{
"height":15.4738878143134,
"id":4,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":15.6367708439377,
"x":15.9625369031864,
"y":95.7752214191184
},
{
"height":32.0879568359971,
"id":5,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":80.1384505751807,
"x":80.1384505751807,
"y":79.812684515932
},
{
"height":9.44721571821236,
"id":6,
@ -72,59 +50,191 @@
"y":70.3654687977196
},
{
"height":16.1254199328107,
"id":8,
"height":15.8181818181818,
"id":16,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":15.6367708439377,
"x":143.988598187926,
"y":31.7621907767484
"width":11.4545454545455,
"x":146.181818181818,
"y":32
},
{
"height":15.5,
"id":10,
"height":12.7272727272727,
"id":17,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":14.875,
"width":11.8181818181818,
"x":18,
"y":97.8181818181818
},
{
"height":13.4545454545455,
"id":18,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":12,
"x":113.818181818182,
"y":16.3636363636364
},
{
"height":14.5454545454545,
"id":19,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":13.0909090909091,
"x":81.2727272727273,
"y":16.3636363636364
},
{
"height":26.7272727272727,
"id":20,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":26,
"x":82.9090909090909,
"y":85.2727272727273
},
{
"height":4.54545454545455,
"id":21,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":8.18181818181819,
"x":99.6363636363636,
"y":80.9090909090909
},
{
"height":17.2727272727273,
"id":22,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":47.6363636363637,
"x":112,
"y":112
"y":94.1818181818182
},
{
"height":16.125,
"id":11,
"height":7.27272727272728,
"id":23,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":15.25,
"x":144.875,
"y":111.625
"width":30.3636363636364,
"x":120.727272727273,
"y":86.9090909090909
},
{
"height":15.375,
"id":13,
"height":7.09090909090909,
"id":24,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":15,
"x":79.875,
"y":16.125
"width":16.3636363636364,
"x":127.636363636364,
"y":80
},
{
"height":15.625,
"id":14,
"height":12.5454545454545,
"id":25,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":13.875,
"x":113.875,
"y":16.375
"width":11.4545454545455,
"x":114.363636363636,
"y":111.818181818182
},
{
"height":12.5454545454545,
"id":26,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":12.1818181818182,
"x":145.090909090909,
"y":111.272727272727
},
{
"height":6.54545454545453,
"id":27,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":31.0909090909091,
"x":0.363636363636364,
"y":153.272727272727
},
{
"height":7.09090909090909,
"id":28,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":8.90909090909091,
"x":11.2727272727273,
"y":146.181818181818
},
{
"height":5.81818181818181,
"id":29,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":8,
"x":51.8181818181818,
"y":154
}],
"opacity":1,
"type":"objectgroup",
"visible":true,
"x":0,
"y":0
},
{
"draworder":"topdown",
"id":3,
"name":"act",
"objects":[
{
"height":20,
"id":30,
"name":"",
"properties":[
{
"name":"act_face",
"type":"string",
"value":"Up"
},
{
"name":"dialogue",
"type":"string",
"value":"Test message!"
}],
"rotation":0,
"type":"",
"visible":true,
"width":16,
"x":16,
"y":96
}],
"opacity":1,
"type":"objectgroup",
@ -132,8 +242,8 @@
"x":0,
"y":0
}],
"nextlayerid":3,
"nextobjectid":15,
"nextlayerid":4,
"nextobjectid":31,
"orientation":"orthogonal",
"renderorder":"right-down",
"tiledversion":"1.4.3",

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="10" height="10" tilewidth="16" tileheight="16" infinite="0" nextlayerid="3" nextobjectid="15">
<map version="1.4" tiledversion="1.4.3" orientation="orthogonal" renderorder="right-down" width="10" height="10" tilewidth="16" tileheight="16" infinite="0" nextlayerid="4" nextobjectid="31">
<editorsettings>
<export target="RPGmap.json" format="json"/>
</editorsettings>
@ -7,10 +7,10 @@
<layer id="1" name="map" width="10" height="10">
<data encoding="csv">
1,1,1,1,1,19,20,21,1,1,
1,1,1,1,1,36,53,38,1,1,
69,1,1,1,1,36,53,38,1,1,
1,1,1,1,86,88,104,1,1,17,
1,1,1,1,105,1,1,1,1,1,
1,1,1,1,105,1,1,1,81,1,
1,69,1,1,105,1,1,1,81,1,
1,1,1,1,105,67,66,97,98,99,
1,68,1,1,105,66,67,114,115,116,
1,103,88,88,106,1,1,100,118,101,
@ -20,13 +20,28 @@
</layer>
<objectgroup id="2" name="coll">
<object id="1" x="80.3013" y="-0.325766" width="47.399" height="16.4512"/>
<object id="4" x="15.9625" y="95.7752" width="15.6368" height="15.4739"/>
<object id="5" x="80.1385" y="79.8127" width="80.1385" height="32.088"/>
<object id="6" x="127.863" y="70.3655" width="16.2883" height="9.44722"/>
<object id="8" x="143.989" y="31.7622" width="15.6368" height="16.1254"/>
<object id="10" x="112" y="112" width="14.875" height="15.5"/>
<object id="11" x="144.875" y="111.625" width="15.25" height="16.125"/>
<object id="13" x="79.875" y="16.125" width="15" height="15.375"/>
<object id="14" x="113.875" y="16.375" width="13.875" height="15.625"/>
<object id="16" x="146.182" y="32" width="11.4545" height="15.8182"/>
<object id="17" x="18" y="97.8182" width="11.8182" height="12.7273"/>
<object id="18" x="113.818" y="16.3636" width="12" height="13.4545"/>
<object id="19" x="81.2727" y="16.3636" width="13.0909" height="14.5455"/>
<object id="20" x="82.9091" y="85.2727" width="26" height="26.7273"/>
<object id="21" x="99.6364" y="80.9091" width="8.18182" height="4.54545"/>
<object id="22" x="112" y="94.1818" width="47.6364" height="17.2727"/>
<object id="23" x="120.727" y="86.9091" width="30.3636" height="7.27273"/>
<object id="24" x="127.636" y="80" width="16.3636" height="7.09091"/>
<object id="25" x="114.364" y="111.818" width="11.4545" height="12.5455"/>
<object id="26" x="145.091" y="111.273" width="12.1818" height="12.5455"/>
<object id="27" x="0.363636" y="153.273" width="31.0909" height="6.54545"/>
<object id="28" x="11.2727" y="146.182" width="8.90909" height="7.09091"/>
<object id="29" x="51.8182" y="154" width="8" height="5.81818"/>
</objectgroup>
<objectgroup id="3" name="act">
<object id="30" x="16" y="96" width="16" height="20">
<properties>
<property name="act_face" value="Direction.Up"/>
<property name="dialogue" value="Test message!"/>
</properties>
</object>
</objectgroup>
</map>

View File

@ -4,7 +4,7 @@
<export target="TestMap.json" format="json"/>
</editorsettings>
<tileset firstgid="1" source="../sprites/Cave.tsx"/>
<layer id="1" name="Tile Layer 1" width="10" height="10">
<layer id="1" name="map" width="10" height="10">
<data encoding="csv">
29,29,29,29,29,29,29,29,29,29,
29,29,29,29,29,29,29,29,29,29,

BIN
sprites/frame.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

View File

@ -2,6 +2,10 @@ const w4 = @import("wasm4.zig");
const sh0rk = @import("sh0rk.zig");
const sprites = @import("sprites.zig");
const palette = @import("palette.zig");
const tframe = @import("tframe.zig");
const std = @import("std");
const fmt = std.fmt;
const Direction = sh0rk.Direction;
const Point = sh0rk.Point;
@ -17,6 +21,12 @@ var screen = Rect{.base = Point{.x = 0, .y = 0}, .width = 160, .height = 160};
var sound_timer: u8 = 0;
var textBuf: [160]u8 = undefined;
var done: bool = true;
var text_frame: bool = false;
var curr_text: []const u8 = undefined;
var text_index: usize = 0;
var text_counter: u4 = 0;
export fn start() void {
palette.mist();
@ -43,38 +53,53 @@ fn bonk() void {
},
w4.Tone.Flags{
.channel = .triangle,
.pulse_duty = .@"1/2",
.pulse_duty = .@"1/4",
},
);
sound_timer = 12;
}
const screen_width = 10;
const screen_height = 10;
fn drawMap() !void {
w4.m.colors.* = .{
._0 = .p0,
._1 = .p1,
._2 = .p2,
._3 = .p3,
._0 = .p3,
._1 = .p2,
._2 = .p1,
._3 = .p0,
};
for (map.data) |tile, i| {
const width = sprites.kenney_rpg_width / 16;
const height = sprites.kenney_rpg_width / 16;
var x: u32 = (i % width) * 16;
var y: u32 = (i / height) * 16;
var col: u32 = 0;
while (col < screen_width) {
var row: u32 = 0;
defer col += 1;
w4.blitSub(
&sprites.kenney_rpg,
x,
y,
16,
16,
@intCast(u32, tile.x) * 16,
@intCast(u32, tile.y) * 16,
sprites.kenney_rpg_width,
w4.BlitFlags{.two_bits = true},
);
while (row < screen_height) {
defer row += 1;
var tile = map.data[col * map.width + row];
var tileX = tile % map.ts_width;
var tileY = tile / map.ts_width;
if (!done) {
var buf = fmt.bufPrint(&textBuf, "{},{}: {}: {},{}", .{col, row, tile, tileX, tileY}) catch unreachable;
w4.trace(buf);
}
w4.blitSub(
&sprites.kenney_rpg,
row * 16,
col * 16,
16,
16,
@intCast(u32, tileX) * 16,
@intCast(u32, tileY) * 16,
sprites.kenney_rpg_width,
w4.BlitFlags{.two_bits = true},
);
}
}
}
@ -113,21 +138,58 @@ fn move_mara(gamepad: w4.GamePad) void {
}
}
fn title() void {
w4.m.colors._0 = .p3;
w4.m.colors._1 = .p0;
w4.text("Mara 2:\nTamamo's Fury", 10, 10);
}
export fn update() void {
defer done = true;
if (sound_timer != 0) {
sound_timer -= 1;
}
drawMap() catch unreachable;
// w4.m.colors._0 = .p3;
// w4.m.colors._1 = .p0;
// w4.text("Mara 2:\nTamamo's Fury", 10, 10);
const gamepad = w4.m.gamepads[0];
const old_speed = mara_speed;
move_mara(gamepad);
if (gamepad.b) {
var buf = fmt.bufPrint(&textBuf, "{},{}", .{mara_box.base.x, mara_box.base.y}) catch unreachable;
w4.trace(buf);
}
if (gamepad.b and !text_frame and mara_direction == Direction.Up and mara_box.base.equals(Point{.x = 16, .y = 112})) {
text_frame = true;
curr_text = "Test message!";
text_index = 0;
text_counter = 4;
}
if (text_frame) {
tframe.draw();
w4.m.colors._0 = .p3;
w4.m.colors._1 = .p0;
w4.text(curr_text[0..text_index], 12, 140);
if (gamepad.a) {
w4.trace("dismissing");
text_frame = false;
text_index = 0;
curr_text = "";
}
if (text_index < curr_text.len) {
text_counter -= 1;
if (text_counter == 0) {
text_index += 1;
text_counter = 4;
}
}
}
for (map.coll) |box| {
if (mara_box.collides(box)) {
switch (mara_direction) {
@ -151,13 +213,17 @@ export fn update() void {
if (mara_box.base.x < 0) {
mara_box.base.x = 0;
bonk();
} else if (mara_box.base.x > 160 - mara_box.width) {
mara_box.base.x = 160 - mara_box.width;
bonk();
}
if (mara_box.base.y < 0) {
mara_box.base.y = 0;
bonk();
} else if (mara_box.base.y > 160 - mara_box.height) {
mara_box.base.y = 160 - mara_box.height;
bonk();
}
var flags: w4.BlitFlags = w4.BlitFlags {
@ -176,7 +242,7 @@ export fn update() void {
// w4.m.colors._2 = .p3;
// w4.m.colors._3 = .transparent;
// w4.blit(&sprites.glaceon, 100, 128, sprites.glaceon_width, sprites.glaceon_height, flags);
// w4.blit(&sprites.glaceon, 0, 0, sprites.glaceon_width, sprites.glaceon_height, flags);
w4.m.colors.* = .{
._0 = .transparent,

View File

@ -1,32 +1,44 @@
// Generated by genmap.js, DO NOT EDIT
// Generated by ./src/tools/genmap.js ./maps/RPGmap.json, DO NOT EDIT
const sh0rk = @import("../sh0rk.zig");
const Point = sh0rk.Point;
const Rect = sh0rk.Rect;
const Tile = sh0rk.Tile;
pub const data = [100]Tile{
Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 8, .y = 1}, Tile{.x = 9, .y = 1}, Tile{.x = 0, .y = 2}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0},
Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 5, .y = 3}, Tile{.x = 2, .y = 5}, Tile{.x = 7, .y = 3}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0},
Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 5, .y = 8}, Tile{.x = 7, .y = 8}, Tile{.x = 3, .y = 10}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 6, .y = 1}, Tile{.x = 0, .y = 0},
Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 4, .y = 10}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0},
Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 4, .y = 10}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 8}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0},
Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 4, .y = 10}, Tile{.x = 6, .y = 6}, Tile{.x = 5, .y = 6}, Tile{.x = 6, .y = 9}, Tile{.x = 7, .y = 9}, Tile{.x = 8, .y = 9}, Tile{.x = 0, .y = 0},
Tile{.x = 7, .y = 6}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 4, .y = 10}, Tile{.x = 5, .y = 6}, Tile{.x = 6, .y = 6}, Tile{.x = 3, .y = 11}, Tile{.x = 4, .y = 11}, Tile{.x = 5, .y = 11}, Tile{.x = 0, .y = 0},
Tile{.x = 2, .y = 10}, Tile{.x = 7, .y = 8}, Tile{.x = 7, .y = 8}, Tile{.x = 5, .y = 10}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 9, .y = 9}, Tile{.x = 7, .y = 11}, Tile{.x = 0, .y = 10}, Tile{.x = 0, .y = 0},
Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 2, .y = 10}, Tile{.x = 7, .y = 8}, Tile{.x = 7, .y = 8}, Tile{.x = 7, .y = 8}, Tile{.x = 6, .y = 10}, Tile{.x = 7, .y = 8}, Tile{.x = 0, .y = 1},
Tile{.x = 2, .y = 1}, Tile{.x = 0, .y = 0}, Tile{.x = 1, .y = 1}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0}, Tile{.x = 0, .y = 0},
pub const width = 10;
pub const height = 10;
pub const ts_width = 17;
pub const ts_height = 8;
pub const data = [100]u8{
0, 0, 0, 0, 0, 18, 19, 20, 0, 0, 68,
0, 0, 0, 0, 35, 52, 37, 0, 0, 0,
0, 0, 0, 85, 87, 103, 0, 0, 16, 0,
0, 0, 0, 104, 0, 0, 0, 0, 0, 0,
68, 0, 0, 104, 0, 0, 0, 80, 0, 0,
0, 0, 0, 104, 66, 65, 96, 97, 98, 0,
67, 0, 0, 104, 65, 66, 113, 114, 115, 0,
102, 87, 87, 105, 0, 0, 99, 117, 100, 0,
0, 0, 0, 102, 87, 87, 87, 106, 87, 10,
12, 0, 11, 0, 0, 0, 0, 0, 0,
};
pub const coll = [9]Rect{
pub const coll = [_]Rect{
Rect{.base = Point{.x = 80, .y = 0}, .width = 47, .height = 16},
Rect{.base = Point{.x = 16, .y = 96}, .width = 16, .height = 15},
Rect{.base = Point{.x = 80, .y = 80}, .width = 80, .height = 32},
Rect{.base = Point{.x = 128, .y = 70}, .width = 16, .height = 9},
Rect{.base = Point{.x = 144, .y = 32}, .width = 16, .height = 16},
Rect{.base = Point{.x = 112, .y = 112}, .width = 15, .height = 16},
Rect{.base = Point{.x = 145, .y = 112}, .width = 15, .height = 16},
Rect{.base = Point{.x = 80, .y = 16}, .width = 15, .height = 15},
Rect{.base = Point{.x = 114, .y = 16}, .width = 14, .height = 16},
Rect{.base = Point{.x = 146, .y = 32}, .width = 11, .height = 16},
Rect{.base = Point{.x = 18, .y = 98}, .width = 12, .height = 13},
Rect{.base = Point{.x = 114, .y = 16}, .width = 12, .height = 13},
Rect{.base = Point{.x = 81, .y = 16}, .width = 13, .height = 15},
Rect{.base = Point{.x = 83, .y = 85}, .width = 26, .height = 27},
Rect{.base = Point{.x = 100, .y = 81}, .width = 8, .height = 5},
Rect{.base = Point{.x = 112, .y = 94}, .width = 48, .height = 17},
Rect{.base = Point{.x = 121, .y = 87}, .width = 30, .height = 7},
Rect{.base = Point{.x = 128, .y = 80}, .width = 16, .height = 7},
Rect{.base = Point{.x = 114, .y = 112}, .width = 11, .height = 13},
Rect{.base = Point{.x = 145, .y = 111}, .width = 12, .height = 13},
Rect{.base = Point{.x = 0, .y = 153}, .width = 31, .height = 7},
Rect{.base = Point{.x = 11, .y = 146}, .width = 9, .height = 7},
Rect{.base = Point{.x = 52, .y = 154}, .width = 8, .height = 6},
};

View File

@ -1,24 +1,29 @@
// Generated by genmap.js, DO NOT EDIT
// Generated by ./src/tools/genmap.js ./maps/TestMap.json, DO NOT EDIT
const sh0rk = @import("../sh0rk.zig");
const Point = sh0rk.Point;
const Rect = sh0rk.Rect;
const Tile = sh0rk.Tile;
pub const data = [100]Tile{
Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2},
Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2},
Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2},
Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 7, .y = 1}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2},
Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 7, .y = 3}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 8, .y = 2}, Tile{.x = 0, .y = 0},
Tile{.x = 1, .y = 0}, Tile{.x = 2, .y = 0}, Tile{.x = 3, .y = 0}, Tile{.x = 1, .y = 0}, Tile{.x = 7, .y = 4}, Tile{.x = 3, .y = 0}, Tile{.x = 1, .y = 0}, Tile{.x = 2, .y = 0}, Tile{.x = 3, .y = 0}, Tile{.x = 5, .y = 0},
Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 1, .y = 2}, Tile{.x = 9, .y = 4}, Tile{.x = 2, .y = 2}, Tile{.x = 5, .y = 1},
Tile{.x = 1, .y = 2}, Tile{.x = 9, .y = 4}, Tile{.x = 2, .y = 2}, Tile{.x = 9, .y = 4}, Tile{.x = 2, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 5, .y = 2},
Tile{.x = 0, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 1, .y = 2}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 5, .y = 0},
Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 1, .y = 2}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 9, .y = 4}, Tile{.x = 1, .y = 4}, Tile{.x = 9, .y = 4},
pub const width = 10;
pub const height = 10;
pub const ts_width = 10;
pub const ts_height = 5;
pub const data = [100]u8{
28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
28, 28, 28, 28, 17, 28, 28, 28, 28, 28,
28, 28, 28, 28, 37, 28, 28, 28, 28, 0,
1, 2, 3, 1, 47, 3, 1, 2, 3, 5,
49, 49, 49, 49, 49, 49, 21, 49, 22, 15,
21, 49, 22, 49, 42, 49, 49, 49, 49, 25,
40, 49, 49, 49, 49, 49, 21, 49, 49, 5,
49, 49, 49, 21, 49, 49, 49, 41, 49,
};
pub const coll = [2]Rect{
pub const coll = [_]Rect{
Rect{.base = Point{.x = 0, .y = 80}, .width = 160, .height = 80},
Rect{.base = Point{.x = 80, .y = 48}, .width = 16, .height = 32},
};

File diff suppressed because one or more lines are too long

161
src/tframe.zig Normal file
View File

@ -0,0 +1,161 @@
const sh0rk = @import("./sh0rk.zig");
const w4 = @import("./wasm4.zig");
const sprites = @import("./sprites.zig");
pub fn draw() void {
w4.m.colors.* = .{
._0 = .p0,
._1 = .p1,
._2 = .p2,
._3 = .p3,
};
w4.blitSub(
&sprites.frame,
0,
128,
8,
8,
0,
0,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
w4.blitSub(
&sprites.frame,
152,
128,
8,
8,
16,
0,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
w4.blitSub(
&sprites.frame,
0,
136,
8,
8,
0,
8,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
w4.blitSub(
&sprites.frame,
152,
144,
8,
8,
16,
8,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
w4.blitSub(
&sprites.frame,
152,
136,
8,
8,
16,
8,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
w4.blitSub(
&sprites.frame,
0,
144,
8,
8,
0,
8,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
w4.blitSub(
&sprites.frame,
0,
152,
8,
8,
0,
16,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
w4.blitSub(
&sprites.frame,
152,
152,
8,
8,
16,
16,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
var i: u8 = 0;
while (i < 18) {
defer i += 1;
w4.blitSub(
&sprites.frame,
(i * 8) + 8,
128,
8,
8,
8,
0,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
w4.blitSub(
&sprites.frame,
(i * 8) + 8,
136,
8,
8,
8,
8,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
w4.blitSub(
&sprites.frame,
(i * 8) + 8,
144,
8,
8,
8,
8,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
w4.blitSub(
&sprites.frame,
(i * 8) + 8,
152,
8,
8,
8,
16,
sprites.frame_width,
w4.BlitFlags{.two_bits = true},
);
}
}

View File

@ -11,22 +11,48 @@ var out = "";
const data = await Deno.readTextFile(mapFile);
const map = JSON.parse(data);
out += `// Generated by genmap.js, DO NOT EDIT\n\n`;
out += `// Generated by ./src/tools/genmap.js ${mapFile}, DO NOT EDIT\n\n`;
out += `const sh0rk = @import("../sh0rk.zig");\n`;
out += `const Direction = sh0rk.Direction;\n`;
out += `const Point = sh0rk.Point;\n`;
out += `const Rect = sh0rk.Rect;\n`;
out += `const Tile = sh0rk.Tile;\n\n`;
out += `const Rect = sh0rk.Rect;\n\n`;
out += `pub const width = ${map.width};\n`;
out += `pub const height = ${map.height};\n\n`;
let tiles = map.layers[0];
out += `pub const data = [${tiles.data.length}]Tile{\n `;
let tilesheet = {
width: 10,
height: 5,
};
map.tilesets.forEach(tset => {
if (tset.source.includes("kenney")) {
tilesheet = {
width: 17,
height: 8,
};
}
if (tset.source.includes("Cave")) {
tilesheet = {
width: 10,
height: 5,
}
}
});
out += `pub const ts_width = ${tilesheet.width};\n`;
out += `pub const ts_height = ${tilesheet.height};\n\n`;
out += `pub const data = [${tiles.data.length}]u8{\n `;
tiles.data.forEach((tile, index) => {
tile -= 1;
const tileY = Math.trunc(tile / tiles.height);
const tileX = tile % tiles.width;
out += `Tile{.x = ${tileX}, .y = ${tileY}},`;
out += `${tile},`;
if (index !== 0 && index % 10 === 0) {
out += "\n ";
} else {
@ -39,7 +65,7 @@ out += "\n};\n\n";
if (map.layers.length >= 2) {
let coll = map.layers[1];
out += `pub const coll = [${coll.objects.length}]Rect{\n`;
out += `pub const coll = [_]Rect{\n`;
coll.objects.forEach(obj => {
const x = Math.round(obj.x);