Difference between revisions of "Kyra/Opcodes"

Jump to navigation Jump to search
7,684 bytes removed ,  07:44, 17 June 2005
according to LH, even no page would have been better than me trying to document this... well, let him have a go at it
m (a little formatting)
(according to LH, even no page would have been better than me trying to document this... well, let him have a go at it)
Line 5: Line 5:
Hint: To disable an opcode/command pair in the compiled scripts, overwrite it with '''4C 00''' (add sp,00).
Hint: To disable an opcode/command pair in the compiled scripts, overwrite it with '''4C 00''' (add sp,00).


===Opcodes===


There are more complete disassemblers around, will add their info ASAP.


<code>
  44 = push
  45 = ? compare [sp], [xx] ?
  49 = ? copy [xx], [sp] ?
  4C = add sp,xx  ; what would be dec sp,xx? maybe 4B or 4E?
  4E = execute command (see below)
</code>


===Commands===
Update: LordHoto thinks more people will contribute when the layout of this page becomes more readable. Please stand by until he finished redesign.
 
'''A note on arguments:''' parameters are pushed onto the stack before executing the command:
<code>
  44 FE push FE
  44 00 push 00
  44 00 push 00 // string ID - the first string in the TEXT segment will be displayed
  4E 01 execute 01 // display string
  4C 03 add sp, 03 // discard the 3 pushed values
</code>
 
The arguments are listed in reverse order in this document (LIFO - last in, first out):
 
<code>
  01 Cmd_Character_Says 3 args (stringID, unk, unk)
</code>
 
 
There's still a little confusion about the numbering, so don't take anything below for granted.
 
<code>
 
  00? Cmd_Magic_In_Mouse_Item 00
  01 Cmd_Character_Says 3 args (stringID, unk, unk) - also see 34
  02? Cmd_Pause_Ticks 02
  03? Cmd_Draw_Scene_Anim_Shape 03
  04? Cmd_Query_Game_Flag 04
  05? Cmd_Set_Game_Flag 05
  06? Cmd_Reset_Game_Flag 06
  07? Cmd_Run_NPC_Script 07
  08? Cmd_Set_Special_Exit_List 08
  09? Cmd_Block_In_Walkable_Region 09
  0A? Cmd_Block_Out_Walkable_Region 0A
  0B Cmd_Walk_Player_To_Point 4 args (y, x, x, unk) - x may be be greater than 0xFF, y must not, so only 1 byte for that
  0C? Cmd_Drop_Item_In_Scene 0C
  0D Cmd_Draw_Anim_Shape_Into_Scene 4 args (remove item from screen?) (removes note from desk)
  0E Cmd_Create_Mouse_Item 1 arg  (itemID) - pick up item; ie mousecursor=item id
  0F Cmd_Save_Page_To_Disk tries to write sth to disk, filename = stringID of last push
 
  10? Cmd_Load_Page_From_Disk 10
  11? Cmd_Scene_Anim_On 11
  12? Cmd_Scene_Anim_Off 12
  13? Cmd_Elapsed_Seconds 13
  14? Cmd_Mouse_Is_Pointer 14
  15? Cmd_Destroy_Mouse_Item 15
  16? Cmd_Run_Scene_Anim_Until_Done 16
  17? Cmd_Fade_Special_Palette 17
  18? Cmd_Play_AdLib_Sound 18
  19? Cmd_Play_AdLib_Score 19
  1A? Cmd_Phase_In_Same_Scene 1A
  1B? Cmd_Set_Scene_Phasing_Flag 1B
  1C? Cmd_Reset_Scene_Phasing_Flag 1C
  1D? Cmd_Query_Scene_Phasing_Flag 1D
  1E? Cmd_Scene_To_Direction 1E
  1F? Cmd_Set_Birthstone_Gem 1F
 
  20? Cmd_Place_Item_In_Generic_Map_Scene 20
  21? Cmd_Set_Brandon_Status_Bit 21
  22? Cmd_Pause_Seconds 22
  23? Cmd_Get_Characters_Location 23
  24? Cmd_Run_NPC_Subscript 24
  25? Cmd_Magic_Out_Mouse_Item 25 // I think this is really "24", clears mouse cursor, plays magic sound
  26? Cmd_Internal_Anim_On 26
  27? Cmd_Force_Brandon_To_Normal 27
  28? Cmd_Poison_Death_Now 28
  29? Cmd_Set_Scale_Mode 29
 
  28 looks more like "Cmd_Set_Scale_Mode", when executing it Brandon becomes tiny
 
  note: this looks more like 2A, check numbering
  29              4              ; play WSA file? (or just load it? coords?)
 
  2A? Cmd_Open_WSA_File 2A // I think this should be '29', so there's another problem here
  2B? Cmd_Close_WSA_File 2B
  2C? Cmd_Run_WSA_From_Beginning_To_End 2C
  2D? Cmd_Display_WSA_Frame 2D
  2E? Cmd_Enter_New_Scene 2E
  2F? Cmd_Set_Special_Enter_X_And_Y 2F
 
  30? Cmd_Run_WSA_Frames 30
  31? Cmd_Pop_Brandon_Into_Scene 31
  32? Cmd_Restore_All_Object_Backgrounds 32
  33? Cmd_Set_Custom_Palette_Range 33
  34 Cmd_Custom_Print_Talk_String 4 args (stringID, unk, unk, color) - see also 01, color=palette entry
  35 Cmd_Restore_Custom_Print_Background 0 args ; restore text background?
  36 Cmd_Hide_Mouse 0 args
  37 Cmd_Show_Mouse 0 args
  38? Cmd_Get_Character_X 38
  39? Cmd_Get_Character_Y 39
  3A Cmd_Change_Characters_Facing 3 args
  3B? Cmd_Copy_WSA_Region 3B
  3C Cmd_Text_Print 5 args (stringID, x, y, unk, unk)? prints text on brynn's note
  3D? Cmd_Random 3D
  3E? Cmd_Load_Sound_File 3E
  3F? Cmd_Display_WSA_Frame_On_HidPage 3F
 
  40? Cmd_Display_WSA_Sequential_Frames 40
  41? Cmd_Draw_Character_Standing 41
  42? Cmd_Internal_Anim_Off 42
  43? Cmd_Change_Characters_X_And_Y 43
  44? Cmd_Clear_Scene_Animator_Beacon 44
  45? Cmd_Query_Scene_Animator_Beacon 45
  46? Cmd_Refresh_Scene_Animator 46
  47? Cmd_Place_Item_In_Off_Scene 47
  48 Cmd_Wipe_Down_Mouse_Item // destroys picked up item, sets mouse cursor to normal
  49? Cmd_Place_Character_In_Other_Scene 49
  4A? Cmd_Get_Key 4A
  4B? Cmd_Specific_Item_In_Inventory 4B
  4C? Cmd_Pop_Mobile_NPC_Into_Scene 4C
  4D? Cmd_Mobile_Character_In_Scene 4D
  4E? Cmd_Hide_Mobile_Character 4E
  4F? Cmd_Unhide_Mobile_Character 4F
 
  50? Cmd_Set_Characters_Location 50
  51? Cmd_Walk_Character_To_Point 51
  52 Cmd_Special_Event_Display_Brynns_Note 0 args
  53 Cmd_Special_Event_Remove_Brynns_Note 0 args
  54? Cmd_Set_Logic_Page 54
  55? Cmd_Fat_Print 55
 
  Cmd_Preserve_All_Object_Backgrounds // 0x57
  Cmd_Update_Scene_Animations // 0x58
  Cmd_Scene_Animation_Active // 0x59
  Cmd_Set_Characters_Movement_Delay // 0x5A
  Cmd_Get_Characters_Facing // 0x5B
  Cmd_Bkgd_Scroll_Scene_And_Masks_Right // 0x5C
  Cmd_Find_Brightest_Fireberry // 0x5D
  Cmd_Set_Fireberry_Glow_Palette // 0x5E
  Cmd_Set_Death_Handler_Flag // 0x5F
 
  60 Cmd_Drink_Potion_Animation 3 args
  61 Cmd_Make_Amulet_Appear 0 args // used in altar.emc
  Cmd_Draw_Item_Shape_Into_Scene // 0x62
  Cmd_Set_Characters_Current_Frame // 0x63
  64 Cmd_Wait_For_Confirmation_Mouse_Click // 0x64
  Cmd_Page_Flip // 0x65
  Cmd_Set_Scene_File // 0x66
  Cmd_What_Item_In_Marble_Vase // 0x67
  68 Cmd_Set_Item_In_Marble_Vase 1 arg; (itemID of item in vase in gemcut.emc)
  Cmd_Add_Item_To_Inventory // 0x69
  6A Cmd_Int_Print // prints last pushed value to top left corner? (debug only?)
  6B Cmd_Shake_Screen // 0x6B
  6C Cmd_Create_Amulet_Jewel 1 arg - 01=yellow, 02=red, 03=pink, 04=blue
  Cmd_Set_Scene_Anim_Curr_XY // 0x6D
  6E Cmd_Poison_Brandon_And_Remaps 0 args
  6F Cmd_Fill_Flask_With_Water 2 args, used in fountn.emc
 
  Cmd_Get_Characters_Movement_Delay // 0x70
  Cmd_Get_Birthstone_Gem // 0x71
  Cmd_Query_Brandon_Status_Bit // 0x72
  73 Cmd_Play_Flute_Animation 0 args
  74 Cmd_Play_Winter_Scroll_Sequence 1 arg
  Cmd_Get_Idol_Gem // 0x75
  Cmd_Set_Idol_Gem // 0x76
  Cmd_Total_Items_In_Scene // 0x77
  Cmd_Restore_Brandons_Movement_Delay // 0x78
  79 Cmd_Set_Mouse_Pos // at least 2 args - (x,y) (how to move mouse all way to right though?)
  Cmd_Get_Mouse_State // 0x7A
  Cmd_Set_Entrance_Mouse_Cursor_Track // 0x7B
  Cmd_Item_Appears_On_Ground // 0x7C
  Cmd_Set_No_Draw_Shapes_Flag // 0x7D
  7E Cmd_Fade_Entire_Palette 2 args (mode, unk)// used at least in potion.emc with mode=02, fadein
  Cmd_Item_On_Ground_Here 2 args? // 0x7F
 
  Cmd_Query_Cauldron_State // 0x80
  81 Cmd_Set_Cauldron_State 1 arg// 0x81 (only in potion.emc? why only once in there?)
  Cmd_Query_Crystal_State // 0x82
  Cmd_Set_Crystal_State // 0x83
  Cmd_Set_Palette_Range // 0x84
  85 Cmd_Shrink_Brandon_Down 1 arg
  86 Cmd_Grow_Brandon_Up 0 args
  Cmd_Set_Brandon_Scale_X_And_Y // 0x87
  Cmd_Reset_Scale_Mode // 0x88
  Cmd_Get_Scale_Depth_Table_Value // 0x89
  Cmd_Set_Scale_Depth_Table_Value // 0x8A
  8B Cmd_Message 2 args // 0x8B - set room name/status text (stringID, unk)
  Cmd_Check_Click_On_NPC // 0x8C
  Cmd_Get_Foyer_Item // 0x8D
  Cmd_Set_Foyer_Item // 0x8E
  Cmd_Dispel_Magic_Animation // 0x8F
 
  Cmd_Set_No_Item_Drop_Region // 0x90
  Cmd_Walk_Malcolm_On // 0x91
  91 Cmd_Passive_Protection 0 args //92
  Cmd_Set_Playing_Loop // 0x93
  93 Cmd_Brandon_To_Stone_Sequence 0 args //94
  94 Cmd_Brandon_Healing_Sequence 0 args  //0x95 (used [only?] in _npc.emc)
  Cmd_Protect_Command_Line // 0x96
  Cmd_Pause_Music_Seconds // 0x97
  Cmd_Reset_Mask_Region // 0x98
  Cmd_Set_Palette_Change_Flag // 0x99
  Cmd_Fill_Rect // 0x9A
  Cmd_Dummy // 0x9B
</code>
334

edits

Navigation menu