From e9150857c20dcec9c180fa38559caef9affbdca0 Mon Sep 17 00:00:00 2001 From: Vince Weaver Date: Thu, 28 Jun 2018 00:19:06 -0400 Subject: [PATCH] tfv: can actually win battles now --- gr-sim/tfv/tfv_battle.c | 181 +++++++++++++++++++++++++++++++++------- 1 file changed, 152 insertions(+), 29 deletions(-) diff --git a/gr-sim/tfv/tfv_battle.c b/gr-sim/tfv/tfv_battle.c index 945c1c39..dce1e7de 100644 --- a/gr-sim/tfv/tfv_battle.c +++ b/gr-sim/tfv/tfv_battle.c @@ -16,13 +16,34 @@ /* Metrocat Easter Egg (summon?) */ -/* Enemies: */ -/* Killer Crab, Evil Tree, Deadly Bees, Big Fish, Procrastinon */ +/* Environment: grass, beach, forest, ice */ + +/* Enemies: HP ATTACK WEAKNESS RESIST */ +/* Killer Crab RND-32 PINCH MALAISE FIRE + Plain Fish BUBBLE FIRE ICE + + Evil Tree RND-16 LEAVE FIRE ICE + Wood Elf SING MALAISE FIRE + + Giant Bee RND-64 BUZZSAW ICE NONE + Procrastinon RND-32 PUTOFF NONE MALAISE + + Ice Fish RND-32 AUGER FIRE ICE + EvilPenguin WADDLE FIRE ICE + +*/ /* Battle. Forest? Grassland? Artic? Ocean? + ATTACK REST + MAGIC LIMIT + SUMMON RUN - + SUMMONS -> METROCAT + MAGIC -> HEAL FIRE + ICE MALAISE + LIMIT -> SLICE ZAP + DROP 1 2 3 0123456789012345678901234567890123456789| @@ -50,21 +71,125 @@ List hits /* Room for guinea pig in party? */ /* Attacks -> HIT, ZAP, HEAL, RUNAWAY */ +#define MAGIC_NONE 0 +#define MAGIC_FIRE 1 +#define MAGIC_ICE 2 +#define MAGIC_MALAISE 4 +struct enemy_type { + char *name; + int hp_base,hp_mask; + char *attack_name; + int weakness,resist; + unsigned char *sprite; +}; + +static struct enemy_type enemies[8]={ + [0]= { + .name="Killer Crab", + .hp_base=10, + .hp_mask=0x1f, + .attack_name="Pinch", + .weakness=MAGIC_MALAISE, + .resist=MAGIC_FIRE, + .sprite=killer_crab, + }, +}; + + +static int attack(int enemy_x,int enemy_type) { + + int ax=34; + + while(ax>10) { + + gr_copy_to_current(0xc00); + + if (ax&1) { + grsim_put_sprite(tfv_stand_left,ax,20); + } + else { + grsim_put_sprite(tfv_walk_left,ax,20); + } + grsim_put_sprite(tfv_led_sword,ax-5,20); + + grsim_put_sprite(enemies[enemy_type].sprite,enemy_x,20); + + page_flip(); + + ax-=1; + + usleep(20000); + } + + return 10; +} + + + +static int victory_dance(void) { + + int ax=34; + int i; + int saved_drawpage; + + saved_drawpage=ram[DRAW_PAGE]; + + ram[DRAW_PAGE]=PAGE2; // 0xc00 + + clear_bottom(); + + vtab(21); + htab(10); + move_cursor(); + print("EXPERIENCE +2"); + experience+=2; + + vtab(22); + htab(10); + move_cursor(); + print("MONEY +1"); + money+=1; + + ram[DRAW_PAGE]=saved_drawpage; + + for(i=0;i<50;i++) { + + gr_copy_to_current(0xc00); + + if (i&1) { + grsim_put_sprite(tfv_stand_left,ax,20); + } + else { + grsim_put_sprite(tfv_walk_left,ax,20); + } + + page_flip(); + + usleep(100000); + } + + return 0; +} int do_battle(void) { int i,ch; int enemy_x=2; + int enemy_type=0; int saved_drawpage; - //int enemy_hp=20; + int enemy_hp=0; - int tfv_x=34; + int ax=34; -// home(); -// gr(); + /* Setup Enemy */ + // enemy_type=X + // ranom, with weight toward proper terrain + /* Setup Enemy HP */ + enemy_hp=enemies[enemy_type].hp_base+ + (rand()&enemies[enemy_type].hp_mask); saved_drawpage=ram[DRAW_PAGE]; @@ -75,7 +200,7 @@ int do_battle(void) { vtab(22); htab(1); move_cursor(); - print("KILLER CRAB"); + print(enemies[enemy_type].name); vtab(21); htab(27); @@ -99,38 +224,29 @@ int do_battle(void) { print("/"); print_byte(max_hp); + /* Draw Limit break bargraph */ ram[COLOR]=0x20; hlin_double(ram[DRAW_PAGE],33,33+limit,42); - -// basic_htab(34); -// basic_vtab(22); -// basic_inverse(); -// for(i=0;i