目次
目次
- Part1
- 基本事項(全体的な外観とか)
- Part2
- 数字(叩く順番)の表示に関するもの
- Part3
- analyserから直接、動画(AVI)出力する
- Part4-1
- HOLDマーカーの挙動
- Part4-2
- HOLDマーカー終点の挙動
大前提として、HOLD譜面はautoplayでしか受け付けない。
「リリースマーカー」とは、迫ってくる三角形オブジェのこと
「ホールド」は現在押しているマーカーのこと
ちょこまか修正
【analyserオプション】 →「タッチエフェクトのみを表示」。
effect4.jpg をそれらしいファイルに差し替え
(擬似的にスルーのように見せかける)
◆「それらしい」とは、見逃しミスの画像にすること…だと思います。
◆HOLDノートはパフェの画像にだが、通常ノートは見逃しミスの画像にする(※内部処理は両方パフェ)。
【playmovie.hsp内】
コンボ非表示をデフォルトにする
showvisualcombo = 0
[autoplay] の文字を消去
1277行目くらい
if (autoplaying): tmp = (ph-1)/2*pw+(pw-1)/2:pos x(tmp),y(tmp):color 255,255,255:mescopy “[autoplay]”, 20
1行コメントアウト
[オートプレイでもシャッターを開かせない]
shutter : 現在のシャッター値
default //jubeat
if (event_h(i)>=3): shutter += shuttermax*2/limit(notesum,1,1024) : else: shutter += shuttermax/limit(notesum,1,1024)
↑シャッター計算の本体部分(たぶん
シャッター計算エリアの最下部付近にある
shutter = limit(shutter,0,shuttermax)
↓
shutter = shuttershoki
一生懸命シャッター値を計算しても、毎ターン初期設定に戻させる(健気な努力)
[HOLD中に枠線を表示]
太さ2の枠線を引く
(実際は4周描画するが、はみ出した分は描画されないので実質2pxぶんの幅)
if (nowholding){//こっちの場合もホールド中は弱めにポリゴンフラッシュするか
color rnd(128)+128,rnd(128)+128,rnd(128)+128
gfade 80,x(ra(i)),y(ra(i)),panelsizew,panelsizeh
この2行をコメントアウトし、以下を追記
(残したままでも良いかも ◆現行ソースではコメントアウトせず残ったままでした)
// x(ra(i)) ←各パネル座標の左上x値,yも同様
// HOLD中に適当な枠線を表示させる
w_u = x(ra(i))+1 : w_d=x(ra(i))+panelsizew -1 // 枠線の四隅座標を求める
w_l = y(ra(i))+1 : w_r=y(ra(i))+panelsizeh -1
hsvcolor 128+rnd(128),128+rnd(127),128+rnd(127)
// line x(ra(i)),y(ra(i)),panelsizew,panelsizeh
if (dtmp>0){ // ホールドとリリースが重なったら枠も消去
repeat 4,-2
pos w_u+cnt,w_l+cnt
line w_u+cnt,w_r+cnt
line w_d+cnt,w_r+cnt
line w_d+cnt,w_l+cnt
line w_u+cnt,w_l+cnt
loop
}
dtmpは少し上の「そして迫ってくる方」で使われる変数(初期値が1で、進むごとに減少する)
0未満なら、迫ってくる方が目的地まで到達している
[リリースマーカー&紐の透明度]
//ホールドマーカーの位置に
if (nowholding==0): alCopyModeAlpha 1
//そして迫ってくる方
if (nowholding==0): alCopyModeAlpha 0.16
//そしてその間のホールド線
if (nowholding==0): alCopyModeAlpha 0.6
//
//ホールドを押す前に出てくるやつ
//色が薄いので 0.58,0.8 くらいでいい
ホールド中の棒やリリースマーカー少し薄めにする場合
↓追記(elseで書いてもOK)
if (nowholding): alCopyModeAlpha 0.8
[通過後はホールドアイコンを消す]
if (dtmp<=0){ dtmp = 0 : alCopyModeAlpha 0} //▽が重なった後に通り過ぎるのを防止&消す
「そして迫ってくる方」の一番下の直前(alCopy~の直前行に記述)
↑「ホールドマーカーの位置に」も同様の手法で消去する
…が、dtmp変数の登場前なので
「ホールドマーカーの位置に」の4行を、下側に移動させる
[HOLDかつ同時押し、を別のマーカーで]
if (mtyp==0 && b(i,j)>0): if (holdmarker==1): mtyp = 1 //ホールドマーカーを表示分けするオプション
0通常マーカー 1同時色分け で使ってるのでホールド用の画像は2で
(↑ここまで前提知識)
「ホールドマーカーを表示するオプション」の行を消して
次を記述
if (mtyp==0 && b(i,j)>0): if (holdmarker==1){
if(a1weight(onebuttonindex(i,j))>1){mtyp=3 // 同時ならマーカー3
}else{mtyp = 2} // 単押しならマーカー2
}//ホールドマーカーを表示分けするオプション
a1weight(onebuttonindex(i,j))>1
↑これが「同時か否か」を判定するポイントっぽい
[HOLD残り時間を示す枠@やっぱなしで]
◆メモは残っていますが、たぶん実装していないと思います。
if (b(i,j-1) < 8){ //リリースマーカーの出現位置情報がない場合(holdbytilde使った場合はこうなる)
このif内を if(1)に変更。
少し下のelseは if(b(i,j-1) >= 8) に置き換える //まあこれもif1でいいけど
デフォルトではこの枠が広いので、狭くする(最大でpanelsizewくらい)
//残り時間を示す円
直下のlimitを書き換えて
if (nowholding): tmpr = limit( shisha((0.0+a(i,j)-drawt)/4000*panelsizew), 0, panelsizew/2-2): else: tmpr = panelsizew/2-2
(tmprは残り時間の枠の半径を示す)
bw,bhは15pxくらい(おそらくパネル間の隙間サイズ)
ただ、現状ではHOLD後に3x3程度の小さな残りかすが出てくるので気になる
[非autoplayでも強引にホールドさせる
//押下/リリース されていない場合
の場所で
if (hantei(i,j-1)!=0 && shisha(drawt) > a(i,j-1)+hanteitime(i,j-1)): nowholding = 1: else: nowholding = 1
↑とにかくnowholdingを1にしとくと
(あとは全てが自動で進む)
変数メモ
showvisualhantei
タッチ結果を表示するかを格納(0~ 数値型)
0:ミリ秒表示 <判定表示方法>\n
1:判定を表示しない\n
2:タッチエフェクトのみを表示\n
3:エフェクトとslow/fastを表示(中央)\n
4:エフェクトとslow/fastを表示(パネル枠)
※if (show~!=1) {判定を表示}
という記述がなされる
holdmarker ホールドの強調表示
0:オフ <ホールド表示分け>\n
1:ホールドを別マーカーで表示\n
2:ホールドマーカーを赤色で強調\n
3:ホールドマーカーを緑色で強調\n
4:ホールドマーカーを青色で強調
hantei(i,j)
i 1~16のパネル
j maxind:そのパネル内での何個目のノーツか?
hanteitime(i,j)
判定の基準となる時刻?
↑たぶん実際に押した時刻
drawt 現在時刻(見た目ずれ補正済)
//今押されてるホールドが最後まで押されて終了してたらhanteitime()に0を、hantei()にパフェ(4)を代入しとく
dim holding,pw*ph //現在押されている(そのパネルでの)マーカー番号(動的に変化する)
そのパネル内で、総合何番目のノーツがHOLD中であるか
a(i,j), b(i,j)は時刻関連の何か
mtyp : マーカーの種類(一時変数)。
mtype(i,j)に格納されているデータを読み出す
dim holding,pw*ph //現在押されている(そのパネルでの)マーカー番号(動的に変化する)
パネルごと、最初から何番目のノーツがHOLDされているかを格納
==========最終的なソース===========
//そして迫ってくる方
if (nowholding==0): alCopyModeAlpha 0.5
if (nowholding): alCopyModeAlpha 0.8
tmpx = b(i,j-1)/8 * (panelsizew+bw) * (-dx(direction))
tmpy = b(i,j-1)/8 * (panelsizeh+bh) * (-dy(direction)) //tmpx, tmpy:総移動ベクトル
if (nowholding): dtmp = (0.0+a(i,j)-drawt)/(a(i,j) - a(i,j-1)): else: dtmp = 1.0
if (dtmp<=0){ dtmp = 0 : alCopyModeAlpha 0} //▽が重なった後に通り過ぎるのを防止&消す
alCopyImageToScreen 40, 0, x(ra(i))+shisha(dtmp*tmpx), y(ra(i))+shisha(dtmp*tmpy), panelsizew, panelsizeh, panelsizew*direction, 0
//alCopyImageToScreen_RotateAt 40, 0, x(ra(i))+shisha(dtmp*tmpx), y(ra(i))+shisha(dtmp*tmpy), panelsizew, panelsizeh, 0, 0, 45*direction, 0.5*panelsizew+x(ra(i))+shisha(dtmp*tmpx), 0.5*panelsizeh+y(ra(i))+shisha(dtmp*tmpy)
//ホールドマーカーの位置に
if (nowholding==0): alCopyModeAlpha 0.5
alCopyImageToScreen 40, 0, x(ra(i)), y(ra(i)), panelsizew, panelsizeh, panelsizew*direction, 0
if (dtmp<=0){ dtmp = 0 : alCopyModeAlpha 0} //▽が重なった後に通り過ぎるのを防止&消す
//alCopyImageToScreen_RotateAt 40, 0, x(ra(i)), y(ra(i)), panelsizew, panelsizeh, 0, 0, 45*direction, 0.5*panelsizew+x(ra(i)), 0.5*panelsizeh+y(ra(i))