Przeglądaj źródła

new background assets + workaround for semi-transparent assets

Tim Strasser 2 lat temu
rodzic
commit
f418fcaf57

BIN
assets/scientist_right/frame_03.png → assets/barry_infill.png


BIN
assets/bg1.png


BIN
assets/bg2.png


BIN
assets/bg3.png


BIN
assets/missile_infill.png


+ 0 - 0
assets/scientist_left/frame_01.png → assets/scientist_left.png


+ 0 - 1
assets/scientist_left/frame_rate

@@ -1 +0,0 @@
-3

BIN
assets/scientist_left/frame_03.png → assets/scientist_left_infill.png


+ 0 - 0
assets/scientist_right/frame_01.png → assets/scientist_right.png


BIN
assets/scientist_right/frame_02.png


+ 0 - 1
assets/scientist_right/frame_rate

@@ -1 +0,0 @@
-3

BIN
assets/scientist_left/frame_02.png → assets/scientist_right_infill.png


+ 4 - 0
includes/barry.c

@@ -24,5 +24,9 @@ void barry_tick(BARRY* const barry) {
 }
 
 void draw_barry(const BARRY* barry, Canvas* const canvas, const GameSprites* sprites) {
+    canvas_set_color(canvas, ColorBlack);
     canvas_draw_icon_animation(canvas, barry->point.x, barry->point.y, sprites->barry);
+
+    canvas_set_color(canvas, ColorWhite);
+    canvas_draw_icon(canvas, barry->point.x, barry->point.y, sprites->barry_infill);
 }

+ 1 - 0
includes/coin.c

@@ -43,6 +43,7 @@ void spawn_random_coin(COIN* const coins) {
 }
 
 void draw_coins(const COIN* coins, Canvas* const canvas) {
+    canvas_set_color(canvas, ColorBlack);
     for(int i = 0; i < COINS_MAX; ++i) {
         if(coins[i].point.x > 0) {
             canvas_draw_icon(canvas, coins[i].point.x, coins[i].point.y, &I_coin);

+ 6 - 2
includes/game_sprites.h

@@ -6,9 +6,13 @@
 
 typedef struct {
     IconAnimation* barry;
-    IconAnimation* scientist_left;
-    IconAnimation* scientist_right;
+    const Icon* barry_infill;
+    const Icon* scientist_left;
+    const Icon* scientist_left_infill;
+    const Icon* scientist_right;
+    const Icon* scientist_right_infill;
     IconAnimation* missile;
+    const Icon* missile_infill;
     const Icon* bg[3];
     POINT bg_pos[3];
 } GameSprites;

+ 5 - 0
includes/missile.c

@@ -47,8 +47,13 @@ void spawn_random_missile(MISSILE* const missiles) {
 void draw_missiles(const MISSILE* missiles, Canvas* const canvas, const GameSprites* sprites) {
     for(int i = 0; i < MISSILES_MAX; ++i) {
         if(missiles[i].point.x > 0) {
+            canvas_set_color(canvas, ColorBlack);
             canvas_draw_icon_animation(
                 canvas, missiles[i].point.x, missiles[i].point.y, sprites->missile);
+
+            canvas_set_color(canvas, ColorWhite);
+            canvas_draw_icon(
+                canvas, missiles[i].point.x, missiles[i].point.y, sprites->missile_infill);
         }
     }
 }

+ 1 - 0
includes/particle.c

@@ -48,6 +48,7 @@ void spawn_random_particles(PARTICLE* const particles, BARRY* const barry) {
 }
 
 void draw_particles(const PARTICLE* particles, Canvas* const canvas) {
+    canvas_set_color(canvas, ColorBlack);
     for(int i = 0; i < PARTICLES_MAX; i++) {
         if(particles[i].point.y > 0) {
             canvas_draw_line(

+ 13 - 2
includes/scientist.c

@@ -7,7 +7,9 @@
 void scientist_tick(SCIENTIST* const scientists) {
     for(int i = 0; i < SCIENTISTS_MAX; i++) {
         if(scientists[i].point.x > 0) {
-            scientists[i].point.x -= 1 - scientists[i].velocity_x; // move based on velocity_x
+            scientists[i].point.x -= scientists[i].state == ScientistStateAlive ?
+                                         1 - scientists[i].velocity_x :
+                                         1; // move based on velocity_x
             if(scientists[i].point.x < -16) { // if the scientist is out of screen
                 scientists[i].point.x =
                     0; // set scientist x coordinate to 0 to mark it as "inactive"
@@ -34,14 +36,23 @@ void spawn_random_scientist(SCIENTIST* const scientists) {
 void draw_scientists(const SCIENTIST* scientists, Canvas* const canvas, const GameSprites* sprites) {
     for(int i = 0; i < SCIENTISTS_MAX; ++i) {
         if(scientists[i].point.x > 0) {
+            canvas_set_color(canvas, ColorBlack);
             if(scientists[i].state == ScientistStateAlive) {
-                canvas_draw_icon_animation(
+                canvas_draw_icon(
                     canvas,
                     scientists[i].point.x,
                     scientists[i].point.y,
                     scientists[i].velocity_x >= 0 ? sprites->scientist_right :
                                                     sprites->scientist_left);
 
+                canvas_set_color(canvas, ColorWhite);
+                canvas_draw_icon(
+                    canvas,
+                    scientists[i].point.x,
+                    scientists[i].point.y,
+                    scientists[i].velocity_x >= 0 ? sprites->scientist_right_infill :
+                                                    sprites->scientist_left_infill);
+
             } else {
                 canvas_draw_icon(
                     canvas, scientists[i].point.x, scientists[i].point.y + 5, &I_dead_scientist);

+ 9 - 7
jetpack.c

@@ -37,9 +37,15 @@ static void jetpack_game_state_init(GameState* const game_state) {
 
     GameSprites sprites;
     sprites.barry = icon_animation_alloc(&A_barry);
-    sprites.scientist_left = icon_animation_alloc(&A_scientist_left);
-    sprites.scientist_right = icon_animation_alloc(&A_scientist_right);
+    sprites.barry_infill = &I_barry_infill;
+
+    sprites.scientist_left = (&I_scientist_left);
+    sprites.scientist_left_infill = (&I_scientist_left_infill);
+    sprites.scientist_right = (&I_scientist_right);
+    sprites.scientist_right_infill = (&I_scientist_right_infill);
+
     sprites.missile = icon_animation_alloc(&A_missile);
+    sprites.missile_infill = &I_missile_infill;
 
     sprites.bg[0] = &I_bg1;
     sprites.bg[1] = &I_bg2;
@@ -50,8 +56,6 @@ static void jetpack_game_state_init(GameState* const game_state) {
         sprites.bg_pos[i].y = 0;
     }
 
-    icon_animation_start(sprites.scientist_left);
-    icon_animation_start(sprites.scientist_right);
     icon_animation_start(sprites.barry);
     icon_animation_start(sprites.missile);
 
@@ -68,8 +72,6 @@ static void jetpack_game_state_init(GameState* const game_state) {
 
 static void jetpack_game_state_free(GameState* const game_state) {
     icon_animation_free(game_state->sprites.barry);
-    icon_animation_free(game_state->sprites.scientist_left);
-    icon_animation_free(game_state->sprites.scientist_right);
     icon_animation_free(game_state->sprites.missile);
 
     free(game_state);
@@ -113,7 +115,6 @@ static void jetpack_game_render_callback(Canvas* const canvas, void* ctx) {
 
     if(game_state->state == GameStateLife) {
         // canvas_draw_box(canvas, 0, 0, 128, 32);
-        // canvas_set_color(canvas, ColorXOR);
 
         for(int i = 0; i < 3; ++i) {
             // Check if the image is within the screen's boundaries
@@ -132,6 +133,7 @@ static void jetpack_game_render_callback(Canvas* const canvas, void* ctx) {
 
         draw_barry(&game_state->barry, canvas, &game_state->sprites);
 
+        canvas_set_color(canvas, ColorBlack);
         canvas_set_font(canvas, FontSecondary);
         char buffer[12];
         snprintf(buffer, sizeof(buffer), "Dist: %u", game_state->distance);