This commit is contained in:
mkwong98 2018-02-16 10:24:06 +08:00
parent 40738292fe
commit 4821a403be
12 changed files with 537 additions and 463 deletions

View file

@ -1,4 +1,7 @@
#include "condition.h"
#include "coreData.h"
#include "gameTile.h"
#include "main.h"
condition::condition()
{
@ -10,23 +13,77 @@ condition::~condition()
//dtor
}
bool condition::compareEqual(condition c){
bool condition::compareEqual(condition& c){
if(conditionType != c.conditionType) return false;
if(!id.compareEqual(c.id)) return false;
if(objCoordX != c.objCoordX) return false;
if(objCoordY != c.objCoordY) return false;
if(checkHFlip != c.checkHFlip) return false;
if(checkHFlip && (hFlip != c.hFlip)) return false;
if(checkVFlip != c.checkVFlip) return false;
if(checkVFlip && (vFlip != c.vFlip)) return false;
if(checkLayer != c.checkLayer) return false;
if(checkLayer && (layer != c.layer)) return false;
if(hFlip != c.hFlip) return false;
if(vFlip != c.vFlip) return false;
return true;
}
void condition::load(fstream& file){
string line;
string lineHdr;
string lineTail;
vector<string> tailStrs;
getline(file, line);
while(line != "<endCondition>"){
size_t found = line.find_first_of(">");
if(found!=string::npos){
lineHdr = line.substr(0, found + 1);
lineTail = line.substr(found + 1);
main::split(lineTail, ',', tailStrs);
if(lineHdr == "<tileReference>"){
id.load(file);
}
else if(lineHdr == "<objCoord>"){
objCoordX = atoi(tailStrs[0].c_str());
objCoordY = atoi(tailStrs[1].c_str());
}
else if(lineHdr == "<flip>"){
hFlip = (tailStrs[0] == "Y");
vFlip = (tailStrs[1] == "Y");
}
}
getline(file, line);
}
}
void condition::save(fstream& file){
file << "<condition>\n";
id.save(file);
file << "<objCoord>" << objCoordX << "," << objCoordY << "\n";
file << "<flip>" << (hFlip ? "Y" : "N") << "," << (vFlip ? "Y" : "N") << "\n";
file << "<endCondition>\n";
}
bool condition::isMatch(gameTile& owner, gameTile& conditionTile){
if(!conditionTile.id.compareEqual(id)) return false;
if(owner.objCoordX + (hFlip ? -objCoordX : objCoordX) != conditionTile.objCoordX) return false;
if(owner.objCoordY + (vFlip ? -objCoordY : objCoordY) != conditionTile.objCoordY) return false;
if(hFlip != (owner.hFlip == conditionTile.hFlip)) return false;
if(vFlip != (owner.vFlip == conditionTile.vFlip)) return false;
return true;
}
void condition::readLine(string s){
vector<string> tokens;
main::split(s, ',', tokens);
name = tokens[0];
conditionType = tokens[1];
objCoordX = atoi(tokens[2].c_str());
objCoordY = atoi(tokens[3].c_str());
id.readID(tokens[4]);
id.readPalette(tokens[5]);
}
string condition::writeLine(){
stringstream stream;
stream << name << "," << conditionType << "," << objCoordX << "," << objCoordY << "," << id.writeID() << "," << id.writePalette();
return stream.str();
}

View file

@ -19,16 +19,15 @@ class condition
int objCoordX;
int objCoordY;
bool checkHFlip;
bool hFlip;
bool checkVFlip;
bool vFlip;
bool checkLayer;
int layer;
bool compareEqual(condition c);
void readLine(string s);
string writeLine();
bool compareEqual(condition& c);
void load(fstream& file);
void save(fstream& file);
bool isMatch(gameTile& owner, gameTile& conditionTile);
protected:

View file

@ -28,6 +28,10 @@ coreData::~coreData()
delete(tiles.back());
tiles.pop_back();
}
while(conditions.size() > 0){
delete(conditions.back());
conditions.pop_back();
}
}
void coreData::initPath(string rPath, string pPath){
@ -49,32 +53,88 @@ void coreData::loadPackData(){
string line;
string lineHdr;
string lineTail;
string orgLine;
bool editorSection = false;
vector<string> conNames;
string conNameStr;
fs.open(hiresPath, fstream::in);
if(fs.is_open()){
while(getline(fs, line)){
size_t found = line.find_first_of(">");
if(found!=string::npos){
lineHdr = line.substr(0, found + 1);
lineTail = line.substr(found + 1);
if(lineHdr == "<scale>"){
scale = atoi(lineTail.c_str());
if(!editorSection){
orgLine = line;
conNames.clear();
if(line.substr(0, 1) == "["){
//is condition
size_t conTagPos = line.find_first_of("]");
if(conTagPos!=string::npos){
conNameStr = line.substr(1, conTagPos - 1);
main::split(conNameStr, '&', conNames);
line = line.substr(conTagPos + 1);
}
}
else if(lineHdr == "<img>" ){
addImage(lineTail);
size_t found = line.find_first_of(">");
if(found!=string::npos){
lineHdr = line.substr(0, found + 1);
lineTail = line.substr(found + 1);
if(lineHdr == "<ver>"){
ver.push_back(line);
}
else if(lineHdr == "<scale>"){
scale = atoi(lineTail.c_str());
}
else if(lineHdr == "<supportedRom>"){
supportedRom.push_back(line);
}
else if(lineHdr == "<overscan>"){
overscan.push_back(line);
}
else if(lineHdr == "<patch>"){
patch.push_back(line);
}
else if(lineHdr == "<img>" ){
addImage(lineTail);
}
else if(lineHdr == "<condition>"){
condition* c = new condition();
c->readLine(lineTail);
conditions.push_back(c);
}
else if(lineHdr == "<tile>" ){
gameTile* t = new gameTile();
t->readLine(lineTail);
if(conNames.size() > 0){
//add conditions
for(int i = 0; i < conditions.size(); ++i){
for(int j = 0; j < conNames.size(); ++j){
if(conditions[i]->name == conNames[j]){
t->conditions.push_back(*conditions[i]);
}
}
}
}
tiles.push_back(t);
}
else if(lineHdr == "<background>"){
background.push_back(orgLine);
}
else if(lineHdr == "<options>"){
options.push_back(line);
}
else if(lineHdr == "<bgm>"){
bgm.push_back(line);
}
else if(lineHdr == "<sfx>"){
sfx.push_back(line);
}
}
else if(lineHdr == "condition"){
}
else if(lineHdr == "<tile>" ){
gameTile* t = new gameTile();
t->readLine(lineTail);
tiles.push_back(t);
}
else{
//put all other lines away at the moment
otherLines.push_back(line);
else if(line == "#editorSection"){
editorSection = true;
}
}
else if(line == "#endEditorSection"){
editorSection = false;
}
}
fs.close();
}
@ -164,6 +224,9 @@ void coreData::load(string path){
loadPackData();
images.clear();
}
else if(lineHdr == "<saveNo>"){
saveNo = atoi(lineTail.c_str());
}
else if(lineHdr == "<palette>"){
vector<string> lineTokens;
main::split(lineTail, ',', lineTokens);
@ -194,7 +257,8 @@ void coreData::save(){
inifile.open(projectPath, ios::out);
inifile << "<romPath>" + romPath + "\n";
inifile << "<packPath>" + packPath + "\n";
inifile << "<packPath>" + packPath + "\n";
inifile << "<saveNo>" << saveNo << "\n";
for(int i = 0; i < 64; ++i){
inifile << "<palette>";
@ -257,6 +321,7 @@ void coreData::removeImage(int index){
while(i < tiles.size()){
if(tiles[i]->hasReplacement){
if(tiles[i]->img == index){
delete(tiles[i]);
tiles.erase(tiles.begin() + i);
--i;
}
@ -266,5 +331,73 @@ void coreData::removeImage(int index){
}
++i;
}
delete(images[index]);
images.erase(images.begin() + index);
}
void coreData::genPackData(){
string hiresPath;
hiresPath = packPath + string("\\hires.txt");
//back up old file
string backPath;
backPath = packPath + string("\\hiresBak") + main::intToStr(saveNo) + string(".txt");
std::ifstream src(hiresPath, std::ios::binary);
std::ofstream dst(backPath, std::ios::binary);
dst << src.rdbuf();
src.close();
dst.close();
//save project first
++saveNo;
save();
fstream inifile;
string s;
inifile.open(projectPath, ios::out);
genSection(inifile, ver);
inifile << "<scale>" << scale << "\n";
genSection(inifile, supportedRom);
genSection(inifile, overscan);
genSection(inifile, patch);
for(int i = 0; i < images.size(); ++i){
inifile << "<img>" << images[i]->fileName << "\n";
}
inifile << "#editorSection\n";
inifile << "#endEditorSection\n";
genSection(inifile, background);
genSection(inifile, options);
genSection(inifile, bgm);
genSection(inifile, sfx);
}
void coreData::genSection(fstream& inifile, vector<string>& sect){
for(int i = 0; i < sect.size(); ++i){
inifile << sect[i] << "\n";
}
}
void coreData::genPalette(){
string palettePath;
palettePath = packPath + string("\\palette.dat");
fstream palettefile;
char rawPalette[192];
for(int i = 0; i < 64; i++){
rawPalette[i * 3] = palette[i].Red();
rawPalette[i * 3 + 1] = palette[i].Green();
rawPalette[i * 3 + 2] = palette[i].Blue();
}
palettefile.open(palettePath, ios::out | ios::binary);
if (palettefile.is_open()){
palettefile.write(rawPalette, 192);
palettefile.close();
}
}

View file

@ -25,12 +25,21 @@ class coreData
Uint8* romData;
//pack data
vector<string> ver;
vector<string> supportedRom;
vector<string> overscan;
vector<string> patch;
vector<string> background;
vector<string> options;
vector<string> bgm;
vector<string> sfx;
Uint8 scale;
vector<image*> images;
vector<condition*> conditions;
vector<gameTile*> tiles;
vector<string> otherLines;
wxColour palette[64];
int saveNo;
void dataChanged();
void initPath(string rPath, string pPath);
@ -39,8 +48,11 @@ class coreData
void saveAs(string path);
void loadPackData();
void genPackData();
void genSection(fstream& inifile, vector<string>& sect);
void loadRom();
void loadPalette();
void genPalette();
string getTileID(int tileIndex);
void addImage(string path);

View file

@ -21,13 +21,8 @@ void gameTile::readLine(string s){
hasReplacement = true;
img = atoi(tokens[0].c_str());
if(coreData::cData->isCHRROM){
id.id = atoi(tokens[1].c_str());
}
else{
main::hexToByteArray(tokens[1], (Uint8*)(id.rawData));
}
main::hexToByteArray(tokens[2], (Uint8*)(id.palette));
id.readID(tokens[1]);
id.readPalette(tokens[2]);
x = atoi(tokens[3].c_str());
y = atoi(tokens[4].c_str());
@ -35,7 +30,13 @@ void gameTile::readLine(string s){
isDefault = (tokens[6] == "Y");
}
bool gameTile::compareEqual(gameTile t){
string gameTile::writeLine(){
stringstream stream;
stream << img << "," << id.writeID() << "," << id.writePalette() << "," << x << "," << y << "," << brightness << "," << (isDefault ? "Y" : "N");
return stream.str();
}
bool gameTile::compareEqual(gameTile& t){
if(conditions.size() != t.conditions.size()) return false;
for(int i = 0; i < conditions.size(); ++i){
if(!conditions[i].compareEqual(t.conditions[i])) return false;

View file

@ -29,7 +29,8 @@ class gameTile
double brightness;
void readLine(string s);
bool compareEqual(gameTile t);
string writeLine();
bool compareEqual(gameTile& t);
void load(fstream& file);
void save(fstream& file);
protected:

View file

@ -2135,7 +2135,7 @@
"begin_code.h"
"close_code.h"
1517994036 source:c:\work\hdnesr\trunk\hdnespackeditor\hdnespackeditormainform.cpp
1518682413 source:c:\work\hdnesr\trunk\hdnespackeditor\hdnespackeditormainform.cpp
"hdnesPackEditormainForm.h"
"hdnesPackEditornewProjectDialog.h"
"hdnesPackEditorcolourSelectDialog.h"
@ -2148,7 +2148,7 @@
"gameObjNode.h"
"image.h"
1517566027 c:\work\hdnesr\trunk\hdnespackeditor\hdnespackeditormainform.h
1518269591 c:\work\hdnesr\trunk\hdnespackeditor\hdnespackeditormainform.h
"common.h"
"mainForm.h"
"colourDialogClient.h"
@ -3465,10 +3465,13 @@
1515164614 c:\work\hdnes\trunk\hdnespackeditor\image.h
"common.h"
1517989439 source:c:\work\hdnesr\trunk\hdnespackeditor\condition.cpp
1518706082 source:c:\work\hdnesr\trunk\hdnespackeditor\condition.cpp
"condition.h"
"coreData.h"
"gameTile.h"
"main.h"
1517989440 c:\work\hdnesr\trunk\hdnespackeditor\condition.h
1518704909 c:\work\hdnesr\trunk\hdnespackeditor\condition.h
"common.h"
"classList.h"
"tileReference.h"
@ -3481,7 +3484,7 @@
"gameTile.h"
"hdnesPackEditormainForm.h"
1515152694 c:\work\hdnesr\trunk\hdnespackeditor\coredata.h
1518743252 c:\work\hdnesr\trunk\hdnespackeditor\coredata.h
"common.h"
"classList.h"
<wx/wx.h>
@ -3818,13 +3821,13 @@
"gameTile.h"
<wx/treebase.h>
1517995083 source:c:\work\hdnesr\trunk\hdnespackeditor\gametile.cpp
1518674091 source:c:\work\hdnesr\trunk\hdnespackeditor\gametile.cpp
"common.h"
"coreData.h"
"gameTile.h"
"main.h"
1517978661 c:\work\hdnesr\trunk\hdnespackeditor\gametile.h
1518674091 c:\work\hdnesr\trunk\hdnespackeditor\gametile.h
"common.h"
"classList.h"
"condition.h"
@ -3876,10 +3879,10 @@
"begin_code.h"
"close_code.h"
1517989440 c:\work\hdnesr\trunk\hdnespackeditor\tilereference.h
1518674150 c:\work\hdnesr\trunk\hdnespackeditor\tilereference.h
"common.h"
1517995083 source:c:\work\hdnesr\trunk\hdnespackeditor\tilereference.cpp
1518674150 source:c:\work\hdnesr\trunk\hdnespackeditor\tilereference.cpp
"tileReference.h"
"coreData.h"
"main.h"

View file

@ -2,340 +2,9 @@
<CodeBlocks_layout_file>
<FileVersion major="1" minor="0" />
<ActiveTarget name="Debug" />
<File name="condition.cpp" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="hdnesPackEditornewProjectDialog.cpp" open="0" top="0" tabpos="16" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="782" topLine="0" />
</Cursor>
</File>
<File name="hdnesPackEditormainForm.cpp" open="1" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="75492" topLine="499" />
</Cursor>
<Folding>
<Collapse line="15" />
<Collapse line="30" />
<Collapse line="31" />
<Collapse line="33" />
<Collapse line="58" />
<Collapse line="68" />
<Collapse line="73" />
<Collapse line="82" />
<Collapse line="83" />
<Collapse line="86" />
<Collapse line="89" />
<Collapse line="94" />
<Collapse line="100" />
<Collapse line="105" />
<Collapse line="107" />
<Collapse line="108" />
<Collapse line="116" />
<Collapse line="117" />
<Collapse line="121" />
<Collapse line="125" />
<Collapse line="130" />
<Collapse line="134" />
<Collapse line="139" />
<Collapse line="143" />
<Collapse line="179" />
<Collapse line="180" />
<Collapse line="188" />
<Collapse line="198" />
<Collapse line="199" />
<Collapse line="203" />
<Collapse line="207" />
<Collapse line="208" />
<Collapse line="211" />
<Collapse line="216" />
<Collapse line="238" />
<Collapse line="252" />
<Collapse line="258" />
<Collapse line="259" />
<Collapse line="263" />
<Collapse line="267" />
<Collapse line="271" />
<Collapse line="277" />
<Collapse line="301" />
<Collapse line="302" />
<Collapse line="307" />
<Collapse line="311" />
<Collapse line="317" />
<Collapse line="321" />
<Collapse line="325" />
<Collapse line="329" />
<Collapse line="330" />
<Collapse line="335" />
<Collapse line="336" />
<Collapse line="341" />
<Collapse line="342" />
<Collapse line="347" />
<Collapse line="352" />
<Collapse line="354" />
<Collapse line="357" />
<Collapse line="362" />
<Collapse line="365" />
<Collapse line="370" />
<Collapse line="373" />
<Collapse line="378" />
<Collapse line="381" />
<Collapse line="404" />
<Collapse line="408" />
<Collapse line="416" />
<Collapse line="417" />
<Collapse line="418" />
<Collapse line="420" />
<Collapse line="435" />
<Collapse line="440" />
<Collapse line="449" />
<Collapse line="461" />
<Collapse line="466" />
<Collapse line="489" />
<Collapse line="497" />
<Collapse line="507" />
<Collapse line="508" />
<Collapse line="509" />
<Collapse line="520" />
<Collapse line="521" />
<Collapse line="522" />
<Collapse line="535" />
<Collapse line="536" />
<Collapse line="537" />
<Collapse line="539" />
<Collapse line="542" />
<Collapse line="543" />
<Collapse line="548" />
<Collapse line="562" />
<Collapse line="564" />
<Collapse line="568" />
<Collapse line="570" />
<Collapse line="573" />
<Collapse line="574" />
<Collapse line="581" />
<Collapse line="587" />
<Collapse line="596" />
<Collapse line="600" />
<Collapse line="603" />
<Collapse line="613" />
<Collapse line="619" />
<Collapse line="620" />
<Collapse line="624" />
<Collapse line="626" />
<Collapse line="631" />
<Collapse line="638" />
<Collapse line="639" />
<Collapse line="646" />
<Collapse line="665" />
<Collapse line="679" />
<Collapse line="680" />
<Collapse line="687" />
<Collapse line="690" />
<Collapse line="720" />
<Collapse line="724" />
<Collapse line="727" />
<Collapse line="731" />
<Collapse line="733" />
<Collapse line="736" />
<Collapse line="746" />
<Collapse line="824" />
<Collapse line="829" />
<Collapse line="835" />
<Collapse line="840" />
<Collapse line="846" />
<Collapse line="848" />
<Collapse line="854" />
<Collapse line="858" />
<Collapse line="859" />
<Collapse line="862" />
<Collapse line="868" />
<Collapse line="872" />
<Collapse line="879" />
<Collapse line="883" />
<Collapse line="888" />
<Collapse line="914" />
<Collapse line="916" />
<Collapse line="917" />
<Collapse line="920" />
<Collapse line="926" />
<Collapse line="930" />
<Collapse line="959" />
<Collapse line="960" />
<Collapse line="963" />
<Collapse line="966" />
<Collapse line="968" />
<Collapse line="982" />
<Collapse line="1010" />
<Collapse line="1019" />
<Collapse line="1030" />
<Collapse line="1047" />
<Collapse line="1061" />
<Collapse line="1064" />
<Collapse line="1067" />
<Collapse line="1069" />
<Collapse line="1078" />
<Collapse line="1088" />
<Collapse line="1091" />
<Collapse line="1104" />
<Collapse line="1114" />
<Collapse line="1130" />
<Collapse line="1137" />
<Collapse line="1142" />
<Collapse line="1149" />
<Collapse line="1158" />
<Collapse line="1162" />
<Collapse line="1165" />
<Collapse line="1167" />
<Collapse line="1168" />
<Collapse line="1171" />
<Collapse line="1174" />
<Collapse line="1180" />
<Collapse line="1188" />
<Collapse line="1189" />
<Collapse line="1192" />
<Collapse line="1198" />
<Collapse line="1216" />
<Collapse line="1225" />
<Collapse line="1228" />
<Collapse line="1235" />
<Collapse line="1252" />
<Collapse line="1267" />
<Collapse line="1278" />
<Collapse line="1292" />
<Collapse line="1326" />
<Collapse line="1332" />
<Collapse line="1355" />
<Collapse line="1361" />
<Collapse line="1390" />
<Collapse line="1391" />
<Collapse line="1393" />
<Collapse line="1396" />
<Collapse line="1403" />
<Collapse line="1415" />
<Collapse line="1416" />
<Collapse line="1422" />
<Collapse line="1424" />
<Collapse line="1434" />
<Collapse line="1436" />
<Collapse line="1437" />
<Collapse line="1448" />
<Collapse line="1452" />
<Collapse line="1456" />
<Collapse line="1457" />
<Collapse line="1462" />
<Collapse line="1473" />
<Collapse line="1474" />
<Collapse line="1484" />
<Collapse line="1485" />
<Collapse line="1491" />
<Collapse line="1492" />
<Collapse line="1498" />
<Collapse line="1501" />
<Collapse line="1515" />
<Collapse line="1519" />
<Collapse line="1522" />
<Collapse line="1526" />
<Collapse line="1531" />
<Collapse line="1534" />
<Collapse line="1539" />
<Collapse line="1542" />
<Collapse line="1548" />
<Collapse line="1552" />
<Collapse line="1557" />
<Collapse line="1560" />
<Collapse line="1567" />
<Collapse line="1580" />
<Collapse line="1595" />
<Collapse line="1596" />
<Collapse line="1614" />
<Collapse line="1635" />
<Collapse line="1643" />
<Collapse line="1645" />
<Collapse line="1647" />
<Collapse line="1655" />
<Collapse line="1661" />
<Collapse line="1662" />
<Collapse line="1667" />
<Collapse line="1670" />
<Collapse line="1672" />
<Collapse line="1673" />
<Collapse line="1674" />
<Collapse line="1677" />
<Collapse line="1679" />
<Collapse line="1697" />
<Collapse line="1701" />
<Collapse line="1704" />
<Collapse line="1706" />
<Collapse line="1717" />
<Collapse line="1718" />
<Collapse line="1719" />
<Collapse line="1735" />
<Collapse line="1740" />
<Collapse line="1741" />
<Collapse line="1744" />
<Collapse line="1757" />
<Collapse line="1769" />
<Collapse line="1770" />
<Collapse line="1772" />
<Collapse line="1779" />
<Collapse line="1780" />
<Collapse line="1786" />
<Collapse line="1787" />
<Collapse line="1797" />
<Collapse line="1802" />
<Collapse line="1803" />
<Collapse line="1811" />
<Collapse line="1819" />
<Collapse line="1822" />
<Collapse line="1824" />
<Collapse line="1825" />
<Collapse line="1835" />
<Collapse line="1861" />
<Collapse line="1862" />
<Collapse line="1868" />
<Collapse line="1869" />
</Folding>
</File>
<File name="main.h" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="530" topLine="6" />
</Cursor>
</File>
<File name="tileReference.h" open="1" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="364" topLine="4" />
</Cursor>
</File>
<File name="image.h" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="249" topLine="1" />
</Cursor>
</File>
<File name="coreData.h" open="1" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="195" topLine="19" />
</Cursor>
</File>
<File name="classList.h" open="0" top="0" tabpos="20" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="174" topLine="0" />
</Cursor>
</File>
<File name="hdnesPackEditormainForm.h" open="1" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3490" topLine="89" />
</Cursor>
</File>
<File name="gameObjNode.cpp" open="1" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1896" topLine="96" />
</Cursor>
</File>
<File name="hdnesPackEditorcolourSelectDialog.h" open="0" top="0" tabpos="25" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="382" topLine="9" />
</Cursor>
</File>
<File name="gameTile.cpp" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2310" topLine="74" />
<Cursor1 position="996" topLine="21" />
</Cursor>
</File>
<File name="hdnesPackEditornewProjectDialog.h" open="0" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
@ -343,31 +12,6 @@
<Cursor1 position="229" topLine="7" />
</Cursor>
</File>
<File name="hdnesPackEditorreplacementDialog.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1177" topLine="27" />
</Cursor>
</File>
<File name="gameTile.h" open="0" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="255" topLine="13" />
</Cursor>
</File>
<File name="tileReference.cpp" open="1" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1149" topLine="37" />
</Cursor>
</File>
<File name="colourDialogClient.h" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="235" topLine="0" />
</Cursor>
</File>
<File name="hdnesPackEditorcolourSelectDialog.cpp" open="1" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="3777" topLine="97" />
</Cursor>
</File>
<File name="hdnesPackEditorreplacementDialog.cpp" open="0" top="0" tabpos="13" split="0" active="1" splitpos="0" zoom_1="-1" zoom_2="0">
<Cursor>
<Cursor1 position="608" topLine="54" />
@ -378,55 +22,183 @@
<Collapse line="47" />
</Folding>
</File>
<File name="gameObjNode.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="mainForm.cpp" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1160" topLine="33" />
<Cursor1 position="34741" topLine="537" />
</Cursor>
</File>
<File name="image.cpp" open="1" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="classList.h" open="0" top="0" tabpos="20" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="187" topLine="2" />
<Cursor1 position="174" topLine="0" />
</Cursor>
</File>
<File name="common.h" open="0" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="coreData.h" open="1" top="0" tabpos="6" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1193" topLine="40" />
</Cursor>
</File>
<File name="condition.cpp" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="2719" topLine="68" />
</Cursor>
</File>
<File name="coreData.cpp" open="1" top="0" tabpos="5" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="10947" topLine="114" />
</Cursor>
<Folding>
<Collapse line="10" />
<Collapse line="20" />
<Collapse line="22" />
<Collapse line="26" />
<Collapse line="30" />
<Collapse line="36" />
<Collapse line="42" />
<Collapse line="79" />
<Collapse line="82" />
<Collapse line="85" />
<Collapse line="88" />
<Collapse line="91" />
<Collapse line="117" />
<Collapse line="120" />
<Collapse line="123" />
<Collapse line="126" />
<Collapse line="143" />
<Collapse line="151" />
<Collapse line="156" />
<Collapse line="163" />
<Collapse line="171" />
<Collapse line="183" />
<Collapse line="190" />
<Collapse line="193" />
<Collapse line="197" />
<Collapse line="203" />
<Collapse line="211" />
<Collapse line="212" />
<Collapse line="214" />
<Collapse line="217" />
<Collapse line="221" />
<Collapse line="226" />
<Collapse line="229" />
<Collapse line="235" />
<Collapse line="238" />
<Collapse line="250" />
<Collapse line="286" />
<Collapse line="291" />
<Collapse line="296" />
<Collapse line="297" />
<Collapse line="300" />
<Collapse line="303" />
<Collapse line="317" />
<Collapse line="321" />
<Collapse line="322" />
<Collapse line="327" />
<Collapse line="379" />
<Collapse line="380" />
<Collapse line="385" />
<Collapse line="391" />
<Collapse line="398" />
</Folding>
</File>
<File name="gameObjNode.cpp" open="0" top="0" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1896" topLine="96" />
</Cursor>
</File>
<File name="common.h" open="1" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="226" topLine="0" />
</Cursor>
</File>
<File name="colourDialogClient.h" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="235" topLine="0" />
</Cursor>
</File>
<File name="gameTile.cpp" open="1" top="1" tabpos="2" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="815" topLine="16" />
</Cursor>
</File>
<File name="mainForm.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="11939" topLine="307" />
</Cursor>
</File>
<File name="condition.h" open="0" top="0" tabpos="19" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="hdnesPackEditorcolourSelectDialog.cpp" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="594" topLine="15" />
<Cursor1 position="3777" topLine="97" />
</Cursor>
</File>
<File name="main.cpp" open="1" top="0" tabpos="3" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="hdnesPackEditorcolourSelectDialog.h" open="0" top="0" tabpos="25" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="731" topLine="24" />
<Cursor1 position="382" topLine="9" />
</Cursor>
</File>
<File name="mainForm.cpp" open="0" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="gameObjNode.h" open="0" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="34741" topLine="537" />
<Cursor1 position="1160" topLine="33" />
</Cursor>
</File>
<File name="hdnesPackEditornewProjectDialog.cpp" open="0" top="0" tabpos="16" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="gameTile.h" open="1" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="996" topLine="21" />
<Cursor1 position="611" topLine="14" />
</Cursor>
</File>
<File name="coreData.cpp" open="1" top="1" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<File name="hdnesPackEditormainForm.cpp" open="1" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="4330" topLine="139" />
<Cursor1 position="1763" topLine="18" />
</Cursor>
<Folding>
<Collapse line="20" />
<Collapse line="22" />
<Collapse line="26" />
<Collapse line="72" />
<Collapse line="15" />
<Collapse line="30" />
<Collapse line="31" />
<Collapse line="33" />
</Folding>
</File>
<File name="hdnesPackEditormainForm.h" open="0" top="0" tabpos="8" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="6531" topLine="237" />
</Cursor>
</File>
<File name="image.h" open="0" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="249" topLine="1" />
</Cursor>
</File>
<File name="condition.h" open="1" top="0" tabpos="7" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="448" topLine="15" />
</Cursor>
</File>
<File name="image.cpp" open="1" top="0" tabpos="10" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="158" topLine="0" />
</Cursor>
</File>
<File name="tileReference.h" open="1" top="0" tabpos="12" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="397" topLine="4" />
</Cursor>
</File>
<File name="hdnesPackEditorreplacementDialog.h" open="0" top="0" tabpos="1" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1177" topLine="27" />
</Cursor>
</File>
<File name="main.cpp" open="1" top="0" tabpos="4" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="470" topLine="3" />
</Cursor>
</File>
<File name="main.h" open="0" top="0" tabpos="9" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="530" topLine="6" />
</Cursor>
</File>
<File name="tileReference.cpp" open="1" top="0" tabpos="11" split="0" active="1" splitpos="0" zoom_1="0" zoom_2="0">
<Cursor>
<Cursor1 position="1901" topLine="0" />
</Cursor>
</File>
</CodeBlocks_layout_file>

View file

@ -658,6 +658,7 @@ void hdnesPackEditormainForm::initGameObjs(){
scrGameObjNewV->SetThumbSize(1);
clearGameObj();
gameObjClicked = false;
editCondition = false;
gameObjRawImageDisplay = wxImage(pnlGameObjRaw->GetSize().x, pnlGameObjRaw->GetSize().y);
gameObjNewImageDisplay = wxImage(pnlGameObjNew->GetSize().x, pnlGameObjNew->GetSize().y);
gameObjBaseTile = wxImage(8, 8);
@ -673,6 +674,7 @@ void hdnesPackEditormainForm::gameObjsROMChanged(){
gameObjectTreeWillMove = false;
clearGameObj();
gameObjClicked = false;
editCondition = false;
gameObjBaseTileNew = wxImage(8 * coreData::cData->scale, 8 * coreData::cData->scale);
}
@ -856,6 +858,10 @@ void hdnesPackEditormainForm::gameObjsRawRUp( wxMouseEvent& event ){
menu.Append(GAME_OBJ_PNL_CONFIRM_PASTE, wxT("Confirm paste location"));
menu.Append(GAME_OBJ_PNL_CANCEL_PASTE, wxT("Cancel paste"));
}
else if(editCondition){
menu.Append(GAME_OBJ_PNL_CONFIRM_CONDITION, wxT("Confirm changes"));
menu.Append(GAME_OBJ_PNL_CANCEL_CONDITION, wxT("Cancel changes"));
}
else{
if (wxTheClipboard->IsSupported( wxDF_TEXT )){
wxTextDataObject txt;
@ -881,6 +887,7 @@ void hdnesPackEditormainForm::gameObjsRawRUp( wxMouseEvent& event ){
menu.Append(GAME_OBJ_PNL_COPY, wxT("Copy"));
menu.Append(GAME_OBJ_PNL_DELETE, wxT("Delete"));
menu.Append(GAME_OBJ_PNL_REPLACE, wxT("Set replacement"));
menu.Append(GAME_OBJ_PNL_CONDITION, wxT("Set conditions"));
if(data->isSprite){
menu.Append(GAME_OBJ_PNL_HFLIP, wxT("Flip horizontally"));
menu.Append(GAME_OBJ_PNL_VFLIP, wxT("Flip vertically"));
@ -900,6 +907,13 @@ void hdnesPackEditormainForm::gameObjsRawRUp( wxMouseEvent& event ){
void hdnesPackEditormainForm::gameObjsRawMenu( wxCommandEvent& event ){
string copyContent = "";
gameObjNode* ndata;
gameTile t;
condition c;
int clickedX;
int clickedY;
hdnesPackEditorreplacementDialog* fp;
vector<gameTile> selectedTiles;
switch(event.GetId()){
case GAME_OBJ_PNL_PASTE:
if (wxTheClipboard->IsSupported( wxDF_TEXT )){
@ -1024,18 +1038,59 @@ void hdnesPackEditormainForm::gameObjsRawMenu( wxCommandEvent& event ){
coreData::cData->dataChanged();
break;
case GAME_OBJ_PNL_REPLACE:
vector<gameTile> selectedTiles;
ndata = (gameObjNode*)(treeGameObjs->GetItemData(tItmGameObjMenu));
int clickedX = 0;
int clickedY = 0;
clickedX = 0;
clickedY = 0;
for(int k = 0; k < gameObjSelectedTiles.size(); ++k){
selectedTiles.push_back(ndata->tiles[gameObjSelectedTiles[k]]);
}
gameTile t = ndata->tiles[rightClickedgameObjID];
hdnesPackEditorreplacementDialog* fp = new hdnesPackEditorreplacementDialog(this);
t = ndata->tiles[rightClickedgameObjID];
fp = new hdnesPackEditorreplacementDialog(this);
fp->setSelectedTiles(selectedTiles, t.objCoordX, t.objCoordY, rightClickedGameObjTileX - t.objCoordX, rightClickedGameObjTileY - t.objCoordY);
fp->Show(true);
break;
case GAME_OBJ_PNL_CONDITION:
editCondition = true;
conditionGameObjID = rightClickedgameObjID;
conditionGameObjTileX = rightClickedGameObjTileX;
conditionGameObjTileY = rightClickedGameObjTileY;
//set condition tiles to selected tiles
ndata = (gameObjNode*)(treeGameObjs->GetItemData(tItmGameObjMenu));
t = ndata->tiles[conditionGameObjID];
gameObjSelectedTiles.clear();
for(int k = 0; k < t.conditions.size(); ++k){
for(int i = 0; i < ndata->tiles.size(); ++i){
if(t.conditions[k].isMatch(t, ndata->tiles[i])){
gameObjSelectedTiles.push_back(i);
}
}
}
drawGameObjEdits();
break;
case GAME_OBJ_PNL_CONFIRM_CONDITION:
editCondition = false;
ndata = (gameObjNode*)(treeGameObjs->GetItemData(tItmGameObjMenu));
t = ndata->tiles[conditionGameObjID];
t.conditions.clear();
//add selected tiles to condition
for(int k = 0; k < gameObjSelectedTiles.size(); ++k){
c.id = ndata->tiles[gameObjSelectedTiles[k]].id;
c.objCoordX = ndata->tiles[gameObjSelectedTiles[k]].objCoordX - t.objCoordX;
c.objCoordY = ndata->tiles[gameObjSelectedTiles[k]].objCoordY - t.objCoordY;
c.hFlip = (ndata->tiles[gameObjSelectedTiles[k]].hFlip == t.hFlip);
c.vFlip = (ndata->tiles[gameObjSelectedTiles[k]].vFlip == t.vFlip);
t.conditions.push_back(c);
}
ndata->tiles[conditionGameObjID] = t;
gameObjSelectedTiles.clear();
drawGameObjEdits();
break;
case GAME_OBJ_PNL_CANCEL_CONDITION:
editCondition = false;
gameObjSelectedTiles.clear();
drawGameObjEdits();
break;
}
}
@ -1285,6 +1340,15 @@ void hdnesPackEditormainForm::drawGameObjSelection(){
main::drawRect(gameObjRawImage2, pt2, tileBoxSize, wxColour(0, 0, 0));
main::drawRect(gameObjRawImage2, pt, tileBoxSize, wxColour(255, 255, 255));
}
if(editCondition){
pt.x = (ndata->tiles[conditionGameObjID].objCoordX - ndata->x1) * gameObjZoom;
pt.y = (ndata->tiles[conditionGameObjID].objCoordY - ndata->y1) * gameObjZoom;
pt2 = pt;
++(pt2.x);
++(pt2.y);
main::drawRect(gameObjRawImage2, pt2, tileBoxSize, wxColour(0, 100, 100));
main::drawRect(gameObjRawImage2, pt, tileBoxSize, wxColour(0, 255, 255));
}
gameObjRawPasteX = ndata->x1 * gameObjZoom + (pnlGameObjRaw->GetSize().GetWidth() / 2) - gameObjViewCentreX;
gameObjRawPasteY = ndata->y1 * gameObjZoom + (pnlGameObjRaw->GetSize().GetHeight() / 2) - gameObjViewCentreY;
@ -1447,6 +1511,7 @@ void hdnesPackEditormainForm::gameObjsRawLUp( wxMouseEvent& event ){
corner2 = convertGameObjRawPosition(corner2);
for(int i = 0; i < ndata->tiles.size(); i++){
if(editCondition && i == conditionGameObjID) continue;
if(corner1.x <= ndata->tiles[i].objCoordX + 8
&& corner2.x >= ndata->tiles[i].objCoordX
&& corner1.y <= ndata->tiles[i].objCoordY + 8

View file

@ -7,14 +7,17 @@
#define COLOUR_CLIENT_ROM_VIEW_3 3
#define COLOUR_CLIENT_GAME_OBJ_BG 4
#define GAME_OBJ_PNL_PASTE 0
#define GAME_OBJ_PNL_COPY 1
#define GAME_OBJ_PNL_CONFIRM_PASTE 2
#define GAME_OBJ_PNL_CANCEL_PASTE 3
#define GAME_OBJ_PNL_DELETE 4
#define GAME_OBJ_PNL_HFLIP 5
#define GAME_OBJ_PNL_VFLIP 6
#define GAME_OBJ_PNL_REPLACE 7
#define GAME_OBJ_PNL_PASTE 0
#define GAME_OBJ_PNL_COPY 1
#define GAME_OBJ_PNL_CONFIRM_PASTE 2
#define GAME_OBJ_PNL_CANCEL_PASTE 3
#define GAME_OBJ_PNL_DELETE 4
#define GAME_OBJ_PNL_HFLIP 5
#define GAME_OBJ_PNL_VFLIP 6
#define GAME_OBJ_PNL_REPLACE 7
#define GAME_OBJ_PNL_CONDITION 8
#define GAME_OBJ_PNL_CONFIRM_CONDITION 9
#define GAME_OBJ_PNL_CANCEL_CONDITION 10
/**
@ -182,9 +185,13 @@ class hdnesPackEditormainForm : public mainForm, public colourDialogClient
wxPoint gameObjLDownPos;
wxPoint gameObjLCurrPos;
bool gameObjClicked;
bool editCondition;
Uint32 rightClickedgameObjID;
int rightClickedGameObjTileX;
int rightClickedGameObjTileY;
Uint32 conditionGameObjID;
int conditionGameObjTileX;
int conditionGameObjTileY;
wxImage gameObjImageWithSelection;
wxImage gameObjBaseTile;
wxImage gameObjBaseTileNew;

View file

@ -12,7 +12,7 @@ tileReference::~tileReference()
//dtor
}
bool tileReference::compareEqual(tileReference t){
bool tileReference::compareEqual(tileReference& t){
for(int i = 0; i < 4; ++i){
if(palette[i] != t.palette[i]) return false;
}
@ -27,6 +27,40 @@ bool tileReference::compareEqual(tileReference t){
return true;
}
void tileReference::readID(string s){
if(coreData::cData->isCHRROM){
id = atoi(s.c_str());
}
else{
main::hexToByteArray(s, (Uint8*)(rawData));
}
}
string tileReference::writeID(){
if(coreData::cData->isCHRROM){
return main::intToStr(id);
}
else{
stringstream stream;
for(int i = 0; i < 16; ++i){
stream << main::intToHex(rawData[i]);
}
return stream.str();
}
}
void tileReference::readPalette(string s){
main::hexToByteArray(s, (Uint8*)(palette));
}
string tileReference::writePalette(){
stringstream stream;
for(int i = 0; i < 4; ++i){
stream << main::intToHex(palette[i]);
}
return stream.str();
}
void tileReference::load(fstream& file){
string line;
string lineHdr;
@ -40,13 +74,10 @@ void tileReference::load(fstream& file){
lineTail = line.substr(found + 1);
if(lineHdr == "<id>"){
id = atoi(lineTail.c_str());
}
else if(lineHdr == "<rawData>"){
main::hexToByteArray(lineTail, (Uint8*)rawData);
readID(lineTail);
}
else if(lineHdr == "<palette>"){
main::hexToByteArray(lineTail, (Uint8*)palette);
readPalette(lineTail);
}
}
getline(file, line);
@ -55,20 +86,8 @@ void tileReference::load(fstream& file){
void tileReference::save(fstream& file){
file << "<tileReference>\n";
if(coreData::cData->isCHRROM){
file << "<id>" << id << "\n";
}
else{
file << "<rawData>";
for(int i = 0; i < 16; ++i){
file << main::intToHex(rawData[i]);
}
file << "\n";
}
file << "<palette>";
for(int i = 0; i < 4; ++i){
file << main::intToHex(palette[i]);
}
file << "\n";
file << "<id>" << writeID() << "\n";
file << "<palette>" << writePalette() << "\n";
file << "<endTileReference>\n";
}

View file

@ -13,10 +13,15 @@ class tileReference
Uint8 rawData[16];
Uint8 palette[4];
bool compareEqual(tileReference t);
bool compareEqual(tileReference& t);
void load(fstream& file);
void save(fstream& file);
void readID(string s);
string writeID();
void readPalette(string s);
string writePalette();
protected:
private: