Multiplayer Game?

Hello, I'm new to Quest so I'm sorry if this is a novice question but the reason I even got into Quest was to create games like Oregon Trail, Where a single person plays it but has a group of friends in the room who are characters in the game and they get to name and choice their characters actions. Because to me Text Adventures or Choose Your Own Adventure Games are best with a group of friends arguing and laughing about the outcomes and events. It would almost be like Oregon Trail but maybe with more group interaction then them just watching their characters do stuff like maybe have aspects from The Yawhg where one persons actions effect everyone at the time or sometimes later on cause large changes in the story. Is a game like this possible to make on Quest? Any thoughts, tips or tricks to doing this? Are there any tutorials to creating this type of game?


The problem is that each person would need a turn at the keyboard to type in what they are doing...
This would be better in a graphics type of game with game controllers, movement, but no text typing...
(Atari has a game called Ali Baba and the 40 thieves... multiplayer, but past 4 players and you needed to share controllers, which was not a problem because it was turn based...)
It "may" be doable... but you would need a loop to cycle through each active player and make the "player" become the "active player" (the person who's turn it is)
Maybe as:
program sets player to "John"
John is active:> ..... (What John types...)
program sets player to "Sam"
Sam is active:>... (Sam types...)
program sets player to "Joe"
Joe is active:>...

You would have 3 character objects, John, Sam, and Joe, and have them set as "Player can become this object"...
(I think that could work...)


You could have a turnscript that iterates through each player in turn. Perhaps it checks if the last command was successful, and only goes to the next player if it was. If the players split up, it could get confusing for them trying to remember where they are.

It would probably be possible to divide the screen into quarters, each with its own text input, each tracking one character. They could then use the mouse to select one, and type in a command. This would take some serious JavaScript trickery, but should be doable (ask KV, he likes a challenge!)


"The problem is that each person would need a turn at the keyboard to type in what they are doing...
This would be better in a graphics type of game with game controllers, movement, but no text typing..."

yeah that would be fine for us because me and my friends plays games like that a lot, like one persons sits in front of the computer and we all play XCOM telling the one person what we want to do. Would it be easier with Quest's second game option like making it a Gamebook? so they are only choosing between options already there, thus cutting out a lot of the typing?


K.V.

We are talking about people in the same place taking turns on one computer; correct?


yes, a whole bunch of people sitting on a couch together taking turns on the keyboard or being lazy and making one person do it by telling him what you want


Although this might have limited appeal for multiplayer, it could as easily be done with one player controlling four characters at the same time, which would make for some interesting possibilities.


K.V.

I've got something cooking.

You can choose how many players there will be, then set each character up. Once finished, all the player objects are in the starting room, and player1 kicks things off.

(I'm currently contemplating how to handle characters interacting with each other. I'm thinking asking, telling, ordering, or speaking to another player will just switch the POV, allowing the player who is being addressed to respond.)


Puzzle ideas:

  1. Some rooms can only contain one person at a time. One player will have to go through one room (i.e., crossing a rotten log) to open an exit the group can use to progress. If more than one person enters the "rotten log" room, SOMEONE DIED! GAME OVER!

  2. A certain number of players will have to be holding certain objects for the current player to perform some action to progress.


Speaking of someone dying...

A single death could either end the game, simply remove that player from the list of active players, or be the event which changes the POV to a new player.


I can picture playing a game like this...
It would be all attacks. We'd never finish the game.

> slap XM
You slap XanMag.

PLAYER 2's TURN:

> slap KV
You slap KV.

PLAYER 3's TURN:
> slap XM
You slap XM.

PLAYER 1's TURN:
> kick DL
You kick Dark Lizerd.


K.V.

Okay...

This isn't very good, but it may be a good foundation (I think).

http://textadventures.co.uk/games/view/aapzwuvki0ss26_qctzjgg/multi-player-prototype


It is VERY rough. (The screen doesn't even clear after character creation.)

The instructions will display when play begins (or you can read the game description).


The code:

<!--Saved by Quest 5.7.6606.27193-->
<asl version="550">
  <include ref="English.aslx" />
  <include ref="Core.aslx" />
  <game name="Multi-player Prototype">
    <gameid>fbefdbc6-56a1-4759-be8f-bfd2ccfc5702</gameid>
    <version>0.0.2</version>
    <firstpublished>2018</firstpublished>
    <attr name="autodescription_youarein_useprefix" type="boolean">false</attr>
    <customstatuspane />
    <commandpane type="boolean">false</commandpane>
    <feature_advancedscripts />
    <author>KV</author>
    <description><![CDATA[This is a very rough prototype.  (The rooms don't even have descriptions.)<br/><br/>INSTRUCTIONS:<br/><br/>Select the number of players.  Then, enter the name, gender, and description of each player.<br/><br/>Each player gets 1 turn, then it will be the next player's turn.<br/><br/>The flag will be in a random part of the cave in each game.<br/><br/>The first player to get the flag wins.<br/><br/>At the moment, the items are only there for dropping (to map the cave), except for the compass, which will be in a random part of the cave in each game.   Whoever has the compass will have a compass pane.<br/><br/><br/>NOTES:<br/><br/>You can click on the map in the pane to view the full-size map.<br/>The Cave with the green outline on the map is the starting room.<br/>If you attack a player who is carrying something, they will drop one random item.]]></description>
    <start type="script">
      JS.showPopupCustomSize ("WELCOME!", game.description, "80%", "auto")
      int = GetRandomInt(2,23)
      flag.parent = GetObject("Cave"+int)
      SetupMapPane
      SetupStuff
      JS.eval ("$(\"#compassLabel,#compassAccordion\").hide()")
    </start>
    <inituserinterface type="script"><![CDATA[
      js = Replace(javascript.description,"<br/>","")
      JS.eval (js)
    ]]></inituserinterface>
  </game>
  <object name="room">
    <inherit name="editor_room" />
  </object>
  <object name="Character Creation">
    <inherit name="editor_room" />
    <usedefaultprefix type="boolean">false</usedefaultprefix>
    <firstenter type="script">
      SetupPlayers
    </firstenter>
    <object name="player">
      <inherit name="editor_object" />
      <inherit name="editor_player" />
    </object>
  </object>
  <turnscript name="next_player">
    <script><![CDATA[
      int = ListCount(game.player_list)
      current = ToInt(Replace(game.pov.name,"player",""))
      if (int = current) {
        o = player1
      }
      else {
        o = GetObject("player"+(current+1))
      }
      msg ("<br/><h1>"+UCase(o.name)+"</h1>")
      ChangePOV (o)
    ]]></script>
  </turnscript>
  <object name="Cave">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="north" to="Cave11">
      <inherit name="northdirection" />
    </exit>
  </object>
  <object name="Cave2">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="southeast" to="Cave11">
      <inherit name="southeastdirection" />
    </exit>
  </object>
  <object name="Cave3">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="southeast" to="Cave18">
      <inherit name="southeastdirection" />
    </exit>
    <exit alias="southwest" to="Cave17">
      <inherit name="southwestdirection" />
    </exit>
  </object>
  <object name="Cave4">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="northeast" to="Cave18">
      <inherit name="northeastdirection" />
    </exit>
    <exit alias="southwest" to="Cave5">
      <inherit name="southwestdirection" />
    </exit>
  </object>
  <object name="Cave5">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="south" to="Cave20">
      <inherit name="southdirection" />
    </exit>
    <exit alias="west" to="Cave11">
      <inherit name="westdirection" />
    </exit>
    <exit alias="northeast" to="Cave4">
      <inherit name="northeastdirection" />
    </exit>
  </object>
  <object name="Cave6">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="north" to="Cave8">
      <inherit name="northdirection" />
    </exit>
    <exit alias="southwest" to="Cave16">
      <inherit name="southwestdirection" />
    </exit>
  </object>
  <object name="Cave7">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="west" to="Cave17">
      <inherit name="westdirection" />
    </exit>
  </object>
  <object name="Cave8">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="south" to="Cave6">
      <inherit name="southdirection" />
    </exit>
  </object>
  <object name="Cave9">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="south" to="Cave16">
      <inherit name="southdirection" />
    </exit>
    <exit alias="southwest" to="Cave19">
      <inherit name="southwestdirection" />
    </exit>
  </object>
  <object name="Cave10">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="east" to="Cave19">
      <inherit name="eastdirection" />
    </exit>
    <object name="flag">
      <inherit name="editor_object" />
      <alias>flag</alias>
      <take type="script"><![CDATA[
        msg ("<h1>YOU WIN!</h1>")
        finish
      ]]></take>
    </object>
  </object>
  <object name="Cave11">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="north" to="Cave12">
      <inherit name="northdirection" />
    </exit>
    <exit alias="south" to="Cave">
      <inherit name="southdirection" />
    </exit>
    <exit alias="east" to="Cave5">
      <inherit name="eastdirection" />
    </exit>
    <exit alias="west" to="Cave14">
      <inherit name="westdirection" />
    </exit>
    <exit alias="northeast" to="Cave23">
      <inherit name="northeastdirection" />
    </exit>
    <exit alias="northwest" to="Cave2">
      <inherit name="northwestdirection" />
    </exit>
  </object>
  <object name="Cave12">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="north" to="Cave13">
      <inherit name="northdirection" />
    </exit>
    <exit alias="south" to="Cave11">
      <inherit name="southdirection" />
    </exit>
    <exit alias="northeast" to="Cave15">
      <inherit name="northeastdirection" />
    </exit>
  </object>
  <object name="Cave13">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="south" to="Cave12">
      <inherit name="southdirection" />
    </exit>
    <exit alias="east" to="Cave15">
      <inherit name="eastdirection" />
    </exit>
  </object>
  <object name="Cave14">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="south" to="Cave11">
      <inherit name="southdirection" />
    </exit>
  </object>
  <object name="Cave15">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="west" to="Cave13">
      <inherit name="westdirection" />
    </exit>
    <exit alias="southwest" to="Cave12">
      <inherit name="southwestdirection" />
    </exit>
  </object>
  <object name="Cave16">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="north" to="Cave9">
      <inherit name="northdirection" />
    </exit>
    <exit alias="east" to="Cave18">
      <inherit name="eastdirection" />
    </exit>
    <exit alias="northeast" to="Cave6">
      <inherit name="northeastdirection" />
    </exit>
  </object>
  <object name="Cave17">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="east" to="Cave7">
      <inherit name="eastdirection" />
    </exit>
    <exit alias="northeast" to="Cave3">
      <inherit name="northeastdirection" />
    </exit>
  </object>
  <object name="Cave18">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="southeast" to="Cave16">
      <inherit name="southeastdirection" />
    </exit>
    <exit alias="southwest" to="Cave4">
      <inherit name="southwestdirection" />
    </exit>
    <exit alias="northwest" to="Cave3">
      <inherit name="northwestdirection" />
    </exit>
  </object>
  <object name="Cave19">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="south" to="Cave11">
      <inherit name="southdirection" />
    </exit>
    <exit alias="west" to="Cave10">
      <inherit name="westdirection" />
    </exit>
    <exit alias="northeast" to="Cave9">
      <inherit name="northeastdirection" />
    </exit>
  </object>
  <object name="Cave20">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="north" to="Cave5">
      <inherit name="northdirection" />
    </exit>
    <exit alias="east" to="Cave21">
      <inherit name="eastdirection" />
    </exit>
  </object>
  <object name="Cave21">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="east" to="Cave22">
      <inherit name="eastdirection" />
    </exit>
    <exit alias="west" to="Cave20">
      <inherit name="westdirection" />
    </exit>
  </object>
  <object name="Cave22">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="north" to="Cave23">
      <inherit name="northdirection" />
    </exit>
    <exit alias="west" to="Cave21">
      <inherit name="westdirection" />
    </exit>
  </object>
  <object name="Cave23">
    <inherit name="editor_room" />
    <alias>Cave</alias>
    <attr name="grid_width" type="int">3</attr>
    <attr name="grid_length" type="int">2</attr>
    <attr name="grid_fill">Transparent</attr>
    <attr name="grid_border">Transparent</attr>
    <implementation_notes />
    <exit alias="south" to="Cave22">
      <inherit name="southdirection" />
    </exit>
    <exit alias="southwest" to="Cave11">
      <inherit name="southwestdirection" />
    </exit>
  </object>
  <object name="javascript">
    <inherit name="editor_room" />
    <description><![CDATA[function showPopup(title, text) {<br/> $('#msgboxCaption').html(text);<br/><br/> var msgboxOptions = {<br/>  modal: true,<br/>  autoOpen: false,<br/>  title: title,<br/>  buttons: [<br/>   {<br/>    text: 'OK',<br/>    click: function () { $(this).dialog('close'); }<br/>   },<br/>  ],<br/>  closeOnEscape: false,<br/> };<br/><br/> $('#msgbox').dialog(msgboxOptions);<br/> $('#msgbox').dialog('open');<br/>};<br/><br/>function showPopupCustomSize(title, text, width, height) {<br/> $('#msgboxCaption').html(text);<br/><br/> var msgboxOptions = {<br/>  modal: true,<br/>  autoOpen: false,<br/>  title: title,<br/>  width: width,<br/>  height: height,<br/>  buttons: [<br/>   {<br/>    text: 'OK',<br/>    click: function () { $(this).dialog('close'); }<br/>   },<br/>  ],<br/>  closeOnEscape: false,<br/> };<br/><br/> $('#msgbox').dialog(msgboxOptions);<br/> $('#msgbox').dialog('open');<br/>};<br/><br/>function showPopupFullscreen(title, text) {<br/> $('#msgboxCaption').html(text);<br/><br/> var msgboxOptions = {<br/>  modal: true,<br/>  autoOpen: false,<br/>  title: title,<br/>  width: $(window).width(),<br/>  height: $(window).height(),<br/>  buttons: [<br/>   {<br/>    text: 'OK',<br/>    click: function () { $(this).dialog('close'); }<br/>   },<br/>  ],<br/>  closeOnEscape: false,<br/> };<br/><br/> $('#msgbox').dialog(msgboxOptions);<br/> $('#msgbox').dialog('open');<br/>};<br/><br/>  <br/>function turnGray(){<br/>  $("#msgboxCaption").css({"background":"lightgray","min-height":"800px","padding":"20px"});<br/>}]]></description>
  </object>
  <object name="stuff">
    <inherit name="editor_room" />
    <object name="smallstick">
      <inherit name="editor_object" />
      <alias>small stick</alias>
    </object>
    <object name="largestick">
      <inherit name="editor_object" />
      <alias>large stick</alias>
    </object>
    <object name="rock">
      <inherit name="editor_object" />
      <alias>rock</alias>
    </object>
    <object name="stone">
      <inherit name="editor_object" />
      <alias>stone</alias>
    </object>
    <object name="towel">
      <inherit name="editor_object" />
      <alias>towel</alias>
    </object>
    <object name="brick">
      <inherit name="editor_object" />
      <alias>brick</alias>
    </object>
    <object name="book">
      <inherit name="editor_object" />
      <alias>book</alias>
    </object>
    <object name="marble">
      <inherit name="editor_object" />
      <alias>marble</alias>
    </object>
    <object name="scroll">
      <inherit name="editor_object" />
      <alias>scroll</alias>
    </object>
    <object name="sword">
      <inherit name="editor_object" />
      <alias>sword</alias>
    </object>
    <object name="knife">
      <inherit name="editor_object" />
      <alias>knife</alias>
    </object>
    <object name="bat">
      <inherit name="editor_object" />
      <alias>bat</alias>
    </object>
    <object name="ball">
      <inherit name="editor_object" />
      <alias>ball</alias>
    </object>
    <object name="metalspike">
      <inherit name="editor_object" />
      <alias>metal spike</alias>
    </object>
    <object name="brochure">
      <inherit name="editor_object" />
      <alias>brochure</alias>
    </object>
    <object name="toothbrush">
      <inherit name="editor_object" />
      <alias>toothbrush</alias>
    </object>
    <object name="screwdriver">
      <inherit name="editor_object" />
      <alias>screwdriver</alias>
    </object>
    <object name="rope">
      <inherit name="editor_object" />
      <alias>rope</alias>
    </object>
    <object name="dodofeather">
      <inherit name="editor_object" />
      <alias>dodo feather</alias>
    </object>
    <object name="smallwoodenboard">
      <inherit name="editor_object" />
      <alias>small wooden board</alias>
    </object>
    <object name="jewelencrustedegg">
      <inherit name="editor_object" />
      <alias>jewel-encrusted egg</alias>
    </object>
    <object name="compass">
      <inherit name="editor_object" />
      <alias>compass</alias>
    </object>
  </object>
  <turnscript name="has_compass">
    <enabled />
    <script>
      if (compass.parent = game.pov) {
        JS.eval ("$(\"#compassLabel,#compassAccordion\").show()")
      }
      else {
        JS.eval ("$(\"#compassLabel,#compassAccordion\").hide()")
      }
    </script>
  </turnscript>
  <command name="no_take_all_cmd">
    <pattern type="string">^(get|take)\sall$</pattern>
    <script>
      msg ("You can only pick up one item per turn.")
      game.suppressturnscripts = true
    </script>
  </command>
  <command name="attack">
    <pattern>attack #object#</pattern>
    <script><![CDATA[
      if (not GetBoolean(object,"feature_player")) {
        msg ("You can't attack "+object.article+".")
      }
      else {
        msg ("You attack "+object.article+".")
        if (ListCount(GetDirectChildren(object))>0) {
          obj = PickOneChild(object)
          msg (CapFirst(object.gender)+" drops "+GetDisplayName(obj)+".")
          obj.parent = object.parent
        }
      }
    ]]></script>
  </command>
  <function name="SetupPlayers">
    msg ("Enter the number of players.")
    get input {
      if (IsInt(result)) {
        int = ToInt(result)
        game.playercount = int
        CharacterCreation
      }
      else {
        msg ("You must enter a number.")
        SetupPlayers
      }
    }
  </function>
  <function name="CharacterCreation"><![CDATA[
    firsttime {
      game.playerscreatedcount = 0
      game.player_list = NewObjectList()
    }
    game.playerscreatedcount = game.playerscreatedcount + 1
    msg ("<h1>Player "+game.playerscreatedcount+"</h1>")
    msg ("Enter your character's name:")
    get input {
      msg ("<br/>Hello, "+result+"!<br/>")
      game.currentalias = result
      GetGender
    }
  ]]></function>
  <function name="GetGender">
    ShowMenu ("Select the character's gender.", Split("male;female;none",";"), false) {
      game.currentgender = result
      switch (game.currentgender) {
        case ("none") {
          create ("player"+game.playerscreatedcount)
        }
        case ("male") {
          create ("player"+game.playerscreatedcount, "namedmale")
        }
        case ("female") {
          create ("player"+game.playerscreatedcount, "namedfemale")
        }
      }
      obj = GetObject("player"+game.playerscreatedcount)
      obj.feature_player = true
      game.this = obj
      game.this.alias = game.currentalias
      list add (game.player_list, game.this)
      GetDescription
    }
  </function>
  <function name="GetDescription"><![CDATA[
    msg ("<br/>Please enter the character's description.")
    get input {
      game.this.look = result
      msg ("<br/>"+game.this.alias+": setup complete!")
      game.this.displayverbs = game.this.displayverbs - "Speak to"
      game.this.displayverbs = game.this.displayverbs + "Attack"
      if (not game.playercount = game.playerscreatedcount) {
        CharacterCreation
      }
      else {
        CreationComplete
      }
    }
  ]]></function>
  <function name="CreationComplete">
    msg ("Character creation complete!")
    foreach (o, game.player_list) {
      MoveObject (o, Cave)
    }
    ChangePOV (player1)
    game.currentalias = null
    game.currentgender = null
    game.this = null
    SetTurnTimeout (1) {
      next_player.enabled = true
    }
  </function>
  <function name="SetupMapPane"><![CDATA[
    src = GetFileURL("cave_system.png")
    img = "<img width=&quot;100%&quot; src=&quot;"+src+"&quot;/>"
    JS.setCustomStatus ("<span style='cursor:pointer;' title='Click to view full-size map!' onclick=\"showPopupCustomSize('Map','"+img+"', '70%', 'auto')\"/><img width='100%' src='"+GetFileURL("cave_system.png")+"'/></span>")
  ]]></function>
  <function name="SetupStuff">
    foreach (o, GetDirectChildren(stuff)) {
      o.take = true
      o.inventoryverbs = o.inventoryverbs - "Use"
      MoveObject (o, Cave)
    }
    int = GetRandomInt(1,23)
    if (not int = 1) {
      MoveObject (compass, GetObject("Cave"+int))
    }
  </function>
  <function name="FinishTurn">
    if (not GetBoolean(game, "suppressturnscripts")) {
      RunTurnScripts
    }
    game.suppressturnscripts = false
    UpdateStatusAttributes
    CheckDarkness
    UpdateObjectLinks
  </function>
</asl>

I really would like to post this here...


K.V.

If you'd like to create a Multi-User Dungeon crawler (and you can work the terminal), it looks like this MUD-building system might be cool:

https://github.com/evennia/evennia/wiki/Evennia-Introduction


  1. Quest can certainly do 'hot-seating' (one computer) MP play!

  2. but if you want an actual MP playing using multiple computers, that first takes high networking skills (connection, syncing/timing, compatibility), on top of, figuring out how to do it with quest (if it can even be done, may or may not be able to), as of yet, no one's been able to do this as far as I know, you'd have to be a networking professional, computer systems professional, and know quest and all of the languages that it uses.


for the 'hot-seat' MP usage (#1): see below


Quest already has the 'pov' feature (able to change which is the currently controlled Player Object) set up for you to use, you'd just need to put/code in your own action and/or turn system for it, and everything else as well dealing with your game for it as well.


while these are 2D games, their 'MP' game mechanics/features/puzzles can be applied with/as quest text adventure game:

example (let's play) vids of these games (might not be the best vids, hadn't watched them):

https://www.youtube.com/watch?v=L7oUArcVis0 (Maniac Mansion for NES)
https://www.youtube.com/watch?v=Cizw9fBF24U (Lost Vikings 1 for SNES)

you can also do dungeon crawlers or whatever other type of game you can think of... if you got the skills... to create/code it up, lol


This topic is now closed. Topics are closed after 60 days of inactivity.

Support

Forums