diff --git a/README.md b/README.md index 6f6d39f..931de9d 100644 --- a/README.md +++ b/README.md @@ -40,7 +40,13 @@ entities: -> 0 (coin) -> damage equals the coin's value -> 1 (non-moving explosive) - -> 2 (seeking explosive) + -> 2 (damaging firebar) + [.. hz_rps, vt_rps, x_offset, y_offset, z_offset dps] with + {hz,vt}_rps = double + hz0, vt_0 = double + {x,y,z}_offset = double // if all is 0.0, the solid will rotate according to its center of mass, this shifts that center + dps = int[>0] + -> 3 (shooting, maybe moving explosive) [.. proj_speed, shoot_speed, shot_freq, shot_ttl] with {all} = double[>= 0.0] diff --git a/bin/back b/bin/back index 2660016..656c434 100755 Binary files a/bin/back and b/bin/back differ diff --git a/levels/level_00/room_0 b/levels/level_00/room_0 index 4644554..56f8dcb 100644 --- a/levels/level_00/room_0 +++ b/levels/level_00/room_0 @@ -6,6 +6,7 @@ Blocks : [13.0, 0.0, 13.0, 2.0, 10.0, 2.0, 0.0, 0.0, 128, 128, 128] Entities: +[0.0, 11.5, 0.0, 1.0, 1.0, 5.0, 0.0, 0.0, 255, 255, 255, 1, 0, 2, 0.0, 3.0, 0.0, 0.0, -2.0, 100] [-0.5 , 2.0, -0.5 , 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 0 , 5, 0, 0] [-11.0, 0.0, -1.0 , 2.0, 2.0, 2.0, 0.0, 0.0, 255, 255, 255, 1 , 0, 6, welcome here, 222, 222, 222] [9.0 , 0.0, -1.0 , 2.0, 2.0, 2.0, 0.0, 0.0, 255, 255, 128, 1 , 0, 6, collect coins to advance, 222, 222, 111] diff --git a/obj/entities.o b/obj/entities.o index 09b4633..0c4abe9 100644 Binary files a/obj/entities.o and b/obj/entities.o differ diff --git a/obj/generation.o b/obj/generation.o index 7d78f89..22d32a7 100644 Binary files a/obj/generation.o and b/obj/generation.o differ diff --git a/obj/main.o b/obj/main.o index 5d91f5e..c41ecc3 100644 Binary files a/obj/main.o and b/obj/main.o differ diff --git a/res/minecraft_lava.jpg b/res/minecraft_lava.jpg new file mode 100644 index 0000000..5c99402 Binary files /dev/null and b/res/minecraft_lava.jpg differ diff --git a/src/entities.c b/src/entities.c index df7c733..aee4b95 100644 --- a/src/entities.c +++ b/src/entities.c @@ -211,6 +211,24 @@ void math_block(double x, double y, double z, double w, double h, double d, doub } } +// metad1 = hz_speed (// to y) +// metad2 = vt_speed (// to x) +// metad7 = norm of HZ deviation +// metad8 = norm of VT deviation +// metai1 = dps +void lava_postStep(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, entity* ent, cube_0* ret) { + ret->hz_angle += ((double)dtime)*ent->metad1; + ret->vt_angle += ((double)dtime)*ent->metad2; + + ret->x = ent->metad4+(ent->metad7)*cos(ret->hz_angle); + ret->y = ent->metad5+(ent->metad8)*sin(ret->vt_angle); + ret->z = ent->metad6+(ent->metad7)*sin(ret->hz_angle)+(ent->metad8)*cos(ret->vt_angle); +} + +void lava_onHit(float dtime, int* hp, int* dmg, entity* ent, cube_0* ret) { + player_hp -= ent->metai1; +} + void active_math(float dtime, int* hp, int* dmg, entity* ent, cube_0* ret) { if(ent->metad1 == 0.0) { mathSignal = true; diff --git a/src/entities.h b/src/entities.h index 40fc69c..1304e31 100644 --- a/src/entities.h +++ b/src/entities.h @@ -19,8 +19,10 @@ void go_to_player(double x, double y, double z, double w, double h, double d, do void subtitle_text_box(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, entity* ent, cube_0* ret); void beating_block(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, entity* ent, cube_0* ret); void spinning_platform(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, entity* ent, cube_0* ret); -void math_block(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, entity* ent, cube_0* ret) ; +void math_block(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, entity* ent, cube_0* ret); +void lava_postStep(double x, double y, double z, double w, double h, double d, double hz_angle, double vt_angle, float dtime, entity* ent, cube_0* ret); +void lava_onHit(float dtime, int* hp, int* dmg, entity* ent, cube_0* ret); void active_math(float dtime, int* hp, int* dmg, entity* ent, cube_0* ret); void update_button(float dtime, int* hp, int* dmg, entity* ent, cube_0* ret); void spinning_translate(float dtime, int* hp, int* dmg, entity* ent, cube_0* ret); diff --git a/src/generation.c b/src/generation.c index bc75d22..0cbaeb5 100644 --- a/src/generation.c +++ b/src/generation.c @@ -59,17 +59,17 @@ void init_ent_generator(int n) { hashtbl_entities[1].onDeath = NULL; hashtbl_entities[2].id = 2; - hashtbl_entities[2].tex = 13; - hashtbl_entities[2].tex2 = 13; - hashtbl_entities[2].name = "ExplosiveSeek"; - hashtbl_entities[2].updatePos = &go_to_player; - hashtbl_entities[2].onHit = &explodeOnHit; + hashtbl_entities[2].tex = 14; + hashtbl_entities[2].tex2 = 14; + hashtbl_entities[2].name = "SpinningDamagingThing"; + hashtbl_entities[2].updatePos = &lava_postStep; + hashtbl_entities[2].onHit = &lava_onHit; hashtbl_entities[2].onDeath = NULL; hashtbl_entities[3].id = 3; hashtbl_entities[3].tex = 13; hashtbl_entities[3].tex2 = 13; - hashtbl_entities[3].name = "ExplosiveShoot"; + hashtbl_entities[3].name = "ExplosiveSeekShoot"; hashtbl_entities[3].updatePos = &speen2; hashtbl_entities[3].onHit = &explodeOnHit; hashtbl_entities[3].onDeath = NULL; @@ -452,7 +452,27 @@ void parse_one_room(int id, char* filename) { pool[id].area->ents[k]->metad7 = entry->metad7; pool[id].area->ents[k]->metad8 = entry->metad8; pool[id].area->ents[k]->metad9 = entry->metad9; - if(entry->id == 3) { + if(entry->id == 2) { + // spinning damage + double hz_spd = read_float(ptr); + double vt_spd = read_float(ptr); + double offx = read_float(ptr); + double offy = read_float(ptr); + double offz = read_float(ptr); + int dps = read_int(ptr); + pool[id].area->ents[k]->metad1 = hz_spd; + pool[id].area->ents[k]->metad2 = vt_spd; + + pool[id].area->ents[k]->metad4 = pool[id].area->ents[k]->pos->x - offx; + pool[id].area->ents[k]->metad5 = pool[id].area->ents[k]->pos->y - offy; + pool[id].area->ents[k]->metad6 = pool[id].area->ents[k]->pos->z - offz; + + pool[id].area->ents[k]->metad7 = sqrt(offx*offx+offz*offz); + pool[id].area->ents[k]->metad8 = sqrt(offy*offy+offz*offz); + printf("--> %lf %lf <-- with %lf %lf %lf\n", pool[id].area->ents[k]->metad7, pool[id].area->ents[k]->metad8, offx, offy, offz); + pool[id].area->ents[k]->metai1 = dps; + } else if(entry->id == 3) { + // mine double pspd = read_float(ptr); double bspd = read_float(ptr); double bfreq = read_float(ptr); diff --git a/src/main.c b/src/main.c index 479525d..1ecba88 100644 --- a/src/main.c +++ b/src/main.c @@ -527,7 +527,7 @@ int main_alt() { glEnableVertexAttribArray(1); printf("-----------------------------------------------------------------------------------------------\n"); fflush(stdout); - // 16 max // + // 32 max // //generate_texture_2D(0, "res/container.jpg", "jpg"); generate_texture_2D(0, "res/white.png", PNG); @@ -548,6 +548,7 @@ int main_alt() { generate_texture_2D(11, "res/button_off.jpg", JPG); generate_texture_2D(12, "res/pi.png", PNG); generate_texture_2D(13, "res/tnt.png", PNG); + generate_texture_2D(14, "res/minecraft_lava.jpg", JPG); printf("-----------------------------------------------------------------------------------------------\n"); fflush(stdout); diff --git a/templates/room_0 b/templates/room_0 index fce8ded..c249570 100644 --- a/templates/room_0 +++ b/templates/room_0 @@ -13,6 +13,7 @@ Teleporters : [9.0, 1.0, 4.0, 1.0, 4.0, 2.0, 0.0, 0.0, 0, 0, 255; 0, 1] Entities : +[0.0, 11.5, 0.0, 5.0, 1.0, 1.0, 1.57, 0.0, 255, 255, 255, 1, 0, 2, 0.0, 3.0, 0.0, 3.0, 0.0, 100] [1.0, -6.0, 3.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 255, 1, 32, 1] [1.0, -3.0, 3.0, 1.0, 1.0, 1.0, 0.0, 0.0, 255, 255, 255, 1, 32, 3, 0.0, 4.0, 1.0, 1.0] [-1.0, 13.0, -1.0, 2.0, 2.0, 2.0, 0.0, 0.0, 255, 255, 255, 1, 0, 9, 1.5, 1.5, 0]