見出し画像

ゲ製同時進行40週目

ついに40周突入!
今週はそれぞれバリバリ進行できました。

AMD'sδ(試用版)

  • キャラデータロード/セーブにtxtで出力する方法を探る。

  • CSSの導入方法を探す

  • CSVデータ作成

  • JSちゃんとオトモダチになる

  • キャラ作成ページ制作

  • シナリオパート

  • 機能増設/減量

  • 判定マクロ

    • 選択肢ボタン

    • ダイスランダム+並べ替え

    • 選択肢内容生成

  • キャラ登場マクロ

  • UI ←いまここ

  • SE/BGM

まとめ

ついに原作のアマデウスの電子書籍の発売日が2/19に決定した模様。

購入するなら
基本1冊基本+3巻全部のいずれの組み合わせがオススメ。
2巻は1冊6万とかいうプレミアついたんだけど2巻単体は何も意味がない。
基本+2巻の組み合わせは本来想定していたもので痒い所に手が届かない構成しかできない。
ソリティアの場合は基本+3巻、基本+2巻+GD(4巻)の組み合わせが必要。
お試しにやりたい場合は基本+EX(外伝/マンガ/データ)が一番安い。

残り三週間。なんとか合わせたいよね。
残り過程は
・ルート分岐判定
・演出
・UI
・音

「まあ一週間集中すればできるでしょ!」が現在一か月と一週間経過してますからね・・・。

以下編集メモ

ルート分岐マクロ制作

まあこのゲームは原作知らなくても楽しめるよ。

分岐方法は原作通りの仕様。
選択肢で変化するんだけど、1つ選択するたびに2か所の配列にデータが入るので、その配列の組み合わせで最終的な分岐が決まる仕様。
それぞれをムード、アクションと呼ぶ。


まずはムードから。

配列から最も大きい数が入っているインデックスを返す関数をつくる。

ただ、indexOfだと、最も大きい数の1番目の1つ、lastIndexOfだと一番最後の1つになる。複数ある場合の返し方を調べる。

indexOfを、配列を左端から消していって最後までwhileで繰り返して調べるという方法でいいっぽい。

[iscript]
f.co=[0,1,0,3,3]
function maxIndex1(a) {
	let index = 0
	let value = -Infinity
	for (let i = 0, l = a.length; i < l; i++) {
		if (value < a[i]) {
			value = a[i]
			index = i
		}
	}
	return index
}

//配列の中の最大値を出す
tf.ans=maxIndex1(f.co);

var indices = [];
var array = f.co;
var element = tf.ans;
var idx = array.indexOf(element);
while (idx != -1) {
  indices.push(idx);
  idx = array.indexOf(element, idx + 1);
}

f.route1=indices ;
[endscript]

[dialog text="&f.route1"]

ここまでコピペは初めてだ…。

とりあえずこれで、最大数が入っているインデックスを複数返すことができるようになった。

次にアクションでも最大値(文字列)で判定していくので、共同で使えるように関数へと改造を始める。

function maxarrayall(a,b) {
var indices = [];
var array = a;
var element = b;
var idx = array.indexOf(element);
while (idx != -1) {
  indices.push(idx+1);
  idx = array.indexOf(element, idx + 1);
}
	return indices
}

f.route1=maxarrayall(f.co , tf.ans);
f.route2=maxarrayall(f.act , 'c');

インデックス0を1から数えたかったので.push(idx +1 )にしてある。

=======================
以下間違い

2番目に大きいインデックスも必要になったので

function maxIndex1(a) {
	let index = 0
	let value = -Infinity
	for (let i = 0, l = a.length; i < l; i++) {
		if (value < a[i]) {

			index2= index

			value = a[i]
			index = i
		}
	}
	return [index , index2]
}

tf.ans=maxIndex1(f.co);

index2を作って、返り値は配列に変更。
呼び出しは
f.route1a=maxarrayall(f.co , tf.ans[0]);
f.route1b=maxarrayall(f.co , tf.ans[1]);

でOK。
さらにまとめる。

//カラーインデックス番号。最大、2番目
f.route1=[maxarrayall(f.co , tf.ans[0]) , maxarrayall(f.co , tf.ans[1])];

//アクションインデックス番号。c,t,f
f.route2=[maxarrayall(f.act , 'c') , f.route2b=maxarrayall(f.act , 't') , f.route2c=maxarrayall(f.act , 'f')];

これでf.route1[0]とかで呼び出せるようになった。

以上間違い
=======================

2番目に問題があったので改造。
(以下、上と同じ個所)

//カラーインデックス番号。最大
f.route1=[maxarrayall(f.co , f.co[tf.ans])];

//↓↓↓↓ここから2番目に大きいインデックス番号を出す処理↓↓↓↓↓↓↓


//f.coそのものが置き換わるので別のに挿入。
tf.ans2=f.co
//最大値のあるインデックス番号を繰り返して置き換え。空白に。
for (let i = 0, l = f.route1[0].length; i < l; i++) {
	tf.ans2.splice(f.route1[0][i]-1,1,'');
}
//最大値を削除した配列でもう一回。2番目に大きい数字のあるインデックスを出す。
tf.ans3=maxIndex1(tf.ans2);
//[1]に「2番目に大きいインデックス番号」を追加。
f.route1[1]=maxarrayall(f.co , f.co[tf.ans3]);


//↑↑↑↑ここまで2番目に大きいインデックス番号を出す処理↑↑↑↑↑↑↑


//アクションインデックス番号。c,t,f
f.route2=[maxarrayall(f.act , 'c') , f.route2b=maxarrayall(f.act , 't') , f.route2c=maxarrayall(f.act , 'f')];

色々試して、spliceメゾッドで、最大値のインデックスを空白に置き換えてもう一回maxindex1→maxarrayallの関数にかけ直すというのに落ち着いた。

「マクロが閉じられていない」エラーが出たのでそれも訂正。
なんなら加えた。

https://note.com/preview/n9c7b8ae6562f?prev_access_key=2cadec1cfbcde4e856cb9480d07e69aa



今日のけっか~~

これで必要な
・ムードの最大数のインデックス(複数対応)
・ムードの準最大数のインデックス(複数対応)
・アクションの最高文字のインデックス(複数対応)
・アクションの準最高文字のインデックス(複数対応)
・アクションの準々最高文字のインデックス(複数対応)
から
・アクション最高文字のインデックスからムード最大数のフィルター経過のルート番号
・…からムード準最大数のフィルター経過のルート番号
・…アクション準、準々最高文字の…からムード最大数の…
・…アクション準、準々最高文字の…からムード準最大数の…
・アクション最高、準、準々文字…をムード最大数フィルターを経過したあとの準最大数フィルターを経過したルート番号
が叩き出せるようになったのだった。

長い、多い、わかりにくい!!!

準備は終わったのでこれから判定マクロを作る。
日本語で手順を書いた後に、コンピューター言語に翻訳する感じ。

1 f.route2[0]の中にCがあるか判定。ない場合は[]になっている。
2 f.route2の中にCがいくつあるか判定。1つの場合その数値のrouteへ。f.endに入れる。
3 複数ある場合それぞれの色の多い方のrouteへ。f.endに入れる。
4 2番目に多い色の番号を出す。1番目2番目の色の組み合わせで大きいのがf.endに入る。
4-2同値の場合、以下の振り分けでf.endに入れる。

5 f.route2の中にCがなく、f.route1に1が含まれている場合、f.end=7を入れる。

6 f.route2の中にCがない場合、1番目と2番目の組み合わせの色のrouteの候補を作る。
6-2f.route1の中身が複数の場合も↑と同じ。
7 色からの候補の中でTがあるか判定。f.route3が1つの場合その数値を~f.endへ。
7-2f.route3が複数の場合、以下の振り分けでf.endに入れる。

8 同様に色候補からFがあるか判定し、f.endに入れる。

9 Zのみの場合、f.end=7

これをティラノとJSで示せば判定周りは完成っす。


幸子のデートプラン(仮)

ゲームについて情報まとめました。

  • ゲームデータ初期段階作成完了

  • 設定、仕組み、シナリオの案だし

  • 画面構成

  • キャラデザ

    • 衣装デザイン

  • データ系

    • 衣装データ

    • その他

  • 素材導入

  • シーン完成

    • お着換えシーン

      • データ面

    • デートシーン ←今ココ

    • リザルト画面

  • EDまで作る

まとめ

spine導入しようか検討中。

https://note.com/preview/nc90d8a2b242c?prev_access_key=fdd9b42b317782655865e1b91b6d06bc

記事でまとめながら学ぶと吸収率がいいことがわかったので、また記事作ってるよ。

着せ替えゲームなので、skinの切り替えができるのがでかいなと感じてる。
もちろんADVにしちゃって、キャラ差分機能でやってもいいんだけどね。

ただ、今のところskinが、1つの組み合わせで1つのskin名になるっぽいので、約1500個のskinを作らないといけなくなるわけだが…??

spine公式だとランダムな組み合わせでskinができるっぽいんだけどよくわからん。

誰か教えて。

勉強と同時並行に、デートシーンで使うデザイン案も始めていく予定。


じゃんけんロワイヤルZ(仮)

ゲームについて情報まとめました。

  • ゲームデータ初期段階作成

  • 設定、仕組み、シナリオの案だし

    • IPカードの効果のバランス調整。全種類の能力確定。

  • テストバトル用の素材作成開始。

  • テスト環境の充実化

  • スキルの適用

    • 1-3人目

    • 4人目

  • チートの適用

    • 01-04「シロ」「ミント」「タクト」「レオ」

    • 05「タマコ」New!

    • 06「ユーナ」New!←今ココ

    • -13

    • 14

  • スペシャルの適用 

  • コマンド入力による選択

  • EDまで作る

  • 仮立ち絵作成

まとめ

05「レオ」の追加要素の実装完了。
06「タマコ」の実装が一日で出来ちゃった。
丁寧にコード組んでるとこんなこともあるんすね。

タマコのチートは第4の種類の手を出すことです。
その際の勝負は全てにおいて「あいこ」になります。(SPは敗北)
また、3号の「破壊」の対象がその第4の手になるので、実質3号の「破壊」を無効化します。

06からは後出しカードの種別になってまた組み込みが変わってきます。
05までが未然に防いだり攻撃に特化したチート、
06からは結果が出てから変化させたり結果を倍増させるチートです。

ユーナのチートは相手のあいこゲージを1つ下げることです。
SPの周期をずらしてこちらが先にSPを出せるようにする使い方ですね。


スタラノ~スタイリッシュカードバトル「ラノベ」~

Ver2.6完成!👏500DL達成!👏

反響などまとめました。
ゲームについて情報まとめました。

■アップデートver3予定表■

  • 新ルール

    • ない正解

    • エース(ドロー撤廃)

  • フリーモード

    • ルール変更モード ←いまここ

    • キャスト変更モード

    • タッチ操作の不具合修正

  • その他

    • スマホで画面落とした時にゲームがストップするようにする

まとめ

今週も対戦ステージのブラッシュアップ。
処理落ち原因を探してるとこ。
ブラッシュアップついで、「ここをバージョンアップする」メモ入れてる。

以下編集メモ

ねこの氏がつくった三項演算子の個所。
理解したので解説

大元

それを改造して適応してたんすけどようやく理解できるレベルに達した。

/*
■#これが実際使ってる奴
*/
[eval exp="f.anslct = [f.t_ans == 1 ? 2 : 1, f.t_ans == 3 ? 2 : 3][Math.round( Math.random() )]" cond="f.anslct!=f.t_ans"]


;================================================


/*
■#↓分解
*/
[if exp="f.anslct!=f.t_ans"]
[iscript]

f.anslct = [f.t_ans == 1 ? 2 : 1, f.t_ans == 3 ? 2 : 3][Math.round( Math.random() )]"

[endscript]
[endif]

;================================================

/*
■#解説
*/
;3つの要素がある。
/*
〇
条件 (三項) 演算子
f.hoge == n1 ? n2 : n3
条件式(f.hoge == n1)が真の時 n2 、偽の時 n3

〇
Math.round()…()の中身を四捨五入する
Math.random()…()の場合、0<1の数字が入る(0、1を含まない)

〇
[l,m][n]…nが0のときl、nが1のときm
*/

;なので、
/*
[1,2][0or1](f.tans==3のとき)
[2,3][0or1](f.tans==1のとき)
[1,3][0or1](f.tans==2のとき)
*/
;ができてしまう。
;f.tans==2の場合を偽で表してるところに脱帽した。

こんなんもうパズルやんけ。
[l,m][n]の配列の呼び出し方は知らなかったんで勉強になりました。

これは間違ってないことがわかったので次いこ次。

回答したときに流れるアニメーションの周りでエラーが起きるようになったので、ここの原因解明を始める。

💎ブースト貰いました。ありがとうございます。



40週目まとめ

まあ色々あったんですけど、まあ色々ありました。

書ける範囲で言えばアマデウスの発売日が確定したっていうぐらい。
書けない範囲はめちゃくちゃある。

自分のレベルアップをよく感じる週でした。
・効率のいい独自の学び方の理解(記事にしてまとめる)
・以前わからなかったコード内容の理解ができた
・新しいことを学び始めた(spine、JS関数)

これらに至るにはやはり過去の経験からの根付いた思考方法だと思う。

アマデウスは一番好きなTRPG。
だが、その思い出に良かったことはほぼほぼなかったように感じる。

コンベンションがあればアマデウスGMとして普及した。
シナリオ50本作ったけど、界隈(アマデウスをやってるプレイヤー)には見向きもされなかった、卓募集かけて人数が揃うのが20回に1回ぐらいだった
悪質なプレイヤーやゲームマスターで心くじけたこともあったし、リプレイ動画を作ったところでマジで何も反応がなかったり。(リプレイ動画に出演していたPLすら何もしなかったし無視していた)。
〇周年!というので毎年何かしらやってたけど一緒に盛り上がる人はいなかった。(5周年の事前告知ありのTwitter企画ではむしろ嫌われた)。

じゃあ界隈が冷え切っていたというとそうではなく、私以外の卓募集は即埋まるし、私以外のリプレイ動画は盛り上がるし、私以外のアマデウス関連のつぶやきはめっちゃRTされる。

私はアマデウス好きだけど、界隈は私の事嫌いだよね。

こうして私以外の盛り上げの人らのおかげで電子書籍化になったわけです。
よかったね。

と、まあ本題はこうしたなかで「もっとこうした方がよかったんじゃないか?」というトライアンドエラーを繰り返した結果、今週のレベルアップの根幹ができあがっていったんじゃないかなと思いますね。

じゃあその結果、アマデウス界隈ではどうなったのでしょうか。

今つくってるAMDの告知、アマデウス関連のタグをつけたツイート。
RTといいねにアマデウス関連で繋がったフォロワー、界隈関係者は一切反応してません。

これが結果。

悪意があるわけじゃなく、元々鬱気味の人が多いのと、排他する傾向が強い限界集落みたいな性質あったけど今はどうなんだろ。

私からすれば、後から入ってきた私とは別のプレイングで楽しんでる巨大グループが界隈を盛り上げてる構図
これから購入する人は、そのグループだけしか存在しないわけではないことを念頭に、私とも遊んでもらえると嬉しいなって思います。



もし、今いるティラノゲーム界隈のような温かい環境だったらまた変わったんだろうけど、「反応がない」のを数年続けられるとこうなるわけです。
このいじめみたいな環境があったからこそ、電子ゲーム作れるようになったし、ネットに書けない偉業の達成ができました。
腐らず磨き続けた私に乾杯🍸✨


こういった経緯で、勝手につよつよになってます。

同時並行イベント

今日のさっちゃん(返信部位で過去絵追えるよ)

第二回フリコン端からやってく奴

今週は新規0件です(14周目)

リプレイ

今週更新できてません。
文章だけとりあえず公開しちゃって後から立ち絵とか挿絵とか更新していってもいいのかなと思ったり。


ティラノ技術部

今週はティラノ製ゲームを遊んでないです。(休み)

今週のぼやき(と解決)


立ち絵→ダメなら最初からやらない
シナリオ→スキップできるし止める
BGMやSEや声→消せる
UI→他が良いとそれが人質となって我慢しながらやらないといけない

STGなのにそれまでの会話シーンがスキップして10分ぐらいあるゲームやったのだった。

検索するのに単語を入力しないといけないエラー

達成する人は達成した結果を貼り付けるのだ。

保存食じゃなくて消費物として雑に扱うのがこんなに楽とは思わなかった。



では応援よろしく~('ω')ノ

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