注:hspda.as をincludeしてます

title "Level Point D3"
#include "hspda.as"

//////////////////////////////////////////////////////////////////////////////////////////
//	変数
//////////////////////////////////////////////////////////////////////////////////////////
#define button_block(%1="") %tbtn1 %i0 button %1,*%p:%tbtn2 goto *%i %i0:%tbtn1 *%o
#define b_break             %tbtn2 goto *%p
#define b_end               %tbtn2 *%o:stop:*%o
//	button_block "1〜10カウント"
//		mes "" + a
//		if a = 10	:b_break
//		a ++
//	b_end
	randomize
	pic_flag=0


gosub *def_selected_PC_status

goto *@f
*back_pic_draw
	return
*wnd_reset
	objsize 160,35
	color 0,128,0
	color 200,0,25
	boxf 0,0,1000,700
	color 255,255,255
	return

*def_selected_PC_status
	
	sdim player_class,100,10
	sdim player_class_str,100,10
	
#enum en_player_class_null=0
#enum en_player_class_A
#enum en_player_class_B
#enum en_player_class_C
#enum en_player_class_D
#enum en_player_class_E
#enum en_player_class_this=8
	
player_class.en_player_class_A="爪マスター"
player_class.en_player_class_B="剣マスター"
player_class.en_player_class_C="槍マスター"
player_class.en_player_class_D="弓マスター"
player_class.en_player_class_E="斧マスター"

player_class_str.en_player_class_null="en_player_class_null"
player_class_str.en_player_class_A="en_player_class_A"
player_class_str.en_player_class_B="en_player_class_B"
player_class_str.en_player_class_C="en_player_class_C"
player_class_str.en_player_class_D="en_player_class_D"
player_class_str.en_player_class_E="en_player_class_E"
player_class_str.en_player_class_this="en_player_class_this"

player_class.en_player_class_this=player_class.en_player_class_A
	dim player_dat,50
	sdim player_dat_str,100,50

//	score=10
//	player_this_class=1
//	player_this_class_name=player_class_A
//	player_this_LV=0
//	player_this_exp=0
//	player_this_next_exp=0

#enum en_player_null=10
#enum en_player_score
#enum en_player_this_class
#enum en_player_this_LV
#enum en_player_this_exp
#enum en_player_this_next_exp

player_dat.en_player_score=10
player_dat.en_player_this_class=1
player_dat.en_player_this_LV=1
player_dat.en_player_this_exp=0
player_dat.en_player_this_next_exp=0

player_dat_str.en_player_null="en_player_null"
player_dat_str.en_player_score="en_player_score"
player_dat_str.en_player_this_class="en_player_this_class"
player_dat_str.en_player_this_LV="en_player_this_LV"
player_dat_str.en_player_this_exp="en_player_this_exp"
player_dat_str.en_player_this_next_exp="en_player_this_next_exp"
#enum en_player_LV_null=20
#enum en_player_LV_A
#enum en_player_LV_B
#enum en_player_LV_C
#enum en_player_LV_D
#enum en_player_LV_E

player_dat.en_player_LV_A=1
player_dat.en_player_LV_B=1
player_dat.en_player_LV_C=1
player_dat.en_player_LV_D=1
player_dat.en_player_LV_E=1

player_dat_str.en_player_LV_null="en_player_LV_null"
player_dat_str.en_player_LV_A="en_player_LV_A"
player_dat_str.en_player_LV_B="en_player_LV_B"
player_dat_str.en_player_LV_C="en_player_LV_C"
player_dat_str.en_player_LV_D="en_player_LV_D"
player_dat_str.en_player_LV_E="en_player_LV_E"

#enum en_player_exp_null=30
#enum en_player_exp_A
#enum en_player_exp_B
#enum en_player_exp_C
#enum en_player_exp_D
#enum en_player_exp_E

player_dat.en_player_exp_A=0
player_dat.en_player_exp_B=0
player_dat.en_player_exp_C=0
player_dat.en_player_exp_D=0
player_dat.en_player_exp_E=0

player_dat_str.en_player_exp_null="en_player_exp_null"
player_dat_str.en_player_exp_A="en_player_exp_A"
player_dat_str.en_player_exp_B="en_player_exp_B"
player_dat_str.en_player_exp_C="en_player_exp_C"
player_dat_str.en_player_exp_D="en_player_exp_D"
player_dat_str.en_player_exp_E="en_player_exp_E"

#enum en_player_next_exp_null=40
#enum en_player_next_exp_A
#enum en_player_next_exp_B
#enum en_player_next_exp_C
#enum en_player_next_exp_D
#enum en_player_next_exp_E

player_dat.en_player_next_exp_A=0
player_dat.en_player_next_exp_B=0
player_dat.en_player_next_exp_C=0
player_dat.en_player_next_exp_D=0
player_dat.en_player_next_exp_E=0

player_dat_str.en_player_next_exp_null="en_player_next_exp_null"
player_dat_str.en_player_next_exp_A="en_player_next_exp_A"
player_dat_str.en_player_next_exp_B="en_player_next_exp_B"
player_dat_str.en_player_next_exp_C="en_player_next_exp_C"
player_dat_str.en_player_next_exp_D="en_player_next_exp_D"
player_dat_str.en_player_next_exp_E="en_player_next_exp_E"

repeat 50
	logmes ""+cnt+" "+player_dat_str.cnt
loop
#define sta_ar_var_MAX 1050
#define ar_first_index 8
	dim player_some_next_exp,sta_ar_var_MAX
	gosub *calc_sub
	return

#defcfunc ID_from_str str p_str,local loc_str
	loc_str=p_str
	repeat 10
		if loc_str==player_class_str.cnt:return cnt
	loop
	repeat 50
		if loc_str==player_dat_str.cnt:return cnt
	loop
	return -1
#deffunc ID_setter str p1_str,str p2_str,local loc_p1,local loc_p2,local loc_int1,local loc_int2
	loc_p1=p1_str:loc_p2=p2_str
	loc_int1=ID_from_str(loc_p1)
	loc_int2=ID_from_str(loc_p2)
	if loc_int1 < 10:player_class.loc_int1=player_class.loc_int2
	if loc_int1 >= 10:player_dat.loc_int1=player_dat.loc_int2
	logmes "setter "+loc_p1+" ("+loc_int1+") < "+loc_p2+" ("+loc_int2+")"
	return
	
*calc_sub; array p_ar
;	dim player_some_next_exp,sta_ar_var_MAX
	i=1
	player_some_next_exp.0=i
	repeat sta_ar_var_MAX
		i+=cnt
		player_some_next_exp(cnt+1)=i
	loop
	return
*exp_up1
	player_dat.en_player_this_exp++
	return	
*@
//stop
goto *HOME
*pre_HOME
	clrobj 0
*HOME	
	;MB_clear
	gosub *wnd_reset
	pos 200,20
	mes "HOME:何をしますか?\n"
	mes ""+player_class.en_player_class_this //+" score "+player_dat.en_player_score
	gosub *show_player_status
//	mes "LV"+player_dat.en_player_this_LV+" exp "+player_dat.en_player_this_exp+" next "+player_dat.en_player_this_next_exp
	pos 0,0
;	objsize 290,25
	button "Training",*l_training
	button "Class change",*l_class_change
	button "Status",*l_status
	button "vsave",*l_vsave
	button "vload",*l_vload
;	MB_draw
	stop
*l_vsave
	vsave "save.dat"
	stop
*l_vload
	vload "save.dat"
	goto *pre_HOME
*l_training
	gosub *exp_up1
	player_dat.en_player_score+=10
	goto *pre_HOME
*l_class_change
	clrobj 0
	gosub *wnd_reset
	pos 200,20
	mes "どのclassにclass changeしますか?"
	pos 0,0
	button "爪マスター",*l_sel_tsume
	button "剣マスター",*l_sel_kenn
	button "槍マスター",*l_sel_yari
	button "弓マスター",*l_sel_yumi
	button "斧マスター",*l_sel_ono
	button "BACK",*pre_HOME
	stop
#deffunc dat_taihi
	switch player_dat.en_player_this_class
	case 1:
		ID_setter "en_player_LV_A","en_player_this_LV"
		ID_setter "en_player_exp_A","en_player_this_exp"
		ID_setter "en_player_next_exp_A","en_player_this_next_exp"
		swbreak
	case 2:
		ID_setter "en_player_LV_B","en_player_this_LV"
		ID_setter "en_player_exp_B","en_player_this_exp"
		ID_setter "en_player_next_exp_B","en_player_this_next_exp"
		swbreak
	case 3:
		ID_setter "en_player_LV_C","en_player_this_LV"
		ID_setter "en_player_exp_C","en_player_this_exp"
		ID_setter "en_player_next_exp_C","en_player_this_next_exp"
		swbreak
	case 4:
		ID_setter "en_player_LV_D","en_player_this_LV"
		ID_setter "en_player_exp_D","en_player_this_exp"
		ID_setter "en_player_next_exp_D","en_player_this_next_exp"
		swbreak
	case 5:
		ID_setter "en_player_LV_E","en_player_this_LV"
		ID_setter "en_player_exp_E","en_player_this_exp"
		ID_setter "en_player_next_exp_E","en_player_this_next_exp"
		swbreak
	swend
	return
*l_sel_tsume
	dat_taihi
	player_class.en_player_class_this=player_class.en_player_class_A
	player_dat.en_player_this_class=1
	ID_setter "en_player_this_LV","en_player_LV_A"
	ID_setter "en_player_this_exp","en_player_exp_A"
	ID_setter "en_player_this_next_exp","en_player_next_exp_A"
	goto *l_sel_CC
*l_sel_kenn
	dat_taihi
	player_class.en_player_class_this=player_class.en_player_class_B
	player_dat.en_player_this_class=2
	ID_setter "en_player_this_LV","en_player_LV_B"
	ID_setter "en_player_this_exp","en_player_exp_B"
	ID_setter "en_player_this_next_exp","en_player_next_exp_B"
	goto *l_sel_CC
*l_sel_yari
	dat_taihi
	player_class.en_player_class_this=player_class.en_player_class_C
	player_dat.en_player_this_class=3
	ID_setter "en_player_this_LV","en_player_LV_C"
	ID_setter "en_player_this_exp","en_player_exp_C"
	ID_setter "en_player_this_next_exp","en_player_next_exp_C"
	goto *l_sel_CC
*l_sel_yumi
	dat_taihi
	player_class.en_player_class_this=player_class.en_player_class_D
	player_dat.en_player_this_class=4
	ID_setter "en_player_this_LV","en_player_LV_D"
	ID_setter "en_player_this_exp","en_player_exp_D"
	ID_setter "en_player_this_next_exp","en_player_next_exp_D"
	goto *l_sel_CC
*l_sel_ono
	dat_taihi
	player_class.en_player_class_this=player_class.en_player_class_E
	player_dat.en_player_this_class=5
	ID_setter "en_player_this_LV","en_player_LV_E"
	ID_setter "en_player_this_exp","en_player_exp_E"
	ID_setter "en_player_this_next_exp","en_player_next_exp_E"
	goto *l_sel_CC
*l_sel_CC
	clrobj 0
	gosub *wnd_reset
	pos 200,20
	mes ""+player_class.en_player_class_this+" に class change しました"
	logmes ""+player_dat.en_player_this_class
	pos 0,0
	button "NEXT",*pre_HOME
	stop
*l_status
	clrobj 0
	gosub *wnd_reset
	pos 200,20
	gosub *show_player_kuwasii_status
	pos 0,0
	button "NEXT",*pre_HOME
	stop
*show_player_status
	tmp_player_LV=player_dat.en_player_this_LV
	gosub *get_p_next_exp
	mes "score "+player_dat.en_player_score
	mes "LV "+player_dat.en_player_this_LV+" exp "+player_dat.en_player_this_exp + " next "+ player_dat.en_player_this_next_exp
	if tmp_player_LV!=player_dat.en_player_this_LV:mes "LVUP!"
	return
*show_player_kuwasii_status
	dat_taihi
	mes "score "+player_dat.en_player_score
	mes "爪 LV "+player_dat.en_player_LV_A+" exp "+player_dat.en_player_exp_A + " next "+ player_dat.en_player_next_exp_A
	mes "剣 LV "+player_dat.en_player_LV_B+" exp "+player_dat.en_player_exp_B + " next "+ player_dat.en_player_next_exp_B
	mes "槍 LV "+player_dat.en_player_LV_C+" exp "+player_dat.en_player_exp_C + " next "+ player_dat.en_player_next_exp_C
	mes "弓 LV "+player_dat.en_player_LV_D+" exp "+player_dat.en_player_exp_D + " next "+ player_dat.en_player_next_exp_D
	mes "斧 LV "+player_dat.en_player_LV_E+" exp "+player_dat.en_player_exp_E + " next "+ player_dat.en_player_next_exp_E
	return
*get_p_next_exp
	repeat sta_ar_var_MAX
		if player_dat.en_player_this_exp>=player_some_next_exp.cnt:player_dat.en_player_this_LV=cnt+1
	loop
	player_dat.en_player_this_next_exp=player_some_next_exp(player_dat.en_player_this_LV)
	if player_dat.en_player_this_LV==1:player_dat.en_player_this_next_exp=1
	return