Commit ffbcbaab authored by mercury233's avatar mercury233

Merge branch 'master' of https://github.com/Fluorohydride/ygopro

parents 712f9cd6 9b3a65f9
## ygopro ## YGOPro
A script engine for "yu-gi-oh!" and sample gui A script engine for "yu-gi-oh!" and sample gui
[中文说明](https://github.com/Fluorohydride/ygopro/wiki/%E4%B8%AD%E6%96%87%E8%AF%B4%E6%98%8E) [中文说明](https://github.com/Fluorohydride/ygopro/wiki/%E4%B8%AD%E6%96%87%E8%AF%B4%E6%98%8E)
###Keys: ### Keys:
* ESC: Minimize the window. * ESC: Minimize the window.
* A: Holding down this button will let the system stop at every timing. * A: Holding down this button will let the system stop at every timing.
* S: Holding down this button will let the system skip every timing. * S: Holding down this button will let the system skip every timing.
* R: Fix the font error. * D: Holding down this button will let the system stop at available timing.
* R: Fix the font glitch.
* F1~F4: Show the cards in your grave, banished zone, extra deck, xyz materials. * F1~F4: Show the cards in your grave, banished zone, extra deck, xyz materials.
* F5~F8: Show the cards in your opponent's grave, banished zone, extra deck, xyz materials. * F5~F8: Show the cards in your opponent's grave, banished zone, extra deck, xyz materials.
###Color in card list: ### Color in card list:
####Background: #### Background:
* White = your card, Grey = your opponent's card * White = your card, Grey = your opponent's card
####Text: #### Text:
Cards in deck, extra deck and banished zone: Cards in deck, extra deck and banished zone:
* Black = face-up, Blue = face-down * Black = face-up, Blue = face-down
Xyz materials: Xyz materials:
* Black = default, Blue = the owner of the xyz material is different from its controller * Black = default, Blue = the owner of the xyz material is different from its controller
###Sequence: ### Sequence:
* Monster Zone: 1~5, starting from the left hand side. * Monster Zone: 1~5, starting from the left hand side.
* Spell & Trap Zone: 1~5, starting from the left hand side. * Spell & Trap Zone: 1~5, starting from the left hand side.
* Field Zone: 6 * Field Zone: 6
* Pendulum Zone: 7~8, starting from the left hand side. * Pendulum Zone: 0~1, starting from the left hand side.
* The others: 1~n, starting from the bottom. * The others: 1~n, starting from the bottom.
###Deck edit page: ### Deck edit page:
* All numeric textboxs: They support >, =, <, >=, <= signs. * All numeric textboxs: They support >, =, <, >=, <= signs.
* Card name: Search card names and texts by default, $foo will only search foo in card names, and @foo will search cards of "foo" archetype(due to translation, card name contains "foo" does not mean that card is "foo" card). * Card name: Search card names and texts by default, $foo will only search foo in card names, and @foo will search cards of "foo" archetype(due to translation, card name contains "foo" does not mean that card is "foo" card).
### Command-line options: ### Command-line options:
* -j: Join the host in system.conf file. * `-e foo.cdb`: Load foo.cdb as the extra database.
* -d: Enter the deck edit page. * `-n nickname`: Set the nickname.
* -r: Enter the replay mode page. * `-h 192.168.0.2`: Set the host to join in LAN mode.
* -s: Enter the single mode page. * `-p 7911`: Set the port to join in LAN mode.
* -efoo: Load foo as the extra database. * `-w abc`: Set the password to join in LAN mode.
* `-d`: Enter the deck edit page.
* `-d deck`: If used along with `-j` it mean select the deck, or it will open the deck to edit.
* `-c`: Create host with default settings.
* `-j`: Join the host specified in above, or if absent, lasthost in system.conf file.
* `-r`: Enter the replay mode page.
* `-r replay.yrp`: Load the replay.yrp in replay mode.
* `-s`: Enter the single mode page.
* `-s puzzle.lua`: Load the puzzle.lua in single mode.
* `-k`: Keep when duel finished. See below.
#### Note:
* `-c` `-j` `-e` `-r` `-s` shoule be the last parameter, because any parameters after it will get ignored.
* `-d` `-c` `-j` `-e` `-r` `-s` will make YGOPro automatically exit when the duel or deck editing is finished. This is useful for some launchers. If you want to keep it, add `-k` before them.
* `-d` `-r` `-s` support full path of file, or just filename. But remember deck filename should NOT have extension when replay and single filename MUST have extension.
### Directories: ### Directories:
* pics: .jpg card images(177*254). * pics: .jpg card images(177*254).
......
...@@ -153,7 +153,7 @@ void SGUITTGlyph::preload(u32 char_index, FT_Face face, video::IVideoDriver* dri ...@@ -153,7 +153,7 @@ void SGUITTGlyph::preload(u32 char_index, FT_Face face, video::IVideoDriver* dri
} }
glyph_page = parent->getLastGlyphPageIndex(); glyph_page = parent->getLastGlyphPageIndex();
u32 texture_side_length = page->texture->getOriginalSize().Width; u32 texture_side_length = page->texture_size.Width;
core::vector2di page_position( core::vector2di page_position(
(page->used_slots % (texture_side_length / font_size)) * font_size, (page->used_slots % (texture_side_length / font_size)) * font_size,
(page->used_slots / (texture_side_length / font_size)) * font_size (page->used_slots / (texture_side_length / font_size)) * font_size
...@@ -230,7 +230,7 @@ CGUITTFont* CGUITTFont::create(IrrlichtDevice *device, const io::path& filename, ...@@ -230,7 +230,7 @@ CGUITTFont* CGUITTFont::create(IrrlichtDevice *device, const io::path& filename,
//! Constructor. //! Constructor.
CGUITTFont::CGUITTFont(IGUIEnvironment *env) CGUITTFont::CGUITTFont(IGUIEnvironment *env)
: use_monochrome(false), use_transparency(true), use_hinting(true), use_auto_hinting(true), : use_monochrome(false), use_transparency(true), use_hinting(true), use_auto_hinting(true),
batch_load_size(1), Device(0), Environment(env), Driver(0), GlobalKerningWidth(0), GlobalKerningHeight(0) { batch_load_size(1), Device(0), Environment(env), Driver(0), GlobalKerningWidth(0), GlobalKerningHeight(0), supposed_line_height(0) {
#ifdef _DEBUG #ifdef _DEBUG
setDebugName("CGUITTFont"); setDebugName("CGUITTFont");
#endif #endif
...@@ -345,6 +345,24 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia ...@@ -345,6 +345,24 @@ bool CGUITTFont::load(const io::path& filename, const u32 size, const bool antia
getGlyphIndexByChar((uchar32_t)0); getGlyphIndexByChar((uchar32_t)0);
batch_load_size = old_size; batch_load_size = old_size;
// Calculate the supposed line height of this font (of this size) --
// Not using FT_SizeMetric::ascender or height, but actually by testing some of the glyphs,
// to see what should give a reasonable not cluttered line height.
// The ascender or height info may as well just be arbitrary ones.
// Get the maximum font height. Unfortunately, we have to do this hack as
// Irrlicht will draw things wrong. In FreeType, the font size is the
// maximum size for a single glyph, but that glyph may hang "under" the
// draw line, increasing the total font height to beyond the set size.
// Irrlicht does not understand this concept when drawing fonts. Also, I
// add +1 to give it a 1 pixel blank border. This makes things like
// tooltips look nicer.
s32 test1 = getHeightFromCharacter((uchar32_t)'g') + 1;
s32 test2 = getHeightFromCharacter((uchar32_t)'j') + 1;
s32 test3 = getHeightFromCharacter((uchar32_t)0x55B5) + 1;
supposed_line_height = core::max_(test1, core::max_(test2, test3));
return true; return true;
} }
...@@ -443,9 +461,8 @@ CGUITTGlyphPage* CGUITTFont::createGlyphPage(const u8& pixel_mode) { ...@@ -443,9 +461,8 @@ CGUITTGlyphPage* CGUITTFont::createGlyphPage(const u8& pixel_mode) {
if (page_texture_size.Width > max_texture_size.Width || page_texture_size.Height > max_texture_size.Height) if (page_texture_size.Width > max_texture_size.Width || page_texture_size.Height > max_texture_size.Height)
page_texture_size = max_texture_size; page_texture_size = max_texture_size;
if (!page->createPageTexture(pixel_mode, page_texture_size)) page->texture_size = page_texture_size;
// TODO: add error message? page->pixel_mode = pixel_mode;
return 0;
if (page) { if (page) {
// Determine the number of glyph slots on the page and add it to the list of pages. // Determine the number of glyph slots on the page and add it to the list of pages.
...@@ -522,7 +539,7 @@ void CGUITTFont::draw(const core::stringw& text, const core::rect<s32>& position ...@@ -522,7 +539,7 @@ void CGUITTFont::draw(const core::stringw& text, const core::rect<s32>& position
if (lineBreak) { if (lineBreak) {
previousChar = 0; previousChar = 0;
offset.Y += font_metrics.ascender / 64; offset.Y += supposed_line_height; //font_metrics.ascender / 64;
offset.X = position.UpperLeftCorner.X; offset.X = position.UpperLeftCorner.X;
if (hcenter) if (hcenter)
...@@ -577,20 +594,8 @@ core::dimension2d<u32> CGUITTFont::getDimension(const wchar_t* text) const { ...@@ -577,20 +594,8 @@ core::dimension2d<u32> CGUITTFont::getDimension(const wchar_t* text) const {
} }
core::dimension2d<u32> CGUITTFont::getDimension(const core::ustring& text) const { core::dimension2d<u32> CGUITTFont::getDimension(const core::ustring& text) const {
// Get the maximum font height. Unfortunately, we have to do this hack as core::dimension2d<u32> text_dimension(0, supposed_line_height);
// Irrlicht will draw things wrong. In FreeType, the font size is the core::dimension2d<u32> line(0, supposed_line_height);
// maximum size for a single glyph, but that glyph may hang "under" the
// draw line, increasing the total font height to beyond the set size.
// Irrlicht does not understand this concept when drawing fonts. Also, I
// add +1 to give it a 1 pixel blank border. This makes things like
// tooltips look nicer.
s32 test1 = getHeightFromCharacter((uchar32_t)'g') + 1;
s32 test2 = getHeightFromCharacter((uchar32_t)'j') + 1;
s32 test3 = getHeightFromCharacter((uchar32_t)'_') + 1;
s32 max_font_height = core::max_(test1, core::max_(test2, test3));
core::dimension2d<u32> text_dimension(0, max_font_height);
core::dimension2d<u32> line(0, max_font_height);
uchar32_t previousChar = 0; uchar32_t previousChar = 0;
core::ustring::const_iterator iter = text.begin(); core::ustring::const_iterator iter = text.begin();
...@@ -619,7 +624,7 @@ core::dimension2d<u32> CGUITTFont::getDimension(const core::ustring& text) const ...@@ -619,7 +624,7 @@ core::dimension2d<u32> CGUITTFont::getDimension(const core::ustring& text) const
if (text_dimension.Width < line.Width) if (text_dimension.Width < line.Width)
text_dimension.Width = line.Width; text_dimension.Width = line.Width;
line.Width = 0; line.Width = 0;
line.Height = max_font_height; line.Height = supposed_line_height;
continue; continue;
} }
line.Width += getWidthFromCharacter(p); line.Width += getWidthFromCharacter(p);
...@@ -938,7 +943,7 @@ core::array<scene::ISceneNode*> CGUITTFont::addTextSceneNode(const wchar_t* text ...@@ -938,7 +943,7 @@ core::array<scene::ISceneNode*> CGUITTFont::addTextSceneNode(const wchar_t* text
if (line_break) { if (line_break) {
previous_char = 0; previous_char = 0;
offset.Y -= tt_face->size->metrics.ascender / 64; offset.Y -= supposed_line_height; //tt_face->size->metrics.ascender / 64;
offset.X = start_point.X; offset.X = start_point.X;
if (center) if (center)
offset.X += (text_size.Width - getDimensionUntilEndOfLine(text + 1).Width) >> 1; offset.X += (text_size.Width - getDimensionUntilEndOfLine(text + 1).Width) >> 1;
......
...@@ -143,6 +143,12 @@ public: ...@@ -143,6 +143,12 @@ public:
void updateTexture() { void updateTexture() {
if (!dirty) return; if (!dirty) return;
if (!texture) {
if (!createPageTexture(pixel_mode, texture_size))
// TODO: add error message?
return;
}
void* ptr = texture->lock(); void* ptr = texture->lock();
video::ECOLOR_FORMAT format = texture->getColorFormat(); video::ECOLOR_FORMAT format = texture->getColorFormat();
core::dimension2du size = texture->getOriginalSize(); core::dimension2du size = texture->getOriginalSize();
...@@ -176,6 +182,9 @@ public: ...@@ -176,6 +182,9 @@ public:
core::array<core::vector2di> render_positions; core::array<core::vector2di> render_positions;
core::array<core::recti> render_source_rects; core::array<core::recti> render_source_rects;
core::dimension2du texture_size;
u8 pixel_mode;
private: private:
core::array<const SGUITTGlyph*> glyph_to_be_paged; core::array<const SGUITTGlyph*> glyph_to_be_paged;
video::IVideoDriver* driver; video::IVideoDriver* driver;
...@@ -368,6 +377,7 @@ private: ...@@ -368,6 +377,7 @@ private:
s32 GlobalKerningWidth; s32 GlobalKerningWidth;
s32 GlobalKerningHeight; s32 GlobalKerningHeight;
s32 supposed_line_height;
core::ustring Invisible; core::ustring Invisible;
}; };
......
...@@ -16,6 +16,7 @@ ClientCard::ClientCard() { ...@@ -16,6 +16,7 @@ ClientCard::ClientCard() {
is_selected = false; is_selected = false;
is_showequip = false; is_showequip = false;
is_showtarget = false; is_showtarget = false;
is_showchaintarget = false;
is_highlighting = false; is_highlighting = false;
is_disabled = false; is_disabled = false;
is_reversed = false; is_reversed = false;
...@@ -27,6 +28,7 @@ ClientCard::ClientCard() { ...@@ -27,6 +28,7 @@ ClientCard::ClientCard() {
alias = 0; alias = 0;
level = 0; level = 0;
rank = 0; rank = 0;
link = 0;
race = 0; race = 0;
attribute = 0; attribute = 0;
attack = 0; attack = 0;
...@@ -35,11 +37,13 @@ ClientCard::ClientCard() { ...@@ -35,11 +37,13 @@ ClientCard::ClientCard() {
base_defense = 0; base_defense = 0;
lscale = 0; lscale = 0;
rscale = 0; rscale = 0;
link_marker = 0;
cHint = 0; cHint = 0;
chValue = 0; chValue = 0;
atkstring[0] = 0; atkstring[0] = 0;
defstring[0] = 0; defstring[0] = 0;
lvstring[0] = 0; lvstring[0] = 0;
linkstring[0] = 0;
rscstring[0] = 0; rscstring[0] = 0;
lscstring[0] = 0; lscstring[0] = 0;
overlayTarget = 0; overlayTarget = 0;
...@@ -101,7 +105,10 @@ void ClientCard::UpdateInfo(char* buf) { ...@@ -101,7 +105,10 @@ void ClientCard::UpdateInfo(char* buf) {
} }
if(flag & QUERY_DEFENSE) { if(flag & QUERY_DEFENSE) {
defense = BufferIO::ReadInt32(buf); defense = BufferIO::ReadInt32(buf);
if(defense < 0) { if(type & TYPE_LINK) {
defstring[0] = '-';
defstring[1] = 0;
} else if(defense < 0) {
defstring[0] = '?'; defstring[0] = '?';
defstring[1] = 0; defstring[1] = 0;
} else } else
...@@ -162,6 +169,17 @@ void ClientCard::UpdateInfo(char* buf) { ...@@ -162,6 +169,17 @@ void ClientCard::UpdateInfo(char* buf) {
rscale = BufferIO::ReadInt32(buf); rscale = BufferIO::ReadInt32(buf);
myswprintf(rscstring, L"%d", rscale); myswprintf(rscstring, L"%d", rscale);
} }
if(flag & QUERY_LINK) {
pdata = BufferIO::ReadInt32(buf);
if (link != (unsigned int)pdata) {
link = pdata;
}
myswprintf(linkstring, L"L\x2012%d", link);
pdata = BufferIO::ReadInt32(buf);
if (link_marker != (unsigned int)pdata) {
link_marker = pdata;
}
}
} }
void ClientCard::ClearTarget() { void ClientCard::ClearTarget() {
for(auto cit = cardTarget.begin(); cit != cardTarget.end(); ++cit) { for(auto cit = cardTarget.begin(); cit != cardTarget.end(); ++cit) {
...@@ -197,8 +215,8 @@ bool ClientCard::deck_sort_lv(code_pointer p1, code_pointer p2) { ...@@ -197,8 +215,8 @@ bool ClientCard::deck_sort_lv(code_pointer p1, code_pointer p2) {
if((p1->second.type & 0x7) != (p2->second.type & 0x7)) if((p1->second.type & 0x7) != (p2->second.type & 0x7))
return (p1->second.type & 0x7) < (p2->second.type & 0x7); return (p1->second.type & 0x7) < (p2->second.type & 0x7);
if((p1->second.type & 0x7) == 1) { if((p1->second.type & 0x7) == 1) {
int type1 = (p1->second.type & 0x8020c0) ? (p1->second.type & 0x8020c1) : (p1->second.type & 0x31); int type1 = (p1->second.type & 0x48020c0) ? (p1->second.type & 0x48020c1) : (p1->second.type & 0x31);
int type2 = (p2->second.type & 0x8020c0) ? (p2->second.type & 0x8020c1) : (p2->second.type & 0x31); int type2 = (p2->second.type & 0x48020c0) ? (p2->second.type & 0x48020c1) : (p2->second.type & 0x31);
if(type1 != type2) if(type1 != type2)
return type1 < type2; return type1 < type2;
if(p1->second.level != p2->second.level) if(p1->second.level != p2->second.level)
...@@ -223,8 +241,8 @@ bool ClientCard::deck_sort_atk(code_pointer p1, code_pointer p2) { ...@@ -223,8 +241,8 @@ bool ClientCard::deck_sort_atk(code_pointer p1, code_pointer p2) {
return p1->second.defense > p2->second.defense; return p1->second.defense > p2->second.defense;
if(p1->second.level != p2->second.level) if(p1->second.level != p2->second.level)
return p1->second.level > p2->second.level; return p1->second.level > p2->second.level;
int type1 = (p1->second.type & 0x8020c0) ? (p1->second.type & 0x8020c1) : (p1->second.type & 0x31); int type1 = (p1->second.type & 0x48020c0) ? (p1->second.type & 0x48020c1) : (p1->second.type & 0x31);
int type2 = (p2->second.type & 0x8020c0) ? (p2->second.type & 0x8020c1) : (p2->second.type & 0x31); int type2 = (p2->second.type & 0x48020c0) ? (p2->second.type & 0x48020c1) : (p2->second.type & 0x31);
if(type1 != type2) if(type1 != type2)
return type1 < type2; return type1 < type2;
return p1->first < p2->first; return p1->first < p2->first;
...@@ -243,8 +261,8 @@ bool ClientCard::deck_sort_def(code_pointer p1, code_pointer p2) { ...@@ -243,8 +261,8 @@ bool ClientCard::deck_sort_def(code_pointer p1, code_pointer p2) {
return p1->second.attack > p2->second.attack; return p1->second.attack > p2->second.attack;
if(p1->second.level != p2->second.level) if(p1->second.level != p2->second.level)
return p1->second.level > p2->second.level; return p1->second.level > p2->second.level;
int type1 = (p1->second.type & 0x8020c0) ? (p1->second.type & 0x8020c1) : (p1->second.type & 0x31); int type1 = (p1->second.type & 0x48020c0) ? (p1->second.type & 0x48020c1) : (p1->second.type & 0x31);
int type2 = (p2->second.type & 0x8020c0) ? (p2->second.type & 0x8020c1) : (p2->second.type & 0x31); int type2 = (p2->second.type & 0x48020c0) ? (p2->second.type & 0x48020c1) : (p2->second.type & 0x31);
if(type1 != type2) if(type1 != type2)
return type1 < type2; return type1 < type2;
return p1->first < p2->first; return p1->first < p2->first;
......
...@@ -20,6 +20,7 @@ struct CardData { ...@@ -20,6 +20,7 @@ struct CardData {
int defense; int defense;
unsigned int lscale; unsigned int lscale;
unsigned int rscale; unsigned int rscale;
unsigned int link_marker;
}; };
struct CardDataC { struct CardDataC {
unsigned int code; unsigned int code;
...@@ -33,6 +34,7 @@ struct CardDataC { ...@@ -33,6 +34,7 @@ struct CardDataC {
int defense; int defense;
unsigned int lscale; unsigned int lscale;
unsigned int rscale; unsigned int rscale;
unsigned int link_marker;
unsigned int ot; unsigned int ot;
unsigned int category; unsigned int category;
}; };
...@@ -45,7 +47,6 @@ typedef std::unordered_map<unsigned int, CardDataC>::const_iterator code_pointer ...@@ -45,7 +47,6 @@ typedef std::unordered_map<unsigned int, CardDataC>::const_iterator code_pointer
class ClientCard { class ClientCard {
public: public:
irr::video::ITexture* curTexture;
irr::core::matrix4 mTransform; irr::core::matrix4 mTransform;
irr::core::vector3df curPos; irr::core::vector3df curPos;
irr::core::vector3df curRot; irr::core::vector3df curRot;
...@@ -61,6 +62,7 @@ public: ...@@ -61,6 +62,7 @@ public:
bool is_selected; bool is_selected;
bool is_showequip; bool is_showequip;
bool is_showtarget; bool is_showtarget;
bool is_showchaintarget;
bool is_highlighting; bool is_highlighting;
bool is_reversed; bool is_reversed;
u32 code; u32 code;
...@@ -69,6 +71,7 @@ public: ...@@ -69,6 +71,7 @@ public:
u32 type; u32 type;
u32 level; u32 level;
u32 rank; u32 rank;
u32 link;
u32 attribute; u32 attribute;
u32 race; u32 race;
s32 attack; s32 attack;
...@@ -77,6 +80,7 @@ public: ...@@ -77,6 +80,7 @@ public:
s32 base_defense; s32 base_defense;
u32 lscale; u32 lscale;
u32 rscale; u32 rscale;
u32 link_marker;
u32 reason; u32 reason;
u32 select_seq; u32 select_seq;
u8 owner; u8 owner;
...@@ -102,6 +106,7 @@ public: ...@@ -102,6 +106,7 @@ public:
wchar_t atkstring[16]; wchar_t atkstring[16];
wchar_t defstring[16]; wchar_t defstring[16];
wchar_t lvstring[16]; wchar_t lvstring[16];
wchar_t linkstring[16];
wchar_t lscstring[16]; wchar_t lscstring[16];
wchar_t rscstring[16]; wchar_t rscstring[16];
......
This diff is collapsed.
...@@ -3,12 +3,13 @@ ...@@ -3,12 +3,13 @@
#include "config.h" #include "config.h"
#include <vector> #include <vector>
#include <set>
namespace ygo { namespace ygo {
class ClientCard; class ClientCard;
struct ChainInfo{ struct ChainInfo {
irr::core::vector3df chain_pos; irr::core::vector3df chain_pos;
ClientCard* chain_card; ClientCard* chain_card;
int code; int code;
...@@ -17,6 +18,7 @@ struct ChainInfo{ ...@@ -17,6 +18,7 @@ struct ChainInfo{
int location; int location;
int sequence; int sequence;
bool solved; bool solved;
std::set<ClientCard*> target;
}; };
class ClientField: public irr::IEventReceiver { class ClientField: public irr::IEventReceiver {
...@@ -41,7 +43,7 @@ public: ...@@ -41,7 +43,7 @@ public:
std::vector<int> select_options; std::vector<int> select_options;
std::vector<ChainInfo> chains; std::vector<ChainInfo> chains;
int extra_p_count[2]; int extra_p_count[2];
size_t selected_option; size_t selected_option;
ClientCard* attacker; ClientCard* attacker;
ClientCard* attack_target; ClientCard* attack_target;
...@@ -79,7 +81,7 @@ public: ...@@ -79,7 +81,7 @@ public:
bool last_chain; bool last_chain;
bool deck_reversed; bool deck_reversed;
bool conti_selecting; bool conti_selecting;
ClientField(); ClientField();
void Clear(); void Clear();
void Initial(int player, int deckc, int extrac); void Initial(int player, int deckc, int extrac);
...@@ -96,7 +98,7 @@ public: ...@@ -96,7 +98,7 @@ public:
void ShowLocationCard(); void ShowLocationCard();
void ReplaySwap(); void ReplaySwap();
void RefreshAllCards(); void RefreshAllCards();
void GetChainLocation(int controler, int location, int sequence, irr::core::vector3df* t); void GetChainLocation(int controler, int location, int sequence, irr::core::vector3df* t);
void GetCardLocation(ClientCard* pcard, irr::core::vector3df* t, irr::core::vector3df* r, bool setTrans = false); void GetCardLocation(ClientCard* pcard, irr::core::vector3df* t, irr::core::vector3df* r, bool setTrans = false);
void MoveCard(ClientCard* pcard, int frame); void MoveCard(ClientCard* pcard, int frame);
...@@ -128,10 +130,12 @@ public: ...@@ -128,10 +130,12 @@ public:
int list_command; int list_command;
virtual bool OnEvent(const irr::SEvent& event); virtual bool OnEvent(const irr::SEvent& event);
virtual bool OnCommonEvent(const irr::SEvent& event);
void GetHoverField(int x, int y); void GetHoverField(int x, int y);
void ShowMenu(int flag, int x, int y); void ShowMenu(int flag, int x, int y);
void UpdateChainButtons(); void UpdateChainButtons();
void ShowCancelOrFinishButton(int buttonOp); void ShowCancelOrFinishButton(int buttonOp);
void SetShowMark(ClientCard* pcard, bool enable);
void SetResponseSelectedCards() const; void SetResponseSelectedCards() const;
}; };
......
#ifndef __CONFIG_H #ifndef __CONFIG_H
#define __CONFIG_H #define __CONFIG_H
#pragma once #pragma once
#define _IRR_STATIC_LIB_ #define _IRR_STATIC_LIB_
#define _IRR_COMPILE_WITH_DX9_DEV_PACK #define IRR_COMPILE_WITH_DX9_DEV_PACK
#ifdef _WIN32 #ifdef _WIN32
#include <WinSock2.h> #include <WinSock2.h>
#include <windows.h> #include <windows.h>
#include <ws2tcpip.h> #include <ws2tcpip.h>
#ifdef _MSC_VER #ifdef _MSC_VER
#define myswprintf _swprintf #define myswprintf _swprintf
#else #else
#define myswprintf swprintf #define myswprintf swprintf
#endif #endif
#define socklen_t int #define socklen_t int
#else //_WIN32 #else //_WIN32
#include <errno.h> #include <errno.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/ioctl.h> #include <sys/ioctl.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <netdb.h> #include <netdb.h>
#include <unistd.h> #include <unistd.h>
#include <locale.h>
#define SD_BOTH 2
#define SOCKET int #define SD_BOTH 2
#define closesocket close #define SOCKET int
#define INVALID_SOCKET -1 #define closesocket close
#define SOCKET_ERROR -1 #define INVALID_SOCKET -1
#define SOCKADDR_IN sockaddr_in #define SOCKET_ERROR -1
#define SOCKADDR sockaddr #define SOCKADDR_IN sockaddr_in
#define SOCKET_ERRNO() (errno) #define SOCKADDR sockaddr
#define SOCKET_ERRNO() (errno)
#include <wchar.h>
#define myswprintf(buf, fmt, ...) swprintf(buf, 4096, fmt, ##__VA_ARGS__) #include <wchar.h>
inline int _wtoi(const wchar_t * s) { #define myswprintf(buf, fmt, ...) swprintf(buf, 4096, fmt, ##__VA_ARGS__)
wchar_t * endptr; inline int _wtoi(const wchar_t * s) {
return (int)wcstol(s, &endptr, 10); wchar_t * endptr;
} return (int)wcstol(s, &endptr, 10);
#endif }
#endif
#include <irrlicht.h>
#include <GL/gl.h> #include <irrlicht.h>
#include <GL/glu.h> #include <GL/gl.h>
#include "CGUITTFont.h" #include <GL/glu.h>
#include "CGUIImageButton.h" #include "CGUITTFont.h"
#include <iostream> #include "CGUIImageButton.h"
#include <stdio.h> #include <iostream>
#include <stdlib.h> #include <stdio.h>
#include <memory.h> #include <stdlib.h>
#include <time.h> #include <memory.h>
#include "bufferio.h" #include <time.h>
#include "mymutex.h" #include "bufferio.h"
#include "mysignal.h" #include "mymutex.h"
#include "mythread.h" #include "mysignal.h"
#include "../ocgcore/ocgapi.h" #include "mythread.h"
#include "../ocgcore/card.h" #include "../ocgcore/ocgapi.h"
#include "../ocgcore/card.h"
using namespace irr;
using namespace core; using namespace irr;
using namespace scene; using namespace core;
using namespace video; using namespace scene;
using namespace io; using namespace video;
using namespace gui; using namespace io;
using namespace gui;
extern const unsigned short PRO_VERSION;
extern int enable_log; extern const unsigned short PRO_VERSION;
extern bool exit_on_return; extern int enable_log;
extern bool open_file; extern bool exit_on_return;
extern wchar_t open_file_name[256]; extern bool open_file;
extern wchar_t open_file_name[256];
#endif
#endif
...@@ -31,6 +31,11 @@ bool DataManager::LoadDB(const char* file) { ...@@ -31,6 +31,11 @@ bool DataManager::LoadDB(const char* file) {
cd.type = sqlite3_column_int(pStmt, 4); cd.type = sqlite3_column_int(pStmt, 4);
cd.attack = sqlite3_column_int(pStmt, 5); cd.attack = sqlite3_column_int(pStmt, 5);
cd.defense = sqlite3_column_int(pStmt, 6); cd.defense = sqlite3_column_int(pStmt, 6);
if(cd.type & TYPE_LINK) {
cd.link_marker = cd.defense;
cd.defense = 0;
} else
cd.link_marker = 0;
unsigned int level = sqlite3_column_int(pStmt, 7); unsigned int level = sqlite3_column_int(pStmt, 7);
cd.level = level & 0xff; cd.level = level & 0xff;
cd.lscale = (level >> 24) & 0xff; cd.lscale = (level >> 24) & 0xff;
...@@ -73,39 +78,26 @@ bool DataManager::LoadStrings(const char* file) { ...@@ -73,39 +78,26 @@ bool DataManager::LoadStrings(const char* file) {
char linebuf[256]; char linebuf[256];
char strbuf[256]; char strbuf[256];
int value; int value;
fseek(fp, 0, SEEK_END); while(fgets(linebuf, 256, fp)) {
int fsize = ftell(fp);
fseek(fp, 0, SEEK_SET);
fgets(linebuf, 256, fp);
while(ftell(fp) < fsize) {
fgets(linebuf, 256, fp);
if(linebuf[0] != '!') if(linebuf[0] != '!')
continue; continue;
sscanf(linebuf, "!%s", strbuf); sscanf(linebuf, "!%s", strbuf);
if(!strcmp(strbuf, "system")) { if(!strcmp(strbuf, "system")) {
sscanf(&linebuf[7], "%d %240[^\n]", &value, strbuf); sscanf(&linebuf[7], "%d %240[^\n]", &value, strbuf);
int len = BufferIO::DecodeUTF8(strbuf, strBuffer); BufferIO::DecodeUTF8(strbuf, strBuffer);
wchar_t* pbuf = new wchar_t[len + 1]; _sysStrings[value] = strBuffer;
wcscpy(pbuf, strBuffer);
_sysStrings[value] = pbuf;
} else if(!strcmp(strbuf, "victory")) { } else if(!strcmp(strbuf, "victory")) {
sscanf(&linebuf[8], "%x %240[^\n]", &value, strbuf); sscanf(&linebuf[8], "%x %240[^\n]", &value, strbuf);
int len = BufferIO::DecodeUTF8(strbuf, strBuffer); BufferIO::DecodeUTF8(strbuf, strBuffer);
wchar_t* pbuf = new wchar_t[len + 1]; _victoryStrings[value] = strBuffer;
wcscpy(pbuf, strBuffer);
_victoryStrings[value] = pbuf;
} else if(!strcmp(strbuf, "counter")) { } else if(!strcmp(strbuf, "counter")) {
sscanf(&linebuf[8], "%x %240[^\n]", &value, strbuf); sscanf(&linebuf[8], "%x %240[^\n]", &value, strbuf);
int len = BufferIO::DecodeUTF8(strbuf, strBuffer); BufferIO::DecodeUTF8(strbuf, strBuffer);
wchar_t* pbuf = new wchar_t[len + 1]; _counterStrings[value] = strBuffer;
wcscpy(pbuf, strBuffer);
_counterStrings[value] = pbuf;
} else if(!strcmp(strbuf, "setname")) { } else if(!strcmp(strbuf, "setname")) {
sscanf(&linebuf[8], "%x %240[^\t\n]", &value, strbuf);//using tab for comment sscanf(&linebuf[8], "%x %240[^\t\n]", &value, strbuf);//using tab for comment
int len = BufferIO::DecodeUTF8(strbuf, strBuffer); BufferIO::DecodeUTF8(strbuf, strBuffer);
wchar_t* pbuf = new wchar_t[len + 1]; _setnameStrings[value] = strBuffer;
wcscpy(pbuf, strBuffer);
_setnameStrings[value] = pbuf;
} }
} }
fclose(fp); fclose(fp);
...@@ -170,33 +162,35 @@ const wchar_t* DataManager::GetDesc(int strCode) { ...@@ -170,33 +162,35 @@ const wchar_t* DataManager::GetDesc(int strCode) {
return unknown_string; return unknown_string;
} }
const wchar_t* DataManager::GetSysString(int code) { const wchar_t* DataManager::GetSysString(int code) {
if(code < 0 || code >= 2048 || _sysStrings[code] == 0) if(code < 0 || code >= 2048)
return unknown_string; return unknown_string;
return _sysStrings[code]; auto csit = _sysStrings.find(code);
if(csit == _sysStrings.end())
return unknown_string;
return csit->second.c_str();
} }
const wchar_t* DataManager::GetVictoryString(int code) { const wchar_t* DataManager::GetVictoryString(int code) {
auto csit = _victoryStrings.find(code); auto csit = _victoryStrings.find(code);
if(csit == _victoryStrings.end()) if(csit == _victoryStrings.end())
return unknown_string; return unknown_string;
return csit->second; return csit->second.c_str();
} }
const wchar_t* DataManager::GetCounterName(int code) { const wchar_t* DataManager::GetCounterName(int code) {
auto csit = _counterStrings.find(code); auto csit = _counterStrings.find(code);
if(csit == _counterStrings.end()) if(csit == _counterStrings.end())
return unknown_string; return unknown_string;
return csit->second; return csit->second.c_str();
} }
const wchar_t* DataManager::GetSetName(int code) { const wchar_t* DataManager::GetSetName(int code) {
auto csit = _setnameStrings.find(code); auto csit = _setnameStrings.find(code);
if(csit == _setnameStrings.end()) if(csit == _setnameStrings.end())
return NULL; return NULL;
return csit->second; return csit->second.c_str();
} }
unsigned int DataManager::GetSetCode(const wchar_t* setname) { unsigned int DataManager::GetSetCode(const wchar_t* setname) {
wchar_t strbuff[256];
for(auto csit = _setnameStrings.begin(); csit != _setnameStrings.end(); ++csit) { for(auto csit = _setnameStrings.begin(); csit != _setnameStrings.end(); ++csit) {
swscanf(csit->second, L"%[^|]", strbuff);//setname|extra info auto xpos = csit->second.find_first_of(L'|');//setname|extra info
if(wcscmp(strbuff, setname) == 0) if(csit->second.compare(0, xpos, setname) == 0)
return csit->first; return csit->first;
} }
return 0; return 0;
...@@ -267,7 +261,7 @@ const wchar_t* DataManager::FormatType(int type) { ...@@ -267,7 +261,7 @@ const wchar_t* DataManager::FormatType(int type) {
wchar_t* p = tpBuffer; wchar_t* p = tpBuffer;
unsigned filter = 1; unsigned filter = 1;
int i = 1050; int i = 1050;
for(; filter != 0x4000000; filter <<= 1, ++i) { for(; filter != 0x8000000; filter <<= 1, ++i) {
if(type & filter) { if(type & filter) {
BufferIO::CopyWStrRef(GetSysString(i), p, 16); BufferIO::CopyWStrRef(GetSysString(i), p, 16);
*p = L'|'; *p = L'|';
...@@ -285,7 +279,7 @@ const wchar_t* DataManager::FormatSetName(unsigned long long setcode) { ...@@ -285,7 +279,7 @@ const wchar_t* DataManager::FormatSetName(unsigned long long setcode) {
for(int i = 0; i < 4; ++i) { for(int i = 0; i < 4; ++i) {
const wchar_t* setname = GetSetName((setcode >> i * 16) & 0xffff); const wchar_t* setname = GetSetName((setcode >> i * 16) & 0xffff);
if(setname) { if(setname) {
BufferIO::CopyWStrRef(setname, p, 16); BufferIO::CopyWStrRef(setname, p, 32);
*p = L'|'; *p = L'|';
*++p = 0; *++p = 0;
} }
...@@ -296,6 +290,27 @@ const wchar_t* DataManager::FormatSetName(unsigned long long setcode) { ...@@ -296,6 +290,27 @@ const wchar_t* DataManager::FormatSetName(unsigned long long setcode) {
return unknown_string; return unknown_string;
return scBuffer; return scBuffer;
} }
const wchar_t* DataManager::FormatLinkMarker(int link_marker) {
wchar_t* p = lmBuffer;
*p = 0;
if(link_marker & LINK_MARKER_TOP_LEFT)
BufferIO::CopyWStrRef(L"[\u2196]", p, 4);
if(link_marker & LINK_MARKER_TOP)
BufferIO::CopyWStrRef(L"[\u2191]", p, 4);
if(link_marker & LINK_MARKER_TOP_RIGHT)
BufferIO::CopyWStrRef(L"[\u2197]", p, 4);
if(link_marker & LINK_MARKER_LEFT)
BufferIO::CopyWStrRef(L"[\u2190]", p, 4);
if(link_marker & LINK_MARKER_RIGHT)
BufferIO::CopyWStrRef(L"[\u2192]", p, 4);
if(link_marker & LINK_MARKER_BOTTOM_LEFT)
BufferIO::CopyWStrRef(L"[\u2199]", p, 4);
if(link_marker & LINK_MARKER_BOTTOM)
BufferIO::CopyWStrRef(L"[\u2193]", p, 4);
if(link_marker & LINK_MARKER_BOTTOM_RIGHT)
BufferIO::CopyWStrRef(L"[\u2198]", p, 4);
return lmBuffer;
}
int DataManager::CardReader(int code, void* pData) { int DataManager::CardReader(int code, void* pData) {
if(!dataManager.GetData(code, (CardData*)pData)) if(!dataManager.GetData(code, (CardData*)pData))
memset(pData, 0, sizeof(CardData)); memset(pData, 0, sizeof(CardData));
......
...@@ -31,25 +31,27 @@ public: ...@@ -31,25 +31,27 @@ public:
const wchar_t* FormatRace(int race); const wchar_t* FormatRace(int race);
const wchar_t* FormatType(int type); const wchar_t* FormatType(int type);
const wchar_t* FormatSetName(unsigned long long setcode); const wchar_t* FormatSetName(unsigned long long setcode);
const wchar_t* FormatLinkMarker(int link_marker);
std::unordered_map<unsigned int, CardDataC> _datas; std::unordered_map<unsigned int, CardDataC> _datas;
std::unordered_map<unsigned int, CardString> _strings; std::unordered_map<unsigned int, CardString> _strings;
std::unordered_map<unsigned int, wchar_t*> _counterStrings; std::unordered_map<unsigned int, std::wstring> _counterStrings;
std::unordered_map<unsigned int, wchar_t*> _victoryStrings; std::unordered_map<unsigned int, std::wstring> _victoryStrings;
std::unordered_map<unsigned int, wchar_t*> _setnameStrings; std::unordered_map<unsigned int, std::wstring> _setnameStrings;
std::unordered_map<unsigned int, std::wstring> _sysStrings;
wchar_t* _sysStrings[2048];
wchar_t numStrings[256][4]; wchar_t numStrings[256][4];
wchar_t numBuffer[6]; wchar_t numBuffer[6];
wchar_t attBuffer[128]; wchar_t attBuffer[128];
wchar_t racBuffer[128]; wchar_t racBuffer[128];
wchar_t tpBuffer[128]; wchar_t tpBuffer[128];
wchar_t scBuffer[128]; wchar_t scBuffer[128];
wchar_t lmBuffer[32];
static wchar_t strBuffer[4096]; static wchar_t strBuffer[4096];
static const wchar_t* unknown_string; static const wchar_t* unknown_string;
static int CardReader(int, void*); static int CardReader(int, void*);
}; };
extern DataManager dataManager; extern DataManager dataManager;
......
This diff is collapsed.
...@@ -11,11 +11,26 @@ namespace ygo { ...@@ -11,11 +11,26 @@ namespace ygo {
class DeckBuilder: public irr::IEventReceiver { class DeckBuilder: public irr::IEventReceiver {
public: public:
virtual bool OnEvent(const irr::SEvent& event); virtual bool OnEvent(const irr::SEvent& event);
void Initialize();
void Terminate();
void GetHoveredCard();
void FilterCards(); void FilterCards();
void StartFilter();
void ClearFilter(); void ClearFilter();
void InstantSearch();
void ClearSearch(); void ClearSearch();
void SortList(); void SortList();
bool CardNameContains(const wchar_t *haystack, const wchar_t *needle);
bool push_main(code_pointer pointer, int seq = -1);
bool push_extra(code_pointer pointer, int seq = -1);
bool push_side(code_pointer pointer, int seq = -1);
void pop_main(int seq);
void pop_extra(int seq);
void pop_side(int seq);
bool check_limit(code_pointer pointer);
long long filter_effect; long long filter_effect;
unsigned int filter_type; unsigned int filter_type;
unsigned int filter_type2; unsigned int filter_type2;
...@@ -29,21 +44,26 @@ public: ...@@ -29,21 +44,26 @@ public:
unsigned int filter_lv; unsigned int filter_lv;
unsigned int filter_scltype; unsigned int filter_scltype;
unsigned int filter_scl; unsigned int filter_scl;
unsigned int filter_marks;
int filter_lm; int filter_lm;
position2di mouse_pos;
int hovered_code; int hovered_code;
int hovered_pos; int hovered_pos;
int hovered_seq; int hovered_seq;
int is_lastcard;
int click_pos; int click_pos;
bool is_draging; bool is_draging;
bool is_starting_dragging;
int dragx; int dragx;
int dragy; int dragy;
size_t pre_mainc; size_t pre_mainc;
size_t pre_extrac; size_t pre_extrac;
size_t pre_sidec; size_t pre_sidec;
code_pointer draging_pointer; code_pointer draging_pointer;
bool is_deleting; int prev_deck;
bool is_clearing; s32 prev_operation;
bool is_modified;
std::unordered_map<int, int>* filterList; std::unordered_map<int, int>* filterList;
std::vector<code_pointer> results; std::vector<code_pointer> results;
wchar_t result_string[8]; wchar_t result_string[8];
......
...@@ -13,12 +13,7 @@ void DeckManager::LoadLFList() { ...@@ -13,12 +13,7 @@ void DeckManager::LoadLFList() {
char linebuf[256]; char linebuf[256];
wchar_t strBuffer[256]; wchar_t strBuffer[256];
if(fp) { if(fp) {
fseek(fp, 0, SEEK_END); while(fgets(linebuf, 256, fp)) {
int fsize = ftell(fp);
fseek(fp, 0, SEEK_SET);
fgets(linebuf, 256, fp);
while(ftell(fp) < fsize) {
fgets(linebuf, 256, fp);
if(linebuf[0] == '#') if(linebuf[0] == '#')
continue; continue;
int p = 0, sa = 0, code, count; int p = 0, sa = 0, code, count;
...@@ -84,7 +79,7 @@ int DeckManager::CheckLFList(Deck& deck, int lfhash, bool allow_ocg, bool allow_ ...@@ -84,7 +79,7 @@ int DeckManager::CheckLFList(Deck& deck, int lfhash, bool allow_ocg, bool allow_
code_pointer cit = deck.main[i]; code_pointer cit = deck.main[i];
if((!allow_ocg && (cit->second.ot == 0x1)) || (!allow_tcg && (cit->second.ot == 0x2))) if((!allow_ocg && (cit->second.ot == 0x1)) || (!allow_tcg && (cit->second.ot == 0x2)))
return cit->first; return cit->first;
if(cit->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_TOKEN)) if(cit->second.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_TOKEN | TYPE_LINK))
return 1; return 1;
int code = cit->second.alias ? cit->second.alias : cit->first; int code = cit->second.alias ? cit->second.alias : cit->first;
ccount[code]++; ccount[code]++;
...@@ -127,7 +122,7 @@ void DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec) { ...@@ -127,7 +122,7 @@ void DeckManager::LoadDeck(Deck& deck, int* dbuf, int mainc, int sidec) {
continue; continue;
if(cd.type & TYPE_TOKEN) if(cd.type & TYPE_TOKEN)
continue; continue;
else if(cd.type & 0x802040 && deck.extra.size() < 15) { else if(cd.type & (TYPE_FUSION | TYPE_SYNCHRO | TYPE_XYZ | TYPE_LINK) && deck.extra.size() < 15) {
deck.extra.push_back(dataManager.GetCodePointer(code)); //verified by GetData() deck.extra.push_back(dataManager.GetCodePointer(code)); //verified by GetData()
} else if(deck.main.size() < 60) { } else if(deck.main.size() < 60) {
deck.main.push_back(dataManager.GetCodePointer(code)); deck.main.push_back(dataManager.GetCodePointer(code));
...@@ -191,12 +186,7 @@ bool DeckManager::LoadDeck(const wchar_t* file) { ...@@ -191,12 +186,7 @@ bool DeckManager::LoadDeck(const wchar_t* file) {
int cardlist[128]; int cardlist[128];
bool is_side = false; bool is_side = false;
char linebuf[256]; char linebuf[256];
fseek(fp, 0, SEEK_END); while(fgets(linebuf, 256, fp) && ct < 128) {
int fsize = ftell(fp);
fseek(fp, 0, SEEK_SET);
fgets(linebuf, 256, fp);
while(ftell(fp) < fsize && ct < 128) {
fgets(linebuf, 256, fp);
if(linebuf[0] == '!') { if(linebuf[0] == '!') {
is_side = true; is_side = true;
continue; continue;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -2,6 +2,9 @@ ...@@ -2,6 +2,9 @@
#include "game.h" #include "game.h"
#include "data_manager.h" #include "data_manager.h"
#include <event2/thread.h> #include <event2/thread.h>
#ifdef __APPLE__
#import <CoreFoundation/CoreFoundation.h>
#endif
int enable_log = 0; int enable_log = 0;
bool exit_on_return = false; bool exit_on_return = false;
...@@ -33,12 +36,26 @@ void ClickButton(irr::gui::IGUIElement* btn) { ...@@ -33,12 +36,26 @@ void ClickButton(irr::gui::IGUIElement* btn) {
} }
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
#ifndef _WIN32
setlocale(LC_CTYPE, "UTF-8");
#endif
#ifdef __APPLE__
CFURLRef bundle_url = CFBundleCopyBundleURL(CFBundleGetMainBundle());
CFURLRef bundle_base_url = CFURLCreateCopyDeletingLastPathComponent(NULL, bundle_url);
CFRelease(bundle_url);
CFStringRef path = CFURLCopyFileSystemPath(bundle_base_url, kCFURLPOSIXPathStyle);
CFRelease(bundle_base_url);
chdir(CFStringGetCStringPtr(path, kCFStringEncodingUTF8));
CFRelease(path);
#endif //__APPLE__
#ifdef _WIN32 #ifdef _WIN32
#ifndef _DEBUG
wchar_t exepath[MAX_PATH]; wchar_t exepath[MAX_PATH];
GetModuleFileNameW(NULL, exepath, MAX_PATH); GetModuleFileNameW(NULL, exepath, MAX_PATH);
wchar_t* p = wcsrchr(exepath, '\\'); wchar_t* p = wcsrchr(exepath, '\\');
*p = '\0'; *p = '\0';
SetCurrentDirectoryW(exepath); SetCurrentDirectoryW(exepath);
#endif //_DEBUG
#endif //_WIN32 #endif //_WIN32
#ifdef _WIN32 #ifdef _WIN32
WORD wVersionRequested; WORD wVersionRequested;
...@@ -94,19 +111,30 @@ int main(int argc, char* argv[]) { ...@@ -94,19 +111,30 @@ int main(int argc, char* argv[]) {
} else if(!strcmp(argv[i], "-k")) { // Keep on return } else if(!strcmp(argv[i], "-k")) { // Keep on return
exit_on_return = false; exit_on_return = false;
keep_on_return = true; keep_on_return = true;
} else if(!strcmp(argv[i], "-d")) { // Deck
if(i + 2 < argc) { // select deck
++i;
GetParameterW(ygo::mainGame->gameConf.lastdeck, &argv[i][0]);
continue;
} else { // open deck
exit_on_return = !keep_on_return;
if(i < argc) {
open_file = true;
GetParameterW(open_file_name, &argv[i + 1][0]);
}
ClickButton(ygo::mainGame->btnDeckEdit);
break;
}
} else if(!strcmp(argv[i], "-c")) { // Create host
exit_on_return = !keep_on_return;
ygo::mainGame->HideElement(ygo::mainGame->wMainMenu);
ClickButton(ygo::mainGame->btnHostConfirm);
break;
} else if(!strcmp(argv[i], "-j")) { // Join host } else if(!strcmp(argv[i], "-j")) { // Join host
exit_on_return = !keep_on_return; exit_on_return = !keep_on_return;
ClickButton(ygo::mainGame->btnLanMode); ClickButton(ygo::mainGame->btnLanMode);
ClickButton(ygo::mainGame->btnJoinHost); ClickButton(ygo::mainGame->btnJoinHost);
break; break;
} else if(!strcmp(argv[i], "-d")) { // Deck
exit_on_return = !keep_on_return;
if(i < argc) {
open_file = true;
GetParameterW(open_file_name, &argv[i + 1][0]);
}
ClickButton(ygo::mainGame->btnDeckEdit);
break;
} else if(!strcmp(argv[i], "-r")) { // Replay } else if(!strcmp(argv[i], "-r")) { // Replay
exit_on_return = !keep_on_return; exit_on_return = !keep_on_return;
if(i < argc) { if(i < argc) {
......
This diff is collapsed.
...@@ -13,6 +13,7 @@ public: ...@@ -13,6 +13,7 @@ public:
void SetDevice(irr::IrrlichtDevice* dev); void SetDevice(irr::IrrlichtDevice* dev);
void ClearTexture(); void ClearTexture();
void RemoveTexture(int code); void RemoveTexture(int code);
irr::video::ITexture* GetTextureFromFile(char* file, s32 width, s32 height);
irr::video::ITexture* GetTexture(int code); irr::video::ITexture* GetTexture(int code);
irr::video::ITexture* GetTextureThumb(int code); irr::video::ITexture* GetTextureThumb(int code);
irr::video::ITexture* GetTextureField(int code); irr::video::ITexture* GetTextureField(int code);
...@@ -34,14 +35,15 @@ public: ...@@ -34,14 +35,15 @@ public:
irr::video::ITexture* tMask; irr::video::ITexture* tMask;
irr::video::ITexture* tEquip; irr::video::ITexture* tEquip;
irr::video::ITexture* tTarget; irr::video::ITexture* tTarget;
irr::video::ITexture* tChainTarget;
irr::video::ITexture* tLim; irr::video::ITexture* tLim;
irr::video::ITexture* tOT; irr::video::ITexture* tOT;
irr::video::ITexture* tHand[3]; irr::video::ITexture* tHand[3];
irr::video::ITexture* tBackGround; irr::video::ITexture* tBackGround;
irr::video::ITexture* tBackGround_menu; irr::video::ITexture* tBackGround_menu;
irr::video::ITexture* tBackGround_deck; irr::video::ITexture* tBackGround_deck;
irr::video::ITexture* tField; irr::video::ITexture* tField[2];
irr::video::ITexture* tFieldTransparent; irr::video::ITexture* tFieldTransparent[2];
}; };
extern ImageManager imageManager; extern ImageManager imageManager;
......
This diff is collapsed.
...@@ -19,12 +19,18 @@ public: ...@@ -19,12 +19,18 @@ public:
S3DVertex vFieldSpell[4]; S3DVertex vFieldSpell[4];
S3DVertex vFieldSpell1[4]; S3DVertex vFieldSpell1[4];
S3DVertex vFieldSpell2[4]; S3DVertex vFieldSpell2[4];
S3DVertex vBackLine[76]; //S3DVertex vBackLine[76];
S3DVertex vFields[140]; S3DVertex vFieldDeck[2][4];
S3DVertex vFieldGrave[2][2][4];
S3DVertex vFieldExtra[2][4];
S3DVertex vFieldRemove[2][2][4];
S3DVertex vFieldMzone[2][7][4];
S3DVertex vFieldSzone[2][8][2][4];
irr::core::vector3df vFieldContiAct[4];
S3DVertex vArrow[40]; S3DVertex vArrow[40];
SColor c2d[4]; SColor c2d[4];
u16 iRectangle[6]; u16 iRectangle[6];
u16 iBackLine[116]; //u16 iBackLine[116];
u16 iArrow[40]; u16 iArrow[40];
irr::video::SMaterial mCard; irr::video::SMaterial mCard;
irr::video::SMaterial mTexture; irr::video::SMaterial mTexture;
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Subproject commit 2182420064fd752750c282b64217183563b13453 Subproject commit 1f1d9cba25969e85760185a3fbb6f2070beba1aa
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment