-
Notifications
You must be signed in to change notification settings - Fork 31
/
FloatingSandbox TODO.txt
16721 lines (16257 loc) · 680 KB
/
FloatingSandbox TODO.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
====================================================
====================================================
====================== Plan ========================
====================================================
====================================================
- Roadmap:
===========================
- Before next release:
- Invite BumBumBaby to beta server
+ Make branch (1.19.0.next)
- Bump up minor
- Reduce fish size
- Redo texture notifications - test size 64+32
- All 5 or 6 textures
- Make sure code takes sizes from files
- New materials (*)
= Clouds V3: with fantastic texture coords offset
+ First off, technical debt:
+ Do clouds as baked atlas
+ Do index-based rendering
+ Magic work:
+ See shader on shader toy: use cloud texture coords offset based on noise centered around 0.
+ But solve problem of going to other texture: need more room around textures?
+ Cannot clamp in shader: would still look awful, and nice to have long flanges
+ Noise needed:
+ Perlin-8,32,0.43 (different than land)
+ Move from WorldRenderContext to GlobalRenderContext
+ Basically move mLandNoiseTextureOpenGLHandle
+ Test:
+ Land noise
+ Clouds (old noise)
+ Shader
+ Does amplitude need to depend on texture coords w/h?
+ Play with detail
+ Triage current cloud textures
+ In ShaderToy
+ Randomize starting progress
+ Verify that the Perlin we're using is the same as on the desktop
+ Save image, before and after recalibrating
+ Tests:
+ Basic
+ Moonlight, Lamp
+ Detailed
+ Moonlight, Lamp
+ Storm
+ Test enlarging canvas of tight clouds
= Test AdobeStock/Getty clouds
+ Need Illustrator
+ Cancel subscription
! By clicking "Agree and subscribe", you agree: After your trial ends, you will be charged € 32,76 (excl. VAT) monthly. Your subscription will automatically renew monthly until you cancel (price subject to change). Cancel before your trial ends and you won't be charged. Cancel anytime via Adobe Account or Customer Support. Cancel before Dec 10, 2024 to get a full refund. You also agree to the Terms of Use and the Subscription and Cancellation Terms.
- Test cloud 8008 which is on desktop (replacing cloud_2 in Atlas which is a badly processed version)
X See if we have it in authoring already though
- Changelist
= See if fire may emit Heavy smoke
! Gist:
! Smoke shuld be drawn behind flames => "Z Issue"
- TODO: write solution here, which includes preliminary PlaneId rearc so that triangle ("main") planes start from 1 and everything in the background
is on plane PlaneId-1
- This should remove necessity of separate flame uploads and of its layer (iff that layer is only for it)
- Test with code first if this solution flies with TODOOLD below
- We _do_ early discard at generic textures after all, but that might not be enough
- TODOOLD was:
- Smoke should be drawn behind flames, hence GenericTexture's should be in an earlier layer than flames.
However, generic textures (smoke) have internal transparency, while flames have none; the Z test makes it so then
that smoke at plane ID P shows the ship behind it, even though there are flames at plane IDs < P (which should have been shown instead)
- TODO: is this ameliorated by the early pixel discard? Do test mentioned above
! New ad-hoc dark smoke texture
! New shader with growing effect similar to clouds shader
! Need a new shader anyway , 'cause black smoke looks awful when it fades away
! Texture coords are params (set @ initialization, texture never changes)
! Also random angle
- Impl:
- 1. Do test above: see if planes and Z are enough, if all shaders do early discard
- 2. If test ok, finalize work with plane-1
- Replace Flames' dual upload
- Add more music:
- Background:
+ "Symmetry" - Kevin MacLeod (incompetech.com)
- "Shadowlands 5 - Antechamber" - Kevin MacLeod (incompetech.com)
- https://www.scottbuckley.com.au/library/soul-searcher/
- https://www.scottbuckley.com.au/library/intervention/
- Buy new track for farewell: https://www.pond5.com/royalty-free-music/item/204959560-nearer-my-god-thee
- Consider invoking World::Upload from render thread (via RenderContext, as func<>, *synchronously*)
- So that may upload to GPU buffers directly (or at XYZEnd()), instead of local temp buffers
- Eventually using mapped buffers, so no local storage at all, unless when mapped buffers not possible because we don't know size in advance or e.g. need sorting
- Plan:
! Measure perf in all below
- Ideally on old Dell
- 1a. Quick'n'dirty test A
- Just invoke World::Upload from thread, no other changes needed other than not calling RenderThread for those few uploads that happen on render thread
- 1b. Converge to optimum
- Replace, one by one, local buffers with mapped buffers / upload at end() (when mapped buffers not possible)
- Nuke corresponding RenderPrepare() each time
- Try to lower global damping - seems quite slow
- New SplashScreenDialog:
- Upper part OpenGL, lower part progress bar
- Own OpenGLContext (a third one) on own thread
- Dialog has own timer, updating animation in OpenGL quadrant as follows:
- 0: OpenGL quadrant occupies whole dialog
- 1. G2-Labs Sequence
- 2. Fade to black
- 3. OpenGL quadrant gets resized to allow for progress bar underneath
- Or OpenGL quadrant stays, and dialog becomes taller downwards for progress bar quadrant
- 4. Progress bar shows progress, and OpenGL quadrant shows ship sinking, stepping with progress
- OnProgress is always called, but has a visible effect only from step 3 onwards
- A way to spawn ships like NPCs: at any place
- See if can use keys to pan along diagonals
- Ship engines should not work when not underwater
- Ship passwords only to prevent being edited, but allow password-protected ships to be inspected
- ShipStrengthRandomizer: try to optimize
- Responsible for half of loading time
- Render glowing particles after burning
- Ship points rendering: temperature attribute should be enough for new code in shader
- TODOOLD: swap rot with temperature?
- Do we still see browned particles?
- Redo timer bomb
- Shader for fuse + sparks
- Try with parallel "water" subsystem, but for "bulk" (gravel, etc.)
- May co-exist with water
- Physics slightly different (more dense)
- Placed via "Hopper" tool, w/submenu for different materials
- From materials DB, but hidden from builder
- OR: just single material, for simplicity?
- Physics impl:
- Same subsystem as water (now renamed "Internal Fluids"), own buffers
- UpdateWaterMomenta: double calculations in existing loops
- Only difference: horizontal propagation is subject to "friction"
- Option to have larger world size
- New tool: Punch (was: wrecking ball tool)
- Spec:
- Like ocean floor collision, against a sphere (which only grows quickly at initial engagement)
- OLD: Works only on frontier from outside->in
- Might want to try, at end, also from inside->out
- TODO-WHY OLD: because doing like ocean floor collisions is essentially the same, except that it also works on ropes
- Impl:
- TODOHERE
- Replace points with quads from geometry shader
- Adjustable level of water
- Think of problem with flattening waves on bottom?
- Transparency setting for glass material
- Managed by Ship adjusting colors' alpha's
- Frozen structure (*)
- Bubbles issue (that "old" issue)
- Add temp code to calc total internal water, and see if it's true that it keeps increasing
- Do same for "other internal pressure"
- Fireworks (*)
- Review rope strength:
- 0.025 is better, but stresses too much
- Add optional stress_strength_fraction material property, default=current value, for ropes=100%
- Make Mac instructions
- SFML build: https://github.com/SFML/SFML/issues/1496
- Misc quick things:
- See if water entering via hole is faster than water entering natural non-hull ("cut funnel")
- See why Bernoulli doesn't make inflow faster
- Negative pressure in Mylar bubble - bug?
- See why with high water density, water entering a ship goes above the waterline - bug?
- Lights improvement options (*)
- Sources of Light
- See if there's a * below
- Add to fireworks as precondition
- Spec:
- Ship owns LightSource instance, just container of point index, material params, calcd params
- A part of it is fixed, the other comes and goes
- ElectricalElements go to fixed part
- All others to dynamic part
- Buffer-aligned
- Params are shader-friendly, as we'll upload them with Lights Improvements work (*)
- Add/Removed to by:
- ElectricalElements: added @ init & kept forever
- Populated initially by ship invoking ElectricalElements::PopulateLightSources(LightSource &)
- LightSource::AddStaticSource -> LightSourceIndex
- Lamp state @ ElectricalElements stores the index in LightSource, which is needed for setting params, etc.
- Firework state machine: added & removed as needed
- LightSource::Add/RemoveDynamicSource
- Ephemeral particle state @ Point stores the index in LightSource, which is needed for setting params, removing, etc.
- Used by lighting algorithm AND by shader (after Lights Improvements work (*))
- Sound space (*)
- ShipRenderContext: see if may turn off Z-depth check @ triangles
- Check first on Dell if doing so would improve perf
- Check then if there are any artifacts when doing so
- Investigate perf hit of rendering to buffer and directly drawing the buffer afterwards
- OpenGL Frame Buffer Object 101: https://www.gamedev.net/reference/articles/article2331.asp
- http://www.mathematik.tu-dortmund.de/~goeddeke/gpgpu/tutorial3.html
- If it works: do "reshader" type of work (*)
- See if may put smoke emitters behind triangles and springs
- At the moment we're using GenericTextures for smoke, hence we're in the same layer as bombs, etc.;
need to have a way to change layer, which would however require a different rendering batch (because
of different orthomatrix)
- Test: re-try cache layout optimizations
- See current optimization's impact first with NOP optimization
- Check if simply ordering points by X makes it faster (because of improved ocean floor/ocean surface sampling locality)
- Splashes
- Option A) Ephemeral particles with own shader:
- Texture of splash
- Elongated with vertical velocity
- Option B) Same as A, but instead of one single texture, a (small) set of frames
- Option C) Fully "movie" (not ephemeral particles), just like explosions
= Do shader at Anti-Matter bomb pre-implosion
+ Shader already started: https://www.shadertoy.com/view/3sVSRc
- See if should add some noise: add some of those playful experiments
- Release template:
- Branch is merged into master (if applicable)
- Windows
- MSI variable
- Commit & push
- 64-bit MSI
- Cleanup Install
- Build Release Install (after clean)
- Sign two exes
- Make MSI
- Rename MSI
- Sign MSI
- Test upgrade from previous version
- 32-bit MSI
- Cleanup Install
- Build Release Install (after clean)
- Sign two exes
- Make MSI
- Rename MSI
- Sign MSI
- Test clean install
- Verify it's a 32-bit process
- Ubuntu
- rm -rf ~/floating-sandbox
- pull
- rm -rf build; mkdir build; cd build
- cmake -DCMAKE_BUILD_TYPE=Release -DFS_BUILD_BENCHMARKS=OFF -DFS_USE_STATIC_LIBS=ON -DwxWidgets_USE_DEBUG=OFF -DwxWidgets_USE_UNICODE=ON -DwxWidgets_USE_STATIC=ON -DFS_INSTALL_DIRECTORY=~/floating-sandbox ..
- make install
- Make tar ("cd ~/floating-sandbox && tar -cvf ../Floating-Sandbox-1.16.5-x64.tar . && cd -")
- Zip tar
- Smoke-test tar ("rm -rf tmp && mkdir tmp && cd tmp && cp ../Floating-Sandbox*.tar.gz . && tar -xf Floating-Sandbox*.tar.gz")
- Send 3 installers to dev server for final smoke test
- Wait for test results
*******
- Cut tag on github
- Copy binaries to Prev
- Copy MSIs to scratch
- Upload packages to GameJolt
- Verify Windows Defender
- Report file as safe (https://gamejolt.com/privacy)
- Post
- www.floatingsandbox.com:
- Update current version in FAQ
- Wait a day or two, to exclude disastrous bugs
- Upload changes2.txt
- Test w/old FS
- Localization:
- Italian: Gabriele Giuseppini
- Russian: DioxCode (Fallback: Ilya_Voloshin, Faulttix#8691)
- Ukrainian: DioxCode, Denis
- Spanish (Latin American): Joadix (Fallback: The G a z e r W o l f)
- Portuguese: Kiko
- Add to credits: "Kiko", and change in other sections as well, and also in .shp files
- Fallback: The G a z e r W o l f
- Hungarian: S.S. Atlantic
= Doing HTMLs
- Add to credits:
- Invite to server
- Ships:
# Credit names:
# ShippyMcJerry: ShipBuilder1912
# Coolman115: CorbinPasta93
# Ilovedumbphones: Dumbphones
# SweetStrawberryBoy: TopHatLemons
# sum wulf gurl: Artica
# An SR71 Habu: NotTelling
# JackMellon: JackTheBrickfilmMaker (Discord, https://drive.google.com/drive/folders/1isy3QiRzMfyu69v5M0gwD5tvBnYZMWXx)
# JonBrisby: Takara
# den2006: Denis
- Ship Packs:
+ Kiko's pack
+ Screenshots and description in PM
+ I keep donations
+ Test
+ Meta
+ Zip & release
- HummeL:
- Meta: <asked>
+ Waallrus: have all
+ He'll dig PayPal once I need it
+ MasterGarfield: have all
+ Have also his PayPal email
+ Liamo's pack
+ Test
+ Rename "Iowa class" as in meta
+ Meta
+ Got his Paypal
+ Repackage
+ Publish
= Alex02:
+ Have Part 1 and Part 2
+ Titles: "Le navi dalla storia" (vol. 1 e vol. 2)
+ Description: I make it
+ Author: "Alex di Roma"
+ Add "Andrew Hensley" to credits of: Blue Regalness, 2xQueen Anne
+ Test
- Release:
+ Vol. I
- Vol. II
- Asked ShipBucket
+ No PayPal
- Space ship pack: [free]
- JohnSmith: gave permission for his
- Ships in PM
- nomadavid's pack
- Captain Nobinson
- Test
- Meta: <asked>
+ The_Mateuszs_Small_Steamships_Ship_Pack
+ No Shipbucket
+ Test
+ Meta: The package includes 11 ships. The name of this pack is: The Mateusz's Small Steamship ShipPack. Author: "The Mateusz"
- New ships:
- U.S.S. Maximum 4 in _TO_TEST
+ Test
- Is it from Discord?
= Bartosz1944PL
+ Test: _TO_TRY/Bartosz1944PL
- Asked credits
- Move to final
- Ubuntu:
+ Event polling issue:
+ Try: on Linux:
+ if elapsed < 0: wxWakeUpIdle(), else SetTimer
+ OnIdle(): if mHasStartupTipBeenChecked && !timer.isArmed: invoke RunGameIteration
+ Keyboard shortcuts don't work
= Misc issues:
- Slider control is clipped
- MouseMove's are delayed and/or skipped
- The plain '+' key doesn't work as shortcut
- The switchboard panel's background selection popup is crippled
- SpinBox is only horizontal
+ Build as RELEASE
+ See if have to set _DEBUG in CMake also for Linux, so it appears in BuildInfo
+ Test
+ README.md
+ Requirements: do different by OS
+ Gather testers and send them tar.gz
X gabe3333342323, ayjanu: sent friend requests
+ Walther first
+ TheCrafters001: Real Hardware on a Live Linux USB Drive, OS: Linux Mint 20.1 (Ubuntu/Debian Based)
+ Make fixes:
+ Fix keyboard shortcut => menu checking
+ Test:
+ Pausing is non-functional: "When I check the pause option in the menu, it stays checked. For throughout most of that log I was playing with it checked.
I think I managed to get it paused once, but it took a minute to get it unpaused."
+ Changing tools using the keyboard, doesn't update the tools menu correctly. Clicking on the tool you were just using does nothing.
+ Remove Logging for diagnostics
+ Rotating Boats/Objects happens way too fast
+ Remove diagnostic logging
+ Add him to credits
+ Discord: give him feedback and ask alias for credits: "TheCrafters001"
+ Send him new beta
+ Test new feautures:
+ Inflatable balloon popping
+ Fix unit tests
- MainApp does not exit
- MAC:
+ FS build cannot find wxWidgets
+ Issue is due to pthread and iconv libs not found; added FIND_PACKAGE for APPLE in CMakeFiles
= Linker issue: DevIL references but can't find jpeg, png, jas, tiff
- Add png, jpg to shiptools, unittests
- ADDITIONAL_LIBRARIES is empty
= Find correct IF to detect - asked to try again
- See if FIND_PACKAGE for pthread and iconv is still needed after that
- See if need to rebuild DevIL without JAS, TIFF
- -DIL_NO_TIF=1 -DIL_NO_JP2=1
= Full high-DPI path:
! a) Window scaling: on a 2X DPI, a wxWindow of size (500, 500) would be (1000, 1000) on Mac and (500, 500) on Windows. To overcome this, use wxFrame->FromDIP:
myFrame->SetClientSize(wxSize(400, 300)); --> myFrame->SetClientSize(myFrame->FromDIP(wxSize(400, 300)));
! b) Physical pixels are never scaled, on any platform, and must be used when drawing graphics elements to ensure that the best possible resolution is used.
For example, all operations on wxGLCanvas use physical pixels. To convert between logical and physical pixels, you can use wxWindow::GetContentScaleFactor():
this is a value greater than or equal to 1, so a value in logical pixels needs to be multiplied by it in order to obtain the value in physical pixels.
+ Tests:
+ With plist (i.e. full screen): ContentScaleFactor=1 DPIScaleFactor=1 100x100dip=100x100px
+ Without plist (i.e. 1/4th of screen): ContentScaleFactor=2 DPIScaleFactor=2 100x100dip=100x100px
+ See mouse coords: are they scaled or not scaled?
! Max is 1900, i.e. scaled
+ Remove TODOTEST @ MainFrame.cpp
+ Changes:
+ _PixelCoordinates and _PixelSize ("logical" and "physical" versions via usings & tag template param)
+ @ GameTypes, "Rendering" section
+ GameController::cctor / IGameController: all interface methods take/return coords of correct type (i.e. always the "window" ("logical") type)
+ RenderContext / ... / ViewModel: all methods take/return coords of correct type
+ RenderDeviceParameters: takes LogicalToPhysicalPixelFactor, passed down to ViewModel
+ ViewModel:
+ Stores LogicalToPhysicalPixelFactor for returning (and taking) "logical" types
+ Precalcs canvas width/height as "physical"
+ ToolController: mouse position in MouseState is in LogicalPixelCoordinates
+ Tools
+ _PixelXXX::From/ToFloat
+ MainFrame: pass ContentScaleFactor to RenderDeviceParameters
+ Tests:
+ Pan & increment from settings
+ Tools:
+ Rotation
+ MoveBy
+ Shaders: cross of light, interactive, texture notifications
+ Screenshot
+ ScreenToOffset with electrical panel
+ Add logging
+ Remove TODOTEST logging
+ Move BuildInfo generation to BuildInfo
+ Log
+ CreditsPanel
= Test setting glContext after resize
+ If works, add #ifdef for MAC
+ Do it from RenderContext directly, @ ApplyCanvasSizeChanges
+ Callback binds to a new MainFrame's private method
+ std::atomic for pointer to canvas
+ Callback from RenderDeviceProperties goes back to being simply named
+ "RebindContext" call takes no args
= Take care also of resize's happening with splash screen
- MAC tests:
- Tools:
- Move tool
- Rotate tool
- Smash tool
- Shaders:
- Cross of Light (i.e. in the AM bomb, the "halo" expanding at the beginning, and the final "cross" of light when the bomb explodes)
- HeatBlaster (make sure the flame is drawn at the right position)
- Mute notification (appears when you set sounds to mute in FS itself, make sure it appears on the bottom-righ side)
- Please send me a screenshot of this one
- PhysicsProbe (new tool, you'll find it under Tools) - should open a "panel" on the bottom-left side
- Please send me a screenshot of this one
- Screenshot (take a screenshot in-game and verify it's correct)
- Please send it to me together with an *external* screenshot
- Ship preview window
- Please send me a screenshot of this one
- Credits
- Please send me a screenshot of this one
+ Disable multi-threaded rendering on MacOS - at RenderContext when instantiating TaskThread, but make it so BootSettings may still swing the decision either way
+ FPS: 13-14
- Build issues:
- set (CMAKE_FIND_LIBRARY_SUFFIXES ".a")
= Current path (absolute-pathness in ResourceLocator): see if with app packaging, current directory is the executable's directory. If not, use current process directory
+ Add log entry for current directory *and* for executable directory
- Packaging:
- wxWidgets so's
- See if may statically link
- SFML: so's?
- DevIL: so's?
- Marketing:
- Vegas:
- Screenshots:
- Wreck at night w/wout lamp
- Twilight
- Temperature overlay
- Stress overlay
- GameJolt:
- Use new video as preview
- www.floatingsandbox.com:
- Embed GameJolt Widget
- Talk about builder (w/screenshot) on main page
- After release: update Wordpress post w/new engine stuff
- Connectivity
- Types
- Suggestions to spec:
- Explosions improvements:
- (Kiko) For explosions, i think the "blast wave" could follow along the decks instead of spreading out in a circle
- Escape via holes
- Note that the above is about external vs. internal explosions
- Explosive particles that come with the ship cause internal explosions, while bombs placed by the player cause external explosions
- Also damage structure
- Ideally by bending only
- And for explosive materials, instead of each particle exploding individually, i think they should combine and form a single larger explosion
- Choice for flames: inside vs outside
- Inside won't extinguish with water
- Inside could damage the structure but not the hull
- Northern lights
- Heat bomb
- Just heat
- Fishing log
- Players can collect different kinds of fish; click on one they don't have and it goes into like a collectors book
- Could have a "fishing rod" tool
- Drain ocean
- Shockwave bomb
- When detonated the area destroyed is quite small but it sends out a shock wave with a pretty big radius that can cause things to break or collapse and stuff like that. Also maybe it could be very damaging to rotted materials, causing it to shatter like the thanos snap thing.
- Make lights not propagate through hull
- Sun rays
- Moving furniture
- Need way to prevent springs made to other materials
- Slow motion
- When bombs explode
- Wreno's suggestions: https://docs.google.com/document/d/1kOYAgvh2rFYJJBnSp4DCiFm3FdJlfVEiCXQWNzJzO-I/edit
- Be able to place nuke and AM bomb anywhere
- Plants on the bottom - don't have to interact with the ship, just on layer in front of it
- Different colored lights
- Different maps: maps that might even have islands and grass
- Black hole
- Tool to increase or lower mass under the cursor
- Can the bubble tool be used to remove water from the ship? that could be pretty cool
- I wonder if that's possible to make the UI dark once the brightness of the game gets lower than a specific level just like your make the FPS counter white
+ Tools turning white at night
- Tornado
- Mixes swirl and grab
- Meteorites
- Earthquake
- Add circular zones around bombs when placing showing what the expected blast radius should be. The circle should change in size when settings are tweaked. Much better than crunching numbers to figure out what's gonna happen.
- Air friction: e.g. you throw a ball and it catches fire
- Update Idea: When we get collision detection AND the ability to spawn multiple ships can you make a "Magnet" colour for eletrical ships, where you can push a switch and it activates a magnet, and if two ships have close magnets, they connected? that would be amazing! We could have aircraft carriers acutally carry helicopters/planes, and tugboats rescuing ships!
- Ideas from the FS discord server:
-Whirpools
-ports and piers to RP with
-Waterspout/tornadoes
-Animal NPCs
-sea life
-Pixel Ground for higher end PCs
-trees and grass for islands
-make underground tunnels
-atomic bomb
-snowstorms
-infinite map or expand the map size
-option to disable bouyancy from temperature
-mines
-water reflections
-icebergs and growlers
-ability to spawn more than 1 ship
-freeze tool
-Styrofoam material, it always floats and never degrades
-projectile explosives
-copper material that oxygenate and turn blue
-hydrofoil and hovercraft material
-electrical wires that when active and cut create sparks and light things on fire
-morse code chat
-rust from humidity
-hull damage status
-working gun turrets
-foam from bubbles and suction
-emergency flares and fireworks
-aircraft and submarine AI that can spawn and raid a ship
-cargo holds and bunker hatches
-multiplayer
-ability to weigh anchor
-selectable backgrounds
-lifeboat layer
-Volcanoes
-NPCs
-time travel
-torpedoes
-toggle camera to follow a ship with engines
-splashes from the water when a steamer's funnel buckles and falls
-pipeworks
-sunsets
+surface wake
-spring optimizations
-mist for a ship's final plunge
+day/night cycle
-change gravity
-tides
-background layers
-3 bodies of water:
- sea water: the default
- lake water: a brownish color; not as good as decaying ships, they turn brown but don't break apart
- river water: a constant turbulent water that flows along the contour of the terrain much like a river does
- more details:
So I know you said different water types would be something in the distant future
but I was thinking about something unique that could involve lake water
the rot is minimal so I was thinking of an alternative growth
was thinking that maybe we could have zebra mussel colonies that grow on the wrecks over time in fresh water
we could introduce a new tool
like a picaxe type tool that can remove heavy growths like zebra mussels and barnacles
barnacles would be the problem for the default water settings
and zebra mussels could be something in lake water settings
these would slowly colonize the hull and put weight on it
- Testers:
- Pac0master: Intel core i5-8600K 6 cores, NVIDIA GeForce RTX 2070
- Oxurus: Intel i3, Intel(R) HD Graphics 2000, OpenGL 3.1
======================================================================================================================
======================================================================================================================
======================================================================================================================
- Technical Debt:
+ Global damp as game parameter
+ Ships start from 1
+ Do #include "foo.glsl" at ShaderManager
+ After including redo
+ Detect loops with unordered_set<std::string>
+ Use for ship color and texture
+ Sound controller: complain if find extraneous files (had issue with ".flc"
+ Ship: replace handler registrations with points, springs, etc. with IShipPhysicsHandler, declared in own .h
- Change splash screen to wxSplashScreen
- GameEventDispatcher: set mIsXYZHandlerDirty at event publishing and consume at Flush()
+ Translations
+ Make localizable
+ SSL cert: https://www.sslforfree.com/
+ Sign with certificate (*)
+ https://blogs.msdn.microsoft.com/ieinternals/2011/03/22/everything-you-need-to-know-about-authenticode-code-signing/
+ https://www.thegeekstuff.com/2010/03/microsoft-digital-signatures/
+ Reasons:
- Anti-virus complains of saving
+ Buy certificate
+ https://www.leaderssl.nl/suppliers/sectigo/products/code_signing
+ Plan B:
+ https://comodosslstore.com/code-signing/microsoft-authenticode
+ https://comodosslstore.com/codesigning.aspx
+ Print receipt and store in Taxes
+ Sign exe
+ Sign MSI
+ https://stackoverflow.com/questions/17589754/wix-installer-msi-publisher-unknown/17591603
= Wine:
+ Test checking for the APPLE extension for VAO's: https://developer.apple.com/opengl/OpenGL-Capabilities-Tables.pdf
+ "APPLE_vertex_array_object"
+ Give SamminAter another RelWithDebInfo + pdb
- Other issues:
- No fullscreen mode
- Crash (with Wine stable version 5.0)
Backtrace:
=>0 0x0000000000237742 EntryPoint+0xf96a() in sfml-system-2 (0x000000000f0bffd0)
1 0x000000000022e526 EntryPoint+0x674d() in sfml-system-2 (0x000000000f0bffd0)
2 0x000000007bc91c13 call_thread_func+0xd2() in ntdll (0x000000000f0bffd0)
+ Build DevIL as a static lib (*)
+ Redo zlib and libpng SDKs
- Upgrade wxWidgets (3.2.0):
= x64 SDK
+ Build wxWidgets
- Test FS against it
- Settings window
- Ship load window
- ShipBuilder
- Credits
- Switchboard
- 32 SDK
- Build wxWidgets
- Test FS against it
- Settings window
- Ship load window
- ShipBuilder
- Credits
- Switchboard
- Changelist, readme.md
- See if may upgrade SFML to master (~2.6) with OPUS support
- Then make all music OPUS
- Looped sounds (engines, bells, horns, etc.): make them OGG with built-in loop points (see https://rpgmaker.net/tutorials/1341/)
- Redo SetEventRecorder dynamics between GameController/World/Ship
- Also GameController::Reset() should clear all events
- To further improve parallelism at Ship::Update, could allow threads to publish events by having EventDispatcher allow multiple threads to store* event
- No locks needed on read and clean, as it's done after Update has finished
- Known issues (bugs):
- After many many hours, rain looks aweful - very likely due to timer values being high
- Storm: store timestamp of rain start, and pass (now-start)::to_float() to shader
- After many hours, zoom stutters
- Can test both with faking RealTimeClock start time?
- Solutions for long-running clock: https://randomascii.wordpress.com/2012/02/13/dont-store-that-in-a-float/
- Rain solution:
- Zoom solution: ParameterSmoother: various timestamp members become time_point (rather than float's)
- Might have same issue with various tools
- TODO: is it really worth fixing this?
- FIX: background flames carry backdrop with them
! Was like this also before
! Because background flames are drawn *before* triangles, hence Z depth makes them carry sky
! They are drawn *before* triangles because ropes *are* before triangles (order is: rope, BG flame, triangle)
! Happens when rope/particle has planeID > background ship; this is what we draw then:
! Ropes:
- plane 0 (irrelevant)
- plane 1 (piece)
! BG flame:
- plane 0 (irrelevant)
- plane 1 (piece of rope) -- here background is still sky
! Triangle:
- plane 0 -- depth is < BG flames on plane 1 and hence they lose depth test when drawn above BG flames plane 1
- Attempt 1: BG flames shader has higher threshold for alpha-discard
- Windows 11 issue: try to play with vsync
- https://stackoverflow.com/questions/589064/how-to-enable-vertical-sync-in-opengl
! IS IT GONE BY NOW?
- Simulation Optimizations:
= Computer calibration
+ Executed by GameController
+ After RenderingContext initialized (for OpenGL capabilities)
+ OpenGL: based off capabilities
+ CPU: based off loops
+ Ask testers for help
- DKuz: i7-9750H, (12 HW threads), 2.60 GHz, Intel(R) UHD Graphics 630, FPS 64 | CPU Calibration: iterationCount=124 score=1; Graphics Calibration: score=1
- Oxurus: i5-6400 (4 HW threads), 2.70 GHz, NVIDIA GeForce GTX 960/PCIe/SSE2, FPS 55-57 | CPU Calibration: iterationCount=96 score=0.995328; Graphics Calibration: score=1
- DioxCode: i7-870 (8 HW threads), 2.93 GHz, NVIDIA GeForce GTX 1650/PCIe/SSE2, FPS 60 | CPU Calibration: iterationCount=89 score=0.966362; Graphics Calibration: score=1
- Bad upload perf?
- m2: i7-4790k (8 HW threads), 4 GHz, NVIDIA GeForce GTX 960, FPS 58 | CPU Calibration: iterationCount=114 score=1; Graphics Calibration: score=1
- Joadix's brother: AMD A6 3400M with Ryzen HD 6520G
- Old Dell: Celeron 900 (1 HW threads), 2.2 GHz, Mobile Intel 4 Series Express Chipset Family, FPS 29.5 | CPU Calibration: iterationCount=54 score=0.559872; Graphics Calibration: score=0.0429688
= Produces CalibrationScore and calibrates
= ComputerCalibrator::TuneParameters(CalibrationScore const &, GameParameters &, RenderContext &)
- Sets GameParameters and RenderContext's parameters
- Max # burning particles
- Max #Explosions
+ Happens before SettingsManager samples defaults, so these are the new defaults
+ Verify this is indeed the case
- See if additional springs (e.g. between i and i+2) help
= Cached spring lengths (*)
! Spring lengths are reused between water update and heat update, and don't change again
- Cache quantities in Update loop that comes first or last
- Make it clear that the Update function calculates them: TBD in name
- Alternatively, use lambda
- Verify with assembly that there's no overhead with empty lambda
- Alternatively use Algorithms::CalculateSpringDirAndReciprocalLengths
- Cache spring length, spring dir
+ Valid as long as points don't move
+ In DEBUG, mark mPoints.mDiagnostic_ArePositionsDirty on each position change, and expose mPoints.Diagnostic_ClearDirtyPositions() which is
invoked after Springs' cached lengths are re-calculated
+ Force position changes to go through setters
+ Except for buffered ones, follow these manually and invoke mPoints.Diagnostic_MarkPositionsAsDirty()
+ Verify assembly for SetPosition(GetPosition.x, GetPosition.y + foo)
- Used by: water update, heat update, Springs::UpdateStrains
- Also use instead of factory rest lengths at:
- Water
- Heat
- Investigate Gauss-Seidel from SpringLab
- It has better stiffness (bending large model: 180 vs. 108)
- It can *not* be parallelized (easily), need to find a way to parallelize
- Needs spring reduction coeff = 0.468750 to be stable
= GPUCalc:
+ 1: Simple OpenGLContext
+ 2: Multiple OpenGLContextes
+ 3: Integrate ShaderManager
+ 4: Run fragment shader to fill-in with frag coords
+ 5: RenderBuffer
+ 6: Read pixels back
+ Nail down clamping
+ Nail down viewport dimensions/renderbuffer dimensions
+ Fragment shader runs according to window sizes
+ Try glViewport to set dimensions (40x40)
+ 7: Make OpenGL initialization once per thread, after first context creation
+ Test first at FloatingSandbox: do init at MainFrame after context creation
+ Export required OpenGL version from GameOpenGL
+ If ok, move ctx creation et al at postinitialize trigger
+ Test openGL failure
+ Cleanup comments (3.3.) and TODOTEST's
+ Do also at GPUCalcText, also at MainFrame after a first dummy context creation
+ Commit
+ MainFrame:
+ Move OpenGL initialization at cctor, rethrow, and catch at MainApp
+ Test failure
+ Same identical at GPUCalcTest
+ Commit
+ Fix shaders: 120
+ Test with FloatingSandbox
+ Send to guy
+ Commit after confirmation
+ 8: Redo Glad with 2.0 profile, and manual ARB's and EXT's for:
+ Framebuffer
+ Instanced Drawing
+ VAOs
+ Texture Float
+ Restructure:
+ Each feature is a "min"
+ Merge GladLib into GameOpenGLLib
+ g_glad.h stays
+ GameOpenGL_Ext stays
+ h:
+ global vars with API and enumerants
+ validate all enumerants the same across core/arb/ext
+ .cpp:
+ Various Init():
+ Load only one set based off version/ext, with LoadAndVerify
+ LoadAndVerify
+ Build all and commit and push
+ 9: Restructure GPUCalcTest
+ Log window, clear button
+ RichText: green/red for TEST_PASS: .../TEST_FAIL: ...
+ Testcase class:
+ .h:
+ Macros that call "this"->OnFail(__LINE__....)
+ void Run() final;
+ Inits state
+ Logs start/end
+ global pass/fail state
+ virtual void InternalRun() = 0;
+ Button for "Init OpenGL"
+ Clears log first
+ Own test
+ Buttons for tests, button for "All tests"
+ Each button clears log first
+ Tests:
+ (all tests create own calculator)
+ PixelCoords
+ Commit
+ 9b: GPUCalcTest: independent from DevIL
+ Verify GameCore and GameOpenGL are independent from DevIL
+ ResourceLoader back to GameLib
+ ShaderMgr takes absolute folder path
+ CMake adjustments to not need DevIL
+ Commit
= 10: Sum test:
+ RenderBuffer and textures all have same dimensions
+ FrameSize this time is calc'd based off min of the three limits
+ Fragment shader gets texture coords from vertex shader
+ Interpolation is fine
+ Cleanup:
+ See if need to replace ShaderMgr::SetTextureParams with new one
+ Commit & push
- Compare perf with normal sum
- Other tests:
- Sum w/calculator reused twice
- Sum size1 and Sum size2 (2 calculators), one after the other
- Verify viewport is per-context
+ x: Verify works with hidden wxFrame, and verify frame is not visible, neither on the taskbar
- x: Test on two other laptops
- Cleanup:
- Set endianness same as platform (x86)
- See how to force texture sizes to be POT
- Follow-up's:
- Optimize ReadPixels
- Use correct format: query for GL_READ_PIXELS_FORMAT, GL_READ_PIXELS_TYPE
- See https://www.khronos.org/opengl/wiki/Image_Format
- Consider using pixel buffer objects to asynchronously read from render buffer
- See https://stackoverflow.com/questions/12157646/how-to-render-offscreen-on-opengl
- Array merging:
+ Springs: RestLength with Coefficients
+ Pre: 31.7 32.03 31.5 31.6
+ Post: 31.5 31.7 31.4 31.6
* With pad:
+ Pre: 31.1 31.5 31.6 31.7 32.0
+ Post: 31.3 31.38 31.3 31.3 31.9
- Points: Position with Velocity and Force
- Affects Integrate and Rendering
- UpdateWaterDynamics:
- Test turning it around into (multiple) spring visits, rather than point visits
- Multiple because of need to normalize outgoing for each point
- Gfx optimizations:
- Temperature buffer is currently uploaded separately; now that we've made it "mainstream", see if it makes more sense
to upload it together with the other frequently-changing fields (i.e. water, light)
- Pre: UPL=0.05ms
- OceanFloor doesn't need to be uploaded at each step
- However, vertex buffers rely on inputs such as view model, so when these change, we'd need to trigger a re-upload from OceanFloor itself
- So, best solution would be to make VertexBuffer independent from these extra parameters
- Reduce number of VAO changes by incorporating multiple VBOs into one, with element size as large as largest (union of structs)
- Each element type though retains its own BoundedVector, which is uploaded as-needed into larger VBO
- See impact of drawing onto texture and then quad'ing the texture onto the screen (w/no filtering) (*)
- If fine:
- Do stars once and for all
- Spec gfx niceties such as reflections and after-effects/post-processing
- Lights improvement options (*)
- "Static light":
- Pixels that are sources of light should be rendered as constant yellow, without ambient light effect
- How to do without triangle interpolation?
- Lights' glows as textures:
- Shader adapts the texture to the varying light parameters
- Then a quad is drawn for each source of light, with size depending on aperture
- TODO: z-depth issue? Lights will be drawn _after_ ship parts
- Try to just draw textures at their Z, with Z test enabled
- Need to be drawn *last* as they are transparent
- Lights on the GPU with instanced drawing
- Light at fragment (Phong)
- Lamp coords, spread, and luminiscence in uniform array
- Loop drawing ship as many times as necessary to avoid going beyond uniform limit of the GPU
- Figure out max at OpenGLInit
- Test 1: simply instance TrianglesTexture
- Test 2: also instance others
- Test on Dell
- Check proposed luminiscence settings (from @Carter_JL on GameJolt)
- Luminiscence Adjust: 0.5
- Light Spread Adjust: 0.5
- Air bubbles with instanced drawing (even though we can only do ~100 at a time, but then might do nBubbles/100 vertices)
- Try using GL_SHORT for Ship texture coordinates
- Passing NORMALIZE and 3 components to glVertexAttribPointer
- Gfx:
- Auto-focus improvements:
- Settings to fine-tune how close (or far) auto-focus should be
- Basically changes NDC fraction/s
- Tensile/Stress display:
- Show water (@ point buffer)
- New variant: only color springs (but in "normal" mode)
- In Windows' "high contrast mode", the names of the ships in the Ship Load Dialog disappear
- Flames: make sampling resolution independent from dimensions
- Need to pass width and height of flame quad, and divide texture coords by these
- Intro screen: the game's title falling into the sea and floating back up - interactive to a smaller extent, e.g.
by just punching holes
- Background ships: just any of the other ships, that would sail in the background
- Fog
- Requires post-processing work
- Different backgrounds: use keys to switch between a dock, cliffs, open ocean, ice field, etc.
- Sky:
- Add SkyRenderMode (Flat, Gradient)
- The two endpoints of gradient dependent on ambient light
- Interpolated between two pairs of endpoints
- RenderContext:
- If Flat:
- When clearing buffers, clear also color buffer with flat color
- If Gradient:
- When clearing buffers, do not clear color buffer
- Run program with quad immediately afterwards
- Shader
- No orthomatrix, all NDC
- No ambient light param, no new params
- SettingsDialog:
- Gradient RadioButton: on the right has two rows with a gradient each
- Night sky should use a round darkening - center of screen is slightly lighter
- Or even better, Milky Way
- Electrical view (*):
- Spec:
- New flag (not in ShipRenderMode, standalone ~like StressedSprings)
- Settable at SettingsDialog
- Ideally, enabled only if there are electrical elements, but how to figure it out?
- When enabled, draws "Connections" (lines - using ship endpoints) and "Devices" (points - using ship endpoints)
on top of ship
- One new layer after tri's, springs, and ropes
- Connection, w/bool isPowered
- Powered: 1D texture, animated (w/clock->offset), red
- !Powered: 1D texture, still, grey matte
- Both textures are segments in same texture
- Device: shader with concentric expanding and/or contracting circles and different colors
- Impl: