Kaynağa Gözat

fixed with= in width= in image files

Nehon 9 yıl önce
ebeveyn
işleme
4c344a16c2
99 değiştirilmiş dosya ile 1635 ekleme ve 1635 silme
  1. 1 1
      src/docs/asciidoc/documentacao.adoc
  2. 1 1
      src/docs/asciidoc/documentation_de.adoc
  3. 1 1
      src/docs/asciidoc/documentation_zh.adoc
  4. 2 2
      src/docs/asciidoc/jme3.adoc
  5. 5 5
      src/docs/asciidoc/jme3/advanced/anisotropic_filtering.adoc
  6. 18 18
      src/docs/asciidoc/jme3/advanced/atom_framework/ai.adoc
  7. 8 8
      src/docs/asciidoc/jme3/advanced/atom_framework/atomexasset.adoc
  8. 11 11
      src/docs/asciidoc/jme3/advanced/atom_framework/cc.adoc
  9. 7 7
      src/docs/asciidoc/jme3/advanced/atom_framework/design/patterns.adoc
  10. 6 6
      src/docs/asciidoc/jme3/advanced/atom_framework/facial.adoc
  11. 38 38
      src/docs/asciidoc/jme3/advanced/capture_audio_video_to_a_file.adoc
  12. 10 10
      src/docs/asciidoc/jme3/advanced/collision_and_intersection.adoc
  13. 1 1
      src/docs/asciidoc/jme3/advanced/custom_meshes.adoc
  14. 19 19
      src/docs/asciidoc/jme3/advanced/debugging.adoc
  15. 26 26
      src/docs/asciidoc/jme3/advanced/effects_overview.adoc
  16. 3 3
      src/docs/asciidoc/jme3/advanced/endless_terraingrid.adoc
  17. 13 13
      src/docs/asciidoc/jme3/advanced/hud.adoc
  18. 15 15
      src/docs/asciidoc/jme3/advanced/jme3_shaders.adoc
  19. 11 11
      src/docs/asciidoc/jme3/advanced/jme3_srgbpipeline.adoc
  20. 18 18
      src/docs/asciidoc/jme3/advanced/level_of_detail.adoc
  21. 21 21
      src/docs/asciidoc/jme3/advanced/loading_screen.adoc
  22. 24 24
      src/docs/asciidoc/jme3/advanced/mesh.adoc
  23. 8 8
      src/docs/asciidoc/jme3/advanced/mouse_picking.adoc
  24. 8 8
      src/docs/asciidoc/jme3/advanced/nifty_gui.adoc
  25. 59 59
      src/docs/asciidoc/jme3/advanced/nifty_gui_java_layout.adoc
  26. 4 4
      src/docs/asciidoc/jme3/advanced/nifty_gui_overlay.adoc
  27. 6 6
      src/docs/asciidoc/jme3/advanced/nifty_gui_projection.adoc
  28. 35 35
      src/docs/asciidoc/jme3/advanced/nifty_gui_xml_layout.adoc
  29. 19 19
      src/docs/asciidoc/jme3/advanced/ogrecompatibility.adoc
  30. 3 3
      src/docs/asciidoc/jme3/advanced/open_game_finder.adoc
  31. 98 98
      src/docs/asciidoc/jme3/advanced/particle_emitters.adoc
  32. 21 21
      src/docs/asciidoc/jme3/advanced/pbr_part1.adoc
  33. 20 20
      src/docs/asciidoc/jme3/advanced/pbr_part2.adoc
  34. 15 15
      src/docs/asciidoc/jme3/advanced/pbr_part3.adoc
  35. 9 9
      src/docs/asciidoc/jme3/advanced/post-processor_water.adoc
  36. 3 3
      src/docs/asciidoc/jme3/advanced/ragdoll.adoc
  37. 36 36
      src/docs/asciidoc/jme3/advanced/spatial.adoc
  38. 19 19
      src/docs/asciidoc/jme3/advanced/steer_behaviours.adoc
  39. 19 19
      src/docs/asciidoc/jme3/advanced/terrain.adoc
  40. 10 10
      src/docs/asciidoc/jme3/advanced/vehicles.adoc
  41. 8 8
      src/docs/asciidoc/jme3/advanced/water.adoc
  42. 11 11
      src/docs/asciidoc/jme3/atomixtuts.adoc
  43. 20 20
      src/docs/asciidoc/jme3/atomixtuts/bladegame.adoc
  44. 10 10
      src/docs/asciidoc/jme3/atomixtuts/cardsgame.adoc
  45. 4 4
      src/docs/asciidoc/jme3/atomixtuts/cardsgame/adtechs.adoc
  46. 6 6
      src/docs/asciidoc/jme3/atomixtuts/cardsgame/assets.adoc
  47. 32 32
      src/docs/asciidoc/jme3/atomixtuts/design.adoc
  48. 7 7
      src/docs/asciidoc/jme3/atomixtuts/heavenrtsgame.adoc
  49. 18 18
      src/docs/asciidoc/jme3/atomixtuts/kickgame.adoc
  50. 6 6
      src/docs/asciidoc/jme3/atomixtuts/kickgame/assets.adoc
  51. 21 21
      src/docs/asciidoc/jme3/atomixtuts/mmorpg.adoc
  52. 17 17
      src/docs/asciidoc/jme3/atomixtuts/mmorpg/phase0.adoc
  53. 14 14
      src/docs/asciidoc/jme3/beginner/hello_animation.adoc
  54. 31 31
      src/docs/asciidoc/jme3/beginner/hello_asset_pt.adoc
  55. 7 7
      src/docs/asciidoc/jme3/beginner/hello_picking.adoc
  56. 47 47
      src/docs/asciidoc/jme3/beginner/hellochasecam.adoc
  57. 4 4
      src/docs/asciidoc/jme3/beginner/hellovector.adoc
  58. 5 5
      src/docs/asciidoc/jme3/blendswaparcade.adoc
  59. 3 3
      src/docs/asciidoc/jme3/contributions/cubes/build_your_block_world.adoc
  60. 5 5
      src/docs/asciidoc/jme3/contributions/cubes/register_your_blocks.adoc
  61. 4 4
      src/docs/asciidoc/jme3/contributions/cubes/tools/heightmaps.adoc
  62. 4 4
      src/docs/asciidoc/jme3/contributions/cubes/tools/noise.adoc
  63. 3 3
      src/docs/asciidoc/jme3/contributions/cubes/tools/picking.adoc
  64. 13 13
      src/docs/asciidoc/jme3/contributions/cubes/tools/serialization.adoc
  65. 6 6
      src/docs/asciidoc/jme3/contributions/entitysystem/introduction.adoc
  66. 109 109
      src/docs/asciidoc/jme3/contributions/particles.adoc
  67. 9 9
      src/docs/asciidoc/jme3/eclipse_jme3_android_jnindk.adoc
  68. 48 48
      src/docs/asciidoc/jme3/external/blender-example.adoc
  69. 9 9
      src/docs/asciidoc/jme3/external/fonts.adoc
  70. 4 4
      src/docs/asciidoc/jme3/intermediate/rolling_madness.adoc
  71. 5 5
      src/docs/asciidoc/jme3/intermediate/transparency_sorting.adoc
  72. 1 1
      src/docs/asciidoc/jme3/math.adoc
  73. 23 23
      src/docs/asciidoc/jme3/scripting.adoc
  74. 9 9
      src/docs/asciidoc/jme3/setting_up_jme3_in_eclipse_zh.adoc
  75. 19 19
      src/docs/asciidoc/jme3/terminology.adoc
  76. 25 25
      src/docs/asciidoc/jme3/tools/charts.adoc
  77. 27 27
      src/docs/asciidoc/jme3/tools/navigation.adoc
  78. 41 41
      src/docs/asciidoc/jme3/user_examples/thirdpersoncamera.adoc
  79. 6 6
      src/docs/asciidoc/logo.adoc
  80. 3 3
      src/docs/asciidoc/pages/wiki/dokuwiki.adoc
  81. 65 65
      src/docs/asciidoc/pages/wiki/syntax.adoc
  82. 5 5
      src/docs/asciidoc/playground/new_page_test.adoc
  83. 3 3
      src/docs/asciidoc/playground/test.adoc
  84. 6 6
      src/docs/asciidoc/sdk/3ds_to_blender_to_jmp.adoc
  85. 7 7
      src/docs/asciidoc/sdk/asset_packs.adoc
  86. 6 6
      src/docs/asciidoc/sdk/font_creation.adoc
  87. 9 9
      src/docs/asciidoc/sdk/neotexture.adoc
  88. 48 48
      src/docs/asciidoc/sdk/plugin/shaderblow.adoc
  89. 3 3
      src/docs/asciidoc/sdk/scene_explorer.adoc
  90. 4 4
      src/docs/asciidoc/sdk/terrain_editor.adoc
  91. 5 5
      src/docs/asciidoc/sdk/welcome/3_0.adoc
  92. 5 5
      src/docs/asciidoc/sdk/welcome/3_0rc3.adoc
  93. 5 5
      src/docs/asciidoc/sdk/welcome/3_1.adoc
  94. 4 4
      src/docs/asciidoc/sdk_pt.adoc
  95. 67 67
      src/docs/asciidoc/space_lion_on_game_assets.adoc
  96. 13 13
      src/docs/asciidoc/tasks.adoc
  97. 3 3
      src/docs/asciidoc/wiki/dokuwiki.adoc
  98. 79 79
      src/docs/asciidoc/wiki/syntax.adoc
  99. 3 3
      src/dokuwiki/lib/plugins/asciidoc/renderer.php

+ 1 - 1
src/docs/asciidoc/documentacao.adoc

@@ -39,7 +39,7 @@ a| Fontes
 
 a| Aprenda mais…
 a| <<sdk#,Utilizando o SDK>> +<<sdk/project_creation#,Criação de Projeto>> +
-image::sdk/jme3-jmonkeyplatform.png[jme3-jmonkeyplatform.png,with="144",height="90",align="center"]
+image::sdk/jme3-jmonkeyplatform.png[jme3-jmonkeyplatform.png,width="144",height="90",align="center"]
 
 a| <<jme3/maven#,Configurando o JME3 com IDE compatívels com maven>> * +<<jme3/setting_up_netbeans_and_jme3#,Configurando o JME3 no NetBeans IDE>> * +<<jme3/setting_up_jme3_in_eclipse#,Configurando o JME3 no Eclipse IDE>> * +<<jme3/eclipse_jme3_android_jnindk#,Configurando o JME3 no Eclipse IDE (com Android e/ou JNI/NDK)>> *
 a| <<jme3/build_from_sources#,Compilando JME3 a partir dos Fontes>> +<<jme3/build_jme3_sources_with_netbeans#,Compilando jME3 a partir dos Fontes com NetBeans>> +<<jme3/simpleapplication_from_the_commandline#,Configurando o jME3 na linha de comando>>

+ 1 - 1
src/docs/asciidoc/documentation_de.adoc

@@ -46,7 +46,7 @@ a| Quellcodes
 
 a| Erfahre mehr …
 a| <<sdk#,Benutzung des SDK>> +<<sdk/project_creation#,Projekte erstellen>> +
-image::sdk/jme3-jmonkeyplatform.png[jme3-jmonkeyplatform.png,with="144",height="90",align="center"]
+image::sdk/jme3-jmonkeyplatform.png[jme3-jmonkeyplatform.png,width="144",height="90",align="center"]
 
 a| <<jme3/setting_up_netbeans_and_jme3#,Nutzung der jME3 in NetBeans>> * +<<jme3/setting_up_jme3_in_eclipse#,Nutzung der jME3 in Eclipse>> *
 a| <<jme3/build_from_sources#,Kompilieren der jME3 aus den Quellcodes>> +<<jme3/build_jme3_sources_with_netbeans#,Kompilieren der jME3 aus den Quellcodes mit NetBeans>> +<<jme3/simpleapplication_from_the_commandline#,Einrichtung der jME3 über die Kommandozeileneingabe>>

+ 1 - 1
src/docs/asciidoc/documentation_zh.adoc

@@ -39,7 +39,7 @@ a| Sources
 
 a| 更多学习内容…
 a| <<sdk_zh#,学习使用SDK>> +<<sdk/project_creation_zh#,使用SDK创建工程>> +
-image::sdk/jme3-jmonkeyplatform.png[jme3-jmonkeyplatform.png,with="144",height="90",align="center"]
+image::sdk/jme3-jmonkeyplatform.png[jme3-jmonkeyplatform.png,width="144",height="90",align="center"]
 
 a| <<jme3/maven_zh#,在任何兼容maven的IDE中集成JME3>> * +<<jme3/setting_up_netbeans_and_jme3_zh#,在NetBeans中集成JME3>> * +<<jme3/setting_up_jme3_in_eclipse_zh#,在Eclipse中集成JME3>> * +<<jme3/eclipse_jme3_android_jnindk_zh#,在Eclipse(含Android及JNI/NDK)中集成JME3>> *
 a| <<jme3/build_from_sources_zh#,编译JME3源码>> +<<jme3/build_jme3_sources_with_netbeans_zh#,在NetBeans中编译JME3源码>> +<<jme3/simpleapplication_from_the_commandline_zh#,在(Linux)命令行下开发JME3>>

+ 2 - 2
src/docs/asciidoc/jme3.adoc

@@ -20,7 +20,7 @@ Note that Test apps in this example project are not necessarily the recommended
 
 
 
-image::jme3/beginner/beginner-physics.png[beginner-physics.png,with="360",height="291",align="right"]
+image::jme3/beginner/beginner-physics.png[beginner-physics.png,width="360",height="291",align="right"]
 
 
 *  Make sure you are familiar with basic <<jme3/terminology#,3D game development concepts>> such as <<jme3/the_scene_graph#,the scene graph>>.
@@ -305,7 +305,7 @@ These code examples are not supported by the core team and we cannot guarantee t
 == SDK Documentation
 
 
-image::sdk/jmonkeyplatform-docu-2.png[jmonkeyplatform-docu-2.png,with="420",height="300",align="right"]
+image::sdk/jmonkeyplatform-docu-2.png[jmonkeyplatform-docu-2.png,width="420",height="300",align="right"]
 
 
 The <<sdk#,jMonkeyEngine SDK>> is our recommended game development environment.

+ 5 - 5
src/docs/asciidoc/jme3/advanced/anisotropic_filtering.adoc

@@ -1,6 +1,6 @@
 = anisotropic_filtering
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -10,12 +10,12 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 == Anisotropic Filtering for Textures
 
-Anisotropic Filtering is very important for Desktop Games and their textures. Most games use AnisotropicFiltering = 4/8/16. It sharpens your textures under different Angle View. 
+Anisotropic Filtering is very important for Desktop Games and their textures. Most games use AnisotropicFiltering = 4/8/16. It sharpens your textures under different Angle View.
 Anisotropy makes a performance draw back about 10-40 fps, but the result looks much better.
 
 See Example: link:http://i.imgur.com/0yiv9.jpg[http://i.imgur.com/0yiv9.jpg]
 
-image::jme3/advanced/anisotropy_example_mifth_01.jpg[anisotropy_example_mifth_01.jpg,with="360",height="900",align="right"]
+image::jme3/advanced/anisotropy_example_mifth_01.jpg[anisotropy_example_mifth_01.jpg,width="360",height="900",align="right"]
 
 
 JME has DEFAULT AnisotropicFiltering = 0. So, if you make a game for Windows/Linux/Mac.. you need to set the Anisotropic Filtering more than 0.
@@ -42,7 +42,7 @@ Example how to set AnisotropicFiltering = 4 for all textures:
 //                throw new UnsupportedOperationException("Not supported yet.");
             }
         };
-        
+
         assetManager.addAssetEventListener(asl);
 
 ----

+ 18 - 18
src/docs/asciidoc/jme3/advanced/atom_framework/ai.adoc

@@ -1,6 +1,6 @@
 = ai
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../
 :imagesdir: ../../..
@@ -15,7 +15,7 @@ Hi,
 This is the wiki for Atom AI framework.
 
 
-image::http://blogs.ifsworld.com/wp-content/uploads/2012/11/AI-lowres.jpg[AI-lowres.jpg,with="200",height="",align="right"]
+image::http://blogs.ifsworld.com/wp-content/uploads/2012/11/AI-lowres.jpg[AI-lowres.jpg,width="200",height="",align="right"]
 
 
 
@@ -29,12 +29,12 @@ image::http://blogs.ifsworld.com/wp-content/uploads/2012/11/AI-lowres.jpg[AI-low
 
 *Answer:* Everything… You can use this lib to:
 
-*   solve the common path finding, 
-*  let your creature know how to think and learn, 
-*  direct your vehicle the way to move, 
-*  your camera to interact with the screen, 
-*  teach your characters to walk/ talk/ shoot/ trading… 
-*  You can also use it in various type of simulations and 
+*   solve the common path finding,
+*  let your creature know how to think and learn,
+*  direct your vehicle the way to move,
+*  your camera to interact with the screen,
+*  teach your characters to walk/ talk/ shoot/ trading…
+*  You can also use it in various type of simulations and
 *  even try to solve a mathematic problem.
 
 *Question:* Sound wonderful…? But wait… It should be soooooooo freaking big and heavy, is it *real-time* shit?
@@ -58,15 +58,15 @@ This Atom AI framework are more or less a “framework to bring AI to jME3 game
 
 [TIP]
 ====
-Here is my picked list of <<jme3/advanced/atom_framework/ai/researches#,researches>> and articles you can read in AI field (game and none-game) 
+Here is my picked list of <<jme3/advanced/atom_framework/ai/researches#,researches>> and articles you can read in AI field (game and none-game)
 ====
 
 
 
 === Idea & Buzz
 
-*  It contains warpers for various java AI libraries build on top of light-weight, configable module architecture and provide the way to hook seamlessly to jME3 games. 
-*  It's also come up with a lot of working examples in several game genre (RTS, RPG, FPS, Sport,…). 
+*  It contains warpers for various java AI libraries build on top of light-weight, configable module architecture and provide the way to hook seamlessly to jME3 games.
+*  It's also come up with a lot of working examples in several game genre (RTS, RPG, FPS, Sport,…).
 *  40% of components, AI algorimth are rewritten by the author (@atomix) to be light-weight and usable in real-time application.
 *  Tend to be used in production application and games and suppose to support broadest cases it can.
 *  Users can use the pieces to build up their own AI part of their games and apps
@@ -79,12 +79,12 @@ Here is my picked list of <<jme3/advanced/atom_framework/ai/researches#,research
 
 (C) means with examples cases
 
-(E) means use| depend on external libs 
+(E) means use| depend on external libs
 
 
 [IMPORTANT]
 ====
-Note that: despite of the fact, the lib has a lot of dependencies, the author always try have simple fallback - homegrown implemention.  Of course, support a fewer use cases, mainly for specific game genres, but it's better than nothing, that's the bright side 
+Note that: despite of the fact, the lib has a lot of dependencies, the author always try have simple fallback - homegrown implemention.  Of course, support a fewer use cases, mainly for specific game genres, but it's better than nothing, that's the bright side
 ====
 
 
@@ -137,8 +137,8 @@ Read alternatives and searches if you want to go further than Atom!
 
 *  FSM , HFSM , FFSM for AI (T)
 *  Searching
-**  Path finding 
-***  algorimth: A Star, theta Star 
+**  Path finding
+***  algorimth: A Star, theta Star
 ***  space: Grid, Hex, Tris, Polys, 3D Block, 3D Terrain, NavMesh, points cloud/, graphs… [more]
 ***  generate methods: navmesh gen,jump points, choke points, viewset points, … [more]
 ***  re-touch methods: smooth, reduce, prunning, time-wise, cahing, progessive
@@ -150,7 +150,7 @@ Read alternatives and searches if you want to go further than Atom!
 
 
 *  Reasoning
-**  Decision Tree 
+**  Decision Tree
 **  Minimax
 **  Some academic stuffs …
 
@@ -191,7 +191,7 @@ iframe::http://bubbl.us/view/1860d6/2fd76d/15vmlQSf.3GMg/[width="98%", height="4
 
 As the framework grown up, I will bring more unit tests and example cases.
 
-Also it should has even better integration with the JME SDK and other Netbean's plugins like (weka, neuphons…). Corporate with Code gen, it's can easily replace Alice, Manson,etc…  as much better 3D non-coding enviroment and one day maybe become the most advanced AI simulation enviroment on earth! 
+Also it should has even better integration with the JME SDK and other Netbean's plugins like (weka, neuphons…). Corporate with Code gen, it's can easily replace Alice, Manson,etc…  as much better 3D non-coding enviroment and one day maybe become the most advanced AI simulation enviroment on earth!
 
 
 === FAQ

+ 8 - 8
src/docs/asciidoc/jme3/advanced/atom_framework/atomexasset.adoc

@@ -1,6 +1,6 @@
 = atomexasset
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../
 :imagesdir: ../../..
@@ -23,9 +23,9 @@ The future assets pipeline for JME3 games!
 
 Pipeline is a common term in computing and also asset making. From sattelite view, pipeline is progresses between input and output.
 
-image:http://storm.incubator.apache.org/images/topology.png[400px,with="",height=""]
+image:http://storm.incubator.apache.org/images/topology.png[400px,width="",height=""]
 
-Here in game we talking about Assets aspect, mostly! 
+Here in game we talking about Assets aspect, mostly!
 
 In real world, converting-processing data and assets also require amount of times, efforts and cause headaches, almost comparable to making data and assets.
 
@@ -41,7 +41,7 @@ Some of the problems and solutions here can also be applied to other situation a
 
 Converting between things is a hard problem:
 
-*  Semantic: “things are different “in contexts. 
+*  Semantic: “things are different “in contexts.
 *  Incompatible: Converting almost one-direction only. Converter programs sometime not reliable and not support your data
 *  Hidden: Some format is unknown. Some require commercial and $$$
 *  Fault-tolerant: Currently almost asset pipeline is easy to fail and do not support recovery.
@@ -163,7 +163,7 @@ is equal with:
 
 but the later has extra effects:
 
-*  It put a update watcher over the entry point 
+*  It put a update watcher over the entry point
 **  the file in filesystem
 **  if you has config for that entry to “link to another remote point (git, remote asset central), it actually manage the linkage for you
 
@@ -171,7 +171,7 @@ but the later has extra effects:
 *  It manage the avaiablility, validation, necessarility of that entry if you are in a streaming scenario
 *  It let the assets pipeline fault tolerant.
 **  So if the entry point is not available yet, you has a place holder util the file is available. The “holding back effect also can be set if need
-**  If the request to the entry point actually timeouted, cached assets are used 
+**  If the request to the entry point actually timeouted, cached assets are used
 
 
 
@@ -228,4 +228,4 @@ Beside of Defacto of the building tools: Ant &amp; Maven, the new rising star Gr
 
 link:http://www.go.cd/[http://www.go.cd/]
 
-image:http://www.go.cd/images/home-image1.png[home-image1.png,with="",height=""]
+image:http://www.go.cd/images/home-image1.png[home-image1.png,width="",height=""]

+ 11 - 11
src/docs/asciidoc/jme3/advanced/atom_framework/cc.adoc

@@ -1,6 +1,6 @@
 = cc
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../
 :imagesdir: ../../..
@@ -25,7 +25,7 @@ Go to <<jme3/advanced/atom_framework/quickstart#,quickstart>> if you on a rush!
 
 ==== Ideas
 
-The initial idea of Character customization is: We (human) are soooo *similiar*!! 
+The initial idea of Character customization is: We (human) are soooo *similiar*!!
 
 The second idea: *resuable* and *composable*!
 
@@ -71,31 +71,31 @@ Try some example in Football game's character cusomization <<jme3/atomixtuts/kic
 
 === Screenshots & Video
 
-image:jme3/advanced/atom_framework/youtube_fcf6grenolg[youtube_fcf6grenolg,with="",height=""]
+image:jme3/advanced/atom_framework/youtube_fcf6grenolg[youtube_fcf6grenolg,width="",height=""]
 
 
 === Techniques
 
-*1) Blend shape* : 
+*1) Blend shape* :
 
-*2) Bone* : 
+*2) Bone* :
 
-*3) Free form deformation*: 
+*3) Free form deformation*:
 
 
 === Problems
 
-*1) Blend shape* : 
+*1) Blend shape* :
 
 I saw that going to be added into the core soon. So exciting, that will help a tons, as soon as finish, I will make a patch to help import blend shape from blender too. One thing I still have to consider is: Can we make a type of Mesh that save a whole topology from Blender or other CAD and then become the base mesh for futher manipulate?
 
-*2) Bone* : 
+*2) Bone* :
 
 I saw the current behavior of Bone, SkeletonControl are quite limited. I remember once @nehon explain that we don’t save the Length of the bone, but the trans/rot/scale just like a mat4… In fact, we can save more information in a Bone, and it will help tons when it come to a situation that someone want to manipulate the bone his self.
 
 _setUserControl_ didn’t sastify me cause I force me to patch the whole animation system just because I want to scale a bone up and down (ex: bigger nose for a character), and sync that with the existed animation. You can say it’s just my very own problem but …
 
-*3) Free form deformation*: 
+*3) Free form deformation*:
 
 For the need of cloth customization, I made my self a quick FFD system, in fact, it works extactly like a set of bones still have lengths and envelops on them. But in the end, once again I have to hack into the Mesh class and other things, just because a lot of private and final methods… It’s kind of sad that it should not be that hard for the engine users to add more features to the engine if the user want to.
 
@@ -114,7 +114,7 @@ At the end, I just want what I want, that mean I just want things work if it’s
 
 == Manuals
 
-Go Quick 
+Go Quick
 
 Go in depth
 

+ 7 - 7
src/docs/asciidoc/jme3/advanced/atom_framework/design/patterns.adoc

@@ -1,6 +1,6 @@
 = patterns
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../../
 :imagesdir: ../../../..
@@ -31,14 +31,14 @@ link:http://en.wikipedia.org/wiki/Comparison_of_programming_paradigms[http://en.
 ==== Java programming language
 
 
-image::http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Java_logo_and_wordmark.svg/150px-Java_logo_and_wordmark.svg.png[200,with="",height="",align="left"]
+image::http://upload.wikimedia.org/wikipedia/commons/thumb/a/a4/Java_logo_and_wordmark.svg/150px-Java_logo_and_wordmark.svg.png[200,width="",height="",align="left"]
  *Java* is a computer programming language that is concurrent, class-based, object-oriented, (mostly) imperative, structured (also referred as strictly typed)
 
 emoji:sunglasses Suppose that when you read this wiki you already know what Java is (partly)
 
-*Groovy*… 
+*Groovy*…
 
-image::wiki/groovy-logo.png[200,with="",height="",align="right"]
+image::wiki/groovy-logo.png[200,width="",height="",align="right"]
 
 
 is an agile and dynamic language for the Java Virtual Machine
@@ -118,7 +118,7 @@ MVC Push was born in the world of “none frequent” and not suite well for kin
 
 MVC Pull in another hand, suite better for “frequent update” and assume that View is the one trigger the update call.
 
-Back to real-time game, if you not making a chess game, almost you “are doing” a pull based MVC, or apply this pattern privately. 
+Back to real-time game, if you not making a chess game, almost you “are doing” a pull based MVC, or apply this pattern privately.
 
 
 == Design patterns in JME3
@@ -139,7 +139,7 @@ Here is the twist: Actually in JME3, you are doing both, that’s why it look li
 ====
 
 
-because of this cycle 
+because of this cycle
 
 
 == Design patterns in Atom

+ 6 - 6
src/docs/asciidoc/jme3/advanced/atom_framework/facial.adoc

@@ -1,6 +1,6 @@
 = facial
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../
 :imagesdir: ../../..
@@ -24,11 +24,11 @@ Let see how can we do it in JME3, shall we?
 === Ideas
 
 *  Customize the face with animations, emotions: ( eyes, nose, mouth ) with (smile, angry …)
-*  User friendly. 
-**  For newbies 
+*  User friendly.
+**  For newbies
 **  but also for professinal. especially with those who use FaceFx and UDK
 
-*  Rooms for extends and usecases ( changing art-style, more specialize for simulations…) 
+*  Rooms for extends and usecases ( changing art-style, more specialize for simulations…)
 
 
 [IMPORTANT]
@@ -41,7 +41,7 @@ Go to <<Researches & Papers,alternatives and researches>> if you want to go furt
 
 == AtomFacial framework
 
-image:jme3/advanced/atom_framework/youtube_fcf6grenolg[youtube_fcf6grenolg,with="",height=""]
+image:jme3/advanced/atom_framework/youtube_fcf6grenolg[youtube_fcf6grenolg,width="",height=""]
 
 
 === Architecture

+ 38 - 38
src/docs/asciidoc/jme3/advanced/capture_audio_video_to_a_file.adoc

@@ -1,6 +1,6 @@
 = Capture Audio/Video to a File
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -18,7 +18,7 @@ from the game while it is running using VideoRecorderAppState.
 
 [TIP]
 ====
-Combine this method with jMonkeyEngine's 
+Combine this method with jMonkeyEngine's
 <<jme3/advanced/cinematics#,Cinematics>>
 feature to record high-quality game trailers!
 ====
@@ -31,7 +31,7 @@ First off, if all you need is to record video at 30fps with no sound, then look
 no further than jMonkeyEngine 3's built in `VideoRecorderAppState`
 class.
 
-Add the following code to your `simpleInitApp()` method. 
+Add the following code to your `simpleInitApp()` method.
 
 [source,java]
 ----
@@ -44,9 +44,9 @@ The game will run slow, but the recording will be in high-quality and
 normal speed. Recording starts when the state is
 attached, and ends when the application quits or the state is detached.
 
-The video files will be stored in your *user home directory*. 
+The video files will be stored in your *user home directory*.
 If you want to save to another path, specify a File object in the
-VideoRecorderAppState constructor. 
+VideoRecorderAppState constructor.
 
 That's all!
 
@@ -56,8 +56,8 @@ That's all!
 
 [NOTE]
 ====
-This way of A/V recording is still in development.  
-It works for all of jMonkeyEngine's test cases. 
+This way of A/V recording is still in development.
+It works for all of jMonkeyEngine's test cases.
 If you experience any problems or
 if something isn't clear, please link:http://jmonkeyengine.org/members/bortreb/[let me know]. – bortreb
 ====
@@ -125,7 +125,7 @@ your preferred container/codec format.  Be advised that some
 video payers cannot process AVI with a RAW stream, and that AVI
 1.0 files generated by this method that exceed 2.0GB are invalid
 according to the AVI 1.0 +++<abbr title="specification">spec</abbr>+++ (but many programs can still deal
-with them.)  Thanks to 
+with them.)  Thanks to
 link:http://www.randelshofer.ch/blog/2008/08/writing-avi-videos-in-pure-java/[Werner Randelshofer]
 for his excellent work which made the AVI file writer option possible.
 
@@ -161,25 +161,25 @@ import com.jme3.app.SimpleApplication;
  * Demonstrates how to use basic Audio/Video capture with a
  * jMonkeyEngine application. You can use these techniques to make
  * high quality cutscenes or demo videos, even on very slow laptops.
- * 
+ *
  * @author Robert McIntyre
  */
 
 public class Basic {
-	
+
     public static void main(String[] ignore) throws IOException{
 	File video = File.createTempFile("JME-water-video", ".avi");
 	File audio = File.createTempFile("JME-water-audio", ".wav");
-		
+
 	SimpleApplication app = new TestPostWater();
 	app.setTimer(new IsoTimer(60));
 	app.setShowSettings(false);
-		
+
 	Capture.captureVideo(app, video);
 	Capture.captureAudio(app, audio);
-		
+
 	app.start();
-		
+
 	System.out.println(video.getCanonicalPath());
 	System.out.println(audio.getCanonicalPath());
     }
@@ -277,20 +277,20 @@ import com.jme3.system.AppSettings;
 import com.jme3.system.JmeSystem;
 
 /**
- * 
+ *
  * Demonstrates advanced use of the audio capture and recording
  * features.  Multiple perspectives of the same scene are
  * simultaneously rendered to different sound files.
- * 
+ *
  * A key limitation of the way multiple listeners are implemented is
  * that only 3D positioning effects are realized for listeners other
  * than the main LWJGL listener.  This means that audio effects such
  * as environment settings will *not* be heard on any auxiliary
  * listeners, though sound attenuation will work correctly.
- * 
+ *
  * Multiple listeners as realized here might be used to make AI
  * entities that can each hear the world from their own perspective.
- * 
+ *
  * @author Robert McIntyre
  */
 
@@ -303,7 +303,7 @@ public class Advanced extends SimpleApplication {
 	 * listening for sound; when a cube hears sound whose intensity is
 	 * greater than a certain threshold, it changes its color from
 	 * grey to green.
-	 * 
+	 *
 	 *  Each cube is also saving whatever it hears to a file.  The
 	 *  scene from the perspective of the viewer is also saved to a
 	 *  video file.  When you listen to each of the sound files
@@ -311,7 +311,7 @@ public class Advanced extends SimpleApplication {
 	 *  approaches the cube that generated that sound file.  This
 	 *  shows that each listener is hearing the world from its own
 	 *  perspective.
-	 * 
+	 *
 	 */
 	public static void main(String[] args) {
 		Advanced app = new Advanced();
@@ -349,7 +349,7 @@ public class Advanced extends SimpleApplication {
 		ear.setMaterial(mat);
 		root.attachChild(ear);
 		return ear;
-	} 
+	}
 
 	private Vector3f[] path = new Vector3f[]{
 			// loop 1
@@ -419,18 +419,18 @@ public class Advanced extends SimpleApplication {
 		track.setCurveTension(0.80f);
 
 		motionControl = new MotionTrack(bell,track);
-		// for now, use reflection to change the timer... 
+		// for now, use reflection to change the timer...
 		// motionControl.setTimer(new IsoTimer(60));
-		
+
 		try {
 			Field timerField;
 			timerField = AbstractCinematicEvent.class.getDeclaredField("timer");
 			timerField.setAccessible(true);
-			try {timerField.set(motionControl, motionTimer);} 
-			catch (IllegalArgumentException e) {e.printStackTrace();} 
+			try {timerField.set(motionControl, motionTimer);}
+			catch (IllegalArgumentException e) {e.printStackTrace();}
 			catch (IllegalAccessException e) {e.printStackTrace();}
-		} 
-		catch (SecurityException e) {e.printStackTrace();} 
+		}
+		catch (SecurityException e) {e.printStackTrace();}
 		catch (NoSuchFieldException e) {e.printStackTrace();}
 
 
@@ -450,7 +450,7 @@ public class Advanced extends SimpleApplication {
 	}
 
 	private void initAudio() {
-		org.lwjgl.input.Mouse.setGrabbed(false);	
+		org.lwjgl.input.Mouse.setGrabbed(false);
 		music = new AudioNode(assetManager, "Sound/Effects/Beep.ogg", false);
 
 		rootNode.attachChild(music);
@@ -463,7 +463,7 @@ public class Advanced extends SimpleApplication {
 		music.setRefDistance(1f);
 		//music.setRolloffFactor(1f);
 		music.setLooping(false);
-		audioRenderer.pauseSource(music); 
+		audioRenderer.pauseSource(music);
 	}
 
 	public class Dancer implements SoundProcessor {
@@ -480,7 +480,7 @@ public class Advanced extends SimpleApplication {
 
 
 		/**
-		 * Respond to sound!  This is the brain of an AI entity that 
+		 * Respond to sound!  This is the brain of an AI entity that
 		 * hears its surroundings and reacts to them.
 		 */
 		public void process(ByteBuffer audioSamples, int numSamples, AudioFormat format) {
@@ -488,7 +488,7 @@ public class Advanced extends SimpleApplication {
 			byte[] data = new byte[numSamples];
 			float[] out = new float[numSamples];
 			audioSamples.get(data);
-			FloatSampleTools.byte2floatInterleaved(data, 0, out, 0, 
+			FloatSampleTools.byte2floatInterleaved(data, 0, out, 0,
 					numSamples/format.getFrameSize(), format);
 
 			float max = Float.NEGATIVE_INFINITY;
@@ -510,13 +510,13 @@ public class Advanced extends SimpleApplication {
 			rf.addListener(auxListener);
 			WaveFileWriter aux = null;
 
-			try {aux = new WaveFileWriter(File.createTempFile("advanced-audio-" + n, ".wav"));} 
+			try {aux = new WaveFileWriter(File.createTempFile("advanced-audio-" + n, ".wav"));}
 			catch (IOException e) {e.printStackTrace();}
 
-			rf.registerSoundProcessor(auxListener, 
+			rf.registerSoundProcessor(auxListener,
 					new CompositeSoundProcessor(new Dancer(ear), aux));
-					
-		}   
+
+		}
 	}
 
 
@@ -550,12 +550,12 @@ public class Advanced extends SimpleApplication {
 
 ----
 
-image:http://www.youtube.com/v/oCEfK0yhDrY?.swf[oCEfK0yhDrY?.swf,with="400",height=""]
+image:http://www.youtube.com/v/oCEfK0yhDrY?.swf[oCEfK0yhDrY?.swf,width="400",height=""]
 
 
 === Using Advanced features to Record from more than one perspective at once
 
-image:http://www.youtube.com/v/WIJt9aRGusc?.swf[WIJt9aRGusc?.swf,with="400",height=""]
+image:http://www.youtube.com/v/WIJt9aRGusc?.swf[WIJt9aRGusc?.swf,width="400",height=""]
 
 
 == More Information

+ 10 - 10
src/docs/asciidoc/jme3/advanced/collision_and_intersection.adoc

@@ -1,6 +1,6 @@
 = Collision and Intersection
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -9,7 +9,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 The term collision can be used to refer to <<jme3/advanced/physics_listeners#,physical interactions>> (where <<jme3/advanced/physics#,physical objects>> collide, push and bump off one another), and also to non-physical _intersections_ in 3D space. This article is about the non-physical (mathematical) collisions.
 
-Non-physical collision detection is interesting because it uses less computing resources than physical collision detection. The non-physical calculations are faster because they do not have any side effects such as pushing other objects or bumping off of them. Tasks such as <<jme3/advanced/mouse_picking#,mouse picking>> are easily implemented using mathematical techniques such as ray casting and intersections.  Experienced developers optimize their games by finding ways to simulate certain (otherwise expensive physical) interactions in a non-physical way. 
+Non-physical collision detection is interesting because it uses less computing resources than physical collision detection. The non-physical calculations are faster because they do not have any side effects such as pushing other objects or bumping off of them. Tasks such as <<jme3/advanced/mouse_picking#,mouse picking>> are easily implemented using mathematical techniques such as ray casting and intersections.  Experienced developers optimize their games by finding ways to simulate certain (otherwise expensive physical) interactions in a non-physical way.
 
 *Example:* One example for an optimization is a physical vehicle's wheels. You could make the wheels fully physical disks, and have jME calculate every tiny force – sounds very accurate? It's total overkill and too slow for a racing game. A more performant solution is to cast four invisible rays down from the vehicle and calculate the intersections with the floor. These non-physical wheels require (in the simplest case) only four calculations per tick to achieve an effect that players can hardly distinguish from the real thing.
 
@@ -27,16 +27,16 @@ Note that jME counts _all_ collisions, this means a ray intersecting a box will
 a|CollisionResults Method
 a|Usage
 
-<a|size()                
+<a|size()
 a|Returns the number of CollisionResult objects.
 
-a|getClosestCollision() 
+a|getClosestCollision()
 a|Returns the CollisionResult with the lowest distance.
 
 a|getFarthestCollision()
 a|Returns the CollisionResult with the farthest distance.
 
-<a|getCollision(i)       
+<a|getCollision(i)
 a|Returns the CollisionResult at index i.
 
 |===
@@ -81,7 +81,7 @@ The following code snippet can be triggered by listeners (e.g. after an input ac
   // Calculate detection results
   CollisionResults results = new CollisionResults();
   a.collideWith(b, results);
-  System.out.println("Number of Collisions between" + 
+  System.out.println("Number of Collisions between" +
       a.getName()+ " and " + b.getName() + ": " + results.size());
   // Use the results
   if (results.size() > 0) {
@@ -126,15 +126,15 @@ Knowing the distance of the collisions is useful for example when you intersect
 
 == Bounding Volumes
 
-A `com.jme3.bounding.BoundingVolume` is an interface for dealing with containment of a collection of points. All BoundingVolumes are `Collidable` and are used as optimization to calculate non-physical collisions more quickly: It's always faster to calculate an intersection between simple shapes like spheres and boxes than between complex shapes like models. 
+A `com.jme3.bounding.BoundingVolume` is an interface for dealing with containment of a collection of points. All BoundingVolumes are `Collidable` and are used as optimization to calculate non-physical collisions more quickly: It's always faster to calculate an intersection between simple shapes like spheres and boxes than between complex shapes like models.
 
-jME3 computes bounding volumes for all objects. These bounding volumes are later used for frustum culling, which is making sure only objects visible on-screen are actually sent for rendering. 
+jME3 computes bounding volumes for all objects. These bounding volumes are later used for frustum culling, which is making sure only objects visible on-screen are actually sent for rendering.
 
 All fast-paced action and shooter games use BoundingVolumes as an optimization. Wrap all complex models into simpler shapes – in the end, you get equally useful collision detection results, but faster. link:http://en.wikipedia.org/wiki/Bounding_volume[More about bounding volumes...]
 
 Supported types:
 
-image::http://www.jmonkeyengine.com/jme/wiki-data/userref/capsule.png[Capsule,with="150",height="110",align="right"]
+image::http://www.jmonkeyengine.com/jme/wiki-data/userref/capsule.png[Capsule,width="150",height="110",align="right"]
 
 
 *  Type.AABB = Axis-aligned bounding box, that means it doesn't rotate, which makes it less precise. A `com.jme3.bounding.BoundingBox` is an axis-aligned cuboid used as a container for a group of vertices of a piece of geometry. A BoundingBox has a center and extents from that center along the x, y and z axis. This is the default bounding volume, since it is fairly fast to generate and gives better accuracy than the bounding sphere.

+ 1 - 1
src/docs/asciidoc/jme3/advanced/custom_meshes.adoc

@@ -9,7 +9,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
 
-image::jme3/advanced/custom_mesh.png[custom_mesh.png,with="150",height="150",align="left"]
+image::jme3/advanced/custom_mesh.png[custom_mesh.png,width="150",height="150",align="left"]
 
 Use the Mesh class to create custom shapes that go beyond Quad, Box, Cylinder, and Sphere, even procedural shapes are possible. Thank you to KayTrance for providing the sample code!
 

+ 19 - 19
src/docs/asciidoc/jme3/advanced/debugging.adoc

@@ -1,6 +1,6 @@
 = Debugging
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -9,14 +9,14 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 When you deal with complex game engine features like animations or physics it is handy to get feedback from the engine how it interpreted the current state. Is the physical object's collision shape really where you think it is? Is the skeleton of the animated character moving like you think it should? This document shows you how to activate visual debug aides.
 
-What if you just want to quickly write code that loads models and brings them in their start position? You may not want to hunt for a sample model, convert it, add lights, and load materials. Instead you use “hasslefree simple shapes, and a “hasslefree unshaded material or wireframe: No model, no light source, no materials are needed to see them in your test scene. 
+What if you just want to quickly write code that loads models and brings them in their start position? You may not want to hunt for a sample model, convert it, add lights, and load materials. Instead you use “hasslefree simple shapes, and a “hasslefree unshaded material or wireframe: No model, no light source, no materials are needed to see them in your test scene.
 
 If you ever have problems with objects appearing in the wrong spot, with the wrong scale, or wrong orientation, simply attach debug shapes to your scene to have a point of reference in 3D space – just like a giant ruler. If your code positions the debug shapes correctly, but models remain invisible when you apply the same code to them, you know that the problem must be either the model (where is its origin coordinate?), or the light (too dark? too bright? missing?), or the model's material (missing?) – and not the positioning code.
 
-Here are some different debug shapes: 
+Here are some different debug shapes:
 
 
-image::jme3/advanced/debug-shapes.png[debug-shapes.png,with="600",height="220",align="center"]
+image::jme3/advanced/debug-shapes.png[debug-shapes.png,width="600",height="220",align="center"]
 
 
 
@@ -25,7 +25,7 @@ image::jme3/advanced/debug-shapes.png[debug-shapes.png,with="600",height="220",a
 
 === Coordinate Axes
 
-The coordinate axes (com.jme3.scene.debug.Arrow) help you see the cardinal directions (X,Y,Z) from their center point. Scale the arrows to use them as a “ruler for a certain length. 
+The coordinate axes (com.jme3.scene.debug.Arrow) help you see the cardinal directions (X,Y,Z) from their center point. Scale the arrows to use them as a “ruler for a certain length.
 
 [source,java]
 ----
@@ -141,7 +141,7 @@ Making the skeleton visible inside animated models can be handy for debugging an
 [source,java]
 ----
 
-     SkeletonDebugger skeletonDebug = 
+     SkeletonDebugger skeletonDebug =
          new SkeletonDebugger("skeleton", control.getSkeleton());
      Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
      mat.setColor("Color", ColorRGBA.Green);
@@ -157,14 +157,14 @@ We assume that you have loaded a model with a material `mat`.
 
 Then you can add a switch to toggle the model's wireframe on and off, like this:
 
-.  Create a key input trigger that switches between the two materials: E.g. we toggle when the T key is pressed: 
+.  Create a key input trigger that switches between the two materials: E.g. we toggle when the T key is pressed:
 [source,java]
 ----
     inputManager.addMapping("toggle wireframe", new KeyTrigger(KeyInput.KEY_T));
     inputManager.addListener(actionListener, "toggle wireframe");
 ----
 
-.  Now add the toggle action to the action listener 
+.  Now add the toggle action to the action listener
 [source,java]
 ----
 
@@ -174,20 +174,20 @@ Then you can add a switch to toggle the model's wireframe on and off, like this:
       // toggle wireframe
       if (name.equals("toggle wireframe") && !pressed) {
         wireframe = !wireframe; // toggle boolean
-        mat.getAdditionalRenderState().setWireframe(wireframe); 
+        mat.getAdditionalRenderState().setWireframe(wireframe);
       }
       // else ... other input tests.
     }
   };
 ----
 
-.  Alternatively you could traverse over the whole scene and toggle for all Geometry objects in there if you don't want to create a new SceneProcessor 
+.  Alternatively you could traverse over the whole scene and toggle for all Geometry objects in there if you don't want to create a new SceneProcessor
 [source,java]
 ----
 
   private ActionListener actionListener = new ActionListener() {
-    boolean wireframe = false; 
-    
+    boolean wireframe = false;
+
     @Override
     public void onAction(String name, boolean pressed, float tpf) {
       // toggle wireframe
@@ -198,7 +198,7 @@ Then you can add a switch to toggle the model's wireframe on and off, like this:
             if (spatial instanceof Geometry)
               ((Geometry)spatial).getMaterial().getAdditionalRenderState().setWireframe(wireframe);
           }
-        }); 
+        });
       }
       // else ... other input tests.
     }
@@ -215,8 +215,8 @@ To display the wireframe of the entire scene instead on one material at a time,
 
 [source,java]
 ----
-public class WireProcessor implements SceneProcessor {    
-    
+public class WireProcessor implements SceneProcessor {
+
     RenderManager renderManager;
     Material wireMaterial;
 
@@ -225,7 +225,7 @@ public class WireProcessor implements SceneProcessor {
         wireMaterial.setColor("Color", ColorRGBA.Blue);
         wireMaterial.getAdditionalRenderState().setWireframe(true);
     }
-    
+
     public void initialize(RenderManager rm, ViewPort vp) {
         renderManager = rm;
     }
@@ -238,7 +238,7 @@ public class WireProcessor implements SceneProcessor {
         return renderManager != null;
     }
 
-    public void preFrame(float tpf) {        
+    public void preFrame(float tpf) {
     }
 
     public void postQueue(RenderQueue rq) {
@@ -252,7 +252,7 @@ public class WireProcessor implements SceneProcessor {
     public void cleanup() {
         renderManager.setForcedMaterial(null);
     }
-    
+
 }
 ----
 

+ 26 - 26
src/docs/asciidoc/jme3/advanced/effects_overview.adoc

@@ -1,6 +1,6 @@
 = jME3 Special Effects Overview
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: documentation, effect, light, water
 :relfileprefix: ../../
@@ -13,8 +13,8 @@ jME3 supports several types of special effects: Post-Processor Filters, ScenePro
 
 == Sample Code
 
-*  There is one `com.jme3.effect.ParticleEmitter` class for all Particle Systems. 
-*  There is one `com.jme3.post.FilterPostProcessor` class and several `com.jme3.post.filters.*` classes (all Filters have `*Filter` in their names). 
+*  There is one `com.jme3.effect.ParticleEmitter` class for all Particle Systems.
+*  There is one `com.jme3.post.FilterPostProcessor` class and several `com.jme3.post.filters.*` classes (all Filters have `*Filter` in their names).
 *  There are several `SceneProcessor` classes in various packages, including e.g. `com.jme3.shadow.*` and `com.jme3.water.*` (SceneProcessor have `*Processor` or `*Renderer` in their names).
 
 
@@ -45,7 +45,7 @@ public class MyGame extends SimpleApplication {
 
 public class MyGame extends SimpleApplication {
     private BasicShadowRenderer bsr;
-    
+
     public void simpleInitApp() {
         bsr = new BasicShadowRenderer(assetManager, 1024);
         bsr.setDirection(new Vector3f(.3f, -0.5f, -0.5f));
@@ -63,7 +63,7 @@ public class MyGame extends SimpleApplication {
 public class MyGame extends SimpleApplication {
     private FilterPostProcessor fpp; // one FilterPostProcessor per app
     private SomeFilter sf;           // one or more Filters per app
-    
+
     public void simpleInitApp() {
         fpp = new FilterPostProcessor(assetManager);
         viewPort.addProcessor(fpp); // add one FilterPostProcessor to viewPort
@@ -78,11 +78,11 @@ public class MyGame extends SimpleApplication {
 == Water
 
 
-image::jme3/advanced/water-post.png[water-post.png,with="150",height="100",align="right"]
+image::jme3/advanced/water-post.png[water-post.png,width="150",height="100",align="right"]
 
-image::jme3/advanced/water.png[water.png,with="150",height="100",align="right"]
+image::jme3/advanced/water.png[water.png,width="150",height="100",align="right"]
 
-The jMonkeyEngine's <<jme3/advanced/water#,&quot;SeaMonkey&quot; WaterFilter>> simulates ocean waves, foam, including cool underwater caustics. 
+The jMonkeyEngine's <<jme3/advanced/water#,&quot;SeaMonkey&quot; WaterFilter>> simulates ocean waves, foam, including cool underwater caustics.
 Use the SimpleWaterProcessor (SceneProcessor) for small, limited bodies of water, such as puddles, drinking troughs, pools, fountains.
 
 See also the link:http://jmonkeyengine.org/2011/01/15/new-advanced-water-effect-for-jmonkeyengine-3[Rendering Water as Post-Process Effect] announcement with video.
@@ -91,9 +91,9 @@ See also the link:http://jmonkeyengine.org/2011/01/15/new-advanced-water-effect-
 *  link:http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/water/TestSimpleWater.java[jme3/src/test/jme3test/water/TestSimpleWater.java] – SimpleWaterProcessor (SceneProcessor)
 
 
-image::jme3/advanced/water-reflection-muddy.png[water-reflection-muddy.png,with="150",height="100",align="right"]
+image::jme3/advanced/water-reflection-muddy.png[water-reflection-muddy.png,width="150",height="100",align="right"]
 
-image::jme3/advanced/underwater2.jpg[underwater2.jpg,with="150",height="100",align="right"]
+image::jme3/advanced/underwater2.jpg[underwater2.jpg,width="150",height="100",align="right"]
 
 
 *  link:http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/water/TestPostWater.java[jme3/src/test/jme3test/water/TestPostWater.java] – WaterFilter
@@ -106,9 +106,9 @@ image::jme3/advanced/underwater2.jpg[underwater2.jpg,with="150",height="100",ali
 === Depth of Field Blur
 
 
-image::jme3/advanced/dof-blur.png[dof-blur.png,with="150",height="100",align="right"]
+image::jme3/advanced/dof-blur.png[dof-blur.png,width="150",height="100",align="right"]
 
-image::jme3/advanced/light-scattering-filter.png[light-scattering-filter.png,with="150",height="100",align="right"]
+image::jme3/advanced/light-scattering-filter.png[light-scattering-filter.png,width="150",height="100",align="right"]
 
 
 *  link:http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/post/TestDepthOfField.java[jme3/src/test/jme3test/post/TestDepthOfField.java] – DepthOfFieldFilter
@@ -133,9 +133,9 @@ image::jme3/advanced/light-scattering-filter.png[light-scattering-filter.png,wit
 == Light and Shadows
 
 
-image::jme3/advanced/tanlglow1.png[tanlglow1.png,with="150",height="100",align="right"]
+image::jme3/advanced/tanlglow1.png[tanlglow1.png,width="150",height="100",align="right"]
 
-image::jme3/advanced/shadow-sponza-ssao.png[shadow-sponza-ssao.png,with="150",height="100",align="right"]
+image::jme3/advanced/shadow-sponza-ssao.png[shadow-sponza-ssao.png,width="150",height="100",align="right"]
 
 
 
@@ -153,9 +153,9 @@ image::jme3/advanced/shadow-sponza-ssao.png[shadow-sponza-ssao.png,with="150",he
 *  More details: <<jme3/advanced/light_and_shadow#,Light and Shadow>>
 
 
-image::jme3/advanced/shadow.png[shadow.png,with="150",height="100",align="right"]
+image::jme3/advanced/shadow.png[shadow.png,width="150",height="100",align="right"]
 
-image::jme3/advanced/light-sources.png[light-sources.png,with="150",height="100",align="right"]
+image::jme3/advanced/light-sources.png[light-sources.png,width="150",height="100",align="right"]
 
 
 
@@ -171,7 +171,7 @@ image::jme3/advanced/light-sources.png[light-sources.png,with="150",height="100"
 == Special: Glass, Metal, Dissolve, Toon
 
 
-image::jme3/advanced/toon-dino.png[toon-dino.png,with="150",height="100",align="right"]
+image::jme3/advanced/toon-dino.png[toon-dino.png,width="150",height="100",align="right"]
 
 
 
@@ -189,20 +189,20 @@ image::jme3/advanced/toon-dino.png[toon-dino.png,with="150",height="100",align="
 === User Contributed
 
 
-image::jme3/advanced/shaderblow_light1.jpg[shaderblow_light1.jpg,with="78",height="150",align="right"]
+image::jme3/advanced/shaderblow_light1.jpg[shaderblow_light1.jpg,width="78",height="150",align="right"]
 
-image::jme3/advanced/shaderblow_glass.jpg[shaderblow_glass.jpg,with="80",height="150",align="right"]
+image::jme3/advanced/shaderblow_glass.jpg[shaderblow_glass.jpg,width="80",height="150",align="right"]
 
-image::jme3/advanced/shaderblow_matcap.jpg[shaderblow_matcap.jpg,with="150",height="150",align="right"]
+image::jme3/advanced/shaderblow_matcap.jpg[shaderblow_matcap.jpg,width="150",height="150",align="right"]
 
-image::jme3/advanced/shaderblow_light2.jpg[shaderblow_light2.jpg,with="66",height="150",align="right"]
+image::jme3/advanced/shaderblow_light2.jpg[shaderblow_light2.jpg,width="66",height="150",align="right"]
 
 
 <<sdk/plugin/shaderblow#,ShaderBlow - GLSL Shader Library>>
 
 *  LightBlow Shader – blend material texture maps
 *  FakeParticleBlow Shader – jet, fire effect
-*  ToonBlow Shader – Toon Shading, toon edges 
+*  ToonBlow Shader – Toon Shading, toon edges
 *  Dissolve Shader – Scifi teleportation/dissolve effect
 *  MatCap Shader – Gold, metals, glass, toons…!
 *  Glass Shader – Glass
@@ -219,14 +219,14 @@ Thanks for your awesome contributions! Keep them coming!
 == Particle Emitters: Explosions, Fire, Smoke
 
 
-image::jme3/advanced/explosion-5.png[explosion-5.png,with="150",height="100",align="right"]
+image::jme3/advanced/explosion-5.png[explosion-5.png,width="150",height="100",align="right"]
 
-image::jme3/advanced/particle.png[particle.png,with="150",height="100",align="right"]
+image::jme3/advanced/particle.png[particle.png,width="150",height="100",align="right"]
 
 <<jme3/advanced/particle_emitters#,Particle emitter effects>> are highly configurable and can have any texture. They can simulate smoke, dust, leaves, meteors, snowflakes, mosquitos, fire, explosions, clusters, embers, sparks…
 
 *  link:http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestExplosionEffect.java[jme3/src/test/jme3test/effect/TestExplosionEffect.java] – debris, flame, flash, shockwave, smoke, sparks
-*  link:http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestPointSprite.java[jme3/src/test/jme3test/effect/TestPointSprite.java] – cluster of points 
+*  link:http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestPointSprite.java[jme3/src/test/jme3test/effect/TestPointSprite.java] – cluster of points
 *  link:http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/effect/TestMovingParticle.java[jme3/src/test/jme3test/effect/TestMovingParticle.java] – dust, smoke
 '''
 

+ 3 - 3
src/docs/asciidoc/jme3/advanced/endless_terraingrid.adoc

@@ -1,6 +1,6 @@
 = Endless Terrain
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -48,7 +48,7 @@ HeightMapGrid adds the possibility of loading terrain tiles on demand instead of
 == Motivation
 
 
-image::wp-uploads/2011/06/grid-tiles.jpg[grid-tiles.jpg,with="130",height="130",align="right"]
+image::wp-uploads/2011/06/grid-tiles.jpg[grid-tiles.jpg,width="130",height="130",align="right"]
 
 After playing around with the terrain in jME3, soon comes the requirement of having larger explorable lands. Increasing the size of one TerrainQuad leads to more memory usage, while it will still be easy to reach the worlds boundaries. That’s why TerrainGrid was designed. It extends the TerraindQuad class and uses 4 HeightMaps (dark blue) as the four sub-quad. This means that a terrain of size 513 will use tiles of 257. Also an LRUCache is built into the terrain package, so surrounding tiles (green) can be pre-cached on a different thread, lowering the loading time. The quads are updated as the camera approaches the boundary of the light blue section.
 

+ 13 - 13
src/docs/asciidoc/jme3/advanced/hud.adoc

@@ -1,6 +1,6 @@
 = Head-Up Display (HUD)
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: gui, display, documentation, hud
 :relfileprefix: ../../
@@ -9,7 +9,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
 
-image::http://www.jmonkeyengine.com/wp-content/uploads/2010/10/grapplinghook.jpg[grapplinghook.jpg,with="256",height="192",align="right"]
+image::http://www.jmonkeyengine.com/wp-content/uploads/2010/10/grapplinghook.jpg[grapplinghook.jpg,width="256",height="192",align="right"]
 
 
 A HUD (Head-Up Display) is part of a game's visual user interface. It's an overlay that displays additional information as (typically) 2-dimensional text or icons on the screen, on top of the 3D scene. Not all games have, or need a HUD. To avoid breaking the immersion and cluttering the screen, only use a HUD if it is the only way to convey certain information.
@@ -38,7 +38,7 @@ a|Full-featured interactive user interface. +Includes buttons, effects, controls
 a|Steeper learning curve.
 
 a|Use user contributed +++<abbr title="Graphical User Interface">GUI</abbr>+++ libraries such as <<jme3/contributions/tonegodgui#,tonegodgui>> or link:http://hub.jmonkeyengine.org/t/lemur-api-documentation/27209[Lemur]:
-a|Both have many features that would be difficult to do with Nifty +Includes buttons, effects, controls. +New features are still being released 
+a|Both have many features that would be difficult to do with Nifty +Includes buttons, effects, controls. +New features are still being released
 a|Are not necessarily guaranteed future updates, not as well documented
 
 |===
@@ -48,20 +48,20 @@ Using the +++<abbr title="Graphical User Interface">GUI</abbr>+++ Node is the de
 
 == Simple HUD: GUI Node
 
-You already know the `rootNode` that holds the 3-dimensional scene graph. jME3 also offers a 2-dimension (orthogonal) node, the `guiNode`. 
+You already know the `rootNode` that holds the 3-dimensional scene graph. jME3 also offers a 2-dimension (orthogonal) node, the `guiNode`.
 
 This is how you use the guiNode for HUDs:
 
 *  Create a +++<abbr title="Graphical User Interface">GUI</abbr>+++ element: a BitmapText or Picture object.
-*  Attach the element to the guiNode. 
-*  Place the element in the orthogonal render queue using `setQueueBucket(Bucket.Gui)`. 
+*  Attach the element to the guiNode.
+*  Place the element in the orthogonal render queue using `setQueueBucket(Bucket.Gui)`.
 
 The BitmapTexts and Pictures appear as 2 dimensional element on the screen.
 
 
 [TIP]
 ====
-By default, the guiNode has some scene graph statistics attached. To clear the guiNode before you attach your own +++<abbr title="Graphical User Interface">GUI</abbr>+++ elements, use the following methods: 
+By default, the guiNode has some scene graph statistics attached. To clear the guiNode before you attach your own +++<abbr title="Graphical User Interface">GUI</abbr>+++ elements, use the following methods:
 
 [source,java]
 ----
@@ -93,12 +93,12 @@ When you set the last boolean in setImage() to true, the alpha channel of your i
 
 === Displaying Text in the HUD
 
-You use `com.jme3.font.BitmapText` to display text on the screen. 
+You use `com.jme3.font.BitmapText` to display text on the screen.
 
 [source,java]
 ----
 
-BitmapText hudText = new BitmapText(guiFont, false);          
+BitmapText hudText = new BitmapText(guiFont, false);
 hudText.setSize(guiFont.getCharSet().getRenderedSize());      // font size
 hudText.setColor(ColorRGBA.Blue);                             // font color
 hudText.setText("You can write any string here");             // the text
@@ -125,7 +125,7 @@ hudText = new BitmapText(myFont, false);
 
 === Displaying Geometries in the HUD
 
-It is technically possible to attach Quads and 3D Geometries to the HUD. They show up as flat, static +++<abbr title="Graphical User Interface">GUI</abbr>+++ elements. The size unit for the guiNode is pixels, not world units. If you attach a Geometry that uses a lit Material, you must add a light to the guiNode. 
+It is technically possible to attach Quads and 3D Geometries to the HUD. They show up as flat, static +++<abbr title="Graphical User Interface">GUI</abbr>+++ elements. The size unit for the guiNode is pixels, not world units. If you attach a Geometry that uses a lit Material, you must add a light to the guiNode.
 
 
 [IMPORTANT]
@@ -155,11 +155,11 @@ public void simpleUpdate(float tpf) {
 
 The recommended approach to create HUDs is using <<jme3/advanced/nifty_gui#,Nifty GUI>>.
 
-.  Lay out the +++<abbr title="Graphical User Interface">GUI</abbr>+++ in one or several Nifty XML or Java files. 
+.  Lay out the +++<abbr title="Graphical User Interface">GUI</abbr>+++ in one or several Nifty XML or Java files.
 .  Write the controller classes in Java.
 .  Load the XML file with the controller object in your game's simpleInit() method.
 
-The advantage of Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++ is that it is well integrated into jME and the jMonkeyEngine SDK, and that it offers all the features that you expect from a professional modern user interface. 
+The advantage of Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++ is that it is well integrated into jME and the jMonkeyEngine SDK, and that it offers all the features that you expect from a professional modern user interface.
 
 For HUDs, you basically follow the same instructions as for creating a normal <<jme3/advanced/nifty_gui#,Nifty GUI>>, you just don't pause the game while the HUD is up.
 

+ 15 - 15
src/docs/asciidoc/jme3/advanced/jme3_shaders.adoc

@@ -1,6 +1,6 @@
 = JME3 and Shaders
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -23,7 +23,7 @@ There are multiple frequently used languages that you may encounter to code shad
 To keep it Simple: The Vertex shader is executed once for each vertex in the view, then the Fragment shader (also called the Pixel shader) is executed once for each pixel on the screen.+
 The main purpose of the Vertex shader is to compute the screen coordinate of a vertex (where this vertex will be displayed on screen) while the main purpose of the Fragment shader is to compute the color of a pixel.+
 This is a very simplified graphic to describe the call stack: +
-image:jme3/advanced/jme3andshaders.png[jme3andshaders.png,with="",height=""]+
+image:jme3/advanced/jme3andshaders.png[jme3andshaders.png,width="",height=""]+
 The main program sends mesh data to the vertex shader (vertex position in object space, normals, tangents, etc..). The vertex shader computes the screen position of the vertex and sends it to the Fragment shader. The fragment shader computes the color, and the result is displayed on screen or in a texture.
 +
 
@@ -43,7 +43,7 @@ There is a large panel of variable types to be used, for more information about
 === Spaces and Matrices
 
 To understand the coming example you must know about the different spaces in 3D computer graphics, and the matrices used to translate coordinate from one space to another.+
-image:jme3/advanced/jme3andshaders-1.png[jme3andshaders-1.png,with="",height=""]+
+image:jme3/advanced/jme3andshaders-1.png[jme3andshaders-1.png,width="",height=""]+
 The engine passes the object space coordinates to the vertex shader. We need to compute its position in projection space. To do that we transform the object space position by the WorldViewProjectionMatrix which is a combination of the World, View, Projection matrices (who would have guessed?).+
 +
 
@@ -143,7 +143,7 @@ The complete list of global uniforms that can be used in JME3 can be found link:
 JME3 uses some global uniforms for lighting :
 
 *  g_LightDirection (vec4) : the direction of the light
-**  use for SpotLight : x,y,z contain the world direction vector of the light, the w component contains the spotlight angle cosine 
+**  use for SpotLight : x,y,z contain the world direction vector of the light, the w component contains the spotlight angle cosine
 
 *  g_LightColor (vec4) : the color of the light
 *  g_LightPosition : the position of the light
@@ -197,7 +197,7 @@ For integer and floating point parameters, the define will contain the value tha
 For all other types of parameters, the value 1 is defined.+
 If no value is set for that parameter, the define is not declared in the shader.+
 
-Those material parameters will be sent from the engine to the shader as follows, 
+Those material parameters will be sent from the engine to the shader as follows,
 there are setXXXX methods for any type of uniform you want to pass.+
 
 [source,java]
@@ -242,7 +242,7 @@ We need to pass 2 new parameters to the Lighting.j3md definition, MaterialParame
 // Keying Map
 Texture2D KeyMap
 
-// Key Color 
+// Key Color
 Color KeyColor
 
 ----
@@ -319,28 +319,28 @@ GLSL 1.0 to 1.2 comes with built in attributes and uniforms (ie, gl_Vertex, gl_M
 a|GLSL 1.2 attributes
 a|JME3 equivalent
 
-<a|gl_Vertex	
+<a|gl_Vertex
 a|inPosition
 
-<a|gl_Normal	
+<a|gl_Normal
 a|inNormal
 
-<a|gl_Color	
+<a|gl_Color
 a|inColor
 
-<a|gl_MultiTexCoord0	
+<a|gl_MultiTexCoord0
 a|inTexCoord
 
-<a|gl_ModelViewMatrix	
+<a|gl_ModelViewMatrix
 a|g_WorldViewMatrix
 
-<a|gl_ProjectionMatrix	
+<a|gl_ProjectionMatrix
 a|g_ProjectionMatrix
 
-<a|gl_ModelViewProjectionMatrix	
+<a|gl_ModelViewProjectionMatrix
 a|g_WorldViewProjectionMatrix
 
-<a|gl_NormalMatrix	
+<a|gl_NormalMatrix
 a|g_NormalMatrix
 
 |===

+ 11 - 11
src/docs/asciidoc/jme3/advanced/jme3_srgbpipeline.adoc

@@ -1,6 +1,6 @@
 = Gamma Correction or sRGB pipline
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -33,7 +33,7 @@ This only apply to textures that will render colors on screen (basically diffuse
 
 this is the kind of difference you can have :+
 left is non corrected output, right is gamma corrected output.+
-image:http://i.imgur.com/uNL7vw8.png[uNL7vw8.png,with="",height=""]
+image:http://i.imgur.com/uNL7vw8.png[uNL7vw8.png,width="",height=""]
 +
 
 
@@ -57,7 +57,7 @@ Note that Gamma Correction is only available on desktop with LWJGL or JOGL rende
 ==== Turning Gamma Correction on/off
 
 You can turn Gamma Correction on and off using the AppSettings. There is a method setGammaCorrection(boolean) that changes the setting.
-use this in the main() method of your application : 
+use this in the main() method of your application :
 
 [source,java]
 ----
@@ -69,7 +69,7 @@ app.setSettings(settings);
 ----
 
 This setting is also exposed in the Settings dialog displayed when you launch a jME application.+
-image:http://i.imgur.com/Lya1ldH.png[Lya1ldH.png,with="400",height=""]
+image:http://i.imgur.com/Lya1ldH.png[Lya1ldH.png,width="400",height=""]
 
 
 [IMPORTANT]
@@ -82,7 +82,7 @@ This is a short hand to enable both linearization of input textures and Gamma co
 
 ===== Enabling output Gamma Correction
 
-You can enable or disable the Gamma correction of the rendered output by using 
+You can enable or disable the Gamma correction of the rendered output by using
 
 [source,java]
 ----
@@ -121,16 +121,16 @@ As with output gamma correction this will not give exact result, but the error i
 Not all image format have their sRGB equivalent, and only 8bit formats.
 Here is an exhaustive list of the supported format and there equivalent :
 
-*  RGB8 : GL_SRGB8           
+*  RGB8 : GL_SRGB8
 *  RGBA8 : GL_SRGB8_ALPHA8
-*  BGR8 : GL_SRGB8  
+*  BGR8 : GL_SRGB8
 *  ABGR8 : GL_SRGB8_ALPHA8
 *  Luminance8 : GL_SLUMINANCE8
 *  Luminance8Alpha8 : GL_SLUMINANCE8_ALPHA8
 *  DXT1 : GL_COMPRESSED_SRGB_S3TC_DXT1
 *  DXT1A : GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1
 *  DXT3 : GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3
-*  DXT5 : GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5  
+*  DXT5 : GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5
 
 
 [IMPORTANT]
@@ -146,7 +146,7 @@ Conventionally only the rgb channels are gamma corrected, as the alpha channel d
 [IMPORTANT]
 ====
 Only loaded images will be marked as in sRGB color space, when using assetManager.loadTexture or loadAsset.+
-The color space of an image created by code will have to be specified in the constructor or will be assumed as Linear if not specified. 
+The color space of an image created by code will have to be specified in the constructor or will be assumed as Linear if not specified.
 ====
 
 
@@ -167,7 +167,7 @@ For example here is how the NormalMap parameter is declared in the lighting mate
 
 ----
 
-When a texture is assigned to this material param by using material.setTexture(“NormalMap, myNormalTexture), the color space of this texture's image will be forced to linear. 
+When a texture is assigned to this material param by using material.setTexture(“NormalMap, myNormalTexture), the color space of this texture's image will be forced to linear.
 So if you make your own material and want to use Gamma Correction, make sure you properly mark your textures as in the proper color space.
 
 This can sound complicated, but you just have to answer this question :  Does my image represent color data? if the answer is no, then you have to set the -Linear flag.

+ 18 - 18
src/docs/asciidoc/jme3/advanced/level_of_detail.adoc

@@ -1,21 +1,21 @@
 = Level of Detail (LOD) Optimization
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
-A mesh with a high level of detail has lots of polygons and looks good close up. But when the mesh is further away (and the detail is not visible), the high-polygon count slows down performance unnecessarily. 
+A mesh with a high level of detail has lots of polygons and looks good close up. But when the mesh is further away (and the detail is not visible), the high-polygon count slows down performance unnecessarily.
 
 One solution for this problem is to use high-detail meshes for objects close to the camera, and low-detail meshes for objects far from the camera. As the player moves through the scene, you must keep replacing close objects by more detailed meshes, and far objects by less detailed meshes. The goal is to keep few high-quality slow-rendering objects in the foreground, and many low-quality fast-rendering objects in the background. (Experienced users can compare this approach to <<jme3/advanced/terrain#,JME's TerraMonkey terrain system>>, which internally uses the specialized GeoMipMapping algorithm to generate a terrain's Levels of Detail.)
 
-You see now why you may want to be able to generate Levels of Detail for complex Geometries automatically. JME3 supports a Java implementation of the Ogre engine's LOD generator (originally by Péter Szücs and Stan Melax): You use link:https://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/tools/jme3tools/optimize/LodGenerator.java[jme3tools.optimize.LodGenerator] in conjunction with link:https://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/scene/control/LodControl.java[com.jme3.scene.control.LodControl]. 
+You see now why you may want to be able to generate Levels of Detail for complex Geometries automatically. JME3 supports a Java implementation of the Ogre engine's LOD generator (originally by Péter Szücs and Stan Melax): You use link:https://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/tools/jme3tools/optimize/LodGenerator.java[jme3tools.optimize.LodGenerator] in conjunction with link:https://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/core/com/jme3/scene/control/LodControl.java[com.jme3.scene.control.LodControl].
 
-For a demo, run link:http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/stress/TestLodGeneration.java[TestLodGeneration.java] from <<sdk/sample_code#,JmeTests>>, then press +/- and spacebar to experiment. The following screenshots show a monkey model with three reduced Levels of Detail: 
+For a demo, run link:http://code.google.com/p/jmonkeyengine/source/browse/trunk/engine/src/test/jme3test/stress/TestLodGeneration.java[TestLodGeneration.java] from <<sdk/sample_code#,JmeTests>>, then press +/- and spacebar to experiment. The following screenshots show a monkey model with three reduced Levels of Detail:
 
-image::jme3/advanced/jmonkey-lod.gif[jmonkey-lod.gif,with="",height="",align="center"]
+image::jme3/advanced/jmonkey-lod.gif[jmonkey-lod.gif,width="",height="",align="center"]
 
 
 
@@ -44,11 +44,11 @@ a|0.0f - 1.0f
 
 a|LodGenerator.TriangleReductionMethod.PROPORTIONAL
 a|Removes the given percentage of polygons from the mesh.
-a| 0.0f - 1.0f 
+a| 0.0f - 1.0f
 
 a|LodGenerator.TriangleReductionMethod.CONSTANT
 a|Removes the given number of polygons from the mesh.
-a| integer 
+a| integer
 
 |===
 
@@ -59,7 +59,7 @@ If you don't know which to choose, experiment. For example start by trying COLLA
 
 You must generate and cache several LODs for each mesh, ranging from many to few polygons. The LOD generator algorithm attempts to collaps vertices automatically, while avoiding ugly artifacts. The LOD generator doesn't generate new meshes, it only creates separate reduced index buffers for the more highly reduced levels.
 
-*  If you create geometries manually (3D models), use the SDK to generate LODs. 
+*  If you create geometries manually (3D models), use the SDK to generate LODs.
 *  If you create geometries programmatically, generate LODs from your Java code.
 
 
@@ -70,9 +70,9 @@ The SDK contains a user-friendly interface to generate LODs for a model (.j3o fi
 .  Open the Projects or Files window.
 .  Select the .j3o file in the Project Assets &gt; Models directory.
 .  Choose Window&gt;SceneExplorer if the SceneExplorer is not open. Info about the selected model is now displayed in the SceneExplorer.
-.  Right-click the model in SceneExplorer. Choose the “Tools &gt; Generate Levels of Detail menu. +image:jme3/advanced/jme-sdk-generate-lod-menu.png[The &quot;Tools&gt;Generate LOD&quot; context menu in the SceneExplorer,with="300",height="180"]
-.  The “Generate LOD settings wizard opens: + image:jme3/advanced/jme-sdk-generate-lod-window.png[The &quot;Generate LOD&quot; settings wizard,with="300",height="150"]
-.  Choose a reduction method and reduction values for one or more levels. +Tip: Enter higher reduction values for higher levels. 
+.  Right-click the model in SceneExplorer. Choose the “Tools &gt; Generate Levels of Detail menu. +image:jme3/advanced/jme-sdk-generate-lod-menu.png[The &quot;Tools&gt;Generate LOD&quot; context menu in the SceneExplorer,width="300",height="180"]
+.  The “Generate LOD settings wizard opens: + image:jme3/advanced/jme-sdk-generate-lod-window.png[The &quot;Generate LOD&quot; settings wizard,width="300",height="150"]
+.  Choose a reduction method and reduction values for one or more levels. +Tip: Enter higher reduction values for higher levels.
 .  Click Finish to generate the LODs for this model.
 
 The LODs are saved in the .j3o model file.
@@ -85,13 +85,13 @@ Choose Window>Properties if the Properties window is not open. Choose the genera
 
 
 
-image::jme3/advanced/jme-sdk-generate-lod-full.png[jme-sdk-generate-lod-full.png,with="",height="",align="center"]
+image::jme3/advanced/jme-sdk-generate-lod-full.png[jme-sdk-generate-lod-full.png,width="",height="",align="center"]
 
 
 
 === Generating LODs in Code
 
-The `jme3tools.optimize.LodGenerator` utility class helps you generate LODs for an arbitrary mesh (a Geometry object) programmatically from your Java code. You create and bake one LodGenerator for each Geometry. 
+The `jme3tools.optimize.LodGenerator` utility class helps you generate LODs for an arbitrary mesh (a Geometry object) programmatically from your Java code. You create and bake one LodGenerator for each Geometry.
 
 [source,java]
 ----
@@ -99,7 +99,7 @@ LodGenerator lod = new LodGenerator(geometry);
 lod.bakeLods(reductionMethod,reductionValue);
 ----
 
-The LODs are stored inside the Geometry object. 
+The LODs are stored inside the Geometry object.
 
 *Example:* How to generate an LOD of myPrettyGeo's mesh with 50% fewer polygons:
 
@@ -112,7 +112,7 @@ lod.bakeLods(LodGenerator.TriangleReductionMethod.PROPORTIONAL,0.5f);
 
 == Activate the LOD Control
 
-After generating the LODs for the geometry, you create and add a `com.jme3.scene.control.LodControl` to the geometry. Adding the LodControl activates the LOD optimizaton for this geometry. 
+After generating the LODs for the geometry, you create and add a `com.jme3.scene.control.LodControl` to the geometry. Adding the LodControl activates the LOD optimizaton for this geometry.
 
 [source,java]
 ----
@@ -121,7 +121,7 @@ myPrettyGeo.addControl(lc);
 rootNode.attachChild(myPrettyGeo);
 ----
 
-The LodControl internally gets the camera from the game's viewport to calculate the distance to this geometry. Depending on the distance, the LodControl selects an appropriate level of detail, and passes more (or less) detailed vertex data to the renderer. 
+The LodControl internally gets the camera from the game's viewport to calculate the distance to this geometry. Depending on the distance, the LodControl selects an appropriate level of detail, and passes more (or less) detailed vertex data to the renderer.
 
 
 == Impact on Quality and Speed
@@ -154,5 +154,5 @@ a|The higher the level, +the lower the quality.
 *  link:http://hub.jmonkeyengine.org/forum/topic/brand-new-lod-generator/[http://hub.jmonkeyengine.org/forum/topic/brand-new-lod-generator/]
 *  link:https://github.com/worldforge/ember/tree/master/src/components/ogre/lod[https://github.com/worldforge/ember/tree/master/src/components/ogre/lod]
 *  link:http://www.melax.com/polychop[http://www.melax.com/polychop]
-*  link:http://sajty.elementfx.com/progressivemesh/GSoC2012.pdf[http://sajty.elementfx.com/progressivemesh/GSoC2012.pdf] 
+*  link:http://sajty.elementfx.com/progressivemesh/GSoC2012.pdf[http://sajty.elementfx.com/progressivemesh/GSoC2012.pdf]
 *  <<jme3/advanced/terrain#,JME3 TerraMonkey Terrain>>

+ 21 - 21
src/docs/asciidoc/jme3/advanced/loading_screen.adoc

@@ -1,6 +1,6 @@
 = loading_screen
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -16,12 +16,12 @@ link:http://sourceforge.net/apps/mediawiki/nifty-gui/index.php?title=Create_your
 This example will use the existing hello terrain as an example.
 It will require these 2 images inside Assets/Interface/ (save them as border.png and inner.png respectively)
 
-image:jme3/advanced/inner1.png[inner1.png,with="",height=""]
-image:jme3/advanced/border1.png[border1.png,with="",height=""]
+image:jme3/advanced/inner1.png[inner1.png,width="",height=""]
+image:jme3/advanced/border1.png[border1.png,width="",height=""]
 
 This is the progress bar at 90%:
 
-image:jme3/advanced/loadingscreen.png[loadingscreen.png,with="",height=""]
+image:jme3/advanced/loadingscreen.png[loadingscreen.png,width="",height=""]
 
 nifty_loading.xml
 
@@ -32,15 +32,15 @@ nifty_loading.xml
 <nifty>
     <useStyles filename="nifty-default-styles.xml" />
     <useControls filename="nifty-default-controls.xml" />
-  
+
     <controlDefinition name = "loadingbar" controller = "jme3test.TestLoadingScreen">
-        <image filename="Interface/border.png" childLayout="absolute" 
+        <image filename="Interface/border.png" childLayout="absolute"
                imageMode="resize:15,2,15,15,15,2,15,2,15,2,15,15">
             <image id="progressbar" x="0" y="0" filename="Interface/inner.png" width="32px" height="100%"
                    imageMode="resize:15,2,15,15,15,2,15,2,15,2,15,15" />
         </image>
     </controlDefinition>
-    
+
     <screen id="start" controller = "jme3test.TestLoadingScreen">
         <layer id="layer" childLayout="center">
             <panel id = "panel2" height="30%" width="50%" align="center" valign="center" childLayout="vertical"
@@ -51,20 +51,20 @@ nifty_loading.xml
             </panel>
         </layer>
     </screen>
-    
+
     <screen id="loadlevel" controller = "jme3test.TestLoadingScreen">
         <layer id="loadinglayer" childLayout="center" backgroundColor="#000000">
             <panel id = "loadingpanel" childLayout="vertical" align="center" valign="center" height="32px" width="70%">
                 <control name="loadingbar" align="center" valign="center" width="100%" height="100%" />
-                <control id="loadingtext" name="label" align="center" 
+                <control id="loadingtext" name="label" align="center"
                          text="                                                  "/>
             </panel>
         </layer>
     </screen>
-    
+
     <screen id="end" controller = "jme3test.TestLoadingScreen">
     </screen>
-    
+
 </nifty>
 
 ----
@@ -79,7 +79,7 @@ A custom control is created, which represents the progress bar.
 ----
 
     <controlDefinition name = "loadingbar" controller = "jme3test.TestLoadingScreen">
-        <image filename="Interface/border.png" childLayout="absolute" 
+        <image filename="Interface/border.png" childLayout="absolute"
                imageMode="resize:15,2,15,15,15,2,15,2,15,2,15,15">
             <image id="progressbar" x="0" y="0" filename="Interface/inner.png" width="32px" height="100%"
                    imageMode="resize:15,2,15,15,15,2,15,2,15,2,15,15"/>
@@ -126,7 +126,7 @@ This screen displays our custom progress bar control with a text control
 
 == Creating the bindings to use the Nifty XML
 
-There are 3 main ways to update a progress bar. To understand why these methods are necessary, an understanding of the graphics pipeline is needed. 
+There are 3 main ways to update a progress bar. To understand why these methods are necessary, an understanding of the graphics pipeline is needed.
 
 Something like this in a single thread will not work:
 
@@ -220,7 +220,7 @@ public class TestLoadingScreen extends SimpleApplication implements ScreenContro
             if (frameCount == 1) {
                 Element element = nifty.getScreen("loadlevel").findElementByName("loadingtext");
                 textRenderer = element.getRenderer(TextRenderer.class);
-                
+
                 mat_terrain = new Material(assetManager, "Common/MatDefs/Terrain/Terrain.j3md");
                 mat_terrain.setTexture("Alpha", assetManager.loadTexture("Textures/Terrain/splat/alphamap.png"));
                 setProgress(0.2f, "Loading grass");
@@ -290,7 +290,7 @@ public class TestLoadingScreen extends SimpleApplication implements ScreenContro
         int pixelWidth = (int) (MIN_WIDTH + (progressBarElement.getParent().getWidth() - MIN_WIDTH) * progress);
         progressBarElement.setConstraintWidth(new SizeValue(pixelWidth + "px"));
         progressBarElement.getParent().layoutElements();
-        
+
         textRenderer.setText(loadingText);
     }
 
@@ -416,9 +416,9 @@ public class TestLoadingScreen1 extends SimpleApplication implements ScreenContr
             }
             //check if the execution on the other thread is done
             if (loadFuture.isDone()) {
-                //these calls have to be done on the update loop thread, 
+                //these calls have to be done on the update loop thread,
                 //especially attaching the terrain to the rootNode
-                //after it is attached, it's managed by the update loop thread 
+                //after it is attached, it's managed by the update loop thread
                 // and may not be modified from any other thread anymore!
                 nifty.gotoScreen("end");
                 nifty.exit();
@@ -485,7 +485,7 @@ public class TestLoadingScreen1 extends SimpleApplication implements ScreenContr
             TerrainLodControl control = new TerrainLodControl(terrain, cameras);
             terrain.addControl(control);
             setProgress(1f, "Loading complete");
-            
+
             return null;
         }
     };
@@ -542,8 +542,8 @@ public class TestLoadingScreen1 extends SimpleApplication implements ScreenContr
 
     public void onFocus(boolean getFocus) {
     }
-    
-    
+
+
     @Override
     public void stop() {
         super.stop();

+ 24 - 24
src/docs/asciidoc/jme3/advanced/mesh.adoc

@@ -1,6 +1,6 @@
 = Polygon Meshes
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: spatial, node, mesh, geometry, scenegraph
 :relfileprefix: ../../
@@ -9,7 +9,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
 
-image::jme3/dolphin-mesh.png[dolphin-mesh.png,with="",height="",align="right"]
+image::jme3/dolphin-mesh.png[dolphin-mesh.png,width="",height="",align="right"]
 
 
 All visible game elements in a scene, whether it is a Model or a Shape, are made up of polygon meshes. JME3 has a com.jme3.scene.Mesh class that represents all meshes.
@@ -18,16 +18,16 @@ All visible game elements in a scene, whether it is a Model or a Shape, are made
 *  Each mesh has a unique ID: `getId()`
 *  Meshes have transformations: Location (local translation), rotation, scale.
 *  Meshes have a bounding volume. jME3 can detect intersections (that is, non-physical collisions) between meshes, or between meshes and 2D elements such as rays: `collideWith()`.
-*  Meshes are locked with `setStatic()` and unlocked with `setDynamic()`. 
-**  Static Meshes cannot be modified, but are more optimized and faster (they can be precalculated). 
-**  Dynamic Meshes can be modified live, but are not optimized and slower. 
+*  Meshes are locked with `setStatic()` and unlocked with `setDynamic()`.
+**  Static Meshes cannot be modified, but are more optimized and faster (they can be precalculated).
+**  Dynamic Meshes can be modified live, but are not optimized and slower.
 
 
 You have several options when <<jme3/advanced/spatial#,creating Geometries from meshes>>:
 
-*  Use built-in <<jme3/advanced/shape#,Shape>>s as meshes; 
-*  Load <<jme3/advanced/3d_models#,3D models>> (that is, meshes created in external applications); or 
-*  Create free-form <<jme3/advanced/custom_meshes#,custom meshes>> programmatically. 
+*  Use built-in <<jme3/advanced/shape#,Shape>>s as meshes;
+*  Load <<jme3/advanced/3d_models#,3D models>> (that is, meshes created in external applications); or
+*  Create free-form <<jme3/advanced/custom_meshes#,custom meshes>> programmatically.
 
 
 == Vertex Buffer
@@ -42,46 +42,46 @@ The VertexBuffer contains a particular type of geometry data used by Meshes. Eve
 a|Vertex Buffer Type
 a|Description
 
-a|Type.Position 
+a|Type.Position
 a|Position of the vertex (3 floats)
 
-a|Type.Index 
+a|Type.Index
 a| Specifies the index buffer, must contain integer data.
 
-a|Type.TexCoord 
+a|Type.TexCoord
 a| Texture coordinate
 
-a|Type.TexCoord2 
+a|Type.TexCoord2
 a| Texture coordinate #2
 
-a|Type.Normal 
+a|Type.Normal
 a| Normal vector, normalized.
 
-a|Type.Tangent 
+a|Type.Tangent
 a| Tangent vector, normalized.
 
-a|Type.Binormal 
+a|Type.Binormal
 a| Binormal vector, normalized.
 
-a|Type.Color 
+a|Type.Color
 a| Color and Alpha (4 floats)
 
-a|Type.Size 
+a|Type.Size
 a|The size of the point when using point buffers.
 
-a|Type.InterleavedData 
+a|Type.InterleavedData
 a| Specifies the source data for various vertex buffers when interleaving is used.
 
-a|Type.BindPosePosition 
+a|Type.BindPosePosition
 a| Inital vertex position, used with animation.
 
-a|Type.BindPoseNormal 
+a|Type.BindPoseNormal
 a| Inital vertex normals, used with animation
 
-a|Type.BoneWeight 
+a|Type.BoneWeight
 a| Bone weights, used with animation
 
-a|Type.BoneIndex 
+a|Type.BoneIndex
 a| Bone indices, used with animation
 
 |===
@@ -160,4 +160,4 @@ a|?
 
 === Level of Detail
 
-Optionally, custom meshes can have a LOD (level of detail optimization) that renders more or less detail, depending on the distance of the mesh from the camera. You have to specify several vertex buffers, one for each level of detail you want (very far away with few details, close up with all details, and something in the middle). Use `setLodLevels(VertexBuffer[] lodLevels)`. 
+Optionally, custom meshes can have a LOD (level of detail optimization) that renders more or less detail, depending on the distance of the mesh from the camera. You have to specify several vertex buffers, one for each level of detail you want (very far away with few details, close up with all details, and something in the middle). Use `setLodLevels(VertexBuffer[] lodLevels)`.

+ 8 - 8
src/docs/asciidoc/jme3/advanced/mouse_picking.adoc

@@ -1,6 +1,6 @@
 = Mouse Picking
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: documentation, node, ray, click, collision, keyinput, input
 :relfileprefix: ../../
@@ -10,18 +10,18 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 Mouse picking means that the user clicks an object in the scene to select it, or to interact with it otherwise. Games use picking to implement aiming and shooting, casting spells, picking up objects, selecting targets, dragging and moving objects, etc. Mouse picking can be done using fixed crosshairs, or using the mouse pointer.
 
-image:jme3/advanced/mouse-picking.png[mouse-picking.png,with="",height=""]
+image:jme3/advanced/mouse-picking.png[mouse-picking.png,width="",height=""]
 
 See <<jme3/advanced/input_handling#,Input Handling>> for details on how to define the necessary input triggers, input mappings, and input listeners.
 
 
 == Pick a Target Using Fixed Crosshairs
 
-The following `pick target` input mapping implements an action that determines what a user clicked. It assumes that the mouse pointer is invisible and there are crosshairs painted in the center of the screen. It assumes that the user aims the crosshairs at an object in the scene and clicks. You use Ray Casting to identify the geometry that was picked by the user. Use this method together with a first-person flyCam. 
+The following `pick target` input mapping implements an action that determines what a user clicked. It assumes that the mouse pointer is invisible and there are crosshairs painted in the center of the screen. It assumes that the user aims the crosshairs at an object in the scene and clicks. You use Ray Casting to identify the geometry that was picked by the user. Use this method together with a first-person flyCam.
 
 .  Activate the first-person camera: `flyCam.setEnabled(true);`
 .  Keep mouse pointer invisible using `inputManager.setCursorVisible(false)`.
-.  Map the `pick target` action to a MouseButtonTrigger. 
+.  Map the `pick target` action to a MouseButtonTrigger.
 .  Implement the action in the Listener.
 
 The following example rotates Spatials named “Red Box or “Blue Box when they are clicked. Modify this code to do whatever your game needs to do with the identified target (shoot it, take it, move it, etc).
@@ -66,13 +66,13 @@ The following example rotates Spatials named “Red Box or “Blue Box when they
 
 == Pick a Target Using the Mouse Pointer
 
-The following `pick target` input mapping implements an action that determines what a user clicked. It assumes that the mouse pointer is visible, and the user aims the cursor at an object in the scene. You use ray casting to determine the geometry that was picked by the user. 
+The following `pick target` input mapping implements an action that determines what a user clicked. It assumes that the mouse pointer is visible, and the user aims the cursor at an object in the scene. You use ray casting to determine the geometry that was picked by the user.
 
 *Note:* Picking with a visible mouse pointer implies that your application can no longer use the default flyCam where the MouseAxisTrigger rotates the camera. You have to deactivate the flyCam mappings and provide custom mappings. Either different inputs rotate the camera, or the camera is fixed.
 
-.  Map the `pick target` action to a MouseButtonTrigger. 
+.  Map the `pick target` action to a MouseButtonTrigger.
 .  Make the mouse pointer visible using `inputManager.setCursorVisible(true)`.
-.  Remap the inputs for camera rotation, or deactivate camera rotation. 
+.  Remap the inputs for camera rotation, or deactivate camera rotation.
 .  Implement the action in the Listener.
 
 The following example rotates Spatials named “Red Box or “Blue Box when they are clicked. Modify this code to do whatever your game needs to do with the identified target (shoot it, take it, move it, etc).

+ 8 - 8
src/docs/asciidoc/jme3/advanced/nifty_gui.adoc

@@ -1,6 +1,6 @@
 = Creating JME3 User Interfaces with Nifty GUI
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: gui, documentation, nifty, hud
 :relfileprefix: ../../
@@ -9,14 +9,14 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
 
-image::jme3/advanced/nifty-gui-13.png[nifty-gui-13.png,with="276",height="217",align="left"]
+image::jme3/advanced/nifty-gui-13.png[nifty-gui-13.png,width="276",height="217",align="left"]
 
 
-You may want your players to press a button to save a game, you want a scrolling text field for highscores, a text label to display the score, drop-downs to select keymap preferences, or checkboxes to specify multi-media options. Usually you solve these tasks by using Swing controls. Although it is possible to embed a <<jme3/advanced/swing_canvas#,jME3 canvas>> in a Swing +++<abbr title="Graphical User Interface">GUI</abbr>+++, a 3D game typically runs full-screen, or in a window of its own. 
+You may want your players to press a button to save a game, you want a scrolling text field for highscores, a text label to display the score, drop-downs to select keymap preferences, or checkboxes to specify multi-media options. Usually you solve these tasks by using Swing controls. Although it is possible to embed a <<jme3/advanced/swing_canvas#,jME3 canvas>> in a Swing +++<abbr title="Graphical User Interface">GUI</abbr>+++, a 3D game typically runs full-screen, or in a window of its own.
 
 This document introduces you to link:http://nifty-gui.lessvoid.com/[Nifty GUI], a Java library for building interactive graphical user interfaces (GUIs) for games or similar applications. Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++ (the `de.lessvoid.nifty` package) is well integrated with jME3 through the `com.jme3.niftygui` package. You define the base +++<abbr title="Graphical User Interface">GUI</abbr>+++ layout in XML, and control it dynamically from your Java code. The necessary JAR libraries are included in your jME3 download, you do not need to install anything extra. (Just make sure they are on the classpath.)
 
-*  link:http://vimeo.com/25637085[Video demo of Nifty GUI 1.3] 
+*  link:http://vimeo.com/25637085[Video demo of Nifty GUI 1.3]
 
 
 == Tutorial Overview
@@ -38,7 +38,7 @@ Learn to add a Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++ to
 
 == Must Know: Nifty GUI Concepts
 
-image:jme3/advanced/nifty-screen-layer-panel.png[nifty-screen-layer-panel.png,with="",height=""]
+image:jme3/advanced/nifty-screen-layer-panel.png[nifty-screen-layer-panel.png,width="",height=""]
 
 Nifty GUIs are made up of the following *elements*:
 
@@ -107,7 +107,7 @@ If you want to disable the nifty log lines, add this code after you created nift
 [source]
 ----
 
-Logger.getLogger("de.lessvoid.nifty").setLevel(Level.SEVERE); 
-Logger.getLogger("NiftyInputEventHandlingLog").setLevel(Level.SEVERE); 
+Logger.getLogger("de.lessvoid.nifty").setLevel(Level.SEVERE);
+Logger.getLogger("NiftyInputEventHandlingLog").setLevel(Level.SEVERE);
 
 ----

+ 59 - 59
src/docs/asciidoc/jme3/advanced/nifty_gui_java_layout.adoc

@@ -1,6 +1,6 @@
 = Laying Out the GUI in Java
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: gui, documentation, nifty, hud
 :relfileprefix: ../../
@@ -31,12 +31,12 @@ Sample project
 
 
 
-Just so you get a quick picture what Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++'s Java Syntax looks like, here is the most basic example. It creates a screen with a layer and a panel that contains a button. 
+Just so you get a quick picture what Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++'s Java Syntax looks like, here is the most basic example. It creates a screen with a layer and a panel that contains a button.
 
 [source,java]
 ----
 package mygame;
- 
+
 import com.jme3.app.SimpleApplication;
 import com.jme3.niftygui.NiftyJmeDisplay;
 import de.lessvoid.nifty.Nifty;
@@ -47,15 +47,15 @@ import de.lessvoid.nifty.controls.button.builder.ButtonBuilder;
 import de.lessvoid.nifty.screen.DefaultScreenController;
 
 /**
- * @author iamcreasy  
+ * @author iamcreasy
 */
 public class Main extends SimpleApplication {
- 
+
     public static void main(String[] args) {
         Main app = new Main();
         app.start();
     }
- 
+
     @Override
     public void simpleInitApp() {
     NiftyJmeDisplay niftyDisplay = NiftyJmeDisplay.newNiftyJmeDisplay(
@@ -63,22 +63,22 @@ public class Main extends SimpleApplication {
     Nifty nifty = niftyDisplay.getNifty();
     guiViewPort.addProcessor(niftyDisplay);
     flyCam.setDragToRotate(true);
- 
+
     nifty.loadStyleFile("nifty-default-styles.xml");
     nifty.loadControlFile("nifty-default-controls.xml");
- 
+
     // <screen>
     nifty.addScreen("Screen_ID", new ScreenBuilder("Hello Nifty Screen"){{
-        controller(new DefaultScreenController()); // Screen properties       
- 
+        controller(new DefaultScreenController()); // Screen properties
+
         // <layer>
         layer(new LayerBuilder("Layer_ID") {{
             childLayoutVertical(); // layer properties, add more...
- 
+
             // <panel>
             panel(new PanelBuilder("Panel_ID") {{
-               childLayoutCenter(); // panel properties, add more...               
- 
+               childLayoutCenter(); // panel properties, add more...
+
                 // GUI elements
                 control(new ButtonBuilder("Button_ID", "Hello Nifty"){{
                     alignCenter();
@@ -86,16 +86,16 @@ public class Main extends SimpleApplication {
                     height("5%");
                     width("15%");
                 }});
- 
-                //.. add more GUI elements here              
- 
+
+                //.. add more GUI elements here
+
             }});
             // </panel>
           }});
         // </layer>
       }}.build(nifty));
     // </screen>
- 
+
     nifty.gotoScreen("Screen_ID"); // start the screen
     }
 }
@@ -105,7 +105,7 @@ public class Main extends SimpleApplication {
 == Implement Your GUI Layout
 
 
-image::jme3/advanced/gui-layout-draft.png[gui-layout-draft.png,with="",height="",align="right"]
+image::jme3/advanced/gui-layout-draft.png[gui-layout-draft.png,width="",height="",align="right"]
 
 
 In this tutorial, you recreate the same screen as in the Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++ XML example.
@@ -124,7 +124,7 @@ nifty.addScreen("start", new ScreenBuilder("start"){{
     controller(new DefaultScreenController());
     // <!-- ... -->
   }}.build(nifty));
- 
+
 nifty.addScreen("hud", new ScreenBuilder("hud"){{
     controller(new DefaultScreenController());
     // <!-- ... -->
@@ -132,7 +132,7 @@ nifty.addScreen("hud", new ScreenBuilder("hud"){{
 
 ----
 
-Every Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++ must have a start screen. The others (in this example, the HUD screen) are optional. 
+Every Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++ must have a start screen. The others (in this example, the HUD screen) are optional.
 
 
 === Make Layers
@@ -144,27 +144,27 @@ The following Java code shows how we add layers to the start screen and HUD scre
 
 nifty.addScreen("start", new ScreenBuilder("start"){{
         controller(new DefaultScreenController());
- 
+
          // layer added
          layer(new LayerBuilder("background") {{
             childLayoutCenter();
-            backgroundColor("#000f");  
- 
+            backgroundColor("#000f");
+
             // <!-- ... -->
          }});
- 
+
          layer(new LayerBuilder("foreground") {{
                 childLayoutVertical();
-                backgroundColor("#0000");        
- 
+                backgroundColor("#0000");
+
             // <!-- ... -->
          }});
          // layer added
- 
+
       }}.build(nifty));
 ----
 
-Repeat the same, but use 
+Repeat the same, but use
 
 [source]
 ----
@@ -173,7 +173,7 @@ nifty.addScreen("hud", new ScreenBuilder("hud"){{
 
  for the HUD screen.
 
-In a layer, you can now add panels and arrange them. Panels are containers that mark the areas where you want to display text, images, or controls (buttons etc) later. 
+In a layer, you can now add panels and arrange them. Panels are containers that mark the areas where you want to display text, images, or controls (buttons etc) later.
 
 
 === Make Panels
@@ -194,7 +194,7 @@ A panel is the inner-most container (that will contain the actual content: text,
         layer(new LayerBuilder("foreground") {{
                 childLayoutVertical();
                 backgroundColor("#0000");
-                
+
             // panel added
             panel(new PanelBuilder("panel_top") {{
                 childLayoutCenter();
@@ -304,7 +304,7 @@ Try the sample. Remember to activate a screen using `nifty.gotoScreen(“start);
 The result should look as follows:
 
 
-image::jme3/advanced/nifty-gui-panels.png[nifty-gui-panels.png,with="",height="",align="center"]
+image::jme3/advanced/nifty-gui-panels.png[nifty-gui-panels.png,width="",height="",align="center"]
 
 
 
@@ -325,7 +325,7 @@ The start-background.png image is a fullscreen background picture. In the `start
         layer(new LayerBuilder("background") {{
             childLayoutCenter();
             backgroundColor("#000f");
-            
+
             // add image
             image(new ImageBuilder() {{
                 filename("Interface/tutorial/start-background.png");
@@ -345,7 +345,7 @@ The hud-frame.png image is a transparent frame that we use as HUD decoration. In
         layer(new LayerBuilder("background") {{
             childLayoutCenter();
             backgroundColor("#000f");
-            
+
             // add image
             image(new ImageBuilder() {{
                 filename("Interface/tutorial/hud-frame.png");
@@ -354,7 +354,7 @@ The hud-frame.png image is a transparent frame that we use as HUD decoration. In
         }});
 ----
 
-The face1.png image is an image that you want to use as a status icon. 
+The face1.png image is an image that you want to use as a status icon.
 In the `hud` screen's `foreground` layer, add the following image element:
 
 [source,java]
@@ -364,7 +364,7 @@ In the `hud` screen's `foreground` layer, add the following image element:
                     backgroundColor("#44f8");
                     height("15%");
                     width("100%");
-                    
+
                     // add image
                     image(new ImageBuilder() {{
                         filename("Interface/tutorial/face1.png");
@@ -373,7 +373,7 @@ In the `hud` screen's `foreground` layer, add the following image element:
                         height("50%");
                         width("30%");
                     }});
-                    
+
                 }});
 ----
 
@@ -394,7 +394,7 @@ The game title is a typical example of static text. In the `start` screen, add t
                 backgroundColor("#f008");
                 height("25%");
                 width("75%");
-                
+
                 // add text
                 text(new TextBuilder() {{
                     text("My Cool Game");
@@ -402,7 +402,7 @@ The game title is a typical example of static text. In the `start` screen, add t
                     height("100%");
                     width("100%");
                 }});
-                
+
             }});
 ----
 
@@ -457,11 +457,11 @@ In the `hud` screen's `foreground` layer, add the following text element:
                     backgroundColor("#00f8");
                     height("15%");
                     width("100%");
-                    
+
                     control(new LabelBuilder(){{
-                        color("#000"); 
-                        text("123"); 
-                        width("100%"); 
+                        color("#000");
+                        text("123");
+                        width("100%");
                         height("100%");
                     }});
 ----
@@ -482,7 +482,7 @@ Our +++<abbr title="Graphical User Interface">GUI</abbr>+++ plan asks for two bu
                     backgroundColor("#44f8");
                     height("50%");
                     width("50%");
-                    
+
                     // add control
                     control(new ButtonBuilder("StartButton", "Start") {{
                       alignCenter();
@@ -490,7 +490,7 @@ Our +++<abbr title="Graphical User Interface">GUI</abbr>+++ plan asks for two bu
                       height("50%");
                       width("50%");
                     }});
-                    
+
                 }});
 
                 panel(new PanelBuilder("panel_bottom_right") {{
@@ -521,12 +521,12 @@ Nifty additionally offers many customizable controls such as check boxes, text f
 
 == Intermediate Result
 
-When you preview this code in the jMonkeyEngine SDK, our tutorial demo should looks as follows: A start screen with two buttons, and a game screen with a simple HUD frame and a blue cube (which stands for any jME3 game content). 
+When you preview this code in the jMonkeyEngine SDK, our tutorial demo should looks as follows: A start screen with two buttons, and a game screen with a simple HUD frame and a blue cube (which stands for any jME3 game content).
 
 *Tip:* Remove all lines that set background colors, you only needed them to see the arrangement.
 
 
-image::jme3/advanced/nifty-gui-simple-demo.png[nifty-gui-simple-demo.png,with="",height="",align="center"]
+image::jme3/advanced/nifty-gui-simple-demo.png[nifty-gui-simple-demo.png,width="",height="",align="center"]
 
 
 
@@ -536,27 +536,27 @@ Before initializing the nifty screens, you set up properties and register media.
 [cols="2", options="header"]
 |===
 
-a| Nifty Method 
-a| Description 
+a| Nifty Method
+a| Description
 
-a| registerSound(“mysound, “Interface/abc.wav); 
-a| 
+a| registerSound(“mysound, “Interface/abc.wav);
+a|
 
-a| registerMusic(“mymusic, “Interface/xyz.ogg); 
-a| 
+a| registerMusic(“mymusic, “Interface/xyz.ogg);
+a|
 
-a| registerMouseCursor(“mypointer, “Interface/abc.png, 5, 4); 
-a| 
+a| registerMouseCursor(“mypointer, “Interface/abc.png, 5, 4);
+a|
 
-a| registerEffect(?); 
-a| ? 
+a| registerEffect(?);
+a| ?
 
 a| setDebugOptionPanelColors(true);
-a| Highlight all panels, makes it easier to arrange them. 
+a| Highlight all panels, makes it easier to arrange them.
 
 |===
 
-Example: 
+Example:
 
 [source,java]
 ----

+ 4 - 4
src/docs/asciidoc/jme3/advanced/nifty_gui_overlay.adoc

@@ -1,6 +1,6 @@
 = Integrating Nifty GUI: Overlay
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: gui, documentation, nifty, hud
 :relfileprefix: ../../
@@ -15,7 +15,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 .  <<jme3/advanced/nifty_gui_java_interaction#,Interact with the GUI from Java>>
 
 
-image::jme3/advanced/nifty-gui-example.png[nifty-gui-example.png,with="300",height="200",align="left"]
+image::jme3/advanced/nifty-gui-example.png[nifty-gui-example.png,width="300",height="200",align="left"]
 
 
 Typically, you define a key (for example escape) that switches the +++<abbr title="Graphical User Interface">GUI</abbr>+++ on and off. The +++<abbr title="Graphical User Interface">GUI</abbr>+++ can be a StartScreen, OptionsScreen, CharacterCreationScreen, etc. While the +++<abbr title="Graphical User Interface">GUI</abbr>+++ is up, you pause the running game, and then overlay the +++<abbr title="Graphical User Interface">GUI</abbr>+++. You also must switch to a different set of user inputs while the game is paused, so the player can use the mouse pointer and keyboard to interact with the +++<abbr title="Graphical User Interface">GUI</abbr>+++.
@@ -57,7 +57,7 @@ Currently you do not have a ScreenController – we will create one in the next
 nifty.fromXml("Interface/helloworld.xml", "start", new MySettingsScreen());
 ----
 
-The `MySettingsScreen` class is a custom de.lessvoid.nifty.screen.ScreenController in which you will implement your +++<abbr title="Graphical User Interface">GUI</abbr>+++ behaviour. 
+The `MySettingsScreen` class is a custom de.lessvoid.nifty.screen.ScreenController in which you will implement your +++<abbr title="Graphical User Interface">GUI</abbr>+++ behaviour.
 
 If you have many screens or you want to keep them organized in separate files there is a method available that will just load an additional XML file. The content of the files are
 simply added to whatever XML data has been loaded before.

+ 6 - 6
src/docs/asciidoc/jme3/advanced/nifty_gui_projection.adoc

@@ -1,6 +1,6 @@
 = Integrating Nifty GUI: Projection
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: gui, documentation, nifty, hud, texture
 :relfileprefix: ../../
@@ -15,12 +15,12 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 .  <<jme3/advanced/nifty_gui_java_interaction#,Interact with the GUI from Java>>
 
 
-image::jme3/advanced/nifty-gui.png[nifty-gui.png,with="310",height="250",align="left"]
+image::jme3/advanced/nifty-gui.png[nifty-gui.png,width="310",height="250",align="left"]
 
 
-Typically you define a key (for example escape) to switch the +++<abbr title="Graphical User Interface">GUI</abbr>+++ on and off. Then you <<jme3/advanced/nifty_gui_overlay#,overlay>> the running game with the +++<abbr title="Graphical User Interface">GUI</abbr>+++ (you will most likely pause the game then). 
+Typically you define a key (for example escape) to switch the +++<abbr title="Graphical User Interface">GUI</abbr>+++ on and off. Then you <<jme3/advanced/nifty_gui_overlay#,overlay>> the running game with the +++<abbr title="Graphical User Interface">GUI</abbr>+++ (you will most likely pause the game then).
 
-Alternatively, you can also project the +++<abbr title="Graphical User Interface">GUI</abbr>+++ as a texture onto a mesh textures inside the game. Allthough this looks cool and “immersive, this approach is rarely used since it is difficult to record clicks this way. You can only interact with this projected +++<abbr title="Graphical User Interface">GUI</abbr>+++ by keyboard, or programmatically. You can select input fields using the arrow keys, and trigger actions using the return key. 
+Alternatively, you can also project the +++<abbr title="Graphical User Interface">GUI</abbr>+++ as a texture onto a mesh textures inside the game. Allthough this looks cool and “immersive, this approach is rarely used since it is difficult to record clicks this way. You can only interact with this projected +++<abbr title="Graphical User Interface">GUI</abbr>+++ by keyboard, or programmatically. You can select input fields using the arrow keys, and trigger actions using the return key.
 
 This +++<abbr title="Graphical User Interface">GUI</abbr>+++ projection variant is less commonly used than the +++<abbr title="Graphical User Interface">GUI</abbr>+++ overlay variant. Usecases for +++<abbr title="Graphical User Interface">GUI</abbr>+++ projection are, for example, a player avatar using an in-game computer screen.
 
@@ -32,7 +32,7 @@ This +++<abbr title="Graphical User Interface">GUI</abbr>+++ projection variant
 
 == Projecting the User Interface Onto a Texture
 
-You can project the Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++ onto a texture, load the texture into a material, and assign it to a Geometry (Quads or Boxes are best). 
+You can project the Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++ onto a texture, load the texture into a material, and assign it to a Geometry (Quads or Boxes are best).
 
 [source,java]
 ----

+ 35 - 35
src/docs/asciidoc/jme3/advanced/nifty_gui_xml_layout.adoc

@@ -1,6 +1,6 @@
 = Laying out the GUI in XML
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: gui, documentation, nifty, hud
 :relfileprefix: ../../
@@ -20,7 +20,7 @@ You can “draw the +++<abbr title="Graphical User Interface">GUI</abbr>+++ to t
 == Plan Your GUI Layout
 
 
-image::jme3/advanced/gui-layout-draft.png[gui-layout-draft.png,with="",height="",align="right"]
+image::jme3/advanced/gui-layout-draft.png[gui-layout-draft.png,width="",height="",align="right"]
 
 
 In this tutorial, you want to create two game screens: An out-of-game StartScreen that the players see before the game starts; and an in-game link:http://en.wikipedia.org/wiki/HUD_%28video_gaming%29[HUD] that displays info during the game. Before writing code, you plan the +++<abbr title="Graphical User Interface">GUI</abbr>+++ layout, either on paper or in a graphic application.
@@ -28,9 +28,9 @@ In this tutorial, you want to create two game screens: An out-of-game StartScree
 The StartScreen contains:
 
 *  The background layer has a centered layout and contains an image.
-*  The top layer has a vertical layout, containing 3 panels: 
-**  The top panel contains a label with the game title, 
-**  The middle panel contains a text field with the game description. 
+*  The top layer has a vertical layout, containing 3 panels:
+**  The top panel contains a label with the game title,
+**  The middle panel contains a text field with the game description.
 **  The bottom panel has a horizontal layout and contains two more panels:
 ***  The left panel contains a Start button.
 ***  The right panel contains a Quit button.
@@ -40,7 +40,7 @@ The StartScreen contains:
 The HUD contains:
 
 *  The background layer has a centered layout, and contains the partially transparent HUD image.
-*  The top layer has a horizontal layout, containing 2 panels: 
+*  The top layer has a horizontal layout, containing 2 panels:
 **  The left panel as transparent spacer.
 **  The right panel has a vertical layout containing 2 panels, a label and an image.
 
@@ -49,7 +49,7 @@ The HUD contains:
 == Implement Your GUI Layout
 
 
-image::jme3/advanced/nifty-screen-layer-panel.png[nifty-screen-layer-panel.png,with="366",height="136",align="right"]
+image::jme3/advanced/nifty-screen-layer-panel.png[nifty-screen-layer-panel.png,width="366",height="136",align="right"]
 
 
 Create an empty *screen*.xml file in the `assets/Interface/` directory of your project. ( Rightclick on Interface → New → Other… → +++<abbr title="Graphical User Interface">GUI</abbr>+++ → Empty NiftyGui file)
@@ -78,7 +78,7 @@ The following minimal XML file contains a start screen and a HUD screen. (Neithe
 
 ----
 
-Every Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++ must have a start screen. The others (in this example, the HUD screen) are optional. 
+Every Nifty +++<abbr title="Graphical User Interface">GUI</abbr>+++ must have a start screen. The others (in this example, the HUD screen) are optional.
 
 *Note:* In the following examples, the XML schema header is abbreviated to just `&lt;nifty&gt;`.
 
@@ -112,7 +112,7 @@ Delete all from the file and add following code:
 
 ----
 
-In a layer, you can now add panels and arrange them. Panels are containers that mark the areas where you want to display text, images, or controls (buttons etc) later. 
+In a layer, you can now add panels and arrange them. Panels are containers that mark the areas where you want to display text, images, or controls (buttons etc) later.
 
 
 === Make Panels
@@ -123,18 +123,18 @@ A panel is the inner-most container (that will contain the actual content: text,
 ----
 
       <panel id="panel_top" height="25%" width="75%" align="center" childLayout="center"
-             backgroundColor="#f008">  
+             backgroundColor="#f008">
       </panel>
       <panel id="panel_mid" height="50%" width="75%" align="center" childLayout="center"
-             backgroundColor="#0f08">  
+             backgroundColor="#0f08">
       </panel>
       <panel id="panel_bottom" height="25%" width="75%" align="center" childLayout="horizontal"
-             backgroundColor="#00f8">  
-        <panel id="panel_bottom_left" height="50%" width="50%" valign="center" childLayout="center" 
-             backgroundColor="#44f8">  
+             backgroundColor="#00f8">
+        <panel id="panel_bottom_left" height="50%" width="50%" valign="center" childLayout="center"
+             backgroundColor="#44f8">
         </panel>
         <panel id="panel_bottom_right" height="50%" width="50%" valign="center" childLayout="center"
-             backgroundColor="#88f8">  
+             backgroundColor="#88f8">
         </panel>
       </panel>
 
@@ -145,20 +145,20 @@ The following panels go into in the `hud` screen's `foreground` layer:
 [source,xml]
 ----
 
-      <panel id="panel_left" width="80%" height="100%" childLayout="vertical" 
-      backgroundColor="#0f08">  
+      <panel id="panel_left" width="80%" height="100%" childLayout="vertical"
+      backgroundColor="#0f08">
         <!-- spacer -->
       </panel>
-      <panel id="panel_right" width="20%" height="100%" childLayout="vertical" 
-      backgroundColor="#00f8" >  
+      <panel id="panel_right" width="20%" height="100%" childLayout="vertical"
+      backgroundColor="#00f8" >
         <panel id="panel_top_right1" width="100%" height="15%" childLayout="center"
-             backgroundColor="#00f8">  
+             backgroundColor="#00f8">
         </panel>
         <panel id="panel_top_right2" width="100%" height="15%" childLayout="center"
-             backgroundColor="#44f8">  
+             backgroundColor="#44f8">
         </panel>
         <panel id="panel_bot_right" width="100%" height="70%" valign="center"
-             backgroundColor="#88f8">  
+             backgroundColor="#88f8">
         </panel>
       </panel>
 
@@ -167,7 +167,7 @@ The following panels go into in the `hud` screen's `foreground` layer:
 The result should look as follows:
 
 
-image::jme3/advanced/nifty-gui-panels.png[nifty-gui-panels.png,with="",height="",align="center"]
+image::jme3/advanced/nifty-gui-panels.png[nifty-gui-panels.png,width="",height="",align="center"]
 
 
 
@@ -219,7 +219,7 @@ In the `hud` screen's `foreground` layer, add the following image element:
 
         <panel id="panel_top_right2" width="100%" height="15%" childLayout="center">
             <image filename="Interface/face1.png" valign="center" align="center" height="50%" width="30%" >
-            </image>  
+            </image>
         </panel>
 
 ----
@@ -234,7 +234,7 @@ The game title is a typical example of static text. In the `start` screen, add t
 [source,xml]
 ----
 
-      <panel id="panel_top" height="25%" width="75%" align="center" childLayout="center">  
+      <panel id="panel_top" height="25%" width="75%" align="center" childLayout="center">
           <text text="My Cool Game" font="Interface/Fonts/Default.fnt" width="100%" height="100%" />
       </panel>
 
@@ -245,9 +245,9 @@ For longer pieces of static text, such as an introduction, you can use wrap=“t
 [source,xml]
 ----
 
-      <panel id="panel_mid" height="50%" width="75%" align="center" childLayout="center">       
-        <text text="Here goes some text describing the game and the rules and stuff. Incidentally, 
-         the text is quite long and needs to wrap at the end of lines. ..." 
+      <panel id="panel_mid" height="50%" width="75%" align="center" childLayout="center">
+        <text text="Here goes some text describing the game and the rules and stuff. Incidentally,
+         the text is quite long and needs to wrap at the end of lines. ..."
         font="Interface/Fonts/Default.fnt" width="100%" height="100%" wrap="true" />
       </panel>
 
@@ -280,7 +280,7 @@ In the `hud` screen's `foreground` layer, add the following text element:
 [source,xml]
 ----
 
-        <panel id="panel_top_right" height="100%" width="15%" childLayout="center">  
+        <panel id="panel_top_right" height="100%" width="15%" childLayout="center">
             <control name="label" color="#000" text="123" width="100%" height="100%" />
         </panel>
 
@@ -296,12 +296,12 @@ Our +++<abbr title="Graphical User Interface">GUI</abbr>+++ plan asks for two bu
 [source,xml]
 ----
 
-        <panel id="panel_bottom_left" height="50%" width="50%" valign="center" childLayout="center">  
-          <control name="button" label="Start" id="StartButton" align="center" valign="center"> 
+        <panel id="panel_bottom_left" height="50%" width="50%" valign="center" childLayout="center">
+          <control name="button" label="Start" id="StartButton" align="center" valign="center">
           </control>
         </panel>
-        <panel id="panel_bottom_right" height="50%" width="50%" valign="center" childLayout="center">  
-          <control name="button" label="Quit" id="QuitButton" align="center" valign="center"> 
+        <panel id="panel_bottom_right" height="50%" width="50%" valign="center" childLayout="center">
+          <control name="button" label="Quit" id="QuitButton" align="center" valign="center">
           </control>
         </panel>
 
@@ -373,7 +373,7 @@ Nifty additionally offers many customizable controls such as check boxes, text f
 When you preview this code in the jMonkeyEngine SDK, our tutorial demo should looks as follows: A start screen with two buttons, and a game screen with a simple HUD frame and a blue cube (which stands for any jME3 game content).
 
 
-image::jme3/advanced/nifty-gui-simple-demo.png[nifty-gui-simple-demo.png,with="",height="",align="center"]
+image::jme3/advanced/nifty-gui-simple-demo.png[nifty-gui-simple-demo.png,width="",height="",align="center"]
 
 
 Compare this result with the layout draft above.

+ 19 - 19
src/docs/asciidoc/jme3/advanced/ogrecompatibility.adoc

@@ -1,6 +1,6 @@
 = Working Blender and OgreXML Versions
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -11,25 +11,25 @@ Here you can find working combinations of Blender and the OgreXML exporter, with
 [cols="3", options="header"]
 |===
 
-a| Blender Version 
-a| OgreXML Exporter Version 
-a| Notes 
+a| Blender Version
+a| OgreXML Exporter Version
+a| Notes
 
-a| 2.6.3 
-a| link:http://code.google.com/p/blender2ogre/downloads/list[0.5.8] 
-a| Root bone, no transforms on object, no envelopes 
+a| 2.6.3
+a| link:http://code.google.com/p/blender2ogre/downloads/list[0.5.8]
+a| Root bone, no transforms on object, no envelopes
 
-a| 2.6.2 
-a| link:http://code.google.com/p/blender2ogre/downloads/list[0.5.5] 
-a| Root bone, no transforms on object, no envelopes 
+a| 2.6.2
+a| link:http://code.google.com/p/blender2ogre/downloads/list[0.5.5]
+a| Root bone, no transforms on object, no envelopes
 
-a| 2.6.1 
-a| ? 
-<a|  
+a| 2.6.1
+a| ?
+<a|
 
-a| 2.6.0 
-a| ? 
-<a|  
+a| 2.6.0
+a| ?
+<a|
 
 |===
 
@@ -46,8 +46,8 @@ Tips for exporting animations through OgreXML correctly:
 
 Test Character - link:http://dl.dropbox.com/u/26887202/123/jme_blender/characterOgre26.zip[http://dl.dropbox.com/u/26887202/123/jme_blender/characterOgre26.zip]
 
-image:jme3/advanced/ogre_solved.jpg[ogre_solved.jpg,with="",height=""]
-image:jme3/advanced/ogre_solved2.png[ogre_solved2.png,with="",height=""]
+image:jme3/advanced/ogre_solved.jpg[ogre_solved.jpg,width="",height=""]
+image:jme3/advanced/ogre_solved2.png[ogre_solved2.png,width="",height=""]
 
 
 == Troubleshooting

+ 3 - 3
src/docs/asciidoc/jme3/advanced/open_game_finder.adoc

@@ -1,6 +1,6 @@
 = Open Game Finder
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: network
 :relfileprefix: ../../
@@ -52,7 +52,7 @@ The server is now running and ready to accept connections. +
 
 A client is now running, connects to the server, and displays a registration/login window.
 
-image::jme3/advanced/open-game-finder-1.png[open-game-finder-1.png,with="",height="",align="center"]
+image::jme3/advanced/open-game-finder-1.png[open-game-finder-1.png,width="",height="",align="center"]
 
 *Note:* You can run several clients on localhost for testing.
 

+ 98 - 98
src/docs/asciidoc/jme3/advanced/particle_emitters.adoc

@@ -1,6 +1,6 @@
 = Particle Emmitter Settings
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: documentation, effect
 :relfileprefix: ../../
@@ -9,7 +9,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
 You cannot create a 3D model for delicate things like fire, smoke, or explosions. Particle Emitters are quite an efficient solution to create these kinds of effects: The emitter renders a series of flat orthogonal images and manipulates them in a way that creates the illusion of a anything from a delicate smoke cloud to individual flames, etc.
-Creating an effect involves some trial and error to get the settings _just right_, and it's worth exploring the expressiveness of the options described below. 
+Creating an effect involves some trial and error to get the settings _just right_, and it's worth exploring the expressiveness of the options described below.
 
 
 [TIP]
@@ -18,32 +18,32 @@ Use the <<sdk/scene_explorer#,Scene Explorer>> in the <<sdk#,SDK>> to design and
 ====
 
 
-image:jme3/advanced/explosion-5.png[explosion-5.png,with="150",height="100"]  image:jme3/advanced/particle.png[particle.png,with="150",height="100"]  image:jme3/beginner/beginner-effect-fire.png[beginner-effect-fire.png,with="150",height="100"] image:jme3/advanced/butterfly-particle-emitter.png[butterfly-particle-emitter.png,with="150",height="100"]
+image:jme3/advanced/explosion-5.png[explosion-5.png,width="150",height="100"]  image:jme3/advanced/particle.png[particle.png,width="150",height="100"]  image:jme3/beginner/beginner-effect-fire.png[beginner-effect-fire.png,width="150",height="100"] image:jme3/advanced/butterfly-particle-emitter.png[butterfly-particle-emitter.png,width="150",height="100"]
 
 
 == Create an Emitter
 
-.  Create one emitter for each effect: 
+.  Create one emitter for each effect:
 [source,java]
 ----
 ParticleEmitter explosion = new ParticleEmitter(
 "My explosion effect", Type.Triangle, 30);
 ----
 
-.  Attach the emitter to the rootNode and position it in the scene: 
+.  Attach the emitter to the rootNode and position it in the scene:
 [source,java]
 ----
 rootNode.attachChild(explosion);
 explosion.setLocalTranslation(bomb.getLocalTranslation());
 ----
 
-.  Trigger the effect by calling 
+.  Trigger the effect by calling
 [source,java]
 ----
 explosion.emitAllParticles()
 ----
 
-.  End the effect by calling 
+.  End the effect by calling
 [source,java]
 ----
 explosion.killAllParticles()
@@ -62,72 +62,72 @@ Not all of these parameters are required for all kinds of effects. If you don't
 [cols="4", options="header"]
 |===
 
-<a| Parameter           
-<a| Method                
-a| Default 
-a| Description 
-
-<a| number              
-a| `setNumParticles()` 
-<a|  
-a| The maximum number of particles visible at the same time. Specified by user in constructor. 
-
-<a| emission rate       
-a| `setParticlesPerSec()` 
-a| 20 
-a| Density of the effect, how many new particles are emitted per second. +Set to zero to control the start/end of the effect. +Set to a number for a constantly running effect. 
-
-<a| size                
-a| `setStartSize()`, `setEndSize()` 
-a| 0.2f, 2f 
-a| The radius of the scaled sprite image. Set both to same value for constant size effect. +Set to different values for shrink/grow effect. 
-
-<a| color               
-a| `setStartColor()`, `setEndColor()` 
-a| gray 
-a| Controls how the opaque (non-black) parts of the texture are colorized. +Set both to the same color for single-colored effects (e.g. fog, debris). +Set both to different colors for a gradient effect (e.g. fire). 
-
-<a| direction/velocity  
-a| `getParticleInfluencer(). setInitialVelocity(initialVelocity)` 
-a| Vector3f(0,0,0) 
-a| A vector specifying the initial direction and speed of particles. The longer the vector, the faster. 
-
-<a| fanning out         
-a| `getParticleInfluencer(). setVelocityVariation(variation)` 
-a| 0.2f 
-a| How much the direction (`setInitialVelocity()`) can vary among particles. Use a value between 1 and 0 to create a directed swarm-like cloud of particles. +1 = Maximum variation, particles emit in random 360° directions (e.g. explosion, butterflies). +0.5f = particles are emitted within 180° of the initial direction. +0 = No variation, particles fly in a straight line in direction of start velocity (e.g. lasergun blasts). 
+<a| Parameter
+<a| Method
+a| Default
+a| Description
+
+<a| number
+a| `setNumParticles()`
+<a|
+a| The maximum number of particles visible at the same time. Specified by user in constructor.
+
+<a| emission rate
+a| `setParticlesPerSec()`
+a| 20
+a| Density of the effect, how many new particles are emitted per second. +Set to zero to control the start/end of the effect. +Set to a number for a constantly running effect.
+
+<a| size
+a| `setStartSize()`, `setEndSize()`
+a| 0.2f, 2f
+a| The radius of the scaled sprite image. Set both to same value for constant size effect. +Set to different values for shrink/grow effect.
+
+<a| color
+a| `setStartColor()`, `setEndColor()`
+a| gray
+a| Controls how the opaque (non-black) parts of the texture are colorized. +Set both to the same color for single-colored effects (e.g. fog, debris). +Set both to different colors for a gradient effect (e.g. fire).
+
+<a| direction/velocity
+a| `getParticleInfluencer(). setInitialVelocity(initialVelocity)`
+a| Vector3f(0,0,0)
+a| A vector specifying the initial direction and speed of particles. The longer the vector, the faster.
+
+<a| fanning out
+a| `getParticleInfluencer(). setVelocityVariation(variation)`
+a| 0.2f
+a| How much the direction (`setInitialVelocity()`) can vary among particles. Use a value between 1 and 0 to create a directed swarm-like cloud of particles. +1 = Maximum variation, particles emit in random 360° directions (e.g. explosion, butterflies). +0.5f = particles are emitted within 180° of the initial direction. +0 = No variation, particles fly in a straight line in direction of start velocity (e.g. lasergun blasts).
 
 a| direction +(pick one)
-a| `setFacingVelocity()` 
-a| false 
-a| true = Flying particles pitch in the direction they're flying (e.g. missiles). +false = Particles keep flying rotated the way they started (e.g. debris). 
+a| `setFacingVelocity()`
+a| false
+a| true = Flying particles pitch in the direction they're flying (e.g. missiles). +false = Particles keep flying rotated the way they started (e.g. debris).
 
 a| direction +(pick one)
-a| `setFaceNormal()` 
-a| Vector3f.NAN 
-a| Vector3f = Flying particles face in the given direction (e.g. horizontal shockwave faces up = Vector3f.UNIT_Y). +Vector3f.NAN = Flying particles face the camera. 
-
-<a| lifetime  
-a| `setLowLife()`, `setHighLife()` 
-a| 3f, 7f 
-a| The time period before a particle fades is set to a random value between minimum and maximum; minimum must be smaller than maximum. A minimum &lt; 1f makes the effect more busy, a higher minimum looks more steady. Use a maximum &lt; 1f for short bursts, and higher maxima for long lasting swarms or smoke. Set maximum and minimum to similar values to create an evenly spaced effect (e.g. fountain), set the to very different values to create a distorted effect (e.g. fire with individual long flames). 
-
-<a| spinning          
-a| `setRotateSpeed()` 
-a| 0f 
-a| 0 = Flying particles don't spin while flying (e.g. smoke, insects, controlled projectiles). +&gt; 0 = How fast particle spins while flying (e.g. debris, shuriken, missiles out of control). 
-
-<a| rotation          
-a| `setRandomAngle()` 
-a| false 
-a| true = The particle sprite is rotated at a random angle when it is emitted (e.g. explosion, debris). +false = Particles fly straight like you drew them in the sprite texture (e.g. insects). 
-
-<a| gravity           
-a| `setGravity()` 
-a| Vector3f(0.0f,0.1f,0.0f) 
-a| Particles fall in the direction of the vector (e.g. debris, sparks). +(0,0,0) = Particles keep flying in start direction (e.g. flames, zero-gravity explosion.) 
-
-<a| start area        
+a| `setFaceNormal()`
+a| Vector3f.NAN
+a| Vector3f = Flying particles face in the given direction (e.g. horizontal shockwave faces up = Vector3f.UNIT_Y). +Vector3f.NAN = Flying particles face the camera.
+
+<a| lifetime
+a| `setLowLife()`, `setHighLife()`
+a| 3f, 7f
+a| The time period before a particle fades is set to a random value between minimum and maximum; minimum must be smaller than maximum. A minimum &lt; 1f makes the effect more busy, a higher minimum looks more steady. Use a maximum &lt; 1f for short bursts, and higher maxima for long lasting swarms or smoke. Set maximum and minimum to similar values to create an evenly spaced effect (e.g. fountain), set the to very different values to create a distorted effect (e.g. fire with individual long flames).
+
+<a| spinning
+a| `setRotateSpeed()`
+a| 0f
+a| 0 = Flying particles don't spin while flying (e.g. smoke, insects, controlled projectiles). +&gt; 0 = How fast particle spins while flying (e.g. debris, shuriken, missiles out of control).
+
+<a| rotation
+a| `setRandomAngle()`
+a| false
+a| true = The particle sprite is rotated at a random angle when it is emitted (e.g. explosion, debris). +false = Particles fly straight like you drew them in the sprite texture (e.g. insects).
+
+<a| gravity
+a| `setGravity()`
+a| Vector3f(0.0f,0.1f,0.0f)
+a| Particles fall in the direction of the vector (e.g. debris, sparks). +(0,0,0) = Particles keep flying in start direction (e.g. flames, zero-gravity explosion.)
+
+<a| start area
 a|`setShape(new EmitterSphereShape( Vector3f.ZERO, 2f));`
 a|EmitterPointShape()
 a|By default, particles are emitted from the emitters location (a point). You can increase the emitter shape to occupy a sphere, so that the start point of new particles can be anywhere inside the sphere, which makes the effect a bit more irregular.
@@ -140,7 +140,7 @@ Build up you effect by specifying one parameter after the other. If you change s
 == Create an Effect Material
 
 
-image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/flash.png[flash.png,with="128",height="128",align="right"]
+image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/flash.png[flash.png,width="128",height="128",align="right"]
 
 
 Use the common Particle.j3md Material Definition and a texture to specify the shape of the particles. The shape is defined by the texture you provide and can be anything – debris, flames, smoke, mosquitoes, leaves, butterflies… be creative.
@@ -174,41 +174,41 @@ The following effect textures are available by default from `test-data.jar`. You
 [cols="3", options="header"]
 |===
 
-<a| Texture Path                     
-a| Dimension 
-a| Preview 
+<a| Texture Path
+a| Dimension
+a| Preview
 
-<a| Effects/Explosion/Debris.png     
-<a| 3*3  
-a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/Debris.png[Debris.png,with="32",height="32"] 
+<a| Effects/Explosion/Debris.png
+<a| 3*3
+a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/Debris.png[Debris.png,width="32",height="32"]
 
-<a| Effects/Explosion/flame.png      
-<a| 2*2  
-a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/flame.png[flame.png,with="32",height="32"] 
+<a| Effects/Explosion/flame.png
+<a| 2*2
+a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/flame.png[flame.png,width="32",height="32"]
 
-<a| Effects/Explosion/flash.png      
-<a| 2*2  
-a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/flash.png[flash.png,with="32",height="32"] 
+<a| Effects/Explosion/flash.png
+<a| 2*2
+a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/flash.png[flash.png,width="32",height="32"]
 
-a| Effects/Explosion/roundspark.png 
-<a| 1*1  
-a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/roundspark.png[roundspark.png,with="32",height="32"] 
+a| Effects/Explosion/roundspark.png
+<a| 1*1
+a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/roundspark.png[roundspark.png,width="32",height="32"]
 
-<a| Effects/Explosion/shockwave.png  
-<a| 1*1  
-a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/shockwave.png[shockwave.png,with="32",height="32"] 
+<a| Effects/Explosion/shockwave.png
+<a| 1*1
+a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/shockwave.png[shockwave.png,width="32",height="32"]
 
-a| Effects/Explosion/smoketrail.png 
-<a| 1*3  
-a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/smoketrail.png[smoketrail.png,with="32",height="32"] 
+a| Effects/Explosion/smoketrail.png
+<a| 1*3
+a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/smoketrail.png[smoketrail.png,width="32",height="32"]
 
-<a| Effects/Explosion/spark.png      
-<a| 1*1  
-a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/spark.png[spark.png,with="32",height="32"] 
+<a| Effects/Explosion/spark.png
+<a| 1*1
+a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Explosion/spark.png[spark.png,width="32",height="32"]
 
-<a| Effects/Smoke/Smoke.png          
-a| 1*15 
-a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Smoke/Smoke.png[Smoke.png,with="96",height="32"] 
+<a| Effects/Smoke/Smoke.png
+a| 1*15
+a| image:http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Effects/Smoke/Smoke.png[Smoke.png,width="96",height="32"]
 
 |===
 

+ 21 - 21
src/docs/asciidoc/jme3/advanced/pbr_part1.adoc

@@ -2,47 +2,47 @@
 
 I’ve been looking at Physically Based Rendering (PBR from now on) since a few weeks, because that’s what all the cool kids are talking about these days. I read almost all the interweb about it and finally somehow wrapped my head around the mechanics behind the concept.
 
-None of the papers I read gave me the epiphany though, the understanding came little by little, literally reading some of the papers 10 times. 
+None of the papers I read gave me the epiphany though, the understanding came little by little, literally reading some of the papers 10 times.
 
 The intent of this series of posts is first to brush up the concept of PBR from the artist point of view (the easy part :D), and then to explain the physical concepts behind it and what you have to understand as a developer.
 
-This paper aims to present PBR as I would explain it to my mother. You shouldn’t need a degree in image rendering theories, neither should you need to be a genius to understand what’s coming. 
+This paper aims to present PBR as I would explain it to my mother. You shouldn’t need a degree in image rendering theories, neither should you need to be a genius to understand what’s coming.
 
 There are a lot of papers out there, with a lot of complicated words and equations, that assume a solid background knowledge of image rendering, lighting, shading etc…
 
-I won’t assume this here. 
+I won’t assume this here.
 
-Of course, I’d like this to be as accurate as possible, so if you have more information, or if explanations are not clear, feel free to chime in. 
+Of course, I’d like this to be as accurate as possible, so if you have more information, or if explanations are not clear, feel free to chime in.
 
 *I’m an artist, I want to know what PBR is :*
 
 So you’re an artist, and have some experience in making assets for games. The most commonly used model for describing a material is the Phong reflection model (from link:https://en.wikipedia.org/wiki/Bui_Tuong_Phong[Bui Tuong Phong], a clever guy that died very young).
 
-This model describes how light reflects on a material by splitting it in 3 factors: Ambient color, Diffuse color, Specular color. This should sound familiar to 3D game artists. 
+This model describes how light reflects on a material by splitting it in 3 factors: Ambient color, Diffuse color, Specular color. This should sound familiar to 3D game artists.
 
-This model is a very rough approximation of what’s really going on when light hit a surface of a real life material, but until then it was pretty much enough for a video game. Of course there are dozens of other models and even modification of Phong model, but this one is the most used, and that’s the one we use in jMonkeyEngine. 
+This model is a very rough approximation of what’s really going on when light hit a surface of a real life material, but until then it was pretty much enough for a video game. Of course there are dozens of other models and even modification of Phong model, but this one is the most used, and that’s the one we use in jMonkeyEngine.
 
 The issue with this model is that it’s complicated to have a material that looks consistent under different lighting environment.
 
-   * Ambient is supposed to represent Ambient lighting, being some sort of omnipresent dim light, that tries to fake indirect lighting coming from reflection of light on the surrounding objects. 
-   * Diffuse is more straightforward: it’s the actual color of the object when it’s under a white light. 
+   * Ambient is supposed to represent Ambient lighting, being some sort of omnipresent dim light, that tries to fake indirect lighting coming from reflection of light on the surrounding objects.
+   * Diffuse is more straightforward: it’s the actual color of the object when it’s under a white light.
    * Specular represent the color of the reflected highlights, and the intensity is driven by a “shininess” parameter (at least in jME but that’s pretty common). The issue is that the specular color also drives the intensity because the brighter the color the more intense the specular will be.
 
-All of this leads to a lot of tweaking to look correct, and may not look as good as it should under a different lighting environment. It also relies heavily on an artist’s best guesses about the material. 
+All of this leads to a lot of tweaking to look correct, and may not look as good as it should under a different lighting environment. It also relies heavily on an artist’s best guesses about the material.
 
 So here comes Physically Based Rendering. Not that the previous one was not physically based…but whatever, that sounds pretty cool.
 
-Everybody has their own way to implement PBR, but every implementation share common goals and concepts. 
+Everybody has their own way to implement PBR, but every implementation share common goals and concepts.
 
 *Goals :*
 
    * Ease the artist’s material workflow.
-   * More “photo realistic” rendering. 
+   * More “photo realistic” rendering.
 
 *Concepts :*
 
    * Every surface has a reflection (specular); even the rougher ones at grazing angles.
-   * Energy conservation: a surface cannot reflect more light that it has received. 
+   * Energy conservation: a surface cannot reflect more light that it has received.
 
 This wraps up the entire concept but how does it translate in practice?
 
@@ -53,28 +53,28 @@ A material can now be described with 3 parameters :
    * It should not contain any shading information. Very often with phong model, Ambient Occlusion (AO) is baked into the diffuse map. Here Base color must be the raw color of the material
    * It does not only influence the diffuse color, but also the specular color of the material.
 
-*Metalness :* The degree of metallicity of the material. What does that mean? is your material rather metallic or rather not (non metallic materials are called dielectric materials in the literature). Some implementation calls that parameter “specular”, but I found it pretty misleading as it’s completely different as the specular we know today. In practice, just start out with extreme values to get the feel for it: 1 for metallic, 0 for dielectric. 
+*Metalness :* The degree of metallicity of the material. What does that mean? is your material rather metallic or rather not (non metallic materials are called dielectric materials in the literature). Some implementation calls that parameter “specular”, but I found it pretty misleading as it’s completely different as the specular we know today. In practice, just start out with extreme values to get the feel for it: 1 for metallic, 0 for dielectric.
 
-image::metalness.png[metalness,with="320",height="250",align="center"]
+image::metalness.png[metalness,width="320",height="250",align="center"]
 Here is the same material with metalness of 0 (dielectric) on the left and 1 (metallic) on the right.
 
-Of course there are intermediary values, but from my reading, most dielectric material should vary from 0.04 and 0.1, and metallic are usually 1. Those values are based on real life measures and you can find some references about them link:https://seblagarde.wordpress.com/2012/04/30/dontnod-specular-and-glossiness-chart/[here] and link:https://seblagarde.wordpress.com/2014/04/14/dontnod-physically-based-rendering-chart-for-unreal-engine-4/[here]. Note that those values are not subject to interpretation, and are “known” factors and artist may follow them if they want to keep realistic look. 
+Of course there are intermediary values, but from my reading, most dielectric material should vary from 0.04 and 0.1, and metallic are usually 1. Those values are based on real life measures and you can find some references about them link:https://seblagarde.wordpress.com/2012/04/30/dontnod-specular-and-glossiness-chart/[here] and link:https://seblagarde.wordpress.com/2014/04/14/dontnod-physically-based-rendering-chart-for-unreal-engine-4/[here]. Note that those values are not subject to interpretation, and are “known” factors and artist may follow them if they want to keep realistic look.
 
 *Roughness :* The degree of roughness of the material : Is your material smooth or rough. 0 means smooth, 1 means rough. Some implementations refer to this as Smoothness or Glossiness. That’s essentially the same except it’s the other way around. 1 is smooth and 0 is rough. I find the term “Roughness” pretty much self explanatory and doesn’t leave room for misinterpretation.
 
-image::Roughness.png[Roughness,with="320",height="250",align="center"]
-Here is the same material with different level of roughness from 0 (left) to 1 (right). As opposed to metalness, this parameter is very artist driven. The roughness of a material does not really depend on physics, it’s more related to micro scratches, wearing, etc… So that’s where artists should be creative! 
+image::Roughness.png[Roughness,width="320",height="250",align="center"]
+Here is the same material with different level of roughness from 0 (left) to 1 (right). As opposed to metalness, this parameter is very artist driven. The roughness of a material does not really depend on physics, it’s more related to micro scratches, wearing, etc… So that’s where artists should be creative!
 
 These parameters are the basics of PBR. Of course, each of them can be stored in a texture, and more common additional parameters can be used.
 
 *For example :*
 
    * Normal map : the same as with phong model.
-   * AO map : since we can’t bake AO in diffuse anymore, it’s now an extra channel. 
+   * AO map : since we can’t bake AO in diffuse anymore, it’s now an extra channel.
 
-The nice thing is that Metalness, Roughness and AO are grey scaled textures, so basically they only use one channel of a texture. So you can pack those 3 maps in one texture. 
+The nice thing is that Metalness, Roughness and AO are grey scaled textures, so basically they only use one channel of a texture. So you can pack those 3 maps in one texture.
 
-You can find an example asset that should work in a typical PBR implementation here. This page showcases pretty well what the textures should look like. 
+You can find an example asset that should work in a typical PBR implementation here. This page showcases pretty well what the textures should look like.
 
 That’s it for PBR from the artist point of view. Next week I’ll explain what’s under the hood for you fellow developers 😉
 
@@ -121,7 +121,7 @@ Now there are pro and cons on using one or the other. Here are the main points :
    * You’re in charge of the energy conservation paradigm (may be seen as a + for some).
    * More memory used : 2 rgba textures for diffuse and specular, you may be able to pack glossiness in the alpha channel of specular map, but you have no room left for anything and you may have to use a third texture.
 
- 
+
 
 IMO, the metalness workflow is more suited to real time 3D engine. And as an artist I find it more intuitive.
 

+ 20 - 20
src/docs/asciidoc/jme3/advanced/pbr_part2.adoc

@@ -8,7 +8,7 @@ You can find a lexical, at the end, with all the strange words you’ll come acr
 
 So here is what I figured out about using PBR and lighting in general in a 3D rendering pipeline.
 
- 
+
 **Ligthing**
 
 So first, lets talk about lighting in games. It all boils down to 2 things :
@@ -18,27 +18,27 @@ So first, lets talk about lighting in games. It all boils down to 2 things :
 
 This image from wikipedia is the most simple and yet the most helpful to understand this
 
-image::Lambert2.png[Lambert2,with="320",height="250",align="center"]
+image::Lambert2.png[Lambert2,width="320",height="250",align="center"]
 By GianniG46 (Own work) [CC-BY-SA-3.0 (http://creativecommons.org/licenses/by-sa/3.0) or GFDL (http://www.gnu.org/copyleft/fdl.html)], via Wikimedia Commons
 
 To compute each of these factors, we’re going to use a function. This function answers to the delicate name of *Bidirectional Reflectance Distribution Function or BRDF*.
 
 Don’t be scared by this, it’s a big name for just a function really. Usually, it will be a shader function.
 
- 
+
 
 Of course there are different BRDFs depending on what you want to compute, and on the lighting model you use. The BRDFs are usually called by the name of the guys that discovered/elaborated them.
 
 Also, most of the time, in implementations for real time rendering, those BRDFs are approximated for the sake of performance. And incidentally, those approximations also have names, that can be people names or technique names…
 
- 
+
 == Lighting in PBR
 
 Computing lighting for PBR is exactly the same as with the current rendering ( the system we use today with ambient, diffuse, specular, sometimes called ad-hoc system in the literature) :
 
 For each light source, compute the diffuse factor and the specular factor. The main difference is that the BRDFs used are different, more physically accurate, and works predictably under different light sources with few parameter entries.
 
- 
+
 
 So what is a light source?
 
@@ -48,7 +48,7 @@ Something that emits light. In games the most common light sources are Direction
 
 That’s what is commonly used in the ad-hoc system, and PBR also handle those types of lights.
 
- 
+
 === Indirect light source
 
 Something that reflects light and indirectly lights its surroundings. Think for example of a red wall next to a car at daytime, the sunlight hits the wall and the wall reflects red light that, in turn, lights up the car.
@@ -59,13 +59,13 @@ This part is optional for PBR, but that’s actually the part you really want. b
 
 In games, indirect lighting is done by using an environment map as a light source. This technique is called *Image Based Lighting (IBL)*.
 
- 
+
 
 So let’s say we’re looking for the full package. we need to compute diffuse and specular contribution for each light source be it direct or indirect.
 
 To do so we need a BRDF for diffuse and a BRDF for specular, and stick to them for each light source for consistency. Also those BRDF should accept as entry the parameters we want to expose for the artists (base color, metalness, roughness), or derived parameters with minimal transformation.
 
- 
+
 
 So the pseudo code for a complete lighting is this :
 [source]
@@ -88,40 +88,40 @@ Lighting = directLighting + indirectLighting
 
 I’ll go into more details, in the posts serie, on how to compute each factors, but that’s pretty much it.
 
- 
+
 == Choosing your BRDFs
 
-There is a vast choice of BRDF, and I’m not going to talk about all of them but focus on the ones that I use in my implementation. I’ll just guide you to alternatives and provide links to relevant articles for more details. 
+There is a vast choice of BRDF, and I’m not going to talk about all of them but focus on the ones that I use in my implementation. I’ll just guide you to alternatives and provide links to relevant articles for more details.
 
 I chose to use the same BRDF as the ones used in Unreal Engine 4 from link:http://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf[this article] by Brian Karis, as I completely trust his judgement. The provided code helped a great deal, but it was far from straight forward to integrate. In the end I had to fully research, and understand all the whereabouts of BRDFs.
 
- 
+
 === Diffuse BRDF : Lambert
 
 The most used diffuse BRDF in games. It’s very popular because it’s very cheap to compute and gives good results. This is the most simple way of computing diffuse.  link:https://en.wikipedia.org/wiki/Lambertian_reflectance[here are the details]
 
-image::DiffuseLambert.jpg[DiffuseLambert,with="320",height="250",align="center"]
+image::DiffuseLambert.jpg[DiffuseLambert,width="320",height="250",align="center"]
 Diffuse Lambert factor for a direct light source (directional light) with a yellow surface color.
 
 Some Alternatives :
 
-*Oren-Nayar* : Gives better visual results than classic Lambert, and has the advantage of using an entry parameter called roughness…rings a bell? Unfortunately, the additional computation cost is not really worth it,IMO. link:https://en.wikipedia.org/wiki/Oren%E2%80%93Nayar_reflectance_model[Details here] 
+*Oren-Nayar* : Gives better visual results than classic Lambert, and has the advantage of using an entry parameter called roughness…rings a bell? Unfortunately, the additional computation cost is not really worth it,IMO. link:https://en.wikipedia.org/wiki/Oren%E2%80%93Nayar_reflectance_model[Details here]
 
 *Harahan-Krueger* : Takes into consideration sub-surface scattering for diffuse lighting (every material surface has layers and light scatters into those different layers before going out of the material in a random direction). A lot of computations compared to Lambert, but may be important if you want to have a good sub surface scattering look for skin for example.  link:http://cseweb.ucsd.edu/~ravir/6998/papers/p165-hanrahan.pdf[more details in this paper]
 
- 
 
- 
+
+
 === Specular BRDF : Cook-Torrance
 
 This is a bit more complicated for specular. We need a physically plausible BRDF. We use what is called a *Microfacet BRDF*. So what is it?
 
 It states that at a micro level a surface is not plane, but formed of a multitude of little randomly aligned surfaces, the microfacets. Those surfaces acts as small mirrors that reflects incoming light. The idea behind this BRDF is that only some of those facets may be oriented so that the incoming light reflects to your eye. The smoother the surface, the more all facets are aligned, and the most neat is the light reflection. In the contrary, if a surface is rough, the facets are more randomly oriented so the light reflection is scattered on the surface, and the reflection looks more blurry.
 
-image::Specular.png[Specular,with="320",height="250",align="center"]
+image::Specular.png[Specular,width="320",height="250",align="center"]
 Microfacet specular factor for a direct light source. On the left a smooth surface, on the right a rough one. Note how the reflection is scattered on the surface when it’s rough.
 
-The microfacet BRDF we use is called Cook-Torrance. From my readings, I couldn’t find any implementation that use another specular BRDF. It seems like this is the global form of any microfacet BRDF. 
+The microfacet BRDF we use is called Cook-Torrance. From my readings, I couldn’t find any implementation that use another specular BRDF. It seems like this is the global form of any microfacet BRDF.
 
 [source]
 ----
@@ -147,12 +147,12 @@ I’ve settled to use those models and approximations :
 
 I won’t go into the details of all the alternatives I just want to expose an overview of the whole process first.  But I’ll dive into more technical details on the terms I use, in following posts. To have a neat overview of all alternatives you can see this link:http://graphicrants.blogspot.fr/2013/08/specular-brdf-reference.html[post] on  Brian Karis’s blog.
 
-  
+
 
 That sums up the whole process, but there is still much to explain. In next post I’ll make a focus on indirect lighting, as it’s the part that gave me the hardest time to wrap my head around. I’ll explain the Image Based Lighting technique used, and how you can compute diffuse and specular from an Environment Map.
 
-<<pbr_part3#,Next Post>> 
- 
+<<pbr_part3#,Next Post>>
+
 == Lexical :
 
 *Diffuse reflection :* light that reflects from a surface in every direction.

+ 15 - 15
src/docs/asciidoc/jme3/advanced/pbr_part3.adoc

@@ -1,6 +1,6 @@
 = Physically Based Rendering – Part Three
 
-image::irradianceMap.png[irradianceMap,with="320",height="250",align="center"]
+image::irradianceMap.png[irradianceMap,width="320",height="250",align="center"]
 *Note* : after several discussions in the team, I realized that some points were not clear in the  “PBR for artists” post. I’ve made an update with additional information on how to handle metalness and specular. <<pbr_part1#,I invite you to read it>>.
 
 == Image Based Lighting in PBR
@@ -33,7 +33,7 @@ How do we fetch a pixel from an environment map? We need a vector. Often called
 
 A picture worth thousand words
 
-image::Cube_mapped_reflection_example.jpg[Cube_mapped_reflection_example,with="320",height="250",align="center"]
+image::Cube_mapped_reflection_example.jpg[Cube_mapped_reflection_example,width="320",height="250",align="center"]
 from wikipedia : TopherTH at the English language Wikipedia [GFDL (http://www.gnu.org/copyleft/fdl.html), GFDL (http://www.gnu.org/copyleft/fdl.html) or CC-BY-SA-3.0 (http://creativecommons.org/licenses/by-sa/3.0/)], via Wikimedia Commons Here the reflected Ray is our reflection vector.
 
 Here the reflected Ray is our reflection vector.
@@ -58,7 +58,7 @@ But what’s the light color for a given point?
 
 Technically, every pixel in the environment map is a light source, so a shaded point is lighten by a vast amount of pixels.
 
-image::irradiance.png[irradiance,with="320",height="250",align="center"]
+image::irradiance.png[irradiance,width="320",height="250",align="center"]
 
 In this picture the orange area represent the light rays coming from the cube map to the shaded pixel, that we have to consider to properly compute the light color. So the idea would be, for each shaded pixel, to fetch all that texels and combine the colors.
 
@@ -66,7 +66,7 @@ As you can image that’s not practical for a real time rendering pipeline. Even
 
 Fortunately, We can use something called an *Irradiance map*. An irradiance map is basically the afford mentioned computation…except that it’s precomputed and baked into a texture. In practice here is what it looks like.
 
-image::irradianceMap.png[irradianceMap,with="320",height="250",align="center"]
+image::irradianceMap.png[irradianceMap,width="320",height="250",align="center"]
 On the left the original cube map, on the right, the pre computed irradiance map.
 
 So at run time you just have to do one texture fetch in that map with the reflection vector. Pretty cool heh?
@@ -85,7 +85,7 @@ But still…it’s slower than one texture fetch, so I chose to compute the Irra
 
 With this technique I can compute a 128X128 irradiance cube map on the CPU in Java in about 200ms. Too slow to be done on each frame, but at design time that’s the blink of an eye.
 
-image::DiffuseIBL.png[DiffuseIBL,with="320",height="250",align="center"]
+image::DiffuseIBL.png[DiffuseIBL,width="320",height="250",align="center"]
 Here is the diffuse effect of indirect lighting using an irradiance cube map
 
 === IBL Specular
@@ -94,14 +94,14 @@ Indirect diffuse is cool, but we want “shiny”!! Shiny implies specular light
 
 It’s important to understand what we want as a specular reflection. We want it to be very neat when the roughness is low and very blurry when it’s high.
 
-image::Roughness.png[Roughness,with="320",height="250",align="center"]
+image::Roughness.png[Roughness,width="320",height="250",align="center"]
 As roughness increase the reflection gets more blurry.
 
 To do this, we have to resolve an integral called the *radiance integral.*
 
 There is a method to do it quite fast that is called *importance sampling*. However it requires a lot of samples to get correct results, and therefore it’s pretty slow.
 
-As an example, for the previous shot, I was using this method, with 1024 samples. It was barely interactive, because it ran at 16 fps on a GTX 670. 
+As an example, for the previous shot, I was using this method, with 1024 samples. It was barely interactive, because it ran at 16 fps on a GTX 670.
 
 === Thanks Epic games!
 
@@ -113,26 +113,26 @@ In this link:http://blog.selfshadow.com/publications/s2013-shading-course/karis/
 
 We are going to pre process an env map on the CPU.
 
-As explained before, we need the reflection to be more blurry as the roughness increase. The main idea here is to store different levels of roughness in the env map mip maps. The first mip map level will match roughness = 0 and the last will match roughness = 1. 
+As explained before, we need the reflection to be more blurry as the roughness increase. The main idea here is to store different levels of roughness in the env map mip maps. The first mip map level will match roughness = 0 and the last will match roughness = 1.
 
-From mip levels to mip levels we’re going to convolve (blur) the images depending on the roughness. The more the roughness increase the more samples we’re going to use, and the more spread out they will be. 
+From mip levels to mip levels we’re going to convolve (blur) the images depending on the roughness. The more the roughness increase the more samples we’re going to use, and the more spread out they will be.
 
 But that’s not all, we also want to “bake” the specular BRDF in the map, so for each pixel we are going to compute the Cook-Torrentz microfacet BRDF (remember last post).
 
 But, as we are preprocessing the map, we don’t have any information about the shaded surface normal and view direction. So we are going to assume they are all the same, and equal to the envVector we’ll use to fetch pixels from the map. Also we assume that the shading point is exactly at the center of the cube map.
 
-image::prefilteredEnvMapSampling.png[prefilteredEnvMapSampling,with="320",height="250",align="center"]
+image::prefilteredEnvMapSampling.png[prefilteredEnvMapSampling,width="320",height="250",align="center"]
 
 This is an approximation again, and it has a cost in quality, but we’re all for approximation as long as it’s perform faster while still looking good, right?
 
 Here is what the result looks like
 
-image::PrefilteredEnvMap.png[PrefilteredEnvMap,with="320",height="250",align="center"]
+image::PrefilteredEnvMap.png[PrefilteredEnvMap,width="320",height="250",align="center"]
 The prefiltered environment map, with the different mip levels. notice how the blur increases through them.
 
 So now we can evaluate the first sum of the split sum approximation with a single texture fetch. We are going to compute the Lod level (the mip level where to fetch the texel) according to the roughness.
 
-Note that the image needs to be set up so that textureCube interpolates linearly between mip maps so that if the roughness value is not right on the mip level, it will interpolate between the two closest mip levels. 
+Note that the image needs to be set up so that textureCube interpolates linearly between mip maps so that if the roughness value is not right on the mip level, it will interpolate between the two closest mip levels.
 
    * The BRDF integration Map
 
@@ -146,7 +146,7 @@ So basically we can bake all combinations into a 2D map. roughness and N.L will
 
 Here is what it looks like :
 
-image::integrateBrdf.png[integrateBrdf,with="320",height="250",align="center"]
+image::integrateBrdf.png[integrateBrdf,width="320",height="250",align="center"]
 
 The nice part is that this map is constant for white light. It does not depends on the environment. So you can bake it once and for all then use it as an asset in your shaders.
 
@@ -154,11 +154,11 @@ Now we have to combine values fetched from these maps to get the specular lighti
 
 Here is what indirect specular alone, looks like, with a roughness of 0.1.
 
-image::IndirectSpeculra.png[IndirectSpeculra,with="320",height="250",align="center"]
+image::IndirectSpeculra.png[IndirectSpeculra,width="320",height="250",align="center"]
 
 *So in the end :*
 
-Our indirect lighting pseudo code looks like this : 
+Our indirect lighting pseudo code looks like this :
 [source]
 ----
 //diffuse

+ 9 - 9
src/docs/asciidoc/jme3/advanced/post-processor_water.adoc

@@ -1,6 +1,6 @@
 = Rendering Water as Post-Process Effect
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -10,7 +10,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 The awesome SeaMonkey WaterFilter is highly configurable. It can render any type of water and also simulates the underwater part of the effect, including light effects called caustics. The effect is based on link:http://www.gamedev.net/page/reference/index.html/_//feature/fprogramming/rendering-water-as-a-post-process-effect-r2642[Wojciech Toman’s Rendering Water as a Post-process Effect] published on gamedev.net. Here's a video:
 
 link:http://www.youtube.com/watch?v=AWlUzgRN3Pc[
-image::jme3/advanced/water-post.png[water-post.png,with="",height="",align="center"]
+image::jme3/advanced/water-post.png[water-post.png,width="",height="",align="center"]
 ]
 
 
@@ -88,7 +88,7 @@ If you want waves, set the water height in the update loop. We reuse the initial
 ----
 
 private float time = 0.0f;
-private float waterHeight = 0.0f; 
+private float waterHeight = 0.0f;
 
 @Override
 public void simpleUpdate(float tpf) {
@@ -104,7 +104,7 @@ public void simpleUpdate(float tpf) {
 === Optional: Water Wave and Color Effects
 
 
-image::jme3/advanced/water-post-muddy.png[water-post-muddy.png,with="220",height="172",align="center"]
+image::jme3/advanced/water-post-muddy.png[water-post-muddy.png,width="220",height="172",align="center"]
 
 
 All these effects are optional. Every setter also has a getter.
@@ -112,7 +112,7 @@ All these effects are optional. Every setter also has a getter.
 |===
 
 a| Water method example
-a|Effects: Waves 
+a|Effects: Waves
 a|Default
 
 a|water.setWaterHeight(-6);
@@ -125,7 +125,7 @@ a|1.0f
 
 a|water.setWaveScale(0.008f);
 a|Sets the scale factor of the waves height map. The smaller the value, the bigger the waves!
-a| 0.005f 
+a| 0.005f
 
 a|water.setWindDirection(new Vector2f(0,1))
 a|Sets the wind direction, which is the direction where the waves move
@@ -177,7 +177,7 @@ a|dark blue +ColorRGBA(0.0f, 0.0f,0.2f,1.0f)
 
 a|water.setWaterTransparency(0.2f);
 a|Sets how fast colors fade out. use this to control how clear (e.g. 0.05f) or muddy (0.2f) water is.
-a| 0.1f 
+a| 0.1f
 
 a|water.setColorExtinction(new Vector3f(10f,20f,30f));
 a|Sets At what depth the refraction color extincts. The three values are RGB (red, green, blue) in this order. Play with these parameters to “muddy the water.
@@ -279,7 +279,7 @@ audioRenderer.playSource(waves);
 
 ----
 
-See also: <<jme3/advanced/audio#,audio>>. 
+See also: <<jme3/advanced/audio#,audio>>.
 '''
 
 See also:

+ 3 - 3
src/docs/asciidoc/jme3/advanced/ragdoll.adoc

@@ -1,6 +1,6 @@
 = Ragdoll Physics
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: documentation, physics, character, NPC, forces, collisions
 :relfileprefix: ../../
@@ -11,7 +11,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 The jMonkeyEngine3 has built-in support for link:http://jbullet.advel.cz[jBullet physics] via the `com.jme3.bullet` package. Physics are not only responsible for handing collisions, but they also make <<jme3/advanced/hinges_and_joints#,hinges and joints>> possible. One special example of physical joints are ragdoll physics, shown here.
 
 
-image::jme3/advanced/ragdoll.png[ragdoll.png,with="",height="",align="center"]
+image::jme3/advanced/ragdoll.png[ragdoll.png,width="",height="",align="center"]
 
 
 

+ 36 - 36
src/docs/asciidoc/jme3/advanced/spatial.adoc

@@ -1,6 +1,6 @@
 = Spatial
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: spatial, node, mesh, geometry, scenegraph
 :relfileprefix: ../../
@@ -8,7 +8,7 @@
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
-This is an introduction to the concept of Spatials, the elements of the 3D scene graph. The scene graph is a data structure that manages all objects in your 3D world. For example, the scene graph keeps track of the 3D models that you load and position. When you extend a Java class from com.jme3.app.SimpleApplication, you automatically inherit the scene graph and its rootNode. 
+This is an introduction to the concept of Spatials, the elements of the 3D scene graph. The scene graph is a data structure that manages all objects in your 3D world. For example, the scene graph keeps track of the 3D models that you load and position. When you extend a Java class from com.jme3.app.SimpleApplication, you automatically inherit the scene graph and its rootNode.
 
 The rootNode is the central element of the scene graph. Even if the scene graph is empty, it always contains at least the rootNode. We _attach_ Spatials to the rootNode. Attached Spatials are always in a _parent-child relationship_. Every time you attach a Spatial to something, it is implicitly detached from its previous parent. A Spatial can have only one parent. A Spatial can have several children.
 
@@ -20,40 +20,40 @@ If you think you need to understand the scene graph concept better, please read
 In your Java code, a Spatial is either an instance of `com.jme3.scene.Node` or a `com.jme3.scene.Geometry` instance. You use the two types of Spatials for different purposes:
 
 
-image::jme3/intermediate/scene-graph.png[scene-graph.png,with="",height="",align="center"]
+image::jme3/intermediate/scene-graph.png[scene-graph.png,width="",height="",align="center"]
 
 [cols="10,45,45", options="header"]
 |===
 
-a| 
-2+a|com.jme3.scene.Spatial 
+a|
+2+a|com.jme3.scene.Spatial
 
-a| Purpose: 
-2+a| A Spatial is an abstract data structure that stores user data and transformations (= translation, rotation, scale) of elements of the 3D scene graph. Spatials can be saved and loaded using the <<jme3/advanced/asset_manager#,Asset Manager>>. 
+a| Purpose:
+2+a| A Spatial is an abstract data structure that stores user data and transformations (= translation, rotation, scale) of elements of the 3D scene graph. Spatials can be saved and loaded using the <<jme3/advanced/asset_manager#,Asset Manager>>.
 
-<a|  
-a| com.jme3.scene.Geometry 
-a| com.jme3.scene.Node 
+<a|
+a| com.jme3.scene.Geometry
+a| com.jme3.scene.Node
 
-a| Visibility: 
-a| A Geometry represents a *visible* 3D object in the scene graph. 
-a| A Node is an *invisible “handle* for a group of Spatials in the scene graph. 
+a| Visibility:
+a| A Geometry represents a *visible* 3D object in the scene graph.
+a| A Node is an *invisible “handle* for a group of Spatials in the scene graph.
 
-<a| Purpose:    
+<a| Purpose:
 a| Use Geometries to represent an object's *look*: Every Geometry contains a polygon mesh and a material, specifying its shape, color, texture, and opacity/transparency. +
-You attach Geometries to Nodes. 
+You attach Geometries to Nodes.
 a| Use Nodes to *structure and group* Geometries and other Nodes. Every Node is attached to one parent node, and each node can have zero or more children (Nodes or Geometries) attached to itself. +
-*When you transform (move, rotate, etc) a parent node, all its children are transformed (moved, rotated, etc).* 
+*When you transform (move, rotate, etc) a parent node, all its children are transformed (moved, rotated, etc).*
 
-<a| Content:    
+<a| Content:
 <a| Transformations; custom user data; +
-mesh and material;  
+mesh and material;
 a| Transformations; custom user data; +
 no mesh, no material.
 
-<a| Examples:   
-a| Box, sphere, player, building, terrain, vehicle, missiles, NPCs, etc… 
-a| rootNode, guiNode, audioNode, a custom grouping node such as vehicleNode or shipNode with passengers attached, etc. 
+<a| Examples:
+a| Box, sphere, player, building, terrain, vehicle, missiles, NPCs, etc…
+a| rootNode, guiNode, audioNode, a custom grouping node such as vehicleNode or shipNode with passengers attached, etc.
 
 |===
 
@@ -76,7 +76,7 @@ The polygon <<jme3/advanced/mesh#,Mesh>> inside a Geometry can be one of three t
 
 == What is a Clone?
 
-Cloned spatials share the same mesh, while each cloned spatial can have its own local transformation (translation, rotation, and scale) in the scene. This means you only use `clone()` on spatials whose meshes never change. The most common use case for cloning is when you use several Spatials that are based on the same <<jme3/advanced/shape#,Shape>>s (e.g. trees, crates). 
+Cloned spatials share the same mesh, while each cloned spatial can have its own local transformation (translation, rotation, and scale) in the scene. This means you only use `clone()` on spatials whose meshes never change. The most common use case for cloning is when you use several Spatials that are based on the same <<jme3/advanced/shape#,Shape>>s (e.g. trees, crates).
 
 The second use case is: When you load a model using `loadModel()` from the AssetManager, you may automatically get a `clone()`ed object. In particular:
 
@@ -95,12 +95,12 @@ Usually there is no need to manually use any of the `clone()` methods on models.
 
 == How to Add Fields and Methods to a Spatial
 
-You can include custom user data –that is, custom Java objects and methods– in Nodes and Geometries. This is very useful for maintaining information about a game element, such as health, budget, ammunition, inventory, equipment, etc for players, or landmark locations for terrains, and much more. 
+You can include custom user data –that is, custom Java objects and methods– in Nodes and Geometries. This is very useful for maintaining information about a game element, such as health, budget, ammunition, inventory, equipment, etc for players, or landmark locations for terrains, and much more.
 
 
 [IMPORTANT]
 ====
-You want to add custom accessor methods to a spatial? Do not extend `Node` or `Geometry`, use <<jme3/advanced/custom_controls#,Custom Controls>> instead. You want to add custom fields to a spatial? Do not extend `Node` or `Geometry`, use the built-in `setUserData()` method instead. Where ever the Spatial is accessible, you can easily access the object's class fields (user data) and accessors (control methods) this way. 
+You want to add custom accessor methods to a spatial? Do not extend `Node` or `Geometry`, use <<jme3/advanced/custom_controls#,Custom Controls>> instead. You want to add custom fields to a spatial? Do not extend `Node` or `Geometry`, use the built-in `setUserData()` method instead. Where ever the Spatial is accessible, you can easily access the object's class fields (user data) and accessors (control methods) this way.
 ====
 
 
@@ -132,7 +132,7 @@ public void setHealth(int h) {
 
 ----
 
-Elsewhere in your code, you can access this data wherever you have access to the Spatial `playerNode`. 
+Elsewhere in your code, you can access this data wherever you have access to the Spatial `playerNode`.
 
 [source,java]
 ----
@@ -143,9 +143,9 @@ playerNode.getControl(PlayerControl.class).setHealth(99);
 
 ----
 
-*  You can add as many data objects (of String, Boolean, Integer, Float, Array types) to a Spatial as you want. Just make sure to label them with unique case-sensitive strings (`health`, `Inventory`, `equipment`, etc). 
-*  The saved data can even be a custom Java object if you make the custom Java class <<jme3/advanced/save_and_load#custom_savable_class,implement the Savable interface>>! 
-*  When you save a Spatial as a .j3o file, the custom data is saved, too, and all Savables are restored the next time you load the .j3o! 
+*  You can add as many data objects (of String, Boolean, Integer, Float, Array types) to a Spatial as you want. Just make sure to label them with unique case-sensitive strings (`health`, `Inventory`, `equipment`, etc).
+*  The saved data can even be a custom Java object if you make the custom Java class <<jme3/advanced/save_and_load#custom_savable_class,implement the Savable interface>>!
+*  When you save a Spatial as a .j3o file, the custom data is saved, too, and all Savables are restored the next time you load the .j3o!
 
 This is how you list all data keys that are already defined for one Spatial:
 
@@ -161,11 +161,11 @@ for(String key : spatial.getUserDataKeys()){
 
 Often after you load a scene or model, you need to access a part of it as an individual Geometry in the scene graph. Maybe you want to swap a character's weapon, or you want to play a door-opening animation. First you need to know the unique name of the sub-mesh.
 
-.  Open the model in a 3D mesh editor, or in the jMonkeyEngine SDK's Scene Composer. 
+.  Open the model in a 3D mesh editor, or in the jMonkeyEngine SDK's Scene Composer.
 .  Find out the existing names of sub-meshes in the model.
 .  Assign unique names to sub-meshes in the model if neccessary.
 
-In the following example, the Node `house` is the loaded model. The sub-meshes in the Node are called its children. The String, here `door 12`, is the name of the mesh that you are searching. 
+In the following example, the Node `house` is the loaded model. The sub-meshes in the Node are called its children. The String, here `door 12`, is the name of the mesh that you are searching.
 
 [source,java]
 ----
@@ -181,16 +181,16 @@ There are two types of culling: Face culling, and view frustrum culling.
 
 *Face culling* means not drawing certain polygons of a mesh. Face culling behaviour is a property of the material.
 
-Usage: The “inside of a mesh (the so called backface) is typically never visible to the player, and as an optimization, the `Back` mode skips calculating all backfaces by default. Activating the `Off` or `Front` modes can be useful when you are debugging <<jme3/advanced/custom_meshes#,custom meshes>> and try to identify accidental inside-out faces. 
+Usage: The “inside of a mesh (the so called backface) is typically never visible to the player, and as an optimization, the `Back` mode skips calculating all backfaces by default. Activating the `Off` or `Front` modes can be useful when you are debugging <<jme3/advanced/custom_meshes#,custom meshes>> and try to identify accidental inside-out faces.
 
 You can switch the com.jme3.material.RenderState.FaceCullMode to either:
 
-*  `FaceCullMode.Back` (default) – Only the frontsides of a mesh are drawn. Backface culling is the default behaviour. 
+*  `FaceCullMode.Back` (default) – Only the frontsides of a mesh are drawn. Backface culling is the default behaviour.
 *  `FaceCullMode.Front` – Only the backsides of a mesh are drawn. A mesh with frontface culling will most likely be invisible. Used for debugging “inside-out custom meshes.
-*  `FaceCullMode.FrontAndBack` – Use this to make a mesh temporarily invisible. 
+*  `FaceCullMode.FrontAndBack` – Use this to make a mesh temporarily invisible.
 *  `FaceCullMode.Off` – Every side of the mesh is drawn. Looks normal, but slows down large scenes.
 
-Example: 
+Example:
 
 [source,java]
 ----
@@ -204,7 +204,7 @@ The decision what is visible and what not, is done automatically by the engine (
 *  `CullHint.Dynamic` – Default, faster because it doesn't waste time with objects that are out of view.
 *  `CullHint.Never` – Calculate and draw everything always (even if it does not end up on the user's screen because it's out of sight). Slower, but can be used while debugging custom meshes.
 *  `CullHint.Always` – The whole spatial is culled and is not visible. A fast way to hide a Spatial temporarily. Culling a Spatial is faster then detaching it, but it uses more memory.
-*  `CullHint.Inherit` – Inherit culling behaviour from parent node. 
+*  `CullHint.Inherit` – Inherit culling behaviour from parent node.
 
 Example:
 

+ 19 - 19
src/docs/asciidoc/jme3/advanced/steer_behaviours.adoc

@@ -1,6 +1,6 @@
 = Steer Behaviors
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -11,7 +11,7 @@ Steer behaviors allows you to control the locomotion of “characters”, this c
 +
 +
 *Steer behaviors in action:*
-image:jme3/advanced/youtube_yyztntsgv00[youtube_yyztntsgv00,with="",height=""]
+image:jme3/advanced/youtube_yyztntsgv00[youtube_yyztntsgv00,width="",height=""]
 +
 Be sure that you have checked the demos: They can be downloaded here: link:http://localhost/jmeSteerTesting/downloads.php[jmesteer.bdevel.org]
 
@@ -40,7 +40,7 @@ Finally, do not forget to import the `com.jme3.ai.agents.behaviors.npc.steering`
 *  Alignment
 *  Obstacle Avoidance
 *  Unaligned obstacle avoidance
-*  Hide 
+*  Hide
 *  Slow
 *  Queuing
 *  Containment
@@ -58,25 +58,25 @@ All the behaviours extend from the `AbstractSteeringBehavior` class.
 
 == Adding a steer behavior
 
-Create instances from the steer behavior classes, They are located in the `com.jme3.ai.agents.behaviors.npc.steering` package. 
+Create instances from the steer behavior classes, They are located in the `com.jme3.ai.agents.behaviors.npc.steering` package.
 
-If we want to add more than one steer behavior, we need to create a container: 
+If we want to add more than one steer behavior, we need to create a container:
 [WARNING]
 ====
-If you add more than one steer behavior to a `SimpleMainBehavior` it will cause problems in the rotation of the agents. 
+If you add more than one steer behavior to a `SimpleMainBehavior` it will cause problems in the rotation of the agents.
 ====
 
 [cols="2", options="header"]
 |===
 
-a| Container 
-a| Purpose 
+a| Container
+a| Purpose
 
-a| CompoundSteeringBehavior 
-a| Contains and merges several `AbstractSteeringBehavior` instances 
+a| CompoundSteeringBehavior
+a| Contains and merges several `AbstractSteeringBehavior` instances
 
-a| BalancedCompoundSteeringBehavior 
-<a| Each force generated inside this container is reduced in relation with a proportion factor: “Partial Force / “Total container force  
+a| BalancedCompoundSteeringBehavior
+<a| Each force generated inside this container is reduced in relation with a proportion factor: “Partial Force / “Total container force
 
 |===
 
@@ -130,7 +130,7 @@ To assign priority layers add behaviors with the following function:
 
 [TIP]
 ====
-To optimize the process speed add the behaviors with the lowest priority first. 
+To optimize the process speed add the behaviors with the lowest priority first.
 ====
 
 
@@ -153,7 +153,7 @@ Example:
 ----
 
     Plane horizontalPlane = new Plane(new Vector3f(0,1,0), 0);
-    
+
     steerBehavior1.setupStrengthControl(0.5f); //Force reduced a 50%
     steerBehavior2.setupStrengthControl(horizontalPlane); //Force contained in the XZ plane
     steerContainer.setupStrengthControl(horizontalPlane, 2f); //Contained in the XZ plane and increased a 100%
@@ -173,9 +173,9 @@ The responsible for the agent's acceleration is the vector returned in the `calc
     @Override
     protected Vector3f calculateRawSteering() {
         Vector3f steerForce = Vector3f.ZERO;
-        
+
         //calculations
-        
+
         return steerForce;
     }
 
@@ -218,11 +218,11 @@ Example:
 ----
 
     public class CustomSteeringExceptions extends SteeringExceptions  {
-    
+
         public static class CustomRuntimeException extends SteeringBehaviorException {
             public CustomRuntimeException(String msg) { super(msg); }
         }
-    
+
         // ... other exceptions ...
     }
 

+ 19 - 19
src/docs/asciidoc/jme3/advanced/terrain.adoc

@@ -1,6 +1,6 @@
 = TerraMonkey - The jMonkeyEngine Terrain System
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -11,7 +11,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 == Overview
 
 
-image::http://jmonkeyengine.org/wp-content/uploads/2011/07/terrain-blogpost-july.png[terrain-blogpost-july.png,with="400",height="300",align="right"]
+image::http://jmonkeyengine.org/wp-content/uploads/2011/07/terrain-blogpost-july.png[terrain-blogpost-july.png,width="400",height="300",align="right"]
 
 
 TerraMonkey is a GeoMipMapping quad tree of terrain tiles that supports real time editing and texture splatting. That's a mouth full! Lets look at each part:
@@ -49,7 +49,7 @@ TerraMonkey is a GeoMipMapping quad tree of terrain tiles that supports real tim
 == Geo Mip Mapping
 
 
-image::jme3/advanced/terrain-lod-high-medium-low.png[The wiremesh of a terrain with visible differences in levels of detail (LOD),with="",height="",align="right"]
+image::jme3/advanced/terrain-lod-high-medium-low.png[The wiremesh of a terrain with visible differences in levels of detail (LOD),width="",height="",align="right"]
 
 
 You have seen GeoMipMapping implemented in games before. This is where the farther away terrain has fewer polygons, and as you move closer, more polygons fill in. The whole terrain is divided into a grid of patches, and each one has its own level of detail (LOD). The GeoMipMapping algorithm looks at each patch, and its neighbours, to determine how to render the geometry. It will seam the edges between two patches with different LOD.
@@ -68,7 +68,7 @@ TerraMonkey is a quad tree. Each node is a TerrainQuad, and each leaf is a Terra
 
 When you “slap a texture on a mesh, the whole mesh looks the same. For big meshes (such as terrains) that is undesirable because it looks very boring (your whole landscape would be all rock, or all grass, or all sand). Texture Splatting is a technique that lets you “paint several textures into one combined texure. Each of the splat textures has an opacity value so you can define where it is visible in the final overall texture.
 
-The default material for TerraMonkey is TerrainLighting.j3md. This material combines several texture maps to produce the final custom texture. Remember, Diffuse Maps are the main textures that define the look; optionally, each Diffuse Map can be enhanced with a Normal Map; Alpha Maps describe the opacity of each Diffuse Map used (one color –red, green, blue, or alpha– stands for one Diffuse Map's opacity); Glow and Specular Maps define optional effects. 
+The default material for TerraMonkey is TerrainLighting.j3md. This material combines several texture maps to produce the final custom texture. Remember, Diffuse Maps are the main textures that define the look; optionally, each Diffuse Map can be enhanced with a Normal Map; Alpha Maps describe the opacity of each Diffuse Map used (one color –red, green, blue, or alpha– stands for one Diffuse Map's opacity); Glow and Specular Maps define optional effects.
 
 
 [IMPORTANT]
@@ -80,7 +80,7 @@ We recommend to <<sdk/terrain_editor#,create and edit Splat Textures for terrain
 Here are the names of TerrainLighting.j3md's material properties:
 
 
-image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Textures/Terrain/splat/mountains512.png[A heightmap encodes the topological highs and lows of the terrain,with="128",height="128",align="right"]
+image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Textures/Terrain/splat/mountains512.png[A heightmap encodes the topological highs and lows of the terrain,width="128",height="128",align="right"]
 
 
 *  1-3 Alpha Maps
@@ -89,14 +89,14 @@ image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Textures/T
 ***  `AlphaMap_2`
 
 *  12 Diffuse and/or Normal Maps (either in 6 pairs, or 12 stand-alone Diffuse Maps)
-***  `DiffuseMap`, `DiffuseMap_0_scale`, `NormalMap` 
+***  `DiffuseMap`, `DiffuseMap_0_scale`, `NormalMap`
 ***  `DiffuseMap_1`, `DiffuseMap_1_scale`, `NormalMap_1`
 ***  `DiffuseMap_2`, `DiffuseMap_2_scale`, `NormalMap_2`
-***  `DiffuseMap_3`, `DiffuseMap_3_scale`, `NormalMap_3` 
-image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Textures/Terrain/splat/alphamap.png[An alpha map can describe where 4 textures are painted onto the terrain.,with="128",height="128",align="right"]
+***  `DiffuseMap_3`, `DiffuseMap_3_scale`, `NormalMap_3`
+image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Textures/Terrain/splat/alphamap.png[An alpha map can describe where 4 textures are painted onto the terrain.,width="128",height="128",align="right"]
 
 ***  `DiffuseMap_4`, `DiffuseMap_4_scale`, `NormalMap_4`
-***  … 
+***  …
 ***  `DiffuseMap_11`, `DiffuseMap_11_scale`, `NormalMap_11`
 
 *  “Light maps
@@ -110,7 +110,7 @@ OpenGL supports a maximum of 16 _samplers_ in any given shader. This means you c
 
 Adhere to the following constraints:
 
-image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Textures/Terrain/splat/road.jpg[The Diffuse Map of one of the terrain textures depicts the colors of a paved surface,with="",height="",align="right"]
+image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Textures/Terrain/splat/road.jpg[The Diffuse Map of one of the terrain textures depicts the colors of a paved surface,width="",height="",align="right"]
 
 
 *  1-12 Diffuse Maps. One Diffuse Map is the minimum!
@@ -122,16 +122,16 @@ image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Textures/T
 
 Here are some common examples what this means:
 
-image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Textures/Terrain/splat/road_normal.png[The Normal Map of one of the terrain textures depicts the bumpiness of a paved surface,with="",height="",align="right"]
+image::http://jmonkeyengine.googlecode.com/svn/trunk/engine/test-data/Textures/Terrain/splat/road_normal.png[The Normal Map of one of the terrain textures depicts the bumpiness of a paved surface,width="",height="",align="right"]
 
 
-*  3 Alpha + 11 Diffuse + 1 Normal. 
-*  3 Alpha + 11 Diffuse + 1 Glow. 
-*  3 Alpha + 11 Diffuse + 1 Specular. 
-*  3 Alpha + 10 Diffuse + 3 Normal. 
-*  3 Alpha + 10 Diffuse + 1 Normal + 1 Glow + 1 Specular. 
-*  2 Alpha + 8 Diffuse + 6 Normal. 
-*  2 Alpha + 6 Diffuse + 6 Normal + 1 Glow + 1 Specular. 
+*  3 Alpha + 11 Diffuse + 1 Normal.
+*  3 Alpha + 11 Diffuse + 1 Glow.
+*  3 Alpha + 11 Diffuse + 1 Specular.
+*  3 Alpha + 10 Diffuse + 3 Normal.
+*  3 Alpha + 10 Diffuse + 1 Normal + 1 Glow + 1 Specular.
+*  2 Alpha + 8 Diffuse + 6 Normal.
+*  2 Alpha + 6 Diffuse + 6 Normal + 1 Glow + 1 Specular.
 *  1 Alpha + 3 Diffuse + 3 Normal + 1 Glow + 1 Specular (rest unused)
 
 You can hand-paint Alpha, Diffuse, Glow, and Specular maps in a drawing program, like Photoshop. Define each splat texture in the Alpha Map in either Red, Green, Blue, or Alpha (=RGBA). The JmeTests project bundled in the <<sdk#,SDK>> includes some image files that show you how this works. The example images show a terrain heightmap next to its Alpha Map (which has been prepare for 3 Diffuse Maps), and one examplary Diffuse/Normal Map pair.

+ 10 - 10
src/docs/asciidoc/jme3/advanced/vehicles.adoc

@@ -1,6 +1,6 @@
 = Controlling a Physical Vehicle
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: documentation, physics, vehicle, collision
 :relfileprefix: ../../
@@ -8,14 +8,14 @@
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
-For physical vehicles, jME's uses the jBullet ray-cast vehicle. In this vehicle implementation, the physical chassis 'floats' along on four non-physical vertical rays. 
+For physical vehicles, jME's uses the jBullet ray-cast vehicle. In this vehicle implementation, the physical chassis 'floats' along on four non-physical vertical rays.
 
 Internally, each wheel casts a ray down, and using the ray's intersection point, jBullet calculates the suspension length, and the suspension force. The suspension force is applied to the chassis, keeping it from hitting the ground. The friction force is calculated for each wheel where the ray intersects with the ground. Friction is applied as a sideways and forwards force. footnote:[ link:https://docs.google.com/Doc?docid=0AXVUZ5xw6XpKZGNuZG56a3FfMzU0Z2NyZnF4Zmo&hl=en[https://docs.google.com/Doc?docid=0AXVUZ5xw6XpKZGNuZG56a3FfMzU0Z2NyZnF4Zmo&amp;hl=en] ]
 
 This article shows how you use this vehicle implementation in a jME3 application.
 
 
-image::jme3/advanced/physics-vehicle.png[physics-vehicle.png,with="",height="",align="center"]
+image::jme3/advanced/physics-vehicle.png[physics-vehicle.png,width="",height="",align="center"]
 
 
 
@@ -31,7 +31,7 @@ Full code samples are here:
 
 The goal is to create a physical vehicle with wheels that can be steered and that interacts (collides with) with the floor and obstacles.
 
-.  Create a SimpleApplication with a <<jme3/advanced/physics#,BulletAppState>> 
+.  Create a SimpleApplication with a <<jme3/advanced/physics#,BulletAppState>>
 **  This gives us a PhysicsSpace for PhysicsNodes
 
 .  Create a VehicleControl + CompoundCollisionShape for the physical vehicle behaviour
@@ -56,7 +56,7 @@ The goal is to create a physical vehicle with wheels that can be steered and tha
 
 The vehicle that we create here in the link:https://github.com/jMonkeyEngine/jmonkeyengine/blob/master/jme3-examples/src/main/java/jme3test/bullet/TestPhysicsCar.java[TestPhysicsCar.java] example is just a “box on wheels, a basic vehicle shape that you can replace with a fancy car model, as demonstrated in link:https://github.com/jMonkeyEngine/jmonkeyengine/blob/master/jme3-examples/src/main/java/jme3test/bullet/TestFancyCar.java[TestFancyCar.java].
 
-Every physical object must have a collision shape, that we prepare first. For the vehicle, we choose a compound collision shape that is made up of a box-shaped body of the right size for the vehicle. We will add the wheels later. 
+Every physical object must have a collision shape, that we prepare first. For the vehicle, we choose a compound collision shape that is made up of a box-shaped body of the right size for the vehicle. We will add the wheels later.
 
 [source,java]
 ----
@@ -66,14 +66,14 @@ BoxCollisionShape box = new BoxCollisionShape(new Vector3f(1.2f, 0.5f, 2.4f));
 
 ----
 
-*Best Practice:* We attach the BoxCollisionShape (the vehicle body) to the CompoundCollisionShape at a Vector of (0,1,0): This shifts the effective center of mass of the BoxCollisionShape downwards to 0,-1,0 and makes a moving vehicle more stable! 
+*Best Practice:* We attach the BoxCollisionShape (the vehicle body) to the CompoundCollisionShape at a Vector of (0,1,0): This shifts the effective center of mass of the BoxCollisionShape downwards to 0,-1,0 and makes a moving vehicle more stable!
 
 [source,java]
 ----
 compoundShape.addChildShape(box, new Vector3f(0, 1, 0));
 ----
 
-Any kind of geometry can make up the visible part of the vehicle, here we use a wireframe box. We create a node that we use to group the geometry. 
+Any kind of geometry can make up the visible part of the vehicle, here we use a wireframe box. We create a node that we use to group the geometry.
 
 [source,java]
 ----
@@ -114,7 +114,7 @@ We now have a node `vehicleNode` with a visible “car geometry, which acts like
 
 == Adding the Wheels
 
-We create four wheel Geometries and add them to the vehicle. Our wheel geometries are simple, non-physical discs (flat Cylinders), they are just visual decorations. Note that the physical wheel behaviour (the com.jme3.bullet.objects.VehicleWheel objects) is created internally by the `vehicle.addWheel()` method. 
+We create four wheel Geometries and add them to the vehicle. Our wheel geometries are simple, non-physical discs (flat Cylinders), they are just visual decorations. Note that the physical wheel behaviour (the com.jme3.bullet.objects.VehicleWheel objects) is created internally by the `vehicle.addWheel()` method.
 
 The `addWheel()` method sets following properties:
 
@@ -209,7 +209,7 @@ Not shown here is that we also created a Material `mat`.
 
 Not shown here is the standard way how we map the input keys to actions (see full code sample). Also refer to <<jme3/advanced/input_handling#,Input Handling>>).
 
-In the ActionListener, we implement the actions that control the vehicle's direction and speed. For the four directions (accelerate=up, brake=down, left, right), we specify how we want the vehicle to move. 
+In the ActionListener, we implement the actions that control the vehicle's direction and speed. For the four directions (accelerate=up, brake=down, left, right), we specify how we want the vehicle to move.
 
 *  The braking action is pretty straightforward: +`vehicle.brake(brakeForce)`
 *  For left and right turns, we add a constant to `steeringValue` when the key is pressed, and subtract it when the key is released. +`vehicle.steer(steeringValue);`

+ 8 - 8
src/docs/asciidoc/jme3/advanced/water.adoc

@@ -1,13 +1,13 @@
 = Simple Water
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
-jMonkeyEngine offers a SimpleWaterProcessor that turns any quad (flat rectangle) into a reflective water surface with waves. You can use this quad for simple limited water surfaces such as water troughs, shallow fountains, puddles, shallow water in channels. The SimpleWaterProcessor has less performance impact on your game than the full featured <<jme3/advanced/post-processor_water#,SeaMonkey WaterFilter>>; the main difference is that the SimpleWaterProcessor does not include under-water effects. 
+jMonkeyEngine offers a SimpleWaterProcessor that turns any quad (flat rectangle) into a reflective water surface with waves. You can use this quad for simple limited water surfaces such as water troughs, shallow fountains, puddles, shallow water in channels. The SimpleWaterProcessor has less performance impact on your game than the full featured <<jme3/advanced/post-processor_water#,SeaMonkey WaterFilter>>; the main difference is that the SimpleWaterProcessor does not include under-water effects.
 
 Here is some background info for JME3's basic water implementation:
 
@@ -16,7 +16,7 @@ Here is some background info for JME3's basic water implementation:
 *  link:http://www.gametutorials.com/Articles/RealisticWater.pdf[http://www.gametutorials.com/Articles/RealisticWater.pdf]
 
 
-image::http://www.jmonkeyengine.com/wp-content/uploads/2010/10/simplewaterdemo.jpg[simplewaterdemo.jpg,with="277",height="180",align="center"]
+image::http://www.jmonkeyengine.com/wp-content/uploads/2010/10/simplewaterdemo.jpg[simplewaterdemo.jpg,width="277",height="180",align="center"]
 
 
 
@@ -24,14 +24,14 @@ image::http://www.jmonkeyengine.com/wp-content/uploads/2010/10/simplewaterdemo.j
 
 A JME3 scene with water can use a `com.jme3.water.SimpleWaterProcessor` (which implements the SceneProcessor interface).
 
-To achieve a water effect, JME3 uses shaders and a special material, `Common/MatDefs/Water/SimpleWater.j3md`. The water surface is a quad, and we use normal map and dU/dV map texturing to simulate the waves. 
+To achieve a water effect, JME3 uses shaders and a special material, `Common/MatDefs/Water/SimpleWater.j3md`. The water surface is a quad, and we use normal map and dU/dV map texturing to simulate the waves.
 
 .  Every frame, we render to three texture maps:
 **  For the water surface (reflection), we take a snapshot of the environment, flip it upside down, and clip it to the visible water surface. Note that we do not actually use a “water texture color map: The “texture of the water is solely a distorted reflection.
 **  For the “wavy distortion (refraction), we use the derivative of a normal map, a dU/dV map.
 **  For the fogginess of water (depth) we use a depth map from the terrains z-buffer.
 
-.  In the shaders, we add all of the texture maps together. 
+.  In the shaders, we add all of the texture maps together.
 **  For the “bumpy displacement of the waves, we use a normal map and a du/dv map that are shifted against each other over time to create the wave effect.
 **  For the light reflection vectors on the water surface, we use the Fresnel formula, together with normal vectors.
 **  We add specular lighting.
@@ -42,7 +42,7 @@ To achieve a water effect, JME3 uses shaders and a special material, `Common/Mat
 == Usage
 
 
-image::jme3/advanced/simplewater.png[simplewater.png,with="384",height="288",align="right"]
+image::jme3/advanced/simplewater.png[simplewater.png,width="384",height="288",align="right"]
 
 
 .  Create a `mainScene` Node
@@ -118,7 +118,7 @@ You can lower the render size to gain higher performance:
 waterProcessor.setRenderSize(128,128);
 ----
 
-The deeper the water, the more transparent. (?) 
+The deeper the water, the more transparent. (?)
 
 [source,java]
 ----

+ 11 - 11
src/docs/asciidoc/jme3/atomixtuts.adoc

@@ -1,6 +1,6 @@
 = atomixtuts
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../
 :imagesdir: ..
@@ -18,7 +18,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 Long time ago I planed to make tutorial series in making games in JME3 and done some examples. I waited for our project to reach a stable status. May be now is the best time to show them up!
 A lot of changes have been make to the core and also a lot of excited and amazing contributions into the world of JME this day (you can name some).
 
-OK, my project had changed to Atomix Tutorial Series (short as ATS). 
+OK, my project had changed to Atomix Tutorial Series (short as ATS).
 [quote]
 ____
  These tutorials will lead you through adventures in game devlopment in some games and genres. I will try to get much detail as I can. Hopefully this will become a valuable guidebook for monkeys want to join the jungle! emoji:smile
@@ -69,13 +69,13 @@ They require quite advanced techniques, suited for advanced Java developer which
 === Extra stuffs:
 
 *  Framework: <<jme3/advanced/atom_framework#, Atom framework>> , <<jme3/atomixtuts/mmorpg/researches#, Researches MMORPG techs>> , <<jme3/advanced/atom_framework/atomex#, Atom for Cloud framework>>
-*  Modeling : <<jme3/atomixtuts/cc#, Character in Blender>> , <<jme3/atomixtuts/fx#, Effects>> 
+*  Modeling : <<jme3/atomixtuts/cc#, Character in Blender>> , <<jme3/atomixtuts/fx#, Effects>>
 *  Concept &amp; Speed painting:
 *  Design : <<jme3/atomixtuts/design#,design>>
 *  AI :  <<jme3/advanced/atom_framework/ai#,AtomAI Framework and Tools>> ,  <<jme3/advanced/atom_framework/ai/researches#, AI Researches>>
 *  +++<abbr title="Graphical User Interface">GUI</abbr>+++ : <<jme3/advanced/atom_framework/gui#,AtomExGui>>
 *  Scripting : <<jme3/scripting#,scripting>>, <<jme3/advanced/atom_framework/scripting#,AtomScripting>>
-*  Everyday stuffs: 
+*  Everyday stuffs:
 
 
 === Screenshots:
@@ -83,33 +83,33 @@ They require quite advanced techniques, suited for advanced Java developer which
 *Card game:*
 
 
-image::http://farm9.staticflickr.com/8546/8616981856_4d9755f034_z.jpg[8616981856_4d9755f034_z.jpg,with="300",height="",align="center"]
+image::http://farm9.staticflickr.com/8546/8616981856_4d9755f034_z.jpg[8616981856_4d9755f034_z.jpg,width="300",height="",align="center"]
 
 
 *Blade of the immortals* <<jme3/atomixtuts/bladegame#,bladegame>>
 
 
-image::http://farm8.staticflickr.com/7219/6979909124_af97ffed51_b.jpg[6979909124_af97ffed51_b.jpg,with="200",height="",align="center"]
+image::http://farm8.staticflickr.com/7219/6979909124_af97ffed51_b.jpg[6979909124_af97ffed51_b.jpg,width="200",height="",align="center"]
 
 
 
-image::http://farm8.staticflickr.com/7226/7125997763_ced745ee82_z.jpg[7125997763_ced745ee82_z.jpg,with="200",height="",align="center"]
+image::http://farm8.staticflickr.com/7226/7125997763_ced745ee82_z.jpg[7125997763_ced745ee82_z.jpg,width="200",height="",align="center"]
 
 
 *Euro Kick*
 
 
-image::http://farm8.staticflickr.com/7120/7420435866_b531225642_b.jpg[7420435866_b531225642_b.jpg,with="400",height="",align="center"]
+image::http://farm8.staticflickr.com/7120/7420435866_b531225642_b.jpg[7420435866_b531225642_b.jpg,width="400",height="",align="center"]
 
 
 
-image::http://farm6.staticflickr.com/5320/7420435428_7a99ca6553_b.jpg[7420435428_7a99ca6553_b.jpg,with="400",height="",align="center"]
+image::http://farm6.staticflickr.com/5320/7420435428_7a99ca6553_b.jpg[7420435428_7a99ca6553_b.jpg,width="400",height="",align="center"]
 
 
 *Heaven – RTS Game.*
 
 
-image::http://farm9.staticflickr.com/8041/7976138046_752c4a5b03_b.jpg[7976138046_752c4a5b03_b.jpg,with="400",height="",align="center"]
+image::http://farm9.staticflickr.com/8041/7976138046_752c4a5b03_b.jpg[7976138046_752c4a5b03_b.jpg,width="400",height="",align="center"]
 
 
 

+ 20 - 20
src/docs/asciidoc/jme3/atomixtuts/bladegame.adoc

@@ -1,6 +1,6 @@
 = bladegame
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -41,9 +41,9 @@ Mode: Single and multiplayer
 
 === Idea & Story
 
-Blade of the immortals, its name. 
+Blade of the immortals, its name.
 
-This Story about a girl, named Zena in a mission to deliver a secret weapon - known as “the gift of god to the King of Katharal. 
+This Story about a girl, named Zena in a mission to deliver a secret weapon - known as “the gift of god to the King of Katharal.
 
 The game are about her adventures along the journey. She got chased by huanted evil and mystic monster raised from hell to stop her mission. Fortunately, he got helped by 3 hero that willing to help her on her way…
 
@@ -56,23 +56,23 @@ The game are about her adventures along the journey. She got chased by huanted e
 Here is some more screen shots
 
 
-image::http://farm8.staticflickr.com/7219/6979909124_af97ffed51_b.jpg[6979909124_af97ffed51_b.jpg,with="200",height="",align="right"]
+image::http://farm8.staticflickr.com/7219/6979909124_af97ffed51_b.jpg[6979909124_af97ffed51_b.jpg,width="200",height="",align="right"]
 
 
 
-image::http://farm8.staticflickr.com/7226/7125997763_ced745ee82_z.jpg[7125997763_ced745ee82_z.jpg,with="200",height="",align="left"]
+image::http://farm8.staticflickr.com/7226/7125997763_ced745ee82_z.jpg[7125997763_ced745ee82_z.jpg,width="200",height="",align="left"]
 
 
 
-image::http://farm8.staticflickr.com/7091/6981639806_c1e4e014d8_z.jpg[6981639806_c1e4e014d8_z.jpg,with="200",height="",align="center"]
+image::http://farm8.staticflickr.com/7091/6981639806_c1e4e014d8_z.jpg[6981639806_c1e4e014d8_z.jpg,width="200",height="",align="center"]
 
 
 
-image::http://farm8.staticflickr.com/7063/6981639942_bb06362b55_z.jpg[6981639942_bb06362b55_z.jpg,with="200",height="",align="right"]
+image::http://farm8.staticflickr.com/7063/6981639942_bb06362b55_z.jpg[6981639942_bb06362b55_z.jpg,width="200",height="",align="right"]
 
 
 
-image::http://farm8.staticflickr.com/7178/6987339044_3ff558d451_z.jpg[6987339044_3ff558d451_z.jpg,with="200",height="",align="left"]
+image::http://farm8.staticflickr.com/7178/6987339044_3ff558d451_z.jpg[6987339044_3ff558d451_z.jpg,width="200",height="",align="left"]
 
 
 
@@ -95,14 +95,14 @@ iframe::http://text2mindmap.com/1VG1V4[width="800px", height="600px", alt="", sc
 
 *  RPGGame
 **  Player
-**  Character 
+**  Character
 **  Party
 
 *  NPC
 *  Enemy
 **  Demon
-**  Werewolf 
-**  Skeleton 
+**  Werewolf
+**  Skeleton
 **  Scorpion
 
 *  Skill
@@ -113,17 +113,17 @@ iframe::http://text2mindmap.com/1VG1V4[width="800px", height="600px", alt="", sc
 
 ===== World
 
-*  Map 
-**  Land 
-**  Moutain 
-***  Forest 
-***  River 
+*  Map
+**  Land
+**  Moutain
+***  Forest
+***  River
 ***  Bridge
 
 
 *  Trigger
-*  Props 
-*  Dungeon 
+*  Props
+*  Dungeon
 **  Door
 
 
@@ -139,7 +139,7 @@ iframe::http://text2mindmap.com/1VG1V4[width="800px", height="600px", alt="", sc
 == Asset making
 
 Male
-image:http://fc04.deviantart.net/fs70/i/2010/021/3/4/Cabal_Dude_Workflow_by_imogia.jpg[Cabal_Dude_Workflow_by_imogia.jpg,with="",height=""]
+image:http://fc04.deviantart.net/fs70/i/2010/021/3/4/Cabal_Dude_Workflow_by_imogia.jpg[Cabal_Dude_Workflow_by_imogia.jpg,width="",height=""]
 
 
 == Setup

+ 10 - 10
src/docs/asciidoc/jme3/atomixtuts/cardsgame.adoc

@@ -1,6 +1,6 @@
 = cardsgame
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -14,7 +14,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 This is the first Chapter of the Game making tutorial series and named “The card game”.
 
-My intention is to make a “clone” Card game as Yugi Oh card game (similar to Collectable Magic Cards game). 
+My intention is to make a “clone” Card game as Yugi Oh card game (similar to Collectable Magic Cards game).
 
 
 [IMPORTANT]
@@ -89,7 +89,7 @@ Issues:
 
 Here is some more screen shots
 
-image::http://farm9.staticflickr.com/8546/8616981856_4d9755f034_z.jpg[8616981856_4d9755f034_z.jpg,with="300",height="",align="center"]
+image::http://farm9.staticflickr.com/8546/8616981856_4d9755f034_z.jpg[8616981856_4d9755f034_z.jpg,width="300",height="",align="center"]
 
 
 Preview Video:
@@ -143,7 +143,7 @@ Now the prepare steps are almost complete, we start coding our game!
 
 [IMPORTANT]
 ====
-This will be a big but interesting challenge for who really want to start a serious game development career and even for who just want to learn how to do it. 
+This will be a big but interesting challenge for who really want to start a serious game development career and even for who just want to learn how to do it.
 ====
 
 
@@ -153,7 +153,7 @@ ____
 I can present my self almost an artist (60% vs 40% of a programmer :p ).. So, i prefer doing cool stuffs instead of hard stuffs. That’s why i played with both Java and Groovy. In this section, from time to time, you will find how Groovy save your life with clean and bright syntax instead of verbose big bad Java here and there.
 ____
 
-You can get started with groovy in just few hours here. I also will explain a little bit of Groovy in the way. 
+You can get started with groovy in just few hours here. I also will explain a little bit of Groovy in the way.
 
 <<jme3/scripting#, Read more about Groovy Scripting>>
 
@@ -215,8 +215,8 @@ In this game, Groovy script will envolved in:
 *  EffectText
 *  In-house card editor
 
-More insights, 
-Rule are implemented with groovy script 
+More insights,
+Rule are implemented with groovy script
 Card's Effect are implemented with groovy script. You can procedure the script 2 two ways:
 
 .  parse from original EffectText ripped from the internet, via OpenNLP
@@ -258,7 +258,7 @@ You generally dont want to go too deep in your first tutorial! :p So consider re
 ====
 
 
-*  Use Webharvest to collect useful data for your game. 
+*  Use Webharvest to collect useful data for your game.
 *  And Groovy to config instead of XML or plain-text
 *  Groovy to make an in-house cards editor
 *  OpenNLP to process EffectText of the orginal card
@@ -272,7 +272,7 @@ Detailed introduction <<jme3/atomixtuts/cardsgame/adtechs#,adtechs>>
 After a few thousands LoC game, I hope you guys find something useful to start working with our powerful engine JME3. In this first tutorial, I don’t want to go too much and too soon into technical problems. That’s not the way to go! ;-P
 
 ....
-  In the next tutorial of the series, you will go straight in a bigger challenge with I think will give you more inspirations: “A Medieval RPG game” -  with story telling and cinematic. That’s it, a real game template which you can expand to make a full blown game. 
+  In the next tutorial of the series, you will go straight in a bigger challenge with I think will give you more inspirations: “A Medieval RPG game” -  with story telling and cinematic. That’s it, a real game template which you can expand to make a full blown game.
 ....
 
 

+ 4 - 4
src/docs/asciidoc/jme3/atomixtuts/cardsgame/adtechs.adoc

@@ -1,6 +1,6 @@
 = adtechs
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../
 :imagesdir: ../../..
@@ -39,14 +39,14 @@ You can take a look at my webhavest configuration file here , but use them as yo
 
 === Groovy data scripting
 
-It comes the time when you don’t want to use XML and all other things to make config and text data file, cause you just love the short and briliant syntax of Groovy. Me too… again! 
+It comes the time when you don’t want to use XML and all other things to make config and text data file, cause you just love the short and briliant syntax of Groovy. Me too… again!
 
 In Atom framework, I used Groovy to make game configuration, dialogue, cinematic scripting, facial scripting, AI scripting and even a whole GAME! That’s why I also use Groovy to save the infomations of the cards. Lucky me, Web harvest also can play with groovy like a charm, so benefit.
 
 Detailed technique should be shown in an “in-deep” topic, here I just show a few pictures what I’ve done with this two techs for this card game: :woot: :woot:
 '''
 
-image:http://farm9.staticflickr.com/8383/8616233293_aac77bc87e_c.jpg[8616233293_aac77bc87e_c.jpg,with="",height=""]
+image:http://farm9.staticflickr.com/8383/8616233293_aac77bc87e_c.jpg[8616233293_aac77bc87e_c.jpg,width="",height=""]
 
 
 === GroovyEditor

+ 6 - 6
src/docs/asciidoc/jme3/atomixtuts/cardsgame/assets.adoc

@@ -1,6 +1,6 @@
 = assets
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../
 :imagesdir: ../../..
@@ -22,12 +22,12 @@ In my example,for the Front textures of the cards, I use the orignal Yugioh Card
 
 The card model made of a Box with side faces deleted. The two remain faces has some change in UV, instead of the have exactly the same UV, they share the 50-50% vertical areas. Why? Cause in the shader we will modify the way to calculate UV and use two different diffuse for front face and back face. :p This is very cool thing to learn!
 
-image:http://farm9.staticflickr.com/8104/8617106224_e0c494dbf6_z.jpg[8617106224_e0c494dbf6_z.jpg,with="",height=""]
+image:http://farm9.staticflickr.com/8104/8617106224_e0c494dbf6_z.jpg[8617106224_e0c494dbf6_z.jpg,width="",height=""]
 
 
 === The Card material:
 
-After import from Blender, the importer made a default Lighting material for the model. So basicly we want to change that to our approriate material. 
+After import from Blender, the importer made a default Lighting material for the model. So basicly we want to change that to our approriate material.
 
 We make it by creating 3 new files: *CardMat.j3md* , *CardMat.j3m*, *SimpleCard.frag* ; and go to the Libraries section, where the TestData package is, copy the 4th file: *ColoredTexture.vert*.
 
@@ -41,7 +41,7 @@ We make it by creating 3 new files: *CardMat.j3md* , *CardMat.j3m*, *SimpleCard.
 
 Below show the detail content of the Material file in JMP and explain why for newbie in GLSL:
 
-image::http://farm9.staticflickr.com/8521/8616051519_7c8c32ee1a_c.jpg[8616051519_7c8c32ee1a_c.jpg,with="",height="",align="center"]
+image::http://farm9.staticflickr.com/8521/8616051519_7c8c32ee1a_c.jpg[8616051519_7c8c32ee1a_c.jpg,width="",height="",align="center"]
 
 
 
@@ -158,5 +158,5 @@ The side divided to some areas, including: Deck block, Magic block, Fusion block
 The table represent by a single quad with this texture. I did it in PTS but you can also do the same thing in Gimp or even paint.net (which one you prefered). The source PTS file is in the Project assets if you want to look into.
 
 
-image::http://farm9.staticflickr.com/8251/8617035018_bf7db17d09_z.jpg[8617035018_bf7db17d09_z.jpg,with="",height="",align="center"]
+image::http://farm9.staticflickr.com/8251/8617035018_bf7db17d09_z.jpg[8617035018_bf7db17d09_z.jpg,width="",height="",align="center"]
 

+ 32 - 32
src/docs/asciidoc/jme3/atomixtuts/design.adoc

@@ -1,6 +1,6 @@
 = design
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -10,7 +10,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 == Game Design short introduction
 
-This page is dedicated to introduce you to Game design/Planing/Managing with: 
+This page is dedicated to introduce you to Game design/Planing/Managing with:
 
 basic ideas, some terms, techniques,idioms, workflows you should learn and practice in the way of game/software developing.
 
@@ -26,53 +26,53 @@ TRY: link:http://www.handdrawnapps.com/category/game-design-resources/[http://ww
 Doing it right!
 ....
 
-image:http://rubycowgames.com/wp-content/uploads/game-design.jpg[game-design.jpg,with="400",height=""]
+image:http://rubycowgames.com/wp-content/uploads/game-design.jpg[game-design.jpg,width="400",height=""]
 '''
 
 ....
 The Process and elements
 ....
 
-image:http://www.gamasutra.com/db_area/images/feature/3934/image002.jpg[image002.jpg,with="400",height=""]
+image:http://www.gamasutra.com/db_area/images/feature/3934/image002.jpg[image002.jpg,width="400",height=""]
 '''
 
 ....
 Use UML & List & Tree and Graph
 ....
 
-image:http://dundee.cs.queensu.ca/~cax/arch/game-design-3.png[game-design-3.png,with="400",height=""]
+image:http://dundee.cs.queensu.ca/~cax/arch/game-design-3.png[game-design-3.png,width="400",height=""]
 
-image:http://indiegamesstudio.com/blog/wp-content/uploads/2012/08/articydraft_dialogjunkie_shot02_615x362.jpg[articydraft_dialogjunkie_shot02_615x362.jpg,with="400",height=""]
+image:http://indiegamesstudio.com/blog/wp-content/uploads/2012/08/articydraft_dialogjunkie_shot02_615x362.jpg[articydraft_dialogjunkie_shot02_615x362.jpg,width="400",height=""]
 '''
 
 ....
 Line up gameplay's element for better overview first
 ....
 
-image:http://fc04.deviantart.net/fs50/i/2009/287/d/c/Game_Design_Sketch_Pack_by_deadinsane.jpg[Game_Design_Sketch_Pack_by_deadinsane.jpg,with="400",height=""]
+image:http://fc04.deviantart.net/fs50/i/2009/287/d/c/Game_Design_Sketch_Pack_by_deadinsane.jpg[Game_Design_Sketch_Pack_by_deadinsane.jpg,width="400",height=""]
 '''
 
 ....
 Care about player input and experience, motion and emotion,inspired by them!
 ....
 
-image:http://gametea.files.wordpress.com/2010/09/game-design-101.gif[game-design-101.gif,with="400",height=""]
+image:http://gametea.files.wordpress.com/2010/09/game-design-101.gif[game-design-101.gif,width="400",height=""]
 
-image:http://bulk2.destructoid.com/ul/215158-GameDesignEvent.JPG[215158-GameDesignEvent.JPG,with="400",height=""]
+image:http://bulk2.destructoid.com/ul/215158-GameDesignEvent.JPG[215158-GameDesignEvent.JPG,width="400",height=""]
 
-image:http://www-static.dreambox.com/wp-content/uploads/2009/06/video_gamestest.jpg[video_gamestest.jpg,with="400",height=""]
+image:http://www-static.dreambox.com/wp-content/uploads/2009/06/video_gamestest.jpg[video_gamestest.jpg,width="400",height=""]
 '''
 
 ....
 Teamwork and share, hubris is the gamekiller!
 ....
 
-image:http://gamecareerguide.net/db_area/images/item_images/20071120/071120_design_game03.jpg[071120_design_game03.jpg,with="400",height=""]
+image:http://gamecareerguide.net/db_area/images/item_images/20071120/071120_design_game03.jpg[071120_design_game03.jpg,width="400",height=""]
 
 
 === Website
 
-image:http://gamedesignschools.com/uploads/digital_asset/file/1161/gamedesignschoolscom-main-image_900x300.jpg[gamedesignschoolscom-main-image_900x300.jpg,with="400",height=""]
+image:http://gamedesignschools.com/uploads/digital_asset/file/1161/gamedesignschoolscom-main-image_900x300.jpg[gamedesignschoolscom-main-image_900x300.jpg,width="400",height=""]
 
 link:http://gamedesignschools.com/[http://gamedesignschools.com/]
 
@@ -107,16 +107,16 @@ If you are not a professional game designer developer, or not in a “restricted
 ==== Smart workflow
 
 
-image::http://www.creativeuncut.com/imgs/video-game-designer.jpg[video-game-designer.jpg,with="",height="",align="center"]
+image::http://www.creativeuncut.com/imgs/video-game-designer.jpg[video-game-designer.jpg,width="",height="",align="center"]
 
 
 
 ===== As developer
 
-Read : 
+Read :
 link:http://en.wikipedia.org/wiki/Rapid_Application_Development[http://en.wikipedia.org/wiki/Rapid_Application_Development]
 
-try *Extreme programing*: 
+try *Extreme programing*:
 link:http://en.wikipedia.org/wiki/Extreme_programming[http://en.wikipedia.org/wiki/Extreme_programming]
 
 
@@ -134,14 +134,14 @@ link:http://www.handdrawnapps.com/2013/02/19/game-design-principles/[http://www.
 See 4 phase I recommended below as my experience manage a small team:
 
 
-image::http://www.skillset.org/uploads/jpeg/asset_11049_hl.jpg[asset_11049_hl.jpg,with="",height="",align="center"]
+image::http://www.skillset.org/uploads/jpeg/asset_11049_hl.jpg[asset_11049_hl.jpg,width="",height="",align="center"]
 
 
 
-image::http://hub.leoartz.com/wp-content/uploads/2009/05/m_creative_uncut.jpg[m_creative_uncut.jpg,with="400",height="",align="center"]
+image::http://hub.leoartz.com/wp-content/uploads/2009/05/m_creative_uncut.jpg[m_creative_uncut.jpg,width="400",height="",align="center"]
 
 
-.  2D Concept 
+.  2D Concept
 ..  Outline: sketch first, dicuss a lot about ideas, be wild
 ..  Coloring: get as much of details as you can
 
@@ -151,7 +151,7 @@ image::http://hub.leoartz.com/wp-content/uploads/2009/05/m_creative_uncut.jpg[m_
 
 
 
-image::http://benregimbal.com/lame_example_benrc_2007.jpg[lame_example_benrc_2007.jpg,with="400",height="",align="center"]
+image::http://benregimbal.com/lame_example_benrc_2007.jpg[lame_example_benrc_2007.jpg,width="400",height="",align="center"]
 
 
 
@@ -161,7 +161,7 @@ Be wild!
 ====
 
 
-image::http://fc00.deviantart.net/fs49/f/2009/206/d/b/Attack_Force_Iphone_game_art_by_carefulconan.jpg[Attack_Force_Iphone_game_art_by_carefulconan.jpg,with="400",height="",align="center"]
+image::http://fc00.deviantart.net/fs49/f/2009/206/d/b/Attack_Force_Iphone_game_art_by_carefulconan.jpg[Attack_Force_Iphone_game_art_by_carefulconan.jpg,width="400",height="",align="center"]
 
 
 
@@ -173,12 +173,12 @@ If you never in a professinal workflow before, try to do it simplier as your onl
 ..  Flexible but manageable: Try to use SVN.
 ..  Shoot with both hands: Do both assets and programming can cause a mesh, do one at a time. After finish review, get approved by yourself or the leader. Continue developing.
 ..  Pirate spirit: Use place holder as much as your can. Skip concept, may use existed assets. There are plenty of free assets.
-..  Avoid premature optimization: If still concerning about design, make it work first. When doubt lelf out. 
+..  Avoid premature optimization: If still concerning about design, make it work first. When doubt lelf out.
 ..  +++<abbr title="What You See Is What You Get">WYSIWYG</abbr>+++ : What You See Is What You® (Get| Got| Goodat | Goingto | Goal )
 ..  +++<abbr title="Keep it simple stupid">KISS</abbr>+++ : Keep It Simple Stupid! link:http://en.wikipedia.org/wiki/KISS_principle[http://en.wikipedia.org/wiki/KISS_principle]
 
 
-image::http://billeebrady.com/wp-content/uploads/2012/06/Keep-It-Simple-Stupid.jpg[Keep-It-Simple-Stupid.jpg,with="300",height="",align="center"]
+image::http://billeebrady.com/wp-content/uploads/2012/06/Keep-It-Simple-Stupid.jpg[Keep-It-Simple-Stupid.jpg,width="300",height="",align="center"]
 
 
 
@@ -203,7 +203,7 @@ So, in the end of each phase, you want to estimate your objectives and performan
 
 *Design phase*   Gameplay → Screens
 
-*Implementation phase*  Screen → States [or other paradigms] → Codes (class,config) 
+*Implementation phase*  Screen → States [or other paradigms] → Codes (class,config)
 
 *Review phase*  Runs → Bugs → Patches → Deployed publishabe packages, game.
 
@@ -212,7 +212,7 @@ So, in the end of each phase, you want to estimate your objectives and performan
 
 In this phase, we will design the most important things have influence to our game:
 
-*  Gameplay 
+*  Gameplay
 *  Screens
 
 Consider, gameplay brief texts is the initial basic “outline, and the screens are the detailed sketches of the gameplay into a “software form (that's it, a game :p).
@@ -237,7 +237,7 @@ link:http://dokgames.blogspot.com/2012/09/brick-4-whats-games-development-workfl
 
 ==== Gameplay
 
-A list of “names or “things will be seen in our game, bricks that build up the gameplay piece by piece. 
+A list of “names or “things will be seen in our game, bricks that build up the gameplay piece by piece.
 
 
 ===== As shortlist
@@ -245,11 +245,11 @@ A list of “names or “things will be seen in our game, bricks that build up t
 Yeah, a real text list of names, short description and notes!
 
 For examples, in a Football Manager game, as my EuroKick game <<jme3/atomixtuts/kickgame#,kickgame>>
-You can see them as things: 
+You can see them as things:
 
-* a Football fan see a football match in a stadium*. 
+* a Football fan see a football match in a stadium*.
 
-or 
+or
 
 *a business man see a company with finance, reports and statistics*.
 
@@ -275,11 +275,11 @@ Mind map can be consider very simple and basic ideas of the game in Graph based
 
 ==== Design to Programming translation
 
-Those, in turn will be implemented in programming language with a programming manner. 
+Those, in turn will be implemented in programming language with a programming manner.
 
-OOP for specific, appropriate name should be transfer to a appropriate Class of Object, with properties and methods. 
+OOP for specific, appropriate name should be transfer to a appropriate Class of Object, with properties and methods.
 
-For Component Oriented Programming (COP), names should be interpreted as Prefab with a specific set of components, and their processors. 
+For Component Oriented Programming (COP), names should be interpreted as Prefab with a specific set of components, and their processors.
 Read : <<jme3/entitysystem#,entitysystem>>
 
 

+ 7 - 7
src/docs/asciidoc/jme3/atomixtuts/heavenrtsgame.adoc

@@ -1,6 +1,6 @@
 = heavenrtsgame
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -61,7 +61,7 @@ Inspired by Zero-K by SpringRTS.
 
 === Quick start
 
-Source code: 
+Source code:
 link:https://code.google.com/p/heaven-rts-jmegame/[https://code.google.com/p/heaven-rts-jmegame/]
 
 Forum link:
@@ -90,7 +90,7 @@ link:http://guyspeed.com/best-rts-games-ever/[http://guyspeed.com/best-rts-games
 
 Heaven – RTS Game.
 
-image::http://farm9.staticflickr.com/8041/7976138046_752c4a5b03_b.jpg[7976138046_752c4a5b03_b.jpg,with="400",height="",align="center"]
+image::http://farm9.staticflickr.com/8041/7976138046_752c4a5b03_b.jpg[7976138046_752c4a5b03_b.jpg,width="400",height="",align="center"]
 
 
 
@@ -102,11 +102,11 @@ image::http://farm9.staticflickr.com/8041/7976138046_752c4a5b03_b.jpg[7976138046
 
 [TIP]
 ====
-So, what is the point of doing quite amount of researches before into real game developing. Ehr… RTS is a hard topic, especially, thousands of game in this genre got published, with failures and successes. If we want to go beyond “making a game like Starcraft goal, we have to do those long term researches. 
+So, what is the point of doing quite amount of researches before into real game developing. Ehr… RTS is a hard topic, especially, thousands of game in this genre got published, with failures and successes. If we want to go beyond “making a game like Starcraft goal, we have to do those long term researches.
 ====
 
 
-RTS games are my fav game genre.. I lost thousands of hours in them and never regret :p . That's why I try to make one, at least one like Star craft broodwar. 
+RTS games are my fav game genre.. I lost thousands of hours in them and never regret :p . That's why I try to make one, at least one like Star craft broodwar.
 
 Long and Detailed research topic and links for you to read into:
 
@@ -118,7 +118,7 @@ Long and Detailed research topic and links for you to read into:
 This section arrange the process and parts into a timeline to suite better with a tutorial format. You can read it day by day, week by week until you complete.
 
 .  Part 0: Download and Setup
-.  Part 1: Review and design, sketch 
+.  Part 1: Review and design, sketch
 .  Part 2: Assets
 .  Part 3: Code the main
 .  Part 4: Code the gameplay

+ 18 - 18
src/docs/asciidoc/jme3/atomixtuts/kickgame.adoc

@@ -1,6 +1,6 @@
 = kickgame
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -40,11 +40,11 @@ _Watch Euro now, play the game later! :p_
 
 Special technique will be introduced in the game and in the video tutorials:
 
-*   AI 
-**  Steering behavior &amp; Formation 
-**  Decision Tree 
+*   AI
+**  Steering behavior &amp; Formation
+**  Decision Tree
 **  Goalbase
-**  Stregagy planning 
+**  Stregagy planning
 **  Probality
 
 *   Scripting
@@ -63,7 +63,7 @@ I saw a Unity example about making sport game and It’s pretty damn good! But w
 
 Source code: link:http://code.google.com/p/eurokick-jmegame/[http://code.google.com/p/eurokick-jmegame/]
 
-Forum link: 
+Forum link:
 
 Design: link:https://docs.google.com/document/d/1JV8wZkyhaJc_4Jqrj1RQjhK4lNmGn7YFKwbJXxPM7Kk/edit?usp=sharing[here]
 
@@ -85,13 +85,13 @@ Inspired by series of the game Champion Manager and Pro Soccer!
 
 === Screenshots
 
-Version 0.1 
+Version 0.1
 
-image::http://farm8.staticflickr.com/7120/7420435866_b531225642_b.jpg[7420435866_b531225642_b.jpg,with="400",height="",align="center"]
+image::http://farm8.staticflickr.com/7120/7420435866_b531225642_b.jpg[7420435866_b531225642_b.jpg,width="400",height="",align="center"]
 
 
 
-image::http://farm6.staticflickr.com/5320/7420435428_7a99ca6553_b.jpg[7420435428_7a99ca6553_b.jpg,with="400",height="",align="center"]
+image::http://farm6.staticflickr.com/5320/7420435428_7a99ca6553_b.jpg[7420435428_7a99ca6553_b.jpg,width="400",height="",align="center"]
 
 
 
@@ -100,7 +100,7 @@ image::http://farm6.staticflickr.com/5320/7420435428_7a99ca6553_b.jpg[7420435428
 
 === Insight
 
-Because I'm (in my job) a 3D Artist, I can do the draft modelling in few days, and complete them in few weeks. Then I went down the long road of AI and doing +++<abbr title="Graphical User Interface">GUI</abbr>+++ for the game. These unbelievable numbers of tasks take me like 4-5 months because i'm also very busy at work. 
+Because I'm (in my job) a 3D Artist, I can do the draft modelling in few days, and complete them in few weeks. Then I went down the long road of AI and doing +++<abbr title="Graphical User Interface">GUI</abbr>+++ for the game. These unbelievable numbers of tasks take me like 4-5 months because i'm also very busy at work.
 
 Thank to good papers I found, I can achive good result which can sastisfy me a little bit.
 
@@ -110,7 +110,7 @@ Thank to good papers I found, I can achive good result which can sastisfy me a l
 This section arrange the process and parts into a timeline to suite better with a tutorial format. You can read it day by day, week by week until you complete.
 
 .  Part 0: Download and Setup
-.  Part 1: Review and design, sketch 
+.  Part 1: Review and design, sketch
 .  Part 2: Assets
 .  Part 3: Code the main
 .  Part 4: Code the gameplay
@@ -139,7 +139,7 @@ Here is check list:
 ..  Soccer stragegy
 ..  Locomotion of football player ( quite a long story …<<jme3/atomixtuts/kickgame/aa#,Read it>>)
 ..  Character customizing ( quite a long story …<<jme3/atomixtuts/kickgame/cc#,Read it>>)
-..  Advanced cinematic and camera system 
+..  Advanced cinematic and camera system
 
 .  Assets:
 ..  As I intend to use character customizing to reduce the amount of characters I have to model, so I have to learn how to make a model that can be customized with advanced rigs and animations.
@@ -159,7 +159,7 @@ So, there it's *no way in hell* this example game can compare to thoose commerci
 
 [NOTE]
 ====
-You can get the whole Design Document in googledoc link:https://docs.google.com/document/d/1JV8wZkyhaJc_4Jqrj1RQjhK4lNmGn7YFKwbJXxPM7Kk/edit?usp=sharing[here] with a lot of pictures instead of text! 
+You can get the whole Design Document in googledoc link:https://docs.google.com/document/d/1JV8wZkyhaJc_4Jqrj1RQjhK4lNmGn7YFKwbJXxPM7Kk/edit?usp=sharing[here] with a lot of pictures instead of text!
 ====
 
 
@@ -181,7 +181,7 @@ Read a short Game Design workflow introduction: <<jme3/atomixtuts/design#,design
 
 In this phase, we will design the most important things have influence to our game:
 
-*  Gameplay 
+*  Gameplay
 *  Screens
 
 We did not mention concepts and idea step… but it's no need for this kind of game, because we played a lot of them and see it on TV everyday.
@@ -205,7 +205,7 @@ In my POV, Mind mapping is really good for game design very first attempt!
 ====
 
 
-Football image:http://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KeFVfQ204ZjE0ZGM&.png[uc?export=view&amp;id=0B1ZtpcLL_67KeFVfQ204ZjE0ZGM&amp;.png,with="200",height=""] and Bussiness image:http://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KSmFJcjFlc1U3ejg&.png[uc?export=view&amp;id=0B1ZtpcLL_67KSmFJcjFlc1U3ejg&amp;.png,with="200",height=""]
+Football image:http://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KeFVfQ204ZjE0ZGM&.png[uc?export=view&amp;id=0B1ZtpcLL_67KeFVfQ204ZjE0ZGM&amp;.png,width="200",height=""] and Bussiness image:http://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KSmFJcjFlc1U3ejg&.png[uc?export=view&amp;id=0B1ZtpcLL_67KSmFJcjFlc1U3ejg&amp;.png,width="200",height=""]
 
 If you don't want to see the full picture yet, or want to try your self. Please consider evolving the ideas from this abstraction:
 
@@ -229,7 +229,7 @@ If you don't want to see the full picture yet, or want to try your self. Please
 **  Construction ( build a big stadium of your own)
 **  Shop ( sell some thing from your club )
 **  Media ( the news, tv..)
-**  Business ( contracts, reports…) 
+**  Business ( contracts, reports…)
 **  Statistics ( charts, numbers…)
 
 *  Other gameplay
@@ -277,7 +277,7 @@ Round Matches
 ....
 
 
-image::http://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KNGRER0FCaDVHOGM&.png[uc?export=view&amp;id=0B1ZtpcLL_67KNGRER0FCaDVHOGM&amp;.png,with="250",height="",align="right"]
+image::http://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KNGRER0FCaDVHOGM&.png[uc?export=view&amp;id=0B1ZtpcLL_67KNGRER0FCaDVHOGM&amp;.png,width="250",height="",align="right"]
 
 
 

+ 6 - 6
src/docs/asciidoc/jme3/atomixtuts/kickgame/assets.adoc

@@ -1,6 +1,6 @@
 = assets
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../
 :imagesdir: ../../..
@@ -22,17 +22,17 @@ Uniform Cloth Texture layout is the same with Pro Soccer evolution and Fifa seri
 
 In Blender
 
-image::https://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KMGxFSHo4WEdIMG8&.png[uc?export=view&amp;id=0B1ZtpcLL_67KMGxFSHo4WEdIMG8&amp;.png,with="400",height="",align="center"]
+image::https://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KMGxFSHo4WEdIMG8&.png[uc?export=view&amp;id=0B1ZtpcLL_67KMGxFSHo4WEdIMG8&amp;.png,width="400",height="",align="center"]
 
 
 In JMP
 
-image::https://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KQzBlRlRaSDJTa2s&.png[uc?export=view&amp;id=0B1ZtpcLL_67KQzBlRlRaSDJTa2s&amp;.png,with="400",height="",align="center"]
+image::https://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KQzBlRlRaSDJTa2s&.png[uc?export=view&amp;id=0B1ZtpcLL_67KQzBlRlRaSDJTa2s&amp;.png,width="400",height="",align="center"]
 
 
 Cloth Texture
 
-image::https://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KQnVId29DUjduMkk&.png[uc?export=view&amp;id=0B1ZtpcLL_67KQnVId29DUjduMkk&amp;.png,with="400",height="",align="center"]
+image::https://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KQnVId29DUjduMkk&.png[uc?export=view&amp;id=0B1ZtpcLL_67KQnVId29DUjduMkk&amp;.png,width="400",height="",align="center"]
 
 
 Video
@@ -52,7 +52,7 @@ Video
 
 At first attempt, I model the audiences in the stadium with 2D sprites. So they are flat animated billboard always face the camera. For the beginning, this method is good enough. We will change to advanced method later.
 
-image:https://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KTkx4djR2Qk80OHM&.png[uc?export=view&amp;id=0B1ZtpcLL_67KTkx4djR2Qk80OHM&amp;.png,with="256",height=""]
+image:https://drive.google.com/uc?export=view&id=0B1ZtpcLL_67KTkx4djR2Qk80OHM&.png[uc?export=view&amp;id=0B1ZtpcLL_67KTkx4djR2Qk80OHM&amp;.png,width="256",height=""]
 
 Video
 

+ 21 - 21
src/docs/asciidoc/jme3/atomixtuts/mmorpg.adoc

@@ -1,6 +1,6 @@
 = mmorpg
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -22,14 +22,14 @@ After a long project, I have time to sit down a write something about MMORPG and
 ====
 A MMORPG Project is *not easy nor appropriate* for beginner. +
 Such projects need a lot of skills, knowledge, passions and efforts to accomplish… +
-This tutorial just 've written down as the process of one no warranty attempt start by forum members : @atomix and … () 
+This tutorial just 've written down as the process of one no warranty attempt start by forum members : @atomix and … ()
 ====
 
 
-The project will be a community project, that mean Open-source and non-profit, code name : 
+The project will be a community project, that mean Open-source and non-profit, code name :
 *Ancient Monkey World.*
 
-image::http://digital-art-gallery.com/oid/66/1356x1600_12073_Monkey_King_2d_fantasy_character_monkey_king_picture_image_digital_art.jpg[1356x1600_12073_Monkey_King_2d_fantasy_character_monkey_king_picture_image_digital_art.jpg,with="300",height="",align="right"]
+image::http://digital-art-gallery.com/oid/66/1356x1600_12073_Monkey_King_2d_fantasy_character_monkey_king_picture_image_digital_art.jpg[1356x1600_12073_Monkey_King_2d_fantasy_character_monkey_king_picture_image_digital_art.jpg,width="300",height="",align="right"]
 
 
 
@@ -40,11 +40,11 @@ image::http://digital-art-gallery.com/oid/66/1356x1600_12073_Monkey_King_2d_fant
 *  Sourcecode: link:http://code.google.com/p/ancient-monkey-world/[http://code.google.com/p/ancient-monkey-world/]
 *  Plan: <<jme3/atomixtuts/mmorpg#process,jme3:atomixtuts:mmorpg#process>>
 *  Issues: link:https://code.google.com/p/ancient-monkey-world/issues/list[https://code.google.com/p/ancient-monkey-world/issues/list]
-*  Setup: 
+*  Setup:
 *  Tools: <<jme3/atomixtuts/mmorpg_tools#, Tools used>> <<jme3/atomixtuts/mmorpg/researches/toolset#,Research about toolset>>
-*  Game documents: 
-*  Art &amp; Assets: 
-*  License: BSD 
+*  Game documents:
+*  Art &amp; Assets:
+*  License: BSD
 
 
 === Quick start for Viewers
@@ -135,7 +135,7 @@ Of course not. It will take more than thousands of hours to code and to draw, do
 
 People may come up with different levels of knowledge and experience. So here and there, they may want to replace an open-source project by their own library. I also write almost every modules of the architure, but for myself I can not provide enough efforts for an opensource project maintaining. I just can keep bad code, release a few good one and write down articles.
 
-For people who are exciting of community project as MMORPG, may be this time you can gather up. I’m not guaranty that I’m enough of abitily to make it to the end, but at least we have a working base to start with. 
+For people who are exciting of community project as MMORPG, may be this time you can gather up. I’m not guaranty that I’m enough of abitily to make it to the end, but at least we have a working base to start with.
 
 
 [IMPORTANT]
@@ -161,7 +161,7 @@ link:https://www.google.com/search?q=Monkey+King[https://www.google.com/search?q
 
 I compose the idea with wild jungle scenes in fictional oriental - western mixed scenery and theme, and adventures along the jouney.
 
-image::http://fc09.deviantart.net/fs70/i/2011/004/d/5/monkey_king_by_saryth-d36e92m.jpg[monkey_king_by_saryth-d36e92m.jpg,with="400",height="",align="center"]
+image::http://fc09.deviantart.net/fs70/i/2011/004/d/5/monkey_king_by_saryth-d36e92m.jpg[monkey_king_by_saryth-d36e92m.jpg,width="400",height="",align="center"]
 
 
 [TIP]
@@ -173,7 +173,7 @@ More about ideas and Game Design [googlecode] and [googledocs] <<jme3/atomixtuts
 
 === Mind map
 
-This is the sketch mindmap of the game. 
+This is the sketch mindmap of the game.
 
 iframe::http://text2mindmap.com/JdE5xP[width="100%", height="600px", alt="", scroll="true",border="true",align="false"]
 
@@ -187,7 +187,7 @@ iframe::http://text2mindmap.com/JdE5xP[width="100%", height="600px", alt="", scr
 
 ==== Overal MMO Game Architecture
 
-In Phase 0 of the development process I intend to use Marauroa and some code from Arriane because the ease of use and clear design! 
+In Phase 0 of the development process I intend to use Marauroa and some code from Arriane because the ease of use and clear design!
 In *Marauroa* engine they have an excellent short and precise overview MMO game architecture which I will cite below, keep in my the detail implementation like DB or even programming language are optional:
 
 _Marauroa is based on very simple principles:_
@@ -210,7 +210,7 @@ link:http://arianne.sourceforge.net/engine/marauroa.html[http://arianne.sourcefo
 ====
 
 
-As said, the architecture and the components of a MMORPG game will be kept but part by part will be swaped or replaced as the process go. Why? Because there are better solutions new technologies nowaday. Now let take a look at the three things call the “Triangle of Bedmudas in game design. 
+As said, the architecture and the components of a MMORPG game will be kept but part by part will be swaped or replaced as the process go. Why? Because there are better solutions new technologies nowaday. Now let take a look at the three things call the “Triangle of Bedmudas in game design.
 
 
 ==== Entity system
@@ -228,7 +228,7 @@ So, as you see, JME community already offer 2-3 Entity System solutions. As the
 ==== Event system
 
 What's the hurry for a game event system?
-Yeah, event system here is not just the event (message) broadcasting. Because game technologies involve more and more parallelism, especially to be corporate with networking, the event system should also be considered again. 
+Yeah, event system here is not just the event (message) broadcasting. Because game technologies involve more and more parallelism, especially to be corporate with networking, the event system should also be considered again.
 
 Event system should encourage decoupeling and give the developer more strength and controls. Also ease of use, ightweight, non blocking, non replicating…etc
 
@@ -255,7 +255,7 @@ ____
 But can we come up with better overal design first?+Hopefully, yes, this time!
 ____
 
-So the asynchronized server, network and event system are widely use nowadays. The are dozen of open source project intended to solve the enterprise problems at once. 
+So the asynchronized server, network and event system are widely use nowadays. The are dozen of open source project intended to solve the enterprise problems at once.
 
 ....
  Node.js is a good example, the idea is simple but the implementation are truely epic. They've done it beautifully and we (java devs) should have the same thing or get used to it in the mean time.
@@ -275,16 +275,16 @@ In the researches you will find an article tell extractly how I use, modify, lev
 
 === Phase Zero
 
-*Start:* July 1st - August 1st 
+*Start:* July 1st - August 1st
 
-*Main task:* Setup and Port  MORPG engine Arriane from 2D to 3D. Try and review. 
+*Main task:* Setup and Port  MORPG engine Arriane from 2D to 3D. Try and review.
 
 <<jme3/atomixtuts/mmorpg/phase0#,phase0>>
 
 
 === Phase 1
 
-*Start:* August 1st - September 1st 
+*Start:* August 1st - September 1st
 
 *Main task:* Unknown
 
@@ -293,7 +293,7 @@ In the researches you will find an article tell extractly how I use, modify, lev
 
 === Phase 2
 
-*Start:* September 1st - Oct 1st 
+*Start:* September 1st - Oct 1st
 
 *Main task:* Unknown
 
@@ -302,7 +302,7 @@ In the researches you will find an article tell extractly how I use, modify, lev
 
 === Phase 3
 
-*Start:* Oct 1st - Nov 1st 
+*Start:* Oct 1st - Nov 1st
 
 *Main task:* Unknown
 

+ 17 - 17
src/docs/asciidoc/jme3/atomixtuts/mmorpg/phase0.adoc

@@ -1,6 +1,6 @@
 = phase0
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../
 :imagesdir: ../../..
@@ -10,19 +10,19 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 == Phase 0
 
-*Start:* July 1st - August 1st 
+*Start:* July 1st - August 1st
 *Tasks:*
 
 .  Search for free and open assets
-.  Setup MORPG engine Arriane 
+.  Setup MORPG engine Arriane
 ..  Port from 2D to 3D
 
-.  Try and review. 
+.  Try and review.
 
 *Features:*
 *Bugs:*
 
-Google code Issues tracker: 
+Google code Issues tracker:
 
 
 == Detail
@@ -31,9 +31,9 @@ Google code Issues tracker:
 === Arianne
 
 
-image::http://stendhalgame.org/wiki/images/3/34/Stendhal_0_65_fuzzy.png[Stendhal_0_65_fuzzy.png,with="",height="",align="center"]
+image::http://stendhalgame.org/wiki/images/3/34/Stendhal_0_65_fuzzy.png[Stendhal_0_65_fuzzy.png,width="",height="",align="center"]
 
-Another framework which is much small scale than Three rings is Arianne. 
+Another framework which is much small scale than Three rings is Arianne.
 link:http://sourceforge.net/projects/arianne/[http://sourceforge.net/projects/arianne/]
 
 In the phase Zero, I decided to use Arianne instead of Three rings. Why?
@@ -48,7 +48,7 @@ Because it's Open source, simple, have enough features, easy to deploy, test, an
 
 ==== Features
 
-*  
+*
 *      Stendhal - MORPG featuring hundreds of NPCs and quests
 *      Stendhal - Huge and beautiful world to explore
 *      Stendhal - Statistics website and Hall of Fame
@@ -94,7 +94,7 @@ The main entities you should know about are:
 *  RPClass
 *  IRPZone interface
 *  IRPRuleProcessor interface
-*  RPWorld 
+*  RPWorld
 
 
 ==== Role Playing Design
@@ -120,7 +120,7 @@ To achieve this we use several classes:
 
 *RPWorld* is the class that you need to extend inorder to implement the onInit and onFinish methods which personalize what happens when you initialise the server and what happens when you close the server.
 
-*IRPZone* is an interface that you could implement if you wanted to achive the highest personalization possible of the engine, however, I would use MarauroaRPZone instead as that uses our great *Delta2* feature. 
+*IRPZone* is an interface that you could implement if you wanted to achive the highest personalization possible of the engine, however, I would use MarauroaRPZone instead as that uses our great *Delta2* feature.
 
 
 ==== Actions
@@ -144,7 +144,7 @@ There are two types of perception:
 
 ....
   Sync perceptions: these are used to synchronize clients with the server world representation. This is the only valid way of knowing world's status.
-  Delta perception: this is used to send only the changes to the world since the last perception. 
+  Delta perception: this is used to send only the changes to the world since the last perception.
 ....
 
 Our actual Perception system is called Delta2. It is heavily attached to the Marauroa core, so I recommend you to use it :)
@@ -197,7 +197,7 @@ The delta2 algorithm is based on four containers:
 *      List of added objects
 *      List of modified added attributes of objects
 *      List of modified deleted attributes of objects
-*      List of deleted objects 
+*      List of deleted objects
 
 
 === Plan
@@ -207,7 +207,7 @@ My initial plan for the phase Zero is to create a port to 3d version of the exis
 
 ==== Assets
 
-In the first attempt, 3d enviroment and models will use open art website such as: 
+In the first attempt, 3d enviroment and models will use open art website such as:
 Blendswap link:http://blendswap.com[http://blendswap.com]
 OpengameArt link:http://opengameart.com[http://opengameart.com]
 
@@ -221,18 +221,18 @@ The reusable:
 *      Network: Good for small scale game
 *      DB: MySQL or integrated H2
 *      Almost gameplay: Enities definition, Quest, Scripting
-*      They also have a complete website for the game with tutorials, wiki 
+*      They also have a complete website for the game with tutorials, wiki
 
 The different between a 2d and 3d, Arianne an jME3 engine:
 
-*  
+*
 *      Replace the Arianne game loop with jME3 states and update loop.
 *      Delete the Render task of the game view JPanel
 *      Terrain : I have my own tiled Terrain implement in jME3 for almost top-down game.
 *      Characters: Use 3D Models of Open Art resource
 *      +++<abbr title="Graphical User Interface">GUI</abbr>+++ : Use pure swing gui (port to Nifty later)
 *      2d to 3d Gameplay: Map entities, trigger
-*      2d to 3d Picking : I use a simple translation 
+*      2d to 3d Picking : I use a simple translation
 
 
 == Concepts

+ 14 - 14
src/docs/asciidoc/jme3/beginner/hello_animation.adoc

@@ -1,6 +1,6 @@
 = jMonkeyEngine 3 Tutorial (7) - Hello Animation
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: beginner, intro, animation, documentation, keyinput, input, node, model
 :relfileprefix: ../../
@@ -14,7 +14,7 @@ Next: <<jme3/beginner/hello_picking#,Hello Picking>>
 This tutorial shows how to add an animation controller and channels, and how to respond to user input by triggering an animation in a loaded model.
 
 
-image::jme3/beginner/beginner-animation.png[beginner-animation.png,with="",height="",align="center"]
+image::jme3/beginner/beginner-animation.png[beginner-animation.png,width="",height="",align="center"]
 
 
 
@@ -56,7 +56,7 @@ public class HelloAnimation extends SimpleApplication
     HelloAnimation app = new HelloAnimation();
     app.start();
   }
-  
+
   @Override
   public void simpleInitApp() {
     viewPort.setBackgroundColor(ColorRGBA.LightGray);
@@ -72,7 +72,7 @@ public class HelloAnimation extends SimpleApplication
     channel = control.createChannel();
     channel.setAnim("stand");
   }
-  
+
   public void onAnimCycleDone(AnimControl control, AnimChannel channel, String animName) {
     if (animName.equals("Walk")) {
       channel.setAnim("stand", 0.50f);
@@ -80,11 +80,11 @@ public class HelloAnimation extends SimpleApplication
       channel.setSpeed(1f);
     }
   }
-  
+
   public void onAnimChange(AnimControl control, AnimChannel channel, String animName) {
     // unused
   }
-  
+
   /** Custom Keybinding: Map named actions to inputs. */
   private void initKeys() {
     inputManager.addMapping("Walk", new KeyTrigger(KeyInput.KEY_SPACE));
@@ -149,7 +149,7 @@ After you load the animated model, you register it to the Animation Controller.
     ...
     /* Load the animation controls, listen to animation events,
      * create an animation channel, and bring the model in its default position.  */
-    control = player.getControl(AnimControl.class); 
+    control = player.getControl(AnimControl.class);
     control.addListener(this);
     channel = control.createChannel();
     channel.setAnim("stand");
@@ -209,8 +209,8 @@ Add `implements AnimEventListener` to the class declaration. This interface give
 public class HelloAnimation extends SimpleApplication
                          implements AnimEventListener {
   ...
-  
-  public void onAnimCycleDone(AnimControl control, 
+
+  public void onAnimCycleDone(AnimControl control,
                               AnimChannel channel, String animName) {
     if (animName.equals("Walk")) {
       channel.setAnim("stand", 0.50f);
@@ -283,11 +283,11 @@ Make a mouse click trigger another animation sequence!
 
 [TIP]
 ====
-Do you want to find out what animation sequences are available in the model? Use: 
+Do you want to find out what animation sequences are available in the model? Use:
 [source,java]
 ----
-for (String anim : control.getAnimationNames()) { 
-    System.out.println(anim); 
+for (String anim : control.getAnimationNames()) {
+    System.out.println(anim);
 }
 ----
 ====
@@ -320,7 +320,7 @@ Add the following code snippet to `simpleInitApp()` to make the bones (that you
 [source,java]
 ----
 
-     SkeletonDebugger skeletonDebug = 
+     SkeletonDebugger skeletonDebug =
          new SkeletonDebugger("skeleton", control.getSkeleton());
      Material mat = new Material(assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
      mat.setColor("Color", ColorRGBA.Green);

+ 31 - 31
src/docs/asciidoc/jme3/beginner/hello_asset_pt.adoc

@@ -1,6 +1,6 @@
 = jMonkeyEngine 3 Tutorial (3) - Hello Assets
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: beginner, intro, documentation, lightnode, material, model, node, gui, hud, texture
 :relfileprefix: ../../
@@ -14,13 +14,13 @@ Próximo: <<jme3/beginner/hello_main_event_loop_pt#, Hello Update Loop pt>>
 Neste tutorial nós aprenderemos a carregar modelos 3D e colcoar texto no grafo de cena, usando o <<jme3/advanced/asset_manager#, Gerenciador de Ativo (Asset Manager)>> da JME. Você também aprenderá como determinar os caminhos corretos, e quais formatos de arquivo usar.
 
 
-image::jme3/beginner/beginner-assets-models.png[beginner-assets-models.png,with="320",height="250",align="center"]
+image::jme3/beginner/beginner-assets-models.png[beginner-assets-models.png,width="320",height="250",align="center"]
 
 
 
 [TIP]
 ====
-<<sdk/sample_code#, Problema no achar os arquivos para executar a amostra?>> Para conseguir os ativos (modelos 3D), adicione o arquivo `jme3-test-data.jar` incluso para seu classpath. no projeto criado com o SDK da jMonkeyEngine (recomendado), simplesmente dê um clique com o botão direito em seu projeto, escolha “Propriedades (“Properties), vá para “Bibliotecas (“Libraries), pressione “Adicionar Biblioteca (“Add Library) e adiciona a biblioteca pré-configurada “jme3-test-data library. 
+<<sdk/sample_code#, Problema no achar os arquivos para executar a amostra?>> Para conseguir os ativos (modelos 3D), adicione o arquivo `jme3-test-data.jar` incluso para seu classpath. no projeto criado com o SDK da jMonkeyEngine (recomendado), simplesmente dê um clique com o botão direito em seu projeto, escolha “Propriedades (“Properties), vá para “Bibliotecas (“Libraries), pressione “Adicionar Biblioteca (“Add Library) e adiciona a biblioteca pré-configurada “jme3-test-data library.
 ====
 
 
@@ -41,7 +41,7 @@ import com.jme3.scene.Geometry;
 import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Box;
 
-/** Sample 3 - how to load an OBJ model, and OgreXML model, 
+/** Sample 3 - how to load an OBJ model, and OgreXML model,
  * a material/texture, or text. */
 public class HelloAssets extends SimpleApplication {
 
@@ -54,7 +54,7 @@ public class HelloAssets extends SimpleApplication {
     public void simpleInitApp() {
 
         Spatial teapot = assetManager.loadModel("Models/Teapot/Teapot.obj");
-        Material mat_default = new Material( 
+        Material mat_default = new Material(
             assetManager, "Common/MatDefs/Misc/ShowNormals.j3md");
         teapot.setMaterial(mat_default);
         rootNode.attachChild(teapot);
@@ -62,9 +62,9 @@ public class HelloAssets extends SimpleApplication {
         // Create a wall with a simple texture from test_data
         Box box = new Box(Vector3f.ZERO, 2.5f,2.5f,1.0f);
         Spatial wall = new Geometry("Box", box );
-        Material mat_brick = new Material( 
+        Material mat_brick = new Material(
             assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
-        mat_brick.setTexture("ColorMap", 
+        mat_brick.setTexture("ColorMap",
             assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"));
         wall.setMaterial(mat_brick);
         wall.setLocalTranslation(2.0f,-2.5f,0.0f);
@@ -99,14 +99,14 @@ Compile e execute a amostra de código. Você deveria ver um ninja verde com um
 
 == O gerenciador de ativo
 
-*Por ativos de jogo nós queremos dizer todos os arquivos multimídia, tais como modelos, materiais e texturas, cenas inteiras, shaders customizados, música e arquivos de som, e fontes customizadas.* JME3 vem com um objeto AssetManager prático que ajuda você a acessar seus ativos. 
+*Por ativos de jogo nós queremos dizer todos os arquivos multimídia, tais como modelos, materiais e texturas, cenas inteiras, shaders customizados, música e arquivos de som, e fontes customizadas.* JME3 vem com um objeto AssetManager prático que ajuda você a acessar seus ativos.
 O AssetManager pode carregar arquivos de:
 
 *  O classpath atual (o nível do topo de seu diretório de projeto),
 *  O diretório `ativos` de seu projeto, e
 *  opcionalmente, caminhos persoanlizados que você registrar.
 
-O seguinte é a estrutura de diretório recomendada em seu diretório de projeto: 
+O seguinte é a estrutura de diretório recomendada em seu diretório de projeto:
 
 [source]
 ----
@@ -138,9 +138,9 @@ Coloque suas texturas em um subdiretório de `assets/Textures/`. Carregue a text
 // Create a wall with a simple texture from test_data
 Box box = new Box(Vector3f.ZERO, 2.5f,2.5f,1.0f);
 Spatial wall = new Geometry("Box", box );
-Material mat_brick = new Material( 
+Material mat_brick = new Material(
     assetManager, "Common/MatDefs/Misc/Unshaded.j3md");
-mat_brick.setTexture("ColorMap", 
+mat_brick.setTexture("ColorMap",
     assetManager.loadTexture("Textures/Terrain/BrickWall/BrickWall.jpg"));
 wall.setMaterial(mat_brick);
 wall.setLocalTranslation(2.0f,-2.5f,0.0f);
@@ -153,7 +153,7 @@ Neste caso, você <<jme3/beginner/hello_material#,cria seu próprio Material>> e
 
 === Carregando Texto e Fontes
 
-Este exemplo exibe o texto “Hello World na fonte padrão na aresta do fundo da janela. Você anexa texto para o nó da +++<abbr title="Graphical User Interface">GUI</abbr>+++ (`guiNode`) – isto é um nó especial para elementos de exibição plana (ortogonal). Você exibe texto para mostrar a pontuação do jogo, a saúde do jogador, etc. 
+Este exemplo exibe o texto “Hello World na fonte padrão na aresta do fundo da janela. Você anexa texto para o nó da +++<abbr title="Graphical User Interface">GUI</abbr>+++ (`guiNode`) – isto é um nó especial para elementos de exibição plana (ortogonal). Você exibe texto para mostrar a pontuação do jogo, a saúde do jogador, etc.
 A seguinte amostra de código vai no método `simpleInitApp()`.
 
 [source,java]
@@ -210,25 +210,25 @@ Aqui está um exemplo de uso de um ZipLocator que está registrado para um arqui
 
 ----
 
- Aque está um HttpZipLocator que pode baixar modelos zipados e carregá-los: 
+ Aque está um HttpZipLocator que pode baixar modelos zipados e carregá-los:
 
 [source,java]
 ----
 
     assetManager.registerLocator(
-      "http://jmonkeyengine.googlecode.com/files/wildhouse.zip", 
+      "http://jmonkeyengine.googlecode.com/files/wildhouse.zip",
       HttpZipLocator.class);
     Spatial scene = assetManager.loadModel("main.scene");
     rootNode.attachChild(scene);
 
 ----
 
-JME3 oferece ClasspathLocator, ZipLocator, FileLocator, HttpZipLocator, e UrlLocator (Veja `com.jme3.asset.plugins`). 
+JME3 oferece ClasspathLocator, ZipLocator, FileLocator, HttpZipLocator, e UrlLocator (Veja `com.jme3.asset.plugins`).
 
 
 == Criando Modelos e Cenas
 
-Para criar modelos 3D e cenas, você precisa de um editor de malha 3D (3D Mesh Editor) com um plugin exportador (Exporter) OgreXML. Por exemplo, você pode link:http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/UV_Map_Basics[ criar modelos completamente texturizados com Blender]. 
+Para criar modelos 3D e cenas, você precisa de um editor de malha 3D (3D Mesh Editor) com um plugin exportador (Exporter) OgreXML. Por exemplo, você pode link:http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/UV_Map_Basics[ criar modelos completamente texturizados com Blender].
 
 Você pode usar o <<sdk#,SDK>> para <<sdk/model_loader_and_viewer#,carregar modelos>>, <<sdk/blender#, converter modelos>> e <<sdk/scene_composer#, criar cenas>> deles.
 
@@ -269,9 +269,9 @@ Para teste e para a construção de liberação final, voc~e usa arquivos .j3o e
 
 Abra seu Projeto JME3 no SDK da jMonkeyEngine.
 
-.  Dê um clique com o botão direito em um arquivo .Blend, .OBJ, ou .mesh.xml file na janela Projetos (Projects), e escolha “converter para binário JME3 (“convert to JME3 binary).. 
+.  Dê um clique com o botão direito em um arquivo .Blend, .OBJ, ou .mesh.xml file na janela Projetos (Projects), e escolha “converter para binário JME3 (“convert to JME3 binary)..
 .  O arquivo .j3o aparece próximo ao arquivo .mesh.xml file e tem o mesmo nome.
-.  Mude todas as linhas do seu loadModel() de acordo. Por exemplo: 
+.  Mude todas as linhas do seu loadModel() de acordo. Por exemplo:
 [source,java]
 ----
 Spatial ninja = assetManager.loadModel("Models/Ninja/Ninja.j3o");
@@ -285,11 +285,11 @@ Se seu executável dá uma exceção em tempo de execução, tenha certeza de qu
 [cols="2", options="header"]
 |===
 
-a| tarefa? 
-a| Solução! 
+a| tarefa?
+a| Solução!
 
-a| Carregar um modelo com materiais 
-a| Use o método `loadModel()` do gerenciador de ativo (asset manager) e anexe o Spatial para o nó raiz (rootNode). 
+a| Carregar um modelo com materiais
+a| Use o método `loadModel()` do gerenciador de ativo (asset manager) e anexe o Spatial para o nó raiz (rootNode).
 [source,java]
 ----
 Spatial elephant = assetManager.loadModel("Models/Elephant/Elephant.mesh.xml");
@@ -303,8 +303,8 @@ rootNode.attachChild(elephant);
 ----
 
 
-a| carregar um modelo sem materiais 
-a| Se você tiver um modelo sem materiais, você tem de dár a ele um material para fazê-lo visível. 
+a| carregar um modelo sem materiais
+a| Se você tiver um modelo sem materiais, você tem de dár a ele um material para fazê-lo visível.
 [source,java]
 ----
 Spatial teapot = assetManager.loadModel("Models/Teapot/Teapot.j3o");
@@ -314,8 +314,8 @@ rootNode.attachChild(teapot);
 ----
 
 
-a| Carregar uma cena 
-a| Você carrega cenas da mesma forma que você carrega modelos: 
+a| Carregar uma cena
+a| Você carrega cenas da mesma forma que você carrega modelos:
 [source,java]
 ----
 Spatial scene = assetManager.loadModel("Scenes/town/main.scene");
@@ -336,7 +336,7 @@ rootNode.attachChild(scene);
 
 Como um exercício, vamos tentar diferentes maneiras de carregar uma cena. Você aprenderá a como carregar a cena diretamente, ou de um arquivo zip.
 
-.  link:http://jmonkeyengine.googlecode.com/svn/trunk/engine/town.zip[baixe a cena de amostra town.zip]. 
+.  link:http://jmonkeyengine.googlecode.com/svn/trunk/engine/town.zip[baixe a cena de amostra town.zip].
 .  (Opcional:) Dezipe o arquivo town.zip para ver a estrutura da Ogre dotScene contida: Você terá um diretório chamado `town`. Ele contém arquivos XML e textura, e o arquivo chamado main.scene. (Isto é apenas para sua informação, você não precisa fazer nada com ele.)
 .  Coloque o arquivo town.zip no diretório topo de nível de seu projeto JME3, assim:
 [source]
@@ -363,7 +363,7 @@ Use o seguinte método para carregar modelos de um arquivo zip:
     rootNode.attachChild(gameLevel);
 ----
 
-O método loadModel() agora pesquisa pelo arquivo zip diretamente para carregar os arquivos (isto significa, não escreva `loadModel(town.zip/main.scene)` ou similar!) 
+O método loadModel() agora pesquisa pelo arquivo zip diretamente para carregar os arquivos (isto significa, não escreva `loadModel(town.zip/main.scene)` ou similar!)
 
 .  Limpe, construa e execute o projeto. +Você deveria agora ver o Ninja+parede+bule permanecendo em uma cidade.
 
@@ -373,7 +373,7 @@ Anteriormente neste tutorial, você carregou cenas e modelos do diretório de at
 
 .  Remova o código que você adicionou para o exercício anterior.
 .  Mova o diretório dezipado `town/` no diretório `assets/Scenes/` de seu projeto.
-.  Adicione o seguinte código sobre `simpleInitApp() {` 
+.  Adicione o seguinte código sobre `simpleInitApp() {`
 [source,java]
 ----
     Spatial gameLevel = assetManager.loadModel("Scenes/town/main.scene");
@@ -390,7 +390,7 @@ Aqui está um terceiro método que você deve conhecer, carregando uma cena/mode
 
 .  Remova o código do exercício anterior.
 .  Se você j´pa não fez, abra o <<sdk#,SDK>> e abra o projeto que contém a classe HelloAsset..
-.  Na janela de projetos, navegue para o diretório `assets/Scenes/town`. 
+.  Na janela de projetos, navegue para o diretório `assets/Scenes/town`.
 .  Dê um clique com o botão direito em `main.scene` e converta a cena para binário: A jMonkeyPlatform gera um arquivo main.j3o.
 .  Adicione o seguinte código em `simpleInitApp() {`
 [source,java]

+ 7 - 7
src/docs/asciidoc/jme3/beginner/hello_picking.adoc

@@ -1,6 +1,6 @@
 = jMonkeyEngine 3 Tutorial (8) - Hello Picking
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: beginner, documentation, intro, node, ray, click, collision, keyinput, input
 :relfileprefix: ../../
@@ -18,7 +18,7 @@ You can pick something by either pressing a key on the keyboard, or by clicking
 This tutorial relies on what you have learned in the <<jme3/beginner/hello_input_system#,Hello Input>> tutorial. You find more related code samples under <<jme3/advanced/mouse_picking#,Mouse Picking>> and <<jme3/advanced/collision_and_intersection#,Collision and Intersection>>.
 
 
-image::jme3/beginner/beginner-picking.png[beginner-picking.png,with="",height="",align="center"]
+image::jme3/beginner/beginner-picking.png[beginner-picking.png,width="",height="",align="center"]
 
 
 
@@ -48,7 +48,7 @@ import com.jme3.scene.Spatial;
 import com.jme3.scene.shape.Box;
 import com.jme3.scene.shape.Sphere;
 
-/** Sample 8 - how to let the user pick (select) objects in the scene 
+/** Sample 8 - how to let the user pick (select) objects in the scene
  * using the mouse or key presses. Can be used for shooting, opening doors, etc. */
 public class HelloPicking extends SimpleApplication {
 
@@ -227,13 +227,13 @@ First initialize some shootable nodes and attach them to the scene. You will use
 
   Node shootables;
   Geometry mark;
-  
+
   @Override
   public void simpleInitApp() {
     initCrossHairs();
     initKeys();
     initMark();
-    
+
     shootables = new Node("Shootables");
     rootNode.attachChild(shootables);
     shootables.attachChild(makeCube("a Dragon",    -2f, 0f, 1f));
@@ -341,7 +341,7 @@ shootables.collideWith(ray, results);
 ...
 ----
 
-Use this together with `inputManager.setCursorVisible(true)` to make certain the cursor is visible. 
+Use this together with `inputManager.setCursorVisible(true)` to make certain the cursor is visible.
 
 Note that since you now use the mouse for picking, you can no longer use it to rotate the camera. If you want to have a visible mouse pointer for picking in your game, you have to redefine the camera rotation mappings.
 

+ 47 - 47
src/docs/asciidoc/jme3/beginner/hellochasecam.adoc

@@ -1,6 +1,6 @@
 = hellochasecam
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -9,7 +9,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 link:http://www.youtube.com/watch?v=dXGfecvI1Sk[Youtube video]
 
-image:jme3/beginner/chasecamera.png[chasecamera.png,with="",height=""]
+image:jme3/beginner/chasecamera.png[chasecamera.png,width="",height=""]
 
 *  link:https://code.google.com/p/jmonkeyengine/source/browse/#svn%2Ftrunk%2Fengine%2Ftest-data%2FModels%2FNinja[Ninja Mesh]
 *  link:http://jmonkeyengine.googlecode.com/svn/trunk/engine/town.zip[Town Scene]
@@ -98,7 +98,7 @@ public abstract class AbstractSpatialBodyContext extends AbstractAppState
     public AbstractSpatialBodyContext()
     {
     }
-    
+
 }
 
 ----
@@ -139,14 +139,14 @@ public class ApplicationContext extends AbstractAppState
     private final SceneBodyManager sceneBodyManager;
 
 /**
-    
+
     @param stateManager
     @param am
     @param settings
     @param inputManager
     @param rootNode
     @param cam
-    @param flyByCam 
+    @param flyByCam
     */
     public ApplicationContext(AppStateManager stateManager, AssetManager am, AppSettings settings, InputManager inputManager, Node rootNode, Camera cam, FlyByCamera flyByCam)
     {
@@ -213,10 +213,10 @@ public class AvatarAnimationEventListener extends AbstractAppState implements An
     private final AvatarAnimationHelper animHelper;
     private final PhysicsCharacter physicBody;
 /**
-    
+
     @param pial
     @param pc
-    @param avatarMesh 
+    @param avatarMesh
     */
     public AvatarAnimationEventListener(PlayerInputActionListener pial, PhysicsCharacter pc, Spatial avatarMesh)
     {
@@ -297,9 +297,9 @@ public class AvatarAnimationHelper
     private final AnimChannel animChannel;
     private final PhysicsCharacter physicBody;
 /**
-    
+
     @param pc
-    @param ac 
+    @param ac
     */
     public AvatarAnimationHelper(PhysicsCharacter pc, AnimChannel ac)
     {
@@ -432,10 +432,10 @@ public class AvatarBodyManager extends AbstractPhysicBodyContext
     private final PlayerInputActionListener playerInputListener;
 
 /**
-    
+
     @param am
     @param rootNode
-    @param cc 
+    @param cc
     */
     public AvatarBodyManager(AssetManager am, Node rootNode, CameraContext cc)
     {
@@ -463,7 +463,7 @@ public class AvatarBodyManager extends AbstractPhysicBodyContext
     {
         //TODO: initialize your AppState, e.g. attach spatials to rootNode
         //this is called on the OpenGL thread after the AppState has been attached
-        
+
         stateManager.attach(this.asbc);
         stateManager.attach(this.apbc);
         stateManager.attach(this.playerInputListener);
@@ -520,10 +520,10 @@ public class AvatarBodyMoveControl extends AbstractControl
     private final PhysicsCharacter physicBody;
     private final PlayerInputActionListener pial;
 /**
-    
+
     @param pial
     @param physicBody
-    @param cam 
+    @param cam
     */
     public AvatarBodyMoveControl(PlayerInputActionListener pial, PhysicsCharacter physicBody, Camera cam)
     {
@@ -532,7 +532,7 @@ public class AvatarBodyMoveControl extends AbstractControl
         this.cam = cam;
     }
     private final Vector3f walkDirection = new Vector3f();
-    
+
     @Override
     protected void controlUpdate(float tpf)
     {
@@ -546,7 +546,7 @@ public class AvatarBodyMoveControl extends AbstractControl
         //throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
     }
 
-    
+
         /**
 
      @param camDir
@@ -650,7 +650,7 @@ public class AvatarPhysicBodyContext extends AbstractPhysicBodyContext
 
     private final PhysicsCharacter physicBody;
 
-    
+
     public AvatarPhysicBodyContext()
     {
 
@@ -721,7 +721,7 @@ import com.jme3.scene.Spatial;
  */
 public class AvatarSpatialBodyContext extends AbstractSpatialBodyContext
 {
-   
+
     //
     private final Node rootNode;
     //
@@ -729,10 +729,10 @@ public class AvatarSpatialBodyContext extends AbstractSpatialBodyContext
     private final Spatial avatarMesh;
     private final Vector3f correction;
 /**
-    
+
     @param am
-    @param rootNode 
-    */    
+    @param rootNode
+    */
     public AvatarSpatialBodyContext(AssetManager am, Node rootNode)
     {
         this.rootNode = rootNode;
@@ -744,12 +744,12 @@ public class AvatarSpatialBodyContext extends AbstractSpatialBodyContext
                 AvatarConstants.COLLISION_SHAPE_CENTERAL_POINT - AvatarConstants.COLLISION_SHAPE_RADIUS,
                 0);
     }
-    
+
     @Override
     public void initialize(AppStateManager stateManager, Application app)
     {
-        
-        
+
+
         this.avatarMesh.setLocalScale(new Vector3f(0.05f, 0.05f, 0.05f));//Trouble with scales?
         this.avatarMesh.setLocalTranslation(this.correction);
         this.avatar.attachChild(this.avatarMesh);
@@ -809,7 +809,7 @@ public class CameraContext extends AbstractAppState
      public class Camera
      extends java.lang.Object
      implements Savable, java.lang.Cloneable
-    
+
      Width and height are set to the current Application's settings.getWidth() and settings.getHeight() values.
      Frustum Perspective:
      Frame of view angle of 45° along the Y axis
@@ -825,21 +825,21 @@ public class CameraContext extends AbstractAppState
      public class ChaseCamera
      extends java.lang.Object
      implements ActionListener, AnalogListener, Control
-         
+
      A camera that follows a spatial and can turn around it by dragging the mouse
-     Constructs the chase camera, and registers inputs if you use this 
-     constructor you have to attach the cam later to a spatial doing 
+     Constructs the chase camera, and registers inputs if you use this
+     constructor you have to attach the cam later to a spatial doing
      spatial.addControl(chaseCamera);
      */
     private final ChaseCamera chaseCam;
     private final FlyByCamera flyByCam;
 
 /**
-    
+
     @param settings
     @param inputManager
     @param cam
-    @param flyByCam 
+    @param flyByCam
     */
     public CameraContext(AppSettings settings, InputManager inputManager, Camera cam, FlyByCamera flyByCam)
     {
@@ -920,9 +920,9 @@ public class PlayerInputActionListener extends AbstractAppState implements Actio
     private boolean jump = false;
     private final AvatarAnimationEventListener aael;
 /**
-    
+
     @param pc
-    @param avatar 
+    @param avatar
     */
     public PlayerInputActionListener(PhysicsCharacter pc, Spatial avatar)
     {
@@ -958,19 +958,19 @@ public class PlayerInputActionListener extends AbstractAppState implements Actio
 
         if (binding.equals("LEFTWARD"))
         {
-            
+
             this.leftward = this.aael.getAnimHelper().leftward(keyPressed);
-            
+
         } else if (binding.equals("RIGHTWARD"))
         {
-            
+
             this.rightward = this.aael.getAnimHelper().rightward(keyPressed);
-        
+
         } else if (binding.equals("FORWARD"))
         {
-            
+
             this.forward = this.aael.getAnimHelper().forward(keyPressed);
-        
+
         } else if (binding.equals("BACKWARD"))
         {
 
@@ -980,7 +980,7 @@ public class PlayerInputActionListener extends AbstractAppState implements Actio
         {
 
             this.jump = this.aael.getAnimHelper().jump(keyPressed);
-            
+
         }
     }
 
@@ -1052,10 +1052,10 @@ public class SceneBodyManager extends AbstractPhysicBodyContext
     private final SceneSpatialBodyContext ssbc;
 
 /**
-    
+
     @param stateManager
     @param am
-    @param rootNode 
+    @param rootNode
     */
     public SceneBodyManager(AppStateManager stateManager, AssetManager am, Node rootNode)
     {
@@ -1104,13 +1104,13 @@ public class ScenePhysicBodyContext extends AbstractPhysicBodyContext
     private final Node scene;
 
 /**
-    
-    @param scene 
+
+    @param scene
     */
     public ScenePhysicBodyContext(Node scene)
     {
         this.scene = scene;
-        this.rigidBodyControl = new RigidBodyControl(.0f);       
+        this.rigidBodyControl = new RigidBodyControl(.0f);
     }
 
 
@@ -1159,9 +1159,9 @@ public class SceneSpatialBodyContext extends AbstractSpatialBodyContext
     private AmbientLight ambient;
     private DirectionalLight sun;
 /**
-    
+
     @param am
-    @param rootNode 
+    @param rootNode
     */
     public SceneSpatialBodyContext(AssetManager am, Node rootNode)
     {

+ 4 - 4
src/docs/asciidoc/jme3/beginner/hellovector.adoc

@@ -1,13 +1,13 @@
 = hellovector
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
-image:jme3/beginner/hellovectorsumm2.png[hellovectorsumm2.png,with="",height=""]
+image:jme3/beginner/hellovectorsumm2.png[hellovectorsumm2.png,width="",height=""]
 
 HelloVectorSumm.java
 
@@ -63,7 +63,7 @@ public class HelloVectorSumm extends SimpleApplication
         Debug.showNodeAxes(assetManager, rootNode, 128);
         Debug.attachWireFrameDebugGrid(assetManager, rootNode, Vector3f.ZERO, 256, ColorRGBA.DarkGray);
 
-        //     
+        //
         Box box = new Box(1, 1, 1);
         //
         Material mat = MaterialUtils.makeMaterial(assetManager, "Common/MatDefs/Misc/Unshaded.j3md", ColorRGBA.Blue);

+ 5 - 5
src/docs/asciidoc/jme3/blendswaparcade.adoc

@@ -1,6 +1,6 @@
 = blendswaparcade
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../
 :imagesdir: ..
@@ -10,12 +10,12 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 == Blendswap Arcade Game Contest
 
-The Blendswap Arcade contest is a game making contest where all entries must use the same scene from Blendswap. All participants have a week to create their game. It is currently planned to be a monthly contest. 
+The Blendswap Arcade contest is a game making contest where all entries must use the same scene from Blendswap. All participants have a week to create their game. It is currently planned to be a monthly contest.
 
 
 == Rules
 
-The rules are:    
+The rules are:
 
 ....
   You may use or even make other assets, but;
@@ -38,7 +38,7 @@ Game entries are judged on:
 
 This was the first Blendswap arcade contest. It used this model:
 
-link:http://www.blendswap.com[image:http://www.blendswap.com/files/images/2013/11/image71013/medium_3e019da3883e2c06c67553532695f0ac.jpg[medium_3e019da3883e2c06c67553532695f0ac.jpg,with="",height=""]]
+link:http://www.blendswap.com[image:http://www.blendswap.com/files/images/2013/11/image71013/medium_3e019da3883e2c06c67553532695f0ac.jpg[medium_3e019da3883e2c06c67553532695f0ac.jpg,width="",height=""]]
 
 link:http://www.blendswap.com/blends/view/71013[http://www.blendswap.com/blends/view/71013]
 

+ 3 - 3
src/docs/asciidoc/jme3/contributions/cubes/build_your_block_world.adoc

@@ -1,6 +1,6 @@
 = Build Your Block World
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../
 :imagesdir: ../../..
@@ -47,7 +47,7 @@ rootNode.attachChild(terrainNode);
 
 After running those few lines, you should see this:
 
-image:http://destroflyer.mania-community.de/other/imagehost/cubes/test_tutorial.png[test_tutorial.png,with="800",height=""]
+image:http://destroflyer.mania-community.de/other/imagehost/cubes/test_tutorial.png[test_tutorial.png,width="800",height=""]
 
 As you see, creating and managing your own block world will just take a few lines of code and doesn't require any special knowledge. :)
 

+ 5 - 5
src/docs/asciidoc/jme3/contributions/cubes/register_your_blocks.adoc

@@ -1,6 +1,6 @@
 = Register Block Types
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../
 :imagesdir: ../../..
@@ -29,7 +29,7 @@ You can register them by calling `CubesTestAssets.registerBlocks();`.
 == Single Texture Block
 
 
-image::http://destroflyer.mania-community.de/other/imagehost/cubes/block_stone.png[block_stone.png,with="150",height="",align="right"]
+image::http://destroflyer.mania-community.de/other/imagehost/cubes/block_stone.png[block_stone.png,width="150",height="",align="right"]
 
 Let's say, you want to add a simple block, which uses the same texture on every face. The framework recognizes, when only one texture is specified and therefore uses this for each face:
 
@@ -44,7 +44,7 @@ BlockManager.register(blockStone);
 == Face-Dependant Textures Block
 
 
-image::http://destroflyer.mania-community.de/other/imagehost/cubes/block_wood.png[block_wood.png,with="150",height="",align="right"]
+image::http://destroflyer.mania-community.de/other/imagehost/cubes/block_wood.png[block_wood.png,width="150",height="",align="right"]
 
 Now it's time to get prettier blocks - The wood block as known in Minecraft has two textures: Top/Bottom (cross-section) and Left/Right/Front/Back (bark). A simple way to set the texture for each face is to just give 6 textures to the skin (in the right order :P):
 
@@ -67,7 +67,7 @@ BlockManager.register(blockWood);
 Last but not least: What if a block wants to change its texture according to its environment?
 
 
-image::http://destroflyer.mania-community.de/other/imagehost/cubes/block_grass.png[block_grass.png,with="150",height="",align="right"]
+image::http://destroflyer.mania-community.de/other/imagehost/cubes/block_grass.png[block_grass.png,width="150",height="",align="right"]
 
 A nice example would be a grass block - If it's on the surface, it contains a nice grass texture at the top face and a little earth-grass-transition at the sides. Otherwise, all 6 sides should display an earth texture.
 Special behaviours like this can be achieved by overwriting the *getSkinIndex* method:

+ 4 - 4
src/docs/asciidoc/jme3/contributions/cubes/tools/heightmaps.adoc

@@ -1,6 +1,6 @@
 = Heightmaps
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../../
 :imagesdir: ../../../..
@@ -15,7 +15,7 @@ Most of you will know the term “heightmap - Those are images (normally gray-sc
 == Loading heightmaps
 
 
-image::http://destroflyer.mania-community.de/other/imagehost/cubes/heightmap_australia.jpg[heightmap_australia.jpg,with="",height="",align="right"]
+image::http://destroflyer.mania-community.de/other/imagehost/cubes/heightmap_australia.jpg[heightmap_australia.jpg,width="",height="",align="right"]
 
 When specifying the heightmap, you can tell the framework where to set the blocks and how to scale them - As an example, let's rebuild australia in our blockworld:
 
@@ -36,7 +36,7 @@ rootNode.attachChild(terrainNode);
 
 After running this code (and adding nice water and shadow effects :P), you should see this:
 
-image:http://destroflyer.mania-community.de/other/imagehost/cubes/test_australia.png[test_australia.png,with="800",height=""]
+image:http://destroflyer.mania-community.de/other/imagehost/cubes/test_australia.png[test_australia.png,width="800",height=""]
 
 
 == Important notes

+ 4 - 4
src/docs/asciidoc/jme3/contributions/cubes/tools/noise.adoc

@@ -1,6 +1,6 @@
 = Noise
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../../
 :imagesdir: ../../../..
@@ -20,7 +20,7 @@ Remember that large noises will take some time to calculate.
 == Generate a noise
 
 
-image::http://destroflyer.mania-community.de/other/imagehost/cubes/noise_example.jpg[noise_example.jpg,with="",height="",align="right"]
+image::http://destroflyer.mania-community.de/other/imagehost/cubes/noise_example.jpg[noise_example.jpg,width="",height="",align="right"]
 
 At the moment, the framework supports only one noise type (based on the link:http://en.wikipedia.org/wiki/Diamond-square_algorithm[Diamond-square Algorithm]) - You can see a visualization of such a noise at the right.
 
@@ -43,7 +43,7 @@ rootNode.attachChild(terrainNode);
 
 Some random results of the according noise:
 
-image:http://destroflyer.mania-community.de/other/imagehost/cubes/test_noise.png[test_noise.png,with="800",height=""]
+image:http://destroflyer.mania-community.de/other/imagehost/cubes/test_noise.png[test_noise.png,width="800",height=""]
 
 
 == Further improvements

+ 3 - 3
src/docs/asciidoc/jme3/contributions/cubes/tools/picking.adoc

@@ -1,6 +1,6 @@
 = Picking
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../../
 :imagesdir: ../../../..
@@ -89,7 +89,7 @@ if(blockLocation != null){
 
 And that's it - You just created your own minecraft-like blockworld-editor. Give yourself a challenge and implement the other mouse button to remove the pointed block (Look out for the `getNeighborLocation` parameter).
 
-image:http://destroflyer.mania-community.de/other/imagehost/cubes/test_picking.png[test_picking.png,with="800",height=""]
+image:http://destroflyer.mania-community.de/other/imagehost/cubes/test_picking.png[test_picking.png,width="800",height=""]
 
 
 == Further improvements

+ 13 - 13
src/docs/asciidoc/jme3/contributions/cubes/tools/serialization.adoc

@@ -1,6 +1,6 @@
 = Serializing
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../../
 :imagesdir: ../../../..
@@ -26,7 +26,7 @@ Well… That was pretty easy, or? You don't have to worry, _how_ your terrain is
 
 == Data Transport
 
-Actually, this part is on your own - There are many ways how to get data from one place to another and they all depend on your application. You'll have to find out how to get those bytes to the place where you want to rebuild the terrain - Make sure, you read the possible scenarios listed below. 
+Actually, this part is on your own - There are many ways how to get data from one place to another and they all depend on your application. You'll have to find out how to get those bytes to the place where you want to rebuild the terrain - Make sure, you read the possible scenarios listed below.
 
 
 == Unserializing
@@ -43,7 +43,7 @@ CubesSerializer.readFromBytes(blockTerrain, serializedTerrainData);
 
 This screenshot shows a terrain and it's unserialized clone - Note, that the blocks have to be registered in the *same order* on both sides in order to reproduce the same terrain!
 
-image:http://destroflyer.mania-community.de/other/imagehost/cubes/test_serialize.png[test_serialize.png,with="800",height=""]
+image:http://destroflyer.mania-community.de/other/imagehost/cubes/test_serialize.png[test_serialize.png,width="800",height=""]
 
 
 == Possible scenarios
@@ -52,17 +52,17 @@ The most typical examples for serializing are the following:
 [cols="3", options="header"]
 |===
 
-a| Application 
-a| Data Transport 
-<a| Resources  
+a| Application
+a| Data Transport
+<a| Resources
 
-a| Networking 
-a| The bytes are sent in a message over the network - The client receives them and can rebuild the block world. 
-a| <<jme3/advanced/networking#,Spidermonkey>> 
+a| Networking
+a| The bytes are sent in a message over the network - The client receives them and can rebuild the block world.
+a| <<jme3/advanced/networking#,Spidermonkey>>
 
-a| Files 
-a| The bytes are saved in a file, which can be loaded again next time. 
-a| link:http://docs.oracle.com/javase/tutorial/essential/io/fileio.html[java.io.File] 
+a| Files
+a| The bytes are saved in a file, which can be loaded again next time.
+a| link:http://docs.oracle.com/javase/tutorial/essential/io/fileio.html[java.io.File]
 
 |===
 

+ 6 - 6
src/docs/asciidoc/jme3/contributions/entitysystem/introduction.adoc

@@ -1,6 +1,6 @@
 = Entity System Introduction
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../../
 :imagesdir: ../../..
@@ -12,12 +12,12 @@ You need to know exactly what you want your program to do and which
 things should be possible to add later.
 If you do not do this you get unclean code, lose the clear view over the project
 and have to rewrite large parts again.
-Because game development is a dynamic process, sometimes it can be difficult to 
+Because game development is a dynamic process, sometimes it can be difficult to
 decide in which direction the game will develop)
 (Maybe you already compared alpha screenshots of a game with the final result)
 
 
-image::http://media.moddb.com/images/articles/1/116/115301/auto/shjWa.png[shjWa.png,with="",height="",align="center"]
+image::http://media.moddb.com/images/articles/1/116/115301/auto/shjWa.png[shjWa.png,width="",height="",align="center"]
 
 In this example we suddenly want a new unit, an armored robot.
 This is not possible with our structure and therefore we would need to rewrite the code.
@@ -32,7 +32,7 @@ In this article we concentrate on the way the jMonkey Entity System works.
 
 === Entity
 
-An Entity is simply an unique Id. 
+An Entity is simply an unique Id.
 Every Unit, Item, Bullet, etc. in your game will be represented by one of these entity Ids.
 
 
@@ -59,7 +59,7 @@ You need your Armored Robot? No Problem, you only need to combine the right comp
 Besides, you are able to remove/change/add components during the game which is a huge benefit of Entity Systems.
 
 
-image::http://media.moddb.com/images/articles/1/116/115301/auto/0WoEb.png[0WoEb.png,with="",height="",align="center"]
+image::http://media.moddb.com/images/articles/1/116/115301/auto/0WoEb.png[0WoEb.png,width="",height="",align="center"]
 
 
 

+ 109 - 109
src/docs/asciidoc/jme3/contributions/particles.adoc

@@ -1,6 +1,6 @@
 = Next Generation Particle Emitters
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -28,29 +28,29 @@ An easy way to see what you need is to create a new ParticleController and then
 [cols="2", options="header"]
 |===
 
-a| name 
-a| The name to use for the geometry in the scene graph 
+a| name
+a| The name to use for the geometry in the scene graph
 
-a| mesh 
-a| The mesh to use (Usually either PointMesh or QuadMesh) 
+a| mesh
+a| The mesh to use (Usually either PointMesh or QuadMesh)
 
-a| maxParticles 
-a| The maximum number of particles to allow active at any one time 
+a| maxParticles
+a| The maximum number of particles to allow active at any one time
 
-a| lifeMin 
-a| The minimum amount of time (in seconds) for which each particle lives 
+a| lifeMin
+a| The minimum amount of time (in seconds) for which each particle lives
 
-a| lifeMax 
-a| The maximum amount of time (in seconds) for which each particle lives 
+a| lifeMax
+a| The maximum amount of time (in seconds) for which each particle lives
 
-a| source 
-a| The source from which the particles are spawned 
+a| source
+a| The source from which the particles are spawned
 
-a| emissionController 
-a| The frequency and timing with which particles are spawned. If null then no particles are automatically spawned and they must be triggered manually using emitNextParticle() or emitAllParticles() 
+a| emissionController
+a| The frequency and timing with which particles are spawned. If null then no particles are automatically spawned and they must be triggered manually using emitNextParticle() or emitAllParticles()
 
-a| influencers 
-a| Zero or more ParticleInfluencers, each of which changes the behaviour of the particles. 
+a| influencers
+a| Zero or more ParticleInfluencers, each of which changes the behaviour of the particles.
 
 |===
 
@@ -77,17 +77,17 @@ public class HelloParticles1_SimpleFire extends SimpleApplication {
     @Override
     public void simpleInitApp() {
 
-// Construct a new ParticleController       
+// Construct a new ParticleController
         ParticleController pCtrl = new ParticleController(
 // The name of the emitter
-                "SimpleFire", 
+                "SimpleFire",
 // Use a simple point mesh (the fastest but most limitted mesh type) with the specified
 // image (from jME3-testdata). The image actually contains a 2x2 grid of sprites.
                 new PointMesh(assetManager, "Effects/Explosion/flame.png", 2, 2),
-// Allow at most 32 particles at any time                
-                32, 
-// Particles last for at least 2 seconds                
-                2, 
+// Allow at most 32 particles at any time
+                32,
+// Particles last for at least 2 seconds
+                2,
 // And at most 3 seconds
                 3,
 // Point sources always generate particles at the location of the source, the particles
@@ -95,14 +95,14 @@ public class HelloParticles1_SimpleFire extends SimpleApplication {
                 new PointSource(new Vector3f(-3, 0, -3), new Vector3f(3, 0, 3)),
 // Emit particles at regular intervals, 10 particles every second
                 new RegularEmission(10),
-// ** Influencers start here                
-// Select a random sprite from the 4 available for each particle                
+// ** Influencers start here
+// Select a random sprite from the 4 available for each particle
                 new RandomSpriteInfluencer(),
-// Particles start off with a size of 0.5 units, end with a radius of 0.1                
+// Particles start off with a size of 0.5 units, end with a radius of 0.1
                 new SizeInfluencer(0.5f, 0.1f),
 // Particles start yellow full opacity and fade towards red with very low opacity
                 new ColorInfluencer(new ColorRGBA(1,1,0.2f,1), new ColorRGBA(1,0,0,0.1f)),
-// No matter what velocity particles started with they will start moving upwards.               
+// No matter what velocity particles started with they will start moving upwards.
                 new PreferredDirectionInfluencer(new Vector3f(0, 1, 0), 0.25f));
 
 // Finally attach the geometry to the rootNode in order to start the particles running
@@ -114,7 +114,7 @@ public class HelloParticles1_SimpleFire extends SimpleApplication {
 
 Run that and the result should look something like:
 
-image:jme3/particles1.jpg[particles1.jpg,with="",height=""]
+image:jme3/particles1.jpg[particles1.jpg,width="",height=""]
 
 
 == Simple Fire and Smoke
@@ -125,18 +125,18 @@ image:jme3/particles1.jpg[particles1.jpg,with="",height=""]
     @Override
     public void simpleInitApp() {
 
-// Construct a new ParticleController       
+// Construct a new ParticleController
         ParticleController pCtrl = new ParticleController(
 // The name of the emitter
-                "SimpleFire", 
+                "SimpleFire",
 // Use a simple point mesh (the fastest but most limitted mesh type) with the specified
 // image (from jME3-testdata). The image actually contains a 2x2 grid of sprites.
                 new PointMesh(assetManager, "Effects/Explosion/flame.png", 2, 2),
 // Allow at most 50 particles at any time, the particles are lasting longer this time
-// so we need to allow more on screen at once                
-                50, 
-// Particles last for at least 4 seconds                
-                4, 
+// so we need to allow more on screen at once
+                50,
+// Particles last for at least 4 seconds
+                4,
 // And at most 5 seconds
                 5,
 // Point sources always generate particles at the location of the source, the particles
@@ -144,10 +144,10 @@ image:jme3/particles1.jpg[particles1.jpg,with="",height=""]
                 new PointSource(new Vector3f(-3, 0, -3), new Vector3f(3, 0, 3)),
 // Emit particles at regular intervals, 10 particles every second
                 new RegularEmission(10),
-// ** Influencers start here                
-// Select a random sprite from the 4 available for each particle                
+// ** Influencers start here
+// Select a random sprite from the 4 available for each particle
                 new RandomSpriteInfluencer(),
-// Particles start off with a size of 0.5 units, end with a radius of 0.1                
+// Particles start off with a size of 0.5 units, end with a radius of 0.1
                 new SizeInfluencer(0.5f, 0.25f),
 // Particles start yellow full opacity and fade towards red with very low opacity
                 new MultiColorInfluencer(
@@ -156,7 +156,7 @@ image:jme3/particles1.jpg[particles1.jpg,with="",height=""]
                     new MultiColorInfluencer.Stage(0.3f, new ColorRGBA(1f, 1f, 1f, 0.5f)),
                     new MultiColorInfluencer.Stage(1, new ColorRGBA(1f,1f,1f,0f))
                 ),
-// No matter what velocity particles started with they will start moving upwards.               
+// No matter what velocity particles started with they will start moving upwards.
                 new PreferredDirectionInfluencer(new Vector3f(0, 1, 0), 0.25f));
 
 // Finally attach the geometry to the rootNode in order to start the particles running
@@ -167,7 +167,7 @@ image:jme3/particles1.jpg[particles1.jpg,with="",height=""]
 
 You can see that the only change is to make the particles last a little longer and to change the ColorInfluencer for a MultiColorInfluencer, and yet the results look quite different:
 
-image:jme3/particles2.jpg[particles2.jpg,with="",height=""]
+image:jme3/particles2.jpg[particles2.jpg,width="",height=""]
 
 This isn't a very convincing fire yet, but it is very simple to get up and running. One problem with this approach is that particles are done using an alpha-additive material, they can only make things brighter but never darker. That is not ideal for smoke which should be able to make them darker too. We will look at this again later but for now we will move on to some different mesh types.
 
@@ -184,7 +184,7 @@ While PointMesh is recommended for basic particles for more advanced options the
 
 The flame image from before is used for the second emitter, the first emitter uses this image which you can download and use:
 
-image:jme3/runecircle.png[runecircle.png,with="256",height=""]
+image:jme3/runecircle.png[runecircle.png,width="256",height=""]
 
 ====
 
@@ -195,48 +195,48 @@ image:jme3/runecircle.png[runecircle.png,with="256",height=""]
     @Override
     public void simpleInitApp() {
 
-// Construct a new ParticleController to provide the actual spell runes effect     
+// Construct a new ParticleController to provide the actual spell runes effect
         ParticleController pCtrl = new ParticleController(
 // The name of the emitter
-                "SpellRunes", 
+                "SpellRunes",
 // Use a Quad Mesh, this image is available for download on this page. The texture file contains
 // a single image so there are no sprite columns and rows to set up. The BillboardStrategy is how
 // the particles should be oriented, in this case it uses the particle rotation.
                 new QuadMesh(QuadMeshBillboardStrategy.USE_PARTICLE_ROTATION, assetManager, "Textures/runeCircle.png"),
 // Allow at most 9 particles at any time
-                9, 
-// Particles always last for 4 seconds                
-                4, 
+                9,
+// Particles always last for 4 seconds
+                4,
                 4,
 // We want to generate all particles from the same location with the same velocity.
                 new PointSource(new Vector3f(0, 1f, 0), new Vector3f(0, 1f, 0)),
 // Emit particles at regular intervals, 4 particles every second
                 new RegularEmission(2),
-// ** Influencers start here                
+// ** Influencers start here
 // These particles should be size 3 and stay the same size
                 new SizeInfluencer(3, 3),
-// Start the particles at full opacity blue and then fade them out to 0 opacity cyan.                
+// Start the particles at full opacity blue and then fade them out to 0 opacity cyan.
                 new ColorInfluencer(ColorRGBA.Blue, new ColorRGBA(0, 1, 1, 0)),
-// Rotate all particles by the same amount. The units are radians-per-second              
+// Rotate all particles by the same amount. The units are radians-per-second
                 new RotationInfluencer(
                     new Vector3f(0, FastMath.QUARTER_PI, 0),
                     new Vector3f(0, FastMath.QUARTER_PI, 0), false));
 
 // Finally attach the geometry to the rootNode in order to start the particles running
         rootNode.attachChild(pCtrl.getGeometry());
-        
+
 
 // Construct a new ParticleController to provide the central glow effect
         pCtrl = new ParticleController(
 // The name of the emitter
-                "SpellBase", 
+                "SpellBase",
 // Use a simple point mesh (the fastest but most limitted mesh type) with the specified
 // image (from jME3-testdata). The image actually contains a 2x2 grid of sprites.
                 new PointMesh(assetManager, "Textures/flame.png", 2, 2),
-// Allow at most 76 particles at any time                
-                76, 
-// Particles last for at least 5 seconds                
-                5, 
+// Allow at most 76 particles at any time
+                76,
+// Particles last for at least 5 seconds
+                5,
 // And at most 5 seconds
                 5,
 // Point sources always generate particles at the location of the source, the particles
@@ -244,8 +244,8 @@ image:jme3/runecircle.png[runecircle.png,with="256",height=""]
                 new PointSource(new Vector3f(-1f, 0, -1f), new Vector3f(1f, 0.5f, 1f)),
 // Emit particles at regular intervals, 15 particles every second
                 new RegularEmission(15),
-// ** Influencers start here                
-// Select a random sprite from the 4 available for each particle                
+// ** Influencers start here
+// Select a random sprite from the 4 available for each particle
                 new RandomSpriteInfluencer(),
 // Particles start red with some blue and green and fade towards blue zero opacity
 // Because particles are rendered using an additive blend then any area where a lot
@@ -254,8 +254,8 @@ image:jme3/runecircle.png[runecircle.png,with="256",height=""]
 
 // Finally attach the geometry to the rootNode in order to start the particles running
         rootNode.attachChild(pCtrl.getGeometry());
-        
-        
+
+
         cam.setLocation(new Vector3f(0, 10, -10));
         cam.lookAt(Vector3f.ZERO, Vector3f.UNIT_Y);
     }
@@ -264,7 +264,7 @@ image:jme3/runecircle.png[runecircle.png,with="256",height=""]
 ----
 
 The result should look something like:
-image:jme3/contributions/youtube_spjqag99hy[youtube_spjqag99hy,with="",height=""]
+image:jme3/contributions/youtube_spjqag99hy[youtube_spjqag99hy,width="",height=""]
 
 
 == Using a mesh as the particle source
@@ -293,26 +293,26 @@ There is a model of a monkeys head in the test data that is used in this example
 
 The result should look something like:
 
-image:jme3/particles3.jpg[particles3.jpg,with="",height=""]
+image:jme3/particles3.jpg[particles3.jpg,width="",height=""]
 
 Now lets set fire to the monkey! (No monkeys were harmed during the making of this particle system!).
 
 [source,java]
 ----
 
-   
-// Construct a new ParticleController       
+
+// Construct a new ParticleController
         ParticleController pCtrl = new ParticleController(
 // The name of the emitter
-                "SimpleFire", 
+                "SimpleFire",
 // Use a simple point mesh (the fastest but most limitted mesh type) with the specified
 // image (from jME3-testdata). The image actually contains a 2x2 grid of sprites.
                 new PointMesh(assetManager, "Textures/flame.png", 2, 2),
 // Allow at most 1200 particles at any time, the particles are lasting longer this time
-// so we need to allow more on screen at once                
-                1200, 
-// Particles last for at least 4 seconds                
-                4, 
+// so we need to allow more on screen at once
+                1200,
+// Particles last for at least 4 seconds
+                4,
 // And at most 5 seconds
                 5,
 // A MeshSource scans a geometry and picks a random point on the surface of that
@@ -321,10 +321,10 @@ Now lets set fire to the monkey! (No monkeys were harmed during the making of th
                 new MeshSource(g),
 // Emit particles at regular intervals, 10 particles every second
                 new RegularEmission(240),
-// ** Influencers start here                
-// Select a random sprite from the 4 available for each particle                
+// ** Influencers start here
+// Select a random sprite from the 4 available for each particle
                 new RandomSpriteInfluencer(),
-// Particles start off with a size of 0.1 units, end with a size of 0.15                
+// Particles start off with a size of 0.1 units, end with a size of 0.15
                 new SizeInfluencer(0.1f, 0.15f),
 // Particles have a constant speed of 0.25f, this will modify the original speed
 // from the emitter and then allow the GravityInfluencer to change the direction
@@ -337,7 +337,7 @@ Now lets set fire to the monkey! (No monkeys were harmed during the making of th
                     new MultiColorInfluencer.Stage(0.5f, new ColorRGBA(1f, 1f, 1f, 0.25f)),
                     new MultiColorInfluencer.Stage(1, new ColorRGBA(1f,1f,1f,0f))
                 ),
-// No matter what velocity particles started with they will start moving upwards.               
+// No matter what velocity particles started with they will start moving upwards.
                 new GravityInfluencer(new Vector3f(0, 0.5f, 0)));
 
 // Finally attach the geometry to the rootNode in order to start the particles running
@@ -347,7 +347,7 @@ Now lets set fire to the monkey! (No monkeys were harmed during the making of th
 
 Again this is just a very simple example, much more sophisticated fire effects are possible with the use of the right textures and mixture of emitters and influencers. The result though should look something like this:
 
-image:jme3/contributions/youtube_w_zgjhz2au[youtube_w_zgjhz2au,with="",height=""]
+image:jme3/contributions/youtube_w_zgjhz2au[youtube_w_zgjhz2au,width="",height=""]
 
 
 == Meshes and Weighted Meshes
@@ -415,37 +415,37 @@ There is a rock texture available in the jME3 test data, or you can substitute a
 
 // Construct the new particle controller
         ParticleController rockCtrl = new ParticleController(
-                "TemplateMesh", 
+                "TemplateMesh",
 // The TemplateMesh uses the rock material we created previously, the two boolean
 // flags say that we are not interested in vertex colours but we do want the vertex
 // normals. The array of meshes extracted from the model is then passed in to use
 // as models for each particle.
-                new TemplateMesh(rock, false, true, templates), 
-// A maximum of 64 particles at once, each lasting for 5 to 5.5 seconds.                
-                64, 
-                5, 
+                new TemplateMesh(rock, false, true, templates),
+// A maximum of 64 particles at once, each lasting for 5 to 5.5 seconds.
+                64,
+                5,
                 5.5f,
-// Particles are emitted from the source that we created and positioned earlier                
-                source, 
-// Emit 8 particles per second                
+// Particles are emitted from the source that we created and positioned earlier
+                source,
+// Emit 8 particles per second
                 new RegularEmission(8),
 // The "sprites" in this case are the available templates. The TemplateMesh has
 // one spriteColumn for each template it has been provided, so the standard
 // RandomSpriteInfluencer just causes one to be picked at random each time a
 // particle is emitted.
                 new RandomSpriteInfluencer(),
-// Rocks fall.                
+// Rocks fall.
                 new GravityInfluencer(new Vector3f(0, -4, 0)),
 // Rocks spin.
                 new RotationInfluencer(new Vector3f(-2, -2, -2), new Vector3f(2, 2, 2), false));
-        
-        rootNode.attachChild(rockCtrl.getGeometry());        
-    }        
+
+        rootNode.attachChild(rockCtrl.getGeometry());
+    }
 
 ----
 
 The result should look like:
-image:jme3/contributions/youtube_a7y53uf8giw[youtube_a7y53uf8giw,with="",height=""]
+image:jme3/contributions/youtube_a7y53uf8giw[youtube_a7y53uf8giw,width="",height=""]
 
 Any number and mixture of models can be used, although as it is all a single mesh the same material must be used for all of them. It is recommended to keep a similar number of vertices for each of the models but that is not a strict requirement.
 
@@ -463,29 +463,29 @@ Adding the following code:
 
 
         ParticleController pCtrl = new ParticleController(
-                "TemplateFlames", 
+                "TemplateFlames",
                 new PointMesh(assetManager, "Textures/flame.png", 2, 2),
-                1300, 
-                3, 
-                4, 
+                1300,
+                3,
+                4,
                 new MeshSource(rockCtrl.getGeometry()),
-                new RegularEmission(320), 
+                new RegularEmission(320),
                 new SizeInfluencer(0.5f, 2),
                 new ColorInfluencer(new ColorRGBA(1,1,0.1f, 1f), new ColorRGBA(1,0,0,0.05f)),
                 new GravityInfluencer(new Vector3f(0, 0.3f, 0)),
                 new RandomImpulseInfluencer(
-                    RandomImpulseInfluencer.ImpulseApplicationTime.INITIALIZE, 
-                    new Vector3f(-0.5f, -0.5f, -0.5f), 
+                    RandomImpulseInfluencer.ImpulseApplicationTime.INITIALIZE,
+                    new Vector3f(-0.5f, -0.5f, -0.5f),
                     new Vector3f(0.5f, 0.5f, 0.5f)));
-        
+
         rootNode.attachChild(pCtrl.getGeometry());
-        
+
 
 ----
 
 Results in something that looks like this:
 
-image:jme3/contributions/youtube_wgr5rzf9apg[youtube_wgr5rzf9apg,with="",height=""]
+image:jme3/contributions/youtube_wgr5rzf9apg[youtube_wgr5rzf9apg,width="",height=""]
 
 You can see that while dramatic the fire is left behind each particle, this is because although it is emitted from the face of the particle at its current position it has no knowledge of how that particle is moving.
 
@@ -501,7 +501,7 @@ Leave everything else the same but change the MeshSource into
 ----
 
 You can see that this gives much better results:
-image:jme3/contributions/youtube_2blbzvm0ezq[youtube_2blbzvm0ezq,with="",height=""]
+image:jme3/contributions/youtube_2blbzvm0ezq[youtube_2blbzvm0ezq,width="",height=""]
 
 There is a lot of falling rocks and fire here, but not much in the way of smoke. That could be added using a multi-colour emitter as previously, but the standard particle material is additive. That means it can only make colours brighter, never darker. For smoke it should be able to darken as well as lighten.
 
@@ -525,15 +525,15 @@ To add smoke we can add a third emitter after the other two:
 
 // Construct the new particle controller
         pCtrl = new ParticleController(
-                "TemplateSmoke", 
+                "TemplateSmoke",
 // The Smoke.png texture contains 15 sprites, if you use a different texture adjust
 // these parameters accordingly.
                 new PointMesh(smokeMat, 15, 1),
-                800, 
-                4, 
-                5, 
-                new ParticleParticleSource(rockCtrl), 
-                new RegularEmission(180), 
+                800,
+                4,
+                5,
+                new ParticleParticleSource(rockCtrl),
+                new RegularEmission(180),
                 new SizeInfluencer(1f, 2.5f),
                 new MultiColorInfluencer(
                     new MultiColorInfluencer.Stage(0, new ColorRGBA(1, 1, 1, 0)),
@@ -541,16 +541,16 @@ To add smoke we can add a third emitter after the other two:
                     new MultiColorInfluencer.Stage(1, new ColorRGBA(1, 1, 1, 0))),
                 new GravityInfluencer(new Vector3f(0, 0.75f, 0)),
                 new RandomImpulseInfluencer(
-                    RandomImpulseInfluencer.ImpulseApplicationTime.INITIALIZE, 
-                    new Vector3f(-0.5f, -0.5f, -0.5f), 
+                    RandomImpulseInfluencer.ImpulseApplicationTime.INITIALIZE,
+                    new Vector3f(-0.5f, -0.5f, -0.5f),
                     new Vector3f(0.5f, 0.5f, 0.5f)));
-        
-        rootNode.attachChild(pCtrl.getGeometry());      
+
+        rootNode.attachChild(pCtrl.getGeometry());
 
 ----
 
 The results look something like:
-image:jme3/contributions/youtube_01qcbgbvf-c[youtube_01qcbgbvf-c,with="",height=""]
+image:jme3/contributions/youtube_01qcbgbvf-c[youtube_01qcbgbvf-c,width="",height=""]
 
 To complete the effect one final line of code adds a skybox (using another texture that can be find in the test data):
 
@@ -563,4 +563,4 @@ To complete the effect one final line of code adds a skybox (using another textu
 
 Now we have the final effect which looks like:
 
-image:jme3/contributions/youtube_udewajw4lxu[youtube_udewajw4lxu,with="",height=""]
+image:jme3/contributions/youtube_udewajw4lxu[youtube_udewajw4lxu,width="",height=""]

+ 9 - 9
src/docs/asciidoc/jme3/eclipse_jme3_android_jnindk.adoc

@@ -1,6 +1,6 @@
 = Eclipse + jME3 + Android + JNI/NDK
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../
 :imagesdir: ..
@@ -52,7 +52,7 @@ If you are unfamiliar with Eclipse and how it lays out/stores its configuration,
 
 You can select your workspace either by starting Eclipse (if the initial prompt is enabled) or by navigating to _File → Switch Workspace → Other_.
 
-image:jme3/eclipse-switch-workspace.png[Eclipse: Switch Workspace,with="",height=""]
+image:jme3/eclipse-switch-workspace.png[Eclipse: Switch Workspace,width="",height=""]
 
 For this guide, we're going to create a new folder called `JMonkey` in our `C:\` drive, however this folder can be anywhere on your drive (the same applies for users of other operating systems). We will also switch to it as a workspace.
 
@@ -218,7 +218,7 @@ Make sure that _Mark this project as a library_ is unchecked and hit _Finish_ (o
 
 First, we need to set up our build path. Surprisingly enough, it's much easier than the base project, though it is done a little differently.
 
-At the time of this guide's writing, the latest release of the ADT/Eclipse plugin creates a `libs` folder within your project structure. This special folder automatically includes all of its contents on the build path. 
+At the time of this guide's writing, the latest release of the ADT/Eclipse plugin creates a `libs` folder within your project structure. This special folder automatically includes all of its contents on the build path.
 
 Normally, you would drop the JAR files directly into this folder. However, this is undesirable as future releases/builds of JME3 would require you to re-copy all of the JAR files. Instead, we will simply link them.
 
@@ -259,20 +259,20 @@ public JMEclipseActivity()
 {
 	// Set the application class to run
 	appClass = "com.jme3.test.MyGame";
-	
+
 	// Try ConfigType.FASTEST; or ConfigType.LEGACY if you have problems
 	eglConfigType = ConfigType.BEST;
-	
+
 	// Exit Dialog title & message
 	exitDialogTitle = "Quit game?";
 	exitDialogMessage = "Do you really want to quit the game?";
-	
+
 	// Choose screen orientation
 	screenOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
-	
+
 	// Invert the MouseEvents X (default = true)
 	mouseEventsInvertX = true;
-	
+
 	// Invert the MouseEvents Y (default = true)
 	mouseEventsInvertY = true;
 }

+ 48 - 48
src/docs/asciidoc/jme3/external/blender-example.adoc

@@ -1,6 +1,6 @@
 = Warg - from cube to animated and textured game model Example
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -10,14 +10,14 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 [IMPORTANT]
 ====
-to make this example you need to know basic of modeling like extending faces / merge vertexes / (move vertex / edge / face) / etc. 
+to make this example you need to know basic of modeling like extending faces / merge vertexes / (move vertex / edge / face) / etc.
 ====
 
 
 
 == Preview
 
-image:jme3/external/preview.jpg[preview.jpg,with="",height=""]
+image:jme3/external/preview.jpg[preview.jpg,width="",height=""]
 
 
 == Step 1 - Prepare
@@ -25,43 +25,43 @@ image:jme3/external/preview.jpg[preview.jpg,with="",height=""]
 - Open Blender with new Scene
 - Add a simple Cube. To make it press shift-a and select Cube
 
-image:jme3/external/2.jpg[2.jpg,with="",height=""]
+image:jme3/external/2.jpg[2.jpg,width="",height=""]
 
 - “t” key open tool window. let’s open it and set x-mirror ON
 
-image:jme3/external/4.jpg[4.jpg,with="",height=""]
+image:jme3/external/4.jpg[4.jpg,width="",height=""]
 
 - Subdivide this cube to get more faces
 * this can be also done via modifiers → subdivision surface (it will be later)
 
-image:jme3/external/5.jpg[5.jpg,with="",height=""]
+image:jme3/external/5.jpg[5.jpg,width="",height=""]
 
 - “n” key open second toolbar with useable options. let's load an example image to help us build Warg.
 I found a nice warg image on devian art.
 
-image:jme3/external/example.jpg[example.jpg,with="",height=""]
+image:jme3/external/example.jpg[example.jpg,width="",height=""]
 
 - make simple Warg Shape like on images
 
-image:jme3/external/6.jpg[6.jpg,with="",height=""]
-image:jme3/external/7.jpg[7.jpg,with="",height=""]
-image:jme3/external/9.jpg[9.jpg,with="",height=""]
+image:jme3/external/6.jpg[6.jpg,width="",height=""]
+image:jme3/external/7.jpg[7.jpg,width="",height=""]
+image:jme3/external/9.jpg[9.jpg,width="",height=""]
 
 
 == Step 2 - Modeling
 
 - in tool window(“t”) is a smooth tool that can help model the warg.
 
-image:jme3/external/10.jpg[10.jpg,with="",height=""]
+image:jme3/external/10.jpg[10.jpg,width="",height=""]
 
 - to easly add edge loop use “loop cut and slide” tool that work that way:
 
-image:jme3/external/12.jpg[12.jpg,with="",height=""]
-image:jme3/external/13.jpg[13.jpg,with="",height=""]
+image:jme3/external/12.jpg[12.jpg,width="",height=""]
+image:jme3/external/13.jpg[13.jpg,width="",height=""]
 
 - Go to modifiers and add Mirror surface
 
-image:jme3/external/14.jpg[14.jpg,with="",height=""]
+image:jme3/external/14.jpg[14.jpg,width="",height=""]
 
 - add some details like eyes / etc.
 
@@ -72,17 +72,17 @@ need to know how to use extend faces(key “e) and merge extended face.
 ====
 
 
-image:jme3/external/15.jpg[15.jpg,with="",height=""]
-image:jme3/external/16.jpg[16.jpg,with="",height=""]
+image:jme3/external/15.jpg[15.jpg,width="",height=""]
+image:jme3/external/16.jpg[16.jpg,width="",height=""]
 
 - to use smooth shading just set it in tool window.
 
-image:jme3/external/17.jpg[17.jpg,with="",height=""]
+image:jme3/external/17.jpg[17.jpg,width="",height=""]
 
 - Apply modifier. just press “Apply” button in Mirror modifier.
 - Remove doubles (it removes vertexes that are too close each other).
 
-image:jme3/external/18.jpg[18.jpg,with="",height=""]
+image:jme3/external/18.jpg[18.jpg,width="",height=""]
 
 
 == Step 2 - Armature
@@ -95,39 +95,39 @@ image:jme3/external/18.jpg[18.jpg,with="",height=""]
 shift-a to add a bone in Edit Mode
 ====
 
-image:jme3/external/19.jpg[19.jpg,with="",height=""]
+image:jme3/external/19.jpg[19.jpg,width="",height=""]
 
 [NOTE]
 ====
 tail should be done in other way. Start to build skeleton from start of the tail (not end)
 ====
 
-image:jme3/external/21.jpg[21.jpg,with="",height=""]
+image:jme3/external/21.jpg[21.jpg,width="",height=""]
 
 - Show names and change armature view (if you like)
 
-image:jme3/external/22.jpg[22.jpg,with="",height=""]
+image:jme3/external/22.jpg[22.jpg,width="",height=""]
 
 - set Names for bones (via properties window or “n” option window)
 
-image:jme3/external/23.jpg[23.jpg,with="",height=""]
+image:jme3/external/23.jpg[23.jpg,width="",height=""]
 
 - Select left side bones only, press shift-d to copy them, and make mirror.
 Remember to have cursor in 0,0,0 and have settings like on image (if not then you will need just to move copied bones manually)
 
-image:jme3/external/25.jpg[25.jpg,with="",height=""]
+image:jme3/external/25.jpg[25.jpg,width="",height=""]
 
 - Press “w” and select “flip names”
 
-image:jme3/external/26.jpg[26.jpg,with="",height=""]
-image:jme3/external/27.jpg[27.jpg,with="",height=""]
+image:jme3/external/26.jpg[26.jpg,width="",height=""]
+image:jme3/external/27.jpg[27.jpg,width="",height=""]
 
 - In Object Mode:
 * Select Model
 * With SHIFT select armature
 * Press “p” and select “with automatic weights”
 
-image:jme3/external/28.jpg[28.jpg,with="",height=""]
+image:jme3/external/28.jpg[28.jpg,width="",height=""]
 
 - Try move a leg in Pose Mode
 
@@ -136,20 +136,20 @@ image:jme3/external/28.jpg[28.jpg,with="",height=""]
 Pose Mode work like Edit mode, use “r to rotate a bone. using “x/“y/“z after “g/“r/“s will also work here like everything else.
 ====
 
-image:jme3/external/29.jpg[29.jpg,with="",height=""]
+image:jme3/external/29.jpg[29.jpg,width="",height=""]
 
 - Go to Animation View
 
-image:jme3/external/30.jpg[30.jpg,with="",height=""]
+image:jme3/external/30.jpg[30.jpg,width="",height=""]
 
 - Add a new action
 
-image:jme3/external/31.jpg[31.jpg,with="",height=""]
+image:jme3/external/31.jpg[31.jpg,width="",height=""]
 
 - Select all bones in Pose Mode and apply location / rottion / scale.
 To do it press “i” and select it like on image:
 
-image:jme3/external/32.jpg[32.jpg,with="",height=""]
+image:jme3/external/32.jpg[32.jpg,width="",height=""]
 
 
 [TIP]
@@ -159,19 +159,19 @@ alt-r / alt-g / alt-s – clear rotation / location / scale
 
 - there is possibility to copy poses
 
-image:jme3/external/33.jpg[33.jpg,with="",height=""]
+image:jme3/external/33.jpg[33.jpg,width="",height=""]
 
 - and also to copy them in mirrored pose
 
-image:jme3/external/35.jpg[35.jpg,with="",height=""]
+image:jme3/external/35.jpg[35.jpg,width="",height=""]
 
 - in action editor you can easly remove / move / scale frames
 
-image:jme3/external/34.jpg[34.jpg,with="",height=""]
+image:jme3/external/34.jpg[34.jpg,width="",height=""]
 
 - If animation work not linear (and you don't like it), then you can change it in Curve editor window
 
-image:jme3/external/36.jpg[36.jpg,with="",height=""]
+image:jme3/external/36.jpg[36.jpg,width="",height=""]
 
 - Thats all for Animations, for more just Read JME wiki / documentation.
 
@@ -181,45 +181,45 @@ image:jme3/external/36.jpg[36.jpg,with="",height=""]
 - Move armature to second layer.
 press “m” to make it.
 
-image:jme3/external/37.jpg[37.jpg,with="",height=""]
+image:jme3/external/37.jpg[37.jpg,width="",height=""]
 
 - In edit mode, need to mark seam on Edges to prepare model for texturing.
 press ctrl-e to make it.
 
-image:jme3/external/38.jpg[38.jpg,with="",height=""]
+image:jme3/external/38.jpg[38.jpg,width="",height=""]
 
 - do it similar to this (or you can make it better):
 
-image:jme3/external/40.jpg[40.jpg,with="",height=""]
-image:jme3/external/41.jpg[41.jpg,with="",height=""]
-image:jme3/external/43.jpg[43.jpg,with="",height=""]
+image:jme3/external/40.jpg[40.jpg,width="",height=""]
+image:jme3/external/41.jpg[41.jpg,width="",height=""]
+image:jme3/external/43.jpg[43.jpg,width="",height=""]
 
 - Press “u” and select first option “unwrap”
 - In UV window you can minimize stretch
 (minimize stretch change with mouse wheele).
 
-image:jme3/external/44.jpg[44.jpg,with="",height=""]
+image:jme3/external/44.jpg[44.jpg,width="",height=""]
 
 - make a 2 geometries for model:
 * body (contains faces for body)
 * eyes (containes faces for eyes)
 
-image:jme3/external/45.jpg[45.jpg,with="",height=""]
+image:jme3/external/45.jpg[45.jpg,width="",height=""]
 
-image:jme3/external/48.jpg[48.jpg,with="",height=""]
+image:jme3/external/48.jpg[48.jpg,width="",height=""]
 
 - for eyes you can use “Sphere projection for unwrap”
 
-image:jme3/external/49.jpg[49.jpg,with="",height=""]
+image:jme3/external/49.jpg[49.jpg,width="",height=""]
 
 - Select texture image
 
-image:jme3/external/50.jpg[50.jpg,with="",height=""]
+image:jme3/external/50.jpg[50.jpg,width="",height=""]
 
 - under “n” option window, set like on image to see texture.
 (ViewPort need to be set as solid, ViewPort is near Object/Edit select)
 
-image:jme3/external/52.jpg[52.jpg,with="",height=""]
+image:jme3/external/52.jpg[52.jpg,width="",height=""]
 
 - Just make texture of model (using Texture Mode – where Object / edit mode is)
 
@@ -230,11 +230,11 @@ under “t tools you can change color / size / etc of brush
 ====
 
 
-image:jme3/external/55.jpg[55.jpg,with="",height=""]
+image:jme3/external/55.jpg[55.jpg,width="",height=""]
 
 - Using 2d tool like Gimp / Photoshop, use filter/modifier to get nice looking skin
 
-image:jme3/external/56.jpg[56.jpg,with="",height=""]
+image:jme3/external/56.jpg[56.jpg,width="",height=""]
 
 - Now only need to export via Ogre Mesh or just via Blend file (using SDK).
 

+ 9 - 9
src/docs/asciidoc/jme3/external/fonts.adoc

@@ -1,6 +1,6 @@
 = Font Creator
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: gui, documentation, hud
 :relfileprefix: ../../
@@ -16,7 +16,7 @@ This SDK plugin provides font support for jMonkeyEngine games. It creates AngelF
 If the plugin is installed, you see it under `Plugins → Installed`
 
 
-image::jme3/external/install-font-plugin.png[install-font-plugin.png,with="450",height="275",align="center"]
+image::jme3/external/install-font-plugin.png[install-font-plugin.png,width="450",height="275",align="center"]
 
 
 (If you don't see it, go to `Tools → Plugins → Available Plugins` to install Font Creator.)
@@ -27,23 +27,23 @@ image::jme3/external/install-font-plugin.png[install-font-plugin.png,with="450",
 The following example creates the custom font `Orbitron.fnt` in the `assets/Interface/Fonts` directory.
 
 
-image::jme3/external/font-1.png[font-1.png,with="",height="",align="center"]
+image::jme3/external/font-1.png[font-1.png,width="",height="",align="center"]
 
 
 
-image::jme3/external/font-2.png[font-2.png,with="",height="",align="center"]
+image::jme3/external/font-2.png[font-2.png,width="",height="",align="center"]
 
 
 
-image::jme3/external/font-3.png[font-3.png,with="",height="",align="center"]
+image::jme3/external/font-3.png[font-3.png,width="",height="",align="center"]
 
 
 
-image::jme3/external/font-4.png[font-4.png,with="",height="",align="center"]
+image::jme3/external/font-4.png[font-4.png,width="",height="",align="center"]
 
 
 
-image::jme3/external/font-5.png[font-5.png,with="",height="",align="center"]
+image::jme3/external/font-5.png[font-5.png,width="",height="",align="center"]
 
 
 
@@ -64,4 +64,4 @@ guiNode.attachChild(hudText);
 == create font for RTL languages like persian and arabic
 
 to create and use persian bitmap fonts use this tool.
- link:https://github.com/younes-noori/bitMapFontCreator[bitMapFontCreator for RTL languages] 
+ link:https://github.com/younes-noori/bitMapFontCreator[bitMapFontCreator for RTL languages]

+ 4 - 4
src/docs/asciidoc/jme3/intermediate/rolling_madness.adoc

@@ -1,6 +1,6 @@
 = PGI's Rolling Tracks
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: game, intermediate
 :relfileprefix: ../../
@@ -15,7 +15,7 @@ This article uses outdated jME3 +++<abbr title="Application Programming Interfac
 ====
 
 
-image::jme3/rolling-madness.png[Rolling Madness,with="324",height="254",align="right"]
+image::jme3/rolling-madness.png[Rolling Madness,width="324",height="254",align="right"]
 
 
 In this intermediate article, PGI explains the workflow of how he created a game with jME3. He covers model creation and loading, physics (collision detection), game logic, game stages, input management, audio, effects, and a custom UI solution. The article contains annotated code samples and many screenshots.
@@ -23,6 +23,6 @@ In this intermediate article, PGI explains the workflow of how he created a game
 .  link:http://www.tukano.it/rollingtracks/rolling_tracks_0.2.zip[Download the sample game] and try it
 .  How was it done? Download and read the tutorial: +link:http://www.tukano.it/documents/rollmadness.pdf[rollmadness.pdf] or +link:http://www.tukano.it/documents/rollmadness.odt[rollmadness.odt]
 
-In the game, you are a pilot speeding down a crazy winding rollercoaster track! Your goal is to stay on the track and shoot as many targets as you can. 
+In the game, you are a pilot speeding down a crazy winding rollercoaster track! Your goal is to stay on the track and shoot as many targets as you can.
 
 Back to <<jme3#,jME3 Tutorials>>

+ 5 - 5
src/docs/asciidoc/jme3/intermediate/transparency_sorting.adoc

@@ -1,6 +1,6 @@
 = Transparency Sorting
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: transparent, sorting, bucket, z-buffer, alpha
 :relfileprefix: ../../
@@ -15,7 +15,7 @@ Hopefully these diagrams help show the futility of it all… I mean the trade of
 The first image I'll show is the 'best case' where all objects are drawn back to front.  I'll then discuss briefly the steps JME goes through to try to make that happen.
 
 
-image::jme3/intermediate/transparency_sorting1.png[transparency_sorting1.png,with="600",height="",align="center"]
+image::jme3/intermediate/transparency_sorting1.png[transparency_sorting1.png,width="600",height="",align="center"]
 
 
 In JME, the opaque layer would generally be placed in the opaque bucket.  All opaque layers are drawn first and within the ability to sort them, they are sorted front to back to prevent overdraw.
@@ -32,7 +32,7 @@ Sorting is done at the object level and it can never be perfect.  It is impossib
 Next I'll show an image of the worst case scenario to show why sorting is important and how your 'best friend' the z-buffer is really transparency's worst enemy.
 
 
-image::jme3/intermediate/transparency_sorting2.png[transparency_sorting2.png,with="600",height="",align="center"]
+image::jme3/intermediate/transparency_sorting2.png[transparency_sorting2.png,width="600",height="",align="center"]
 
 
 This is what will happen if you put all of your objects in the opaque buffer.  JME will sort them front to back and you will get these strange 'windows' into your background.
@@ -47,7 +47,7 @@ Because sorting is done at the object level, you may have triangle to triangle o
 Finally, I'll augment the worst case sorting with something like `alphaDiscardThreshold` (or the old alphaTest/alphaFalloff values).  In this example, let's pretend we only discard pixels with alpha = 0.
 
 
-image::jme3/intermediate/transparency_sorting3.png[transparency_sorting3.png,with="600",height="",align="center"]
+image::jme3/intermediate/transparency_sorting3.png[transparency_sorting3.png,width="600",height="",align="center"]
 
 
 It's better but not perfect.  Any partially transparent pixels will still show the issue.  Partial transparency will drive you crazy if you let it.

+ 1 - 1
src/docs/asciidoc/jme3/math.adoc

@@ -26,7 +26,7 @@ jME uses a Right-Handed coordinate system (as OpenGL does).
 The definition of a coordinate system is defined in jME by the properties sent to Camera. There are no error checks to insure that: 1) the coordinate system is right-handed and 2) The axes are mutually perpendicular. Therefore, if the user sets the axes incorrectly, they are going to experience very odd rendering artifacts (random culling, etc).
 
 
-image::jme3/intermediate/coordinate-system.png[coordinate-system.png,with="235",height="210",align="center"]
+image::jme3/intermediate/coordinate-system.png[coordinate-system.png,width="235",height="210",align="center"]
 
 
 

+ 23 - 23
src/docs/asciidoc/jme3/scripting.adoc

@@ -1,6 +1,6 @@
 = Scripting in JME3 with Groovy. All about it!
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../
 :imagesdir: ..
@@ -9,13 +9,13 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 *Monkeys*,+
 +
-For anyone who still ask for something like *“Scripting” with JME3*, here is it, about it at once! 
+For anyone who still ask for something like *“Scripting” with JME3*, here is it, about it at once!
 
-We nearly reach 3.0, i’m so excited about it and want to write something for it. In this post you will have a good run from Zero to Hero with Groovy and Monkey :p 
+We nearly reach 3.0, i’m so excited about it and want to write something for it. In this post you will have a good run from Zero to Hero with Groovy and Monkey :p
 Not kidding!
 
 
-image::wiki/stll_monkey_typing.jpg[100,with="",height="",align="right"]
+image::wiki/stll_monkey_typing.jpg[100,width="",height="",align="right"]
 
 
 [IMPORTANT]
@@ -31,7 +31,7 @@ emoji:
 
 We will go from basic setup of Groovy in JMP and then example by example every aspect of game you can develop with Groovy.
 More advanced topic come at the end, eg: the way to get the speed of Java, meta-programing, a lot of programming patterns (PP), even AI and Constraint Programming…
-Sounds insanse? Nah ah… 
+Sounds insanse? Nah ah…
 
 
 [IMPORTANT]
@@ -90,9 +90,9 @@ If you already know about Groovy and just curious about how to intergrate Groovy
 
 === WHAT IS GROOVY?
 
-*Groovy*… 
+*Groovy*…
 
-image::wiki/groovy-logo.png[200,with="",height="",align="right"]
+image::wiki/groovy-logo.png[200,width="",height="",align="right"]
 
 
 is an agile and dynamic language for the Java Virtual Machine
@@ -128,16 +128,16 @@ link:http://groovy.codehaus.org/Download?nc[http://groovy.codehaus.org/Download?
 
 _*or “TO SCRIPT OR NOT TO SCRIPT, is the PROBLEM”?*_
 
-*Everything*. 
+*Everything*.
 You can do almost every thing with Groovy just like with Java.
 
-In this post i will show example by example every aspect of game you can develop with Groovy. 
+In this post i will show example by example every aspect of game you can develop with Groovy.
 
 +++<u>*Pros:*</u>+++
 
 *  Scripting is very common and intuitive way to do game programing. It's common because it's shorter, cleaner, easy to read, maintain and re-use.
 
-*  Groovy is young but developed by very talent people, a lot of devoted contributors. 
+*  Groovy is young but developed by very talent people, a lot of devoted contributors.
 
 *  Web and Enterprise in your hand. Ever heard of Grails link:http://grails.org/[http://grails.org/]?
 
@@ -155,9 +155,9 @@ It’s good, but what about the down-side?
 
 === WHEN TO USE SCRIPTING:
 
-Some obvious but always existing problems of Scripting. 
+Some obvious but always existing problems of Scripting.
 
-First every scripting language got the same type-safe dilemma. If you invest too much into Scripting, you fall immediately into the mess that hidden errors which are always very hard to find, only show up in run-time. The balance between benefit and hell of Scripting is thin. 
+First every scripting language got the same type-safe dilemma. If you invest too much into Scripting, you fall immediately into the mess that hidden errors which are always very hard to find, only show up in run-time. The balance between benefit and hell of Scripting is thin.
 Duck-typing is not always a win-win.
 
 
@@ -197,7 +197,7 @@ link:https://blogs.oracle.com/netbeansgroovy/entry/groovy_refactoring_in_netbean
 *  You *CAN* use GROOVY for Java as Lua for C++ (even much more better)
 *  You *CAN* get GROOVY run as FAST as Java
 *  You *CAN* let GROOVY seamlessy intergrated with Java and other JVM languages.
-*  Last but not least, Groovy *kick* asses! :p 
+*  Last but not least, Groovy *kick* asses! :p
 
 
 == LEARN GROOVY
@@ -208,7 +208,7 @@ link:https://blogs.oracle.com/netbeansgroovy/entry/groovy_refactoring_in_netbean
 If you already know about Groovy and just curious about how to intergrate Groovy into JME3. Go straight to Part <<jme3/scripting#into_the_game,scripting>>
 ====
 
-First, Groovy is much more shorter – cleaner than Java. It seamlessly get Java to the world of functional programming, like Python, Haskell, etc, but still make Java developer feel at home. You can read much more in the Groovy site and the internet, so I will not blow it up. 
+First, Groovy is much more shorter – cleaner than Java. It seamlessly get Java to the world of functional programming, like Python, Haskell, etc, but still make Java developer feel at home. You can read much more in the Groovy site and the internet, so I will not blow it up.
 
 Anyway, let’s learn some Groovy syntax, I bet you can master it in 3 hours!
 
@@ -233,7 +233,7 @@ I means use your imagination. I give you some examples:
 
 [10 more]
 
-What I want to say is *Groovy* is for smarty, master it and it save you +++<u>freaking big times</u>+++ ! Java and Groovy are a sweetest combination of programing languages I ever tried beside of dozen of others. 
+What I want to say is *Groovy* is for smarty, master it and it save you +++<u>freaking big times</u>+++ ! Java and Groovy are a sweetest combination of programing languages I ever tried beside of dozen of others.
 
 
 [IMPORTANT]
@@ -281,7 +281,7 @@ GOTO <<jme3/scripting/gpars_usecases#,gpars_usecases>>
 
 [TIP]
 ====
-First I recommend all who don't know much about Groovy read this official documentation link:http://groovy.codehaus.org/Embedding+Groovy[http://groovy.codehaus.org/Embedding+Groovy] 
+First I recommend all who don't know much about Groovy read this official documentation link:http://groovy.codehaus.org/Embedding+Groovy[http://groovy.codehaus.org/Embedding+Groovy]
 ====
 
 
@@ -376,7 +376,7 @@ GOTO <<jme3/scripting/groovy_basicscripts#,groovy_basicscripts>>
 
 === Event – Trigger - Manager
 
-The first idea come to my mind when think of game programming is a game cycle-update or events. 
+The first idea come to my mind when think of game programming is a game cycle-update or events.
 
 In fact, frequently update and sudden event is quite opposite paradigm, the point is to get the best of both world in one design. But can we? At least I can answer partly yes. And such sollution I've seen in big database system use the same hyrid concept.
 
@@ -387,7 +387,7 @@ GOTO <<jme3/scripting/groovy_event#,groovy_event>>
 
 === Configurations with Groovy
 
-Think about the way to config your game's screen resolution, keyboard, database connection, without have to write and parse java property or XML files. Groovy script is text file but much more powerful, like it has variables, methods (def), loop (for), conditions (if-else)…etc to build complicated things (like a program), compared to just plain text. 
+Think about the way to config your game's screen resolution, keyboard, database connection, without have to write and parse java property or XML files. Groovy script is text file but much more powerful, like it has variables, methods (def), loop (for), conditions (if-else)…etc to build complicated things (like a program), compared to just plain text.
 In short Groovy can replace almost every configuration task you can imagine. This topic about using Groovy scrips for that purpose.
 
 GOTO <<jme3/scripting/groovy_config#,groovy_config>>
@@ -395,7 +395,7 @@ GOTO <<jme3/scripting/groovy_config#,groovy_config>>
 
 === AI Tricks with Groovy
 
-As in the introduction above I said this wiki will include everything about Scripting… So, it should also include AI (Artifacial Intelligent) … But I'm not going to tell you all about AI in this wiki, it should be more in another wiki of some AI professiors. I just want to show how a quick implementation of simple AI models can be coded in Groovy: 
+As in the introduction above I said this wiki will include everything about Scripting… So, it should also include AI (Artifacial Intelligent) … But I'm not going to tell you all about AI in this wiki, it should be more in another wiki of some AI professiors. I just want to show how a quick implementation of simple AI models can be coded in Groovy:
 
 GOTO <<jme3/scripting/groovy/ai#,ai>>
 
@@ -407,7 +407,7 @@ What is the most simple but affective techique to make AI. It's FSM
 
 ==== Decision Tree
 
-Builder 
+Builder
 
 
 ==== Pattern Matching
@@ -427,7 +427,7 @@ emoji:
 
 ==== Simple Path finding
 
-Use Groovy extension 
+Use Groovy extension
 emoji:
 
 
@@ -500,7 +500,7 @@ After reading for a while, I guess you are in love with Groovy already. You're w
 [WARNING]
 ====
 
-This page *CAN NOT* be a full description of Groovy… but a snapshot of its good with a few home grown codes for your JME3 game! 
+This page *CAN NOT* be a full description of Groovy… but a snapshot of its good with a few home grown codes for your JME3 game!
 ====
 
 

+ 9 - 9
src/docs/asciidoc/jme3/setting_up_jme3_in_eclipse_zh.adoc

@@ -1,6 +1,6 @@
 = 在Eclipse中集成jME3
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: documentation, install, eclipse
 :relfileprefix: ../
@@ -27,7 +27,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
 
-image::jme3/1_jme3_2014_06_12_zip.png[1_jme3_2014_06_12_zip.png,with="800",height="",align="center"]
+image::jme3/1_jme3_2014_06_12_zip.png[1_jme3_2014_06_12_zip.png,width="800",height="",align="center"]
 
 
 
@@ -38,7 +38,7 @@ image::jme3/1_jme3_2014_06_12_zip.png[1_jme3_2014_06_12_zip.png,with="800",heigh
 *  点击Finish
 
 
-image::jme3/2_create_hellojme3_project.png[2_create_hellojme3_project.png,with="800",height="",align="center"]
+image::jme3/2_create_hellojme3_project.png[2_create_hellojme3_project.png,width="800",height="",align="center"]
 
 项目创建完毕,即可在Package视图中看到这个项目。
 
@@ -50,20 +50,20 @@ image::jme3/2_create_hellojme3_project.png[2_create_hellojme3_project.png,with="
 *  右键单击项目名,在弹出菜单中选择`Build Path &gt; Configure Build Path..`
 
 
-image::jme3/3_configure_build_path.png[3_configure_build_path.png,with="643",height="",align="center"]
+image::jme3/3_configure_build_path.png[3_configure_build_path.png,width="643",height="",align="center"]
 
 
 *  打开项目配置窗口后,选择`Java Build Path &gt; Libraries &gt; Add External JARs..`
 
 
-image::jme3/4_add_external_jars.png[4_add_external_jars.png,with="751",height="",align="center"]
+image::jme3/4_add_external_jars.png[4_add_external_jars.png,width="751",height="",align="center"]
 
 
 *  在“JAR selection对话框中,打开`$HOME/jME3_2012-xx-xx`文件夹
 *  选中`lib`文件夹中所有的JAR文件,然后点击“Open
 
 
-image::jme3/5_jar_selection.png[5_jar_selection.png,with="563",height="",align="center"]
+image::jme3/5_jar_selection.png[5_jar_selection.png,width="563",height="",align="center"]
 
 
 现在所有必要的JAR包都已经添加到了项目的classpath,并显示在在Referenced Libraries中。至于每个JAR文件的详细介绍,请查阅<<jme3/jme3_source_structure#structure_of_jmonkeyengine3_jars,jME3 JAR文件说明>>。
@@ -79,7 +79,7 @@ image::jme3/5_jar_selection.png[5_jar_selection.png,with="563",height="",align="
 .  添加Assets文件夹
 
 
-image::jme3/6_new_source_folder.png[6_new_source_folder.png,with="525",height="",align="center"]
+image::jme3/6_new_source_folder.png[6_new_source_folder.png,width="525",height="",align="center"]
 
 
 
@@ -89,7 +89,7 @@ image::jme3/6_new_source_folder.png[6_new_source_folder.png,with="525",height=""
 .  在hello包中新建一个类,命名为“MyGame,继承于`com.jme3.app.SimpleApplication`
 
 
-image::jme3/7_create_mygame.png[7_create_mygame.png,with="556",height="",align="center"]
+image::jme3/7_create_mygame.png[7_create_mygame.png,width="556",height="",align="center"]
 
 
 然后你可以接着开发<<jme3/beginner/hello_simpleapplication_zh#,你的第一个jme3应用程序>>了!

+ 19 - 19
src/docs/asciidoc/jme3/terminology.adoc

@@ -1,13 +1,13 @@
 = 3D Game Development Terminology
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../
 :imagesdir: ..
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
-Before you start, make certain you are familiar with the following concepts and terminology. 
+Before you start, make certain you are familiar with the following concepts and terminology.
 
 
 == 3D Graphics and Audio
@@ -49,7 +49,7 @@ You create 3D meshes in tools called mesh editors, e.g in Blender. The jMonkeyEn
 
 == Materials: Color, Lighting/Shading
 
-What we call “color is merely part of an object's light reflection. The onlooker's brain uses shading and reflecting properties to infer an object's shape and material. Factors like these make all the difference between chalk vs milk, skin vs paper, water vs plastic, etc! 
+What we call “color is merely part of an object's light reflection. The onlooker's brain uses shading and reflecting properties to infer an object's shape and material. Factors like these make all the difference between chalk vs milk, skin vs paper, water vs plastic, etc!
 
 
 === Color
@@ -128,7 +128,7 @@ image::https://raw.githubusercontent.com/jMonkeyEngine/jmonkeyengine/master/jme3
 
 *  A plain image file or a procedural texture that describes an object's visible surface.
 *  The image can have alpha channels for transparency.
-*  *A Color Map is the minimum texture.* You can map more textures as optional improvements. 
+*  *A Color Map is the minimum texture.* You can map more textures as optional improvements.
 *  Color Maps are unshaded. The same is called Diffuse Map in a Phong-illuminated material, because this texture defines the basic colors of light that are _diffused_ by this object.
 
 
@@ -136,7 +136,7 @@ image::https://raw.githubusercontent.com/jMonkeyEngine/jmonkeyengine/master/jme3
 
 Bump maps are used to describe detailed shapes that would be too hard or simply too inefficient to sculpt in a mesh editor. There are two types:
 
-*  You use Normal Maps to model tiny details such as cracks in walls, rust, skin texture, or a canvas weave ( (link:http://en.wikipedia.org/wiki/Bump_mapping[More on BumpMaps]). 
+*  You use Normal Maps to model tiny details such as cracks in walls, rust, skin texture, or a canvas weave ( (link:http://en.wikipedia.org/wiki/Bump_mapping[More on BumpMaps]).
 *  You use Height Maps to model large terrains with valleys and mountains.
 
 [.right]
@@ -180,7 +180,7 @@ image::https://raw.githubusercontent.com/jMonkeyEngine/jmonkeyengine/master/jme3
 
 Tiles are a very simple, commonly used type of texture. When texturing a wide area (e.g. walls, floors), you don't create one huge texture – instead you tile a small texture repeatedly to fill the area.
 
-A seamless texture is an image file that has been designed or modified so that it can be used as tiles: The right edge matches the left edge, and the top edge matches the bottom edge. The onlooker cannot easily tell where one starts and the next one ends, thus creating an illusion of a huge texture. The downside is that the tiling becomes painfully obvious when the area is viewed from a distance. Also you cannot use it on more complex models such as characters. 
+A seamless texture is an image file that has been designed or modified so that it can be used as tiles: The right edge matches the left edge, and the top edge matches the bottom edge. The onlooker cannot easily tell where one starts and the next one ends, thus creating an illusion of a huge texture. The downside is that the tiling becomes painfully obvious when the area is viewed from a distance. Also you cannot use it on more complex models such as characters.
 
 See also this tutorial on link:http://www.photoshoptextures.com/texture-tutorials/seamless-textures.htm[How to make seamless textures in Photoshop].
 
@@ -199,12 +199,12 @@ Getting the seams and mappings right is crucial: You must use a graphic tool lik
 === Environment Mapping
 
 
-image::http://jmonkeyengine.org/wp-content/uploads/2010/10/glass-teapot1.png[glass-teapot1.png,with="160",height="90",align="right"]
+image::http://jmonkeyengine.org/wp-content/uploads/2010/10/glass-teapot1.png[glass-teapot1.png,width="160",height="90",align="right"]
 
 
-Environment Mapping or Reflection Mapping is used to create the impression of reflections and refractions in real time. It's faster (but less accurate) than the raytracing methods used in offline rendering applications. 
+Environment Mapping or Reflection Mapping is used to create the impression of reflections and refractions in real time. It's faster (but less accurate) than the raytracing methods used in offline rendering applications.
 
-You create a Cube Map to represent your environment; Sphere Maps are also possible, but often look distorted. Basically you give the environment map a set of images showing a “360° view of the background scene – very similar to a skybox. The renderer maps the environment on the texture of the reflective surface, which results in an acceptable “glass/mirror/water effect. Just like a skybox, the reflection map is static, so dynamic things (such as the player walking) are not part of the reflection. (!) 
+You create a Cube Map to represent your environment; Sphere Maps are also possible, but often look distorted. Basically you give the environment map a set of images showing a “360° view of the background scene – very similar to a skybox. The renderer maps the environment on the texture of the reflective surface, which results in an acceptable “glass/mirror/water effect. Just like a skybox, the reflection map is static, so dynamic things (such as the player walking) are not part of the reflection. (!)
 
 See also: <<jme3/advanced/water#,Water>>.
 
@@ -219,7 +219,7 @@ MIP Map means that you provide one texture in two or three resolutions in one fi
 A procedural texture is generated from repeating one small image, plus some pseudo-random, gradient variations (called Perlin noise). Procedural textures look more natural than static rectangular textures, and they look less distorted on spheres. On big meshes, their repetitiveness is much less noticable than with tiled seamless textures. Procedural textures are ideal for irregular large-area textures like grass, soil, rock, rust, and walls. Use the <<sdk/neotexture#,jMonkeyEngine SDK NeoTexture plugin>> to create them.
 
 
-image::http://jmonkeyengine.org/wp-content/uploads/2010/10/neotexture-2.jpg[neotexture-2.jpg,with="380",height="189",align="center"]
+image::http://jmonkeyengine.org/wp-content/uploads/2010/10/neotexture-2.jpg[neotexture-2.jpg,width="380",height="189",align="center"]
 
 
 See also: link:http://gryllus.net/Blender/Lessons/Lesson05.html[Creating Materials in Blender], link:http://en.wikibooks.org/wiki/Blender_3D:_Noob_to_Pro/Every_Material_Known_to_Man[Blender: Every Material Known to Man]
@@ -235,7 +235,7 @@ Unless you animate a 3D cartoon, realism of animated characters is generally a p
 === Rigging and Skinning
 
 
-image::http://pub.admc.com/misc/jme/blenderjmetut/blenderswordsman.png[blenderswordsman.png,with="195",height="151",align="right"]
+image::http://pub.admc.com/misc/jme/blenderjmetut/blenderswordsman.png[blenderswordsman.png,width="195",height="151",align="right"]
 
 
 An animated character has an armature: An internal skeleton (Bones) and an external surface (Skin). The Skin is the visible outside of the character and it includes clothing. The Bones are not visible and are used to interpolate (calculate) the morphing steps of the skin.
@@ -266,7 +266,7 @@ E.g. when the thigh bone moves, the leg is fully affected, the hips joints less
 ====
 What is the difference between animation (rigging, skinning, keyframes) and transformation (rotation, scaling, moving, “slerp)?
 
-*  Transformation is simpler than animation. Sometimes, transforming a geometry already makes it look like it is animated: For example, a spinning windmill, a pulsating alien ball of energy, moving rods of a machine. Transformations can be easily done with JME3 methods. 
+*  Transformation is simpler than animation. Sometimes, transforming a geometry already makes it look like it is animated: For example, a spinning windmill, a pulsating alien ball of energy, moving rods of a machine. Transformations can be easily done with JME3 methods.
 *  Animations however are more complex and are encoded in a special format (keyframes). They distort the skin of the mesh, and complex series of motions be “recorded (in external tools) and played (in JME3).
 
 
@@ -293,10 +293,10 @@ Non-player (computer-controlled) characters (NPCs) are only fun in a game if the
 
 The domain of artificial intelligence deals, among other things, with:
 
-*  *Knowledge* – Knowledge is _the data_ to which the AI agent has access, and on which the AI bases its decisions. Realistic agents only “know what they “see and hear. This implies that information can be hidden from the AI to keep the game fair. You can have an all-knowing AI, or you can let only some AI agents share information, or you let only AI agents who are close know the current state. + 
+*  *Knowledge* – Knowledge is _the data_ to which the AI agent has access, and on which the AI bases its decisions. Realistic agents only “know what they “see and hear. This implies that information can be hidden from the AI to keep the game fair. You can have an all-knowing AI, or you can let only some AI agents share information, or you let only AI agents who are close know the current state. +
 Example: After the player trips the wire, only a few AI guards with two-way radios start moving towards the player's position, while many other guards don't suspect anything yet.
 *  *Goal Planning* – Planning is about how an AI agent _takes action_. Each agent has the priority to achieve a specific goal, to reach a future state. When programming, you split the agent's goal into several subgoals. The agent consults its knowledge about the current state, chooses from available tactics and strategies, and prioritizes them. The agent repeatedly tests whether the current state is closer to its goal. If unsuccessful, the agent must discard the current tactics/strategy and try another one. +
-Example: An agent searches the best path to reach the player base in a changing environment, avoiding traps. An agent chases the player with the goal of eliminating him. An agent hides from the player with the goal of murdering a VIP. 
+Example: An agent searches the best path to reach the player base in a changing environment, avoiding traps. An agent chases the player with the goal of eliminating him. An agent hides from the player with the goal of murdering a VIP.
 *  *Problem Solving* – Problem solving is about how the agent _reacts to interruptions_, obstacles that stand between it and its goal. The agent uses a given set of facts and rules to deduct what state it is in – triggered by perceptions similar to pain, agony, boredom, or being trapped. In each state, only a specific subset of reactions makes sense. The actual reaction also depends on the agent's, goal since the agent's reaction must not block its own goal! +
 Examples: If player approaches, does the agent attack or conceal himself or raise alarm? While agent is idle, does he lay traps or heal self or recharge magic runes? If danger to own life, does the agent try to escape or kamikaze?
 
@@ -336,7 +336,7 @@ The origin is the central point in the 3D world, where the three axes meet. It's
 
 A vector has a length and a direction, like an arrow in 3D space. A vector starts at a coordinate (x1,y1,z1) or at the origin, and ends at the target coordinate (x2,y2,z2). Backwards directions are expressed with negative values.
 
-*Example:* 
+*Example:*
 
 [source,java]
 ----
@@ -362,7 +362,7 @@ Negate the components of the vector to turn its direction, e.g. negating right (
 A _normalized vector_ is a custom _unit vector_. A normalized vector is not the same as a _(surface) normal vector_.
 When you normalize a vector, it still has the same direction, but you lose the information where the vector originally pointed.
 
-*Example:* You normalize vectors before calculating angles. 
+*Example:* You normalize vectors before calculating angles.
 
 
 ==== Surface Normal Vectors
@@ -370,7 +370,7 @@ When you normalize a vector, it still has the same direction, but you lose the i
 [.right]
 image::jme3/300px-surface_normal.png[300px-surface_normal.png,width="",height=""]
 
-A surface normal is a vector that is perpendicular (orthogonal) to a plane. 
+A surface normal is a vector that is perpendicular (orthogonal) to a plane.
 You calculate the Surface Normal by calculating the cross product.
 
 
@@ -385,7 +385,7 @@ In 3D space, speaking of an orthogonal only makes sense with respect to a plane.
 
 ==== Transformation
 
-Transformation means rotating (turning), scaling (resizing), or translating (moving) objects in 3D scenes. 3D engines offer simple methods so you can write code that transforms nodes. 
+Transformation means rotating (turning), scaling (resizing), or translating (moving) objects in 3D scenes. 3D engines offer simple methods so you can write code that transforms nodes.
 
 Examples: Falling and rotating bricks in 3D Tetris.
 

+ 25 - 25
src/docs/asciidoc/jme3/tools/charts.adoc

@@ -1,6 +1,6 @@
 = JME 3 Tutorial - Visualizing 3D Charts
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -16,7 +16,7 @@ This tutorial assumes that you know:
 *  About the <<jme3/tools/navigation#,Navigation package>>.
 *  How to create a <<jme3/beginner/hello_terrain#,3D landscape>> using image-based heightmaps.
 
-image:jme3/tools/mercator_grid_3d_small.png[mercator_grid_3d_small.png,with="",height=""]
+image:jme3/tools/mercator_grid_3d_small.png[mercator_grid_3d_small.png,width="",height=""]
 
 You will learn that how to account for distortions that arise when mapping of one coordinate system into (i.e. when converting longitude/latitude into JME's World Units), how to construct a tile tree and how to render a dynamic mercator grid.
 
@@ -38,9 +38,9 @@ applyDefaultTexture();
 
 ----
 
-image:jme3/tools/globe.png[A 256x256 mercator projection of planet earth.,with="",height=""]
+image:jme3/tools/globe.png[A 256x256 mercator projection of planet earth.,width="",height=""]
 
-In essence, 3D chart visualization is achieved by converting the polygons composing planet earth's landmass into float matrices whereby each value within the matrix represents a specific terrain height. For example, given a terrain of 100 x 100 world units, we construct a heightmap by creating a 100 x 100 matrix. Each cell within the matrix corresponds to a terrain coordinate; each cell’s value to that coordinate’s desired height. But you already knew that, so where's the tricky part? Well, when visualizing a chart an accurate projection requires a translation of latitude/longitude coordinates into their equivalent world unit (x,y,z) counterparts. This translation however is not a straight forward mapping of one coordinate system into the other due to the distortion arising from projecting an oblate spheroid onto a flat surface (see my previous wiki article <<jme3/tools/navigation#,here>>). This means that if one would adhere to a linear scale, the Mercator projection would distort the size and shape of objects as the object distances itself from the equator, eventually resulting in infinite scaling as the pole is reached. So the first task at hand, is to construct accurate 2D projections of planet earth which we can then use as heightmaps. We can achieve this using the jme3.tools.navigation package and co-ordinate sets available at link:http://www.ngdc.noaa.gov/mgg/coast/[noaa.gov]. 
+In essence, 3D chart visualization is achieved by converting the polygons composing planet earth's landmass into float matrices whereby each value within the matrix represents a specific terrain height. For example, given a terrain of 100 x 100 world units, we construct a heightmap by creating a 100 x 100 matrix. Each cell within the matrix corresponds to a terrain coordinate; each cell’s value to that coordinate’s desired height. But you already knew that, so where's the tricky part? Well, when visualizing a chart an accurate projection requires a translation of latitude/longitude coordinates into their equivalent world unit (x,y,z) counterparts. This translation however is not a straight forward mapping of one coordinate system into the other due to the distortion arising from projecting an oblate spheroid onto a flat surface (see my previous wiki article <<jme3/tools/navigation#,here>>). This means that if one would adhere to a linear scale, the Mercator projection would distort the size and shape of objects as the object distances itself from the equator, eventually resulting in infinite scaling as the pole is reached. So the first task at hand, is to construct accurate 2D projections of planet earth which we can then use as heightmaps. We can achieve this using the jme3.tools.navigation package and co-ordinate sets available at link:http://www.ngdc.noaa.gov/mgg/coast/[noaa.gov].
 
 As <<jme3/tools/navigation#,previously discussed>>, the distortion in latitude is derived by using the difference in meridional parts between the chart’s centre and the current position as a baseline; through converting the difference to world units by dividing it by the number of world units contained within one minute, a latitude’s y-coordinate can be obtained. Calculating a position’s x-coordinate is somewhat easier as the distortion only applies to latitude, not longitude. Therefore x merely equals the sum or difference between itself and the viewport’s centre coordinate, depending on the relative location of the position itself and the chart’s centre. Despite being able to convert between the two coordinate systems, slight precision problems remain once the chart projection is scaled down past a level of 6 meters. This is caused by the pixel referencing system of modern displays being integer based; once the ratio of minutes to pixels exceeds the aforementioned threshold, slight inaccuracies are introduced into the display. However this is of little relevance to most GIS (such as Debrief) as a) the inaccuracies are a matter of meters (or even centimetres) and b) it is impossible to notice this variation as GPS exposes a much higher inaccuracy (between 10 - 100 meters).
 
@@ -131,11 +131,11 @@ public class TileGenerator {
             ioe.printStackTrace();
         }
     }
-    
-    
+
+
     /**
      * Draws depth contours.
-     * 
+     *
      * @param img           The image to draw to.
      * @param worldSize     The size of the chart.
      * @since 1.0
@@ -226,7 +226,7 @@ public class TileGenerator {
             }
         }
     }
-    
+
     public static void main(String[] args) {
         System.out.println("Debug 3D Tile Generator");
         System.out.println("===========================");
@@ -281,7 +281,7 @@ public class TileGenerator {
         try {
             BufferedImage img = ImageIO.read(chart);
             generator.drawContours(img, TerrainViewer.TERRAIN_SIZE - 1);
-           
+
         } catch (Exception e) {
             e.printStackTrace();
         }
@@ -333,15 +333,15 @@ Essentially, this algorithm can be summarized as follows:
 [source]
 ----
 
-Constructor ( files ): 
+Constructor ( files ):
    for each file in files
-      for each line in file 
+      for each line in file
          if line == -1
             polygonList.add(polygon)
             new polygon
          else
             polygon.add(parse(line))
-            
+
 Paint ( graphics context ):
    for each polygon in polygonList
       if polygon inside view bounds
@@ -349,7 +349,7 @@ Paint ( graphics context ):
 
 ----
 
-image:jme3/tools/heightmap_modelling.png[Summarizing process of visualizing a chart. From left to right: We draw the coordinates downloaded from noaa.gov. Ideally, each polygon should be filled in a light colour, whilst the surrounding ocean remains dark. JME uses these images to create an internal representation of the terrain (a float matrix).,with="",height=""]
+image:jme3/tools/heightmap_modelling.png[Summarizing process of visualizing a chart. From left to right: We draw the coordinates downloaded from noaa.gov. Ideally, each polygon should be filled in a light colour, whilst the surrounding ocean remains dark. JME uses these images to create an internal representation of the terrain (a float matrix).,width="",height=""]
 *Above:* Summarizing process of visualizing a chart. From left to right: We draw the coordinates downloaded from noaa.gov. Ideally, each polygon should be filled in a light colour, whilst the surrounding ocean remains dark. JME uses these images to create an internal representation of the terrain (a float matrix).
 
 The heightmaps produced by the `TileGenerator` are essentially arrays containing float values ranging from 0 to 255. For convenience and efficiency, JME treats these arrays as Portable Network Graphic (PNG) images (again, see the Hello Terrain tutorial). This allows us to store each tile as an image, meaning that each tile will only need to be constructed once. Essentially what the tile generator therefore does is draw a greyscale image of each tile whereby dark colours (i.e. low values from 0 - 50) are valleys and high values (200 - 255) become mountains or hills. In order to maintain scale, these values are scaled by dividing the seabed’s maximum height (in meters) by the meters per pixel of the current chart.
@@ -359,7 +359,7 @@ A tile’s texture is defined by its ”Alphamap”. This is a copy of its heigh
 
 == What's all this talk about tiles?
 
-A tile tree is our way of keeping track of individual tiles. All that it is, is a set of nested sub-directories that holds charts. The top-level directory (our root) contains a chart of the entire world, and each sub-directory an enlarged area of our planet. For example, inside the root, we may have folders that contain a chart just for Ireland, the UK and France. As we traverse the tree further, we get the individual counties or provinces for each country. One way for us to represent this mess of directories, is via a link:http://en.wikipedia.org/wiki/Search_tree[Search Tree]. 
+A tile tree is our way of keeping track of individual tiles. All that it is, is a set of nested sub-directories that holds charts. The top-level directory (our root) contains a chart of the entire world, and each sub-directory an enlarged area of our planet. For example, inside the root, we may have folders that contain a chart just for Ireland, the UK and France. As we traverse the tree further, we get the individual counties or provinces for each country. One way for us to represent this mess of directories, is via a link:http://en.wikipedia.org/wiki/Search_tree[Search Tree].
 
 
 == Creating a tile tree
@@ -386,8 +386,8 @@ Each heightmap is rendered depending on which ID the user selects (where each no
 
 The Tile Tree’s contents is stored in assets/Heightmaps, and each directory level is composed of one descriptor file, one heightmap (in the form of a PNG image) and one alphamap (also in the form of a PNG image). The descriptor files end in a.desc filename extension and contain the geo-coordinate centre of the tile as well as the resolution of the node that they are representing (as always, the resolution is represented in minutes per pixel (mpp)). A descriptor file’s sole purpose is to allow the re-construction of the tile tree upon application initialization. Specifically, this is achieved by the ChartModel object which instantiates the TileTree, passing a reference to _assets/Heightmaps_, which `TileTree` then recursively scans, constructing the tree by interpreting the descriptor files. It is worth noting that all files per level should be named according to the heightmap tile that it represents. That is, if your level represents a chart of Ireland and your heightmap is named Ireland.png then your descriptor file should be named _Ireland.desc_, while your alphamap should be named _Ireland.png.Alphamap.png_.
 
-image:jme3/tools/slide1.jpg[The Tile Tree,with="",height=""]
-image:jme3/tools/slide2.jpg[Looking inside a node...,with="",height=""]
+image:jme3/tools/slide1.jpg[The Tile Tree,width="",height=""]
+image:jme3/tools/slide2.jpg[Looking inside a node...,width="",height=""]
 *Above:* A look inside the “Ireland node. We can see the heightmap, descriptor file and alphamap.
 
 [source,java]
@@ -541,7 +541,7 @@ public class TileTree {
      * Returns the Node matching the given ID. This method is similar
      * to find() with the exception that it only begins searching from
      * a certain node downwards.
-     * 
+     *
      * @param nodeToSearch          The Node from which to start searching.
      * @param nodeID                The ID of the Node that you
      *                              wish to retrieve.
@@ -638,7 +638,7 @@ public class Node {
 
     /**
      * Constructor.
-     * 
+     *
      * @param nodeID                The node's unique identifier.
      * @param resource              Path to the resource that the node represents
      *                              (aka the node's value).
@@ -700,7 +700,7 @@ public class Node {
      * Returns the width in degrees of longitude of the chart / resource that this
      * node represents.
      *
-     * @return          the width in degrees of longitude of the chart / resource 
+     * @return          the width in degrees of longitude of the chart / resource
      *                  that this node represents.
      * @since 1.0
      */
@@ -710,7 +710,7 @@ public class Node {
 
     /**
      * The centre coordinate of the tile / chart that this node represents.
-     * 
+     *
      * @return          The chart's centre in terms of latitude / longitude.
      * @since 1.0
      */
@@ -763,12 +763,12 @@ public void createGrid(double longitudeLevel, float increment) {
         try {
             // Calculate initial spacings for the meridians and
             // parallels
-            
+
 
             // Approach the grid construction from north to south and
             // east to west.
             positions[0] = new Vector3f(0, 0, 0);
-            
+
             // Latitude lines for northern hemisphere
             for (float lat = 0; lat < max; lat += increment, i += 2) {
                 pos = new Position(lat, 180);
@@ -798,7 +798,7 @@ public void createGrid(double longitudeLevel, float increment) {
                 positions[i + 1] = TerrainViewer.mapModel.toWorldUnit(pos);
             }
         } catch (Exception ipe) {
-        
+
         }
 
         int[] indices = new int[i];
@@ -824,4 +824,4 @@ public void createGrid(double longitudeLevel, float increment) {
 
 ----
 
-image:jme3/tools/screen_shot_2011-12-18_at_13.12.01.png[screen_shot_2011-12-18_at_13.12.01.png,with="",height=""]
+image:jme3/tools/screen_shot_2011-12-18_at_13.12.01.png[screen_shot_2011-12-18_at_13.12.01.png,width="",height=""]

+ 27 - 27
src/docs/asciidoc/jme3/tools/navigation.adoc

@@ -1,6 +1,6 @@
 = Introduction to Marine Navigation
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -33,7 +33,7 @@ The difference of latitude between two places is the angular length of arc of an
 
 Similarly, the difference of longitude between two places is the shorter arc of the parallel or the smaller angle at the pole between the meridians of the two places. If both places are on the same side (i.e east or west) of Greenwich, then difference of longitude is the numerical difference of the longitudes of the two places; otherwise the difference of longitude is their numerical sum (unless of course this exceeds 180◦. In that case it is 360◦ minus the sum).
 
-image:jme3/tools/globe_lat_long.png[Figure 1: Illustrated latitude (φ) and longitude (λ). Photo courtesy of Wikimedia Inc.,with="",height=""]
+image:jme3/tools/globe_lat_long.png[Figure 1: Illustrated latitude (φ) and longitude (λ). Photo courtesy of Wikimedia Inc.,width="",height=""]
 
 *Meridional Parts*
 As described by Bowditch, Meridional parts are ”units of latitude that have been adjusted to compensate for the distortion that results from projecting a three-dimensional globe onto a two-dimensional Mercator chart”.
@@ -67,8 +67,8 @@ The number of pixels or world units per minute serves as a baseline for all coor
 Unlike commonly assumed, this method is not derived from the inverse Guder- mannian function. Accepting a set of latitude/longitude coordinates encapsulated in a Position object as a parameter, the method returns the equivalent pixel (x, y) encapsulated as a Point object. This conversion can be summarized as follows[2]:
 
 .  Ordered List Item Get the distance between the given position’s longitude coordinate and the chart’s longitude centre.
-.  Convert the obtained distance into pixels by dividing it with the number of pixels that are contained within one minute. Refer to it as distanceInPixels. 
-.  Calculate the x-coordinate by subtracting or adding it to the canvas’ x-centre coordinate (the canvas’ x-centre coordinate being the canvas width di- vided by two) depending on the location of the position itself and the chart’s centre: That is, if the chart is centred west of the prime meridian and if the position to be converted is west of the centre, then the resulting x-coordinate is the difference between the x-centre and the distanceInPixels obtained in step 2 above. If however the centre is West and the position is east of the centre, then the resulting x-coordinate equates to the sum of the x-centre and its dis- tanceInPixels. The opposite is true for an easterly centre and a position west of this centre or an easterly centre and a position east of this centre. 
+.  Convert the obtained distance into pixels by dividing it with the number of pixels that are contained within one minute. Refer to it as distanceInPixels.
+.  Calculate the x-coordinate by subtracting or adding it to the canvas’ x-centre coordinate (the canvas’ x-centre coordinate being the canvas width di- vided by two) depending on the location of the position itself and the chart’s centre: That is, if the chart is centred west of the prime meridian and if the position to be converted is west of the centre, then the resulting x-coordinate is the difference between the x-centre and the distanceInPixels obtained in step 2 above. If however the centre is West and the position is east of the centre, then the resulting x-coordinate equates to the sum of the x-centre and its dis- tanceInPixels. The opposite is true for an easterly centre and a position west of this centre or an easterly centre and a position east of this centre.
 .  Ordered List Item For the y-coordinate, the difference in meridional parts between the chart’s latitude centre and the position’s latitude serves as a baseline. Con- vert the difference to pixels by dividing it by the number of pixels contained
 
 within one minute. Refer to it as dmp1.
@@ -92,12 +92,12 @@ To convert world units into latitude/longitude coordinates, use the map model’
 
 [source,java]
 ----
-try { 
-     int worldWidth = 800; MapModel3D m = new MapModel3D(worldWidth); 
-     Position pos = m.toPosition(new Vector3f(10, 10, 10)); 
+try {
+     int worldWidth = 800; MapModel3D m = new MapModel3D(worldWidth);
+     Position pos = m.toPosition(new Vector3f(10, 10, 10));
      System.out.println("Latitude: " + pos.getLatitude() + " Longitude: " + pos.getLongitude());
-} catch (InvalidPositionException e) { 
-     e.printStackTrace(); 
+} catch (InvalidPositionException e) {
+     e.printStackTrace();
 }
 ----
 
@@ -106,13 +106,13 @@ Navigational calculations are performed inside the `NavCalculator` class.
 *Mercator Sailing*
 Mercator sailing is defined as ’the process of solving problems involving course, distance, difference of latitude and difference of longitude, by considering them in relation to a Mercator chart’[1]. Essentially, this refers to the plotting of a rhumb line2 on a Mercator chart whereby the rhumb line will appear as a straight line. That is, given a constant bearing β north of the rhumb line, longitude λ0 where the line passes the equator, λ1 being any longitude point of the rhumb line, and φ being any latitude point on the rhumb line then its Mercator projection can be derived as:
 
-*  x = λ1 
-*  y = m(λ1 − λ0) 
+*  x = λ1
+*  y = m(λ1 − λ0)
 
 where slope m is cot(β), then λ and φ can be expressed as
 
-*  x = λ1 
-*  y = tanh−1(sin(φ) φ = sin−1(tanh(m(λ1 − λ0))) 
+*  x = λ1
+*  y = tanh−1(sin(φ) φ = sin−1(tanh(m(λ1 − λ0)))
 
 That is, tan(course) = (differenceinlongitude)/(differenceinmeridionalparts)
 and distance = (differenceinlatitude/cos(course)) where the difference in meridional parts is defined in terms of a Clarke Spheroid.
@@ -121,19 +121,19 @@ This is implemented as follows where `RLSailing` and `Position` are wrapper clas
 
 [source,java]
 ----
-public RLSailing mercatorSailing(Position p1, Position p2) { 
+public RLSailing mercatorSailing(Position p1, Position p2) {
      double dLat = computeDLat(p1.getLatitude(), p2.getLatitude());
-     if (dLat == 0) { 
+     if (dLat == 0) {
           RLSailing rl = planeSailing(p1, p2); return rl;
      }
-     double dLong = computeDLong(p1.getLongitude(), p2.getLongitude()); 
+     double dLong = computeDLong(p1.getLongitude(), p2.getLongitude());
      double dmp = (float) computeDMPClarkeSpheroid(p1.getLatitude(), p2.getLatitude());
-     trueCourse = (float) Math.toDegrees(Math.atan(dLong / dmp)); 
-     double degCrs = convertCourse((float) trueCourse, p1, p2); 
-     distance = (float) Math.abs(dLat / Math.cos(Math.toRadians(trueCourse))); 
-     
+     trueCourse = (float) Math.toDegrees(Math.atan(dLong / dmp));
+     double degCrs = convertCourse((float) trueCourse, p1, p2);
+     distance = (float) Math.abs(dLat / Math.cos(Math.toRadians(trueCourse)));
+
      RLSailing rl = new RLSailing(degCrs, (float) distance);
-     trueCourse = rl.getCourse(); 
+     trueCourse = rl.getCourse();
      return rl;
 }
 ----
@@ -151,14 +151,14 @@ Where m1 and m2 refer to the meridional parts of the offset and destination poin
 
 [source,java]
 ----
-public static double computeDMPClarkeSpheroid(double lat1, double lat2) { 
+public static double computeDMPClarkeSpheroid(double lat1, double lat2) {
      double absLat1 = Math.abs(lat1); double absLat2 = Math.abs(lat2);
      double m1 = (7915.704468 * (Math.log(Math.tan(Math.toRadians(45 + (absLat1 / 2)))) / Math.log(10)) - 23.268932 * Math.sin(Math.toRadians(absLat1)) - 0.052500 * Math.pow(Math.sin(Math.toRadians(absLat1)), 3) - 0.000213 * Math.pow(Math.sin(Math.toRadians(absLat1)), 5));
 double m2 = (7915.704468 * (Math.log(Math.tan(Math.toRadians(45 + (absLat2 / 2)))) / Math.log(10))
 - 23.268932 * Math.sin(Math.toRadians(absLat2)) - 0.052500 * Math.pow(Math.sin(Math.toRadians(absLat2)), 3) - 0.000213 * Math.pow(Math.sin(Math.toRadians(absLat2)), 5));
-     if ((lat1 <= 0 && lat2 <= 0) || (lat1 > 0 && lat2 > 0)) { 
+     if ((lat1 <= 0 && lat2 <= 0) || (lat1 > 0 && lat2 > 0)) {
           return Math.abs(m1 - m2);
-     } else { 
+     } else {
           return m1 + m2;
      }
 }
@@ -189,8 +189,8 @@ Which can be determined as follows:
 
 [source,java]
 ----
-try { 
-     double bearing = NavCalculator.computeBearing(new Position(-53.6, 8.1), new Position(-53, 8. 
+try {
+     double bearing = NavCalculator.computeBearing(new Position(-53.6, 8.1), new Position(-53, 8.
   } catch (InvalidPositionException e) {
      e.printStackTrace();
   }

+ 41 - 41
src/docs/asciidoc/jme3/user_examples/thirdpersoncamera.adoc

@@ -1,13 +1,13 @@
 = User Example: Third Person Camera
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
-image:jme3/user_examples/thirdpersoncamera/3p.png[3p.png,with="",height=""]
+image:jme3/user_examples/thirdpersoncamera/3p.png[3p.png,width="",height=""]
 
 (by Berzee) (see a video demonstration here: link:https://www.youtube.com/watch?v=phu52hmIoYU[https://www.youtube.com/watch?v=phu52hmIoYU])
 
@@ -39,7 +39,7 @@ Most of the code in the example files should be relatively self-explanatory, but
 
 But what if we want to be able to move the camera angle up or down, while the Player stays firmly upright? We can accomplish this with minimal Horrible Maths by adding an invisible “pivot node to the Player, and instructing the camera to follow that “pivot instead. Then we can independently rotate the *pivot* instead of the Player, and do things like this:
 
-image:jme3/user_examples/thirdpersoncamera/pivot2.png[pivot2.png,with="",height=""]
+image:jme3/user_examples/thirdpersoncamera/pivot2.png[pivot2.png,width="",height=""]
 
 Now you know the mystical secrets, and are ready to see the code itself.
 
@@ -87,21 +87,21 @@ public class ThirdPersonPlayerNode extends Node implements ActionListener, Analo
     //object. Check the "onAnalog" function here to see how we do mouselook.
     private ThirdPersonCamera camera;
     private Camera cam;
-    
+
     private Spatial model;
     private CharacterControl characterControl;
     private AnimChannel animChannel;
     private AnimControl animControl;
     private InputManager inputManager;
     private Vector3f walkDirection = new Vector3f();
-    
+
     private boolean left = false;
     private boolean right = false;
     private boolean up = false;
     private boolean down = false;
     private boolean attack;
     private boolean attacking;
-    
+
     //These can all be changed according to your whims.
     private float walkSpeed = .15f;
     private float mouselookSpeed = FastMath.PI;
@@ -109,7 +109,7 @@ public class ThirdPersonPlayerNode extends Node implements ActionListener, Analo
     private float fallSpeed = 20;
     private float gravity = 25;
     private float stepSize = .05f;
-    
+
     //Animation names. These are currently set up for the Ninja.mesh.xml from
     //jme3-test-data.jar (to add that jar to your project, right-click on
     //Libraries in the SDK project explorer, click "Add Library" and choose
@@ -121,34 +121,34 @@ public class ThirdPersonPlayerNode extends Node implements ActionListener, Analo
     private String walkAnim = "Walk";
     private String attackAnim = "Attack3";
     private String jumpAnim = "Climb"; //hilarious
-    
+
     public ThirdPersonPlayerNode(Spatial model, InputManager inputManager, Camera cam)
     {
 	super();
 	this.cam = cam;
 	camera = new ThirdPersonCamera("CamNode", cam, this);
-	
+
         this.model = model;
 	this.model.scale(.01f); //Ninja.mesh.xml-specific scale stuff
 	this.model.setLocalTranslation(0f, -1f, 0f); //Ninja-specific
 	this.attachChild(this.model);
-	
+
 	CapsuleCollisionShape playerShape = new CapsuleCollisionShape(.5f,1f); //Ninja-specific
 	characterControl = new CharacterControl(playerShape, stepSize);
 	characterControl.setJumpSpeed(jumpSpeed);
 	characterControl.setFallSpeed(fallSpeed);
 	characterControl.setGravity(gravity);
 	this.addControl(characterControl);
-	
+
 	animControl = model.getControl(AnimControl.class);
 	animControl.addListener(this);
 	animChannel = animControl.createChannel();
 	animChannel.setAnim(idleAnim);
-	
+
 	this.inputManager = inputManager;
 	setUpKeys();
     }
-    
+
     //Make sure to call this from the main simpleUpdate() loop
     public void update()
     {
@@ -157,17 +157,17 @@ public class ThirdPersonPlayerNode extends Node implements ActionListener, Analo
 	Vector3f camLeft = cam.getLeft().clone();
 	camLeft.y = 0;
 	walkDirection.set(0, 0, 0);
-	
+
 	if (left)  { walkDirection.addLocal(camLeft); }
 	if (right) { walkDirection.addLocal(camLeft.negate()); }
 	if (up)    { walkDirection.addLocal(camDir); }
 	if (down)  { walkDirection.addLocal(camDir.negate()); }
-	
+
 	characterControl.setWalkDirection(walkDirection.normalize().multLocal(walkSpeed));
-	
+
 	handleAnimations();
     }
-    
+
     private void handleAnimations()
     {
 	if(attacking)
@@ -176,7 +176,7 @@ public class ThirdPersonPlayerNode extends Node implements ActionListener, Analo
 	}
 	else if(attack)
 	{
-	    
+
 	    animChannel.setAnim(attackAnim,.3f);
 	    animChannel.setLoopMode(LoopMode.DontLoop);
 	    attack = false;
@@ -202,7 +202,7 @@ public class ThirdPersonPlayerNode extends Node implements ActionListener, Analo
 	    }
 	}
     }
-    
+
     private void setUpKeys()
     {
 	inputManager.addMapping("Left", new KeyTrigger(KeyInput.KEY_A));
@@ -261,7 +261,7 @@ public class ThirdPersonPlayerNode extends Node implements ActionListener, Analo
 	    attack = value;
 	}
     }
-    
+
     //Analog handler for mouse movement events.
     //It is assumed that we want horizontal movements to turn the character,
     //while vertical movements only make the camera rotate up or down.
@@ -300,12 +300,12 @@ public class ThirdPersonPlayerNode extends Node implements ActionListener, Analo
     public void onAnimChange(AnimControl control, AnimChannel channel, String animName)
     {
     }
-    
+
     public CharacterControl getCharacterControl()
     {
 	return characterControl;
     }
-    
+
     public ThirdPersonCamera getCameraNode()
     {
 	return camera;
@@ -350,36 +350,36 @@ public class ThirdPersonCamera
     //for how they should actually behave (min and max angles, et cetera).
     private Node pivot;
     private CameraNode cameraNode;
-    
+
     //Change these as you desire. Lower verticalAngle values will put the camera
     //closer to the ground.
     public float followDistance = 7;
     public float verticalAngle = 30 * FastMath.DEG_TO_RAD;
-    
+
     //These bounds keep the camera from spinning too far and clipping through
     //the floor or turning upside-down. You can change them as needed but it is
     //recommended to keep the values in the (-90,90) range.
     public float maxVerticalAngle = 85 * FastMath.DEG_TO_RAD;
     public float minVerticalAngle = 5 * FastMath.DEG_TO_RAD;
-    
+
     public ThirdPersonCamera(String name, Camera cam, Node player)
     {
-	pivot = new Node("CamTrack");	
+	pivot = new Node("CamTrack");
 	player.attachChild(pivot);
-	
+
 	cameraNode = new CameraNode(name, cam);
         cameraNode.setControlDir(CameraControl.ControlDirection.SpatialToCamera);
 	pivot.attachChild(cameraNode);
 	cameraNode.setLocalTranslation(new Vector3f(0, 0, followDistance));
 	cameraNode.lookAt(pivot.getLocalTranslation(), Vector3f.UNIT_Y);
-	
+
 	pivot.getLocalRotation().fromAngleAxis(-verticalAngle, Vector3f.UNIT_X);
     }
-    
+
     public void verticalRotate(float angle)
     {
 	verticalAngle += angle;
-	
+
 	if(verticalAngle > maxVerticalAngle)
 	{
 	    verticalAngle = maxVerticalAngle;
@@ -388,15 +388,15 @@ public class ThirdPersonCamera
 	{
 	    verticalAngle = minVerticalAngle;
 	}
-	
+
 	pivot.getLocalRotation().fromAngleAxis(-verticalAngle, Vector3f.UNIT_X);
     }
-    
+
     public CameraNode getCameraNode()
     {
 	return cameraNode;
     }
-    
+
     public Node getCameraTrack()
     {
 	return pivot;
@@ -430,26 +430,26 @@ import com.jme3.scene.Node;
  * @author Berzee
  */
 public class Main extends SimpleApplication
-{    
+{
     private Spatial sceneModel;
     private RigidBodyControl scene;
     private BulletAppState bulletAppState;
     private ThirdPersonPlayerNode player;
-    
+
     public static void main(String[] args) {
         Main app = new Main();
         app.start();
     }
 
     @Override
-    public void simpleInitApp() {        
+    public void simpleInitApp() {
         mouseInput.setCursorVisible(false);
 	flyCam.setEnabled(false);
-	
+
 	bulletAppState = new BulletAppState();
 	stateManager.attach(bulletAppState);
 	//bulletAppState.getPhysicsSpace().enableDebug(assetManager);
-	
+
         sceneModel = assetManager.loadModel("Scenes/ManyLights/Main.scene");
 	sceneModel.scale(1f,.5f,1f); //Make scenery short enough to jump on. =P
 	CollisionShape sceneShape = CollisionShapeFactory.createMeshShape((Node) sceneModel);
@@ -457,13 +457,13 @@ public class Main extends SimpleApplication
 	sceneModel.addControl(scene);
         rootNode.attachChild(sceneModel);
 	bulletAppState.getPhysicsSpace().add(scene);
-        
+
 	Spatial playerModel = assetManager.loadModel("Models/Ninja/Ninja.mesh.xml");
 	player = new ThirdPersonPlayerNode(playerModel, inputManager, cam);
 	player.getCharacterControl().setPhysicsLocation(new Vector3f(-5f,2f,5f));
 	rootNode.attachChild(player);
 	bulletAppState.getPhysicsSpace().add(player);
-        
+
         // You must add a light to make the model visible
         DirectionalLight sun = new DirectionalLight();
         sun.setDirection(new Vector3f(-.1f, -.7f, -1f));

+ 6 - 6
src/docs/asciidoc/logo.adoc

@@ -1,6 +1,6 @@
 = The jMonkeyEngine Logo
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
@@ -13,16 +13,16 @@ You may use this logo for the purposes of education and when identifying the use
 
 === Good
 
-image:yes.png[yes.png,with="",height=""]
+image:yes.png[yes.png,width="",height=""]
 
 
 === Bad
 
-image:no.png[no.png,with="",height=""]
+image:no.png[no.png,width="",height=""]
 
 
 == Logos
 
-image:http://jme-hub-cdn.jmonkeyengineor.netdna-cdn.com/uploads/default/2441/d369a6a32c592385.png[d369a6a32c592385.png,with="",height=""]
+image:http://jme-hub-cdn.jmonkeyengineor.netdna-cdn.com/uploads/default/2441/d369a6a32c592385.png[d369a6a32c592385.png,width="",height=""]
 
-image:http://jme-hub-cdn.jmonkeyengineor.netdna-cdn.com/uploads/default/2440/66f57bf4a92ccd5d.png[66f57bf4a92ccd5d.png,with="",height=""]
+image:http://jme-hub-cdn.jmonkeyengineor.netdna-cdn.com/uploads/default/2440/66f57bf4a92ccd5d.png[66f57bf4a92ccd5d.png,width="",height=""]

+ 3 - 3
src/docs/asciidoc/pages/wiki/dokuwiki.adoc

@@ -1,6 +1,6 @@
 = DokuWiki
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -8,7 +8,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
 link:http://www.dokuwiki.org/wiki%3Adokuwiki[
-image::wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height="",align="left"]
+image::wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height="",align="left"]
 ] DokuWiki is a standards compliant, simple to use link:http://en.wikipedia.org/wiki/Wiki[Wiki], mainly aimed at creating documentation of any kind. It is targeted at developer teams, workgroups and small companies. It has a simple but powerful <<wiki/syntax#,syntax>> which makes sure the datafiles remain readable outside the Wiki and eases the creation of structured texts. All data is stored in plain text files – no database is required.
 
 Read the link:http://www.dokuwiki.org/manual[DokuWiki Manual] to unleash the full power of DokuWiki.

+ 65 - 65
src/docs/asciidoc/pages/wiki/syntax.adoc

@@ -1,6 +1,6 @@
 = Formatting Syntax
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -72,7 +72,7 @@ Internal links are created by using square brackets. You can either just give
 a [[pagename]] or use an additional [[pagename|link text]].
 ....
 
-link:http://www.dokuwiki.org/pagename[Wiki pagenames] are converted to lowercase automatically, special characters are not allowed. 
+link:http://www.dokuwiki.org/pagename[Wiki pagenames] are converted to lowercase automatically, special characters are not allowed.
 
 You can use <<some/namespaces#,namespaces>> by using a colon in the pagename.
 
@@ -128,7 +128,7 @@ You can also use an image to link to another internal or external page by combin
 [[http://www.php.net|{{wiki:dokuwiki-128.png}}]]
 ....
 
-link:http://www.php.net[image:wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height=""]]
+link:http://www.php.net[image:wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height=""]]
 
 Please note: The image formatting is the only formatting syntax accepted in link names.
 
@@ -171,13 +171,13 @@ By using four or more dashes, you can make a horizontal line:
 
 You can include external and internal link:http://www.dokuwiki.org/images[images] with curly brackets. Optionally you can specify the size of them.
 
-Real size:                        image:wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height=""]
+Real size:                        image:wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height=""]
 
-Resize to given width:            image:wiki/dokuwiki-128.png[dokuwiki-128.png,with="50",height=""]
+Resize to given width:            image:wiki/dokuwiki-128.png[dokuwiki-128.png,width="50",height=""]
 
-Resize to given width and heightfootnote:[when the aspect ratio of the given width and height doesn't match that of the image, it will be cropped to the new ratio before resizing]: image:wiki/dokuwiki-128.png[dokuwiki-128.png,with="200",height="50"]
+Resize to given width and heightfootnote:[when the aspect ratio of the given width and height doesn't match that of the image, it will be cropped to the new ratio before resizing]: image:wiki/dokuwiki-128.png[dokuwiki-128.png,width="200",height="50"]
 
-Resized external image:           image:http://de3.php.net/images/php.gif[php.gif,with="200",height="50"]
+Resized external image:           image:http://de3.php.net/images/php.gif[php.gif,width="200",height="50"]
 
 ....
 Real size:                        {{wiki:dokuwiki-128.png}}
@@ -189,15 +189,15 @@ Resized external image:           {{http://de3.php.net/images/php.gif?200x50}}
 By using left or right whitespaces you can choose the alignment.
 
 
-image::wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height="",align="right"]
+image::wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height="",align="right"]
 
 
 
-image::wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height="",align="left"]
+image::wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height="",align="left"]
 
 
 
-image::wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height="",align="center"]
+image::wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height="",align="center"]
 
 
 ....
@@ -209,7 +209,7 @@ image::wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height="",align="center"]
 Of course, you can add a title (displayed as a tooltip by most browsers), too.
 
 
-image::wiki/dokuwiki-128.png[This is the caption,with="",height="",align="center"]
+image::wiki/dokuwiki-128.png[This is the caption,width="",height="",align="center"]
 
 
 ....
@@ -357,24 +357,24 @@ ____
 
 == Tables
 
-DokuWiki supports a simple syntax to create tables. 
+DokuWiki supports a simple syntax to create tables.
 [cols="3", options="header"]
 |===
 
-<a| Heading 1      
-<a| Heading 2       
-<a| Heading 3          
+<a| Heading 1
+<a| Heading 2
+<a| Heading 3
 
-<a| Row 1 Col 1    
-<a| Row 1 Col 2     
-<a| Row 1 Col 3        
+<a| Row 1 Col 1
+<a| Row 1 Col 2
+<a| Row 1 Col 3
 
-<a| Row 2 Col 1    
-2+a| some colspan (note the double pipe) 
+<a| Row 2 Col 1
+2+a| some colspan (note the double pipe)
 
-<a| Row 3 Col 1    
-<a| Row 2 Col 2     
-<a| Row 2 Col 3        
+<a| Row 3 Col 1
+<a| Row 2 Col 2
+<a| Row 2 Col 3
 
 |===
 
@@ -393,21 +393,21 @@ Vertical tableheaders are possible, too.
 [cols="3", options="header"]
 |===
 
-<a|              
-<a| Heading 1            
-<a| Heading 2          
+<a|
+<a| Heading 1
+<a| Heading 2
 
-<a| Heading 3    
-<a| Row 1 Col 2          
-<a| Row 1 Col 3        
+<a| Heading 3
+<a| Row 1 Col 2
+<a| Row 1 Col 3
 
-<a| Heading 4    
-a| no colspan this time 
-<a|                    
+<a| Heading 4
+a| no colspan this time
+<a|
 
-<a| Heading 5    
-<a| Row 2 Col 2          
-<a| Row 2 Col 3        
+<a| Heading 5
+<a| Row 2 Col 2
+<a| Row 2 Col 3
 
 |===
 
@@ -426,19 +426,19 @@ You can align the table contents, too. Just add at least two whitespaces at the
 [cols="3", options="header"]
 |===
 
-3+^a|           Table with alignment           
+3+^a|           Table with alignment
 
 >a|         right
-^a|    center    
-<a|left          
+^a|    center
+<a|left
 
-<a|left          
+<a|left
 >a|         right
-^a|    center    
+^a|    center
 
-a| xxxxxxxxxxxx 
-a| xxxxxxxxxxxx 
-a| xxxxxxxxxxxx 
+a| xxxxxxxxxxxx
+a| xxxxxxxxxxxx
+a| xxxxxxxxxxxx
 
 |===
 
@@ -466,7 +466,7 @@ This is preformatted code all spaces are preserved: like              <-this
 [source]
 ----
 
-This is pretty much the same, but you could use it to show that you quoted a file.  
+This is pretty much the same, but you could use it to show that you quoted a file.
 
 ----
 
@@ -486,7 +486,7 @@ See the source of this page to see how to use these blocks.
 [source,java]
 ----
 
-/** 
+/**
  * The HelloWorldApp class implements an application that
  * simply displays "Hello World!" to the standard output.
  */
@@ -507,26 +507,26 @@ The following language strings are currently recognized: _abap, actionscript-fre
 [cols="2", options="header"]
 |===
 
-<a| Parameter  
-a| Description 
+<a| Parameter
+a| Description
 
-a| any number 
-a| will be used as maximum number items to show, defaults to 8 
+a| any number
+a| will be used as maximum number items to show, defaults to 8
 
-<a| reverse    
-a| display the last items in the feed first 
+<a| reverse
+a| display the last items in the feed first
 
-<a| author     
-a| show item authors names 
+<a| author
+a| show item authors names
 
-<a| date       
-a| show item dates 
+<a| date
+a| show item dates
 
 a| description
-a| show the item description. If link:http://www.dokuwiki.org/config%3Ahtmlok[HTML] is disabled all tags will be stripped 
+a| show the item description. If link:http://www.dokuwiki.org/config%3Ahtmlok[HTML] is disabled all tags will be stripped
 
-a| _n_[dhm] 
-a| refresh period, where d=days, h=hours, m=minutes. (e.g. 12h = 12 hours). 
+a| _n_[dhm]
+a| refresh period, where d=days, h=hours, m=minutes. (e.g. 12h = 12 hours).
 
 |===
 
@@ -616,14 +616,14 @@ Some syntax influences how DokuWiki renders a page without creating any output i
 [cols="2", options="header"]
 |===
 
-<a| Macro           
-a| Description 
+<a| Macro
+a| Description
 
-<a| +++~~NOTOC~~+++   
-a| If this macro is found on the page, no table of contents will be created 
+<a| +++~~NOTOC~~+++
+a| If this macro is found on the page, no table of contents will be created
 
-a| +++~~NOCACHE~~+++ 
-a| DokuWiki caches all output by default. Sometimes this might not be wanted (eg. when the +++&lt;php&gt;+++ syntax above is used), adding this macro will force DokuWiki to rerender a page on every call 
+a| +++~~NOCACHE~~+++
+a| DokuWiki caches all output by default. Sometimes this might not be wanted (eg. when the +++&lt;php&gt;+++ syntax above is used), adding this macro will force DokuWiki to rerender a page on every call
 
 |===
 

+ 5 - 5
src/docs/asciidoc/playground/new_page_test.adoc

@@ -1,6 +1,6 @@
 = new_page_test
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../
 :imagesdir: ..
@@ -57,9 +57,9 @@ Beware of the dog when you open the door !!
 
 Is this machine recording? emoji:wink
 
-pkhg: test error image: image:playground/errorimagepkhg1.jpg[not expected error message,with="",height=""]
+pkhg: test error image: image:playground/errorimagepkhg1.jpg[not expected error message,width="",height=""]
 +
-image:wiki/axis-and-grid-code-snippet-screenshot.png[axis-and-grid-code-snippet-screenshot.png,with="",height=""]
+image:wiki/axis-and-grid-code-snippet-screenshot.png[axis-and-grid-code-snippet-screenshot.png,width="",height=""]
 +
-image:playground/eyeball.png[description,with="",height=""]
+image:playground/eyeball.png[description,width="",height=""]
 '''

+ 3 - 3
src/docs/asciidoc/playground/test.adoc

@@ -1,10 +1,10 @@
 = Level 1 Headline
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../
 :imagesdir: ..
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
-image:video_http/jmonkeyengine.org_exchange_public_videos_jmonkeyengine3-scenegraph.mov_880_660[jmonkeyengine.org_exchange_public_videos_jmonkeyengine3-scenegraph.mov_880_660,with="",height=""]
+image:video_http/jmonkeyengine.org_exchange_public_videos_jmonkeyengine3-scenegraph.mov_880_660[jmonkeyengine.org_exchange_public_videos_jmonkeyengine3-scenegraph.mov_880_660,width="",height=""]

+ 6 - 6
src/docs/asciidoc/sdk/3ds_to_blender_to_jmp.adoc

@@ -1,6 +1,6 @@
 = Using Blender as a Intermediator Between 3dMax and the jMonkeyEngine SDK
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../
 :imagesdir: ..
@@ -17,7 +17,7 @@ After you saved your .3ds file in 3dmax, open the blender, delete the default cu
 and import your .3ds file via File—→Import—–&gt;3D Studio.
 
 
-image::http://farm7.static.flickr.com/6088/6137146239_d38ee89f5e_b.jpg[6137146239_d38ee89f5e_b.jpg,with="",height="",align="center"]
+image::http://farm7.static.flickr.com/6088/6137146239_d38ee89f5e_b.jpg[6137146239_d38ee89f5e_b.jpg,width="",height="",align="center"]
 
 
 
@@ -26,7 +26,7 @@ image::http://farm7.static.flickr.com/6088/6137146239_d38ee89f5e_b.jpg[613714623
 Now save your .blend file so you can load it into the jMonkeyEngine SDK.
 
 
-image::http://farm7.static.flickr.com/6063/6137146285_7e5e994702_b.jpg[6137146285_7e5e994702_b.jpg,with="",height="",align="center"]
+image::http://farm7.static.flickr.com/6063/6137146285_7e5e994702_b.jpg[6137146285_7e5e994702_b.jpg,width="",height="",align="center"]
 
 
 
@@ -35,7 +35,7 @@ image::http://farm7.static.flickr.com/6063/6137146285_7e5e994702_b.jpg[613714628
 Click on Import Model button and then click on Open Model button to open the .blend file. Click next, select the checkbox to import a copy from .blend file, and click finish.
 
 
-image::http://farm7.static.flickr.com/6081/6137146313_9b2987b231_b.jpg[6137146313_9b2987b231_b.jpg,with="",height="",align="center"]
+image::http://farm7.static.flickr.com/6081/6137146313_9b2987b231_b.jpg[6137146313_9b2987b231_b.jpg,width="",height="",align="center"]
 
 
 
@@ -44,5 +44,5 @@ image::http://farm7.static.flickr.com/6081/6137146313_9b2987b231_b.jpg[613714631
 As you can see, the .blend model was automatically converted to .j3o binary format. Now, you are able to edit it in SceneComposer ;D.
 
 
-image::http://farm7.static.flickr.com/6076/6137146323_ae6275602c_b.jpg[6137146323_ae6275602c_b.jpg,with="",height="",align="center"]
+image::http://farm7.static.flickr.com/6076/6137146323_ae6275602c_b.jpg[6137146323_ae6275602c_b.jpg,width="",height="",align="center"]
 

+ 7 - 7
src/docs/asciidoc/sdk/asset_packs.adoc

@@ -1,6 +1,6 @@
 = jMonkeyEngine SDK: AssetPacks and AssetPack Browser
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: documentation, sdk, asset
 :relfileprefix: ../
@@ -8,13 +8,13 @@
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
-AssetPacks are a way to package jME3 compatible assets (like models, textures, sounds and whole scenes!) into a package that contains publisher info, license info, descriptions etc. for all of the assets. An AssetPack basically consists of an `assetpack.xml` file that describes the content and an `assets` folder that contains the content. The integrated browser in the jMonkeyEngine SDK allows you to add the assets from installed AssetPacks to any jme3 project scene you are working on. 
+AssetPacks are a way to package jME3 compatible assets (like models, textures, sounds and whole scenes!) into a package that contains publisher info, license info, descriptions etc. for all of the assets. An AssetPack basically consists of an `assetpack.xml` file that describes the content and an `assets` folder that contains the content. The integrated browser in the jMonkeyEngine SDK allows you to add the assets from installed AssetPacks to any jme3 project scene you are working on.
 
 
 == The AssetPack Browser
 
 
-image::sdk/assetpackbrowser-300x166.jpg[assetpackbrowser-300x166.jpg,with="",height="",align="right"]
+image::sdk/assetpackbrowser-300x166.jpg[assetpackbrowser-300x166.jpg,width="",height="",align="right"]
 
 
 
@@ -61,7 +61,7 @@ You can access and change the project properties by right-clicking the project a
 === Add Your Own Assets
 
 
-image::sdk/assetpackimport-300x222.jpg[assetpackimport-300x222.jpg,with="",height="",align="right"]
+image::sdk/assetpackimport-300x222.jpg[assetpackimport-300x222.jpg,width="",height="",align="right"]
 
 
 To add new assets to your AssetPack do the following:
@@ -82,7 +82,7 @@ On the “Add Files page you define the path of the files in the AssetPack. The
 With the “add files button you can open a file browser to select files from your harddisk that will be copied into the `assets/` folder of the AssetPack project. With the “add existing button you can add a file thats already in your AssetPack assets folder to a new asset item. This way you can reuse e.g. textures for asset items or make items for an existing collection of asset files that you copied to the projects assets folder.
 
 
-image::sdk/assetpackimport2-300x179.jpg[assetpackimport2-300x179.jpg,with="",height="",align="right"]
+image::sdk/assetpackimport2-300x179.jpg[assetpackimport2-300x179.jpg,width="",height="",align="right"]
 
 
 You can specify a specific material to be used for the single mesh/scene files, just select it in the dropdown below the mesh or scene file. If you don't select a material file here, the first found material file is used or none if none is found.
@@ -108,7 +108,7 @@ Supported formats for models (main files) are:
 
 === AssetPack Publishing
 
-image:sdk/assetpackdownload-263x300.jpg[assetpackdownload-263x300.jpg,with="",height=""]
+image:sdk/assetpackdownload-263x300.jpg[assetpackdownload-263x300.jpg,width="",height=""]
 
 You can publish your AssetPacks either as a zip file or directly to jmonkeyengine.org, using your website user name and login. *This means other jMonkeyEngine SDK users can download your AssetPacks and install them to their local database right off the AssetPack online packages browser.*
 

+ 6 - 6
src/docs/asciidoc/sdk/font_creation.adoc

@@ -1,6 +1,6 @@
 = Font Creation
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../
 :imagesdir: ..
@@ -19,21 +19,21 @@ To create a font right click on the asset folder where you want to create the fo
 
 Open the “new sub menu and then select “other.
 
-image:sdk/newother.png[newother.png,with="",height=""]
+image:sdk/newother.png[newother.png,width="",height=""]
 
 Within the window that pops up select +++<abbr title="Graphical User Interface">GUI</abbr>+++ and then Font then click Next
 
-image:sdk/newothergui.png[newothergui.png,with="",height=""]
+image:sdk/newothergui.png[newothergui.png,width="",height=""]
 
 A list of every standard font installed on your system is then displayed, select the font that you would like to use to create the Bitmap Font file from and then click Next.
 
 When selecting fonts you should check that this use does not breach the license of the font.
 
-image:sdk/selectfont.png[selectfont.png,with="",height=""]
+image:sdk/selectfont.png[selectfont.png,width="",height=""]
 
 With your font selected you can move onto the final screen which looks as follows:
 
-image:sdk/configurefont.png[configurefont.png,with="",height=""]
+image:sdk/configurefont.png[configurefont.png,width="",height=""]
 
 
 == Font Settings

+ 9 - 9
src/docs/asciidoc/sdk/neotexture.adoc

@@ -1,6 +1,6 @@
 = jMonkeyEngine SDK: Procedural Textures with NeoTexture
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: documentation, sdk, tool, texture, material
 :relfileprefix: ../
@@ -8,15 +8,15 @@
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
-The NeoTextureEditor allows creating tiled textures procedurally using a simple node interface for generating images, blending them, creating normal maps and much more. You can directly load the .tgr files as a material or export the generated images as .png files and use them in a jMonkeyEngine-based game. 
+The NeoTextureEditor allows creating tiled textures procedurally using a simple node interface for generating images, blending them, creating normal maps and much more. You can directly load the .tgr files as a material or export the generated images as .png files and use them in a jMonkeyEngine-based game.
 
-Textures usually make up most of the size of a game distribution. This is why NeoTexture is not only an editor, but also a library that generates textures from .tgr files. Use the library to load .tgr files directly in jME3 as a material, without having to export the textures before. This means high-quality textures for your models, but just tiny description files in your distribution. 
+Textures usually make up most of the size of a game distribution. This is why NeoTexture is not only an editor, but also a library that generates textures from .tgr files. Use the library to load .tgr files directly in jME3 as a material, without having to export the textures before. This means high-quality textures for your models, but just tiny description files in your distribution.
 
 
 == Creating and Editing a NeoTexture file
 
 
-image::wp-uploads/2010/10/neotexture-300x189.jpg[neotexture-300x189.jpg,with="",height="",align="right"]
+image::wp-uploads/2010/10/neotexture-300x189.jpg[neotexture-300x189.jpg,width="",height="",align="right"]
 
 
 .  Right-click the `assets/Textures` directory and choose New… &gt; Other.
@@ -26,7 +26,7 @@ image::wp-uploads/2010/10/neotexture-300x189.jpg[neotexture-300x189.jpg,with="",
 
 Edit the .tgr file and create your procedural texture: (link:http://neotextureedit.sourceforge.net/[Learn more about creating Procedural Textures here])
 
-.  Drag any pattern from the left bar to the editor area. 
+.  Drag any pattern from the left bar to the editor area.
 .  Right-click the editor area and paste a NormalMap filter node.
 .  Connect the green output mark of the pattern with the red input mark of the filter. +This generates a Normal Map that can be used as bump map.
 
@@ -44,7 +44,7 @@ To use NeoTexture tgr files directly in your application, you have to add the Ne
 == Loading tgr files as material
 
 
-image::wp-uploads/2010/10/neotexture-2-300x149.jpg[neotexture-2-300x149.jpg,with="",height="",align="right"]
+image::wp-uploads/2010/10/neotexture-2-300x149.jpg[neotexture-2-300x149.jpg,width="",height="",align="right"]
 
 
 We want to use the procedural texture as a material based on `Lighting.j3md` (the default). We know that Lighting.j3md supports DiffuseMap, NormalMap, SpecularMap, and ParallaxMap.
@@ -60,7 +60,7 @@ We want to use the procedural texture as a material based on `Lighting.j3md` (th
 Let's assign the newly created texture to a mesh to see what it looks like.
 
 .  Open your Main.java file.
-.  Choose Window→Palette to open the Palette. You will find two NeoTexture code snippets, one for adding the NeoTexture loader to the assetManager, and one for loading a NeoTexture material. 
+.  Choose Window→Palette to open the Palette. You will find two NeoTexture code snippets, one for adding the NeoTexture loader to the assetManager, and one for loading a NeoTexture material.
 .  Drag&amp;Drop one of each into the simpleInitApp() method of your application.
 .  Adjust the .tgr file path names to match the file that we just created: “Materials/neoMaterial.tgr.
 
@@ -71,7 +71,7 @@ Clean, build and run. You’re ready to load your procedural material!
 
 assetManager.registerLoader(com.jme3.material.plugins.NeoTextureMaterialLoader.class,"tgr");
 NeoTextureMaterialKey key = new NeoTextureMaterialKey("Materials/neoMaterial.tgr");
- 
+
 Material mat = assetManager.loadAsset(key);
 mat.setFloat("Shininess",12); /* Lighting.j3md has non-map parameters too that we can set. */
 thing.setMaterial(mat);

+ 48 - 48
src/docs/asciidoc/sdk/plugin/shaderblow.adoc

@@ -1,6 +1,6 @@
 = ShaderBlow
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -9,8 +9,8 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 image:sdk/plugin/shaderblow_intro_01.jpg[shaderblow_intro_01.jpg,width="",height=""]
 
-Collections of effects for jMonkeyEngine 3. To install the ShaderBlow plugin into the jMonkeyEngine SDK, go to Tools→Plugins→Available Plugins. 
-You can always get the source of ShaderBlow project here:  
+Collections of effects for jMonkeyEngine 3. To install the ShaderBlow plugin into the jMonkeyEngine SDK, go to Tools→Plugins→Available Plugins.
+You can always get the source of ShaderBlow project here:
 link:https://github.com/jMonkeyEngine-Contributions/shaderblowlib[ShaderBlow project Github]
 
 The source has many examples and tests to explain the capacity of shaders much better.
@@ -72,7 +72,7 @@ Add a link:https://github.com/jMonkeyEngine-Contributions/shaderblowlib/blob/mas
 this.fpp = new FilterPostProcessor(this.assetManager);
 this.fpp.setNumSamples(4);
 this.colorScale = new ColorScaleFilter();
-this.fpp.addFilter(this.colorScale); 
+this.fpp.addFilter(this.colorScale);
 // colorScale.setFilterColor(ColorRGBA.Red.clone()); // Set Filter color
 // colorScale.setColorDensity(0.5f); // Set Color intensity (between 0 and 1);
 this.viewPort.addProcessor(this.fpp);
@@ -92,8 +92,8 @@ The GrayScale filter converts the render image to grayscale.
 [cols="2", options="header"]
 |===
 
-a| *GrayScale Filter OFF* 
-a| *GrayScale Filter ON* 
+a| *GrayScale Filter OFF*
+a| *GrayScale Filter ON*
 
 a|image:sdk/plugin/grayscalefilter-off.jpg[GrayScale Filter OFF,width="400",height=""]
 a|image:sdk/plugin/grayscalefilter-on.png[GrayScale Filter ON,width="400",height=""]
@@ -141,8 +141,8 @@ I chose to clamp this value inside the frag shader code instead of using java co
 .YouTube
 |===
 
-a|.Old Film Effect 
-image:sdk/plugin/CgFzhkq-MKk.jpg[youtu.be/CgFzhkq-MKk,width="",height="",link="https://youtu.be/CgFzhkq-MKk"] 
+a|.Old Film Effect
+image:sdk/plugin/CgFzhkq-MKk.jpg[youtu.be/CgFzhkq-MKk,width="",height="",link="https://youtu.be/CgFzhkq-MKk"]
 a|
 
 |===
@@ -169,27 +169,27 @@ link:https://hub.jmonkeyengine.org/t/old-film-effect-filter/25464[Forum thread]
 
 == LightBlow Shader
 
-The Lightblow shader is an improved Lighting shader for JME. 
-
-Features: 
-
-* Improved lighting calculations. 
-* Improved reflection calculations. 
-* Reflection map implementation with alpha normal map. 
-* Improved Minnaert calculations. 
-* Hemispherical lighting. 
-* Image Based Lighting with Albedo. 
-* Emissive map implementation with diffuse alpha. 
-* normalization of normals by default. 
-* Specular map implementation with normal map alpha. 
-* Specular intensity implementation. 
-* Switching -x/-y/-z normals for different normal maps. (3dmax, blender, xnormal have different approaches). 
-* Specular Color now works with specular maps 
-* Glowblow fragment shader is added with m_GlowIntensity? uniform. It's possible to change glow intensity  for objects. Please, use DiffuseMap? as GlowMap? instead of new additional Glow rgb texture. 
- * Lightmaps are added. 
- * Rim Lighting is added. Thanks to Thetoucher from JME Blog! 
- * Fog is added. Fog is used without post-processing! 
- * Texture Blending: 4 diffuse, 4 normal textures can be blended (Like Terrain System). 
+The Lightblow shader is an improved Lighting shader for JME.
+
+Features:
+
+* Improved lighting calculations.
+* Improved reflection calculations.
+* Reflection map implementation with alpha normal map.
+* Improved Minnaert calculations.
+* Hemispherical lighting.
+* Image Based Lighting with Albedo.
+* Emissive map implementation with diffuse alpha.
+* normalization of normals by default.
+* Specular map implementation with normal map alpha.
+* Specular intensity implementation.
+* Switching -x/-y/-z normals for different normal maps. (3dmax, blender, xnormal have different approaches).
+* Specular Color now works with specular maps
+* Glowblow fragment shader is added with m_GlowIntensity? uniform. It's possible to change glow intensity  for objects. Please, use DiffuseMap? as GlowMap? instead of new additional Glow rgb texture.
+ * Lightmaps are added.
+ * Rim Lighting is added. Thanks to Thetoucher from JME Blog!
+ * Fog is added. Fog is used without post-processing!
+ * Texture Blending: 4 diffuse, 4 normal textures can be blended (Like Terrain System).
 
 Software for NormalMaps? making: link:http://shadermap.com/shadermap_pro.php[http://shadermap.com/shadermap_pro.php] +
 Software for CubeMaps? editing: link:https://code.google.com/archive/p/cubemapgen/downloads[https://code.google.com/archive/p/cubemapgen/downloads] +
@@ -200,7 +200,7 @@ Watch following videos:
 .YouTube
 |===
 
-a|.LightBlow Shader 
+a|.LightBlow Shader
 image:sdk/plugin/knROh_3o2uo.jpg[youtube_https://youtu.be/knROh_3o2uo,width="",height="",link="https://youtu.be/knROh_3o2uo"]
 a|
 
@@ -247,9 +247,9 @@ Watch following videos:
 .YouTube
 |===
 
-a|.GLSL Dissolve Shader 
+a|.GLSL Dissolve Shader
 image:sdk/plugin/ry0r_qwFQLQ.jpg[youtube_ry0r_qwFQLQ,width="",height="",link="https://youtu.be/ry0r_qwFQLQ"]
-a|.mTheoryGame 
+a|.mTheoryGame
 image:sdk/plugin/wUfMcN1Uv48.jpg[youtube_wUfMcN1Uv48,width="",height="",link="https://youtu.be/wUfMcN1Uv48"]
 
 |===
@@ -315,7 +315,7 @@ Features:
 
 a|image:sdk/plugin/fakeparticleblow.png[FakeParticleBlow,width="400",height=""]
 a|.Fog applied to blue fire
-image:sdk/plugin/fakeparticleblow3.png[FakeParticleBlow,width="400",height=""] 
+image:sdk/plugin/fakeparticleblow3.png[FakeParticleBlow,width="400",height=""]
 
 |===
 
@@ -323,7 +323,7 @@ image:sdk/plugin/fakeparticleblow3.png[FakeParticleBlow,width="400",height=""]
 .YouTube
 |===
 
-a|.FakeParticleBlow Shader 
+a|.FakeParticleBlow Shader
 image:sdk/plugin/hdQop4yZ-lA.jpg[youtube_hdQop4yZ-lA,width="",height="",link="https://youtu.be/hdQop4yZ-lA"]
 a|
 
@@ -420,9 +420,9 @@ Features:
 .YouTube
 |===
 
-a|.Forceshield Shader 
+a|.Forceshield Shader
 image:sdk/plugin/uu2nbaBM9Pk.jpg[youtube_uu2nbaBM9Pk,width="",height="",link="https://youtu.be/uu2nbaBM9Pk"]
-a|.Forceshield Cube Shader 
+a|.Forceshield Cube Shader
 image:sdk/plugin/urzMiUeHsCc.png[youtube_urzMiUeHsCc,width="",height="",link="https://youtu.be/urzMiUeHsCc"]
 
 |===
@@ -523,7 +523,7 @@ Material My Material : ShaderBlow/MatDefs/MatCap/MatCap.j3md {
         Nor_Inv_Z : false
         NormalMap : TestModels/LightBlow/jme_lightblow_nor.png
         FogSkyBox : Flip TestTextures/Water256.dds
-        
+
         Toon : true
         EdgesColor : 1.0 0.0 0.0 1.0
         EdgeSize : 0.01
@@ -584,7 +584,7 @@ Material My Material : ShaderBlow/MatDefs/Glass/Glass.j3md {
         ChromaticAbberation : true
         abberIndex : 0.04
         specularIntensity : 0.59999996
-        
+
         Toon : true
         EdgesColor : 0.2 1.0 0.0 1.0
         EdgeSize : 0.01
@@ -663,7 +663,7 @@ Features:
 .YouTube
 |===
 
-a|.Electricity Shaders 
+a|.Electricity Shaders
 image:sdk/plugin/JDTES95HnPE.jpg[youtube_JDTES95HnPE,width="",height="",link="https://youtu.be/JDTES95HnPE"]
 a|
 
@@ -692,7 +692,7 @@ a|
 .YouTube
 |===
 
-a|.SimpleSprite Shader 
+a|.SimpleSprite Shader
 image:sdk/plugin/7XFxbt-dw3I.jpg[youtube_7XFxbt-dw3I,width="",height="",link="https://youtu.be/7XFxbt-dw3I"]
 a|
 
@@ -713,7 +713,7 @@ Features:
 .YouTube
 |===
 
-a|.Bubble Shader 
+a|.Bubble Shader
 image:sdk/plugin/rkFbLZ1EOhg.jpg[youtube_rkFbLZ1EOhg,width="",height="",link="https://youtu.be/rkFbLZ1EOhg"]
 a|
 
@@ -727,10 +727,10 @@ link:https://hub.jmonkeyengine.org/t/bubble-shader/26169[Forum thread]
 == SimpleSpriteParticle Shader
 
 Features:
-static sprite speed: can render 1500000 sprites at 149 fps ( 0% cpu load, speed limited only by graphics card ). As long as you don’t change them (add, move, delete, change image). 
+static sprite speed: can render 1500000 sprites at 149 fps ( 0% cpu load, speed limited only by graphics card ). As long as you don’t change them (add, move, delete, change image).
 FULL LIBRARY PLUGIN: link:http://code.google.com/p/petomancer/downloads/detail?name=SpriteLibrary.zip&can=2&q=[http://code.google.com/p/petomancer/downloads/detail?name=SpriteLibrary.zip&amp;can=2&amp;q=]
 
-image:sdk/plugin/shaderblow_simplespriteparticle_shader.png[shaderblow_simplespriteparticle_shader.png,with="400",height=""]
+image:sdk/plugin/shaderblow_simplespriteparticle_shader.png[shaderblow_simplespriteparticle_shader.png,width="400",height=""]
 
 link:https://hub.jmonkeyengine.org/t/spritelibrary-efficient-render-of-sprites/20901[Forum thread]
 
@@ -747,7 +747,7 @@ Features:
 .YouTube
 |===
 
-a|.GLSL Texture Bomb 
+a|.GLSL Texture Bomb
 image:sdk/plugin/3lBhu2c5V8o.jpg[youtube_3lBhu2c5V8o,width="",height="",link="https://youtu.be/3lBhu2c5V8o"]
 a|
 
@@ -773,7 +773,7 @@ Features:
 .YouTube
 |===
 
-a|.Night Vision Post Processor 
+a|.Night Vision Post Processor
 image:sdk/plugin/mNsjAVUTDPs.jpg[youtube_mNsjAVUTDPs,width="",height="",link="https://youtu.be/mNsjAVUTDPs"]
 a|
 
@@ -799,7 +799,7 @@ Features:
 .YouTube
 |===
 
-a|.Predator Thermal Vision 
+a|.Predator Thermal Vision
 image:sdk/plugin/DqBwCWVwTFQ.jpg[youtube_DqBwCWVwTFQ,width="",height="",link="https://youtu.be/DqBwCWVwTFQ"]
 a|
 
@@ -825,7 +825,7 @@ Features:
 .YouTube
 |===
 
-a|.Frosted Glass effect Filter 
+a|.Frosted Glass effect Filter
 image:sdk/plugin/Bb0jVjqvURw.jpg[youtube_Bb0jVjqvURw,width="",height="",link="https://youtu.be/Bb0jVjqvURw"]
 a|
 

+ 3 - 3
src/docs/asciidoc/sdk/scene_explorer.adoc

@@ -1,6 +1,6 @@
 = jMonkeyEngine SDK: Scene Explorer
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: documentation, sdk, tool, scene, node
 :relfileprefix: ../
@@ -9,7 +9,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
 
-image::sdk/jmonkeyplatform-sceneexplorer-add.jpg[jmonkeyplatform-sceneexplorer-add.jpg,with="",height="",align="center"]
+image::sdk/jmonkeyplatform-sceneexplorer-add.jpg[jmonkeyplatform-sceneexplorer-add.jpg,width="",height="",align="center"]
 
 
 

+ 4 - 4
src/docs/asciidoc/sdk/terrain_editor.adoc

@@ -1,6 +1,6 @@
 = jMonkeyEngine SDK: Terrain Editor
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :keywords: documentation, sdk, tool, terrain, asset, texture
 :relfileprefix: ../
@@ -22,9 +22,9 @@ Terrain controls are the same as the Scene Composer, you rotate the camera with
 == Creating Terrain
 
 To create terrain, first select a node (probably your root node) in your scene. +
-image:sdk/sdk-terrain-tut-selectnode.png[sdk-terrain-tut-selectnode.png,with="",height=""] +
+image:sdk/sdk-terrain-tut-selectnode.png[sdk-terrain-tut-selectnode.png,width="",height=""] +
 Then click the add terrain button. +
-image:sdk/sdk-terrain-tut-addterrain.png[sdk-terrain-tut-addterrain.png,with="",height=""] +
+image:sdk/sdk-terrain-tut-addterrain.png[sdk-terrain-tut-addterrain.png,width="",height=""] +
 This will pop up the Create Terrain wizard that will walk you through the steps for creating terrain. Make sure you decide now how large you want your terrain to be and how detailed you want the textures to be as you cannot change it later on!
 
 In order to see the terrain, you will need to add light to your scene. To do this, right-click the root node in the SceneExplorer window and select “Add Light→Directional Light

+ 5 - 5
src/docs/asciidoc/sdk/welcome/3_0.adoc

@@ -1,6 +1,6 @@
 = Welcome to the jMonkeyEngine SDK
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -16,21 +16,21 @@ This place will be updated with the latest news about the SDK, see below how you
 
 Press the “New Project button to create a new Project. Then create a “BasicGame project from the “jME3 category. Press the “New File button to create new java files, materials, scenes, fonts, models and other files.
 
-image:sdk/welcome/new_project.png[new_project.png,with="",height=""]
+image:sdk/welcome/new_project.png[new_project.png,width="",height=""]
 
 
 == Tutorials / Manual
 
 By pressing “F1 you can open the manual which contains up to date tutorials, documentation and more to help you get started. You can search the manual contents via the search field up right.
 
-image:sdk/welcome/search_field.png[search_field.png,with="",height=""]
+image:sdk/welcome/search_field.png[search_field.png,width="",height=""]
 
 
 == Updates
 
 You can check for incremental updates to the application via the Help menu:
 
-image:sdk/welcome/help_update.png[help_update.png,with="",height=""]
+image:sdk/welcome/help_update.png[help_update.png,width="",height=""]
 
 
 == Troubleshooting

+ 5 - 5
src/docs/asciidoc/sdk/welcome/3_0rc3.adoc

@@ -1,6 +1,6 @@
 = Welcome to the jMonkeyEngine SDK
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -16,21 +16,21 @@ This place will be updated with the latest news about the SDK, see below how you
 
 Press the “New Project button to create a new Project. Press the “New File button to create new java files, materials, scenes, fonts and other files.
 
-image:sdk/welcome/new_project.png[new_project.png,with="",height=""]
+image:sdk/welcome/new_project.png[new_project.png,width="",height=""]
 
 
 == Tutorials / Manual
 
 By pressing “F1 you can open the manual which contains up to date tutorials, documentation and more to help you get started. You can search the manual contents via the search field up right.
 
-image:sdk/welcome/search_field.png[search_field.png,with="",height=""]
+image:sdk/welcome/search_field.png[search_field.png,width="",height=""]
 
 
 == Updates
 
 You can check for incremental updates to the application via the Help menu:
 
-image:sdk/welcome/help_update.png[help_update.png,with="",height=""]
+image:sdk/welcome/help_update.png[help_update.png,width="",height=""]
 
 
 == Troubleshooting

+ 5 - 5
src/docs/asciidoc/sdk/welcome/3_1.adoc

@@ -1,6 +1,6 @@
 = Welcome to the jMonkeyEngine SDK
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../../
 :imagesdir: ../..
@@ -16,21 +16,21 @@ This place will be updated with the latest news about the SDK, see below how you
 
 Press the “New Project button to create a new Project. Then create a “BasicGame project from the “jME3 category. Press the “New File button to create new java files, materials, scenes, fonts, models and other files.
 
-image:sdk/welcome/new_project.png[new_project.png,with="",height=""]
+image:sdk/welcome/new_project.png[new_project.png,width="",height=""]
 
 
 == Tutorials / Manual
 
 By pressing “F1 you can open the manual which contains up to date tutorials, documentation and more to help you get started. You can search the manual contents via the search field up right.
 
-image:sdk/welcome/search_field.png[search_field.png,with="",height=""]
+image:sdk/welcome/search_field.png[search_field.png,width="",height=""]
 
 
 == Updates
 
 You can check for incremental updates to the application via the Help menu:
 
-image:sdk/welcome/help_update.png[help_update.png,with="",height=""]
+image:sdk/welcome/help_update.png[help_update.png,width="",height=""]
 
 
 == Troubleshooting

+ 4 - 4
src/docs/asciidoc/sdk_pt.adoc

@@ -10,7 +10,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 == Por quê jMonkeyEngine SDK?
 
 
-image::sdk/jme3-jmonkeyplatform.png[jme3-jmonkeyplatform.png,with="288",height="180",align="left"]
+image::sdk/jme3-jmonkeyplatform.png[jme3-jmonkeyplatform.png,width="288",height="180",align="left"]
 
 O jMonkeyEngine SDK (_kit_ de desenvolvimento de software) é o ambiente de desenvolvimento de jogos recomendado para a biblioteca jMonkeyEngine 3.
 
@@ -63,7 +63,7 @@ The built-in help system lets you browse a local copy of the documentation pulle
 *  link:http://www.youtube.com/watch?v=D7JM4VMKqPc[Video: Animation and Effect TrackEditing]
 
 
-image::sdk/jmonkeyplatform-docu-4.png[jmonkeyplatform-docu-4.png,with="421",height="298",align="right"]
+image::sdk/jmonkeyplatform-docu-4.png[jmonkeyplatform-docu-4.png,width="421",height="298",align="right"]
 
 
 
@@ -92,7 +92,7 @@ image::sdk/jmonkeyplatform-docu-4.png[jmonkeyplatform-docu-4.png,with="421",heig
 **  <<sdk/asset_packs#,Asset Packs>>
 
 *  <<sdk/scene_explorer#,The SceneExplorer>>
-image::jme3-built-in-help.png[jme3-built-in-help.png,with="400",height="260",align="right"]
+image::jme3-built-in-help.png[jme3-built-in-help.png,width="400",height="260",align="right"]
 
 *  <<sdk/scene_composer#,Composing a Scene>>
 *  <<sdk/terrain_editor#,Terrain Editor>>
@@ -114,7 +114,7 @@ image::jme3-built-in-help.png[jme3-built-in-help.png,with="400",height="260",ali
 
 
 
-image::jme3/jmonkey-sdk-workflow.png[jmonkey-sdk-workflow.png,with="",height="",align="center"]
+image::jme3/jmonkey-sdk-workflow.png[jmonkey-sdk-workflow.png,width="",height="",align="center"]
 
 
 

+ 67 - 67
src/docs/asciidoc/space_lion_on_game_assets.adoc

@@ -1,6 +1,6 @@
 = space_lion_on_game_assets
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
@@ -8,7 +8,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 == Space Lion on game assets
 
-image:space_lion_test.jpg[space_lion_test.jpg,with="",height=""]
+image:space_lion_test.jpg[space_lion_test.jpg,width="",height=""]
 
 Hello, I want to talk about several aspects of making game assets. Some of them will refer to the free open source software Blender, but some of them will be valid in a more general way.
 
@@ -29,29 +29,29 @@ There are many ways to model a 3d asset:
 
 ==== 1.1 Low-Poly-First
 
-Based on reference images (drawn concept art or photographs or blueprints) you create a low-poly-mesh in a 3d modeling tool such as Blender. If you just want a quick test, you can stop here - just give your low-poly-mesh a material such as “wood or “iron or some procedural texture (NeoTexture plugin). 
+Based on reference images (drawn concept art or photographs or blueprints) you create a low-poly-mesh in a 3d modeling tool such as Blender. If you just want a quick test, you can stop here - just give your low-poly-mesh a material such as “wood or “iron or some procedural texture (NeoTexture plugin).
 
 But if you want higher quality game assets you will continue: Next, you would create an UV layout. This step is explained later in this tutorial. Basically the UV layout is needed for textures and normal maps.
 
 In order to get a fancy normal map for your low-poly-mesh, you would now add a “Multiresolution modifier, so you can sculpt details. There are two Multires modifiers available in Blender: “Catmull-Clark and “Simple (see image below)
 
-image:multires_modifiers.png[multires_modifiers.png,with="",height=""]
+image:multires_modifiers.png[multires_modifiers.png,width="",height=""]
 
 When should you use which? Here is a comparison table:
 [cols="2", options="header"]
 |===
 
-<a| Catmull-Clark     
-a| Simple 
+<a| Catmull-Clark
+a| Simple
 
-a| + good for 'organic' models 
-a| + good for 'technical' models 
+a| + good for 'organic' models
+a| + good for 'technical' models
 
-a| + auto-smoothes everything 
-a| + keeps sharp features 
+a| + auto-smoothes everything
+a| + keeps sharp features
 
-a| - smoothes sharp features away 
-a| - organic parts: smooth sculpting brush by hand 
+a| - smoothes sharp features away
+a| - organic parts: smooth sculpting brush by hand
 
 |===
 
@@ -85,27 +85,27 @@ The rest is similar to the High-Poly-First way of doing things: Make a copy of t
 ==== 1.4 Topology-Sculpting
 
 This workflow relies on a 'sculpting mode all from the start' approach: You sculpt the mesh from the beginning on and later you work similar to the 3D-Scan-First workflow (retopo the mesh and get a low poly version). In this video you can see somebody modeling a demon face with horns:
-image:youtube_opskpccfbr4[youtube_opskpccfbr4,with="",height=""]
+image:youtube_opskpccfbr4[youtube_opskpccfbr4,width="",height=""]
 
 
 === 2. Several hints for making game art
 [cols="2", options="header"]
 |===
 
-a| You want to… 
-a| What you need to do: 
+a| You want to…
+a| What you need to do:
 
-a| Make humans 
-a| Get “makehuman +use it +export your humans to Blender +polish them +import them via the jME SDK. 
+a| Make humans
+a| Get “makehuman +use it +export your humans to Blender +polish them +import them via the jME SDK.
 
-a| Sculpt like a pro 
-a| Blender's sculpting mode is enough for beginners like me. +However, there are other tools like “Sculptris, “Z Brush, “Mudbox and more 
+a| Sculpt like a pro
+a| Blender's sculpting mode is enough for beginners like me. +However, there are other tools like “Sculptris, “Z Brush, “Mudbox and more
 
-a| Make sci-fi assets 
-a| Get yourself a collection of “greebles (little surface details and gismos) +combine them in numerous ways, +to achieve the high-poly sci-fi model of your dream +or just doom-style walls and machines +look for “shipyard 0.7 on BlendSwap.com 
+a| Make sci-fi assets
+a| Get yourself a collection of “greebles (little surface details and gismos) +combine them in numerous ways, +to achieve the high-poly sci-fi model of your dream +or just doom-style walls and machines +look for “shipyard 0.7 on BlendSwap.com
 
-a| Get free models 
-a| Look at “OpenGameArt.org, “BlendSwap.com, “Turbosquid.com or similar sites +“OpenGameArt: Lots of models, all of them for games, not all of them Blender, all free +“BlendSwap: Lots of models, not all of them for games, all of them Blender, all free +“Turbosquid: Lots of models, not all of them for games, not all of them Blender, not all free +you will find a lot of models and textures on the internet. * 
+a| Get free models
+a| Look at “OpenGameArt.org, “BlendSwap.com, “Turbosquid.com or similar sites +“OpenGameArt: Lots of models, all of them for games, not all of them Blender, all free +“BlendSwap: Lots of models, not all of them for games, all of them Blender, all free +“Turbosquid: Lots of models, not all of them for games, not all of them Blender, not all free +you will find a lot of models and textures on the internet. *
 
 |===
 
@@ -116,36 +116,36 @@ a| Look at “OpenGameArt.org, “BlendSwap.com, “Turbosquid.com or similar si
 
 Here is what I mean by those two different styles:
 
-image:old_school_vs_new_school_1_low.png[old_school_vs_new_school_1_low.png,with="",height=""]
-image:old_school_vs_new_school_2_low.png[old_school_vs_new_school_2_low.png,with="",height=""]
-image:old_school_vs_new_school_3_low.png[old_school_vs_new_school_3_low.png,with="",height=""]
+image:old_school_vs_new_school_1_low.png[old_school_vs_new_school_1_low.png,width="",height=""]
+image:old_school_vs_new_school_2_low.png[old_school_vs_new_school_2_low.png,width="",height=""]
+image:old_school_vs_new_school_3_low.png[old_school_vs_new_school_3_low.png,width="",height=""]
 
 This is a typical New School bow for a fantasy setting:
 
-image:octavio_mendez_sanchez_durian_guardian_equipment.jpg[octavio_mendez_sanchez_durian_guardian_equipment.jpg,with="",height=""]
+image:octavio_mendez_sanchez_durian_guardian_equipment.jpg[octavio_mendez_sanchez_durian_guardian_equipment.jpg,width="",height=""]
 [cols="2", options="header"]
 |===
 
-<a| Old School    
-a| New School 
+<a| Old School
+a| New School
 
-a| - looks simple 
-a| + looks “cool 
+a| - looks simple
+a| + looks “cool
 
-a| + usually less work needed 
-a| - usually more work needed 
+a| + usually less work needed
+a| - usually more work needed
 
-a| + less details render faster 
-a| - fine details demand complex shape (slow) 
+a| + less details render faster
+a| - fine details demand complex shape (slow)
 
-a| + good enough for prototyping 
-a| + more appealing to many modern gamers 
+a| + good enough for prototyping
+a| + more appealing to many modern gamers
 
-a| + cheap items for lower-level game characters 
-a| + helps visualize maxed-out game characters 
+a| + cheap items for lower-level game characters
+a| + helps visualize maxed-out game characters
 
-a| + cultural style: humans, androids, … 
-a| + cultural style: elves, telepathic aliens, … 
+a| + cultural style: humans, androids, …
+a| + cultural style: elves, telepathic aliens, …
 
 |===
 
@@ -156,29 +156,29 @@ There are great differences between a scene that was made to look realistic and
 [cols="2", options="header"]
 |===
 
-<a| Comic-look    
-a| Realistic look 
+<a| Comic-look
+a| Realistic look
 
-a| + can be achieved very quickly +(usually no normal maps etc.) 
-a| - realistic models need a lot of work +(several textures like normal, specular, gloss) 
+a| + can be achieved very quickly +(usually no normal maps etc.)
+a| - realistic models need a lot of work +(several textures like normal, specular, gloss)
 
-a| + more artistic freedom 
-a| - artistic freedom is limited 
+a| + more artistic freedom
+a| - artistic freedom is limited
 
-a| - not suitable for some applications 
-a| + suitable for simulations and AAA games 
+a| - not suitable for some applications
+a| + suitable for simulations and AAA games
 
-a| - usually animated by hand 
-a| + can make use of motion capturing 
+a| - usually animated by hand
+a| + can make use of motion capturing
 
-a| + can be combined with hand-made textures 
-a| - need high quality textures to look convincing 
+a| + can be combined with hand-made textures
+a| - need high quality textures to look convincing
 
-a| - hard to find free models all in the same style 
-a| + easy to find models, because style always the same 
+a| - hard to find free models all in the same style
+a| + easy to find models, because style always the same
 
-a| + can make violence look sweet 
-a| - violence might offend some people 
+a| + can make violence look sweet
+a| - violence might offend some people
 
 |===
 
@@ -193,23 +193,23 @@ There are several parameters that must match:
 [cols="1", options="header"]
 |===
 
-a| What must I consider? 
+a| What must I consider?
 
-a| high details *vs* low details 
+a| high details *vs* low details
 
-a| fantasy tech *vs* logically engineered tech 
+a| fantasy tech *vs* logically engineered tech
 
-a| funny games *vs* serious games / simulations 
+a| funny games *vs* serious games / simulations
 
-a| toon shading *vs* simple shading *vs* photorealistic shading 
+a| toon shading *vs* simple shading *vs* photorealistic shading
 
-a| colors and post processing filters should fit well 
+a| colors and post processing filters should fit well
 
-a| old school *vs* new school 
+a| old school *vs* new school
 
-a| comic look *vs* realistic look 
+a| comic look *vs* realistic look
 
-a| … 
+a| …
 
 |===
 

+ 13 - 13
src/docs/asciidoc/tasks.adoc

@@ -1,6 +1,6 @@
 = Wiki Tasks
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
@@ -10,12 +10,12 @@ This page lists all tasks in the wiki.
 
 == jME3 Doku Tasks
 
-image:tasks_jme3_noform[tasks_jme3_noform,with="",height=""]
+image:tasks_jme3_noform[tasks_jme3_noform,width="",height=""]
 
 
 == SDK Doku Tasks
 
-image:tasks_sdk_noform[tasks_sdk_noform,with="",height=""]
+image:tasks_sdk_noform[tasks_sdk_noform,width="",height=""]
 
 
 === Creating Tasks
@@ -31,17 +31,17 @@ Place `+++~~TASK~~+++` on any page to mark it as a task. The title (first headin
 [cols="3", options="header"]
 |===
 
-a| [user] 
-a| person responsible for this task – either user or full name 
-a| optional; default is unassigned 
+a| [user]
+a| person responsible for this task – either user or full name
+a| optional; default is unassigned
 
-a| [due date] 
-a| date the task should be completed in YYYY-MM-DD form; if only year or year and month are given, the last day is assumed 
-a| optional; default is without due date 
+a| [due date]
+a| date the task should be completed in YYYY-MM-DD form; if only year or year and month are given, the last day is assumed
+a| optional; default is without due date
 
-a| [priority] 
-a| low, medium `!`, high `+++!!+++` or critical `+++!!!+++` expressed with 0 to 3 exclamation marks 
-a| optional; default is low priority 
+a| [priority]
+a| low, medium `!`, high `+++!!+++` or critical `+++!!!+++` expressed with 0 to 3 exclamation marks
+a| optional; default is low priority
 
 |===
 

+ 3 - 3
src/docs/asciidoc/wiki/dokuwiki.adoc

@@ -1,6 +1,6 @@
 = DokuWiki
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../
 :imagesdir: ..
@@ -8,7 +8,7 @@ ifdef::env-github,env-browser[:outfilesuffix: .adoc]
 
 
 link:http://www.dokuwiki.org/wiki%3Adokuwiki[
-image::wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height="",align="left"]
+image::wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height="",align="left"]
 ] DokuWiki is a simple to use and highly versatile Open Source link:http://en.wikipedia.org/wiki/wiki[wiki] software that doesn't require a database. It is loved by users for its clean and readable <<wiki/syntax#,syntax>>. The ease of maintenance, backup and integration makes it an administrator's favorite. Built in link:http://www.dokuwiki.org/acl[access controls] and link:http://www.dokuwiki.org/auth[authentication connectors] make DokuWiki especially useful in the enterprise context and the large number of link:http://www.dokuwiki.org/plugins[plugins] contributed by its vibrant community allow for a broad range of use cases beyond a traditional wiki.
 
 Read the link:http://www.dokuwiki.org/manual[DokuWiki Manual] to unleash the full power of DokuWiki.

+ 79 - 79
src/docs/asciidoc/wiki/syntax.adoc

@@ -1,6 +1,6 @@
 = Formatting Syntax
-:author: 
-:revnumber: 
+:author:
+:revnumber:
 :revdate: 2016/03/17 20:48
 :relfileprefix: ../
 :imagesdir: ..
@@ -131,7 +131,7 @@ You can also use an image to link to another internal or external page by combin
 [[http://www.php.net|{{wiki:dokuwiki-128.png}}]]
 ....
 
-link:http://www.php.net[image:wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height=""]]
+link:http://www.php.net[image:wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height=""]]
 
 Please note: The image formatting is the only formatting syntax accepted in link names.
 
@@ -174,13 +174,13 @@ By using four or more dashes, you can make a horizontal line:
 
 You can include external and internal link:http://www.dokuwiki.org/images[images, videos and audio files] with curly brackets. Optionally you can specify the size of them.
 
-Real size:                        image:wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height=""]
+Real size:                        image:wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height=""]
 
-Resize to given width:            image:wiki/dokuwiki-128.png[dokuwiki-128.png,with="50",height=""]
+Resize to given width:            image:wiki/dokuwiki-128.png[dokuwiki-128.png,width="50",height=""]
 
-Resize to given width and heightfootnote:[when the aspect ratio of the given width and height doesn't match that of the image, it will be cropped to the new ratio before resizing]: image:wiki/dokuwiki-128.png[dokuwiki-128.png,with="200",height="50"]
+Resize to given width and heightfootnote:[when the aspect ratio of the given width and height doesn't match that of the image, it will be cropped to the new ratio before resizing]: image:wiki/dokuwiki-128.png[dokuwiki-128.png,width="200",height="50"]
 
-Resized external image:           image:http://de3.php.net/images/php.gif[php.gif,with="200",height="50"]
+Resized external image:           image:http://de3.php.net/images/php.gif[php.gif,width="200",height="50"]
 
 ....
 Real size:                        {{wiki:dokuwiki-128.png}}
@@ -192,15 +192,15 @@ Resized external image:           {{http://de3.php.net/images/php.gif?200x50}}
 By using left or right whitespaces you can choose the alignment.
 
 
-image::wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height="",align="right"]
+image::wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height="",align="right"]
 
 
 
-image::wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height="",align="left"]
+image::wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height="",align="left"]
 
 
 
-image::wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height="",align="center"]
+image::wiki/dokuwiki-128.png[dokuwiki-128.png,width="",height="",align="center"]
 
 
 ....
@@ -212,7 +212,7 @@ image::wiki/dokuwiki-128.png[dokuwiki-128.png,with="",height="",align="center"]
 Of course, you can add a title (displayed as a tooltip by most browsers), too.
 
 
-image::wiki/dokuwiki-128.png[This is the caption,with="",height="",align="center"]
+image::wiki/dokuwiki-128.png[This is the caption,width="",height="",align="center"]
 
 
 ....
@@ -228,17 +228,17 @@ DokuWiki can embed the following media formats directly.
 [cols="2", options="header"]
 |===
 
-a| Image 
-<a| `gif`, `jpg`, `png`  
+a| Image
+<a| `gif`, `jpg`, `png`
 
-a| Video 
-a| `webm`, `ogv`, `mp4` 
+a| Video
+a| `webm`, `ogv`, `mp4`
 
-a| Audio 
-<a| `ogg`, `mp3`, `wav`  
+a| Audio
+<a| `ogg`, `mp3`, `wav`
 
-a| Flash 
-<a| `swf`                    
+a| Flash
+<a| `swf`
 
 |===
 
@@ -410,20 +410,20 @@ DokuWiki supports a simple syntax to create tables.
 [cols="3", options="header"]
 |===
 
-<a| Heading 1      
-<a| Heading 2       
-<a| Heading 3          
+<a| Heading 1
+<a| Heading 2
+<a| Heading 3
 
-<a| Row 1 Col 1    
-<a| Row 1 Col 2     
-<a| Row 1 Col 3        
+<a| Row 1 Col 1
+<a| Row 1 Col 2
+<a| Row 1 Col 3
 
-<a| Row 2 Col 1    
-2+a| some colspan (note the double pipe) 
+<a| Row 2 Col 1
+2+a| some colspan (note the double pipe)
 
-<a| Row 3 Col 1    
-<a| Row 3 Col 2     
-<a| Row 3 Col 3        
+<a| Row 3 Col 1
+<a| Row 3 Col 2
+<a| Row 3 Col 3
 
 |===
 
@@ -442,21 +442,21 @@ Vertical tableheaders are possible, too.
 [cols="3", options="header"]
 |===
 
-<a|              
-<a| Heading 1            
-<a| Heading 2          
+<a|
+<a| Heading 1
+<a| Heading 2
 
-<a| Heading 3    
-<a| Row 1 Col 2          
-<a| Row 1 Col 3        
+<a| Heading 3
+<a| Row 1 Col 2
+<a| Row 1 Col 3
 
-<a| Heading 4    
-a| no colspan this time 
-<a|                    
+<a| Heading 4
+a| no colspan this time
+<a|
 
-<a| Heading 5    
-<a| Row 2 Col 2          
-<a| Row 2 Col 3        
+<a| Heading 5
+<a| Row 2 Col 2
+<a| Row 2 Col 3
 
 |===
 
@@ -473,19 +473,19 @@ You can have rowspans (vertically connected cells) by adding `:::` into the cell
 [cols="3", options="header"]
 |===
 
-<a| Heading 1      
-<a| Heading 2                  
-<a| Heading 3          
+<a| Heading 1
+<a| Heading 2
+<a| Heading 3
 
-<a| Row 1 Col 1    
-.3+a| this cell spans vertically 
-<a| Row 1 Col 3        
+<a| Row 1 Col 1
+.3+a| this cell spans vertically
+<a| Row 1 Col 3
 
-<a| Row 2 Col 1    
-<a| Row 2 Col 3        
+<a| Row 2 Col 1
+<a| Row 2 Col 3
 
-<a| Row 3 Col 1    
-<a| Row 2 Col 3        
+<a| Row 3 Col 1
+<a| Row 2 Col 3
 
 |===
 
@@ -502,19 +502,19 @@ You can align the table contents, too. Just add at least two whitespaces at the
 [cols="3", options="header"]
 |===
 
-3+^a|           Table with alignment           
+3+^a|           Table with alignment
 
 >a|         right
-^a|    center    
-<a|left          
+^a|    center
+<a|left
 
-<a|left          
+<a|left
 >a|         right
-^a|    center    
+^a|    center
 
-a| xxxxxxxxxxxx 
-a| xxxxxxxxxxxx 
-a| xxxxxxxxxxxx 
+a| xxxxxxxxxxxx
+a| xxxxxxxxxxxx
+a| xxxxxxxxxxxx
 
 |===
 
@@ -715,26 +715,26 @@ echo '</tr></table>';
 [cols="2", options="header"]
 |===
 
-<a| Parameter  
-a| Description 
+<a| Parameter
+a| Description
 
-a| any number 
-a| will be used as maximum number items to show, defaults to 8 
+a| any number
+a| will be used as maximum number items to show, defaults to 8
 
-<a| reverse    
-a| display the last items in the feed first 
+<a| reverse
+a| display the last items in the feed first
 
-<a| author     
-a| show item authors names 
+<a| author
+a| show item authors names
 
-<a| date       
-a| show item dates 
+<a| date
+a| show item dates
 
 a| description
-a| show the item description. If link:http://www.dokuwiki.org/config%3Ahtmlok[HTML] is disabled all tags will be stripped 
+a| show the item description. If link:http://www.dokuwiki.org/config%3Ahtmlok[HTML] is disabled all tags will be stripped
 
-a| _n_[dhm] 
-a| refresh period, where d=days, h=hours, m=minutes. (e.g. 12h = 12 hours). 
+a| _n_[dhm]
+a| refresh period, where d=days, h=hours, m=minutes. (e.g. 12h = 12 hours).
 
 |===
 
@@ -753,14 +753,14 @@ Some syntax influences how DokuWiki renders a page without creating any output i
 [cols="2", options="header"]
 |===
 
-<a| Macro           
-a| Description 
+<a| Macro
+a| Description
 
-<a| +++~~NOTOC~~+++   
-a| If this macro is found on the page, no table of contents will be created 
+<a| +++~~NOTOC~~+++
+a| If this macro is found on the page, no table of contents will be created
 
-a| +++~~NOCACHE~~+++ 
-a| DokuWiki caches all output by default. Sometimes this might not be wanted (eg. when the +++&lt;php&gt;+++ syntax above is used), adding this macro will force DokuWiki to rerender a page on every call 
+a| +++~~NOCACHE~~+++
+a| DokuWiki caches all output by default. Sometimes this might not be wanted (eg. when the +++&lt;php&gt;+++ syntax above is used), adding this macro will force DokuWiki to rerender a page on every call
 
 |===
 

+ 3 - 3
src/dokuwiki/lib/plugins/asciidoc/renderer.php

@@ -632,14 +632,14 @@ class renderer_plugin_asciidoc extends Doku_Renderer {
             $url = $src;
         }
 
-        //$out = 'image:' . $url. '['. $name . ',with="'. $width .'",height="'. $height . '",align="' . $align . '", link="'. $linking .'"]';
+        //$out = 'image:' . $url. '['. $name . ',width="'. $width .'",height="'. $height . '",align="' . $align . '", link="'. $linking .'"]';
         if (stripos($url, '.mp4') !== false || stripos($url, '.webm') !== false || stripos($url, '.ogv') !== false) {
           $out = DOKU_LF.'video::' . $url . '[]'.DOKU_LF;
         } else {
           if (empty($align)) {
-            $out = 'image:' . $url. '['. $name . ',with="'. $width .'",height="'. $height . '"]';
+            $out = 'image:' . $url. '['. $name . ',width="'. $width .'",height="'. $height . '"]';
           } else {
-            $out = DOKU_LF.'image::' . $url. '['. $name . ',with="'. $width .'",height="'. $height . '",align="' . $align .'"]'.DOKU_LF;
+            $out = DOKU_LF.'image::' . $url. '['. $name . ',width="'. $width .'",height="'. $height . '",align="' . $align .'"]'.DOKU_LF;
           }
         }
         //$out .= '<media type="'.$type.'" link="'.$this->_xmlEntities($link).'"'.($src).' align="'.$align.'" width="'.$width.'" height="'.$height.'" cache="'.$cache.'" linking="'.$linking.'">';