すぅぃった その11 スクリプト
#define this(%1) stop:%1:cls 0:objsize 120,24
#define sub(%1) stop:%1
of_bstr=""
#define bstr(%1) of_bstr=%1
#define bt(%1) button "",%1:objprm stat,of_bstr
of_mes=""
#define stext(%1) of_mes=%1:pos 150,0
#define ptext(%1) of_mes+=%1
#define mtext mes of_mes
#define GT(%1) goto %1
#define d_sta gosub *show_player_status
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
dg_atteinment=0
sl_pos_lv=0
enter_dglv=0
goto *OP
// このプログラムが起動されて最初の文章の叙述
this *OP
bstr "new game"
bt *OP_a
bstr "continue"
bt *OP_b
stext "テキストRPGサンプル"
mtext
// オープニングテキスト
this *OP_a
bstr "NEXT"
bt *TOWN
stext "ナイトとは国家のいしずえである\n"
ptext "町外れにあるダンジョンの最下層に辿りついたものだけが\n"
ptext "ナイトの称号を得る事ができるのである\n"
ptext "さあ 若者よ立ち上がれ!\n"
ptext "剣を取って険しきその試練へと立ち向かうのだ!\n"
mtext
// 最初にCONTINUEを選んだ場合(のつもり)
this *OP_b
bstr "NEXT"
bt *OP_b1
stext "continueしました"
mtext
// データのロード(のつもり)
sub *OP_b1
gosub *player_dat_load
goto *TOWN
// 町でのコマンド入力受付 ここが全てのコマンドの起点となる
this *TOWN
bstr "shop"
bt *SHOP
bstr "guild"
bt *TALK
bstr "save"
bt *SAVE
bstr "load"
bt *LOAD
bstr "dungeon"
bt *DG
bstr "HELP"
bt *HELP
stext "town\n"
ptext "何をしますか?"
mtext
d_sta
// お店の処理
this *SHOP
bstr "ポーションLV1"
bt *SHOP_1
bstr "ポーションLV2"
bt *SHOP_2
bstr "ポーションLV3"
bt *SHOP_3
bstr "ポーションLV4"
bt *SHOP_4
bstr "ポーションLV5"
bt *SHOP_5
bstr "戻る"
bt *TOWN
stext "shop\n"
ptext "どのポーションを買いますか?\n\n"
ptext "ポーションLV1 5GP 回復量 30\n"
ptext "ポーションLV2 10GP 回復量 60\n"
ptext "ポーションLV3 20GP 回復量 120\n"
ptext "ポーションLV4 40GP 回復量 240\n"
ptext "ポーションLV5 80GP 回復量 480"
mtext
d_sta
// ポーションの購入
sub *SHOP_1
sl_pos_lv=1
if player_gold >=5{
player_gold-=5:own_poshon_lv1++
goto *SHOP_xa
}
goto *SHOP_xb
sub *SHOP_2
sl_pos_lv=2
if player_gold >=10{
player_gold-=10:own_poshon_lv2++
goto *SHOP_xa
}
goto *SHOP_xb
sub *SHOP_3
sl_pos_lv=3
if player_gold >=20{
player_gold-=20:own_poshon_lv3++
goto *SHOP_xa
}
goto *SHOP_xb
sub *SHOP_4
sl_pos_lv=4
if player_gold >=40{
player_gold-=40:own_poshon_lv4++
goto *SHOP_xa
}
goto *SHOP_xb
sub *SHOP_5
sl_pos_lv=5
if player_gold >=80{
player_gold-=80:own_poshon_lv5++
goto *SHOP_xa
}
goto *SHOP_xb
//*SHOP_xa
//*SHOP_xb
stop
// ポーション購入の記述
this *SHOP_xa
bstr "NEXT"
bt *SHOP
stext "shop\n"
ptext "ポーションLV"+sl_pos_lv+" を購入した\n\n"
ptext "ポーションLV1 5GP 回復量 30\n"
ptext "ポーションLV2 10GP 回復量 60\n"
ptext "ポーションLV3 20GP 回復量 120\n"
ptext "ポーションLV4 40GP 回復量 240\n"
ptext "ポーションLV5 80GP 回復量 480\n"
mtext
d_sta
// お金が足りなくてポーションが買えなかった場合
this *SHOP_xb
bstr "NEXT"
bt *SHOP
stext "shop\n"
ptext "お金が足りません\n\n
ptext "ポーションLV1 5GP 回復量 30\n"
ptext "ポーションLV2 10GP 回復量 60\n"
ptext "ポーションLV3 20GP 回復量 120\n"
ptext "ポーションLV4 40GP 回復量 240\n"
ptext "ポーションLV5 80GP 回復量 480\n"
mtext
d_sta
// guild内のコマンド誰に話しかけるかを選んでいます
this *TALK
bstr "ジョン"
bt *TALK_a
bstr "スティーブ"
bt *TALK_b
bstr "ヨハン"
bt *TALK_c
bstr "戻る"
bt *TOWN
stext "guild\n"
ptext "誰に話しかけますか?\n"
mtext
d_sta
this *TALK_a
bstr "NEXT"
bt *TALK
stext "ジョン\n"
ptext "ポーションは余裕を持って\n"
ptext "たくさん買っておいた方がいいよ\n"
mtext
d_sta
this *TALK_b
bstr "NEXT"
bt *TALK
stext "スティーブ\n"
ptext "ダンジョンでモンスターを一匹倒したからって\n"
ptext "いい気にならない方がいいよ\n"
ptext "モンスターを何匹も倒さないと\n"
ptext "お金も経験値も手に入れられないのだから\n"
mtext
d_sta
this *TALK_c
bstr "NEXT"
bt *TALK
stext "ヨハン\n"
ptext "ダンジョンに挑戦するのかい?\n"
ptext "止めた方がいい その方が身のためだよ\n"
mtext
d_sta
// SAVEコマンド
this *SAVE
bstr "YES"
bt *SAVE_1
bstr "NO"
bt *TOWN
stext "save\n"
ptext "SAVEしますか?"
mtext
d_sta
// 実際にデータをセーブしています
sub *SAVE_1
gosub *player_dat_save
goto *SAVE_1a
this *SAVE_1a
bstr "NEXT"
bt *TOWN
stext "save\n"
ptext "SAVEしました"
mtext
d_sta
// LOADコマンド
this *LOAD
bstr "YES"
bt *LOAD_1
bstr "NO"
bt *TOWN
stext "load\n"
ptext "LOADしますか?"
mtext
d_sta
// 実際にLOADしています
sub *LOAD_1
gosub *player_dat_load
goto *LOAD_1a
this *LOAD_1a
bstr "NEXT"
bt *TOWN
stext "load\n"
ptext "LOADしました"
mtext
d_sta
// ダンジョンコマンドここでは何LVのダンジョンに入るか選んでいますね
this *DG
bstr "LV1"
bt *DG_1
bstr "LV2"
bt *DG_2
bstr "LV3"
bt *DG_3
bstr "LV4"
bt *DG_4
bstr "LV5"
bt *DG_5
bstr "戻る"
bt *TOWN
stext "dungeon\n"
ptext "ダンジョンLV何に入りますか?\n"
mtext
d_sta
// 何LVのダンジョンに入ったか代入しています
// このLVのダンジョンで出現する敵のステータスの代入も行っています
sub *DG_1
enter_dglv=1
dg_atteinment=0
monster_st_set 1
goto *DG_xa
sub *DG_2
enter_dglv=2
dg_atteinment=0
monster_st_set 2
goto *DG_xa
sub *DG_3
enter_dglv=3
dg_atteinment=0
monster_st_set 3
goto *DG_xa
sub *DG_4
enter_dglv=4
dg_atteinment=0
monster_st_set 4
goto *DG_xa
sub *DG_5
enter_dglv=5
dg_atteinment=0
monster_st_set 5
goto *DG_xa
// ダンジョン内でのコマンド
this *DG_xa
bstr "探索"
bt *DG_xa1
bstr "ポーション使用"
bt *DG_xab
bstr "探索終了"
bt *DG_xac
stext "ダンジョンLV"+enter_dglv
ptext "\n何をしますか?"
mtext
d_sta
// 探索を選んだ場合敵のHPの設定も行っています
sub *DG_xa1
ene_hpp=ene_mhp
goto *BTL
// 実際に敵が現れたようです
this *BTL
bstr "NEXT"
bt *BTL_a
stext "ダンジョンLV"+enter_dglv+" 探索\n"
ptext ""+ene_name+"が現れた!\n"
mtext
d_sta
//戦闘中のコマンドの入力
this *BTL_a
bstr "BATTLE"
bt *BTL_a1
bstr "ESCAPE"
bt *BTL_ab
stext "対"+ene_name+" 戦闘\n"
ptext "どうしますか?"
mtext
d_sta
// BATTLEを選んだ場合、勝利、敗北、戦闘継続の条件分岐も行っています
sub *BTL_a1
ene_hpp-=player_atack
if ene_hpp > 0{
player_hp-=ene_atp
if player_hp > 0{
goto *BTL_a1a
}else{
goto *BTL_a1b
}
}
goto *BTL_a1c
// 戦闘継続
this *BTL_a1a
bstr "NEXT"
bt *BTL_a
stext "対"+ene_name+" 戦闘\n"
ptext "冒険者の攻撃! "+player_atack+"のダメージ!\n"
ptext ""+ene_name+"の反撃! "+ene_atp+"のダメージ!\n"
mtext
d_sta
// 戦闘に敗北した場合
this *BTL_a1b
bstr "NEXT"
bt *BTL_a1ba
stext "対"+ene_name+" 戦闘\n"
ptext "冒険者の攻撃! "+player_atack+"のダメージ!\n"
ptext ""+ene_name+"の反撃! "+ene_atp+"のダメージ!\n"
ptext "冒険者は戦いに敗れてしまった\n"
mtext
d_sta
this *BTL_a1ba
bstr "NEXT"
bt *BTL_a1ba1
stext "対"+ene_name+" 戦闘\n"
ptext "冒険者は志半ばでその意思を絶たれてしまった\n"
ptext "嗚呼!意識が遠のいていく\n"
ptext "気がついた時、君は病院のベッドの上だった\n"
mtext
d_sta
sub *BTL_a1ba1
player_hp=player_mhp
goto *TOWN
// 戦闘に勝利した場合
this *BTL_a1c
bstr "NEXT"
bt *BTL_a1c1
stext "対"+ene_name+" 戦闘\n"
ptext "冒険者の攻撃! "+player_atack+"のダメージ!\n"
ptext ""+ene_name+"は倒れた\n"
ptext "冒険者の勝利!\n"
mtext
d_sta
// 探索が終了したか?エンディングへの分岐も行っています
sub *BTL_a1c1
dg_atteinment++
if dg_atteinment < 5{
goto *DG_xa
}
if enter_dglv=5{
goto *ED
}
goto *BTL_a1c1b
// ダンジョンの探索を終了した場合
this *BTL_a1c1b
bstr "NEXT"
bt *BTL_a1c1b1
stext "ダンジョンLV"+enter_dglv+" 探索\n"
ptext "戦いの後君は財宝をみつけた!\n"
ptext "ダンジョンLV"+enter_dglv+"の探索は成功に終わったのだ!\n"
ptext ""+ene_exp+"Pの経験値と"+ene_gpp+"Pのお金を獲得した!"
mtext
d_sta
// お金と経験値の取得、LVアップの条件分岐も行っています
sub *BTL_a1c1b1
player_exp+=ene_exp
player_gold+=ene_gpp
if (player_next_exp <=player_exp)&(player_lv < 5){
goto *BTL_a1c1b1a
}
goto *BTL_a1c1b1b
// LVが上がった場合
this *BTL_a1c1b1a
bstr "NEXT"
bt *BTL_a1c1b1a1
stext "ダンジョンLV"+enter_dglv+" 探索\n"
ptext "冒険者はLVが上がった!"
mtext
d_sta
sub *BTL_a1c1b1a1@
player_st_set player_lv
goto *BTL_a1c1b1a1a
this *BTL_a1c1b1a1a
bstr "NEXT"
bt *BTL_a1c1b1b
stext "ダンジョンLV"+enter_dglv+" 探索\n"
ptext "最大HPが"+player_mhp+"になった!\n"
ptext "攻撃力が"+player_atack+"になった!"
mtext
d_sta
// 探索終了
this *BTL_a1c1b1b
bstr "NEXT"
bt *BTL_a1c1b1b1
stext "ダンジョンLV"+enter_dglv+" 探索\n"
ptext "戦いを終え財宝をみつけた君は町へと帰還した"
mtext
d_sta
sub *BTL_a1c1b1b1
player_hp=player_mhp
goto *TOWN
// ESCAPEを選んだ場合
this *BTL_ab
bstr "NEXT"
bt *DG_xa
stext "対"+ene_name+" 戦闘\n"
ptext "君は戦闘の場から逃走した"
mtext
d_sta
// ポーションの使用
this *DG_xab
bstr "ポーションLV1"
bt *DG_xab1
bstr "ポーションLV2"
bt *DG_xab2
bstr "ポーションLV3"
bt *DG_xab3
bstr "ポーションLV4"
bt *DG_xab4
bstr "ポーションLV5"
bt *DG_xab5
bstr "戻る"
bt *DG_xa
stext "ダンジョンLV"+enter_dglv+" ポーション使用\n"
ptext "どのポーションを使用しますか?\n"
ptext "ポーションLV1 回復量 30\n"
ptext "ポーションLV2 回復量 60\n"
ptext "ポーションLV3 回復量 120\n"
ptext "ポーションLV4 回復量 240\n"
ptext "ポーションLV5 回復量 480\n"
mtext
d_sta
// ポーションを使用して回復を行っています
sub *DG_xab1
if own_poshon_lv1>=1{
sl_pos_lv=1
player_hp+=30
own_poshon_lv1-=1
if player_mhp < player_hp{
player_hp=player_mhp
}
goto *DG_xabxa
}
goto *DG_xabxb
sub *DG_xab2
if own_poshon_lv2>=1{
sl_pos_lv=2
player_hp+=60
own_poshon_lv2-=1
if player_mhp < player_hp{
player_hp=player_mhp
}
goto *DG_xabxa
}
goto *DG_xabxb
sub *DG_xab3
if own_poshon_lv3>=1{
sl_pos_lv=3
player_hp+=120
own_poshon_lv3-=1
if player_mhp < player_hp{
player_hp=player_mhp
}
goto *DG_xabxa
}
goto *DG_xabxb
sub *DG_xab4
if own_poshon_lv4>=1{
sl_pos_lv=4
player_hp+=240
own_poshon_lv4-=1
if player_mhp < player_hp{
player_hp=player_mhp
}
goto *DG_xabxa
}
goto *DG_xabxb
sub *DG_xab5
if own_poshon_lv5>=1{
sl_pos_lv=5
player_hp+=480
own_poshon_lv5-=1
if player_mhp < player_hp{
player_hp=player_mhp
}
goto *DG_xabxa
}
goto *DG_xabxb
// ポーションを使用したという記述
this *DG_xabxa
bstr "NEXT"
bt *DG_xa
stext "ダンジョンLV"+enter_dglv+" ポーション使用\n"
ptext "ポーションLV"+sl_pos_lv+"を使用しました\n"
ptext "ポーションLV1 回復量 30\n"
ptext "ポーションLV2 回復量 60\n"
ptext "ポーションLV3 回復量 120\n"
ptext "ポーションLV4 回復量 240\n"
ptext "ポーションLV5 回復量 480\n"
mtext
d_sta
// ポーションが足りなかった場合
this *DG_xabxb
bstr "NEXT"
bt *DG_xa
stext "ダンジョンLV"+enter_dglv+" ポーション使用\n"
ptext "ポーションが足りません\n"
ptext "ポーションLV1 回復量 30\n"
ptext "ポーションLV2 回復量 60\n"
ptext "ポーションLV3 回復量 120\n"
ptext "ポーションLV4 回復量 240\n"
ptext "ポーションLV5 回復量 480\n"
mtext
d_sta
// 探索終了を選んだ場合
this *DG_xac
bstr "NEXT"
bt *DG_xac1
stext "ダンジョンLV"+enter_dglv+" 探索終了\n"
ptext "探索を途中で打ち切ってダンジョンを後にした"
mtext
d_sta
sub *DG_xac1
player_hp=player_mhp
goto *TOWN
// エンディング
this *ED
bstr "NEXT"
bt *ED_a
stext "ダンジョンLV"+enter_dglv+" 探索\n"
ptext "ダンジョンLV"+enter_dglv+"の探索は成功に終わった!\n"
ptext "戦いの後君は一組のサークレットを目にした\n"
ptext "君はそのサークレットに触れてみた\n"
ptext "君の体に電撃に似た衝撃が走る!\n"
ptext "君は全てのダンジョンを制覇した実感を得たのだった"
mtext
d_sta
this *ED_a
bstr "NEXT"
bt *ED_a1
stext "ダンジョンLV"+enter_dglv+" 探索\n"
ptext "一組のサークレットを手にした君は町へと帰還した"
mtext
d_sta
sub *ED_a1
player_hp=player_mhp
goto *ED_a1a
this *ED_a1a
bstr "NEXT"
bt *ED_a1a1
stext "帰還した君はナイトの称号を与えられた\n"
ptext "試練を乗り越え ナイトとして認められた君は\n"
ptext "生涯国家のために忠誠を誓っていくのだろう\n"
ptext "THE END"
mtext
d_sta
sub *ED_a1a1
gosub*ステータス初期化
goto *OP
// ヘルプの表示
this *HELP
bstr "町の中で"
bt *HELP_a
bstr "ダンジョンの中で"
bt *HELP_b
bstr "戦闘中"
bt *HELP_c
bstr "戻る"
bt *TOWN
stext "HELP\n"
ptext "どの項目に関するヘルプを読みますか?\n"
mtext
this *HELP_a
bstr "NEXT"
bt *HELP
stext "町の中でのコマンド\n"
ptext "shop ポーションを購入します\n"
ptext "guild 様々な人から冒険に役立つアドバイスを聞けます\n"
ptext "save データを保存します\n"
ptext "load データを読み込みます\n"
ptext "dungeon モンスターの潜むダンジョンへと\n"
ptext "財宝と名声を求めて挑みます\n"
ptext "HELP このゲームのヘルプです\n"
mtext
this *HELP_b
bstr "NEXT"
bt *HELP
stext "ダンジョン内でのコマンド\n"
ptext "探索\n"
ptext "ダンジョンを探索します\n"
ptext "ダンジョンを探索しているとモンスターが現れるので\n"
ptext "力の限りを尽くしてモンスターと戦いましょう\n"
ptext "ポーション使用\n"
ptext "ポーションを使用してHPを回復します\n"
ptext "探索終了\n"
ptext "ダンジョンの探索をあきらめて町へと帰還します\n"
mtext
this *HELP_c
bstr "NEXT"
bt *HELP
stext "戦闘中のコマンド\n"
ptext "battle 力を尽くしてモンスターと戦います\n"
ptext "escape モンスターとの戦闘をあきらめて戦線を離脱します\n
ptext "注\N"
ptext "このゲームは一匹倒すごとにお金と経験値が\n"
ptext "手に入るシステムでは無いので\n"
ptext "一匹倒したからといって満足せずに\n"
ptext "そのまま探索を継続しましょう\n"
ptext "モンスターを何匹か倒してダンジョンの探索に無事成功すると\n"
ptext "見事お金と経験値が手に入ります\n"
mtext
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
// プレイヤーのステータスを表示するサブルーチン
*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
// モンスターの名前と各種ステータスを代入する命令
#deffunc monster_st_set int monster_lv
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 player_up_lv
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
*ステータス初期化
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
return |