Trace: » gaijin08.html

[hemmerling] Computer Games by "Gaijin" 8/9 - A simple MultiPlayer PvP Custom Battle"

Starting Point

1 File Setup

1.1 CSV File "usr_wake_island_cdk_tutorial_mp_mission.csv"

  • Create the file in UTF-8 format. I suggest to use the free OpenSource editor Notepad++ for Windows. Don't use Windows own editors Notepad and WordPad!
"<ID|readonly|noverify>";"<English>";"<German>";<Comments>;<max_chars>
"cdk_tutorial_mission_takeoff";"Take off and follow the attack group leader";"Abheben und dem Anführer der Angriffsgruppe folgen";
"cdk_tutorial_mission_destroy_bombers";"Destroy enemy bombers";"Zerstöre die feindlichen Bomber";
"cdk_tutorial_mission_return";"Return to the base";"Kehre zur Basis zurück";
"missions/wake_island_cdk_tutorial_mp_mission";"Will not be displayed";"Wird nicht angezeigt";
"missions/wake_island_cdk_tutorial_mp_mission/objective";"Build your first mission";"Erstelle Deine erste Mission";
"missions/wake_island_cdk_tutorial_mp_mission/date";"2023-04-18";"2023-04-18";

1.2 BLK File "wake_island_cdk_tutorial_mp_mission.blk"

  • Modify the location and mission name:
    locName:t="Wake Island, Air Battle ( Multiplayer PvP Mission )"
    name:t="wake_island_cdk_tutorial_mp_mission"

2 Setup of the Multiplayer Basics

1 Modifications of the Singleplayer Mission

1.1 Player's Name

  1. Change the player name “player” to “t1_player01”, by a text editor, i.e. not with the “Dagor Editor”.
    wing:t="t1_player01"
    objects:t="t1_player01"
    name:t="t1_player01"
    
  2. Create a copy of “t1_player01” and name it “t1_player02”.
  3. Add “t1_player02” to “player_teamA”.

1.2 Mission Settings

  1. Press the keys “SHIFT+P” to open the mission property window “Properties”.
  2. In the mission property window “Properties”, click on ”+Mission Settings”.
  3. Click on “mission”.
  4. Set “type” from “singleMission” to “event”. By this, the mission is not listed anymore under “User Missions”.

1.3 Make allied Ground Forces visible

  1. In the “Trigger / Mission Obj. Info” window, press the button “Action” and select the action “unitSetStealth”.
    • Set the checkbox ”[x] Disable”” enabled.

1.4 Trigger "take_off_done": Change the Conditions Type from "ALL" to "ANY"

  1. Press the keys “SHIFT+P” to open the mission property window “Properties”.
  2. In the mission property window “Properties”, select the trigger “take_off_done”.
  3. Set “conditionsType” from “ALL” to “ANY”. It means, that any of the conditions activate the trigger, i.e. a single condition.

2 Setup of a Trigger for Respawn Action

  1. Press the keys “SHIFT+P” to open the mission property window “Properties”.
  2. Press the button “Trigger” to create a new trigger.
  3. In the “Trigger/MissionObj” window:
    • Change the “Name” of the trigger to “respawn”.
    • Set the checkbox ”[x] Enabled” enabled. It means, it is activated from the very beginning.
    • In lower part of this toolbar, in the setting ”-Elements”, click on “periodicEvent {time=1.00}”
    • A modal window “Type selection” opens.
    • Select “initMission” and press the button “Ok”.
      • Warthunder Wiki "CDK Mission Editor: Triggers" claims “initMission - Trigger will be executed once at the start of the mission”.
      • However, for Multiplayer events, it is executed just one time in the first battle after the the creation of the session. In subsequent battles, it is not executed anymore. This means that actions like “missionMarkAsWaypoint”, “unitPutToSleep”, “unitSetStealth” should be in another trigger of type “periodicEvent”, to be executed at start of every battle, i.e. in the trigger “initial”.

3 Create Spheres for additional Spawns and Airfields

3.1 Additional spawns for Airplanes

  • Create a sphere “spawnpoint05” and place it next to “spawnpoint01” - “spawnpoint04”, as spawn point for a second player.

3.2 Spawn for Ships and Boats

  • Create a “spawnpoint06” and place it on the water inside the atoll, as spawn point for boats and ships( Set y-coordinate of “Position” to “0” ).

3.3 Spawn for Swimming Vehicles / Amphibious Vehicles

  • Create a “spawnpoint07” and place it on the beach inside the atoll, as spawn point for swimming vehicles / amphibious vehicles. Attention: Swimming vehicles / amphibious vehicles may not be spawned in water.

3.4 Spawn for Enemy Ground Vehicles

  • Create a “spawnpoint08” and place it on the beach at the outdside the atoll, as spawn point for enemy ground vehicles.

3.5 Airfield and Spawn for Hydroplanes / Seaplanes / Flying Boats / Floatplanes / Amphibians

  • Create 2 spheres “hydroairfield_start” and “hydroairfield_end”. Place both spheres on the water inside the atoll, as spawn point for hydroplanes / seaplanes / flying boats / floatplanes / amphibians ( Set y-coordinate of “Position” to “0” ).

4 Configure and create Airfields

4.1 Configure the existing Defence Airfield

  1. Press the keys “SHIFT+P” to open the mission property window “Properties”.
  2. Select the Trigger “initial”.
    1. Disable the action “spawnOnAirfield”. If you want to switch between singleplayer and multiplayer mode easily, don't disable it. It it simply ignored in multiplayer missions.
    2. Select the action “addAirfield” and press the button “Copy”.
    3. Disable the action “addAirfield”.
  3. Select the Trigger “respawn”.
    1. Press the button “Paste”.
    2. Press the button “Up” so that the action is at top.

4.2 Create an Airfield for Hydroplanes / Seaplanes / Flying Boats / Floatplanes / Amphibians

  1. Select the Trigger “respawn”.
  2. Press the button “Action” and select the action “addAirfield”.
    • Set the parameter “runwayStart” to “hydroairfield_start”.
    • Set the parameter “runwayEnd” to “hydroairfield_end”.
    • Set the parameter “runwayWidth” to “100”.
    • Set the pick list “army” to “1”, so that it belongs to the army of the player.

5 Respawn Points

5.1 Respawn Points for Airfields

5.1.1 OPTION #1: Adding Air Spawns for Aeroplanes and Ground Spawns for Ground Units
5.1.2 OPTION #2: Adding Airfield or Carrier Spawn for Airplanes
5.1.3 OPTION #3: Adding Airfield spawn for Airplanes on a normal Terrain
  1. Select the Trigger “respawn”.
    1. Add “spawnpoint05” to action “addAirfield”.
    2. Press the button “Action” and select action “missionMarkAsRespawnPoint”. Press the button “Up” until the action is below the disabled action.
      • With mission type “singleMission”, the mission still starts with the plane already having lift off, i.e. no starting from the airfield anymore.
      • Set “target” to “airfield_start”.
      • Set “loc_name” to “Spawn Airfield, Team A”.
      • Set the checkbox ”[x] isAirfield” enabled.
      • Set the checkbox ”[x] showOnMap” enabled.
      • Set “team” to “A”.
      • Click on ”+ tags”, ”+ air”. Set ”[x] air” checked.
      • Click on ”+ tags”, ”+ helicopter”. Set ”[x] helicopter” checked.
  2. Select the Trigger “respawn”.
    • Press the button “Action” and select action “missionMarkAsRespawnPoint”. Press the button “Up” until the action is below the disabled action.
      • Set “target” to “hydroairfield_start”.
      • Set “loc_name” to “Spawn Hydroairfield, Team A”.
      • Set the checkbox ”[x] isAirfield” enabled.
      • Set the checkbox ”[x] showOnMap” enabled.
      • Set “team” to “A”.
      • Click on ”+ tags”, ”+ air”. Set ”[x] air” checked.
      • Click on ”+ tags”, ”+ helicopter”. Set ”[x] helicopter” checked.
      • Click on ”+ tags”, ”+ ship”. Set ”[x] ship” checked. So Navy can spawn here too!
      • Click on ”+ tags”, ”+ boat”. Set ”[x] boat” checked. So Navy can spawn here too!

5.2 Respawn Points for Navy

  1. Select the Trigger “respawn”.
  2. Press the button “Action” and select action “missionMarkAsRespawnPoint”. Press the button “Up” until the action is below the disabled action.
    • Set “target” to “spawnpoint06”.
    • Set “loc_name” to “Navy Spawn, Team A”.
    • Set the checkbox ”[x] showOnMap” enabled.
    • Set “team” to “A”.
    • Click on ”+ tags”, ”+ ship”. Set ”[x] ship” checked.
    • Click on ”+ tags”, ”+ boat”. Set ”[x] boat” checked.

5.3 Respawn Points for Ground Forces

  1. Press the button “Action” and select action “missionMarkAsRespawnPoint”. Press the button “Up” until the action is below the disabled action.
    • Set “target” to “airfield_end”.
    • Set “loc_name” to “Ground Forces Spawn, Team A”.
    • Set the checkbox ”[x] showOnMap” enabled.
    • Set “team” to “A”.
    • Click on ”+ tags”, ”+ tank”. Set ”[x] tank” checked.
  2. Select the Trigger “respawn”.
  3. Press the button “Action” and select action “missionMarkAsRespawnPoint”. Press the button “Up” until the action is below the disabled action.
    • Set “target” to “spawnpoint07”.
    • Set “loc_name” to “Ground Forces Amphibious Spawn, Team A”.
    • Set the checkbox ”[x] showOnMap” enabled.
    • Set “team” to “A”.
    • Click on ”+ tags”, ”+ tank”. Set ”[x] tank” checked.

5.4 Create Respawn Points for Ground Forces

  1. Select the Trigger “respawn”.
  2. Press the button “Action” and select action “missionMarkAsRespawnPoint”. Press the button “Up” until the action is below the disabled action.
    • Set “target” to “airfield_end”.
    • Set “loc_name” to “Ground Forces Spawn, Team A”.
    • Set the checkbox ”[x] showOnMap” enabled.
    • Set “team” to “A”.
    • Click on ”+ tags”, ”+ tank”. Set ”[x] tank” checked.

5.5 Create Respawn Points for Enemy Airforce & Enemy Navy

  1. Select the Trigger “respawn”.
  2. Press the button “Action” and select action “missionMarkAsRespawnPoint”. Press the button “Up” until the action is below the disabled action.
    • Set “target” to “bomber_waypoint”.
    • Set “loc_name” to “Air & Navy Spawn, Team B”.
    • Set the checkbox ”[x] showOnMap” enabled.
    • Set “team” to “B”.
  • Click on ”+ tags”, ”+ air”. Set ”[x] air” checked.
    • Click on ”+ tags”, ”+ helicopter”. Set ”[x] helicopter” checked.
    • Click on ”+ tags”, ”+ ship”. Set ”[x] ship” checked.
    • Click on ”+ tags”, ”+ boat”. Set ”[x] boat” checked.

5.6 Create Respawn Points for Enemy Ground Forces

  1. Select the Trigger “respawn”.
  2. Press the button “Action” and select action “missionMarkAsRespawnPoint”. Press the button “Up” until the action is below the disabled action.
    • Set “target” to “spawnpoint08”.
    • Set “loc_name” to “Ground Forces Spawn, Team B”.
    • Set the checkbox ”[x] showOnMap” enabled.
    • Set “team” to “B”.
    • Click on ”+ tags”, ”+ tank”. Set ”[x] tank” checked.

6 Create an additional Waypoint for Ground Vehicles and a common Waypoint for Swimming Vehicles / Amphibious Vehicles, Ships & Boats

6.1 Create Spheres for Waypoints

  1. In the “scene view” pane:
    1. Create a new sphere “waypoint01_groundforces”.Place it next to the sphere “waypoint01” on the airfield.
      • Set “Zone type” to “Box”.
      • Set the y-coordinate of “Position” to “15”.
      • Set the coordinates of “Box size” from “200”, “200”, “200” to “100”, “300”, “1500”. Place it next on the water inside the atoll, but next to the beach with the sphere “spawnpoint07” ( so that the swimming vehicles must not ship so far to it from beach ), but also so that ships & boats coming from “spawnpoint06” may sail through it easily.
    2. Create a new sphere “waypoint01_navy” ( Set y-coordinate of “Position” to “0” ).
      • Set “Zone type” to “Box”.
  2. Press the keys “SHIFT+P” to open the mission property window “Properties”.
  3. In the mission property window “Properties”, select the trigger “initial”.
  4. Press the button “Action” and select “missionMarkAsWaypoint”.
    • Set “target” to “waypoint01_groundforces”
  5. Press the button “Up” to move the action, several times.
  6. Press the button “Action” and select “missionMarkAsWaypoint”.
    • Set “target” to “waypoint01_navy”.
  7. Press the button “Up” to move the action, several times.

6.2 Add Conditions

  1. Press the keys “SHIFT+P” to open the mission property window “Properties”.
  2. In the mission property window “Properties”, select the trigger “take_off_done”.
  3. Press the Button “Conditions” and select “playerWheninArea”.
  4. Set the parameter “target” to “waypoint01_groundforces”.
    • Keep the parameter “math” set to “2D” ( the default ).
  5. Press the button “Up” to move the action, several times.
  6. Press the Button “Conditions” and select “playerWheninArea”.
  7. Set the parameter “target” to “waypoint01_navy”.
    • Keep the parameter “math” set to “2D” ( the default ).
  8. Press the button “Up” to move the action, several times.

6.3 Enable additional Waypoints at Start of Mission

  1. Press the keys “SHIFT+P” to open the mission property window “Properties”.
  2. In the mission property window “Properties”, select the trigger “initial”.
  3. Press the button “Action” and select the action “missionMarkAsWaypoint”. It requires to indicate point as a target.
    • Set the parameter “target” to “waypoint01_groundforces”.
    • Keep the checkbox ”[x] visible” enabled. It means that it will be displayed on the minimap and the radar, and that it will blink.
    • Keep the checkbox ”[x] primary” enabled. If we would disable this checkbox, the waypoint looses it's yellow point in the center.
  4. Press the button “Up” several times, so that it directly under the existing actions of type “missionMarkAsWaypoint”.
  5. Press the button “Action” and select the action “missionMarkAsWaypoint”. It requires to indicate point as a target.
    • Set the parameter “target” to “waypoint01_navy”.
    • Keep the checkbox ”[x] visible” enabled. It means that it will be displayed on the minimap and the radar, and that it will blink.
    • Keep the checkbox ”[x] primary” enabled. If we would disable this checkbox, the waypoint looses it's yellow point in the center.
  6. Press the button “Up” several times, so that it directly under the existing actions of type “missionMarkAsWaypoint”.

7.4 Disable additional Waypoints after Takeoff

  1. Press the keys “SHIFT+P” to open the mission property window “Properties”.
  2. In the mission property window “Properties”, select the trigger “take_off_done”.
  3. Press the button “Action” and select the action “missionMarkAsWaypoint”. It requires to indicate point as a target.
    • Set the parameter “target” to “waypoint01_groundforces”.
    • Set the checkbox ”[] visible” disabled.
    • Keep the checkbox ”[x] primary” enabled. If we would disable this checkbox, the waypoint looses it's yellow point in the center.
  4. Press the button “Up” several times, so that it directly under the existing actions of type “missionMarkAsWaypoint”.
  5. Press the button “Action” and select the action “missionMarkAsWaypoint”. It requires to indicate point as a target.
    • Set the parameter “target” to “waypoint01_navy”.
    • Set the checkbox ”[] visible” disabled.
    • Keep the checkbox ”[x] primary” enabled. If we would disable this checkbox, the waypoint looses it's yellow point in the center.

3. Switching between Singleplayer and Multiplayer Mission, for Testing

3.1 Switch from Singleplayer to Multiplayer Mission

  1. Press the keys “SHIFT+P” to open the mission property window “Properties”.
  2. In the mission property window “Properties”, click on ”+Mission Settings”.
  3. Click on “mission”.
  4. Set “type” from “singleMission” to “event”. By this, the mission is not listed anymore under “User Missions”.

3.2 Switch from Multiplayer to Singleplayer Mission

  1. Press the keys “SHIFT+P” to open the mission property window “Properties”.
  2. In the mission property window “Properties”, click on ”+Mission Settings”.
  3. Click on “mission”.
  4. Set “type” from “event” to “singleMission”. By this, the mission is now listed under “User Missions”.

4. Publication

Publish the Mission

Warthunder Live Description

<b>Title</b>
Wake Island, Air & Naval & Ground Battle ( Multiplayer PvP Mission )

<b>Status</b>
2023-05-01 -  Should work fine. Test reports are welcome.

<b>Map</b>
levels/wake_island.bin

<b>Tags</b>
#wake_island #island #wake #pacific #pacific_theatre #japan #usa #wwii #airbattle #air_battle #airmission #air_mission #air #airplane #plane #bomber #bombers #bombing #interceptor #intercepting #groundtargets #ground_targets #trucks #truck #aa #antiaircraft #anti_aircraft_guns #antiaircraftgun #antiair #multiplayer #mp #simple #pvp_mission #pvpmission #pvp #hemmerling

<b>Description</b>
This multiplayer PvP mission is based on the singleuser mission described by the official YouTube videos of game designer Elizaveta Mahatkova.

The map "Wake Island" is originally an Air Forces map. Now it provides spawns for Army, Aviation, Helicopter and Fleet vehicles.

Mission objective: Knock out the enemy airplanes.
The mission goal can only be achieved with
<ul>
  <li>Aircrafts and helicopters which have "armament", i.e. the crew can shoot forward</li>
  <li>Ships and boats which have anti-aircraft armament</li>
  <li>Amphibious vehicles which have anti-aircraft armament</li>
</ul>

Dear base defenders ( star icon ), please pass the yellow waypoint to activate the mission objective and the AI bombers.

-

My WT mission repository, which includes this mission, is at http://www.github.com/hemmerling/warthunder . It also includes .CSV files for each user mission.

<b>AI Vehicles</b>
H64K #h6k4 #japaneseairforce #japanese_airforce #imperialjapaneseairforce #imperialjapanese_airforce #imperial_japanese_airforce  

<b>Requirements</b>
You may become host for a "Mission by URL", by buying digital goods ( e.g. G$ ) for at least 10 EUR at Gaijin online shop. Buying on the Gaijin marketplace does not count.

<b>Author</b>
Rolf Hemmerling, Germany.
DISCORD hemmerling#7818
#hemmerling

5. Play the Mission as Custom Battle

5.1 Option #1 to add Players: As Host, form a Squad

  • Host, at Warthunder Client:
    • Click on the ”+” left from “Squad” at the bottom of the hangar screen.
      • You may add up to 3 players of type (1) “Friends” (2) “Fought Together” (3) “Squadron” to a squad.
    • Click 2x on the icon of a player, a small menu opens. Click on the menu item “Invite to squad”.
  • The invited player, at Warthunder Client:
    • A Message is displayed at the top of the hangar window, for a few seconds: “The player XXX has invited you to join their squad”.
      • Click on the button “Accept Invite.
    • If the message is not displayed anymore:
      • Click on the ( orange ) bullet list icon, right from the label “Squad” and the button ”+”, at the bottom of the hangar screen.
      • A window opens, again with the message “The player XXX has invited you to join their squad”.
      • Click on the button with the green check symbol.
  • In the chat window, squad members have their own chat tab.

5.2 Prepare the Custom Battle as Host

  • With your standard Internet browser:
    1. Click on the gray button “Copy Mission Link”. The mission URL is copied by this to the Windows clipboard.
  • At Warthunder Client, add a mission:
    1. Select “Battles / Custom Battles”.
    2. Press the button “Create Session”.
    3. Click on “Missions by URL”.
      • Enter a name, e.g. “Wake Island, AirGrndNavy”.
      • Click on the input field of “Mission URL”. By CTRL-V, paste the mission URL copied to the Window clipboard.
      • Press the button “Apply”.
  • After each mission publication, the mission URL is changed.
    1. Click on the button “Modify mission”.
      • Delete the old mission URL in the field “Mission URL”.
      • Paste the new mission URL into the field “Mission URL”.
      • Press the button “Apply”.
  • At Warthunder Client, start a mission:
    1. Click on “Missions by URL”.
    2. Select “Wake Island Battle”.

5.3 Option #1 to add Players: As Host, form a Squad

  • Squad players:
    • Click on the button “Ready” right from the label “Squad” at the bottom of the hangar screen.

5.4 Start the Custom Battle as Host

  1. Click on the button “Start”.
    • If not all squad players are “Ready”, there is the error message “Not all squad members are ready”.
  2. Configure the mission by the mission screen.
    • Set a “Password”, to avoid that other players disturb your testing.
    • It's ok to keep “Number of players” with the default value “64” - Most of the 64 seats are taken bei non character players ( NCP ) with status “Parachute”, and keep this status for the whole battle.
    • AI settings:
Player Parameter Setting Comments
Parameter 1 2 3 4 5 6
Include bots No No Yes Yes Yes Yes Just AI airplanes
Bots in tanks - No No Yes No Yes Just AI ground vehicles, dominant over “Include bots”
Bots in ships - No No No Yes Yes Just AI ships and boats, dominant over “Include bots” and “Bots in tanks”
Enable additional AI vehicles No Yes No No No No No effect?
B Special effect 3 generic RED airplanes without player name ( of type ”...” ) start from the airfield
A Special effect 3 generic RED airplanes with named players ( of type ”...” ) spawn from the airfield 2 RED ground vehicles with named players and 2 RED ground vehicles without player name spawn 2 RED boats with named players and 2 RED boats without player name spawn 1 RED airplane spawns with named player 3 RED boats with named players, 2 RED boats without player name spawn
3 generic BLUE airplanes with named players ( of type ”...” ) spawn from the airfield 1 BLUE boats with named players spawns 2 BLUE ground vehicle with named player spawns 1 BLUE boats with named players spawns
A REDs attack No Yes Yes Yes Yes
A Trigger “Mission Completed” Yes Yes Yes Yes Yes
A Final screen Always “Mission Failed” “Mission Failed” or “Mission Accomplished”
  1. Click on the button “Apply”.
  2. All squad members are added automatically.
  3. Click on the button “Change Team”, so that your host player item has a blue star ( defence team A for this mission ) or blue cross sign ( attack team B for this mission ). If you are single player as host, select the blue star ( team A ), as you must reach waypoint01 to activate the bombers.
  4. Click on the button “Ready”.

5.5 Option #2 to add Players: As Host, invite Players for a Session

  • At Warthunder Client:
    • Click on the “Friends” icon at the bottom of the hangar screen.
      • You may add up to 3 players of type (1) “Friends” (2) “Fought Together” (3) “Squadron” to a squad.
    • Click 2x on the icon of a player, a small menu opens. Click on the menu item “Invite to session”.

5.6 Option #3 to add Players: Join the Mission as Custom Battle as Player

  • At Warthunder Client, add a mission:
    1. Select “Battles / Custom Battles”.
    2. Set “Difficulty Level” to “Arcade Battles”.
    3. Select the wanted custom battle. In case of Custom Battles, the name of the battle is a URL. It is the URL the host copied from the WarThunder Live page. The number of Custom Battles is very limited. Therefore the mission might not be listed, so a player can't join by that :-(.
    4. Click on the button “Select”.

5.7 Players prepare for Mission

  1. Click on the button “Change Team”, so your player item has a blue star ( defence team A for this mission ) or blue cross sign ( attack team B for this mission ).
  2. Repair all damaged ( red ) vehicles in the crew slots. In opposite to other game modes, you are not asked if you want to repair!
  3. Click on the button “Ready”.

5.8 Start the Mission as Host

  1. Check that the host has a blue star ( team A ), as team A must reach the waypoint01 to activate the bombers.
  2. Repair all damaged ( red ) vehicles in the crew slots. In opposite to other game modes, you are not asked if you want to repair!
  3. Click on the button “Start”.
    • If not all players have clicked the button “Ready”, there is the warning message “Not all are ready. Start the game anyway?”.
    • There might be the error message “All battle servers are busy” :-(.

5.9 Battle

  1. As configured right now: If a player returns to the hangar, he can return to the battle by clicking on the button “To Battle!”.
  2. As programmed right now: Any player, no matter if player of defence team A or attack team B, who reaches “waypoint01” activates the mission objective. But just the host player ( “player01” ) get the message “Destroy all bombers” :-), not anybody else :-(.

Problems / Todo

Resources

Wake Island

Offical "Wake Island" Custom Battles, URL without Source Code

  • Operations:
    • ”[Operation] Wake Island (light vehicles)”
    • ”[Event] Attack on Wake Island”.
  • Ground Strike:
    • ”[Ground Strike@Ships]” Wake Island.

"Wake Island" User Missions & Custom Battles @ Warthunder Live, with Source Code

 
en/gaijin08.html.txt · Last modified: 2025/01/20 23:25 (external edit) · []
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki