aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Kronqvist <joel.kronqvist@iki.fi>2024-11-27 17:49:14 +0200
committerJoel Kronqvist <joel.kronqvist@iki.fi>2024-11-27 17:49:42 +0200
commita41c720736ae194f4c67637d9e822d2d4ded09f9 (patch)
treeceee825b2b53f2e1babee842ab45e397b88f6cf7
parentb50a8e42b6b69ce4e15773c73cf68d2ac8f2175d (diff)
downloadscalevalapokalypsi-master.tar.gz
scalevalapokalypsi-master.zip
Last commit from meHEADmaster
-rw-r--r--src/scalevalapokalypsi/Model/Adventure.scala20
-rw-r--r--src/scalevalapokalypsi/Server/Server.scala22
-rw-r--r--src/scalevalapokalypsi/walkthrough.txt32
3 files changed, 74 insertions, 0 deletions
diff --git a/src/scalevalapokalypsi/Model/Adventure.scala b/src/scalevalapokalypsi/Model/Adventure.scala
index 9f538c5..d493276 100644
--- a/src/scalevalapokalypsi/Model/Adventure.scala
+++ b/src/scalevalapokalypsi/Model/Adventure.scala
@@ -24,6 +24,10 @@ import scala.math.min
*/
class Adventure(val playerNames: Vector[String]):
+ private var gameIsWon = false
+ def winGame() = this.gameIsWon = true
+ def isWon = this.gameIsWon
+
// Structure:
// * Area definitions
// * Area neighbor definitions
@@ -171,6 +175,22 @@ class Adventure(val playerNames: Vector[String]):
// Item definitions
private val oluttuoppi = Item("oluttuoppi", "Tuopillinen kylmää ja kuohuvaa juomaa. Se tuoksuu aika tujulta.", 1)
+
+ object Key extends Item(
+ "avain",
+ "avain, jolla voi avata ovia",
+ 1
+ ):
+
+ override def use(user: Entity): Option[Event] =
+ if user.location == bossDoor then
+ bossDoor.setNeighbor("sisään", bossFightRoom)
+ Some(Event(immutable.Map.empty, "Ovi aukeaa"))
+ else None
+ end use
+ end Key
+
+ storageRoom.addItem(Key)
object SeparatorScroll extends Item(
"separoitumisen laulukäärö",
diff --git a/src/scalevalapokalypsi/Server/Server.scala b/src/scalevalapokalypsi/Server/Server.scala
index d0bb402..6877876 100644
--- a/src/scalevalapokalypsi/Server/Server.scala
+++ b/src/scalevalapokalypsi/Server/Server.scala
@@ -55,6 +55,8 @@ class Server(
this.writeClientDataToClients()
this.writeObservations()
this.endGameForDeadClients()
+ if adventure.exists(_.isWon) then
+ this.winGame()
if this.canExecuteTurns then
this.clients.foreach(_.giveTurn())
this.adventure.foreach(_.takeNpcTurns())
@@ -189,6 +191,26 @@ class Server(
)
)
+ private def winGame(): Unit =
+ this.clients.foreach(c =>
+ val winEvent = c.player.map(p => Event(
+ Map.empty,
+ s"Onneksi olkoon, voititte pelin!"
+ ))
+ winEvent.foreach(ev => this.clients.foreach(cl =>
+ if cl != c then
+ cl.player.foreach(_.observe(ev))
+ ))
+ )
+ sleep(1000)
+ this.clients.foreach(c =>
+ c.player.foreach((p: Player) =>
+ this.writeToClient(s"$GAME_END_INDICATOR\r\n", c)
+ false
+ )
+ )
+
+
private def writeToClient(message: String, client: Client): Unit =
try {
diff --git a/src/scalevalapokalypsi/walkthrough.txt b/src/scalevalapokalypsi/walkthrough.txt
new file mode 100644
index 0000000..e52e99c
--- /dev/null
+++ b/src/scalevalapokalypsi/walkthrough.txt
@@ -0,0 +1,32 @@
+mene pohjoiseen
+mene pohjoiseen
+mene itään
+mene itään
+[laula zombeja suohon]
+mene etelään
+puhu uoleville
+mene länteen
+mene länteen
+mene etelään
+mene metsikköön
+mene mökkiin
+puhu erakkotietäjälle
+puhu erakkotietäjälle
+poimi separoitumisen laulukäärö
+mene ulos
+mene pois metsiköstä
+mene itään
+mene itään
+mene etelään
+käytä separoitumisen laulukäärö
+mene kallion sisään
+[laula suohon vähän kultisteja]
+mene syvemmälle
+[tästä eteenpäin testaamatonta ajan puutteen vuoksi]
+mene syvemmälle
+mene länteen
+ota avain
+mene ulos
+käytä avain
+mene sisään
+[laula ensin Miikkulainen suohon, sitten vasta lentävä otus, lonkerot ovat toissijaisia]