Skip to content

Instantly share code, notes, and snippets.

@fal-works
Last active April 3, 2019 09:57
Show Gist options
  • Save fal-works/8925048732b89ce24aeb21bc8a77c34e to your computer and use it in GitHub Desktop.
Save fal-works/8925048732b89ce24aeb21bc8a77c34e to your computer and use it in GitHub Desktop.
弾幕仮想機械メモ
// 命令セット一覧(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