HSP3 雑多

2024-10-06: ★ドキュメント
2022/4/29 HSP3.6hgimg4
p_vec は変数として取得する。後で計算結果を代入して戻す。
v2 に 値を取得する。
v に 4つセット。
p_vec, v をセット。
src 3つ から target 3つを引いたベクトルを作るための
オイラー回転を src に戻す。
HSP3 での実際の動作
fvface カメラの位置ベクトルvec, 対象物のX, Y, Z
と指定すると vec に回転が取得できて(うちZ成分は常に0.0)
カメラを setangy GPOBJ_CAMERA, vec.0, -vec.1, vec.2 で
回転するとカメラが対象物を見る。
一方 setangy 対象物のid, vec.0, -vec.1, vec2 で対象物の
ローカル(0,0,1)の向き がカメラの方を見る(ビルボードみたいにできる)。
setangy を使うことと Y成分 をマイナスするのがポイント。
setangy はちゃんと右ねじ回転のようなので、Y成分は fvface から取得する時点で符号を逆にしておいてほしいなぁ。
カメラに適用するときは gplookat を使うのがいいのだろう。
fvface のいいところはピッチ成分Xと回転成分Yが得られるところや対象物に適用できるところだろうか。

2022/5/3 HSP3.6hgimg4
ポイントライトとスポットライトに対応した時期に
DIRECTIONAL_LIGHT_COUNT は1個以上の場合、コードの方で後から自動で付与されるようになっている。
またシェーダーでは DIRECTIONAL_LIGHT_COUNT が定義されていない場合は
DIRECTIONAL_LIGHT_COUNT 0 が定義される。
多分、DIRECTIONAL_LIGHT_COUNT を .material に書かないことを期待されてると思う。
duck さんは材質名がちゃんと blinn1 と明記されてて更新されてるけど DIRECTIONAL_LIGHT_COUNT は消し忘れなんだと思う。
6/13 違う。どうもgpbモデル系は明記が必要みたい。
そして u_modulateAlpha が 0.0 で渡ってきてないか??
透明になる原因はわかんないけど、DIRECTIONAL_LIGHT_COUNT の予期せぬ動作でアルファ値が 0.0 になるんだろうな。
もし輪郭で中間値が取れたら確かに重ねあわせで面白いことできそうではある。
別件かもしれないけど strstr で検索していて
AAADIRECTIONAL_LIGHT_COUNT 1
の記述があっても DIRECTIONAL_LIGHT_COUNT 1 と
同様な動作をする。無効化したつもりが全然無効化されてなくて切り分けに失敗したTT

2023/8/13 HSP3.7β6 HGIMG4
#version 300 es
つけてみたけどエラー出た。

2023/9/30 HSP3.6 HGIMG4 WebGL
exec "await navigator.mediaDevices.enumerateDevices();"
await つけたら async の中で呼べとエラーが出た。

2024-05-19 HSP3.6 HGIMG4 WebGL
.gpb の拡張子はつけてはならない。tamane2.gpb.material を探そうとしてエラーになる。
PCで開くと mtinfo が取れない?? stick は取れるけど。
data の下のファイルは確かに見に行くが res/shaders/ の下を暗黙で取りにいっている。
[ ] emscripten Module FS_createPath, FS_createPreloadedFile などを調べる。
1986行 data/ が抜けてる。FS_createPath "/", "data" が足りない。
tmp += "data/" + ff + "\n"
2089行 js_gpmode の場合のみ FS_createPath する。
それ以外の場合はすべて平たく配置する。
当面は res フォルダ直下に全部置く、data フォルダを作成してはならない、で運用するのが無難か。

2024-05-25: emscripten
Module['FS_createPreloadedFile']('/', '/foo/bar/baz.png', 'https://example.com/baz.png', true, true) の戻りは void.
FS_createPath の戻りは出来上がったフォルダ名。FS_createPath は '/', '/foo/bar/baz/qux' を指定しても
いきなり途中含めて全部作ってくれる。便利。

2024-10-06:
material の材質と画像にShift_JIS使うの有り?無し?
HSP3.7b9 の gpbconv.exe に「マテリアル名を修正しない」チェックボックスがついているのでいずれ調べる。チェック入れない場合 "Wood Light" が "material_1" になった。

2024-09-12: .gpb ファイルフォーマット

2024-09-23:
環境光。
setdir GPOBJ_LIGHT, 0.75, 0.75, 0.75
少なくとも u_diffuseColor の4つめアルファ成分は効くので省略してはならない。

2024-10-20: 中間XMLのアニメーション部分
<root>
<Animations id="__Animations__">
<Animation id="animations">
<AnimationChannel>
<targetId>Head</targetId>
<targetAttrib>17 ANIMATION_SCALE_ROTATE_TRANSLATE</targetAttrib>
<keytimes count="16">0.0 33.3 66.6 100.0 略[sp]</keytimes>
<values count="160">100.0 100.0 100.0 -0.707 0.0 0.0 0.707 0.0 0.0 0.0 100.0 略 0.0 </values>
<tangentsIn count="0" />
<tangentsOut count="0" />
<interpolations count="1">1[sp]</interpolations>
</AnimationChannel>
<AnimationChannel>略</AnimationChannel>
</Animation>
</Animations>
</root>

2024-12-05: class Transform は class AnimationTarget から派生している。クリップを反映するときは現在値に対してlerpまたはslerpでweightで反映する。順番が大事。weightは0.0-1.0の範囲に無いとassertだが最後までクリッピングせず反映する。

2025-01-07: マップエディタ

2025-01-07: 2025-01-09 更新。tmap ファイル, little endian
80h: ヘッダ 固定128バイト
u32: TMAP 54h 4Dh 41h 50h
u32: 0 reserved
u32: マップ幅
u32: マップ高さ
u32: チップドット幅
u32: チップドット高さ
u32: 0 reserved
u32: 0 reserved
u32: ヘッダバイト数 0x80(=128)
u32: 属性配列バイト数 0x10(=16)
u32: 0 reserved
u32: 0 reserved
u32x4: 0, 0, 0, 0 reserved 48バイトめ
(u32, u32) x4: label 4組 64バイトめ
チップ画像ファイル名 32バイト 96バイトめ
チップごと属性配列
u16x8:
00 00
80 00 // フラグ
40 00 // フラグ
C0 00 // フラグ
25 03 // フラグとグループと
90 00
50 00
D1 01 // フラグとグループと
0xff00 Op値(0-255)
0x00f0 ビット(80h H, 40h E, 20h Aアニメ, 10h N)
0x000f Gr値
4バイトずつ、チップインデックス。

2025-01-09:
hsp3gr_dish.cpp にC++とhspのつなぎが実装されている。
複数文字列は {" ... "} で書く。
オブジェクトIDは objexist でチェックする。
u_modulateColor は vec4
gamehsp::resetCurrentLight( )の中で定義しているが先頭に MODULATE_ALPHA を強制で追加している(多分埋め込みメッシュに使われる)。
ログ系。
setreq SYSREQ_LOGWRITE, 1 (デフォルトで有効) で最後に exe の場所に hsp3gp.log を出力する。
gpgetlog var で文字列を取得する。
gpreport でノードのメッシュ一覧をGP_WARNで出力する。

2025-01-12: HSP3.7b9 では元コードのフォルダ構造が変わってる。
gameplay3d はどこいった?
android/hspproj/app/jni/hsp3dish/win32gp/

2025-01-20: webglContextAttributes に preserveDrawingBuffer: true してもコピーできなかった。captureStream して video に挿して canvas にコピーすると YUV 変換されるけど映像が取れる。
emscripten ポインタは16バイトアラインして使える。
dupptr はクローンとはあるがディープコピーはしてない模様。
別件:
EM_BEGIN_CDECL
int foo(int a, int b) EM_IMPORT(foo)
EM_END_CDECL

2025-01-26, 2025-01-29: HSP3.7β9 HGIMG4
mref で何かできないかと思ったが Unsupported function
普通のフォントで mes を実行するとcanvas id="hsp3dishFontCanvas" が追加される。
setreq SYSREQ_USEGPBFONT, 1
の場合の mes では canvas 要素は追加されない。
32pxきっちりでフォントを作ると24px指定の場合に参照がはみ出る。拡大すると参照が露骨にはみ出す。わずかにuvを狭くするのがいいんだろうか?
目的サイズより拡大する場合は四辺を0.5px相当ずつパディングするとかなりのサイズまではみ出ない。ただしぼやける。目的サイズ(32px)以下のみ使う場合はちょうどの方がぼやけない。
コードは\uや\nを送り込める。/ フォルダや /res フォルダのファイルは FS.readFile(): Uint8Array, FS.writeFile() できる。indexed DB は展開されてなさそう。
gpdraw でアップデートビットを指定しなければモーション、自動移動、物理が進まない。

2025-01-26, 2025-02-02: HSP3.7β10pre dotfw
df_mapspawn 通常マップまたはシューティングマップをサーチする。
通常マップの場合は左向きに出現。シューティングマップの場合は下向きに出現する。
df_addenemy してるだけ。
WebGLにするとき、dataフォルダを使うがベタっと置くのでアクセスするときに data/piyo.png のように書くのはNG。
15000だと足りなかったので30000ぐらいにしたら結構たくさん出しても
スマホでも20fpsぐらい出た。その後すぐ15fpsに下がったのでうちのスマホでの大量動作はほぼ無理かも。
-
アイテムを敵の下に表示したいが dotfw の範囲だとめんどそう。
- df_additem で後半探索にしたら後ろにいった。
sp_player_myact@HSP3MOD_DOTFW
はざっくり 0: 操作無し, 1: カーソル移動有り, 2: 床が無い状態(ジャンプできない)
afont8.png の赤は 255,63,63。白は100%。緑は63,223,63。アルファベットは右上寄せ。カタカナは上寄せで横は中揃え。

2025-02-23: HSP3.7β10 dotfw 兼 es
ESSPRES_GROUND
になるにはおそらくnone-zero
なESI_ACCELY
が必要。
加速度が0
の状態でESI_SPDY
で下に向けてぶつけても着地フラグが立たない。
なおY加速度生値で-1(not -65536)で天井にぶつけたら上昇速度が上がってそのうち着地フラグが立ったw
多分通り抜けてちょうど足元にブロックが来たんだろう。下から通り抜けてほしいから、それはそうだろう。
0なESI_ACCELY
でもスピードでぶつければESSPRES_BLOCKY
は立つ。

2025-03-07: HSP3.7β10 dotfw 兼 es
ジャンプゲームでも通常使用だとESSPFLAG_GRAVITY
ビットが立ってなかった。
HSPDX互換用らしい。
多分キー押し下げはSDL_KeyboardState()で取得してる。
vpad key の引数は inout で 256(マウス左押し下げ)に依存している。
あと結果を保持して put 時に反映してくれる。

2025-03-12: HSP3.7β10 dotfw 兼 es
es_getbghit で最後の引数無指定だとマイナスで動作する模様。
落ちる最中は0個が返り、0(NONE) 0(チップ) 0(attr) 0(blockx),0(blocky) pos16x, pos16y を上書きする。
ホールドと空きイベントに着地しようとすると2個が返り
12.75block, 10.5block の2点が戻り
前者は2(HITY) で 8チップ(ホールド)の128 attr, でブロックは12,11と期待の値が格納される。
後者は0(NONE) を先頭としてほとんど0と同一 pos16x, pos16y が返る。なぜ???
dotfw ではイベント発火時は attr >> 8 を _dotfw_curmapattr として通知する。128は消える。
実際の移動を伴わずに判定するだけの場合は es_bghitpos が使えそう。
説明を読むと矩形は常にドット単位とも読める。BGの左上と想定移動量は16bit固定小数が発動できる。

2025-03-14: HSP3.7β10 dotfw 兼 es
deffunc, defcfunc など整数引数を省略すると0として扱われる。
コマンドや関数ではデフォルトがコードで指定される。
HIT戻りの位置は壁にぶつかって止まった座標が得られる。
_NOANIM などは内部コードで mode_p で反転してアニメ有効フラグとして判定している。紛らわしい。

2025-03-15: HSP3.7β10 dotfw 兼 es
処理順
- プレ(メインループ)
- df_update(df)
- df_update0(df)
- es_draw(es)
- df_update1(df)
- redraw 1(df)
- await NOWAIT じゃないとき(df)
- key状態取得(df)
- redraw 0(df)
- 背景 df_bgput (df)
- プレイヤーメイン player_main(df)
- キー(df)
- キー判定 jumpact_key(df)
- キー判定 map2d_move(df)
- 背景判定つき移動の実施(es_bghit)
- 新移動先判定
- イベント(マップアイテム)gosubあれば(サブ)
- ボタンgosubあれば(サブ)
- ミスgosubあれば(サブ)
- アイテムgosubあれば(サブ)
- アクションgosubあれば(サブ)
- キー(df)
- 敵メイン(df)
- df_update0(df)
- ポスト(メインループ)

2025-05-03: HSP3.7b10
includeのパスは..
開始可能で相対指定可能で解決できる。\\
(えん2つ)の他/
も書ける。
existとbloadで指定するパスはdirinfo(1)形式(フルパス+\\
)に、相対結合できる。C\hsp37\..\hsp37\sample\hgimg4\test1.hsp とか書いても解決できる。
\\
と /
の混入指定もできる。