From 05d46134807c8b43b9414d7ade817cdc85f49b98 Mon Sep 17 00:00:00 2001 From: Rusty Wagner Date: Sun, 1 Nov 2015 01:19:27 -0400 Subject: [PATCH] Implement sell and buyback and move things around to make room for them --- Makefile | 4 +- audio/neonstarlight_loop.asm | 2 +- buy.asm | 342 +++++++------ buyback.asm | 952 +++++++++++++++++++++++++++++++++++ craft.asm | 235 +++++---- inventory.asm | 213 ++++---- main.asm | 2 +- map.asm | 3 + mapper1.cfg | 44 +- minimap.asm | 2 +- salvage.asm | 256 +++++----- sell.asm | 867 +++++++++++++++++++++++++++++++ shop.asm | 176 ++++++- start.asm | 27 +- usage.py | 8 +- 15 files changed, 2614 insertions(+), 519 deletions(-) create mode 100644 buyback.asm create mode 100644 sell.asm diff --git a/Makefile b/Makefile index f75e2a7..55c2a41 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ CHR = $(wildcard *.chr) PwnAdventureZ.nes: $(OBJS) flagemu.o Makefile mapper1.cfg PwnAdventureZ_prg.bin $(LD65) -C mapper1.cfg -o $@ $(OBJS) flagemu.o -vm --mapfile PwnAdventureZ.map - md5 -q PwnAdventureZ.map | xxd -r -p | dd of=PwnAdventureZ.nes bs=1 seek=131078 count=4 conv=notrunc + md5 -q PwnAdventureZ.map | xxd -r -p | dd of=PwnAdventureZ.nes bs=1 seek=262150 count=4 conv=notrunc python usage.py python tools/map2nl.py PwnAdventureZ.map tools/makehtml.sh @@ -15,7 +15,7 @@ PwnAdventureZ.nes: $(OBJS) flagemu.o Makefile mapper1.cfg PwnAdventureZ_prg.bin PwnAdventureZ_prg.bin: $(OBJS) flagreal.o Makefile mapper1.cfg $(LD65) -C mapper1.cfg -o PwnAdventureZ_physical.nes $(OBJS) flagreal.o -vm --mapfile PwnAdventureZ.map - md5 -q PwnAdventureZ.map | xxd -r -p | dd of=PwnAdventureZ_physical.nes bs=1 seek=131078 count=4 conv=notrunc + md5 -q PwnAdventureZ.map | xxd -r -p | dd of=PwnAdventureZ_physical.nes bs=1 seek=262150 count=4 conv=notrunc dd if=PwnAdventureZ_physical.nes of=PwnAdventureZ_prg.bin bs=1 skip=16 $(CA65) $(LD65): diff --git a/audio/neonstarlight_loop.asm b/audio/neonstarlight_loop.asm index ebadf33..ffce3b7 100644 --- a/audio/neonstarlight_loop.asm +++ b/audio/neonstarlight_loop.asm @@ -999,7 +999,7 @@ VAR neonstarlight_loop_page_43 .byte $39, $81, $35, $03, $11, $50, $b8, $b9, $33, $02, $11, $10, $b7, $b8, $31, $11 .byte $10, $76, $77, $30, $11, $00, $75, $76, $00, $00, $00, $00, $00, $00, $00, $00 -.segment "CHR5" +.segment "AUDIO6" VAR neonstarlight_loop_page_44 .byte $d1, $00, $74, $73, $3e, $01, $0d, $01, $72, $fa, $02, $00, $00, $00, $5d, $5d diff --git a/buy.asm b/buy.asm index b52b9d6..1f44870 100644 --- a/buy.asm +++ b/buy.asm @@ -24,19 +24,19 @@ palettesaveloop: PROC show_buy_tab jsr clear_alt_screen - LOAD_ALL_TILES $000, crafting_ui_tiles + LOAD_ALL_TILES $000, inventory_ui_tiles ; Determine which items are possible to buy (don't imclude guns the player already has) lda #0 sta arg0 - sta valid_buy_count + sta valid_shop_count checkloop: ldx arg0 lda purchase_items, x jsr find_item - ldx valid_buy_count - sta valid_buy_index, x + ldx valid_shop_count + sta valid_shop_index, x cmp #$ff beq noitem @@ -51,9 +51,9 @@ checkloop: noitem: lda arg0 - ldx valid_buy_count - sta valid_buy_list, x - inc valid_buy_count + ldx valid_shop_count + sta valid_shop_list, x + inc valid_shop_count nextitem: ldx arg0 @@ -62,93 +62,11 @@ nextitem: cpx purchase_item_count bne checkloop - ; Draw box around buy screen - lda #1 - sta arg0 - lda #32 + 1 - sta arg1 - lda #28 - sta arg2 - lda #32 + 22 - sta arg3 - jsr draw_large_box - - LOAD_PTR buy_str - ldx #4 - ldy #32 + 1 - jsr write_string - - ; Set palette for title - lda #1 - sta arg0 - lda #16 + 0 - sta arg1 - lda #5 - sta arg2 - lda #16 + 0 - sta arg3 - lda #2 - sta arg4 - jsr set_box_palette - - lda #10 - sta arg0 - lda #16 + 0 - sta arg1 - lda #13 - sta arg2 - lda #16 + 0 - sta arg3 - lda #2 - sta arg4 - jsr set_box_palette - - ; Set palette for inside of box - lda #1 - sta arg0 - lda #16 + 1 - sta arg1 - lda #13 - sta arg2 - lda #16 + 10 - sta arg3 - lda #1 - sta arg4 - jsr set_box_palette - - ; Set palette for status area - lda #0 - sta arg0 - lda #16 + 12 - sta arg1 - lda #14 - sta arg2 - lda #16 + 13 - sta arg3 - lda #1 - sta arg4 - jsr set_box_palette - - ; Draw initial items lda #0 sta selection lda #0 sta scroll - jsr render_buy_items - -itemend: - jsr render_inventory_status_bar - - ; Draw help text - LOAD_PTR buy_help_str - ldx #3 - ldy #32 + 23 - jsr write_string - - jsr select_buy_item - - LOAD_PTR inventory_palette - jsr fade_in + jsr render_buy_screen lda #30 sta repeat_time @@ -177,12 +95,14 @@ selectloop: jmp done buyback: - ;jmp buyback - jmp waitfordepress + PLAY_SOUND_EFFECT effect_uimove + jsr fade_out + jmp show_buyback_tab sell: - ;jmp sell - jmp waitfordepress + PLAY_SOUND_EFFECT effect_uimove + jsr fade_out + jmp show_sell_tab nobutton: lda #30 @@ -203,7 +123,7 @@ up: jsr deselect_inventory_item dec selection - jsr select_buy_item + jsr select_shop_item attop: jmp waitfordepress @@ -211,21 +131,21 @@ down: lda selection clc adc #1 - cmp valid_buy_count + cmp valid_shop_count beq atbottom PLAY_SOUND_EFFECT effect_uimove jsr deselect_inventory_item inc selection - jsr select_buy_item + jsr select_shop_item atbottom: jmp waitfordepress buy: lda selection tax - lda valid_buy_list, x + lda valid_shop_list, x tax stx arg0 @@ -256,6 +176,10 @@ notfull: lda gold + 3 cmp purchase_price_low, x bcc notenough + jmp buyok + +notenough: + jmp waitfordepress buyok: lda gold + 3 @@ -308,8 +232,11 @@ buydone: jsr write_string jsr prepare_for_rendering -notenough: - jmp waitfordepress + lda controller + and #JOY_B + beq waitfordepresslong + jmp selectloop + jmp shortwaitfordepress shortwaitfordepress: lda repeat_time @@ -319,6 +246,9 @@ shortwaitfordepress: jsr wait_for_frame_count lda #3 sta repeat_time + + ldx #8 + jsr wait_for_frame_count jmp selectloop waitfordepresslong: @@ -372,30 +302,30 @@ PROC buy_gun ; Guns can only be bought once ldx selection moveloop: - lda valid_buy_list + 1, x - sta valid_buy_list, x + lda valid_shop_list + 1, x + sta valid_shop_list, x inx - cpx valid_buy_count + cpx valid_shop_count bne moveloop - dec valid_buy_count + dec valid_shop_count ; Refresh item indexes as they may have changed lda #0 sta arg0 refreshloop: ldx arg0 - lda valid_buy_list, x + lda valid_shop_list, x tax lda purchase_items, x jsr find_item ldx arg0 - sta valid_buy_index, x + sta valid_shop_index, x ldx arg0 inx stx arg0 - cpx valid_buy_count + cpx valid_shop_count bne refreshloop jsr render_buy_items @@ -413,22 +343,22 @@ PROC buy_item sta arg0 refreshloop: ldx arg0 - lda valid_buy_list, x + lda valid_shop_list, x tax lda purchase_items, x jsr find_item ldx arg0 - sta valid_buy_index, x + sta valid_shop_index, x ldx arg0 inx stx arg0 - cpx valid_buy_count + cpx valid_shop_count bne refreshloop ; Get string with item count lda selection tax - lda valid_buy_index, x + lda valid_shop_index, x cmp #$ff bne nonzerocount lda #0 @@ -450,7 +380,7 @@ getcountstr: asl clc adc arg0 - adc #32 + 4 + adc #32 + 3 tay jsr write_string @@ -462,6 +392,17 @@ getcountstr: .segment "FIXED" +PROC render_buy_screen + lda current_bank + pha + lda #^do_render_buy_screen + jsr bankswitch + jsr do_render_buy_screen & $ffff + pla + jsr bankswitch + rts +.endproc + PROC render_buy_items lda current_bank pha @@ -473,12 +414,12 @@ PROC render_buy_items rts .endproc -PROC select_buy_item +PROC select_shop_item lda current_bank pha - lda #^do_select_buy_item + lda #^do_select_shop_item jsr bankswitch - jsr do_select_buy_item & $ffff + jsr do_select_shop_item & $ffff pla jsr bankswitch rts @@ -496,14 +437,102 @@ PROC clear_last_buy_item .endproc -.segment "EXTRA" +.segment "UI" + +PROC do_render_buy_screen + ; Draw box around buy screen + lda #1 + sta arg0 + lda #32 + 1 + sta arg1 + lda #28 + sta arg2 + lda #32 + 22 + sta arg3 + jsr draw_large_box + + LOAD_PTR buy_str + ldx #4 + ldy #32 + 1 + jsr write_string + + ; Set palette for title + lda #1 + sta arg0 + lda #16 + 0 + sta arg1 + lda #5 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + lda #10 + sta arg0 + lda #16 + 0 + sta arg1 + lda #13 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + ; Set palette for inside of box + lda #1 + sta arg0 + lda #16 + 1 + sta arg1 + lda #13 + sta arg2 + lda #16 + 10 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + ; Set palette for status area + lda #0 + sta arg0 + lda #16 + 12 + sta arg1 + lda #14 + sta arg2 + lda #16 + 13 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + ; Draw initial items + jsr render_buy_items + +itemend: + jsr render_inventory_status_bar + + ; Draw help text + LOAD_PTR buy_help_str + ldx #3 + ldy #32 + 23 + jsr write_string + + jsr select_shop_item + + LOAD_PTR inventory_palette + jsr fade_in + + rts +.endproc PROC do_render_buy_items lda #0 sta arg0 itemloop: lda arg0 - cmp valid_buy_count + cmp valid_shop_count bne hasitem jmp itemend & $ffff @@ -559,7 +588,7 @@ count: tax lda arg0 tay - lda valid_buy_list, y + lda valid_shop_list, y tay lda purchase_items, y jsr load_item_sprite_tiles @@ -604,7 +633,7 @@ count: ; Get string with item count lda arg0 tax - lda valid_buy_index, x + lda valid_shop_index, x cmp #$ff bne nonzerocount lda #0 @@ -619,11 +648,24 @@ getcountstr: ; Get the item type lda arg0 tax - lda valid_buy_list, x + lda valid_shop_list, x tax lda purchase_items, x jsr get_item_type sta arg2 + cmp #ITEM_TYPE_GUN + bne notgun + lda #' ' + sta scratch + sta scratch + 1 + lda #'1' + sta scratch + 2 +notgun: + + lda #$40 + sta scratch + 3 + lda #0 + sta scratch + 4 ; Draw item count LOAD_PTR scratch @@ -632,25 +674,14 @@ getcountstr: asl clc adc arg0 - adc #32 + 4 - tay - jsr write_string - - LOAD_PTR crafting_have_tiles - ldx #7 - lda arg0 - asl - clc - adc arg0 adc #32 + 3 tay - lda #3 - jsr write_tiles + jsr write_string ; Draw item name lda arg0 tax - lda valid_buy_list, x + lda valid_shop_list, x tax lda purchase_items, x jsr get_item_name @@ -667,27 +698,38 @@ getcountstr: ; Draw item type lda arg2 cmp #ITEM_TYPE_GUN - beq ammo + beq weapon + cmp #ITEM_TYPE_MELEE + beq weapon cmp #ITEM_TYPE_GRENADE beq weapon + cmp #ITEM_TYPE_CRAFTING + beq crafting cmp #ITEM_TYPE_OUTFIT beq wearable cmp #ITEM_TYPE_HEALTH beq healing + cmp #ITEM_TYPE_CONSUMABLE + beq usable + cmp #ITEM_TYPE_CAMPFIRE + beq usable - LOAD_PTR inventory_usable_tiles - jmp drawtype & $ffff -ammo: - LOAD_PTR crafting_ammo_tiles + LOAD_PTR inventory_sell_tiles jmp drawtype & $ffff weapon: LOAD_PTR inventory_weapon_tiles jmp drawtype & $ffff +crafting: + LOAD_PTR inventory_crafting_tiles + jmp drawtype & $ffff wearable: LOAD_PTR inventory_wearable_tiles jmp drawtype & $ffff healing: LOAD_PTR inventory_healing_tiles + jmp drawtype & $ffff +usable: + LOAD_PTR inventory_usable_tiles drawtype: lda #6 @@ -702,7 +744,7 @@ drawtype: ; Draw item price lda arg0 tax - lda valid_buy_list, x + lda valid_shop_list, x tax lda purchase_price_high, x beq twodigit @@ -768,8 +810,6 @@ nextitem: ldx arg0 inx stx arg0 - cpx #5 - beq itemend jmp itemloop & $ffff itemend: @@ -777,7 +817,7 @@ itemend: .endproc -PROC do_select_buy_item +PROC do_select_shop_item lda selection and #1 beq even @@ -859,7 +899,7 @@ palettedone: lda selection tax - lda valid_buy_list, x + lda valid_shop_list, x tax lda purchase_items, x jsr get_item_description @@ -926,7 +966,7 @@ palettedone: PROC do_clear_last_buy_item jsr wait_for_vblank_if_rendering - lda valid_buy_count + lda valid_shop_count beq noitems LOAD_PTR clear_item_tiles jmp renderbox & $ffff @@ -935,10 +975,10 @@ noitems: renderbox: ldx #2 - lda valid_buy_count + lda valid_shop_count asl clc - adc valid_buy_count + adc valid_shop_count adc #32 + 2 sta arg1 tay @@ -968,10 +1008,10 @@ renderbox: LOAD_PTR clear_item_str ldx #7 - lda valid_buy_count + lda valid_shop_count asl clc - adc valid_buy_count + adc valid_shop_count adc #32 + 3 sta arg1 tay @@ -1011,13 +1051,13 @@ VAR buy_help_str .segment "TEMP" -VAR valid_buy_list +VAR valid_shop_list .byte 0, 0, 0, 0, 0, 0 -VAR valid_buy_index +VAR valid_shop_index .byte 0, 0, 0, 0, 0, 0 -VAR valid_buy_count +VAR valid_shop_count .byte 0 VAR purchase_items diff --git a/buyback.asm b/buyback.asm new file mode 100644 index 0000000..ab87d19 --- /dev/null +++ b/buyback.asm @@ -0,0 +1,952 @@ +.include "defines.inc" + +.code + +PROC show_buyback_tab + jsr clear_alt_screen + LOAD_ALL_TILES $000, inventory_ui_tiles + + lda #0 + sta selection + lda #0 + sta scroll + jsr render_buyback_screen + + lda buyback_count + beq nosetupselect + jsr select_buyback_item +nosetupselect: + + lda #30 + sta repeat_time + + lda buyback_count + bne selectloop + jmp emptyloop +selectloop: + jsr update_controller + jsr wait_for_vblank + lda controller + and #JOY_DOWN + bne downpressed + lda controller + and #JOY_UP + bne up + lda controller + and #JOY_A | JOY_B + bne buypressed + lda controller + and #JOY_LEFT + bne sell + lda controller + and #JOY_RIGHT + bne buy + lda controller + and #JOY_SELECT | JOY_START + beq nobutton + jmp done + +buy: + PLAY_SOUND_EFFECT effect_uimove + jsr fade_out + jmp show_buy_tab + +sell: + PLAY_SOUND_EFFECT effect_uimove + jsr fade_out + jmp show_sell_tab + +nobutton: + lda #30 + sta repeat_time + jmp selectloop + +downpressed: + jmp down + +buypressed: + jmp buyback + +up: + lda selection + beq attop + + PLAY_SOUND_EFFECT effect_uimove + + jsr deselect_inventory_item + dec selection + jsr select_buyback_item +attop: + jmp waitfordepress + +down: + lda selection + clc + adc #1 + cmp buyback_count + beq atbottom + + PLAY_SOUND_EFFECT effect_uimove + + jsr deselect_inventory_item + inc selection + jsr select_buyback_item +atbottom: + jmp waitfordepress + +buyback: + ldx selection + lda buyback_items, x + jsr find_item + cmp #$ff + beq notfull + asl + tax + lda inventory, x + cmp #$ff + bne notfull + + jmp waitfordepress + +notfull: + ldx selection + lda gold + bne buyok + lda gold + 1 + cmp buyback_price_high, x + bcc notenough + bne buyok + lda gold + 2 + cmp buyback_price_mid, x + bcc notenough + bne buyok + lda gold + 3 + cmp buyback_price_low, x + bcc notenough + jmp buyok + +notenough: + jmp waitfordepress + +buyok: + lda gold + 3 + sec + sbc buyback_price_low, x + bcs nocarry3 + sbc #$f5 + clc +nocarry3: + sta gold + 3 + lda gold + 2 + sbc buyback_price_mid, x + bcs nocarry2 + sbc #$f5 + clc +nocarry2: + sta gold + 2 + lda gold + 1 + sbc buyback_price_high, x + bcs nocarry1 + sbc #$f5 + clc +nocarry1: + sta gold + 1 + lda gold + sbc #0 + sta gold + + lda buyback_items, x + jsr get_item_type + cmp #ITEM_TYPE_GUN + bne notgun + + jsr buyback_gun + jmp buydone & $ffff + +notgun: + jsr buyback_item + +buydone: + PLAY_SOUND_EFFECT effect_buy + + jsr wait_for_vblank + jsr generate_gold_string + LOAD_PTR gold_str + ldx #24 + ldy #32 + 26 + jsr write_string + jsr prepare_for_rendering + + jsr deselect_inventory_item + jsr remove_buyback_item + + lda selection + cmp buyback_count + bne notlast + cmp #0 + beq nowempty + + dec selection + +notlast: + jsr select_buyback_item + jmp waitfordepress + +nowempty: + jsr wait_for_vblank_if_rendering + LOAD_PTR no_items_str + ldx #11 + ldy #32 + 11 + jsr write_string + jsr prepare_for_rendering + + jsr wait_for_vblank_if_rendering + LOAD_PTR clear_item_description_str + ldx #2 + ldy #32 + 21 + jsr write_string + jsr prepare_for_rendering + + jmp emptyloop + +shortwaitfordepress: + lda repeat_time + cmp #30 + bne nowait + ldx #6 + jsr wait_for_frame_count + lda #3 + sta repeat_time + jmp selectloop + +waitfordepresslong: + jsr update_controller + jsr wait_for_vblank + lda controller + bne waitfordepresslong + jmp selectloop + +nowait: + jmp selectloop + +waitfordepress: + lda repeat_time + sta arg0 +waitfordepressloop: + dec arg0 + beq waitfordepresstimeout + jsr update_controller + jsr wait_for_vblank + lda controller + bne waitfordepressloop + jmp selectloop +waitfordepresstimeout: + lda #3 + sta repeat_time + jmp selectloop + +emptyloop: + jsr update_controller + jsr wait_for_vblank + lda controller + and #JOY_LEFT + bne emptysell + lda controller + and #JOY_RIGHT + bne emptybuy + lda controller + and #JOY_SELECT | JOY_START + beq emptyloop + jmp done + +emptysell: + jmp sell +emptybuy: + jmp buy + +done: + PLAY_SOUND_EFFECT effect_select + + jsr fade_out + + lda saved_ppu_settings + sta ppu_settings + + jsr update_equipped_item_slots + jsr back_to_game_from_alternate_screen + + LOAD_PTR saved_palette + jsr fade_in + + rts +.endproc + + +PROC remove_buyback_item + ldx selection +moveloop: + lda buyback_item + 1, x + sta buyback_item, x + lda buyback_price_low + 1, x + sta buyback_price_low, x + lda buyback_price_mid + 1, x + sta buyback_price_mid, x + lda buyback_price_high + 1, x + sta buyback_price_high, x + + inx + cpx buyback_count + bne moveloop + + dec buyback_count + + jsr render_buyback_items + jsr clear_last_buyback_item + rts +.endproc + + +PROC buyback_gun + ldx selection + lda buyback_items, x + ldx #12 + jsr give_weapon + rts +.endproc + + +PROC buyback_item + ldx selection + lda buyback_items, x + jsr give_item + rts +.endproc + + +.segment "FIXED" + +PROC render_buyback_screen + lda current_bank + pha + lda #^do_render_buyback_screen + jsr bankswitch + jsr do_render_buyback_screen & $ffff + pla + jsr bankswitch + rts +.endproc + +PROC render_buyback_items + lda current_bank + pha + lda #^do_render_buyback_items + jsr bankswitch + jsr do_render_buyback_items & $ffff + pla + jsr bankswitch + rts +.endproc + +PROC select_buyback_item + lda current_bank + pha + lda #^do_select_buyback_item + jsr bankswitch + jsr do_select_buyback_item & $ffff + pla + jsr bankswitch + rts +.endproc + +PROC clear_last_buyback_item + lda current_bank + pha + lda #^do_clear_last_buyback_item + jsr bankswitch + jsr do_clear_last_buyback_item & $ffff + pla + jsr bankswitch + rts +.endproc + + +.segment "UI" + +PROC do_render_buyback_screen + ; Draw box around buy screen + lda #1 + sta arg0 + lda #32 + 1 + sta arg1 + lda #28 + sta arg2 + lda #32 + 22 + sta arg3 + jsr draw_large_box + + LOAD_PTR buyback_str + ldx #4 + ldy #32 + 1 + jsr write_string + + ; Set palette for title + lda #1 + sta arg0 + lda #16 + 0 + sta arg1 + lda #4 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + lda #11 + sta arg0 + lda #16 + 0 + sta arg1 + lda #13 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + ; Set palette for inside of box + lda #1 + sta arg0 + lda #16 + 1 + sta arg1 + lda #13 + sta arg2 + lda #16 + 10 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + ; Set palette for status area + lda #0 + sta arg0 + lda #16 + 12 + sta arg1 + lda #14 + sta arg2 + lda #16 + 13 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + ; Draw initial items + lda buyback_count + bne notempty + + LOAD_PTR no_items_str + ldx #11 + ldy #32 + 11 + jsr write_string + jmp itemend & $ffff + +notempty: + jsr render_buyback_items + +itemend: + jsr render_inventory_status_bar + + ; Draw help text + LOAD_PTR buy_help_str + ldx #3 + ldy #32 + 23 + jsr write_string + + LOAD_PTR inventory_palette + jsr fade_in + + rts +.endproc + +PROC do_render_buyback_items + lda #0 + sta arg0 +itemloop: + lda arg0 + cmp buyback_count + bne hasitem + jmp itemend & $ffff + +hasitem: + lda arg0 + beq first + LOAD_PTR inventory_item_second_box_tiles + jmp drawitem & $ffff +first: + LOAD_PTR inventory_item_first_box_tiles + +drawitem: + lda rendering_enabled + bne count + + ; Draw box around item graphic + ldx #2 + lda arg0 + asl + clc + adc arg0 + adc #32 + 2 + sta arg1 + tay + lda #4 + jsr write_tiles + + ldx #2 + inc arg1 + ldy arg1 + lda #4 + jsr write_tiles + + ldx #2 + inc arg1 + ldy arg1 + lda #4 + jsr write_tiles + + ldx #2 + inc arg1 + ldy arg1 + lda #4 + jsr write_tiles + +count: + ; Load icon for the item + jsr wait_for_vblank_if_rendering + + lda arg0 + asl + asl + tax + lda arg0 + tay + lda buyback_items, y + jsr load_item_sprite_tiles + + jsr prepare_for_rendering + + lda arg0 + asl + asl + asl + clc + adc #16 + tay + lda arg0 + asl + clc + adc arg0 + asl + asl + asl + adc #31 + sta sprites, y + sta sprites + 4, y + lda arg0 + asl + asl + clc + adc #1 + sta sprites + 1, y + adc #2 + sta sprites + 5, y + lda #1 + sta sprites + 2, y + sta sprites + 6, y + lda #32 + sta sprites + 3, y + lda #40 + sta sprites + 7, y + + jsr wait_for_vblank_if_rendering + + ; Get the item type + lda arg0 + tax + lda buyback_items, x + jsr get_item_type + sta arg2 + + ; Draw item name + lda arg0 + tax + lda buyback_items, x + jsr get_item_name + ldx #12 + lda arg0 + asl + clc + adc arg0 + adc #32 + 3 + sta arg1 + tay + jsr write_string + + ; Draw item type + lda arg2 + cmp #ITEM_TYPE_GUN + beq weapon + cmp #ITEM_TYPE_MELEE + beq weapon + cmp #ITEM_TYPE_GRENADE + beq weapon + cmp #ITEM_TYPE_CRAFTING + beq crafting + cmp #ITEM_TYPE_OUTFIT + beq wearable + cmp #ITEM_TYPE_HEALTH + beq healing + cmp #ITEM_TYPE_CONSUMABLE + beq usable + cmp #ITEM_TYPE_CAMPFIRE + beq usable + + LOAD_PTR inventory_sell_tiles + jmp drawtype & $ffff +weapon: + LOAD_PTR inventory_weapon_tiles + jmp drawtype & $ffff +crafting: + LOAD_PTR inventory_crafting_tiles + jmp drawtype & $ffff +wearable: + LOAD_PTR inventory_wearable_tiles + jmp drawtype & $ffff +healing: + LOAD_PTR inventory_healing_tiles + jmp drawtype & $ffff +usable: + LOAD_PTR inventory_usable_tiles + +drawtype: + lda #6 + ldx #12 + ldy arg1 + iny + jsr write_tiles + + jsr prepare_for_rendering + jsr wait_for_vblank_if_rendering + + ; Draw item price + lda arg0 + tax + lda buyback_price_high, x + beq twodigit + + clc + adc #$30 + sta scratch + 1 + lda buyback_price_mid, x + adc #$30 + sta scratch + 2 + lda buyback_price_low, x + adc #$30 + sta scratch + 3 + lda #'$' + sta scratch + lda #0 + sta scratch + 4 + + jmp renderprice & $ffff + +twodigit: + lda buyback_price_mid, x + beq onedigit + + clc + adc #$30 + sta scratch + 2 + lda buyback_price_low, x + adc #$30 + sta scratch + 3 + lda #' ' + sta scratch + lda #'$' + sta scratch + 1 + lda #0 + sta scratch + 4 + + jmp renderprice & $ffff + +onedigit: + lda buyback_price_low, x + clc + adc #$30 + sta scratch + 3 + lda #' ' + sta scratch + sta scratch + 1 + lda #'$' + sta scratch + 2 + lda #0 + sta scratch + 4 + +renderprice: + LOAD_PTR scratch + ldx #23 + ldy arg1 + iny + jsr write_string + + jsr prepare_for_rendering + +nextitem: + ldx arg0 + inx + stx arg0 + jmp itemloop & $ffff + +itemend: + rts +.endproc + + +PROC do_select_buyback_item + lda selection + and #1 + beq even + + lda selection + lsr + sta temp + asl + clc + adc temp + adc #16 + 3 + sta temp + + lda #3 + sta arg0 + lda temp + sta arg1 + lda #13 + sta arg2 + lda temp + sta arg3 + lda #0 + sta arg4 + jsr wait_for_vblank + jsr set_box_palette + jsr prepare_for_rendering + jmp palettedone & $ffff + +even: + lda selection + lsr + sta temp + asl + clc + adc temp + adc #16 + 1 + sta temp + + lda #3 + sta arg0 + lda temp + sta arg1 + lda #13 + sta arg2 + lda temp + sta arg3 + lda #0 + sta arg4 + jsr wait_for_vblank + jsr set_box_palette + jsr prepare_for_rendering + + lda selection + lsr + sta temp + asl + clc + adc temp + adc #16 + 2 + sta temp + + lda #3 + sta arg0 + lda temp + sta arg1 + lda #13 + sta arg2 + lda temp + sta arg3 + lda #0 + sta arg4 + jsr wait_for_vblank + jsr set_box_palette + jsr prepare_for_rendering + jmp palettedone & $ffff + +palettedone: + jsr wait_for_vblank + + lda selection + lda buyback_items, x + jsr get_item_description + ldx #2 + ldy #32 + 21 + jsr write_string + + jsr prepare_for_rendering + + lda selection + sta temp + asl + clc + adc temp + asl + asl + asl + adc #24 + sta temp + + sta sprites + lda #$5c + sta sprites + 1 + lda #0 + sta sprites + 2 + lda #58 + sta sprites + 3 + + lda temp + clc + adc #13 + sta sprites + 4 + lda #$5c + sta sprites + 5 + lda #SPRITE_FLIP_VERT + sta sprites + 6 + lda #58 + sta sprites + 7 + + lda temp + sta sprites + 8 + lda #$5c + sta sprites + 9 + lda #SPRITE_FLIP_HORIZ + sta sprites + 10 + lda #222 + sta sprites + 11 + + lda temp + clc + adc #13 + sta sprites + 12 + lda #$5c + sta sprites + 13 + lda #SPRITE_FLIP_HORIZ | SPRITE_FLIP_VERT + sta sprites + 14 + lda #222 + sta sprites + 15 + + rts +.endproc + + +PROC do_clear_last_buyback_item + jsr wait_for_vblank_if_rendering + + lda buyback_count + beq noitems + LOAD_PTR clear_item_tiles + jmp renderbox & $ffff +noitems: + LOAD_PTR clear_last_item_tiles + +renderbox: + ldx #2 + lda buyback_count + asl + clc + adc buyback_count + adc #32 + 2 + sta arg1 + tay + lda #4 + jsr write_tiles + + ldx #2 + inc arg1 + ldy arg1 + lda #4 + jsr write_tiles + + ldx #2 + inc arg1 + ldy arg1 + lda #4 + jsr write_tiles + + ldx #2 + inc arg1 + ldy arg1 + lda #4 + jsr write_tiles + + jsr prepare_for_rendering + jsr wait_for_vblank_if_rendering + + LOAD_PTR clear_item_str + ldx #7 + lda buyback_count + asl + clc + adc buyback_count + adc #32 + 3 + sta arg1 + tay + jsr write_string + + LOAD_PTR clear_item_str + ldx #7 + inc arg1 + ldy arg1 + jsr write_string + + jsr prepare_for_rendering + + lda arg0 + asl + asl + asl + clc + adc #16 + tay + lda #$ff + sta sprites, y + sta sprites + 4, y + + rts +.endproc + + +.data + +VAR buyback_str + .byte "SELL", $3c, $3c, $3b, " BUYBACK ", $3d, $3c, $3c, "BUY", 0 + + +.bss + +VAR buyback_items + .byte 0, 0, 0, 0, 0, 0 +VAR buyback_price_high + .byte 0, 0, 0, 0, 0, 0 +VAR buyback_price_mid + .byte 0, 0, 0, 0, 0, 0 +VAR buyback_price_low + .byte 0, 0, 0, 0, 0, 0 + +VAR buyback_count + .byte 0 diff --git a/craft.asm b/craft.asm index b8721eb..371c7fd 100644 --- a/craft.asm +++ b/craft.asm @@ -43,118 +43,11 @@ nextitem: cpx #12 bne checkloop - ; Draw box around inventory screen - lda #1 - sta arg0 - lda #32 + 1 - sta arg1 - lda #28 - sta arg2 - lda #32 + 22 - sta arg3 - jsr draw_large_box - - LOAD_PTR crafting_str - ldx #4 - ldy #32 + 1 - jsr write_string - - ; Set palette for title - lda #2 - sta arg0 - lda #16 + 0 - sta arg1 - lda #4 - sta arg2 - lda #16 + 0 - sta arg3 - lda #2 - sta arg4 - jsr set_box_palette - - lda #10 - sta arg0 - lda #16 + 0 - sta arg1 - lda #13 - sta arg2 - lda #16 + 0 - sta arg3 - lda #2 - sta arg4 - jsr set_box_palette - - ; Set palette for inside of box - lda #1 - sta arg0 - lda #16 + 1 - sta arg1 - lda #13 - sta arg2 - lda #16 + 9 - sta arg3 - lda #1 - sta arg4 - jsr set_box_palette - - ; Set palette for components - lda #1 - sta arg0 - lda #16 + 10 - sta arg1 - lda #13 - sta arg2 - lda #16 + 10 - sta arg3 - lda #3 - sta arg4 - jsr set_box_palette - - ; Set palette for status area - lda #0 - sta arg0 - lda #16 + 12 - sta arg1 - lda #14 - sta arg2 - lda #16 + 13 - sta arg3 - lda #1 - sta arg4 - jsr set_box_palette - - jsr render_inventory_status_bar - - ; Draw help text - LOAD_PTR crafting_help_str - ldx #2 - ldy #32 + 23 - jsr write_string - - ; Draw requirements text - LOAD_PTR requirements_tiles - ldx #2 - ldy #32 + 19 - lda #6 - jsr write_tiles - - LOAD_PTR crafting_have_tiles - ldx #25 - ldy #32 + 19 - lda #3 - jsr write_tiles - - ; Draw initial items lda #0 sta selection lda #0 sta scroll - jsr render_crafting_items - jsr select_crafting_item - - LOAD_PTR inventory_palette - jsr fade_in - + jsr render_crafting_screen jsr select_crafting_item lda #30 @@ -538,6 +431,17 @@ getcountstr: .segment "FIXED" +PROC render_crafting_screen + lda current_bank + pha + lda #^do_render_crafting_screen + jsr bankswitch + jsr do_render_crafting_screen & $ffff + pla + jsr bankswitch + rts +.endproc + PROC render_crafting_items lda current_bank pha @@ -561,7 +465,120 @@ PROC select_crafting_item .endproc -.segment "EXTRA" +.segment "UI" + +PROC do_render_crafting_screen + ; Draw box around inventory screen + lda #1 + sta arg0 + lda #32 + 1 + sta arg1 + lda #28 + sta arg2 + lda #32 + 22 + sta arg3 + jsr draw_large_box + + LOAD_PTR crafting_str + ldx #4 + ldy #32 + 1 + jsr write_string + + ; Set palette for title + lda #2 + sta arg0 + lda #16 + 0 + sta arg1 + lda #4 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + lda #10 + sta arg0 + lda #16 + 0 + sta arg1 + lda #13 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + ; Set palette for inside of box + lda #1 + sta arg0 + lda #16 + 1 + sta arg1 + lda #13 + sta arg2 + lda #16 + 9 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + ; Set palette for components + lda #1 + sta arg0 + lda #16 + 10 + sta arg1 + lda #13 + sta arg2 + lda #16 + 10 + sta arg3 + lda #3 + sta arg4 + jsr set_box_palette + + ; Set palette for status area + lda #0 + sta arg0 + lda #16 + 12 + sta arg1 + lda #14 + sta arg2 + lda #16 + 13 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + jsr render_inventory_status_bar + + ; Draw help text + LOAD_PTR crafting_help_str + ldx #2 + ldy #32 + 23 + jsr write_string + + ; Draw requirements text + LOAD_PTR requirements_tiles + ldx #2 + ldy #32 + 19 + lda #6 + jsr write_tiles + + LOAD_PTR crafting_have_tiles + ldx #25 + ldy #32 + 19 + lda #3 + jsr write_tiles + + ; Draw initial items + jsr render_crafting_items + jsr select_crafting_item + + LOAD_PTR inventory_palette + jsr fade_in + + rts +.endproc + PROC do_render_crafting_items lda #0 diff --git a/inventory.asm b/inventory.asm index bcb3ed4..de6d297 100644 --- a/inventory.asm +++ b/inventory.asm @@ -26,107 +26,11 @@ PROC show_inventory_tab jsr clear_alt_screen LOAD_ALL_TILES $000, inventory_ui_tiles - ; Draw box around inventory screen - lda #1 - sta arg0 - lda #32 + 1 - sta arg1 - lda #28 - sta arg2 - lda #32 + 22 - sta arg3 - jsr draw_large_box - - LOAD_PTR inventory_str - ldx #3 - ldy #32 + 1 - jsr write_string - - ; Set palette for title - lda #1 - sta arg0 - lda #16 + 0 - sta arg1 - lda #4 - sta arg2 - lda #16 + 0 - sta arg3 - lda #2 - sta arg4 - jsr set_box_palette - - lda #10 - sta arg0 - lda #16 + 0 - sta arg1 - lda #13 - sta arg2 - lda #16 + 0 - sta arg3 - lda #2 - sta arg4 - jsr set_box_palette - - ; Set palette for inside of box - lda #1 - sta arg0 - lda #16 + 1 - sta arg1 - lda #13 - sta arg2 - lda #16 + 10 - sta arg3 - lda #1 - sta arg4 - jsr set_box_palette - - ; Set palette for status area - lda #0 - sta arg0 - lda #16 + 12 - sta arg1 - lda #14 - sta arg2 - lda #16 + 13 - sta arg3 - lda #1 - sta arg4 - jsr set_box_palette - - ; Draw initial items lda #0 sta selection lda #0 sta scroll - - lda inventory_count - bne notempty - - LOAD_PTR no_items_str - ldx #11 - ldy #32 + 11 - jsr write_string - jmp itemend - -notempty: - jsr render_inventory_items - -itemend: - jsr render_inventory_status_bar - - ; Draw help text - LOAD_PTR inventory_help_str - ldx #1 - ldy #32 + 23 - jsr write_string - - lda inventory_count - beq nosetupselect - jsr select_inventory_item -nosetupselect: - - LOAD_PTR inventory_palette - jsr fade_in + jsr render_inventory_screen lda #30 sta repeat_time @@ -523,6 +427,17 @@ done: .segment "FIXED" +PROC render_inventory_screen + lda current_bank + pha + lda #^do_render_inventory_screen + jsr bankswitch + jsr do_render_inventory_screen & $ffff + pla + jsr bankswitch + rts +.endproc + PROC render_inventory_status_bar lda current_bank pha @@ -590,7 +505,109 @@ PROC deselect_inventory_item .endproc -.segment "EXTRA" +.segment "UI" + +PROC do_render_inventory_screen + ; Draw box around inventory screen + lda #1 + sta arg0 + lda #32 + 1 + sta arg1 + lda #28 + sta arg2 + lda #32 + 22 + sta arg3 + jsr draw_large_box + + LOAD_PTR inventory_str + ldx #3 + ldy #32 + 1 + jsr write_string + + ; Set palette for title + lda #1 + sta arg0 + lda #16 + 0 + sta arg1 + lda #4 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + lda #10 + sta arg0 + lda #16 + 0 + sta arg1 + lda #13 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + ; Set palette for inside of box + lda #1 + sta arg0 + lda #16 + 1 + sta arg1 + lda #13 + sta arg2 + lda #16 + 10 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + ; Set palette for status area + lda #0 + sta arg0 + lda #16 + 12 + sta arg1 + lda #14 + sta arg2 + lda #16 + 13 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + ; Draw initial items + lda inventory_count + bne notempty + + LOAD_PTR no_items_str + ldx #11 + ldy #32 + 11 + jsr write_string + jmp itemend & $ffff + +notempty: + jsr render_inventory_items + +itemend: + jsr render_inventory_status_bar + + ; Draw help text + LOAD_PTR inventory_help_str + ldx #1 + ldy #32 + 23 + jsr write_string + + lda inventory_count + beq nosetupselect + jsr select_inventory_item +nosetupselect: + + LOAD_PTR inventory_palette + jsr fade_in + + rts +.endproc + PROC do_render_inventory_status_bar jsr load_area_name_tiles diff --git a/main.asm b/main.asm index 3e28f8a..76a71df 100644 --- a/main.asm +++ b/main.asm @@ -323,7 +323,7 @@ namedone: lda secret_code ; beq nocode - lda #1 + lda #5 sta gold lda #ITEM_PISTOL diff --git a/map.asm b/map.asm index 3c092ee..5771d33 100644 --- a/map.asm +++ b/map.asm @@ -952,6 +952,8 @@ PROC get_flag jsr disable_rendering jsr clear_screen + LOAD_ALL_TILES $0, inventory_ui_tiles + ; Draw text LOAD_PTR flag_strings ldx #8 @@ -971,6 +973,7 @@ PROC get_flag jsr fade_in end: + jsr wait_for_vblank jmp end .endproc diff --git a/mapper1.cfg b/mapper1.cfg index 85f1f8a..70c2777 100644 --- a/mapper1.cfg +++ b/mapper1.cfg @@ -11,7 +11,7 @@ MEMORY { ROM0: file = %O, start = $8000, size = $3FFF, fill = yes, bank = 0; CODEIDENT: file = %O, start = $BFFF, size = $1, fill = yes, bank = 0; - # 5 PRG ROM banks for tiles + # 4 PRG ROM banks for tiles CHR1: file = %O, start = $18000, size = $3FFF, fill = yes, bank = 1; CHR1IDENT: file = %O, start = $1BFFF, size = $1, fill = yes, bank = 1; CHR2: file = %O, start = $28000, size = $3FFF, fill = yes, bank = 2; @@ -20,28 +20,28 @@ MEMORY { CHR3IDENT: file = %O, start = $3BFFF, size = $1, fill = yes, bank = 3; CHR4: file = %O, start = $48000, size = $3FFF, fill = yes, bank = 4; CHR4IDENT: file = %O, start = $4BFFF, size = $1, fill = yes, bank = 4; - CHR5: file = %O, start = $58000, size = $3FFF, fill = yes, bank = 5; - CHR5IDENT: file = %O, start = $5BFFF, size = $1, fill = yes, bank = 5; # 8 ROM banks for audio - AUDIO0: file = %O, start = $68000, size = $3FFF, fill = yes, bank = 6; - AUDIO0IDENT: file = %O, start = $6BFFF, size = $1, fill = yes, bank = 6; - AUDIO1: file = %O, start = $78000, size = $3FFF, fill = yes, bank = 7; - AUDIO1IDENT: file = %O, start = $7BFFF, size = $1, fill = yes, bank = 7; - AUDIO2: file = %O, start = $88000, size = $3FFF, fill = yes, bank = 8; - AUDIO2IDENT: file = %O, start = $8BFFF, size = $1, fill = yes, bank = 8; - AUDIO3: file = %O, start = $98000, size = $3FFF, fill = yes, bank = 9; - AUDIO3IDENT: file = %O, start = $9BFFF, size = $1, fill = yes, bank = 9; - AUDIO4: file = %O, start = $A8000, size = $3FFF, fill = yes, bank = 10; - AUDIO4IDENT: file = %O, start = $ABFFF, size = $1, fill = yes, bank = 10; - AUDIO5: file = %O, start = $B8000, size = $3FFF, fill = yes, bank = 11; - AUDIO5IDENT: file = %O, start = $BBFFF, size = $1, fill = yes, bank = 11; - AUDIO6: file = %O, start = $C8000, size = $3FFF, fill = yes, bank = 12; - AUDIO6IDENT: file = %O, start = $CBFFF, size = $1, fill = yes, bank = 12; - AUDIO7: file = %O, start = $D8000, size = $3FFF, fill = yes, bank = 13; - AUDIO7IDENT: file = %O, start = $DBFFF, size = $1, fill = yes, bank = 13; + AUDIO0: file = %O, start = $58000, size = $3FFF, fill = yes, bank = 5; + AUDIO0IDENT: file = %O, start = $5BFFF, size = $1, fill = yes, bank = 5; + AUDIO1: file = %O, start = $68000, size = $3FFF, fill = yes, bank = 6; + AUDIO1IDENT: file = %O, start = $6BFFF, size = $1, fill = yes, bank = 6; + AUDIO2: file = %O, start = $78000, size = $3FFF, fill = yes, bank = 7; + AUDIO2IDENT: file = %O, start = $7BFFF, size = $1, fill = yes, bank = 7; + AUDIO3: file = %O, start = $88000, size = $3FFF, fill = yes, bank = 8; + AUDIO3IDENT: file = %O, start = $8BFFF, size = $1, fill = yes, bank = 8; + AUDIO4: file = %O, start = $98000, size = $3FFF, fill = yes, bank = 9; + AUDIO4IDENT: file = %O, start = $9BFFF, size = $1, fill = yes, bank = 9; + AUDIO5: file = %O, start = $A8000, size = $3FFF, fill = yes, bank = 10; + AUDIO5IDENT: file = %O, start = $ABFFF, size = $1, fill = yes, bank = 10; + AUDIO6: file = %O, start = $B8000, size = $3FFF, fill = yes, bank = 11; + AUDIO6IDENT: file = %O, start = $BBFFF, size = $1, fill = yes, bank = 11; + AUDIO7: file = %O, start = $C8000, size = $3FFF, fill = yes, bank = 12; + AUDIO7IDENT: file = %O, start = $CBFFF, size = $1, fill = yes, bank = 12; - # 1 ROM bank for additional code and data + # 2 ROM banks for additional code and data + UI: file = %O, start = $D8000, size = $3FFF, fill = yes, bank = 13; + UIIDENT: file = %O, start = $DBFFF, size = $1, fill = yes, bank = 13; EXTRA: file = %O, start = $E8000, size = $3FFF, fill = yes, bank = 14; EXTRAIDENT: file = %O, start = $EBFFF, size = 1, fill = yes, bank = 14; @@ -72,7 +72,7 @@ SEGMENTS { CHR2: load = CHR2, type = ro; CHR3: load = CHR3, type = ro; CHR4: load = CHR4, type = ro; - CHR5: load = CHR5, type = ro; + UI: load = UI, type = ro; EXTRA: load = EXTRA, type = ro; AUDIO0: load = AUDIO0, type = ro; AUDIO1: load = AUDIO1, type = ro; @@ -87,7 +87,7 @@ SEGMENTS { CHR2IDENT: load = CHR2IDENT, type = ro; CHR3IDENT: load = CHR3IDENT, type = ro; CHR4IDENT: load = CHR4IDENT, type = ro; - CHR5IDENT: load = CHR5IDENT, type = ro; + UIIDENT: load = UIIDENT, type = ro; EXTRAIDENT: load = EXTRAIDENT, type = ro; AUDIO0IDENT: load = AUDIO0IDENT, type = ro; AUDIO1IDENT: load = AUDIO1IDENT, type = ro; diff --git a/minimap.asm b/minimap.asm index c9ffc1d..0ae3ae4 100644 --- a/minimap.asm +++ b/minimap.asm @@ -42,7 +42,7 @@ clearsprites: .endproc -.segment "EXTRA" +.segment "UI" PROC show_minimap ldx #0 diff --git a/salvage.asm b/salvage.asm index dfdb104..7c92c17 100644 --- a/salvage.asm +++ b/salvage.asm @@ -33,128 +33,11 @@ nextitem: cpx #14 bne checkloop - ; Draw box around inventory screen - lda #1 - sta arg0 - lda #32 + 1 - sta arg1 - lda #28 - sta arg2 - lda #32 + 22 - sta arg3 - jsr draw_large_box - - LOAD_PTR salvage_str - ldx #4 - ldy #32 + 1 - jsr write_string - - ; Set palette for title - lda #2 - sta arg0 - lda #16 + 0 - sta arg1 - lda #4 - sta arg2 - lda #16 + 0 - sta arg3 - lda #2 - sta arg4 - jsr set_box_palette - - lda #11 - sta arg0 - lda #16 + 0 - sta arg1 - lda #13 - sta arg2 - lda #16 + 0 - sta arg3 - lda #2 - sta arg4 - jsr set_box_palette - - ; Set palette for inside of box - lda #1 - sta arg0 - lda #16 + 1 - sta arg1 - lda #13 - sta arg2 - lda #16 + 9 - sta arg3 - lda #1 - sta arg4 - jsr set_box_palette - - ; Set palette for components - lda #1 - sta arg0 - lda #16 + 10 - sta arg1 - lda #13 - sta arg2 - lda #16 + 10 - sta arg3 - lda #3 - sta arg4 - jsr set_box_palette - - ; Set palette for status area - lda #0 - sta arg0 - lda #16 + 12 - sta arg1 - lda #14 - sta arg2 - lda #16 + 13 - sta arg3 - lda #1 - sta arg4 - jsr set_box_palette - - jsr render_inventory_status_bar - - ; Draw help text - LOAD_PTR salvage_help_str - ldx #1 - ldy #32 + 23 - jsr write_string - - lda valid_crafting_count - bne hasitems - - LOAD_PTR no_items_str - ldx #11 - ldy #32 + 11 - jsr write_string - jmp itemend - -hasitems: - ; Draw initial items lda #0 sta selection lda #0 sta scroll - jsr render_salvage_items - jsr select_salvage_item - - ; Draw yield text - LOAD_PTR yield_tiles - ldx #2 - ldy #32 + 19 - lda #4 - jsr write_tiles - - LOAD_PTR crafting_have_tiles - ldx #25 - ldy #32 + 19 - lda #3 - jsr write_tiles - -itemend: - LOAD_PTR salvage_palette - jsr fade_in + jsr render_salvage_screen lda valid_crafting_count beq nosetupselect @@ -492,6 +375,17 @@ getcountstr: .segment "FIXED" +PROC render_salvage_screen + lda current_bank + pha + lda #^do_render_salvage_screen + jsr bankswitch + jsr do_render_salvage_screen & $ffff + pla + jsr bankswitch + rts +.endproc + PROC render_salvage_items lda current_bank pha @@ -515,7 +409,131 @@ PROC select_salvage_item .endproc -.segment "EXTRA" +.segment "UI" + +PROC do_render_salvage_screen + ; Draw box around inventory screen + lda #1 + sta arg0 + lda #32 + 1 + sta arg1 + lda #28 + sta arg2 + lda #32 + 22 + sta arg3 + jsr draw_large_box + + LOAD_PTR salvage_str + ldx #4 + ldy #32 + 1 + jsr write_string + + ; Set palette for title + lda #2 + sta arg0 + lda #16 + 0 + sta arg1 + lda #4 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + lda #11 + sta arg0 + lda #16 + 0 + sta arg1 + lda #13 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + ; Set palette for inside of box + lda #1 + sta arg0 + lda #16 + 1 + sta arg1 + lda #13 + sta arg2 + lda #16 + 9 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + ; Set palette for components + lda #1 + sta arg0 + lda #16 + 10 + sta arg1 + lda #13 + sta arg2 + lda #16 + 10 + sta arg3 + lda #3 + sta arg4 + jsr set_box_palette + + ; Set palette for status area + lda #0 + sta arg0 + lda #16 + 12 + sta arg1 + lda #14 + sta arg2 + lda #16 + 13 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + jsr render_inventory_status_bar + + ; Draw help text + LOAD_PTR salvage_help_str + ldx #1 + ldy #32 + 23 + jsr write_string + + lda valid_crafting_count + bne hasitems + + LOAD_PTR no_items_str + ldx #11 + ldy #32 + 11 + jsr write_string + jmp itemend & $ffff + +hasitems: + ; Draw initial items + jsr render_salvage_items + jsr select_salvage_item + + ; Draw yield text + LOAD_PTR yield_tiles + ldx #2 + ldy #32 + 19 + lda #4 + jsr write_tiles + + LOAD_PTR crafting_have_tiles + ldx #25 + ldy #32 + 19 + lda #3 + jsr write_tiles + +itemend: + LOAD_PTR salvage_palette + jsr fade_in + + rts +.endproc + PROC do_render_salvage_items lda #0 diff --git a/sell.asm b/sell.asm new file mode 100644 index 0000000..122f126 --- /dev/null +++ b/sell.asm @@ -0,0 +1,867 @@ +.include "defines.inc" + +.code + +PROC show_sell_tab + jsr clear_alt_screen + LOAD_ALL_TILES $000, inventory_ui_tiles + + ; Determine which sell items are available + lda #0 + sta arg0 + sta valid_shop_count + +checkloop: + ldx arg0 + lda sell_items, x + jsr find_item + ldx valid_shop_count + sta valid_shop_index, x + cmp #$ff + beq nextitem + +hasitem: + lda arg0 + ldx valid_shop_count + sta valid_shop_list, x + inc valid_shop_count + +nextitem: + ldx arg0 + inx + stx arg0 + cpx sell_item_count + bne checkloop + + lda #0 + sta selection + lda #0 + sta scroll + jsr render_sell_screen + + lda valid_shop_count + beq nosetupselect + jsr select_shop_item +nosetupselect: + + lda #30 + sta repeat_time + + lda valid_shop_count + bne selectloop + jmp emptyloop +selectloop: + jsr update_controller + jsr wait_for_vblank + lda controller + and #JOY_DOWN + bne downpressed + lda controller + and #JOY_UP + bne up + lda controller + and #JOY_A | JOY_B + bne sellpressed + lda controller + and #JOY_LEFT + bne buy + lda controller + and #JOY_RIGHT + bne buyback + lda controller + and #JOY_SELECT | JOY_START + beq nobutton + jmp done + +buy: + PLAY_SOUND_EFFECT effect_uimove + jsr fade_out + jmp show_buy_tab + +buyback: + PLAY_SOUND_EFFECT effect_uimove + jsr fade_out + jmp show_buyback_tab + +nobutton: + lda #30 + sta repeat_time + jmp selectloop + +downpressed: + jmp down + +sellpressed: + jmp sell + +up: + lda selection + beq attop + + PLAY_SOUND_EFFECT effect_uimove + + jsr deselect_inventory_item + dec selection + jsr select_shop_item +attop: + jmp waitfordepress + +down: + lda selection + clc + adc #1 + cmp valid_shop_count + beq atbottom + + PLAY_SOUND_EFFECT effect_uimove + + jsr deselect_inventory_item + inc selection + jsr select_shop_item +atbottom: + jmp waitfordepress + +sell: + jsr sell_current_item + cmp #0 + beq waitfordepresslong + + jsr wait_for_vblank + jsr generate_gold_string + LOAD_PTR gold_str + ldx #24 + ldy #32 + 26 + jsr write_string + jsr prepare_for_rendering + + PLAY_SOUND_EFFECT effect_sell + + lda controller + and #JOY_B + beq waitfordepresslong + + ldx #8 + jsr wait_for_frame_count + jmp selectloop + +shortwaitfordepress: + lda repeat_time + cmp #30 + bne nowait + ldx #6 + jsr wait_for_frame_count + lda #3 + sta repeat_time + jmp selectloop + +waitfordepresslong: + jsr update_controller + jsr wait_for_vblank + lda controller + bne waitfordepresslong + jmp selectloop + +nowait: + jmp selectloop + +waitfordepress: + lda repeat_time + sta arg0 +waitfordepressloop: + dec arg0 + beq waitfordepresstimeout + jsr update_controller + jsr wait_for_vblank + lda controller + bne waitfordepressloop + jmp selectloop +waitfordepresstimeout: + lda #3 + sta repeat_time + jmp selectloop + +emptyloop: + jsr update_controller + jsr wait_for_vblank + lda controller + and #JOY_LEFT + bne emptybuy + lda controller + and #JOY_RIGHT + bne emptybuyback + lda controller + and #JOY_SELECT | JOY_START + beq emptyloop + jmp done + +emptybuy: + jmp buy +emptybuyback: + jmp buyback + +done: + PLAY_SOUND_EFFECT effect_select + + jsr fade_out + + lda saved_ppu_settings + sta ppu_settings + + jsr update_equipped_item_slots + jsr back_to_game_from_alternate_screen + + LOAD_PTR saved_palette + jsr fade_in + + rts +.endproc + + +PROC sell_current_item + ; Get item to be sold + ldx selection + lda valid_shop_list, x + sta arg2 + tax + + lda sell_items, x + jsr get_item_type + cmp #ITEM_TYPE_GUN + beq sellgun + + ; Check for item + ldx arg2 + lda sell_items, x + jsr find_item + cmp #$ff + beq invalidsell + asl + tay + lda inventory, y + bne validsell + +invalidsell: + lda #0 + rts + +validsell: + ldx arg2 + jsr add_buyback_item + + ; Take away item + sec + sbc #1 + sta inventory, y + bne notempty + jmp deleteitem + +sellgun: + ldx arg2 + jsr add_buyback_item + + ; Selling a gun will remove the item no matter what the ammo count is + ldx arg2 + lda sell_items, x + jsr find_item + cmp #$ff + beq invalidsell + asl + tay + + ; Out of the item, remove it from inventory +deleteitem: + tya + lsr + sta arg3 +deleteloop: + lda arg3 + clc + adc #1 + cmp inventory_count + beq deletedone + + lda arg3 + asl + tax + lda inventory + 2, x + sta inventory, x + lda inventory + 3, x + sta inventory + 1, x + + inc arg3 + jmp deleteloop + +deletedone: + dec inventory_count + +notempty: + ; Give gold for item + ldx arg2 + lda sell_price_low, x + clc + adc gold + 3 + cmp #10 + bcc nocarry3 + adc #$f5 +nocarry3: + sta gold + 3 + lda sell_price_mid, x + adc gold + 2 + cmp #10 + bcc nocarry2 + adc #$f5 +nocarry2: + sta gold + 2 + lda sell_price_high, x + adc gold + 1 + cmp #10 + bcc nocarry1 + adc #$f5 +nocarry1: + sta gold + 1 + lda gold + adc #0 + sta gold + cmp #10 + bcc notmax + lda #9 + sta gold + sta gold + 1 + sta gold + 2 + sta gold + 3 +notmax: + + ; Refresh item indexes as they may have changed + lda #0 + sta arg2 +refreshloop: + ldx arg2 + lda valid_shop_list, x + tax + lda sell_items, x + jsr find_item + ldx arg2 + sta valid_shop_index, x + ldx arg2 + inx + stx arg2 + cpx valid_shop_count + bne refreshloop + + ; Get string with item count + lda selection + tax + lda valid_shop_index, x + cmp #$ff + bne nonzerocount + lda #0 + jmp getcountstr & $ffff +nonzerocount: + asl + tax + lda inventory, x +getcountstr: + jsr byte_to_padded_str + + ; Draw item count + jsr wait_for_vblank + + LOAD_PTR scratch + ldx #7 + lda selection + sta arg2 + asl + clc + adc arg2 + adc #32 + 3 + tay + jsr write_string + + jsr prepare_for_rendering + + lda #1 + rts +.endproc + + +PROC add_buyback_item + ; Save sold item into buyback list, first move previous entries down + ldy #5 +movebuyback: + lda buyback_items - 1, y + sta buyback_items, y + lda buyback_price_low - 1, y + sta buyback_price_low, y + lda buyback_price_mid - 1, y + sta buyback_price_mid, y + lda buyback_price_high - 1, y + sta buyback_price_high, y + dey + bne movebuyback + + lda sell_items, x + sta buyback_items + lda sell_price_low, x + sta buyback_price_low + lda sell_price_mid, x + sta buyback_price_mid + lda sell_price_mid, x + sta buyback_price_mid + + ldy buyback_count + cpy #6 + beq maxbuyback + iny + sty buyback_count +maxbuyback: + rts +.endproc + + +.segment "FIXED" + +PROC render_sell_screen + lda current_bank + pha + lda #^do_render_sell_screen + jsr bankswitch + jsr do_render_sell_screen & $ffff + pla + jsr bankswitch + rts +.endproc + +PROC render_sell_items + lda current_bank + pha + lda #^do_render_sell_items + jsr bankswitch + jsr do_render_sell_items & $ffff + pla + jsr bankswitch + rts +.endproc + + +.segment "UI" + +PROC do_render_sell_screen + ; Draw box around sell screen + lda #1 + sta arg0 + lda #32 + 1 + sta arg1 + lda #28 + sta arg2 + lda #32 + 22 + sta arg3 + jsr draw_large_box + + LOAD_PTR sell_str + ldx #4 + ldy #32 + 1 + jsr write_string + + ; Set palette for title + lda #1 + sta arg0 + lda #16 + 0 + sta arg1 + lda #3 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + lda #9 + sta arg0 + lda #16 + 0 + sta arg1 + lda #13 + sta arg2 + lda #16 + 0 + sta arg3 + lda #2 + sta arg4 + jsr set_box_palette + + ; Set palette for inside of box + lda #1 + sta arg0 + lda #16 + 1 + sta arg1 + lda #13 + sta arg2 + lda #16 + 10 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + ; Set palette for status area + lda #0 + sta arg0 + lda #16 + 12 + sta arg1 + lda #14 + sta arg2 + lda #16 + 13 + sta arg3 + lda #1 + sta arg4 + jsr set_box_palette + + jsr render_inventory_status_bar + + ; Draw help text + LOAD_PTR sell_help_str + ldx #2 + ldy #32 + 23 + jsr write_string + + lda valid_shop_count + bne hasitems + + LOAD_PTR no_items_str + ldx #11 + ldy #32 + 11 + jsr write_string + jmp itemend & $ffff + +hasitems: + ; Draw initial items + lda valid_shop_count + bne notempty + + LOAD_PTR no_items_str + ldx #11 + ldy #32 + 11 + jsr write_string + jmp itemend & $ffff + +notempty: + jsr render_sell_items + jsr select_shop_item + +itemend: + LOAD_PTR inventory_palette + jsr fade_in + + rts +.endproc + + +PROC do_render_sell_items + lda #0 + sta arg0 +itemloop: + lda arg0 + cmp valid_shop_count + bne hasitem + jmp itemend & $ffff + +hasitem: + lda arg0 + beq first + LOAD_PTR inventory_item_second_box_tiles + jmp drawitem & $ffff +first: + LOAD_PTR inventory_item_first_box_tiles + +drawitem: + lda rendering_enabled + bne count + + ; Draw box around item graphic + ldx #2 + lda arg0 + asl + clc + adc arg0 + adc #32 + 2 + sta arg1 + tay + lda #4 + jsr write_tiles + + ldx #2 + inc arg1 + ldy arg1 + lda #4 + jsr write_tiles + + ldx #2 + inc arg1 + ldy arg1 + lda #4 + jsr write_tiles + + ldx #2 + inc arg1 + ldy arg1 + lda #4 + jsr write_tiles + +count: + ; Load icon for the item + jsr wait_for_vblank_if_rendering + + lda arg0 + asl + asl + tax + lda arg0 + tay + lda valid_shop_list, y + tay + lda sell_items, y + jsr load_item_sprite_tiles + + jsr prepare_for_rendering + + lda arg0 + asl + asl + asl + clc + adc #16 + tay + lda arg0 + asl + clc + adc arg0 + asl + asl + asl + adc #31 + sta sprites, y + sta sprites + 4, y + lda arg0 + asl + asl + clc + adc #1 + sta sprites + 1, y + adc #2 + sta sprites + 5, y + lda #1 + sta sprites + 2, y + sta sprites + 6, y + lda #32 + sta sprites + 3, y + lda #40 + sta sprites + 7, y + + jsr wait_for_vblank_if_rendering + + ; Get string with item count + lda arg0 + tax + lda valid_shop_index, x + cmp #$ff + bne nonzerocount + lda #0 + jmp getcountstr & $ffff +nonzerocount: + asl + tax + lda inventory, x +getcountstr: + jsr byte_to_padded_str + + ; Get the item type + lda arg0 + tax + lda valid_shop_list, x + tax + lda sell_items, x + jsr get_item_type + sta arg2 + cmp #ITEM_TYPE_GUN + bne notgun + lda #' ' + sta scratch + sta scratch + 1 + lda #'1' + sta scratch + 2 +notgun: + + lda #$40 + sta scratch + 3 + lda #0 + sta scratch + 4 + + ; Draw item count + LOAD_PTR scratch + ldx #7 + lda arg0 + asl + clc + adc arg0 + adc #32 + 3 + tay + jsr write_string + + ; Draw item name + lda arg0 + tax + lda valid_shop_list, x + tax + lda sell_items, x + jsr get_item_name + ldx #12 + lda arg0 + asl + clc + adc arg0 + adc #32 + 3 + sta arg1 + tay + jsr write_string + + ; Draw item type + lda arg2 + cmp #ITEM_TYPE_GUN + beq weapon + cmp #ITEM_TYPE_MELEE + beq weapon + cmp #ITEM_TYPE_GRENADE + beq weapon + cmp #ITEM_TYPE_CRAFTING + beq crafting + cmp #ITEM_TYPE_OUTFIT + beq wearable + cmp #ITEM_TYPE_HEALTH + beq healing + cmp #ITEM_TYPE_CONSUMABLE + beq usable + cmp #ITEM_TYPE_CAMPFIRE + beq usable + + LOAD_PTR inventory_sell_tiles + jmp drawtype & $ffff +weapon: + LOAD_PTR inventory_weapon_tiles + jmp drawtype & $ffff +crafting: + LOAD_PTR inventory_crafting_tiles + jmp drawtype & $ffff +wearable: + LOAD_PTR inventory_wearable_tiles + jmp drawtype & $ffff +healing: + LOAD_PTR inventory_healing_tiles + jmp drawtype & $ffff +usable: + LOAD_PTR inventory_usable_tiles + +drawtype: + lda #6 + ldx #12 + ldy arg1 + iny + jsr write_tiles + + jsr prepare_for_rendering + jsr wait_for_vblank_if_rendering + + ; Draw item price + lda arg0 + tax + lda valid_shop_list, x + tax + lda sell_price_high, x + beq twodigit + + clc + adc #$30 + sta scratch + 1 + lda sell_price_mid, x + adc #$30 + sta scratch + 2 + lda sell_price_low, x + adc #$30 + sta scratch + 3 + lda #'$' + sta scratch + lda #0 + sta scratch + 4 + + jmp renderprice & $ffff + +twodigit: + lda sell_price_mid, x + beq onedigit + + clc + adc #$30 + sta scratch + 2 + lda sell_price_low, x + adc #$30 + sta scratch + 3 + lda #' ' + sta scratch + lda #'$' + sta scratch + 1 + lda #0 + sta scratch + 4 + + jmp renderprice & $ffff + +onedigit: + lda sell_price_low, x + clc + adc #$30 + sta scratch + 3 + lda #' ' + sta scratch + sta scratch + 1 + lda #'$' + sta scratch + 2 + lda #0 + sta scratch + 4 + +renderprice: + LOAD_PTR scratch + ldx #23 + ldy arg1 + iny + jsr write_string + + jsr prepare_for_rendering + +nextitem: + ldx arg0 + inx + stx arg0 + jmp itemloop & $ffff + +itemend: + rts +.endproc + + +.data + +VAR sell_str + .byte "BUY", $3c, $3c, $3b, " SELL ", $3d, $3c, $3c, "BUYBACK", 0 + +VAR sell_help_str + .byte "A:SELL B:REPEAT ", $23, "/", $25, ":TAB", 0 + + +.segment "TEMP" + +VAR sell_items + .byte 0, 0, 0, 0, 0, 0 +VAR sell_price_high + .byte 0, 0, 0, 0, 0, 0 +VAR sell_price_mid + .byte 0, 0, 0, 0, 0, 0 +VAR sell_price_low + .byte 0, 0, 0, 0, 0, 0 + +VAR sell_item_count + .byte 0 diff --git a/shop.asm b/shop.asm index 3396b4b..2c7b43d 100644 --- a/shop.asm +++ b/shop.asm @@ -481,10 +481,51 @@ PROC do_gen_shop_inside PROC shop_npc_interact lda interaction_tile_x cmp #7 - beq shopkeeper + beq guns + cmp #3 + beq drinks rts -shopkeeper: +guns: + jsr setup_town_gun_shop + jsr show_shop + rts + +drinks: + jsr setup_town_coffee_shop + jsr show_shop + rts +.endproc + + +.segment "FIXED" + +PROC setup_town_gun_shop + lda current_bank + pha + lda #^do_setup_town_gun_shop + jsr bankswitch + jsr do_setup_town_gun_shop & $ffff + pla + jsr bankswitch + rts +.endproc + +PROC setup_town_coffee_shop + lda current_bank + pha + lda #^do_setup_town_coffee_shop + jsr bankswitch + jsr do_setup_town_coffee_shop & $ffff + pla + jsr bankswitch + rts +.endproc + + +.segment "EXTRA" + +PROC do_setup_town_gun_shop lda #ITEM_PISTOL sta purchase_items lda #0 @@ -531,6 +572,7 @@ shopkeeper: sta purchase_price_low + 4 lda #ITEM_FUEL + sta purchase_items + 5 lda #0 sta purchase_price_high + 5 lda #4 @@ -538,9 +580,137 @@ shopkeeper: lda #0 sta purchase_price_low + 5 + lda #6 + sta purchase_item_count + + lda #ITEM_PISTOL + sta sell_items + lda #0 + sta sell_price_high + lda #2 + sta sell_price_mid + lda #0 + sta sell_price_low + + lda #ITEM_SMG + sta sell_items + 1 + lda #1 + sta sell_price_high + 1 + lda #0 + sta sell_price_mid + 1 + lda #0 + sta sell_price_low + 1 + + lda #ITEM_ROCKET + sta sell_items + 2 + lda #1 + sta sell_price_high + 2 + lda #0 + sta sell_price_mid + 2 + lda #0 + sta sell_price_low + 2 + + lda #ITEM_METAL + sta sell_items + 3 + lda #0 + sta sell_price_high + 3 + lda #0 + sta sell_price_mid + 3 + lda #1 + sta sell_price_low + 3 + + lda #ITEM_GUNPOWDER + sta sell_items + 4 + lda #0 + sta sell_price_high + 4 + lda #0 + sta sell_price_mid + 4 + lda #1 + sta sell_price_low + 4 + + lda #ITEM_FUEL + lda #0 + sta sell_price_high + 5 + lda #2 + sta sell_price_mid + 5 lda #5 + sta sell_price_low + 5 + + lda #6 + sta sell_item_count + rts +.endproc + + +PROC do_setup_town_coffee_shop + lda #ITEM_COFFEE + sta purchase_items + lda #0 + sta purchase_price_high + lda #1 + sta purchase_price_mid + lda #0 + sta purchase_price_low + + lda #ITEM_WINE + sta purchase_items + 1 + lda #0 + sta purchase_price_high + 1 + lda #7 + sta purchase_price_mid + 1 + lda #5 + sta purchase_price_low + 1 + + lda #2 sta purchase_item_count - jsr show_shop + + lda #ITEM_HEALTH_KIT + sta sell_items + lda #0 + sta sell_price_high + lda #2 + sta sell_price_mid + lda #0 + sta sell_price_low + + lda #ITEM_CLOTH + sta sell_items + 1 + lda #0 + sta sell_price_high + 1 + lda #0 + sta sell_price_mid + 1 + lda #1 + sta sell_price_low + 1 + + lda #ITEM_GEM + sta sell_items + 2 + lda #0 + sta sell_price_high + 2 + lda #3 + sta sell_price_mid + 2 + lda #5 + sta sell_price_low + 2 + + lda #ITEM_COFFEE + sta sell_items + 3 + lda #0 + sta sell_price_high + 3 + lda #0 + sta sell_price_mid + 3 + lda #5 + sta sell_price_low + 3 + + lda #ITEM_WINE + sta sell_items + 4 + lda #0 + sta sell_price_high + 4 + lda #4 + sta sell_price_mid + 4 + lda #0 + sta sell_price_low + 4 + + lda #5 + sta sell_item_count rts .endproc diff --git a/start.asm b/start.asm index e521cc5..44ce8f3 100644 --- a/start.asm +++ b/start.asm @@ -310,7 +310,14 @@ VAR version_hash .segment "CHR2" .segment "CHR3" .segment "CHR4" -.segment "CHR5" +.segment "AUDIO0" +.segment "AUDIO1" +.segment "AUDIO2" +.segment "AUDIO3" +.segment "AUDIO4" +.segment "AUDIO5" +.segment "AUDIO6" +.segment "AUDIO7" .segment "CODEIDENT" @@ -329,31 +336,31 @@ VAR current_bank .segment "CHR4IDENT" .byte 4 -.segment "CHR5IDENT" +.segment "AUDIO0IDENT" .byte 5 -.segment "AUDIO0IDENT" +.segment "AUDIO1IDENT" .byte 6 -.segment "AUDIO1IDENT" +.segment "AUDIO2IDENT" .byte 7 -.segment "AUDIO2IDENT" +.segment "AUDIO3IDENT" .byte 8 -.segment "AUDIO3IDENT" +.segment "AUDIO4IDENT" .byte 9 -.segment "AUDIO4IDENT" +.segment "AUDIO5IDENT" .byte 10 -.segment "AUDIO5IDENT" +.segment "AUDIO6IDENT" .byte 11 -.segment "AUDIO6IDENT" +.segment "AUDIO7IDENT" .byte 12 -.segment "AUDIO7IDENT" +.segment "UIIDENT" .byte 13 .segment "EXTRAIDENT" diff --git a/usage.py b/usage.py index d5926af..3fc88f2 100644 --- a/usage.py +++ b/usage.py @@ -9,6 +9,7 @@ data_size = 0 chr_size = 0 temp_size = 0 +ui_size = 0 extra_size = 0 audio_size = 0 @@ -42,6 +43,8 @@ elif parts[0] == "TEMP": temp_size += int(parts[3], 16) ram_size += int(parts[3], 16) + elif parts[0] == "UI": + ui_size += int(parts[3], 16) elif parts[0] == "EXTRA": extra_size += int(parts[3], 16) elif parts[0][:5] == "AUDIO": @@ -50,10 +53,11 @@ fixed_size = fixed_size + data_size print "Bank 0: %5d of %5d bytes %3d%%" % (code_size, 0x3fff, int((code_size * 100.0) / 0x3fff)) -print "Bank 6: %5d of %5d bytes %3d%%" % (extra_size, 0x3fff, int((extra_size * 100.0) / 0x3fff)) +print "Bank D: %5d of %5d bytes %3d%%" % (ui_size, 0x3fff, int((ui_size * 100.0) / 0x3fff)) +print "Bank E: %5d of %5d bytes %3d%%" % (extra_size, 0x3fff, int((extra_size * 100.0) / 0x3fff)) print "Fixed bank: %5d of %5d bytes %3d%% %5d bytes code, %5d bytes data" % (fixed_size, 0x3ff6, int((fixed_size * 100.0) / 0x3ff6), fixed_size - data_size, data_size) print "RAM: %5d of %5d bytes %3d%% %5d bytes saved, %4d bytes temp" % (ram_size, 0x500, int((ram_size * 100.0) / 0x500), ram_size - temp_size, temp_size) print "Zero page: %5d of %5d bytes %3d%%" % (zero_size, 0x100, int((zero_size * 100.0) / 0x100)) print "Audio: %6d of %6d bytes %3d%%" % (audio_size, 0x1ffff, int((audio_size * 100.0) / 0x1ffff)) -print "CHR: %5d of %5d chars %3d%%" % (chr_size / 16, 0x1400, int((chr_size * 100.0) / 0x14000)) +print "CHR: %5d of %5d chars %3d%%" % (chr_size / 16, 0x1000, int((chr_size * 100.0) / 0x10000))