annotate doc/docs/dev/faq.md @ 245:97f55f6b9593

doc: add CMake macros documentation
author David Demelier <markand@malikania.fr>
date Mon, 30 Nov 2020 10:54:59 +0100
parents d47e70da760e
children 19782ea1cf4a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
239
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 # FAQ
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
2
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 Frequently asked questions about the development.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
4
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 ## Why not creating a game engine?
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
6
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 Game engines are usually too generic, too complex and do too much things. Lots
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 of them also use scripting language which require another learning curve to be
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 used.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
10
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 Molko's Adventure is a solo tactical 2D RPG and its core is especially designed
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 for that gameplay. Thus the code stay simple to understand and to follow.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 Coupling a general purpose game engine with a game design is sometimes more
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 complicated than writing small code.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
15
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 However, game engines are still interesting for people who already know how to
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 use them and feel confident with them.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
19 ## Why no prefix like "ma_" or "MA_"?
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
20
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
21 See also question above.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
22
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
23 The purpose of Molko's Adventure is not to provide a drop-in reusable library
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
24 to create RPG games. It is highly coupled with the gameplay of the original
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
25 game. Thus we wanted to keep the codebase extremely simple and minimalist
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
26 without adding bunch of generics.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
27
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
28 The core API isn't meant to be installed system wide (possible, but not
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
29 recommended), instead users are encouraged to copy the core code and to adapt
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
30 to their gameplay.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
31
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
32 A simple example: if someone wants to create a game and would like to allow
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
33 only three playable entities at a time, it should simply edit appropriates
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
34 structures and everything is adapted. Then, structures and array can stay
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
35 static without dynamic allocations.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
36
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
37 Also, having a large amount of different data types, this would generate very
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
38 large function and type names.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
39
245
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
40 But if there is a high demand of having a proper independant library, it may
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
41 change in the future.
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
42
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
43 ## Why C?
239
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
44
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
45 C is an awesome language. It still has its place in the industry especially in
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
46 low-level, kernel and game design.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
47
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
48 Games are usually designed without OO in mind using simple procedural codes and
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
49 lots of data. In C, writing code makes easier to understand what's happening
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
50 under the hood without having to check if functions will generate dynamic
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
51 allocations or not.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
52
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
53 However, we also love modernity and as such, C11 is the minimal requirement to
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
54 build and run Molko's Adventure.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
55
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
56 ## Can I make a MMORPG with that?
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
57
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
58 Not easily.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
59
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
60 This core API is really tied to a unique solo RPG adventure and therefore it
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
61 does not separate logic from rendering.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
62
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
63 Also, note that creating a server-client game is really different in terms of
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
64 architecture than a local solo game. Most of the logic part is done server side
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
65 and requires much more code to analyze to avoid cheats, lag, synchronisation and
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
66 many other stuff than a local game does not require.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
67
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
68 There are no plans to create a network oriented core API anytime soon.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
245
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
70 ## What are these strange symbols `(+-*&?)` in member fields?
239
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
71
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
72 It's a custom notation to indicate ownership and user access.
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
73
d47e70da760e doc: switch to mkdocs+doxybook2, closes #2516 @2h
David Demelier <markand@malikania.fr>
parents:
diff changeset
74 See [ownership](ownership.md) file for more information.
245
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
75
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
76 ## Why not using RPG Maker instead?
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
77
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
78 RPG Maker is an indeed great piece of software, in fact it's even the original
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
79 source of inspiration for writing Molko's Adventure.
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
80
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
81 However RPG Maker (in every versions) suffer from:
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
82
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
83 - Not opensource. RPG Maker is proprietary while Molko's Adventure is licensed
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
84 under the very liberal [ISC][] license.
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
85 - Per cell movements while Molko's Adventure provides per pixel granularity.
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
86 This provides more interesting gameplay especially in dungeons.
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
87 - Flexibility. Even though some RPG Maker variants provide Ruby programming,
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
88 it's still based on GUI to design the game making less possibilities. Molko's
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
89 Adventure API is a pure C library where you can do mostly what you want.
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
90
97f55f6b9593 doc: add CMake macros documentation
David Demelier <markand@malikania.fr>
parents: 239
diff changeset
91 [ISC]: https://opensource.org/licenses/ISC