ハイハイスクールアドベンチャー_sdl版
差分
このページの2つのバージョン間の差分を表示します。
| 両方とも前のリビジョン前のリビジョン次のリビジョン | 前のリビジョン | ||
| ハイハイスクールアドベンチャー_sdl版 [2025/09/11 21:36] – [ビルドと実行] araki | ハイハイスクールアドベンチャー_sdl版 [2025/09/18 01:22] (現在) – [ビルドと実行] araki | ||
|---|---|---|---|
| 行 1: | 行 1: | ||
| ====== ハイハイスクールアドベンチャー SDL版 ====== | ====== ハイハイスクールアドベンチャー SDL版 ====== | ||
| + | ===== あらすじ ===== | ||
| + | 2019年神奈山県立ハイ高等学校は 地盤が弱く校舎の老朽化も進んだため、 とうとう廃校にする以外方法がなく なってしまった。 | ||
| + | |||
| + | ところで大変な情報を手に入れた。 それは、 | ||
| + | |||
| + | 「ハイ高校にATOMIC BOMBが仕掛けられている。」 | ||
| + | |||
| + | と、いうものだ。 どうやらハイ高が廃校になった時、 気が狂った理科の先生がATOMIC BOMBを 学校のどこかに仕掛けてしまったらしい。 | ||
| + | |||
| + | お願いだ。我が母校のコナゴナになった 姿を見たくはない。 早くATOMIC BOMBを取り除いてくれ……!! | ||
| + | |||
| + | 行動は英語で、“< | ||
| + | |||
| + | それでは Good Luck!!!………… | ||
| ===== 概要 ===== | ===== 概要 ===== | ||
| 行 28: | 行 42: | ||
| ビルドは、Visual Studio や Visual Studio Codeを使ってもできますが、コマンドラインからもできます。 | ビルドは、Visual Studio や Visual Studio Codeを使ってもできますが、コマンドラインからもできます。 | ||
| <code pwsh> | <code pwsh> | ||
| - | C: | + | C: |
| </ | </ | ||
| 行 49: | 行 63: | ||
| AppData というフォルダ名で同梱してありますので、これを配置してください。 | AppData というフォルダ名で同梱してありますので、これを配置してください。 | ||
| - | Windowsで、ユーザ名が foo だとしたら、 | + | Powershell をお使いなら、$env: |
| - | < | + | < |
| - | C:\Users\foo\source\HHSAdvSDL> | + | C:\temp\HHSAdvSDL> |
| - | C:\Users\foo\source\HHSAdvSDL> | + | C:\temp\HHSAdvSDL> |
| </ | </ | ||
| のようにやってください。 | のようにやってください。 | ||
| - | Linuxの場合は、.local/ | + | Linuxの場合は、~/.local/ |
| <code bash> | <code bash> | ||
| 行 66: | 行 80: | ||
| <code command> | <code command> | ||
| - | C:\Usrs\foo\source\HHSAdvSDL> | + | C:\temp\HHSAdvSDL> |
| </ | </ | ||
| <code bash> | <code bash> | ||
| 行 101: | 行 115: | ||
| ===== 実装についてのあれこれ ===== | ===== 実装についてのあれこれ ===== | ||
| + | ==== きっかけ ==== | ||
| + | |||
| + | そもそも、SDL2で行こうと思ったのは、Copilot に、「320x240のビットマップの下に、一行のコマンド入力、その下にスクロール可能なログエリアがあるアプリのサンプルを作って」といったら、ほぼほぼ、完成形に近い画面レイアウトのアプリが出来上がりました。 | ||
| + | |||
| + | もちろん、レイアウトだけで、ゲームができたわけではないのですが、上にも書いたように、キモは、バッファに書いたデータが画像として表示できるか否かなので、ここまでできればほとんど勝ったも同然なのです。 | ||
| + | |||
| + | あと、めんどくさくなりそうなダイアログも「タブキーを押したら、三つボタンがあるモーダルダイアログを作って。」といってひな型を作ってもらいました。 | ||
| + | |||
| + | ここまでできれば、あとは、手を動かすだけ。 | ||
| + | AIがあることで、面倒な部分をかなり軽減してくれるのはありがたいです。 | ||
| + | |||
| + | ==== ビットフィールド型 ==== | ||
| + | |||
| + | シナリオデータは4バイト一組のビットフィールドでルールが記述されています。 | ||
| + | なので、ビットフィールド処理は必須なのですが、C# | ||
| + | |||
| + | まあ、ビットフィールド型にしても、コンパイラが裏で同じようなことをしているだけなので、別にいいですし、クラスで隠蔽してしまえばいい話なので、一度クラスを書いてしまえばどうでもいい話ではあるのですが。 | ||
| + | |||
| + | <code c#> | ||
| + | public class ZRuleBlock | ||
| + | { | ||
| + | private byte[] rules; | ||
| + | public ZRuleBlock(byte[] r) { rules = r; } | ||
| + | public byte Action { get { return (byte)((rules[0] >> 7) & 1); } } | ||
| + | public byte Op { get { return (byte)((rules[0] >> 4) & 7); } } | ||
| + | public byte Type { get { return (byte)((rules[1] >> 5) & 7); } } | ||
| + | public byte Id { get { return (byte)(rules[1] & 0x1F); } } | ||
| + | public byte Offset { get { return rules[2]; } } | ||
| + | public byte BodyType { get { return (byte)((rules[2] >> 5) & 7); } } | ||
| + | public byte BodyId { get { return (byte)(rules[2] & 0x1F); } } | ||
| + | public byte Value { get { return rules[3]; } } | ||
| + | ... | ||
| + | </ | ||
| + | |||
| + | ==== 結局 unsafe ==== | ||
| + | |||
| + | ==== データ欠損 ==== | ||
| + | |||
| + | デバッグプレイ中に、突然例外をはいて落ちた。 | ||
| + | 3階の西廊下を北に進んだら落ちた。 | ||
| + | |||
| + | なんで? | ||
| + | |||
| + | ハイハイスクールアドベンチャーのゲームシステムは、地図情報の中に、その場所で行った動作に対するメッセージが仕込まれている。 | ||
| + | まあ、多くは、その場所で何かを見たときとかに対するリアクションだ。 | ||
| + | |||
| + | メッセージは、メッセージ本体と、そのメッセージへのリンク情報からなる。 | ||
| + | |||
| + | このリンク情報がポイントしているメッセージ本体が存在していないのだ。 | ||
| + | |||
| + | このデータは、もともとShift JISで作られていたが、Android版を作るときに、扱いにくいからUTF-8に変換したのだ。 | ||
| + | なので、その際に取りこぼしたのかと、オリジナルのデータファイルをがさがさあさったところ、オリジナルでもそもそも欠落していた。 | ||
| + | |||
| + | データファイルの作成時の問題か、或いは、そもそもうっかりデータを作り忘れていたのか、その辺はもはや定かではないが、とにかくないものはない。 | ||
| + | |||
| + | 他にそういうところがないか、不安になって、地図データのダンプをするスクリプトを作って走らせたところ、欠落はここ1か所だけだった。 | ||
| + | JavaやC++はこのあたりの境界越えに比較的寛容でいままでたまたま発覚しなかったが、C# | ||
ハイハイスクールアドベンチャー_sdl版.1757626577.txt.gz · 最終更新: by araki
