Posted By: 3run
Cheap bouncing shells/gibs - 12/14/17 23:36
Title says it all, here is the code:
Best regards!
Code:
#include <acknex.h> #include <default.c> #define PRAGMA_POINTER void bullet_shell_event(){ if(event_type == EVENT_FRAME){ if(my->skill10 < 5){ my->skill3 -= time_step; my->skill4 = c_move(my, nullvector, &my->skill1, IGNORE_PASSABLE | IGNORE_FLAG2); if(HIT_TARGET){ if(normal.z == 0){ // hit a wall? my->skill10 -= 1; // one more hit to die // move us away from the wall my->skill1 = -my->skill1; my->skill2 = -my->skill2; } my->pan = random(360); my->tilt = 0; my->roll = 0; my->skill1 = my->skill1 * 0.9; my->skill2 = my->skill2 * 0.9; my->skill10 += 1; if(my->skill10 < 3){ my->skill3 *= -(0.5 + random(0.25)); if(abs(my->skill3) < 1){ vec_set(&my->skill1, nullvector); } } else{ my->skill1 = 0; my->skill2 = 0; my->skill3 *= -(0.5 + random(0.25)); } } } } } void shell(){ vec_fill(&my->scale_x, 0.5); vec_set(&my->pan, &camera->pan); c_setminmax(my); set(my, POLYGON | TRANSLUCENT | FLAG2); my->alpha = 100; vec_set(&my->skill1, vector(15 * time_step, (5 - random(10)) * time_step, 5 * time_step)); vec_rotate(&my->skill1, &camera->pan); my->emask |= ENABLE_FRAME; my->event = bullet_shell_event; } void main(){ warn_level = 6; fps_max = 60; fps_min = 30; time_smooth = 0.9; freeze_mode = 1; level_load(""); wait(3); freeze_mode = 0; you = ent_create(CUBE_MDL, vector(0, 0, -32), NULL); vec_set(&you->scale_x, vector(64, 64, 0.1)); set(you, POLYGON); c_setminmax(you); you = ent_create(CUBE_MDL, vector(96, 0, 0), NULL); vec_set(&you->scale_x, vector(4, 4, 4)); set(you, POLYGON); c_setminmax(you); def_move(); while(!key_esc){ if((total_frames % 15) == 1){ ent_create(CUBE_MDL, &camera->x, shell); } wait(1); } }
Best regards!