50 Commits
Author SHA1 Message Date
Gleb Mazovetskiy 70ff515f48 Stream demo messages
This entirely eliminates the demo memory overhead.
2023-09-02 20:54:24 +01:00
Gleb Mazovetskiy 65e0ad88d2 Further reduce demo file size
The vast majority of events are rendering events:

 Type        | Count
-------------|------:
 Rendering   | 58,971
 MouseMotion | 19,651
 GameTick    |  6,414
 MouseButton |    516
 Key         |      7
 Custom      |      1

Encodes Rendering events in a single byte when possible.

Demo file size: 253,410 bytes -> 194,439 bytes
2023-09-02 16:43:59 +01:00
Gleb Mazovetskiy d31a7b5c2c Log Demo settings 2023-09-01 21:59:20 +01:00
Stephen C. Wills 5e778431c3 Deterministic timer simulation for shrine messages in demo mode (#6516) 2023-08-29 13:46:49 +02:00
Gleb Mazovetskiy eb51a8beb3 Reduce demo message size
`DemoMsg` struct and event data are now kept separately.

RAM usage for the timedemo messages: -85% (1.8 MiB -> 261 KiB)

Demo (`.dmo`) file size: -57% (590,790 bytes -> 253,410 bytes)
2023-08-27 16:49:13 +01:00
Gleb Mazovetskiy c19bfe87fa Remove utils/stdcompat/algorithm.hpp 2023-08-14 01:54:29 +01:00
Anders Jenbo 64d7af2937 Fix loading new demo files and give better error messages when failing 2023-07-24 02:45:26 +02:00
Gleb Mazovetskiy 936b3bd45a Demomode: Store/override gameplay options 2023-06-16 18:49:14 +01:00
Gleb Mazovetskiy 4fa3732526 Add missing <cstdint> includes
Done with the following script:

```ruby
Dir["Source/**/*.{h,c,cc,cpp,hpp}"].each do |path|
  v = File.read(path)
  next if !v.include?("uint32_t") || v.include?("cstdint")

  lines = v.lines
  line_num = if lines[2].start_with?(" *")
    lines.index { |l| l.start_with?(" */") } + 3
  else
    3
  end

  lines.insert(line_num, "#include <cstdint>\n")

  File.write(path, lines.join(""))
end
```

then fixed-up manually
2023-05-10 13:50:12 +01:00
Gleb Mazovetskiy c5e6bf630f demomode.cpp: Set mouse.*.which to 0
Otherwise it can end up as `-1`, triggering the `VirtualGamepad` input
type (-1 is `SDL_TOUCH_MOUSEID`).
2023-03-21 17:04:01 +00:00
Gleb Mazovetskiy 1a1a282d9a Use C FILE instead of C++ streams throughout
Reduces binary size by ~2 KiB and may improve compatibility with oddball
systems (e.g. PS2).
2023-02-15 18:15:07 +00:00
Gleb Mazovetskiy 1788d2f8ec Remove miniwin
Event handling code moved to `engine/events.{hpp,cpp}`.
2023-02-01 16:06:57 +00:00
Gleb Mazovetskiy 5bf9dfd7ee Demo mode: Force resolution to that of the demo 2023-01-12 03:38:29 +00:00
qndel efaf334965 typos and code cleanup 2022-12-19 17:34:15 +01:00
Gleb Mazovetskiy 9b1ff3d50b demomode.cpp: Fix creating a bogus event
The `eof()` does not return true until a failed read attempt.

> Note that the value returned by this function depends on the last operation performed on the stream (and not on the next).
2022-12-15 05:59:17 +01:00
Gleb Mazovetskiy 45757856c1 DemoMode: Add a debug define to log events 2022-12-15 05:59:17 +01:00
obligaron 5180bd02b4 Timedemo: don't update ProgressToNextGameTick in pause menu 2022-12-15 05:37:33 +01:00
obligaron 028f630848 Timedemo: don't play and record messages in loading screens 2022-12-15 05:37:33 +01:00
obligaron 6e08ad658f Timedemo: represent game tick progress as uint8_t 2022-12-15 05:37:33 +01:00
Gleb Mazovetskiy cffb2566df Fix timedemo on SDL1 2022-12-09 12:05:54 +01:00
Gleb Mazovetskiy ab5733b5e3 Support demo playback in SDL1
Useful for measuring performance in SDL1.
The demomode test now passes in SDL1 as well.
2022-11-23 18:05:50 +00:00
obligaron eca1a68bec AnimationInfo: Use fixed point math for fractions 2022-11-06 12:31:40 +00:00
Gleb Mazovetskiy 4cf0053ece Set underlying type for all the enums
Reduces rg99 binary size by 3 KiB.
2022-08-11 01:43:54 +02:00
Gleb Mazovetskiy ba34bafb3f Use SDL events directly
Removes redundant miniwin events and queue, using SDL events directly instead.

Demo migrated using this script: https://gist.github.com/glebm/8a73b04f695de96f344cc2e35151e03e
2022-08-03 03:50:19 +02:00
obligaron 2c7e886c85 Add detail log info to CompareSaves 2022-08-02 02:12:36 +02:00
Gleb Mazovetskiy 7c0b72abc0 Improve demo test error message
Example:

```
file "game" is different at byte 54251:
Expected: ... 00 00 00 00 00 00 00 00 30 00 00 00 50 00 00 00 ...
  Actual: ... FF FF FF FF 00 00 00 00 30 00 00 00 50 00 00 00 ...
```
2022-07-26 01:20:06 +02:00
Gleb Mazovetskiy adf40f5c80 misc_msg: Always use lParam for mod state
Previously, keyboard events used `lParam` for modifier key state,
while mouse events used `wParam`.

Changes the mouse events to use `lParam`, which allows us to
change `lParam` to `uint16_t`.

Demo migrated with a script.
2022-07-18 11:09:45 +01:00
Gleb Mazovetskiy 4c1dbaba72 Demo mode: Handle endianness 2022-07-18 10:35:27 +01:00
Gleb Mazovetskiy ea1087dfeb Use StrCat in a few more places
Now `fmt` is only used for more complex formatting and for translations.
2022-07-17 20:43:00 +02:00
Gleb Mazovetskiy a4ac41cece Replace DVL_VK virtual key codes with SDLK 2022-07-17 10:00:06 +01:00
Anders Jenbo ac2bf9aaac Limit what gets called in headless mode 2022-07-13 18:54:36 +02:00
obligaron ebfb519ee0 Rename gbQuietMode to HeadlessMode 2022-07-13 18:54:36 +02:00
obligaron bab9baa42a Handle gbQuietMode for paths in StartGame 2022-07-13 18:54:36 +02:00
Anders Jenbo 3ae834148a Split event handeling from general miniwin features 2022-07-10 21:13:39 +02:00
Gleb Mazovetskiy 72660d9189 Migrate snprintf to fmt (#4845)
* Migrate `app_fatal` from printf to libfmt
* Migrate snprintf to fmt
2022-07-02 02:36:17 +02:00
obligaron 0d2a23254e Use binaryformat for demofile (#4799) 2022-06-25 22:19:37 +02:00
obligaron 1608219b39 Timedemo: Create reference save game and allow comparing of reference save game with actual timedemo save game 2022-06-04 21:15:47 +02:00
obligaron b62cacd1d6 Demomode: Init ControlMode to KeyboardAndMouse 2022-04-23 05:32:01 +02:00
obligaron 79b926c375 Move more options to OptionEntryBase 2022-02-05 20:51:54 +01:00
obligaron 9a14edfcd9 Add OptionEntries for Hardware Cursor 2021-12-17 20:12:17 +01:00
Gleb Mazovetskiy 9bc9bb6d33 Fix demomode file comments 2021-12-17 16:27:19 +00:00
Gleb Mazovetskiy 1f2d67f98b Fix demomode line endings 2021-12-17 16:27:19 +00:00
obligaron 5e2ad66e64 Add OptionEntry Resolution 2021-12-08 00:37:06 +01:00
obligaron 2e5a488d5f Add OptionEntry for graphics 2021-12-05 02:00:27 +01:00
obligaron 6273f700fa Add some Graphic Settings to Settingsmenu (#3617) 2021-11-27 00:25:48 +01:00
Gleb MazovetskiyandAnders Jenbo 7e1fea6f76 clang-format all files in {Source,test}/
Also includes a few manual tweaks to comments and newlines for better results.

Co-authored-by: Anders Jenbo <[email protected]>
2021-11-24 23:44:12 +01:00
obligaron 02900c8fa5 Demo: Fix rendering jittering 2021-08-29 21:40:24 +02:00
obligaron 2a6e5712de Disable hardware cursor for demo playback 2021-08-29 10:26:50 +02:00
obligaron 26e61b363b demo: Centralize options override 2021-08-19 00:04:57 +02:00
obligaron 77f9bded9e Introduce demo namespace 2021-08-19 00:03:58 +02:00