From 2c4ae5619c51d8f68b8cbac92fc9b4b8cfcdcd2b Mon Sep 17 00:00:00 2001 From: Slyvtt Date: Thu, 19 Jan 2023 22:17:11 +0100 Subject: [PATCH] add capture features + player + fake boss --- CMakeLists.txt | 4 + assets-cg/Sprites/mainship1.png | Bin 0 -> 2274 bytes assets-cg/Sprites/mainship2.png | Bin 0 -> 2300 bytes capture | 2 +- src/MyAzurShaders.h | 4 + src/main.cpp | 192 +++++++++++++++++++++++++++----- src/particles.cpp | 12 +- src/starfieldshader.cpp | 67 +++++++---- 8 files changed, 224 insertions(+), 57 deletions(-) create mode 100644 assets-cg/Sprites/mainship1.png create mode 100644 assets-cg/Sprites/mainship2.png diff --git a/CMakeLists.txt b/CMakeLists.txt index da6aa6a..99ec241 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -22,6 +22,10 @@ set(ASSETS_cg assets-cg/font.png assets-cg/Sprites/emp_circ.png assets-cg/Sprites/fill_circ.png + + assets-cg/Sprites/fill_circ.png + assets-cg/Sprites/mainship1.png + assets-cg/Sprites/mainship2.png # ... ) diff --git a/assets-cg/Sprites/mainship1.png b/assets-cg/Sprites/mainship1.png new file mode 100644 index 0000000000000000000000000000000000000000..b62778a48c3281cb73d8a44044c184ce981a7932 GIT binary patch literal 2274 zcmV<82p#u{P)EX>4Tx04R}tkv&MmP!xqvQ?()$hjtKg$WUFhAS%UCt5Adrp;lE=R~IKm7b)?+q|hS93y=44-aUu+?gNBInQ2zn1fc0v zGnI&one3_YnOVl1BqiZlU-#5abroznZfc;1h{wnPFCmH;7}K zRfF?BahMflmH3=^+@uQI7}=SI#}soRx~x@Y2t{g>69;I zTvj=6an{N;*19KuVKAq!EOVXKFcMhA5+sOFP(ul2R1u|JC&faF&f^~bA;&L~OCeVY zj2sK7K!fb~!T;d*Y_0s%q?;6s1KlsS{V@Urc7bNyw!e>UyLkfmpMfjA?XNU|nNQN| zZ7p&H3~U1z*KJMN11@)f!6!pDWk>SU67qTA{fxdT3xsZgzBPAlt#h0{0BM?4@&-6K z1V#&#z3%bu-p;xG+tZrg52V3zyH&X_!vFvP24YJ`L;wo_5&#kVf!%@t000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j>A31~?(-B7jT)000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}000KLNkl4gzLVkXg116_1 zdhr6*HVRN%lH)i4KsuEM0IY2kFnaL+5A%73$%MagLvw6 zP4|hXPUBp26WX7@fFSU70X})u8*+`FH=F7L3IHeS1zY&5aMyL^%AGGfU!ld~L^l6B_&^vP_K#sS8sYfl zBmA>O1$0yOUiJCjTY06+?0=}QoJ z03c&yeLB3aF*H3(ip3%+7K_B|@shL6CUz{#GCA99B3_S|(Cg~0T*pEKDgi}NVrfgw z+5UU?+3(VP`%b|QP0td)-+^Ff5JtD9Y@TKXI--Noy31@uu*G7LkWi>*cX1qt$UuZ8 zf3p5Wle)%c-RI}>U^Jg^CPODk4Gl*bk zkOkV>MnOXdLEx+QX7rgsE`WuuE^r*D0j#4gH@Ypjdj1T%Ai#Iy z)wAbsRt$ZKg|03{2czf+_cFl(05dbI$Yqo02>0T8tFug9S#3TT-4<+S@{kfS^xwOW zRBRNHfe1dECovE>3w5keLB6m#&2fwtom>q z2R;zSx#p%lm0w}dpvh&EjF*=jP6YUFTyi*}C<^-T-DldhT9A!iyif*od~t;VrKMV5 zDoQ9|MNuFKJQ7m8tQ$}Vm-<|Q?`G7Xnzq`trCr2fK+DQ471mY&%Wey>A9M*RuAx9_ z>s?9L2Ka8x{MtqgxvZ(YsQ4W<0j;PFssUbJTtO-}iuR6n=q|S~fxSomH!aG{%qpI) zuHcfxsmT;pn-6}!102U;d~pS2{Rz^kB;&R^n5xOilLxgfYQWc9ok+#BZoGQ_43_r$ zuI23==6cFewMW!#`DP{$zuyG_xN)O4pa-h1N`TcGwUh?d3NBR?g{2+!@cSKD-rhkv zm4?gZstM?!+CUw2)I#c#3IHyb>%ekMU#8MamZqn}1p1*uMh&>svK+@@X=w=wDGn(S zV>wq*6ex-UQIuE_*v#Y^c=gNH3iL?g+vv6c`=G^4zD#M^%_c~R7=SRVT2dkgyV<1S zc4<|j>mF+>?)7*{N4OWM*eI+v-RQ^VzQAvzewZEXd| zad`A7iyy!L4!3{$0s7ZlDEwK#*PYk!%dZd6VsT=fyvFs`z3)#yymII97Oe!>>+v%0 w)!q8iMH<;!uW6%M6q!*PTBzX#j`2DF0sl#4<6P(hU;qFB07*qoM6N<$f_W?t<8 literal 0 HcmV?d00001 diff --git a/assets-cg/Sprites/mainship2.png b/assets-cg/Sprites/mainship2.png new file mode 100644 index 0000000000000000000000000000000000000000..bc064144b8cfb9eed8b042badec8bfdd4c4eaab6 GIT binary patch literal 2300 zcmVEX>4Tx04R}tkv&MmP!xqvQ?()$hjtKg$WUFhAS%UCt5Adrp;lE=R~IKm7b)?+q|hS93y=44-aUu+?gNBInQ2zn1fc0v zGnI&one3_YnOVl1BqiZlU-#5abroznZfc;1h{wnPFCmH;7}K zRfF?BahMflmH3=^+@uQI7}=SI#}soRx~x@Y2t{g>69;I zTvj=6an{N;*19KuVKAq!EOVXKFcMhA5+sOFP(ul2R1u|JC&faF&f^~bA;&L~OCeVY zj2sK7K!fb~!T;d*Y_0s%q?;6s1KlsS{V@Urc7bNyw!e>UyLkfmpMfjA?XNU|nNQN| zZ7p&H3~U1z*KJMN11@)f!6!pDWk>SU67qTA{fxdT3xsZgzBPAlt#h0{0BM?4@&-6K z1V#&#z3%bu-p;xG+tZrg52V3zyH&X_!vFvP24YJ`L;wo_5&#kVf!%@t000SaNLh0L z01FcU01FcV0GgZ_00007bV*G`2j>A3200E@=!{eV000?uMObu0Z*6U5Zgc=ca%Ew3 zWn>_CX>@2HM@dakSAh-}000KlNkl+-n&0P_uO;OIrjnoQtIp42+#9`=Xp|J*GBMv z3D5I{3q^=trzgbaB0SF%y-rWKP=xS2|8~J_HV4t`^o0HsC_)jE1kGQ6RYEZ^E@E3!cZ+FqrJ{w0??f4Lr6uj{yMc_8)>)t9^4CN(Ym* z;si6?y+#8LIJCIqZ(^ESu9I9A5QUj&Xu%feG2G-v0RWMQH2{EhYfs`6?Z-Ia&|;#Y z1&socZ0(YPmg>YP3;?DD0C*l#GpLHn%jj*K0su@jwBVP{2TP8Jl9ELtDBrqsmNksNX(D{0R6)whzW6AxNvI0j>P3kJ8)FK z15J0nz_0voh{|_JoMF*!=PUaHz=aE^5EJ5zf!WYxv>h=aE-^wb6d_cL3k{e#7{wEA zJ)UsukvSLz0K|ki0AT$7pD7EXW72VBLL8IPcGgZI9(*#|j_O(gHk*T7y5zypqo=_0 zJjwI<0G}VwCE{3T;2v_b5`B6GyIFs=T#2cRk^yf zFv-D_23k6SxQ)%`kU-Hs7H?Gw6c>slPT5353%Y_`=nUM$hws13)Y|Mh4yS4*Hk`XC z+3$^8%>aOA&v9huSP>KAhzW71R4TSjv`wj1gX&rzj&_8xL6^_^e5R4HgXBDU9%EcD z`iDoPo|@W#ST>xyi0)?(F~;>GJIBgE)N-Z77*}gD*{M>?m1y=P0&8}T6+MI9_%3_{ zEzLJspX?kfigr6O8Et1u000F&2`ZK9<^TL~O#rlGqOygpe5fx704OjD3;L`AV=)XS zJBIq~YylOOmocf4u|?&-_YU(_w>#$#O-7@Ta0}DZ(<#1VGTM$tfuO)x3~}m8C0$vv z#DqAqbF3&Z7Nb!h%;(T~#PfAOdx(rc#c3H`y|_{=V_dIfg5eks&COzr>tzFrMJ-pN?D`cLOm>MY0D#WEyDS_{&CQ~`+yjHjE`eG!V@!sj z!E) zSrm!^CBtkl+zIE&^K9TXjuLiVe(-1N9EmvZ+EK&F1(KuUB zsa1o=PxCR+&;sYl^VnXvGX*N`7Y!QC#kqBTT^lJWDIxWBZ7dymQKKM)fTa}TI)X&q zi<-bV(FX@S;Y+@)(P^ zN|NN!I@)$Qmqpofq0XE+1JkBG2;RO0bI~@IvQWnwynPD*U@qE*@IVK?`utlMKU%ls zc@)b5(rUFbE)*d@Ui=>MLOm->hAz8)1>u1Xm^STM7R+mXY@mBjpKsh~kS(=tDe@0J WFzl85 const &list, int fragnum ); +#define SHOW_PIXELS 1 +#define SHOW_STARS 2 + void azrp_starfield( void ); void azrp_starfield_init( uint8_t nbstars ); void azrp_starfield_close( void ); +void azrp_starfield_USBDEBUG( uint8_t info ); #endif //MYAZURSHADERS_H \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index be2c1f4..81cb4fe 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -46,7 +46,48 @@ std::vector MyParticles; Starfield *MyStarField; uint8_t texttodraw=1; +extern bopti_image_t img_mainship1, img_mainship2; +uint8_t movement = -1; +uint16_t playerX = 0; +uint16_t playerY = 0; + +uint16_t bossX = 0; +uint16_t bossY = 0; + + + +static void hook_prefrag(int id, void *fragment, int size) +{ + if(!screenshot && !record) + return; + + /* Screenshot takes precedence */ + char const *type = screenshot ? "image" : "video"; + + int pipe = usb_ff_bulk_output(); + + if(id == 0) { + usb_fxlink_header_t h; + usb_fxlink_image_t sh; + int size = azrp_width * azrp_height * 2; + + usb_fxlink_fill_header(&h, "fxlink", type, size + sizeof sh); + sh.width = htole32(azrp_width); + sh.height = htole32(azrp_height); + sh.pixel_format = htole32(USB_FXLINK_IMAGE_RGB565); + + usb_write_sync(pipe, &h, sizeof h, 4, false); + usb_write_sync(pipe, &sh, sizeof sh, 4, false); + } + + usb_write_sync(pipe, fragment, size, 4, false); + + if(id == azrp_frag_count - 1) { + usb_commit_sync(pipe); + screenshot = false; + } +} /*void Create_Starfield( void ) { @@ -55,7 +96,7 @@ uint8_t texttodraw=1; void Create_Explosion( void ) { - if(MyParticles.size()>=150) return; + if(MyParticles.size()>=1) return; srand(rtc_ticks()); @@ -93,34 +134,125 @@ static void update( float dt ) static void get_inputs( void ) { + uint8_t speed = 4; + key_event_t ev; while((ev = pollevent()).type != KEYEV_NONE) { } + movement = 0; + if(keydown(KEY_SHIFT)) {Create_Explosion();} if(keydown(KEY_EXIT)) {exitToOS = true; }; - if(keydown(KEY_7)) {screenshot = true; }; - if(keydown(KEY_8)) {record = !record; }; - if(keydown(KEY_9)) {textoutput = true; }; + if(keydown(KEY_7)) {screenshot = true;}; + if(keydown(KEY_8)) {record = true; }; + if(keydown(KEY_9)) {record = false; }; + if(keydown(KEY_DEL)) {textoutput = true;}; if(keydown(KEY_F1)) {texttodraw=0;} if(keydown(KEY_F2)) {texttodraw=1;} if(keydown(KEY_F3)) {texttodraw=2;} if(keydown(KEY_F4)) {texttodraw=3;} + + + if(keydown(KEY_LEFT)) + { + if(playerX>speed) + playerX-=speed; + } + if(keydown(KEY_RIGHT)) + { + if(playerXspeed) + playerY-=speed; + } + if(keydown(KEY_DOWN)) + { + if(playerY=2) Azur_draw_text(1,51, ">Total = %.3f ml secs", (float) elapsedTime / 1000.0f ); if (texttodraw>=2) Azur_draw_text(1,61, ">Total = %.0f seconds", (float) elapsedTime ); - if (texttodraw>=3) Azur_draw_text(1,81, "Mem Used : %d", _uram_stats->used_memory ); - if (texttodraw>=3) Azur_draw_text(1,91, "Mem Free : %d", _uram_stats->free_memory ); - if (texttodraw>=3) Azur_draw_text(1,101, "Mem Peak Used : %d", _uram_stats->peak_used_memory ); + if (texttodraw>=3) Azur_draw_text(1,81, "Mem Used : %d", _uram_stats->used_memory + extram_stats->used_memory); + if (texttodraw>=3) Azur_draw_text(1,91, "Mem Free : %d", _uram_stats->free_memory + extram_stats->free_memory); + if (texttodraw>=3) Azur_draw_text(1,101, "Mem Peak Used : %d", _uram_stats->peak_used_memory + extram_stats->peak_used_memory ); if (texttodraw>=3) Azur_draw_text(1,121, "Size of Particles : %d bytes", sizeof(Particle) ); @@ -201,6 +342,11 @@ int main(void) azrp_starfield(); + azrp_image_p8_effect(bossX, bossY, &img_mainship2, IMAGE_VFLIP); + + azrp_image_p8(playerX, playerY, &img_mainship1, DIMAGE_NONE); + + azrp_update(); } @@ -220,27 +366,10 @@ int main(void) elapsedTime = ((float) (time_update+time_render)); - if (screenshot && usb_is_open()) - { - usb_fxlink_screenshot(false); - screenshot = false; - } - - if(record && usb_is_open()) - { - usb_fxlink_videocapture(false); - } - if (textoutput && usb_is_open()) { - char texttosend[1024]; - - /*for(unsigned int i=0; i 30 ) color = 0x526A; // Dark Purple Gray-ish - else if ( age > 25 ) color = 0x71D6; // Red Brown -ish - else if ( age > 20 ) color = 0xF80D; // Dark Red - else if ( age > 15 ) color = 0xFB80; // Red - else if ( age > 10 ) color = 0xFFE0; // Yellow + if ( age > 38 ) color = 0x526A; // Dark Purple Gray-ish + else if ( age > 30 ) color = 0x71D6; // Red Brown -ish + else if ( age > 25 ) color = 0xF80D; // Dark Red + else if ( age > 20 ) color = 0xFB80; // Red + else if ( age > 15 ) color = 0xFFE0; // Yellow else color = 0xFFFF; // White azrp_subimage_p8_dye( px-7, py-7, diff --git a/src/starfieldshader.cpp b/src/starfieldshader.cpp index b02529b..58dc876 100644 --- a/src/starfieldshader.cpp +++ b/src/starfieldshader.cpp @@ -29,7 +29,9 @@ #define ORANGE2 0x8AA7 #define ORANGE3 0xDB83 - +#define WHITE1 0x31A6 +#define WHITE2 0x9CD3 +#define WHITE3 0xFFFF uint8_t AZRP_SHADER_STARFIELD = -1; @@ -64,10 +66,41 @@ void azrp_shader_starfield_configure(void) } +void azrp_starfield_USBDEBUG( uint8_t info ) +{ + char texttosend[1024]; + + int nbpixelcumulated = 0; + + if (info==SHOW_PIXELS) + for(unsigned int i=0; ix, pixels[i]->y, pixels[i]->s, pixels[i]->frag, pixels[i]->c, pixels[i]->off ); + usb_fxlink_text(texttosend, 0); + } + else if (info==SHOW_STARS) + for(unsigned int i=0; in==1 || starfield[i]->n==2) nbpixelcumulated+=4; + else if (starfield[i]->n==3) nbpixelcumulated+=9; + else if (starfield[i]->n==4) nbpixelcumulated+=21; + + sprintf( texttosend, "Star %d : x=%d : y=%d : s=%d : n=%d : t=%d : cumul=%d\n", i, starfield[i]->x, starfield[i]->y, starfield[i]->s, starfield[i]->n, starfield[i]->t, nbpixelcumulated ); + usb_fxlink_text(texttosend, 0); + } +} + + void azrp_starfield_init( uint8_t nbstars ) { - srand(rtc_ticks()); + for(auto&s : starfield) + delete(s); + + starfield.clear(); + + + srand(rtc_ticks()); for(int i=0; in==2) + if (s->n==1 || s->n==2) { ptemp = new particle( s->x, s->y, s->s, col2, s->y/16, s->y&15 ); pixels.push_back( ptemp ); @@ -206,17 +238,12 @@ void azrp_starfield_init( uint8_t nbstars ) ptemp = new particle( s->x+3, s->y+4, s->s, col1, (s->y+4)/16, (s->y+4)&15 ); pixels.push_back( ptemp ); } - else - { - ptemp = new particle( s->x, s->y, s->s, col3, s->y/16, s->y&15 ); - pixels.push_back( ptemp ); - } +// else +// { +// ptemp = new particle( s->x, s->y, s->s, col3, s->y/16, s->y&15 ); +// pixels.push_back( ptemp ); +// } } - - for(auto&s : starfield) - delete(s); - - starfield.clear(); } @@ -274,11 +301,11 @@ void azrp_shader_starfield( void *uniforms, void *comnd, void *fragment ) for(int i=0; inbpixel; i++) { - particle *data = cmd->data[i]; + particle *currentpart = cmd->data[i]; - if (cmd->current_frag == data->frag) + if (cmd->current_frag == currentpart->frag) { - frag[azrp_width * data->off + data->x] = data->c; + frag[azrp_width * currentpart->off + currentpart->x] = currentpart->c; } } cmd->current_frag++;