Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
krkane
/
Rüütli Vaev
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
1
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
48889ddc
authored
Mar 20, 2024
by
gerann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Uuendus gameBase.c
parent
c1c50d4c
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
216 additions
and
107 deletions
Source/gameBase.c
Source/gameBase.c
View file @
48889ddc
#include "Header.h"
const
char
*
playerHitScenarios
[]
=
{
"Sa tegid kiire rünnaku vastasele. Ta võttis %d kahju (Alles %dHP).
\n
"
,
"Vastane kaotas tasakaalust, kui ründasid teda. Ta kaotas %d elu (Alles %dHP).
\n
"
,
"Sa tegid ründes viimase otsustava löögi vastasele. Ta võttis %d kahju (Alles %dHP).
\n
"
"
\n
Sa tegid kiire rünnaku vastasele. Ta võttis %d kahju (Alles %dHP).
\n
"
,
"
\n
Vastane kaotas tasakaalust, kui ründasid teda. Ta kaotas %d elu"
"(Alles %dHP).
\n
"
,
"
\n
Sa tegid ründes viimase otsustava löögi vastasele. Ta võttis %d kahju"
"(Alles %dHP).
\n
"
};
const
char
*
enemyHitScenarios
[]
=
{
"Vastane eiras sinu rünnakut ja vastas oma rünnakuga. Sa kaotasid %d elu. (Alles %dHP)
\n
"
,
"Vastane ründas sind ja võttis %d kahju. (Alles %dHP)
\n
"
,
"Vastane tabas sind ootamatult, võttes %d elu. (Alles %dHP)
\n
"
"
\n
Vastane eiras sinu rünnakut ja vastas oma rünnakuga. Sa kaotasid %d elu."
"(Alles %dHP)
\n
"
,
"
\n
Vastane ründas sind ja võttis %d kahju. (Alles %dHP)
\n
"
,
"
\n
Vastane tabas sind ootamatult, võttes %d elu. (Alles %dHP)
\n
"
};
const
char
*
evenScenarios
[]
=
{
"Mängija ja vastane võitlevad väsimatult. Kumbki ei taha alla anda!
\n
"
,
"Tõeline võitlus jätkub! Kumbki vastane ei anna alla!
\n
"
,
"Võitlus kuumeneb, kuid tulemused ei muutu! Mõlemad vastased on visad!
\n
"
"
\n
Mängija ja vastane võitlevad väsimatult. Kumbki ei taha alla anda!
\n
"
,
"
\n
Tõeline võitlus jätkub! Kumbki vastane ei anna alla!
\n
"
,
"
\n
Võitlus kuumeneb, kuid tulemused ei muutu! Mõlemad vastased on visad!
\n
"
};
Player
CreatePlayer
()
{
Player
player
;
player
.
health
=
100
;
player
.
attack
=
10
;
player
.
potionCount
=
3
;
player
.
health
=
PLAYER_BASE_HEALTH
;
player
.
attack
=
PLAYER_BASE_DAMAGE
;
player
.
potionCount
=
POT_COUNT
;
return
player
;
}
int
Move
(
int
defeated_enemies
)
{
printf
(
"Sa seisad koopas, kust avanevad kaks pimedat käiku. Igaüks neist tundub olevat süngem kui teine.
\n
"
"Süda puperdades mõtled sa, millisesse neist suunduda.
\n
"
);
printf
(
"
\n
Sa seisad koopas, kust avanevad kaks pimedat käiku. Üks"
" süngem kui teine.
\n
"
"Süda puperdades mõtled sa, millisesse neist suunduda.
\n\n
"
);
// Genereerime juhusliku arvu, et määrata, milline käik on õige
int
correctChoice
=
rand
()
%
2
+
1
;
...
...
@@ -40,15 +45,16 @@ int Move(int defeated_enemies)
{
printf
(
"1. Vasakule
\n
"
"2. Paremale
\n
"
"0. Välju
mängu
st
\n
"
);
"0. Välju
koopa
st
\n
"
);
}
else
{
// Kui see pole esimene vaenlane, siis määrame vasaku ja parema käigu vastavalt juhuslikult
printf
(
"1. %s
\n
"
,
(
correctChoice
==
1
)
?
"Mine vasakule"
:
"Mine paremale"
);
printf
(
"2. %s
\n
"
,
(
correctChoice
==
2
)
?
"Mine vasakule"
:
"Mine paremale"
);
printf
(
"3. Mine tagasi puhkealale
\n
"
"0. Välju mängust
\n
"
);
printf
(
"1. %s
\n
"
,
(
correctChoice
==
1
)
?
"Mine vasakule"
:
"Mine paremale"
);
printf
(
"2. %s
\n
"
,
(
correctChoice
==
2
)
?
"Mine vasakule"
:
"Mine paremale"
);
printf
(
"0. Välju mängust
\n
"
);
}
int
choice
;
...
...
@@ -61,29 +67,46 @@ int Move(int defeated_enemies)
if
(
choice
==
0
)
{
printf
(
"Sul tekib äkki tunne, et see ei ole veel aeg seikluseks ning otsustad mängust väljuda.
\n
"
);
printf
(
"Sul tekib äkki tunne, et see ei ole veel aeg seikluseks ning"
" otsustad koopast väljuda.
\n
"
);
printf
(
"Kas te soovite mänguseisu salvestada?
\n
"
);
printf
(
"1 - Jah
\n
0 - Ei
\n
"
);
int
select
;
scanf
(
"%d"
,
&
select
);
while
(
select
!=
1
&&
select
!=
0
)
{
printf
(
"Palun sisestage õige valik..."
);
scanf
(
"%d"
,
&
select
);
}
printf
(
"
\n
Väljun...."
);
if
(
select
==
1
)
{
printf
(
"
\n
Salvesin mängu. Väljun....
\n
"
);
return
SAVE_GAME
;
}
else
return
0
;
}
if
((
choice
==
1
&&
correctChoice
==
1
)
||
(
choice
==
2
&&
correctChoice
==
2
))
if
((
choice
==
1
&&
correctChoice
==
1
)
||
(
choice
==
2
&&
correctChoice
==
2
))
{
printf
(
"Sinu süda peksleb põnevusest, kui astud ettevaatlikult käiku.
\n
"
"Seina ääres näeb välja nagu oleks midagi... liikunud?
\n
"
"Sa süvendad oma hingamist ja jätkad edasist teekonda.
\n
"
);
printf
(
"
\n
Sinu süda peksleb kiiresti, kui astud ettevaatlikult edasi."
"
\n
"
"Seina ääres näeb välja nagu oleks miski... liikunud?
\n
"
"Sa süvendad oma hingamist ja jätkad kangelaslikul sammul.
\n
"
);
return
1
;
}
else
if
((
choice
==
1
&&
correctChoice
==
2
)
||
(
choice
==
2
&&
correctChoice
==
1
))
else
if
((
choice
==
1
&&
correctChoice
==
2
)
||
(
choice
==
2
&&
correctChoice
==
1
))
{
printf
(
"
Tunned, et midag
i pole päris õige.
\n
"
printf
(
"
\n
Tunned, et miski
i pole päris õige.
\n
"
"Järsku kuuled kaugel mingit veidrat müra...
\n
"
"See osutub ohtlikuks lõksuks! Sa kaotad elusid!
\n
"
);
return
-
1
;
}
else
if
(
choice
==
3
)
{
printf
(
"Sa otsustad naasta puhkealale ja valmistuda järgmiseks seikluseks.
\n
"
"Taas kord tunned end turvaliselt tulede valgel ja lõkke praksumisel.
\n
"
);
return
3
;
"See osutub ohtlikuks lõksuks! Sa kaotad elusid!
\n\n
"
);
return
LOSE_HP
;
}
else
{
...
...
@@ -92,76 +115,78 @@ int Move(int defeated_enemies)
}
}
void
handleTrap
(
Player
*
player
)
{
player
->
health
-=
10
;
// Subtract 10 from player's max health
if
(
player
->
health
<=
0
)
{
printf
(
"Kahjuks, sa kaotasid.
\n
"
);
exit
(
0
);
// Player lost the game
}
else
{
printf
(
"Sul on alles %d elu.
\n
"
,
player
->
health
);
}
}
int
fight
(
Player
*
p
,
Enemy
*
e
)
{
int
fight
(
Player
*
p
,
Enemy
*
e
)
{
int
playerHp
=
p
->
health
;
int
enemyHp
=
e
->
health
;
int
playerAttack
,
enemyAttack
;
int
escaped
=
0
;
// Flag variable to track if player escaped
int
initialHealth
=
p
->
health
;
// Store initial health
while
(
playerHp
>
0
&&
enemyHp
>
0
&&
!
escaped
)
{
while
(
playerHp
>
0
&&
enemyHp
>
0
&&
!
escaped
)
{
printf
(
"
\n
Valikud:
\n
"
);
printf
(
"1. Ründa
\n
"
);
printf
(
"2. Põgene
\n
"
);
printf
(
"3. Kasuta võlujooki
\n
"
);
printf
(
"4. Lõpeta enda käik
\n
"
);
printf
(
"2. Kasuta võlujooki
\n
"
);
printf
(
"3. Põgene
\n
"
);
printf
(
"Vali tegevus: "
);
int
choice
;
scanf
(
"%d"
,
&
choice
);
switch
(
choice
)
{
switch
(
choice
)
{
case
1
:
playerAttack
=
rand
()
%
p
->
attack
+
1
;
// Random player attack
enemyAttack
=
rand
()
%
e
->
attack
+
1
;
// Random enemy attack
if
(
playerAttack
>
enemyAttack
)
{
if
(
playerAttack
>
enemyAttack
)
{
int
damageDealt
=
playerAttack
;
enemyHp
-=
damageDealt
;
printf
(
playerHitScenarios
[
rand
()
%
(
sizeof
(
playerHitScenarios
)
/
sizeof
(
playerHitScenarios
[
0
]))],
damageDealt
,
enemyHp
);
}
else
if
(
enemyAttack
>
playerAttack
)
{
printf
(
playerHitScenarios
[
rand
()
%
(
sizeof
(
playerHitScenarios
)
/
sizeof
(
playerHitScenarios
[
0
]))],
damageDealt
,
enemyHp
);
}
else
if
(
enemyAttack
>
playerAttack
)
{
int
damageTaken
=
enemyAttack
;
playerHp
-=
damageTaken
;
printf
(
enemyHitScenarios
[
rand
()
%
(
sizeof
(
enemyHitScenarios
)
/
sizeof
(
enemyHitScenarios
[
0
]))],
damageTaken
,
playerHp
);
}
else
{
printf
(
evenScenarios
[
rand
()
%
(
sizeof
(
evenScenarios
)
/
sizeof
(
evenScenarios
[
0
]))]);
printf
(
enemyHitScenarios
[
rand
()
%
(
sizeof
(
enemyHitScenarios
)
/
sizeof
(
enemyHitScenarios
[
0
]))],
damageTaken
,
playerHp
);
}
else
{
printf
(
evenScenarios
[
rand
()
%
(
sizeof
(
evenScenarios
)
/
sizeof
(
evenScenarios
[
0
]))]);
}
break
;
case
2
:
printf
(
"
\n
Sa põgenesid koopast.
\n
Väljun...
\n
"
);
escaped
=
1
;
playerHp
=
usePotion
(
p
,
initialHealth
,
playerHp
);
break
;
case
3
:
usePotion
(
p
,
initialHealth
,
playerHp
);
break
;
case
4
:
printf
(
"Sa lõpetasid enda käigu.
\n
"
);
printf
(
"
\n
Sa põgenesid koopast.
\n
"
);
escaped
=
1
;
break
;
default:
printf
(
"Vale valik. Palun vali uuesti.
\n
"
);
}
if
(
playerHp
<=
0
)
{
if
(
playerHp
<=
0
)
{
printf
(
"Kahjuks, sa kaotasid.
\n
"
);
return
0
;
// Mängija kaotas
}
else
if
(
enemyHp
<=
0
)
{
}
else
if
(
enemyHp
<=
0
)
{
printf
(
"Sinu võit!
\n\n
"
);
}
}
return
escaped
?
0
:
1
;
// If player escaped, return
0, otherwise return 1
return
escaped
?
0
:
1
;
// If player escaped, return
1, otherwise return 0
}
int
bossFight
(
Player
*
p
,
Enemy
*
boss
)
{
int
bossFight
(
Player
*
p
,
FinalBoss
*
boss
)
{
int
playerHp
=
p
->
health
;
int
bossHp
=
boss
->
health
;
int
playerAttack
,
bossAttack
;
...
...
@@ -171,48 +196,51 @@ int bossFight(Player *p, Enemy *boss) {
printf
(
"
\n
Te seisate võimsa vaenlase, %s, ees. Tal on %dHP ja tema rünnaku tugevus on %d.
\n
"
,
boss
->
type
,
boss
->
health
,
boss
->
attack
);
while
(
playerHp
>
0
&&
bossHp
>
0
&&
!
escaped
)
{
while
(
playerHp
>
0
&&
bossHp
>
0
&&
!
escaped
)
{
printf
(
"
\n
Valikud:
\n
"
);
printf
(
"1. Ründa
\n
"
);
printf
(
"2. Põgene
\n
"
);
printf
(
"3. Kasuta võlujooki
\n
"
);
printf
(
"4. Lõpeta enda käik
\n
"
);
printf
(
"2. Kasuta võlujooki
\n
"
);
printf
(
"3. põgene
\n
"
);
printf
(
"Vali tegevus: "
);
int
choice
;
scanf
(
"%d"
,
&
choice
);
switch
(
choice
)
{
switch
(
choice
)
{
case
1
:
playerAttack
=
rand
()
%
p
->
attack
+
1
;
// Random player attack
bossAttack
=
rand
()
%
boss
->
attack
+
1
;
// Random boss attack
if
(
playerAttack
>
bossAttack
)
{
if
(
playerAttack
>
bossAttack
)
{
int
damageDealt
=
playerAttack
;
bossHp
-=
damageDealt
;
printf
(
playerHitScenarios
[
rand
()
%
(
sizeof
(
playerHitScenarios
)
/
sizeof
(
playerHitScenarios
[
0
]))],
damageDealt
,
bossHp
);
}
else
if
(
bossAttack
>
playerAttack
)
{
}
else
if
(
bossAttack
>
playerAttack
)
{
int
damageTaken
=
bossAttack
;
playerHp
-=
damageTaken
;
printf
(
enemyHitScenarios
[
rand
()
%
(
sizeof
(
enemyHitScenarios
)
/
sizeof
(
enemyHitScenarios
[
0
]))],
damageTaken
,
playerHp
);
}
else
{
}
else
{
printf
(
evenScenarios
[
rand
()
%
(
sizeof
(
evenScenarios
)
/
sizeof
(
evenScenarios
[
0
]))]);
}
break
;
case
2
:
printf
(
"
\n
Te põgenesite lahingust.
\n
"
);
escaped
=
1
;
playerHp
=
usePotion
(
p
,
initialHealth
,
playerHp
);
break
;
case
3
:
usePotion
(
p
,
initialHealth
,
playerHp
);
break
;
case
4
:
printf
(
"
\n
Te lõpetasite oma käigu.
\n
"
);
printf
(
"
\n
Sa põgenesid koopast.
\n
"
);
escaped
=
1
;
break
;
default:
printf
(
"
\n
Vale valik. Palun valige
uuesti.
\n
"
);
printf
(
"
Vale valik. Palun vali
uuesti.
\n
"
);
}
if
(
bossHp
<
bosshp
/
2
&&
specialAttack
==
0
)
if
(
bossHp
<
=
BOSS_HEALTH
&&
specialAttack
==
0
)
{
printf
(
"
\n
Koopa pealik vihastab. Ta kogub ennast tummise rünnaku jaoks."
"
\n
Sa märkasid rünnakut viimasel sekundil ning sul on kaks valikut.
\n
"
);
...
...
@@ -233,57 +261,95 @@ int bossFight(Player *p, Enemy *boss) {
{
printf
(
"Pealik napilt riivab oma mõõgaga su kätt ning sa ei saanud viga.
\n
"
"Su valik säästis sulle su elu.
\n
"
"Sa kogud sekundiks hinge ning kaklus jätkub
\
\
n"
);
"Sa kogud sekundiks hinge ning kaklus jätkub
\n
"
);
}
else
if
((
choice
==
1
&&
correctChoice
==
2
)
||
(
choice
==
2
&&
correctChoice
==
1
))
{
printf
(
"Pealik lööb kogu oma jõu ja uhkusega sulle rangluu pihta.
\n
"
"Sa karjud suurest valust.
\n
"
);
playerHp
-=
SPECIAL_DAMAGE
;
printf
(
"Löök võttis sult %d elu (alles %d HP)"
,
SPECIAL_DAMAGE
,
playerHp
);
if
(
playerHp
<=
0
)
{
printf
(
"
\n
Su keha ei pidanud löögile vastu ning jooksid nii energiast kui ka verest tühjaks."
"
\n
Kahjuks, sa kaotasid.
\n
"
);
return
0
;
// Mängija kaotas
}
specialAttack
=
1
;
}
specialAttack
++
;
}
if
(
playerHp
<=
0
)
{
if
(
playerHp
<=
0
)
{
printf
(
"
\n
Kahjuks, sa kaotasid.
\n
"
);
return
0
;
// Mängija kaotas
}
else
if
(
bossHp
<=
0
)
{
printf
(
"
\n
Te võitsite!
\n
"
);
return
1
;
// Mängija võitis
}
}
else
if
(
bossHp
<=
0
)
{
printf
(
"
\n\n
TEIE VÕIT!
\n
Kõnnite võidukalt üle Final Bossi"
" korjuse ja näete suurt hunnikut sädelevat kulda
\n
"
"Ja ENNÄE!! Varanduse kõrval lebab uinund printsess
\n
"
"Aga teie võitlusest väsinud käed suudavad kanda"
" ainult üht, kas printsessi, või varandust...
\n
"
);
printf
(
"Kumma te valite:
\n
1. Varandus
\n
2. Printsess
\n
>"
);
int
finalChoice
;
scanf
(
"%d"
,
&
finalChoice
);
while
(
finalChoice
!=
1
&&
finalChoice
!=
2
)
{
printf
(
"Palun valige sobilik valik...
\n
>"
);
scanf
(
"%d
\n
"
,
&
finalChoice
);
}
if
(
finalChoice
==
1
)
{
printf
(
"Te haarate varanduse ning kõnnite koopa"
" väljapääsu poole, vaadates veel korra üle õla"
" printsessi poole, kuid ta ei peata teid.
\n
"
"
\n
MÄNG LÄBI
\n
"
);
return
0
;
}
else
{
printf
(
"Te võtate imekauni printsessi oma sülle"
" ning alustate retke tagasi koopa väljapääsu poole
\n
"
"Vaadates veel korra säreleva varanduse poole"
", kuid see ei peata teid.
\n
"
"
\n
MÄNG LÄBI
\n
"
);
return
0
;
}
}
}
return
escaped
?
0
:
1
;
// If player escaped, return 0, otherwise return 1
}
void
usePotion
(
Player
*
p
,
int
initialHealth
,
int
currentHealth
)
int
usePotion
(
Player
*
p
,
int
initialHealth
,
int
currentHealth
)
{
if
(
p
->
potionCount
>
0
)
{
int
restoredHealth
=
currentHealth
-
initialHealth
;
// Calculate restored health
p
->
health
+=
25
;
// Increase current health by 25
{
int
healing
=
POTION
;
currentHealth
+=
healing
;
// Increase current health by 25
// Ensure current health doesn't exceed initial health
if
(
p
->
health
>
initialHealth
)
p
->
health
=
initialHealth
;
if
(
currentHealth
>
initialHealth
)
{
healing
=
(
currentHealth
-
initialHealth
)
*
-
1
+
POTION
;
currentHealth
=
initialHealth
;
}
p
->
potionCount
--
;
// Decrease potion count
printf
(
"
\n
Kasutasid võlujooki. Sa said %d elu tagasi (%d-HP). Alles %d"
" võlujooki.
\n
"
,
restoredHealth
,
p
->
h
ealth
,
p
->
potionCount
);
" võlujooki.
\n
"
,
healing
,
currentH
ealth
,
p
->
potionCount
);
}
else
{
printf
(
"
\n
Sul ei ole võlujooki enam saadaval!
\n
"
);
}
return
currentHealth
;
}
void
levelUp
(
Player
*
p
)
{
p
->
health
+=
20
;
// Lisame mängijale 20 HP-d
p
->
attack
+=
5
;
// Lisame mängijale 5 rünnakuvõimet
p
->
health
+=
LEVEL_UP_HP
;
// Lisame mängijale 20 HP-d
p
->
attack
+=
LEVEL_UP_ATTACK
;
// Lisame mängijale 5 rünnakuvõimet
printf
(
"Mängija taseme tõus! Sa said 20 lisa HP-d ja 5 lisa rünnakuvõimet"
"!
\n
"
);
printf
(
"Mängija andmed: HP - %d, rünnakuvõime - %d
\n\n
"
,
p
->
health
,
...
...
@@ -301,23 +367,23 @@ Enemy CreateEnemy(int defeated_enemies)
{
case
0
:
strcpy
(
enemy
.
type
,
"Päkapikk"
);
// Päkapikk
enemy
.
attack
=
10
;
enemy
.
attack
=
ELF_BASE_DAMAGE
;
break
;
case
1
:
strcpy
(
enemy
.
type
,
"Ork"
);
// Ork
enemy
.
attack
=
15
;
enemy
.
attack
=
ORK_BASE_DAMAGE
;
break
;
case
2
:
strcpy
(
enemy
.
type
,
"Smurf"
);
// Smurf
enemy
.
attack
=
20
;
enemy
.
attack
=
SMURF_BASE_DAMAGE
;
break
;
case
3
:
strcpy
(
enemy
.
type
,
"Deemon"
);
// Deemon
enemy
.
attack
=
25
;
enemy
.
attack
=
DEEMON_BASE_DAMAGE
;
break
;
default:
strcpy
(
enemy
.
type
,
"Bandiit"
);
// Bandiit
enemy
.
attack
=
30
;
enemy
.
attack
=
BANDIIT_BASE_DAMAGE
;
}
return
enemy
;
...
...
@@ -328,8 +394,8 @@ FinalBoss CreateFinalBoss(int defeated_enemies)
FinalBoss
boss
;
// Adjust boss stats based on the number of defeated enemies
// You can customize the boss's stats and type based on the game's design
boss
.
health
=
100
+
defeated_enemies
*
20
;
boss
.
attack
=
20
+
defeated_enemies
*
5
;
boss
.
health
=
BOSS_HEALTH
+
defeated_enemies
*
20
;
boss
.
attack
=
BOSS_DAMAGE
+
defeated_enemies
*
5
;
strcpy
(
boss
.
type
,
"Final Boss"
);
return
boss
;
}
...
...
@@ -357,3 +423,46 @@ void DisplayGameRules(void)
"3. Kasuta võlujooki - sellega saad endale võitluse ajal"
" taastada 25 elu.
\n
"
);
}
int
Menu
(
void
)
{
int
choice
;
putchar
(
'\n'
);
puts
(
"Valige enda soov!"
);
puts
(
"1 - Alusta uut mängu"
);
puts
(
"2 - Kuva reeglid"
);
puts
(
"3 - Jätka mängu"
);
puts
(
"0 - Välju"
);
choice
=
GetIntInRange
(
INPUT_MIN
,
INPUT_MAX
);
return
choice
;
}
int
GetIntInRange
(
int
min
,
int
max
)
{
int
num
;
do
{
printf
(
"> "
);
scanf
(
"%d"
,
&
num
);
if
(
num
<
min
||
num
>
max
)
{
printf
(
"
\n
Palun valige õige sisend!
\n
"
);
}
}
while
(
num
<
min
||
num
>
max
);
return
num
;
}
void
handleTrap
(
Player
*
player
)
{
player
->
health
-=
LOSE_HP
;
// Subtract 10 from player's max health
if
(
player
->
health
<=
0
)
{
printf
(
"Kahjuks, sa kaotasid.
\n
"
);
exit
(
0
);
// Player lost the game
}
else
{
printf
(
"Sul on alles %d elu.
\n
"
,
player
->
health
);
}
}
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