DyBlo User ManualClick on a title to open contents!
(Or: open allclose again)
The idea for a game where blocks are being moved around, dropped and eliminated is something we had for a long time in mind, especially with the "Classic" rules where dropping next to similar blocks causes a transformation to the "next lower kind".
When implementing that game for Android, we tried to integrate the largest reasonable amount of configurability. For example, the field dimensions and the number of different block types should be changeable.
Continually, the number of configurations increased, many of which seemed somewhat arbitrary. After a large number of revisions, we finally decided for the ultimate freedom: rules can now be "programmed" freely.
We are aware that creating ones own rules may be too complex for many people that just want some distraction by playing a little game once in a while. However everybody is free to just use the given rule sets or those created by more ambitious users. We find the idea of creating, and of online exchanging new rule sets fascinating and look forward to seeing many new creations we would not have thought of ourselves.
What kind of game is DyBlo? It is in fact an infinite number of possible games, depending on what rule set is selected. There are however a few properties all variations have in common:
- The playing field is rectangular
- There is a number of different block types
- The player moves a block around and has to drop it after a given amount of time. He then gets a new one which has to be dropped again.
- When the player is blocked in and cannot drop his block anymore, the game ends.
- There are scores and the player tries to break the highscore.
Naturally, space gets more and more scarce and somehow it must be possible to eliminate blocks that are lying on the field. How exactly that happens is determined by the currently selected rule set.
3.1. Starting a game
Touching the start screen anywhere outside of the three buttons starts a (or resumes an interrupted) game which uses the currently selected rule set. Pressing the device's back-button during a game interrupts it and leads back to the start screen. The game is stored in persistent memory so it can be resumed even after shutting down the App.
3.2. Start screen
Besides some basic information (including what rule set is currently selected) there are three buttons on the start screen:
Displays a list of the highscores of the currently selected rule set. If networking is activated and the rule set is published online, scores are updated (if the autosynchronize option in the settings has not been deactivated). New scores (since last lookup) are displayed in purple, the old ones in yellow. The last own result is especially emphasized. Scores that are online appear with a white rank number, the local scores with a black one.
- Rules: starts the rule set list. If there is an interrupted game stored, it will be deleted by entering that list. The reason for that is that rules can be modified in that list, which might corrupt data stored in an interrupted game.
- Settings: global Settings for the App.
3.3. The game
Moving the current block can be done by moving a finger on the screen. It does not matter where the finger touches the screen, all that matters is its relative motion. A single tap on the screen drops the block (even if a second finger is used!). When the limited time, indicated by a narrowing circle, is up, the block is dropped automatically.
Pressing the back button during the game interrupts it. The game can be resumed later on. When the game is over, we return to the start screen.
3.4. Sign up for an account
When networking is activated in the global settings and we have internet connection, an account can be set up. When that is done, rule sets can be up- and downloaded and highscores synchronized with all users of the same rule set. Rule sets can also be rated.
Enter your information. It is essential that your email address be valid since you will have to confirm your account using the link inside of an email that will be sent to you. After entering your information, you quit the app, select the link in your email and at the next launch of DyBlo, you are connected.
4. The rule set list
You can start the rule set list by pressing the middle button on the start screen.
4.1. Selecting a rule set
Browse the list and select a rule set by a simple tap. Return to the start screen using the back-button and start the game by tapping anywhere outside of the three buttons.
4.2. Import/export and new rule sets
In the upper menu bar you will find four menu items (possibly some of them only visible after tapping a three dot symbol). The plus symbol starts the list of online available rule sets provided that networking is active (otherwise the action is just adding a copy of the currently selected rule set). Two more menu items serve for importing rule sets from or exporting them to external storage. The file location can be chosen in the global settings. Finally, the fourth menu item is incidentally for entering the global settings (which can be done by use of the right button on the start screen as well).
Be aware that the rule set list will always be automatically saved after quitting the app and restored at the next launch. So importing and exporting is only useful if you want to make an additional backup or if you want to share the rules list with other devices (using an SD-card, for example).
4.3. Edit rule sets
A long-press on a rule set in the list opens a context menu from which you can, among other things, modify the rules (menu items 1, 2 and 3). If networking is active and the rule set is online, there will be menu items for rating and refreshing. In any case, there is a menu item for deleting the rule set (in the case of online rule sets, this deletes your online scores as well). Refreshing means getting the up to date ratings, subscribers, time played and highscores from the game server.
Further, there are menu items for clearing the highscore list (however with online games, the online scores will be synchronized at the next game start; just local scores get lost) and for resetting the state which means the game appears like first time you played with it. Technically, variable values survive games; this menu item deletes all variable values. This makes no difference with rule sets where variables are not used (like in all of the default rule sets).
There is one last (possible) menu item: "publish". It only appears for unpublished rule sets and if networking is active. In addition, the rule set must have been played at least for an hour (which is a minimum criterion for being interesting enough to be published, we believe).
5. Global settings
Press the right button on the start screen to enter the global settings list. Alternatively, there is a menu item in the rules list for that.
Turn networking on: choose if you only want to play offline or not. Of course, an internet connection is required for the networking features, and you need to sign up for an account. When you play published games in online mode, your scores are uploaded to the server. Offline scores can never be uploaded afterwards.
Auto synchronize: if selected, the highscores are updated every time you start a game in online mode.
Delete account: enter your password to confirm deletion. All online scores and ratings you made will be lost. You can sign up for a new account after deleting your old one. In case you forgot your password, contact firstname.lastname@example.org .
External fiel path: choose a local for exporting and importing rule sets. Be aware that starting with Android version 4.4 (Kitkat), the valid file locations are very limited. For example for exporting data to the SD card, you will have to use the path (SD-Pfad)/Android/data/de.tekplace.dyblo/files/ .
- Update Highscores: the local files have priority. Only new rule sets will be imported. Additionally, highscores of local files will be updated using the external data.
- Keep existing files unchanged: as before, but without even updating the highscores.
- Override: the external rule sets have priority: in case there is a local rule set with the same name, it will be overridden by the external one.
- Delete all existing files: only the external data will be locally available after import; all prior local data will be removed.
Ignore backups for load/save: Whenever a rule set is modified, a copy of the original one will automatically be added to the rule set list. If this settings item is selected, those copies will be removed when quitting the app. If you want to keep a copy nevertheless, you should change its name: removed are exactly all rule sets whose name end with "(COPY)".
Reset rules list: all rule sets are deleted and the defaults are restored. If you have subscribed for online rule sets, they will be downloaded at the next launch of the app. To unsubscribe, delete a ruleset directly using the context menu.
Workload in percent: How much of the computing power that the app gets from the system should be used? A typical value would be 70, but depending on the performance of your device a value of maximal 100 or a lower value may be indicated. A lower value can save battery power.
Transform skips: In the game there usually happen smooth transformations of blocks toward other types. Those transformations consume a certain amount of computing power and can be made more "choppy" by increasing this value (which should be between 0 and 7). The overall performance will increase the higher this value is.
Show FPS: if selected, the frames per second will be shown in the upper left of the gaming screen. Consider a value of 30 as reasonably good. If your device is older or in the lower range, or if the rule set is particularly demanding, the value can decrease significantly. The animations get choppy below 20 FPS. Try to set the workload to 100 percent and possibly increase transform skips.
5.4. Look and feel
Sort Lists by: this applies to the main rule set list as well as to the online rule set list (accessible from the main one through the plus menu item). Different sorting criteria can be selected. For example sorting by publishing date shows the most recent ones first.
Moving speed: how much should the motion of the block be accelerated? 100 means no acceleration, 200 double speed, etc.
Warn when the current game gets lost: in case you have an interrupted game, you can just resume it whenever you wish. Should you however enter the rule set list, that interrupted game will be deleted. If this item is selected, you get a warning when you try to enter the rule set list.
5.5. Further settings
Clear new rules: if event rules are modified, you sometimes will need to add a new event rule or an action. Normally, another event rule (or action) will be cloned. If this settings item is selected, added event rules (or actions) will be empty.
About: A short note by the creator of DyBlo.
6. Editing rules
Long-pressing an item in the rule set list opens its context menu which contains in particular three points to modify the rules: Basic parameters, Blocktypes and (Event-)Rules.
Whenever the rule set is "significantly" changed it is reset (in particular all scores are deleted and the total playing time is reset to zero). Moreover, a backup of the original is generated. There are two cases: if the original rule set is published, it keeps its name and the modified one gets a slightly modified name. If however the original rule set is unpublished, the modified one will get the original name.
6.1. Basic parameters
Here, the following changes can be made (the dialog box main area may be scrollable!):
- The name of the rule set
- Fore- and background color (given by red, green and blue components). Those determine the representation of the rule set in the list and the background color during the game.
- The dimension of the field
- The available time to drop a block (in milliseconds)
- The time between periodically occurring events (in milliseconds)
- Prepopulation: what percentage of the field should already be filled randomly with blocks at game start?
- Tile margin: the gap in pixel between neighboring positions of the field
6.2. Block types
A (possibly scrollable) list of block types for the rule set appears. The first item is the background block type. If you select one, you can modify it. A long-press on one opens the context menu to delete or insert block types.
To modify a block type, you have the following choices:
- The style
- The "height" which modifies the appearance withing the style
- The weight: an integer number that determines the probability for this block type to randomly appear as the currently moving block. Weight 3 for instance means that it is three times more likely that this block type occurs than if it has weight 1.
- Property "blocking": if selected, a position occupied by such a block blocks the player's movements.
- Property "receptive": if selected, it is allowed to drop another block on a position occupied by this block type.
- The color (red, green and blue components)
6.3. Event rules
Now things will get interesting. By selecting the menu item "Rules" in the context menu of a rule set, a list of all event rules opens up. A single tap on one such rule opens a dialog for editing that rule, a long-press opens another context menu.
That context menu allows deletion and insertion of rules as well as copying that rule to the "clipboard" or overriding it from the clipboard. That way, it is even possible to copy a rule into a different rule set.
When you now open up the rule editing dialog (again: by a simple tap on the rule in the list), you will see the list of its actions in the lower area. Again, a simple tap opens up an editing dialog (now for a specific action) and a long-press opens a context menu for that action very similar to the rule context menu.
6.3.1 General form of event rules
An event rule applies, as the name indicates, when a certain event occurs in the game. Such a rule is composed of the following parts:
- The event type
- A possible name for the rule
- A condition, in the form of a mathematical expression
- Possible additional values (maximum, minimum, probability); if they are set to -1, they are "deactivated"
- A list of actions
Rules execute as follows: If an event occurs (see 6.3.2), all rules of the appropriate event type will be considered in the order of their definition. For each one of them, their condition is calculated and if it evaluates to "true", all actions in the rule's action list will be executed (again, in the order they are defined).
The calculation of the condition is done as follows: the mathematical expression will be evaluated FOR EACH INDIVIDUAL POSITION of the playing field (technically, for each position, the "running variables" RX, RY are set before the condition is evaluated, see 220.127.116.11). If now for a position, the expression evaluates to a non-zero value (interpreted as "true"), that position will be considered as part of the "computed area". If in the end, the size of the area lies in the bounds given by the max and min (or if the area is just non-empty, in case max=min=-1), the condition is considered as "true" and the actions will be executed. Unless, the probability (in percent) is set (i.e. not -1), in which case, the action executions only happen with the given probability.
Again: if the max and the min are not set (i.e. they are -1), the condition is considered "true" when the computed area is non-empty. This is, aside from a subtle difference, equivalent to max=-1 and min=1. (That subtle difference is that with min=max=-1, the computation of the area stops when the expression evaluates to true for the first time, which saves computing power; on the other hand, the markings are then not set properly, see 6.3.3 for that).
6.3.2 Event types
There exist the following event types (in parentheses you have the abbreviations as they appear in the dialogs):
- The start event (S) occurs exactly once in the game: just before it starts. Here, an initial configuration of the field can be set, for instance.
- The transformation event (T) occurs when a block completes its transformation into a different type.
- The move event (M) occurs each time the player moves his block to a new position.
- The drop event (D) occurs just after the player drops his block (or when it is dropped automatically). The exact chain is as follows: first, any possible ongoing transformation on the dropping position is stopped. Then the block is added to the field. Then the new current block type is set (randomly). Only then, all drop rules are executed.
- The periodic event (P) occurs in regular time intervals (typically once every second). That interval can be set in the basic parameters.
Additionally, area-definitions (A) can be given in the event rule list. Those are not event rules but allow to name expressions (by the "rule name") which then can be cited in subsequent expressions occurring in rule conditions or actions. This leads to more clarity and shorter expressions.
6.3.3 Expressions and conditions
By an expression we understand integer-valued expressions only. Conditions are expressions which are interpreted as "true" if they take on a non-zero value, otherwise as "false". Expressions are built up from parentheses, numbers, operators (like + or -), constants (names for certain data like the width of the field for instance), variables, names of previously defined area definitions (A) and functions.
It is important to understand that every position of the field carries several pieces of information:
- The current block type
- The transformation block type
- The transformation rate
- The current transformation state
The basic mechanisms are as follows: If the transformation rate is non-zero, it means a transformation of the current block type into the transformation block type is ongoing. How far that transformation has gone is given by the transformation state. Is the transformation rate positive, the transformation starts at state zero and finishes when a value of 1000 is reached. Conversely, if the rate is negative, the state starts at 1000 and counts down to zero. The absolute value of the rate determines how fast the transformation proceeds.
Decoration is another value that is used to describe special states of positions. A decoration of 0 is the default and nothing special is visible at such a position. A decoration of -1 for example manifests itself by the display of a blinking disc of that position.
Markings will be set when rule conditions are computed. Markings are zero or 1: depending on whether the position belongs to the previously computed area.
A condition C can describe an area A (set of positions) of the field: a position (x,y) belongs to A if C evaluates to true (i.e. a non-zero value) when we set RX to x und RY to y (RX and RY are special constants that can occur in expressions; see 18.104.22.168: running variables). Since we are thus able to define areas, it is possible to define actions that do something like "eliminate all blocks in the given area". Examples of areas:
- The expression RX=2 describes a vertical row on the field: all positions that have an x-coordinate of 2.
- The expression RX<CX+2 & RX>CX-2 & RY<CY+2 & RY>CY-2 describes a 3 x 3 - area around the center (CX,CY). (Remark: CX, CY are constants, describing the position of the currently moving block).
- + : Plus
- - : Minus (also negative value)
- * : Multiplication
- / : Division
- % : Modulo (remainder of an integer division)
- & : Logical "and"
- | : Logical "or"
- ! : Logical negation
- = : Equality
- <> : Inequality
- < : Strictly less than
- > : Strictly greater than
- <= : Less or equal
- >= : Greater or equal
22.214.171.124 Game parameters
- W : The width of the field
- H : The height of the field
- TIME : Time in milliseconds to drop a block
- TIMELEFT : Currently remaining time till the next drop
- BGCOLOR : Current background color
- FGCOLOR : Current foreground color
- DEPTH : Total number of (non-background) block types
126.96.36.199 Running variables
At computations of areas by expressions, the playing field is examined position for position. The constants RX, RY will be set each time to a position and the expression is then evaluated. The position is considered as part of the computed area if the evaluation yields a non-zero value ("true").
- RX : The x-coordinate used in an area computation
- RY : The y-coordinate used in an area computation
- RT : The block type on position (RX,RY)
- RG : The transformation block type on position (RX,RY)
- RR : The transformation rate on position (RX,RY)
- RS : The transformation state on position (RX,RY)
- RD : Decoration at position (RX,RY)
- RM : Marking at position (RX,RY)
188.8.131.52 Moving block
Constants for the block that is being controlled by the player.
- CX : The x-coordinate of the moving block
- CY : The y-coordinate of the moving block
- CT : The type of the moving block
- FX : The x-coordinate of the moving block just before the last drop
- FY : The y-coordinate of the moving block just before the last drop
- FT : The type of the moving block just before the last drop
184.108.40.206 Transformation block
At transformation events (events where the transformation of a block into a different type is completed), the data about the transforming block is accessible by the follwoing constants:
- TX : The x-coordinate of the transformed block
- TY : The x-coordinate of the transformed block
- TT : The type at position (TX,TY)
- TG : The transformation type at position (TX,TY)
- TR : The transformation rate at position (TX,TY)
- TS : The transformation state at position (TX,TY)
- TD : The decoration at position (TX,TY)
- TM : The marking at position (TX,TY)
220.127.116.11 Mathematical functions
- ABS(x) : absolute value (same value, but positive)
- MIN(x,y) : The minimum of x and y
- MAX(x,y) : The maximum of x and y
- SIGNUM(x) : 1 if x is positive, 0 if x=0, -1 if x is negative
- RANDOM(x) : A random number between 0 and x-1
- DISTINCTION(x,y,z) : If x is non-zero, the expression takes the value of y, otherwise it takes the value of z
18.104.22.168 Functions for the playing field
- T(x,y) : The block type at position (x,y)
- G(x,y) : The transformation block type at position (x,y)
- R(x,y) : The transformation rate at position (x,y)
- S(x,y) : The transformation state at position (x,y)
- D(x,y) : The decoration at position (x,y)
- M(x,y) : The marking at position(x,y)
22.214.171.124 Functions for block types
- WEIGHT(x) : Weight of the block type x
- COLOR(x) : Color of the block type x
- HEIGHT(x) : Height of the block type x
- STYLE(x) : Style of the block type x
- SOLID(x) : 1 if the block type x is blocking, otherwise 0
- RECEPTIVE(x) : 1 if the block type x is receptive, otherwise 0
126.96.36.199 Additional functions
- BLOCKED(x,y) : 1 if position (x,y) is blocked, otherwise 0. A position is blocked if all four neighboring positions are occupied by a blocking block. Remark: this function could be defined "by hand" by an appropriate expression, but this function is better readable (and faster evaluated).
- RESCUEME : 1, if all four neighboring positions are blocked in the sense of BLOCKED(x,y).
- NEAR(x) : Equivalent to CX <= RX + x & CX >= RX - x & CY <= RY + x & CY >= RY - x. In other words, 1 if (RX,RY) is located in a "radius" x neighborhood" of (CX,CY), otherwise 0.
- COUNT(x) : The number of blocks of type x currently on the playing field (not counting the currently moving block).
- variablename(x): "variablename" stands for an arbitrary word, that does not describe another action. The variable named "variablename" is set to the value x.
- WIN: The game ends as "won".
- LOSE: The game ends as "lost".
- SET(x,y,z): For all positions of the field where x evaluates to true, a transformation toward the type y is started which takes z milliseconds.
- SET1(x,y,z): For one single randomly chosen element of the area defined by x, a transformation toward the type y is started which takes z milliseconds.
- SETD(x,y): For all positions of the field described by x, the decoration is set to y.
- SETD1(x,y): For one single randomly chosen element of the area defined by x, the decoration is set to y.
- SCORE(x): the current score is augmented by x.
- TSET(x): Sets the type of the currently moving block to x.
- XSET(x): Sets the x-position of the currently moving block to x.
- YSET(x): Sets the y-position of the currently moving block to x.