ADVゲームの、シナリオ、立ち絵制御、フラグ管理、エフェクト演出などを設定するファイルを、「スクリプトデータ」と呼びます。

この記事では、弊社のスクリプトデータをどうやって作成しているかを紹介します。

 

①スクリプトをExcelに打ち込む

弊社の場合、スクリプトは全てエクセルで管理しています。

まず、スクリプトの仕様書を作成し、それをスクリプターの方々全員に共有してもらいます。

 

 

 

 

 

 

 

 

スクリプターの方々は、これを確認しつつ、ライターさんから届いたシナリオに合わせていくのです。

 

 

 

 

 

 

 

 

こんな感じで、ガシガシとスクリプトを打ち込んでもらってます。

 

②エクセルに入力したスクリプトデータをVBAでphpで読み取りやすいようにtxtに変換する

このスクリプトデータは、ソーシャルアプリとしてWEBブラウザゲームに利用します。そのため、PHPで読み取れるようにテキストデータに変換しなくてはなりません。その変換には、エクセルのマクロを利用して、VBAで実現しています。

そのソースは下記の通りです。

[cc lang="vb"]

Sub OutputScripts()

‘出力フォルダ名
Dim OUTPUT_DIRECTRY As String
OUTPUT_DIRECTRY = “Output”

‘出力ファイル名
Dim FILE_NAME As String
FILE_NAME = “script.php”

‘出力用変数
‘「& Chr(13) & Chr(10)」はエクセル用の改行コード
Dim output1 As String
Dim output2 As String
Dim output3 As String
Dim output4 As String
Dim outputx1 As String
Dim outputx2 As String
output1 = “$back_main_arr = array(”
output3 = “$script_main_arr = array(” & Chr(13) & Chr(10)
output5 = “$next_scenario_arr = array(”
output6 = “$set_swf_arr = array(”
outputx1 = “<?”
outputx2 = “?>”

‘数値記録用
Dim number1 As Integer
Dim number2 As Integer

‘ループ用
Dim i As Integer
Dim j As Integer
i = 0
j = 0

‘文字の場所を探して保存
For myCnt = 1 To 10
If StrComp(Cells(myCnt, 2).Value, “num_main_start”, vbTextCompare) = 0 Then
number1 = myCnt
End If
Next myCnt

For myCnt = 1 To 1000
If StrComp(Cells(myCnt, 2).Value, “num_main_end”, vbTextCompare) = 0 Then
number2 = myCnt
myCnt = 1000
End If
Next myCnt

‘背景スクリプトの取得
For i = (number1 + 1) To number2
If StrComp(Cells(i, 3).Value, “back_main_end”, vbTextCompare) = 0 Then
output1 = output1 & “);”
i = number2
Else
If i = (number1 + 1) Then
output1 = output1 & “””” & Cells(i, 3).Value & “”””
Else
output1 = output1 & “,” & “””” & Cells(i, 3).Value & “”””
End If
End If
Next i

‘遷移スクリプトの取得
For i = (number1 + 1) To number2
If StrComp(Cells(i, 5).Value, “next_scenario_end”, vbTextCompare) = 0 Then
output5 = output5 & “);”
i = number2
Else
If i = (number1 + 1) Then
output5 = output5 & “””” & Cells(i, 5).Value & “”””
Else
output5 = output5 & “,” & “””” & Cells(i, 5).Value & “”””
End If
End If
Next i

‘ファイルスクリプトの取得
For i = (number1 + 1) To number2
If StrComp(Cells(i, 4).Value, “set_combi_end”, vbTextCompare) = 0 Then
output6 = output6 & “);”
i = number2
Else
If i = (number1 + 1) Then
output6 = output6 & “””” & Cells(i, 4).Value & “”””
Else
output6 = output6 & “,” & “””” & Cells(i, 4).Value & “”””
End If
End If
Next i

‘シナリオスクリプトの取得
For i = (number1 + 1) To number2
For j = 6 To 200
If StrComp(Cells(i, j).Value, “scn_end”, vbTextCompare) = 0 Then
output3 = output3 & “,” & Cells(i, j).Value & “”””
j = 200
ElseIf StrComp(Cells(i, j).Value, “script_main_end”, vbTextCompare) = 0 Then
output3 = output3 & Chr(13) & Chr(10) & “);”
j = 200
i = number2
Else
If j = 6 Then
If i = (number1 + 1) Then
output3 = output3 & “””” & Cells(i, j).Value
Else
output3 = output3 & “,” & Chr(13) & Chr(10) & “””” & Cells(i, j).Value
End If
Else
output3 = output3 & “,” & Cells(i, j).Value
End If
End If
Next j
Next i

‘出力準備
Dim pass As String
pass = Left(ActiveWorkbook.FullName, Len(ActiveWorkbook.FullName) – Len(ActiveWorkbook.Name))
pass = pass + OUTPUT_DIRECTRY + “\”
pass = pass + FILE_NAME
Open pass For Output As #1

‘出力
Print #1, outputx1
Print #1, output3 & Chr(13) & Chr(10)
Print #1, output1
Print #1, output5
Print #1, output6
Print #1, outputx2

‘一旦ファイルクローズ
Close #1

End Sub

[/cc]

VBAの編集のやり方は、詳しくはググってください。

[cc lang="vb"]

output1 = “$back_main_arr = array(”
output3 = “$script_main_arr = array(” & Chr(13) & Chr(10)
output5 = “$next_scenario_arr = array(”
output6 = “$set_swf_arr = array(”

[/cc]

あたりでキーとなる文字列を定義して、配列化した上でテキストデータに保存するようにしています。

 

③デバッグしながら①、②の繰り返し

ここまで上手くできていると、下記の画像のように、スクリプトを配列化したテキストデータが生成されます。

 

 

 

 

 

 

 

 

 

 

 

 

 

PCブラウザから確認できるようにテストサーバーを立てているので、このテキストデータをアップロードしてもらって、テストプレイしてもらいます。そこで動作をチェックしながら、デバッグしてもらい、必要に応じて①と②の作業を繰り返してもらいます。

 

これが、弊社のスクリプトデータの作り方です。

エクセルはPCにそこまで詳しくない人でも、指導さえすれば扱えるようになるので、戦力としてのスクリプターさんの追加が容易になります。また、見やすさというのもやはり重要な要素ですね。

以上、スクリプトデータをエクセルで管理する方法でした!

Tagged with:
 
Set your Twitter account name in your settings to use the TwitterBar Section.