Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
ygopro-2pick
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
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
MyCard
ygopro-2pick
Commits
052d5ee1
Commit
052d5ee1
authored
Jul 03, 2017
by
mercury233
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'sound' into link
parents
58cb4744
a7cdd846
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
87 additions
and
65 deletions
+87
-65
gframe/deck_con.cpp
gframe/deck_con.cpp
+8
-1
gframe/drawing.cpp
gframe/drawing.cpp
+5
-0
gframe/duelclient.cpp
gframe/duelclient.cpp
+5
-0
gframe/event_handler.cpp
gframe/event_handler.cpp
+4
-4
gframe/game.cpp
gframe/game.cpp
+46
-45
gframe/game.h
gframe/game.h
+12
-10
gframe/image_manager.cpp
gframe/image_manager.cpp
+4
-0
system.conf
system.conf
+3
-5
No files found.
gframe/deck_con.cpp
View file @
052d5ee1
...
...
@@ -72,11 +72,15 @@ void DeckBuilder::Initialize() {
filterList
=
deckManager
.
_lfList
[
0
].
content
;
mainGame
->
cbDBLFList
->
setSelected
(
0
);
ClearSearch
();
mouse_pos
.
set
(
0
,
0
);
hovered_code
=
0
;
hovered_pos
=
0
;
hovered_seq
=
-
1
;
is_draging
=
false
;
prev_deck
=
mainGame
->
cbDBDecks
->
getSelected
();
prev_operation
=
0
;
is_modified
=
false
;
mainGame
->
device
->
setEventReceiver
(
&
mainGame
->
deckBuilder
);
mainGame
->
device
->
setEventReceiver
(
this
);
}
void
DeckBuilder
::
Terminate
()
{
mainGame
->
is_building
=
false
;
...
...
@@ -915,6 +919,9 @@ bool DeckBuilder::CardNameContains(const wchar_t *haystack, const wchar_t *needl
if
(
!
needle
[
0
])
{
return
true
;
}
if
(
!
haystack
)
{
return
false
;
}
int
i
=
0
;
int
j
=
0
;
while
(
haystack
[
i
])
{
...
...
gframe/drawing.cpp
View file @
052d5ee1
...
...
@@ -935,6 +935,11 @@ void Game::DrawSpec() {
}
}
}
void
Game
::
DrawBackImage
(
irr
::
video
::
ITexture
*
texture
)
{
if
(
!
texture
)
return
;
driver
->
draw2DImage
(
texture
,
recti
(
0
,
0
,
1024
,
640
),
recti
(
0
,
0
,
texture
->
getOriginalSize
().
Width
,
texture
->
getOriginalSize
().
Height
));
}
void
Game
::
ShowElement
(
irr
::
gui
::
IGUIElement
*
win
,
int
autoframe
)
{
FadingUnit
fu
;
fu
.
fadingSize
=
win
->
getRelativePosition
();
...
...
gframe/duelclient.cpp
View file @
052d5ee1
...
...
@@ -2426,6 +2426,11 @@ int DuelClient::ClientAnalyze(char * msg, unsigned int len) {
return
true
;
}
case
MSG_CHAIN_END
:
{
for
(
auto
chit
=
mainGame
->
dField
.
chains
.
begin
();
chit
!=
mainGame
->
dField
.
chains
.
end
();
++
chit
)
{
for
(
auto
tgit
=
chit
->
target
.
begin
();
tgit
!=
chit
->
target
.
end
();
++
tgit
)
(
*
tgit
)
->
is_showchaintarget
=
false
;
chit
->
chain_card
->
is_showchaintarget
=
false
;
}
mainGame
->
dField
.
chains
.
clear
();
return
true
;
}
...
...
gframe/event_handler.cpp
View file @
052d5ee1
...
...
@@ -2012,10 +2012,10 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
break
;
}
case
SCROLL_VOLUME
:
{
mainGame
->
gameConf
.
sound
volume
=
(
double
)
mainGame
->
src
SoundVolume
->
getPos
()
/
100
;
mainGame
->
gameConf
.
music
volume
=
(
double
)
mainGame
->
src
MusicVolume
->
getPos
()
/
100
;
mainGame
->
engineSound
->
setSoundVolume
(
mainGame
->
gameConf
.
soundvolume
);
mainGame
->
engineMusic
->
setSoundVolume
(
mainGame
->
gameConf
.
musicvolume
);
mainGame
->
gameConf
.
sound
_volume
=
(
double
)
mainGame
->
scr
SoundVolume
->
getPos
()
/
100
;
mainGame
->
gameConf
.
music
_volume
=
(
double
)
mainGame
->
scr
MusicVolume
->
getPos
()
/
100
;
mainGame
->
engineSound
->
setSoundVolume
(
mainGame
->
gameConf
.
sound
_
volume
);
mainGame
->
engineMusic
->
setSoundVolume
(
mainGame
->
gameConf
.
music
_
volume
);
break
;
}
}
...
...
gframe/game.cpp
View file @
052d5ee1
...
...
@@ -292,26 +292,29 @@ No.41
chkIgnoreDeckChanges
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
260
,
posY
+
25
),
tabSystem
,
-
1
,
dataManager
.
GetSysString
(
1357
));
chkIgnoreDeckChanges
->
setChecked
(
gameConf
.
chkIgnoreDeckChanges
!=
0
);
posY
+=
30
;
chkAutoSearch
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
2
25
,
posY
+
25
),
tabSystem
,
CHECKBOX_AUTO_SEARCH
,
dataManager
.
GetSysString
(
1358
));
chkAutoSearch
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
2
60
,
posY
+
25
),
tabSystem
,
CHECKBOX_AUTO_SEARCH
,
dataManager
.
GetSysString
(
1358
));
chkAutoSearch
->
setChecked
(
gameConf
.
auto_search_limit
>=
0
);
posY
+=
30
;
chkEnableSound
=
env
->
addCheckBox
(
gameConf
.
enable
sound
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
10
0
,
posY
+
25
),
tabSystem
,
-
1
,
dataManager
.
GetSysString
(
1380
));
chkEnableSound
->
setChecked
(
gameConf
.
enablesound
);
s
rcSoundVolume
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
posX
+
105
,
posY
,
posX
+
260
,
posY
+
25
),
tabSystem
,
SCROLL_VOLUME
);
s
rc
SoundVolume
->
setMax
(
100
);
s
rc
SoundVolume
->
setMin
(
0
);
s
rcSoundVolume
->
setPos
(
gameConf
.
sound
volume
*
100
);
s
rc
SoundVolume
->
setLargeStep
(
1
);
s
rc
SoundVolume
->
setSmallStep
(
1
);
chkEnableSound
=
env
->
addCheckBox
(
gameConf
.
enable
_sound
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
12
0
,
posY
+
25
),
tabSystem
,
-
1
,
dataManager
.
GetSysString
(
1380
));
chkEnableSound
->
setChecked
(
gameConf
.
enable
_
sound
);
s
crSoundVolume
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
posX
+
126
,
posY
+
4
,
posX
+
260
,
posY
+
21
),
tabSystem
,
SCROLL_VOLUME
);
s
cr
SoundVolume
->
setMax
(
100
);
s
cr
SoundVolume
->
setMin
(
0
);
s
crSoundVolume
->
setPos
(
gameConf
.
sound_
volume
*
100
);
s
cr
SoundVolume
->
setLargeStep
(
1
);
s
cr
SoundVolume
->
setSmallStep
(
1
);
posY
+=
30
;
chkEnableMusic
=
env
->
addCheckBox
(
gameConf
.
enablemusic
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
100
,
posY
+
25
),
tabSystem
,
CHECKBOX_ENABLE_MUSIC
,
dataManager
.
GetSysString
(
1381
));
chkEnableMusic
->
setChecked
(
gameConf
.
enablemusic
);
srcMusicVolume
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
posX
+
105
,
posY
,
posX
+
260
,
posY
+
25
),
tabSystem
,
SCROLL_VOLUME
);
srcMusicVolume
->
setMax
(
100
);
srcMusicVolume
->
setMin
(
0
);
srcMusicVolume
->
setPos
(
gameConf
.
musicvolume
*
100
);
srcMusicVolume
->
setLargeStep
(
1
);
srcMusicVolume
->
setSmallStep
(
1
);
chkEnableMusic
=
env
->
addCheckBox
(
gameConf
.
enable_music
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
120
,
posY
+
25
),
tabSystem
,
CHECKBOX_ENABLE_MUSIC
,
dataManager
.
GetSysString
(
1381
));
chkEnableMusic
->
setChecked
(
gameConf
.
enable_music
);
scrMusicVolume
=
env
->
addScrollBar
(
true
,
rect
<
s32
>
(
posX
+
126
,
posY
+
4
,
posX
+
260
,
posY
+
21
),
tabSystem
,
SCROLL_VOLUME
);
scrMusicVolume
->
setMax
(
100
);
scrMusicVolume
->
setMin
(
0
);
scrMusicVolume
->
setPos
(
gameConf
.
music_volume
*
100
);
scrMusicVolume
->
setLargeStep
(
1
);
scrMusicVolume
->
setSmallStep
(
1
);
posY
+=
30
;
chkMusicMode
=
env
->
addCheckBox
(
false
,
rect
<
s32
>
(
posX
,
posY
,
posX
+
260
,
posY
+
25
),
tabSystem
,
-
1
,
dataManager
.
GetSysString
(
1382
));
chkMusicMode
->
setChecked
(
gameConf
.
music_mode
!=
0
);
//
wHand
=
env
->
addWindow
(
rect
<
s32
>
(
500
,
450
,
825
,
605
),
false
,
L""
);
wHand
->
getCloseButton
()
->
setVisible
(
false
);
...
...
@@ -679,8 +682,6 @@ void Game::MainLoop() {
atkframe
+=
0.1
f
;
atkdy
=
(
float
)
sin
(
atkframe
);
driver
->
beginScene
(
true
,
true
,
SColor
(
0
,
0
,
0
,
0
));
if
(
imageManager
.
tBackGround
)
driver
->
draw2DImage
(
imageManager
.
tBackGround
,
recti
(
0
,
0
,
1024
,
640
),
recti
(
0
,
0
,
imageManager
.
tBackGround
->
getOriginalSize
().
Width
,
imageManager
.
tBackGround
->
getOriginalSize
().
Height
));
gMutex
.
Lock
();
if
(
dInfo
.
isStarted
)
{
if
(
mainGame
->
showcardcode
==
1
||
mainGame
->
showcardcode
==
3
)
...
...
@@ -693,6 +694,7 @@ void Game::MainLoop() {
PlayMusic
(
"./sound/song-advantage.mp3"
,
true
);
else
PlayBGM
();
DrawBackImage
(
imageManager
.
tBackGround
);
DrawBackGround
();
DrawCards
();
DrawMisc
();
...
...
@@ -700,14 +702,12 @@ void Game::MainLoop() {
driver
->
setMaterial
(
irr
::
video
::
IdentityMaterial
);
driver
->
clearZBuffer
();
}
else
if
(
is_building
)
{
if
(
imageManager
.
tBackGround_deck
)
driver
->
draw2DImage
(
imageManager
.
tBackGround_deck
,
recti
(
0
,
0
,
1024
,
640
),
recti
(
0
,
0
,
imageManager
.
tBackGround
->
getOriginalSize
().
Width
,
imageManager
.
tBackGround
->
getOriginalSize
().
Height
));
DrawDeckBd
();
PlayMusic
(
"./sound/deck.mp3"
,
true
);
DrawBackImage
(
imageManager
.
tBackGround_deck
);
DrawDeckBd
();
}
else
{
if
(
imageManager
.
tBackGround_menu
)
driver
->
draw2DImage
(
imageManager
.
tBackGround_menu
,
recti
(
0
,
0
,
1024
,
640
),
recti
(
0
,
0
,
imageManager
.
tBackGround
->
getOriginalSize
().
Width
,
imageManager
.
tBackGround
->
getOriginalSize
().
Height
));
PlayMusic
(
"./sound/menu.mp3"
,
true
);
DrawBackImage
(
imageManager
.
tBackGround_menu
);
}
DrawGUI
();
DrawSpec
();
...
...
@@ -1012,11 +1012,11 @@ void Game::LoadConfig() {
gameConf
.
separate_clear_button
=
1
;
gameConf
.
auto_search_limit
=
0
;
gameConf
.
chkIgnoreDeckChanges
=
0
;
gameConf
.
enablesound
=
true
;
gameConf
.
sound
volume
=
1.0
;
gameConf
.
enablemusic
=
true
;
gameConf
.
music
volume
=
1.0
;
gameConf
.
BGM_index
=
-
1
;
gameConf
.
enable
_
sound
=
true
;
gameConf
.
sound
_volume
=
0.5
;
gameConf
.
enable
_
music
=
true
;
gameConf
.
music
_volume
=
0.5
;
gameConf
.
music_mode
=
1
;
fseek
(
fp
,
0
,
SEEK_END
);
int
fsize
=
ftell
(
fp
);
fseek
(
fp
,
0
,
SEEK_SET
);
...
...
@@ -1078,13 +1078,15 @@ void Game::LoadConfig() {
}
else
if
(
!
strcmp
(
strbuf
,
"ignore_deck_changes"
))
{
gameConf
.
chkIgnoreDeckChanges
=
atoi
(
valbuf
);
}
else
if
(
!
strcmp
(
strbuf
,
"enable_sound"
))
{
gameConf
.
enablesound
=
atoi
(
valbuf
)
>
0
;
}
else
if
(
!
strcmp
(
strbuf
,
"soundvolume"
))
{
gameConf
.
soundvolume
=
atof
(
valbuf
)
/
100
;
gameConf
.
enable
_
sound
=
atoi
(
valbuf
)
>
0
;
}
else
if
(
!
strcmp
(
strbuf
,
"sound
_
volume"
))
{
gameConf
.
sound
_
volume
=
atof
(
valbuf
)
/
100
;
}
else
if
(
!
strcmp
(
strbuf
,
"enable_music"
))
{
gameConf
.
enablemusic
=
atoi
(
valbuf
)
>
0
;
}
else
if
(
!
strcmp
(
strbuf
,
"musicvolume"
))
{
gameConf
.
musicvolume
=
atof
(
valbuf
)
/
100
;
gameConf
.
enable_music
=
atoi
(
valbuf
)
>
0
;
}
else
if
(
!
strcmp
(
strbuf
,
"music_volume"
))
{
gameConf
.
music_volume
=
atof
(
valbuf
)
/
100
;
}
else
if
(
!
strcmp
(
strbuf
,
"music_mode"
))
{
gameConf
.
music_mode
=
atoi
(
valbuf
);
}
else
{
// options allowing multiple words
sscanf
(
linebuf
,
"%s = %240[^
\n
]"
,
strbuf
,
valbuf
);
...
...
@@ -1145,20 +1147,19 @@ void Game::SaveConfig() {
fprintf
(
fp
,
"enable_sound = %d
\n
"
,
((
mainGame
->
chkEnableSound
->
isChecked
())
?
1
:
0
));
fprintf
(
fp
,
"enable_music = %d
\n
"
,
((
mainGame
->
chkEnableMusic
->
isChecked
())
?
1
:
0
));
fprintf
(
fp
,
"#Volume of sound and music, between 0 and 100
\n
"
);
int
vol
=
gameConf
.
soundvolume
*
100
;
int
vol
=
gameConf
.
sound
_
volume
*
100
;
if
(
vol
<
0
)
vol
=
0
;
else
if
(
vol
>
100
)
vol
=
100
;
fprintf
(
fp
,
"soundvolume = %d
\n
"
,
vol
);
vol
=
gameConf
.
musicvolume
*
100
;
fprintf
(
fp
,
"sound
_
volume = %d
\n
"
,
vol
);
vol
=
gameConf
.
music
_
volume
*
100
;
if
(
vol
<
0
)
vol
=
0
;
else
if
(
vol
>
100
)
vol
=
100
;
fprintf
(
fp
,
"musicvolume = %d
\n
"
,
vol
);
fprintf
(
fp
,
"#playing the music corresponding to the sequence(start from 0) under folder /BGM
\n
#-1 means playing one of them randomly
\n
"
);
fprintf
(
fp
,
"BGM_index = %d
\n
"
,
gameConf
.
BGM_index
);
fprintf
(
fp
,
"music_volume = %d
\n
"
,
vol
);
fprintf
(
fp
,
"music_mode = %d
\n
"
,
((
mainGame
->
chkMusicMode
->
isChecked
())
?
1
:
0
));
fclose
(
fp
);
}
void
Game
::
PlaySoundEffect
(
char
*
sound
)
{
if
(
mainGame
->
chkEnableSound
->
isChecked
())
{
engineSound
->
play2D
(
sound
);
engineSound
->
setSoundVolume
(
gameConf
.
soundvolume
);
engineSound
->
setSoundVolume
(
gameConf
.
sound
_
volume
);
}
}
void
Game
::
PlayMusic
(
char
*
song
,
bool
loop
)
{
...
...
@@ -1166,7 +1167,7 @@ void Game::PlayMusic(char* song, bool loop) {
if
(
!
engineMusic
->
isCurrentlyPlaying
(
song
))
{
engineMusic
->
stopAllSounds
();
engineMusic
->
play2D
(
song
,
loop
);
engineMusic
->
setSoundVolume
(
gameConf
.
musicvolume
);
engineMusic
->
setSoundVolume
(
gameConf
.
music
_
volume
);
}
}
}
...
...
@@ -1180,7 +1181,7 @@ void Game::PlayBGM() {
int
count
=
BGMList
.
size
();
if
(
count
<=
0
)
return
;
int
bgm
=
(
gameConf
.
BGM_index
>=
0
)
?
gameConf
.
BGM_index
:
rand
()
%
count
;
int
bgm
=
(
gameConf
.
music_mode
>=
0
)
?
0
:
rand
()
%
count
;
auto
name
=
BGMList
[
bgm
].
c_str
();
wchar_t
fname
[
256
];
myswprintf
(
fname
,
L"./sound/BGM/%ls"
,
name
);
...
...
@@ -1189,7 +1190,7 @@ void Game::PlayBGM() {
if
(
!
engineMusic
->
isCurrentlyPlaying
(
strBuffer
))
{
engineMusic
->
stopAllSounds
();
engineMusic
->
play2D
(
strBuffer
,
true
);
engineMusic
->
setSoundVolume
(
gameConf
.
musicvolume
);
engineMusic
->
setSoundVolume
(
gameConf
.
music
_
volume
);
is_playing
=
true
;
}
}
...
...
gframe/game.h
View file @
052d5ee1
...
...
@@ -39,11 +39,11 @@ struct Config {
int
separate_clear_button
;
int
auto_search_limit
;
int
chkIgnoreDeckChanges
;
bool
enablesound
;
bool
enablemusic
;
double
soundvolume
;
double
musicvolume
;
int
BGM_index
;
bool
enable
_
sound
;
bool
enable
_
music
;
double
sound
_
volume
;
double
music
_
volume
;
int
music_mode
;
};
struct
DuelInfo
{
...
...
@@ -106,6 +106,7 @@ public:
void
DrawStatus
(
ClientCard
*
pcard
,
int
x1
,
int
y1
,
int
x2
,
int
y2
);
void
DrawGUI
();
void
DrawSpec
();
void
DrawBackImage
(
irr
::
video
::
ITexture
*
texture
);
void
ShowElement
(
irr
::
gui
::
IGUIElement
*
element
,
int
autoframe
=
0
);
void
HideElement
(
irr
::
gui
::
IGUIElement
*
element
,
bool
set_action
=
false
);
void
PopupElement
(
irr
::
gui
::
IGUIElement
*
element
,
int
hideframe
=
0
);
...
...
@@ -214,6 +215,9 @@ public:
irr
::
gui
::
IGUIStaticText
*
stSetName
;
irr
::
gui
::
IGUIStaticText
*
stText
;
irr
::
gui
::
IGUIScrollBar
*
scrCardText
;
irr
::
gui
::
IGUIListBox
*
lstLog
;
irr
::
gui
::
IGUIButton
*
btnClearLog
;
irr
::
gui
::
IGUIButton
*
btnSaveLog
;
irr
::
gui
::
IGUICheckBox
*
chkMAutoPos
;
irr
::
gui
::
IGUICheckBox
*
chkSTAutoPos
;
irr
::
gui
::
IGUICheckBox
*
chkRandomPos
;
...
...
@@ -225,11 +229,9 @@ public:
irr
::
gui
::
IGUICheckBox
*
chkAutoSearch
;
irr
::
gui
::
IGUICheckBox
*
chkEnableSound
;
irr
::
gui
::
IGUICheckBox
*
chkEnableMusic
;
irr
::
gui
::
IGUIListBox
*
lstLog
;
irr
::
gui
::
IGUIButton
*
btnClearLog
;
irr
::
gui
::
IGUIButton
*
btnSaveLog
;
irr
::
gui
::
IGUIScrollBar
*
srcSoundVolume
;
irr
::
gui
::
IGUIScrollBar
*
srcMusicVolume
;
irr
::
gui
::
IGUIScrollBar
*
scrSoundVolume
;
irr
::
gui
::
IGUIScrollBar
*
scrMusicVolume
;
irr
::
gui
::
IGUICheckBox
*
chkMusicMode
;
//main menu
irr
::
gui
::
IGUIWindow
*
wMainMenu
;
irr
::
gui
::
IGUIButton
*
btnLanMode
;
...
...
gframe/image_manager.cpp
View file @
052d5ee1
...
...
@@ -28,7 +28,11 @@ bool ImageManager::Initial() {
tHand
[
2
]
=
driver
->
getTexture
(
"textures/f3.jpg"
);
tBackGround
=
driver
->
getTexture
(
"textures/bg.jpg"
);
tBackGround_menu
=
driver
->
getTexture
(
"textures/bg_menu.jpg"
);
if
(
!
tBackGround_menu
)
tBackGround_menu
=
tBackGround
;
tBackGround_deck
=
driver
->
getTexture
(
"textures/bg_deck.jpg"
);
if
(
!
tBackGround_deck
)
tBackGround_deck
=
tBackGround
;
tField
[
0
]
=
driver
->
getTexture
(
"textures/field2.png"
);
tFieldTransparent
[
0
]
=
driver
->
getTexture
(
"textures/field-transparent2.png"
);
tField
[
1
]
=
driver
->
getTexture
(
"textures/field3.png"
);
...
...
system.conf
View file @
052d5ee1
...
...
@@ -31,8 +31,6 @@ prompt_to_discard_deck_changes = 1
enable_sound
=
1
enable_music
=
1
#Volume of sound and music, between 0 and 100
soundvolume
=
50
musicvolume
=
50
#playing the music corresponding to the sequence(start from 0) under folder /BGM
#-1 means playing one of them randomly
BGM_index
= -
1
sound_volume
=
50
music_volume
=
50
music_mode
=
1
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