From 33626877102c00d7886d3da7d061dfe282a93769 Mon Sep 17 00:00:00 2001 From: Fries Date: Fri, 21 Jun 2024 00:45:28 -0700 Subject: [PATCH] get the bird to draw. the bird now draws! i also got a font loaded too. --- .vscode/settings.json | 2 + data/PixelOperator.ttf | Bin 0 -> 17272 bytes data/yellowbird-midflap.png | Bin 425 -> 4527 bytes jsconfig.json | 5 ++ source/CMakeLists.txt | 2 +- source/game.js | 15 +++++- source/grrlib_duk.c | 9 ++++ source/main.c | 104 +++++++++--------------------------- source/wii_duk.c | 76 ++++++++++++++++++++++++++ source/wii_duk.h | 6 +++ types.d.ts | 15 ++++++ yellowbird-midflap.png | Bin 0 -> 425 bytes 12 files changed, 152 insertions(+), 82 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 data/PixelOperator.ttf create mode 100644 jsconfig.json create mode 100644 source/wii_duk.c create mode 100644 source/wii_duk.h create mode 100644 types.d.ts create mode 100644 yellowbird-midflap.png diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2c63c08 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,2 @@ +{ +} diff --git a/data/PixelOperator.ttf b/data/PixelOperator.ttf new file mode 100644 index 0000000000000000000000000000000000000000..34fe947b8d4e7efa8e57798512ff15b232a763de GIT binary patch literal 17272 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 literal 0 HcmV?d00001 diff --git a/data/yellowbird-midflap.png b/data/yellowbird-midflap.png index 2ca3c2d034b2332726bb6157591ee3319900c2fc..f9f3da6299a8e1a454d59e7fe7db2e35c92c00da 100644 GIT binary patch literal 4527 zcmeHKe^36%A02!c$vW?S-LkIHRE4E#;FzV9IHJ_ChTht>Kd zqJ|F;sft2WG6pu)1Uo_%iA2J&de~+`TgJ%k5mmI(Z-w@wA^SCGFAiZMpiQYFkm;~* zhK+{yY}g-wP23dR>j<>vk6QU=LrZ2J>$9vjJ4$OQQmZq;^(3ulNdrq$C`qy;!&1o* zt!f$fNM^G2U|&L(m&A+=yEP*N_4+&x(FqVF(7b+|Ir{_q?2XIw-^1p_KDF5-{2{mU z*_r*%&-t}I{;cL5wz2C@R@s?X_Z~87+M;8BIkz=Vd-^bYNK*Y`@yDwtkaIsOp*yw~S)VyxwZ1>$ z*huHRPj4R`8M^+nujfWaVCBv8_u0B~Q{EFFZ60Yzc>A%|4~IVFpGeOB?xTvH0psb+ zozc7JQ@U%+CH0>Qo&1|G7ya$*=ER0Q2lnM3d3Ct(N>@+OQ!9!(mft_&T~oZ~5_^u^ zUU&?9Y_r|o6Z3KV%stN~_AG5W{c!62_+Db$viRPZdCcImFUEW^TsM0B))y-`Hk1=d z%?Mk(V2F=W--vj*X<*$?mgEjZsZ%3Y)O=FBKk^^H-P^lzaBB=UikY^fBy~t-H}}X zhP0cfeV_NG5S1_o17bm;RA|d#d5=rW37!(54Y<7Wfgver0WZg|1rk~UN=3IByVZFV zLq)-itw^?!Hg5(f6SHf4AipNJfUjB0GXj>Ds!0j3kiZ2b4h^`RZa*6^V+t<|ZF!i$ zPz55bHDiS^k1{+yfaJaxWC#haRJ=zPmn2s92Vf`eWF(qJ#JLyD~U23Q!Lsz!@o%B+MWA&0(qg}aJ^Dy!Qsac&;SRFGUNLLSCo)bS>V9%m>(;(D4+#yLJ&z)8+nBIry8gJ3jHpjhq` zVODa^iC)Q60;J+Nk~1+n3Ks+l;CdqfkctO5q^Ef!&{2ZXp->4t`?SaB;^1+LF0K?1 zUU#W7Aq&o?+pT7d){^5Rb|)t}-~uz2Bf2XB;}Zp<3*<|jtR`ioOiZ%Qm~1i{7z0C( zgMJQtewc|er&2qW8TnXP7z`Aalk*f3DB~~|Hp2%v$>S^Vc${V|Ty?|KHh7%`PU0+_ z1R!a+4i}8oVVpFwWYB$?&gKzBNA>?g%a;dDfp~c2*`gorU#$!UZ&W@g4?YDSouYD; zP*k}TEXM~!@N<MYR1x{}uNx)DzW1=0n-ULc;MyCfj zQ=&6+6lqL$@WH6U?0%0!s^WYgy%g#QwSwuX{DndnD+iUNXck6Sl>zw_pkO#@z-eks zFjGh{A`~zo*Nm}#U*>>@vcJoK>KR7g|vJUAFDS#6oIS7YYHPMh_uxBIW~Z92zlNiQh7aHEmZ zoFM0I+!Ki0wYqc366WR)e(MT6B_x<(D^_RHSwPD9)I zb=_!V?$=$ZM;Cu{*E5i{=iiOFQR>esRu6u4Z$oNg!=Xj>TQU!x?<;50Yb@WHRSTax z3F2C>ONZCIa&qM0z@3`9bpOff+TFt=_cJZOLbeT@cg^m1f3sk8PJFbpyDv~HT*~ME za_Zf42fp3a@`eVzcqJuy6Ns}nw4YmsMqjrsI61t1;FRNe>wTu!)-}+%kRQHq?9b~) zt*JMWRY~n@Ubt`tYx{I)Q^rxEvTtO5{t5N}qE!_v&0*@@GiuR~S{Chm`;4Z0P`waJjaV~tEp1DGQTrcB2{Ty$ literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^N0k@DU)Otn z{rdG|yYcmBXZ~0)JZRAQ|NsAjlBe20X~vQuzhDN3XE)M7oFs2|7ml`jQ>%a+&H|6f zVg?3oVGw3ym^DWND9B#o>Fdh=n3;!xN%;9M)g3^gOivfb5Q)pJ7ccT2P~cz*2-_hV zaZog3q4tiZ*WX=k-CFeW?_KXB9ZGT)DW}32LR~d)aPO9UxKJfwxlGFf6@%Z?=Pl^{ zvG%BD+$I544c4p8tvx5#F1#mwQfZCt4!*T6202kV(`MNHKjQ6|w8gBn>)PVeKuc9i zTq8@t-i!lHI diff --git a/jsconfig.json b/jsconfig.json new file mode 100644 index 0000000..c24ac80 --- /dev/null +++ b/jsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "target": "ESNext" + } +} diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt index 7aefc3f..5e5c203 100644 --- a/source/CMakeLists.txt +++ b/source/CMakeLists.txt @@ -12,7 +12,7 @@ add_custom_command( COMMENT "Creating data_generated.c from the data directory" ) -add_executable(WiiDuktape main.c grrlib_duk.c game.c data_generated.c) +add_executable(WiiDuktape main.c grrlib_duk.c wii_duk.c game.c data_generated.c) target_link_libraries(WiiDuktape duktape) target_link_libraries(WiiDuktape GRRLIB) ogc_create_dol(WiiDuktape) diff --git a/source/game.js b/source/game.js index d95b03e..ed5d9e6 100644 --- a/source/game.js +++ b/source/game.js @@ -1,3 +1,11 @@ +/** + * returns an RGBA buffer + * @param {number} r red + * @param {number} g green + * @param {number} b blue + * @param {number} a alpha + * @returns {RGBA} + */ function rgba(r, g, b, a) { const buffer = Uint8Array.allocPlain(4); buffer[0] = r; @@ -21,7 +29,11 @@ function rgba_compare(rgba1, rgba2) { } globalThis.rectangle_color = RED_COLOR; + +/** @type {GRRLibTexture} */ globalThis.background = null; +/** @type {GRRLibTexture} */ +globalThis.bird = null; function swap_colors() { if (rgba_compare(rectangle_color, RED_COLOR)) { @@ -53,7 +65,6 @@ function update() { } wii.grrlib.fill_screen(WHITE_COLOR); - // wii.grrlib.rectangle(0, 0, 320, 240, rectangle_color, true); - wii.grrlib.draw_img(320, 0, background, 0, 1, 1, WHITE_COLOR); + wii.grrlib.draw_img(0, 0, background, 0, 1, 1, WHITE_COLOR); wii.grrlib.draw_img(0, 0, bird, 0, 1, 1, WHITE_COLOR); } diff --git a/source/grrlib_duk.c b/source/grrlib_duk.c index 82c7f0b..e972d3c 100644 --- a/source/grrlib_duk.c +++ b/source/grrlib_duk.c @@ -45,6 +45,15 @@ static duk_ret_t grrlib_load_texture(duk_context *ctx) { GRRLIB_texImg* texture = GRRLIB_LoadTexture(file_ptr); + if (texture->data == NULL) { + duk_push_string(ctx, "filename"); + duk_get_prop(ctx, 0); + const char * filename = duk_to_string(ctx, -1); + duk_pop(ctx); + + return duk_error(ctx, DUK_ERR_ERROR, "An error has occured while trying load the texture for the file %s.", filename); + } + duk_push_pointer(ctx, texture); return 1; diff --git a/source/main.c b/source/main.c index cf2266d..8435ebc 100644 --- a/source/main.c +++ b/source/main.c @@ -1,94 +1,42 @@ #include #include -#include -#include "grrlib_duk.h" +#include +#include + #include "data.h" +#include "wii_duk.h" -extern const char* program; +extern const char * program; static bool running = true; - -static duk_ret_t native_print(duk_context *ctx) { - GRRLIB_GeckoPrintf("%s\n", duk_to_string(ctx, 0)); - return 0; -} - -static duk_ret_t native_exit(duk_context *ctx) { - running = false; - return 0; -} +static GRRLIB_ttfFont * font; +static unsigned int green = RGBA(0, 255, 0, 255); static void duk_fatal_error(void *udata, const char *msg) { - GRRLIB_GeckoPrintf("an error has occured: %s\n", msg); -} - -static duk_ret_t pad_scan_pads() { - PAD_ScanPads(); - return 0; -} - -static duk_ret_t pad_buttons_down(duk_context *ctx) { - u32 pressed = PAD_ButtonsDown(0); - duk_push_number(ctx, pressed); - return 1; -} - -static duk_ret_t get_file(duk_context *ctx) { - const char* filename = duk_to_string(ctx, 0); - - void* ptr; - size_t size; - - if (get_file_pointer(filename, &ptr, &size)) { - duk_idx_t file_obj = duk_push_object(ctx); - - duk_push_number(ctx, size); - duk_put_prop_string(ctx, file_obj, "size"); - - duk_push_pointer(ctx, ptr); - duk_put_prop_string(ctx, file_obj, "file_ptr"); - - return 1; + const char * err_message_format = "an error has occured: %s"; + size_t message_size = strlen(err_message_format) + strlen(msg) * sizeof(char *); + char * message = malloc(message_size); + snprintf(message, message_size, err_message_format, msg); + while (1) { + GRRLIB_PrintfTTF(0, 0, font, message, 12, green); + GRRLIB_Render(); } - - return duk_error(ctx, DUK_ERR_ERROR, "Error trying to get the file %s.", filename); -} - -static void define_pad_object(duk_context *ctx) { - duk_idx_t pad_obj = duk_push_object(ctx); - - duk_push_c_function(ctx, pad_scan_pads, 0); - duk_put_prop_string(ctx, pad_obj, "scan_pads"); - - duk_push_c_function(ctx, pad_buttons_down, 0); - duk_put_prop_string(ctx, pad_obj, "buttons_down"); -} - -static void define_wii_object(duk_context *ctx) { - duk_idx_t wii_obj = duk_push_object(ctx); - - duk_push_c_function(ctx, native_print, 1); - duk_put_prop_string(ctx, wii_obj, "print"); - - duk_push_c_function(ctx, native_exit, 0); - duk_put_prop_string(ctx, wii_obj, "exit"); - - define_pad_object(ctx); - duk_put_prop_string(ctx, wii_obj, "pad"); - - define_grrlib_object(ctx); - duk_put_prop_string(ctx, wii_obj, "grrlib"); - - duk_push_c_function(ctx, get_file, 1); - duk_put_prop_string(ctx, wii_obj, "get_file"); } int main(int argc, char **argv) { GRRLIB_Init(); PAD_Init(); - duk_context *ctx = duk_create_heap(NULL, NULL, NULL, NULL, duk_fatal_error); + // get the pixel operator font's data pointer and size + void * pixel_operator_font; + size_t pixel_operator_font_size; + get_file_pointer("PixelOperator.ttf", &pixel_operator_font, &pixel_operator_font_size); - define_wii_object(ctx); + font = GRRLIB_LoadTTF(pixel_operator_font, pixel_operator_font_size); + + duk_context * ctx = duk_create_heap(NULL, NULL, NULL, NULL, duk_fatal_error); + + // create a wii object on the global object (globalThis) + define_wii_object(ctx, font, &running); duk_put_global_string(ctx, "wii"); // evaluate functions from game.js @@ -102,6 +50,7 @@ int main(int argc, char **argv) { while (running) { PAD_ScanPads(); + // call update function duk_get_global_string(ctx, "update"); duk_call(ctx, 0); duk_pop(ctx); @@ -109,10 +58,7 @@ int main(int argc, char **argv) { GRRLIB_Render(); } - // printf("destroying heap\n"); duk_destroy_heap(ctx); - - // printf("exit time\n"); GRRLIB_Exit(); return 0; diff --git a/source/wii_duk.c b/source/wii_duk.c new file mode 100644 index 0000000..e0d9c5a --- /dev/null +++ b/source/wii_duk.c @@ -0,0 +1,76 @@ +#include "wii_duk.h" +#include "data.h" +#include "grrlib_duk.h" + +static GRRLIB_ttfFont * font; +static bool * running; +static unsigned int green = RGBA(0, 255, 0, 255); + +static duk_ret_t native_print(duk_context *ctx) { + GRRLIB_PrintfTTF(0, 0, font, duk_to_string(ctx, 0), 32, green); + return 0; +} + +static duk_ret_t native_exit(duk_context *ctx) { + *running = false; + return 0; +} + +static duk_ret_t pad_buttons_down(duk_context *ctx) { + u32 pressed = PAD_ButtonsDown(0); + duk_push_number(ctx, pressed); + return 1; +} + +static duk_ret_t get_file(duk_context *ctx) { + const char* filename = duk_to_string(ctx, 0); + + void* ptr; + size_t size; + + if (get_file_pointer(filename, &ptr, &size)) { + duk_idx_t file_obj = duk_push_object(ctx); + + duk_push_number(ctx, size); + duk_put_prop_string(ctx, file_obj, "size"); + + duk_push_pointer(ctx, ptr); + duk_put_prop_string(ctx, file_obj, "file_ptr"); + + duk_push_string(ctx, filename); + duk_put_prop_string(ctx, file_obj, "filename"); + + return 1; + } + + return duk_error(ctx, DUK_ERR_ERROR, "Error trying to get the file %s.", filename); +} + +static void define_pad_object(duk_context *ctx) { + duk_idx_t pad_obj = duk_push_object(ctx); + + duk_push_c_function(ctx, pad_buttons_down, 0); + duk_put_prop_string(ctx, pad_obj, "buttons_down"); +} + +void define_wii_object(duk_context *ctx, struct GRRLIB_Font * grrlib_font, bool * global_running) { + font = grrlib_font; + running = global_running; + + duk_idx_t wii_obj = duk_push_object(ctx); + + duk_push_c_function(ctx, native_print, 1); + duk_put_prop_string(ctx, wii_obj, "print"); + + duk_push_c_function(ctx, native_exit, 0); + duk_put_prop_string(ctx, wii_obj, "exit"); + + define_pad_object(ctx); + duk_put_prop_string(ctx, wii_obj, "pad"); + + define_grrlib_object(ctx); + duk_put_prop_string(ctx, wii_obj, "grrlib"); + + duk_push_c_function(ctx, get_file, 1); + duk_put_prop_string(ctx, wii_obj, "get_file"); +} diff --git a/source/wii_duk.h b/source/wii_duk.h new file mode 100644 index 0000000..071f088 --- /dev/null +++ b/source/wii_duk.h @@ -0,0 +1,6 @@ +#ifndef WII_DUK_H +#define WII_DUK_H +#include +#include +void define_wii_object(duk_context * ctx, struct GRRLIB_Font * grrlib_font, bool * global_running); +#endif diff --git a/types.d.ts b/types.d.ts new file mode 100644 index 0000000..11049c6 --- /dev/null +++ b/types.d.ts @@ -0,0 +1,15 @@ +declare interface RGBA {} +declare interface FilePtr {} +declare interface GRRLibTexture {} + +declare namespace wii { + function exit(): void + function get_file(filename: string) : FilePtr + namespace grrlib { + function load_texture(file: FilePtr) : GRRLibTexture + function fill_screen(color: RGBA): void + function draw_img(xPos: number, yPos: number, texture: GRRLibTexture, degrees: number, scaleX: number, scaleY: number, color: RGBA) : void + function rectangle(x: number, y: number, width: number, height: number, color: RGBA, filled: bool) : void + } +} + diff --git a/yellowbird-midflap.png b/yellowbird-midflap.png new file mode 100644 index 0000000000000000000000000000000000000000..2ca3c2d034b2332726bb6157591ee3319900c2fc GIT binary patch literal 425 zcmeAS@N?(olHy`uVBq!ia0vp^N0k@DU)Otn z{rdG|yYcmBXZ~0)JZRAQ|NsAjlBe20X~vQuzhDN3XE)M7oFs2|7ml`jQ>%a+&H|6f zVg?3oVGw3ym^DWND9B#o>Fdh=n3;!xN%;9M)g3^gOivfb5Q)pJ7ccT2P~cz*2-_hV zaZog3q4tiZ*WX=k-CFeW?_KXB9ZGT)DW}32LR~d)aPO9UxKJfwxlGFf6@%Z?=Pl^{ zvG%BD+$I544c4p8tvx5#F1#mwQfZCt4!*T6202kV(`MNHKjQ6|w8gBn>)PVeKuc9i zTq8@t-i!lHI literal 0 HcmV?d00001