Devblog 3
Ein gemütlicher Montagabend#
Hey Leute,
ich habe heute am NPC-Movement gearbeitet. Aktuell ist die Logik noch relativ simpel: Man erstellt PatrolNodes, und der NPC bewegt sich von Node zu Node, wartet dort eine definierte Zeit und geht anschließend weiter zum nächsten.
Pro Node lassen sich folgende Parameter festlegen:
- Wartezeit
- Idle-Animation
Das funktioniert grundsätzlich gut, ist jedoch für ein Open-World-Rollenspiel mit einer dynamischen Spielwelt nicht ausreichend.
Neues Systemkonzept#
Ich habe daher ein erweitertes System entworfen. Es besteht aus drei Ebenen:
- PatrolNodeGroups
- PatrolAreas
- PatrolNodes
PatrolNodeGroups#
Innerhalb einer PatrolNodeGroup können mehrere PatrolAreas definiert werden. Jede PatrolArea enthält wiederum die konkreten PatrolNodes für ein bestimmtes Gebiet.
Beispielhafte Hierarchie:
PatrolNodeGroup_1
- Area_NPC_HOME
- PatrolNode_Cook
- PatrolNode_WatchTV
- PatrolNode_DoRandomStuff
- Area_NPC_CITY
- PatrolNode_StayAtStreet
- PatrolNode_WorkAtSomething
- etc.
- Area_NPC_HOME
PatrolNodeGroup_2
- Area_NPC_HOME
- PatrolNode_Cook
- PatrolNode_WatchTV
- PatrolNode_DoRandomStuff
- Area_NPC_BEACH
- PatrolNode_SitOnBench
- PatrolNode_BuildASandCastle
- etc.
- Area_NPC_HOME
PatrolBehaviour#
Einer PatrolNodeGroup kann ein PatrolBehaviour zugewiesen werden.
Im PatrolBehaviour wird definiert:
- In welchen Monaten die Gruppe aktiv ist
- An welchen Wochentagen sie aktiv ist
Dadurch lassen sich Szenarien wie folgende abbilden:
- Von Montag bis Freitag geht der NPC täglich zur Arbeit, arbeitet dort und kehrt abends nach Hause zurück.
- Am Wochenende fährt er an den Strand und ruht sich aus.
Zusätzlich kann in der PatrolArea definiert werden, ab welcher Uhrzeit ein Wechsel in die nächste Area erlaubt ist.
Beispiel:
Der NPC bleibt bis 8:00 Uhr in seiner Wohnung und geht danach zur Arbeit.
Pathfinding#
Heute habe ich außerdem ein Pathfinding-System implementiert. Die Kernlogik steht bereits, ist jedoch noch nicht in die NPC-Klasse integriert.
Wichtig ist: Pathfinding soll nicht permanent aktiv sein. Es soll gezielt eingesetzt werden, um Performance-Kosten zu reduzieren – insbesondere bei vielen NPCs.
Geplante Einsatzfälle:
- Beim Wechsel der PatrolArea
- Wenn ein NPC stecken bleibt (z. B. durch Kollision mit einem anderen NPC)
- Optional für In-Game-Cutscenes (zukünftig relevant)
Der Hintergrund ist klar: Permanentes Pathfinding bei vielen NPCs kann signifikante Rechenleistung beanspruchen.
Natürlich bleibt offen, wie sich das in der Praxis verhält. Im Worst Case muss Pathfinding dauerhaft aktiv sein und nicht nur in definierten Ausnahmesituationen. Das wird sich im Playtesting zeigen.
Ich hoffe, ich konnte euch einen kleinen Einblick in meine aktuelle Entwicklung geben.
LG
Nflaus