# LovecaSim Opcode Reference This document provides a technical breakdown of all opcodes used by the LovecaSim game engine. Opcodes are processed by the bytecode interpreter in `engine_rust_src/src/core/logic/interpreter.rs`. ## 1. Flow Control & Meta | ID | Name | Description | Example Cards | |---|---|---|---| | 1 | RETURN | Ends the current ability execution and returns to the calling state. | LL-bp1-001-R+ | | 2 | JUMP | Unconditionally jumps to a specific instruction offset in the bytecode. | PL!-PR-005-PR | | 3 | JUMP_IF_FALSE | Jumps to an offset if the last conditional check (cond) failed. | - | | 29 | META_RULE | Modifies global gameplay rules (e.g., Cheer mod count). | PL!-pb1-018-P+ | | 34 | FLAVOR_ACTION | Placeholder for actions that have no mechanical effect but show text/UI. | - | ## 2. State Modification (Direct) | ID | Name | Description | Example Cards | |---|---|---|---| | 10 | DRAW | Draws `X` cards from the deck to the hand. | PL!-PR-005-PR | | 11 | ADD_BLADES | Adds `X` Blades to the targeted member slot. | LL-bp2-001-R+ | | 12 | ADD_HEARTS | Adds `X` Hearts of color `C` to the targeted slot. | PL!-bp3-008-P | | 13 | REDUCE_COST | Reduces the cost of the next member played by `X`. | LL-bp2-001-R+ | | 18 | BUFF_POWER | Temporarily increases the power/stats of a member. | LL-bp2-001-R+ | | 23 | ENERGY_CHARGE | Adds `X` cards from the top of the deck to the energy zone. | PL!N-bp3-007-P | | 37 | SET_SCORE | Sets the player's current score to exactly `X`. | PL!S-bp3-019-L | | 50 | ADD_STAGE_ENERGY | Adds raw energy pips directly to a member slot. | - | | 81 | ACTIVATE_ENERGY | Forces an energy card to become "Active" (untapped). | LL-bp3-001-R+ | ## 3. Complex Interactions (Response Required) | ID | Name | Description | Example Cards | |---|---|---|---| | 15 | RECOVER_LIVE | Moves a Live card from the discard pile to the Live Zone. | PL!-PR-003-PR | | 17 | RECOVER_MEMBER | Moves a Member card from the discard pile to the Hand. | LL-bp1-001-R+ | | 41 | LOOK_AND_CHOOSE | Looks at `X` cards from `Zone`, picks `Y` to move to `Dest`. | LL-bp4-001-R+ | | 45 | COLOR_SELECT | Prompts the player to choose a heart color (Pink, Red, etc.). | PL!-sd1-003-SD | | 58 | MOVE_TO_DISCARD | Prompts player to discard `X` cards from `Source`. | PL!-sd1-007-SD | | 63 | PLAY_FROM_DISCARD | Plays a member directly from the discard pile to a slot. | PL!HS-bp1-002-P | | 65 | SELECT_MEMBER | Prompts player to select a member on the stage. | PL!-pb1-018-P+ | | 68 | SELECT_LIVE | Prompts player to select a Live card in the Live Zone. | - | ## 4. Targeting Opcodes These opcodes set the `target` register for subsequent instructions. - **100**: SET_TARGET_SELF - **101**: SET_TARGET_PLAYER - **102**: SET_TARGET_OPPONENT - **104**: SET_TARGET_MEMBER_SELF - **110**: SET_TARGET_MEMBER_SELECT ## 5. Triggers | ID | Name | Description | |---|---|---| | 1 | ON_PLAY | Fires when the member is played to the stage. | | 2 | ON_LIVE_START | Fires at the beginning of a Live performance. | | 3 | ON_LIVE_SUCCESS | Fires when a Live is successfully completed. | | 6 | CONSTANT | Active as long as the card is in the correct zone. | | 7 | ACTIVATED | Requires manual activation by the player. | | 8 | ON_LEAVES | Fires when the member leaves the stage. | ## 6. Conditions (Check Logic) Used within abilities to determine if an effect should execute. - **201**: CHECK_HAS_MEMBER (Does the player have a specific member?) - **204**: CHECK_COUNT_HAND (Does the player have `X` cards in hand?) - **206**: CHECK_IS_CENTER (Is the member in the Center slot?) - **213**: CHECK_COUNT_ENERGY (Does the player have `X` energy?) - **221**: CHECK_HAS_CHOICE (Did the player make a specific choice in a previous step?)