I don't use the online~web version so I don't know what functionality it has and doesn't have, nor have I used the Gamebook version, and don't know anything about it. I also don't work much with the GUI~Editor anymore (I work with it's coding~scripting mostly now), so I'm not of too much help for you, but I'll try to be of some help if I can...
quest can certainly do all of what you want, though you'll have to learn how to do the scripting and etc stuff in the GUI~Editor (unless you want to learn to work with the code, hehe), so that you can do the stuff that you want. Don't worry, the GUI~Editor should make it relatively easy for you, once you learn it decently.
all of below, is for using text adventure version, as I never used the gamebook version yet.
------
1. stat -> event -> goto room
you'll have to decide where~how the scripting for this is activated (globally: it's constantly checked, within specific rooms, or whatever)
for an example way of doing it globally:
click on the upper-left most 'object' in the left pane's~side's 'tree of stuff' so that it is highlighted, then at the top of the screen is a horizontal bar, click on the 'add' button on it, then choose 'turnscript' from its drop-down list of choices.
now we need to add the scripts (example only, with just a little code writing needed, hehe):
// outside of this turnscript scripting:
//
// you'll also need to create (add) a 'strength' attribute to your 'player' Object and create a way of increasing it. Ask me about this and I can help you with how to do it, if you need help with it.
//
// to add a 'strength' attribute to your 'player' object:
//
// 'player' (Object) -> Attributes (Tab) -> Attributes -> Add -> Attribute Name: strength -> Attribute Type: int (integer) -> Attribute Value: 0 (or whatever value you want your 'player' Object to start at.
//
// then, you'll need a means of increasing that 'strength' attribute, there's many ways to do this... you'll need to decide how you want it done...
add a script -> scripts -> if -> [EXPRESSION] -> player.strength >= 10
-> then, -> add a script -> output -> print a message -> [MESSAGE] -> type in whatever event message stuff you want to say
-> // you may want~need to add in some more scripts, if you want the game player's to make a decision, which will determine what room he~she is moved to below
-> add a script -> objects -> MoveObject -> (set it up, move your 'player' Object to either 'roomA' or 'roomB') // this will need to be changed if you want the game player to make a choice that effects what room they're moved to. Ask me and I'll hlp you do this, as it can be a bit confusing for a new person to understand how to do this
HK Edit: oops, I didn't read your post closely, as you wanted to choice what room to go to, which then gives you a different event depending on the room you chose to go to, as I mistaken thought it was the reverse, lol, my bad. Ask, and I can help with doing it correctly as you want it done, lol, if you can't figure out how do it yourself (just do the 'MoveObject' script, not the 'msg' scripts, instead you can click on that room object, and under one of its tabs, type in your event in the 'first on enter room' or the 'on enter room' text boxes).
2. dialogue can be very simple or very complex, and that means in how it's done~created~crafted~made too... You'll need to decide on how you want your dialogue to work and where, as that determines how to do~create~craft~make your dialogue within your game via using the GUI~Editor (or coding, hehe).
3. scrolling... can be done via using the 'timers' (add timer, set it's time interval, add the 'msg' scripts for your dialogue lines), but until the next quest version, timer usage is buggy, especially online.
see this thread:
viewtopic.php?f=10&t=4339or, if you want via a manual key press, then find the 'wait for key press' Script (add a script -> ??? -> wait for key press), as this requires you to hit enter before the below and indented (nested) script (such as your next 'msg' script dialogue lines) is activated.
4. stats (more about them)
A. for scripting: for stat usage, changing~latering, and~or creation:
add a script -> variables -> set a variable or attribute -> (see below)
left of equal sign: Object_name.Attribute_name
right of equal sign: your value or expression
Object_name.Attribute_name = Value_or_Expression
examples below:
player.strength = 50
HK.strength = 100
orc.strength = 25
orinks.strength = 75
player.damage = player.weapon_damage + player.weapon_damage * player.strength / 100
B. for scripting: for stat creation, usage, and~or changing~altering:
add a script -> ??? -> set attribute -> (set it up) // actually this might only exist as a coding line, it may not be available via using the GUI~Editor's scripts (add a script).
C. non-scripting creation of stats:
'player' (Object) -> Attributes (Tab) -> Attributes -> Add -> (see below, an example only)
(Object: player)
Attribute Name: strength
Attribute Type: int // (or double)
Attribute Value: 0
int -> integer -> ..., -100, -1, 0, 1, 100, ... (whole numbers, negative and posistve, no decimals)
double -> decimal numbers (I haven't worked with this type of attribute, so I'm not sure how it works)
D. basic computational stat scripting:
add a script -> variables -> set a variable or attribute -> (see below, examples only)
Addition:
player.strength = player.strength + 50
Subtraction:
player.strength = player.strength - 100
Multiplication:
player.strength = player.strength * 3
Division:
player.strength = player.strength / 2
---------
conceptually how it works (using addition as the example):
Old (initial): player.strength = 0
player.strength (new) = player.strength (old) + 50
player.strength (new) = player.strength (0) + 50
player.strength (new) = 0 + 50
New: player.strength = 50
Old: player.strength = 50
player.strength (new) = player.strength (old) + 50
player.strength (new) = player.strength (50) + 50
player.strength (new) = 50 + 50
New: player.strength = 100
Old: player.strength = 100
etc etc etc
--------
a bit more complex usage too:
player.race_bonus_damage_modifier = 2
player.damage = 5
player.damage = player.damage * player.race_bonus_damage_modifier
New: player.damage = 10
New: player.damage = 20
New: player.damage = 40
New: player.damage = 80
etc etc etc
and even more advanced, anything you can do in~with math, you can do in quest too, using static attributes (Values) or dynamic attributes (Expressions).