Skip to content

Commit ba32138

Browse files
committed
General bug fixes
* Fixed double clear while initial jump * Fixed landing into invalid state between crashed and playing state * Fixed wrong user name in docker compose file * `clearcanvas()` now called at every frame * Deleted old unused assets
1 parent 046d8f2 commit ba32138

File tree

8 files changed

+20
-35
lines changed

8 files changed

+20
-35
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ Chrome's Dinorunner game as a standalone C library.
44

55

66
## Description
7-
This project contains a port of the famous Chrome's Dinosaur Game written in C.
7+
This project contains a port of the famous Chrome's Dinosaur Game written in C, C++.
88

99
It is designed to be used as a configurable backend library accessable to a wide range of programming languages (using i.e. CFFIs) and hardware architectures.
1010

assets/demo.gif

-660 KB
Binary file not shown.

assets/demo_nightmode.gif

-1.42 MB
Binary file not shown.

assets/demo_nightmode.mp4

-1.14 MB
Binary file not shown.

dinorunner/src/dinorunner.c

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ unsigned char dinorunner_init(struct dinorunner_s* dinorunner, const struct dime
4242
-DINORUNNER_CONFIG_HORIZON_GAP_COEFFICIENT, dinorunner->user_data);
4343
res &= dinorunner_trex_init(&dinorunner->trex, dimension->width, dimension->height, dinorunner->user_data);
4444
res &= dinorunner_gameoverpanel_init(&dinorunner->gameoverpanel, dimension);
45-
res &= dinorunner_clearcanvas(dinorunner->user_data);
4645
res &= dinorunner_distancemeter_init(&dinorunner->distance_meter, &text_dimension, dimension->width,
4746
dinorunner->user_data);
4847
return res;
@@ -59,13 +58,12 @@ unsigned char dinorunner_startgame(struct dinorunner_s* dinorunner) {
5958
unsigned char dinorunner_restart(struct dinorunner_s* dinorunner) {
6059
dinorunner->play_count++;
6160
dinorunner->running_time = 0u;
62-
dinorunner->playing = 0u;
61+
dinorunner->playing = 1u;
6362
dinorunner->distance_ran = 0u;
6463
dinorunner->crashed = 0u;
6564
dinorunner->current_speed = DINORUNNER_CONFIG_SPEED;
6665
// set_speed(DINORUNNER_CONFIG_SPEED);
6766
dinorunner->time = dinorunner_gettimestamp(dinorunner->user_data);
68-
dinorunner_clearcanvas(dinorunner->user_data);
6967
dinorunner_distancemeter_reset(&dinorunner->distance_meter, dinorunner->distance_meter.high_score,
7068
dinorunner->user_data);
7169
dinorunner_horizon_reset(&dinorunner->horizon, dinorunner->user_data);
@@ -94,26 +92,19 @@ void dinorunner_stop(struct dinorunner_s* dinorunner) {
9492
}
9593

9694
static void dinorunner_gameover(struct dinorunner_s* dinorunner) {
97-
if (dinorunner->playing) {
98-
dinorunner_playsound(DINORUNNER_SOUND_HIT, dinorunner->user_data);
99-
dinorunner_vibrate(200, dinorunner->user_data);
100-
}
95+
dinorunner_playsound(DINORUNNER_SOUND_HIT, dinorunner->user_data);
96+
dinorunner_vibrate(200, dinorunner->user_data);
10197
dinorunner_stop(dinorunner);
10298
dinorunner->crashed = 1u;
10399
dinorunner->distance_meter.achievement = 0u;
104100
dinorunner_trex_update(&dinorunner->trex, 100, TREX_STATUS_CRASHED, dinorunner->user_data);
105-
dinorunner_gameoverpanel_draw(&dinorunner->gameoverpanel, dinorunner->user_data);
106101
unsigned last_score = dinorunner_distancemeter_getactualdistance(dinorunner->distance_ran);
107102
if (last_score > dinorunner->distance_meter.high_score) {
108103
dinorunner->distance_meter.high_score = last_score;
109104
dinorunner_distancemeter_writehighscore(&dinorunner->distance_meter, dinorunner->distance_meter.high_score,
110105
dinorunner->user_data);
111106
}
112-
dinorunner_distancemeter_draw(&dinorunner->distance_meter, 0, last_score, 0, dinorunner->user_data);
113-
dinorunner_distancemeter_draw(&dinorunner->distance_meter, 0, dinorunner->distance_meter.high_score, 1,
114-
dinorunner->user_data);
115107
dinorunner->time = dinorunner_gettimestamp(dinorunner->user_data);
116-
dinorunner_clearcanvas(dinorunner->user_data);
117108
}
118109

119110
static inline void dinorunner_createadjustedcollisionbox(const struct collision_box_s* box,
@@ -188,8 +179,8 @@ unsigned char dinorunner_update(struct dinorunner_s* dinorunner) {
188179
unsigned long now = dinorunner_gettimestamp(dinorunner->user_data);
189180
unsigned long delta_time = now - dinorunner->time;
190181
dinorunner->time = now;
182+
dinorunner_clearcanvas(dinorunner->user_data);
191183
if (dinorunner->playing) {
192-
dinorunner_clearcanvas(dinorunner->user_data);
193184
if (dinorunner->trex.jumping) {
194185
dinorunner_trex_updatejump(&dinorunner->trex, delta_time, dinorunner->user_data);
195186
}
@@ -244,16 +235,21 @@ unsigned char dinorunner_update(struct dinorunner_s* dinorunner) {
244235
}
245236
if (dinorunner->crashed) {
246237
dinorunner_gameoverpanel_draw(&dinorunner->gameoverpanel, dinorunner->user_data);
247-
} else if ((dinorunner->playing)) {
238+
dinorunner_horizon_update(&dinorunner->horizon, 0, 0, 1, dinorunner->inverted, dinorunner->user_data);
239+
dinorunner_distancemeter_draw(&dinorunner->distance_meter, 0,
240+
dinorunner_distancemeter_getactualdistance(dinorunner->distance_ran), 0,
241+
dinorunner->user_data);
242+
dinorunner_distancemeter_draw(&dinorunner->distance_meter, 0, dinorunner->distance_meter.high_score, 1,
243+
dinorunner->user_data);
244+
dinorunner_trex_update(&dinorunner->trex, delta_time, TREX_STATUS_CRASHED, dinorunner->user_data);
245+
} else if (dinorunner->playing) {
248246
dinorunner_trex_update(&dinorunner->trex, delta_time, TREX_STATUS_NONE, dinorunner->user_data);
249247
} else if ((!dinorunner->activated) && (dinorunner->trex.blink_count < DINORUNNER_CONFIG_MAX_BLINK_COUNT)) {
250248
dinorunner_trex_update(&dinorunner->trex, delta_time, TREX_STATUS_NONE, dinorunner->user_data);
251249
dinorunner_horizonline_draw(&dinorunner->horizon.horizon_line, dinorunner->user_data);
252-
dinorunner_clearcanvas(dinorunner->user_data);
253250
} else {
254251
dinorunner_trex_update(&dinorunner->trex, delta_time, TREX_STATUS_WAITING, dinorunner->user_data);
255252
dinorunner_horizonline_draw(&dinorunner->horizon.horizon_line, dinorunner->user_data);
256-
dinorunner_clearcanvas(dinorunner->user_data);
257253
}
258254
return 1u;
259255
}

dinorunner/src/horizon.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ static unsigned char duplicate_obstacle_check(const struct horizon_s* horizon,
4343
unsigned duplicate_count = 0;
4444
const unsigned number_of_obstacle_history = get_active_obstacle_history(horizon);
4545
for (unsigned i = 0u; i < number_of_obstacle_history; ++i) {
46-
duplicate_count = (horizon->obstacle_history[i] == next_obstacle_type);
46+
duplicate_count += (horizon->obstacle_history[i] == next_obstacle_type);
4747
}
4848
return duplicate_count >= DINORUNNER_CONFIG_OBSTACLE_MAX_OBSTACLE_DUPLICATION;
4949
}

dinorunner/src/trex.c

Lines changed: 5 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,6 @@ static inline void dinorunner_trex_setjumpvelocity(struct trex_s* trex, int sett
7777
trex->drop_velocity = -setting / 2.0f;
7878
}
7979

80-
static void trex_reset(struct trex_s* trex, void* user_data) {
81-
trex->y_pos = trex->ground_y_pos;
82-
trex->jump_velocity = 0;
83-
trex->jumping = 0u;
84-
trex->ducking = 0u;
85-
dinorunner_trex_update(trex, 0, TREX_STATUS_RUNNING, user_data);
86-
trex->mid_air = 0u;
87-
trex->speed_drop = 0u;
88-
trex->jump_count = 0u;
89-
}
90-
9180
void dinorunner_trex_setduck(struct trex_s* trex, unsigned char is_ducking, void* user_data) {
9281
if (is_ducking && trex->status != TREX_STATUS_DUCKING) {
9382
dinorunner_trex_update(trex, 0, TREX_STATUS_DUCKING, user_data);
@@ -135,10 +124,10 @@ void dinorunner_trex_reset(struct trex_s* trex, void* user_data) {
135124
trex->jump_velocity = 0u;
136125
trex->jumping = 0u;
137126
trex->ducking = 0u;
138-
trex->mid_air = 0u;
139-
trex->speed_drop = 0u;
140-
trex->jump_count = 0u;
141127
dinorunner_trex_update(trex, 0, TREX_STATUS_RUNNING, user_data);
128+
trex->mid_air = 0u;
129+
trex->speed_drop = 0u;
130+
trex->jump_count = 0u;
142131
}
143132

144133
void dinorunner_trex_startjump(struct trex_s* trex, float speed, void* user_data) {
@@ -175,7 +164,7 @@ void dinorunner_trex_updatejump(struct trex_s* trex, float delta_time, void* use
175164
dinorunner_trex_endjump(trex);
176165
}
177166
if (trex->y_pos > trex->ground_y_pos) {
178-
trex_reset(trex, user_data);
167+
dinorunner_trex_reset(trex, user_data);
179168
trex->jump_count++;
180169
}
181170
dinorunner_trex_update(trex, delta_time, TREX_STATUS_NONE, user_data);
@@ -196,7 +185,7 @@ unsigned char dinorunner_trex_init(struct trex_s* trex, unsigned container_width
196185
trex->blink_count = 0;
197186
trex->animation_start_time = 0;
198187
trex->timer = 0;
199-
trex->ms_per_frame = 1000.0 / DINORUNNER_CONFIG_CORE_FPS;
188+
trex->ms_per_frame = 1000.0f / DINORUNNER_CONFIG_CORE_FPS;
200189
trex->status = TREX_STATUS_WAITING;
201190
trex->jumping = 0u;
202191
trex->ducking = 0u;

docker-compose.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ services:
1717
volumes:
1818
- /dev/bus/usb:/dev/bus/usb
1919
- /dev/input:/dev/input
20-
- $HOME/.ssh:/home/dinorunner/.ssh
20+
- $HOME/.ssh:/home/dino_runner/.ssh
2121
- /tmp/.X11-unix:/tmp/.X11-unix
2222
- /dev/dri:/dev/dri
2323
- $XDG_RUNTIME_DIR/pulse/native:$XDG_RUNTIME_DIR/pulse/native

0 commit comments

Comments
 (0)