diff options
-rw-r--r-- | console.s | 22 | ||||
-rw-r--r-- | taipan.c | 28 |
2 files changed, 42 insertions, 8 deletions
@@ -11,6 +11,7 @@ .importzp destptr ; from draw_lorcha.s .importzp sreg .import _cprintulong, _cputc, _cprint_taipan, _timed_getch, _orders + .import _turbo .ifdef CART_TARGET .segment "HIGHCODE" @@ -256,13 +257,34 @@ _plus_or_space: ; extern void set_orders(void); _set_orders: + lda _turbo ; in turbo fight mode? + beq @sowait ; no, so wait like usual + lda CH ; turbo = yes, did user hit a key? + cmp #$ff + bne @sowait ; yes, wait like usual + rts +@sowait: + lda #0 + sta _turbo jsr _timed_getch + ;cmp #$46 ; is it capital F? + ;beq @soturbo + ;cmp #$52 ; or capital R? + ;bne @sonoturbo + cmp #$60 ; capital letter? + bcs @sonoturbo ; nope, disable turbo +@soturbo: + ora #$20 ; convert to lowercase + sta _turbo ; enable turbo + ;;; sta COLOR4 ; for debugging +@sonoturbo: ldx #3 @solp: cmp orders_tbl-1,x beq @returnx dex bne @solp + stx _turbo ; invalid order, disable turbo rts @returnx: stx _orders @@ -112,6 +112,11 @@ extern const char *port_stat_screen; port_stat_screen into screen RAM) */ char port_stat_dirty = 1; +/* boolean, turbo fighting mode. cleared on entry to sea_battle(), set + when user enters turbo mode. must be cleared by the caller, when + sea_battle() returns. */ +unsigned char turbo; + /* asm curses/conio funcs from console.s. Old C versions moved to oldcurses.c for reference. */ extern void clrtobot(void); @@ -1020,6 +1025,7 @@ char sea_battle(char id, int num_ships) { char choice, flashctr, num_on_screen, status; unsigned long amount, total; + turbo = 0; port_stat_dirty = 1; orders = 0; @@ -1082,7 +1088,7 @@ char sea_battle(char id, int num_ships) { for(i = 0; i <= 9; i++) { if (num_ships > num_on_screen) { if (ships_on_screen[i] == 0) { - jsleep(5); + if(!turbo) jsleep(5); ships_on_screen[i] = (randi() % ec) + 20; draw_lorcha(i); num_on_screen++; @@ -1101,6 +1107,7 @@ char sea_battle(char id, int num_ships) { if(orders == 0) { set_orders(); if(!orders) { + turbo = 0; gotox0y(3); clrtoeol(); cprint_taipan_comma(); @@ -1169,7 +1176,7 @@ char sea_battle(char id, int num_ships) { /* flash_lorcha must be called an even number of times to leave the lorcha in an unflashed state after. */ - for(flashctr = 0; flashctr < 6; flashctr++) { + if(!turbo) for(flashctr = 0; flashctr < 6; flashctr++) { flash_lorcha(targeted); jsleep(2); } @@ -1185,7 +1192,10 @@ char sea_battle(char id, int num_ships) { ships_on_screen[targeted] = 0; bad_joss_sound(); /* not sure this should be here */ - sink_lorcha(targeted); + if(turbo) + clear_lorcha(targeted); + else + sink_lorcha(targeted); plus_or_space(num_ships > num_on_screen); @@ -1195,7 +1205,7 @@ char sea_battle(char id, int num_ships) { if(num_ships == 0) { i += guns; } else { - jsleep(10); + if(!turbo) jsleep(10); } } gotox0y(3); @@ -1207,7 +1217,7 @@ char sea_battle(char id, int num_ships) { // cputs(" of the buggers"); print_msg(M_of_the_buggers); cprint_taipan_bang(); - bad_joss_sound(); + if(!turbo) bad_joss_sound(); } else { // cputs("Hit 'em, but didn't sink 'em"); print_msg(M_didnt_sink); @@ -1238,7 +1248,7 @@ char sea_battle(char id, int num_ships) { num_on_screen--; clear_lorcha(i); - jsleep(5); + if(!turbo) jsleep(5); } } if(num_ships == num_on_screen) { @@ -1257,10 +1267,12 @@ char sea_battle(char id, int num_ships) { print_msg(M_we_have_no_guns); cprint_taipan_bangbang(); set_orders(); + turbo = 0; } else if (orders == 3) { choice = 0; amount = 0; total = 0; + turbo = 0; gotox0y(3); // cputs("You have the following on board"); @@ -1425,7 +1437,7 @@ char sea_battle(char id, int num_ships) { cprint_taipan_bang(); set_orders(); - explosion(); + if(!turbo) explosion(); fight_stats(num_ships, orders); plus_or_space(num_ships > num_on_screen); @@ -1457,7 +1469,7 @@ char sea_battle(char id, int num_ships) { // cputs("The buggers hit a gun"); print_msg(M_buggers_hit_gun); cprint_taipan_bangbang(); - under_attack_sound(); + if(!turbo) under_attack_sound(); fight_stats(num_ships, orders); update_guns(); |