Hier drin steckt Code, der nicht nur f<>r Eressea zu gebrauchen ist. Wann immer m<>glich, sollte man versuchen, Code hier unterzubringen. Code in diesem Verzeichnis verwendet config.h, aber unter keinen Umst<73>nden eressea.h oder anderen code aus src/common.
2. Beispiele:
attrib, event, base36, rand
src/common
1. Was ist hier drin?
Der Kern des Spiels. Funktionen, ohne die ein Eressea-Spiel nicht existieren kann. Zum Beispiel Kampfsystem, Magiesystem, item-typen (aber m<>glichst wenige items). Je allgemeiner gehalten der Code ist, desto weniger mu<6D> in common, desto mehr kann in "pluggable" Modulen untergebracht werden.
Bei Code im Kern des Spiels sollte man beachten, das eine Abfrage auf einen konkreten item-typ immer zu einer Abh<62>ngigkeit mit Code f<>hrt, der eigentlich nicht dem Kern zuzurechnen ist. Wenn im Kampf z.B. eine Spezialwaffe erfragt wird, dann kann man kein Eressea-Spiel erzeugen, ohne diese Waffe mit zu linken, selbst wenn man sie nicht benutzt. Besser ist es in diesem Fall, wiederverwendbare attribute oder itemtype-flags zu benutzen. Analog gilt das f<>r alle anderen typen: rassen, geb<65>ude, schiffe, Regionstypen, Zauber.
2. Beispiele:
battle, economy, magic (vormals newmagic), item (allerdings ohne konkret items zu enthalten), build, building, ship
src/common/gamecode
1. Was ist hier drin?
Code, der nur die Auswertung und den Ablauf betrifft, aber keine statischen Tools wie z.B. den Mapper.
2. Beispiele:
Hier ist die <20>konomie drin, Zufallsereignisse, Reportgenerierung.
src/common/modules
1. Was ist hier drin?
"Pluggable" Module, wie Questen, Spezial-Planes, Events. Alles, was dem Spiel Leben einhaucht, ohne im Kern verankert zu sein.
2. Beispiele:
arena, xmas2000, museum, score (?).
3. Style
Ein Modul sollte aus main.c heraus initialisiert werden k<>nnen. Ideal ist, wenn ein Aufruf von init_<module>() gen<65>gt, um es zu aktivieren. Das sorgt z.B. beim Weihnachtsmann-Modul f<>r die Erzeugung der Plane und der Units, der Registrierung der n<>tigen Items und Attribute, und mehr mu<6D> nicht getan werden.
Darf keine Funktionen aus gamecode() benutzen, oder sollte selber im gamecode landen.