From f423166eb34d58c6168e72e1791117aefcb16c93 Mon Sep 17 00:00:00 2001 From: inodentry Date: Wed, 7 Feb 2024 13:58:11 +0000 Subject: [PATCH] deploy: IyesGames/minewars@f17ed7b5011bbb3eaa302866bf284d03933948f0 --- minewars/book/gamemodes.html | 2 +- minewars/book/gameplay.html | 8 +- minewars/book/gameplay/actions.html | 16 ++-- minewars/book/gameplay/items.html | 4 +- minewars/book/gameplay/map.html | 4 +- minewars/book/gameplay/pvp.html | 6 +- minewars/book/gameplay/structures.html | 2 +- minewars/book/gameplay/territory.html | 8 +- minewars/book/ideas.html | 6 +- minewars/book/mgmt/monetization.html | 2 +- minewars/book/mgmt/philosophy.html | 2 +- minewars/book/mgmt/settings.html | 2 +- minewars/book/print.html | 84 ++++++++++---------- minewars/book/searcher.js | 2 +- minewars/book/tech/dataformat-player.html | 12 +-- minewars/book/tech/dataformat-spectator.html | 10 +-- 16 files changed, 85 insertions(+), 85 deletions(-) diff --git a/minewars/book/gamemodes.html b/minewars/book/gamemodes.html index 64d878f1d2..baef7debc1 100644 --- a/minewars/book/gamemodes.html +++ b/minewars/book/gamemodes.html @@ -191,7 +191,7 @@

Elimi

Plenty of breathing room for players to grow their empires and establish their strategies. The map is big, plenty of space and resources. There are more cities than players, meaning neutral cities are available for taking.

-

Leads to distinct "early game", "mid game", and "late game" gameplay.

+

Leads to distinct "early game", "mid game", and "late game" gameplay.

Early game is the initial exploration, to establish a presence on the map, before the player has encountered another player. This feels a bit like singleplayer Minesweeper -- you try to expand into neutral territory while uncovering the random diff --git a/minewars/book/gameplay.html b/minewars/book/gameplay.html index 4c92891982..cab06c2ccb 100644 --- a/minewars/book/gameplay.html +++ b/minewars/book/gameplay.html @@ -194,16 +194,16 @@

Win

Score

During the game, there can be a scoreboard allowing players to judge the progress through the game, based on their (and other players') stats.

-

The most important number is the "cities owned". It indicates the size of each +

The most important number is the "cities owned". It indicates the size of each player's empire.

There can be a mini-scoreboard on-screen at all times, showing the number of cities for each player in the match.

Additionally, players can bring up a detailed scoreboard, which provides more stats. Some example things we can include:

diff --git a/minewars/book/gameplay/actions.html b/minewars/book/gameplay/actions.html index 695912573a..2d56e55184 100644 --- a/minewars/book/gameplay/actions.html +++ b/minewars/book/gameplay/actions.html @@ -198,7 +198,7 @@

Strike

marked tiles. Converts the tile kind to Destroyed Land.

Costs money.

Can be applied to any Visible tile.

-

The game client should allow the user to first "mark"/"flag" the tiles +

The game client should allow the user to first "mark"/"flag" the tiles selected for a strike. This displays Marks on the map, on the marked tiles. This happens entirely client-side. Then, the user can confirm the selections, to launch the strike. The marks disappear and all the @@ -237,20 +237,20 @@

Deploy Item

between multiple cities, if there are active road connections.

Items can be deployed only to empty (not containing a structure or item) land tiles.

-

Additionally, decoys can be "upgraded" to mines.

+

Additionally, decoys can be "upgraded" to mines.

Initiate Construction

Cooldown: 0.5 sec. Delay: 0.0 sec.

Place a Structure on a tile that is owned by the player.

The player must own the city of the region.

-

The Structure is not ready immediately. When placed, it is in "pending" -mode, and the city is set to "construction" mode.

-

While a structure is "pending", it will not perform its intended effects. -Instead, it will accumulate "construction points" based on the city's resources. +

The Structure is not ready immediately. When placed, it is in "pending" +mode, and the city is set to "construction" mode.

+

While a structure is "pending", it will not perform its intended effects. +Instead, it will accumulate "construction points" based on the city's resources. The player should be able to see the progress.

-

While a city is in "construction" mode, part of its resources are directed towards +

While a city is in "construction" mode, part of its resources are directed towards construction progress, instead of generating income.

-

If there are multiple "pending" structures in a given region, they are processed +

If there are multiple "pending" structures in a given region, they are processed one-by-one, in a queue, in the order they were submitted by the player.

When building roads, all selected tiles are submitted as a single action.

Bulldoze Structure

diff --git a/minewars/book/gameplay/items.html b/minewars/book/gameplay/items.html index 381c4d0d71..7943ea90ab 100644 --- a/minewars/book/gameplay/items.html +++ b/minewars/book/gameplay/items.html @@ -181,8 +181,8 @@

Items

on adjacent tiles they do not own.

Mines

Mines will explode when stepped on, resulting in the offending player -receiving a Death Timeout. This adds to the "Death" count of the offending -player and to your "Kill" count.

+receiving a Death Timeout. This adds to the "Death" count of the offending +player and to your "Kill" count.

All players in the match will be notified of this event. The explosion effect and location will be seen by all players. The tile where the explosion occurs will become visible (no fog) for all players for a duration of 2.0 sec.

diff --git a/minewars/book/gameplay/map.html b/minewars/book/gameplay/map.html index fc4d72649e..4ab0fdb037 100644 --- a/minewars/book/gameplay/map.html +++ b/minewars/book/gameplay/map.html @@ -233,7 +233,7 @@

Ban Stage

Regions

Each tile on the map is associated with a city. All tiles that are associated with a given city are collectively known as that city's region. The region -is the city's "area of responsibility".

+is the city's "area of responsibility".

The city's resource points are accumulated from all the tiles in its region that are owned by the same player that owns the city. The city generates income for the player, based on the amount of available resources.

@@ -252,7 +252,7 @@

Generation

cities balanced in resource availablitity. Regions will be computed so that similar amounts of total resources are available in each region.

The algorithm starts from the location of each city and gradually expands the -region in the area around it, similar to a "floodfill" or "breadth-first-search" +region in the area around it, similar to a "floodfill" or "breadth-first-search" algorithm, until every playable tile on the map has been assigned to a city. At every iteration of the loop, the region with the fewest total available resources is selected for expansion.

diff --git a/minewars/book/gameplay/pvp.html b/minewars/book/gameplay/pvp.html index 26dcb53bac..59fe207c87 100644 --- a/minewars/book/gameplay/pvp.html +++ b/minewars/book/gameplay/pvp.html @@ -174,7 +174,7 @@

MineWars

PvP Combat

-

Player encounters happen on "front lines"; that is, when your territory reaches +

Player encounters happen on "front lines"; that is, when your territory reaches that of another player.

You can try to capture another player's territory, just like you do neutral land at the start of the game.

@@ -190,12 +190,12 @@

Digits

Further, an Asterisk (*) will be displayed with the digit, if there are any Decoys. The player can use this hint/information to figure out where decoys might be and decide if they want to try and risk stepping on those tiles.

-

The game client can provide a feature to switch digits to "enemy preview" mode, +

The game client can provide a feature to switch digits to "enemy preview" mode, where the other players' digits are displayed instead, to allow the player to visualize how their defensive item formations would be seen by others.

Defensive Play Overview

When you own territory, you do not want to leave it undefended and easy to capture. -Also, remember, if a player clicks on a "known safe" tile (with no digit), they +Also, remember, if a player clicks on a "known safe" tile (with no digit), they can capture large swaths of territory in a single click!

Therefore, as you gain new territory, you want to set up formations of defensive Items to protect it. The presence of items will stop an invader's expansion diff --git a/minewars/book/gameplay/structures.html b/minewars/book/gameplay/structures.html index fda86a720b..07b84345f8 100644 --- a/minewars/book/gameplay/structures.html +++ b/minewars/book/gameplay/structures.html @@ -190,7 +190,7 @@

Roads

HP: 3.

Roads serve to connect cities. An active road connection brings numerous benefits.

Roads do not have a direction, they are simply a kind of grid tile; each -tile either has road built on it, or not. The "path" / pathfinding algorithm +tile either has road built on it, or not. The "path" / pathfinding algorithm simply follows grid tiles. That is, a road tile is considered connected to any adjacent road tiles. (think Civ-like road behavior)

Two cities are considered to have an active road connection iff:

diff --git a/minewars/book/gameplay/territory.html b/minewars/book/gameplay/territory.html index 47813fdff0..9ed4cb192b 100644 --- a/minewars/book/gameplay/territory.html +++ b/minewars/book/gameplay/territory.html @@ -177,10 +177,10 @@

Visibility

-

Areas away from the player's territory are covered by "fog of war". The +

Areas away from the player's territory are covered by "fog of war". The player can see 3 tiles away from tiles they own.

The entire map's geography is shown to all players at all times, there are no -areas that are completely "black". Fog of war simply means that the player does +areas that are completely "black". Fog of war simply means that the player does not know the ownership (which player controls the tile).

Mountain tiles are always treated as a cluster. If you can see one tile of the cluster, you see them all.

@@ -219,7 +219,7 @@

visibility of surrounding tiles
  • a digit (like Minesweeper) indicating how many (if any) items exist on adjacent unowned tiles
  • -

    ("unowned" here means: neutral or owned by another player)

    +

    ("unowned" here means: neutral or owned by another player)

    Capturing Territory

    Land

    Land is captured simply by clicking on it. You can only do it if you own at @@ -237,7 +237,7 @@

    Land

    • Mines will explode, giving the player a Death timeout
    • Decoys will break / do nothing, and the tile will be captured as if it was empty
    • -
    • Smoke Traps will "blind" the player
    • +
    • Smoke Traps will "blind" the player

    Player strategy: if they think the tile is empty or a decoy, they should capture it, breaking any decoy. If they think the tile contains a dangerous item, they diff --git a/minewars/book/ideas.html b/minewars/book/ideas.html index 685a6f35ae..dd0251f72f 100644 --- a/minewars/book/ideas.html +++ b/minewars/book/ideas.html @@ -226,7 +226,7 @@

    As the game advances, its sustenance cost can rise, preventing it from becoming @@ -237,12 +237,12 @@

    Bui being constructed too early in the game.

    Starvation

    If the city fails to cover its sustenance cost for an extended period of time -("starvation"), it could be destroyed / removed from the game.

    +("starvation"), it could be destroyed / removed from the game.

    For example: if the sustenance cost is currently X, and the city has less than X total resources, a timer (say, one minute) starts. If the timer elapses, the city is turned to ruin. If the player manages to recover some land within the timer, as soon as the city -has at least X resources, it leaves "starving" state and the timer resets.

    +has at least X resources, it leaves "starving" state and the timer resets.

    This would make cities non-permanent and allow the total number of cities on the map to be reduced in the late-game.

    When a player is eating away at the opponent's territory, the oppenent's city's diff --git a/minewars/book/mgmt/monetization.html b/minewars/book/mgmt/monetization.html index 01a0a709a2..6319c0b9c5 100644 --- a/minewars/book/mgmt/monetization.html +++ b/minewars/book/mgmt/monetization.html @@ -185,7 +185,7 @@

    Premium Acc
  • It could be marketed with some language that appeals to competitive players, like: -"Pro Competition Upgrade" or something.

    +"Pro Competition Upgrade" or something.

    It could offer features like:

    Replay History

    Non-premium players can only download a replay of the game they just played, diff --git a/minewars/book/mgmt/philosophy.html b/minewars/book/mgmt/philosophy.html index b928af6732..e6f5334378 100644 --- a/minewars/book/mgmt/philosophy.html +++ b/minewars/book/mgmt/philosophy.html @@ -177,7 +177,7 @@

    Notes / P

    UI design

    Don't tell ppl what everything is. Entice exploration. Show the options and ppl will want to play with them to see what they do.

    -

    Don't teach ppl any "game meta", only how to use the basic mechanics. Let ppl +

    Don't teach ppl any "game meta", only how to use the basic mechanics. Let ppl discover their own play style.

    UI should be visually intuitive, easy to control with different input devices.

    Input devices

    diff --git a/minewars/book/mgmt/settings.html b/minewars/book/mgmt/settings.html index 57c7766054..52c92d37eb 100644 --- a/minewars/book/mgmt/settings.html +++ b/minewars/book/mgmt/settings.html @@ -216,7 +216,7 @@

    Colorblindness: tile patterns

    -

    Provide "patterned" alternatives which could be used instead of the base flat color tile.

    +

    Provide "patterned" alternatives which could be used instead of the base flat color tile.

    diff --git a/minewars/book/print.html b/minewars/book/print.html index 5bf5dfe7fa..27f796ceb0 100644 --- a/minewars/book/print.html +++ b/minewars/book/print.html @@ -349,16 +349,16 @@

    Win

    Score

    During the game, there can be a scoreboard allowing players to judge the progress through the game, based on their (and other players') stats.

    -

    The most important number is the "cities owned". It indicates the size of each +

    The most important number is the "cities owned". It indicates the size of each player's empire.

    There can be a mini-scoreboard on-screen at all times, showing the number of cities for each player in the match.

    Additionally, players can bring up a detailed scoreboard, which provides more stats. Some example things we can include:

    The Map: Cities and Geography

    Every game session/match happens on a new, procedurally-generated map.

    @@ -420,7 +420,7 @@

    Ban Stage

    Regions

    Each tile on the map is associated with a city. All tiles that are associated with a given city are collectively known as that city's region. The region -is the city's "area of responsibility".

    +is the city's "area of responsibility".

    The city's resource points are accumulated from all the tiles in its region that are owned by the same player that owns the city. The city generates income for the player, based on the amount of available resources.

    @@ -439,7 +439,7 @@

    Generation

    cities balanced in resource availablitity. Regions will be computed so that similar amounts of total resources are available in each region.

    The algorithm starts from the location of each city and gradually expands the -region in the area around it, similar to a "floodfill" or "breadth-first-search" +region in the area around it, similar to a "floodfill" or "breadth-first-search" algorithm, until every playable tile on the map has been assigned to a city. At every iteration of the loop, the region with the fewest total available resources is selected for expansion.

    @@ -466,10 +466,10 @@

    Visibility

    -

    Areas away from the player's territory are covered by "fog of war". The +

    Areas away from the player's territory are covered by "fog of war". The player can see 3 tiles away from tiles they own.

    The entire map's geography is shown to all players at all times, there are no -areas that are completely "black". Fog of war simply means that the player does +areas that are completely "black". Fog of war simply means that the player does not know the ownership (which player controls the tile).

    Mountain tiles are always treated as a cluster. If you can see one tile of the cluster, you see them all.

    @@ -508,7 +508,7 @@

    visibility of surrounding tiles
  • a digit (like Minesweeper) indicating how many (if any) items exist on adjacent unowned tiles
  • -

    ("unowned" here means: neutral or owned by another player)

    +

    ("unowned" here means: neutral or owned by another player)

    Capturing Territory

    Land

    Land is captured simply by clicking on it. You can only do it if you own at @@ -526,7 +526,7 @@

    Land

    Player strategy: if they think the tile is empty or a decoy, they should capture it, breaking any decoy. If they think the tile contains a dangerous item, they @@ -735,7 +735,7 @@

    Costs

  • The initial (spawn) city of each player starts with: 16.0
  • PvP Combat

    -

    Player encounters happen on "front lines"; that is, when your territory reaches +

    Player encounters happen on "front lines"; that is, when your territory reaches that of another player.

    You can try to capture another player's territory, just like you do neutral land at the start of the game.

    @@ -751,12 +751,12 @@

    Digits

    Further, an Asterisk (*) will be displayed with the digit, if there are any Decoys. The player can use this hint/information to figure out where decoys might be and decide if they want to try and risk stepping on those tiles.

    -

    The game client can provide a feature to switch digits to "enemy preview" mode, +

    The game client can provide a feature to switch digits to "enemy preview" mode, where the other players' digits are displayed instead, to allow the player to visualize how their defensive item formations would be seen by others.

    Defensive Play Overview

    When you own territory, you do not want to leave it undefended and easy to capture. -Also, remember, if a player clicks on a "known safe" tile (with no digit), they +Also, remember, if a player clicks on a "known safe" tile (with no digit), they can capture large swaths of territory in a single click!

    Therefore, as you gain new territory, you want to set up formations of defensive Items to protect it. The presence of items will stop an invader's expansion @@ -835,7 +835,7 @@

    Strike

    marked tiles. Converts the tile kind to Destroyed Land.

    Costs money.

    Can be applied to any Visible tile.

    -

    The game client should allow the user to first "mark"/"flag" the tiles +

    The game client should allow the user to first "mark"/"flag" the tiles selected for a strike. This displays Marks on the map, on the marked tiles. This happens entirely client-side. Then, the user can confirm the selections, to launch the strike. The marks disappear and all the @@ -874,20 +874,20 @@

    Deploy Item

    between multiple cities, if there are active road connections.

    Items can be deployed only to empty (not containing a structure or item) land tiles.

    -

    Additionally, decoys can be "upgraded" to mines.

    +

    Additionally, decoys can be "upgraded" to mines.

    Initiate Construction

    Cooldown: 0.5 sec. Delay: 0.0 sec.

    Place a Structure on a tile that is owned by the player.

    The player must own the city of the region.

    -

    The Structure is not ready immediately. When placed, it is in "pending" -mode, and the city is set to "construction" mode.

    -

    While a structure is "pending", it will not perform its intended effects. -Instead, it will accumulate "construction points" based on the city's resources. +

    The Structure is not ready immediately. When placed, it is in "pending" +mode, and the city is set to "construction" mode.

    +

    While a structure is "pending", it will not perform its intended effects. +Instead, it will accumulate "construction points" based on the city's resources. The player should be able to see the progress.

    -

    While a city is in "construction" mode, part of its resources are directed towards +

    While a city is in "construction" mode, part of its resources are directed towards construction progress, instead of generating income.

    -

    If there are multiple "pending" structures in a given region, they are processed +

    If there are multiple "pending" structures in a given region, they are processed one-by-one, in a queue, in the order they were submitted by the player.

    When building roads, all selected tiles are submitted as a single action.

    Bulldoze Structure

    @@ -911,8 +911,8 @@

    Harvest Tile

    Mines

    Mines will explode when stepped on, resulting in the offending player -receiving a Death Timeout. This adds to the "Death" count of the offending -player and to your "Kill" count.

    +receiving a Death Timeout. This adds to the "Death" count of the offending +player and to your "Kill" count.

    All players in the match will be notified of this event. The explosion effect and location will be seen by all players. The tile where the explosion occurs will become visible (no fog) for all players for a duration of 2.0 sec.

    @@ -952,7 +952,7 @@

    Roads

    HP: 3.

    Roads serve to connect cities. An active road connection brings numerous benefits.

    Roads do not have a direction, they are simply a kind of grid tile; each -tile either has road built on it, or not. The "path" / pathfinding algorithm +tile either has road built on it, or not. The "path" / pathfinding algorithm simply follows grid tiles. That is, a road tile is considered connected to any adjacent road tiles. (think Civ-like road behavior)

    Two cities are considered to have an active road connection iff:

    @@ -1061,7 +1061,7 @@

    As the game advances, its sustenance cost can rise, preventing it from becoming @@ -1072,12 +1072,12 @@

    Bui being constructed too early in the game.

    Starvation

    If the city fails to cover its sustenance cost for an extended period of time -("starvation"), it could be destroyed / removed from the game.

    +("starvation"), it could be destroyed / removed from the game.

    For example: if the sustenance cost is currently X, and the city has less than X total resources, a timer (say, one minute) starts. If the timer elapses, the city is turned to ruin. If the player manages to recover some land within the timer, as soon as the city -has at least X resources, it leaves "starving" state and the timer resets.

    +has at least X resources, it leaves "starving" state and the timer resets.

    This would make cities non-permanent and allow the total number of cities on the map to be reduced in the late-game.

    When a player is eating away at the opponent's territory, the oppenent's city's @@ -1105,7 +1105,7 @@

    Elimi

    Plenty of breathing room for players to grow their empires and establish their strategies. The map is big, plenty of space and resources. There are more cities than players, meaning neutral cities are available for taking.

    -

    Leads to distinct "early game", "mid game", and "late game" gameplay.

    +

    Leads to distinct "early game", "mid game", and "late game" gameplay.

    Early game is the initial exploration, to establish a presence on the map, before the player has encountered another player. This feels a bit like singleplayer Minesweeper -- you try to expand into neutral territory while uncovering the random @@ -1206,7 +1206,7 @@

    Premium Acc
  • It could be marketed with some language that appeals to competitive players, like: -"Pro Competition Upgrade" or something.

    +"Pro Competition Upgrade" or something.

    It could offer features like:

    Replay History

    Non-premium players can only download a replay of the game they just played, @@ -1275,7 +1275,7 @@

    Colorblindness: tile patterns

    -

    Provide "patterned" alternatives which could be used instead of the base flat color tile.

    +

    Provide "patterned" alternatives which could be used instead of the base flat color tile.

    Achievement Ideas

    Minesweeper Pro

    Win a multiplayer game without ever stepping on a mine.

    @@ -1327,7 +1327,7 @@

    UI design

    Don't tell ppl what everything is. Entice exploration. Show the options and ppl will want to play with them to see what they do.

    -

    Don't teach ppl any "game meta", only how to use the basic mechanics. Let ppl +

    Don't teach ppl any "game meta", only how to use the basic mechanics. Let ppl discover their own play style.

    UI should be visually intuitive, easy to control with different input devices.

    Input devices

    @@ -1398,10 +1398,10 @@

    Map Data

    -xxx----Item Kind
    -

    Tile Kind: same encoding as the "Tile Kind Update" message below. -Item Kind: same encoding as the "Reveal Item" message below.

    +

    Tile Kind: same encoding as the "Tile Kind Update" message below. +Item Kind: same encoding as the "Reveal Item" message below.

    The Item Kind is only used for spectator streams and replay files, so that they -don't need to start with a long sequence of "Reveal Item" messages at tick 0 +don't need to start with a long sequence of "Reveal Item" messages at tick 0 for all the initial items on the map. In player streams, this field should be 0.

    If any starting Structures must be encoded (say for a custom game mode / scenario), initialize them using regular gameplay messages at tick 0.

    @@ -1437,7 +1437,7 @@

    Message Class a protocol like QUIC, that allows more granular control of ordering and reliability, should be used.

    There are five classes of messages: PvP, Notification, Personal, Background, Unreliable. -Messages can be freely "upgraded" to a higher class; that is, if there is a queue/buffer +Messages can be freely "upgraded" to a higher class; that is, if there is a queue/buffer of messages to send, which contains messages from multiple different classes, they can all be bundled together and sent over the highest-class stream.

    PvP messages are all game updates that are part of a player's interaction with @@ -1507,7 +1507,7 @@

    Player Update

    PlayerId is the gameplay plid (view) that is affected.

    PlayerSubId is the individual user/client, in game modes where multiple people can control a single in-game plid.

    -

    Some message kinds ignore PlayerSubId. See the "Granularity" column in the table below.

    +

    Some message kinds ignore PlayerSubId. See the "Granularity" column in the table below.

    The next byte specifies the message kind (what happened):

    @@ -1662,7 +1662,7 @@

    Structure HPFollowed by the tile coordinates.

    Explosions

    Explosions have occurred. Tile converts to destroyed land. Any item gone.

    -

    If the client should know what item was destroyed, send a "Reveal Item" first.

    +

    If the client should know what item was destroyed, send a "Reveal Item" first.

    Assembly:

    EXPLODE y,x ...
     
    @@ -1846,7 +1846,7 @@

    Ownership U

    The Spectator Protocol is essentially a container format that multiplexes multiple player protocol streams (one for each player in the game, representing their view of the world) together, along with a global -"spectator view" stream (also in the same format) providing a global view +"spectator view" stream (also in the same format) providing a global view of the game world.

    This is used to give spectator clients all the data they need to simultaneously follow all participants in the game. This is also the file format used for @@ -1893,7 +1893,7 @@

    Frames

    A Frame is a collection of game updates that happen together at the same time. It encodes the point of view of every player in the game who is involved + a -special global spectator view. All of these "streams" are stored together inside +special global spectator view. All of these "streams" are stored together inside the frame.

    Note: it is not a requirement that all game update messages from the same timestamp are encoded together. They may be fragmented into multiple frames. @@ -1915,7 +1915,7 @@

    Homogenou milliseconds, and must not be all-ones (the max value is reserved for Keepalive Frames).

    The participation mask is a bitmask indicating which PlayerIds the frame applies to. Bit 0 represents the global spectator view.

    -

    The size of the participation mask is determined by the "max player id" bit in the +

    The size of the participation mask is determined by the "max player id" bit in the Initialization Sequence.

    The data payload is the player protocol update messages. All of the players listed in the participation mask must receive the entire identical data payload.

    @@ -1934,7 +1934,7 @@

    Heter milliseconds, and must not be all-ones (the max value is reserved for Keepalive Frames).

    The participation mask is a bitmask indicating which PlayerIds the frame applies to. Bit 0 represents the global spectator view.

    -

    The size of the participation mask is determined by the "max player id" bit in the +

    The size of the participation mask is determined by the "max player id" bit in the Initialization Sequence.

    The data payload is the global spectator view + each player's view (in the order of the bits in the participation mask), concatenated together.

    @@ -1965,7 +1965,7 @@

    diff --git a/minewars/book/searcher.js b/minewars/book/searcher.js index d2b0aeed38..dc03e0a02d 100644 --- a/minewars/book/searcher.js +++ b/minewars/book/searcher.js @@ -316,7 +316,7 @@ window.search = window.search || {}; // Eventhandler for keyevents on `document` function globalKeyHandler(e) { - if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey || e.target.type === 'textarea' || e.target.type === 'text') { return; } + if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey || e.target.type === 'textarea' || e.target.type === 'text' || !hasFocus() && /^(?:input|select|textarea)$/i.test(e.target.nodeName)) { return; } if (e.keyCode === ESCAPE_KEYCODE) { e.preventDefault(); diff --git a/minewars/book/tech/dataformat-player.html b/minewars/book/tech/dataformat-player.html index 065c99da2d..a080dc5a3e 100644 --- a/minewars/book/tech/dataformat-player.html +++ b/minewars/book/tech/dataformat-player.html @@ -238,10 +238,10 @@

    Map Data

    BitsMeaningGranularity
    00000000JoinedPlayerSubId
    -xxx----Item Kind
    -

    Tile Kind: same encoding as the "Tile Kind Update" message below. -Item Kind: same encoding as the "Reveal Item" message below.

    +

    Tile Kind: same encoding as the "Tile Kind Update" message below. +Item Kind: same encoding as the "Reveal Item" message below.

    The Item Kind is only used for spectator streams and replay files, so that they -don't need to start with a long sequence of "Reveal Item" messages at tick 0 +don't need to start with a long sequence of "Reveal Item" messages at tick 0 for all the initial items on the map. In player streams, this field should be 0.

    If any starting Structures must be encoded (say for a custom game mode / scenario), initialize them using regular gameplay messages at tick 0.

    @@ -277,7 +277,7 @@

    Message Class a protocol like QUIC, that allows more granular control of ordering and reliability, should be used.

    There are five classes of messages: PvP, Notification, Personal, Background, Unreliable. -Messages can be freely "upgraded" to a higher class; that is, if there is a queue/buffer +Messages can be freely "upgraded" to a higher class; that is, if there is a queue/buffer of messages to send, which contains messages from multiple different classes, they can all be bundled together and sent over the highest-class stream.

    PvP messages are all game updates that are part of a player's interaction with @@ -347,7 +347,7 @@

    Player Update

    PlayerId is the gameplay plid (view) that is affected.

    PlayerSubId is the individual user/client, in game modes where multiple people can control a single in-game plid.

    -

    Some message kinds ignore PlayerSubId. See the "Granularity" column in the table below.

    +

    Some message kinds ignore PlayerSubId. See the "Granularity" column in the table below.

    The next byte specifies the message kind (what happened):

    @@ -502,7 +502,7 @@

    Structure HPFollowed by the tile coordinates.

    Explosions

    Explosions have occurred. Tile converts to destroyed land. Any item gone.

    -

    If the client should know what item was destroyed, send a "Reveal Item" first.

    +

    If the client should know what item was destroyed, send a "Reveal Item" first.

    Assembly:

    EXPLODE y,x ...
     
    diff --git a/minewars/book/tech/dataformat-spectator.html b/minewars/book/tech/dataformat-spectator.html index b5a3704654..98db629c0f 100644 --- a/minewars/book/tech/dataformat-spectator.html +++ b/minewars/book/tech/dataformat-spectator.html @@ -177,7 +177,7 @@

    player protocol streams (one for each player in the game, representing their view of the world) together, along with a global -"spectator view" stream (also in the same format) providing a global view +"spectator view" stream (also in the same format) providing a global view of the game world.

    This is used to give spectator clients all the data they need to simultaneously follow all participants in the game. This is also the file format used for @@ -224,7 +224,7 @@

    Frames

    A Frame is a collection of game updates that happen together at the same time. It encodes the point of view of every player in the game who is involved + a -special global spectator view. All of these "streams" are stored together inside +special global spectator view. All of these "streams" are stored together inside the frame.

    Note: it is not a requirement that all game update messages from the same timestamp are encoded together. They may be fragmented into multiple frames. @@ -246,7 +246,7 @@

    Homogenou milliseconds, and must not be all-ones (the max value is reserved for Keepalive Frames).

    The participation mask is a bitmask indicating which PlayerIds the frame applies to. Bit 0 represents the global spectator view.

    -

    The size of the participation mask is determined by the "max player id" bit in the +

    The size of the participation mask is determined by the "max player id" bit in the Initialization Sequence.

    The data payload is the player protocol update messages. All of the players listed in the participation mask must receive the entire identical data payload.

    @@ -265,7 +265,7 @@

    Heter milliseconds, and must not be all-ones (the max value is reserved for Keepalive Frames).

    The participation mask is a bitmask indicating which PlayerIds the frame applies to. Bit 0 represents the global spectator view.

    -

    The size of the participation mask is determined by the "max player id" bit in the +

    The size of the participation mask is determined by the "max player id" bit in the Initialization Sequence.

    The data payload is the global spectator view + each player's view (in the order of the bits in the participation mask), concatenated together.

    @@ -296,7 +296,7 @@

    BitsMeaningGranularity
    00000000JoinedPlayerSubId