diff scn2k/scn2k_grp.cc @ 72:f9eb96a4cce0

Register all (?) commands, to help finding non-implemented ones in game.
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Sat, 02 Apr 2011 02:05:27 +0200
parents 1fd20d231376
children f8751d74918b
line wrap: on
line diff
--- a/scn2k/scn2k_grp.cc
+++ b/scn2k/scn2k_grp.cc
@@ -623,52 +623,909 @@ Grp::Grp(Event::Container& _event, PicCo
 
 	LoadCgm();
 
-	RegisterCommand(1, 30, 0, "stackClear", (CmdImpl) &Grp::impl_stackClear);
-	RegisterCommand(1, 33, 70, "grpBuffer", (CmdImpl) &Grp::impl_grpBuffer);
-	RegisterCommand(1, 33, 73, "grpOpenBG", (CmdImpl) &Grp::impl_grpOpen);
-	RegisterCommand(1, 33, 75, "grpMulti", (CmdImpl) &Grp::impl_grpMulti); //FIXME: or not...
-	RegisterCommand(1, 33, 76, "grpOpen", (CmdImpl) &Grp::impl_grpOpen);
-	RegisterCommand(1, 33, 32, "shake", (CmdImpl) &Grp::impl_shake);
-	RegisterCommand(1, 33, 100, "grpCopy", (CmdImpl) &Grp::impl_grpCopy);
-	RegisterCommand(1, 33, 1201, "recFill", (CmdImpl) &Grp::impl_recFill);
-	RegisterCommand(1, 33, 1100, "recCopy", (CmdImpl) &Grp::impl_recCopy);
-	RegisterCommand(1, 33, 1101, "recMaskCopy", NULL); //TODO: Same thing as recCopy, but using source's alpha
-	RegisterCommand(1, 33, 1600, "recAdd", (CmdImpl) &Grp::impl_recAdd);
-	RegisterCommand(1, 33, 406, "grpPan", (CmdImpl) &Grp::impl_grpPan);
+	// Jumps
+	RegisterCommand(0, 1, 0, "goto", NULL);
+	RegisterCommand(0, 1, 1, "goto_if", NULL);
+	RegisterCommand(0, 1, 2, "goto_unless", NULL);
+	RegisterCommand(0, 1, 3, "goto_on", NULL);
+	RegisterCommand(0, 1, 4, "goto_case", NULL);
+	RegisterCommand(0, 1, 5, "gosub", NULL);
+	RegisterCommand(0, 1, 6, "gosub_if", NULL);
+	RegisterCommand(0, 1, 7, "gosub_unless", NULL);
+	RegisterCommand(0, 1, 8, "gosub_on", NULL);
+	RegisterCommand(0, 1, 9, "gosub_case", NULL);
+	RegisterCommand(0, 1, 10, "ret", NULL);
+	RegisterCommand(0, 1, 11, "jump", NULL);
+	RegisterCommand(0, 1, 12, "farcall", NULL);
+	RegisterCommand(0, 1, 13, "rtl", NULL);
+	RegisterCommand(0, 1, 16, "gosub_with", NULL);
+	RegisterCommand(0, 1, 17, "ret_with", NULL);
+	RegisterCommand(0, 1, 18, "farcall_with", NULL);
+	RegisterCommand(0, 1, 19, "rtl_with", NULL);
+
+	RegisterCommand(2, 1, 1, "??? (unknown)", NULL);
+	RegisterCommand(2, 1, 2, "InvokeDLL", NULL);
+	RegisterCommand(2, 1, 10, "LoadDLL", NULL);
+	RegisterCommand(2, 1, 11, "UnloadDLL", NULL);
+	RegisterCommand(2, 1, 12, "CallDLL", NULL);
+
+
+	// Selections
+	RegisterCommand(0, 2, 0, "select_w", NULL);
+	RegisterCommand(0, 2, 1, "select", NULL);
+	RegisterCommand(0, 2, 2, "select_s2", NULL);
+	RegisterCommand(0, 2, 3, "select_s", NULL);
+
+	RegisterCommand(0, 2, 10, "select_?? (10)", NULL);
+	RegisterCommand(0, 2, 11, "select_?? (11)", NULL);
+	RegisterCommand(0, 2, 12, "select_?? (12)", NULL);
+	RegisterCommand(0, 2, 13, "select_?? (13)", NULL);
+
+
+	// Messages
+	RegisterCommand(0, 3, 3, "par", NULL);
+
+	RegisterCommand(0, 3, 15, "spause3", NULL);
+	RegisterCommand(0, 3, 17, "pause", NULL);
+
+	RegisterCommand(0, 3, 100, "SetFontColour", NULL);
+	RegisterCommand(0, 3, 101, "FontSize", NULL);
+	RegisterCommand(0, 3, 102, "TextWindow", NULL);
+	RegisterCommand(0, 3, 103, "FastText", NULL);
+	RegisterCommand(0, 3, 104, "NormalText", NULL);
+	RegisterCommand(0, 3, 105, "FontColour", NULL);
+	RegisterCommand(0, 3, 106, "SetFontColourAll", NULL);
+	RegisterCommand(0, 3, 107, "FontSizeAll", NULL);
+
+	RegisterCommand(0, 3, 120, "__doruby", NULL);
+
+	// Already in _text
+	/* RegisterCommand(0, 3, 151, "msgHide", NULL);
+	RegisterCommand(0, 3, 152, "msgClear", NULL); */
+	RegisterCommand(0, 3, 161, "msgHideAll", NULL);
+	RegisterCommand(0, 3, 162, "msgClearAll", NULL);
+	RegisterCommand(0, 3, 170, "msgHideAllTemp", NULL);
+
+	RegisterCommand(0, 3, 201, "br", NULL);
+	RegisterCommand(0, 3, 202, "par2", NULL);
+	RegisterCommand(0, 3, 205, "spause", NULL);
+	RegisterCommand(0, 3, 206, "spause2", NULL);
+	RegisterCommand(0, 3, 207, "pause_all", NULL);
+	RegisterCommand(0, 3, 210, "page", NULL);
+
+	RegisterCommand(0, 3, 300, "SetIndent", NULL);
+	RegisterCommand(0, 3, 301, "ClearIndent", NULL);
+  
+	RegisterCommand(0, 3, 310, "TextPos", NULL);
+	RegisterCommand(0, 3, 311, "TextPosX", NULL);
+	RegisterCommand(0, 3, 312, "TextPosY", NULL);
+	RegisterCommand(0, 3, 320, "TextOffset", NULL);
+	RegisterCommand(0, 3, 321, "TextOffsetX", NULL);
+	RegisterCommand(0, 3, 322, "TextOffsetY", NULL);
+	RegisterCommand(0, 3, 330, "GetTextPos", NULL);
+
+	RegisterCommand(0, 3, 340, "WindowLen", NULL);
+	RegisterCommand(0, 3, 341, "WindowLenAll", NULL);
+
+	RegisterCommand(0, 3, 1000, "FaceOpen", NULL);
+	RegisterCommand(0, 3, 1001, "FaceClear", NULL);
+
+	RegisterCommand(0, 3, 2000, "??? (overloads 0 and 1?)", NULL);
+	RegisterCommand(0, 3, 3000, "??? (unknown)", NULL);
+
+
+	// System
+	RegisterCommand(0, 4, 120, "SetInterrupt", NULL);
+	RegisterCommand(0, 4, 121, "ClearInterrupt", NULL);
+	RegisterCommand(0, 4, 303, "yield", NULL);
+
+	RegisterCommand(0, 4, 300, "rtlButton", NULL);
+	RegisterCommand(0, 4, 301, "rtlCancel", NULL);
+	RegisterCommand(0, 4, 302, "rtlSystem", NULL);
+
+	RegisterCommand(0, 4, 1000, "ShowBackground", NULL);
+	RegisterCommand(0, 4, 1100, "SetSkipMode", NULL);
+	RegisterCommand(0, 4, 1101, "ClearSkipMode", NULL);
+	RegisterCommand(0, 4, 1102, "SkipMode", NULL);
+
+	RegisterCommand(0, 4, 2000, "aaa", NULL);
+	RegisterCommand(0, 4, 2001, "aaa", NULL);
+
+	RegisterCommand(0, 4, 0, "pause", NULL);
+	RegisterCommand(0, 4, 1, "page", NULL);
+	RegisterCommand(0, 4, 2, "bgmLoop", NULL);
+
+	RegisterCommand(1, 4, 0, "title", NULL);
+
+	RegisterCommand(1, 4, 100, "wait", NULL);
+	RegisterCommand(1, 4, 101, "waitC", NULL);
+
+	RegisterCommand(1, 4, 110, "ResetTimer", NULL);
+	RegisterCommand(1, 4, 111, "time", NULL);
+	RegisterCommand(1, 4, 112, "timeC", NULL);
+	RegisterCommand(1, 4, 113, "tipeC2/Timer2", NULL);
+	RegisterCommand(1, 4, 114, "Timer", NULL);
+	RegisterCommand(1, 4, 115, "CmpTimer", NULL);
+	RegisterCommand(1, 4, 116, "SetTimer", NULL);
+
+	RegisterCommand(1, 4, 120, "ResetExTimer", NULL);
+	RegisterCommand(1, 4, 121, "timeEx", NULL);
+	RegisterCommand(1, 4, 122, "timeExC", NULL);
+	RegisterCommand(1, 4, 123, "timeExC2", NULL);
+	RegisterCommand(1, 4, 124, "ExTimer", NULL);
+	RegisterCommand(1, 4, 125, "CmpExTimer", NULL);
+	RegisterCommand(1, 4, 126, "SetExTimer", NULL);
+
+	RegisterCommand(1, 4, 130, "FlushClick", NULL);
+	RegisterCommand(1, 4, 131, "GetClick", NULL);
+	RegisterCommand(1, 4, 132, "WaitClick", NULL);
+	RegisterCommand(1, 4, 133, "GetCursorPos2", NULL);
+	RegisterCommand(1, 4, 134, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 135, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 136, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 137, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 138, "GetCursorPos2", NULL);
+
+	RegisterCommand(1, 4, 151, "??? (unknown)", NULL);
+
+	RegisterCommand(1, 4, 200, "KeyMouseOn", NULL);
+	RegisterCommand(1, 4, 201, "KeyMouseOff", NULL);
+	RegisterCommand(1, 4, 202, "GetCursorPos2", NULL);
+	RegisterCommand(1, 4, 203, "SetCursorPos", NULL);
+	RegisterCommand(1, 4, 204, "ShowCursor", NULL);
+	RegisterCommand(1, 4, 205, "HideCursor", NULL);
+	RegisterCommand(1, 4, 206, "GetMouseCursor", NULL);
+	RegisterCommand(1, 4, 207, "MouseCursor", NULL);
+
+	RegisterCommand(1, 4, 320, "CallStackClear", NULL);
+	RegisterCommand(1, 4, 321, "CallStackNop", NULL);
+	RegisterCommand(1, 4, 322, "CallStackPop", NULL);
+	RegisterCommand(1, 4, 323, "CallStackSize", NULL);
+	RegisterCommand(1, 4, 324, "CallStackTrunc", NULL);
+
+	RegisterCommand(1, 4, 330, "EnableSkipMode", NULL);
+	RegisterCommand(1, 4, 331, "DisableSkipMode", NULL);
+	RegisterCommand(1, 4, 332, "LocalSkipMode", NULL);
+	RegisterCommand(1, 4, 333, "SetLocalSkipMode", NULL);
+	RegisterCommand(1, 4, 334, "ClearLocalSkipMode", NULL);
+
+	RegisterCommand(1, 4, 350, "CtrlKeySkip", NULL);
+	RegisterCommand(1, 4, 351, "CtrlKeySkipOn", NULL);
+	RegisterCommand(1, 4, 352, "CtrlKeySkipOff", NULL);
+	RegisterCommand(1, 4, 353, "CtrlPressed", NULL);
+	RegisterCommand(1, 4, 354, "ShiftPressed", NULL);
 
-	RegisterCommand(1, 34, 3120, "snmBgScroll", (CmdImpl) &Grp::impl_snmBgScroll);
-	RegisterCommand(1, 34, 3100, "snmBgPlay", (CmdImpl) &Grp::impl_snmPlay);
-	RegisterCommand(1, 34, 2100, "snmPlay", (CmdImpl) &Grp::impl_snmPlay);
-	RegisterCommand(1, 34, 2101, "snmPlayEx", (CmdImpl) &Grp::impl_snmPlay);
+	RegisterCommand(1, 4, 364, "PauseCursor", NULL);
+
+	RegisterCommand(1, 4, 400, "GetWindowPos", NULL);
+	RegisterCommand(1, 4, 401, "SetWindowPos", NULL);
+	RegisterCommand(1, 4, 402, "WindowResetPos", NULL);
+	RegisterCommand(1, 4, 403, "GetDefaultWindowPos", NULL);
+	RegisterCommand(1, 4, 404, "SetDefaultWindowPos", NULL);
+	RegisterCommand(1, 4, 405, "DefaultWindowResetPos", NULL);
+
+	RegisterCommand(1, 4, 410, "GetWakuAll", NULL);
+	RegisterCommand(1, 4, 411, "SetWakuAll", NULL);
+	RegisterCommand(1, 4, 412, "GetWaku", NULL);
+	RegisterCommand(1, 4, 413, "SetWaku", NULL);
+	RegisterCommand(1, 4, 414, "GetWakuMod", NULL);
+	RegisterCommand(1, 4, 415, "SetWakuMod_dwm", NULL);
+	RegisterCommand(1, 4, 416, "SetWakuMod_ewm", NULL);
+
+	RegisterCommand(1, 4, 420, "GetWindowAttr2", NULL);
+	RegisterCommand(1, 4, 421, "SetWindowAttr2", NULL);
+
+	RegisterCommand(1, 4, 422, "GetWindowModAttr", NULL);
+	RegisterCommand(1, 4, 423, "SetWindowModAttr", NULL);
+	RegisterCommand(1, 4, 424, "GetWindowAttrMod", NULL);
+	RegisterCommand(1, 4, 425, "SetWindowAttrMod_sam0", NULL);
+	RegisterCommand(1, 4, 426, "SetWindowAttrMod_sam1", NULL);
+	RegisterCommand(1, 4, 427, "SetWindowAttrMod_sam2", NULL);
+
+	RegisterCommand(1, 4, 430, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 431, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 432, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 435, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 436, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 437, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 440, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 441, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 442, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 445, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 446, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 447, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 450, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 451, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 452, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 455, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 456, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 457, "??? (unknown)", NULL);
+  
+	RegisterCommand(1, 4, 460, "EnableWindowAnm", NULL);
+	RegisterCommand(1, 4, 461, "DisableWindowAnm", NULL);
+	RegisterCommand(1, 4, 462, "GetOpenAnmMod", NULL);
+	RegisterCommand(1, 4, 463, "SetOpenAnmMod", NULL);
+	RegisterCommand(1, 4, 464, "GetOpenAnmTime", NULL);
+	RegisterCommand(1, 4, 465, "SetOpenAnmTime", NULL);
+	RegisterCommand(1, 4, 466, "GetCloseAnmMod", NULL);
+	RegisterCommand(1, 4, 467, "SetCloseAnmMod", NULL);
+	RegisterCommand(1, 4, 468, "GetCloseAnmTime", NULL);
+	RegisterCommand(1, 4, 469, "SetCloseAnmTime", NULL);
+
+	RegisterCommand(1, 4, 500, "InitFrame", NULL);
+	RegisterCommand(1, 4, 501, "InitFrameLoop", NULL);
+	RegisterCommand(1, 4, 502, "InitFrameTurn", NULL);
+	RegisterCommand(1, 4, 503, "InitFrameAccel", NULL);
+	RegisterCommand(1, 4, 504, "InitFrameDecel", NULL);
+	RegisterCommand(1, 4, 510, "ReadFrame", NULL);
+	RegisterCommand(1, 4, 511, "FrameActive", NULL);
+	RegisterCommand(1, 4, 512, "AnyFrameActive", NULL);
+	RegisterCommand(1, 4, 513, "ClearFrame", NULL);
+	RegisterCommand(1, 4, 514, "ClearAllFrames", NULL);
+	RegisterCommand(1, 4, 520, "InitExFrame", NULL);
+	RegisterCommand(1, 4, 521, "InitExFrameLoop", NULL);
+	RegisterCommand(1, 4, 522, "InitExFrameTurn", NULL);
+	RegisterCommand(1, 4, 523, "InitExFrameAccel", NULL);
+	RegisterCommand(1, 4, 524, "InitExFrameDecel", NULL);
+	RegisterCommand(1, 4, 530, "ReadExFrame", NULL);
+	RegisterCommand(1, 4, 531, "ExFrameActive", NULL);
+	RegisterCommand(1, 4, 532, "AnyExFrameActive", NULL);
+	RegisterCommand(1, 4, 533, "ClearExFrame", NULL);
+	RegisterCommand(1, 4, 534, "ClearAllExFrames", NULL);
+
+	RegisterCommand(1, 4, 600, "InitFrames", NULL);
+	RegisterCommand(1, 4, 601, "InitFramesLoop", NULL);
+	RegisterCommand(1, 4, 602, "InitFramesTurn", NULL);
+	RegisterCommand(1, 4, 603, "InitFramesAccel", NULL);
+	RegisterCommand(1, 4, 604, "InitFramesDecel", NULL);
+	RegisterCommand(1, 4, 610, "ReadFrames", NULL);
+	RegisterCommand(1, 4, 620, "InitExFrames", NULL);
+	RegisterCommand(1, 4, 621, "InitExFramesLoop", NULL);
+	RegisterCommand(1, 4, 622, "InitExFramesTurn", NULL);
+	RegisterCommand(1, 4, 623, "InitExFramesAccel", NULL);
+	RegisterCommand(1, 4, 624, "InitExFramesDecel", NULL);
+	RegisterCommand(1, 4, 630, "ReadExFrames", NULL);
+
+	RegisterCommand(1, 4, 800, "index_series", NULL);
+	RegisterCommand(1, 4, 801, "??? (unknown)", NULL);
+
+	RegisterCommand(1, 4, 1000, "rnd", NULL);
+	RegisterCommand(1, 4, 1001, "pcnt", NULL);
+	RegisterCommand(1, 4, 1002, "abs", NULL);
+	RegisterCommand(1, 4, 1003, "power", NULL);
+	RegisterCommand(1, 4, 1004, "sin", NULL);
+	RegisterCommand(1, 4, 1005, "modulus", NULL);
+	RegisterCommand(1, 4, 1006, "angle", NULL);
+	RegisterCommand(1, 4, 1007, "min", NULL);
+	RegisterCommand(1, 4, 1008, "max", NULL);
+	RegisterCommand(1, 4, 1009, "constrain", NULL);
+	RegisterCommand(1, 4, 1010, "cos", NULL);
+	RegisterCommand(1, 4, 1011, "sign", NULL);
+	RegisterCommand(1, 4, 1012, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 1013, "??? (unknown)", NULL);
+
+	RegisterCommand(1, 4, 1100, "GetYear", NULL);
+	RegisterCommand(1, 4, 1101, "GetMonth", NULL);
+	RegisterCommand(1, 4, 1102, "GetDay", NULL);
+	RegisterCommand(1, 4, 1103, "GetDayOfWeek", NULL);
+	RegisterCommand(1, 4, 1104, "GetHour", NULL);
+	RegisterCommand(1, 4, 1105, "GetMinute", NULL);
+	RegisterCommand(1, 4, 1106, "GetSecond", NULL);
+	RegisterCommand(1, 4, 1107, "GetMs", NULL);
+	RegisterCommand(1, 4, 1110, "GetDate", NULL);
+	RegisterCommand(1, 4, 1111, "GetTime", NULL);
+	RegisterCommand(1, 4, 1112, "GetDateTime", NULL);
+
+	RegisterCommand(1, 4, 1120, "SceneNum", NULL);
+
+	RegisterCommand(1, 4, 1130, "DefaultGrp", NULL);
+	RegisterCommand(1, 4, 1131, "SetDefaultGrp", NULL);
+	RegisterCommand(1, 4, 1132, "DefaultBgr", NULL);
+	RegisterCommand(1, 4, 1133, "SetDefaultBgr", NULL);
+
+	RegisterCommand(1, 4, 1200, "end", NULL);
+	RegisterCommand(1, 4, 1201, "MenuReturn", NULL);
+	RegisterCommand(1, 4, 1202, "MenuReturn2", NULL);
+	RegisterCommand(1, 4, 1203, "ReturnMenu", NULL);
+	RegisterCommand(1, 4, 1204, "ReturnPrevSelect", NULL);
+	RegisterCommand(1, 4, 1205, "ReturnPrevSelect2", NULL);
+
+	RegisterCommand(1, 4, 1210, "ContextMenu", NULL);
+	RegisterCommand(1, 4, 1211, "EnableSyscom", NULL);
+	RegisterCommand(1, 4, 1212, "HideSyscom", NULL);
+	RegisterCommand(1, 4, 1213, "DisableSyscom", NULL);
+	RegisterCommand(1, 4, 1214, "SyscomEnabled", NULL);
+	RegisterCommand(1, 4, 1215, "InvokeSyscom", NULL);
+	RegisterCommand(1, 4, 1216, "ReadSyscom", NULL);
+
+	RegisterCommand(1, 4, 1220, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 1221, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 1222, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 1230, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 1231, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 1232, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 1250, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 1251, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 1252, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 1253, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 1254, "??? (unknown)", NULL);
+
+	RegisterCommand(1, 4, 1300, "GetName", NULL);
+	RegisterCommand(1, 4, 1301, "SetName", NULL);
+	RegisterCommand(1, 4, 1302, "nwSingle", NULL);
+	RegisterCommand(1, 4, 1303, "nwMulti", NULL);
+	RegisterCommand(1, 4, 1310, "GetLocalName", NULL);
+	RegisterCommand(1, 4, 1311, "SetLocalName", NULL);
+	RegisterCommand(1, 4, 1312, "nwSingleLocal", NULL);
+	RegisterCommand(1, 4, 1313, "nwMultiLocal", NULL);
+
+	RegisterCommand(1, 4, 1409, "SaveExists", NULL);
+	RegisterCommand(1, 4, 1410, "SaveDate", NULL);
+	RegisterCommand(1, 4, 1411, "SaveTime", NULL);
+	RegisterCommand(1, 4, 1412, "SaveDateTime", NULL);
+	RegisterCommand(1, 4, 1413, "SaveInfo", NULL);
+	RegisterCommand(1, 4, 1414, "GetSaveFlag", NULL);
+	RegisterCommand(1, 4, 1421, "LatestSave", NULL);
 
 	RegisterCommand(1, 4, 1500, "cgGetTotal", (CmdImpl) &Grp::impl_cgGet);
 	RegisterCommand(1, 4, 1501, "cgGetViewed", (CmdImpl) &Grp::impl_cgGet);
 	RegisterCommand(1, 4, 1502, "cgGetViewedPcnt", (CmdImpl) &Grp::impl_cgGet);
 	RegisterCommand(1, 4, 1503, "cgGetFlag", (CmdImpl) &Grp::impl_cgStatus);
 	RegisterCommand(1, 4, 1504, "cgStatus", (CmdImpl) &Grp::impl_cgStatus);
+	RegisterCommand(1, 4, 1505, "??? (unknown)", NULL);
 
-	RegisterCommand(1, 4, 0x6a4, "CreateInput", NULL);
-	RegisterCommand(1, 4, 0x6ae, "SetInput", NULL);
+	// Input
+	RegisterCommand(1, 4, 1700, "CreateInput", NULL);
+	RegisterCommand(1, 4, 1701, "CloseInput", NULL);
+	RegisterCommand(1, 4, 1702, "CloseAllInput", NULL);
+	RegisterCommand(1, 4, 1703, "FocusInput", NULL);
+	RegisterCommand(1, 4, 1710, "SetInput", NULL);
+	RegisterCommand(1, 4, 1711, "GetInput", NULL);
+
+	RegisterCommand(1, 4, 2050, "SetCursorMono", NULL);
+	RegisterCommand(1, 4, 2000, "CursorMono", NULL);
+	RegisterCommand(1, 4, 2051, "SetSkipAnimations", NULL);
+	RegisterCommand(1, 4, 2001, "SkipAnimations", NULL);
+	RegisterCommand(1, 4, 2052, "SetLowPriority", NULL);
+	RegisterCommand(1, 4, 2002, "LowPriority", NULL);
+	RegisterCommand(1, 4, 2053, "SetConfirmSaveLoad", NULL);
+	RegisterCommand(1, 4, 2003, "ConfirmSaveLoad", NULL);
+	RegisterCommand(1, 4, 2054, "SetReduceDistortion", NULL);
+	RegisterCommand(1, 4, 2004, "ReduceDistortion", NULL);
+	RegisterCommand(1, 4, 2059, "SetSoundQuality", NULL);
+	RegisterCommand(1, 4, 2009, "SoundQuality", NULL);
+	RegisterCommand(1, 4, 2221, "SetGeneric1", NULL);
+	RegisterCommand(1, 4, 2620, "DefGeneric1", NULL);
+	RegisterCommand(1, 4, 2321, "Generic1", NULL);
+	RegisterCommand(1, 4, 2222, "SetGeneric2", NULL);
+	RegisterCommand(1, 4, 2322, "Generic2", NULL);
+	RegisterCommand(1, 4, 2621, "DefGeneric2", NULL);
+	RegisterCommand(1, 4, 2223, "SetMessageSpeed", NULL);
+	RegisterCommand(1, 4, 2323, "MessageSpeed", NULL);
+	RegisterCommand(1, 4, 2600, "DefMessageSpeed", NULL);
+	RegisterCommand(1, 4, 2224, "SetMessageNoWait", NULL);
+	RegisterCommand(1, 4, 2324, "MessageNoWait", NULL);
+	RegisterCommand(1, 4, 2601, "DefMessageNoWait", NULL);
+	RegisterCommand(1, 4, 2225, "SetKoeMode", NULL);
+	RegisterCommand(1, 4, 2325, "KoeMode", NULL);
+	RegisterCommand(1, 4, 2226, "SetBgmKoeFadeVol", NULL);
+	RegisterCommand(1, 4, 2326, "BgmKoeFadeVol", NULL);
+	RegisterCommand(1, 4, 2602, "DefBgmKoeFadeVol", NULL);
+	RegisterCommand(1, 4, 2227, "SetBgmKoeFade", NULL);
+	RegisterCommand(1, 4, 2327, "BgmKoeFade", NULL);
+	RegisterCommand(1, 4, 2603, "DefBgmKoeFade", NULL);
+
+	RegisterCommand(1, 4, 2230, "SetBgmVolMod", (CmdImpl) &Grp::impl_SetVolMod);
+	RegisterCommand(1, 4, 2330, "BgmVolMod", (CmdImpl) &Grp::impl_GetVolMod);
+	RegisterCommand(1, 4, 2231, "SetKoeVolMod", (CmdImpl) &Grp::impl_SetVolMod);
+	RegisterCommand(1, 4, 2331, "KoeVolMod", (CmdImpl) &Grp::impl_GetVolMod);
+	RegisterCommand(1, 4, 2232, "SetPCMVolMod", (CmdImpl) &Grp::impl_SetVolMod);
+	RegisterCommand(1, 4, 2332, "PCMVolMod", (CmdImpl) &Grp::impl_GetVolMod);
+	RegisterCommand(1, 4, 2233, "SetSeVolMod", (CmdImpl) &Grp::impl_SetVolMod);
+	RegisterCommand(1, 4, 2333, "SeVolMod", (CmdImpl) &Grp::impl_GetVolMod);
+
+	RegisterCommand(1, 4, 2240, "SetBgmEnabled", NULL);
+	RegisterCommand(1, 4, 2340, "BgmEnabled", NULL);
+	RegisterCommand(1, 4, 2241, "SetKoeEnabled", NULL);
+	RegisterCommand(1, 4, 2341, "KoeEnabled", NULL);
+	RegisterCommand(1, 4, 2242, "SetPcmEnabled", NULL);
+	RegisterCommand(1, 4, 2342, "PcmEnabled", NULL);
+	RegisterCommand(1, 4, 2243, "SetSeEnabled", NULL);
+	RegisterCommand(1, 4, 2343, "SeEnabled", NULL);
+	RegisterCommand(1, 4, 2250, "SetAutoMode", NULL);
+	RegisterCommand(1, 4, 2350, "AutoMode", NULL);
+	RegisterCommand(1, 4, 2604, "DefAutoMode", NULL);
+	RegisterCommand(1, 4, 2251, "SetAutoCharTime", NULL);
+	RegisterCommand(1, 4, 2351, "AutoCharTime", NULL);
+	RegisterCommand(1, 4, 2605, "DefAutoCharTime", NULL);
+	RegisterCommand(1, 4, 2252, "SetAutoBaseTime", NULL);
+	RegisterCommand(1, 4, 2352, "AutoBaseTime", NULL);
+	RegisterCommand(1, 4, 2606, "DefAutoBaseTime", NULL);
+	RegisterCommand(1, 4, 2255, "SetFontQuality", NULL);
+	RegisterCommand(1, 4, 2355, "FontQuality", NULL);
+	RegisterCommand(1, 4, 2256, "SetFontWeight", NULL);
+	RegisterCommand(1, 4, 2356, "FontWeight", NULL);
+	RegisterCommand(1, 4, 2257, "SetFontShadow", NULL);
+	RegisterCommand(1, 4, 2357, "FontShadow", NULL);
+	RegisterCommand(1, 4, 2260, "SetWindowAttrR", NULL);
+	RegisterCommand(1, 4, 2360, "WindowAttrR", NULL);
+	RegisterCommand(1, 4, 2610, "DefWindowAttrR", NULL);
+	RegisterCommand(1, 4, 2261, "SetWindowAttrG", NULL);
+	RegisterCommand(1, 4, 2361, "WindowAttrG", NULL);
+	RegisterCommand(1, 4, 2611, "DefWindowAttrG", NULL);
+	RegisterCommand(1, 4, 2262, "SetWindowAttrB", NULL);
+	RegisterCommand(1, 4, 2362, "WindowAttrB", NULL);
+	RegisterCommand(1, 4, 2612, "DefWindowAttrB", NULL);
+	RegisterCommand(1, 4, 2263, "SetWindowAttrA", NULL);
+	RegisterCommand(1, 4, 2363, "WindowAttrA", NULL);
+	RegisterCommand(1, 4, 2613, "DefWindowAttrA", NULL);
+	RegisterCommand(1, 4, 2264, "SetWindowAttrF", NULL);
+	RegisterCommand(1, 4, 2364, "WindowAttrF", NULL);
+	RegisterCommand(1, 4, 2614, "DefWindowAttrF", NULL);
+	RegisterCommand(1, 4, 2265, "SetWindowAttr_swaRGB", NULL);
+	RegisterCommand(1, 4, 2365, "GetWindowAttr_gwaRGB", NULL);
+	RegisterCommand(1, 4, 2615, "DefWindowAttr_dwaRGB", NULL);
+	RegisterCommand(1, 4, 2266, "SetWindowAttr_swaRGBA", NULL);
+	RegisterCommand(1, 4, 2366, "GetWindowAttr_gwaRGBA", NULL);
+	RegisterCommand(1, 4, 2616, "DefWindowAttr_dwaRGBA", NULL);
+	RegisterCommand(1, 4, 2267, "SetWindowAttr", NULL);
+	RegisterCommand(1, 4, 2367, "GetWindowAttr", NULL);
+	RegisterCommand(1, 4, 2617, "DefWindowAttr", NULL);
+	RegisterCommand(1, 4, 2270, "SetShowObject1", NULL);
+	RegisterCommand(1, 4, 2370, "ShowObject1", NULL);
+	RegisterCommand(1, 4, 2271, "SetShowObject2", NULL);
+	RegisterCommand(1, 4, 2371, "ShowObject2", NULL);
+	RegisterCommand(1, 4, 2272, "SetShowWeather", NULL);
+	RegisterCommand(1, 4, 2372, "ShowWeather", NULL);
+	RegisterCommand(1, 4, 2273, "SetClassifyText", NULL);
+	RegisterCommand(1, 4, 2373, "ClassifyText", NULL);
+	RegisterCommand(1, 4, 2274, "SetUseKoe", NULL);
+	RegisterCommand(1, 4, 2374, "UseKoe", NULL);
+	RegisterCommand(1, 4, 2275, "SetScreenMode", NULL);
+	RegisterCommand(1, 4, 2375, "ScreenMode", NULL);
+	RegisterCommand(1, 4, 2276, "??? (setsyscom12?)", NULL);
+	RegisterCommand(1, 4, 2622, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 2623, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 2624, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 2625, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 2626, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 2627, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 2628, "??? (unknown)", NULL);
+	RegisterCommand(1, 4, 2629, "??? (unknown)", NULL);
+
+	RegisterCommand(1, 4, 3000, "menu_save", NULL);
+	RegisterCommand(1, 4, 3001, "menu_load", NULL);
+	RegisterCommand(1, 4, 3002, "savemenu", NULL);
+	RegisterCommand(1, 4, 3003, "loadmenu", NULL);
+	RegisterCommand(1, 4, 3006, "save2", NULL);
+	RegisterCommand(1, 4, 3007, "save", NULL);
+	RegisterCommand(1, 4, 3008, "load2", NULL);
+	RegisterCommand(1, 4, 3009, "load", NULL);
+	RegisterCommand(1, 4, 3100, "menu_save_always", NULL);
+	RegisterCommand(1, 4, 3101, "menu_load_always", NULL);
+	RegisterCommand(1, 4, 3106, "save_always2", NULL);
+	RegisterCommand(1, 4, 3107, "save_always", NULL);
+	RegisterCommand(1, 4, 3108, "load_always2", NULL);
+	RegisterCommand(1, 4, 3109, "load_always", NULL);
+
+	RegisterCommand(1, 4, 3500, "Savepoint", NULL);
+	RegisterCommand(1, 4, 3501, "EnableAutoSavepoints", NULL);
+	RegisterCommand(1, 4, 3502, "DisableAutoSavepoints", NULL);
+	RegisterCommand(1, 4, 3503, "??? (unknown)", NULL);
+
+
+	// Os
+	RegisterCommand(1, 5, 0, "shell", NULL);
+	RegisterCommand(1, 5, 10, "launch", NULL);
+
+	RegisterCommand(0, 5, 1, "goto", NULL);
+	RegisterCommand(0, 5, 2, "goto_unless", NULL);
+	RegisterCommand(0, 5, 5, "gosub", NULL);
+	RegisterCommand(0, 5, 6, "gosub_if", NULL);
+	RegisterCommand(0, 5, 7, "gosub_unless", NULL);
+	RegisterCommand(0, 5, 10, "ret", NULL);
+	RegisterCommand(0, 5, 11, "jump", NULL);
+	RegisterCommand(0, 5, 12, "farcall", NULL);
+	RegisterCommand(0, 5, 13, "rtl", NULL);
+
+
+	// String
+	RegisterCommand(1, 10, 0, "strcpy", NULL);
+	RegisterCommand(1, 10, 1, "strclear", NULL);
+	RegisterCommand(1, 10, 2, "strcat", NULL);
+	RegisterCommand(1, 10, 3, "strlen", NULL);
+	RegisterCommand(1, 10, 4, "strcmp", NULL);
+	RegisterCommand(1, 10, 5, "strsub", NULL);
+	RegisterCommand(1, 10, 6, "strrsub", NULL);
+	RegisterCommand(1, 10, 7, "strcharlen", NULL);
+	RegisterCommand(1, 10, 8, "strtrunc", NULL);
+	RegisterCommand(1, 10, 10, "hantozen", NULL);
+	RegisterCommand(1, 10, 11, "zentohan", NULL);
+	RegisterCommand(1, 10, 12, "Uppercase", NULL);
+	RegisterCommand(1, 10, 13, "Lowercase", NULL);
+	RegisterCommand(1, 10, 14, "itoa_ws", NULL);
+	RegisterCommand(1, 10, 15, "itoa_s", NULL);
+	RegisterCommand(1, 10, 16, "itoa_w", NULL);
+	RegisterCommand(1, 10, 17, "itoa", NULL);
+	RegisterCommand(1, 10, 18, "atoi", NULL);
+	RegisterCommand(1, 10, 19, "digits", NULL);
+	RegisterCommand(1, 10, 20, "digit", NULL);
+	RegisterCommand(1, 10, 30, "strpos", NULL);
+	RegisterCommand(1, 10, 31, "strlpos", NULL);
+	RegisterCommand(1, 10, 100, "intout/strout", NULL);
+	RegisterCommand(1, 10, 200, "strused", NULL);
+
+
+	// Block manipulation functions
+	RegisterCommand(1, 11, 0, "setarray", NULL);
+	RegisterCommand(1, 11, 1, "setrng", NULL);
+	RegisterCommand(1, 11, 2, "cpyrng", NULL);
+	RegisterCommand(1, 11, 3, "setarray_stepped", NULL);
+	RegisterCommand(1, 11, 4, "setrng_stepped", NULL);
+	RegisterCommand(1, 11, 5, "??? (unknown)", NULL);
+	RegisterCommand(1, 11, 6, "cpyvars", NULL);
+
+	RegisterCommand(1, 11, 100, "sum", NULL);
+	RegisterCommand(1, 11, 101, "sums", NULL);
+
+
+	// Layered shaking functions
+	RegisterCommand(1, 12, 0, "ShakeLayersStop", NULL);
+
+	RegisterCommand(1, 12, 1100, "ShakeLayers_shlud", NULL);
+	RegisterCommand(1, 12, 1101, "ShakeLayers_shlrl", NULL);
+	RegisterCommand(1, 12, 1102, "ShakeLayers2D", NULL);
+	RegisterCommand(1, 12, 1200, "ShakeLayers_shlup", NULL);
+	RegisterCommand(1, 12, 1201, "ShakeLayers_shldn", NULL);
+	RegisterCommand(1, 12, 1202, "ShakeLayers_shlle", NULL);
+	RegisterCommand(1, 12, 1203, "ShakeLayers_shlri", NULL);
+	RegisterCommand(1, 12, 1300, "ShakeLayersSpec", NULL);
+
+	RegisterCommand(1, 12, 3100, "ShakeLayersEx_xshlud", NULL);
+	RegisterCommand(1, 12, 3101, "ShakeLayersEx_xshlrl", NULL);
+	RegisterCommand(1, 12, 3102, "ShakeLayers2DEx", NULL);
+	RegisterCommand(1, 12, 3200, "ShakeLayersEx_xshlup", NULL);
+	RegisterCommand(1, 12, 3201, "ShakeLayersEx_xshldn", NULL);
+	RegisterCommand(1, 12, 3202, "ShakeLayersEx_xshlle", NULL);
+	RegisterCommand(1, 12, 3203, "ShakeLayersEx_xshlri", NULL);
+	RegisterCommand(1, 12, 3300, "ShakeLayersSpecEx", NULL);
+
+	// Shaking
+	RegisterCommand(1, 13, 0, "ShakeStop", NULL);
+
+	RegisterCommand(1, 13, 1100, "ShakeScreen", NULL);
+	RegisterCommand(1, 13, 1101, "ShakeScreen", NULL);
+	RegisterCommand(1, 13, 1102, "ShakeScreen2D", NULL);
+	RegisterCommand(1, 13, 1200, "ShakeScreen", NULL);
+	RegisterCommand(1, 13, 1201, "ShakeScreen", NULL);
+	RegisterCommand(1, 13, 1202, "ShakeScreen", NULL);
+	RegisterCommand(1, 13, 1203, "ShakeScreen", NULL);
+	RegisterCommand(1, 13, 1300, "ShakeSpec", NULL);
+	RegisterCommand(1, 13, 1400, "ShakeScreen", NULL);
+
+	RegisterCommand(1, 13, 3100, "ShakeScreenEx", NULL);
+	RegisterCommand(1, 13, 3101, "ShakeScreenEx", NULL);
+	RegisterCommand(1, 13, 3102, "ShakeScreen2DEx", NULL);
+	RegisterCommand(1, 13, 3200, "ShakeScreenEx", NULL);
+	RegisterCommand(1, 13, 3201, "ShakeScreenEx", NULL);
+	RegisterCommand(1, 13, 3202, "ShakeScreenEx", NULL);
+	RegisterCommand(1, 13, 3203, "ShakeScreenEx", NULL);
+	RegisterCommand(1, 13, 3300, "ShakeSpecEx", NULL);
+	RegisterCommand(1, 13, 3400, "ShakeScreenEx", NULL);
 
+	// Music
+	RegisterCommand(1, 20, 0, "bgmLoop", (CmdImpl) &Grp::impl_bgmLoop);
+	RegisterCommand(1, 20, 1, "bgmPlayEx", (CmdImpl) &Grp::impl_bgmLoop); //FIXME: wait
+	RegisterCommand(1, 20, 2, "bgmPlay", (CmdImpl) &Grp::impl_bgmLoop);
+	RegisterCommand(1, 20, 3, "bgmWait", NULL);
+	RegisterCommand(1, 20, 4, "bgmPlaying", NULL);
+	RegisterCommand(1, 20, 5, "bgmStop", (CmdImpl) &Grp::impl_bgmStop);
+	RegisterCommand(1, 20, 6, "bgmStop2", NULL);
+	RegisterCommand(1, 20, 7, "bgmStatus", NULL);
+	RegisterCommand(1, 20, 8, "bgmRewind", NULL);
+	RegisterCommand(1, 20, 9, "bgmStop3", NULL);
+	RegisterCommand(1, 20, 10, "bgmStop4", NULL);
+	RegisterCommand(1, 20, 11, "bgmVolume", NULL);
+	RegisterCommand(1, 20, 12, "bgmSetVolume", NULL);
+	RegisterCommand(1, 20, 13, "bgmUnMute", NULL);
+	RegisterCommand(1, 20, 14, "bgmMute", NULL);
+	RegisterCommand(1, 20, 105, "bgmFadeOut", (CmdImpl) &Grp::impl_bgmStop);
+	RegisterCommand(1, 20, 106, "bgmFadeOut2", NULL);
+	RegisterCommand(1, 20, 107, "bgmStatus2", NULL);
+	RegisterCommand(1, 20, 200, "bgmTimer", NULL);
+
+	// Sound effects
+	RegisterCommand(1, 21, 0, "wavPlay", (CmdImpl) &Grp::impl_playWav);
+	RegisterCommand(1, 21, 1, "wavPlayEx", (CmdImpl) &Grp::impl_playWav);
+	RegisterCommand(1, 21, 2, "wavLoop", (CmdImpl) &Grp::impl_playWav);
+	RegisterCommand(1, 21, 3, "wavWait", NULL);
+	RegisterCommand(1, 21, 4, "wavPlaying", NULL);
+	RegisterCommand(1, 21, 5, "wavStop", (CmdImpl) &Grp::impl_stopWav);
+	RegisterCommand(1, 21, 7, "wavPlaying2", NULL);
+	RegisterCommand(1, 21, 8, "wavRewind", NULL);
+	RegisterCommand(1, 21, 9, "wavStop3", (CmdImpl) &Grp::impl_stopWav);
+	RegisterCommand(1, 21, 10, "wavStop4", (CmdImpl) &Grp::impl_stopWav);
+	RegisterCommand(1, 21, 11, "wavVolume", NULL);
+	RegisterCommand(1, 21, 12, "wavSetVolume", NULL);
+	RegisterCommand(1, 21, 13, "wavUnMute", NULL);
+	RegisterCommand(1, 21, 14, "wavMute", NULL);
+	RegisterCommand(1, 21, 20, "wavStopAll", (CmdImpl) &Grp::impl_stopWav);
+	RegisterCommand(1, 21, 105, "wavFadeout", (CmdImpl) &Grp::impl_stopWav);
+	RegisterCommand(1, 21, 106, "wavFadeOut2", NULL);
+
+	RegisterCommand(1, 22, 0, "sePlay", (CmdImpl) &Grp::impl_playSE);
+
+	// Voices
+	RegisterCommand(1, 23, 0, "koePlay", (CmdImpl) &Grp::impl_koePlay);
+	RegisterCommand(1, 23, 1, "koePlayEx", (CmdImpl) &Grp::impl_koePlay); //FIXME
+	RegisterCommand(1, 23, 3, "koeWait", NULL);
+	RegisterCommand(1, 23, 4, "koePlaying", NULL);
+	RegisterCommand(1, 23, 5, "koeStop", NULL);
+	RegisterCommand(1, 23, 6, "koeWaitC", NULL);
+	RegisterCommand(1, 23, 7, "koePlayExC", (CmdImpl) &Grp::impl_koePlay); //FIXME
+	RegisterCommand(1, 23, 8, "koeDoPlay", (CmdImpl) &Grp::impl_koePlay); //FIXME
+	RegisterCommand(1, 23, 9, "koeDoPlayEx", (CmdImpl) &Grp::impl_koePlay); //FIXME
+	RegisterCommand(1, 23, 10, "koeDoPlayExC", (CmdImpl) &Grp::impl_koePlay); //FIXME
+	RegisterCommand(1, 23, 11, "koeVolume", NULL);
+	RegisterCommand(1, 23, 12, "koeSetVolume", NULL);
+	RegisterCommand(1, 23, 13, "koeUnMute", NULL);
+	RegisterCommand(1, 23, 14, "koeMute", NULL);
+
+	// Videos
+	RegisterCommand(1, 26, 0, "movPlay", NULL);
+	RegisterCommand(1, 26, 1, "movPlayEx", (CmdImpl) &Grp::impl_movPlay);
+	RegisterCommand(1, 26, 2, "movLoop", NULL);
+	RegisterCommand(1, 26, 3, "movWait", NULL);
+	RegisterCommand(1, 26, 4, "movPlaying", NULL);
+	RegisterCommand(1, 26, 5, "movStop", NULL);
+	RegisterCommand(1, 26, 20, "movPlayExC", (CmdImpl) &Grp::impl_movPlay);
+
+	// Graphic stack
+	RegisterCommand(1, 30, 0, "stackClear", (CmdImpl) &Grp::impl_stackClear);
+	RegisterCommand(1, 30, 1, "stackNop", NULL);
+	RegisterCommand(1, 30, 2, "stackPop", NULL);
+	RegisterCommand(1, 30, 3, "stackSize", NULL);
+	RegisterCommand(1, 30, 4, "stackTrunc", NULL);
+
+	// Screen settings
+	RegisterCommand(1, 30, 20, "DrawAuto", NULL);
+	RegisterCommand(1, 30, 21, "DrawSemiAuto", NULL);
+	RegisterCommand(1, 30, 22, "DrawManual", NULL);
+
+	RegisterCommand(1, 30, 30, "ModeToScreenSize", NULL);
+	RegisterCommand(1, 30, 31, "GetDCPixel", NULL);
+
+	RegisterCommand(1, 30, 40, "??? (Princess Bride)", NULL);
+
+	RegisterCommand(1, 31, 0, "refresh", (CmdImpl) &Grp::impl_refresh);
+
+	// Graphics
+	RegisterCommand(1, 33, 15, "allocDC", NULL);
+	RegisterCommand(1, 33, 16, "freeDC", NULL);
+	RegisterCommand(1, 33, 20, "grpLoadMask", NULL);
+	RegisterCommand(1, 33, 30, "grpTextout", NULL);
+	RegisterCommand(1, 33, 31, "wipe", NULL);
+	RegisterCommand(1, 33, 32, "shake", (CmdImpl) &Grp::impl_shake);
+	RegisterCommand(1, 33, 50, "grpLoad", NULL);
+	RegisterCommand(1, 33, 51, "grpMaskLoad", NULL);
+	RegisterCommand(1, 33, 70, "grpBuffer", (CmdImpl) &Grp::impl_grpBuffer);
+	RegisterCommand(1, 33, 71, "grpMaskBuffer", NULL);
+	RegisterCommand(1, 33, 72, "grpDisplay", NULL);
+	RegisterCommand(1, 33, 73, "grpOpenBG", (CmdImpl) &Grp::impl_grpOpen);
+	RegisterCommand(1, 33, 74, "grpMaskOpen", NULL);
+	RegisterCommand(1, 33, 75, "grpMulti", (CmdImpl) &Grp::impl_grpMulti); //FIXME: or not...
+	RegisterCommand(1, 33, 76, "grpOpen", (CmdImpl) &Grp::impl_grpOpen);
+	RegisterCommand(1, 33, 77, "grpMulti", NULL);
+	RegisterCommand(1, 33, 100, "grpCopy", (CmdImpl) &Grp::impl_grpCopy);
+	RegisterCommand(1, 33, 101, "grpMaskCopy", NULL);
+	RegisterCommand(1, 33, 102, "grpMaskBlend", NULL);
+	RegisterCommand(1, 33, 120, "grpCopyWithMask", NULL);
+	RegisterCommand(1, 33, 121, "grpMaskCopyWithMask", NULL);
+	RegisterCommand(1, 33, 140, "grpCopyInvMask", NULL);
+	RegisterCommand(1, 33, 141, "grpMaskCopyInvMask", NULL);
+	RegisterCommand(1, 33, 160, "grpRotate", NULL);
+	RegisterCommand(1, 33, 161, "grpMaskRotate", NULL);
+	RegisterCommand(1, 33, 162, "grpRotateAdd", NULL);
+	RegisterCommand(1, 33, 163, "grpMaskRotateAdd", NULL);
+	RegisterCommand(1, 33, 164, "grpRotateSub", NULL);
+	RegisterCommand(1, 33, 165, "grpMaskRotateSub", NULL);
+	RegisterCommand(1, 33, 200, "grpOutline", NULL);
+	RegisterCommand(1, 33, 201, "grpFill", NULL);
+	RegisterCommand(1, 33, 300, "grpInvert", NULL);
+	RegisterCommand(1, 33, 301, "grpMono", NULL);
+	RegisterCommand(1, 33, 302, "grpColour", NULL);
+	RegisterCommand(1, 33, 303, "grpLight", NULL);
+	RegisterCommand(1, 33, 400, "grpSwap", NULL);
+	RegisterCommand(1, 33, 401, "grpStretchBlt", NULL);
+	RegisterCommand(1, 33, 402, "grpZoom", NULL); // (258, 208, 401, 315, 0, 0, 639, 479, 1, 0, 0, 639, 479, 1750) XXX
+	RegisterCommand(1, 33, 403, "grpFade", NULL);
+	RegisterCommand(1, 33, 404, "grpFlash", NULL);
+	RegisterCommand(1, 33, 406, "grpPan", (CmdImpl) &Grp::impl_grpPan);
+	RegisterCommand(1, 33, 407, "grpShift", NULL);
+	RegisterCommand(1, 33, 408, "grpSlide", NULL);
+	RegisterCommand(1, 33, 409, "grpMaskStretchBlt", NULL);
+	RegisterCommand(1, 33, 410, "grpNumber", NULL);
+	RegisterCommand(1, 33, 411, "grpMaskNumber", NULL);
+	RegisterCommand(1, 33, 500, "grpCMaskCopy", NULL);
+	RegisterCommand(1, 33, 501, "grpAnd", NULL);
+	RegisterCommand(1, 33, 502, "grpOr", NULL);
+	RegisterCommand(1, 33, 600, "grpAdd", NULL);
+	RegisterCommand(1, 33, 601, "grpMaskAdd", NULL);
+	RegisterCommand(1, 33, 620, "grpAddWithMask", NULL);
+	RegisterCommand(1, 33, 621, "grpMaskAddWithMask", NULL);
+	RegisterCommand(1, 33, 640, "grpAddInvMask", NULL);
+	RegisterCommand(1, 33, 641, "grpMaskAddInvMask", NULL);
+	RegisterCommand(1, 33, 700, "grpSub", NULL);
+	RegisterCommand(1, 33, 701, "grpMaskSub", NULL);
+	RegisterCommand(1, 33, 720, "grpSubWithMask", NULL);
+	RegisterCommand(1, 33, 721, "grpMaskSubWithMask", NULL);
+	RegisterCommand(1, 33, 740, "grpSubInvMask", NULL);
+	RegisterCommand(1, 33, 741, "grpMaskSubInvMask", NULL);
+	RegisterCommand(1, 33, 1050, "recLoad", NULL);
+	RegisterCommand(1, 33, 1051, "recMaskLoad", NULL);
+	RegisterCommand(1, 33, 1052, "recDisplay", NULL);
+	RegisterCommand(1, 33, 1053, "recOpenBg", (CmdImpl) &Grp::impl_grpOpen);
+	RegisterCommand(1, 33, 1054, "recMaskOpen", NULL);
+	RegisterCommand(1, 33, 1056, "recOpen", NULL);
+	RegisterCommand(1, 33, 1055, "recMulti", NULL);
+	RegisterCommand(1, 33, 1057, "recMulti", NULL);
+	RegisterCommand(1, 33, 1100, "recCopy", (CmdImpl) &Grp::impl_recCopy);
+	RegisterCommand(1, 33, 1101, "recMaskCopy", (CmdImpl) &Grp::impl_recCopy); //TODO: use source's alpha
+	RegisterCommand(1, 33, 1102, "recMaskBlend", NULL);
+	RegisterCommand(1, 33, 1120, "recCopyWithMask", NULL);
+	RegisterCommand(1, 33, 1121, "recMaskCopyWithMask", NULL);
+	RegisterCommand(1, 33, 1140, "recCopyInvMask", NULL);
+	RegisterCommand(1, 33, 1141, "recMaskCopyInvMask", NULL);
+	RegisterCommand(1, 33, 1160, "recRotate", NULL);
+	RegisterCommand(1, 33, 1161, "recMaskRotate", NULL);
+	RegisterCommand(1, 33, 1162, "recRotateAdd", NULL);
+	RegisterCommand(1, 33, 1163, "recMaskRotateAdd", NULL);
+	RegisterCommand(1, 33, 1164, "recRotateSub", NULL);
+	RegisterCommand(1, 33, 1165, "recMaskRotateSub", NULL);
+	RegisterCommand(1, 33, 1200, "recOutline", NULL);
+	RegisterCommand(1, 33, 1201, "recFill", (CmdImpl) &Grp::impl_recFill);
+	RegisterCommand(1, 33, 1300, "recInvert", NULL);
+	RegisterCommand(1, 33, 1301, "recMono", NULL);
+	RegisterCommand(1, 33, 1302, "recColour", NULL);
+	RegisterCommand(1, 33, 1303, "recLight", NULL);
+	RegisterCommand(1, 33, 1400, "recSwap", NULL);
+	RegisterCommand(1, 33, 1401, "recStretchBlt", (CmdImpl) &Grp::impl_recCopy);
+	RegisterCommand(1, 33, 1402, "recZoom", NULL);
+	RegisterCommand(1, 33, 1403, "recFade", NULL);
+	RegisterCommand(1, 33, 1404, "recFlash", NULL);
+	RegisterCommand(1, 33, 1406, "recPan", NULL);
+	RegisterCommand(1, 33, 1407, "recShift", NULL);
+	RegisterCommand(1, 33, 1408, "recSlide", NULL);
+	RegisterCommand(1, 33, 1409, "recMaskStretchBlt", NULL);
+	RegisterCommand(1, 33, 1500, "recCMaskCopy", NULL);
+	RegisterCommand(1, 33, 1501, "recAnd", NULL);
+	RegisterCommand(1, 33, 1502, "recOr", NULL);
+	RegisterCommand(1, 33, 1600, "recAdd", (CmdImpl) &Grp::impl_recAdd);
+	RegisterCommand(1, 33, 1601, "recMaskAdd", NULL);
+	RegisterCommand(1, 33, 1620, "recAddWithMask", NULL);
+	RegisterCommand(1, 33, 1621, "recMaskAddWithMask", NULL);
+	RegisterCommand(1, 33, 1640, "recAddInvMask", NULL);
+	RegisterCommand(1, 33, 1641, "recMaskAddInvMask", NULL);
+	RegisterCommand(1, 33, 1700, "recSub", NULL);
+	RegisterCommand(1, 33, 1701, "recMaskSub", NULL);
+	RegisterCommand(1, 33, 1720, "recSubWithMask", NULL);
+	RegisterCommand(1, 33, 1721, "recMaskSubWithMask", NULL);
+	RegisterCommand(1, 33, 1740, "recSubInvMask", NULL);
+	RegisterCommand(1, 33, 1741, "recMaskSubInvMask", NULL);
+
+	// SerialPDT
+	RegisterCommand(1, 34, 2100, "snmPlay", (CmdImpl) &Grp::impl_snmPlay);
+	RegisterCommand(1, 34, 2101, "snmPlayEx", (CmdImpl) &Grp::impl_snmPlay);
+	RegisterCommand(1, 34, 2102, "snmLoop", NULL);
+	RegisterCommand(1, 34, 2103, "snmPlayCmp", NULL);
+	RegisterCommand(1, 34, 2104, "snmPlayCmpEx", NULL);
+	RegisterCommand(1, 34, 2105, "snmLoopCmp", NULL);
+	RegisterCommand(1, 34, 2106, "snmPlayNc", NULL);
+	RegisterCommand(1, 34, 2107, "snmPlayNcEx", NULL);
+	RegisterCommand(1, 34, 2108, "snmLoopNc", NULL);
+	RegisterCommand(1, 34, 2109, "??? (undocumented)", NULL);
+	RegisterCommand(1, 34, 2110, "snmStretch", NULL);
+	RegisterCommand(1, 34, 2111, "snmStretchEx", NULL);
+	RegisterCommand(1, 34, 2112, "snmStretchLoop", NULL);
+	RegisterCommand(1, 34, 2113, "snmStretchCmp", NULL);
+	RegisterCommand(1, 34, 2114, "snmStretchCmpEx", NULL);
+	RegisterCommand(1, 34, 2115, "snmStretchLoopCmp", NULL);
+	RegisterCommand(1, 34, 2116, "snmStretchNc", NULL);
+	RegisterCommand(1, 34, 2117, "snmStretchNcEx", NULL);
+	RegisterCommand(1, 34, 2118, "snmStretchLoopNc", NULL);
+	RegisterCommand(1, 34, 2119, "??? (undocumented)", NULL);
+	RegisterCommand(1, 34, 2120, "snmScroll", NULL);
+	RegisterCommand(1, 34, 2121, "snmScrollEx", NULL);
+	RegisterCommand(1, 34, 2122, "snmScrollLoop", NULL);
+
+	RegisterCommand(1, 34, 3100, "snmBgPlay", (CmdImpl) &Grp::impl_snmPlay);
+	RegisterCommand(1, 34, 3101, "snmBgPlayEx", NULL);
+	RegisterCommand(1, 34, 3102, "snmBgLoop", NULL);
+	RegisterCommand(1, 34, 3103, "snmBgPlayCmp", NULL);
+	RegisterCommand(1, 34, 3104, "snmBgPlayCmpEx", NULL);
+	RegisterCommand(1, 34, 3105, "snmBgLoopCmp", NULL);
+	RegisterCommand(1, 34, 3106, "snmBgPlayNc", NULL);
+	RegisterCommand(1, 34, 3107, "snmBgPlayNcEx", NULL);
+	RegisterCommand(1, 34, 3108, "snmBgLoopNc", NULL);
+	RegisterCommand(1, 34, 3109, "??? (undocumented)", NULL);
+	RegisterCommand(1, 34, 3110, "snmBgStretch", NULL);
+	RegisterCommand(1, 34, 3111, "snmBgStretchEx", NULL);
+	RegisterCommand(1, 34, 3112, "snmBgStretchLoop", NULL);
+	RegisterCommand(1, 34, 3113, "snmBgStretchCmp", NULL);
+	RegisterCommand(1, 34, 3114, "snmBgStretchCmpEx", NULL);
+	RegisterCommand(1, 34, 3115, "snmBgStretchLoopCmp", NULL);
+	RegisterCommand(1, 34, 3116, "snmBgStretchNc", NULL);
+	RegisterCommand(1, 34, 3117, "snmBgStretchNcEx", NULL);
+	RegisterCommand(1, 34, 3118, "snmBgStretchLoopNc", NULL);
+	RegisterCommand(1, 34, 3119, "??? (undocumented)", NULL);
+	RegisterCommand(1, 34, 3120, "snmBgScroll", (CmdImpl) &Grp::impl_snmBgScroll);
+	RegisterCommand(1, 34, 3121, "snmBgScrollEx", NULL);
+	RegisterCommand(1, 34, 3122, "snmBgScrollLoop", NULL);
+
+	// Obj
+	RegisterCommand(1, 60, 2, "objCopyFgToBg", NULL);
+
+	RegisterCommand(1, 61, 2, "objCopy", NULL);
+	RegisterCommand(1, 61, 3, "objCopyToBg", NULL);
+	RegisterCommand(1, 61, 4, "objWipeCopyOn", NULL);
+	RegisterCommand(1, 61, 5, "objWipeCopyOff", NULL);
 	RegisterCommand(1, 61, 10, "objClear", (CmdImpl) &Grp::impl_objClear);
 	RegisterCommand(1, 61, 11, "objDelete", (CmdImpl) &Grp::impl_objClear);
+	RegisterCommand(1, 61, 14, "objSwap ??? (undocumented)", NULL);
 
+	// ObjBg
+	RegisterCommand(1, 62, 2, "objBgCopyToFg", NULL);
+	RegisterCommand(1, 62, 3, "objBgCopy", NULL);
+	RegisterCommand(1, 62, 4, "objBgWipeCopyOn", NULL);
+	RegisterCommand(1, 62, 5, "objBgWipeCopyOff", NULL);
+	RegisterCommand(1, 62, 10, "objBgClear", (CmdImpl) &Grp::impl_objClear);
+	RegisterCommand(1, 62, 11, "objBgDelete", (CmdImpl) &Grp::impl_objClear);
+	RegisterCommand(1, 62, 14, "objSwap ??? (undocumented)", NULL);
+
+	// Obj
 	RegisterCommand(1, 71, 1000, "objOfFile", (CmdImpl) &Grp::impl_createObj);
-	RegisterCommand(1, 71, 1003, "objOfFileGan", (CmdImpl) &Grp::impl_createObj);
+	RegisterCommand(1, 71, 1001, "objOfFile2", (CmdImpl) &Grp::impl_createObj);
+	RegisterCommand(1, 71, 1002, "objOfFile3", (CmdImpl) &Grp::impl_createObj);
+	RegisterCommand(1, 71, 1003, "objOfFileGan/Anm", (CmdImpl) &Grp::impl_createObj);
 	RegisterCommand(1, 71, 1100, "objOfArea", (CmdImpl) &Grp::impl_createObj);
+	RegisterCommand(1, 71, 1101, "objOfRect", NULL);
 	RegisterCommand(1, 71, 1200, "objOfText", (CmdImpl) &Grp::impl_createObj);
-	RegisterCommand(1, 71, 1300, "objDriftOfFile", (CmdImpl) &Grp::impl_createObj);
+	RegisterCommand(1, 71, 1300, "objDriftOfFile", NULL);
 	RegisterCommand(1, 71, 1400, "objOfDigits", (CmdImpl) &Grp::impl_createObj);
 
 	RegisterCommand(2, 71, 1000, "subObjOfFile", (CmdImpl) &Grp::impl_createObj);
+	RegisterCommand(2, 71, 1001, "subObjOfFile2", (CmdImpl) &Grp::impl_createObj);
+	RegisterCommand(2, 71, 1002, "subObjOfFile3", (CmdImpl) &Grp::impl_createObj);
 	RegisterCommand(2, 71, 1003, "subObjOfGan", (CmdImpl) &Grp::impl_createObj);
 	RegisterCommand(2, 71, 1100, "subObjOfArea", (CmdImpl) &Grp::impl_createObj);
+	RegisterCommand(2, 71, 1101, "subObjOfRect", (CmdImpl) &Grp::impl_createObj);
 	RegisterCommand(2, 71, 1200, "subObjOfText", (CmdImpl) &Grp::impl_createObj);
-	RegisterCommand(2, 71, 1300, "subObjDriftOfFile", (CmdImpl) &Grp::impl_createObj);
+	RegisterCommand(2, 71, 1300, "subObjDriftOfFile", NULL);
 	RegisterCommand(2, 71, 1400, "subObjOfDigits", (CmdImpl) &Grp::impl_createObj);
 
+	// ObjBg
 	//I suppose it's the same thing as createObj*, but I didn't see it in action. For now, mark it unhandled.
 	RegisterCommand(1, 72, 1000, "objBgOfFile", (CmdImpl) &Grp::impl_createObj);
+	RegisterCommand(1, 72, 1001, "objBgOfFile2", NULL);
+	RegisterCommand(1, 72, 1002, "objBgOfFile3", NULL);
+	RegisterCommand(1, 72, 1003, "objBgOfFileGan/Anm", NULL);
+	RegisterCommand(1, 72, 1100, "objBgOfArea", NULL);
+	RegisterCommand(1, 72, 1101, "objBgOfRect", NULL);
+	RegisterCommand(1, 72, 1200, "objBgOfText", NULL);
+	RegisterCommand(1, 72, 1300, "objBgDriftOfFile", NULL);
+	RegisterCommand(1, 72, 1400, "objBgOfDigits", NULL);
+
+	RegisterCommand(2, 72, 1000, "objBgOfFile", NULL);
+	RegisterCommand(2, 72, 1001, "objBgOfFile2", NULL);
+	RegisterCommand(2, 72, 1002, "objBgOfFile3", NULL);
+	RegisterCommand(2, 72, 1003, "objBgOfFileGan/Anm", NULL);
+	RegisterCommand(2, 72, 1100, "objBgOfArea", NULL);
+	RegisterCommand(2, 72, 1101, "objBgOfRect", NULL);
+	RegisterCommand(2, 72, 1200, "objBgOfText", NULL);
+	RegisterCommand(2, 72, 1300, "objBgDriftOfFile", NULL);
+	RegisterCommand(2, 72, 1400, "objBgOfDigits", NULL);
+
+	/*RegisterCommand(1, 72, 1000, "objBgOfFile", (CmdImpl) &Grp::impl_createObj);
 	RegisterCommand(1, 72, 1003, "objBgOfFileGan", (CmdImpl) &Grp::impl_createObj);
 	RegisterCommand(1, 72, 1100, "objBgOfArea", (CmdImpl) &Grp::impl_createObj);
 	RegisterCommand(1, 72, 1200, "objBgOfText", (CmdImpl) &Grp::impl_createObj);
@@ -680,31 +1537,80 @@ Grp::Grp(Event::Container& _event, PicCo
 	RegisterCommand(2, 72, 1100, "subObjBgOfArea", NULL);//FIXME
 	RegisterCommand(2, 72, 1200, "subObjBgOfText", NULL);//FIXME
 	RegisterCommand(2, 72, 1300, "subObjBgDriftOfFile", NULL);//FIXME
-	RegisterCommand(2, 72, 1400, "subObjBgOfDigits", NULL);//FIXME;
+	RegisterCommand(2, 72, 1400, "subObjBgOfDigits", NULL);//FIXME;*/
 
+	// Gan
 	RegisterCommand(1, 73, 0, "ganStop?", NULL); //That's what xclannad says, but I'm not sure...
-	RegisterCommand(1, 73, 1000, "ganStop", (CmdImpl) &Grp::impl_gan); //That's what rldev says
+	RegisterCommand(1, 73, 1000, "objStop (gan)", (CmdImpl) &Grp::impl_gan); //That's what rldev says
 	RegisterCommand(1, 73, 3, "ganIsPlaying", (CmdImpl) &Grp::impl_gan);
-	RegisterCommand(1, 73, 2003, "objPlay", (CmdImpl) &Grp::impl_gan);
+
 	RegisterCommand(1, 73, 1001, "ganLoop", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 73, 1002, "ganRepeat", NULL);
 	RegisterCommand(1, 73, 1003, "ganPlay", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 73, 1004, "ganOneShotRepeat", NULL);
 	RegisterCommand(1, 73, 1005, "ganPlayOnce", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 73, 1006, "ganPlayEx", NULL);
+	RegisterCommand(1, 73, 1007, "ganPlayOnceEx", NULL);
+	RegisterCommand(1, 73, 1008, "ganPlayBlink", NULL);
+	RegisterCommand(1, 73, 1009, "ganPlayChew", NULL);
+
+	RegisterCommand(1, 73, 2001, "objLoop (gan)", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 73, 2002, "objRepeat (gan)", NULL);
+	RegisterCommand(1, 73, 2003, "objPlay (gan)", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 73, 2004, "objOneShotRepeat (gan)", NULL);
+	RegisterCommand(1, 73, 2005, "objPlayOnce (gan)", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 73, 2006, "objPlayEx (gan)", NULL);
+	RegisterCommand(1, 73, 2007, "objPlayOnceEx (gan)", NULL);
+	RegisterCommand(1, 73, 2008, "objPlayBlink (gan)", NULL);
+	RegisterCommand(1, 73, 2009, "objPlayChew (gan)", NULL);
+
 	RegisterCommand(1, 73, 3001, "ganLoop2", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 73, 3002, "ganRepeat2", NULL);
 	RegisterCommand(1, 73, 3003, "ganPlay2", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 73, 3004, "ganOneShotRepeat2", NULL);
 	RegisterCommand(1, 73, 3005, "ganPlayOnce2", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 73, 3006, "ganPlayEx2", NULL);
+	RegisterCommand(1, 73, 3007, "ganPlayOnceEx2", NULL);
+	RegisterCommand(1, 73, 3008, "ganPlayBlink2", NULL);
+	RegisterCommand(1, 73, 3009, "ganPlayChew2", NULL);
 
-	RegisterCommand(2, 73, 0, "ganSubStop?", NULL); //FIXME
-	RegisterCommand(2, 73, 1000, "ganSubStop", NULL); //FIXME
-	RegisterCommand(2, 73, 3, "ganSubIsPlaying", NULL); //FIXME
-	RegisterCommand(2, 73, 2003, "objSubPlay", NULL); //FIXME
-	RegisterCommand(2, 73, 1001, "ganSubLoop", NULL); //FIXME
-	RegisterCommand(2, 73, 1003, "ganSubPlay", NULL); //FIXME
-	RegisterCommand(2, 73, 1005, "ganSubPlayOnce", NULL); //FIXME
-	RegisterCommand(2, 73, 3001, "ganSubLoop2", (CmdImpl) &Grp::impl_gan); //FIXME
-	RegisterCommand(2, 73, 3003, "ganSubPlay2", NULL); //FIXME
-	RegisterCommand(2, 73, 3005, "ganSubPlayOnce2", NULL); //FIXME
+	// FIXME
+	RegisterCommand(2, 73, 0, "ganSubStop?", NULL);
+	RegisterCommand(2, 73, 1000, "ganSubStop", NULL);
+	RegisterCommand(2, 73, 3, "ganSubIsPlaying", NULL);
+	RegisterCommand(2, 73, 2003, "objSubPlay", NULL);
+	RegisterCommand(2, 73, 1001, "ganSubLoop", NULL);
+	RegisterCommand(2, 73, 1003, "ganSubPlay", NULL);
+	RegisterCommand(2, 73, 1005, "ganSubPlayOnce", NULL);
+	RegisterCommand(2, 73, 3001, "ganSubLoop2", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(2, 73, 3003, "ganSubPlay2", NULL);
+	RegisterCommand(2, 73, 3005, "ganSubPlayOnce2", NULL);
+
+	// GanBg
+	RegisterCommand(1, 74, 1000, "objBgStop (gan)", (CmdImpl) &Grp::impl_gan);
 
+	RegisterCommand(1, 74, 1001, "ganBgLoop", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 74, 1003, "ganBgPlay", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 74, 1005, "ganBgPlayOnce", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 74, 1006, "ganBgPlayEx", NULL);
+	RegisterCommand(1, 74, 1007, "ganBgPlayOnceEx", NULL);
+	RegisterCommand(1, 74, 1008, "ganBgPlayBlink", NULL);
 
+	RegisterCommand(1, 74, 2001, "objBgLoop (gan)", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 74, 2003, "objBgPlay (gan)", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 74, 2005, "objBgPlayOnce (gan)", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 74, 2006, "objBgPlayEx (gan)", NULL);
+	RegisterCommand(1, 74, 2007, "objBgPlayOnceEx (gan)", NULL);
+	RegisterCommand(1, 74, 2008, "objBgPlayBlink (gan)", NULL);
+
+	RegisterCommand(1, 74, 3001, "ganBgLoop2", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 74, 3003, "ganBgPlay2", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 74, 3005, "ganBgPlayOnce2", (CmdImpl) &Grp::impl_gan);
+	RegisterCommand(1, 74, 3006, "ganBgPlayEx2", NULL);
+	RegisterCommand(1, 74, 3007, "ganBgPlayOnceEx2", NULL);
+	RegisterCommand(1, 74, 3008, "ganBgPlayBlink2", NULL);
+
+	// Obj
 	RegisterCommand(1, 81, 1000, "objMove", (CmdImpl) &Grp::impl_objSetPos);
 	RegisterCommand(1, 82, 1000, "objBgMove", (CmdImpl) &Grp::impl_objSetPos);
 	RegisterCommand(1, 81, 1001, "objLeft", (CmdImpl) &Grp::impl_objSetPos);
@@ -723,8 +1629,20 @@ Grp::Grp(Event::Container& _event, PicCo
 	RegisterCommand(1, 82, 1007, "objBgAdjustX", NULL);
 	RegisterCommand(1, 81, 1008, "objAdjustY", NULL);
 	RegisterCommand(1, 82, 1008, "objBgAdjustY", NULL);
-	RegisterCommand(1, 81, 2006, "objAdjust2?", NULL); //FIXME: (CmdImpl) &Grp::impl_objSetPos); I don't know if it is usefull or properly implemented
-	RegisterCommand(1, 82, 2006, "objBgAdjust2?", NULL); //FIXME: (CmdImpl) &Grp::impl_objSetPos); See above
+	RegisterCommand(1, 81, 1009, "objMono", NULL);
+	RegisterCommand(1, 82, 1009, "objBgMono", NULL);
+	RegisterCommand(1, 81, 1010, "objInvert", NULL);
+	RegisterCommand(1, 82, 1010, "objBgInvert", NULL);
+	RegisterCommand(1, 81, 1011, "objLight", NULL);
+	RegisterCommand(1, 82, 1011, "objBgLight", NULL);
+	RegisterCommand(1, 81, 1012, "objTint", NULL);
+	RegisterCommand(1, 82, 1012, "objBgTint", NULL);
+	RegisterCommand(1, 81, 1013, "objTintR", NULL);
+	RegisterCommand(1, 82, 1013, "objBgTintR", NULL);
+	RegisterCommand(1, 81, 1014, "objTintG", NULL);
+	RegisterCommand(1, 82, 1014, "objBgTintG", NULL);
+	RegisterCommand(1, 81, 1015, "objTintB", NULL);
+	RegisterCommand(1, 82, 1015, "objBgTintB", NULL);
 	RegisterCommand(1, 81, 1016, "objColour", NULL); //FIXME: (CmdImpl) &Grp::impl_objColour);
 	RegisterCommand(1, 82, 1016, "objBgColour", NULL); //FIXME: (CmdImpl) &Grp::impl_objColour);
 	RegisterCommand(1, 81, 1017, "objColR", NULL);
@@ -741,16 +1659,40 @@ Grp::Grp(Event::Container& _event, PicCo
 	RegisterCommand(1, 82, 1024, "objBgSetText", (CmdImpl) &Grp::impl_objSetText);
 	RegisterCommand(1, 81, 1025, "objTextOpts", (CmdImpl) &Grp::impl_objTextOpts); //FIXME: Incomplete
 	RegisterCommand(1, 82, 1025, "objBgTextOpts", (CmdImpl) &Grp::impl_objTextOpts);
+	RegisterCommand(1, 81, 1026, "objLayer", NULL);
+	RegisterCommand(1, 82, 1026, "objBgLayer", NULL);
+	RegisterCommand(1, 81, 1027, "objDepth", NULL);
+	RegisterCommand(1, 82, 1027, "objBgDepth", NULL);
+	RegisterCommand(1, 81, 1028, "objScrollRate", NULL);
+	RegisterCommand(1, 82, 1028, "objBgScrollRate", NULL);
+	RegisterCommand(1, 81, 1029, "objScrollRateX", NULL);
+	RegisterCommand(1, 82, 1029, "objBgScrollRateX", NULL);
+	RegisterCommand(1, 81, 1030, "objScrollRateY", NULL);
+	RegisterCommand(1, 82, 1030, "objBgScrollRateY", NULL);
+	RegisterCommand(1, 81, 1031, "objDriftOpts", NULL); //(CmdImpl) &Grp::impl_objDriftOpts);
+	RegisterCommand(1, 82, 1031, "objBgDriftOpts", NULL);
 	RegisterCommand(1, 81, 1032, "objOrder", (CmdImpl) &Grp::impl_objOrder);
 	RegisterCommand(1, 82, 1032, "objBgOrder", (CmdImpl) &Grp::impl_objOrder);
+	RegisterCommand(1, 81, 1033, "objQuarterView", NULL);
+	RegisterCommand(1, 82, 1033, "objBgQuarterView", NULL);
 	RegisterCommand(1, 81, 1034, "objDispRect", (CmdImpl) &Grp::impl_objDispArea);
 	RegisterCommand(1, 82, 1034, "objBgDispRect", (CmdImpl) &Grp::impl_objDispArea);
+	RegisterCommand(1, 81, 1035, "objDispCorner", NULL);
+	RegisterCommand(1, 82, 1035, "objBgDispCorner", NULL);
+	RegisterCommand(1, 81, 1036, "objAdjustVert", NULL);
+	RegisterCommand(1, 82, 1036, "objBgAdjustVert", NULL);
 	RegisterCommand(1, 81, 1037, "objSetDigits", (CmdImpl) &Grp::impl_objSetDigits);
 	RegisterCommand(1, 82, 1037, "objBgSetDigits", (CmdImpl) &Grp::impl_objSetDigits);
 	RegisterCommand(1, 81, 1038, "objNumOpts", (CmdImpl) &Grp::impl_objNumOpts);
 	RegisterCommand(1, 82, 1038, "objBgNumOpts", (CmdImpl) &Grp::impl_objNumOpts);
 	RegisterCommand(1, 81, 1039, "objPattNo", (CmdImpl) &Grp::impl_objPattNo);
 	RegisterCommand(1, 82, 1039, "objBgPattNo", (CmdImpl) &Grp::impl_objPattNo);
+	RegisterCommand(1, 81, 1041, "objAdjustAll", NULL);
+	RegisterCommand(1, 82, 1041, "objBgAdjustAll", NULL);
+	RegisterCommand(1, 81, 1042, "objAdjustAllX", NULL);
+	RegisterCommand(1, 82, 1042, "objBgAdjustAllX", NULL);
+	RegisterCommand(1, 81, 1043, "objAdjustAllY", NULL);
+	RegisterCommand(1, 82, 1043, "objBgAdjustAllY", NULL);
 	RegisterCommand(1, 81, 1046, "objScale", (CmdImpl) &Grp::impl_objScale);
 	RegisterCommand(1, 82, 1046, "objBgScale", (CmdImpl) &Grp::impl_objScale);
 	RegisterCommand(1, 81, 1047, "objWidth", (CmdImpl) &Grp::impl_objWidth);
@@ -759,6 +1701,22 @@ Grp::Grp(Event::Container& _event, PicCo
 	RegisterCommand(1, 82, 1048, "objBgHeight", (CmdImpl) &Grp::impl_objHeight);
 	RegisterCommand(1, 81, 1049, "objRotate", (CmdImpl) &Grp::impl_objRotate);
 	RegisterCommand(1, 82, 1049, "objBgRotate", (CmdImpl) &Grp::impl_objRotate);
+	RegisterCommand(1, 81, 1050, "objRepOrigin", NULL);
+	RegisterCommand(1, 82, 1050, "objBgRepOrigin", NULL);
+	RegisterCommand(1, 81, 1051, "objRepOriginX", NULL);
+	RegisterCommand(1, 82, 1051, "objBgRepOriginX", NULL);
+	RegisterCommand(1, 81, 1052, "objRepOriginY", NULL);
+	RegisterCommand(1, 82, 1052, "objBgRepOriginY", NULL);
+	RegisterCommand(1, 81, 1053, "objOrigin", NULL);
+	RegisterCommand(1, 82, 1053, "objBgOrigin", NULL);
+	RegisterCommand(1, 81, 1054, "objOriginX", NULL);
+	RegisterCommand(1, 82, 1054, "objBgOriginX", NULL);
+	RegisterCommand(1, 81, 1055, "objOriginY", NULL);
+	RegisterCommand(1, 82, 1055, "objBgOriginY", NULL);
+	RegisterCommand(1, 81, 1056, "objFadeOpts", NULL);
+	RegisterCommand(1, 82, 1056, "objBgFadeOpts", NULL);
+	RegisterCommand(1, 81, 2006, "objAdjust2?", NULL); //FIXME: (CmdImpl) &Grp::impl_objSetPos); I don't know if it is usefull or properly implemented
+	RegisterCommand(1, 82, 2006, "objBgAdjust2?", NULL); //FIXME: (CmdImpl) &Grp::impl_objSetPos); See above
 
 	RegisterCommand(2, 81, 1000, "childObjMove", (CmdImpl) &Grp::impl_objSetPos);
 	RegisterCommand(2, 82, 1000, "childObjBgMove", (CmdImpl) &Grp::impl_objSetPos);
@@ -813,55 +1771,121 @@ Grp::Grp(Event::Container& _event, PicCo
 	RegisterCommand(2, 81, 1049, "childObjRotate", NULL);
 	RegisterCommand(2, 82, 1049, "childObjBgRotate", NULL);
 
+	// Obj
 	RegisterCommand(1, 84, 1000, "objGetPos", (CmdImpl) &Grp::impl_objPosDims);
 	RegisterCommand(1, 84, 1100, "objGetDims", (CmdImpl) &Grp::impl_objPosDims);
 
 	RegisterCommand(2, 84, 1000, "childObjGetPos", (CmdImpl) &Grp::impl_objPosDims);
 	RegisterCommand(2, 84, 1100, "childObjGetDims", (CmdImpl) &Grp::impl_objPosDims);
 
-	RegisterCommand(1, 31, 0, "refresh", (CmdImpl) &Grp::impl_refresh);
-
-	RegisterCommand(1, 20, 0, "bgmLoop", (CmdImpl) &Grp::impl_bgmLoop);
-	RegisterCommand(1, 20, 1, "bgmPlayEx", (CmdImpl) &Grp::impl_bgmLoop); //FIXME: wait
-	RegisterCommand(1, 20, 2, "bgmPlay", (CmdImpl) &Grp::impl_bgmLoop);
-	RegisterCommand(1, 20, 5, "bgmStop", (CmdImpl) &Grp::impl_bgmStop);
-	RegisterCommand(1, 20, 105, "bgmFadeOut", (CmdImpl) &Grp::impl_bgmStop);
-
-	RegisterCommand(1, 21, 0, "wavPlay", (CmdImpl) &Grp::impl_playWav);
-	RegisterCommand(1, 21, 1, "wavPlayEx", (CmdImpl) &Grp::impl_playWav);
-	RegisterCommand(1, 21, 2, "wavLoop", (CmdImpl) &Grp::impl_playWav);
-	RegisterCommand(1, 21, 3, "wavWait", NULL);
-	RegisterCommand(1, 21, 4, "wavPlaying", NULL);
-	RegisterCommand(1, 21, 5, "wavStop", (CmdImpl) &Grp::impl_stopWav);
-	RegisterCommand(1, 21, 105, "wavFadeout", (CmdImpl) &Grp::impl_stopWav);
-
-	RegisterCommand(1, 22, 0, "sePlay", (CmdImpl) &Grp::impl_playSE);
+	// ObjRange
+	RegisterCommand(1, 90, 1000, "objRangeMove", NULL);
+	RegisterCommand(1, 91, 1000, "objBgRangeMove", NULL);
+	RegisterCommand(1, 90, 1001, "objRangeLeft", NULL);
+	RegisterCommand(1, 91, 1001, "objBgRangeLeft", NULL);
+	RegisterCommand(1, 90, 1002, "objRangeTop", NULL);
+	RegisterCommand(1, 91, 1002, "objBgRangeTop", NULL);
+	RegisterCommand(1, 90, 1003, "objRangeAlpha", NULL);
+	RegisterCommand(1, 91, 1003, "objBgRangeAlpha", NULL);
+	RegisterCommand(1, 90, 1004, "objRangeShow", NULL);
+	RegisterCommand(1, 91, 1004, "objBgRangeShow", NULL);
+	RegisterCommand(1, 90, 1005, "objRangeDispArea", NULL);
+	RegisterCommand(1, 91, 1005, "objBgRangeDispArea", NULL);
+	RegisterCommand(1, 90, 1006, "objRangeAdjust", NULL);
+	RegisterCommand(1, 91, 1006, "objBgRangeAdjust", NULL);
+	RegisterCommand(1, 90, 1007, "objRangeAdjustX", NULL);
+	RegisterCommand(1, 91, 1007, "objBgRangeAdjustX", NULL);
+	RegisterCommand(1, 90, 1008, "objRangeAdjustY", NULL);
+	RegisterCommand(1, 91, 1008, "objBgRangeAdjustY", NULL);
+	RegisterCommand(1, 90, 1009, "objRangeMono", NULL);
+	RegisterCommand(1, 91, 1009, "objBgRangeMono", NULL);
+	RegisterCommand(1, 90, 1010, "objRangeInvert", NULL);
+	RegisterCommand(1, 91, 1010, "objBgRangeInvert", NULL);
+	RegisterCommand(1, 90, 1011, "objRangeLight", NULL);
+	RegisterCommand(1, 91, 1011, "objBgRangeLight", NULL);
+	RegisterCommand(1, 90, 1012, "objRangeTint", NULL);
+	RegisterCommand(1, 91, 1012, "objBgRangeTint", NULL);
+	RegisterCommand(1, 90, 1013, "objRangeTintR", NULL);
+	RegisterCommand(1, 91, 1013, "objBgRangeTintR", NULL);
+	RegisterCommand(1, 90, 1014, "objRangeTintG", NULL);
+	RegisterCommand(1, 91, 1014, "objBgRangeTintG", NULL);
+	RegisterCommand(1, 90, 1015, "objRangeTintB", NULL);
+	RegisterCommand(1, 91, 1015, "objBgRangeTintB", NULL);
+	RegisterCommand(1, 90, 1016, "objRangeColour", NULL);
+	RegisterCommand(1, 91, 1016, "objBgRangeColour", NULL);
+	RegisterCommand(1, 90, 1017, "objRangeColR", NULL);
+	RegisterCommand(1, 91, 1017, "objBgRangeColR", NULL);
+	RegisterCommand(1, 90, 1018, "objRangeColG", NULL);
+	RegisterCommand(1, 91, 1018, "objBgRangeColG", NULL);
+	RegisterCommand(1, 90, 1019, "objRangeColB", NULL);
+	RegisterCommand(1, 91, 1019, "objBgRangeColB", NULL);
+	RegisterCommand(1, 90, 1020, "objRangeColLevel", NULL);
+	RegisterCommand(1, 91, 1020, "objBgRangeColLevel", NULL);
+	RegisterCommand(1, 90, 1021, "objRangeComposite", NULL);
+	RegisterCommand(1, 91, 1021, "objBgRangeComposite", NULL);
+	RegisterCommand(1, 90, 1024, "objRangeSetText", NULL);
+	RegisterCommand(1, 91, 1024, "objBgRangeSetText", NULL);
+	RegisterCommand(1, 90, 1025, "objRangeTextOpts", NULL);
+	RegisterCommand(1, 91, 1025, "objBgRangeTextOpts", NULL);
+	RegisterCommand(1, 90, 1026, "objRangeLayer", NULL);
+	RegisterCommand(1, 91, 1026, "objBgRangeLayer", NULL);
+	RegisterCommand(1, 90, 1027, "objRangeDepth", NULL);
+	RegisterCommand(1, 91, 1027, "objBgRangeDepth", NULL);
+	RegisterCommand(1, 90, 1028, "objRangeScrollRate", NULL);
+	RegisterCommand(1, 91, 1028, "objBgRangeScrollRate", NULL);
+	RegisterCommand(1, 90, 1029, "objRangeScrollRateX", NULL);
+	RegisterCommand(1, 91, 1029, "objBgRangeScrollRateX", NULL);
+	RegisterCommand(1, 90, 1030, "objRangeScrollRateY", NULL);
+	RegisterCommand(1, 91, 1030, "objBgRangeScrollRateY", NULL);
+	RegisterCommand(1, 90, 1031, "objRangeDriftOpts", NULL);
+	RegisterCommand(1, 91, 1031, "objBgRangeDriftOpts", NULL);
+	RegisterCommand(1, 90, 1032, "objRangeOrder", NULL);
+	RegisterCommand(1, 91, 1032, "objBgRangeOrder", NULL);
+	RegisterCommand(1, 90, 1033, "objRangeQuarterView", NULL);
+	RegisterCommand(1, 91, 1033, "objBgRangeQuarterView", NULL);
+	RegisterCommand(1, 90, 1034, "objRangeDispRect", NULL);
+	RegisterCommand(1, 91, 1034, "objBgRangeDispRect", NULL);
+	RegisterCommand(1, 90, 1035, "objRangeDispCorner", NULL);
+	RegisterCommand(1, 91, 1035, "objBgRangeDispCorner", NULL);
+	RegisterCommand(1, 90, 1036, "objRangeAdjustVert", NULL);
+	RegisterCommand(1, 91, 1036, "objBgRangeAdjustVert", NULL);
+	RegisterCommand(1, 90, 1037, "objRangeSetDigits", NULL);
+	RegisterCommand(1, 91, 1037, "objBgRangeSetDigits", NULL);
+	RegisterCommand(1, 90, 1038, "objRangeNumOpts", NULL);
+	RegisterCommand(1, 91, 1038, "objBgRangeNumOpts", NULL);
+	RegisterCommand(1, 90, 1039, "objRangePattNo", NULL);
+	RegisterCommand(1, 91, 1039, "objBgRangePattNo", NULL);
+	RegisterCommand(1, 90, 1041, "objRangeAdjustAll", NULL);
+	RegisterCommand(1, 91, 1041, "objBgRangeAdjustAll", NULL);
+	RegisterCommand(1, 90, 1042, "objRangeAdjustAllX", NULL);
+	RegisterCommand(1, 91, 1042, "objBgRangeAdjustAllX", NULL);
+	RegisterCommand(1, 90, 1043, "objRangeAdjustAllY", NULL);
+	RegisterCommand(1, 91, 1043, "objBgRangeAdjustAllY", NULL);
+	RegisterCommand(1, 90, 1046, "objRangeScale", NULL);
+	RegisterCommand(1, 91, 1046, "objBgRangeScale", NULL);
+	RegisterCommand(1, 90, 1047, "objRangeWidth", NULL);
+	RegisterCommand(1, 91, 1047, "objBgRangeWidth", NULL);
+	RegisterCommand(1, 90, 1048, "objRangeHeight", NULL);
+	RegisterCommand(1, 91, 1048, "objBgRangeHeight", NULL);
+	RegisterCommand(1, 90, 1049, "objRangeRotate", NULL);
+	RegisterCommand(1, 91, 1049, "objBgRangeRotate", NULL);
+	RegisterCommand(1, 90, 1050, "objRangeRepOrigin", NULL);
+	RegisterCommand(1, 91, 1050, "objBgRangeRepOrigin", NULL);
+	RegisterCommand(1, 90, 1051, "objRangeRepOriginX", NULL);
+	RegisterCommand(1, 91, 1051, "objBgRangeRepOriginX", NULL);
+	RegisterCommand(1, 90, 1052, "objRangeRepOriginY", NULL);
+	RegisterCommand(1, 91, 1052, "objBgRangeRepOriginY", NULL);
+	RegisterCommand(1, 90, 1053, "objRangeOrigin", NULL);
+	RegisterCommand(1, 91, 1053, "objBgRangeOrigin", NULL);
+	RegisterCommand(1, 90, 1054, "objRangeOriginX", NULL);
+	RegisterCommand(1, 91, 1054, "objBgRangeOriginX", NULL);
+	RegisterCommand(1, 90, 1055, "objRangeOriginY", NULL);
+	RegisterCommand(1, 91, 1055, "objBgRangeOriginY", NULL);
+	RegisterCommand(1, 90, 1056, "objRangeFadeOpts", NULL);
+	RegisterCommand(1, 91, 1056, "objBgRangeFadeOpts", NULL);
 
-	RegisterCommand(1, 4, 2230, "SetBgmVolMod", (CmdImpl) &Grp::impl_SetVolMod);
-	RegisterCommand(1, 4, 2231, "SetKoeVolMod", (CmdImpl) &Grp::impl_SetVolMod);
-	RegisterCommand(1, 4, 2232, "SetPCMVolMod", (CmdImpl) &Grp::impl_SetVolMod);
-	RegisterCommand(1, 4, 2233, "SetSeVolMod", (CmdImpl) &Grp::impl_SetVolMod);
-	RegisterCommand(1, 4, 2330, "BgmVolMod", (CmdImpl) &Grp::impl_GetVolMod);
-	RegisterCommand(1, 4, 2331, "KoeVolMod", (CmdImpl) &Grp::impl_GetVolMod);
-	RegisterCommand(1, 4, 2332, "PCMVolMod", (CmdImpl) &Grp::impl_GetVolMod);
-	RegisterCommand(1, 4, 2333, "SeVolMod", (CmdImpl) &Grp::impl_GetVolMod);
-
-	RegisterCommand(1, 23, 0, "koePlay", (CmdImpl) &Grp::impl_koePlay);
-	RegisterCommand(1, 23, 1, "koePlayEx", (CmdImpl) &Grp::impl_koePlay); //FIXME
-	RegisterCommand(1, 23, 7, "koePlayExC", (CmdImpl) &Grp::impl_koePlay); //FIXME
-	RegisterCommand(1, 23, 8, "koeDoPlay", (CmdImpl) &Grp::impl_koePlay); //FIXME
-	RegisterCommand(1, 23, 9, "koeDoPlayEx", (CmdImpl) &Grp::impl_koePlay); //FIXME
-	RegisterCommand(1, 23, 10, "koeDoPlayExC", (CmdImpl) &Grp::impl_koePlay); //FIXME
-
-	RegisterCommand(1, 26, 1, "movPlayEx", (CmdImpl) &Grp::impl_movPlay);
-	RegisterCommand(1, 26, 20, "movPlayExC", (CmdImpl) &Grp::impl_movPlay);
-
-	RegisterCommand(1, 61, 14, "objSwap?", NULL);
-	RegisterCommand(1, 62, 14, "objSwap?", NULL);
-
-	RegisterCommand(1, 4, 1211, "EnableSyscom", NULL);
-	RegisterCommand(1, 4, 1212, "HideSyscom", NULL);
-	RegisterCommand(1, 4, 1213, "DisableSyscom", NULL);
+	RegisterCommand(1, 255, 50, "??? (Clannad)", NULL);
+	RegisterCommand(1, 255, 101, "__SaveBufferIdx", NULL);
 
 	anm1 = NULL;
 	anm2 = NULL;