├── .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
--------------------------------------------------------------------------------