aboutsummaryrefslogtreecommitdiff
path: root/src/scalevalapokalypsi/Model/Action.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/scalevalapokalypsi/Model/Action.scala')
-rw-r--r--src/scalevalapokalypsi/Model/Action.scala41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/scalevalapokalypsi/Model/Action.scala b/src/scalevalapokalypsi/Model/Action.scala
index 75ce68c..94d13a5 100644
--- a/src/scalevalapokalypsi/Model/Action.scala
+++ b/src/scalevalapokalypsi/Model/Action.scala
@@ -3,6 +3,8 @@ package scalevalapokalypsi.Model
import scalevalapokalypsi.Model.Entities.*
import scalevalapokalypsi.Model.Entities.NPCs.*
+import scala.collection.immutable
+
/** The class `Action` represents actions that a player may take in a text
* adventure game. `Action` objects are constructed on the basis of textual
* commands and are, in effect, parsers for such commands. An action object is
@@ -25,6 +27,44 @@ class Action(input: String):
* @return Boolean indicating whether the action possibly taken takes a
* turn or not.
*/
+ def help(actor: Entity): Event =
+ Event(
+ immutable.Map.from(Vector((actor, "Tässä ovat komennot," +
+ " joita voit" +
+ " käyttää pelin aikana:\n\napua/?/help:" +
+ " Näyttää pelaajalle saatavilla olevat" +
+ " komennot ja" +
+ " kertoo mitä ne tekevät.\n\nkäytä [esine]:" +
+ " Käyttää kyseisen esineen." +
+ " Vaikutus vaihtelee esineiden välillä." +
+ "\n\nlaula [olento] suohon: Laulaa toisen" +
+ " olennon suohon.\n\nlepää:" +
+ " Pelaaja levähtää, ei mitään sen" +
+ " erikoisempaa vaikutusta." +
+ "\n\nmene [suunta]: Vaihtaa pelaajan" +
+ " paikkaa/sijaintia pelissä," +
+ " jos se on mahdollista. Komennon perään laitetaan" +
+ " ilmansuunta," +
+ " joka kertoo, mihin suuntaan pelaaja liikkuu." +
+ "\n\npoimi/ota [esine]:" +
+ " Lisää kyseisen esineen pelaajan tavaraluetteloon," +
+ " jos se on saatavilla" +
+ " kyseisessä sijainnissa. Komennon perään kirjoitetaan" +
+ " esineen nimi, mikä halutaan ottaa. \n\npuhu [pelaaja]:" +
+ " Välittää viestin olennolle, joka ei ole pelaaja." +
+ "\n\nsano [olento]: Välittää viestin toiselle" +
+ " pelaajalle.\n\ntavaraluettelo:" +
+ " Näyttää, mitä esineitä pelaajalla on" +
+ " tavaraluettelossaan. Näyttää lisäksi esineiden määrän." +
+ " Jos pelaajalla ei ole esineitä tavaraluettelossaan" +
+ ", niin komento kertoo tavaraluettelon olevan tyhjä." +
+ "\n\ntiputa/pudota [esine]:" +
+ " Pudottaa kyseisen esineen pelaajan tavaraluettelosta," +
+ " jolloin se myös vähennetään pelaajan tavaraluettelosta." +
+ " \n\nxyzzy: Nam nam "))),
+ s""
+ )
+
def execute(actor: Player): Boolean =
val oldLocation = actor.location
val resOption: Option[(Boolean, Event)] = this.verb match
@@ -35,6 +75,7 @@ class Action(input: String):
oldLocation.observeEvent(r)
)
result.map((true, _))
+ case "help" | "?" | "apua" => Some((false, this.help(actor)))
case "lepää" => Some((true, actor.rest()))
case "poimi" | "ota" => Some((false, actor.pickUp(this.modifiers)))
case "tavaraluettelo" => Some((false, actor.inventory))