add_C51(int x) { static char *c51[C51PATTERNS][C51HIGHT + 1] = {{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, C51WH11, C51WH12, C51WH13, C51WH14, C51DEL}, {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, C51WH21, C51WH22, C51WH23, C51WH24, C51DEL}, {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, C51WH31, C51WH32, C51WH33, C51WH34, C51DEL}, {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, C51WH41, C51WH42, C51WH43, C51WH44, C51DEL}, {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, C51WH51, C51WH52, C51WH53, C51WH54, C51DEL}, {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, C51WH61, C51WH62, C51WH63, C51WH64, C51DEL}}; static char *coal[C51HIGHT + 1] = {COALDEL, COAL01, COAL02, COAL03, COAL04, COAL05, COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL}; int y, i, dy = 0; if (x < - C51LENGTH) return ERR; y = LINES / 2 - 5; if (FLY == 1) { y = (x / 7) + LINES - (COLS / 7) - C51HIGHT; dy = 1; } for (i = 0; i <= C51HIGHT; ++i) { my_mvaddstr(y + i, x, c51[(C51LENGTH + x) % C51PATTERNS][i]); my_mvaddstr(y + i + dy, x + 55, coal[i]); } if (ACCIDENT == 1) { add_man(y + 3, x + 45); add_man(y + 3, x + 49); } add_smoke(y - 1, x + C51FUNNEL); return OK; }
int add_sl(int x) { static char *sl[LOGOPATTERNS][LOGOHIGHT + 1] = {{LOGO1, LOGO2, LOGO3, LOGO4, LWHL11, LWHL12, DELLN}, {LOGO1, LOGO2, LOGO3, LOGO4, LWHL21, LWHL22, DELLN}, {LOGO1, LOGO2, LOGO3, LOGO4, LWHL31, LWHL32, DELLN}, {LOGO1, LOGO2, LOGO3, LOGO4, LWHL41, LWHL42, DELLN}, {LOGO1, LOGO2, LOGO3, LOGO4, LWHL51, LWHL52, DELLN}, {LOGO1, LOGO2, LOGO3, LOGO4, LWHL61, LWHL62, DELLN}}; static char *coal[LOGOHIGHT + 1] = {LCOAL1, LCOAL2, LCOAL3, LCOAL4, LCOAL5, LCOAL6, DELLN}; static char *car[LOGOHIGHT + 1] = {LCAR1, LCAR2, LCAR3, LCAR4, LCAR5, LCAR6, DELLN}; int i, y, py1 = 0, py2 = 0, py3 = 0; if (x < - LOGOLENGTH) return ERR; y = LINES / 2 - 3; if (FLY == 1) { y = (x / 6) + LINES - (COLS / 6) - LOGOHIGHT; py1 = 2; py2 = 4; py3 = 6; } for (i = 0; i <= LOGOHIGHT; ++i) { my_mvaddstr(y + i, x, sl[(LOGOLENGTH + x) / 3 % LOGOPATTERNS][i]); my_mvaddstr(y + i + py1, x + 21, coal[i]); my_mvaddstr(y + i + py2, x + 42, car[i]); my_mvaddstr(y + i + py3, x + 63, car[i]); } if (ACCIDENT == 1) { add_man(y + 1, x + 14); add_man(y + 1 + py2, x + 45); add_man(y + 1 + py2, x + 53); add_man(y + 1 + py3, x + 66); add_man(y + 1 + py3, x + 74); } add_smoke(y - 1, x + LOGOFUNNEL); return OK; }
add_D51(int x) { static char *d51[D51PATTERNS][D51HIGHT + 1] = {{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL11, D51WHL12, D51WHL13, D51DEL}, {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL21, D51WHL22, D51WHL23, D51DEL}, {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL31, D51WHL32, D51WHL33, D51DEL}, {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL41, D51WHL42, D51WHL43, D51DEL}, {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL51, D51WHL52, D51WHL53, D51DEL}, {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, D51WHL61, D51WHL62, D51WHL63, D51DEL}}; static char *coal[D51HIGHT + 1] = {COAL01, COAL02, COAL03, COAL04, COAL05, COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL}; int y, i, dy = 0; if (x < - D51LENGTH) return ERR; y = LINES / 2 - 5; if (FLY == 1) { y = (x / 7) + LINES - (COLS / 7) - D51HIGHT; dy = 1; } for (i = 0; i <= D51HIGHT; ++i) { my_mvaddstr(y + i, x, d51[(D51LENGTH + x) % D51PATTERNS][i]); my_mvaddstr(y + i + dy, x + 53, coal[i]); } if (ACCIDENT == 1) { add_man(y + 2, x + 43); add_man(y + 2, x + 47); } add_smoke(y - 1, x + D51FUNNEL); return OK; }
void update_ship(Ship *s) { if (keys.left){ if (s->vrot < 7) s->vrot += s->arot; } if (keys.right){ if (s->vrot > -7) s->vrot -= s->arot; } if (keys.space){ fire_bullet(s); keys.space = 0; } if (keys.up){ Vector *v = get_unit_vector(s->rot); s->v->x += v->x / 10; s->v->y += v->y / 10; free(v); add_smoke(s); } //update ship if (s->vrot){ s->vrot *= 0.95; s->rot += s->vrot; s->rot %= 360; if (s->rot < 0) s->rot +=360; rotate_sprite(s->sprite, s->rot_buffer, s->rot); } s->v->x *= 0.95; s->v->y *= 0.95; s->pos->x += s->v->x; s->pos->y += s->v->y; if (s->pos->x < 0) s->pos->x = 0; if (s->pos->x + s->sprite.w > s->rainbow->w) s->pos->x = s->rainbow->w - s->sprite.w; if (s->pos->y < 0) s->pos->y = 0; if (s->pos->y + s->sprite.h > s->rainbow->h) s->pos->y = s->rainbow->h - s->sprite.h; //update bullets int i; for (i = 0; i < vl_array_length(s->bullets); ++i){ Bullet* b = ((Bullet*) get_element(s->bullets, i)); b->x += (int)b->vx; b->y += (int)b->vy; if (point_offscreen (s->rainbow, b->x, b->y) || point_offscreen(s->rainbow, b->x + b->w, b->y + b->h)){ remove_element(s->bullets, b); --i; } } // update particles for (i = 0; i < vl_array_length(s->particles); ++i){ Particle *p = (Particle*) get_element(s->particles, i); --(p->life); p->pos->x += p->v->x; p->pos->y += p->v->y; if (p->life < 0 || point_offscreen(s->rainbow, p->pos->x, p->pos->y)) { free(p->pos); free(p->v); remove_element(s->particles, p); --i; continue; } } }