tfv: work on name entry

This commit is contained in:
Vince Weaver 2021-01-20 16:36:26 -05:00
parent 9ccb26e740
commit b44775d3eb
5 changed files with 233 additions and 94 deletions

View File

@ -108,5 +108,5 @@ music/battle_music.inc:
clean: clean:
rm -f *~ TITLE.GR *.o *.lst TFV_CREDITS TFV_TITLE TFV_FLYING TFV_WORLD HELLO LOADER rm -f *~ TITLE.GR *.o *.lst TFV_CREDITS TFV_TITLE TFV_FLYING TFV_WORLD HELLO LOADER
cd graphics_battle && make clean cd graphics_battle && make clean
cd graphics_credits && ake clean cd graphics_credits && make clean
cd music && make clean cd music && make clean

View File

@ -6,17 +6,46 @@
; also provide multiple load games ; also provide multiple load games
load_game: load_game:
lda #$03
sta HERO_LEVEL
lda #$02
sta HERO_HP_HI
lda #$90
sta HERO_HP_LO
sta HERO_MP
sta HERO_MP_MAX
lda #LOAD_FLYING lda #LOAD_FLYING
sta WHICH_LOAD sta WHICH_LOAD
lda #$90
sta HERO_HP_LO
lda #$02
sta HERO_HP_HI
lda #$20
sta HERO_MP
sta HERO_MP_MAX
lda #3
sta HERO_LIMIT
lda #$03
sta HERO_LEVEL
lda #$50
sta HERO_XP
lda #$25
sta HERO_MONEY
lda #$00
sta HERO_INVENTORY
lda #'D'
sta HERO_NAME
lda #'E'
sta HERO_NAME1
lda #'A'
sta HERO_NAME2
lda #'T'
sta HERO_NAME3
lda #'E'
sta HERO_NAME4
lda #'R'
sta HERO_NAME5
lda #0
sta HERO_NAME6
lda #0
sta HERO_STATE
lda #25
sta HERO_STEPS
lda #00
sta TFV_X
sta TFV_Y
sta MAP_X
rts rts

View File

@ -64,12 +64,14 @@ init_enemy:
sta ENEMY_X sta ENEMY_X
sta ENEMY_DEAD sta ENEMY_DEAD
lda #$50 ; BCD ; FIXME: lower
sta ENEMY_HP_LO
lda #$00 ; BCD lda #$00 ; BCD
sta ENEMY_HP_LO
lda #$03 ; BCD
sta ENEMY_HP_HI sta ENEMY_HP_HI
lda #$1 ; max HP is 100 lda #$3 ; max HP is 100
sta ENEMY_LEVEL sta ENEMY_LEVEL
lda #30 lda #30

View File

@ -1,84 +1,198 @@
enter_name: enter_name:
jsr TEXT jsr TEXT
jsr HOME
; zero out name
ldx #0
lda #0
zero_name_loop:
sta HERO_NAME,X
inx
cpx #8
bne zero_name_loop
lda #0
sta NAMEX
sta XX
sta YY
name_loop:
; clear screen
lda #$A0
jsr clear_top_a
jsr clear_bottom
; print entry string at top
lda #>(enter_name_string) lda #>(enter_name_string)
sta OUTH sta OUTH
lda #<(enter_name_string) lda #<(enter_name_string)
sta OUTL sta OUTL
jsr move_and_print
jsr print_string
; zero out name
;=============================
; print current name + cursor
; on screen at 11,2?
; get pointer to line 2
lda gr_offsets+(2*2)
sta OUTL
lda gr_offsets+(2*2)+1
clc
adc DRAW_PAGE
sta OUTH
ldx #0 ldx #0
lda #0 ldy #11
zero_name_loop: print_name_loop:
sta name,X
inx
cpx #8
bne zero_name_loop
name_loop:
jsr NORMAL
lda #11
sta CH ; HTAB 12
lda #2
jsr TABV ; VTAB 3
ldy #0
sty NAMEX
name_line:
cpy NAMEX cpy NAMEX
bne name_notx bne print_name_name
print_name_cursor:
lda #'+' lda #'+'
jmp name_next bne print_name_put_char ; bra
name_notx: print_name_name:
lda NAMEL,Y lda HERO_NAME,X
beq name_zero bne print_name_char
print_name_zero:
lda #'_'+$80
bne print_name_put_char ; bra
print_name_char:
ora #$80 ora #$80
bne name_next
name_zero: print_name_put_char:
lda #('_'+$80) sta (OUTL),Y
name_next:
jsr COUT done_print_name_loop:
lda #(' '+$80)
jsr COUT inx
iny iny
cpy #8
bne name_line
lda #7
sta CV
lda #('@'+$80)
sta CHAR
print_letters_loop:
lda #11
sta CH ; HTAB 12
jsr VTAB
ldy #0
print_letters_inner_loop:
lda CHAR
jsr COUT
inc CHAR
lda #(' '+$80)
jsr COUT
iny iny
cpy #25
bne print_name_loop
cpy #$8 .if 0
bne print_letters_inner_loop
jsr wait_until_keypressed for(yy=0;yy<8;yy++) {
basic_htab(12);
basic_vtab(yy*2+6);
for(xx=0;xx<8;xx++) {
if (yy<4) sprintf(tempst,"%c ",(yy*8)+xx+64);
else sprintf(tempst,"%c ",(yy*8)+xx);
if ((xx==cursor_x) && (yy==cursor_y)) basic_inverse();
else basic_normal();
basic_print(tempst);
}
}
basic_htab(12);
basic_vtab(22);
basic_normal();
if ((cursor_y==8) && (cursor_x<4)) basic_inverse();
basic_print(" DONE ");
basic_normal();
basic_print(" ");
if ((cursor_y==8) && (cursor_x>=4)) basic_inverse();
basic_print(" BACK ");
.endif
jsr get_keypress
bne done_enter_name
.if 0
while(1) {
ch=grsim_input();
if (ch==APPLE_UP) { // up
cursor_y--;
}
else if (ch==APPLE_DOWN) { // down
cursor_y++;
}
else if (ch==APPLE_LEFT) { // left
if (cursor_y==8) cursor_x-=4;
else cursor_x--;
}
else if (ch==APPLE_RIGHT) { // right
if (cursor_y==8) cursor_x+=4;
cursor_x++;
}
else if (ch==13) {
if (cursor_y==8) {
if (cursor_x<4) {
ch=27;
break;
}
else {
nameo[name_x]=0;
name_x--;
if (name_x<0) name_x=0;
break;
}
}
if (cursor_y<4) nameo[name_x]=(cursor_y*8)+
cursor_x+64;
else nameo[name_x]=(cursor_y*8)+cursor_x;
name_x++;
}
else if ((ch>32) && (ch<128)) {
nameo[name_x]=ch;
name_x++;
}
if (name_x>7) name_x=7;
if (cursor_x<0) {
cursor_x=7;
cursor_y--;
}
if (cursor_x>7) {
cursor_x=0;
cursor_y++;
}
if (cursor_y<0) cursor_y=8;
if (cursor_y>8) cursor_y=0;
if ((cursor_y==8) && (cursor_x<4)) cursor_x=0;
else if ((cursor_y==8) && (cursor_x>=4)) cursor_x=4;
if (ch!=0) break;
grsim_update();
usleep(10000);
}
if (ch==27) break;
.endif
jsr page_flip
jmp name_loop
done_enter_name:
rts rts
enter_name_string:
.byte 0,0,"PLEASE ENTER A NAME:",0

View File

@ -112,7 +112,18 @@ title_new_game:
jsr enter_name jsr enter_name
; TODO: all rest ; Initial starting values
lda #$1
sta HERO_LEVEL
lda #$01
sta HERO_HP_HI
lda #$00
sta HERO_HP_LO
lda #$20
sta HERO_MP
sta HERO_MP_MAX
lda #LOAD_FLYING lda #LOAD_FLYING
sta WHICH_LOAD sta WHICH_LOAD
@ -124,19 +135,7 @@ title_new_game:
;================================= ;=================================
title_load_game: title_load_game:
; this should go in new game, not load jsr load_game
lda #$02
sta HERO_LEVEL
lda #$01
sta HERO_HP_HI
lda #$50
sta HERO_HP_LO
sta HERO_MP
sta HERO_MP_MAX
lda #LOAD_FLYING
sta WHICH_LOAD
rts rts
@ -180,6 +179,7 @@ done_increment_frame:
.include "keyboard.s" .include "keyboard.s"
.include "joystick.s" .include "joystick.s"
.include "draw_menu.s" .include "draw_menu.s"
.include "load_game.s"
;=============================================== ;===============================================
; Data ; Data
@ -191,10 +191,4 @@ title_menu:
.byte 16,23,"CREDITS",0 .byte 16,23,"CREDITS",0
.byte 255 .byte 255
enter_name_string:
.asciiz "PLEASE ENTER A NAME:"
name:
.byte $0,$0,$0,$0,$0,$0,$0,$0
.include "graphics_title/tfv_title.inc" .include "graphics_title/tfv_title.inc"