見出し画像

ドドスコするゲーム

発端

たまたま休日だったので。

完成品

コード

ddsk.ks(first.ksからジャンプ)

;撮影用
[autostart]

[iscript]
f.ddsk=[]
f.ddsk[0]="ドド"
f.ddsk[1]="スコ"

f.report=""
f.hmt=0
[endscript]

;メッセージウィンドウと背景を出すだけに利用(31行目に[return])
@call storage="scene1.ks"
[layopt layer="0" visible="true"]
[layopt layer="1" visible="true"]

ロード中…
;六花の動きと声を登録
@call storage="rikka.ks"
[cm]

[chara_show name="rikka" layer="1" time="1000"]



;何回繰り返したか記録
[ptext name="count" layer="0" x="450" y="20" text="&f.hmt+'回目'" width="800" align="right" bold="bold" time="50" size="100"]

[macro name="DorS"]
  [iscript]
  //0か1がランダムで出る
    tf.r=Math.round(Math.random())
  //どちらが出たか記録
    f.report=f.report+tf.r
  //何回目かカウント
    f.hmt=f.hmt+1
  [endscript]

;ドドかスコどちらが出たかで六花のアクションを変える
[if exp="tf.r==0"]
  [dd]
[else]
  [sc]
[endif]

;実際に表示
  @emb exp="f.ddsk[tf.r]"
  [ptext name="count" time="5" layer="0" x="450" y="20" text="&f.hmt+'回目'" overwrite="true"]
[wse]
[endmacro]

*repeat
[DorS]

;200以上はさすがに長いので終わる。(撮影用)
;[close ask="false" cond="f.hmt==150"]

[jump storage="ddsk.ks" target="*repeat" cond="f.report.lastIndexOf('011101110111')==-1"]


[cm]
[iscript]
;メッセージをセンタリング
$('.message_inner').css('text-align', 'center');
[endscript]

[love]
[font size="80" bold="bold" color="pink"]
ラブ注入♡[p]
[end]
[iscript]
;メッセージを戻す
$('.message_inner').css('text-align', 'left');
[endscript]

[resetfont]
あなたは[emb exp="f.hmt"]回で達成しました![l][r]
[font size="120" bold="bold" color="pink"]
おわり!!!

[wait time="3000"]

;自動録画終了
[close ask="false"]
[s]

/*
@dialog text="ラブ注入♡"
[web url="https://tenor.com/view/tanoshingo-japanese-japan-gif-10268910"]
*/
[s]
;0111×3が入力されるまで繰り返す。



[s]

rikka.ks


[chara_new name="rikka" storage="end.png"]
[chara_face name="rikka" face="dd" storage="dd.png"]
[chara_face name="rikka" face="sc" storage="sc.png"]
[chara_face name="rikka" face="last" storage="last.png"]
[chara_face name="rikka" face="end" storage="end.png"]


[macro name="dd"]
  [chara_mod name="rikka" face="dd" time="50"]
  [playse storage="00ドド.mp3"]
[endmacro]
@eval exp="tf.i=0"
[macro name="sc"]
;やるたびに左右反転する
  @eval exp="tf.i=tf.i+1"
  @eval exp="(tf.i%2==0)?tf.tf='true':tf.tf='false'"
  [chara_mod name="rikka" face="sc" reflect="&tf.tf" time="50"]
  [playse storage="01スコ.mp3"]
[endmacro]

[macro name="love"]
  [chara_mod name="rikka" face="last" time="50"]
  [playse storage="02ラブ注入.mp3"]
[endmacro] 

[macro name="end"]
 [chara_mod name="rikka" face="end" time="50"]
 [playse storage="0709.mp3"]
[endmacro]


[iscript]
  tf.fgi='./data/fgimage/'
  tf.snd='./data/sound/'
  tf.pre=[]
  tf.pre[0]=tf.fgi+'dd.png'
  tf.pre[1]=tf.fgi+'end.png'
  tf.pre[2]=tf.fgi+'last.png'
  tf.pre[3]=tf.fgi+'sc.png'
  tf.pre[4]=tf.snd+'00ドド.mp3'
  tf.pre[5]=tf.snd+'01スコ.mp3'
  tf.pre[6]=tf.snd+'02ラブ注入.mp3'
  tf.pre[7]=tf.snd+'0709.mp3'
[endscript]

@preload storage="&tf.pre" wait="true"

[return]

コードの他に、

声作ったり
立ち絵作ったり

楽しんご氏のgif動画を埋め込みで出せるようにしたかったですね。


本題

答え

[iscript]
f.ddsk=[]
f.ddsk[0]="ドド"
f.ddsk[1]="スコ"
f.report=""
[endscript]

;メッセージウィンドウと背景を出すだけに利用(31行目に[return])
@call storage="scene1.ks"

[macro name="DorS"]
  [iscript]
  //0か1がランダムで出る
    tf.r=Math.round(Math.random())
  //どちらが出たか記録
    f.report=f.report+tf.r
  [endscript]

;実際に表示
  @emb exp="f.ddsk[tf.r]"
[endmacro]

*repeat
[DorS]
[jump storage="ddsk.ks" target="*repeat" cond="f.report.lastIndexOf('011101110111')==-1"]

[cm]
ラブ注入♡[p]

これのポイントは、
・ドドスコ配列をそれぞれ0と1で呼び出せるようにする。
・0と1がランダムで出るようにする{Math.round(Math.random()}
・f.reportにランダムで出した数字を追加記録(0111の次に0が来たら01110)
・f.reportにlastIndexOfで011101110111と一致するまで[jump]を繰返させる
0='ドド' 1='スコ'


やってみて

condとembのexpは&がいらないんだった。というのを思い出しました。
あと、タグのパラメーターでTrue,Falseを求められるものに
booleamタイプを直接入れると駄目で、
文字列の'true','false'でないと駄目なのが分かりました。

1/4096を2分20秒以内(Twitter投稿可能時間)で出すのが大変でした。
あんまり出ないようなら出るまで回して、出る直前でユニコーンをオタマトーンで演奏した奴をくっつけた動画を出そうかと思ってました。
やらなくて済んでよかったです。

終わり。


この記事が気に入ったらサポートをしてみませんか?