Last active
April 3, 2019 09:57
-
-
Save fal-works/8925048732b89ce24aeb21bc8a77c34e to your computer and use it in GitHub Desktop.
弾幕仮想機械メモ
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 命令セット一覧(2019-04-03) | |
// 命名規則が揺れている…… | |
END // 実行終了。以降、速度などそのままに動き続ける | |
VANISH // バイトコードを動かしているActor(敵や弾丸の総称)自体を消して終了 | |
// スタック操作系 | |
PUSH_8 | |
PUSH_16 | |
PUSH_32 | |
POP_8 | |
POP_16 | |
POP_32 | |
POP_64 | |
DUPLICATE_16 | |
OVER_16_32 | |
OVER_16_64 | |
SWAP_32 | |
ROTATE_32 | |
RIGHT_ROTATE_32 | |
// cast系 | |
FLOAT32_TO_UINT16 | |
UINT16_TO_FLOAT32 | |
// 算術系(VECTORはFloatが2つ、xとyに対応) | |
DECREMENT_UINT16 | |
SUBTRACT_FLOAT32 | |
DIVIDE_FLOAT32 | |
SUBTRACT_VECTOR | |
DIVIDE_VECTOR | |
// 式の評価(現状、実処理はVM外。popして得たUInt16をインデックスとして式オブジェクトを引っぱってきて評価した結果をpush) | |
EVAL_NUM_EXPR | |
EVAL_VEC_EXPR | |
EVAL_BOOL_EXPR | |
UPDATE_EXPR_INTERPRETER | |
// 制御系 | |
JUMP_INT32 // バイトコード中の次の4byte数値(Intとして解釈)の分だけプログラムカウンタを進める | |
JUMP_IF_0_UINT8_UINT16 // スタックトップの1byteをpopして0ならバイトコード中の次の2byte数値の分だけプログラムカウンタを進める | |
JUMP_IF_0_UINT16 | |
JUMP_IF_NOT_0_UINT16 | |
BREAK // 1フレーム待つ | |
// 外部系 | |
PUSH_GUN // Gunスタック(データスタックと別)のトップのGunを複製してpush。Gunとは発射位置・発射速度の管理単位で、常にスタックトップのものが参照される | |
POP_GUN | |
FIRE // Actor(敵や弾丸)を生む。スタックトップのデータをいくつかpopしてパラメータにする(生んだActorに持たせるバイトコードのインデックス、可視 or not、座標を発射側Actorにバインドするか等) | |
CREATE_THREAD // 疑似マルチスレッド。スレッドを作成してその番号をpush | |
AWAIT_THREAD // スタックトップにある番号のスレッドが実行中なら1フレーム待つ、完了ならpopして次へ | |
SEND_COMMAND // スタックトップにある番号のコマンドを自軍全体に伝達。コマンドとはActor間でメッセージを送るための何か | |
CHECK_RECEIVED_COMMAND // スタックトップにある番号のコマンドをActorが受け取っているなら1、なければ0をpush | |
TRIGGER_EVENT // スタックトップにある番号のイベントを実行。イベントとはサウンド再生とかエフェクト発生とか。 | |
// Actor操作系 | |
SET_POSITION | |
ADD_POSITION | |
SUB_POSITION | |
SET_VELOCITY | |
ADD_VELOCITY | |
SUB_VELOCITY | |
SET_SHOT_POSITION // SHOT~ はGunスタックトップのGun(上述)に対する操作 | |
ADD_SHOT_POSITION | |
SUB_SHOT_POSITION | |
SET_SHOT_VELOCITY | |
ADD_SHOT_VELOCITY | |
SUB_SHOT_VELOCITY | |
SET_SHOT_POSITION_ABSOLUTE | |
SET_SHOT_POSITION_RELATIVE // SHOT POSITION を、Actorの POSITION を起点とした相対ベクトルにする。デフォルトはRELATIVE | |
SET_SHOT_VELOCITY_ABSOLUTE | |
SET_SHOT_VELOCITY_RELATIVE // SHOT VELOCITY を、Actorの VELOCITY を起点とした相対ベクトルにする。デフォルトはABSOLUTE | |
SET_SPEED // SPEEDはVELOCITYの長さ成分 | |
ADD_SPEED | |
SUB_SPEED | |
SET_DIRECTION // DIRECTIONはVELOCITYの角度成分 | |
ADD_DIRECTION | |
SUB_DIRECTION | |
SET_SHOT_SPEED | |
ADD_SHOT_SPEED | |
SUB_SHOT_SPEED | |
SET_SHOT_DIRECTION | |
ADD_SHOT_DIRECTION | |
SUB_SHOT_DIRECTION | |
SET_DISTANCE // DISTANCEはPOSITIONの長さ成分。POSITIONが他のActorからの相対値であるときに有用 | |
ADD_DISTANCE | |
SUB_DISTANCE | |
SET_BEARING // BEARINGはPOSITIONの角度成分 | |
ADD_BEARING | |
SUB_BEARING | |
SET_SHOT_DISTANCE | |
ADD_SHOT_DISTANCE | |
SUB_SHOT_DISTANCE | |
SET_SHOT_BEARING | |
ADD_SHOT_BEARING | |
SUB_SHOT_BEARING | |
SET_DIRECTION_ANGULAR_VELOCITY | |
ADD_DIRECTION_ANGULAR_VELOCITY | |
SUB_DIRECTION_ANGULAR_VELOCITY | |
SET_BEARING_ANGULAR_VELOCITY | |
ADD_BEARING_ANGULAR_VELOCITY | |
SUB_BEARING_ANGULAR_VELOCITY | |
SET_SHOT_DIRECTION_ANGULAR_VELOCITY | |
ADD_SHOT_DIRECTION_ANGULAR_VELOCITY | |
SUB_SHOT_DIRECTION_ANGULAR_VELOCITY | |
SET_SHOT_BEARING_ANGULAR_VELOCITY | |
ADD_SHOT_BEARING_ANGULAR_VELOCITY | |
SUB_SHOT_BEARING_ANGULAR_VELOCITY | |
LOAD_POSITION // xとyをスタックにpush | |
LOAD_VELOCITY | |
LOAD_SHOT_POSITION | |
LOAD_SHOT_VELOCITY | |
LOAD_SPEED | |
LOAD_DIRECTION | |
LOAD_SHOT_SPEED | |
LOAD_SHOT_DIRECTION | |
LOAD_DISTANCE | |
LOAD_BEARING | |
LOAD_SHOT_DISTANCE | |
LOAD_SHOT_BEARING | |
LOAD_DIRECTION_ANGULAR_VELOCITY | |
LOAD_BEARING_ANGULAR_VELOCITY | |
LOAD_SHOT_DIRECTION_ANGULAR_VELOCITY | |
LOAD_SHOT_BEARING_ANGULAR_VELOCITY | |
TRACE_ON // ログ出力をONにする(デバッグ用) | |
TRACE_OFF |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment