Skip to content
Snippets Groups Projects
Verified Commit dd21844e authored by Lars Frost's avatar Lars Frost
Browse files

Minor text improvements

parent c3a5cd5a
No related branches found
No related tags found
No related merge requests found
<svg height="1024" width="1024" xmlns="http://www.w3.org/2000/svg"><path d="m0 0s-.325 1.994-.515 1.976l-36.182-3.491c-2.879-.278-5.115-2.574-5.317-5.459l-.994-14.247L-71-23.218l-1.904 12.912c-.424 2.872-2.932 5.037-5.835 5.037h-38.188c-2.902.0-5.41-2.165-5.834-5.037l-1.905-12.912-27.992 1.997-.994 14.247c-.202 2.886-2.438 5.182-5.317 5.46l-36.2 3.49c-.187.018-.324-1.978-.511-1.978l-.049-7.83 30.658-4.944 1.004-14.374c.203-2.91 2.551-5.263 5.463-5.472l38.551-2.75c.146-.01.29-.016.434-.016 2.897.0 5.401 2.166 5.825 5.038l1.959 13.286h28.005l1.959-13.286c.423-2.871 2.93-5.037 5.831-5.037.142.0.284.005.423.015l38.556 2.75c2.911.209 5.26 2.562 5.463 5.472l1.003 14.374 30.645 4.966z" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 919.24059 673.152141)"/><path d="m0 0v-47.514-6.035-5.492c.108-.001.216-.005.323-.015l36.196-3.49c1.896-.183 3.382-1.709 3.514-3.609l1.116-15.978 31.574-2.253 2.175 14.747c.282 1.912 1.922 3.329 3.856 3.329h38.188c1.933.0 3.573-1.417 3.855-3.329l2.175-14.747 31.575 2.253 1.115 15.978c.133 1.9 1.618 3.425 3.514 3.609l36.182 3.49c.107.01.214.014.322.015v4.711l.015.005v54.325c5.09692 6.4164715 9.92323 13.494208 13.621 19.449-5.651 9.62-12.575 18.217-19.976 26.182-6.864-3.455-13.531-7.369-19.828-11.534-3.151 3.132-6.7 5.694-10.186 8.372-3.425 2.751-7.285 4.768-10.946 7.118 1.09 8.117 1.629 16.108 1.846 24.448-9.446 4.754-19.519 7.906-29.708 10.17-4.068-6.837-7.788-14.241-11.028-21.479-3.842.642-7.702.88-11.567.926v.006c-.027.0-.052-.006-.075-.006-.024.0-.049.006-.073.006v-.006c-3.872-.046-7.729-.284-11.572-.926-3.238 7.238-6.956 14.642-11.03 21.479-10.184-2.264-20.258-5.416-29.703-10.17.216-8.34.755-16.331 1.848-24.448-3.668-2.35-7.523-4.367-10.949-7.118-3.481-2.678-7.036-5.24-10.188-8.372-6.297 4.165-12.962 8.079-19.828 11.534-7.401-7.965-14.321-16.562-19.974-26.182 4.4426579-6.973692 9.2079702-13.9828876 13.621-19.449z" fill="#478cbf" transform="matrix(4.162611 0 0 -4.162611 104.69892 427.387251)"/><path d="m0 0-1.121-16.063c-.135-1.936-1.675-3.477-3.611-3.616l-38.555-2.751c-.094-.007-.188-.01-.281-.01-1.916.0-3.569 1.406-3.852 3.33l-2.211 14.994H-81.09l-2.211-14.994c-.297-2.018-2.101-3.469-4.133-3.32l-38.555 2.751c-1.936.139-3.476 1.68-3.611 3.616L-130.721.0l-32.547 3.138c.015-3.498.06-7.33.06-8.093.0-34.374 43.605-50.896 97.781-51.086h.066.067c54.176.19 97.766 16.712 97.766 51.086.0.777.047 4.593.063 8.093z" fill="#478cbf" transform="matrix(4.162611 0 0 -4.162611 784.07144 718.723121)"/><path d="m0 0c0-12.052-9.765-21.815-21.813-21.815-12.042.0-21.81 9.763-21.81 21.815.0 12.044 9.768 21.802 21.81 21.802C-9.765 21.802.0 12.044.0.0" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 389.21484 527.151321)"/><path d="m0 0c0-7.994-6.479-14.473-14.479-14.473-7.996.0-14.479 6.479-14.479 14.473s6.483 14.479 14.479 14.479C-6.479 14.479.0 7.994.0.0" fill="#414042" transform="matrix(4.162611 0 0 -4.162611 367.36686 532.537071)"/><path d="m0 0c-3.878.0-7.021 2.858-7.021 6.381v20.081c0 3.52 3.143 6.381 7.021 6.381s7.028-2.861 7.028-6.381V6.381c0-3.523-3.15-6.381-7.028-6.381" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 511.99336 626.219821)"/><path d="m0 0c0-12.052 9.765-21.815 21.815-21.815 12.041.0 21.808 9.763 21.808 21.815.0 12.044-9.767 21.802-21.808 21.802-12.05.0-21.815-9.758-21.815-21.802" fill="#fff" transform="matrix(4.162611 0 0 -4.162611 634.78706 527.151321)"/><path d="m0 0c0-7.994 6.477-14.473 14.471-14.473C22.473-14.473 28.95-7.994 28.95.0s-6.477 14.479-14.479 14.479C6.477 14.479.0 7.994.0.0" fill="#414042" transform="matrix(4.162611 0 0 -4.162611 656.64056 532.537071)"/></svg>
\ No newline at end of file
...@@ -23,18 +23,18 @@ ...@@ -23,18 +23,18 @@
- During the presentation, you will show the games on your own devices. You shall further upload a compiled version, that is distributed to all participants. - During the presentation, you will show the games on your own devices. You shall further upload a compiled version, that is distributed to all participants.
= Technical Requirements = Technical Requirements
- The game has to support either Windows (10+) or Ubuntu (24.04). If possible (your engine supports this, and you used no OS-specific APIs), you shall submit versions for Windows, MacOS, and GNU/Linux. - The game has to support either Windows (10+) or Ubuntu (24.04). If possible (your engine supports this, and you used no OS-specific APIs), you shall submit versions for Windows, MacOS, and Linux.
- If your game is intended for gamepads, it must also be possible to play one user with keyboard and mouse. - If your game is intended for gamepads, it must also be possible to play one player with keyboard and mouse.
- There will be repositories in the RWTH Gitlab. You also submit your final version there. - There will be repositories in the RWTH Gitlab. There you submit your final version.
- We do not mandate a specific engine, though we do recommend to use Godot or Unity. We also recommend you to get familiar with the engine you would like to use beforehand. - We do not mandate a specific engine, though we do recommend to use Godot or Unity. We also recommend that you get familiar with the engine, you would like to use, before the jam starts.
- You may only use assets and libraries that are available free of charge, and only if the license permits you and us to distribute your unmodified binaries to the other participants. To keep track of the licensing, we recommend creating a list of all used assets, including assets that don't require attribution. - You may only use assets and libraries that are available free of charge, and only if the license permits you and us to distribute your unmodified binaries to the other participants. To keep track of the licensing, we recommend creating a list of all used assets and their source, including assets that don't require attribution.
= Introduction: How to develop games? = Introduction: How to develop games?
== What do I need for a game? == What do I need for a game?
To create a game several components are usually needed: To create a game several components are usually needed:
*Graphics*#h(1em) *2D Graphics*#h(1em)
To show something in the game, you will need graphical assets. To show something in the game, you will need graphical assets.
In 2D games, the graphics consist of 2D UI Overlay elements like the menu, buttons, or the score. In 2D games, the graphics consist of 2D UI Overlay elements like the menu, buttons, or the score.
The rest of the game graphics are also 2D images and are usually called _sprites_. The rest of the game graphics are also 2D images and are usually called _sprites_.
...@@ -45,6 +45,7 @@ Animations are done by having different variants of an object and cycling throug ...@@ -45,6 +45,7 @@ Animations are done by having different variants of an object and cycling throug
Example character sprites with walk animations from #link("https://opengameart.org/content/top-down-pokemon-esque-sprites")[Corey Archer] Example character sprites with walk animations from #link("https://opengameart.org/content/top-down-pokemon-esque-sprites")[Corey Archer]
]) ])
*3D Graphics*#h(1em)
In 3D games, the UI overlay is done the same way as in 2D games, but the 3D world is more complicated. In 3D games, the UI overlay is done the same way as in 2D games, but the 3D world is more complicated.
#figure(image("images/0AD_example_colored.png"), caption: [ #figure(image("images/0AD_example_colored.png"), caption: [
A screenshot from #link("https://play0ad.com/media/screenshots/")[0.A.D.]. The 2D UI Overlay is marked green. Buildings, People, Animals, Ground, Trees, and everything else are 3D models. A screenshot from #link("https://play0ad.com/media/screenshots/")[0.A.D.]. The 2D UI Overlay is marked green. Buildings, People, Animals, Ground, Trees, and everything else are 3D models.
...@@ -70,9 +71,9 @@ which heavily restricts how complex graphics can be. ...@@ -70,9 +71,9 @@ which heavily restricts how complex graphics can be.
For unanimated objects, this is sufficient. For unanimated objects, this is sufficient.
For animated objects we need some more components. For animated objects we need some more components.
First, we add bones to the model. First, we add bones to the model (this process is called _rigging_).
Then we say for each combination of bone and vertex, Then we say for each combination of bone and vertex,
how much a change in the bone position should influence the position of that vertex (this process is called skinning). how much a change in the bone position should influence the position of that vertex (this process is called _skinning_).
Then for each point and each keyframe, we say what position the bone is in that frame. Then for each point and each keyframe, we say what position the bone is in that frame.
This way of animation is called _skeletal animation_. This way of animation is called _skeletal animation_.
If the relative position between bones is fixed, the connection is called a _joint_. If the relative position between bones is fixed, the connection is called a _joint_.
......
...@@ -3,13 +3,16 @@ ...@@ -3,13 +3,16 @@
#pagebreak() #pagebreak()
= How to Godot = How to Godot
#let wrapleft = [
#link("https://godotengine.org/features/")[Godot] is an open-source game engine under the MIT license. #link("https://godotengine.org/features/")[Godot] is an open-source game engine under the MIT license.
It uses an object-oriented programming model and has its own scripting language #link("https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/index.html")[GDScript] with optional typing and python-like syntax. It uses an object-oriented programming model and has its own scripting language #link("https://docs.godotengine.org/en/stable/tutorials/scripting/gdscript/index.html")[GDScript] with optional typing and python-like syntax.
It also supports #link("https://docs.godotengine.org/en/stable/tutorials/scripting/c_sharp/index.html")[C\#/.NET] It also supports #link("https://docs.godotengine.org/en/stable/tutorials/scripting/c_sharp/index.html")[C\#/.NET]
and has native bindings called GDExtensions for C and C++. and has native bindings called GDExtensions for C and C++.
There are also several community-maintained language bindings like #link("https://github.com/utopia-rise/godot-kotlin-jvm")[Kotlin] There are also several community-maintained language bindings like #link("https://github.com/utopia-rise/godot-kotlin-jvm")[Kotlin]
or #link("https://github.com/Geequlim/ECMAScript")[JavaScript/TypeScript] with a modified base engine or #link("https://docs.godotengine.org/en/stable/tutorials/scripting/gdextension/what_is_gdextension.html#supported-languages")[Rust, Go, and Swift] for GDExtensions. or #link("https://github.com/Geequlim/ECMAScript")[JavaScript/TypeScript] with a modified base engine or #link("https://docs.godotengine.org/en/stable/tutorials/scripting/gdextension/what_is_gdextension.html#supported-languages")[Rust, Go, and Swift] for GDExtensions.
However, I advise to use GDScript or C\# as they have the best support, have a programming model fitting the engine, and are mainted by the Godot project itself. However, I advise to use GDScript or C\# as they have the best support, and have a programming model fitting the engine.
]
#wrap-content(image("/images/godot/icon.svg", width: 4em), wrapleft)
Some general hints for Godot: Some general hints for Godot:
- All fields accepting numbers also accept math expressions like `sqrt(2) - 1`. - All fields accepting numbers also accept math expressions like `sqrt(2) - 1`.
......
...@@ -11,8 +11,13 @@ and that is used in all Unity documentation. ...@@ -11,8 +11,13 @@ and that is used in all Unity documentation.
T obtain Unity, use #link("https://docs.unity3d.com/hub/manual/InstallHub.html")[UnityHub]. T obtain Unity, use #link("https://docs.unity3d.com/hub/manual/InstallHub.html")[UnityHub].
You will also need to #link("https://unity.com/products")[register as student or personal user]. You will also need to #link("https://unity.com/products")[register as student or personal user].
Using Git with Unity is generally a nightmare, because Unity uses UUIDs in its files, making them difficult to read,
and randomly changes some fractional digits when different systems load a file and save it unchanged.
Use #link("https://github.com/github/gitignore/blob/main/Unity.gitignore")[this gitignore as a starting point],
to get some control over the giant pile of files Unity will create.
== UI == UI
The GalacticKittens sample project still uses the old UI system. The GalacticKittens sample project referenced below still uses the old UI system.
It is simple to start with, but inflexible and unresponsive. It is simple to start with, but inflexible and unresponsive.
The new system #link("https://docs.unity3d.com/Manual/UIElements.html")[UI Toolkit] builds UIs from XML and CSS with #link("https://css-tricks.com/snippets/css/a-guide-to-flexbox/")[flexbox] for layouts. The new system #link("https://docs.unity3d.com/Manual/UIElements.html")[UI Toolkit] builds UIs from XML and CSS with #link("https://css-tricks.com/snippets/css/a-guide-to-flexbox/")[flexbox] for layouts.
...@@ -52,8 +57,8 @@ The new system #link("https://docs.unity3d.com/Manual/UIElements.html")[UI Toolk ...@@ -52,8 +57,8 @@ The new system #link("https://docs.unity3d.com/Manual/UIElements.html")[UI Toolk
} }
```, caption: [USS example]) ```, caption: [USS example])
== Music and sound effects // == Music and sound effects
See #link("https://github.com/UnityTechnologies/GalacticKittens/blob/main/Assets/Scripts/Managers/AudioManager.cs")[the AudioManager from the GalacticKittens sample game] for sound management under Unity. // See #link("https://github.com/UnityTechnologies/GalacticKittens/blob/main/Assets/Scripts/Managers/AudioManager.cs")[the AudioManager from the GalacticKittens sample game] for sound management under Unity.
== Input processing == Input processing
There are two input systems. There are two input systems.
...@@ -66,7 +71,7 @@ This works if you have only one input device per local game instance. ...@@ -66,7 +71,7 @@ This works if you have only one input device per local game instance.
However, it is unsuited if you want to allow a multiplayer mode by connecting multiple gamepads to the same PC. However, it is unsuited if you want to allow a multiplayer mode by connecting multiple gamepads to the same PC.
In that case you need the to handle InputEvents, that know what device triggered them. In that case you need the to handle InputEvents, that know what device triggered them.
The complex way is to register handlers for events in `UnityEngine.InputSystem.InputSystem`. The complex way, used in that case, is to register handlers for events in `UnityEngine.InputSystem.InputSystem`.
```cs ```cs
// on device connect or disconnect // on device connect or disconnect
void OnDeviceChange(InputDevice device, InputDeviceChange change); void OnDeviceChange(InputDevice device, InputDeviceChange change);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment