diff --git a/sites/sara.objectionable.solutions/assets/boids.mkv b/sites/sara.objectionable.solutions/assets/boids.mkv new file mode 100644 index 0000000..776db44 Binary files /dev/null and b/sites/sara.objectionable.solutions/assets/boids.mkv differ diff --git a/sites/sara.objectionable.solutions/assets/bottom-gear-stig-kart.mp4 b/sites/sara.objectionable.solutions/assets/bottom-gear-stig-kart.mp4 new file mode 100644 index 0000000..69153c1 Binary files /dev/null and b/sites/sara.objectionable.solutions/assets/bottom-gear-stig-kart.mp4 differ diff --git a/sites/sara.objectionable.solutions/assets/fencer-collisions.png b/sites/sara.objectionable.solutions/assets/fencer-collisions.png new file mode 100644 index 0000000..3c6838d Binary files /dev/null and b/sites/sara.objectionable.solutions/assets/fencer-collisions.png differ diff --git a/sites/sara.objectionable.solutions/assets/fencer.png b/sites/sara.objectionable.solutions/assets/fencer.png new file mode 100644 index 0000000..3636d6d Binary files /dev/null and b/sites/sara.objectionable.solutions/assets/fencer.png differ diff --git a/sites/sara.objectionable.solutions/assets/practice-shooter-cover.png b/sites/sara.objectionable.solutions/assets/practice-shooter-cover.png new file mode 100644 index 0000000..ce24202 Binary files /dev/null and b/sites/sara.objectionable.solutions/assets/practice-shooter-cover.png differ diff --git a/sites/sara.objectionable.solutions/assets/practice-shooter.mkv b/sites/sara.objectionable.solutions/assets/practice-shooter.mkv new file mode 100644 index 0000000..aac775b Binary files /dev/null and b/sites/sara.objectionable.solutions/assets/practice-shooter.mkv differ diff --git a/sites/sara.objectionable.solutions/assets/spirit-signal.mkv b/sites/sara.objectionable.solutions/assets/spirit-signal.mkv new file mode 100644 index 0000000..fec0c4e Binary files /dev/null and b/sites/sara.objectionable.solutions/assets/spirit-signal.mkv differ diff --git a/sites/sara.objectionable.solutions/assets/terrain-editor.mp4 b/sites/sara.objectionable.solutions/assets/terrain-editor.mp4 new file mode 100644 index 0000000..e66bed6 Binary files /dev/null and b/sites/sara.objectionable.solutions/assets/terrain-editor.mp4 differ diff --git a/sites/sara.objectionable.solutions/assets/terrain-editor.png b/sites/sara.objectionable.solutions/assets/terrain-editor.png new file mode 100644 index 0000000..aaff3c2 Binary files /dev/null and b/sites/sara.objectionable.solutions/assets/terrain-editor.png differ diff --git a/sites/sara.objectionable.solutions/assets/you-done-it-vr-start.png b/sites/sara.objectionable.solutions/assets/you-done-it-vr-start.png new file mode 100644 index 0000000..55a0a49 Binary files /dev/null and b/sites/sara.objectionable.solutions/assets/you-done-it-vr-start.png differ diff --git a/sites/sara.objectionable.solutions/index.html b/sites/sara.objectionable.solutions/index.html index 950c7b6..3b109d2 100644 --- a/sites/sara.objectionable.solutions/index.html +++ b/sites/sara.objectionable.solutions/index.html @@ -32,12 +32,15 @@
- My tool of choice is Godot engine modules, but I'm adept with a variety of libraries, engines, and frameworks. - Most of my experience is C++, both using STL and with engines like Unreal and Godot. - I get the most enjoyment out of writing player-facing gameplay systems and designer-facing tools and interfaces. - Which is to say, I like writing code that people get to interact with directly. + My tool of choice is Godot engine modules, but I'm adept with a variety of libraries, engines, and frameworks. + Most of my experience is C++, both using STL and with engines like Unreal and Godot. +
+ + I get the most enjoyment out of writing player-facing gameplay systems and designer-facing tools and interfaces. + Which is to say, I like writing code that people get to interact with directly. -you can email me at sara on this domain (objectionable dot solutions or saragerretsen dot nl)
+Contact:you can email me at sara on this domain (objectionable dot solutions or saragerretsen dot nl)
+Disclaimer: This website, the text, and all of my code are written by me, personally; I have not used LLMs or "AI" at any point.
godot
+c++ module
+solo
+tool
+C++ Tool Programmer
+C Programmer
- - -unreal engine
-team
-hlo
-C++ Programmer
- -diff --git a/sites/sara.objectionable.solutions/projects/boids.html b/sites/sara.objectionable.solutions/projects/boids.html index f54f1fb..26e43fc 100644 --- a/sites/sara.objectionable.solutions/projects/boids.html +++ b/sites/sara.objectionable.solutions/projects/boids.html @@ -23,10 +23,9 @@
My second implementation of a boids simulation. This time written in C using a combination of SDL2 for rendering and a self-made ecs library for object management. diff --git a/sites/sara.objectionable.solutions/projects/fencer-collision.html b/sites/sara.objectionable.solutions/projects/fencer-collision.html new file mode 100644 index 0000000..900ceb6 --- /dev/null +++ b/sites/sara.objectionable.solutions/projects/fencer-collision.html @@ -0,0 +1,79 @@ + + +
+
+ Project Type: SDL2 Toy Engine
+Project Timeframe: November 2023
++ The goal of the project was to build, from theory and whitepapers, a simple 2d physics engine that can be used to make games. Mainly as a practice project to teach myself the basics of how physics engines work. +
++ (Linked text directs to the relevant spot in + the code repository) +
++ The start of the project was building a 2-body arbitrary shape collision solver. For this I used the + Separating Axis Theorem, + as it is relatively simple to implement. +
++ With a working 2-body solver in hand, the next step was to implement an iterative multi-body solver. But this requires a lot more than a toy SAT implementation. So first I went and figured out world and object representations. +
++ Although I really like using C for quick toy examples, I had now reached the point at which I usually switch to C++, and in hindsight that would've probably been the better option. However, my recent explorations of Rust meant that I had learned of the joy of "Trait"-style polymorphism (most comparable to C++ interfaces). So I wanted to try using those in C. For this I found an approach to implementing typeclasses in C (the article for which isn't online anymore, but I explained my version over on + my blog). +
+
+ The requirements for any game object to be part of the physics world is that it has to at least implement
+ PhysicsEntity,
+ which in turn requires
+ Transformable
+ to be implemented. As solving collisions requires modifying the transform of the object.
+ In order to be rendered, and for the update function to be called, the object also has to implement
+ BehaviourEntity,
+ which exposes the object lifetime functions spawn, update, start, and draw. And itself requires
+ Drop
+ to be implemented. Drop being pretty much the best destructor implementation you can get in C without implementing a garbage collector.
+
+ With the world represented, the work on the collision solver could start. Objects that implement PhysicsEntity can then register themselves with the
+ physics world.
+ Once an object is registered to the physics world it will use the SAT to check for collisions, and finally, that comes to the multi-body iterative collision solver.
+
+
+ The iterative solver
+ is implemented in the static functions of the PhysicsEntity typeclass.
+
+ This all then comes together in something like the
+ Player
+ struct, which implements all these typeclasses and uses them to create a platformer character. Or the
+ Tilemap
+ object that can be loaded from LDTK levels to create a renderable physics entity that can be hit and interacted with by the player.
+
diff --git a/sites/sara.objectionable.solutions/projects/practice-shooter.html b/sites/sara.objectionable.solutions/projects/practice-shooter.html new file mode 100644 index 0000000..b6c2de4 --- /dev/null +++ b/sites/sara.objectionable.solutions/projects/practice-shooter.html @@ -0,0 +1,30 @@ + + +
+ + + + + +Project Type: Unity Toy Project
+Project Timeframe: 2023
++ A simple practice project, primarily focused on aesthetics and game feel. The goal was to experiment with animation and VFX to create satisfying combat encounters. +
+