すぅぃった その5
サンプルRPG(1つのファイルに全部書く)
ようやくここまでたどりつきました
今までの講座はこのスクリプトを説明するものだったのです
説明はここまでの講座に書きました
なのでこのスクリプトでやっていることを理解したい時は
ここまでの講座を参照して下さい
ちなみにこのスクリプトはHSP2.61で組みました
頑張ればHSP3.0にも移植できるでしょうがやめておきます
理由は長めのスクリプトなので移植はいいとしてもデバッグもあるし
移植とデバッグをする気力がわかないことと
バージョンアップをするごとにデバッグが必要なことです
あくまでもこのスクリプトはサンプルなので
すぅぃったの原理でスクリプトを組みたい人への参考程度にしておきます
// RPG_TEST101.as
// 主人公の各種ステータスの変数宣言と初期設定
player_name ="冒険者"
player_lv =1
player_mhp =30
player_hp =30
player_atack =5
player_exp =0
player_next_exp =25
player_gold =100
own_poshon_lv1 =0
own_poshon_lv2 =0
own_poshon_lv3 =0
own_poshon_lv4 =0
own_poshon_lv5 =0
// ダンジョンで戦闘時に使用するモンスターの名前,mhp,hp,at,exp,gp
// ダンジョンLV選択時に代入する
ene_name=""
ene_atp=0
ene_mhp=0
ene_hpp=0
ene_exp=0
ene_gpp=0
// ここからはボタン関係の変数
// これらの変数の中身をobjprmに代入する
btstr_1=""
btstr_2=""
btstr_3=""
btstr_4=""
btstr_5=""
btstr_6=""
// ボタンが押された時にこれらの変数をselected_btnextに代入して
// メインルーチンにジャンプする
btnext_1=""
btnext_2=""
btnext_3=""
btnext_4=""
btnext_5=""
btnext_6=""
// 使用する関数とサブルーチン
// 関数と命令の回避
goto *@f
// モンスターの名前と各種ステータスを代入する関数
#deffunc monster_st_set int
mref monster_lv,0
switch monster_lv
case 1
ene_name="ゴブリン"
ene_mhp=15
ene_hpp=ene_mhp
ene_atp=10
ene_exp=25
ene_gpp=50
swbreak
case 2
ene_name="スケルトン"
ene_mhp=30
ene_hpp=ene_mhp
ene_atp=20
ene_exp=50
ene_gpp=90
swbreak
case 3
ene_name="ジャイアント"
ene_mhp=60
ene_hpp=ene_mhp
ene_atp=40
ene_exp=100
ene_gpp=160
swbreak
case 4
ene_name="ヒドラ"
ene_mhp=120
ene_hpp=ene_mhp
ene_atp=80
ene_exp=200
ene_gpp=280
swbreak
case 5
ene_name="ドラゴン"
ene_mhp=240
ene_hpp=ene_mhp
ene_atp=160
ene_exp=0
ene_gpp=0
swbreak
swend
return
// レベルアップによって変更されるPlayerのステータス
#deffunc player_st_set int
mref player_up_lv,0
switch player_lv
case 1
player_lv =2
player_mhp =60
player_atack =10
player_next_exp =100
swbreak
case 2
player_lv =3
player_mhp =120
player_atack =20
player_next_exp =300
swbreak
case 3
player_lv =4
player_mhp =240
player_atack =40
player_next_exp =800
swbreak
case 4
player_lv =5
player_mhp =480
player_atack =80
player_next_exp =0
swbreak
swend
return
// プレイヤーのステータスを表示するサブルーチン
*show_player_status
mes ""
mes "冒険者"
mes "LV"+player_lv+" Next"+player_next_exp+"("+player_exp+")"
mes "HP "+player_hp+"/"+player_mhp
mes "攻撃力 "+player_atack
mes "所持金 "+player_gold
mes "ポーション "+own_poshon_lv1+"/"+own_poshon_lv2+"/"+own_poshon_lv3+"/"+own_poshon_lv4+"/"+own_poshon_lv5
return
*ステータス初期化
player_name ="冒険者"
player_lv =1
player_mhp =30
player_hp =30
player_atack =5
player_exp =0
player_next_exp =25
player_gold =100
own_poshon_lv1 =0
own_poshon_lv2 =0
own_poshon_lv3 =0
own_poshon_lv4 =0
own_poshon_lv5 =0
selected_btnext="OP"
return
*ポーション詳細表示
mes {"ポーションLV1 5GP 回復量 30
ポーションLV2 10GP 回復量 60
ポーションLV3 20GP 回復量 120
ポーションLV4 40GP 回復量 240
ポーションLV5 80GP 回復量 480"}
return
*@
// 重要な変数
// ボタンによって選択される選択肢のID
selected_btnext="OP"
// 探索するダンジョンのLV
enter_dglv=0
// mesを直接入力しない時に用いる
// 叙述内に変数を挿入する場合に用いる事が多い
sdim dr_str,1000
dr_str=""
// ダンジョン探索の達成度 ダンジョン攻略のレベル
// 1匹倒すごとに1上昇し5になるとダンジョン攻略完成 経験値とお金がもらえる
// ダンジョンLV5を攻略するとゲームクリア
dg_atteinment=0
// ポーション購入及び使用の時選択されたポーションのレベル
sl_pos_lv=0
title "テキストRPGサンプル"
// ここからメインルーチン
*bt_selected_gomain
switch selected_btnext
// case文には2種類あってselected_btnextの最後の文字がアルファベットなら
// ボタン内の文字の変更と文章の記述
// selected_btnextの最後の文字が数字なら変数の操作と強制条件分岐
// こんなかんじならボタン内の文字の変更と文章の記述
//case "xxxx"
// btstr_1="NEXT"
// btnext_1="xxxxx"
// gosub *one_bt
// pos 150,0
// mes {"文章叙述"}
// gosub *show_player_status
// swbreak
// こんなかんじなら変数の操作と強制条件分岐
// ここではHPの回復を行っていますね
//case "xxx1"
// player_hp=player_mhp
// selected_btnext="xxx1x"
// goto *bt_selected_gomain
// このプログラムが起動されて最初の文章の叙述
case "OP"
btstr_1="newgame"
btnext_1="OP_a"
btstr_2="continue"
btnext_2="OP_b"
gosub *two_bt
pos 150,0
mes "テキストRPGサンプル"
swbreak
// オープニングテキスト
case "OP_a"
btstr_1="NEXT"
btnext_1="TOWN"
gosub *one_bt
pos 150,0
mes {"ナイトとは国家のいしずえである
町外れにあるダンジョンの最下層に辿りついたものだけが
ナイトの称号を得る事ができるのである
さあ 若者よ立ち上がれ!
剣を取って険しきその試練へと立ち向かうのだ!"}
swbreak
// 最初にCONTINUEを選んだ場合
case "OP_b"
btstr_1="NEXT"
btnext_1="OP_b1"
gosub *one_bt
pos 150,0
mes {"continueしました"}
swbreak
// データのロード
case "OP_b1"
gosub *player_dat_load
selected_btnext="TOWN"
goto *bt_selected_gomain
// 町でのコマンド入力受付 ここが全てのコマンドの起点となる
case "TOWN"
btstr_1="shop"
btnext_1="SHOP"
btstr_2="guild"
btnext_2="TALK"
btstr_3="save"
btnext_3="SAVE"
btstr_4="load"
btnext_4="LOAD"
btstr_5="dungeon"
btnext_5="DG"
btstr_6="HELP"
btnext_6="HELP"
gosub *six_bt
pos 150,0
mes {"town
何をしますか?"}
gosub *show_player_status
swbreak
// お店の処理
case "SHOP"
btstr_1="ポーションLV1"
btnext_1="SHOP_1"
btstr_2="ポーションLV2"
btnext_2="SHOP_2"
btstr_3="ポーションLV3"
btnext_3="SHOP_3"
btstr_4="ポーションLV4"
btnext_4="SHOP_4"
btstr_5="ポーションLV5"
btnext_5="SHOP_5"
btstr_6="戻る"
btnext_6="TOWN"
gosub *six_bt
pos 150,0
mes {"shop
どのポーションを買いますか?\n"}
gosub *ポーション詳細表示
gosub *show_player_status
swbreak
// ポーションの購入
case "SHOP_1"
sl_pos_lv=1
if player_gold >=5{
player_gold-=5:own_poshon_lv1++
selected_btnext="SHOP_xa" }
else{ selected_btnext="SHOP_xb" }
goto *bt_selected_gomain
case "SHOP_2"
sl_pos_lv=2
if player_gold >=10{
player_gold-=10:own_poshon_lv2++
selected_btnext="SHOP_xa" }
else{ selected_btnext="SHOP_xb" }
goto *bt_selected_gomain
case "SHOP_3"
sl_pos_lv=3
if player_gold >=20{
player_gold-=20:own_poshon_lv3++
selected_btnext="SHOP_xa" }
else{ selected_btnext="SHOP_xb" }
goto *bt_selected_gomain
case "SHOP_4"
sl_pos_lv=4
if player_gold >=40{
player_gold-=40:own_poshon_lv4++
selected_btnext="SHOP_xa" }
else{ selected_btnext="SHOP_xb" }
goto *bt_selected_gomain
case "SHOP_5"
sl_pos_lv=5
if player_gold >=80{
player_gold-=80:own_poshon_lv5++
selected_btnext="SHOP_xa" }
else{ selected_btnext="SHOP_xb" }
goto *bt_selected_gomain
// ポーション購入の記述
case "SHOP_xa"
btstr_1="NEXT"
btnext_1="SHOP"
gosub *one_bt
pos 150,0
dr_str={"shop
ポーションLV"}+sl_pos_lv+{"を購入した\n"}
mes dr_str
gosub *ポーション詳細表示
gosub *show_player_status
swbreak
// お金が足りなくてポーションが買えなかった場合
case "SHOP_xb"
btstr_1="NEXT"
btnext_1="SHOP"
gosub *one_bt
pos 150,0
mes {"shop
お金が足りません\n"}
gosub *ポーション詳細表示
gosub *show_player_status
swbreak
// guild内のコマンド誰に話しかけるかを選んでいます
case "TALK"
btstr_1="ジョン"
btnext_1="TALK_a"
btstr_2="スティーブ"
btnext_2="TALK_b"
btstr_3="ヨハン"
btnext_3="TALK_c"
btstr_4="戻る"
btnext_4="TOWN"
gosub *four_bt
pos 150,0
mes {"guild
誰に話しかけますか?"}
gosub *show_player_status
swbreak
case "TALK_a"
btstr_1="NEXT"
btnext_1="TALK"
gosub *one_bt
pos 150,0
mes {"ジョン\nポーションは余裕を持って
たくさん買っておいた方がいいよ"}
gosub *show_player_status
swbreak
case "TALK_b"
btstr_1="NEXT"
btnext_1="TALK"
gosub *one_bt
pos 150,0
mes {"スティーブ\nダンジョンでモンスターを一匹倒したからって
いい気にならない方がいいよ
モンスターを何匹も倒さないと
お金も経験値も手に入れられないのだから"}
gosub *show_player_status
swbreak
case "TALK_c"
btstr_1="NEXT"
btnext_1="TALK"
gosub *one_bt
pos 150,0
mes {"ヨハン\nダンジョンに挑戦するのかい?
止めた方がいい その方が身のためだよ"}
gosub *show_player_status
swbreak
// SAVEコマンド
case "SAVE"
btstr_1="YES"
btnext_1="SAVE_1"
btstr_2="NO"
btnext_2="TOWN"
gosub *two_bt
pos 150,0
mes {"save
SAVEしますか?"}
gosub *show_player_status
swbreak
// 実際にデータをセーブしています
case "SAVE_1"
gosub *player_dat_save
selected_btnext="SAVE_1a"
goto *bt_selected_gomain
case "SAVE_1a"
btstr_1="NEXT"
btnext_1="TOWN"
gosub *one_bt
pos 150,0
mes {"save
SAVEしました"}
gosub *show_player_status
swbreak
// LOADコマンド
case "LOAD"
btstr_1="YES"
btnext_1="LOAD_1"
btstr_2="NO"
btnext_2="TOWN"
gosub *two_bt
pos 150,0
mes {"load
LOADしますか?"}
gosub *show_player_status
swbreak
// 実際にLOADしています
case "LOAD_1"
gosub *player_dat_load
selected_btnext="LOAD_1a"
goto *bt_selected_gomain
case "LOAD_1a"
btstr_1="NEXT"
btnext_1="TOWN"
gosub *one_bt
pos 150,0
mes {"load
LOADしました"}
gosub *show_player_status
swbreak
// ダンジョンコマンドここでは何LVのダンジョンに入るか選んでいますね
case "DG"
btstr_1="LV1"
btnext_1="DG_1"
btstr_2="LV2"
btnext_2="DG_2"
btstr_3="LV3"
btnext_3="DG_3"
btstr_4="LV4"
btnext_4="DG_4"
btstr_5="LV5"
btnext_5="DG_5"
btstr_6="戻る"
btnext_6="TOWN"
gosub *six_bt
pos 150,0
mes {"dungeon
ダンジョンLV何に入りますか?"}
gosub *show_player_status
swbreak
// 何LVのダンジョンに入ったか代入しています
// このLVのダンジョンで出現する敵のステータスの代入も行っています
case "DG_1"
enter_dglv=1
selected_btnext="DG_xa"
dg_atteinment=0
monster_st_set 1
goto *bt_selected_gomain
case "DG_2"
enter_dglv=2
selected_btnext="DG_xa"
dg_atteinment=0
monster_st_set 2
goto *bt_selected_gomain
case "DG_3"
enter_dglv=3
selected_btnext="DG_xa"
dg_atteinment=0
monster_st_set 3
goto *bt_selected_gomain
case "DG_4"
enter_dglv=4
selected_btnext="DG_xa"
dg_atteinment=0
monster_st_set 4
goto *bt_selected_gomain
case "DG_5"
enter_dglv=5
selected_btnext="DG_xa"
dg_atteinment=0
monster_st_set 5
goto *bt_selected_gomain
// ダンジョン内でのコマンド
case "DG_xa"
btstr_1="探索"
btnext_1="DG_xa1"
btstr_2="ポーション使用"
btnext_2="DG_xab"
btstr_3="探索終了"
btnext_3="DG_xac"
gosub *three_bt
pos 150,0
dr_str="ダンジョンLV"+enter_dglv+"\n何をしますか?"
mes dr_str
gosub *show_player_status
swbreak
// 探索を選んだ場合敵のHPの設定も行っています
case "DG_xa1"
ene_hpp=ene_mhp
selected_btnext="BT"
goto *bt_selected_gomain
// 実際に敵が現れたようです
case "BT"
btstr_1="NEXT"
btnext_1="BT_a"
gosub *one_bt
pos 150,0
dr_str="ダンジョンLV"+enter_dglv+" 探索\n"
dr_str+=ene_name+"が現れた!"
mes dr_str
gosub *show_player_status
swbreak
// 戦闘中のコマンドの入力
case "BT_a"
btstr_1="BATTLE"
btnext_1="BT_a1"
btstr_2="ESCAPE"
btnext_2="BT_ab"
gosub *two_bt
pos 150,0
dr_str="対"+ene_name+" 戦闘\nどうしますか?"
mes dr_str
gosub *show_player_status
swbreak
// BATTLEを選んだ場合、勝利、敗北、戦闘継続の条件分岐も行っています
case "BT_a1"
ene_hpp-=player_atack
if ene_hpp > 0{
player_hp-=ene_atp
if player_hp > 0{ selected_btnext="BT_a1a" }
else{ selected_btnext="BT_a1b" } }
else{ selected_btnext="BT_a1c" }
goto *bt_selected_gomain
// 戦闘継続
case "BT_a1a"
btstr_1="NEXT"
btnext_1="BT_a"
gosub *one_bt
pos 150,0
dr_str="対"+ene_name+" 戦闘\n"
dr_str+="冒険者の攻撃! "+player_atack+"のダメージ!\n"
dr_str+=""+ene_name+"の反撃! "+ene_atp+"のダメージ!"
mes dr_str
gosub *show_player_status
swbreak
// 戦闘に敗北した場合
case "BT_a1b"
btstr_1="NEXT"
btnext_1="BT_a1ba"
gosub *one_bt
pos 150,0
dr_str="対"+ene_name+" 戦闘\n"
dr_str+="冒険者の攻撃! "+player_atack+"のダメージ!\n"
dr_str+=""+ene_name+"の反撃! "+ene_atp+"のダメージ!\n冒険者は戦いに敗れてしまった"
mes dr_str
gosub *show_player_status
swbreak
case "BT_a1ba"
btstr_1="NEXT"
btnext_1="BT_a1ba1"
gosub *one_bt
pos 150,0
dr_str="対"+ene_name+" 戦闘\n冒険者は志半ばでその意思を絶たれてしまった"
dr_str+="\n嗚呼!意識が遠のいていく\n気がついた時、君は病院のベッドの上だった"
mes dr_str
gosub *show_player_status
swbreak
case "BT_a1ba1"
player_hp=player_mhp
selected_btnext="TOWN"
goto *bt_selected_gomain
// 戦闘に勝利した場合
case "BT_a1c"
btstr_1="NEXT"
btnext_1="BT_a1c1"
gosub *one_bt
pos 150,0
dr_str="対"+ene_name+" 戦闘\n"
dr_str+="冒険者の攻撃! "+player_atack+"のダメージ!"
dr_str+=""+ene_name+"は倒れた\n冒険者の勝利!"
mes dr_str
gosub *show_player_status
swbreak
// 探索が終了したか?エンディングへの分岐も行っています
case "BT_a1c1"
dg_atteinment++
if 5>dg_atteinment{ selected_btnext="DG_xa" }
else{
if enter_dglv==5{selected_btnext="ED" }
else{ selected_btnext="BT_a1c1b" } }
goto *bt_selected_gomain
// ダンジョンの探索を終了した場合
case "BT_a1c1b"
btstr_1="NEXT"
btnext_1="BT_a1c1b1"
gosub *one_bt
pos 150,0
dr_str ="ダンジョンLV"+enter_dglv+" 探索\n"
dr_str+="戦いの後君は財宝をみつけた!\n"
dr_str+="ダンジョンLV"+enter_dglv+"の探索は成功に終わったのだ!\n"
dr_str+=""+ene_exp+"Pの経験値と"+ene_gpp+"Pのお金を獲得した!"
mes dr_str
gosub *show_player_status
swbreak
// お金と経験値の取得、LVアップの条件分岐も行っています
case "BT_a1c1b1"
player_exp+=ene_exp
player_gold+=ene_gpp
if (player_exp>=player_next_exp)&(5>player_lv){
selected_btnext="BT_a1c1b1a" }
else{ selected_btnext="BT_a1c1b1b" }
goto *bt_selected_gomain
// LVが上がった場合
case "BT_a1c1b1a"
btstr_1="NEXT"
btnext_1="BT_a1c1b1a1"
gosub *one_bt
pos 150,0
dr_str="ダンジョンLV"+enter_dglv+" 探索\n"
dr_str+="冒険者はLVが上がった!"
mes dr_str
gosub *show_player_status
swbreak
case "BT_a1c1b1a1"
selected_btnext="BT_a1c1b1a1a"
player_st_set player_lv
goto *bt_selected_gomain
case "BT_a1c1b1a1a"
btstr_1="NEXT"
btnext_1="BT_a1c1b1b"
gosub *one_bt
pos 150,0
dr_str="ダンジョンLV"+enter_dglv+" 探索\n"
dr_str+="最大HPが"+player_mhp+"になった!\n"
dr_str+="攻撃力が"+player_atack+"になった!"
mes dr_str
gosub *show_player_status
swbreak
// 探索終了
case "BT_a1c1b1b"
btstr_1="NEXT"
btnext_1="BT_a1c1b1b1"
gosub *one_bt
pos 150,0
dr_str="ダンジョンLV"+enter_dglv+" 探索\n"
dr_str+="戦いを終え財宝をみつけた君は町へと帰還した"
mes dr_str
gosub *show_player_status
swbreak
case "BT_a1c1b1b1"
player_hp=player_mhp
selected_btnext="TOWN"
goto *bt_selected_gomain
// ESCAPEを選んだ場合
case "BT_ab"
btstr_1="NEXT"
btnext_1="DG_xa"
gosub *one_bt
pos 150,0
dr_str="対"+ene_name+" 戦闘\n君は戦闘の場から逃走した"
mes dr_str
gosub *show_player_status
swbreak
// ポーションの使用
case "DG_xab"
btstr_1="ポーションLV1"
btnext_1="DG_xab1"
btstr_2="ポーションLV2"
btnext_2="DG_xab2"
btstr_3="ポーションLV3"
btnext_3="DG_xab3"
btstr_4="ポーションLV4"
btnext_4="DG_xab4"
btstr_5="ポーションLV5"
btnext_5="DG_xab5"
btstr_6="やめる"
btnext_6="DG_xa"
gosub *six_bt
pos 150,0
dr_str="ダンジョンLV"+enter_dglv+" ポーション使用\n"
dr_str+="どのポーションを使用しますか?"
mes dr_str
gosub *ポーション詳細表示
gosub *show_player_status
swbreak
// ポーションを使用して回復を行っています
case "DG_xab1"
if own_poshon_lv1>=1{
sl_pos_lv=1
player_hp+=30
own_poshon_lv1-=1
if player_hp>player_mhp{ player_hp=player_mhp }
selected_btnext="DG_xabxa" }
else{ selected_btnext="DG_xabxb" }
goto *bt_selected_gomain
case "DG_xab2"
if own_poshon_lv2>=1{
sl_pos_lv=2
player_hp+=60
own_poshon_lv2-=1
if player_hp>player_mhp{ player_hp=player_mhp }
selected_btnext="DG_xabxa" }
else{ selected_btnext="DG_xabxb" }
goto *bt_selected_gomain
case "DG_xab3"
if own_poshon_lv3>=1{
sl_pos_lv=3
player_hp+=120
own_poshon_lv3-=1
if player_hp>player_mhp{ player_hp=player_mhp }
selected_btnext="DG_xabxa" }
else{ selected_btnext="DG_xabxb" }
goto *bt_selected_gomain
case "DG_xab4"
if own_poshon_lv4>=1{
sl_pos_lv=4
player_hp+=240
own_poshon_lv4-=1
if player_hp>player_mhp{ player_hp=player_mhp }
selected_btnext="DG_xabxa" }
else{ selected_btnext="DG_xabxb" }
goto *bt_selected_gomain
case "DG_xab5"
if own_poshon_lv5>=1{
sl_pos_lv=5
player_hp+=480
own_poshon_lv5-=1
if player_hp>player_mhp{ player_hp=player_mhp }
selected_btnext="DG_xabxa" }
else{ selected_btnext="DG_xabxb" }
goto *bt_selected_gomain
// ポーションを使用したという記述
case "DG_xabxa"
btstr_1="NEXT"
btnext_1="DG_xa"
gosub *one_bt
pos 150,0
dr_str ="ダンジョンLV"+enter_dglv+" ポーション使用\nポーションLV"+sl_pos_lv
dr_str+="を使用しました"
mes dr_str
gosub *ポーション詳細表示
gosub *show_player_status
swbreak
// ポーションが足りなかった場合
case "DG_xabxb"
btstr_1="NEXT"
btnext_1="DG_xa"
gosub *one_bt
pos 150,0
dr_str ="ダンジョンLV"+enter_dglv+" ポーション使用\n"
dr_str+="ポーションが足りません"
mes dr_str
gosub *ポーション詳細表示
gosub *show_player_status
swbreak
// 探索終了を選んだ場合
case "DG_xac"
btstr_1="NEXT"
btnext_1="DG_xac1"
gosub *one_bt
pos 150,0
dr_str ="ダンジョンLV"+enter_dglv+" 探索終了\n"
dr_str+="探索を途中で打ち切ってダンジョンを後にした"
mes dr_str
gosub *show_player_status
swbreak
case "DG_xac1"
player_hp=player_mhp
selected_btnext="TOWN"
goto *bt_selected_gomain
// エンディング
case "ED"
btstr_1="NEXT"
btnext_1="ED_a"
gosub *one_bt
pos 150,0
dr_str ="ダンジョンLV"+enter_dglv+" 探索\n"
dr_str+="ダンジョンLV"+enter_dglv+"の探索は成功に終わった!\n"
dr_str+="戦いの後君は一組のサークレットを目にした\n"
dr_str+="君はそのサークレットに触れてみた\n"
dr_str+="君の体に電撃に似た衝撃が走る!\n"
dr_str+="君は全てのダンジョンを制覇した実感を得たのだった"
mes dr_str
gosub *show_player_status
swbreak
case "ED_a"
btstr_1="NEXT"
btnext_1="ED_a1"
gosub *one_bt
pos 150,0
dr_str ="ダンジョンLV"+enter_dglv+" 探索\n"
dr_str+="一組のサークレットを手にした君は町へと帰還した"
mes dr_str
gosub *show_player_status
swbreak
case "ED_a1"
player_hp=player_mhp
selected_btnext="ED_a1a"
goto *bt_selected_gomain
case "ED_a1a"
btstr_1="NEXT"
btnext_1="ED_a1a1"
gosub *one_bt
pos 150,0
mes {"帰還した君はナイトの称号を与えられた
試練を乗り越え ナイトとして認められた君は
生涯国家のために忠誠を誓っていくのだろう
THE END"}
gosub *show_player_status
swbreak
case "ED_a1a1"
gosub*ステータス初期化
goto *bt_selected_gomain
// ヘルプの表示
case "HELP"
btstr_1="町の中で"
btnext_1="HELP_a"
btstr_2="ダンジョンの中で"
btnext_2="HELP_b"
btstr_3="戦闘中に"
btnext_3="HELP_c"
btstr_4="戻る"
btnext_4="TOWN"
gosub *four_bt
pos 150,0
mes {"HELP\nどの項目に関するヘルプを読みますか?"}
swbreak
case "HELP_a"
btstr_1="NEXT"
btnext_1="HELP"
gosub *one_bt
pos 150,0
mes {"町の中でのコマンド
shop ポーションを購入します
guild 様々な人から冒険に役立つアドバイスを聞けます
save データを保存します
load データを読み込みます
dungeon モンスターの潜むダンジョンへと
財宝と名声を求めて挑みます
HELP このゲームのヘルプです"}
swbreak
case "HELP_b"
btstr_1="NEXT"
btnext_1="HELP"
gosub *one_bt
pos 150,0
mes {"ダンジョン内でのコマンド
探索:ダンジョンを探索します\nダンジョンを探索しているとモンスターが現れるので
力の限りを尽くしてモンスターと戦いましょう\n
ポーション使用:ポーションを使用してHPを回復します\n
探索終了:ダンジョンの探索をあきらめて町へと帰還します"}
swbreak
case "HELP_c"
btstr_1="NEXT"
btnext_1="HELP"
gosub *one_bt
pos 150,0
mes {"戦闘中のコマンド\n
battle 力を尽くしてモンスターと戦います
escape モンスターとの戦闘をあきらめて戦線を離脱します\n
注\nこのゲームは一匹倒すごとにお金と経験値が
手に入るシステムでは無いので
一匹倒したからといって満足せずに
そのまま探索を継続しましょう
モンスターを何匹か倒してダンジョンの探索に無事成功すると
見事お金と経験値が手に入ります"}
swbreak
swend
stop
// プレイヤーのステータスを保存するサブルーチン
*player_dat_save
dim to_save,20
to_save.0= player_lv
to_save.1= player_mhp
to_save.2= player_hp
to_save.3= player_atack
to_save.4= player_exp
to_save.5= player_next_exp
to_save.6= player_gold
to_save.7= own_poshon_lv1
to_save.8= own_poshon_lv2
to_save.9= own_poshon_lv3
to_save.10= own_poshon_lv4
to_save.11= own_poshon_lv5
bsave "testdt.dat",to_save,160
return
// プレイヤーのステータスを読み込むサブルーチン
*player_dat_load
dim to_load,20
bload "testdt.dat",to_load,160
player_lv =to_load.0
player_mhp =to_load.1
player_hp =to_load.2
player_atack =to_load.3
player_exp =to_load.4
player_next_exp =to_load.5
player_gold =to_load.6
own_poshon_lv1 =to_load.7
own_poshon_lv2 =to_load.8
own_poshon_lv3 =to_load.9
own_poshon_lv4 =to_load.10
own_poshon_lv5 =to_load.11
return
// ボタンを一つ表示してbtstrの中身をボタンに代入する
*one_bt
cls 0
pos 0,0
objsize 120,24
button btstr_1,*selected1
return
// ボタンを二つ表示してbtstrの中身をボタンに代入する
*two_bt
cls 0
pos 0,0
objsize 120,24
button btstr_1,*selected1
button btstr_2,*selected2
return
// ボタンを三つ表示してbtstrの中身をボタンに代入する
*three_bt
cls 0
pos 0,0
objsize 120,24
button btstr_1,*selected1
button btstr_2,*selected2
button btstr_3,*selected3
return
// ボタンを四つ表示してbtstrの中身をボタンに代入する
*four_bt
cls 0
pos 0,0
objsize 120,24
button btstr_1,*selected1
button btstr_2,*selected2
button btstr_3,*selected3
button btstr_4,*selected4
return
// ボタンを五つ表示してbtstrの中身をボタンに代入する
*five_bt
cls 0
pos 0,0
objsize 120,24
button btstr_1,*selected1
button btstr_2,*selected2
button btstr_3,*selected3
button btstr_4,*selected4
button btstr_5,*selected5
return
// ボタンを六つ表示してbtstrの中身をボタンに代入する
*six_bt
cls 0
pos 0,0
objsize 120,24
button btstr_1,*selected1
button btstr_2,*selected2
button btstr_3,*selected3
button btstr_4,*selected4
button btstr_5,*selected5
button btstr_6,*selected6
return
// ID0のボタンが押された時にselected_btnextにbtnext_1の中身を代入して
// メインルーチンにジャンプ
*selected1
selected_btnext=btnext_1
goto *bt_selected_gomain
// ID1のボタンが押された時にselected_btnextにbtnext_2の中身を代入して
// メインルーチンにジャンプ
*selected2
selected_btnext=btnext_2
goto *bt_selected_gomain
// ID2のボタンが押された時にselected_btnextにbtnext_3の中身を代入して
// メインルーチンにジャンプ
*selected3
selected_btnext=btnext_3
goto *bt_selected_gomain
// ID3のボタンが押された時にselected_btnextにbtnext_4の中身を代入して
// メインルーチンにジャンプ
*selected4
selected_btnext=btnext_4
goto *bt_selected_gomain
// ID4のボタンが押された時にselected_btnextにbtnext_5の中身を代入して
// メインルーチンにジャンプ
*selected5
selected_btnext=btnext_5
goto *bt_selected_gomain
// ID5のボタンが押された時にselected_btnextにbtnext_6の中身を代入して
// メインルーチンにジャンプ
*selected6
selected_btnext=btnext_6
goto *bt_selected_gomain |
こちらにサンプルあります
RPG_TEST101