Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
REIKAI
ygopro
Commits
13b065c9
Commit
13b065c9
authored
Jul 30, 2018
by
nanahira
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' into another
parents
bedbbd0c
6980d7aa
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
219 additions
and
113 deletions
+219
-113
.travis.yml
.travis.yml
+3
-2
cards.cdb
cards.cdb
+0
-0
gframe/client_field.cpp
gframe/client_field.cpp
+4
-3
gframe/deck_con.cpp
gframe/deck_con.cpp
+15
-10
gframe/drawing.cpp
gframe/drawing.cpp
+0
-1
gframe/duelclient.cpp
gframe/duelclient.cpp
+7
-4
gframe/event_handler.cpp
gframe/event_handler.cpp
+24
-2
gframe/game.cpp
gframe/game.cpp
+60
-53
gframe/game.h
gframe/game.h
+11
-0
gframe/gframe.cpp
gframe/gframe.cpp
+1
-1
gframe/image_manager.cpp
gframe/image_manager.cpp
+72
-33
gframe/image_manager.h
gframe/image_manager.h
+3
-0
gframe/replay_mode.cpp
gframe/replay_mode.cpp
+1
-1
gframe/single_mode.cpp
gframe/single_mode.cpp
+2
-0
ocgcore
ocgcore
+1
-1
script
script
+1
-1
strings.conf
strings.conf
+14
-1
No files found.
.travis.yml
View file @
13b065c9
...
@@ -59,9 +59,10 @@ script:
...
@@ -59,9 +59,10 @@ script:
-
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./premake5 gmake --cc=clang; fi
-
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then ./premake5 gmake --cc=clang; fi
-
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./premake5 gmake; fi
-
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then ./premake5 gmake; fi
-
cd build
-
cd build
-
make config=release ygopro -j4
-
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then make config=release ygopro -j4; fi
-
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then make config=debug ygopro -j4; fi
-
cd ..
-
cd ..
-
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then mv -f bin/
release
/ygopro ./; strip ygopro;
-
if [[ "$TRAVIS_OS_NAME" == "linux" ]]; then mv -f bin/
debug
/ygopro ./; strip ygopro;
fi
fi
-
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
-
if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then
mkdir -p ygopro.app/Contents/MacOS;
mkdir -p ygopro.app/Contents/MacOS;
...
...
cards.cdb
View file @
13b065c9
No preview for this file type
gframe/client_field.cpp
View file @
13b065c9
...
@@ -383,6 +383,7 @@ void ClientField::ClearChainSelect() {
...
@@ -383,6 +383,7 @@ void ClientField::ClearChainSelect() {
(
*
cit
)
->
is_selected
=
false
;
(
*
cit
)
->
is_selected
=
false
;
}
}
conti_cards
.
clear
();
conti_cards
.
clear
();
deck_act
=
false
;
grave_act
=
false
;
grave_act
=
false
;
remove_act
=
false
;
remove_act
=
false
;
extra_act
=
false
;
extra_act
=
false
;
...
@@ -407,7 +408,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
...
@@ -407,7 +408,7 @@ void ClientField::ShowSelectCard(bool buttonok, bool chain) {
else
if
(
conti_selecting
)
else
if
(
conti_selecting
)
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardSelect
[
i
],
selectable_cards
[
i
]
->
chain_code
));
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardSelect
[
i
],
selectable_cards
[
i
]
->
chain_code
));
else
else
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
tCover
[
0
]);
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
tCover
[
0
]
,
rect
<
s32
>
(
0
,
0
,
CARD_IMG_WIDTH
,
CARD_IMG_HEIGHT
)
);
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardSelect
[
i
]
->
setPressed
(
false
);
mainGame
->
btnCardSelect
[
i
]
->
setPressed
(
false
);
mainGame
->
btnCardSelect
[
i
]
->
setVisible
(
true
);
mainGame
->
btnCardSelect
[
i
]
->
setVisible
(
true
);
...
@@ -493,7 +494,7 @@ void ClientField::ShowChainCard() {
...
@@ -493,7 +494,7 @@ void ClientField::ShowChainCard() {
if
(
selectable_cards
[
i
]
->
code
)
if
(
selectable_cards
[
i
]
->
code
)
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardSelect
[
i
],
selectable_cards
[
i
]
->
code
));
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardSelect
[
i
],
selectable_cards
[
i
]
->
code
));
else
else
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
tCover
[
0
]);
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
tCover
[
0
]
,
rect
<
s32
>
(
0
,
0
,
CARD_IMG_WIDTH
,
CARD_IMG_HEIGHT
)
);
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardSelect
[
i
]
->
setPressed
(
false
);
mainGame
->
btnCardSelect
[
i
]
->
setPressed
(
false
);
mainGame
->
btnCardSelect
[
i
]
->
setVisible
(
true
);
mainGame
->
btnCardSelect
[
i
]
->
setVisible
(
true
);
...
@@ -548,7 +549,7 @@ void ClientField::ShowLocationCard() {
...
@@ -548,7 +549,7 @@ void ClientField::ShowLocationCard() {
if
(
display_cards
[
i
]
->
code
)
if
(
display_cards
[
i
]
->
code
)
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardDisplay
[
i
],
display_cards
[
i
]
->
code
));
mainGame
->
imageLoading
.
insert
(
std
::
make_pair
(
mainGame
->
btnCardDisplay
[
i
],
display_cards
[
i
]
->
code
));
else
else
mainGame
->
btnCardDisplay
[
i
]
->
setImage
(
imageManager
.
tCover
[
0
]);
mainGame
->
btnCardDisplay
[
i
]
->
setImage
(
imageManager
.
tCover
[
0
]
,
rect
<
s32
>
(
0
,
0
,
CARD_IMG_WIDTH
,
CARD_IMG_HEIGHT
)
);
mainGame
->
btnCardDisplay
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardDisplay
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
startpos
+
i
*
125
,
55
,
startpos
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardDisplay
[
i
]
->
setPressed
(
false
);
mainGame
->
btnCardDisplay
[
i
]
->
setPressed
(
false
);
mainGame
->
btnCardDisplay
[
i
]
->
setVisible
(
true
);
mainGame
->
btnCardDisplay
[
i
]
->
setVisible
(
true
);
...
...
gframe/deck_con.cpp
View file @
13b065c9
...
@@ -819,15 +819,6 @@ void DeckBuilder::StartFilter() {
...
@@ -819,15 +819,6 @@ void DeckBuilder::StartFilter() {
void
DeckBuilder
::
FilterCards
()
{
void
DeckBuilder
::
FilterCards
()
{
results
.
clear
();
results
.
clear
();
const
wchar_t
*
pstr
=
mainGame
->
ebCardName
->
getText
();
const
wchar_t
*
pstr
=
mainGame
->
ebCardName
->
getText
();
int
trycode
=
BufferIO
::
GetVal
(
pstr
);
if
(
dataManager
.
GetData
(
trycode
,
0
))
{
auto
ptr
=
dataManager
.
GetCodePointer
(
trycode
);
// verified by GetData()
results
.
push_back
(
ptr
);
mainGame
->
scrFilter
->
setVisible
(
false
);
mainGame
->
scrFilter
->
setPos
(
0
);
myswprintf
(
result_string
,
L"%d"
,
results
.
size
());
return
;
}
std
::
wstring
str
=
std
::
wstring
(
pstr
);
std
::
wstring
str
=
std
::
wstring
(
pstr
);
std
::
vector
<
std
::
wstring
>
query_elements
;
std
::
vector
<
std
::
wstring
>
query_elements
;
std
::
vector
<
std
::
vector
<
std
::
wstring
>::
iterator
>
query_elements_track
;
std
::
vector
<
std
::
vector
<
std
::
wstring
>::
iterator
>
query_elements_track
;
...
@@ -856,6 +847,13 @@ void DeckBuilder::FilterCards() {
...
@@ -856,6 +847,13 @@ void DeckBuilder::FilterCards() {
}
}
for
(
auto
elements_track_iterator
=
query_elements_track
.
begin
();
elements_track_iterator
!=
query_elements_track
.
end
();
elements_track_iterator
++
)
for
(
auto
elements_track_iterator
=
query_elements_track
.
begin
();
elements_track_iterator
!=
query_elements_track
.
end
();
elements_track_iterator
++
)
query_elements
.
erase
(
*
elements_track_iterator
);
query_elements
.
erase
(
*
elements_track_iterator
);
unsigned
int
set_code
=
0
;
if
(
pstr
[
0
]
==
L'@'
)
set_code
=
dataManager
.
GetSetCode
(
&
pstr
[
1
]);
else
set_code
=
dataManager
.
GetSetCode
(
&
pstr
[
0
]);
if
(
pstr
[
0
]
==
0
||
(
pstr
[
0
]
==
L'$'
&&
pstr
[
1
]
==
0
)
||
(
pstr
[
0
]
==
L'@'
&&
pstr
[
1
]
==
0
))
pstr
=
0
;
auto
strpointer
=
dataManager
.
_strings
.
begin
();
auto
strpointer
=
dataManager
.
_strings
.
begin
();
for
(
code_pointer
ptr
=
dataManager
.
_datas
.
begin
();
ptr
!=
dataManager
.
_datas
.
end
();
++
ptr
,
++
strpointer
)
{
for
(
code_pointer
ptr
=
dataManager
.
_datas
.
begin
();
ptr
!=
dataManager
.
_datas
.
end
();
++
ptr
,
++
strpointer
)
{
const
CardDataC
&
data
=
ptr
->
second
;
const
CardDataC
&
data
=
ptr
->
second
;
...
@@ -944,11 +942,18 @@ void DeckBuilder::FilterCards() {
...
@@ -944,11 +942,18 @@ void DeckBuilder::FilterCards() {
break
;
break
;
}
}
}
else
{
}
else
{
if
(
!
CardNameContains
(
text
.
name
.
c_str
(),
elements_iterator
->
c_str
())
&&
text
.
text
.
find
(
elements_iterator
->
c_str
())
==
std
::
wstring
::
npos
int
trycode
=
BufferIO
::
GetVal
(
elements_iterator
->
c_str
());
bool
tryresult
=
dataManager
.
GetData
(
trycode
,
0
);
if
(
!
tryresult
&&
!
CardNameContains
(
text
.
name
.
c_str
(),
elements_iterator
->
c_str
())
&&
text
.
text
.
find
(
elements_iterator
->
c_str
())
==
std
::
wstring
::
npos
&&
(
!
set_code_map
[
*
elements_iterator
]
||
!
check_set_code
(
data
,
set_code_map
[
*
elements_iterator
])))
{
&&
(
!
set_code_map
[
*
elements_iterator
]
||
!
check_set_code
(
data
,
set_code_map
[
*
elements_iterator
])))
{
is_target
=
false
;
is_target
=
false
;
break
;
break
;
}
}
if
(
tryresult
&&
data
.
code
!=
trycode
&&
!
(
data
.
alias
==
trycode
&&
(
data
.
alias
-
data
.
code
<
CARD_ARTWORK_VERSIONS_OFFSET
||
data
.
code
-
data
.
alias
<
CARD_ARTWORK_VERSIONS_OFFSET
)))
{
is_target
=
false
;
break
;
}
}
}
}
}
if
(
is_target
)
if
(
is_target
)
...
...
gframe/drawing.cpp
View file @
13b065c9
...
@@ -929,7 +929,6 @@ void Game::DrawSpec() {
...
@@ -929,7 +929,6 @@ void Game::DrawSpec() {
break
;
break
;
}
}
auto
pos
=
lpcFont
->
getDimension
(
lstr
);
auto
pos
=
lpcFont
->
getDimension
(
lstr
);
//int offset = pos.Width / 2;
if
(
showcardp
<
10
)
{
if
(
showcardp
<
10
)
{
int
alpha
=
(
showcardp
*
25
)
<<
24
;
int
alpha
=
(
showcardp
*
25
)
<<
24
;
DrawShadowText
(
lpcFont
,
lstr
,
ResizeElem
(
650
-
pos
.
Width
/
2
-
(
9
-
showcardp
)
*
40
,
290
,
950
,
370
),
Resize
(
-
1
,
-
1
,
0
,
0
),
alpha
|
0xffffff
,
alpha
);
DrawShadowText
(
lpcFont
,
lstr
,
ResizeElem
(
650
-
pos
.
Width
/
2
-
(
9
-
showcardp
)
*
40
,
290
,
950
,
370
),
Resize
(
-
1
,
-
1
,
0
,
0
),
alpha
|
0xffffff
,
alpha
);
...
...
gframe/duelclient.cpp
View file @
13b065c9
...
@@ -1056,7 +1056,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -1056,7 +1056,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
break
;
break
;
}
}
//playing custom bgm
//playing custom bgm
case
HINT_MUSIC
:
{
case
11
:
{
//HINT_MUSIC
char
BGMName
[
1024
];
char
BGMName
[
1024
];
if
(
data
)
{
if
(
data
)
{
myswprintf
(
textBuffer
,
L"./sound/BGM/custom/%ls.mp3"
,
dataManager
.
GetDesc
(
data
));
myswprintf
(
textBuffer
,
L"./sound/BGM/custom/%ls.mp3"
,
dataManager
.
GetDesc
(
data
));
...
@@ -1068,7 +1068,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -1068,7 +1068,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
break
;
break
;
}
}
//playing custom sound effect
//playing custom sound effect
case
HINT_SOUND
:
{
case
12
:
{
//HINT_SOUND
char
SoundName
[
1024
];
char
SoundName
[
1024
];
if
(
data
)
{
if
(
data
)
{
myswprintf
(
textBuffer
,
L"./sound/custom/%ls.wav"
,
dataManager
.
GetDesc
(
data
));
myswprintf
(
textBuffer
,
L"./sound/custom/%ls.wav"
,
dataManager
.
GetDesc
(
data
));
...
@@ -1080,7 +1080,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -1080,7 +1080,7 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
break
;
break
;
}
}
//playing custom bgm in ogg format
//playing custom bgm in ogg format
case
HINT_MUSIC_OGG
:
{
case
13
:
{
//HINT_MUSIC_OGG
char
BGMName
[
1024
];
char
BGMName
[
1024
];
if
(
data
)
{
if
(
data
)
{
myswprintf
(
textBuffer
,
L"./sound/BGM/custom/%ls.ogg"
,
dataManager
.
GetDesc
(
data
));
myswprintf
(
textBuffer
,
L"./sound/BGM/custom/%ls.ogg"
,
dataManager
.
GetDesc
(
data
));
...
@@ -1640,7 +1640,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
...
@@ -1640,7 +1640,10 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
pcard
->
cmdFlag
|=
COMMAND_RESET
;
pcard
->
cmdFlag
|=
COMMAND_RESET
;
else
else
pcard
->
cmdFlag
|=
COMMAND_ACTIVATE
;
pcard
->
cmdFlag
|=
COMMAND_ACTIVATE
;
if
(
l
==
LOCATION_GRAVE
)
if
(
pcard
->
location
==
LOCATION_DECK
)
{
pcard
->
SetCode
(
code
);
mainGame
->
dField
.
deck_act
=
true
;
}
else
if
(
l
==
LOCATION_GRAVE
)
mainGame
->
dField
.
grave_act
=
true
;
mainGame
->
dField
.
grave_act
=
true
;
else
if
(
l
==
LOCATION_REMOVED
)
else
if
(
l
==
LOCATION_REMOVED
)
mainGame
->
dField
.
remove_act
=
true
;
mainGame
->
dField
.
remove_act
=
true
;
...
...
gframe/event_handler.cpp
View file @
13b065c9
...
@@ -143,6 +143,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -143,6 +143,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
mainGame
->
ShowElement
(
mainGame
->
wSinglePlay
);
mainGame
->
ShowElement
(
mainGame
->
wSinglePlay
);
else
else
mainGame
->
ShowElement
(
mainGame
->
wLanWindow
);
mainGame
->
ShowElement
(
mainGame
->
wLanWindow
);
if
(
exit_on_return
)
mainGame
->
device
->
closeDevice
();
}
else
{
}
else
{
DuelClient
::
SendPacketToServer
(
CTOS_SURRENDER
);
DuelClient
::
SendPacketToServer
(
CTOS_SURRENDER
);
}
}
...
@@ -843,7 +845,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -843,7 +845,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
else
if
(
conti_selecting
)
else
if
(
conti_selecting
)
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
GetTexture
(
selectable_cards
[
i
+
pos
]
->
chain_code
));
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
GetTexture
(
selectable_cards
[
i
+
pos
]
->
chain_code
));
else
else
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
tCover
[
0
]);
mainGame
->
btnCardSelect
[
i
]
->
setImage
(
imageManager
.
tCover
[
0
]
,
rect
<
s32
>
(
0
,
0
,
CARD_IMG_WIDTH
,
CARD_IMG_HEIGHT
)
);
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
30
+
i
*
125
,
55
,
30
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardSelect
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
30
+
i
*
125
,
55
,
30
+
120
+
i
*
125
,
225
));
// text
// text
wchar_t
formatBuffer
[
2048
];
wchar_t
formatBuffer
[
2048
];
...
@@ -906,7 +908,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
...
@@ -906,7 +908,7 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
if
(
display_cards
[
i
+
pos
]
->
code
)
if
(
display_cards
[
i
+
pos
]
->
code
)
mainGame
->
btnCardDisplay
[
i
]
->
setImage
(
imageManager
.
GetTexture
(
display_cards
[
i
+
pos
]
->
code
));
mainGame
->
btnCardDisplay
[
i
]
->
setImage
(
imageManager
.
GetTexture
(
display_cards
[
i
+
pos
]
->
code
));
else
else
mainGame
->
btnCardDisplay
[
i
]
->
setImage
(
imageManager
.
tCover
[
0
]);
mainGame
->
btnCardDisplay
[
i
]
->
setImage
(
imageManager
.
tCover
[
0
]
,
rect
<
s32
>
(
0
,
0
,
CARD_IMG_WIDTH
,
CARD_IMG_HEIGHT
)
);
mainGame
->
btnCardDisplay
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
30
+
i
*
125
,
55
,
30
+
120
+
i
*
125
,
225
));
mainGame
->
btnCardDisplay
[
i
]
->
setRelativePosition
(
rect
<
s32
>
(
30
+
i
*
125
,
55
,
30
+
120
+
i
*
125
,
225
));
wchar_t
formatBuffer
[
2048
];
wchar_t
formatBuffer
[
2048
];
if
(
display_cards
[
i
+
pos
]
->
location
==
LOCATION_OVERLAY
)
{
if
(
display_cards
[
i
+
pos
]
->
location
==
LOCATION_OVERLAY
)
{
...
@@ -1787,6 +1789,26 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
...
@@ -1787,6 +1789,26 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
return
true
;
return
true
;
break
;
break
;
}
}
case
BUTTON_WINDOW_RESIZE_S
:
{
mainGame
->
SetWindowsScale
(
0.8
);
return
true
;
break
;
}
case
BUTTON_WINDOW_RESIZE_M
:
{
mainGame
->
SetWindowsScale
(
1
);
return
true
;
break
;
}
case
BUTTON_WINDOW_RESIZE_L
:
{
mainGame
->
SetWindowsScale
(
1.25
);
return
true
;
break
;
}
case
BUTTON_WINDOW_RESIZE_XL
:
{
mainGame
->
SetWindowsScale
(
1.5
);
return
true
;
break
;
}
}
}
break
;
break
;
}
}
...
...
gframe/game.cpp
View file @
13b065c9
This diff is collapsed.
Click to expand it.
gframe/game.h
View file @
13b065c9
...
@@ -177,6 +177,7 @@ public:
...
@@ -177,6 +177,7 @@ public:
recti
ResizeFit
(
s32
x
,
s32
y
,
s32
x2
,
s32
y2
);
recti
ResizeFit
(
s32
x
,
s32
y
,
s32
x2
,
s32
y2
);
void
SetWindowsIcon
();
void
SetWindowsIcon
();
void
SetWindowsScale
(
float
scale
);
void
FlashWindow
();
void
FlashWindow
();
void
takeScreenshot
();
void
takeScreenshot
();
void
SetCursor
(
ECURSOR_ICON
icon
);
void
SetCursor
(
ECURSOR_ICON
icon
);
...
@@ -291,6 +292,10 @@ public:
...
@@ -291,6 +292,10 @@ public:
irr
::
gui
::
IGUIScrollBar
*
scrSoundVolume
;
irr
::
gui
::
IGUIScrollBar
*
scrSoundVolume
;
irr
::
gui
::
IGUIScrollBar
*
scrMusicVolume
;
irr
::
gui
::
IGUIScrollBar
*
scrMusicVolume
;
irr
::
gui
::
IGUICheckBox
*
chkMusicMode
;
irr
::
gui
::
IGUICheckBox
*
chkMusicMode
;
irr
::
gui
::
IGUIButton
*
btnWinResizeS
;
irr
::
gui
::
IGUIButton
*
btnWinResizeM
;
irr
::
gui
::
IGUIButton
*
btnWinResizeL
;
irr
::
gui
::
IGUIButton
*
btnWinResizeXL
;
irr
::
gui
::
IGUICheckBox
*
chkEnablePScale
;
irr
::
gui
::
IGUICheckBox
*
chkEnablePScale
;
//main menu
//main menu
irr
::
gui
::
IGUIWindow
*
wMainMenu
;
irr
::
gui
::
IGUIWindow
*
wMainMenu
;
...
@@ -678,6 +683,10 @@ extern Game* mainGame;
...
@@ -678,6 +683,10 @@ extern Game* mainGame;
#define CHECKBOX_ENABLE_MUSIC 362
#define CHECKBOX_ENABLE_MUSIC 362
#define SCROLL_VOLUME 363
#define SCROLL_VOLUME 363
#define CHECKBOX_DISABLE_CHAT 364
#define CHECKBOX_DISABLE_CHAT 364
#define BUTTON_WINDOW_RESIZE_S 365
#define BUTTON_WINDOW_RESIZE_M 366
#define BUTTON_WINDOW_RESIZE_L 367
#define BUTTON_WINDOW_RESIZE_XL 368
#define COMBOBOX_SORTTYPE 370
#define COMBOBOX_SORTTYPE 370
#define COMBOBOX_LIMIT 371
#define COMBOBOX_LIMIT 371
...
@@ -698,4 +707,6 @@ extern Game* mainGame;
...
@@ -698,4 +707,6 @@ extern Game* mainGame;
#define TEXTURE_ACTIVATE 6
#define TEXTURE_ACTIVATE 6
#define DEFAULT_DUEL_RULE 4
#define DEFAULT_DUEL_RULE 4
#define CARD_ARTWORK_VERSIONS_OFFSET 10
#endif // GAME_H
#endif // GAME_H
gframe/gframe.cpp
View file @
13b065c9
...
@@ -134,7 +134,7 @@ int main(int argc, char* argv[]) {
...
@@ -134,7 +134,7 @@ int main(int argc, char* argv[]) {
break
;
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
);
ygo
::
mainGame
->
HideElement
(
ygo
::
mainGame
->
wMainMenu
);
ClickButton
(
ygo
::
mainGame
->
btnJoinHost
);
ClickButton
(
ygo
::
mainGame
->
btnJoinHost
);
break
;
break
;
}
else
if
(
!
strcmp
(
argv
[
i
],
"-r"
))
{
// Replay
}
else
if
(
!
strcmp
(
argv
[
i
],
"-r"
))
{
// Replay
...
...
gframe/image_manager.cpp
View file @
13b065c9
...
@@ -11,17 +11,9 @@ ImageManager imageManager;
...
@@ -11,17 +11,9 @@ ImageManager imageManager;
bool
ImageManager
::
Initial
()
{
bool
ImageManager
::
Initial
()
{
RefreshRandomImageList
();
RefreshRandomImageList
();
tCover
[
0
]
=
GetRandomImage
(
TEXTURE_COVER_S
);
tCover
[
0
]
=
NULL
;
if
(
!
tCover
[
0
])
tCover
[
1
]
=
NULL
;
tCover
[
0
]
=
driver
->
getTexture
(
"textures/cover.jpg"
);
//tUnknown = NULL;
tCover
[
1
]
=
GetRandomImage
(
TEXTURE_COVER_O
);
if
(
!
tCover
[
1
])
tCover
[
1
]
=
driver
->
getTexture
(
"textures/cover2.jpg"
);
if
(
!
tCover
[
1
])
tCover
[
1
]
=
GetRandomImage
(
TEXTURE_COVER_S
);
if
(
!
tCover
[
1
])
tCover
[
1
]
=
tCover
[
0
];
//tUnknown = driver->getTexture("textures/unknown.jpg");
tUnknown
[
0
]
=
NULL
;
tUnknown
[
0
]
=
NULL
;
tUnknown
[
1
]
=
NULL
;
tUnknown
[
1
]
=
NULL
;
tUnknown
[
2
]
=
NULL
;
tUnknown
[
2
]
=
NULL
;
...
@@ -45,25 +37,9 @@ bool ImageManager::Initial() {
...
@@ -45,25 +37,9 @@ bool ImageManager::Initial() {
tHand
[
0
]
=
driver
->
getTexture
(
"textures/f1.jpg"
);
tHand
[
0
]
=
driver
->
getTexture
(
"textures/f1.jpg"
);
tHand
[
1
]
=
driver
->
getTexture
(
"textures/f2.jpg"
);
tHand
[
1
]
=
driver
->
getTexture
(
"textures/f2.jpg"
);
tHand
[
2
]
=
driver
->
getTexture
(
"textures/f3.jpg"
);
tHand
[
2
]
=
driver
->
getTexture
(
"textures/f3.jpg"
);
tBackGround
=
GetRandomImage
(
TEXTURE_DUEL
);
tBackGround
=
NULL
;
if
(
!
tBackGround
)
tBackGround_menu
=
NULL
;
tBackGround
=
driver
->
getTexture
(
"textures/bg.jpg"
);
tBackGround_deck
=
NULL
;
if
(
!
tBackGround
)
tBackGround
=
driver
->
getTexture
(
"textures/bg_duel.jpg"
);
tBackGround_menu
=
GetRandomImage
(
TEXTURE_MENU
);
if
(
!
tBackGround_menu
)
tBackGround_menu
=
driver
->
getTexture
(
"textures/bg_menu.jpg"
);
if
(
!
tBackGround_menu
)
tBackGround_menu
=
GetRandomImage
(
TEXTURE_DUEL
);
if
(
!
tBackGround_menu
)
tBackGround_menu
=
tBackGround
;
tBackGround_deck
=
GetRandomImage
(
TEXTURE_DECK
);
if
(
!
tBackGround_deck
)
tBackGround_deck
=
driver
->
getTexture
(
"textures/bg_deck.jpg"
);
if
(
!
tBackGround_deck
)
tBackGround_deck
=
GetRandomImage
(
TEXTURE_DUEL
);
if
(
!
tBackGround_deck
)
tBackGround_deck
=
tBackGround
;
tField
[
0
]
=
driver
->
getTexture
(
"textures/field2.png"
);
tField
[
0
]
=
driver
->
getTexture
(
"textures/field2.png"
);
tFieldTransparent
[
0
]
=
driver
->
getTexture
(
"textures/field-transparent2.png"
);
tFieldTransparent
[
0
]
=
driver
->
getTexture
(
"textures/field-transparent2.png"
);
tField
[
1
]
=
driver
->
getTexture
(
"textures/field3.png"
);
tField
[
1
]
=
driver
->
getTexture
(
"textures/field3.png"
);
...
@@ -78,20 +54,37 @@ bool ImageManager::Initial() {
...
@@ -78,20 +54,37 @@ bool ImageManager::Initial() {
tLScale
[
i
]
=
driver
->
getTexture
(
buff
);
tLScale
[
i
]
=
driver
->
getTexture
(
buff
);
}
}
tClock
=
driver
->
getTexture
(
"textures/clock.png"
);
tClock
=
driver
->
getTexture
(
"textures/clock.png"
);
ResizeTexture
();
return
true
;
return
true
;
}
}
irr
::
video
::
ITexture
*
ImageManager
::
GetRandomImage
(
int
image_type
)
{
irr
::
video
::
ITexture
*
ImageManager
::
GetRandomImage
(
int
image_type
)
{
int
count
=
ImageList
[
image_type
].
size
();
int
count
=
ImageList
[
image_type
].
size
();
if
(
count
<=
0
)
if
(
count
<=
0
)
return
0
;
return
NULL
;
char
ImageName
[
1024
];
char
ImageName
[
1024
];
wchar_t
fname
[
1024
];
wchar_t
fname
[
1024
];
int
image_id
=
rand
()
%
count
;
if
(
saved_image_id
[
image_type
]
==
-
1
)
saved_image_id
[
image_type
]
=
rand
()
%
count
;
int
image_id
=
saved_image_id
[
image_type
];
auto
name
=
ImageList
[
image_type
][
image_id
].
c_str
();
auto
name
=
ImageList
[
image_type
][
image_id
].
c_str
();
myswprintf
(
fname
,
L"./textures/%ls"
,
name
);
myswprintf
(
fname
,
L"./textures/%ls"
,
name
);
BufferIO
::
EncodeUTF8
(
fname
,
ImageName
);
BufferIO
::
EncodeUTF8
(
fname
,
ImageName
);
return
driver
->
getTexture
(
ImageName
);
return
driver
->
getTexture
(
ImageName
);
}
}
irr
::
video
::
ITexture
*
ImageManager
::
GetRandomImage
(
int
image_type
,
s32
width
,
s32
height
)
{
int
count
=
ImageList
[
image_type
].
size
();
if
(
count
<=
0
)
return
NULL
;
char
ImageName
[
1024
];
wchar_t
fname
[
1024
];
if
(
saved_image_id
[
image_type
]
==
-
1
)
saved_image_id
[
image_type
]
=
rand
()
%
count
;
int
image_id
=
saved_image_id
[
image_type
];
auto
name
=
ImageList
[
image_type
][
image_id
].
c_str
();
myswprintf
(
fname
,
L"./textures/%ls"
,
name
);
BufferIO
::
EncodeUTF8
(
fname
,
ImageName
);
return
GetTextureFromFile
(
ImageName
,
width
,
height
);
}
void
ImageManager
::
RefreshRandomImageList
()
{
void
ImageManager
::
RefreshRandomImageList
()
{
RefreshImageDir
(
L"bg/"
,
TEXTURE_DUEL
);
RefreshImageDir
(
L"bg/"
,
TEXTURE_DUEL
);
RefreshImageDir
(
L"bg_duel/"
,
TEXTURE_DUEL
);
RefreshImageDir
(
L"bg_duel/"
,
TEXTURE_DUEL
);
...
@@ -101,6 +94,10 @@ void ImageManager::RefreshRandomImageList() {
...
@@ -101,6 +94,10 @@ void ImageManager::RefreshRandomImageList() {
RefreshImageDir
(
L"cover2/"
,
TEXTURE_COVER_O
);
RefreshImageDir
(
L"cover2/"
,
TEXTURE_COVER_O
);
RefreshImageDir
(
L"attack/"
,
TEXTURE_ATTACK
);
RefreshImageDir
(
L"attack/"
,
TEXTURE_ATTACK
);
RefreshImageDir
(
L"act/"
,
TEXTURE_ACTIVATE
);
RefreshImageDir
(
L"act/"
,
TEXTURE_ACTIVATE
);
for
(
int
i
=
0
;
i
<
7
;
++
i
)
{
saved_image_id
[
i
]
=
-
1
;
}
}
}
void
ImageManager
::
RefreshImageDir
(
std
::
wstring
path
,
int
image_type
)
{
void
ImageManager
::
RefreshImageDir
(
std
::
wstring
path
,
int
image_type
)
{
#ifdef _WIN32
#ifdef _WIN32
...
@@ -158,7 +155,7 @@ void ImageManager::ClearTexture() {
...
@@ -158,7 +155,7 @@ void ImageManager::ClearTexture() {
tMap
[
0
].
clear
();
tMap
[
0
].
clear
();
tMap
[
1
].
clear
();
tMap
[
1
].
clear
();
tThumb
.
clear
();
tThumb
.
clear
();
t
Thumb
.
clear
();
t
Fields
.
clear
();
for
(
int
i
=
0
;
i
<
3
;
++
i
)
for
(
int
i
=
0
;
i
<
3
;
++
i
)
if
(
tUnknown
[
i
]
!=
NULL
)
{
if
(
tUnknown
[
i
]
!=
NULL
)
{
driver
->
removeTexture
(
tUnknown
[
i
]);
driver
->
removeTexture
(
tUnknown
[
i
]);
...
@@ -179,6 +176,48 @@ void ImageManager::RemoveTexture(int code) {
...
@@ -179,6 +176,48 @@ void ImageManager::RemoveTexture(int code) {
tMap
[
1
].
erase
(
tit
);
tMap
[
1
].
erase
(
tit
);
}
}
}
}
void
ImageManager
::
ResizeTexture
()
{
irr
::
s32
imgWidth
=
CARD_IMG_WIDTH
*
mainGame
->
xScale
;
irr
::
s32
imgHeight
=
CARD_IMG_HEIGHT
*
mainGame
->
yScale
;
irr
::
s32
bgWidth
=
1024
*
mainGame
->
xScale
;
irr
::
s32
bgHeight
=
640
*
mainGame
->
yScale
;
driver
->
removeTexture
(
tCover
[
0
]);
driver
->
removeTexture
(
tCover
[
1
]);
tCover
[
0
]
=
GetRandomImage
(
TEXTURE_COVER_S
,
imgWidth
,
imgHeight
);
if
(
!
tCover
[
0
])
tCover
[
0
]
=
GetTextureFromFile
(
"textures/cover.jpg"
,
imgWidth
,
imgHeight
);
tCover
[
1
]
=
GetRandomImage
(
TEXTURE_COVER_O
,
imgWidth
,
imgHeight
);
if
(
!
tCover
[
1
])
tCover
[
1
]
=
GetTextureFromFile
(
"textures/cover2.jpg"
,
imgWidth
,
imgHeight
);
if
(
!
tCover
[
1
])
tCover
[
1
]
=
GetRandomImage
(
TEXTURE_COVER_S
,
imgWidth
,
imgHeight
);
if
(
!
tCover
[
1
])
tCover
[
1
]
=
tCover
[
0
];
//driver->removeTexture(tUnknown);
//tUnknown = GetTextureFromFile("textures/unknown.jpg", imgWidth, imgHeight);
driver
->
removeTexture
(
tBackGround
);
tBackGround
=
GetRandomImage
(
TEXTURE_DUEL
,
bgWidth
,
bgHeight
);
if
(
!
tBackGround
)
tBackGround
=
GetTextureFromFile
(
"textures/bg.jpg"
,
bgWidth
,
bgHeight
);
if
(
!
tBackGround
)
tBackGround
=
GetTextureFromFile
(
"textures/bg_duel.jpg"
,
bgWidth
,
bgHeight
);
driver
->
removeTexture
(
tBackGround_menu
);
tBackGround_menu
=
GetRandomImage
(
TEXTURE_MENU
,
bgWidth
,
bgHeight
);
if
(
!
tBackGround_menu
)
tBackGround_menu
=
GetTextureFromFile
(
"textures/bg_menu.jpg"
,
bgWidth
,
bgHeight
);
if
(
!
tBackGround_menu
)
tBackGround_menu
=
GetRandomImage
(
TEXTURE_DUEL
,
bgWidth
,
bgHeight
);
if
(
!
tBackGround_menu
)
tBackGround_menu
=
tBackGround
;
driver
->
removeTexture
(
tBackGround_deck
);
tBackGround_deck
=
GetRandomImage
(
TEXTURE_DECK
,
bgWidth
,
bgHeight
);
if
(
!
tBackGround_deck
)
tBackGround_deck
=
GetTextureFromFile
(
"textures/bg_deck.jpg"
,
bgWidth
,
bgHeight
);
if
(
!
tBackGround_deck
)
tBackGround_deck
=
GetRandomImage
(
TEXTURE_DUEL
,
bgWidth
,
bgHeight
);
if
(
!
tBackGround_deck
)
tBackGround_deck
=
tBackGround
;
}
// function by Warr1024, from https://github.com/minetest/minetest/issues/2419 , modified
// function by Warr1024, from https://github.com/minetest/minetest/issues/2419 , modified
void
imageScaleNNAA
(
irr
::
video
::
IImage
*
src
,
irr
::
video
::
IImage
*
dest
)
{
void
imageScaleNNAA
(
irr
::
video
::
IImage
*
src
,
irr
::
video
::
IImage
*
dest
)
{
double
sx
,
sy
,
minsx
,
maxsx
,
minsy
,
maxsy
,
area
,
ra
,
ga
,
ba
,
aa
,
pw
,
ph
,
pa
;
double
sx
,
sy
,
minsx
,
maxsx
,
minsy
,
maxsy
,
area
,
ra
,
ga
,
ba
,
aa
,
pw
,
ph
,
pa
;
...
...
gframe/image_manager.h
View file @
13b065c9
...
@@ -10,14 +10,17 @@ namespace ygo {
...
@@ -10,14 +10,17 @@ namespace ygo {
class
ImageManager
{
class
ImageManager
{
public:
public:
std
::
vector
<
std
::
wstring
>
ImageList
[
7
];
std
::
vector
<
std
::
wstring
>
ImageList
[
7
];
int
saved_image_id
[
7
];
bool
Initial
();
bool
Initial
();
//random image
//random image
irr
::
video
::
ITexture
*
GetRandomImage
(
int
image_type
);
irr
::
video
::
ITexture
*
GetRandomImage
(
int
image_type
);
irr
::
video
::
ITexture
*
GetRandomImage
(
int
image_type
,
s32
width
,
s32
height
);
void
RefreshRandomImageList
();
void
RefreshRandomImageList
();
void
RefreshImageDir
(
std
::
wstring
path
,
int
image_type
);
void
RefreshImageDir
(
std
::
wstring
path
,
int
image_type
);
void
SetDevice
(
irr
::
IrrlichtDevice
*
dev
);
void
SetDevice
(
irr
::
IrrlichtDevice
*
dev
);
void
ClearTexture
();
void
ClearTexture
();
void
RemoveTexture
(
int
code
);
void
RemoveTexture
(
int
code
);
void
ResizeTexture
();
irr
::
video
::
ITexture
*
GetTextureFromFile
(
char
*
file
,
s32
width
,
s32
height
);
irr
::
video
::
ITexture
*
GetTextureFromFile
(
char
*
file
,
s32
width
,
s32
height
);
irr
::
video
::
ITexture
*
GetTextureUnknown
(
s32
width
,
s32
height
,
int
index
);
irr
::
video
::
ITexture
*
GetTextureUnknown
(
s32
width
,
s32
height
,
int
index
);
irr
::
video
::
ITexture
*
GetTexture
(
int
code
,
bool
fit
=
false
);
irr
::
video
::
ITexture
*
GetTexture
(
int
code
,
bool
fit
=
false
);
...
...
gframe/replay_mode.cpp
View file @
13b065c9
...
@@ -106,6 +106,7 @@ int ReplayMode::ReplayThread(void* param) {
...
@@ -106,6 +106,7 @@ int ReplayMode::ReplayThread(void* param) {
get_message
(
pduel
,
(
byte
*
)
engineBuffer
);
get_message
(
pduel
,
(
byte
*
)
engineBuffer
);
is_continuing
=
ReplayAnalyze
(
engineBuffer
,
len
);
is_continuing
=
ReplayAnalyze
(
engineBuffer
,
len
);
if
(
is_restarting
)
{
if
(
is_restarting
)
{
mainGame
->
gMutex
.
Lock
();
is_restarting
=
false
;
is_restarting
=
false
;
int
step
=
current_step
-
1
;
int
step
=
current_step
-
1
;
if
(
step
<
0
)
if
(
step
<
0
)
...
@@ -282,7 +283,6 @@ void ReplayMode::Undo() {
...
@@ -282,7 +283,6 @@ void ReplayMode::Undo() {
return
;
return
;
mainGame
->
dInfo
.
isReplaySkiping
=
true
;
mainGame
->
dInfo
.
isReplaySkiping
=
true
;
Restart
(
false
);
Restart
(
false
);
mainGame
->
gMutex
.
Lock
();
Pause
(
false
,
false
);
Pause
(
false
,
false
);
}
}
bool
ReplayMode
::
ReplayAnalyze
(
char
*
msg
,
unsigned
int
len
)
{
bool
ReplayMode
::
ReplayAnalyze
(
char
*
msg
,
unsigned
int
len
)
{
...
...
gframe/single_mode.cpp
View file @
13b065c9
...
@@ -748,6 +748,8 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
...
@@ -748,6 +748,8 @@ bool SingleMode::SinglePlayAnalyze(char* msg, unsigned int len) {
xcard
->
overlayTarget
=
ccard
;
xcard
->
overlayTarget
=
ccard
;
xcard
->
location
=
0x80
;
xcard
->
location
=
0x80
;
xcard
->
sequence
=
ccard
->
overlayed
.
size
()
-
1
;
xcard
->
sequence
=
ccard
->
overlayed
.
size
()
-
1
;
xcard
->
owner
=
p
;
xcard
->
controler
=
p
;
}
}
}
}
}
}
...
...
ocgcore
@
18d7c0ab
Subproject commit
620e9df54f9bcb8e18cec09229254f08460a530f
Subproject commit
18d7c0ab0c17afc0967993c1eabdbc9dcb3688db
script
@
a5facedc
Subproject commit
9ce2bf8aacb08ec26b01c4fba65feaec48743dce
Subproject commit
a5facedc2c207e9cfaeacef6cb30a37c96d097f3
strings.conf
View file @
13b065c9
...
@@ -308,7 +308,12 @@
...
@@ -308,7 +308,12 @@
!
system
1279
开启音效
!
system
1279
开启音效
!
system
1280
开启音乐
!
system
1280
开启音乐
!
system
1281
按场景切换音乐
!
system
1281
按场景切换音乐
!
system
1282
数字灵摆图片
!
system
1282
窗口大小
!
system
1283
小
!
system
1284
中
!
system
1285
大
!
system
1286
特大
!
system
1287
数字灵摆图片
!
system
1290
忽略对方发言
!
system
1290
忽略对方发言
!
system
1291
忽略观战者发言
!
system
1291
忽略观战者发言
!
system
1292
忽略时点
!
system
1292
忽略时点
...
@@ -542,6 +547,7 @@
...
@@ -542,6 +547,7 @@
!
counter
0
x46
指示物(刚鬼死斗)
!
counter
0
x46
指示物(刚鬼死斗)
!
counter
0
x47
指示物(限制代码)
!
counter
0
x47
指示物(限制代码)
!
counter
0
x48
指示物(连接死亡炮塔)
!
counter
0
x48
指示物(连接死亡炮塔)
!
counter
0
x1049
警逻指示物
#setnames, using tab for comment
#setnames, using tab for comment
!
setname
0
x1
正义盟军
A
・
O
・
J
!
setname
0
x1
正义盟军
A
・
O
・
J
!
setname
0
x2
次世代 ジェネクス
!
setname
0
x2
次世代 ジェネクス
...
@@ -904,3 +910,10 @@
...
@@ -904,3 +910,10 @@
!
setname
0
x1115
闪刀姬 閃刀姫
!
setname
0
x1115
闪刀姬 閃刀姫
!
setname
0
x116
圣像骑士 パラディオン
!
setname
0
x116
圣像骑士 パラディオン
!
setname
0
x117
魔神仪 魔神儀
!
setname
0
x117
魔神仪 魔神儀
!
setname
0
x118
电脑网 サイバネット
!
setname
0
x119
转生炎兽 サラマングレイト
!
setname
0
x11a
恐龙摔跤手 ダイナレスラー
!
setname
0
x11b
自奏圣乐 オルフェゴール
!
setname
0
x11c
雷龙 サンダー·ドラゴン
!
setname
0
x11d
禁忌的 禁じられた
!
setname
0
x11e
危险!
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment