Skip to content

Commit

Permalink
Updated installation article, roadmap, defects list. Gem files.
Browse files Browse the repository at this point in the history
  • Loading branch information
klei1984 committed Jun 10, 2024
1 parent 6d61524 commit d1e0e96
Show file tree
Hide file tree
Showing 6 changed files with 185 additions and 126 deletions.
2 changes: 2 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@ install_if -> { RUBY_PLATFORM =~ %r!mingw|mswin|java! } do
gem "tzinfo-data"
end
gem "wdm", "~> 0.1.1", :install_if => Gem.win_platform?

gem "webrick", "~> 1.8"
179 changes: 75 additions & 104 deletions Gemfile.lock
Original file line number Diff line number Diff line change
Expand Up @@ -7,63 +7,41 @@ GEM
minitest (~> 5.1)
tzinfo (~> 1.1)
zeitwerk (~> 2.2, >= 2.2.2)
addressable (2.8.1)
addressable (2.8.6)
public_suffix (>= 2.0.2, < 6.0)
coffee-script (2.4.1)
coffee-script-source
execjs
coffee-script-source (1.11.1)
coffee-script-source (1.12.2)
colorator (1.1.0)
commonmarker (0.17.13)
ruby-enum (~> 0.5)
concurrent-ruby (1.2.2)
dnsruby (1.61.9)
simpleidn (~> 0.1)
commonmarker (0.23.10)
concurrent-ruby (1.2.3)
dnsruby (1.72.1)
simpleidn (~> 0.2.1)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0)
ethon (0.16.0)
ffi (>= 1.15.0)
eventmachine (1.2.7)
eventmachine (1.2.7-x64-mingw32)
execjs (2.8.1)
faraday (1.10.3)
faraday-em_http (~> 1.0)
faraday-em_synchrony (~> 1.0)
faraday-excon (~> 1.1)
faraday-httpclient (~> 1.0)
faraday-multipart (~> 1.0)
faraday-net_http (~> 1.0)
faraday-net_http_persistent (~> 1.0)
faraday-patron (~> 1.0)
faraday-rack (~> 1.0)
faraday-retry (~> 1.0)
ruby2_keywords (>= 0.0.4)
faraday-em_http (1.0.0)
faraday-em_synchrony (1.0.0)
faraday-excon (1.1.0)
faraday-httpclient (1.0.1)
faraday-multipart (1.0.4)
multipart-post (~> 2)
faraday-net_http (1.0.1)
faraday-net_http_persistent (1.2.0)
faraday-patron (1.0.0)
faraday-rack (1.0.0)
faraday-retry (1.0.3)
ffi (1.15.5)
ffi (1.15.5-x64-mingw32)
execjs (2.9.1)
faraday (2.9.0)
faraday-net_http (>= 2.0, < 3.2)
faraday-net_http (3.1.0)
net-http
ffi (1.16.3-x64-mingw-ucrt)
forwardable-extended (2.6.0)
gemoji (3.0.1)
github-pages (223)
github-pages-health-check (= 1.17.9)
jekyll (= 3.9.0)
jekyll-avatar (= 0.7.0)
jekyll-coffeescript (= 1.1.1)
jekyll-commonmark-ghpages (= 0.1.6)
jekyll-default-layout (= 0.1.4)
jekyll-feed (= 0.15.1)
gemoji (4.1.0)
github-pages (231)
github-pages-health-check (= 1.18.2)
jekyll (= 3.9.5)
jekyll-avatar (= 0.8.0)
jekyll-coffeescript (= 1.2.2)
jekyll-commonmark-ghpages (= 0.4.0)
jekyll-default-layout (= 0.1.5)
jekyll-feed (= 0.17.0)
jekyll-gist (= 1.5.0)
jekyll-github-metadata (= 2.13.0)
jekyll-github-metadata (= 2.16.1)
jekyll-include-cache (= 0.2.1)
jekyll-mentions (= 1.6.0)
jekyll-optional-front-matter (= 0.3.2)
Expand All @@ -73,7 +51,7 @@ GEM
jekyll-relative-links (= 0.6.1)
jekyll-remote-theme (= 0.4.3)
jekyll-sass-converter (= 1.5.2)
jekyll-seo-tag (= 2.7.1)
jekyll-seo-tag (= 2.8.0)
jekyll-sitemap (= 1.4.0)
jekyll-swiss (= 1.0.0)
jekyll-theme-architect (= 0.2.0)
Expand All @@ -90,32 +68,32 @@ GEM
jekyll-theme-tactile (= 0.2.0)
jekyll-theme-time-machine (= 0.2.0)
jekyll-titles-from-headings (= 0.5.3)
jemoji (= 0.12.0)
kramdown (= 2.3.1)
jemoji (= 0.13.0)
kramdown (= 2.4.0)
kramdown-parser-gfm (= 1.1.0)
liquid (= 4.0.3)
liquid (= 4.0.4)
mercenary (~> 0.3)
minima (= 2.5.1)
nokogiri (>= 1.12.5, < 2.0)
rouge (= 3.26.0)
nokogiri (>= 1.13.6, < 2.0)
rouge (= 3.30.0)
terminal-table (~> 1.4)
github-pages-health-check (1.17.9)
github-pages-health-check (1.18.2)
addressable (~> 2.3)
dnsruby (~> 1.60)
octokit (~> 4.0)
public_suffix (>= 3.0, < 5.0)
octokit (>= 4, < 8)
public_suffix (>= 3.0, < 6.0)
typhoeus (~> 1.3)
html-pipeline (2.14.3)
activesupport (>= 2)
nokogiri (>= 1.4)
http_parser.rb (0.8.0)
i18n (0.9.5)
i18n (1.14.5)
concurrent-ruby (~> 1.0)
jekyll (3.9.0)
jekyll (3.9.5)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (~> 0.7)
i18n (>= 0.7, < 2)
jekyll-sass-converter (~> 1.0)
jekyll-watch (~> 2.0)
kramdown (>= 1.17, < 3)
Expand All @@ -124,27 +102,27 @@ GEM
pathutil (~> 0.9)
rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
jekyll-avatar (0.7.0)
jekyll-avatar (0.8.0)
jekyll (>= 3.0, < 5.0)
jekyll-coffeescript (1.1.1)
jekyll-coffeescript (1.2.2)
coffee-script (~> 2.2)
coffee-script-source (~> 1.11.1)
jekyll-commonmark (1.3.1)
commonmarker (~> 0.14)
jekyll (>= 3.7, < 5.0)
jekyll-commonmark-ghpages (0.1.6)
commonmarker (~> 0.17.6)
jekyll-commonmark (~> 1.2)
rouge (>= 2.0, < 4.0)
jekyll-default-layout (0.1.4)
jekyll (~> 3.0)
jekyll-feed (0.15.1)
coffee-script-source (~> 1.12)
jekyll-commonmark (1.4.0)
commonmarker (~> 0.22)
jekyll-commonmark-ghpages (0.4.0)
commonmarker (~> 0.23.7)
jekyll (~> 3.9.0)
jekyll-commonmark (~> 1.4.0)
rouge (>= 2.0, < 5.0)
jekyll-default-layout (0.1.5)
jekyll (>= 3.0, < 5.0)
jekyll-feed (0.17.0)
jekyll (>= 3.7, < 5.0)
jekyll-gist (1.5.0)
octokit (~> 4.2)
jekyll-github-metadata (2.13.0)
jekyll-github-metadata (2.16.1)
jekyll (>= 3.4, < 5.0)
octokit (~> 4.0, != 4.4.0)
octokit (>= 4, < 7, != 4.4.0)
jekyll-include-cache (0.2.1)
jekyll (>= 3.7, < 5.0)
jekyll-mentions (1.6.0)
Expand All @@ -166,7 +144,7 @@ GEM
rubyzip (>= 1.3.0, < 3.0)
jekyll-sass-converter (1.5.2)
sass (~> 3.4)
jekyll-seo-tag (2.7.1)
jekyll-seo-tag (2.8.0)
jekyll (>= 3.8, < 5.0)
jekyll-sitemap (1.4.0)
jekyll (>= 3.7, < 5.0)
Expand Down Expand Up @@ -215,46 +193,41 @@ GEM
jekyll (>= 3.3, < 5.0)
jekyll-watch (2.2.1)
listen (~> 3.0)
jemoji (0.12.0)
gemoji (~> 3.0)
jemoji (0.13.0)
gemoji (>= 3, < 5)
html-pipeline (~> 2.2)
jekyll (>= 3.0, < 5.0)
kramdown (2.3.1)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.3)
listen (3.8.0)
liquid (4.0.4)
listen (3.9.0)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.3.6)
mini_portile2 (2.6.1)
minima (2.5.1)
jekyll (>= 3.5, < 5.0)
jekyll-feed (~> 0.9)
jekyll-seo-tag (~> 2.1)
minitest (5.15.0)
multipart-post (2.3.0)
nokogiri (1.12.5)
mini_portile2 (~> 2.6.1)
racc (~> 1.4)
nokogiri (1.12.5-x64-mingw32)
minitest (5.23.1)
net-http (0.4.1)
uri
nokogiri (1.16.5-x64-mingw-ucrt)
racc (~> 1.4)
octokit (4.25.1)
faraday (>= 1, < 3)
sawyer (~> 0.9)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (4.0.7)
racc (1.6.2)
public_suffix (5.0.5)
racc (1.8.0)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
rb-inotify (0.11.1)
ffi (~> 1.0)
rexml (3.2.5)
rouge (3.26.0)
ruby-enum (0.9.0)
i18n
ruby2_keywords (0.0.5)
rexml (3.2.8)
strscan (>= 3.0.9)
rouge (3.30.0)
rubyzip (2.3.2)
safe_yaml (1.0.5)
sass (3.7.4)
Expand All @@ -265,28 +238,25 @@ GEM
sawyer (0.9.2)
addressable (>= 2.3.5)
faraday (>= 0.17.3, < 3)
simpleidn (0.2.1)
unf (~> 0.1.4)
simpleidn (0.2.3)
strscan (3.1.0)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
thread_safe (0.3.6)
typhoeus (1.4.0)
typhoeus (1.4.1)
ethon (>= 0.9.0)
tzinfo (1.2.11)
thread_safe (~> 0.1)
tzinfo-data (1.2023.2)
tzinfo-data (1.2024.1)
tzinfo (>= 1.0.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.8.2)
unf_ext (0.0.8.2-x64-mingw32)
unicode-display_width (1.8.0)
uri (0.13.0)
wdm (0.1.1)
zeitwerk (2.6.7)
webrick (1.8.1)
zeitwerk (2.6.14)

PLATFORMS
ruby
x64-mingw32
x64-mingw-ucrt

DEPENDENCIES
github-pages
Expand All @@ -295,6 +265,7 @@ DEPENDENCIES
tzinfo (~> 1.2)
tzinfo-data
wdm (~> 0.1.1)
webrick (~> 1.8)

BUNDLED WITH
2.1.4
2.5.10
6 changes: 5 additions & 1 deletion defects.md
Original file line number Diff line number Diff line change
Expand Up @@ -738,7 +738,7 @@ If a unit is loaded and its container is destroyed, all of the container's units
209. **[Fixed]** The TaskAttack task periodically assesses (cseg01:000269A3) which enemy units protect its primary target(s). If an enemy unit turns out not to be a threat anymore for the attack mission, the associated TaskKillUnit task is canceled (cseg01:00025199) and all friendly units allocated to the TaskKillUnit task are made available for the task manager to be used for something else (cseg01:0001C800). This means that all tasks assigned to such friendly units are notified that they must release the affected friendly unit(s). In corner cases a TaskMove task could be canceled (cseg01:0004FF84) due to such an event while the TaskMove task is using a transporter unit to speed up the friendly unit’s movement. To use a transporter a TaskMove task could instantiate a TaskTransport task that may instantiate a TaskMove task for the transporter unit to move it around. In case the transporter unit’s TaskMove task concludes for whatever reason and the friendly unit to be transported was picked up it should be dumped by the transporter unit somewhere for which the TaskTransport task instantiates a TaskDump task and passes it the friendly unit’s TaskMove task (cseg01:00052E78) so that it could be notified when the transport or dump operations conclude. Now the problem is that TaskAttack canceled the friendly unit’s TaskMove task through the TaskKillUnit task so TaskDump operates on a deinitialized TaskMove task object which means that the TaskDump task will dereference null pointers in the received TaskMove task object which leads to out of bounds read and write accesses under DOS systems that lead to segmentation faults on modern operating systems.
<br>
<br>
Proposed defect fix: On removing the client unit of a TaskMove task seek delayed tasks list of the client to see whether the unit tracks a TaskTransport task and test whether the TaskTransport task tracks the TaskMove task of the client. If so, call the on remove unit method of the TaskTransport task before proceeding with the remove unit method of the TaskMove task.
Proposed defect fix: Prepare TaskDump task member functions for deleted TaskMove tasks to prevent segmentation faults and abort TaskDump tasks in case there is no unit to activate. In case the TaskMove task has no passenger do not even try to instantiate a TaskDump task in the first place. These changes do not correct the various task interactions, but prevent crashes related to some of the incorrect interactions.

210. The TaskCreateBuilding task orders boardwalks (cseg01:0002ED2B), bridges, to be built on shore and water tiles around buildings that help ground units to move around. The game logic verifies every turn whether an ongoing or pending build order is required by an optional parent task or could it be canceled (cseg01:0002D56F). For example if a building is planned to be constructed, the boardwalks are also planned in at the same time. If the construction of the building is canceled, then it makes no sense to construct the boardwalks around an empty mass of land either. In corner cases the verification produces false positive results. The parent task of boardwalks are TaskCreateBuilding tasks themselves. The TaskCreateBuilding class method (cseg01:0002D3E9) used by the algorithm to check whether the task, the parent, is still needed says that the task is redundant if the building is already being constructed as at that time the unit working on the building would manage the operation till conclusion anyways though the unit orders system without a task manager task. So in every case when the building is started to be constructed before its’ boardwalks will result in the immediate cancellation of all boardwalks around it.

Expand All @@ -756,3 +756,7 @@ There are many cases where blocked paths are not reported to remote hosts, proba
216. **[Fixed]** There is a function (cseg01:0009FCA3) to redraw the selected unit's statistics. The function does not check whether relevant image objects are valid before accessing their member methods. There is a corner case where the selected unit has a delayed reaction planned for it, as it ran out of rounds and waits to be able to attack again in the next turn, while the last enemy team is found to be defeated after ending the current turn. When the game over screen is presented to the user another function is called (cseg01:00092955) which deinitializes the selected unit relevant image objects. When the user closes the game over screen the tactical map is reloaded and the game loop renders a few more frames while the control panel closes on the left side and the game eventually returns to the main menu. Problem is that as the selected unit has a delayed reaction the unit statistics window is attempted to be redrawn by yet another function (cseg01:000A094D) before reloading the tactical map could have reinitialized the relevant image objects resulting in a NULL pointer dereference and a segmentation fault on modern operating systems. The proposed defect fix is to change the program flow to reinitialize the image objects before they could be referenced in the corner case.

217. **[Fixed]** There is a function (cseg01:000FE35D) to clean up all delayed or pending unit reactions. The given function is called only by a manager function that orchestrates attack priorities and related unit order states for mobile and stationary military units alike. Normally if all attacks are handled some units could remain in a delayed state still waiting to be allowed to shoot at something that is already destroyed. The given function is called by the manager to clean up these undesired pending unit states. Problem is that the given function only handles mobile units and forgets about stationary units. This could lead to stationary turrets stuck in attacking state in which case they cannot be put to sentry mode or this could prevent the player from targeting new enemy units rendering the given turret useless. Proposed defect fix is to clean up after stationary units as well within the given function.

218. **[Fixed]** The TaskAttackReserve task has a virtual member function that determines whether a unit is usable by the task (cseg01:00019770) and another that actually adds or assigns a unit to the task (cseg01:000198DE). The first method expects a military unit type to have the ability to move, to be a mobile unit, while the second method expects the unit to have speed points available in the given turn. If a mobile military unit with available ammo and shots in the given turn has no assigned task while it has spent all of its speed points, then the task manager tries to find a task for the unit, and in certain corner cases, an active TaskAttackReserve task will determine that the unit is usable as it is a mobile unit, but as soon as the task manager tries to add the unit to the task, the second method will find that it has no speed points left and will schedule a task manager reminder that the unit became available, meaning it has no task assigned anymore, so the task manager has to search for a new task for it. This is basically an endless loop.

219. **[Fixed]** When a factory finishes a build operation, a new UnitInfo object is instantiated (cseg01:000F1740) for the manufactured unit. The unit gets initial orders (ORDER_IDLE) and order states (ORDER_STATE_3), its grid position is set to be inside the factory, and the unit’s parent unit is set to be the factory that built it. The factory is also a UnitInfo object and its parent unit is set to be the newly manufactured unit. The factory’s active task is a TaskCreateUnit task which eventually progresses its state machine to the unit activation stage and when the TaskCreateUnit task is scheduled for execution the next time it assigns a TaskActivate task (cseg01:000393BA) to the factory unit which will in turn activate its configured parent unit, the manufactured unit. While the previously described state machine of the TaskCreateUnit task is reaching the activation stage, the computer player’s task scheduler will find that the newly instantiated UnitInfo object of the manufactured unit has no assigned tasks which will trigger a search for an eligible task type. If a new unit upgrade is researched or bought at the same turn when the manufactured unit gets instantiated there is a chance that the upgrade will be relevant for the new unit in which case the task scheduler will assign a TaskUpgrade task to it. The TaskUpgrade task searches a building that could perform the upgrade, e.g. a Depot, and progresses its state machine further. At one point the upgrade task checks whether the target unit is in ORDER_STATE_3 which would mean that it is loaded inside the operator building, e.g. a Depot, and is ready to apply the upgrades. The needed raw materials to perform the upgrade are deducted from the complex of the operator building, e.g. a Depot in complex A, while the factory in which the manufactured unit stands could be in another complex, e.g. a light vehicle plant connected to complex B having no raw materials left, not to mention the fact that the unit to be upgraded is not even inside the operator building to begin with. After applying the upgrades the target unit’s parent gets a new TaskActivate task which means that now it has two such tasks. When the second TaskActivate task instance executes the function (cseg01:000FFC49) responsible for the actual activation, various unit internal states could become corrupted. The proposed defect fix prevents the computer player’s task scheduler from assigning tasks to the newly manufactured unit that is waiting to receive its TaskActivate task from the factory.
2 changes: 1 addition & 1 deletion download.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,4 @@ tag: 0.6.1

### Previous Releases

Download previous releases from [Github](https://github.com/klei1984/max/releases)
Download previous releases from [GitHub](https://github.com/klei1984/max/releases)
Loading

0 comments on commit d1e0e96

Please sign in to comment.