Posted Articles

プログラム's articles. (28)

sharp6 Feb/13/2025 01:09

特殊なカード効果のアルゴリズム

今回はガチガチのプログラミングのお話です。

Eraseではカードや状態変化をCardクラス,StatusEffectクラスのインスタンスとして表現していて、各種処理はdelegateでカードや状態変化自身に持たせているわけですが……。delegateって要は関数ポインタの子孫なので、内部にメモリ空間を持ってるわけじゃないんですよね。だから情報を内部に保持する代わりに親であるCardやStatusEffectの持つデータを参照する必要があります。ということで、StatusEffectからdelegateを呼び出す際、親を引数として渡してやるような構造になると。

delegateによる構造によるメリットが何かって、メソッドのマルチキャストにより「カードや状態変化にルール文を追加する」という処理を簡潔に書けるんですね。リアルタイムにカードをいじくれる、デジタル特有のシステムです。
これをEraseでは「インクルード(include)」というキーワード能力で呼んでいるのですが、コイツによってうさんくさいコンボが色々発生します。デザイナーズコンボも2,3コ用意してはいるんですが、想定以外にも色々な効果と化学反応を起こしそうな予感。正直全部のコンボは把握しきれないので、どんな悪用をされるか楽しみにしつつ……。
(この「インクルード」と、MtGでいう「刹那」に近い「インタラプト(interrupt)」のキーワード能力を持つカードは製品版にのみ収録予定です)

カードゲームのコーディングをするとよくわかるんですが、カードゲームのシステムそのものがかなりプログラミングに近いです。「カードがルールを内包する」という仕組みを持つ現代のカードゲームでは、ゲームシステムの論理構築が甘いと即座に仕様バグ(仕様の時点で矛盾が生じているのでルールとして成立しない)を起こすので、ルール同士の整合が取れた美しいシステムにするためには矛盾なく仕様を束ねあげるためのプログラミング能力が必要です。

MtGなんかはその点かなり上手く組まれたカードゲームなんですけど、あれの考案者(リチャード・ガーフィールド)は数学の博士号持ちなんですよね……。結局数学的素養って大事だよねって話かも。

<今日の10分お絵描き>


まーた紹介してないキャラを描く。主人公の少年みたいなイキイキしたツラしてますが、20代後半の成人男性です。

sharp6 Feb/02/2025 23:48

体験版用コード出力機能作成

体験版で作成したデッキを自キャラに持たせてゲーム本編に登場させよう! というイベントのためにデッキの暗号化&コピペと復元のシステムを作成。
ポイントはツイッターの140字(英数字280文字)制限に収まるサイズの文字列に抑える部分でした。なんとか収まった。
ほぼ躓かずにやれたので、平日作業1日(4時間程度)と想定より工数が安く済んでいます。これでなんとか1月分の進捗目標はクリア。(この土日にシナリオ修正してた分はみ出したことから目をそらす)

今日はうっかりsurfaceの電池を切らしたので10分お絵描きできず。

sharp6 Jan/26/2025 21:46

フラグ管理のために

いや、一応プログラマとしてはそこそこやれる方なこともあって頭の中で状態管理しながら複雑な分岐シナリオ書けるんですが、いかんせん原始的だなーって。

キャラの状態(死亡・決別・不在など)や過去イベントの消化・選択状態によってイベントが変わってきたりするので管理できるツールがあると便利かもなぁとも思ったり。

まぁ、ただそれやるならツール作るよりデバッグで条件網羅した方が早いし確実なんだよなぁ。逆にテスト木を管理する方向にした方が間違いない気もしている

あとは分けられるところは切り分けてイベントの設計をすることで、組み合わせ爆発を防止しておくのがポイントかな。(完全にプログラマ視点でシナリオを書いている)

<今日の10分お絵描き>


死ぬときは死ぬ。ベースシステムがCoCなので。

sharp6 Jan/22/2025 22:11

自探をゲームに出せるキャンペーンをしたい

Eraseの体験版ではXや卓すきーでのキャンペーンをやろうと考えていて、その内容が「自分の探索者(キャラクター)をゲームに登場させよう」というものです。

シナリオでは、第二章で世界一のイレイズプレイヤーを決める「世界選手権大会」のイベントがあるんですよね。世界選手権だけあって、参加者はとてもいっぱい! そこで登場キャラクターを作るのめんどくせーな……じゃなくて体験版プレイヤーに投稿してもらうシステムにしたら、ユーザー参加型になって面白いんじゃないかなと。

ということで、クリアデッキとキャラクター名を暗号化して文字列にする(&デコードする)プログラムの作成だーい!
暗号化形式はド安定のAESかな。(複数人相手のデータのやり取りに単一の共通鍵でええんか、となるけどよく考えよう。別にデッキやキャラ名が他の人にバレても何の問題もないんや……。どうせ本編に実装するんだから。それに、そもそも鍵を持つのはアプリ側だからユーザーは見れないしね)

後はキャラ画像の規定を作って暗号化文字列(デッキコード)と一緒に投げてもらえば簡単にキャラクターをゲーム側に取り込めるという寸法。うーん、実に一石二鳥。

設定的に使いやすそうなキャラはモブNPCの代打でシーンに出してもいいだろうし、単純に登場キャラを増やせるのはとても大きい。(立ち絵の画風を揃えるという部分ではどうしても厳しいけど、ゲストキャラクターは基本的にこの世界選手権専用での登場になるので「様々な人が集まるイベント」という特殊性の演出にもなっていいんじゃないかなーと皮算用)

あとはキャンペーンに乗ってくれる人がたくさん出てくれれば言うことなしだけど、こればっかりは祈るしかないね。少しでも良いものを作って広めてもらえることを祈ろう。

sharp6 Jan/15/2025 21:51

おのれUnityAnimation

アニメーションの中に入れたイベント関数が動かないのに悩んでたんですよ。
どんなに調査しても呼ばれてないし、Animファイルの中身ではきちんと宣言されてる。


……は? 合成遷移中はイベント関数が呼ばれない? んでもってデフォルトの遷移が合成遷移? なんだその誰得仕様!

この仕様に気付くまでに調査だけで無駄に何時間もかけてしまった……。なんでUnityはこんな意味不明な仕様にしてるんだ。普通に両方のイベント関数を呼べばいいだろ。フェード中に関数が機能しなくなって誰が喜ぶんだよ……。


今日の10分お絵描き。(PG兼シナリオライターのお絵描きコーナー、本当に誰得なんだけど描きたいんだ許して……)
1 2 3 4 5 6

Search by Article Tags

Monthly Archive

Search by Exclusive Perks

Search Articles