From 9d59ca053dbfddb34a2a4eac8ebb0252460c0137 Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Mon, 10 May 2021 16:47:37 -0400 Subject: Rewrite array handling, save 175 bytes --- taipan.c | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) (limited to 'taipan.c') diff --git a/taipan.c b/taipan.c index 367c7be..8221cc1 100644 --- a/taipan.c +++ b/taipan.c @@ -378,6 +378,17 @@ unsigned long __fastcall__ strtonum(const char* nptr); unsigned char firmpos; +int ships_on_screen[10]; + +/* arrayutils.s */ +extern char no_ships_on_screen(void); +extern void clear_ships_on_screen(void); +extern char have_no_cargo(void); +extern char hold_is_empty(void); +extern char hkw_is_empty(void); +extern void clear_hold(void); +extern void clear_hkw(void); + /* use page 6 for these buffers, for .xex build. Otherwise they're BSS. */ #ifdef CART_TARGET char firm[23]; @@ -637,14 +648,8 @@ void init_game(void) { #else bank = 0; #endif - hkw_[0] = 0; - hkw_[1] = 0; - hkw_[3] = 0; - hkw_[4] = 0; - hold_[0] = 0; - hold_[1] = 0; - hold_[2] = 0; - hold_[3] = 0; + clear_hkw(); + clear_hold(); hold = 0; damage = 0; wu_warn = 0; @@ -1091,12 +1096,6 @@ void plus_or_space(unsigned char b) { #endif */ -int ships_on_screen[10]; -extern char have_ships_on_screen(void); -extern void clear_ships_on_screen(void); - -char have_no_cargo(void); - /* sea_battle only ever returns 1 to 4. making the return type a char saved 61 bytes! */ char sea_battle(char id, int num_ships) { @@ -1212,7 +1211,7 @@ char sea_battle(char id, int num_ships) { set_orders(); for(i = 1; i <= guns; i++) { - if(!have_ships_on_screen()) { + if(no_ships_on_screen()) { static int j; for (j = 0; j <= 9; j++) { @@ -1332,7 +1331,7 @@ char sea_battle(char id, int num_ships) { total = 0; turbo = 0; - if(have_no_cargo()) { + if(hold_is_empty()) { print_combat_msg(M_you_have_no_cargo); cprint_taipan_bangbang(); bad_joss_sound(); @@ -1407,10 +1406,7 @@ char sea_battle(char id, int num_ships) { hold += amount; ok += (amount / 10); } else { - hold_[0] = 0; - hold_[1] = 0; - hold_[2] = 0; - hold_[3] = 0; + clear_hold(); hold += total; ok += (total / 10); } @@ -2179,12 +2175,15 @@ void final_stats(void) #endif } +/* + // rewritten in asm (arrayutils.s) char have_no_cargo(void) { char i; for(i = 0; i < 4; ++i) if(hkw_[i] || hold_[i]) return 0; return 1; } +*/ /* #ifdef CART_TARGET @@ -3550,9 +3549,11 @@ int main(void) { under_attack_timed_getch(); } + /* if ((one_chance_in(50)) && ((hkw_[0] + hkw_[1] + hkw_[2] + hkw_[3]) > 0)) - { + */ + if(one_chance_in(50) && !hkw_is_empty()) { int i; for (i = 0; i < 4; i++) -- cgit v1.2.3