Changeset 55:f1a27ee7e03c
- Timestamp:
- 04/22/09 17:01:42 (3 years ago)
- Branch:
- default
- convert_revision:
- svn:d0a2da98-017c-47d2-8c43-22b54484806d/trunk@56
- Location:
- scn2k
- Files:
-
- 4 modified
-
command_handler.cc (modified) (1 diff)
-
scn2k.h (modified) (1 diff)
-
scn2k_grp.cc (modified) (44 diffs)
-
scn2k_text.cc (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
scn2k/command_handler.cc
r54 r55 54 54 } 55 55 56 void CommandHandler::PrintCmd(Cmd& cmd) 57 { 58 CommandMap::iterator it; 59 it = command_map.find(cmd); 60 61 fprintf(stderr, "%d - %d : ", cmd.scn, cmd.pos); 62 if (it == command_map.end()) 63 fprintf(stderr, "%02d:%02d:%04d", cmd.cmd1, cmd.cmd2, cmd.cmd3); 64 else 65 fprintf(stderr, "%s", it->second.descr); 66 fprintf(stderr, "[%d] (", cmd.cmd4); 67 int i; 68 for (i=0; i<cmd.args.size(); i++) { 69 VarInfo info = cmd.args[i]; 70 if (info.type == TYPE_STR || info.type == TYPE_VARSTR) 71 fprintf(stderr, "\"%s\"", cmd.Str(info)); 72 else 73 fprintf(stderr, "%d", info.value); 74 if (i < cmd.args.size()-1) 75 fprintf(stderr, ", "); 76 } 77 fprintf(stderr,");\n"); 78 } 79 56 80 bool CommandHandler::Exec(Cmd &cmd) { 57 81 CommandMap::iterator it; -
scn2k/scn2k.h
r54 r55 226 226 void RegisterCommand(int cmd1, int cmd2, int cmd3, const char* descr, CmdImpl func); 227 227 bool Exec(Cmd& cmd); 228 void PrintCmd(Cmd& cmd); 228 229 229 230 private: -
scn2k/scn2k_grp.cc
r54 r55 54 54 }; 55 55 56 struct GrpObj; 57 typedef std::map<int, GrpObj> GrpObjMap; 58 56 59 struct GrpObj { 57 60 string name; … … 67 70 int surface_num; 68 71 72 GrpObjMap children_obj; 73 69 74 string print_moji; 70 75 int print_size, print_r, print_b, print_g; … … 78 83 vector<Rect> src_pos; 79 84 enum GrpType { FILLRECT = 1, FILE = 2, GAN = 3, MOJI = 4, DIGIT = 5} gtype; 80 enum Attribute { NONE=0, WIPEON=1, SATURATE=2, HIDDEN=4, HIDDEN_GROUP=8,85 enum Attribute { NONE=0, WIPEON=1, SATURATE=2, HIDDEN=4, 81 86 UPDATE_PICTURE = 16, UPDATE_POS = 32, UPDATE_ALPHA = 64, UPDATE_SNUM = 128, UPDATE_CLIP = 256, UPDATE_VISIBLE = 512, 82 UPDATE_ALL = ( 16|32|64|128|256|512),87 UPDATE_ALL = (UPDATE_PICTURE | UPDATE_POS | UPDATE_ALPHA | UPDATE_SNUM | UPDATE_CLIP | UPDATE_VISIBLE), 83 88 ANM_PLAYSTART = 0x8000, ANM_PLAYING = 0x10000, 84 89 DIG_ZERO = 0x10000*2, DIG_SIGN = 0x10000*4, DIG_PACK=0x10000*8,DIG_SPACE=0x10000*16 85 90 }; 86 91 Attribute attr; 87 88 GrpImpl* parent_pimpl;89 92 90 93 GrpObj(void); … … 106 109 void UpdateSurface(void); 107 110 void ZoomRotate(void); 111 void Refresh(GrpObj& parent_obj); 112 void _debug_Dump(int, int); 108 113 void Update(void); 109 114 void CreateSurface(PicContainer* parent); … … 117 122 */ 118 123 119 120 struct GrpObjMap : std::map<int, GrpObj> {121 typedef pair<const int, GrpObj> value_type;122 class GrpImpl* parent;123 GrpObj& operator[](const int& k) {124 iterator it = lower_bound(k);125 if (it == end() || it->first != k) {126 GrpObj obj;127 obj.parent_pimpl = parent;128 it = insert(it, value_type(k, obj));129 }130 return it->second;131 }132 GrpObjMap(class GrpImpl* p) {133 parent = p;134 }135 };136 137 124 class GrpImpl : public CommandHandler { 138 125 #define MAXPDT 256 … … 140 127 private: 141 128 void CreateObj(int number); 129 void CreateSubObj(int grp_num, int number); 142 130 void ZMoveObj(int number); 143 131 void SetObjChanged(int number); 144 132 void SwapObj(int a1, int a2); 145 133 void DeleteObjPic(int num);// object €Î surface €Î€ßºïœü 134 void DeleteSubObjPic(int grp_num, int num); 146 135 void DeleteObj(int num); 136 void DeleteSubObj(int grp_num, int num); 147 137 void RefreshObj(void); 148 138 … … 175 165 void AbortAnm(void); 176 166 static bool Pressed(int x, int y, void* pointer); 167 168 GrpObj* GetGraphicObj(int grp, bool fg=true); 169 GrpObj* GetGraphicObj(int grp, int index, bool fg=true); 170 GrpObj* GetGraphicObjVarMode(Cmd& cmd, int &base_arg, bool fg=true); 177 171 178 172 // Opcode handling … … 264 258 alpha(255), order(0), surface_num(0), print_moji(""), print_size(0), print_r(-1),print_g(-1),print_b(-1), 265 259 dig_number(0), dig_digit(0), 266 zoom(-1), rotate(-1), attr(GrpObj::HIDDEN) , parent_pimpl(NULL){260 zoom(-1), rotate(-1), attr(GrpObj::HIDDEN) { 267 261 int i; 268 262 for (i=0; i<9; i++) { … … 272 266 273 267 GrpObj::~GrpObj() { 274 if (picture) delete picture; 275 if (parent_pimpl == NULL) { 276 fprintf(stderr,"\n**************\nFATAL : UNINITIALIZED GrpObj IS FOUND!!! \n**************\n"); 277 } 268 if (picture != NULL) delete picture; 278 269 } 279 270 … … 312 303 x = posx[index]; 313 304 y = posy[index]; 314 return;315 305 } 316 306 … … 328 318 } 329 319 attr = Attribute(attr | UPDATE_SNUM); 330 return;331 320 } 332 321 … … 336 325 clip_area = new_clip; 337 326 attr = Attribute(attr | UPDATE_CLIP); 338 return;339 327 } 340 328 341 329 PicBase* GrpObj::DeletePic(void) { 342 330 PicBase* p = picture; 343 anm = 0;344 picture = 0;331 anm = NULL; 332 picture = NULL; 345 333 src_pos.clear(); 346 attr = Attribute(attr & (HIDDEN | HIDDEN_GROUP));334 attr = Attribute(attr & HIDDEN); 347 335 return p; 348 336 } … … 387 375 width = src_pos[sn].width(); 388 376 height = src_pos[sn].height(); 389 return;390 377 } 391 378 … … 395 382 attr = Attribute( (attr | UPDATE_ALL) & (~UPDATE_PICTURE)); 396 383 } 397 if (picture == 0) return;384 if (picture == NULL) return; 398 385 if (attr & UPDATE_POS) { 399 386 if ( (attr & SATURATE) || zoom != -1) { … … 710 697 attr = Attribute(attr | UPDATE_PICTURE); 711 698 } 699 700 void GrpObj::Refresh(GrpObj& parent_obj) { 701 //if (&parent_obj != this) printf("Toto\n"); //FIXME 702 703 GrpObjMap::iterator it; 704 705 for (it = children_obj.begin(); it != children_obj.end(); it++) 706 it->second.Refresh(parent_obj); 707 708 if (picture == NULL) return; 709 if (alpha == 0 || (attr & GrpObj::HIDDEN) || (parent_obj.attr & GrpObj::HIDDEN)) { 710 if (attr & GrpObj::ANM_PLAYING) { 711 attr = GrpObj::Attribute(attr & ~(GrpObj::ANM_PLAYING)); 712 if (anm != NULL) anm->Abort(); 713 } 714 picture->hide(); 715 } else { 716 Update(); 717 picture->show(); 718 } 719 } 720 721 void GrpObj::_debug_Dump(int id, int indent) 722 { 723 const char* repr; 724 725 if (indent == 0) 726 repr = "obj %04d(%p): name %10s pos %d,%d alpha %d (%d/%d/%d)\n"; 727 else 728 repr = " * obj %04d(%p): name %10s pos %d,%d alpha %d (%d/%d/%d)\n"; 729 730 if (picture != NULL) { 731 if (!name.empty()) 732 fprintf(stderr, repr, 733 id, this, name.c_str(), PosX(), PosY(), alpha, attr&GrpObj::HIDDEN ? 1 : 0, 0, 734 picture->IsHidden()); 735 else if (!print_moji.empty()) 736 fprintf(stderr, repr, 737 id, this, print_moji.c_str(), PosX(), PosY(), alpha, attr&GrpObj::HIDDEN ? 1 : 0, 738 0, picture->IsHidden()); 739 else 740 fprintf(stderr, repr, 741 id, this, "<EMPTY>", PosX(), PosY(), alpha, attr&GrpObj::HIDDEN ? 1 : 0, 0, 742 picture->IsHidden()); 743 } 744 745 GrpObjMap::iterator it; 746 for (it = children_obj.begin(); it != children_obj.end(); it++) 747 it->second._debug_Dump(it->first, indent+1); 748 } 749 712 750 /****************************************************************** 713 751 ** … … 800 838 status(NORMAL), 801 839 skip_mode(SKIP_NO), 802 cgm_data(_cgm_data), 803 grpobj(this), 804 bs_obj(this) 840 cgm_data(_cgm_data) 805 841 { 806 842 int i; … … 835 871 RegisterCommand(1, 33, 1201, "recFill", (CmdImpl) &GrpImpl::impl_recFill); 836 872 RegisterCommand(1, 33, 1100, "recCopy", (CmdImpl) &GrpImpl::impl_recCopy); 873 RegisterCommand(1, 33, 1101, "recMaskCopy", NULL); //FIXME 837 874 RegisterCommand(1, 33, 1600, "recAdd", (CmdImpl) &GrpImpl::impl_recAdd); 838 875 RegisterCommand(1, 33, 406, "grpPan", (CmdImpl) &GrpImpl::impl_grpPan); … … 861 898 RegisterCommand(1, 71, 1300, "createObjWeaver", (CmdImpl) &GrpImpl::impl_createObj); 862 899 RegisterCommand(1, 71, 1400, "createObjDigit", (CmdImpl) &GrpImpl::impl_createObj); 900 901 RegisterCommand(2, 71, 1000, "createSubObjG00", (CmdImpl) &GrpImpl::impl_createObj); 902 RegisterCommand(2, 71, 1003, "createSubObjGAN", (CmdImpl) &GrpImpl::impl_createObj); 903 RegisterCommand(2, 71, 1100, "createSubObjRect", (CmdImpl) &GrpImpl::impl_createObj); 904 RegisterCommand(2, 71, 1200, "createSubObjText", (CmdImpl) &GrpImpl::impl_createObj); 905 RegisterCommand(2, 71, 1300, "createSubObjWeaver", (CmdImpl) &GrpImpl::impl_createObj); 906 RegisterCommand(2, 71, 1400, "createSubObjDigit", (CmdImpl) &GrpImpl::impl_createObj); 863 907 864 908 //I suppose it's the same thing as createObj*, but I didn't see it in action. For now, mark it unhandled. … … 869 913 RegisterCommand(1, 72, 1300, "createBgObjWeaver", (CmdImpl) &GrpImpl::impl_createObj); 870 914 RegisterCommand(1, 72, 1400, "createBgObjDigit", (CmdImpl) &GrpImpl::impl_createObj); 915 916 RegisterCommand(2, 72, 1000, "createBgSubObjG00", NULL);//FIXME 917 RegisterCommand(2, 72, 1003, "createBgSubObjGAN", NULL);//FIXME 918 RegisterCommand(2, 72, 1100, "createBgSubObjRect", NULL);//FIXME 919 RegisterCommand(2, 72, 1200, "createBgSubObjText", NULL);//FIXME 920 RegisterCommand(2, 72, 1300, "createBgSubObjWeaver", NULL);//FIXME 921 RegisterCommand(2, 72, 1400, "createBgSubObjDigit", NULL);//FIXME 922 871 923 872 924 RegisterCommand(1, 73, 0, "ganStop?", NULL); //That's what xclannad says, but I'm not sure... … … 881 933 RegisterCommand(1, 73, 3005, "ganPlayOnce2", (CmdImpl) &GrpImpl::impl_gan); 882 934 935 RegisterCommand(2, 73, 0, "ganSubStop?", NULL); //FIXME 936 RegisterCommand(2, 73, 1000, "ganSubStop", NULL); //FIXME 937 RegisterCommand(2, 73, 3, "ganSubIsPlaying", NULL); //FIXME 938 RegisterCommand(2, 73, 2003, "objSubPlay", NULL); //FIXME 939 RegisterCommand(2, 73, 1001, "ganSubLoop", NULL); //FIXME 940 RegisterCommand(2, 73, 1003, "ganSubPlay", NULL); //FIXME 941 RegisterCommand(2, 73, 1005, "ganSubPlayOnce", NULL); //FIXME 942 RegisterCommand(2, 73, 3001, "ganSubLoop2", (CmdImpl) &GrpImpl::impl_gan); //FIXME 943 RegisterCommand(2, 73, 3003, "ganSubPlay2", NULL); //FIXME 944 RegisterCommand(2, 73, 3005, "ganSubPlayOnce2", NULL); //FIXME 945 946 883 947 RegisterCommand(1, 81, 1000, "objMove", (CmdImpl) &GrpImpl::impl_objSetPos); 884 948 RegisterCommand(1, 82, 1000, "objBgMove", (CmdImpl) &GrpImpl::impl_objSetPos); … … 887 951 RegisterCommand(1, 81, 1002, "objTop", (CmdImpl) &GrpImpl::impl_objSetPos); 888 952 RegisterCommand(1, 82, 1002, "objBgTop", (CmdImpl) &GrpImpl::impl_objSetPos); 889 890 953 RegisterCommand(1, 81, 1003, "objAlpha", (CmdImpl) &GrpImpl::impl_objAlpha); 891 954 RegisterCommand(1, 82, 1003, "objBgAlpha", (CmdImpl) &GrpImpl::impl_objAlpha); 892 955 RegisterCommand(1, 81, 1004, "objShow", (CmdImpl) &GrpImpl::impl_objShow); 893 956 RegisterCommand(1, 82, 1004, "objBgShow", (CmdImpl) &GrpImpl::impl_objShow); 894 895 957 RegisterCommand(1, 81, 1005, "objDispArea", NULL); 896 958 RegisterCommand(1, 82, 1005, "objBgDispArea", NULL); … … 913 975 RegisterCommand(1, 81, 1020, "objColLevel", NULL); 914 976 RegisterCommand(1, 82, 1020, "objBgColLevel", NULL); 915 RegisterCommand(1, 81, 1021, "objComposite", (CmdImpl) &GrpImpl::impl_objComposite); //FIXME: May be broken977 RegisterCommand(1, 81, 1021, "objComposite", NULL);//(CmdImpl) &GrpImpl::impl_objComposite); //FIXME: May be broken 916 978 RegisterCommand(1, 82, 1021, "objBgComposite", (CmdImpl) &GrpImpl::impl_objComposite); 917 979 RegisterCommand(1, 81, 1024, "objSetText", (CmdImpl) &GrpImpl::impl_objSetText); … … 936 998 RegisterCommand(1, 82, 1049, "objBgRotate", (CmdImpl) &GrpImpl::impl_objRotate); 937 999 1000 RegisterCommand(2, 81, 1000, "childObjMove", (CmdImpl) &GrpImpl::impl_objSetPos); 1001 RegisterCommand(2, 82, 1000, "childObjBgMove", (CmdImpl) &GrpImpl::impl_objSetPos); 1002 RegisterCommand(2, 81, 1001, "childObjLeft", NULL); 1003 RegisterCommand(2, 82, 1001, "childObjBgLeft", NULL); 1004 RegisterCommand(2, 81, 1002, "childObjTop", NULL); 1005 RegisterCommand(2, 82, 1002, "childObjBgTop", NULL); 1006 RegisterCommand(2, 81, 1003, "childObjAlpha", (CmdImpl) &GrpImpl::impl_objAlpha); 1007 RegisterCommand(2, 82, 1003, "childObjBgAlpha", (CmdImpl) &GrpImpl::impl_objAlpha); 1008 RegisterCommand(2, 81, 1004, "childObjShow", (CmdImpl) &GrpImpl::impl_objShow); 1009 RegisterCommand(2, 82, 1004, "childObjBgShow", (CmdImpl) &GrpImpl::impl_objShow); 1010 RegisterCommand(2, 81, 1005, "childObjDispArea", NULL); 1011 RegisterCommand(2, 82, 1005, "childObjBgDispArea", NULL); 1012 RegisterCommand(2, 81, 1006, "childObjAdjust", (CmdImpl) &GrpImpl::impl_objSetPos); 1013 RegisterCommand(2, 82, 1006, "childObjBgAdjust", (CmdImpl) &GrpImpl::impl_objSetPos); 1014 RegisterCommand(2, 81, 1007, "childObjAdjustX", NULL); 1015 RegisterCommand(2, 82, 1007, "childObjBgAdjustX", NULL); 1016 RegisterCommand(2, 81, 1008, "childObjAdjustY", NULL); 1017 RegisterCommand(2, 82, 1008, "childObjBgAdjustY", NULL); 1018 RegisterCommand(2, 81, 2006, "childObjAdjust2?", NULL); 1019 RegisterCommand(2, 82, 2006, "childObjBgAdjust2?", NULL); 1020 RegisterCommand(2, 81, 1016, "childObjColour", NULL); 1021 RegisterCommand(2, 82, 1016, "childObjBgColour", NULL); 1022 RegisterCommand(2, 81, 1017, "childObjColR", NULL); 1023 RegisterCommand(2, 82, 1017, "childObjBgColR", NULL); 1024 RegisterCommand(2, 81, 1018, "childObjColG", NULL); 1025 RegisterCommand(2, 82, 1018, "childObjBgColG", NULL); 1026 RegisterCommand(2, 81, 1019, "childObjColB", NULL); 1027 RegisterCommand(2, 82, 1019, "childObjBgColB", NULL); 1028 RegisterCommand(2, 81, 1020, "childObjColLevel", NULL); 1029 RegisterCommand(2, 82, 1020, "childObjBgColLevel", NULL); 1030 RegisterCommand(2, 81, 1021, "childObjComposite", NULL); 1031 RegisterCommand(2, 82, 1021, "childObjBgComposite", NULL); 1032 RegisterCommand(2, 81, 1024, "childObjSetText", (CmdImpl) &GrpImpl::impl_objSetText); 1033 RegisterCommand(2, 82, 1024, "childObjBgSetText", (CmdImpl) &GrpImpl::impl_objSetText); 1034 RegisterCommand(2, 81, 1025, "childObjTextOpts", (CmdImpl) &GrpImpl::impl_objTextOpts); 1035 RegisterCommand(2, 82, 1025, "childObjBgTextOpts", (CmdImpl) &GrpImpl::impl_objTextOpts); 1036 RegisterCommand(2, 81, 1032, "childObjOrder", NULL); 1037 RegisterCommand(2, 82, 1032, "childObjBgOrder", NULL); 1038 RegisterCommand(2, 81, 1034, "childObjDispRect", NULL); 1039 RegisterCommand(2, 82, 1034, "childObjBgDispRect", NULL); 1040 RegisterCommand(2, 81, 1037, "childObjSetDigits", (CmdImpl) &GrpImpl::impl_objSetDigits); 1041 RegisterCommand(2, 82, 1037, "childObjBgSetDigits", (CmdImpl) &GrpImpl::impl_objSetDigits); 1042 RegisterCommand(2, 81, 1038, "childObjNumOpts", (CmdImpl) &GrpImpl::impl_objNumOpts); 1043 RegisterCommand(2, 82, 1038, "childObjBgNumOpts", (CmdImpl) &GrpImpl::impl_objNumOpts); 1044 RegisterCommand(2, 81, 1039, "childObjPattNo", (CmdImpl) &GrpImpl::impl_objPattNo); 1045 RegisterCommand(2, 82, 1039, "childObjBgPattNo", (CmdImpl) &GrpImpl::impl_objPattNo); 1046 RegisterCommand(2, 81, 1046, "childObjScale", (CmdImpl) &GrpImpl::impl_objScale); 1047 RegisterCommand(2, 82, 1046, "childObjBgScale", (CmdImpl) &GrpImpl::impl_objScale); 1048 RegisterCommand(2, 81, 1047, "childObjWidth", NULL); 1049 RegisterCommand(2, 82, 1047, "childObjBgWidth", NULL); 1050 RegisterCommand(2, 81, 1049, "childObjRotate", NULL); 1051 RegisterCommand(2, 82, 1049, "childObjBgRotate", NULL); 1052 938 1053 RegisterCommand(1, 84, 1000, "objGetPos", (CmdImpl) &GrpImpl::impl_objPosDims); 939 1054 RegisterCommand(1, 84, 1100, "objGetDims", (CmdImpl) &GrpImpl::impl_objPosDims); 1055 1056 RegisterCommand(2, 84, 1000, "childObjGetPos", (CmdImpl) &GrpImpl::impl_objPosDims); 1057 RegisterCommand(2, 84, 1100, "childObjGetDims", (CmdImpl) &GrpImpl::impl_objPosDims); 940 1058 941 1059 RegisterCommand(1, 31, 0, "refresh", (CmdImpl) &GrpImpl::impl_refresh); … … 979 1097 RegisterCommand(1, 62, 14, "objSwap?", NULL); 980 1098 1099 RegisterCommand(1, 4, 1211, "EnableSyscom", NULL); 1100 RegisterCommand(1, 4, 1212, "HideSyscom", NULL); 1101 RegisterCommand(1, 4, 1213, "DisableSyscom", NULL); 1102 981 1103 anm1 = NULL; 982 1104 anm2 = NULL; … … 1016 1138 } 1017 1139 return dsurface[pdt]; 1140 } 1141 1142 GrpObj* GrpImpl::GetGraphicObj(int grp, bool fg) { 1143 if (fg) 1144 return &grpobj[grp]; 1145 else 1146 return &bs_obj[grp]; 1147 } 1148 1149 GrpObj* GrpImpl::GetGraphicObj(int grp, int index, bool fg) { 1150 GrpObj* g = GetGraphicObj(grp, fg); 1151 return &g->children_obj[index]; 1152 } 1153 1154 GrpObj* GrpImpl::GetGraphicObjVarMode(Cmd& cmd, int &base_arg, bool fg) { 1155 GrpObj* g; 1156 if (cmd.cmd1 == 2) { 1157 g = GetGraphicObj(cmd.args[base_arg].value, cmd.args[base_arg+1].value, fg); 1158 base_arg += 1; 1159 } 1160 else 1161 g = GetGraphicObj(cmd.args[base_arg].value, fg); 1162 return g; 1018 1163 } 1019 1164 … … 1109 1254 if (grpobj.find(*it) == grpobj.end()) continue; 1110 1255 GrpObj& obj = grpobj[*it]; 1111 if (obj.picture == NULL) continue; 1112 if (obj.alpha == 0 || (obj.attr & GrpObj::HIDDEN)) { 1113 if (obj.attr & GrpObj::ANM_PLAYING) { 1114 obj.attr = GrpObj::Attribute(obj.attr & ~(GrpObj::ANM_PLAYING)); 1115 if (obj.anm) obj.anm->Abort(); 1116 } 1117 obj.picture->hide(); 1118 } else { 1119 obj.Update(); 1120 obj.picture->show(); 1121 } 1256 obj.Refresh(obj); 1122 1257 } 1123 1258 changed_obj.clear(); … … 1188 1323 grpobj[it->first] = it->second; 1189 1324 it->second.DeletePic(); 1190 CreateObj(it->first); 1325 CreateObj(it->first);//FIXME: Adapt to groups 1191 1326 GrpObj& g = grpobj[it->first]; 1192 1327 if (g.picture) { … … 1288 1423 1289 1424 void GrpImpl::CreateObj(int index) { 1290 std::map<int, GrpObj>::iterator cur = grpobj.find(index);1425 GrpObjMap::iterator cur = grpobj.find(index); 1291 1426 if (cur == grpobj.end()) return; 1292 1427 GrpObj& g = grpobj[index]; … … 1299 1434 } 1300 1435 1436 void GrpImpl::CreateSubObj(int grp_index, int index) { 1437 GrpObjMap::iterator cur = grpobj.find(grp_index); 1438 if (cur == grpobj.end()) return; 1439 GrpObj* g = &grpobj[grp_index]; 1440 cur = g->children_obj.find(index); 1441 if (cur == g->children_obj.end()) return; 1442 g = &g->children_obj[index]; 1443 g->CreateSurface(&parent); 1444 g->order = index; 1445 if (g->picture == NULL) return; // ¥š¥é¡Œ¡§surface €¬Âžºß€·€Ê€€ 1446 g->picture->hide(); 1447 //TODO 1448 SetObjChanged(grp_index); 1449 /*ZMoveObj(index);*/ 1450 } 1451 1301 1452 void GrpImpl::ZMoveObj(int index) { 1302 std::map<int, GrpObj>::iterator cur = grpobj.find(index);1453 GrpObjMap::iterator cur = grpobj.find(index); 1303 1454 if (cur == grpobj.end()) return; 1304 1455 GrpObj& g = grpobj[index]; … … 1306 1457 // Œ«Ê¬€è€êÁ°€Ë object €¬€¢€ì€Ð¡¢€œ€ÎÁ°€ËÉœŒš 1307 1458 // €œ€Š€Ç€Ê€±€ì€Ð screen €ÎÁ°€ËÉœŒš 1308 std::map<int, GrpObj>::iterator cur_backobj = grpobj.end();1309 std::map<int, GrpObj>::iterator it;1459 GrpObjMap::iterator cur_backobj = grpobj.end(); 1460 GrpObjMap::iterator it; 1310 1461 for (it = grpobj.begin(); it != grpobj.end(); it++) { 1311 1462 if (it == cur) continue; … … 1527 1678 if (grpdump_req) { 1528 1679 grpdump_req = 0; 1529 std::map<int,GrpObj>::iterator it;1680 GrpObjMap::iterator it; 1530 1681 fprintf(stderr,"front %p(%d) / %p(%d)\n",screen,screen->IsHidden(),screen_front,screen_front->IsHidden()); 1531 1682 for (it=grpobj.begin(); it != grpobj.end(); it++) { 1532 1683 GrpObj& obj = it->second; 1533 if (obj.picture) { 1534 if (!obj.name.empty()) { 1535 fprintf(stderr,"obj %06d(%p): name %10s pos %d,%d alpha %d (%d/%d/%d)\n", 1536 it->first,obj.picture,obj.name.c_str(), 1537 obj.PosX(),obj.PosY(),obj.alpha,obj.attr&GrpObj::HIDDEN ? 1 : 0, 0, obj.picture->IsHidden()); 1538 } else if (!obj.print_moji.empty()) { 1539 fprintf(stderr,"obj %06d(%p): name %10s pos %d,%d alpha %d (%d/%d/%d)\n", 1540 it->first,obj.picture,obj.print_moji.c_str(), 1541 obj.PosX(),obj.PosY(),obj.alpha,obj.attr&GrpObj::HIDDEN ? 1 : 0, 0, obj.picture->IsHidden()); 1542 } else { 1543 fprintf(stderr,"obj %06d(%p): name %10s pos %d,%d alpha %d (%d/%d/%d)\n", 1544 it->first,obj.picture,"<EMPTY>", 1545 obj.PosX(),obj.PosY(),obj.alpha,obj.attr&GrpObj::HIDDEN ? 1 : 0, 0, obj.picture->IsHidden()); 1546 } 1547 } 1684 obj._debug_Dump(it->first, 0); 1548 1685 } 1549 1686 std::list<PicBase*>::iterator it2; … … 1620 1757 } 1621 1758 1759 void GrpImpl::DeleteSubObjPic(int num_grp, int num) { 1760 if (grpobj.find(num_grp) == grpobj.end()) return; 1761 if (grpobj[num_grp].children_obj.find(num) == grpobj[num_grp].children_obj.end()) return; 1762 deleted_pic.push_back(grpobj[num_grp].children_obj[num].DeletePic()); 1763 } 1764 1622 1765 void GrpImpl::DeleteObj(int num) { 1623 1766 if (grpobj.find(num) == grpobj.end()) return; 1624 1767 deleted_pic.push_back(grpobj[num].DeletePic()); 1768 GrpObjMap::iterator it; 1769 for (it = grpobj[num].children_obj.begin(); it != grpobj[num].children_obj.end(); it++) { 1770 deleted_pic.push_back(it->second.DeletePic()); 1771 } 1625 1772 grpobj.erase(num); 1773 } 1774 1775 void GrpImpl::DeleteSubObj(int num_grp, int num) { 1776 if (grpobj.find(num_grp) == grpobj.end()) return; 1777 if (grpobj[num_grp].children_obj.find(num) == grpobj[num_grp].children_obj.end()) return; 1778 deleted_pic.push_back(grpobj[num_grp].children_obj[num].DeletePic()); 1779 grpobj[num_grp].children_obj.erase(num); 1626 1780 } 1627 1781 … … 1905 2059 1906 2060 void GrpImpl::impl_objClear(Cmd& cmd) { //FIXME: may be broken (doesn't reflect what Haeleth says) 1907 DeleteObj(cmd.args[0].value); 2061 if (cmd.cmd1 == 1) 2062 DeleteObj(cmd.args[0].value); 2063 if (cmd.cmd1 == 2) 2064 DeleteSubObj(cmd.args[0].value, cmd.args[1].value); 1908 2065 cmd.clear(); 1909 2066 } … … 1920 2077 */ 1921 2078 int base_argc = 0; 1922 DeleteObjPic(cmd.args[0].value); // µì¥Õ¥¡¥€¥ëÌŸ€Îsurface€òºïœü 1923 if (cmd.cmd 2 == 71)2079 2080 if (cmd.cmd1 == 1) { // 1: group object 1924 2081 DeleteObjPic(cmd.args[0].value); // µì¥Õ¥¡¥€¥ëÌŸ€Îsurface€òºïœü 1925 1926 GrpObj& g = (cmd.cmd2 == 71) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2082 if (cmd.cmd2 == 71) 2083 DeleteObjPic(cmd.args[0].value); // µì¥Õ¥¡¥€¥ëÌŸ€Îsurface€òºïœü 2084 } 2085 else { // 2: single object in group 2086 DeleteSubObjPic(cmd.args[0].value, cmd.args[1].value); // µì¥Õ¥¡¥€¥ëÌŸ€Îsurface€òºïœü 2087 if (cmd.cmd2 == 71) 2088 DeleteSubObjPic(cmd.args[0].value, cmd.args[1].value); // µì¥Õ¥¡¥€¥ëÌŸ€Îsurface€òºïœü 2089 } 2090 2091 GrpObj* g = (cmd.cmd2 == 71) ? &grpobj[cmd.args[0].value] : &bs_obj[cmd.args[0].value]; 2092 if (cmd.cmd1 == 2) // 2: single object in a group 2093 g = &g->children_obj[cmd.args[1].value]; 2094 2095 if (cmd.cmd1 == 2) 2096 base_argc = 1; 1927 2097 1928 2098 if (cmd.cmd3 == 1000) { /* ¥Õ¥¡¥€¥ëÌŸÀßÄê */ 1929 g .gtype = GrpObj::FILE; //FIXME: Strange thing in the main menu1930 string name = cmd.Str(cmd.args[ 1]);2099 g->gtype = GrpObj::FILE; //FIXME: Strange thing in the main menu; that happens with objComposite 2100 string name = cmd.Str(cmd.args[base_argc + 1]); 1931 2101 if (name.find('?') != -1) { 2102 //Maybe it's for shading or something like that? 2103 printf("Warning: the part after the '?' was removed: '%s'\n", name.c_str()); 1932 2104 name.erase(name.find('?')); // '?' °Ê¹ß€Î°ÕÌ£€¬€ï€«€é€Ê€€ 1933 2105 } 1934 g .name = name;2106 g->name = name; 1935 2107 } else if (cmd.cmd3 == 1003) { /* ¥Õ¥¡¥€¥ëÌŸÀßÄê(GANŽÞ€à) */ 1936 g .gtype = GrpObj::GAN;1937 if (cmd.Str(cmd.args[ 1]) == string("???"))1938 g .name = cmd.Str(cmd.args[2]);2108 g->gtype = GrpObj::GAN; 2109 if (cmd.Str(cmd.args[base_argc + 1]) == string("???")) 2110 g->name = cmd.Str(cmd.args[base_argc + 2]); 1939 2111 else 1940 g.name = cmd.Str(cmd.args[1]); 1941 g.gan_name = cmd.Str(cmd.args[2]); 1942 if (cmd.cmd4 >= 1 && cmd.args[3].value == 0) 1943 g.attr = GrpObj::Attribute(g.attr | GrpObj::HIDDEN); 2112 g->name = cmd.Str(cmd.args[base_argc + 1]); 2113 g->gan_name = cmd.Str(cmd.args[base_argc + 2]); 2114 2115 if (cmd.cmd4 >= 1 && cmd.args[base_argc + 3].value == 0) 2116 g->attr = GrpObj::Attribute(g->attr | GrpObj::HIDDEN); 1944 2117 else 1945 g .attr = GrpObj::Attribute(g.attr & ~(GrpObj::HIDDEN));1946 1947 if (cmd.argc >= 5)1948 g .SetPos(1, cmd.args[4].value, -cmd.args[5].value);1949 1950 if (g .name.find('?') != -1) {1951 g .name.erase(g.name.find('?'));1952 g .gan_name = cmd.Str(cmd.args[2]);2118 g->attr = GrpObj::Attribute(g->attr & ~(GrpObj::HIDDEN)); 2119 2120 if (cmd.argc >= base_argc + 5) 2121 g->SetPos(1, cmd.args[base_argc + 4].value, -cmd.args[base_argc + 5].value); 2122 2123 if (g->name.find('?') != -1) { 2124 g->name.erase(g->name.find('?')); 2125 g->gan_name = cmd.Str(cmd.args[base_argc + 2]); 1953 2126 } 1954 2127 } else if (cmd.cmd3 == 1200) { // ²èÁü€òÊž»úÎó€È€·€Æ»ØÄê 1955 g .gtype = GrpObj::MOJI;1956 g .print_moji = cmd.Str(cmd.args[1]);1957 g .attr = GrpObj::Attribute(g.attr & (~GrpObj::HIDDEN)); // Ÿï€ËÉœŒš€¬¥Ç¥Õ¥©¥ë¥È¡©2128 g->gtype = GrpObj::MOJI; 2129 g->print_moji = cmd.Str(cmd.args[base_argc + 1]); 2130 g->attr = GrpObj::Attribute(g->attr & (~GrpObj::HIDDEN)); // Ÿï€ËÉœŒš€¬¥Ç¥Õ¥©¥ë¥È¡© 1958 2131 cmd.clear(); 1959 2132 } else if (cmd.cmd3 == 1400) { // ¿ôÃÍ€ò²èÁü€È€·€ÆÉœŒš 1960 g.gtype = GrpObj::DIGIT; 1961 g.name = cmd.Str(cmd.args[1]); 1962 } 2133 g->gtype = GrpObj::DIGIT; 2134 g->name = cmd.Str(cmd.args[base_argc + 1]); 2135 } 2136 1963 2137 CreateObj(cmd.args[0].value); 2138 if (cmd.cmd1 == 2) 2139 CreateSubObj(cmd.args[0].value, cmd.args[1].value); 2140 1964 2141 if (cmd.cmd3 == 1000 || cmd.cmd3 == 1003 || cmd.cmd3 == 1200 || cmd.cmd3 == 1400) { 1965 2142 // FILE, GAN, MOJI, DIGIT €Ê€é€ÐºÂÉžÅù€ÎÀßÄê€ò¹Ô€Š 1966 2143 if (cmd.cmd4 >= 1) { 1967 2144 if (cmd.args[2+base_argc].value == 0) { 1968 if (cmd.cmd1 == 1) 1969 g.attr = GrpObj::Attribute(g.attr | GrpObj::HIDDEN | GrpObj::HIDDEN_GROUP); 1970 else 1971 g.attr = GrpObj::Attribute(g.attr | GrpObj::HIDDEN); 2145 g->attr = GrpObj::Attribute(g->attr | GrpObj::HIDDEN); 1972 2146 } else { 1973 if (cmd.cmd1 == 1) 1974 g.attr = GrpObj::Attribute(g.attr & (~(GrpObj::HIDDEN | GrpObj::HIDDEN_GROUP))); 1975 else 1976 g.attr = GrpObj::Attribute(g.attr & (~GrpObj::HIDDEN)); 2147 g->attr = GrpObj::Attribute(g->attr & (~GrpObj::HIDDEN)); 1977 2148 } 1978 if (cmd.cmd1 == 1) 1979 SetObjChanged(cmd.args[0].value); 2149 SetObjChanged(cmd.args[0].value); 1980 2150 } 1981 2151 if (cmd.cmd4 >= 2) { // ºÂÉžÅù€âÀßÄê 1982 g .SetPos(0, cmd.args[3+base_argc].value, cmd.args[4+base_argc].value);2152 g->SetPos(0, cmd.args[3+base_argc].value, cmd.args[4+base_argc].value); 1983 2153 } 1984 2154 if ( (cmd.cmd3 == 1000 || cmd.cmd3 == 1003) && cmd.cmd4 >= 3) { // pattern ÈÖ¹æ€âÀßÄê 1985 g .SetSurfaceNum(cmd.args[5+base_argc].value);2155 g->SetSurfaceNum(cmd.args[5+base_argc].value); 1986 2156 base_argc++; // 1000 (FILE) / 1003 (GAN) €ÎŸì¹ç€Î€ß€³€Î¥ª¥×¥·¥ç¥ó€Ïžºß€¹€ë 1987 2157 } … … 1993 2163 1994 2164 void GrpImpl::impl_gan(Cmd& cmd) { 1995 GrpObj& g = grpobj[cmd.args[0].value]; 2165 int base_arg = 0; 2166 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg); 1996 2167 1997 2168 if (cmd.cmd3 == 3) { // ganIsPlaying 1998 if (g .anm == NULL || g.anm->IsEnd())2169 if (g->anm == NULL || g->anm->IsEnd()) 1999 2170 cmd.SetSysvar(0); 2000 2171 else … … 2002 2173 } 2003 2174 else if (cmd.cmd3 == 1000) { // ganStop 2004 if (g .anm == NULL || g.anm->IsEnd())2005 g .SetSurfaceNum(cmd.args[1].value);2175 if (g->anm == NULL || g->anm->IsEnd()) 2176 g->SetSurfaceNum(cmd.args[1].value); 2006 2177 else { 2007 g .anm->Abort();2008 g .SetSurfaceNum(cmd.args[1].value);2178 g->anm->Abort(); 2179 g->SetSurfaceNum(cmd.args[1].value); 2009 2180 } 2010 2181 SetObjChanged(cmd.args[0].value); … … 2012 2183 } 2013 2184 else if (cmd.cmd3 == 2003) { // objPlay 2014 g .CreateGanSpecial(event, 0, cmd.args[1].value);2185 g->CreateGanSpecial(event, 0, cmd.args[1].value); 2015 2186 // g.attr = GrpObj::Attribute(g.attr & (~GrpObj::HIDDEN)); 2016 2187 SetObjChanged(cmd.args[0].value); … … 2019 2190 else if (cmd.cmd3 == 3001 || cmd.cmd3 == 3003 || cmd.cmd3 == 3005 || 2020 2191 cmd.cmd3 == 1001 || cmd.cmd3 == 1003 || cmd.cmd3 == 1005) { // ganPlay* 2021 g .CreateGan(event, cmd.args[1].value);2192 g->CreateGan(event, cmd.args[1].value); 2022 2193 // g.attr = GrpObj::Attribute(g.attr & (~GrpObj::HIDDEN)); 2023 2194 SetObjChanged(cmd.args[0].value); … … 2028 2199 void GrpImpl::impl_objSetPos(Cmd& cmd) { 2029 2200 //obj or objBg 2030 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2201 int base_arg = 0; 2202 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2031 2203 2032 2204 int index, x, y; 2033 2205 if (cmd.cmd3 == 1006 || cmd.cmd3 == 2006) { //objAdjust 2034 index = cmd.args[1 ].value + 1;2035 x = cmd.args[2 ].value;2036 y = cmd.args[3 ].value;2206 index = cmd.args[1+base_arg].value + 1; 2207 x = cmd.args[2+base_arg].value; 2208 y = cmd.args[3+base_arg].value; 2037 2209 } 2038 2210 else { 2039 2211 index = 0; 2040 2212 if (cmd.cmd3 == 1000) { 2041 x = cmd.args[1 ].value;2042 y = cmd.args[2 ].value;2213 x = cmd.args[1+base_arg].value; 2214 y = cmd.args[2+base_arg].value; 2043 2215 } 2044 2216 else { 2045 g .GetPos(index, x, y);2217 g->GetPos(index, x, y); 2046 2218 if (cmd.cmd3 == 1001) 2047 x = cmd.args[1 ].value;2219 x = cmd.args[1+base_arg].value; 2048 2220 else 2049 y = cmd.args[1 ].value;2050 } 2051 } 2052 2053 g .SetPos(index, x, y);2221 y = cmd.args[1+base_arg].value; 2222 } 2223 } 2224 2225 g->SetPos(index, x, y); 2054 2226 cmd.clear(); 2055 2227 } 2056 2228 2057 2229 void GrpImpl::impl_objAlpha(Cmd& cmd) { 2058 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2059 g.SetAlpha(cmd.args[1].value); 2230 int base_arg = 0; 2231 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2232 2233 g->SetAlpha(cmd.args[base_arg + 1].value); 2060 2234 cmd.clear(); 2061 2235 } 2062 2236 2063 2237 void GrpImpl::impl_objShow(Cmd& cmd) { 2064 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2065 if (cmd.cmd1 == 1) { 2066 if (cmd.args[1].value) 2067 g.attr = GrpObj::Attribute(g.attr & (~(GrpObj::HIDDEN | GrpObj::HIDDEN_GROUP))); 2068 else 2069 g.attr = GrpObj::Attribute(g.attr | GrpObj::HIDDEN | GrpObj::HIDDEN_GROUP); 2070 } else { 2071 if (cmd.args[1].value) 2072 g.attr = GrpObj::Attribute(g.attr & (~GrpObj::HIDDEN)); 2073 else 2074 g.attr = GrpObj::Attribute(g.attr | GrpObj::HIDDEN); 2075 } 2076 g.attr = GrpObj::Attribute(g.attr | GrpObj::UPDATE_VISIBLE); 2238 int base_arg = 0; 2239 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2240 2241 if (cmd.args[base_arg + 1].value) 2242 g->attr = GrpObj::Attribute(g->attr & (~GrpObj::HIDDEN)); 2243 else 2244 g->attr = GrpObj::Attribute(g->attr | GrpObj::HIDDEN); 2245 2246 g->attr = GrpObj::Attribute(g->attr | GrpObj::UPDATE_VISIBLE); 2077 2247 // ¥°¥ë¡Œ¥×ñ°Ì€ÇŒ¡€Î RefreshObj €ÇÉœŒš¡ŠŸÃµî 2078 2248 if (cmd.cmd2 == 0x51) //not Bg … … 2082 2252 2083 2253 void GrpImpl::impl_objColour(Cmd& cmd) { 2084 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2085 g.print_r = cmd.args[1].value; 2086 g.print_g = cmd.args[2].value; 2087 g.print_b = cmd.args[3].value; 2088 g.SetUpdate(); 2089 // grpobj[cmd.args[0].value].print_a = cmd.args[4].value; 2090 /* args:229,18,minus-1,0,99,255,-1 */ 2091 /* args:102,26,minus-1,0,99,0,255 */ 2254 int base_arg = 0; 2255 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2256 2257 g->print_r = cmd.args[base_arg+1].value; 2258 g->print_g = cmd.args[base_arg+2].value; 2259 g->print_b = cmd.args[base_arg+3].value; 2260 g->SetUpdate(); 2092 2261 cmd.clear(); 2093 2262 } 2094 2263 2095 void GrpImpl::impl_objComposite(Cmd& cmd) { 2096 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2097 // centering mode €Ê€É€òÀßÄê¡© 2098 if (cmd.args[1].value == 1) { 2099 g.attr = GrpObj::Attribute(g.attr | GrpObj::SATURATE); 2264 void GrpImpl::impl_objComposite(Cmd& cmd) {//FIXME 2265 int base_arg = 0; 2266 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2267 2268 if (cmd.args[base_arg + 1].value == 1) { 2269 g->attr = GrpObj::Attribute(g->attr | GrpObj::SATURATE); 2100 2270 cmd.clear(); 2101 } else if (cmd.args[ 1].value == 0) {2102 g .attr = GrpObj::Attribute(g.attr & (~GrpObj::SATURATE));2271 } else if (cmd.args[base_arg + 1].value == 0) { 2272 g->attr = GrpObj::Attribute(g->attr & (~GrpObj::SATURATE)); 2103 2273 cmd.clear(); 2104 2274 } 2105 g .SetUpdate();2275 g->SetUpdate(); 2106 2276 } 2107 2277 2108 2278 void GrpImpl::impl_objSetText(Cmd& cmd) { 2109 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2110 2111 g.print_moji = cmd.Str(cmd.args[1]); 2112 g.SetUpdate(); 2279 int base_arg = 0; 2280 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2281 2282 g->print_moji = cmd.Str(cmd.args[base_arg + 1]); 2283 g->SetUpdate(); 2113 2284 cmd.clear(); 2114 2285 } 2115 2286 2116 2287 void GrpImpl::impl_objTextOpts(Cmd& cmd) { 2117 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2288 int base_arg = 0; 2289 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2290 2118 2291 // ²èÁü€òÊž»úÎó€È€·€ÆÀßÄê¡§Êž»ú€ÎÂ瀀µ€Ê€É 2119 g .print_size = cmd.args[1].value;2292 g->print_size = cmd.args[base_arg + 1].value; 2120 2293 /* Á°·Ê¿§€òÆÀ€ë */ 2121 2294 int cr, cg, cb; 2122 2295 char key[17]; 2123 sprintf(key, "#COLOR_TABLE.%03d", cmd.args[ 5].value);2296 sprintf(key, "#COLOR_TABLE.%03d", cmd.args[base_arg + 5].value); 2124 2297 if (config->GetParam(key, 3, &cr, &cg, &cb)) { // color not found 2125 2298 cr = cg = cb = 0; 2126 2299 } 2127 g .print_r = cr;2128 g .print_g = cg;2129 g .print_b = cb;2130 g .SetUpdate();2300 g->print_r = cr; 2301 g->print_g = cg; 2302 g->print_b = cb; 2303 g->SetUpdate(); 2131 2304 cmd.clear(); 2132 2305 } 2133 2306 2134 2307 void GrpImpl::impl_objOrder(Cmd& cmd) { 2135 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2136 int order = cmd.args[1].value; 2137 g.order = order; 2308 int base_arg = 0; 2309 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2310 2311 int order = cmd.args[base_arg + 1].value; 2312 g->order = order; 2138 2313 ZMoveObj(cmd.args[0].value); 2139 2314 cmd.clear(); … … 2141 2316 2142 2317 void GrpImpl::impl_objDispArea(Cmd& cmd) { 2143 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2318 int base_arg = 0; 2319 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2320 2144 2321 // ¥ª¥Ö¥ž¥§¥¯¥È€Î€É€ÎÉôʬ€ò²èÌÌ€ËÉœŒš€¹€ë€«¡Ê¥¯¥ê¥Ã¥×Îΰè¡Ë€ÎÀßÄê 2145 2322 int rx, ry, w, h; 2146 if (cmd.args.size() == 5) {2147 int rx = cmd.args[ 1].value;2148 int ry = cmd.args[ 2].value;2149 int w = cmd.args[ 3].value;2150 int h = cmd.args[ 4].value;2323 if (cmd.args.size() == base_arg + 5) { 2324 int rx = cmd.args[base_arg + 1].value; 2325 int ry = cmd.args[base_arg + 2].value; 2326 int w = cmd.args[base_arg + 3].value; 2327 int h = cmd.args[base_arg + 4].value; 2151 2328 if (cmd.cmd3 == 1005) { 2152 2329 w -= rx; … … 2159 2336 h = screen->Height(); 2160 2337 } 2161 g .SetClipArea(rx, ry, w, h); //TODO: case when cmd.args.size() == 12338 g->SetClipArea(rx, ry, w, h); //TODO: case when cmd.args.size() == 1 2162 2339 cmd.clear(); 2163 2340 } 2164 2341 2165 2342 void GrpImpl::impl_objSetDigits(Cmd& cmd) { 2166 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2167 g.dig_number = cmd.args[1].value; 2168 g.SetUpdate(); 2343 int base_arg = 0; 2344 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2345 2346 g->dig_number = cmd.args[base_arg + 1].value; 2347 g->SetUpdate(); 2169 2348 cmd.clear(); 2170 2349 } 2171 2350 2172 2351 void GrpImpl::impl_objNumOpts(Cmd& cmd) { 2173 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2174 g.dig_digit = cmd.args[1].value; 2175 int attr = g.attr; 2352 int base_arg = 0; 2353 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2354 2355 g->dig_digit = cmd.args[base_arg + 1].value; 2356 int attr = g->attr; 2176 2357 attr &= ~(GrpObj::DIG_ZERO | GrpObj::DIG_SIGN | GrpObj::DIG_PACK); 2177 if (cmd.args[ 2].value) attr |= GrpObj::DIG_ZERO;2178 if (cmd.args[ 3].value) attr |= GrpObj::DIG_SIGN;2179 if (cmd.args[ 4].value) attr |= GrpObj::DIG_PACK;2180 g .attr = GrpObj::Attribute(attr);2181 g .SetUpdate();2358 if (cmd.args[base_arg + 2].value) attr |= GrpObj::DIG_ZERO; 2359 if (cmd.args[base_arg + 3].value) attr |= GrpObj::DIG_SIGN; 2360 if (cmd.args[base_arg + 4].value) attr |= GrpObj::DIG_PACK; 2361 g->attr = GrpObj::Attribute(attr); 2362 g->SetUpdate(); 2182 2363 cmd.clear(); 2183 2364 } 2184 2365 2185 2366 void GrpImpl::impl_objPattNo(Cmd& cmd) { 2186 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2187 g.SetSurfaceNum(cmd.args[1].value); 2367 int base_arg = 0; 2368 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2369 2370 g->SetSurfaceNum(cmd.args[base_arg + 1].value); 2188 2371 cmd.clear(); 2189 2372 } 2190 2373 2191 2374 void GrpImpl::impl_objScale(Cmd& cmd) { 2192 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2193 int zoom = (cmd.args[1].value + cmd.args[2].value)/2; //FIXME: eurk 2375 int base_arg = 0; 2376 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2377 2378 int zoom = (cmd.args[base_arg + 1].value + cmd.args[base_arg + 2].value)/2; //FIXME: eurk 2194 2379 zoom = zoom*256/100; 2195 g .SetZoomRotate(zoom, -1);2380 g->SetZoomRotate(zoom, -1); 2196 2381 cmd.clear(); 2197 2382 } 2198 2383 2199 2384 void GrpImpl::impl_objRotate(Cmd& cmd) { 2200 GrpObj& g = (cmd.cmd2 == 0x51) ? grpobj[cmd.args[0].value] : bs_obj[cmd.args[0].value]; 2201 int angle = cmd.args[1].value; 2385 int base_arg = 0; 2386 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, (cmd.cmd2 == 0x51)); 2387 2388 int angle = cmd.args[base_arg + 1].value; 2202 2389 angle /= 10; 2203 2390 if (angle < 0) { … … 2206 2393 } 2207 2394 angle %= 360; 2208 g .SetZoomRotate(-1, angle);2395 g->SetZoomRotate(-1, angle); 2209 2396 cmd.clear(); 2210 2397 } 2211 2398 2212 2399 void GrpImpl::impl_objPosDims(Cmd& cmd) { 2213 GrpObj& obj = grpobj[cmd.args[0].value]; 2214 2215 VarInfo arg1 = cmd.args[1]; 2216 VarInfo arg2 = cmd.args[2]; 2400 int base_arg = 0; 2401 GrpObj* g = GetGraphicObjVarMode(cmd, base_arg, true); 2402 2403 VarInfo arg1 = cmd.args[base_arg + 1]; 2404 VarInfo arg2 = cmd.args[base_arg + 2]; 2217 2405 2218 2406 int val1, val2; 2219 2407 2220 2408 if (cmd.cmd3 == 1000) 2221 obj.GetPos(0, val1, val2);2409 g->GetPos(0, val1, val2); 2222 2410 else if (cmd.cmd3 == 1100) 2223 obj.GetSrcGeom(val1, val2);2411 g->GetSrcGeom(val1, val2); 2224 2412 2225 2413 cmd.SetFlagvar(arg1, val1); … … 2351 2539 //TODO: ??? 2352 2540 if ( (cmd.cmd1 == 1 || cmd.cmd1 == 2) && cmd.cmd2 == 0x51) { 2353 GrpObj& g = grpobj[cmd.args[0].value]; 2354 if (g.attr & GrpObj::UPDATE_ALL) { 2541 /*GrpObj& g = grpobj[cmd.args[0].value]; 2542 int attr; 2543 GrpObjMap::iterator it; 2544 for (it = g.children_obj.begin(); it != g.children_obj.end(); it++) 2545 attr |= it->second.attr; 2546 if (attr & GrpObj::UPDATE_ALL) 2547 SetObjChanged(cmd.args[0].value);*/ 2548 GrpObj* g; 2549 if (cmd.cmd1 == 2) 2550 g = GetGraphicObj(cmd.args[0].value, cmd.args[1].value); 2551 else 2552 g = GetGraphicObj(cmd.args[0].value); 2553 if (g->attr & GrpObj::UPDATE_ALL) 2355 2554 SetObjChanged(cmd.args[0].value); 2356 }2357 2555 } 2358 2556 } -
scn2k/scn2k_text.cc
r53 r55 164 164 }; 165 165 166 class TextImpl { 167 public: 168 TextWindow* text; 169 typedef enum {NORMAL=0, WAIT_TEXT=1, WAIT=2, 170 WAIT_CLICK=3, WAIT_ABORT=4, WAIT_CLICK_MOUSEPOS = 5, 171 WAIT_CLICK_MOUSEPOSEND_L = 6, WAIT_CLICK_MOUSEPOSEND_R = 7, 172 WAIT_SELECT_INBOX = 10, WAIT_SELECT_OUTBOX=11, WAIT_SELECT_VALUE = 12, 173 WAIT_EXTRN_MASK = 64, SAVEMASK = 128, LOADMASK = 256, SKIPMASK = 512, 174 CLEARSCR_MASK = 1024, STATSAVE_MASK = 2048, CLEARSCR_WAIT_MASK=(1<<12), 175 SKIPEND_MASK = (1<<13), BACKLOG_MASK=(1<<14), BACKLOG_MASK_FWD=(1<<15), 176 BACKLOG_MASK_KOE=(1<<16), BACKLOG_WAIT_MASK=(1<<17), 177 ALLMASK = (CLEARSCR_MASK | WAIT_EXTRN_MASK | SAVEMASK | LOADMASK | SKIPMASK | BACKLOG_MASK | BACKLOG_MASK_FWD | BACKLOG_MASK_KOE | BACKLOG_WAIT_MASK | STATSAVE_MASK | CLEARSCR_WAIT_MASK | SKIPEND_MASK) 178 } Status; 179 Status status, status_saved, status_mask; 180 private: 181 std::string ruby_text; 182 bool ruby_text_flag; 183 unsigned int wait_time; 184 unsigned int old_time; 185 unsigned int base_time; 186 int text_window_number; 187 bool text_parsing; 188 TextStream text_stream; 189 SkipMode skip_mode; 190 int save_selectcount; 191 192 std::map<int, TimerAtom> timer_var; 193 std::vector<WidTextButton*> selects; 194 std::vector<int> sel_backlog_pos; 195 string replace_name[26]; 196 string replace_name2[26]; 197 PicContainer* sel_widget; 198 PicWidget* backlog_widget; 199 200 vector<BacklogItem>& backlog; 201 BacklogItem& backlog_item; 202 BacklogItem cur_backlog_item; 203 BacklogItem drawn_backlog_item; 204 205 public: 206 PicContainer& parent; 207 Event::Container& event; 208 AyuSysConfig *config; 209 private: 210 TextWindow* widgets[32]; 211 WidTimeCursor* kcursor; 212 Surface* sel_bg1; 213 Surface* sel_bg2; 214 Rect sel_bg_rect; 215 216 void SetCursor(int num); 217 VarInfo wait_savedvar[2]; 218 219 public: 220 void AddText(const char* str); 221 222 static void PressFuncSkip(void* pointer, WidButton* from); 223 static void PressFuncLoad(void* pointer, WidButton* from); 224 static void PressFuncSave(void* pointer, WidButton* from); 225 static void PressFuncBacklog(void* pointer, WidButton* from); 226 static void PressFuncBacklogFwd(void* pointer, WidButton* from); 227 private: 228 static void PressFuncButton(void* pointer, WidButton* from); 229 static bool PressFunc(int x, int y, void* pointer); 230 166 class TextImpl : public CommandHandler { 231 167 public: 232 168 TextImpl(Event::Container& _event, PicContainer& _parent, vector<BacklogItem>& parent_backlog, BacklogItem& parent_backlog_item); … … 247 183 void SetSkipMode(SkipMode _mode); 248 184 void CreateSelBG(void); 185 186 void AddText(const char* str); 187 188 static void PressFuncSkip(void* pointer, WidButton* from); 189 static void PressFuncLoad(void* pointer, WidButton* from); 190 static void PressFuncSave(void* pointer, WidButton* from); 191 static void PressFuncBacklog(void* pointer, WidButton* from); 192 static void PressFuncBacklogFwd(void* pointer, WidButton* from); 193 194 private: 195 static void PressFuncButton(void* pointer, WidButton* from); 196 static bool PressFunc(int x, int y, void* pointer); 197 void SetCursor(int num); 198 199 public: 200 TextWindow* text; 201 typedef enum {NORMAL=0, WAIT_TEXT=1, WAIT=2, 202 WAIT_CLICK=3, WAIT_ABORT=4, WAIT_CLICK_MOUSEPOS = 5, 203 WAIT_CLICK_MOUSEPOSEND_L = 6, WAIT_CLICK_MOUSEPOSEND_R = 7, 204 WAIT_SELECT_INBOX = 10, WAIT_SELECT_OUTBOX=11, WAIT_SELECT_VALUE = 12, 205 WAIT_EXTRN_MASK = 64, SAVEMASK = 128, LOADMASK = 256, SKIPMASK = 512, 206 CLEARSCR_MASK = 1024, STATSAVE_MASK = 2048, CLEARSCR_WAIT_MASK=(1<<12), 207 SKIPEND_MASK = (1<<13), BACKLOG_MASK=(1<<14), BACKLOG_MASK_FWD=(1<<15), 208 BACKLOG_MASK_KOE=(1<<16), BACKLOG_WAIT_MASK=(1<<17), 209 ALLMASK = (CLEARSCR_MASK | WAIT_EXTRN_MASK | SAVEMASK | 210 LOADMASK | SKIPMASK | BACKLOG_MASK | BACKLOG_MASK_FWD | 211 BACKLOG_MASK_KOE | BACKLOG_WAIT_MASK | STATSAVE_MASK | 212 CLEARSCR_WAIT_MASK | SKIPEND_MASK) 213 } Status; 214 Status status, status_saved, status_mask; 215 216 private: 217 std::string ruby_text; 218 bool ruby_text_flag; 219 unsigned int wait_time; 220 unsigned int old_time; 221 unsigned int base_time; 222 int text_window_number; 223 bool text_parsing; 224 TextStream text_stream; 225 SkipMode skip_mode; 226 int save_selectcount; 227 228 std::map<int, TimerAtom> timer_var; 229 std::vector<WidTextButton*> selects; 230 std::vector<int> sel_backlog_pos; 231 string replace_name[26]; 232 string replace_name2[26]; 233 PicContainer* sel_widget; 234 PicWidget* backlog_widget; 235 236 vector<BacklogItem>& backlog; 237 BacklogItem& backlog_item; 238 BacklogItem cur_backlog_item; 239 BacklogItem drawn_backlog_item; 240 241 TextWindow* widgets[32]; 242 WidTimeCursor* kcursor; 243 Surface* sel_bg1; 244 Surface* sel_bg2; 245 Rect sel_bg_rect; 246 247 VarInfo wait_savedvar[2]; 248 249 AyuSysConfig *config; 250 251 Event::Container& event; 252 PicContainer& parent; 253 254 //Opcode handling 255 void impl_txtClear(Cmd& cmd); 256 void impl_logKoe(Cmd& cmd); 257 void impl_pause(Cmd& cmd); 258 void impl_br(Cmd& cmd); 259 void impl_FaceOpen(Cmd& cmd); 260 void impl_FaceClear(Cmd& cmd); 249 261 }; 250 262 … … 265 277 text_stream.kanji_type = TextStream::sjis; 266 278 event.RegisterGlobalPressFunc(&PressFunc, (void*)this); 279 280 RegisterCommand(1, 33, 73, "grpOpenBg", (CmdImpl) &TextImpl::impl_txtClear); 281 RegisterCommand(1, 33, 75, "grpMulti", (CmdImpl) &TextImpl::impl_txtClear); 282 RegisterCommand(1, 33, 76, "grpOpen", (CmdImpl) &TextImpl::impl_txtClear); 283 284 RegisterCommand(1, 23, 0, "koePlay", (CmdImpl) &TextImpl::impl_logKoe); 285 RegisterCommand(1, 23, 8, "koeDoPlay", (CmdImpl) &TextImpl::impl_logKoe); 286 287 RegisterCommand(0, 3, 151, "msgHide", (CmdImpl) &TextImpl::impl_txtClear); 288 RegisterCommand(0, 3, 17, "pause", (CmdImpl) &TextImpl::impl_pause); 289 RegisterCommand(0, 3, 3, "par", (CmdImpl) &TextImpl::impl_br); //FIXME 290 RegisterCommand(0, 3, 201, "br", (CmdImpl) &TextImpl::impl_br); 291 RegisterCommand(0, 3, 1000, "FaceOpen", (CmdImpl) &TextImpl::impl_FaceOpen); 292 RegisterCommand(0, 3, 1001, "FaceClear", (CmdImpl) &TextImpl::impl_FaceClear); 267 293 } 268 294 … … 865 891 } 866 892 893 void TextImpl::impl_txtClear(Cmd& cmd) { 894 if (text != NULL) { 895 text->ResetFace(); 896 if (cmd.cmd2 == 3 && cmd.cmd3 == 151) 897 text->wid->Clear(); 898 } 899 cur_backlog_item.face = ""; 900 if (cmd.cmd2 == 3 && cmd.cmd3 == 151) 901 text_stream.Clear(); 902 hide(); 903 } 904 905 void TextImpl::impl_logKoe(Cmd& cmd) { 906 // PlayKoe ; ÀŒœÐÎÏ¥³¥Þ¥ó¥É€ò¥Á¥§¥Ã¥¯€¹€ë */ 907 cur_backlog_item.koe = cmd.args[0].value; 908 } 909 910 void TextImpl::impl_pause(Cmd& cmd) { 911 if (text != NULL) { 912 eprintf("start\n"); 913 text->StartText(text_stream); 914 if (skip_mode & SKIP_TEXT) text->wid->Flush(); 915 else if (kcursor) kcursor->show(); 916 status = WAIT_TEXT; 917 text_parsing = false; 918 } 919 backlog_item = cur_backlog_item; 920 if (cur_backlog_item.scn == 0 && cur_backlog_item.pos == -1) backlog_item.text = text_stream; 921 cur_backlog_item.Clear(); 922 923 cmd.clear(); 924 cmd.cmd_type = CMD_WAITFRAMEUPDATE; // ²èÁüÉÁ²è€ËÌá€ë(skip»þ€Ë¥Æ¥¥¹¥È€¬ÉÁ²è€µ€ì€ä€¹€¯€¹€ë€¿€á) 925 } 926 927 void TextImpl::impl_br(Cmd& cmd) { 928 text_stream.AddReturn(); 929 cur_backlog_item.DeleteTextPos(); 930 cmd.clear(); 931 } 932 933 void TextImpl::impl_FaceOpen(Cmd& cmd) { 934 if (text == NULL) 935 show(); 936 string s = cmd.Str(cmd.args[0]); 937 s += ".g00"; 938 if (text != NULL) 939 text->ShowFace(s.c_str()); 940 cur_backlog_item.face = s; 941 cmd.cmd_type = CMD_SAVECMD_ONCE; 942 } 943 944 void TextImpl::impl_FaceClear(Cmd& cmd) { 945 if (text == NULL) 946 show(); 947 if (text) 948 text->ResetFace(); 949 cur_backlog_item.face = ""; 950 cmd.cmd_type = CMD_SAVECMD_ONCE; 951 } 952 867 953 void TextImpl::Exec(Cmd& cmd) { 868 954 if (cmd.cmd_type == CMD_TEXT) { … … 889 975 return; 890 976 } 977 891 978 if (cmd.cmd_type != CMD_OTHER) return; 892 /* ¥Æ¥¥¹¥È¥Š¥£¥ó¥É¥Š€òŸÃµî€¹€ë¥³¥Þ¥ó¥ÉÎà€ò¥Á¥§¥Ã¥¯€¹€ë */ 893 if (cmd.cmd1 == 1 && cmd.cmd2 == 0x21) { 894 if (cmd.cmd3 == 0x49 || cmd.cmd3 == 0x4b || cmd.cmd3 == 0x4c) { 895 if (text) text->ResetFace(); 896 cur_backlog_item.face = ""; 897 hide(); 898 } 899 } 900 if (cmd.cmd1 == 1 && cmd.cmd2 == 0x17 && cmd.cmd3 == 0 && cmd.cmd4 == 1) { 901 // PlayKoe ; ÀŒœÐÎÏ¥³¥Þ¥ó¥É€ò¥Á¥§¥Ã¥¯€¹€ë */ 902 cur_backlog_item.koe = cmd.args[0].value; 903 } 904 if (cmd.cmd1 == 0 && cmd.cmd2 == 3 && cmd.cmd3 == 0x97) { // €€€€€Î€«€Ê¡Œ 905 906 if (text) { 907 text->ResetFace(); 908 text->wid->Clear(); 909 } 910 cur_backlog_item.face = ""; 911 text_stream.Clear(); 912 hide(); 913 } 979 980 CommandHandler::Exec(cmd); 981 914 982 if (cmd.cmd1 == 0 && cmd.cmd2 == 3) { 915 if (cmd.cmd3 == 0x11) { // ¥Æ¥¥¹¥ÈÉœŒš¡¢¥¯¥ê¥Ã¥¯ÂÔ€Á 916 if (text) { 917 eprintf("start\n"); 918 text->StartText(text_stream); 919 if (skip_mode & SKIP_TEXT) text->wid->Flush(); 920 else if (kcursor) kcursor->show(); 921 status = WAIT_TEXT; 922 text_parsing = false; 923 } 924 backlog_item = cur_backlog_item; 925 if (cur_backlog_item.scn == 0 && cur_backlog_item.pos == -1) backlog_item.text = text_stream; 926 cur_backlog_item.Clear(); 927 928 cmd.clear(); 929 cmd.cmd_type = CMD_WAITFRAMEUPDATE; // ²èÁüÉÁ²è€ËÌá€ë(skip»þ€Ë¥Æ¥¥¹¥È€¬ÉÁ²è€µ€ì€ä€¹€¯€¹€ë€¿€á) 930 // €³€ì€À€È£±¥Õ¥ì¡Œ¥à£±¥Æ¥¥¹¥È€·€«ÉœŒš€µ€ì€Ê€¯€Ê€ë€Î€ÇÃí°Õ 931 } else if (cmd.cmd3 == 3 || cmd.cmd3 == 0xc9) { // ¥ê¥¿¡Œ¥óÁÞÆþ 932 text_stream.AddReturn(); 933 cur_backlog_item.DeleteTextPos(); 934 cmd.clear(); 935 } else if (cmd.cmd3 == 0x3e8 || cmd.cmd3 == 0x3e9) { // Žé¥°¥é¥Õ¥£¥Ã¥¯Êѹ¹ 936 if (text == NULL) { 937 show(); 938 } 939 if (cmd.cmd3 == 0x3e8) { 940 string s = cmd.Str(cmd.args[0]); 941 s += ".g00"; 942 if (text) text->ShowFace(s.c_str()); 943 cur_backlog_item.face = s; 944 cmd.cmd_type = CMD_SAVECMD_ONCE; 945 } else if (cmd.cmd3 == 0x3e9) { // Žé¥°¥é¥Õ¥£¥Ã¥¯ŸÃµî 946 if (text) text->ResetFace(); 947 cur_backlog_item.face = ""; 948 cmd.cmd_type = CMD_SAVECMD_ONCE; 949 } 950 } else if (cmd.cmd3 == 0x78) { // ¥ë¥ÓŽØÏ¢ 983 if (cmd.cmd3 == 0x78) { // ¥ë¥ÓŽØÏ¢ 951 984 if (text == NULL) { 952 985 show();
![(please configure the [header_logo] section in trac.ini)](/otakunoraifu/chrome/site/your_project_logo.png)