2011年02月03日のツイート

一番高い(or 低い)パラメータを持つキャラクターを選ぶ。

より、実戦的な何かを実例を上げて作ってみます。
NScripterでオーソドックスなヒロインが複数出るタイプの恋愛ゲームを考えてみます。

  • 各ヒロインには隠しパラメータとして、好意値と嫉妬値がある。
  • どちらもイベントや選択肢で上下する。
  • 一番高い好意値のヒロインとの個別エンディングが選ばれる。

このようにルールを設定しました。
それを実装するために、パラメータの管理をdimを使った二次配列変数で行うとします。

; define節で実行してください。

numalias heroine_param,??? ; ヒロインのパラメータを入れる変数の番号。???を使っていない変数番号に置き換えてください。
mov %1,0 ; 一時変数
; 以下、ヒロインの番号を設定する。藤崎詩織を0番とし、伊集院レイを末尾とする。
numalias shiori,%1:inc %1
numalias mio,%1   :inc %1
numalias yuina,%1 :inc %1
numalias ayako,%1 :inc %1
numalias saki,%1  :inc %1
numalias yukari,%1:inc %1
numalias nozomi,%1:inc %1
numalias mira,%1  :inc %1
numalias yuko,%1  :inc %1
numalias megumi,%1:inc %1
numalias yumi,%1  :inc %1
numalias miharu,%1:inc %1
numalias rei,%1   :inc %1
numalias heroine_number,rei ; ヒロインの最大番号を定義

mov %2,0 ; 一時変数
; 以下、パラメータの設定。好意値を0、嫉妬値を1とする。何か追加したければ、行を追加すればいい。
numalias love,%2:inc %2
numalias envy,%2:inc %2

; 配列変数の宣言
dim ?heroine_param[%1][%2]

; 以上で設定おわり。
; たとえば、紐緒結奈の嫉妬値は以下のように表現できる。
; ?heroine_param[yuina][envy]

エンディングを迎えた時に伝説の木の下で待っているヒロインは、以下の条件で決まるとします。

  • 最も好意値の高いヒロイン。
  • もし、好意値の最大値が同じであれば、ヒロイン番号の若い方。

※本来であれば、好意値が50以上とかの制限をつけるべきでしょうが、ここでは考慮しないことにします。必要であれば実装してください。
次に、何かのパラメータが一番高い(or 低い)ヒロインを選ぶスクリプトが必要になってきます。

スクリプト

aパート
numalias search_param,??? ; 調べる対象のパラメータ
numalias search_order,??? ; 昇順か降順か。0で最大値、1で最小値
numalias search_target,??? ; 調べる二次配列の番号
numalias search_span,??? ; 調べる二次配列の一次添字の最大値
numalias search_res,??? ; 回答用
numalias serach_id,??? ; 回答用
numalias search_loop,??? ; ループ用

defsub max_id
defsub min_id
bパート
*max_id
mov %search_order,0
goto *search_main

*min_id
mov %search_order,1
goto *search_main

*search_main
; 引数取得
getparam i%search_id,%search_target,%search_span,%search_param
; 初期設定
mov %%search_id,0
mov %search_res,?%search_target[0][%search_param]
; ループ開始
for %search_loop=2 to %search_span
	if %search_order=0 notif ?%search_target[%search_loop][%search_param]<%search_res next
	if %search_order=1 notif ?%search_target[%search_loop][%search_param]>%search_res next
	mov %search_res,?%search_target[%search_loop][%search_param]
next
return

使い方

  • aパートを、*defineラベルとgame命令の間のどこかに貼ってください。その際、???は適宜使っていない変数番号に置き換えてください。
  • bパートを、game命令と*startラベルの間のどこかに貼ってください。

これで準備完了です。
前述のときメモクローンでの使い方です。

; 最も好意値の高いヒロインを調べる。
max_id %0,heroine_param,heroine_number,love
; %0に最も高い好意値を持つヒロインの番号が入る。

min_idを使えば、逆に何かが最も低いヒロインの番号を取得できます。

応用

たとえば、これがAVGではなく、RPGだったとしたら。そして、某国産最終幻想シリーズであったならば。
戦闘では、ゲージが溜まった物から行動するようになっていて、それを実装するのにこれは使えます。
キャラクターパラメータの中にguageを作りましょう。このguage値が100以上になったら、行動順が来て、guage値は毎ターンspeed値ずつ上がっていくとします。

  1. 最大のguage値を持つキャラクターを調べる。
  2. 1のキャラクターのguage値が100未満ならば、5へ。
  3. 1のキャラクターを行動させる。(その結果、guage値はガクッと下がる)
  4. 1に戻る。
  5. 全てのキャラクターのguage値をspeed値上昇させる。
  6. 1に戻る。

このように使うことができます。

一番高い(or 低い)パラメータを持つキャラクターを選ぶ。

より、実戦的な何かを実例を上げて作ってみます。
NScripterでオーソドックスなヒロインが複数出るタイプの恋愛ゲームを考えてみます。

  • 各ヒロインには隠しパラメータとして、好意値と嫉妬値がある。
  • どちらもイベントや選択肢で上下する。
  • 一番高い好意値のヒロインとの個別エンディングが選ばれる。

このようにルールを設定しました。
それを実装するために、パラメータの管理をdimを使った二次配列変数で行うとします。

; define節で実行してください。

numalias heroine_param,??? ; ヒロインのパラメータを入れる変数の番号。???を使っていない変数番号に置き換えてください。
mov %1,0 ; 一時変数
; 以下、ヒロインの番号を設定する。藤崎詩織を0番とし、伊集院レイを末尾とする。
numalias shiori,%1:inc %1
numalias mio,%1   :inc %1
numalias yuina,%1 :inc %1
numalias ayako,%1 :inc %1
numalias saki,%1  :inc %1
numalias yukari,%1:inc %1
numalias nozomi,%1:inc %1
numalias mira,%1  :inc %1
numalias yuko,%1  :inc %1
numalias megumi,%1:inc %1
numalias yumi,%1  :inc %1
numalias miharu,%1:inc %1
numalias rei,%1   :inc %1
numalias heroine_number,rei ; ヒロインの最大番号を定義

mov %2,0 ; 一時変数
; 以下、パラメータの設定。好意値を0、嫉妬値を1とする。何か追加したければ、行を追加すればいい。
numalias love,%2:inc %2
numalias envy,%2:inc %2

; 配列変数の宣言
dim ?heroine_param[%1][%2]

; 以上で設定おわり。
; たとえば、紐緒結奈の嫉妬値は以下のように表現できる。
; ?heroine_param[yuina][envy]

エンディングを迎えた時に伝説の木の下で待っているヒロインは、以下の条件で決まるとします。

  • 最も好意値の高いヒロイン。
  • もし、好意値の最大値が同じであれば、ヒロイン番号の若い方。

※本来であれば、好意値が50以上とかの制限をつけるべきでしょうが、ここでは考慮しないことにします。必要であれば実装してください。
次に、何かのパラメータが一番高い(or 低い)ヒロインを選ぶスクリプトが必要になってきます。

スクリプト

aパート
numalias search_param,??? ; 調べる対象のパラメータ
numalias search_order,??? ; 昇順か降順か。0で最大値、1で最小値
numalias search_target,??? ; 調べる二次配列の番号
numalias search_span,??? ; 調べる二次配列の一次添字の最大値
numalias search_res,??? ; 回答用
numalias serach_id,??? ; 回答用
numalias search_loop,??? ; ループ用

defsub max_id
defsub min_id
bパート
*max_id
mov %search_order,0
goto *search_main

*min_id
mov %search_order,1
goto *search_main

*search_main
; 引数取得
getparam i%search_id,%search_target,%search_span,%search_param
; 初期設定
mov %%search_id,0
mov %search_res,?%search_target[0][%search_param]
; ループ開始
for %search_loop=2 to %search_span
	if %search_order=0 notif ?%search_target[%search_loop][%search_param]<%search_res next
	if %search_order=1 notif ?%search_target[%search_loop][%search_param]>%search_res next
	mov %search_res,?%search_target[%search_loop][%search_param]
next
return

使い方

  • aパートを、*defineラベルとgame命令の間のどこかに貼ってください。その際、???は適宜使っていない変数番号に置き換えてください。
  • bパートを、game命令と*startラベルの間のどこかに貼ってください。

これで準備完了です。
前述のときメモクローンでの使い方です。

; 最も好意値の高いヒロインを調べる。
max_id %0,heroine_param,heroine_number,love
; %0に最も高い好意値を持つヒロインの番号が入る。

min_idを使えば、逆に何かが最も低いヒロインの番号を取得できます。

応用

たとえば、これがAVGではなく、RPGだったとしたら。そして、某国産最終幻想シリーズであったならば。
戦闘では、ゲージが溜まった物から行動するようになっていて、それを実装するのにこれは使えます。
キャラクターパラメータの中にguageを作りましょう。このguage値が100以上になったら、行動順が来て、guage値は毎ターンspeed値ずつ上がっていくとします。

  1. 最大のguage値を持つキャラクターを調べる。
  2. 1のキャラクターのguage値が100未満ならば、5へ。
  3. 1のキャラクターを行動させる。(その結果、guage値はガクッと下がる)
  4. 1に戻る。
  5. 全てのキャラクターのguage値をspeed値上昇させる。
  6. 1に戻る。

このように使うことができます。

2011年02月03日のツイート

一番高い(or 低い)パラメータを持つキャラクターを選ぶ。

より、実戦的な何かを実例を上げて作ってみます。
NScripterでオーソドックスなヒロインが複数出るタイプの恋愛ゲームを考えてみます。

  • 各ヒロインには隠しパラメータとして、好意値と嫉妬値がある。
  • どちらもイベントや選択肢で上下する。
  • 一番高い好意値のヒロインとの個別エンディングが選ばれる。

このようにルールを設定しました。
それを実装するために、パラメータの管理をdimを使った二次配列変数で行うとします。

; define節で実行してください。

numalias heroine_param,??? ; ヒロインのパラメータを入れる変数の番号。???を使っていない変数番号に置き換えてください。
mov %1,0 ; 一時変数
; 以下、ヒロインの番号を設定する。藤崎詩織を0番とし、伊集院レイを末尾とする。
numalias shiori,%1:inc %1
numalias mio,%1   :inc %1
numalias yuina,%1 :inc %1
numalias ayako,%1 :inc %1
numalias saki,%1  :inc %1
numalias yukari,%1:inc %1
numalias nozomi,%1:inc %1
numalias mira,%1  :inc %1
numalias yuko,%1  :inc %1
numalias megumi,%1:inc %1
numalias yumi,%1  :inc %1
numalias miharu,%1:inc %1
numalias rei,%1   :inc %1
numalias heroine_number,rei ; ヒロインの最大番号を定義

mov %2,0 ; 一時変数
; 以下、パラメータの設定。好意値を0、嫉妬値を1とする。何か追加したければ、行を追加すればいい。
numalias love,%2:inc %2
numalias envy,%2:inc %2

; 配列変数の宣言
dim ?heroine_param[%1][%2]

; 以上で設定おわり。
; たとえば、紐緒結奈の嫉妬値は以下のように表現できる。
; ?heroine_param[yuina][envy]

エンディングを迎えた時に伝説の木の下で待っているヒロインは、以下の条件で決まるとします。

  • 最も好意値の高いヒロイン。
  • もし、好意値の最大値が同じであれば、ヒロイン番号の若い方。

※本来であれば、好意値が50以上とかの制限をつけるべきでしょうが、ここでは考慮しないことにします。必要であれば実装してください。
次に、何かのパラメータが一番高い(or 低い)ヒロインを選ぶスクリプトが必要になってきます。

スクリプト

aパート
numalias search_param,??? ; 調べる対象のパラメータ
numalias search_order,??? ; 昇順か降順か。0で最大値、1で最小値
numalias search_target,??? ; 調べる二次配列の番号
numalias search_span,??? ; 調べる二次配列の一次添字の最大値
numalias search_res,??? ; 回答用
numalias serach_id,??? ; 回答用
numalias search_loop,??? ; ループ用

defsub max_id
defsub min_id
bパート
*max_id
mov %search_order,0
goto *search_main

*min_id
mov %search_order,1
goto *search_main

*search_main
; 引数取得
getparam i%search_id,%search_target,%search_span,%search_param
; 初期設定
mov %%search_id,0
mov %search_res,?%search_target[0][%search_param]
; ループ開始
for %search_loop=2 to %search_span
	if %search_order=0 notif ?%search_target[%search_loop][%search_param]<%search_res next
	if %search_order=1 notif ?%search_target[%search_loop][%search_param]>%search_res next
	mov %search_res,?%search_target[%search_loop][%search_param]
next
return

使い方

  • aパートを、*defineラベルとgame命令の間のどこかに貼ってください。その際、???は適宜使っていない変数番号に置き換えてください。
  • bパートを、game命令と*startラベルの間のどこかに貼ってください。

これで準備完了です。
前述のときメモクローンでの使い方です。

; 最も好意値の高いヒロインを調べる。
max_id %0,heroine_param,heroine_number,love
; %0に最も高い好意値を持つヒロインの番号が入る。

min_idを使えば、逆に何かが最も低いヒロインの番号を取得できます。

応用

たとえば、これがAVGではなく、RPGだったとしたら。そして、某国産最終幻想シリーズであったならば。
戦闘では、ゲージが溜まった物から行動するようになっていて、それを実装するのにこれは使えます。
キャラクターパラメータの中にguageを作りましょう。このguage値が100以上になったら、行動順が来て、guage値は毎ターンspeed値ずつ上がっていくとします。

  1. 最大のguage値を持つキャラクターを調べる。
  2. 1のキャラクターのguage値が100未満ならば、5へ。
  3. 1のキャラクターを行動させる。(その結果、guage値はガクッと下がる)
  4. 1に戻る。
  5. 全てのキャラクターのguage値をspeed値上昇させる。
  6. 1に戻る。

このように使うことができます。

2011年02月03日のツイート