├── .gitattributes ├── .gitignore ├── Asm.cpp ├── Asm.h ├── AsmDlg.cpp ├── AsmDlg.h ├── BBSInfo.txt ├── CT2AsmView.cpp ├── CT2AsmView.h ├── CT2CheatsSearch.cpp ├── CT2CheatsSearch.h ├── CT2ChildFrm.cpp ├── CT2ChildFrm.h ├── CT2Doc.cpp ├── CT2Doc.h ├── CT2Favorite.cpp ├── CT2Favorite.h ├── CT2HexView.cpp ├── CT2HexView.h ├── CT2InputDlg.cpp ├── CT2InputDlg.h ├── CT2MainFrm.cpp ├── CT2MainFrm.h ├── CT2NormalDlg.cpp ├── CT2NormalDlg.h ├── CT2Palette.cpp ├── CT2Palette.h ├── CT2ScriptView.cpp ├── CT2ScriptView.h ├── CT2StatusBar.cpp ├── CT2StatusBar.h ├── CT2TextView.cpp ├── CT2TextView.h ├── CT2TileEditorView.cpp ├── CT2TileEditorView.h ├── CT2TileView.cpp ├── CT2TileView.h ├── CT2TreeBar.cpp ├── CT2TreeBar.h ├── CT2View.cpp ├── CT2View.h ├── CTMacro.cpp ├── CTMacro.h ├── Common.cpp ├── Common.h ├── CrystalMemory.cpp ├── CrystalMemory.h ├── CrystalPlayer.cpp ├── CrystalPlayer.h ├── CrystalTile2 - 복사본.rc ├── CrystalTile2.cpp ├── CrystalTile2.h ├── CrystalTile2.rc ├── CrystalTile2.sln ├── CrystalTile2.vcproj ├── CrystalTile2.vcxproj ├── CrystalTile2.vcxproj.filters ├── CrystalTree ├── CrystalTree.cpp ├── CrystalTree.h ├── CrystalTree.rc ├── CrystalTree.sln ├── CrystalTree.vcproj ├── CrystalTree.vcxproj ├── CrystalTree.vcxproj.filters ├── CrystalTreeCtrl.cpp ├── CrystalTreeCtrl.h ├── CrystalTreeDlg.cpp ├── CrystalTreeDlg.h ├── ReadMe.txt ├── res │ ├── CrystalTree.ico │ ├── CrystalTree.manifest │ ├── CrystalTree.rc2 │ ├── bitmap1.bmp │ └── icon1.ico ├── resource.h ├── stdafx.cpp └── stdafx.h ├── CrystalTreeCtrl.cpp ├── CrystalTreeCtrl.h ├── DSFirmWareSettings.cpp ├── DSFirmWareSettings.h ├── Desktop.ini ├── FileCompDlg.cpp ├── FileCompDlg.h ├── LICENSE.txt ├── LZ77Search.cpp ├── LZ77Search.h ├── NARCFileInfo.cpp ├── NARCFileInfo.h ├── NdsFileSystemInfo.cpp ├── NdsFileSystemInfo.h ├── NdsInfo.cpp ├── NdsInfo.h ├── OpenFileDialog.cpp ├── OpenFileDialog.h ├── PacFileInfo.cpp ├── PacFileInfo.h ├── ReadMe.md ├── ReadMe_old.txt ├── RecentStatList.cpp ├── RecentStatList.h ├── RelativeDlg.cpp ├── RelativeDlg.h ├── SDatInfo.cpp ├── SDatInfo.h ├── SubFileInfo.cpp ├── SubFileInfo.h ├── TextFileDialog.cpp ├── TextFileDialog.h ├── ToolBarEx.cpp ├── ToolBarEx.h ├── ToolsDlg.cpp ├── ToolsDlg.h ├── UtilityFileInfo.cpp ├── UtilityFileInfo.h ├── WhatsNew.txt ├── res ├── Bk1.bin ├── Bk2.bin ├── Bk3.bin ├── Bk4.bin ├── Bk5.bin ├── Bk6.bin ├── Bk7.bin ├── CT2_AsmView.ctr ├── CT2_EditorView.ctr ├── CT2_HexView.ctr ├── CT2_ScriptView.ctr ├── CT2_TileView.ctr ├── CrystalTile2.ico ├── CrystalTile2.manifest ├── CrystalTile2.rc2 ├── CrystalTile2Doc.ico ├── DsEmuMenuRes.bin ├── NdsFsi.bin ├── NintendoLogo.bin ├── Palette.bin ├── Palette2.bin ├── Palette3.bin ├── Palette4.bin ├── Palette5.bin ├── Palette6.bin ├── Palette7.bin ├── Toolbar.bmp ├── User_2022 - 바로 가기.lnk ├── agbcomp.bin └── angellogo.jpg ├── resource.h ├── stdafx.cpp └── stdafx.h /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Oo]ut/ 33 | [Ll]og/ 34 | [Ll]ogs/ 35 | 36 | # Visual Studio 2015/2017 cache/options directory 37 | .vs/ 38 | # Uncomment if you have tasks that create the project's static files in wwwroot 39 | #wwwroot/ 40 | 41 | # Visual Studio 2017 auto generated files 42 | Generated\ Files/ 43 | 44 | # MSTest test Results 45 | [Tt]est[Rr]esult*/ 46 | [Bb]uild[Ll]og.* 47 | 48 | # NUnit 49 | *.VisualState.xml 50 | TestResult.xml 51 | nunit-*.xml 52 | 53 | # Build Results of an ATL Project 54 | [Dd]ebugPS/ 55 | [Rr]eleasePS/ 56 | dlldata.c 57 | 58 | # Benchmark Results 59 | BenchmarkDotNet.Artifacts/ 60 | 61 | # .NET Core 62 | project.lock.json 63 | project.fragment.lock.json 64 | artifacts/ 65 | 66 | # ASP.NET Scaffolding 67 | ScaffoldingReadMe.txt 68 | 69 | # StyleCop 70 | StyleCopReport.xml 71 | 72 | # Files built by Visual Studio 73 | *_i.c 74 | *_p.c 75 | *_h.h 76 | *.ilk 77 | *.meta 78 | *.obj 79 | *.iobj 80 | *.pch 81 | *.pdb 82 | *.ipdb 83 | *.pgc 84 | *.pgd 85 | *.rsp 86 | *.sbr 87 | *.tlb 88 | *.tli 89 | *.tlh 90 | *.tmp 91 | *.tmp_proj 92 | *_wpftmp.csproj 93 | *.log 94 | *.vspscc 95 | *.vssscc 96 | .builds 97 | *.pidb 98 | *.svclog 99 | *.scc 100 | 101 | # Chutzpah Test files 102 | _Chutzpah* 103 | 104 | # Visual C++ cache files 105 | ipch/ 106 | *.aps 107 | *.ncb 108 | *.opendb 109 | *.opensdf 110 | *.sdf 111 | *.cachefile 112 | *.VC.db 113 | *.VC.VC.opendb 114 | 115 | # Visual Studio profiler 116 | *.psess 117 | *.vsp 118 | *.vspx 119 | *.sap 120 | 121 | # Visual Studio Trace Files 122 | *.e2e 123 | 124 | # TFS 2012 Local Workspace 125 | $tf/ 126 | 127 | # Guidance Automation Toolkit 128 | *.gpState 129 | 130 | # ReSharper is a .NET coding add-in 131 | _ReSharper*/ 132 | *.[Rr]e[Ss]harper 133 | *.DotSettings.user 134 | 135 | # TeamCity is a build add-in 136 | _TeamCity* 137 | 138 | # DotCover is a Code Coverage Tool 139 | *.dotCover 140 | 141 | # AxoCover is a Code Coverage Tool 142 | .axoCover/* 143 | !.axoCover/settings.json 144 | 145 | # Coverlet is a free, cross platform Code Coverage Tool 146 | coverage*.json 147 | coverage*.xml 148 | coverage*.info 149 | 150 | # Visual Studio code coverage results 151 | *.coverage 152 | *.coveragexml 153 | 154 | # NCrunch 155 | _NCrunch_* 156 | .*crunch*.local.xml 157 | nCrunchTemp_* 158 | 159 | # MightyMoose 160 | *.mm.* 161 | AutoTest.Net/ 162 | 163 | # Web workbench (sass) 164 | .sass-cache/ 165 | 166 | # Installshield output folder 167 | [Ee]xpress/ 168 | 169 | # DocProject is a documentation generator add-in 170 | DocProject/buildhelp/ 171 | DocProject/Help/*.HxT 172 | DocProject/Help/*.HxC 173 | DocProject/Help/*.hhc 174 | DocProject/Help/*.hhk 175 | DocProject/Help/*.hhp 176 | DocProject/Help/Html2 177 | DocProject/Help/html 178 | 179 | # Click-Once directory 180 | publish/ 181 | 182 | # Publish Web Output 183 | *.[Pp]ublish.xml 184 | *.azurePubxml 185 | # Note: Comment the next line if you want to checkin your web deploy settings, 186 | # but database connection strings (with potential passwords) will be unencrypted 187 | *.pubxml 188 | *.publishproj 189 | 190 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 191 | # checkin your Azure Web App publish settings, but sensitive information contained 192 | # in these scripts will be unencrypted 193 | PublishScripts/ 194 | 195 | # NuGet Packages 196 | *.nupkg 197 | # NuGet Symbol Packages 198 | *.snupkg 199 | # The packages folder can be ignored because of Package Restore 200 | **/[Pp]ackages/* 201 | # except build/, which is used as an MSBuild target. 202 | !**/[Pp]ackages/build/ 203 | # Uncomment if necessary however generally it will be regenerated when needed 204 | #!**/[Pp]ackages/repositories.config 205 | # NuGet v3's project.json files produces more ignorable files 206 | *.nuget.props 207 | *.nuget.targets 208 | 209 | # Microsoft Azure Build Output 210 | csx/ 211 | *.build.csdef 212 | 213 | # Microsoft Azure Emulator 214 | ecf/ 215 | rcf/ 216 | 217 | # Windows Store app package directories and files 218 | AppPackages/ 219 | BundleArtifacts/ 220 | Package.StoreAssociation.xml 221 | _pkginfo.txt 222 | *.appx 223 | *.appxbundle 224 | *.appxupload 225 | 226 | # Visual Studio cache files 227 | # files ending in .cache can be ignored 228 | *.[Cc]ache 229 | # but keep track of directories ending in .cache 230 | !?*.[Cc]ache/ 231 | 232 | # Others 233 | ClientBin/ 234 | ~$* 235 | *~ 236 | *.dbmdl 237 | *.dbproj.schemaview 238 | *.jfm 239 | *.pfx 240 | *.publishsettings 241 | orleans.codegen.cs 242 | 243 | # Including strong name files can present a security risk 244 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 245 | #*.snk 246 | 247 | # Since there are multiple workflows, uncomment next line to ignore bower_components 248 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 249 | #bower_components/ 250 | 251 | # RIA/Silverlight projects 252 | Generated_Code/ 253 | 254 | # Backup & report files from converting an old project file 255 | # to a newer Visual Studio version. Backup files are not needed, 256 | # because we have git ;-) 257 | _UpgradeReport_Files/ 258 | Backup*/ 259 | UpgradeLog*.XML 260 | UpgradeLog*.htm 261 | ServiceFabricBackup/ 262 | *.rptproj.bak 263 | 264 | # SQL Server files 265 | *.mdf 266 | *.ldf 267 | *.ndf 268 | 269 | # Business Intelligence projects 270 | *.rdl.data 271 | *.bim.layout 272 | *.bim_*.settings 273 | *.rptproj.rsuser 274 | *- [Bb]ackup.rdl 275 | *- [Bb]ackup ([0-9]).rdl 276 | *- [Bb]ackup ([0-9][0-9]).rdl 277 | 278 | # Microsoft Fakes 279 | FakesAssemblies/ 280 | 281 | # GhostDoc plugin setting file 282 | *.GhostDoc.xml 283 | 284 | # Node.js Tools for Visual Studio 285 | .ntvs_analysis.dat 286 | node_modules/ 287 | 288 | # Visual Studio 6 build log 289 | *.plg 290 | 291 | # Visual Studio 6 workspace options file 292 | *.opt 293 | 294 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 295 | *.vbw 296 | 297 | # Visual Studio LightSwitch build output 298 | **/*.HTMLClient/GeneratedArtifacts 299 | **/*.DesktopClient/GeneratedArtifacts 300 | **/*.DesktopClient/ModelManifest.xml 301 | **/*.Server/GeneratedArtifacts 302 | **/*.Server/ModelManifest.xml 303 | _Pvt_Extensions 304 | 305 | # Paket dependency manager 306 | .paket/paket.exe 307 | paket-files/ 308 | 309 | # FAKE - F# Make 310 | .fake/ 311 | 312 | # CodeRush personal settings 313 | .cr/personal 314 | 315 | # Python Tools for Visual Studio (PTVS) 316 | __pycache__/ 317 | *.pyc 318 | 319 | # Cake - Uncomment if you are using it 320 | # tools/** 321 | # !tools/packages.config 322 | 323 | # Tabs Studio 324 | *.tss 325 | 326 | # Telerik's JustMock configuration file 327 | *.jmconfig 328 | 329 | # BizTalk build output 330 | *.btp.cs 331 | *.btm.cs 332 | *.odx.cs 333 | *.xsd.cs 334 | 335 | # OpenCover UI analysis results 336 | OpenCover/ 337 | 338 | # Azure Stream Analytics local run output 339 | ASALocalRun/ 340 | 341 | # MSBuild Binary and Structured Log 342 | *.binlog 343 | 344 | # NVidia Nsight GPU debugger configuration file 345 | *.nvuser 346 | 347 | # MFractors (Xamarin productivity tool) working folder 348 | .mfractor/ 349 | 350 | # Local History for Visual Studio 351 | .localhistory/ 352 | 353 | # BeatPulse healthcheck temp database 354 | healthchecksdb 355 | 356 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 357 | MigrationBackup/ 358 | 359 | # Ionide (cross platform F# VS Code tools) working folder 360 | .ionide/ 361 | 362 | # Fody - auto-generated XML schema 363 | FodyWeavers.xsd -------------------------------------------------------------------------------- /Asm.h: -------------------------------------------------------------------------------- 1 | #ifndef CT2_CT2ASM_H 2 | #define CT2_CT2ASM_H 3 | 4 | extern int (* des_arm_instructions_set[4096])(UINT adr, UINT nOpCode, char * txt); 5 | extern int (* des_thumb_instructions_set[1024])(UINT adr, UINT nOpCode, char * txt); 6 | 7 | #endif // CT2_CT2ASM_H 8 | -------------------------------------------------------------------------------- /AsmDlg.cpp: -------------------------------------------------------------------------------- 1 | // AsmDlg.cpp : 구현 파일 2 | // 3 | 4 | #include "stdafx.h" 5 | #include "CrystalTile2.h" 6 | #include "AsmDlg.h" 7 | #include ".\asmdlg.h" 8 | 9 | // CAsmHint 10 | 11 | CAsmHint::CAsmHint() 12 | : m_strCompSrc(_T("")) 13 | { 14 | } 15 | 16 | void CAsmHint::DrawItem(LPDRAWITEMSTRUCT lpDIS) 17 | { 18 | CString strHint, strText; 19 | GetWindowText(strHint); 20 | strHint.Replace(_T("\t"), _T("\n")); 21 | CDC dc; 22 | dc.Attach(lpDIS->hDC); 23 | dc.FillRect(&lpDIS->rcItem, &CBrush(::GetSysColor(COLOR_BTNFACE))); 24 | 25 | int x = lpDIS->rcItem.left; 26 | int y = lpDIS->rcItem.top; 27 | int nLen = m_strCompSrc.GetLength(); 28 | 29 | CString strSrc; 30 | int nPos = m_strCompSrc.Find(_T(' ')); 31 | if (nPos != -1) 32 | strSrc = m_strCompSrc.Left(nPos); 33 | else 34 | strSrc = m_strCompSrc; 35 | strSrc.TrimLeft(); 36 | strSrc.TrimRight(); 37 | 38 | nPos = 0; 39 | CSize sz = dc.GetTextExtent(_T(" ")); 40 | int nTab = 10 * sz.cx; 41 | while (TRUE) 42 | { 43 | if (x >= lpDIS->rcItem.right) 44 | { 45 | x = lpDIS->rcItem.left; 46 | y += sz.cy; 47 | } 48 | 49 | AfxExtractSubString(strText, strHint, nPos++); 50 | if (strText.IsEmpty()) break; 51 | 52 | CString str = strText.Left(nLen); 53 | 54 | if (lstrcmp(str, strSrc) == 0) 55 | dc.SetTextColor(0xFF0000); 56 | else 57 | dc.SetTextColor(0x00); 58 | 59 | dc.TextOut(x, y, strText); 60 | sz = dc.GetTextExtent(strText); 61 | x += sz.cx + nTab - sz.cx; 62 | } 63 | 64 | dc.Detach(); 65 | } 66 | 67 | 68 | // CAsmDlg 대화 상자 69 | 70 | IMPLEMENT_DYNAMIC(CAsmDlg, CDialog) 71 | CAsmDlg::CAsmDlg(CWnd* pParent /*=NULL*/) 72 | : CDialog(CAsmDlg::IDD, pParent) 73 | , m_strAsmHint(_T("")) 74 | , m_nType(0) 75 | , m_strAsm(_T("")) 76 | , m_nCurOffset(0) 77 | , m_strAsmDesc(_T("")) 78 | { 79 | } 80 | 81 | CAsmDlg::~CAsmDlg() 82 | { 83 | } 84 | 85 | void CAsmDlg::DoDataExchange(CDataExchange* pDX) 86 | { 87 | CDialog::DoDataExchange(pDX); 88 | DDX_Control(pDX, IDC_ASMCB, m_AsmCB); 89 | DDX_Text(pDX, IDC_ASMHINT, m_strAsmHint); 90 | DDX_CBString(pDX, IDC_ASMCB, m_strAsm); 91 | DDX_Text(pDX, IDC_ASMDESC, m_strAsmDesc); 92 | } 93 | 94 | 95 | BEGIN_MESSAGE_MAP(CAsmDlg, CDialog) 96 | ON_BN_CLICKED(IDOK, OnBnClickedOk) 97 | ON_CBN_EDITCHANGE(IDC_ASMCB, OnCbnEditchangeAsmcb) 98 | END_MESSAGE_MAP() 99 | 100 | // CAsmDlg 메시지 핸들러 101 | 102 | void CAsmDlg::OnBnClickedOk() 103 | { 104 | UpdateData(); 105 | 106 | BYTE nThumb = m_nType & 1; 107 | m_nType = GetAsmCode(m_strAsm, m_nCurOffset, m_nSize, nThumb); 108 | 109 | if (m_strAsmList.Find(m_strAsm, 0) == -1) 110 | { 111 | CString sasm; 112 | sasm.Format(_T("\n%s"), m_strAsm); 113 | m_strAsmList.Insert(0, sasm); 114 | } 115 | 116 | if (!m_nSize) 117 | { 118 | Hint(IDS_ASMERROR, MB_OK | MB_ICONERROR); 119 | OnCancel(); 120 | } 121 | else 122 | OnOK(); 123 | } 124 | 125 | void CAsmDlg::OnCbnEditchangeAsmcb() 126 | { 127 | UpdateData(); 128 | //if(m_strAsm.GetLength()>1) return; 129 | 130 | CString strAsm = m_strAsm; 131 | strAsm.MakeLower(); 132 | strAsm.TrimLeft(); 133 | switch (strAsm.GetAt(0)) 134 | { 135 | case 'a': 136 | m_strAsmHint = _T("adc\tadd\tand\tasr"); 137 | break; 138 | 139 | case 'b': 140 | m_strAsmHint = _T("b\tbeq\tbne\tbcs\tbcc\tbmi\tbpl\tbvs\tbvc\tbhi\tbls\tbge\tblt\tbgt\tble\tbic\tbl\tbx"); 141 | break; 142 | 143 | case 'c': 144 | m_strAsmHint = _T("cdp\tcmn\tcmp"); 145 | break; 146 | 147 | case 'e': 148 | m_strAsmHint = _T("eor"); 149 | break; 150 | 151 | case 'l': 152 | m_strAsmHint = _T("ldc\tldm\tldmia\tldr\tldrb\tldrh\tldrsb\tldrsh\tlsl\tlsr"); 153 | break; 154 | 155 | case 'm': 156 | m_strAsmHint = _T("mcr\tmla\tmov\tmrc\tmrs\tmsr\tmul\tmvn"); 157 | break; 158 | 159 | case 'n': 160 | m_strAsmHint = _T("nop"); 161 | break; 162 | 163 | case 'o': 164 | m_strAsmHint = _T("orr"); 165 | break; 166 | 167 | case 'r': 168 | m_strAsmHint = _T("ror\trrx\trsb\trsc"); 169 | break; 170 | 171 | case 's': 172 | m_strAsmHint = _T("sbc\tsmlal\tsmull\tstc\tstm\tstmia\tstr\tstrb\tstrh\tstrsb\tstrsh\tsub\tswi\tswp"); 173 | break; 174 | 175 | case 't': 176 | m_strAsmHint = _T("teq\ttst"); 177 | break; 178 | 179 | case 'u': 180 | m_strAsmHint = _T("umlal\tumull"); 181 | break; 182 | default: 183 | m_strAsmHint.Empty(); 184 | break; 185 | } 186 | 187 | m_AsmHint.m_strCompSrc = m_strAsm; 188 | GetDlgItem(IDC_ASMHINT)->SetWindowText(m_strAsmHint); 189 | UpdateAsmDesc(); 190 | } 191 | 192 | BOOL CAsmDlg::OnInitDialog() 193 | { 194 | CDialog::OnInitDialog(); 195 | 196 | m_AsmHint.SubclassDlgItem(IDC_ASMHINT, this); 197 | m_AsmHint.ModifyStyle(0, SS_OWNERDRAW); 198 | 199 | m_AsmCB.ResetContent(); 200 | CString t; 201 | int i = 1; 202 | while (TRUE) 203 | { 204 | AfxExtractSubString(t, m_strAsmList, i++); 205 | if (t.IsEmpty()) break; 206 | m_AsmCB.AddString(t); 207 | } 208 | 209 | UpdateData(FALSE); 210 | 211 | return TRUE; // return TRUE unless you set the focus to a control 212 | // 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다. 213 | } 214 | 215 | struct ASMDESC 216 | { 217 | char* lpAsm; 218 | char* lpDesc; 219 | }; 220 | 221 | // 어셈블리 명령어 포맷 도움말 222 | ASMDESC g_AsmDesc[] = 223 | { 224 | { "adc", "adc{cond}{s} Rd, Rn\nadc{cond}{s} Rd, Rn, Op2\nadc Rd,Rs\nAdd with Carry" }, 225 | { "add", "add{cond}{s} Rd, Rn\tadd{cond}{s} Rd, Rn, Op2\nadd Rd,Rs,Imm3bit\tadd Rd,Imm8bit\nadd Rd,Rs,Rn\t\tadd R0-14,R8-15\nadd R8-14,R0-15\tadd R15,R0-15\nadd Rd,PC,Imm8bit*4\tadd Rd,SP,Imm8bit*4\nadd Rd,SP,Imm7bit*4\tadd Rd,SP,-Imm7bit*4" }, 226 | { "and", "and{cond}{s} Rd, Rn\nand{cond}{s} Rd, Rn, Op2\nand Rd,Rs" }, 227 | { "asr", "asr Rd, Rs\nasr Rd, Rs, shift\nRd/Rs = R0-R7\nshift = 0-31\n우측으로 산술 시프트 연산" }, 228 | { "b", "b{cond} offset\nAsm\toffset = -32M..+32M (step:4)\nThumb\toffset = $+4-256..$+4+254 (step:2)" }, 229 | { "bls", "부호 없는 작거나 같음" }, 230 | { "ble", "부호 있는 작거나 같음" }, 231 | { "blt", "부호 있는 작음" }, 232 | { "beq", "같음" }, 233 | { "bge", "부호 있는 크기나 같음" }, 234 | { "bgt", "부호 있는 큼" }, 235 | { "bhi", "부호 없는 큼" }, 236 | { "bcs", "무부호 크거나 같음" }, 237 | { "bcc", "무부호 작음" }, 238 | { "bmi", "무부호 작음" }, 239 | { "bpl", "무부호 크거나 같음" }, 240 | { "bne", "같지 않음" }, 241 | { "bic", "bic{cond}{s} Rd, Rn, Op2\nbic Rd,Rs" }, 242 | { "bl", "bl{cond} offset\nAsm\toffset = -32M..+32M (step:4)\nThumb\toffset = (PC+4)-400000h..+3FFFFEh (step:2)" }, 243 | { "bx", "bx{cond} Rs" }, 244 | { "cmn", "cmn{cond} Rn, Op2\ncmn Rd,Rs" }, 245 | { "cmp", "cmp{cond} Rn, Op2\ncmp Rd,Rs\ncmp R0-15,R8-15\ncmp R8-15,R0-15" }, 246 | { "eor", "eor{cond}{s} Rd, Rn, Op2\neor Rd, Rs" }, 247 | { "ldc", "ldc{cond}{l} p#,cd,
" }, 248 | { "ldm", "ldm{cond}{amod} Rn{!},{^}" }, 249 | { "ldr", "ldr{cond}[h|sb|sh] Rd,
\nldr Rd,[Rb,5bit*4]\tldr Rd,[PC,8bit*4]\nldr Rd,[SP,8bit*4]\tldr Rd,[Rb,Ro]" }, 250 | { "ldrb", "ldrb Rd,[Rb,5bit*1]\nldrb Rd,[Rb,Ro]" }, 251 | { "ldrh", "ldrh Rd,[Rb,5bit*2]\nldrh Rd,[Rb,Ro]" }, 252 | { "ldsb", "ldsb Rd,[Rb,Ro]" }, 253 | { "ldsh", "ldsh Rd,[Rb,Ro]" }, 254 | { "lsl", "lsl Rd, Rs\nlsl Rd, Rs, Imm5bit\n좌측으로 논리 시프트 연산" }, 255 | { "lsr", "lsr Rd, Rs\nlsr Rd, Rs, Imm5bit\n우측으로 논리 시프트 연산" }, 256 | { "mcr", "mcr{cond} p#,,Rd,cn,cm{,}" }, 257 | { "mla", "mla{cond}{s} Rd,Rm,Rs,Rn" }, 258 | { "mov", "mov{cond}{s} Rd,Op2\nmov Rd,Imm8bit\nmov Rd,Rs\nmov R0-14,R8-15\nmov R8-14,R0-15\nmov R15,R0-15" }, 259 | { "mrc", "mrc{cond} p#,,Rd,cn,cm{,}" }, 260 | { "mrs", "mrs{cond} Rd,Psr" }, 261 | { "msr", "msr{cond} Psr{_field},Op" }, 262 | { "mul", "mul{cond}{s} Rd,Rm,Rs\nmul Rd,Rs" }, 263 | { "mvn", "mvn{cond}{s} Rd,Op2\nmvn Rd,Rs" }, 264 | { "neg", "neg Rd,Rs" }, 265 | { "nop", "nop\n빈 명령" }, 266 | { "orr", "orr{cond}{s} Rd,Rn,Op2\norr Rd,Rs" }, 267 | { "ror", "ror Rd,Rs\n오른쪽으로 로테이션" }, 268 | { "rsb", "rsb{cond}{s} Rd,Rn,Op2\nRevers Subtract" }, 269 | { "rsc", "rsc{cond}{s} Rd,Rn,Op2\nRevers Subtract with Carry" }, 270 | { "sbc", "sbc{cond}{s} Rd,Rn,Op2\nsbc Rd,Rs\nSubtract with Carry" }, 271 | { "smlal", "smlal{cond}{s} RdLo,RdHi,Rm,Rs" }, 272 | { "smull", "smull{cond}{s} RdLo,RdHi,Rm,Rs" }, 273 | { "stc", "stc{cond}{l} p#,cd," }, 274 | { "stm", "stm{cond}{amod} Rn{!},{^}" }, 275 | { "str", "str{cond}[b] Rd,[Rs],shift\nstr{cond}[b] Rd,[Rs][!]\nstr{cond}[b|h] Rd,[Rs]\nstr Rd,[Rs]\nstr Rd,[Rb,5bit*4]\tstr Rd,[SP,8bit*4]\nstr Rd,[Rb,Ro]" }, 276 | { "sub", "sub{cond}{s} Rd,Rn,Op2\nsub Rd,Rs,Imm3Bit\nsub Rd,Imm8bit\nsub Rd,Rs,Rn" }, 277 | { "swi", "swi{cond} Imm24bit\nswi Imm8bit" }, 278 | { "swp", "swp{cond}{b} Rd,Rm,[Rn]" }, 279 | { "teq", "teq{cond} Rn,Op2\n동등성 테스트" }, 280 | { "tst", "tst{cond} Rn,Op2\ntst Rd,Rs\n비트 테스트" }, 281 | { "umlal", "umlal{cond}{s} RdLo,RdHi,Rm,Rs" }, 282 | { "umull", "umull{cond}{s} RdLo,RdHi,Rm,Rs" }, 283 | { NULL, NULL } 284 | }; 285 | 286 | void CAsmDlg::UpdateAsmDesc() 287 | { 288 | CString strSrc = m_strAsm, strHint = m_strAsmHint; 289 | strHint.Replace(_T("\t"), _T("\n")); 290 | 291 | int i = strSrc.Find(_T(' ')); 292 | if (i != -1) 293 | strSrc = strSrc.Left(i); 294 | i = 0; 295 | CString strAsm; 296 | m_strAsmDesc.Empty(); 297 | while (TRUE) 298 | { 299 | AfxExtractSubString(strAsm, strHint, i++); 300 | if (strAsm.IsEmpty()) break; 301 | 302 | if (strAsm.CompareNoCase(strSrc) == 0) 303 | { 304 | m_strAsmDesc = _T("OK"); 305 | char Asm[8]; 306 | ::CharToOem(strAsm, Asm); 307 | i = 0; 308 | while (g_AsmDesc[i].lpAsm) 309 | { 310 | if (_mbsicmp((const unsigned char*)g_AsmDesc[i].lpAsm, 311 | (const unsigned char*)Asm) == 0) 312 | { 313 | ::OemToChar(g_AsmDesc[i].lpDesc, m_strAsmDesc.GetBuffer(_MAX_PATH)); 314 | m_strAsmDesc.ReleaseBuffer(); 315 | break; 316 | } 317 | i++; 318 | } 319 | break; 320 | } 321 | } 322 | 323 | SetDlgItemText(IDC_ASMDESC, m_strAsmDesc); 324 | //DWORD dwSel = m_AsmCB.GetEditSel(); 325 | //UpdateData(FALSE); 326 | //m_AsmCB.SetEditSel(dwSel&0xFFFF, dwSel>>16); 327 | } 328 | -------------------------------------------------------------------------------- /AsmDlg.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include "afxwin.h" 3 | 4 | // CAsmHint 5 | 6 | class CAsmHint : public CStatic 7 | { 8 | public: 9 | CString m_strCompSrc; 10 | 11 | CAsmHint(); 12 | virtual void DrawItem(LPDRAWITEMSTRUCT lpDIS); 13 | }; 14 | 15 | 16 | // CAsmDlg 대화 상자 17 | 18 | class CAsmDlg : public CDialog 19 | { 20 | DECLARE_DYNAMIC(CAsmDlg) 21 | 22 | public: 23 | CAsmDlg(CWnd* pParent = NULL); // 표준 생성자 24 | virtual ~CAsmDlg(); 25 | 26 | // 다이얼로그 데이터 27 | enum { IDD = IDD_ASMDLG }; 28 | 29 | protected: 30 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 지원 31 | 32 | DECLARE_MESSAGE_MAP() 33 | public: 34 | CComboBox m_AsmCB; 35 | CAsmHint m_AsmHint; 36 | CString m_strAsmHint; 37 | UINT m_nType; 38 | BYTE m_nSize; 39 | CString m_strAsm; 40 | //char m_cstrAsm[_MAX_PATH]; 41 | UINT m_nCurOffset; 42 | CString m_strAsmList; 43 | 44 | afx_msg void OnBnClickedOk(); 45 | afx_msg void OnCbnEditchangeAsmcb(); 46 | virtual BOOL OnInitDialog(); 47 | void UpdateAsmDesc(); 48 | CString m_strAsmDesc; 49 | }; 50 | -------------------------------------------------------------------------------- /BBSInfo.txt: -------------------------------------------------------------------------------- 1 | ====最近更新, 详细的更新以及帮助请查看WhatsNew.txt文档==== 2 | ------------2007.09.12------------ 3 | 1.添加NARC、NTFP、CHAR、PLT、NTFT、NBFC、NBFP、NBFS文件格式支持 4 | NBFC(手动选择GBA4BPP/GBA8BPP)、NBFP、NBFS请按顺序加载 5 | 上面的图形格式由于没用文件头所以无法设置各种参数 6 | 可能需要用户自行调整GBA4BPP/GBA8BPP、宽高 7 | SDAT文件格式得到修正(还是不完整,不知道怎么列目录) 8 | NANR、NCER以及其他格式资料不全暂时不加(不知道谁有官方文档?) 9 | 测试ROM:1158-塞尔达传说-Mugen no Sunadokei(J) 10 | PS:谢谢毛毛(yeyezai)提供部分文件格式资料 11 | 12 | ------------2007.09.02------------ 13 | 1.将CT2的强制中断键Ctrl改为Pause/Break键(翻页键上面那个) 14 | 以防止和Ctrl组合快捷键冲突 15 | (ProteinPig) 16 | 17 | 2.修正无法导出导入文件 18 | 19 | 3.可拖放导入调色板 20 | (dclixun) 21 | 22 | 4.修正创建DSROM的缺陷 23 | 24 | 5.可导入导出Utility.bin/*.pac文件 25 | PAC文件在游戏王DS里面发现,不知道是否是标准文件 26 | 27 | 6.修正导入GBA4BPP MAP图片不能的BUG 28 | 29 | 7.修正属性面板改变大小为边框位置 30 | 31 | 8.修正Banner.bin在修改后未更新Crc16的漏洞 32 | (DSROM所有CRC检查都在[NDS文件系统信息]的编辑菜单里面) 33 | 34 | 9.十六进制模式可对选区进行CRC16计算 35 | 36 | 10.工具菜单添加DS固件用户信息编辑器 37 | 对于使用模拟器的玩家,固件中的昵称、生日等信息就可以编辑了 38 | IQUE固件没测试过(小白没有),估计也没问题 39 | 40 | 11.[NDS文件系统信息]文件菜单添加瘦身功能 41 | 大小设置为文件头Application_End_Offset 42 | 43 | ------------2007.08.11------------ 44 | 1.修改CT2的界面 45 | 添加了一个资源面板 46 | 改变了修改属性面板 47 | 下面有较为详细的提示信息,类似VS的属性面板-v- 48 | PS1:调整面板的大小为右下角的天使LOGO 49 | 50 | 2.修正十六进制编辑器下导入系统编码文本的BUG 51 | 52 | 3.修正映射模式下的处理地址的问题 53 | 54 | ------------2007.07.20------------ 55 | 1.添加对.PAC、.SDAT、UTILITY.BIN的文件系统支持 56 | 单独打开时选择工具菜单的 某扩展名 文件信息 57 | NDS的文件系统在编辑以及右键菜单选择 某扩展名 文件信息 58 | 59 | 2.文本搜索指针添加相对搜索指针 60 | 如NDS的 0904-游戏王 文本 bin.pac中的dlg_text_j.bin/dlg_indx_j.bin: 61 | 002CEE04,84,この@3モンスター@0を@3召喚@0するには@3生け贄@0が@21体@0必要です。@3召喚@0しますか? 62 | 002CEE5C,84,この@3モンスター@0を@3召喚@0するには@3生け贄@0が@2%d体@0必要です。@3召喚@0しますか? 63 | 002CEEB4,40,@21体目@0の@3生け贄@0を選んでください。 64 | 此文本的起始基址是002CEE00,所以在基址填写002CEE00 65 | 勾选文本面板的相对指针按钮 66 | 这样搜索到的指针将减去基址002CEE00 67 | 002CEE04-002CEE00=04 68 | 002CEE5C-002CEE00=5C 69 | 002CEEB4-002CEE00=B4 70 | 指针范围002B3600-(+2384)搜索差值作为指针 71 | 导入时也要勾选相对指针,这样更新指针时也会更新为差值 72 | (yeyezai) 73 | 74 | ------------软件------------ 75 | 主要用途:生成、查看以及编辑字库 76 | 更新日期:二零零七年九月十二日 77 | 论坛连接:[color=bule][url=http://www.angeleden.net/forums/read.php?tid=1048]有关 CrystalTile2 更详细的更新信息及其下载[/url][/color] 78 | 天使论坛:[color=bule]http://www.angeleden.net[/color] 79 | 下载连接:[color=bule][url=http://www.angeleden.net/Crystal/CrystalTile2.zip]CrystalTile2 (外壳:upx 2.93w)[/url][/color] 80 | 开源代码:[color=bule][url=http://www.angeleden.net/Crystal/CrystalTile2(src).zip]CrystalTile2 ver:2007.07.15(vs2003.net/mfc)[/url][/color] 81 | 解压密码:www.angeleden.net[color=red] 82 | 作者留言:用户有什么意见或建议请跟贴提出 83 | MFC71U.dll(7.10.3077.0)+MSVCR71.dll(7.10.3052.4) 84 | 本软件没写帮助文件,更新信息中包含部分功能的说明 85 | 没问题,请不要灌水,免得帖子被删除;谢谢合作。 86 | [/color] 87 | ----------------图片(实际以最新版本为准)------------ 88 | [img]http://www.angeleden.net/Crystal/Pic/CrystalTile2.PNG[/img] 89 | -------------------------------------------------------------------------------- /CT2AsmView.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2AsmView.cpp -------------------------------------------------------------------------------- /CT2AsmView.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2AsmView.h -------------------------------------------------------------------------------- /CT2CheatsSearch.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2CheatsSearch.cpp -------------------------------------------------------------------------------- /CT2CheatsSearch.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2CheatsSearch.h -------------------------------------------------------------------------------- /CT2ChildFrm.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2ChildFrm.cpp -------------------------------------------------------------------------------- /CT2ChildFrm.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2ChildFrm.h -------------------------------------------------------------------------------- /CT2Doc.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2Doc.cpp -------------------------------------------------------------------------------- /CT2Doc.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2Doc.h -------------------------------------------------------------------------------- /CT2Favorite.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2Favorite.cpp -------------------------------------------------------------------------------- /CT2Favorite.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2Favorite.h -------------------------------------------------------------------------------- /CT2HexView.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2HexView.cpp -------------------------------------------------------------------------------- /CT2HexView.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2HexView.h -------------------------------------------------------------------------------- /CT2InputDlg.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2InputDlg.cpp -------------------------------------------------------------------------------- /CT2InputDlg.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2InputDlg.h -------------------------------------------------------------------------------- /CT2MainFrm.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2MainFrm.cpp -------------------------------------------------------------------------------- /CT2MainFrm.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2MainFrm.h -------------------------------------------------------------------------------- /CT2NormalDlg.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2NormalDlg.cpp -------------------------------------------------------------------------------- /CT2NormalDlg.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2NormalDlg.h -------------------------------------------------------------------------------- /CT2Palette.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2Palette.cpp -------------------------------------------------------------------------------- /CT2Palette.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2Palette.h -------------------------------------------------------------------------------- /CT2ScriptView.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2ScriptView.cpp -------------------------------------------------------------------------------- /CT2ScriptView.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2ScriptView.h -------------------------------------------------------------------------------- /CT2StatusBar.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2StatusBar.cpp -------------------------------------------------------------------------------- /CT2StatusBar.h: -------------------------------------------------------------------------------- 1 | #ifndef CT2_STATUSBAR_H 2 | #define CT2_STATUSBAR_H 3 | 4 | #pragma once 5 | 6 | // CT2StatusBar 7 | 8 | class CT2StatusBar : public CStatusBar 9 | { 10 | DECLARE_DYNAMIC(CT2StatusBar) 11 | 12 | public: 13 | CT2StatusBar(); 14 | virtual ~CT2StatusBar(); 15 | 16 | protected: 17 | DECLARE_MESSAGE_MAP() 18 | public: 19 | afx_msg void OnPaint(); 20 | BYTE m_nPos; 21 | inline void SetProgressPos(BYTE nPos); 22 | void BeginProgress(UINT nIDs=0); 23 | void EndProgress(); 24 | BOOL SetIndicators(const UINT* lpIDArray, int nIDCount); 25 | BOOL SetPaneText(int nIndex, LPCTSTR lpszNewText, BOOL bUpdate = TRUE); 26 | afx_msg void OnNMDblclk(NMHDR *pNMHDR, LRESULT *pResult); 27 | int HitTest(CPoint pt); 28 | void GetItemRect(int nItem, CRect& rcItem); 29 | afx_msg void OnTimer(UINT_PTR nIDEvent); 30 | }; 31 | 32 | #endif // CT2_STATUSBAR_H -------------------------------------------------------------------------------- /CT2TextView.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2TextView.cpp -------------------------------------------------------------------------------- /CT2TextView.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2TextView.h -------------------------------------------------------------------------------- /CT2TileEditorView.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2TileEditorView.cpp -------------------------------------------------------------------------------- /CT2TileEditorView.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2TileEditorView.h -------------------------------------------------------------------------------- /CT2TileView.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2TileView.cpp -------------------------------------------------------------------------------- /CT2TileView.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2TileView.h -------------------------------------------------------------------------------- /CT2TreeBar.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2TreeBar.cpp -------------------------------------------------------------------------------- /CT2TreeBar.h: -------------------------------------------------------------------------------- 1 | #ifndef _CT2TREEBAR_H 2 | #define _CT2TREEBAR_H 3 | 4 | #pragma once 5 | 6 | #include ".\CrystalTree\CrystalTreeCtrl.h" 7 | #include "CT2Favorite.h" 8 | #include "CT2Palette.h" 9 | #include "CT2NormalDlg.h" 10 | 11 | // CT2TreeBar 12 | 13 | class CT2TreeBar : public CControlBar 14 | { 15 | DECLARE_DYNAMIC(CT2TreeBar) 16 | 17 | public: 18 | CT2TreeBar(); 19 | virtual ~CT2TreeBar(); 20 | virtual void OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHndler); 21 | 22 | virtual BOOL CT2TreeBar::Create(CWnd* pParentWnd, UINT nStyle, UINT nID); 23 | 24 | protected: 25 | DECLARE_MESSAGE_MAP() 26 | 27 | public: 28 | CCrystalTreeCtrl m_Tree; 29 | POINT m_ptSizing; 30 | int m_nSizing; 31 | int m_nSpliter; 32 | CString m_strHint; 33 | HBRUSH m_hBrush; 34 | BOOL m_bUpdate; 35 | 36 | CTabCtrl m_Tab; 37 | CT2Favorite m_wndFav; 38 | CT2Palette m_wndPal; 39 | CT2NormalDlg m_wndDefOption; 40 | CCrystalTreeCtrl m_MyRes; 41 | 42 | virtual CSize CalcFixedLayout(BOOL bStretch, BOOL bHorz); 43 | virtual BOOL PreTranslateMessage(MSG* pMsg); 44 | virtual BOOL OnCmdMsg(UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo); 45 | void DrawHint(CDC &dc); 46 | afx_msg BOOL OnEraseBkgnd(CDC* pDC); 47 | afx_msg void OnTabSel(NMHDR *pNMHDR, LRESULT *pResult); 48 | afx_msg void OnSize(UINT nType, int cx, int cy); 49 | afx_msg void OnBnClickedButtonRespath(); 50 | int CanSplitte(POINT pt); 51 | }; 52 | 53 | #endif // _CT2TREEBAR_H -------------------------------------------------------------------------------- /CT2View.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2View.cpp -------------------------------------------------------------------------------- /CT2View.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CT2View.h -------------------------------------------------------------------------------- /CTMacro.cpp: -------------------------------------------------------------------------------- 1 | #include "StdAfx.h" 2 | #include ".\CTMacro.h" 3 | 4 | #ifdef CRYSTALMACRO 5 | 6 | CTMacro::CTMacro(void) 7 | { 8 | memset(&m_Header, 0, sizeof(m_Header)); 9 | //StrCpyNA(m_Header.Flags, "CTM ", 5); 10 | *(UINT*)m_Header.Flags = 0x204D5443; 11 | m_Header.dwSize = sizeof(m_Header); 12 | m_Header.dwVer = CT_MACRO_VER; 13 | m_Header.nType = CT_MACRO_TYPE_NORMAL; 14 | } 15 | 16 | CTMacro::~CTMacro(void) 17 | { 18 | Clear(); 19 | } 20 | 21 | BOOL CTMacro::IsEmpty() 22 | { 23 | return m_Macro.IsEmpty(); 24 | } 25 | 26 | void CTMacro::Clear() 27 | { 28 | for(int i=0; iwActive) 54 | { 55 | case CT2DOC_LOADTBL: 56 | case CT2HEXVIEW_IMPORTDATA: 57 | case CT2HEXVIEW_IMPORTTEXT: 58 | case CT2PALETTE_LOADPAL: 59 | case CT2SCRIPTVIEW_OPENSCRIPT: 60 | case CT2TILEVIEW_EDITIMPORT: 61 | { 62 | CT_MACRO_1VAL_1FILE *m = (CT_MACRO_1VAL_1FILE*)pMacro; 63 | szFile = m->szFile; 64 | }break; 65 | 66 | case CT2TILEEDITOR_TBL: 67 | { 68 | CT_MACRO_ONTBL *m = (CT_MACRO_ONTBL*)pMacro; 69 | szFile = m->szFile; 70 | }break; 71 | 72 | case CT2TILEEDITOR_SETTILE: 73 | { 74 | CT_MACRO_ONTBL *m = (CT_MACRO_ONTBL*)pMacro; 75 | szFile = m->szFile; 76 | }break; 77 | } 78 | if(szFile) 79 | { 80 | name = PathFindFileName(szFile); 81 | CopyFile(szFile, path+name, FALSE); 82 | lstrcpyn(szFile, name, _MAX_PATH); 83 | } 84 | } 85 | f.Write(pMacro, pMacro->wSize); 86 | } 87 | // Clear(); 88 | 89 | return TRUE; 90 | } 91 | 92 | int CTMacro::GetCount() 93 | { 94 | return (int)m_Macro.GetCount(); 95 | } 96 | 97 | CT_MACRO* CTMacro::GetMacro(int iIndex) 98 | { 99 | return (CT_MACRO*) m_Macro.GetAt(iIndex); 100 | } 101 | 102 | void CTMacro::SetMacro(int iIndex, CT_MACRO *pMacro) 103 | { 104 | delete[] m_Macro.GetAt(iIndex); 105 | m_Macro.SetAt(iIndex, pMacro); 106 | } 107 | 108 | int CTMacro::AddMacro(void *pMacro) 109 | { 110 | CT_MACRO *pMacro2 = (CT_MACRO*) pMacro; 111 | BYTE *pM = new BYTE[pMacro2->wSize]; 112 | memcpy(pM, pMacro2, pMacro2->wSize); 113 | return (int)m_Macro.Add(pM); 114 | } 115 | 116 | void CTMacro::DeleteMacro(int iIndex) 117 | { 118 | delete[] m_Macro.GetAt(iIndex); 119 | m_Macro.RemoveAt(iIndex); 120 | } 121 | 122 | #endif -------------------------------------------------------------------------------- /CTMacro.h: -------------------------------------------------------------------------------- 1 | #ifndef _CTMACRO_H 2 | #define _CTMACRO_H 3 | 4 | #ifdef CRYSTALMACRO 5 | 6 | #include "Common.h" 7 | 8 | #pragma once 9 | 10 | class CTMacro 11 | { 12 | public: 13 | CTMacro(void); 14 | virtual ~CTMacro(void); 15 | 16 | CT_MACRO_HEADER m_Header; 17 | CPtrArray m_Macro; 18 | 19 | BOOL IsEmpty(); 20 | void Clear(); 21 | BOOL Save(LPCTSTR lpszPathName, BOOL bSaveAllFile=FALSE); 22 | 23 | int GetCount(); 24 | CT_MACRO* GetMacro(int iIndex); 25 | void SetMacro(int iIndex, CT_MACRO *pMacro); 26 | int AddMacro(void *pMacro); 27 | void DeleteMacro(int iIndex); 28 | }; 29 | 30 | #endif 31 | 32 | #endif // _CTMACRO_H -------------------------------------------------------------------------------- /Common.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/Common.cpp -------------------------------------------------------------------------------- /Common.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/Common.h -------------------------------------------------------------------------------- /CrystalMemory.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalMemory.cpp -------------------------------------------------------------------------------- /CrystalMemory.h: -------------------------------------------------------------------------------- 1 | #ifndef _CCRYSTALMEMORY_H_ 2 | #define _CCRYSTALMEMORY_H_ 3 | 4 | #pragma once 5 | 6 | class CCrystalMemory 7 | { 8 | public: 9 | CCrystalMemory(void); 10 | virtual ~CCrystalMemory(void); 11 | 12 | HWND m_hWnd; 13 | DWORD m_dwProcessId; 14 | HANDLE m_hProcess; 15 | SYSTEM_INFO m_si; 16 | MEMORY_BASIC_INFORMATION m_mbi; 17 | BYTE *m_pMemory; 18 | UINT m_nSize; 19 | UINT m_nOffset; 20 | 21 | void Init(); 22 | 23 | BOOL Open(LPCTSTR lpszClass, LPCTSTR lpszWindowName=NULL); 24 | void Close(); 25 | 26 | BOOL CheckOffset(UINT nOffset); 27 | 28 | BOOL Read(UINT nOffset, LPVOID lpBuffer, UINT nSize, UINT *lpOutSize=NULL); 29 | BOOL Write(UINT nOffset, LPVOID lpBuffer, UINT nSize, UINT *lpOutSize=NULL); 30 | 31 | UINT VirtualQuery(UINT nOffset, PMEMORY_BASIC_INFORMATION lpMemBaseInfo); 32 | 33 | UINT FindDataBase(UINT nBeginOffset, BYTE *pKeyData, UINT nKeySize, UINT nMinSize); 34 | 35 | UINT Search(UINT &nBeginOffset, BYTE *pKeyData, UINT nKeySize, BYTE nFlags=0); 36 | 37 | BOOL LoadMemory(UINT nOffset, UINT nSize); 38 | BOOL ReLoadMemory(UINT nPos=0, UINT nSize=0); 39 | void FreeMemory(); 40 | 41 | void ModifyDsMenu(HMENU hMenu, LPSTR lpRes); 42 | void Menu2CHS(); 43 | BOOL FindDSEmu(LPCTSTR lpClass); 44 | BOOL FindDsRom(); 45 | 46 | void SuspendThread(); 47 | void ResumeThread(); 48 | 49 | BOOL Update(UINT nPos=0, UINT nSize=0); 50 | 51 | //UINT SearchCheats(UINT nPos, BYTE *pData, UINT nSize); 52 | 53 | UINT VirtualAlloc(UINT nSize); 54 | BOOL VirtualFree(UINT nOffset); 55 | }; 56 | 57 | #endif // _CCRYSTALMEMORY_H_ -------------------------------------------------------------------------------- /CrystalPlayer.cpp: -------------------------------------------------------------------------------- 1 | #include "StdAfx.h" 2 | #include ".\CrystalPlayer.h" 3 | 4 | #ifdef CRYSTALPLAYER 5 | 6 | #include "Common.h" 7 | 8 | #pragma comment(lib, "winmm.lib") 9 | /* 10 | int indextbl[8] = 11 | { 12 | -1, -1, -1, -1, 2, 4, 6, 8 13 | }; 14 | */ 15 | DWORD g_dwMilliSeconds = 0; // ms 16 | HWAVEOUT g_hWaveOut = NULL; 17 | void CALLBACK MMTimeCallBack(UINT uTimerID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2) 18 | { 19 | } 20 | 21 | void CALLBACK MMDrvCallBack(HDRVR hdrvr, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2) 22 | { 23 | switch(uMsg) 24 | { 25 | case MM_WOM_OPEN: 26 | break; 27 | case WOM_CLOSE: 28 | break; 29 | case WOM_DONE: 30 | { 31 | }break; 32 | } 33 | } 34 | 35 | CCrystalPlayer::CCrystalPlayer(void) 36 | { 37 | memset(&m_wfx, 0, sizeof(WAVEFORMATEX)); 38 | m_wfx.wFormatTag = WAVE_FORMAT_PCM; 39 | m_wfx.nChannels = 1; 40 | m_wfx.nSamplesPerSec = 11025; 41 | //m_wfx.nAvgBytesPerSec = m_wfx.nSamplesPerSec * ((16 / 8) * m_wfx.nChannels); 42 | //m_wfx.nBlockAlign = (16 / 8) * m_wfx.nChannels; 43 | m_wfx.wBitsPerSample = 8; 44 | //m_wfx.cbSize = sizeof(WAVEFORMATEX); 45 | 46 | memset(&m_wh, 0, sizeof(m_wh)); 47 | m_wh.dwUser = 1; 48 | 49 | m_lpData = NULL; 50 | 51 | UINT X=0x000776D2; 52 | for(int i=0; i<89; i++) 53 | { 54 | m_wAdpcmTable[i] = X>>16; 55 | X += X/10; 56 | } 57 | m_wAdpcmTable[3] = 0x0A; 58 | m_wAdpcmTable[4] = 0x0B; 59 | m_wAdpcmTable[88] = 0x7FFF; 60 | 61 | m_sIndexTable[0] = -1; 62 | m_sIndexTable[1] = -1; 63 | m_sIndexTable[2] = -1; 64 | m_sIndexTable[3] = -1; 65 | m_sIndexTable[4] = 2; 66 | m_sIndexTable[5] = 4; 67 | m_sIndexTable[6] = 6; 68 | m_sIndexTable[7] = 8; 69 | } 70 | 71 | CCrystalPlayer::~CCrystalPlayer(void) 72 | { 73 | Close(); 74 | } 75 | 76 | MMRESULT CCrystalPlayer::Open(WAVEFORMATEX *pwfx) 77 | { 78 | Close(); 79 | //m_uTimerID = timeSetEvent(120, 220, MMTimeCallBack, m_wh.dwUser, TIME_CALLBACK_FUNCTION|TIME_PERIODIC); 80 | 81 | memcpy(&m_wfx, pwfx, sizeof(m_wfx)); 82 | m_wfx.nBlockAlign = pwfx->wBitsPerSample/8 * pwfx->nChannels; 83 | m_wfx.nAvgBytesPerSec = pwfx->nSamplesPerSec * pwfx->nBlockAlign; 84 | 85 | return waveOutOpen(&g_hWaveOut, 0, pwfx, 86 | (DWORD_PTR)MMDrvCallBack, (DWORD_PTR)AfxGetInstanceHandle(), CALLBACK_FUNCTION); 87 | } 88 | 89 | MMRESULT CCrystalPlayer::Close() 90 | { 91 | if(g_hWaveOut) 92 | { 93 | Reset(); 94 | Clear(); 95 | //timeKillEvent(m_uTimerID); 96 | return waveOutClose(g_hWaveOut); 97 | } 98 | return MMSYSERR_NOERROR; 99 | } 100 | 101 | void CCrystalPlayer::Clear() 102 | { 103 | if(m_lpData) 104 | { 105 | delete[] m_lpData; 106 | m_lpData = NULL; 107 | } 108 | } 109 | 110 | MMRESULT CCrystalPlayer::SetVolume(DWORD dwVolume) 111 | { 112 | if(g_hWaveOut) 113 | return waveOutSetVolume(g_hWaveOut, dwVolume); 114 | return MMSYSERR_NOERROR; 115 | } 116 | 117 | MMRESULT CCrystalPlayer::GetVolume(LPDWORD pdwVolume) 118 | { 119 | if(g_hWaveOut) 120 | return waveOutGetVolume(g_hWaveOut, pdwVolume); 121 | return MMSYSERR_NOERROR; 122 | } 123 | 124 | MMRESULT CCrystalPlayer::PrepareHeader(LPSTR lpData, UINT nSize, BOOL bAutoFree) 125 | { 126 | if(g_hWaveOut) 127 | { 128 | Clear(); 129 | if(bAutoFree) 130 | m_lpData = lpData; 131 | 132 | m_wh.lpData = lpData; 133 | m_wh.dwBufferLength = nSize; 134 | 135 | g_dwMilliSeconds = nSize / m_wfx.nBlockAlign / m_wfx.nSamplesPerSec / 1000; 136 | 137 | return waveOutPrepareHeader(g_hWaveOut, &m_wh, sizeof(WAVEHDR)); 138 | } 139 | return MMSYSERR_NOERROR; 140 | } 141 | 142 | MMRESULT CCrystalPlayer::UnprepareHeader() 143 | { 144 | if(g_hWaveOut) 145 | { 146 | Clear(); 147 | return waveOutUnprepareHeader(g_hWaveOut, &m_wh, sizeof(WAVEHDR)); 148 | } 149 | return MMSYSERR_NOERROR; 150 | } 151 | 152 | MMRESULT CCrystalPlayer::Write(LPSTR lpData, UINT nSize, BOOL bAutoFree) 153 | { 154 | if(g_hWaveOut) 155 | { 156 | PrepareHeader(lpData, nSize, bAutoFree); 157 | return waveOutWrite(g_hWaveOut, &m_wh, sizeof(WAVEHDR)); 158 | } 159 | return MMSYSERR_NOERROR; 160 | } 161 | 162 | MMRESULT CCrystalPlayer::Reset() 163 | { 164 | if(g_hWaveOut) 165 | return waveOutReset(g_hWaveOut); 166 | return MMSYSERR_NOERROR; 167 | } 168 | 169 | MMRESULT CCrystalPlayer::Pause() 170 | { 171 | if(g_hWaveOut) 172 | { 173 | return waveOutPause(g_hWaveOut); 174 | // return waveOutRestart(g_hWaveOut); 175 | } 176 | return MMSYSERR_NOERROR; 177 | } 178 | 179 | MMRESULT CCrystalPlayer::Message(UINT uMsg, DWORD_PTR dw1, DWORD_PTR dw2) 180 | { 181 | if(g_hWaveOut) 182 | return waveOutMessage(g_hWaveOut, uMsg, dw1, dw2); 183 | return MMSYSERR_NOERROR; 184 | } 185 | 186 | CString CCrystalPlayer::GetErrorText(MMRESULT err) 187 | { 188 | waveOutGetErrorText(err, g_szBuffer, _MAX_PATH); 189 | return g_szBuffer; 190 | } 191 | 192 | void CCrystalPlayer::Play() 193 | { 194 | MMRESULT mmr; 195 | 196 | CFileDialog fd(TRUE); 197 | CFile f; 198 | if( fd.DoModal()==IDOK && 199 | f.Open(fd.GetPathName(), CFile::modeRead|CFile::typeBinary) ) 200 | { 201 | WAVEFILE wf; 202 | f.Read(&wf, sizeof(wf)); 203 | static WAVEFORMATEX wfx; 204 | f.Read(&wfx, sizeof(wfx)); 205 | WAVEDATA wd; 206 | f.Read(&wd, sizeof(wd)); 207 | UINT nSize = (UINT)(f.GetLength()-f.GetPosition()); 208 | if(nSize>wd.nWaveSize) 209 | nSize = wd.nWaveSize; 210 | BYTE *pSound = new BYTE[nSize]; 211 | f.Read(pSound, nSize); 212 | f.Close(); 213 | 214 | mmr = Open(&wfx); 215 | if(mmr==MMSYSERR_NOERROR) 216 | { 217 | mmr = SetVolume(-1); 218 | 219 | //m_wh.dwBufferLength = nSize; 220 | //m_wh.lpData = (LPSTR)pSound;//(LPSTR)((BYTE*)pwd+sizeof(WAVEDATA)); 221 | 222 | mmr = Write((LPSTR)pSound, nSize, TRUE); 223 | 224 | //mmr = Close(); 225 | } 226 | //delete[] pSound; 227 | } 228 | } 229 | 230 | void CCrystalPlayer::Play(LPSTR lpData, UINT nSize) 231 | { 232 | // m_wfx.nChannels = 2 / 1; 233 | // m_wfx.nSamplesPerSec = 44100 / 22050; 234 | // m_wfx.wBitsPerSample = 16 / 8; 235 | MMRESULT mmr = Open(&m_wfx); 236 | if(mmr==MMSYSERR_NOERROR) 237 | { 238 | //m_wh.dwBufferLength = nSize; 239 | //m_wh.lpData = (LPSTR)pData; 240 | mmr = Write(lpData, nSize, FALSE); 241 | }else 242 | { 243 | waveOutGetErrorText(mmr, g_szBuffer, _MAX_PATH); 244 | Hint(g_szBuffer, MB_OK|MB_ICONERROR); 245 | } 246 | } 247 | 248 | #endif -------------------------------------------------------------------------------- /CrystalPlayer.h: -------------------------------------------------------------------------------- 1 | #define CRYSTALPLAYER 2 | 3 | #ifdef CRYSTALPLAYER 4 | #pragma once 5 | 6 | #include 7 | 8 | class CCrystalPlayer 9 | { 10 | public: 11 | UINT m_uTimerID; 12 | LPSTR m_lpData; 13 | WAVEFORMATEX m_wfx; 14 | WAVEHDR m_wh; 15 | 16 | WORD m_wAdpcmTable[89]; 17 | char m_sIndexTable[8]; 18 | 19 | CCrystalPlayer(void); 20 | virtual ~CCrystalPlayer(void); 21 | 22 | MMRESULT Open(WAVEFORMATEX *pwfx); 23 | MMRESULT Close(); 24 | 25 | MMRESULT SetVolume(DWORD dwVolume); 26 | MMRESULT GetVolume(LPDWORD pdwVolume); 27 | 28 | MMRESULT PrepareHeader(LPSTR lpData, UINT nSize, BOOL bAutoFree=TRUE); 29 | MMRESULT UnprepareHeader(); 30 | 31 | MMRESULT Write(LPSTR lpData, UINT nSize, BOOL bAutoFree=TRUE); 32 | 33 | MMRESULT Reset(); 34 | MMRESULT Pause(); 35 | 36 | void Clear(); 37 | MMRESULT Message(UINT uMsg, DWORD_PTR dw1=0, DWORD_PTR dw2=0); 38 | CString GetErrorText(MMRESULT err); 39 | 40 | void Play(); 41 | void Play(LPSTR lpData, UINT nSize); 42 | }; 43 | #endif 44 | -------------------------------------------------------------------------------- /CrystalTile2 - 복사본.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTile2 - 복사본.rc -------------------------------------------------------------------------------- /CrystalTile2.cpp: -------------------------------------------------------------------------------- 1 | // CrystalTile2.cpp : 定义应用程序的类行为。 2 | // 3 | 4 | #include "stdafx.h" 5 | #include ".\CrystalTile2.h" 6 | #include "CT2MainFrm.h" 7 | 8 | #include "CT2ChildFrm.h" 9 | #include "CT2Doc.h" 10 | #include "CT2TileView.h" 11 | #include "OpenFileDialog.h" 12 | #include "TextFileDialog.h" 13 | 14 | #ifdef _DEBUG 15 | #define new DEBUG_NEW 16 | #endif 17 | 18 | TCHAR CT2Settings[] = _T("Settings"); 19 | TCHAR CT2Favorites[] = _T("Favorites"); 20 | TCHAR CT2ScaleList[] = _T("ScaleList"); 21 | TCHAR CT2OffsetList[] = _T("OffsetList"); 22 | TCHAR CT2DefOffset[] = _T("DefOffset"); 23 | TCHAR CT2DefPal[] = _T("DefPal"); 24 | TCHAR CT2DefBk[] = _T("DefBk"); 25 | TCHAR CT2PrivateBuild[] = _T("PrivateBuild"); 26 | TCHAR CT2ToolList[] = _T("ToolList"); 27 | 28 | BYTE m_nOpenMapFile=0; 29 | CList g_Favorites; 30 | HIMAGELIST g_hSysImageList; 31 | 32 | // CT2App 33 | 34 | BEGIN_MESSAGE_MAP(CT2App, CWinApp) 35 | ON_COMMAND(ID_APP_ABOUT, OnAppAbout) 36 | // 基于文件的标准文档命令 37 | // ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) 38 | ON_COMMAND_RANGE(ID_FILE_MRU_FIRST, ID_FILE_MRU_LAST, OnOpenRecentFile) 39 | ON_COMMAND(ID_FILE_OPEN, OnFileOpen) 40 | ON_UPDATE_COMMAND_UI(ID_FILE_FIRSTDSEMUTASK, OnUpdateFileFirstdsemutask) 41 | ON_COMMAND_RANGE(ID_FILE_FIRSTDSEMUTASK, ID_FILE_FIRSTDSEMUTASK+31, OnFirstdsemutask) 42 | ON_COMMAND(ID_TOOLS_TBL2CMAP, OnToolsTbl2cmap) 43 | END_MESSAGE_MAP() 44 | 45 | // CT2App 构造 46 | 47 | CT2App::CT2App() 48 | //: m_hSJisTbl(NULL) 49 | : m_pCopyData(NULL) 50 | , m_nCopyDataSize(0) 51 | , m_pCodePage(NULL) 52 | , m_nCPCount(0) 53 | , m_nTreeID(-1) 54 | { 55 | m_hHexMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_VIEW_HEXVIEW)); 56 | m_hHexAccelTable = LoadAccelerators(NULL, MAKEINTRESOURCE(IDR_VIEW_HEXVIEW)); 57 | 58 | m_hAsmMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_VIEW_ASMVIEW)); 59 | m_hAsmAccelTable = LoadAccelerators(NULL, MAKEINTRESOURCE(IDR_VIEW_ASMVIEW)); 60 | 61 | m_hTileEditorMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_VIEW_TILEEDITORVIEW)); 62 | m_hTileEditorAccelTable = LoadAccelerators(NULL, MAKEINTRESOURCE(IDR_VIEW_TILEEDITORVIEW)); 63 | 64 | m_hScriptMenu = LoadMenu(NULL, MAKEINTRESOURCE(IDR_VIEW_SCRIPTVIEW)); 65 | m_hScriptAccelTable = LoadAccelerators(NULL, MAKEINTRESOURCE(IDR_VIEW_SCRIPTVIEW)); 66 | 67 | LoadSystemImageList(g_hSysImageList, SHGFI_SMALLICON); 68 | } 69 | 70 | CT2App::~CT2App() 71 | { 72 | if(m_pRecentFileList) delete[] m_pRecentStatList; 73 | 74 | if(m_hHexMenu!=NULL) DestroyMenu(m_hHexMenu); 75 | if(m_hHexAccelTable!=NULL) ::FreeResource((HGLOBAL)m_hHexAccelTable); 76 | 77 | if(m_hAsmMenu!=NULL) DestroyMenu(m_hAsmMenu); 78 | if(m_hAsmAccelTable!=NULL) ::FreeResource((HGLOBAL)m_hAsmAccelTable); 79 | 80 | if(m_hTileEditorMenu!=NULL) DestroyMenu(m_hTileEditorMenu); 81 | if(m_hTileEditorAccelTable!=NULL) ::FreeResource((HGLOBAL)m_hTileEditorAccelTable); 82 | 83 | if(m_hScriptMenu!=NULL) DestroyMenu(m_hScriptMenu); 84 | if(m_hScriptAccelTable!=NULL) ::FreeResource((HGLOBAL)m_hScriptAccelTable); 85 | 86 | if(m_pCopyData) delete[] m_pCopyData; 87 | if(m_pCodePage) delete[] m_pCodePage; 88 | 89 | int c = (int)g_Favorites.GetCount(); 90 | CString strItem = GetProfileString(CT2Favorites, _T("")); 91 | LPTSTR lpFav = strItem.GetBuffer(2048); 92 | GetPrivateProfileString(CT2Favorites, NULL, NULL, lpFav, 2048, m_pszProfileName); 93 | while(*lpFav) 94 | { 95 | WriteProfileString(CT2Favorites, lpFav, NULL); 96 | lpFav+=lstrlen(lpFav)+1; 97 | } 98 | strItem.ReleaseBuffer(); 99 | for(int i=0; im_hMenuShared; 149 | m_hTileAccelTable = pDocTemplate->m_hAccelTable; 150 | 151 | // 创建主 MDI 框架窗口 152 | CT2MainFrm* pMainFrame = new CT2MainFrm; 153 | if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME)) 154 | return FALSE; 155 | m_pMainWnd = pMainFrame; 156 | 157 | LoadStdProfileSettings2(9); 158 | 159 | // 仅当具有后缀时才调用 DragAcceptFiles 160 | // 在 MDI 应用程序中,这应在设置 m_pMainWnd 之后立即发生 161 | // 分析标准外壳命令、DDE、打开文件操作的命令行 162 | CCommandLineInfo cmdInfo; 163 | ParseCommandLine(cmdInfo); 164 | if(cmdInfo.m_nShellCommand!=CCommandLineInfo::FileNew) 165 | { 166 | if (!ProcessShellCommand(cmdInfo)) 167 | return FALSE; 168 | } 169 | 170 | return TRUE; 171 | } 172 | 173 | 174 | // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 175 | 176 | class CAboutDlg : public CDialog 177 | { 178 | public: 179 | CAboutDlg(); 180 | 181 | // 对话框数据 182 | enum { IDD = IDD_ABOUTBOX }; 183 | 184 | protected: 185 | virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 186 | 187 | // 实现 188 | protected: 189 | DECLARE_MESSAGE_MAP() 190 | public: 191 | CHyperlink m_Mail; 192 | CHyperlink m_HomePage; 193 | virtual BOOL OnInitDialog(); 194 | }; 195 | 196 | CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) 197 | { 198 | } 199 | 200 | void CAboutDlg::DoDataExchange(CDataExchange* pDX) 201 | { 202 | CDialog::DoDataExchange(pDX); 203 | } 204 | 205 | BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) 206 | END_MESSAGE_MAP() 207 | 208 | BOOL CAboutDlg::OnInitDialog() 209 | { 210 | CDialog::OnInitDialog(); 211 | 212 | CVerInfo ver; 213 | CString strText; 214 | strText.Format(_T("%s %s\n%s\n%s"), 215 | ver.ProductName, ver.FileVersion, ver.LegalCopyright, ver.PrivateBuild); 216 | SetDlgItemText(IDC_VERINFO, strText); 217 | 218 | m_Mail.SubclassDlgItem(IDC_MAILTO, this); 219 | m_HomePage.SubclassDlgItem(IDC_HOMEPAGE, this); 220 | 221 | return TRUE; // return TRUE unless you set the focus to a control 222 | // 异常: OCX 属性页应返回 FALSE 223 | } 224 | 225 | // 用于运行对话框的应用程序命令 226 | void CT2App::OnAppAbout() 227 | { 228 | CAboutDlg aboutDlg; 229 | aboutDlg.DoModal(); 230 | } 231 | 232 | // 程序是否已运行 233 | BOOL CT2App::IsRunning(void) 234 | { 235 | CString strClass; 236 | strClass.LoadString(IDR_MAINFRAME); 237 | HWND hWnd = FindWindow(strClass, 0); 238 | 239 | if(hWnd) 240 | { 241 | CCommandLineInfo cmdInfo; 242 | ParseCommandLine(cmdInfo); 243 | 244 | if(cmdInfo.m_nShellCommand==CCommandLineInfo::FileOpen) 245 | { 246 | SetWindowText(hWnd, cmdInfo.m_strFileName); 247 | SendMessage(hWnd, WM_OPENFILE, 0, 0); 248 | } 249 | SetForegroundWindow(hWnd); 250 | return TRUE; 251 | } 252 | return FALSE; 253 | } 254 | 255 | void CT2App::LoadStdProfileSettings2(UINT nMaxMRU) 256 | { 257 | DWORD dwPolicies = m_dwPolicies; 258 | m_dwPolicies=0; 259 | LoadStdProfileSettings(nMaxMRU); 260 | m_dwPolicies = dwPolicies; 261 | 262 | m_pRecentStatList = new CRecentStatList(nMaxMRU); 263 | m_pRecentStatList->ReadList(); 264 | 265 | BYTE* p; 266 | UINT nSize; 267 | CString strItem; 268 | int i=0, i2=0; 269 | CListCtrl *pList = (CListCtrl*)GetFavorite().GetDlgItem(IDC_FAVORITES_LIST); 270 | while(TRUE) 271 | { 272 | strItem.Format(_T("Fav%d"), i++); 273 | if(!GetProfileBinary(CT2Favorites, strItem, &p, &nSize)) break; 274 | if(nSize==sizeof(FAVORITES)) 275 | { 276 | g_Favorites.AddTail(*(FAVORITES*)p); 277 | pList->InsertItem(i2++, ((FAVORITES*)p)->Desc); 278 | } 279 | delete[] p; 280 | } 281 | 282 | if(m_hScriptMenu) 283 | { 284 | EnumSystemCodePages(&m_pCodePage, m_nCPCount); 285 | HMENU hScriptView = GetSubMenu(m_hScriptMenu, 4); 286 | HMENU hHexView = GetSubMenu(m_hHexMenu, 3); 287 | HMENU hSP = GetSubMenu(hScriptView, 5); 288 | HMENU hSP2 = GetSubMenu(hHexView, 5); 289 | UINT nCPID = ID_CODEPAGE_ACP+1; 290 | CString strItem; 291 | CComboBox *pCB = (CComboBox*)GetOptionBox().GetDlgItem(IDC_OPTION_CPLIST); 292 | int nDefSel=0; 293 | for(UINT i=0; iInsertString(i, strItem); 301 | if(m_pCodePage[i]==GetACP()) 302 | nDefSel = i; 303 | } 304 | 305 | pCB->SetCurSel(GetProfileInt(CT2Settings, _T("DefCp"), nDefSel)); 306 | } 307 | 308 | BYTE* pData; 309 | if(GetProfileBinary(CT2Settings, _T("MainFrmWP"), 310 | &pData, &nSize)) 311 | { 312 | if(nSize==sizeof(MAINFRMPOS)) 313 | { 314 | WINDOWPLACEMENT wp; 315 | m_pMainWnd->GetWindowPlacement(&wp); 316 | wp.rcNormalPosition = ((MAINFRMPOS*)pData)->rcMainFrm; 317 | m_pMainWnd->SetWindowPlacement(&wp); 318 | m_pMainWnd->ShowWindow(((MAINFRMPOS*)pData)->bShowMax?SW_MAXIMIZE:m_nCmdShow); 319 | }else 320 | m_pMainWnd->ShowWindow(m_nCmdShow); 321 | delete[] pData; 322 | }else 323 | m_pMainWnd->ShowWindow(m_nCmdShow); 324 | m_pMainWnd->UpdateWindow(); 325 | } 326 | 327 | int CT2App::ExitInstance() 328 | { 329 | // TODO: 在此添加专用代码和/或调用基类 330 | int nRET = CWinApp::ExitInstance(); 331 | if(m_pRecentStatList) 332 | m_pRecentStatList->WriteList(); 333 | return nRET; 334 | } 335 | 336 | void CT2App::AddToRecentFileList(LPCTSTR lpszPathName) 337 | { 338 | // TODO: 在此添加专用代码和/或调用基类 339 | // m_pRecentStatList->Add(lpszPathName); 340 | 341 | // if (m_pRecentFileList != NULL) m_pRecentFileList->Add(lpszPathName); 342 | // fully qualify the path name 343 | if ( lpszPathName == NULL || lstrlen(lpszPathName) >= _MAX_PATH ) 344 | { 345 | ASSERT(FALSE); 346 | // MFC requires paths with length < _MAX_PATH 347 | // No other way to handle the error from a void function 348 | AfxThrowFileException(CFileException::badPath); 349 | } 350 | 351 | if( AfxFullPath(g_szBuffer, lpszPathName) == FALSE ) 352 | { 353 | ASSERT(FALSE); 354 | // MFC requires paths with length < _MAX_PATH 355 | // No other way to handle the error from a void function 356 | AfxThrowFileException(CFileException::badPath); 357 | } 358 | 359 | // update the MRU list, if an existing MRU string matches file name 360 | int iMRU; 361 | for (iMRU = 0; iMRU < m_pRecentFileList->m_nSize-1; iMRU++) 362 | { 363 | if (AfxComparePath(m_pRecentFileList->m_arrNames[iMRU], g_szBuffer)) 364 | break; // iMRU will point to matching entry 365 | } 366 | // move MRU strings before this one down 367 | UINT_PTR nTemp = m_pRecentStatList->m_pRecentStatList[iMRU]; 368 | for (int iMRU2=iMRU; iMRU2 > 0; iMRU2--) 369 | { 370 | ASSERT(iMRU2 > 0); 371 | ASSERT(iMRU2 < m_pRecentFileList->m_nSize); 372 | m_pRecentFileList->m_arrNames[iMRU2] = 373 | m_pRecentFileList->m_arrNames[iMRU2-1]; 374 | 375 | m_pRecentStatList->m_pRecentStatList[iMRU2] = 376 | m_pRecentStatList->m_pRecentStatList[iMRU2-1]; 377 | 378 | } 379 | if(iMRU) 380 | m_pRecentStatList->m_pRecentStatList[0] = nTemp; 381 | if(!m_pRecentStatList->m_pRecentStatList[0]) 382 | { 383 | m_pRecentStatList->m_pRecentStatList[0] = (UINT_PTR)new STATEDATA; 384 | memset((BYTE*)m_pRecentStatList->m_pRecentStatList[0], 0, sizeof(STATEDATA)); 385 | } 386 | 387 | // place this one at the beginning 388 | m_pRecentFileList->m_arrNames[0] = g_szBuffer; 389 | } 390 | 391 | void CT2App::OnOpenRecentFile(UINT nID) 392 | { 393 | ASSERT_VALID(this); 394 | ASSERT(m_pRecentFileList != NULL); 395 | 396 | ASSERT(nID >= ID_FILE_MRU_FILE1); 397 | ASSERT(nID < ID_FILE_MRU_FILE1 + (UINT)m_pRecentFileList->GetSize()); 398 | int nIndex = nID - ID_FILE_MRU_FILE1; 399 | ASSERT((*m_pRecentFileList)[nIndex].GetLength() != 0); 400 | 401 | TRACE(traceAppMsg, 0, _T("MRU: open file (%d) '%s'.\n"), (nIndex) + 1, 402 | (LPCTSTR)(*m_pRecentFileList)[nIndex]); 403 | 404 | if (OpenDocumentFile((*m_pRecentFileList)[nIndex]) == NULL) 405 | { 406 | m_pRecentFileList->Remove(nIndex); 407 | m_pRecentStatList->Remove(nIndex); 408 | } 409 | } 410 | UINT CT2App::GetMRUIndex(CString strPathName) 411 | { 412 | if(!strPathName.IsEmpty() && m_pRecentFileList) 413 | for(int iMRU=0; iMRUm_nSize; iMRU++) 414 | { 415 | if(strPathName.CompareNoCase(m_pRecentFileList->m_arrNames[iMRU])==0) 416 | return iMRU; 417 | } 418 | return -1; 419 | } 420 | 421 | CT2View* CT2App::GetCurView(UINT* pType) 422 | { 423 | CT2ChildFrm* pCf = (CT2ChildFrm*) 424 | ((CT2MainFrm*)GetMainWnd())->MDIGetActive(); 425 | if(pCf==NULL) return NULL; 426 | return pCf->GetCurView(pType); 427 | } 428 | 429 | CT2View* CT2App::GetView(WORD nView) 430 | { 431 | CT2MainFrm* pMf = (CT2MainFrm*)m_pMainWnd; 432 | CT2ChildFrm* pCf = (CT2ChildFrm*)pMf->MDIGetActive(); 433 | if(pCf==NULL) return NULL; 434 | switch(nView) 435 | { 436 | case ID_VIEW_TILEVIEW: 437 | return pCf->m_pTileView; 438 | case ID_VIEW_HEXVIEW: 439 | return pCf->m_pHexView; 440 | case ID_VIEW_ASMVIEW: 441 | return pCf->m_pAsmView; 442 | case ID_VIEW_TILEEDITORVIEW: 443 | return pCf->m_pTileEditorView; 444 | case ID_VIEW_SCRIPTVIEW: 445 | return pCf->m_pScriptView; 446 | } 447 | return NULL; 448 | } 449 | 450 | CT2StatusBar* CT2App::GetStatusBar(void) 451 | { 452 | return &((CT2MainFrm*)m_pMainWnd)->m_wndStatusBar; 453 | } 454 | 455 | CToolBar* CT2App::GetToolBar(void) 456 | { 457 | return &((CT2MainFrm*)m_pMainWnd)->m_wndToolBar; 458 | } 459 | /* 460 | CCrystalBar* CT2App::GetExplorerBox() 461 | { 462 | return &((CT2MainFrm*)m_pMainWnd)->m_ExplorerBar; 463 | } 464 | */ 465 | CDialog& CT2App::GetOptionBox() 466 | { 467 | return ((CT2MainFrm*)m_pMainWnd)->m_TreeBar.m_wndDefOption; 468 | } 469 | 470 | CT2Palette& CT2App::GetPalDlg(void) 471 | { 472 | return ((CT2MainFrm*)m_pMainWnd)->m_TreeBar.m_wndPal;// m_wndPalette; 473 | } 474 | 475 | CT2Favorite& CT2App::GetFavorite(void) 476 | { 477 | return ((CT2MainFrm*)m_pMainWnd)->m_TreeBar.m_wndFav;// m_wndFavorites; 478 | } 479 | 480 | void CT2App::OnFileOpen() 481 | { 482 | static COpenFileDialog fd(TRUE); 483 | CString strOpenRomFilter;strOpenRomFilter.LoadString(m_hInstance, IDS_OPENROMFILTER, 0); 484 | CString strInitialDir; 485 | strOpenRomFilter.AppendChar(_T('\0')); 486 | fd.m_pOFN->lpstrFilter=strOpenRomFilter; 487 | CView *pView = GetCurView(); 488 | if(pView) 489 | { 490 | strInitialDir = pView->GetDocument()->GetPathName(); 491 | strInitialDir = strInitialDir.Left(strInitialDir.ReverseFind(_T('\\'))); 492 | fd.m_pOFN->lpstrInitialDir=strInitialDir; 493 | } 494 | if(fd.DoModal()!=IDOK) return; 495 | 496 | m_nOpenMapFile = fd.m_bMapFile|0x02; 497 | if(fd.m_pOFN->Flags&OFN_READONLY) 498 | m_nOpenMapFile|=4; 499 | CString n; 500 | AfxExtractSubString(n, g_strMFile, 0); 501 | OpenDocumentFile(n); 502 | } 503 | 504 | CString CT2App::GetProfileString(LPCTSTR lpszSection, LPCTSTR lpszEntry, 505 | LPCTSTR lpszDefault) 506 | { 507 | ASSERT(lpszSection != NULL); 508 | ASSERT(lpszEntry != NULL); 509 | 510 | ASSERT(m_pszProfileName != NULL); 511 | 512 | if (lpszDefault == NULL) 513 | lpszDefault = _T(""); // don't pass in NULL 514 | TCHAR szT[0x10000]; 515 | DWORD dw = ::GetPrivateProfileString(lpszSection, lpszEntry, 516 | lpszDefault, szT, _countof(szT), m_pszProfileName); 517 | ASSERT(dw < 0x10000-2); 518 | return szT; 519 | } 520 | 521 | BOOL CT2App::GetProfileBinary(LPCTSTR lpszSection, LPCTSTR lpszEntry, 522 | BYTE** ppData, UINT* pBytes) 523 | { 524 | ASSERT(lpszSection != NULL); 525 | ASSERT(lpszEntry != NULL); 526 | ASSERT(ppData != NULL); 527 | ASSERT(pBytes != NULL); 528 | *ppData = NULL; 529 | *pBytes = 0; 530 | 531 | ASSERT(m_pszProfileName != NULL); 532 | 533 | CString str = GetProfileString(lpszSection, lpszEntry, NULL); 534 | if (str.IsEmpty()) 535 | return FALSE; 536 | ASSERT(str.GetLength()%2 == 0); 537 | INT_PTR nLen = str.GetLength(); 538 | *pBytes = UINT(nLen)/2; 539 | *ppData = new BYTE[*pBytes]; 540 | for (int i=0;im_hWnd!=hWnd && 602 | (GetWindowLongPtr(hWnd, GWL_STYLE)&DSSTYLE)==DSSTYLE && 603 | lstrcmp(g_szBuffer, _T("cabinetwclass"))!=0 && 604 | lstrcmp(g_szBuffer, _T("explorewclass"))!=0 /*&& 605 | (sFindStr(g_szBuffer, _T("ds")) || sFindStr(g_szBuffer, _T("no$")) || sFindStr(g_szBuffer, _T("desmume")))*/ 606 | ) 607 | { 608 | int i=GetMenuItemCount(hMenu); 609 | GetWindowText(hWnd, g_szBuffer, _MAX_PATH); 610 | if(i>32 || !*g_szBuffer) return FALSE; 611 | CString h; 612 | h.Format(_T("%08X-%s"), hWnd, g_szBuffer); 613 | AppendMenu(hMenu, MF_BYCOMMAND|MF_STRING, ID_FILE_FIRSTDSEMUTASK+i, h); 614 | } 615 | 616 | return TRUE; 617 | } 618 | 619 | void CT2App::OnUpdateFileFirstdsemutask(CCmdUI *pCmdUI) 620 | { 621 | int c = 0; 622 | CT2View *p = theApp.GetCurView(); 623 | if(p && p->GetParent()->IsZoomed()) c = 1; 624 | HMENU hMenu = GetSubMenu(GetMainWnd()->GetMenu()->m_hMenu, c); 625 | hMenu = GetSubMenu(hMenu, GetMenuItemIndex(hMenu, ID_FILE_OPEN)+1); 626 | 627 | c = GetMenuItemCount(hMenu); 628 | for(int i=0; iEnable(FALSE); 640 | } 641 | } 642 | 643 | void CT2App::OnFirstdsemutask(UINT nID) 644 | { 645 | int i = nID-ID_FILE_FIRSTDSEMUTASK; 646 | 647 | HMENU hMenu = GetSubMenu(GetMainWnd()->GetMenu()->m_hMenu, 0); 648 | hMenu = GetSubMenu(hMenu, GetMenuItemIndex(hMenu, ID_FILE_OPEN)+1); 649 | 650 | CString t; 651 | GetMenuString(hMenu, i, (LPTSTR)t.GetBuffer(_MAX_PATH), _MAX_PATH, MF_BYPOSITION); 652 | t.ReleaseBuffer(); 653 | HWND hWnd = (HWND)(UINT_PTR)StrToIntEX(t.Left(8), TRUE); 654 | 655 | GetClassName(hWnd, g_szBuffer, _MAX_PATH); 656 | t.Format(_T("=>%s"), g_szBuffer); 657 | 658 | POSITION pos = m_pDocManager->GetFirstDocTemplatePosition(); 659 | if(!m_pDocManager->GetNextDocTemplate(pos)-> 660 | OpenDocumentFile(t)) 661 | Hint(IDS_PCMEM_ERROR, MB_ICONERROR|MB_OK); 662 | } 663 | 664 | void CT2App::OnToolsTbl2cmap() 665 | { 666 | static CTextFileDialog fd(TRUE, IDS_TBLFILTER); 667 | if(fd.DoModal()!=IDOK) return; 668 | 669 | CFileDialog fd2(FALSE); 670 | if(fd2.DoModal()!=IDOK) return; 671 | 672 | CFile file; 673 | if(!file.Open(fd2.GetPathName(), CFile::modeCreate|CFile::modeWrite|CFile::typeBinary)) 674 | { 675 | ShowError(); 676 | return; 677 | } 678 | 679 | LPWSTR lpTbl = GetUText(fd.GetPathName(), fd.m_nCodePage); 680 | 681 | if(!lpTbl) 682 | { 683 | ShowError(); 684 | return; 685 | } 686 | 687 | CString strLine; 688 | LPWSTR lpText = lpTbl; 689 | 690 | unsigned char cmap[] = {0x50,0x41,0x4D,0x43, // flags 691 | 0x00,0x00,0x00,0x00, // size 692 | 0x00,0x00,0xFF,0xFF, // begin-end 693 | 0x02,0x00,0x00,0x00, // nType / unknown 694 | 0x00,0x00,0x00,0x00, // offset 695 | 0x00,0x00 // count 696 | }; 697 | file.Write(cmap, sizeof(cmap)); 698 | UINT wCount = 0; 699 | while(*lpText) 700 | { 701 | strLine = GetLine(lpText); 702 | if(strLine.GetAt(0)==_T(';') || strLine.IsEmpty()) continue; 703 | 704 | int pos = strLine.Find(_T('=')); 705 | if(pos==-1) continue; 706 | UINT nCode = StrToIntEX(strLine.Left(pos)); 707 | if(nCode==-1 || strLine.GetLength()<(pos+2)) continue; 708 | 709 | if(pos<=2) 710 | file.Write(&nCode, 2); 711 | else 712 | { 713 | file.Write(&nCode, 2); 714 | } 715 | file.Write(&wCount, 2); 716 | 717 | wCount++; 718 | if(wCount>0xFFFF) break; 719 | } 720 | WORD wEnd = 0; 721 | file.Write(&wEnd, 2); 722 | 723 | file.Seek(0x14, SEEK_SET); 724 | file.Write(&wCount, 2); 725 | 726 | UINT nSize = (UINT)file.GetLength(); 727 | file.Seek(4, SEEK_SET); 728 | file.Write(&nSize, 4); 729 | 730 | delete[] lpTbl; 731 | } 732 | 733 | void CT2App::SetCT2Tree(WORD nID) 734 | { 735 | nID=IDR_TD_TILEVIEW+(nID-ID_VIEW_TILEVIEW); 736 | if(nID==m_nTreeID) return; 737 | 738 | CT2MainFrm *pMF=(CT2MainFrm*)GetMainWnd(); 739 | CCrystalTreeCtrl &tc = pMF->m_TreeBar.m_Tree; 740 | 741 | // 标准 742 | HRSRC hRsrc; 743 | HANDLE hHandle=NULL; 744 | if(nID!=IDR_TD_SCRIPTVIEW) 745 | { 746 | hRsrc=FindResource(NULL, MAKEINTRESOURCE( IDR_TD_ASMVIEW ), _T("CRYSTAL")); 747 | if(hRsrc) 748 | { 749 | HANDLE hRes=LoadResource(NULL, hRsrc); 750 | CTC *pCtc = (CTC*)LockResource(hRes); 751 | tc.LoadTree(pCtc); 752 | UnlockResource(hRes); 753 | FreeResource(hRes); 754 | 755 | m_nTreeID = nID; 756 | } 757 | }else 758 | tc.DeleteAllItems(); 759 | if(nID==IDR_TD_TILEVIEW || nID==IDR_TD_EDITORVIEW) 760 | { 761 | int nTreeID=IDR_TD_TILEVIEW; 762 | while(TRUE) 763 | { 764 | hRsrc=FindResource(NULL, MAKEINTRESOURCE( nTreeID ), _T("CRYSTAL")); 765 | if(hRsrc) 766 | { 767 | HANDLE hRes=LoadResource(NULL, hRsrc); 768 | CTC *pCtc = (CTC*)LockResource(hRes); 769 | tc.LoadTree(pCtc, CTC_ACT_EXPANDALL); 770 | UnlockResource(hRes); 771 | FreeResource(hRes); 772 | m_nTreeID = nID; 773 | } 774 | if(nTreeID == IDR_TD_EDITORVIEW) 775 | break; 776 | nTreeID = IDR_TD_EDITORVIEW; 777 | } 778 | }else 779 | if(nID!=IDR_TD_ASMVIEW) 780 | { 781 | hRsrc=FindResource(NULL, MAKEINTRESOURCE( nID ), _T("CRYSTAL")); 782 | if(hRsrc) 783 | { 784 | HANDLE hRes=LoadResource(NULL, hRsrc); 785 | CTC *pCtc = (CTC*)LockResource(hRes); 786 | tc.LoadTree(pCtc, CTC_ACT_EXPANDALL); 787 | UnlockResource(hRes); 788 | FreeResource(hRes); 789 | 790 | m_nTreeID = nID; 791 | } 792 | } 793 | } 794 | 795 | -------------------------------------------------------------------------------- /CrystalTile2.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTile2.h -------------------------------------------------------------------------------- /CrystalTile2.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTile2.rc -------------------------------------------------------------------------------- /CrystalTile2.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio Version 17 3 | VisualStudioVersion = 17.3.32929.385 4 | MinimumVisualStudioVersion = 10.0.40219.1 5 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CrystalTile2", "CrystalTile2.vcxproj", "{BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}" 6 | EndProject 7 | Global 8 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 9 | Debug|x64 = Debug|x64 10 | Debug|x86 = Debug|x86 11 | Release|x64 = Release|x64 12 | Release|x86 = Release|x86 13 | Release4dll|x64 = Release4dll|x64 14 | Release4dll|x86 = Release4dll|x86 15 | EndGlobalSection 16 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 17 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Debug|x64.ActiveCfg = Debug|x64 18 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Debug|x64.Build.0 = Debug|x64 19 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Debug|x86.ActiveCfg = Debug|Win32 20 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Debug|x86.Build.0 = Debug|Win32 21 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Release|x64.ActiveCfg = Release|x64 22 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Release|x64.Build.0 = Release|x64 23 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Release|x86.ActiveCfg = Release|Win32 24 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Release|x86.Build.0 = Release|Win32 25 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Release4dll|x64.ActiveCfg = Release4dll|x64 26 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Release4dll|x64.Build.0 = Release4dll|x64 27 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Release4dll|x86.ActiveCfg = Release4dll|Win32 28 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A}.Release4dll|x86.Build.0 = Release4dll|Win32 29 | EndGlobalSection 30 | GlobalSection(SolutionProperties) = preSolution 31 | HideSolutionNode = FALSE 32 | EndGlobalSection 33 | GlobalSection(ExtensibilityGlobals) = postSolution 34 | SolutionGuid = {CDB6A036-FC44-4719-A7E5-7486E6FFD652} 35 | EndGlobalSection 36 | EndGlobal 37 | -------------------------------------------------------------------------------- /CrystalTile2.vcproj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTile2.vcproj -------------------------------------------------------------------------------- /CrystalTile2.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Debug 10 | x64 11 | 12 | 13 | Release4dll 14 | Win32 15 | 16 | 17 | Release4dll 18 | x64 19 | 20 | 21 | Release 22 | Win32 23 | 24 | 25 | Release 26 | x64 27 | 28 | 29 | 30 | 17.0 31 | {BA206AFF-4AB5-4BBB-BFBF-6768DB80209A} 32 | CrystalTile2 33 | MFCProj 34 | 10.0.19041.0 35 | 36 | 37 | 38 | Application 39 | v143 40 | Dynamic 41 | Unicode 42 | true 43 | 44 | 45 | Application 46 | v143 47 | Dynamic 48 | Unicode 49 | true 50 | 51 | 52 | Application 53 | v143 54 | Dynamic 55 | Unicode 56 | true 57 | 58 | 59 | Application 60 | v143 61 | Dynamic 62 | Unicode 63 | true 64 | 65 | 66 | Application 67 | v143 68 | Dynamic 69 | Unicode 70 | 71 | 72 | Application 73 | v143 74 | Dynamic 75 | Unicode 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | <_ProjectFileVersion>17.0.32819.101 101 | 102 | 103 | Debug\ 104 | Debug\ 105 | true 106 | 107 | 108 | true 109 | 110 | 111 | Release\ 112 | Release\ 113 | false 114 | 115 | 116 | false 117 | 118 | 119 | $(Configuration)\ 120 | $(Configuration)\ 121 | false 122 | 123 | 124 | false 125 | 126 | 127 | 128 | Disabled 129 | C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\atlmfc\src\mfc;%(AdditionalIncludeDirectories) 130 | _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) 131 | true 132 | EnableFastChecks 133 | MultiThreadedDebugDLL 134 | 4Bytes 135 | true 136 | Use 137 | Level3 138 | EditAndContinue 139 | 140 | 141 | true 142 | Windows 143 | MachineX86 144 | 145 | 146 | _DEBUG;%(PreprocessorDefinitions) 147 | false 148 | 149 | 150 | _DEBUG;%(PreprocessorDefinitions) 151 | 0x0804 152 | $(IntDir);%(AdditionalIncludeDirectories) 153 | 154 | 155 | 156 | 157 | Disabled 158 | $(VCInstallDIr)atlmfc\src\mfc;%(AdditionalIncludeDirectories) 159 | _CRT_SECURE_NO_WARNINGS;WIN64;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) 160 | EnableFastChecks 161 | MultiThreadedDebugDLL 162 | 4Bytes 163 | true 164 | Use 165 | Level3 166 | ProgramDatabase 167 | 168 | 169 | true 170 | Windows 171 | 172 | 173 | _DEBUG;%(PreprocessorDefinitions) 174 | false 175 | 176 | 177 | _DEBUG;%(PreprocessorDefinitions) 178 | 0x0412 179 | $(IntDir);%(AdditionalIncludeDirectories) 180 | 181 | 182 | 183 | 184 | Full 185 | Speed 186 | true 187 | C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\atlmfc\src\mfc;%(AdditionalIncludeDirectories) 188 | _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) 189 | false 190 | MultiThreadedDLL 191 | 4Bytes 192 | true 193 | Use 194 | Level3 195 | ProgramDatabase 196 | 197 | 198 | false 199 | false 200 | Windows 201 | true 202 | true 203 | MachineX86 204 | 205 | 206 | NDEBUG;%(PreprocessorDefinitions) 207 | false 208 | 209 | 210 | NDEBUG;%(PreprocessorDefinitions) 211 | 0x0804 212 | $(IntDir);%(AdditionalIncludeDirectories) 213 | 214 | 215 | 216 | 217 | Full 218 | Speed 219 | true 220 | $(VCInstallDIr)atlmfc\src\mfc;%(AdditionalIncludeDirectories) 221 | _CRT_SECURE_NO_WARNINGS;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) 222 | false 223 | MultiThreadedDLL 224 | 4Bytes 225 | true 226 | Use 227 | Level3 228 | ProgramDatabase 229 | 230 | 231 | false 232 | false 233 | Windows 234 | true 235 | true 236 | 237 | 238 | NDEBUG;%(PreprocessorDefinitions) 239 | false 240 | 241 | 242 | NDEBUG;%(PreprocessorDefinitions) 243 | 0x0412 244 | $(IntDir);%(AdditionalIncludeDirectories) 245 | 246 | 247 | 248 | 249 | Full 250 | Speed 251 | true 252 | C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.33.31629\atlmfc\src\mfc;%(AdditionalIncludeDirectories) 253 | _CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) 254 | false 255 | MultiThreadedDLL 256 | 4Bytes 257 | true 258 | Use 259 | Level3 260 | ProgramDatabase 261 | 262 | 263 | false 264 | false 265 | Windows 266 | true 267 | true 268 | MachineX86 269 | 270 | 271 | NDEBUG;%(PreprocessorDefinitions) 272 | false 273 | 274 | 275 | NDEBUG;%(PreprocessorDefinitions) 276 | 0x0804 277 | $(IntDir);%(AdditionalIncludeDirectories) 278 | 279 | 280 | 281 | 282 | Full 283 | Speed 284 | true 285 | $(VCInstallDIr)atlmfc\src\mfc;%(AdditionalIncludeDirectories) 286 | _CRT_SECURE_NO_WARNINGS;WIN64;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) 287 | false 288 | MultiThreadedDLL 289 | 4Bytes 290 | true 291 | Use 292 | Level3 293 | ProgramDatabase 294 | 295 | 296 | false 297 | false 298 | Windows 299 | true 300 | true 301 | 302 | 303 | NDEBUG;%(PreprocessorDefinitions) 304 | false 305 | 306 | 307 | NDEBUG;%(PreprocessorDefinitions) 308 | 0x0412 309 | $(IntDir);%(AdditionalIncludeDirectories) 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | Create 350 | Create 351 | Create 352 | Create 353 | Create 354 | Create 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | -------------------------------------------------------------------------------- /CrystalTile2.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx 15 | 16 | 17 | 18 | 19 | 소스 파일 20 | 21 | 22 | 소스 파일 23 | 24 | 25 | 소스 파일 26 | 27 | 28 | 소스 파일 29 | 30 | 31 | 소스 파일 32 | 33 | 34 | 소스 파일 35 | 36 | 37 | 소스 파일 38 | 39 | 40 | 소스 파일 41 | 42 | 43 | 소스 파일 44 | 45 | 46 | 소스 파일 47 | 48 | 49 | 소스 파일 50 | 51 | 52 | 소스 파일 53 | 54 | 55 | 소스 파일 56 | 57 | 58 | 소스 파일 59 | 60 | 61 | 소스 파일 62 | 63 | 64 | 소스 파일 65 | 66 | 67 | 소스 파일 68 | 69 | 70 | 소스 파일 71 | 72 | 73 | 소스 파일 74 | 75 | 76 | 소스 파일 77 | 78 | 79 | 소스 파일 80 | 81 | 82 | 소스 파일 83 | 84 | 85 | 소스 파일 86 | 87 | 88 | 소스 파일 89 | 90 | 91 | 소스 파일 92 | 93 | 94 | 소스 파일 95 | 96 | 97 | 소스 파일 98 | 99 | 100 | 소스 파일 101 | 102 | 103 | 소스 파일 104 | 105 | 106 | 소스 파일 107 | 108 | 109 | 소스 파일 110 | 111 | 112 | 소스 파일 113 | 114 | 115 | 소스 파일 116 | 117 | 118 | 소스 파일 119 | 120 | 121 | 소스 파일 122 | 123 | 124 | 소스 파일 125 | 126 | 127 | 소스 파일 128 | 129 | 130 | 소스 파일 131 | 132 | 133 | 소스 파일 134 | 135 | 136 | 소스 파일 137 | 138 | 139 | 소스 파일 140 | 141 | 142 | 143 | 144 | 헤더 파일 145 | 146 | 147 | 헤더 파일 148 | 149 | 150 | 헤더 파일 151 | 152 | 153 | 헤더 파일 154 | 155 | 156 | 헤더 파일 157 | 158 | 159 | 헤더 파일 160 | 161 | 162 | 헤더 파일 163 | 164 | 165 | 헤더 파일 166 | 167 | 168 | 헤더 파일 169 | 170 | 171 | 헤더 파일 172 | 173 | 174 | 헤더 파일 175 | 176 | 177 | 헤더 파일 178 | 179 | 180 | 헤더 파일 181 | 182 | 183 | 헤더 파일 184 | 185 | 186 | 헤더 파일 187 | 188 | 189 | 헤더 파일 190 | 191 | 192 | 헤더 파일 193 | 194 | 195 | 헤더 파일 196 | 197 | 198 | 헤더 파일 199 | 200 | 201 | 헤더 파일 202 | 203 | 204 | 헤더 파일 205 | 206 | 207 | 헤더 파일 208 | 209 | 210 | 헤더 파일 211 | 212 | 213 | 헤더 파일 214 | 215 | 216 | 헤더 파일 217 | 218 | 219 | 헤더 파일 220 | 221 | 222 | 헤더 파일 223 | 224 | 225 | 헤더 파일 226 | 227 | 228 | 헤더 파일 229 | 230 | 231 | 헤더 파일 232 | 233 | 234 | 헤더 파일 235 | 236 | 237 | 헤더 파일 238 | 239 | 240 | 헤더 파일 241 | 242 | 243 | 헤더 파일 244 | 245 | 246 | 헤더 파일 247 | 248 | 249 | 헤더 파일 250 | 251 | 252 | 헤더 파일 253 | 254 | 255 | 헤더 파일 256 | 257 | 258 | 헤더 파일 259 | 260 | 261 | 헤더 파일 262 | 263 | 264 | 헤더 파일 265 | 266 | 267 | 헤더 파일 268 | 269 | 270 | 271 | 272 | 리소스 파일 273 | 274 | 275 | 리소스 파일 276 | 277 | 278 | 리소스 파일 279 | 280 | 281 | 리소스 파일 282 | 283 | 284 | 리소스 파일 285 | 286 | 287 | 리소스 파일 288 | 289 | 290 | 리소스 파일 291 | 292 | 293 | 리소스 파일 294 | 295 | 296 | 리소스 파일 297 | 298 | 299 | 리소스 파일 300 | 301 | 302 | 리소스 파일 303 | 304 | 305 | 리소스 파일 306 | 307 | 308 | 리소스 파일 309 | 310 | 311 | 리소스 파일 312 | 313 | 314 | 리소스 파일 315 | 316 | 317 | 리소스 파일 318 | 319 | 320 | 리소스 파일 321 | 322 | 323 | 리소스 파일 324 | 325 | 326 | 리소스 파일 327 | 328 | 329 | 리소스 파일 330 | 331 | 332 | 리소스 파일 333 | 334 | 335 | 리소스 파일 336 | 337 | 338 | 리소스 파일 339 | 340 | 341 | 리소스 파일 342 | 343 | 344 | 345 | 346 | 리소스 파일 347 | 348 | 349 | 리소스 파일 350 | 351 | 352 | 리소스 파일 353 | 354 | 355 | 리소스 파일 356 | 357 | 358 | 359 | 360 | 리소스 파일 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 리소스 파일 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | -------------------------------------------------------------------------------- /CrystalTree/CrystalTree.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/CrystalTree.cpp -------------------------------------------------------------------------------- /CrystalTree/CrystalTree.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/CrystalTree.h -------------------------------------------------------------------------------- /CrystalTree/CrystalTree.rc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/CrystalTree.rc -------------------------------------------------------------------------------- /CrystalTree/CrystalTree.sln: -------------------------------------------------------------------------------- 1 | Microsoft Visual Studio Solution File, Format Version 12.00 2 | # Visual Studio Version 17 3 | VisualStudioVersion = 17.3.32929.385 4 | MinimumVisualStudioVersion = 10.0.40219.1 5 | Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CrystalTree", "CrystalTree.vcxproj", "{13F5E532-49AE-4F1B-B418-0BFC9CD735F9}" 6 | EndProject 7 | Global 8 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 9 | Debug|x86 = Debug|x86 10 | Release|x86 = Release|x86 11 | EndGlobalSection 12 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 13 | {13F5E532-49AE-4F1B-B418-0BFC9CD735F9}.Debug|x86.ActiveCfg = Debug|Win32 14 | {13F5E532-49AE-4F1B-B418-0BFC9CD735F9}.Debug|x86.Build.0 = Debug|Win32 15 | {13F5E532-49AE-4F1B-B418-0BFC9CD735F9}.Release|x86.ActiveCfg = Release|Win32 16 | {13F5E532-49AE-4F1B-B418-0BFC9CD735F9}.Release|x86.Build.0 = Release|Win32 17 | EndGlobalSection 18 | GlobalSection(SolutionProperties) = preSolution 19 | HideSolutionNode = FALSE 20 | EndGlobalSection 21 | GlobalSection(ExtensibilityGlobals) = postSolution 22 | SolutionGuid = {91997D4A-2FB2-4B6A-8213-0FA919BE4BD3} 23 | EndGlobalSection 24 | EndGlobal 25 | -------------------------------------------------------------------------------- /CrystalTree/CrystalTree.vcproj: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/CrystalTree.vcproj -------------------------------------------------------------------------------- /CrystalTree/CrystalTree.vcxproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Debug 6 | Win32 7 | 8 | 9 | Release 10 | Win32 11 | 12 | 13 | 14 | 17.0 15 | {13F5E532-49AE-4F1B-B418-0BFC9CD735F9} 16 | MFCProj 17 | 18 | 19 | 20 | Application 21 | v143 22 | Dynamic 23 | MultiByte 24 | 25 | 26 | Application 27 | v143 28 | Dynamic 29 | Unicode 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | <_ProjectFileVersion>17.0.32819.101 43 | 44 | 45 | Debug\ 46 | Debug\ 47 | true 48 | 49 | 50 | Release\ 51 | Release\ 52 | false 53 | 54 | 55 | 56 | Disabled 57 | WIN32;_WINDOWS;_DEBUG;%(PreprocessorDefinitions) 58 | true 59 | EnableFastChecks 60 | MultiThreadedDebugDLL 61 | true 62 | Use 63 | Level3 64 | EditAndContinue 65 | 66 | 67 | true 68 | Windows 69 | MachineX86 70 | 71 | 72 | _DEBUG;%(PreprocessorDefinitions) 73 | false 74 | 75 | 76 | _DEBUG;%(PreprocessorDefinitions) 77 | 0x0804 78 | $(IntDir);%(AdditionalIncludeDirectories) 79 | 80 | 81 | 82 | 83 | WIN32;_WINDOWS;NDEBUG;%(PreprocessorDefinitions) 84 | false 85 | MultiThreadedDLL 86 | true 87 | Use 88 | Level3 89 | ProgramDatabase 90 | 91 | 92 | true 93 | Windows 94 | true 95 | true 96 | MachineX86 97 | 98 | 99 | NDEBUG;%(PreprocessorDefinitions) 100 | false 101 | 102 | 103 | NDEBUG;%(PreprocessorDefinitions) 104 | 0x0804 105 | $(IntDir);%(AdditionalIncludeDirectories) 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | Create 115 | Create 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /CrystalTree/CrystalTree.vcxproj.filters: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {4FC737F1-C7A5-4376-A066-2A32D752A2FF} 6 | cpp;c;cxx;def;odl;idl;hpj;bat;asm;asmx 7 | 8 | 9 | {93995380-89BD-4b04-88EB-625FBE52EBFB} 10 | h;hpp;hxx;hm;inl;inc;xsd 11 | 12 | 13 | {67DA6AB6-F800-4c08-8B7A-83BB121AAD01} 14 | rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx 15 | 16 | 17 | 18 | 19 | 源文件 20 | 21 | 22 | 源文件 23 | 24 | 25 | 源文件 26 | 27 | 28 | 源文件 29 | 30 | 31 | 源文件 32 | 33 | 34 | 35 | 36 | 头文件 37 | 38 | 39 | 头文件 40 | 41 | 42 | 头文件 43 | 44 | 45 | 头文件 46 | 47 | 48 | 头文件 49 | 50 | 51 | 头文件 52 | 53 | 54 | 55 | 56 | 资源文件 57 | 58 | 59 | 60 | 61 | 资源文件 62 | 63 | 64 | 65 | 66 | 资源文件 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /CrystalTree/CrystalTreeCtrl.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/CrystalTreeCtrl.cpp -------------------------------------------------------------------------------- /CrystalTree/CrystalTreeCtrl.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/CrystalTreeCtrl.h -------------------------------------------------------------------------------- /CrystalTree/CrystalTreeDlg.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/CrystalTreeDlg.cpp -------------------------------------------------------------------------------- /CrystalTree/CrystalTreeDlg.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/CrystalTreeDlg.h -------------------------------------------------------------------------------- /CrystalTree/ReadMe.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/ReadMe.txt -------------------------------------------------------------------------------- /CrystalTree/res/CrystalTree.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/res/CrystalTree.ico -------------------------------------------------------------------------------- /CrystalTree/res/CrystalTree.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 在此说明应用程序 10 | 11 | 12 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /CrystalTree/res/CrystalTree.rc2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/res/CrystalTree.rc2 -------------------------------------------------------------------------------- /CrystalTree/res/bitmap1.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/res/bitmap1.bmp -------------------------------------------------------------------------------- /CrystalTree/res/icon1.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/res/icon1.ico -------------------------------------------------------------------------------- /CrystalTree/resource.h: -------------------------------------------------------------------------------- 1 | //{{NO_DEPENDENCIES}} 2 | // Microsoft Visual C++ generated include file. 3 | // Used by CrystalTree.rc 4 | // 5 | #define IDM_ABOUTBOX 0x0010 6 | #define IDD_ABOUTBOX 100 7 | #define IDS_ABOUTBOX 101 8 | #define IDD_CRYSTALTREE_DIALOG 102 9 | #define IDR_MAINFRAME 128 10 | #define IDC_EDIT_LEFTNAME 1002 11 | #define IDC_EDIT_HINT 1003 12 | #define IDC_COMBO_CTRLTYPE 1004 13 | #define IDC_CHECK_HEXMODE 1005 14 | #define IDC_CHECK_READONLY 1006 15 | #define IDC_BUTTON_ADD 1007 16 | #define IDC_BUTTON_DEL 1008 17 | #define IDC_BUTTON_SAVE 1009 18 | #define IDC_BUTTON_LOAD 1010 19 | #define IDC_BUTTON_APPEND 1011 20 | #define IDC_EDIT_DATA 1012 21 | #define IDC_BUTTON_ADDPARENT 1013 22 | #define IDC_CHECK_GETTXT 1014 23 | #define IDC_BUTTON_UP 1015 24 | #define IDC_BUTTON_DWON 1016 25 | #define IDC_BUTTON_CHANGE 1017 26 | #define IDC_CHECK_GETTXT2 1018 27 | #define IDC_CHECK_CMDRANGE 1018 28 | 29 | // Next default values for new objects 30 | // 31 | #ifdef APSTUDIO_INVOKED 32 | #ifndef APSTUDIO_READONLY_SYMBOLS 33 | #define _APS_NEXT_RESOURCE_VALUE 132 34 | #define _APS_NEXT_COMMAND_VALUE 32771 35 | #define _APS_NEXT_CONTROL_VALUE 1016 36 | #define _APS_NEXT_SYMED_VALUE 101 37 | #endif 38 | #endif 39 | -------------------------------------------------------------------------------- /CrystalTree/stdafx.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/stdafx.cpp -------------------------------------------------------------------------------- /CrystalTree/stdafx.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTree/stdafx.h -------------------------------------------------------------------------------- /CrystalTreeCtrl.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTreeCtrl.cpp -------------------------------------------------------------------------------- /CrystalTreeCtrl.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/CrystalTreeCtrl.h -------------------------------------------------------------------------------- /DSFirmWareSettings.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/DSFirmWareSettings.cpp -------------------------------------------------------------------------------- /DSFirmWareSettings.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/DSFirmWareSettings.h -------------------------------------------------------------------------------- /Desktop.ini: -------------------------------------------------------------------------------- 1 | [.ShellClassInfo] 2 | IconFile=.\res\CrystalTile2.ico 3 | IconIndex=0 4 | -------------------------------------------------------------------------------- /FileCompDlg.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/FileCompDlg.cpp -------------------------------------------------------------------------------- /FileCompDlg.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/FileCompDlg.h -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | GNU AFFERO GENERAL PUBLIC LICENSE 2 | Version 3, 19 November 2007 3 | 4 | Copyright (C) 2007 Free Software Foundation, Inc. 5 | Everyone is permitted to copy and distribute verbatim copies 6 | of this license document, but changing it is not allowed. 7 | 8 | Preamble 9 | 10 | The GNU Affero General Public License is a free, copyleft license for 11 | software and other kinds of works, specifically designed to ensure 12 | cooperation with the community in the case of network server software. 13 | 14 | The licenses for most software and other practical works are designed 15 | to take away your freedom to share and change the works. By contrast, 16 | our General Public Licenses are intended to guarantee your freedom to 17 | share and change all versions of a program--to make sure it remains free 18 | software for all its users. 19 | 20 | When we speak of free software, we are referring to freedom, not 21 | price. Our General Public Licenses are designed to make sure that you 22 | have the freedom to distribute copies of free software (and charge for 23 | them if you wish), that you receive source code or can get it if you 24 | want it, that you can change the software or use pieces of it in new 25 | free programs, and that you know you can do these things. 26 | 27 | Developers that use our General Public Licenses protect your rights 28 | with two steps: (1) assert copyright on the software, and (2) offer 29 | you this License which gives you legal permission to copy, distribute 30 | and/or modify the software. 31 | 32 | A secondary benefit of defending all users' freedom is that 33 | improvements made in alternate versions of the program, if they 34 | receive widespread use, become available for other developers to 35 | incorporate. Many developers of free software are heartened and 36 | encouraged by the resulting cooperation. However, in the case of 37 | software used on network servers, this result may fail to come about. 38 | The GNU General Public License permits making a modified version and 39 | letting the public access it on a server without ever releasing its 40 | source code to the public. 41 | 42 | The GNU Affero General Public License is designed specifically to 43 | ensure that, in such cases, the modified source code becomes available 44 | to the community. It requires the operator of a network server to 45 | provide the source code of the modified version running there to the 46 | users of that server. Therefore, public use of a modified version, on 47 | a publicly accessible server, gives the public access to the source 48 | code of the modified version. 49 | 50 | An older license, called the Affero General Public License and 51 | published by Affero, was designed to accomplish similar goals. This is 52 | a different license, not a version of the Affero GPL, but Affero has 53 | released a new version of the Affero GPL which permits relicensing under 54 | this license. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | TERMS AND CONDITIONS 60 | 61 | 0. Definitions. 62 | 63 | "This License" refers to version 3 of the GNU Affero General Public License. 64 | 65 | "Copyright" also means copyright-like laws that apply to other kinds of 66 | works, such as semiconductor masks. 67 | 68 | "The Program" refers to any copyrightable work licensed under this 69 | License. Each licensee is addressed as "you". "Licensees" and 70 | "recipients" may be individuals or organizations. 71 | 72 | To "modify" a work means to copy from or adapt all or part of the work 73 | in a fashion requiring copyright permission, other than the making of an 74 | exact copy. The resulting work is called a "modified version" of the 75 | earlier work or a work "based on" the earlier work. 76 | 77 | A "covered work" means either the unmodified Program or a work based 78 | on the Program. 79 | 80 | To "propagate" a work means to do anything with it that, without 81 | permission, would make you directly or secondarily liable for 82 | infringement under applicable copyright law, except executing it on a 83 | computer or modifying a private copy. Propagation includes copying, 84 | distribution (with or without modification), making available to the 85 | public, and in some countries other activities as well. 86 | 87 | To "convey" a work means any kind of propagation that enables other 88 | parties to make or receive copies. Mere interaction with a user through 89 | a computer network, with no transfer of a copy, is not conveying. 90 | 91 | An interactive user interface displays "Appropriate Legal Notices" 92 | to the extent that it includes a convenient and prominently visible 93 | feature that (1) displays an appropriate copyright notice, and (2) 94 | tells the user that there is no warranty for the work (except to the 95 | extent that warranties are provided), that licensees may convey the 96 | work under this License, and how to view a copy of this License. If 97 | the interface presents a list of user commands or options, such as a 98 | menu, a prominent item in the list meets this criterion. 99 | 100 | 1. Source Code. 101 | 102 | The "source code" for a work means the preferred form of the work 103 | for making modifications to it. "Object code" means any non-source 104 | form of a work. 105 | 106 | A "Standard Interface" means an interface that either is an official 107 | standard defined by a recognized standards body, or, in the case of 108 | interfaces specified for a particular programming language, one that 109 | is widely used among developers working in that language. 110 | 111 | The "System Libraries" of an executable work include anything, other 112 | than the work as a whole, that (a) is included in the normal form of 113 | packaging a Major Component, but which is not part of that Major 114 | Component, and (b) serves only to enable use of the work with that 115 | Major Component, or to implement a Standard Interface for which an 116 | implementation is available to the public in source code form. A 117 | "Major Component", in this context, means a major essential component 118 | (kernel, window system, and so on) of the specific operating system 119 | (if any) on which the executable work runs, or a compiler used to 120 | produce the work, or an object code interpreter used to run it. 121 | 122 | The "Corresponding Source" for a work in object code form means all 123 | the source code needed to generate, install, and (for an executable 124 | work) run the object code and to modify the work, including scripts to 125 | control those activities. However, it does not include the work's 126 | System Libraries, or general-purpose tools or generally available free 127 | programs which are used unmodified in performing those activities but 128 | which are not part of the work. For example, Corresponding Source 129 | includes interface definition files associated with source files for 130 | the work, and the source code for shared libraries and dynamically 131 | linked subprograms that the work is specifically designed to require, 132 | such as by intimate data communication or control flow between those 133 | subprograms and other parts of the work. 134 | 135 | The Corresponding Source need not include anything that users 136 | can regenerate automatically from other parts of the Corresponding 137 | Source. 138 | 139 | The Corresponding Source for a work in source code form is that 140 | same work. 141 | 142 | 2. Basic Permissions. 143 | 144 | All rights granted under this License are granted for the term of 145 | copyright on the Program, and are irrevocable provided the stated 146 | conditions are met. This License explicitly affirms your unlimited 147 | permission to run the unmodified Program. The output from running a 148 | covered work is covered by this License only if the output, given its 149 | content, constitutes a covered work. This License acknowledges your 150 | rights of fair use or other equivalent, as provided by copyright law. 151 | 152 | You may make, run and propagate covered works that you do not 153 | convey, without conditions so long as your license otherwise remains 154 | in force. You may convey covered works to others for the sole purpose 155 | of having them make modifications exclusively for you, or provide you 156 | with facilities for running those works, provided that you comply with 157 | the terms of this License in conveying all material for which you do 158 | not control copyright. Those thus making or running the covered works 159 | for you must do so exclusively on your behalf, under your direction 160 | and control, on terms that prohibit them from making any copies of 161 | your copyrighted material outside their relationship with you. 162 | 163 | Conveying under any other circumstances is permitted solely under 164 | the conditions stated below. Sublicensing is not allowed; section 10 165 | makes it unnecessary. 166 | 167 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. 168 | 169 | No covered work shall be deemed part of an effective technological 170 | measure under any applicable law fulfilling obligations under article 171 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or 172 | similar laws prohibiting or restricting circumvention of such 173 | measures. 174 | 175 | When you convey a covered work, you waive any legal power to forbid 176 | circumvention of technological measures to the extent such circumvention 177 | is effected by exercising rights under this License with respect to 178 | the covered work, and you disclaim any intention to limit operation or 179 | modification of the work as a means of enforcing, against the work's 180 | users, your or third parties' legal rights to forbid circumvention of 181 | technological measures. 182 | 183 | 4. Conveying Verbatim Copies. 184 | 185 | You may convey verbatim copies of the Program's source code as you 186 | receive it, in any medium, provided that you conspicuously and 187 | appropriately publish on each copy an appropriate copyright notice; 188 | keep intact all notices stating that this License and any 189 | non-permissive terms added in accord with section 7 apply to the code; 190 | keep intact all notices of the absence of any warranty; and give all 191 | recipients a copy of this License along with the Program. 192 | 193 | You may charge any price or no price for each copy that you convey, 194 | and you may offer support or warranty protection for a fee. 195 | 196 | 5. Conveying Modified Source Versions. 197 | 198 | You may convey a work based on the Program, or the modifications to 199 | produce it from the Program, in the form of source code under the 200 | terms of section 4, provided that you also meet all of these conditions: 201 | 202 | a) The work must carry prominent notices stating that you modified 203 | it, and giving a relevant date. 204 | 205 | b) The work must carry prominent notices stating that it is 206 | released under this License and any conditions added under section 207 | 7. This requirement modifies the requirement in section 4 to 208 | "keep intact all notices". 209 | 210 | c) You must license the entire work, as a whole, under this 211 | License to anyone who comes into possession of a copy. This 212 | License will therefore apply, along with any applicable section 7 213 | additional terms, to the whole of the work, and all its parts, 214 | regardless of how they are packaged. This License gives no 215 | permission to license the work in any other way, but it does not 216 | invalidate such permission if you have separately received it. 217 | 218 | d) If the work has interactive user interfaces, each must display 219 | Appropriate Legal Notices; however, if the Program has interactive 220 | interfaces that do not display Appropriate Legal Notices, your 221 | work need not make them do so. 222 | 223 | A compilation of a covered work with other separate and independent 224 | works, which are not by their nature extensions of the covered work, 225 | and which are not combined with it such as to form a larger program, 226 | in or on a volume of a storage or distribution medium, is called an 227 | "aggregate" if the compilation and its resulting copyright are not 228 | used to limit the access or legal rights of the compilation's users 229 | beyond what the individual works permit. Inclusion of a covered work 230 | in an aggregate does not cause this License to apply to the other 231 | parts of the aggregate. 232 | 233 | 6. Conveying Non-Source Forms. 234 | 235 | You may convey a covered work in object code form under the terms 236 | of sections 4 and 5, provided that you also convey the 237 | machine-readable Corresponding Source under the terms of this License, 238 | in one of these ways: 239 | 240 | a) Convey the object code in, or embodied in, a physical product 241 | (including a physical distribution medium), accompanied by the 242 | Corresponding Source fixed on a durable physical medium 243 | customarily used for software interchange. 244 | 245 | b) Convey the object code in, or embodied in, a physical product 246 | (including a physical distribution medium), accompanied by a 247 | written offer, valid for at least three years and valid for as 248 | long as you offer spare parts or customer support for that product 249 | model, to give anyone who possesses the object code either (1) a 250 | copy of the Corresponding Source for all the software in the 251 | product that is covered by this License, on a durable physical 252 | medium customarily used for software interchange, for a price no 253 | more than your reasonable cost of physically performing this 254 | conveying of source, or (2) access to copy the 255 | Corresponding Source from a network server at no charge. 256 | 257 | c) Convey individual copies of the object code with a copy of the 258 | written offer to provide the Corresponding Source. This 259 | alternative is allowed only occasionally and noncommercially, and 260 | only if you received the object code with such an offer, in accord 261 | with subsection 6b. 262 | 263 | d) Convey the object code by offering access from a designated 264 | place (gratis or for a charge), and offer equivalent access to the 265 | Corresponding Source in the same way through the same place at no 266 | further charge. You need not require recipients to copy the 267 | Corresponding Source along with the object code. If the place to 268 | copy the object code is a network server, the Corresponding Source 269 | may be on a different server (operated by you or a third party) 270 | that supports equivalent copying facilities, provided you maintain 271 | clear directions next to the object code saying where to find the 272 | Corresponding Source. Regardless of what server hosts the 273 | Corresponding Source, you remain obligated to ensure that it is 274 | available for as long as needed to satisfy these requirements. 275 | 276 | e) Convey the object code using peer-to-peer transmission, provided 277 | you inform other peers where the object code and Corresponding 278 | Source of the work are being offered to the general public at no 279 | charge under subsection 6d. 280 | 281 | A separable portion of the object code, whose source code is excluded 282 | from the Corresponding Source as a System Library, need not be 283 | included in conveying the object code work. 284 | 285 | A "User Product" is either (1) a "consumer product", which means any 286 | tangible personal property which is normally used for personal, family, 287 | or household purposes, or (2) anything designed or sold for incorporation 288 | into a dwelling. In determining whether a product is a consumer product, 289 | doubtful cases shall be resolved in favor of coverage. For a particular 290 | product received by a particular user, "normally used" refers to a 291 | typical or common use of that class of product, regardless of the status 292 | of the particular user or of the way in which the particular user 293 | actually uses, or expects or is expected to use, the product. A product 294 | is a consumer product regardless of whether the product has substantial 295 | commercial, industrial or non-consumer uses, unless such uses represent 296 | the only significant mode of use of the product. 297 | 298 | "Installation Information" for a User Product means any methods, 299 | procedures, authorization keys, or other information required to install 300 | and execute modified versions of a covered work in that User Product from 301 | a modified version of its Corresponding Source. The information must 302 | suffice to ensure that the continued functioning of the modified object 303 | code is in no case prevented or interfered with solely because 304 | modification has been made. 305 | 306 | If you convey an object code work under this section in, or with, or 307 | specifically for use in, a User Product, and the conveying occurs as 308 | part of a transaction in which the right of possession and use of the 309 | User Product is transferred to the recipient in perpetuity or for a 310 | fixed term (regardless of how the transaction is characterized), the 311 | Corresponding Source conveyed under this section must be accompanied 312 | by the Installation Information. But this requirement does not apply 313 | if neither you nor any third party retains the ability to install 314 | modified object code on the User Product (for example, the work has 315 | been installed in ROM). 316 | 317 | The requirement to provide Installation Information does not include a 318 | requirement to continue to provide support service, warranty, or updates 319 | for a work that has been modified or installed by the recipient, or for 320 | the User Product in which it has been modified or installed. Access to a 321 | network may be denied when the modification itself materially and 322 | adversely affects the operation of the network or violates the rules and 323 | protocols for communication across the network. 324 | 325 | Corresponding Source conveyed, and Installation Information provided, 326 | in accord with this section must be in a format that is publicly 327 | documented (and with an implementation available to the public in 328 | source code form), and must require no special password or key for 329 | unpacking, reading or copying. 330 | 331 | 7. Additional Terms. 332 | 333 | "Additional permissions" are terms that supplement the terms of this 334 | License by making exceptions from one or more of its conditions. 335 | Additional permissions that are applicable to the entire Program shall 336 | be treated as though they were included in this License, to the extent 337 | that they are valid under applicable law. If additional permissions 338 | apply only to part of the Program, that part may be used separately 339 | under those permissions, but the entire Program remains governed by 340 | this License without regard to the additional permissions. 341 | 342 | When you convey a copy of a covered work, you may at your option 343 | remove any additional permissions from that copy, or from any part of 344 | it. (Additional permissions may be written to require their own 345 | removal in certain cases when you modify the work.) You may place 346 | additional permissions on material, added by you to a covered work, 347 | for which you have or can give appropriate copyright permission. 348 | 349 | Notwithstanding any other provision of this License, for material you 350 | add to a covered work, you may (if authorized by the copyright holders of 351 | that material) supplement the terms of this License with terms: 352 | 353 | a) Disclaiming warranty or limiting liability differently from the 354 | terms of sections 15 and 16 of this License; or 355 | 356 | b) Requiring preservation of specified reasonable legal notices or 357 | author attributions in that material or in the Appropriate Legal 358 | Notices displayed by works containing it; or 359 | 360 | c) Prohibiting misrepresentation of the origin of that material, or 361 | requiring that modified versions of such material be marked in 362 | reasonable ways as different from the original version; or 363 | 364 | d) Limiting the use for publicity purposes of names of licensors or 365 | authors of the material; or 366 | 367 | e) Declining to grant rights under trademark law for use of some 368 | trade names, trademarks, or service marks; or 369 | 370 | f) Requiring indemnification of licensors and authors of that 371 | material by anyone who conveys the material (or modified versions of 372 | it) with contractual assumptions of liability to the recipient, for 373 | any liability that these contractual assumptions directly impose on 374 | those licensors and authors. 375 | 376 | All other non-permissive additional terms are considered "further 377 | restrictions" within the meaning of section 10. If the Program as you 378 | received it, or any part of it, contains a notice stating that it is 379 | governed by this License along with a term that is a further 380 | restriction, you may remove that term. If a license document contains 381 | a further restriction but permits relicensing or conveying under this 382 | License, you may add to a covered work material governed by the terms 383 | of that license document, provided that the further restriction does 384 | not survive such relicensing or conveying. 385 | 386 | If you add terms to a covered work in accord with this section, you 387 | must place, in the relevant source files, a statement of the 388 | additional terms that apply to those files, or a notice indicating 389 | where to find the applicable terms. 390 | 391 | Additional terms, permissive or non-permissive, may be stated in the 392 | form of a separately written license, or stated as exceptions; 393 | the above requirements apply either way. 394 | 395 | 8. Termination. 396 | 397 | You may not propagate or modify a covered work except as expressly 398 | provided under this License. Any attempt otherwise to propagate or 399 | modify it is void, and will automatically terminate your rights under 400 | this License (including any patent licenses granted under the third 401 | paragraph of section 11). 402 | 403 | However, if you cease all violation of this License, then your 404 | license from a particular copyright holder is reinstated (a) 405 | provisionally, unless and until the copyright holder explicitly and 406 | finally terminates your license, and (b) permanently, if the copyright 407 | holder fails to notify you of the violation by some reasonable means 408 | prior to 60 days after the cessation. 409 | 410 | Moreover, your license from a particular copyright holder is 411 | reinstated permanently if the copyright holder notifies you of the 412 | violation by some reasonable means, this is the first time you have 413 | received notice of violation of this License (for any work) from that 414 | copyright holder, and you cure the violation prior to 30 days after 415 | your receipt of the notice. 416 | 417 | Termination of your rights under this section does not terminate the 418 | licenses of parties who have received copies or rights from you under 419 | this License. If your rights have been terminated and not permanently 420 | reinstated, you do not qualify to receive new licenses for the same 421 | material under section 10. 422 | 423 | 9. Acceptance Not Required for Having Copies. 424 | 425 | You are not required to accept this License in order to receive or 426 | run a copy of the Program. Ancillary propagation of a covered work 427 | occurring solely as a consequence of using peer-to-peer transmission 428 | to receive a copy likewise does not require acceptance. However, 429 | nothing other than this License grants you permission to propagate or 430 | modify any covered work. These actions infringe copyright if you do 431 | not accept this License. Therefore, by modifying or propagating a 432 | covered work, you indicate your acceptance of this License to do so. 433 | 434 | 10. Automatic Licensing of Downstream Recipients. 435 | 436 | Each time you convey a covered work, the recipient automatically 437 | receives a license from the original licensors, to run, modify and 438 | propagate that work, subject to this License. You are not responsible 439 | for enforcing compliance by third parties with this License. 440 | 441 | An "entity transaction" is a transaction transferring control of an 442 | organization, or substantially all assets of one, or subdividing an 443 | organization, or merging organizations. If propagation of a covered 444 | work results from an entity transaction, each party to that 445 | transaction who receives a copy of the work also receives whatever 446 | licenses to the work the party's predecessor in interest had or could 447 | give under the previous paragraph, plus a right to possession of the 448 | Corresponding Source of the work from the predecessor in interest, if 449 | the predecessor has it or can get it with reasonable efforts. 450 | 451 | You may not impose any further restrictions on the exercise of the 452 | rights granted or affirmed under this License. For example, you may 453 | not impose a license fee, royalty, or other charge for exercise of 454 | rights granted under this License, and you may not initiate litigation 455 | (including a cross-claim or counterclaim in a lawsuit) alleging that 456 | any patent claim is infringed by making, using, selling, offering for 457 | sale, or importing the Program or any portion of it. 458 | 459 | 11. Patents. 460 | 461 | A "contributor" is a copyright holder who authorizes use under this 462 | License of the Program or a work on which the Program is based. The 463 | work thus licensed is called the contributor's "contributor version". 464 | 465 | A contributor's "essential patent claims" are all patent claims 466 | owned or controlled by the contributor, whether already acquired or 467 | hereafter acquired, that would be infringed by some manner, permitted 468 | by this License, of making, using, or selling its contributor version, 469 | but do not include claims that would be infringed only as a 470 | consequence of further modification of the contributor version. For 471 | purposes of this definition, "control" includes the right to grant 472 | patent sublicenses in a manner consistent with the requirements of 473 | this License. 474 | 475 | Each contributor grants you a non-exclusive, worldwide, royalty-free 476 | patent license under the contributor's essential patent claims, to 477 | make, use, sell, offer for sale, import and otherwise run, modify and 478 | propagate the contents of its contributor version. 479 | 480 | In the following three paragraphs, a "patent license" is any express 481 | agreement or commitment, however denominated, not to enforce a patent 482 | (such as an express permission to practice a patent or covenant not to 483 | sue for patent infringement). To "grant" such a patent license to a 484 | party means to make such an agreement or commitment not to enforce a 485 | patent against the party. 486 | 487 | If you convey a covered work, knowingly relying on a patent license, 488 | and the Corresponding Source of the work is not available for anyone 489 | to copy, free of charge and under the terms of this License, through a 490 | publicly available network server or other readily accessible means, 491 | then you must either (1) cause the Corresponding Source to be so 492 | available, or (2) arrange to deprive yourself of the benefit of the 493 | patent license for this particular work, or (3) arrange, in a manner 494 | consistent with the requirements of this License, to extend the patent 495 | license to downstream recipients. "Knowingly relying" means you have 496 | actual knowledge that, but for the patent license, your conveying the 497 | covered work in a country, or your recipient's use of the covered work 498 | in a country, would infringe one or more identifiable patents in that 499 | country that you have reason to believe are valid. 500 | 501 | If, pursuant to or in connection with a single transaction or 502 | arrangement, you convey, or propagate by procuring conveyance of, a 503 | covered work, and grant a patent license to some of the parties 504 | receiving the covered work authorizing them to use, propagate, modify 505 | or convey a specific copy of the covered work, then the patent license 506 | you grant is automatically extended to all recipients of the covered 507 | work and works based on it. 508 | 509 | A patent license is "discriminatory" if it does not include within 510 | the scope of its coverage, prohibits the exercise of, or is 511 | conditioned on the non-exercise of one or more of the rights that are 512 | specifically granted under this License. You may not convey a covered 513 | work if you are a party to an arrangement with a third party that is 514 | in the business of distributing software, under which you make payment 515 | to the third party based on the extent of your activity of conveying 516 | the work, and under which the third party grants, to any of the 517 | parties who would receive the covered work from you, a discriminatory 518 | patent license (a) in connection with copies of the covered work 519 | conveyed by you (or copies made from those copies), or (b) primarily 520 | for and in connection with specific products or compilations that 521 | contain the covered work, unless you entered into that arrangement, 522 | or that patent license was granted, prior to 28 March 2007. 523 | 524 | Nothing in this License shall be construed as excluding or limiting 525 | any implied license or other defenses to infringement that may 526 | otherwise be available to you under applicable patent law. 527 | 528 | 12. No Surrender of Others' Freedom. 529 | 530 | If conditions are imposed on you (whether by court order, agreement or 531 | otherwise) that contradict the conditions of this License, they do not 532 | excuse you from the conditions of this License. If you cannot convey a 533 | covered work so as to satisfy simultaneously your obligations under this 534 | License and any other pertinent obligations, then as a consequence you may 535 | not convey it at all. For example, if you agree to terms that obligate you 536 | to collect a royalty for further conveying from those to whom you convey 537 | the Program, the only way you could satisfy both those terms and this 538 | License would be to refrain entirely from conveying the Program. 539 | 540 | 13. Remote Network Interaction; Use with the GNU General Public License. 541 | 542 | Notwithstanding any other provision of this License, if you modify the 543 | Program, your modified version must prominently offer all users 544 | interacting with it remotely through a computer network (if your version 545 | supports such interaction) an opportunity to receive the Corresponding 546 | Source of your version by providing access to the Corresponding Source 547 | from a network server at no charge, through some standard or customary 548 | means of facilitating copying of software. This Corresponding Source 549 | shall include the Corresponding Source for any work covered by version 3 550 | of the GNU General Public License that is incorporated pursuant to the 551 | following paragraph. 552 | 553 | Notwithstanding any other provision of this License, you have 554 | permission to link or combine any covered work with a work licensed 555 | under version 3 of the GNU General Public License into a single 556 | combined work, and to convey the resulting work. The terms of this 557 | License will continue to apply to the part which is the covered work, 558 | but the work with which it is combined will remain governed by version 559 | 3 of the GNU General Public License. 560 | 561 | 14. Revised Versions of this License. 562 | 563 | The Free Software Foundation may publish revised and/or new versions of 564 | the GNU Affero General Public License from time to time. Such new versions 565 | will be similar in spirit to the present version, but may differ in detail to 566 | address new problems or concerns. 567 | 568 | Each version is given a distinguishing version number. If the 569 | Program specifies that a certain numbered version of the GNU Affero General 570 | Public License "or any later version" applies to it, you have the 571 | option of following the terms and conditions either of that numbered 572 | version or of any later version published by the Free Software 573 | Foundation. If the Program does not specify a version number of the 574 | GNU Affero General Public License, you may choose any version ever published 575 | by the Free Software Foundation. 576 | 577 | If the Program specifies that a proxy can decide which future 578 | versions of the GNU Affero General Public License can be used, that proxy's 579 | public statement of acceptance of a version permanently authorizes you 580 | to choose that version for the Program. 581 | 582 | Later license versions may give you additional or different 583 | permissions. However, no additional obligations are imposed on any 584 | author or copyright holder as a result of your choosing to follow a 585 | later version. 586 | 587 | 15. Disclaimer of Warranty. 588 | 589 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY 590 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT 591 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY 592 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, 593 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 594 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM 595 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF 596 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 597 | 598 | 16. Limitation of Liability. 599 | 600 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 601 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 602 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY 603 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE 604 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF 605 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD 606 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), 607 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF 608 | SUCH DAMAGES. 609 | 610 | 17. Interpretation of Sections 15 and 16. 611 | 612 | If the disclaimer of warranty and limitation of liability provided 613 | above cannot be given local legal effect according to their terms, 614 | reviewing courts shall apply local law that most closely approximates 615 | an absolute waiver of all civil liability in connection with the 616 | Program, unless a warranty or assumption of liability accompanies a 617 | copy of the Program in return for a fee. 618 | 619 | END OF TERMS AND CONDITIONS 620 | 621 | How to Apply These Terms to Your New Programs 622 | 623 | If you develop a new program, and you want it to be of the greatest 624 | possible use to the public, the best way to achieve this is to make it 625 | free software which everyone can redistribute and change under these terms. 626 | 627 | To do so, attach the following notices to the program. It is safest 628 | to attach them to the start of each source file to most effectively 629 | state the exclusion of warranty; and each file should have at least 630 | the "copyright" line and a pointer to where the full notice is found. 631 | 632 | 633 | Copyright (C) 634 | 635 | This program is free software: you can redistribute it and/or modify 636 | it under the terms of the GNU Affero General Public License as published 637 | by the Free Software Foundation, either version 3 of the License, or 638 | (at your option) any later version. 639 | 640 | This program is distributed in the hope that it will be useful, 641 | but WITHOUT ANY WARRANTY; without even the implied warranty of 642 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 643 | GNU Affero General Public License for more details. 644 | 645 | You should have received a copy of the GNU Affero General Public License 646 | along with this program. If not, see . 647 | 648 | Also add information on how to contact you by electronic and paper mail. 649 | 650 | If your software can interact with users remotely through a computer 651 | network, you should also make sure that it provides a way for users to 652 | get its source. For example, if your program is a web application, its 653 | interface could display a "Source" link that leads users to an archive 654 | of the code. There are many ways you could offer source, and different 655 | solutions will be better for different programs; see section 13 for the 656 | specific requirements. 657 | 658 | You should also get your employer (if you work as a programmer) or school, 659 | if any, to sign a "copyright disclaimer" for the program, if necessary. 660 | For more information on this, and how to apply and follow the GNU AGPL, see 661 | . 662 | -------------------------------------------------------------------------------- /LZ77Search.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/LZ77Search.cpp -------------------------------------------------------------------------------- /LZ77Search.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/LZ77Search.h -------------------------------------------------------------------------------- /NARCFileInfo.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/NARCFileInfo.cpp -------------------------------------------------------------------------------- /NARCFileInfo.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/NARCFileInfo.h -------------------------------------------------------------------------------- /NdsFileSystemInfo.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/NdsFileSystemInfo.cpp -------------------------------------------------------------------------------- /NdsFileSystemInfo.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/NdsFileSystemInfo.h -------------------------------------------------------------------------------- /NdsInfo.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/NdsInfo.cpp -------------------------------------------------------------------------------- /NdsInfo.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/NdsInfo.h -------------------------------------------------------------------------------- /OpenFileDialog.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/OpenFileDialog.cpp -------------------------------------------------------------------------------- /OpenFileDialog.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/OpenFileDialog.h -------------------------------------------------------------------------------- /PacFileInfo.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/PacFileInfo.cpp -------------------------------------------------------------------------------- /PacFileInfo.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/PacFileInfo.h -------------------------------------------------------------------------------- /ReadMe.md: -------------------------------------------------------------------------------- 1 | # CrystalTile2.5 2 | 크리스탈타일2 개선판 3 | 4 | 소스코드를 구할수 있는 가장 최근 버전인 크리스탈 타일2 2007.09.12 판에서 SNES 4bpp 문제점을 해결한 버전입니다. 5 | # 구현된 사항 6 | * SNES 4bpp 모드에서 GB 2bpp 로 출력하는 문제점 해결 7 | * 테스트용 3bpp 모드 추가 8 | 9 | # TODO(Canceled) 10 | 프로젝트의 너무 낡음과 CrystalTree의 불안정성, 진행자의 윈도우 프로그래밍에 대한 이해도 때문에 진행을 취소합니다. 11 | 만약에 MFC등 윈도우 프로그래밍에 익숙한 사람이 참여할 경우 다시 진행될 가능성이 있습니다. 12 | * 64비트 이식 (MFC 오류 해결 필요) 13 | * 그래픽 모드 추가 14 | ``` 15 | - 크리스탈타일2 2011버전에서 지원하는 모드 16 | 16색 BGRa 17 | 32색 aBGR 18 | 3BPP 3색 19 | Tim 8bit 규격 20 | 21 | - YY-CHR에서 지원하는 모드 22 | 2BPP MSX (2BPP NES의 변종) 23 | 2BPP MSX Screen 2 (16색 모드) 24 | 3BPP 8x8 (2bpp NES의 확장) 25 | 3BPP SNES (2bpp NES + 1bpp 단색) 26 | 4BPP PCE(SG) (16x16) 27 | 4BPP MSX/MD/WSC (4BPP GBA의 변종) 28 | 4BPP 8x8 (2bpp NES의 확장) 29 | 8BPP SNES(128x128) (4bpp SNES의 확장) 30 | 31 | - 기타 32 | 4BPP MD/x68k (2BPP VB/NGP의 4BPP 확장, 위의 4BPP MSX/MD/WSC와 동일한지 확인 필요, https://mrclick.zophar.net/TilEd/download/consolegfx.txt) 33 | ``` 34 | * 이외 기존 크리스탈 타일의 업데이트 내역 35 | ``` 36 | 2009.03.06 구현사항 37 | 1. 압축 및 압축 해제 기능이 콘솔에 추가됩니다. 38 | 2. PAC 파일 열기 오류 로그아웃 오류를 수정한다. 39 | 3.NFTR 라이브러리 에디터 코드 테이블 내보내기 기능 추가(글꼴 순으로 저장) 40 | 41 | 4. OCR 문자 인식 기능 추가 42 |  9, 11, 15 크기 인식 가능 43 |  템플릿을 선택할 때 가능한 한 작은 템플릿을 사용하십시오 44 |  예를 들어 어떤 게임의 글자모양은 16자모이고 사실 글자는 보통 12, 14, 15입니다. 45 |  어떤 12개의 글자 모양은 사실 문자는 모두 9, 10, 11 등등이다. 46 |  그래서 9, 11, 15는 사실 게임에서 일반적으로 사용되는 글자 모양 크기를 이미 포함하고 있습니다. 47 | 48 |  인식시 프로그램은 검정색을 바탕색으로 사용하므로 문자 팔레트의 바탕색은 검정(RGB(0,0,0)을 사용하십시오. 49 |  테스트 진행 시 1BPP 단색에 대한 라이브러리 인식률이 매우 좋습니다. 50 |  다중 색상 라이브러리의 경우 주 색상 스와치를 한 가지 색상으로 설정하고 다른 색상을 검은색으로 설정하는 것을 고려할 수 있습니다. 51 |  이렇게 하면 단색의 목적을 달성할 수 있습니다. 52 | 53 | 2009.02.2 구현사항 54 | 1. Header=0x11의 LZ압축, 해제 지원 55 | 2. 안티에이징 카드 코드 제거 기능 추가 56 | 3.NEF 심볼 라이브러리 확장 57 | 4. NFTR 라이브러리 편집기 다시 쓰기 58 |  NFTR의 모든 기능 지원 59 |  NFTR 기본 라이브러리 지원 60 |  Korean (CodePage 949 / UHC) 61 |  European Language (CodePage 1252 / Latin-1) 62 |  DS-IPL font table 63 |  DS-IPL font table for Chinese 64 |  DS-IPL font table for Korean 65 |  Japanese Level 1 (JIS X 0208) 66 |  Japanese Level 1,2 (JIS X 0208) 67 | 68 | 2009.02.05 구현사항 69 | 1. NANR/NCER/NCGR/NCLR 애니메이션 지원 70 |  NANR/NCER/NCBR/NCLR 动画 71 |  NCLR 팔레트가 없는 경우 CT2 자체 팔레트 사용 72 | 73 | 2. NCLR 확장 팔레트 지원 (256색 팔레트 16개 내장) 74 |  팔레트 창에는 0123456789ABCDEF 번호가 매겨진 16개의 팔레트가 있습니다 75 | 76 | 2009.01.22 구현사항 77 | 1.NO$GBA 2.6A 일반 및 디버거 버전, iDeas 1.0.2.7 팔레트 로딩 기능 추가(에뮬레이터 먼저 실행) 78 | 2. 16진수 편집기의 문자열 처리 향상 79 |  데이터에서 커서: 데이터 복사 80 |  커서 위치 문자: 문자 복사 81 | 3. 더 많은 문자 집합 지원 82 | 4.HUFFMAN 데이터 압축, 압축 해제 지원 83 |  LZ77 압축에서 VRAM 지원 포맷으로 변경 (이전에는 16비트를 지원하지 않음) 84 | 85 | 5.비트맵 부착 기능 강화 86 |  Tile 대 Tile로 붙여넣을 수 있습니다. 87 |  두 비트맵에 대한 Tile 크기가 다른 경우 88 |  단축키:Alt+Shift+상하좌우(컷팅정보가 상태바에 표시됨) 89 |  두 줄 두 줄의 16x16Tile을 복사하여 12x12Tile에 붙여넣기 90 |  줌 기능을 사용하여 두 개의 Tile 콘텐츠를 하나의 Tile에 넣을 수도 있습니다. 91 |  이전에는 Tile에 대해 Tile을 붙여넣을 수 없었습니다. 92 | 93 | 7.NEF 기호표 생성 도구 추가 94 |  추적을 더 쉽게 하기 위해 NO$GBA 디버거에 사용할 수 있습니다. 95 |  NitroSDK3, 4, MONGOOSE3, 4(ARM7 Components)의 대부분의 함수를 포함합니다. 96 |  여러 심볼 라이브러리 검색을 선택하는 것은 권장되지 않으며 CT2에서 게임 개발 라이브러리 버전을 확인합니다. 97 |  기호 규칙 98 |  분류[i]_기호명 99 |  예를 들어 FS_ReadFileMIi_CpuClear32i는 개인 함수를 나타냅니다 100 |  CT2에 추가된 기호 규칙: 101 |  만약 당신이 ARM9과 ARM7의 기호표를 동시에 만든다면 102 |  CT2는 NO$GBA가 동일한 이름의 기호를 처리할 수 없기 때문에 ARM7 기호 뒤에 '7'을 자동으로 추가합니다. 103 |  예: OS_Init, NO$GBA는 첫 번째 ARM9의 OS_Init만 점프할 수 있으며, ARM7의 OS_Init은 점프할 수 없습니다. 104 |  하지만 정상적으로 표시되며 OS_Init7로 변경 후 NO$GBA에 심볼 입력이 편리합니다. 105 |  ARM7 심볼 라이브러리를 별도로 생성하는 경우 '7'이 추가되지 않습니다. 106 | 107 | 2008.02.28 구현사항 108 | 1.뒤집기 등 Tile 특수효과 실패 오류 수정 109 | 110 | 2008.02.21 구현사항 111 | 1.DS 파일 삽입 지원 112 | 2. DS 파일 목록 수정 일본어 파일 이름 깨짐 모두 오류 113 | 114 | 2008.01.22 구현사항 115 | 1.XAP 파일 지원 116 | 117 | 2007.12.28 구현사항 118 | 1. 단일 문서 다중 파일 열기 기능 개선 119 | 2.DS 파일 목록에서 NFTR 라이브러리를 직접 열 수 있음 120 | 3. 사운드 파일 저장 실패 오류 수정 121 | 4.NFTR 에디터의 CMAP 목록 오류 수정 122 | 123 | 2007.12.22 구현사항 124 | 1.LZ 대량 압축 기능 추가 125 | 2.NFTR 라이브러리 생성 기능 추가 126 | 3. DS 파일을 가져올 때 파일이 원래 파일보다 크면 127 |  나중에 사용할 수 있는 공간을 먼저 자동으로 검색합니다. 사용자가 수동으로 새 공간 주소를 입력할 필요가 없습니다. 128 |  찾을 수 없으면 새 주소를 입력하라는 메시지가 나타납니다(기본값은 DS 헤더의 ROM 끝 주소입니다). 129 | 4. 인트로 기능 추가, 이미지 256색 비트맵 130 | 131 | 2007.12.11 구현사항 132 | 1.DS 파일 목록을 디렉터리 + 목록으로 변경 133 | 2.새로운 파일 패키지 형식 지원 134 | 3.DS 파일 목록에 멀티미디어 기능 추가 135 | 4.Tile 뒤집기 처리 오류 수정 136 | 5.새 빈 파일 추가 137 | 6.파일 메뉴 추가파일 기능 추가  138 | ``` 139 | == 프로젝트 저작자 == 140 | 2004-2007 Crystal (C) 141 | 2010년도 까지 해당 제작자가 프로젝트를 진행하였으나, 지금 가지고 있는건 2007년 사본 밖에 없습니다. 142 | 원본 사본은 해당링크에서 다운로드 가능합니다.[https://filetrip.net/nds-downloads/utilities/download-crystaltile2-source-code-september-2007-f31478.html] 143 | -------------------------------------------------------------------------------- /ReadMe_old.txt: -------------------------------------------------------------------------------- 1 | channel_struct *chan = &SPU->chan[channel]; 2 | 3 | chan->sampinc = (16777216 / (0x10000 - (double)chan->timer)) / 44100; 4 | 5 | switch(chan->format) 6 | { 7 | case 0: // 8-bit 8 | chan->loopstart = chan->loopstart << 2; 9 | chan->length = (chan->length << 2) + chan->loopstart; 10 | chan->sampcnt = 0; 11 | break; 12 | case 1: // 16-bit 13 | chan->loopstart = chan->loopstart << 1; 14 | chan->length = (chan->length << 1) + chan->loopstart; 15 | chan->sampcnt = 0; 16 | break; 17 | case 2: // ADPCM 18 | { 19 | chan->pcm16b = (s16)((chan->buf8[1] << 8) | chan->buf8[0]); 20 | chan->index = chan->buf8[2] & 0x7F; 21 | chan->lastsampcnt = 7; 22 | chan->sampcnt = 8; 23 | chan->loopstart = chan->loopstart << 3; 24 | chan->length = (chan->length << 3) + chan->loopstart; 25 | break; 26 | } 27 | case 3: // PSG 28 | { 29 | break; 30 | } 31 | default: break; 32 | } 33 | 34 | static INLINE void FetchADPCMData(channel_struct *chan, s32 *data) 35 | { 36 | u8 data4bit; 37 | int diff; 38 | int i; 39 | 40 | if (chan->lastsampcnt == (int)chan->sampcnt) 41 | { 42 | // No sense decoding, just return the last sample 43 | *data = (s32)chan->pcm16b; 44 | return; 45 | } 46 | 47 | for (i = chan->lastsampcnt+1; i < (int)chan->sampcnt+1; i++) 48 | { 49 | if (i & 0x1) 50 | data4bit = (chan->buf8[i >> 1] >> 4) & 0xF; 51 | else 52 | data4bit = chan->buf8[i >> 1] & 0xF; 53 | 54 | diff = ((data4bit & 0x7) * 2 + 1) * adpcmtbl[chan->index] / 8; 55 | if (data4bit & 0x8) 56 | diff = -diff; 57 | 58 | chan->pcm16b = (s16)MinMax(chan->pcm16b+diff, -0x8000, 0x7FFF); 59 | chan->index = MinMax(chan->index+indextbl[data4bit & 0x7], 0, 88); 60 | } 61 | 62 | chan->lastsampcnt = chan->sampcnt; 63 | *data = (s32)chan->pcm16b; 64 | } 65 | 66 | static INLINE void MixLR(channel_struct *chan, s32 data) 67 | { 68 | if (data) 69 | { 70 | data = ((data * chan->vol) / 127) >> chan->datashift; 71 | SPU->sndbuf[SPU->bufpos<<1] += data * (127 - chan->pan) / 127; 72 | SPU->sndbuf[(SPU->bufpos<<1)+1] += data * chan->pan / 127; 73 | } 74 | } 75 | 76 | static INLINE void TestForLoop2(channel_struct *chan) 77 | { 78 | chan->sampcnt += chan->sampinc; 79 | 80 | if (chan->sampcnt > (double)chan->length) 81 | { 82 | // Do we loop? Or are we done? 83 | if (chan->repeat == 1) 84 | { 85 | chan->sampcnt = (double)chan->loopstart; // Is this correct? 86 | chan->pcm16b = (s16)((chan->buf8[1] << 8) | chan->buf8[0]); 87 | chan->index = chan->buf8[2] & 0x7F; 88 | chan->lastsampcnt = 7; 89 | } 90 | else 91 | { 92 | chan->status = CHANSTAT_STOPPED; 93 | MMU.ARM7_REG[0x403 + ((((u32)chan-(u32)SPU->chan) / sizeof(channel_struct)) * 0x10)] &= 0x7F; 94 | SPU->bufpos = SPU->buflength; 95 | } 96 | } 97 | } 98 | 99 | void SPU_ChanUpdateADPCMLR(channel_struct *chan) 100 | { 101 | for (; SPU->bufpos < SPU->buflength; SPU->bufpos++) 102 | { 103 | s32 data; 104 | 105 | // fetch data from source address 106 | FetchADPCMData(chan, &data); 107 | 108 | MixLR(chan, data); 109 | 110 | // check to see if we're passed the length and need to loop, etc. 111 | TestForLoop2(chan); 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /RecentStatList.cpp: -------------------------------------------------------------------------------- 1 | #include "StdAfx.h" 2 | #include "CrystalTile2.h" 3 | 4 | #include ".\recentstatlist.h" 5 | 6 | CRecentStatList::CRecentStatList(UINT nMaxMRU) 7 | : m_strSectionName(_T("Recent File List")) 8 | , m_strEntryFormat(_T("Stat%d")) 9 | { 10 | m_nMaxMRU = nMaxMRU; 11 | } 12 | 13 | CRecentStatList::~CRecentStatList(void) 14 | { 15 | if(m_pRecentStatList) 16 | { 17 | for(UINT i=0; i 43 | GetProfileBinary(m_strSectionName, strEntry, &pStatus, &nSize)) 44 | { 45 | m_pRecentStatList[iMRU] = (UINT_PTR)pStatus; 46 | } 47 | } 48 | } 49 | 50 | void CRecentStatList::WriteList(void) 51 | { 52 | LPTSTR pszEntry = new TCHAR[m_strEntryFormat.GetLength()+10]; 53 | CWinApp* pApp = AfxGetApp(); 54 | // pApp->WriteProfileString(m_strSectionName, NULL, NULL); 55 | for(UINT iMRU = 0; iMRU < m_nMaxMRU; iMRU++) 56 | { 57 | wsprintf(pszEntry, m_strEntryFormat, iMRU + 1); 58 | //if(m_pRecentStatList[iMRU]) 59 | if(IsOK(iMRU)) 60 | { 61 | pApp->WriteProfileBinary(m_strSectionName, pszEntry, 62 | (BYTE*)m_pRecentStatList[iMRU], sizeof(STATEDATA)); 63 | } 64 | } 65 | delete[] pszEntry; 66 | } 67 | 68 | void CRecentStatList::Remove(UINT nIndex) 69 | { 70 | ASSERT(nIndex >= 0); 71 | ASSERT(nIndex < m_nMaxMRU); 72 | 73 | if(m_pRecentStatList[nIndex]) 74 | { 75 | delete[] (UINT_PTR*)m_pRecentStatList[nIndex]; 76 | m_pRecentStatList[nIndex] = 0; 77 | } 78 | UINT iMRU; 79 | for (iMRU = nIndex; iMRU < m_nMaxMRU-1; iMRU++) 80 | m_pRecentStatList[iMRU] = m_pRecentStatList[iMRU+1]; 81 | 82 | ASSERT(iMRU < m_nMaxMRU); 83 | 84 | if(m_pRecentStatList[iMRU]) 85 | { 86 | delete[] (UINT_PTR*)m_pRecentStatList[iMRU]; 87 | m_pRecentStatList[iMRU] = 0; 88 | } 89 | } 90 | 91 | BOOL CRecentStatList::IsOK(UINT nIndex) 92 | { 93 | //to prevent that program not work on 64bit 94 | //it maybe a little buggy? 95 | #ifdef _WIN64 96 | STATEDATA* pSD; 97 | if (nIndex != -1) 98 | { 99 | pSD = (STATEDATA*)m_pRecentStatList[nIndex]; 100 | return pSD && (pSD->nSize == sizeof(STATEDATA)); 101 | } 102 | else 103 | return 0; 104 | #else 105 | STATEDATA* pSD = (STATEDATA*)m_pRecentStatList[nIndex]; 106 | return (nIndex != -1) && pSD && (pSD->nSize == sizeof(STATEDATA)); 107 | #endif 108 | } 109 | 110 | void CRecentStatList::SetOK(UINT nIndex) 111 | { 112 | if(!(STATEDATA*)m_pRecentStatList[nIndex]) 113 | m_pRecentStatList[nIndex] = (UINT_PTR)new STATEDATA; 114 | STATEDATA* pSd = (STATEDATA*)m_pRecentStatList[nIndex]; 115 | pSd->nSize=sizeof(STATEDATA); 116 | } 117 | 118 | STATEDATA* CRecentStatList::GetStateData(UINT nIndex) 119 | { 120 | return nIndex!=-1? 121 | (STATEDATA*)m_pRecentStatList[nIndex]:NULL; 122 | } 123 | -------------------------------------------------------------------------------- /RecentStatList.h: -------------------------------------------------------------------------------- 1 | #ifndef CT2_RECENTSTATLIST_H 2 | #define CT2_RECENTSTATLIST_H 3 | 4 | #pragma once 5 | 6 | class CRecentStatList 7 | { 8 | public: 9 | CRecentStatList(UINT nMaxMRU); 10 | virtual ~CRecentStatList(void); 11 | 12 | void ReadList(void); 13 | void WriteList(void); 14 | 15 | UINT_PTR* m_pRecentStatList; 16 | UINT m_nMaxMRU; 17 | CString m_strSectionName; 18 | CString m_strEntryFormat; 19 | void Remove(UINT nIndex); 20 | BOOL IsOK(UINT nIndex); 21 | void SetOK(UINT nIndex); 22 | STATEDATA* GetStateData(UINT nIndex); 23 | }; 24 | 25 | #endif // CT2_RECENTSTATLIST_H -------------------------------------------------------------------------------- /RelativeDlg.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/RelativeDlg.cpp -------------------------------------------------------------------------------- /RelativeDlg.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/RelativeDlg.h -------------------------------------------------------------------------------- /SDatInfo.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/SDatInfo.cpp -------------------------------------------------------------------------------- /SDatInfo.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/SDatInfo.h -------------------------------------------------------------------------------- /SubFileInfo.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/SubFileInfo.cpp -------------------------------------------------------------------------------- /SubFileInfo.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/SubFileInfo.h -------------------------------------------------------------------------------- /TextFileDialog.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/TextFileDialog.cpp -------------------------------------------------------------------------------- /TextFileDialog.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/TextFileDialog.h -------------------------------------------------------------------------------- /ToolBarEx.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/ToolBarEx.cpp -------------------------------------------------------------------------------- /ToolBarEx.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | 4 | // CToolBarEx 5 | 6 | class CToolBarEx : public CToolBar 7 | { 8 | DECLARE_DYNAMIC(CToolBarEx) 9 | 10 | public: 11 | CToolBarEx(); 12 | virtual ~CToolBarEx(); 13 | 14 | protected: 15 | DECLARE_MESSAGE_MAP() 16 | public: 17 | afx_msg void OnTbnGetInfoTip(NMHDR *pNMHDR, LRESULT *pResult); 18 | }; 19 | 20 | 21 | -------------------------------------------------------------------------------- /ToolsDlg.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/ToolsDlg.cpp -------------------------------------------------------------------------------- /ToolsDlg.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/ToolsDlg.h -------------------------------------------------------------------------------- /UtilityFileInfo.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/UtilityFileInfo.cpp -------------------------------------------------------------------------------- /UtilityFileInfo.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/UtilityFileInfo.h -------------------------------------------------------------------------------- /WhatsNew.txt: -------------------------------------------------------------------------------- 1 | 本软件没写帮助文件,此更新信息中包含部分功能的说明,建议细看 2 | ------------2007.09.12------------ 3 | 1.添加NARC、NTFP、CHAR、PLT、NTFT、NBFC、NBFP、NBFS文件格式支持 4 | NBFC(手动选择GBA4BPP/GBA8BPP)、NBFP、NBFS请按顺序加载 5 | 上面的图形格式由于没用文件头所以无法设置各种参数 6 | 可能需要用户自行调整GBA4BPP/GBA8BPP、宽高 7 | SDAT文件格式得到修正(还是不完整,不知道怎么列目录) 8 | PS:谢谢毛毛(yeyezai)提供部分文件格式资料 9 | 10 | ------------2007.09.02------------ 11 | 1.将CT2的强制中断键Ctrl改为Pause/Break键(翻页键上面那个) 12 | 以防止和Ctrl组合快捷键冲突 13 | (ProteinPig) 14 | 15 | 2.修正无法导出导入文件 16 | 17 | 3.可拖放导入调色板 18 | (dclixun) 19 | 20 | 4.修正创建DSROM的缺陷 21 | 22 | 5.可导入导出Utility.bin/*.pac文件 23 | PAC文件在游戏王DS里面发现,不知道是否是标准文件 24 | 25 | 6.修正导入GBA4BPP MAP图片不能的BUG 26 | 27 | 7.修正属性面板改变大小为边框位置 28 | 29 | 8.修正Banner.bin在修改后未更新Crc16的漏洞 30 | (DSROM所有CRC检查都在[NDS文件系统信息]的编辑菜单里面) 31 | 32 | 9.十六进制模式可对选区进行CRC16计算 33 | 34 | 10.工具菜单添加DS固件用户信息编辑器 35 | 36 | 11.[NDS文件系统信息]文件菜单添加瘦身功能 37 | 大小设置为文件头Application_End_Offset 38 | 39 | ------------2007.08.11------------ 40 | 1.修改CT2的界面 41 | 添加了一个资源面板 42 | 改变了修改属性面板 43 | 下面有较为详细的提示信息,类似VS的属性面板 44 | 45 | 2.修正十六进制编辑器下导入系统编码文本的BUG 46 | 47 | 3.修正映射模式下的处理地址的问题 48 | 49 | ------------2007.07.20------------ 50 | 1.添加对.PAC、.SDAT、UTILITY.BIN的文件系统支持 51 | 单独打开时选择工具菜单的 某扩展名 文件信息 52 | NDS的文件系统在编辑以及右键菜单选择 某扩展名 文件信息 53 | 54 | 2.文本搜索指针添加相对搜索指针 55 | 如NDS的 0904-游戏王 文本 bin.pac中的dlg_text_j.bin/dlg_indx_j.bin: 56 | 002CEE04,84,この@3モンスター@0を@3召喚@0するには@3生け贄@0が@21体@0必要です。@3召喚@0しますか? 57 | 002CEE5C,84,この@3モンスター@0を@3召喚@0するには@3生け贄@0が@2%d体@0必要です。@3召喚@0しますか? 58 | 002CEEB4,40,@21体目@0の@3生け贄@0を選んでください。 59 | 此文本的起始基址是002CEE00,所以在基址填写002CEE00 60 | 勾选文本面板的相对指针按钮 61 | 这样搜索到的指针将减去基址002CEE00 62 | 002CEE04-002CEE00=04 63 | 002CEE5C-002CEE00=5C 64 | 002CEEB4-002CEE00=B4 65 | 指针范围002B3600-(+2384)搜索差值作为指针 66 | 导入时也要勾选相对指针,这样更新指针时也会更新为差值 67 | (yeyezai) 68 | 69 | ------------2007.07.15------------ 70 | 1.文本模式支持导入系统编码的文本+修正导入功能 71 | 系统编码的默认结束字符是00 72 | 可以在码表重新定义,如FF、1234: 73 | >FF,0 74 | >1234,0 75 | 只要长度为0就被认为是结束控制符 76 | 导入文本采用自动在码表尾部追加新生成的码表时 77 | 在码表文件中必须自少定义一个起始编码,如: 78 | 00=A 79 | 这样在自动生成编码时就会对码表最后定义的一个编码00递增 80 | 81 | ------------2007.07.06------------ 82 | 1.修正NDS文件列表提示“参数错误”的BUG 83 | 84 | ------------2007.05.18------------ 85 | 1.修正检查Secure Area的CRC值错误 86 | 这样在修改Arm9指令后再重新计算CRC值时就不会出错了 87 | 88 | ------------2007.05.06------------ 89 | 1.导出NTFR字库中的码表(如果存在的话) 90 | 91 | 2.按码表生成NFTR字库的CMAP结构 92 | CMAP结构类型似乎有多种 93 | 这里只生成带文字编码的结构 94 | 95 | 3.金手指搜索等其他细微修正 96 | 97 | ------------2007.05.02------------ 98 | 1.新的导出文本格式 99 | 导出文本新格式转义定义,转义控制支持 \n(Windows换行)、\t(Tab) 100 | 定义都在码表文件中实现,由于使用的字符可以让用户自己定义 101 | 这样用户就可以导出自己需要的样式了 102 | CT2同时可以对已有的 地址,大小,文本格式转换到新的格式 103 | 在文本模式载入文本然后导出为新的文本格式就可以了 104 | 不过这个格式里面太多花样,有人看起来可能会花眼@_@ 105 | <[####]=text 106 | 如: 107 | <[0A]=\n 108 | 将“[0A]”导出为“回车” 109 | 110 | 又如: 111 | <[0101]=\n::::::::::换页::::::::::\n 112 | 将“[0B]”导出为 113 | <--换行 114 | ::::::::::换页:::::::::: 115 | <--换行 116 | 117 | B=原文分隔线、C=译文分隔线、E=一段文本结束线 118 | 、<、>=、<= 169 | 锁定功能为每250毫秒更新一次 170 | 由于不是模拟器内部功能所以不可能一直锁定 171 | 172 | 搜索列表操作: 173 | 双击则添加到锁定窗口 174 | 175 | 锁定操作: 176 | 去掉列表中锁定项前面的勾为禁用 177 | 双击锁定项修改锁定值 178 | 按住Ctrl键双击删除锁定项 179 | 右击锁定窗口手动添加EC码 180 | 181 | 描述说明: 182 | 锁定项的注释可以单击并等待一下进行编辑 183 | 如果多个项目的描述相同的话将被合并成一个 184 | 如: 185 | Cheats1 00:00 186 | Cheats1 11:11 187 | Cheats1 22:22 188 | 将变成 189 | [Cheats1] 190 | ON=00,00;11,11;22,22 191 | (Angel_Poon) 192 | 193 | ------------2007.04.26------------ 194 | 1.支持载入*.NCLR格式的调色板 195 | (Emotexx) 196 | 197 | 2.对某些Ndsrom打开时如果CT2无法识别 198 | 就按住SHIFT键不放打开ROM 199 | 将强制作为Ndsrom处理 200 | 201 | 3.可修改/应用NFTR文件的宽高属性 202 | (只修改属性,没修改字库本身的象素数据) 203 | 204 | 4.增强在系统代码页中使用自定义控制符时 205 | 可以对某些系统编码进行重新定义 206 | 如SJIS中的889F本来=亜 207 | 可以通过在码表定义“889F=码”来改正 208 | (Emotexx) 209 | 210 | 5.修正修改游戏信息时将\n改成了\r\n的BUG 211 | (WQSG) 212 | 213 | 6.UTF-8文本搜索修正 214 | 215 | -----------------2007.03.19------------ 216 | 1.添加对MAP文件的单独打开方式(.nscr+.ncgr+.nclr) 217 | (Emotexx) 218 | 219 | 2.其他细微调整 220 | 221 | ------------2007.02.21------------ 222 | 1.修正第一次打开NDSROM时错误退出的BUG 223 | (DNA) 224 | 225 | 2.文本模式添加全选 226 | 修正控制符导出问题 227 | (Emotexx) 228 | 229 | 3.修正文本模式搜索指针时列表不能刷新的BUG 230 | 231 | 4.外部工具(菜单)同时提供工具栏支持 232 | (Emotexx) 233 | 234 | ------------2007.02.20------------ 235 | 1.外部工具去掉了只能添加exe文件的限制 236 | 这样用户也可以加入其他文件了 237 | 如做笔记的readme.txt之类的文件 238 | 如果CT2关联了rom的扩展名,也可以加入rom文件 239 | 240 | ------------2007.02.19------------ 241 | 1.修正显示文件头标志翻转的BUG,可以清楚看出来了 242 | (Emotexx) 243 | 244 | 2.修正显示长结构头部退出的BUG 245 | 如新牧场物语的font12x12.NFTR有0x29个头部结构 246 | 247 | 3.修正批量搜索文本时在选择目录时取消就卡住的BUG 248 | (Emotexx) 249 | 250 | 4.Nds文件再添加文件描述项,里面有对汉化有帮助的提示信息 251 | 如CGLP、CWDH字库的格式信息读取 252 | 文件名|文件号|偏移地址|大小|子文件头信息|文件描述 253 | 254 | 5.工具菜单添加执行外部工具软件的功能 255 | (Emotexx) 256 | 257 | 6.十六进制编辑器搜索可搜索用户码表对应的文本 258 | (Emotexx) 259 | 260 | 7.修正打开大文件托慢的BUG 261 | (Emotexx) 262 | 263 | 8.修正搜索文本失败的BUG 264 | (Emotexx) 265 | 266 | 9.文本模式的结束地址如果开始输入“+”号 267 | 则结束地址为起始地址+结束地址的数值(十进制) 268 | 方便使用长度值进行搜索,而非绝对的结束地址 269 | PS:CT2里面的地址都使用十六进制、大小使用十进制 270 | (Emotexx) 271 | 272 | 10.按住Ctrl键可以中断某些带有进度的操作 273 | 用以防止卡住了 274 | 275 | ------------2007.02.18------------ 276 | 1.文本搜索模式导入文本时加入强制导入新文本地址的功能 277 | 勾选时不尝试导入旧有的地址,而直接新地址 278 | 不选时先导入旧有地址,如果装不下才导入新地址 279 | 280 | 2.加入只读检查修正只读模式的写入BUG 281 | 282 | 3.添加声音播放器播放.Sdat 283 | 初步的东西 284 | 测试过哆啦A梦2006DS可以播放*.STRM 285 | 但是有杂音,应该是设置问题 286 | 单声道、8Bit、11.025kHz播放PLAYER_SE_0.STRM 287 | 发现设置成4bit居然没声音,初始化失败 288 | 还不太了解.sdat的格式 289 | 290 | ------------2007.02.17------------ 291 | 1.Nds文件信息系统添加导出特定文件 292 | 文件包含特定的关键字 293 | 294 | 2.Nds文件信息系统添加修改文件结构大小(编辑菜单) 295 | 以及跳转到结构(定位菜单)的功能 296 | 用来扩容等 297 | 298 | 3.文本搜索模式添加目录批量搜索文本 299 | 注意这个功能是要同时查找指针的 300 | 所以基址这个要注意选择正确的值或者0 301 | 302 | ------------2007.02.16------------ 303 | 1.修正搜索文本时处理控制符的BUG 304 | (yeyezai) 305 | 306 | 2.去掉原本应该去掉的调试代码 307 | (十六进制模式不能输入1-6) 308 | 309 | 3.添加导出汇编代码功能 310 | 311 | 4.汇编模式增加代码跟随(Alt+右/左) 312 | 313 | 5.十六进制编辑器 314 | 单击Hex面板的系统编码错误 315 | 也可以单击标头右侧的编码及字体提示 316 | (yeyezai) 317 | 318 | 6.Tile模式新增及原有快捷键说明 319 | +: 放大 25% 320 | -: 缩小 25% 321 | <: 上一个调色板 322 | >: 下一个调色板 323 | 1: Tile模式 324 | 2: ObjH模式(1234序列) 325 | 3: ObjV模式(1324序列) 326 | 4: Map模式 327 | 8: 8x8Tile模式 328 | 9: 16x16宽高 329 | 其他请查看对象的状态栏及其浮动提示(移动到对象上等待一会) 330 | 331 | ------------2007.02.14------------ 332 | 1.增强NDS文件信息系统功能 333 | 334 | 2.窗口菜单添加激活各设置窗口的功能,方便键盘操作 335 | 快捷键为Ctrl+数字键 336 | 337 | 3.修正打开关联文件失败的BUG 338 | (Emotexx) 339 | 340 | 4.映射模式也可以正常分解、创建Nds文件了 341 | (Emotexx) 342 | 343 | 5.地址同步设置改为所以同步或独立 344 | 345 | ------------2007.02.09------------ 346 | 1.修正导入文件头文件的BUG 347 | 如:ndsheader.bin的大小固定为512Kb 348 | banner.bin的大小固定为2112Bytes 349 | arm9.bin处理文件尾是否为0xDEC00621 350 | 351 | 2.可以对.sdat文件进行浏览声音文件列表(可能有缺陷) 352 | Nds文件信息系统->.sdat文件->右键选择.SDAT声音信息 353 | 或者工具->.SDAT声音信息 354 | 两个是不同的,第一个是相对NdsRom里面的.Sdat文件 355 | 第二个是相对.Sdat文件本身 356 | 357 | 3.Nds文件信息系统菜单加入查找文件 358 | 359 | ------------2007.02.07------------ 360 | 1.修正导入导出ARM9.bin的大小BUG 361 | 文件尾检查是否为0xDEC00621 362 | 是则文件大小加0x10 363 | (WQSG) 364 | 365 | 2.十六进制模式使用UTF-8编码在Ansii状态可输入文本 366 | 367 | 3.保存NdsRom时会在banner.bin文件中的英文信息尾部 368 | 追加字符串“\nPowered by CrystalTile” 369 | 370 | ------------2007.02.06------------ 371 | CT2文本搜索功能说明 372 | 1.要搜索文本当然就先说明下码表的定义了 373 | 码表支持两种编码定义:单字节与双字节 374 | 单字节: 375 | 01=码 376 | 02=表 377 | 双字节: 378 | 0101=码 379 | 0102=表 380 | 控制符定义: 381 | 控制符的关键字是“>”,后跟“,”然后写控制符编码(十六进制) 382 | 然后再跟“,”,之后写控制符的长度值(十进制) 383 | 控制符有三种情况:单字节、双字节和不定字节 384 | 单字节: 385 | >0D,1 386 | 搜索程序发现0D时就将其当作控制符处理输出:[0D] 387 | 双字节: 388 | >0D0A,2 389 | 搜索程序发现0D0A时就将其当作控制符处理输出:[0D0A] 390 | 不定字节(单字节控制): 391 | >EF,4 392 | 搜索程序发现EF时就将其当作控制符处理输出指定长度的字节:[EFn1n2n3] 393 | 从输出可以发现长度字段的长度是同时计算控制符再内的总长度 394 | 不定字节(双字节控制): 395 | >EFB1,4 396 | 搜索程序发现EFB1时就将其当作控制符处理输出指定长度的字节:[EFB1n2n3] 397 | 结束控制符: 398 | 当控制符长度为0时视为结束控制符 399 | 如:>00,0(遇见00就结束)、>FFFF,0(遇见FFFF就结束) 400 | PS:不定控制符的控制字节只能是单或双字节,尾随的长度则无此限制 401 | 402 | 2.搜索文本相关菜单解说 403 | 【选择码表】 404 | 制作好码表后就可以载入CT2中了 405 | 载入方法为在【码表】菜单中选择【选择码表】菜单项 406 | 在打开的窗口中选择您要使用的码表文件(.txt/.tbl) 407 | PS:要选择正确的编码,否则无法正确识别码表的内容 408 | 409 | 【启用码表】 410 | 勾选【启用码表】时则使用用户所选择的码表来导文本 411 | 未选时则使用系统编码 412 | 413 | 【启用自定义控制符】 414 | 此项功能给系统编码使用 415 | 就是当在系统编码中游戏同时加入了自己特定的控制符时 416 | 可以作出正确识别 417 | 418 | 【翻转编码】 419 | 翻转编码:顾名思义就是将编码翻转了只能在双字节时有效(单字节翻不了) 420 | 如“0102”翻转后为“0201” 421 | 翻转操作对用户码表、系统码表都有效 422 | 423 | 【编码】 424 | 此项菜单的项目为您系统内的编码 425 | 项目数量不定(视您系统支持的2-4字节编码) 426 | 427 | 【统计】 428 | 此功能对搜索到的文本进行字数统计,用以制作码表 429 | 输出为在文本中使用过的字符,每个一行 430 | 用户只要在前面加入自己的编码部分(nn=、nnnn=)就可以了 431 | 432 | 3.文本搜索选项面板 433 | 起始地址:输入待搜索文本的起始地址 如:00000000 434 | 结束地址:输入待搜索文本的结束地址 如:0000FFFF 435 | 上述定义说明要搜索地址范围为00000000-0000FFFF中的文本 436 | 基址:此文本框供搜索文本指针时使用 437 | 因为在GBA里面ROM中的指针都是大于08000000的,这时就要使用到它了 438 | 如你搜索到的文本为 439 | 00001234,04,游戏文本 440 | 则它的指针应该就是08001234了 441 | 当然这里指的是绝对的ROM映射地址 442 | 如果文本使用的是用公式计算的相对地址时,则无法搜索到指针 443 | 444 | 最短长度:搜索到的文本的最短长度必须是用户指定的长度 445 | 如02,如果文本的长度小于2时文本将会被忽略 446 | 最大长度:搜索到的文本的最大长度必须是用户指定的长度 447 | 如100,如果文本的长度大于100时文本将会被忽略 448 | 二字节对其:搜索到的文本地址必须是二字节对其 449 | 如00000000、08001234等情况,而00000001这类地址则被忽略 450 | 因为有些游戏的文本其时就是这样对其的文本 451 | 双字节:文本中必须包含双字节编码的文本 452 | 如果文本中不存在双字节编码的文本则被忽略 453 | 标准文本:搜索到的文本必须是按结束控制符正常结束的文本 454 | 如有码表01=文、02=本、03=搜、04=索、结束控制符00 455 | 待搜索BIN文件:01 02 03 04 00 12 34 56 78 456 | 输出可以正确的导出01 02 03 04 00对应的文本“文本搜索” 457 | 而如果待搜索BIN文件是:01 02 03 FF 04 00 12 34 56 458 | 虽然01 02 03对应“文本搜”但是后面跟着未知的字节 459 | 此时如果用户勾选了【标准文本】则这段文本将被忽略 460 | 因为它没有按结束控制符正常结束 461 | 为勾选时文本还是会被输出的 462 | 处理为:遇见未知字节时中断搜索,再输出文本 463 | 上述功能其时是对文本进行筛选,尽量去掉无用的垃圾文本 464 | 465 | 新文本地址:这个文本框给存在指针的文本时使用 466 | 用以处理在导入文本时翻译文本的长度大于原来文本的长度时 467 | 由于原来的空间已经无法放下翻译好的文本 468 | 这时就要指定新的存储空间了 469 | 之所以只能给存在指针的文本使用 470 | 是因为重新指定文本的位置后需要同时更新它所对应的指针 471 | 否则游戏程序无法发现新的文本位置 472 | 此地址只要指定开始地址 473 | 发现需要使用新地址空间时会自动累加 474 | 如新文本地址为00001234 475 | 如果此地址导入新长度文本后 476 | 地址加文本长度如08(00001234+08=0000123C) 477 | 导入程序在0000123C加入文本结束控制符(如00) 478 | 0000123C+结束控制符长度(如1)=0000123D 479 | 新文本地址如此不断累加 480 | 481 | 起始指针、结束指针:类似搜索文本的起始地址、结束地址 482 | 只不过这里是用来搜索对应文本的指针的 483 | 所以要使用此功能必须先搜索到文本(后面将讲到) 484 | 然后根据文本在指定的搜索指针范围中查找指针 485 | PS:这里就要用到前面说的【基址】文本框了 486 | 如果不存在基址的问题填0就可以了 487 | 488 | 搜索脚本:点下按钮就可以了^_^ 489 | 490 | ------------2007.01.25------------ 491 | 1.修正其他编码转换到Unicode (UTF-8)失败的BUG 492 | 493 | ------------2007.01.19------------ 494 | 1.Shift-JIS编码支持半角字符 495 | 496 | ------------2007.01.18------------ 497 | 1.修正添加Unicode UTF-8时 498 | 导致无法显示Unicode文本的BUG 499 | (sin_sin) 500 | 501 | 2.系统编码添加支持用户自定义控制符的功能 502 | 如某些游戏虽然使用系统编码 503 | 但同时又添加了游戏自己的控制符 504 | (yeyezai) 505 | 506 | ------------2007.01.09------------ 507 | 1.系统编码也可以翻转了 508 | 509 | 2.增强Hex模式中收藏夹的功能 510 | 511 | 3.修正Hex模式修正Bug时产生的新Bug b 512 | 无法显示Ascii码的问题 513 | 514 | 4.Nds文件系统中可以导入大于原文件大小的文件 515 | 这时由用户指定新的文件位置 516 | 而旧的文件空间将放弃使用 517 | 用户可以考虑放其他的文件 518 | 或重新构建ROM来去除这些已无用的文件空间 519 | 520 | ------------2007.01.08------------ 521 | 1.添加UTF-8编码支持 522 | UTF-8似乎是3、4字节不固定大小的编码 523 | 不知道怎么区分? 524 | 现在都是以3字节来处理,所以无法查看4字节编码 525 | (yeyezai) 526 | 527 | 2.修正导入图片无效的BUG 528 | 将想到的情况都考虑了 529 | 实在不知道Madcell哪里RP 530 | 你在试试吧 531 | (Madcell) 532 | 533 | ------------2007.01.05------------ 534 | 1.书签改为类似IE收藏夹的样式 535 | 536 | 2.修正Thumb汇编指令的识别错误 537 | 538 | 3.面板可设置为浮动 539 | 540 | ------------2007.01.03------------ 541 | 1.在Tile视图添加插入文本的功能 542 | 类似CT1的插入方式 543 | (Madcell) 544 | 545 | 2.汇编指令修改开始添加指令格式帮助(完整) 546 | 如键入adc提示adc rd,rn,op2等指令书写格式 547 | 修改暂时只能识别Thumb指令 548 | 549 | ------------2007.01.02------------ 550 | 1.修正滚动条漂移不定的BUG 551 | (Emotexx) 552 | 553 | 2.汇编指令修改开始添加指令格式帮助(初步) 554 | 如键入adc提示adc rd,rn,op2等指令书写格式 555 | 556 | 3.修正导入图片无效的BUG 557 | (Madcell) 558 | 559 | ------------2006.11.26------------ 560 | 1.修正复制位图的错误 561 | (Madcell) 562 | 563 | 2.编辑汇编指令时添加高亮提示 564 | 还是只支持THUMB指令(暂时) 565 | 566 | ------------2006.11.19------------ 567 | 1.添加NDS的反汇编功能 568 | 可以对Thumb代码进行指令编辑 569 | Arm指令编辑功能暂时没加 570 | 太多指令了 571 | 572 | 2.代码的细节修改 573 | 574 | ------------2006.10.16------------ 575 | 1.修正无法复制Tile的错误 576 | 577 | 2.提供默认设置选项,保存用户常使用的风格 578 | 579 | 3.改善十六进制编辑器的定位方式 580 | 581 | ------------2006.10.14------------ 582 | 1.导入导出码表合并 583 | 无需再选择导入或导出码表,改为选择码表 584 | 导入变成所见机所得了 585 | 586 | 2.可以识别Nds的“.nclr”调色板文件 587 | 并且可以载入到CrystalTile2中 588 | 589 | 3.可以识别Nds的“.ncgr”Tile文件 590 | 并且可以填写到地址框 591 | 592 | 4.可以识别Nds的“.nscr”Map文件 593 | 并且可以填写到O/M框 594 | 595 | 5.2-4的统合 596 | Nds文件信息系统增加对“.nscr”的解析功能 597 | 功能是分析“.nscr、.nscgr、.nclr”文件 598 | 然后完成一张完整的Map图片 599 | 必须三个文件都存在才能使用此功能 600 | 对颜色格式的识别可能出现错误 601 | 这时请自己选择GBA 4BPP或者GBA 8BPP 602 | [img]http://www.angeleden.net/Crystal/Pic/ff3.jpg[/img] 603 | 604 | 6.对可识别文件提供直观的图标 605 | 对可疑文件提供红色的惊叹号图标 606 | 以方便用户浏览文件 607 | 608 | ------------2006.10.12------------ 609 | 1.缩放以及地址输入添加历史列表 610 | (Madcell) 611 | 612 | 2.增加打开大文件(XGb的镜像)的功能 613 | 映射块进步大小256MBytes,块大小512MBytes 614 | 就是地址按256MBytes更新映射块 615 | 最大寻址32Bits(4GBytes) 616 | OZ磨了我很久的了=v=||| 617 | 但是不知道有没有BUG,自己测试囧 618 | 注意备份,不知道会不会RP的 619 | 还要看看数据显示有没有对应相应地址的数据 620 | (Oz01) 621 | 622 | 3.十六进制编辑器添加导入文本的功能 623 | (Madcell) 624 | 625 | ------------2006.10.09------------ 626 | 1.十六进制编辑器在显示单字节码表时 627 | 文本不会在挤在一块了 628 | 629 | ------------2006.10.07------------ 630 | 1.去掉工具栏的调色板按钮 631 | 存在点击程序会挂起的BUG 632 | 633 | 2.再调整界面 634 | 635 | ------------2006.10.04------------ 636 | 1.调整了下界面 637 | 用户可以发贴,看看哪个界面好 638 | 639 | 2.修正部分BUG(对齐模式的绘图错误等等) 640 | (Madcell) 641 | 642 | ------------2006.10.01------------ 643 | 1.修正保存P.S.的Act调色板的错误 644 | 645 | 2.<、> 快速切换调色板号 646 | 647 | ------------2006.09.29------------ 648 | 1.激活原本禁用的Obj字库特效 649 | 在ObjH、ObjV下也可以翻转字库了 650 | 651 | 2.增加NGP 2bpp、N64 4bpp(MD 4bpp)格式 652 | 653 | 3.改进十六进制编辑器样式 654 | (Emotexx) 655 | 656 | 4.视图菜单添加7种底纹选择 657 | 默认是偶的威猫(>_<) 658 | 659 | 5.关于32位位图的导入问题 660 | 只有导出图片时才保存了图片里面的Alpha通道 661 | 导入时可以完全还原 662 | 直接Ctrl+C复制到剪贴板将是24位的 663 | 试过往剪贴板里面放32位位图但失败了(T_T) 664 | 就是说放到剪贴板里面的图片是没有Alpha通道的 665 | Tile1:原图 666 | Tile2:复制粘贴,没了Alpha,边缘的模糊效果没了 667 | Tile3:导出导入,由于保留了Aplha,图片得到完全还原 668 | [img]http://www.angeleden.net/crystal/pic/alpha.bmp[/img] 669 | 670 | 5.Ctrl+Shift+左右:偏移一列 671 | Ctrl+Shift+上下:偏移一行 672 | Ctrl+左右:偏移相关跳转对应的字节 673 | 674 | ------------2006.09.27------------ 675 | 1.16、32位可以处理alpha通道了 676 | 当导出、导入等处理图片时透明处理的底色为 677 | 您所选择的背景色(鼠标右键点击调色板颜色) 678 | 如导出32位alpha通道的图片,选择背景色为白色时 679 | 导出的图片底色就是白色了 680 | 背景色选择的好图片的还原能力也会更好 681 | 建议选择一种唯一的颜色做底色 682 | 就是除了底色外其他地方都没用到的颜色 683 | 这样在去底时不会去掉有用的颜色 684 | (感谢Elffinal教会我处理alpha通道的公式(^_^)v) 685 | 686 | 2.添加P.S.所使用的常用调色板,总共7种 687 | (Madcell) 688 | 689 | 3.Ctrl+Shift+上下:偏移一行Tile象数 690 | (Madcell) 691 | 692 | 4.强化书签的记忆功能 693 | 支持保存大部分的状态信息 694 | 如Tile格式、大小等等 695 | 当切换书签时自动恢复对应书签的状态 696 | (Madcell) 697 | 698 | ------------2006.09.25------------ 699 | 1.十六进制视图的查找功能添加 700 | 字符搜索功能(不只是搜索十六进制值) 701 | 搜索字符根据所选择的编码自动转换 702 | (Emotexx) 703 | 704 | 2.标准工具栏去掉无效按钮消隐的特性 705 | (Madcell) 706 | 707 | 3.当打开nds文件时在Tile/十六进制视图将 708 | 在状态栏动态显示当前位置所对应的文件 709 | (Emotexx) 710 | 711 | 4.双击Nds文件可以自动填写文本搜索视图的 712 | 文本搜索起始与结束地址 713 | 714 | 5.Tile视图添加去底显示的功能,就是透明显示 715 | (Madcell) 716 | 717 | 6.对某些命令添加了快捷键 718 | 淡化网格显示,使它不至于太碍眼 719 | 720 | 7.提供三种默认调色板 721 | 调色板一是TLP里面的那个(醒目的对比色) 722 | 调色板二是一些关键颜色(合适查看有特效的字库) 723 | 256阶灰度色(建议在查看八位图片时使用) 724 | 725 | ------------2006.09.22------------ 726 | 1.再添加两种格式 727 | 1.1 就是24和32位的位图格式 728 | 对于32位的处理Flags位我是屏蔽的 729 | 主要是不知道怎么处理 730 | 好像某些地方用作透明色(PS?) 731 | 1.2 注意!在处理16、24、32位位图时 732 | 如果是从小于等于8位格式切换 733 | 过来时要重新选择文本的各种颜色 734 | 不然由于在低位色选择的索引色 735 | 用作16、24、32位位图的颜色时, 736 | 由于颜色值小,如索引色的01 737 | 用作32位颜色就会接近黑色00000001 738 | 所以请重新选择一个醒目的颜色 739 | 740 | 2.对于Tile的行列可以手动调整 741 | 快捷键Shift+左右(列)/上下(行) 742 | (Madcell) 743 | 744 | 3.修正GBA3XBPP、CT0XBPP不能显示的BUG 745 | 746 | 4.工具菜单添加文本内码转换 747 | 如GB2312转换到BIG5、Shift-JIS等 748 | 749 | 5.某些菜单项添加了工具按钮 750 | 751 | ------------2006.09.20------------ 752 | 1.修正同时打开两个文档时错误退出的低级BUG 753 | 754 | 2.某些原本不支持Obj模式的Tile格式现在已经支持 755 | 756 | 3.添加文件二进制比较功能 757 | 758 | 4.再次对代码进行优化 759 | 760 | 5.对于压缩Lz77数据是提示Agbcomp.exe位置的问题 761 | 本软件内部包含了Agbcomp.exe执行文件 762 | 763 | ------------2006.09.18------------ 764 | 1.对系统的部分字符集进行支持 765 | 码表菜单的编码子菜单里面 766 | 如:简/繁体、Unicode、Shift-JIS等 767 | 768 | 2.添加文本搜索视图 769 | 2.1 码表格式 770 | >控制符,控制符长度 771 | 如数据为:00 01 02 03 04 05 06 07 772 | 定义控制符>00,4 773 | 输出为:[00 01 02 03] 774 | 就是发现00后导出4字节数据 775 | 等控制符长度为0时作为结束控制符处理 776 | 如:>03,0 777 | 输出在遇见03时就停止 778 | 2.2 再次修改搜索代码,搜索速度更快了 779 | 2.3 整理搜索到的文本项速度更快 780 | 不会拖慢的过于严重 781 | 但是处理大量项目时还是会稍微慢些 782 | 783 | 3.添加书签功能,书签大小固定为10个了 784 | 快捷键为Ctrl+1-0 785 | 786 | 4.对字库进行扩展放大/转换格式(工具菜单) 787 | 4.1 如对10x12 1Bpp的字库扩展到12x12 Gba 4Bpp的字库 788 | 要同时打开两个文档在Tile模式进行扩展 789 | 将在扩展菜单所选择文档的字库 790 | 以光标Tile为起点并按对齐/缩放方式 791 | 复制到当前文档 792 | 4.2 教大家工具菜单【扩展】功能的一种用法 793 | Nds最新的口袋妖怪钻石字库制作法(16x16 NGP ObjH) 794 | 字库是带双底色的 795 | 就是围着文字的底色和整个Tile也有底色 796 | 实现就是在一个临时文件写 797 | 围着文字为底色的10x10字库 798 | 然后用那个扩展功能扩展到 799 | 口袋妖怪原本的16x16字库 800 | 这样就保留了围着文字的底色了 801 | 为了得到好的效果还要选择 802 | 居中方式的【左中】 803 | 例图:第一行是制作的效果,第二行是原本的效果。 804 | [img]http://www.angeleden.net/Crystal/Pic/pm.jpg[/img] 805 | 806 | 5.添加了Tile的9种对齐方式以及3种缩放方式 807 | 808 | 6.除了Tim/汇编视图,CrystalTile原有的功能已还原 809 | 如导出十六进制数据、相对搜索、NDS文件信息等 810 | 811 | 7.十六进制视图添加数据位设置 812 | 位信息显示在状态栏上 813 | 双击其中某位可以在0/1之间切换 814 | 位数为对齐方式的32/16Bits 815 | 816 | 8.双击十六进制的数据区可以对其作为颜色数据来修改 817 | 位数为对齐方式的32/16Bits 818 | 819 | 9.添加对Gba、Nds种MAP图片的支持 820 | 添加更多的Tile格式 821 | 822 | -----------------CT2最初版本 2006.08.23------------ 823 | 1.基于CrystalTile的代码重写 824 | 825 | 2.支持32bits的位图 826 | 827 | 3.导入导出位图直接支持剪贴板操作 828 | 829 | 4.优化速度 830 | 831 | 5.帮助直接放到状态栏的提示里面 832 | 833 | 6.同时支持Ansi与Unicode文本文件(自动识别) 834 | -------------------------------------------------------------------------------- /res/Bk1.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Bk1.bin -------------------------------------------------------------------------------- /res/Bk2.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Bk2.bin -------------------------------------------------------------------------------- /res/Bk3.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Bk3.bin -------------------------------------------------------------------------------- /res/Bk4.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Bk4.bin -------------------------------------------------------------------------------- /res/Bk5.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Bk5.bin -------------------------------------------------------------------------------- /res/Bk6.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Bk6.bin -------------------------------------------------------------------------------- /res/Bk7.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Bk7.bin -------------------------------------------------------------------------------- /res/CT2_AsmView.ctr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/CT2_AsmView.ctr -------------------------------------------------------------------------------- /res/CT2_EditorView.ctr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/CT2_EditorView.ctr -------------------------------------------------------------------------------- /res/CT2_HexView.ctr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/CT2_HexView.ctr -------------------------------------------------------------------------------- /res/CT2_ScriptView.ctr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/CT2_ScriptView.ctr -------------------------------------------------------------------------------- /res/CT2_TileView.ctr: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/CT2_TileView.ctr -------------------------------------------------------------------------------- /res/CrystalTile2.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/CrystalTile2.ico -------------------------------------------------------------------------------- /res/CrystalTile2.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 9 | 라이브러리 편집기; 주로 도트 저장소 생성, 보기, 편집 10 | 11 | 12 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /res/CrystalTile2.rc2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/CrystalTile2.rc2 -------------------------------------------------------------------------------- /res/CrystalTile2Doc.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/CrystalTile2Doc.ico -------------------------------------------------------------------------------- /res/DsEmuMenuRes.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/DsEmuMenuRes.bin -------------------------------------------------------------------------------- /res/NdsFsi.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/NdsFsi.bin -------------------------------------------------------------------------------- /res/NintendoLogo.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/NintendoLogo.bin -------------------------------------------------------------------------------- /res/Palette.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Palette.bin -------------------------------------------------------------------------------- /res/Palette2.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Palette2.bin -------------------------------------------------------------------------------- /res/Palette3.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Palette3.bin -------------------------------------------------------------------------------- /res/Palette4.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Palette4.bin -------------------------------------------------------------------------------- /res/Palette5.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Palette5.bin -------------------------------------------------------------------------------- /res/Palette6.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Palette6.bin -------------------------------------------------------------------------------- /res/Palette7.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Palette7.bin -------------------------------------------------------------------------------- /res/Toolbar.bmp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/Toolbar.bmp -------------------------------------------------------------------------------- /res/User_2022 - 바로 가기.lnk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/User_2022 - 바로 가기.lnk -------------------------------------------------------------------------------- /res/agbcomp.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/agbcomp.bin -------------------------------------------------------------------------------- /res/angellogo.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/res/angellogo.jpg -------------------------------------------------------------------------------- /resource.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/resource.h -------------------------------------------------------------------------------- /stdafx.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/stdafx.cpp -------------------------------------------------------------------------------- /stdafx.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Crisp2013/CrystalTile25/b485d9e38362f866adcb379b125c3c60fffcc4fc/stdafx.h --------------------------------------------------------------------------------