Skip to content

Commit 7d07e1b

Browse files
committed
Update char spacing in print(), implement fillp() preset patterns, #4
1 parent 705c921 commit 7d07e1b

File tree

1 file changed

+63
-34
lines changed

1 file changed

+63
-34
lines changed

src/api.c

Lines changed: 63 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -423,42 +423,46 @@ static int pico8_fget(lua_State* L)
423423

424424
static int pico8_fillp(lua_State* L)
425425
{
426-
uint16_t pattern = fix32_to_uint16(luaL_optnumber(L, 1, 0));
426+
uint32_t pattern = 0;
427427

428-
#if 0
429-
// Predefined pattern values.
430-
// P8SCI, 128 - 135.
431-
switch (pattern)
428+
if (lua_type(L, 1) == LUA_TNUMBER)
432429
{
433-
case 0:
434-
case 0x25CB: // 128, Solid.
435-
pattern = 0x0000;
436-
break;
437-
case 0x2588: // 129, Checkerboard.
438-
pattern = 0x5A5A;
439-
break;
440-
case 0x1F431: // 130, Jelpi.
441-
pattern = 0x511F;
442-
break;
443-
case 0x2B07FE0F: // 131, Down key.
444-
pattern = 0x0003;
445-
break;
446-
case 0x2591: // 132, Dot pattern.
447-
pattern = 0x7070;
448-
break;
449-
case 0x273D: // 133, Throwing star.
450-
pattern = 0x8810;
451-
break;
452-
case 0x25CF: // 134, Ball.
453-
pattern = 0xF99F;
454-
break;
455-
case 0x2665: // 135, Heart.
456-
pattern = 0x51BF;
457-
break;
458-
default:
459-
break;
430+
pattern = fix32_to_uint32(luaL_optnumber(L, 1, 0));
431+
}
432+
else if (lua_type(L, 1) == LUA_TSTRING)
433+
{
434+
const char* str = luaL_checkstring(L, 1);
435+
uint8_t fillc = str[0];
436+
437+
switch (fillc)
438+
{
439+
default:
440+
case 128: // Solid.
441+
pattern = 0b0000000000000000;
442+
break;
443+
case 129: // Checkerboard.
444+
pattern = 0b0101101001011010;
445+
break;
446+
case 130: // Jelpi.
447+
pattern = 0b0101000100011111;
448+
break;
449+
case 131: // Down key.
450+
pattern = 0b0000000000000011;
451+
break;
452+
case 132: // Dot pattern.
453+
pattern = 0b0111110101111101;
454+
break;
455+
case 133: // Throwing star.
456+
pattern = 0b1011100000011101;
457+
break;
458+
case 134: // Ball.
459+
pattern = 0b1111100110011111;
460+
break;
461+
case 135: // Heart.
462+
pattern = 0b0101000110111111;
463+
break;
464+
}
460465
}
461-
#endif
462466

463467
pico8_ram[0x5f31] = (pattern & 0xFF00) >> 8;
464468
pico8_ram[0x5f32] = pattern & 0x00FF;
@@ -605,7 +609,7 @@ static int pico8_print(lua_State* L)
605609

606610
uint8_t w, h;
607611
blit_char_to_screen(text[i], cursor_x, cursor_y, color, &w, &h);
608-
cursor_x += (w + 1);
612+
cursor_x += (w == 3) ? w + 1 : w - 1;
609613
}
610614

611615
cursor_y += 6;
@@ -1004,6 +1008,23 @@ static int pico8_poke4(lua_State* L)
10041008
return 0;
10051009
}
10061010

1011+
// System functions.
1012+
1013+
static int pico8_menuitem(lua_State* L)
1014+
{
1015+
TO_BE_DONE;
1016+
}
1017+
1018+
static int pico8_extcmd(lua_State* L)
1019+
{
1020+
TO_BE_DONE;
1021+
}
1022+
1023+
static int pico8_run(lua_State* L)
1024+
{
1025+
TO_BE_DONE;
1026+
}
1027+
10071028
// Table functions.
10081029

10091030
static int pico8_add(lua_State* L)
@@ -1301,6 +1322,14 @@ void init_api(lua_State* L)
13011322
lua_pushcfunction(L, pico8_poke4);
13021323
lua_setglobal(L, "poke4");
13031324

1325+
// System
1326+
lua_pushcfunction(L, pico8_menuitem);
1327+
lua_setglobal(L, "menuitem");
1328+
lua_pushcfunction(L, pico8_extcmd);
1329+
lua_setglobal(L, "extcmd");
1330+
lua_pushcfunction(L, pico8_run);
1331+
lua_setglobal(L, "run");
1332+
13041333
// Tables.
13051334
lua_pushcfunction(L, pico8_add);
13061335
lua_setglobal(L, "add");

0 commit comments

Comments
 (0)