Browse Source

First late commit

Creamel 3 months ago
commit
f39abb025b
100 changed files with 1397 additions and 0 deletions
  1. 39 0
      .gitignore
  2. 17 0
      extended_succubus.qproj
  3. BIN
      extended_succubus.txt
  4. BIN
      images - Copie/locations/misc/shrugging_woman.jpg
  5. BIN
      images - Copie/locations/pavlovsk/park/deep/lair_entrance.jpg
  6. BIN
      images - Copie/locations/pavlovsk/park/deep/succubus_carving.jpg
  7. BIN
      images/locations/misc/shrugging_woman.jpg
  8. BIN
      images/locations/pavlovsk/park/deep/lair/alcoves.jpg
  9. BIN
      images/locations/pavlovsk/park/deep/lair/bedroom.jpg
  10. BIN
      images/locations/pavlovsk/park/deep/lair/blocked.png
  11. BIN
      images/locations/pavlovsk/park/deep/lair/cave.jpg
  12. BIN
      images/locations/pavlovsk/park/deep/lair/kitchen.jpg
  13. BIN
      images/locations/pavlovsk/park/deep/lair/lake.png
  14. BIN
      images/locations/pavlovsk/park/deep/lair/shackles.jpg
  15. BIN
      images/locations/pavlovsk/park/deep/lair/stairs.jpg
  16. BIN
      images/locations/pavlovsk/park/deep/lair/throne.jpg
  17. BIN
      images/locations/pavlovsk/park/deep/lair/upstairs.jpg
  18. BIN
      images/locations/pavlovsk/park/deep/lair_entrance.jpg
  19. BIN
      images/locations/pavlovsk/park/deep/succubus_carving.jpg
  20. 10 0
      locations/mod_extended_succubus.qsrc
  21. 10 0
      locations/mod_extended_succubus_options.qsrc
  22. 7 0
      locations/mod_extended_succubus_pavResidential.qsrc
  23. 17 0
      locations/mod_extended_succubus_pav_deeppark.qsrc
  24. 24 0
      locations/mod_extended_succubus_pav_lair.qsrc
  25. 36 0
      locations/mod_extended_succubus_pav_lair_entrance.qsrc
  26. 144 0
      locations/mod_extended_succubus_pav_lair_first_time.qsrc
  27. 44 0
      locations/mod_extended_succubus_readme.qsrc
  28. 35 0
      locations/mod_extended_succubus_setup.qsrc
  29. 7 0
      locations/mod_extended_succubus_street.qsrc
  30. 537 0
      tools/Get Image Paths.ahk
  31. 108 0
      tools/Move Image Files.ahk
  32. 56 0
      tools/Move or Rename Missing Image Files.ahk
  33. BIN
      tools/Move or Rename Missing Image Files.exe
  34. BIN
      tools/Player-original/fmodexp.dll
  35. BIN
      tools/Player-original/langs/de/qspgui.mo
  36. BIN
      tools/Player-original/langs/en/qspgui.mo
  37. BIN
      tools/Player-original/langs/eo/qspgui.mo
  38. BIN
      tools/Player-original/langs/ru/qspgui.mo
  39. BIN
      tools/Player-original/langs/uk/qspgui.mo
  40. BIN
      tools/Player-original/qsp.dll
  41. BIN
      tools/Player-original/qspgui.exe
  42. BIN
      tools/Player-video/fmodexp.dll
  43. BIN
      tools/Player-video/langs/de/qspgui.mo
  44. BIN
      tools/Player-video/langs/en/qspgui.mo
  45. BIN
      tools/Player-video/langs/eo/qspgui.mo
  46. BIN
      tools/Player-video/langs/ru/qspgui.mo
  47. BIN
      tools/Player-video/langs/uk/qspgui.mo
  48. BIN
      tools/Player-video/libvlc.dll
  49. BIN
      tools/Player-video/libvlccore.dll
  50. BIN
      tools/Player-video/plugins/access/libfilesystem_plugin.dll
  51. BIN
      tools/Player-video/plugins/audio_output/libdirectsound_plugin.dll
  52. BIN
      tools/Player-video/plugins/codec/libavcodec_plugin.dll
  53. BIN
      tools/Player-video/plugins/codec/libdxva2_plugin.dll
  54. BIN
      tools/Player-video/plugins/plugins.dat
  55. BIN
      tools/Player-video/plugins/video_chroma/libchain_plugin.dll
  56. BIN
      tools/Player-video/plugins/video_chroma/libgrey_yuv_plugin.dll
  57. BIN
      tools/Player-video/plugins/video_chroma/libi420_rgb_mmx_plugin.dll
  58. BIN
      tools/Player-video/plugins/video_chroma/libi420_rgb_plugin.dll
  59. BIN
      tools/Player-video/plugins/video_chroma/libi420_rgb_sse2_plugin.dll
  60. BIN
      tools/Player-video/plugins/video_chroma/libi420_yuy2_mmx_plugin.dll
  61. BIN
      tools/Player-video/plugins/video_chroma/libi420_yuy2_plugin.dll
  62. BIN
      tools/Player-video/plugins/video_chroma/libi420_yuy2_sse2_plugin.dll
  63. BIN
      tools/Player-video/plugins/video_chroma/libi422_i420_plugin.dll
  64. BIN
      tools/Player-video/plugins/video_chroma/libi422_yuy2_mmx_plugin.dll
  65. BIN
      tools/Player-video/plugins/video_chroma/libi422_yuy2_plugin.dll
  66. BIN
      tools/Player-video/plugins/video_chroma/libi422_yuy2_sse2_plugin.dll
  67. BIN
      tools/Player-video/plugins/video_chroma/librv32_plugin.dll
  68. BIN
      tools/Player-video/plugins/video_chroma/libswscale_plugin.dll
  69. BIN
      tools/Player-video/plugins/video_chroma/libyuy2_i420_plugin.dll
  70. BIN
      tools/Player-video/plugins/video_chroma/libyuy2_i422_plugin.dll
  71. BIN
      tools/Player-video/plugins/video_filter/libscale_plugin.dll
  72. BIN
      tools/Player-video/plugins/video_filter/libyuvp_plugin.dll
  73. BIN
      tools/Player-video/plugins/video_output/libdirect2d_plugin.dll
  74. BIN
      tools/Player-video/plugins/video_output/libdirect3d_plugin.dll
  75. BIN
      tools/Player-video/plugins/video_output/libdirectdraw_plugin.dll
  76. BIN
      tools/Player-video/plugins/video_output/libdrawable_plugin.dll
  77. BIN
      tools/Player-video/plugins/video_output/libgl_plugin.dll
  78. BIN
      tools/Player-video/plugins/video_output/libglwin32_plugin.dll
  79. BIN
      tools/Player-video/plugins/video_output/libyuv_plugin.dll
  80. BIN
      tools/Player-video/qsp.dll
  81. BIN
      tools/Player-video/qspgui.exe
  82. 153 0
      tools/QGen4/keywords.xml
  83. BIN
      tools/QGen4/langs/en/qgen_en.mo
  84. BIN
      tools/QGen4/langs/ru/qgen_ru.mo
  85. BIN
      tools/QGen4/qgen.exe
  86. BIN
      tools/QGen5/QGen.exe
  87. BIN
      tools/QGen5/Qt5Core.dll
  88. BIN
      tools/QGen5/Qt5Gui.dll
  89. BIN
      tools/QGen5/Qt5Network.dll
  90. BIN
      tools/QGen5/Qt5Widgets.dll
  91. BIN
      tools/QGen5/Qt5Xml.dll
  92. 153 0
      tools/QGen5/keywords.xml
  93. BIN
      tools/QGen5/libgcc_s_dw2-1.dll
  94. BIN
      tools/QGen5/libstdc++-6.dll
  95. BIN
      tools/QGen5/libwinpthread-1.dll
  96. BIN
      tools/QGen5/platforms/qwindows.dll
  97. BIN
      tools/QSPgui/fmodexp.dll
  98. BIN
      tools/QSPgui/langs/de/qspgui.mo
  99. BIN
      tools/QSPgui/langs/en/qspgui.mo
  100. BIN
      tools/QSPgui/langs/eo/qspgui.mo

+ 39 - 0
.gitignore

@@ -0,0 +1,39 @@
+.*
+*.bak
+*.qsp
+*.sav
+*.ini
+glife.txt
+qgen.cfg
+qspgui.cfg
+avatar.*
+*.sublime-*
+*.rar
+*.zip
+VideoDecodeStats/
+tools/*.AppImage
+lbuild.sh
+
+glmf.code-workspace
+
+Music Life Wiki/
+
+images.zip
+
+# ignore Visual Studio build files
+/tools/qsp-analyser/QSP_Analyser/[Bb]in/
+/tools/qsp-analyser/QSP_Analyser/[Oo]bj/
+
+# don't ignore this file
+!.gitignore
+
+# do NOT ignore editorconfig
+!.editorconfig
+
+MakeQSP.bat
+/glife.iml
+/Qqsp-1.9.0-win64/
+glife.7z.tmp
+glife.7z
+
+*.test

+ 17 - 0
extended_succubus.qproj

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="utf-8"?>
+<QGen-project version="4.0.0 beta 1">
+  <Structure>
+    <Folder name="setup">
+      <Location name="mod_extended_succubus_options"/>
+      <Location name="mod_extended_succubus_setup"/>
+      <Location name="mod_extended_succubus_readme"/>
+      <Location name="mod_extended_succubus"/>
+    </Folder>
+    <Folder name="locations">
+      <Location name="mod_extended_succubus_pav_deeppark"/>
+      <Location name="mod_extended_succubus_pav_lair_entrance"/>
+      <Location name="mod_extended_succubus_pav_lair_first_time"/>
+      <Location name="mod_extended_succubus_pav_lair"/>
+    </Folder>
+  </Structure>
+</QGen-project>

BIN
extended_succubus.txt


BIN
images - Copie/locations/misc/shrugging_woman.jpg


BIN
images - Copie/locations/pavlovsk/park/deep/lair_entrance.jpg


BIN
images - Copie/locations/pavlovsk/park/deep/succubus_carving.jpg


BIN
images/locations/misc/shrugging_woman.jpg


BIN
images/locations/pavlovsk/park/deep/lair/alcoves.jpg


BIN
images/locations/pavlovsk/park/deep/lair/bedroom.jpg


BIN
images/locations/pavlovsk/park/deep/lair/blocked.png


BIN
images/locations/pavlovsk/park/deep/lair/cave.jpg


BIN
images/locations/pavlovsk/park/deep/lair/kitchen.jpg


BIN
images/locations/pavlovsk/park/deep/lair/lake.png


BIN
images/locations/pavlovsk/park/deep/lair/shackles.jpg


BIN
images/locations/pavlovsk/park/deep/lair/stairs.jpg


BIN
images/locations/pavlovsk/park/deep/lair/throne.jpg


BIN
images/locations/pavlovsk/park/deep/lair/upstairs.jpg


BIN
images/locations/pavlovsk/park/deep/lair_entrance.jpg


BIN
images/locations/pavlovsk/park/deep/succubus_carving.jpg


+ 10 - 0
locations/mod_extended_succubus.qsrc

@@ -0,0 +1,10 @@
+# mod_extended_succubus
+!input mod entry point here. this will be checked on every location, please keep it clean and brief to avoid game lag
+
+
+!entry point 1: if player is in pav deep park
+if $curloc = 'pav_park' and $ARGS[0] = 'deeper_park':
+	gs 'mod_extended_succubus_pav_deeppark'
+end
+--- mod_extended_succubus ---------------------------------
+

+ 10 - 0
locations/mod_extended_succubus_options.qsrc

@@ -0,0 +1,10 @@
+# mod_isample_options
+
+*clr&cla
+! This is where you place the configuration options for your mod.
+'There are currently no options available for this mod.'
+
+act 'return': gt 'mod_setting'
+
+--- mod_isample_options ---------------------------------
+

+ 7 - 0
locations/mod_extended_succubus_pavResidential.qsrc

@@ -0,0 +1,7 @@
+# mod_isample_pavResidential
+!mod event. remember to add a act to exit
+'[mod-isample]'
+'You try to chase the rabbit in town, sadly, this is only a sample mod, so there are no rabbit in sight.'
+act 'Back to town': gt 'pavResidential'
+--- mod_isample_pavResidential ---------------------------------
+

+ 17 - 0
locations/mod_extended_succubus_pav_deeppark.qsrc

@@ -0,0 +1,17 @@
+# mod_extended_succubus_pav_deeppark
+
+*nl
+if ExtSucMod['hasfoundlair'] = 0:
+	if ExtSucMod['hasfoundlairentrance'] = 0:
+		ExtSucMod['hasfoundlairentrance'] = 1
+		'Against a rock face, something shiny catches your attention.'
+		*nl
+		'Moving closer, you notice a <a href="exec:gt ''mod_extended_succubus_pav_lair_entrance'', ''start''">coin</a> encased inside the rock.'
+	else
+		'Inspect the <a href="exec:gt ''mod_extended_succubus_pav_lair_entrance'', ''start''">coin</a>.'
+	end
+else
+	act 'Go to the entrance of your lair':gt 'mod_extended_succubus_pav_lair_entrance', 'start'
+end
+--- mod_extended_succubus_pav_deeppark ---------------------------------
+

+ 24 - 0
locations/mod_extended_succubus_pav_lair.qsrc

@@ -0,0 +1,24 @@
+# mod_extended_succubus_pav_lair
+
+
+$prevloc = 'mod_extended_succubus_pav_lair_entrance'
+
+'<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\cave.jpg"></center>'
+'You''re in your lair.'
+*nl
+'The air is deliciously warm.'
+*nl
+'At its center, you can see a waterfall feeding a little inner basin. A quick look tells you that the water, clear like crystal, seems shallow.'
+*nl
+'All around the cave you can see alcoves.'
+*nl
+' At the opposite side of the entrance, there are stairs going up.'
+*nl
+'<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\stairs.jpg"></center>'
+
+act 'Go to the lake':gt 'mod_extended_succubus_pav_lair_bathroom'
+act 'Go to the alcoves':gt 'mod_extended_succubus_pav_lair_alcoves'
+act 'Go upstairs':gt 'mod_extended_succubus_pav_lair_upstairs'
+act 'Move back':gt $prevloc, 'start'
+
+--- mod_extended_succubus_pav_lair_first_time ---------------------------------

+ 36 - 0
locations/mod_extended_succubus_pav_lair_entrance.qsrc

@@ -0,0 +1,36 @@
+# mod_extended_succubus_pav_lair_entrance
+
+if $ARGS[0] = 'start':
+	'You observe the small coin encased in the rock.'
+	*nl
+	'The creature carved on it seems ' + iif(succubusflag, 'appealing and familiar', 'scary and dangerous') + '.'
+	*nl
+	'<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\succubus_carving.jpg"></center>'
+	act 'Touch the coin': gt 'mod_extended_succubus_pav_lair_entrance', 'touch'
+elseif $ARGS[0] = 'touch':
+	if succubusflag:
+		'As you touch the coin, you see the rock wall opening itself, like a mouth.'
+		*nl
+		'You smile, not remotely afraid from what you''re seeing.'
+		*nl
+		'<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair_entrance.jpg"></center>'
+		if ExtSucMod['hasfoundlair'] = 0:
+			$cave_destination = 'mod_extended_succubus_pav_lair_first_time'
+		else
+			$cave_destination = 'mod_extended_succubus_pav_lair'
+		end
+		act 'Get in the cave':gt $cave_destination
+		
+	else
+		'You''re wondering if you''ve found something magical and eager to try your discovery, you softly touch the coin.'
+		*nl
+		'Suddenly, well... nothing happens...'
+		*nl
+		'<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\misc\shrugging_woman.jpg"></center>'
+	end
+end
+
+act 'Leave':gt 'pav_park', 'deeper_park'
+
+--- mod_extended_succubus_pav_lair_entrance ---------------------------------
+

+ 144 - 0
locations/mod_extended_succubus_pav_lair_first_time.qsrc

@@ -0,0 +1,144 @@
+# mod_extended_succubus_pav_lair_first_time
+
+$SeenAll = 'You feel like you''ve seen everything you need here. '
+
+if $ARGS[0] = 'stairs':
+    $prevloc = 'mod_extended_succubus_pav_lair_first_time'
+    'Up the stairs, you see a corridors with 2 doors on the left, one on the right and one at the end.'
+    *nl
+    '<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\upstairs.jpg"></center>'
+    if $ARGS[1] = 'bedroom':
+        ExtSucMod['bedroom_checked'] = 1
+        $bedroom_description = '
+    As soon as you enter the room, you''re amazed by its beauty.
+    It''s a bedroom... No, a royal bedroom!
+    Everything seems rich there, a comfy bed and high quality furnitures
+    You smile to yourself : "Here I have everything I need to make a proper bedroom"
+    Although the cave have been uninhabited for a while, everything seems to be in a pristine state (Magic! Tadaam!)
+    '
+    elseif $ARGS[1] = 'kitchen':
+        ExtSucMod['kitchen_checked'] = 1
+        $kitchen_description = '
+    You''re entering into what seems to be a kitchen
+    There''s everything a kitchen needs : a fireplace to cook some food, a table, shelves and even a magical storage to keep what''s inside cold
+    '
+    elseif $ARGS[1] = 'throne':
+        ExtSucMod['throne_checked'] = 1
+        $throne_description = '
+    In this room, you find only one thing :
+    A throne...
+    <i>Your</i> throne.
+    You slowly walks toward it and sits. You smiles : "I feel like I''m a queen"
+    '
+    elseif $ARGS[1] = 'blocked':
+        ExtSucMod['blocked_checked'] = 1
+        $blocked_description = '
+    You''re not going very far in that tunnel.
+    It''s blocked by stones.
+    '
+    end
+
+    if ExtSucMod['bedroom_checked'] = 1:
+        *nl
+        '<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\bedroom.jpg"></center>'
+        '<<$bedroom_description>>'
+    else
+        act 'Check the door on the right':gt 'mod_extended_succubus_pav_lair_first_time', 'stairs', 'bedroom'
+    end
+
+    if ExtSucMod['kitchen_checked'] = 1:
+        *nl
+        '<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\kitchen.jpg"></center>'
+        '<<$kitchen_description>>'
+    else
+        act 'Check the first door on the left':gt 'mod_extended_succubus_pav_lair_first_time', 'stairs', 'kitchen'
+    end
+
+    if ExtSucMod['blocked_checked'] = 1:
+        *nl
+        '<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\blocked.png"></center>'
+        '<<$blocked_description>>'
+    else
+        act 'Check the second door on the left':gt 'mod_extended_succubus_pav_lair_first_time', 'stairs', 'blocked'
+    end
+
+    if ExtSucMod['throne_checked'] = 1:
+        *nl
+        '<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\throne.jpg"></center>'
+        '<<$throne_description>>'
+    else
+        act 'Check the door at the end of the corridor':gt 'mod_extended_succubus_pav_lair_first_time', 'stairs', 'throne'
+    end
+    if ExtSucMod['throne_checked'] + ExtSucMod['throne_checked'] + ExtSucMod['throne_checked'] + ExtSucMod['throne_checked'] >= 4:
+        ExtSucMod['stairs_checked'] = 1
+    else
+        $SeenAll = ''
+    end
+
+    killvar '$bedroom_description'
+    killvar '$kitchen_description'
+    killvar '$blocked_description'
+    killvar '$throne_description'
+else
+    $prevloc = 'mod_extended_succubus_pav_lair_entrance'
+    if $ARGS[0] = 'lake':
+        ExtSucMod['lake_checked'] = 1
+        $lake_description = '
+    You walk down to the lake and sits next to it.
+    You trace your fingers against the surface of the water and smiles as you feel how it''s deliciously warm :
+    "This is not just a lake, but a hotspring."
+    '
+    elseif $ARGS[0] = 'alcoves':
+        ExtSucMod['alcoves_checked'] = 1
+        $alcoves_description = '
+    The walls have been dug to create many rooms all around.
+    The rooms are all the same : against the back wall are solidly fixed shackles and below them, a pile of straw.
+    "There were prisonners here? Or perhaps slaves...."
+    '
+    end
+
+    '<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\cave.jpg"></center>'
+    'You enter the cave and take a look around. You''re astonished by the view.'
+    *nl
+    'The air is deliciously warm.'
+    *nl
+    'The cave is circular and seems to have been arranged. Some people lived here, for sure.'
+    *nl
+    'At its center, you can see a waterfall feeding a little inner basin. A quick look tells you that the water, clear like crystal, seems shallow.'
+    if ExtSucMod['lake_checked'] = 1:
+        *nl
+        '<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\lake.png"></center>'
+    else
+        act 'Check the lake':gt 'mod_extended_succubus_pav_lair_first_time', 'lake'
+    end
+    '<<$lake_description>>'
+    'All around the cave you can see alcoves.'
+    *nl
+    '<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\alcoves.jpg"></center>'
+    '<<$alcoves_description>>'
+    if ExtSucMod['alcoves_checked'] = 1:
+        *nl
+        '<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\shackles.jpg"></center>'
+    else
+        act 'Check the alcoves':gt 'mod_extended_succubus_pav_lair_first_time', 'alcoves'
+    end
+    ' At the opposite side of the entrance, there are stairs going up.'
+    *nl
+    '<center><img <<$set_imgh>> src="mod\extended_succubus\images\locations\pavlovsk\park\deep\lair\stairs.jpg"></center>'
+    if ExtSucMod['stairs_checked'] = 0:
+        act 'Move up the stairs':gt 'mod_extended_succubus_pav_lair_first_time', 'stairs'
+    end
+
+    if ExtSucMod['bedroom_checked'] + ExtSucMod['alcoves_checked'] + ExtSucMod['stairs_checked'] >= 3:
+        ExtSucMod['hasfoundlair'] = 1
+    else
+        $SeenAll = ''
+    end
+
+    killvar '$lake_description'
+    killvar '$alcoves_description'
+end
+
+act '<<$SeenAll>>Move back':gt $prevloc, 'start'
+
+--- mod_extended_succubus_pav_lair_first_time ---------------------------------

+ 44 - 0
locations/mod_extended_succubus_readme.qsrc

@@ -0,0 +1,44 @@
+# mod_extended_succubus_readme
+!input your mod detail readme here. you can use msg or detailed structure, just make sure to create act 'return': gt 'mod_setting'
+*clr&cla
+act 'return': gt 'mod_setting'
+
+'<center>Mod <b>extended_succubus</b></center>'
+'This is a sample for new mod system, please fill your own mod in this form
+1. Since QSP can not load location with same name, and there are no warning about this during adding new qsp files, please name ALL YOUR LOCATION NAME with <B>mod_name_xxx</B> to avoid duplication bug.
+
+2. please DO NOT use space or non-ascii character in location name. you can use use _ instead. -- this may cause bug on txtsplit function for git
+
+3. The first location MUST be named as "mod_name_setup", this system will call it and load necessary information from it.
+$mod_info[0] = mod name
+$mod_info[1] = mod version
+10203 will be displayed as version 1.2, fix3.
+40500 will be showen as version 4.5
+$mod_info[2] = author name
+$mod_info[3] = short description for this mod
+
+4. please create "mod_name_readme" location for mod detail readme (just like this location)
+  If you really have only one line for this, you can use a simple msg instead a long text.
+  
+5. put all your entry point in location "mod_name"
+You can use lots of condition check there, check this sample file yourself.
+Frequency used condition:'
+'<table>'
+*p "<tr><td>current location"
+"<td>if $curloc = '...'</td></tr>"
+*p "<tr><td>current stage"
+"<td>if $ARGS[0] = '...'</td></tr>"
+*p "<tr><td>variable value"
+"<td>if aaa > 10 </td></tr>"
+'</table>
+Please note that strings are case sensitive, you can use lcase() or ucase() to shft them before check.
+
+
+6. Due to techinque issue, this mod system CAN NOT recognition locations use value in ARGS (luckly, only system functions use this, so you shall not worry about this.)
+for example, gs ''indik'', ''2'', 100
+
+Have a nice day, and Welcome to join this Community!
+
+--- illume, 2018/1/25'
+--- mod_extended_succubus_readme ---------------------------------
+

+ 35 - 0
locations/mod_extended_succubus_setup.qsrc

@@ -0,0 +1,35 @@
+# mod_extended_succubus_setup
+!input basic mod information here. 
+!this location must be the first one
+
+$mod_info[0] = 'extended_succubus'
+!0=mod name, saved to $mod_name[i] array 
+
+$mod_info[1] = '00100'
+!1=mod version
+!this will be displayed as version 1.2, fix3.
+!if you input 40500, will be showen as version 4.5
+
+$mod_info[2] = 'creamel'
+!2=mod author
+
+$mod_info[3] = 'Extended Succubus adds many features for the succubus player'
+!3=mod description, input a short brief here.
+
+$mod_info[4] = 'Options'
+!4=mod options/settings link name.
+
+
+if curloc = 'mod_<<$mod_info[0]>>_setup':
+	usehtml = 1
+	!this will be only showed if you exec mod file. This location should be only called by gs, so this line will not trigger on normal mod playing
+	'<center><h1><font color=red>ACCESS DENIED</font></h1></center>'
+	'<<$mod_info[0]>> is a mod for <b>Girl Life - English Community Version</b>, and can not be played individually.'
+	''
+	'You can find the main game in <a href="https://www.tfgamessite.com/index.php?module=viewgame&id=597">Tfgames site</a> (external link)'
+	''
+	'Our forum: <a href="https://tfgamessite.com/phpbb3/viewforum.php?f=70">Tfgames site</a> (external link)'
+end
+
+--- mod_extended_succubus_setup ---------------------------------
+

+ 7 - 0
locations/mod_extended_succubus_street.qsrc

@@ -0,0 +1,7 @@
+# mod_isample_street
+!mod event. remember to add a act to exit
+'[mod-isample]'
+'You try to jump into rabbit hole, sadly, this is only a sample mod, so you can not even find a hole to jump.'
+act 'Back to street': gt 'street'
+--- mod_isample_street ---------------------------------
+

+ 537 - 0
tools/Get Image Paths.ahk

@@ -0,0 +1,537 @@
+/*
+ *		-- Get image paths from glife.txt  --
+ *
+ *		Requires images subfolder to exist in current directory
+ *		
+ *		OutAllFile 	- List of All unprocessed file names from glife.txt that are not marked missing in the code
+ *		OutUsedFile - List of Found file names from glife.txt and Auto List
+ *		OutMissFile	- List of Missing file names from glife.txt that are marked missing in the code.
+ *		OutAutoFile	- List of file paths from glife.txt that were added to Output file using code in this script
+ *		OutManFile	- List of file paths from glife.txt that will have to be added manualy checked either in glife code or added to OutUsedFile
+ *          
+ *
+ *      WD: Jul 2015
+ *
+ *
+ */
+  
+  
+
+#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
+#Warn  ; Enable warnings to assist with detecting common errors.
+SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
+SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
+
+
+SourceFile 		= glife.txt
+OutAllFile		= Image List - All.txt
+OutUsedFile		= Image List - Used.txt
+OutMissFile		= Image List - Missing.txt
+OutAutoFile		= Image Paths - Auto List.txt
+OutManFile		= Image Paths - Manual List.txt
+SearchRegEx		= i)<img\s+src\s*=\s*"(.*?)"
+Search2RegEx	= i)\bview\s*'+(.*?)'+
+CommentRegEx 	= ^\s*!
+MarkMissRegEx	= i)!.*?:\s+IMAGE NEEDED\s*~\s*.*?<img\s+src\s*=\s*"(.*?)"
+
+FileEncoding, UTF-16
+
+;-- backup files  and delete --
+IfNotExist %SourceFile%
+{
+	MsgBox, 16, Get Image Paths, Unable to locate "%SourceFile%" in "%A_WorkingDir%", 10
+	Exit
+}
+
+ifExist %OutAllFile%					;; Backup File		
+{
+	FileMove, %OutAllFile%, %OutAllFile%.bak, 1	
+	FileDelete, %OutAllFile%
+}
+
+ifExist %OutUsedFile%				;; Backup File		
+{
+	FileMove, %OutUsedFile%, %OutUsedFile%.bak, 1	
+	FileDelete, %OutUsedFile%
+}
+
+ifExist %OutMissFile%				;; Backup File		
+{
+	FileMove, %OutMissFile%, %OutMissFile%.bak, 1	
+	FileDelete, %OutMissFile%
+}
+
+ifExist %OutAutoFile%				;; Backup File 
+{
+	FileMove, %OutAutoFile%, %OutAutoFile%.bak, 1
+	FileDelete, %OutAutoFile%
+}
+
+ifExist %OutManFile%				;; Backup File 
+{
+	FileMove, %OutManFile%, %OutManFile%.bak, 1
+	FileDelete, %OutManFile%
+}
+
+
+; -- load data from file --
+FileRead, Source, %SourceFile%
+
+; -- vars need plenty of space to work with --
+VarSetCapacity(OutAll, 4194304)				;; 4mb
+VarSetCapacity(OutUsed, 4194304)			;; 4mb
+VarSetCapacity(OutMiss, 4194304)			;; 4mb
+VarSetCapacity(OutAuto, 1048576)			;; 1mb
+VarSetCapacity(OutMan, 1048576)				;; 1mb
+
+
+; -- Parse data one line at a time --
+Loop, Parse, Source, `n, `r  			; Specifying `n prior to `r allows both Windows and Unix files to be parsed.
+{
+	if trim(A_LoopField) = ""													;; Skip blank line
+		continue
+	
+	; -- Check is Comment line --
+	FoundCmntPos := RegExMatch(A_LoopField, CommentRegEx)
+	if (ErrorLevel)
+	{
+		MsgBox, 48, Get Image Paths, RegExMatch runtime error: %ErrorLevel%`n`nFound searching string: %A_LoopField%`n`nusing search: %CommentRegEx%
+		break
+	}
+	
+	if (FoundCmntPos)															;; comment found
+	{
+		FoundPos := RegExMatch(A_LoopField, MarkMissRegEx, Match)				;; Check for known missing file
+		if (ErrorLevel)
+		{
+			MsgBox, 48, Get Image Paths, RegExMatch runtime error: %ErrorLevel%`n`nFound searching string: %A_LoopField%`n`nusing search: %MarkMissRegEx%
+			break
+		}	
+		if (FoundPos)															;; Found File
+		{	
+			Match1 := StrReplace(Match1, "/", "\")								;; Use correct Win path seperator	
+			IfExist %Match1%
+			{
+				OutMiss	.= Spacer(Match1) . "- Missing file exists`n"			;; Missing File found
+			}
+			else
+			{
+				OutMiss	.= Match1 . "`n"										;; Missing file Not found
+			}		
+		}
+		Continue
+	}
+	
+	LineNo := A_index															;; Save line no
+	
+	; -- HTML  images --
+	FoundPos := 1
+	Haystack := A_LoopField
+
+	Loop, 200
+	{
+	
+		; -- Find Image File Path --
+		FoundPos := RegExMatch(Haystack, SearchRegEx, Match, FoundPos)				;; Search for image path in html
+		if (ErrorLevel)
+		{
+			MsgBox, 48, Get Image Paths, RegExMatch runtime error: %ErrorLevel%`n`nFound searching string: %Haystack%`n`nusing search: %SearchRegEx%
+			break
+		}
+		
+		if (FoundPos = 0)															;; Not Found exit loop
+		{
+			break
+		}
+		else
+		; if (FoundPos)																;; Found File
+		{	
+			IdxTxt := " (L:" . LineNo . ", P:" . FoundPos . ")" 
+			Match1 := StrReplace(Match1, "/", "\")									;; Use correct Win path seperator
+			OutAll .= Match1 . "`n"
+			; -- Image Path Contains Code --
+			if inStr(Match1, "<<")													;; String contains expression
+			{
+				
+				if inStr(Match1, "FUNC(''$face_image''")							;; Hairstyle images Function - only use JPG files
+				{
+					if GetImageFiles("images\body\hairstyles", "hcol*.jpg", OutUsed, "", "FR")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\body\hairstyles\*\hcol*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\body\hairstyles\*\hcol*.jpg' " . IdxTxt . "`n"
+					}
+					
+				}
+				else if inStr(Match1, "FUNC(''$clothing_image''")					;; Clothing images Function - only use JPG files
+				{
+					if GetImageFiles("images\clothes", "vatnik.jpg", OutUsed)
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\vatnik.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\vatnik.jpg' " . IdxTxt . "`n"
+					}
+					; GetImageFiles("images\clothes\newclo", "131.jpg", OutUsed)	;; Dupe See below	
+					
+					if GetImageFiles("images\clothes", "jeans*.jpg", OutUsed,  "i)jeans\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\jeans*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\jeans*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\clothes", "yoga*.jpg", OutUsed, "i)yoga\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\yoga*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\yoga*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\clothes", "sarafan*.jpg", OutUsed, "i)sarafan\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\sarafan*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\sarafan*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\clothes", "short*.jpg", OutUsed, "i)short\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\short*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\short*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\clothes", "skirt*.jpg", OutUsed, "i)skirt\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\skirt*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\skirt*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\clothes", "dress*.jpg", OutUsed, "i)dress\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\dress*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\dress*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\clothes", "profi*.jpg", OutUsed, "i)profi\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\profi*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\profi*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\clothes", "pants*.jpg", OutUsed "i)pants\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\pants*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\pants*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\clothes", "latex*.jpg", OutUsed, "i)latex\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\latex*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\latex*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\clothes", "hooker*.jpg", OutUsed, "i)hooker\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\hooker*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\hooker*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\clothes", "k*.jpg", OutUsed, "i)k\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\k*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\k*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\clothes\newclo", "*.jpg", OutUsed, "i)\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\clothes\newclo\*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\clothes\newclo\*.jpg' " . IdxTxt . "`n"
+					}
+
+					if GetImageFiles("images\img\dress", "ero*.jpg", OutUsed, "i)ero\d+\.jpg")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\img\dress\ero*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\img\dress\ero*.jpg' " . IdxTxt . "`n"
+					}
+				}
+
+				else if inStr(Match1, "images\qwest\card")							;; Playingcard Images  - only use JPG files
+				{
+					if GetImageFiles("images\qwest\card", "*.jpg", OutUsed, "", "FR")
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\qwest\card\*\*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- No files found in 'images\qwest\card\*\*.jpg' " . IdxTxt . "`n"
+					}				
+				}
+				
+				else if inStr(Match1, "images\BDSM_Club\<<$BDSMrole>>") ;; BDSM Club
+				{
+					BDSMRegEx := "i)(_\d+)\.jpg"
+					BDSMPos := RegExMatch(Match1, BDSMRegEx , BDSMatch)
+					if (ErrorLevel)
+					{
+						MsgBox, 48, Get Image Paths, RegExMatch runtime error: %ErrorLevel%`n`nFound searching string: %Match1%`n`nusing search: %BDSMRegEx%
+						break
+					}			
+					
+					BDSMRegEx := "i)[rg]?\d+" . BDSMatch1 . "\.jpg"
+					
+					if GetImageFiles("images\BDSM_Club", "*.jpg", OutUsed, BDSMRegEx)
+					{
+						OutAuto	.= Spacer(Match1) . "- Found 'images\BDSM_Club*.jpg'`n"
+					}
+					else
+					{
+						OutMan	.= Spacer(Match1) . "- no files found in 'images\BDSM_Club*.jpg' " . IdxTxt . "`n"
+					}					
+
+				}
+				
+				else if inStr(Match1, "FUNC")										;; Unknown Function - Manual
+				{
+					OutMan	.= Spacer(Match1) . "- Unknown Function " . IdxTxt . "`n"
+				}
+				
+				else if inStr(Match1, "$")											;; Uses String variable - Manual
+				{
+					OutMan	.= Spacer(Match1) . "- Used String Variable " . IdxTxt . "`n"
+				}
+				
+				else if GetImagefromPath(Match1, OutUsed)							;; Try to find images
+				{
+					OutAuto	.= Spacer(Match1) . "- Found image files`n"
+				}
+				else
+				{
+					OutMan	.= Spacer(Match1) . "- Files not found " . IdxTxt . "`n"
+				}
+			}
+			; -- Image path is just a file name --
+			else
+			{
+				IfExist %Match1%
+				{
+					OutUsed	.= Match1 . "`n"										;; Normal file found
+				}
+				else
+				{
+					OutMan	.= Spacer(Match1) . "- File not found " . IdxTxt . "`n"
+				}
+			}	
+			FoundPos += 8 + StrLen(Match1)											;; Increment Search Position
+		}
+	}
+	
+	
+	; -- VIEW  images --
+	FoundPos := 1
+	Haystack := A_LoopField
+
+	Loop, 200
+	{
+	
+		; -- Find Image File Path --
+		FoundPos := RegExMatch(Haystack, Search2RegEx, Match, FoundPos)				;; Search for 'view' cmd path
+		if (ErrorLevel)
+		{
+			MsgBox, 48, Get Image Paths, RegExMatch runtime error: %ErrorLevel%`n`nFound searching string: %Haystack%`n`nusing search: %Search2RegEx%
+			break
+		}
+		
+		if (FoundPos = 0)															;; Not Found exit loop
+		{
+			break
+		}
+		else
+		; if (FoundPos)																;; Found File
+		{	
+			IdxTxt := " (L:" . LineNo . ", P:" . FoundPos . ")" 
+			Match1 := StrReplace(Match1, "/", "\")									;; Use correct Win path seperator
+			OutAll .= Match1 . "`n"
+			; -- Image Path Contains Code --
+			if inStr(Match1, "<<")													;; String contains expression
+			{
+				if inStr(Match1, "FUNC")											;; Unknown Function - Manual
+				{
+					OutMan	.= Spacer(Match1) . "- Unknown Function " . IdxTxt . "`n"
+				}
+				
+				else if inStr(Match1, "$")											;; Uses String variable - Manual
+				{
+					OutMan	.= Spacer(Match1) . "- Used String Variable " . IdxTxt . "`n"
+				}
+				
+				else if GetImagefromPath(Match1, OutUsed)							;; Try to find images
+				{
+					OutAuto	.= Spacer(Match1) . "- Found image files`n"
+				}
+				else
+				{
+					OutMan	.= Spacer(Match1) . "- Files not found " . IdxTxt . "`n"
+				}
+			}
+			
+			; -- Image path is just a file name --
+			else
+			{
+				IfExist %Match1%
+				{
+					OutUsed	.= Match1 . "`n"										;; Normal file found
+				}
+				else
+				{
+					OutMan	.= Spacer(Match1) . "- File not found " . IdxTxt . "`n"
+				}
+			}
+			FoundPos += 5 + StrLen(Match1)											;; Increment Search Position
+		}
+	}
+}
+
+
+; -- Set path to use / seperators --
+OutAll	:= StrReplace(OutAll, "\", "/")
+OutUsed	:= StrReplace(OutUsed, "\", "/")
+OutMiss	:= StrReplace(OutMiss, "\", "/")
+OutAuto	:= StrReplace(OutAuto, "\", "/")
+OutMan	:= StrReplace(OutMan, "\", "/")
+
+
+; -- sort filenames and remove dupes --
+Sort, OutAll, U
+Sort, OutUsed, U
+Sort, OutMiss, U
+Sort, OutAuto, U
+Sort, OutMan, U
+
+
+;-- save files --
+FileAppend, %OutAll%, %OutAllFile%
+FileAppend, %OutUsed%, %OutUsedFile%
+FileAppend, %OutMiss%, %OutMissFile%
+FileAppend, %OutAuto%, %OutAutoFile%
+FileAppend, %OutMan%, %OutManFile%
+
+Exit
+
+; ########## Functions ##########
+Spacer(TxtStr = "")
+{
+	Static SpaceFill := "                                                                 "
+	
+	;~ ps := strlen(TxtStr) + 1												;; allow empty string = 1 
+	;~ ss := TxtStr . SubStr(SpaceFill, ps) . "`t"
+	
+	return TxtStr . SubStr(SpaceFill, strlen(TxtStr)+1) . "`t"
+	
+}
+
+GetImageFiles(FilePath, FileName, ByRef Output, FileNameRegEx := "", FileLoopMode := "F")
+{	;; Get image paths in filepath using filepattern FileName
+	
+	;~ msgbox 	GetImageFiles()`nFilePath := %FilePath%`nFileName := %FileName%`nFileNameRegEx := %FileNameRegEx%`nFileLoopMode := %FileLoopMode%
+	
+	IfNotExist, %FilePath%
+	{
+		MsgBox, 48, Get Image Paths, Error in GetImageFiles()`n`nUnable to locate "%FilePath%" folder, Filename '%FileName%'.`n`nCurrent working dir is "%A_WorkingDir%"
+		return false		
+	}
+	
+	SaveWorkDir := A_WorkingDir
+	Setworkingdir, %FilePath%
+	
+	found := false
+	
+	; -- Loop with or Without recursion --
+	Loop, Files, %FileName%, %FileLoopMode%										;; Find files in FilePath using Filepattern FileName
+	{
+		if(FileNameRegEx)														;; Can we test file name
+		{
+			FndPos := RegExMatch(A_LoopFileName, FileNameRegEx)					;; File Found matches
+			if (ErrorLevel)
+			{
+				MsgBox, 48, Get Image Paths, RegExMatch Error in function GetImageFiles()`n`nruntime error: %ErrorLevel%`n`nFound searching string: %A_LoopFileName%`n`nusing search: %FileNameRegEx%
+				break
+			}
+			if (not FndPos)														;; Filename not matches skip
+			{
+				continue
+			}
+		}
+	fp := FilePath  . "\" . A_LoopFileFullPath
+	Output .= fp . "`n"
+	found := true
+	}
+
+	
+	Setworkingdir, %SaveWorkDir%
+	return found
+
+}
+
+GetImagefromPath(FilePath, ByRef Output)
+{	;; Try to get Images from path 
+
+	FindRegEx 	:= "<<.*?>>"
+	ReplaceStr	:=	"*"
+
+	fp			:= StrReplace(FilePath, "/", "\") 
+	fp 			:= RegExReplace(fp, FindRegEx, ReplaceStr)
+	
+	splitpath, fp, FileName, Dir, Ext
+
+	;; -- Manual if wildcard in path --
+	if inStr(Dir, "*")
+	{
+		; MsgBox, 64, Get Image Path, GetImageFromPath() error: Path contains wildcard`n `nPath : '%fp%'`nDir :  '%Dir%'
+		return false
+	}
+
+	FileNameRegEx := StrReplace(FileName, "*", "\d+") 					; set up test for filename wildcard to be numbers only
+	FileNameRegEx := "i)" . StrReplace(FileNameRegEx, ".", "\.") 
+	
+	return GetImageFiles(Dir, FileName, Output, FileNameRegEx)
+}

+ 108 - 0
tools/Move Image Files.ahk

@@ -0,0 +1,108 @@
+/*
+ *		-- Move Image Files using 'Image Files List.txt'--
+ *
+ *		Requires images subfolder to exist in current directory
+ *		
+ *		ImageFileList		- List of file names from glife.txt and Auto List
+ *		UsedImageFolder		- Folder to move images in ImageFileList
+ *		UnUsedImageFolder	- Folder to move images not in ImageFileList
+ *		SourceFolder		- Folder with images
+ *          
+ *
+ *      WD: Jul 2015
+ *
+ *
+ */
+  
+  
+
+#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
+#Warn  ; Enable warnings to assist with detecting common errors.
+SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
+SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
+
+ImageFileList		= Image List - Used.txt
+UsedImageFolder		= Images, Used
+UnUsedImageFolder	= Images, Un-Used
+SourceFolder		= images
+
+FileEncoding, UTF-16
+
+;-- backup files  and delete --
+IfNotExist %ImageFileList%
+{
+	MsgBox, 16, Move Image Files, Unable to locate "%ImageFileList%" in "%A_WorkingDir%", 10
+	Exit
+}
+
+IfNotExist %UsedImageFolder%
+{
+	FileCreateDir, %UsedImageFolder%
+}
+
+IfNotExist %UnUsedImageFolder%
+{
+	FileCreateDir, %UnUsedImageFolder%
+}
+
+; -- load data from file --
+FileRead, Images, %ImageFileList%
+Images := StrReplace(Images, "/", "\")								;; Use correct Win path seperator
+
+; -- Parse data one line at a time --
+Loop, Parse, Images, `n, `r  			; Specifying `n prior to `r allows both Windows and Unix files to be parsed.
+{
+	if trim(A_LoopField) = ""										;; Skip blank line
+		continue
+	
+	IfExist, %A_LoopField%
+	{
+		; -- Create Dir if id dosn't exist --
+		SplitPath, A_LoopField, FileName, FileDir
+		IfNotExist  %UsedImageFolder%\%FileDir%
+		{
+			FileCreateDir, %UsedImageFolder%\%FileDir%
+			if (ErrorLevel)
+			{
+				MsgBox, 48, Move Image File, FileCreateDir Error:`n`nFailed to create '%UsedImageFolder%\%FileDir%'`n`nErrorLevel: '%ErrorLevel%'`nLastError: '%A_LastError%'	
+			}
+		}
+		
+		; -- move file --
+		FileMove, %A_LoopField%, %UsedImageFolder%\%FileDir%
+		if (ErrorLevel)
+		{
+			MsgBox, 48, Move Image File, FileMove Error:`n`nFailed to move '%A_LoopField%' to '%UsedImageFolder%\%FileDir%'`n`nErrorLevel: '%ErrorLevel%'`nLastError: '%A_LastError%'	
+		}
+	}
+	else	; -- File dosn't exist --
+	{
+		MsgBox, 64, Move Image Files, Unable to locate file : '%A_LoopField%', 5
+	}
+}
+
+; -- Rename Images folder to unused Images folder --
+IfExist %SourceFolder%
+{
+	FileMoveDir, %SourceFolder%, %UnUsedImageFolder%\%SourceFolder%
+	if (ErrorLevel)
+	{
+		MsgBox, 48, Move Image File, FileMoveDir Error:`n`nFailed to move '%SourceFolder%' to '%UnUsedImageFolder%\%SourceFolder%'`n`nErrorLevel: '%ErrorLevel%'`nLastError: '%A_LastError%'	
+	}
+	
+	; -- Rename Used Images folder to Images folder --
+	else IfNotExist %SourceFolder%
+	{
+		FileMoveDir, %UsedImageFolder%\%SourceFolder%, %SourceFolder%
+		if (ErrorLevel)
+		{
+			MsgBox, 48, Move Image File, FileMoveDir Error:`n`nFailed to move '%UsedImageFolder%\%SourceFolder%' to '%SourceFolder%'`n`nErrorLevel: '%ErrorLevel%'`nLastError: '%A_LastError%'	
+		}
+		else
+		{
+			FileRemoveDir, %UsedImageFolder%, 0					;; Delete Empty Folder
+		}
+	}
+}
+
+

+ 56 - 0
tools/Move or Rename Missing Image Files.ahk

@@ -0,0 +1,56 @@
+/*
+ *		-- Move or Rename Missing Image Files due to code changes--
+ *
+ *
+ *		Requires images subfolder to exist in current directory
+ *		
+ *
+ *
+ *      WD: Aug 2015
+ *
+ *
+ */
+  
+  
+
+#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
+#Warn  ; Enable warnings to assist with detecting common errors.
+SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
+SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
+
+; -- Move or rename without overwriting any existing files --
+
+;! WD: Move missing Image ~ "cumfrot.jpg" from "images\picb" to "images\Body"
+FileMove, images\picb\cumfrot.jpg, images\Body\cumfrot.jpg
+
+; ! WD: Move missing Image ~ "tatvag6.jpg" from "images\picBody" to "images\Body"
+FileMove, images\picBody\tatvag6.jpg, images\Body\tatvag6.jpg
+
+; ! WD: Remove Dupe Images ~ '<center><img src="images/etogame/analplug.jpg"></center>'
+FileMove, images\etogame\analplug.jpg, images\Body\analplug.jpg
+
+; ! WD: Move missing Image ~ "pussy.jpg" from "images\picb" to "images\Body"
+FileMove, images\picb\pussy.jpg, images\Body\pussy.jpg
+
+; ! WD: Move missing Image ~ "hpussy.jpg" from "images\picb" to "images\Body"
+FileMove, images\picb\hpussy.jpg, images\Body\hpussy.jpg
+
+; ! WD: Move missing Image ~ "spussy.jpg" from "images\picb" to "images\Body"
+FileMove, images\picb\spussy.jpg, images\Body\spussy.jpg
+
+; ! WD: Rename missing Image ~  'ghFinger.jpg' to 'ghFinger5.jpg'
+FileMove, images\etogame\ghFinger.jpg, images\etogame\ghFinger5.jpg
+
+; ! WD: Rename missing Image ~ 'kendraStrap.jpg' to 'kendraStrap1.jpg'
+FileMove, images\pics2\kendraStrap.jpg, images\pics2\kendraStrap1.jpg
+
+; ! WD: Rename missing Image ~ 'tatvag.jpg' to 'tatvag1.jpg' to fix view 'images/body/tatvag<<tatvag>>.jpg'
+FileMove, images\body\tatvag.jpg, images\body\tatvag1.jpg
+
+; ! WD: Rename 'png' clothing images as scripts are only using 'jpg' ~ Fixed code and images
+FileMove, images\clothes\*.png, images\clothes\*.jpg 
+Loop, Files, images\clothes, DR					;; Get all subdirs in Clothes
+{
+	FileMove, %A_LoopFileFullPath%\*.png, %A_LoopFileFullPath%\*.jpg
+}
+

BIN
tools/Move or Rename Missing Image Files.exe


BIN
tools/Player-original/fmodexp.dll


BIN
tools/Player-original/langs/de/qspgui.mo


BIN
tools/Player-original/langs/en/qspgui.mo


BIN
tools/Player-original/langs/eo/qspgui.mo


BIN
tools/Player-original/langs/ru/qspgui.mo


BIN
tools/Player-original/langs/uk/qspgui.mo


BIN
tools/Player-original/qsp.dll


BIN
tools/Player-original/qspgui.exe


BIN
tools/Player-video/fmodexp.dll


BIN
tools/Player-video/langs/de/qspgui.mo


BIN
tools/Player-video/langs/en/qspgui.mo


BIN
tools/Player-video/langs/eo/qspgui.mo


BIN
tools/Player-video/langs/ru/qspgui.mo


BIN
tools/Player-video/langs/uk/qspgui.mo


BIN
tools/Player-video/libvlc.dll


BIN
tools/Player-video/libvlccore.dll


BIN
tools/Player-video/plugins/access/libfilesystem_plugin.dll


BIN
tools/Player-video/plugins/audio_output/libdirectsound_plugin.dll


BIN
tools/Player-video/plugins/codec/libavcodec_plugin.dll


BIN
tools/Player-video/plugins/codec/libdxva2_plugin.dll


BIN
tools/Player-video/plugins/plugins.dat


BIN
tools/Player-video/plugins/video_chroma/libchain_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libgrey_yuv_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libi420_rgb_mmx_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libi420_rgb_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libi420_rgb_sse2_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libi420_yuy2_mmx_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libi420_yuy2_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libi420_yuy2_sse2_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libi422_i420_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libi422_yuy2_mmx_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libi422_yuy2_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libi422_yuy2_sse2_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/librv32_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libswscale_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libyuy2_i420_plugin.dll


BIN
tools/Player-video/plugins/video_chroma/libyuy2_i422_plugin.dll


BIN
tools/Player-video/plugins/video_filter/libscale_plugin.dll


BIN
tools/Player-video/plugins/video_filter/libyuvp_plugin.dll


BIN
tools/Player-video/plugins/video_output/libdirect2d_plugin.dll


BIN
tools/Player-video/plugins/video_output/libdirect3d_plugin.dll


BIN
tools/Player-video/plugins/video_output/libdirectdraw_plugin.dll


BIN
tools/Player-video/plugins/video_output/libdrawable_plugin.dll


BIN
tools/Player-video/plugins/video_output/libgl_plugin.dll


BIN
tools/Player-video/plugins/video_output/libglwin32_plugin.dll


BIN
tools/Player-video/plugins/video_output/libyuv_plugin.dll


BIN
tools/Player-video/qsp.dll


BIN
tools/Player-video/qspgui.exe


+ 153 - 0
tools/QGen4/keywords.xml

@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="utf-8"?>
+<QGen-keywords>
+  <Statements>
+    <Keyword name="pl" desc="PL [выражение] / *PL [выражение] - вывод текста в дополнительное / основное окно описания, затем переход на новую строку"/>
+    <Keyword name="clear" desc="CLEAR / *CLEAR - очистка дополнительного / основного окна описания"/>
+    <Keyword name="clr" desc="CLR / *CLR - очистка дополнительного / основного окна описания"/>
+    <Keyword name="p" desc="P [выражение] / *P [выражение] - вывод текста в дополнительное / основное окно описания"/>
+    <Keyword name="nl" desc="NL [выражение] / *NL [выражение] - переход на новую строку, затем вывод текста в дополнительное / основное окно описания"/>
+    <Keyword name="msg" desc="MSG [выражение] - вывод сообщения в информационном окне"/>
+    <Keyword name="wait" desc="WAIT [#выражение] - остановка выполнения программы на заданное количество миллисекунд"/>
+    <Keyword name="act" desc="ACT [$название],[$путь к изображению]:[оператор] &amp; [оператор] &amp; ... - добавление действия"/>
+    <Keyword name="delact" desc="DELACT [$название] / DEL ACT [$название] - удаление действия"/>
+    <Keyword name="cla" desc="CLA - очистка списка действий"/>
+    <Keyword name="cmdclear" desc="CMDCLEAR - очистка строки ввода"/>
+    <Keyword name="cmdclr" desc="CMDCLEAR - очистка строки ввода"/>
+    <Keyword name="cls" desc="CLS - очищает экран, оставляя только список предметов"/>
+    <Keyword name="menu" desc="MENU [$выражение] - показ меню с заданным названием"/>
+    <Keyword name="settimer" desc="SETTIMER [#выражение] - задает интервал таймера для локации-счетчика"/>
+    <Keyword name="dynamic" desc="DYNAMIC [$строка кода],[параметр 1],[параметр 2], ... - динамическое выполнение кода"/>
+    <Keyword name="set" desc="SET [название переменной]=[выражение] - установка значения переменной"/>
+    <Keyword name="let" desc="LET [название переменной]=[выражение] - установка значения переменной"/>
+    <Keyword name="killvar" desc="KILLVAR [$название],[#индекс] - удаление всех переменных / указанной переменной"/>
+    <Keyword name="copyarr" desc="COPYARR [$массив-приемник],[$массив-источник] - копирование содержимого массива в другой массив"/>
+    <Keyword name="addobj" desc="ADDOBJ [$название],[$путь к изображению],[#позиция] / ADD OBJ [$название],[$путь к изображению],[#позиция] - добавление предмета"/>
+    <Keyword name="delobj" desc="DELOBJ [$название] / DEL OBJ [$название] - удаление предмета"/>
+    <Keyword name="killobj" desc="KILLOBJ [#позиция] - удаление всех предметов / предмета в заданной позиции"/>
+    <Keyword name="unselect" desc="UNSELECT - отмена выбора предмета"/>
+    <Keyword name="unsel" desc="UNSEL - отмена выбора предмета"/>
+    <Keyword name="killall" desc="KILLALL - удаление всех переменных и предметов"/>
+    <Keyword name="opengame" desc="OPENGAME [$выражение] - загрузка состояния игры"/>
+    <Keyword name="openqst" desc="OPENQST [$выражение] - открытие и запуск файла игры"/>
+    <Keyword name="addqst" desc="ADDQST [$выражение] - добавление локаций из указанного файла"/>
+    <Keyword name="killqst" desc="KILLQST - удаление всех добавленных через ADDQST локаций"/>
+    <Keyword name="savegame" desc="SAVEGAME [$выражение] - сохранение состояния игры"/>
+    <Keyword name="refint" desc="REFINT - обновление интерфейса"/>
+    <Keyword name="showacts" desc="SHOWACTS [#выражение] - показ / скрытие списка действий"/>
+    <Keyword name="showinput" desc="SHOWINPUT [#выражение] - показ / скрытие строки ввода"/>
+    <Keyword name="showobjs" desc="SHOWOBJS [#выражение] - показ / скрытие списка предметов"/>
+    <Keyword name="showstat" desc="SHOWSTAT [#выражение] - показ / скрытие дополнительного окна описания"/>
+    <Keyword name="if" desc="IF [#выражение]:[оператор1] &amp; [оператор2] &amp; ... ELSE [оператор3] &amp; [оператор4] &amp; ... - условие"/>
+    <Keyword name="else" desc="IF [#выражение]:[оператор1] &amp; [оператор2] &amp; ... ELSE [оператор3] &amp; [оператор4] &amp; ... - условие"/>
+    <Keyword name="elseif" desc="ELSEIF [#выражение]:[оператор1] &amp; [оператор2] &amp; ... - альтернативное условие"/>
+    <Keyword name="exit" desc="EXIT - завершение выполнения текущего кода"/>
+    <Keyword name="end" desc="END - завершение многострочной формы IF / ACT"/>
+    <Keyword name="jump" desc="JUMP [$выражение] - переход на указанную метку"/>
+    <Keyword name="gosub" desc="GOSUB [$выражение],[параметр 1],[параметр 2], ... - обработка указанной локации"/>
+    <Keyword name="gs" desc="GS [$выражение],[параметр 1],[параметр 2], ... - обработка указанной локации"/>
+    <Keyword name="goto" desc="GOTO [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию"/>
+    <Keyword name="gt" desc="GT [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию"/>
+    <Keyword name="xgoto" desc="XGOTO [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию без очистки основного окна описания"/>
+    <Keyword name="xgt" desc="XGT [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию без очистки основного окна описания"/>
+    <Keyword name="play" desc="PLAY [$путь к звуковому файлу],[#громкость] - воспроизведение звукового файла с заданной громкостью"/>
+    <Keyword name="close" desc="CLOSE [$путь к звуковому файлу] / CLOSE ALL - остановка проигрывания звукового файла / всех звуковых файлов"/>
+    <Keyword name="view" desc="VIEW [$путь к графическому файлу] - просмотр изображения"/>
+  </Statements>
+  <Expressions>
+    <Keyword name="and" desc="[#выражение 1] AND [#выражение 2] - логическое &quot;и=&quot;"/>
+    <Keyword name="or" desc="[#выражение 1] OR [#выражение 2] - логическое &quot;или&quot;"/>
+    <Keyword name="obj" desc="OBJ [$предмет] - проверка наличия предмета в рюкзаке"/>
+    <Keyword name="loc" desc="LOC [$локация] - проверка существования локации"/>
+    <Keyword name="no" desc="NO [#выражение] - отрицание"/>
+    <Keyword name="mod" desc="[#выражение 1] MOD [#выражение 2] - вычисление остатка от деления"/>
+    <Keyword name="desc" desc="DESC([$выражение]) - возвращает текст базового описания локации"/>
+    <Keyword name="$desc" desc="$DESC([$выражение]) - возвращает текст базового описания локации"/>
+    <Keyword name="iif" desc="IIF([#выражение],[выражение_да],[выражение_нет]) - возвращает одно из выражений по условию"/>
+    <Keyword name="$iif" desc="$IIF([#выражение],[выражение_да],[выражение_нет]) - возвращает одно из выражений по условию"/>
+    <Keyword name="input" desc="INPUT([выражение]) - показывает окно ввода текста и возвращает введенное значение"/>
+    <Keyword name="$input" desc="$INPUT([выражение]) - показывает окно ввода текста и возвращает введенное значение"/>
+    <Keyword name="isplay" desc="ISPLAY([$выражение]) - проверяет, проигрывается ли в текущий момент указанный файл"/>
+    <Keyword name="max" desc="MAX([выражение 1],[выражение 2], ...) - возвращает максимальное из значений аргументов"/>
+    <Keyword name="$max" desc="$MAX([выражение 1],[выражение 2], ...) - возвращает максимальное из значений аргументов"/>
+    <Keyword name="min" desc="MIN([выражение 1],[выражение 2], ...) - возвращает минимальное из значений аргументов"/>
+    <Keyword name="$min" desc="$MIN([выражение 1],[выражение 2], ...) - возвращает минимальное из значений аргументов"/>
+    <Keyword name="rand" desc="RAND([#выражение 1],[#выражение 2]) - возвращает случайное число между заданными"/>
+    <Keyword name="rgb" desc="RGB([#красный],[#зеленый],[#синий]) - возвращает код цвета на основе 3-х составляющих"/>
+    <Keyword name="getobj" desc="GETOBJ([#позиция]) - возвращает название предмета, расположенного в заданной позиции"/>
+    <Keyword name="$getobj" desc="$GETOBJ([#позиция]) - возвращает название предмета, расположенного в заданной позиции"/>
+    <Keyword name="dyneval" desc="DYNEVAL([$выражение],[параметр 1],[параметр 2], ...) - возвращает значение динамически вычисленного выражения"/>
+    <Keyword name="$dyneval" desc="$DYNEVAL([$выражение],[параметр 1],[параметр 2], ...) - возвращает значение динамически вычисленного выражения"/>
+    <Keyword name="func" desc="FUNC([$выражение],[параметр 1],[параметр 2], ...) - обработка указанной локации как функции"/>
+    <Keyword name="$func" desc="$FUNC([$выражение],[параметр 1],[параметр 2], ...) - обработка указанной локации как функции"/>
+    <Keyword name="arrsize" desc="ARRSIZE([$выражение]) - возвращает число элементов в указанном массиве"/>
+    <Keyword name="arrpos" desc="ARRPOS([#начальный индекс],[$имя массива],[значение]) - поиск в массиве элемента с заданным значением"/>
+    <Keyword name="instr" desc="INSTR([#начальная позиция],[$текст],[$искомый текст]) - поиск вхождения текста"/>
+    <Keyword name="isnum" desc="ISNUM([$выражение]) - проверяет, является ли указанная строка числом"/>
+    <Keyword name="trim" desc="TRIM([$выражение]) - удаляет из текста прилегающие пробелы и символы табуляции"/>
+    <Keyword name="$trim" desc="$TRIM([$выражение]) - удаляет из текста прилегающие пробелы и символы табуляции"/>
+    <Keyword name="ucase" desc="UCASE([$выражение]) - преобразует маленькие буквы текста в большие"/>
+    <Keyword name="$ucase" desc="$UCASE([$выражение]) - преобразует маленькие буквы текста в большие"/>
+    <Keyword name="lcase" desc="LCASE([$выражение]) - преобразует большие буквы текста в маленькие"/>
+    <Keyword name="$lcase" desc="$LCASE([$выражение]) - преобразует большие буквы текста в маленькие"/>
+    <Keyword name="len" desc="LEN([$выражение]) - возвращает длину указанной строки"/>
+    <Keyword name="mid" desc="MID([$текст],[#начало],[#длина]) - вырезает из текста строку указанной длины начиная с заданной позиции"/>
+    <Keyword name="$mid" desc="$MID([$текст],[#начало],[#длина]) - вырезает из текста строку указанной длины начиная с заданной позиции"/>
+    <Keyword name="replace" desc="REPLACE([$текст],[$искомый текст],[$текст для замены]) - заменяет в тексте заданную строку"/>
+    <Keyword name="$replace" desc="$REPLACE([$текст],[$искомый текст],[$текст для замены]) - заменяет в тексте заданную строку"/>
+    <Keyword name="str" desc="STR([#выражение]) - переводит число в строку"/>
+    <Keyword name="$str" desc="$STR([#выражение]) - переводит число в строку"/>
+    <Keyword name="val" desc="VAL([$выражение]) - переводит строку в число"/>
+    <Keyword name="arrcomp" desc="ARRCOMP([#начальный индекс],[$имя массива],[$шаблон]) - поиск в массиве элемента, соответствующего регулярному выражению"/>
+    <Keyword name="strcomp" desc="STRCOMP([$выражение],[$шаблон]) - проверяет заданный текст на соответствие регулярному выражению"/>
+    <Keyword name="strfind" desc="STRFIND([$выражение],[$шаблон],[#номер]) - возвращает подстроку, соответствующую группе с номером [#номер] регулярного выражения"/>
+    <Keyword name="$strfind" desc="$STRFIND([$выражение],[$шаблон],[#номер]) - возвращает подстроку, соответствующую группе с номером [#номер] регулярного выражения"/>
+    <Keyword name="strpos" desc="STRPOS([$выражение],[$шаблон],[#номер]) - возвращает позицию подстроки, соответствующей группе с номером [#номер] регулярного выражения"/>
+    <Keyword name="countobj" desc="COUNTOBJ - возвращает текущее число предметов"/>
+    <Keyword name="msecscount" desc="MSECSCOUNT - возвращает количество миллисекунд, прошедших с момента начала игры"/>
+    <Keyword name="rnd" desc="RND - возвращает случайное значение от 1 до 1000"/>
+    <Keyword name="curloc" desc="CURLOC - возвращает название текущей локации"/>
+    <Keyword name="$curloc" desc="$CURLOC - возвращает название текущей локации"/>
+    <Keyword name="qspver" desc="QSPVER - возвращает версию интерпретатора"/>
+    <Keyword name="$qspver" desc="$QSPVER - возвращает версию интерпретатора"/>
+    <Keyword name="selobj" desc="SELOBJ - возвращает название выделенного предмета"/>
+    <Keyword name="$selobj" desc="$SELOBJ - возвращает название выделенного предмета"/>
+    <Keyword name="selact" desc="SELACT - возвращает название выделенного действия"/>
+    <Keyword name="$selact" desc="$SELACT - возвращает название выделенного действия"/>
+    <Keyword name="curacts" desc="CURACTS - возвращает в виде кода все текущие действия"/>
+    <Keyword name="$curacts" desc="$CURACTS - возвращает в виде кода все текущие действия"/>
+    <Keyword name="user_text" desc="USER_TEXT - возвращает текст в строке ввода"/>
+    <Keyword name="$user_text" desc="$USER_TEXT - возвращает текст в строке ввода"/>
+    <Keyword name="usrtxt" desc="USRTXT - возвращает текст в строке ввода"/>
+    <Keyword name="$usrtxt" desc="$USRTXT - возвращает текст в строке ввода"/>
+    <Keyword name="maintxt" desc="MAINTXT - возвращает текст в основном окне описания"/>
+    <Keyword name="$maintxt" desc="$MAINTXT - возвращает текст в основном окне описания"/>
+    <Keyword name="stattxt" desc="STATTXT - возвращает текст в дополнительном окне описания"/>
+    <Keyword name="$stattxt" desc="$STATTXT - возвращает текст в дополнительном окне описания"/>
+  </Expressions>
+  <Variables>
+    <Keyword name="args" desc="ARGS - массив с параметрами процедуры / функции"/>
+    <Keyword name="$args" desc="$ARGS - массив с параметрами процедуры / функции"/>
+    <Keyword name="result" desc="RESULT - переменная содержит результат, возвращаемый текущей функцией"/>
+    <Keyword name="$result" desc="$RESULT - переменная содержит результат, возвращаемый текущей функцией"/>
+    <Keyword name="disablescroll" desc="DISABLESCROLL - если переменная не равна 0, то запрещает автопрокрутку текста при выводе"/>
+    <Keyword name="disablesubex" desc="DISABLESUBEX - если переменная не равна 0, то запрещает использование &quot;подвыражений&quot; в тексте"/>
+    <Keyword name="nosave" desc="NOSAVE - если переменная не равна 0, то сохранение состояния игры пользователем невозможно"/>
+    <Keyword name="debug" desc="DEBUG - если переменная не равна 0, то отключается проверка идентификатора игры при загрузке состояния"/>
+    <Keyword name="$counter" desc="$COUNTER - переменная содержит название локации-счётчика"/>
+    <Keyword name="$ongload" desc="$ONGLOAD - переменная содержит название локации-обработчика загрузки состояния"/>
+    <Keyword name="$ongsave" desc="$ONGSAVE - переменная содержит название локации-обработчика сохранения состояния"/>
+    <Keyword name="$onnewloc" desc="$ONNEWLOC - переменная содержит название локации-обработчика перехода на новую локацию"/>
+    <Keyword name="$onactsel" desc="$ONACTSEL - переменная содержит название локации-обработчика выбора действия"/>
+    <Keyword name="$onobjsel" desc="$ONOBJSEL - переменная содержит название локации-обработчика выбора предмета"/>
+    <Keyword name="$onobjadd" desc="$ONOBJADD - переменная содержит название локации-обработчика добавления предмета"/>
+    <Keyword name="$onobjdel" desc="$ONOBJDEL - переменная содержит название локации-обработчика удаления предмета"/>
+    <Keyword name="$usercom" desc="$USERCOM - переменная содержит название локации-обработчика строки ввода"/>
+    <Keyword name="usehtml" desc="USEHTML - если переменная не равна 0, то включает возможность использования HTML"/>
+    <Keyword name="bcolor" desc="BCOLOR - переменная содержит цвет фона"/>
+    <Keyword name="fcolor" desc="FCOLOR - переменная содержит основной цвет шрифта"/>
+    <Keyword name="lcolor" desc="LCOLOR - переменная содержит основной цвет ссылок"/>
+    <Keyword name="fsize" desc="FSIZE - переменная содержит основной размер шрифта"/>
+    <Keyword name="$fname" desc="$FNAME - переменная содержит название основного шрифта"/>
+    <Keyword name="$backimage" desc="$BACKIMAGE - переменная содержит путь к фоновому изображению"/>
+  </Variables>
+</QGen-keywords>

BIN
tools/QGen4/langs/en/qgen_en.mo


BIN
tools/QGen4/langs/ru/qgen_ru.mo


BIN
tools/QGen4/qgen.exe


BIN
tools/QGen5/QGen.exe


BIN
tools/QGen5/Qt5Core.dll


BIN
tools/QGen5/Qt5Gui.dll


BIN
tools/QGen5/Qt5Network.dll


BIN
tools/QGen5/Qt5Widgets.dll


BIN
tools/QGen5/Qt5Xml.dll


+ 153 - 0
tools/QGen5/keywords.xml

@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="utf-8"?>
+<QGen-keywords>
+  <Statements>
+    <Keyword name="pl" desc="PL [phrase] / * PL [expression] - displays the text in extra / description of the main window, then the transition to a new line"></Keyword>
+    <Keyword name="clear" desc="CLEAR / * CLEAR - cleaning of additional / main window description"></Keyword>
+    <Keyword name="clr" desc="CLR / * CLR - additional cleaning / main window description"></Keyword>
+    <Keyword name="p" desc="P [expression] / * P [expression] - displays the text in extra / description of the main window"></Keyword>
+    <Keyword name="nl" desc="NL [expression] / * NL [expression] - the transition to a new line, and then the text output in extra / main window description"></Keyword>
+    <Keyword name="msg" desc="MSG [expression] - display the information window"></Keyword>
+    <Keyword name="wait" desc="WAIT [#expression] - stop the program a specified number of milliseconds"></Keyword>
+    <Keyword name="act" desc="ACT [$ name], [$ path to the image]: [operator] &amp; [operator]... &amp; - adding action"></Keyword>
+    <Keyword name="delact" desc="DELACT [$ name] / DEL ACT [$ name] - removal action"></Keyword>
+    <Keyword name="cla" desc="CLA - Clearing the list of actions"></Keyword>
+    <Keyword name="cmdclear" desc="CMDCLEAR - cleaning line input"></Keyword>
+    <Keyword name="cmdclr" desc="CMDCLEAR - cleaning line input"></Keyword>
+    <Keyword name="cls" desc="CLS - clears the screen, leaving only the list of items"></Keyword>
+    <Keyword name="menu" desc="MENU [$ expression] - Display the menu with the specified name"></Keyword>
+    <Keyword name="settimer" desc="SETTIMER [#expression] - sets the timer interval to location counter"></Keyword>
+    <Keyword name="dynamic" desc="DYNAMIC [$ line of code], [parameter 1] [parameter 2],... - dynamic code execution"></Keyword>
+    <Keyword name="set" desc="SET [variable name] = [expression] - Setting Variables"></Keyword>
+    <Keyword name="let" desc="LET [variable name] = [expression] - Setting Variables"></Keyword>
+    <Keyword name="killvar" desc="KILLVAR [$ name], [Index #] - deleting all the variables / variable specified"></Keyword>
+    <Keyword name="copyarr" desc="COPYARR [$ recipient array], [$ array source] - Copy the contents of the array to another array"></Keyword>
+    <Keyword name="addobj" desc="ADDOBJ [$ name], [$ path to the image], [position #] / ADD OBJ [$ name] [$ path to the image], [position #] - Add a subject"></Keyword>
+    <Keyword name="delobj" desc="DELOBJ [$ name] / DEL OBJ [$ name] - delete the object"></Keyword>
+    <Keyword name="killobj" desc="KILLOBJ [#position] - removes all items / object in a given position"></Keyword>
+    <Keyword name="unselect" desc="UNSELECT - deselect the object"></Keyword>
+    <Keyword name="unsel" desc="UNSEL - deselect the object"></Keyword>
+    <Keyword name="killall" desc="KILLALL - removal of all variables and objects"></Keyword>
+    <Keyword name="opengame" desc="OPENGAME [$ expression] - download the game state"></Keyword>
+    <Keyword name="openqst" desc="OPENQST [$ expression] - opening the file and launching games"></Keyword>
+    <Keyword name="inclib" desc="INCLIB [$ expression] - add locations from the specified file"></Keyword>
+    <Keyword name="freelib" desc="FREELIB - Remove all added through INCLIB locations"></Keyword>
+    <Keyword name="savegame" desc="SAVEGAME [$ expression] - save the game state"></Keyword>
+    <Keyword name="refint" desc="REFINT - updated interface"></Keyword>
+    <Keyword name="showacts" desc="SHOWACTS [#expression] - Display / hide list of actions"></Keyword>
+    <Keyword name="showinput" desc="SHOWINPUT [#expression] - show / hide the input string"></Keyword>
+    <Keyword name="showobjs" desc="SHOWOBJS [#expression] - show / hide the list of items"></Keyword>
+    <Keyword name="showstat" desc="SHOWSTAT [#expression] - showing / hiding the additional description box"></Keyword>
+    <Keyword name="if" desc="IF [#expression]: [statement1] &amp; [statement2] &amp;... ELSE [statement3] &amp; [operator4] &amp;... - condition"></Keyword>
+    <Keyword name="else" desc="IF [#expression]: [statement1] &amp; [statement2] &amp;. .. ELSE [statement3] &amp; [operator4] &amp;... - condition"></Keyword>
+    <Keyword name="elseif" desc="ELSEIF [#expression]: [statement1] &amp; [statement2] &amp;... - Alternative condition"></Keyword>
+    <Keyword name="exit" desc="EXIT - completion of the current code"></Keyword>
+    <Keyword name="end" desc="END - the completion of a multi-form IF / ACT"></Keyword>
+    <Keyword name="jump" desc="JUMP [$ expression] - go to the specified label"></Keyword>
+    <Keyword name="gosub" desc="GOSUB [$ expression], [parameter 1] [parameter 2] .. . - processing specified location"></Keyword>
+    <Keyword name="gs" desc="GS [$ expression], [parameter 1] [parameter 2],... - the processing of said locations"></Keyword>
+    <Keyword name="goto" desc="GOTO [$ expression], [parameter 1] [parameter 2],... - go to the specified location"></Keyword>
+    <Keyword name="gt" desc="GT [$ expression], [parameter 1] [parameter 2],... - go to specified location"></Keyword>
+    <Keyword name="xgoto" desc="XGOTO [$ expression], [parameter 1] [parameter 2],... - go to the specified location without clearing the main window description"></Keyword>
+    <Keyword name="xgt" desc="XGT [$ expression], [parameter 1] [parameter 2],... - go to the specified location without clearing the main window description"></Keyword>
+    <Keyword name="play" desc="PLAY [$ path to sound file] [#volume] - Play the sound file with a given volume"></Keyword>
+    <Keyword name="close" desc="CLOSE [$ path to sound file] / CLOSE ALL - stop playing the audio file / all audio files"></Keyword>
+    <Keyword name="view" desc="VIEW [$ path to an image file] - Image"></Keyword>
+  </Statements>
+  <Expressions>
+    <Keyword name="and" desc="[expression #1] AND [#2 expression] - Boolean &quot;u&quot;"></Keyword>
+    <Keyword name="or" desc="[#1 expression] OR [#2 expression] - a logical &quot;or&quot;"></Keyword>
+    <Keyword name="obj" desc="OBJ [$ object] - checking subject backpack"></Keyword>
+    <Keyword name="loc" desc="LOC [$ location] - checking the existence of locations"></Keyword>
+    <Keyword name="no" desc="NO [#expression] - denial"></Keyword>
+    <Keyword name="mod" desc="[#1 expression] MOD [#2 expression] - the calculation of the balance division"></Keyword>
+    <Keyword name="desc" desc="DESC ([$ expression]) - returns the text description of the basic location"></Keyword>
+    <Keyword name="$desc" desc="$ DESC ([$ expression]) - returns the text description of the basic location"></Keyword>
+    <Keyword name="iif" desc="IIF ([#expression], [vyrazhenie_da] [vyrazhenie_net]) - returns one of the expressions on the condition"></Keyword>
+    <Keyword name="$iif" desc="$ IIF ([#expression], [vyrazhenie_da] [vyrazhenie_net]) - returns one of the expressions of the condition"></Keyword>
+    <Keyword name="input" desc="INPUT([выражение]) - показывает окно ввода текста и возвращает введенное значение"></Keyword>
+    <Keyword name="$input" desc="$INPUT([выражение]) - показывает окно ввода текста и возвращает введенное значение"></Keyword>
+    <Keyword name="isplay" desc="ISPLAY([$выражение]) - проверяет, проигрывается ли в текущий момент указанный файл"></Keyword>
+    <Keyword name="max" desc="MAX([выражение 1],[выражение 2], ...) - возвращает максимальное из значений аргументов"></Keyword>
+    <Keyword name="$max" desc="$MAX([выражение 1],[выражение 2], ...) - возвращает максимальное из значений аргументов"></Keyword>
+    <Keyword name="min" desc="MIN([выражение 1],[выражение 2], ...) - возвращает минимальное из значений аргументов"></Keyword>
+    <Keyword name="$min" desc="$MIN([выражение 1],[выражение 2], ...) - возвращает минимальное из значений аргументов"></Keyword>
+    <Keyword name="rand" desc="RAND([#выражение 1],[#выражение 2]) - возвращает случайное число между заданными"></Keyword>
+    <Keyword name="rgb" desc="RGB([#красный],[#зеленый],[#синий]) - возвращает код цвета на основе 3-х составляющих"></Keyword>
+    <Keyword name="getobj" desc="GETOBJ ([#position]) - Returns the name of the object at a predetermined position"></Keyword>
+    <Keyword name="$getobj" desc="$ GETOBJ ([#position]) - Returns the name of the object at a predetermined position"></Keyword>
+    <Keyword name="dyneval" desc="DYNEVAL ([$ expression], [parameter 1] [parameter 2],...) - returns a dynamically calculated expressions"></Keyword>
+    <Keyword name="$dyneval" desc="$ DYNEVAL ([$ expression], [parameter 1] [parameter 2]. ..) - returns a dynamically calculated expressions"></Keyword>
+    <Keyword name="func" desc="FUNC ([$ expression], [parameter 1] [parameter 2],...) - the processing of said locations as a function"></Keyword>
+    <Keyword name="$func" desc="$ FUNC ([$ expression], [parameter 1] [parameter 2]. ..) - the processing of said locations as a function"></Keyword>
+    <Keyword name="arrsize" desc="ARRSIZE ([$ expression]) - returns the number of elements in the specified array"></Keyword>
+    <Keyword name="arrpos" desc="ARRPOS([#начальный индекс],[$имя массива],[значение]) - поиск в массиве элемента с заданным значением"></Keyword>
+    <Keyword name="instr" desc="INSTR([#начальная позиция],[$текст],[$искомый текст]) - поиск вхождения текста"></Keyword>
+    <Keyword name="isnum" desc="ISNUM([$выражение]) - проверяет, является ли указанная строка числом"></Keyword>
+    <Keyword name="trim" desc="TRIM([$выражение]) - удаляет из текста прилегающие пробелы и символы табуляции"></Keyword>
+    <Keyword name="$trim" desc="$TRIM([$выражение]) - удаляет из текста прилегающие пробелы и символы табуляции"></Keyword>
+    <Keyword name="ucase" desc="UCASE([$выражение]) - преобразует маленькие буквы текста в большие"></Keyword>
+    <Keyword name="$ucase" desc="$UCASE([$выражение]) - преобразует маленькие буквы текста в большие"></Keyword>
+    <Keyword name="lcase" desc="LCASE([$выражение]) - преобразует большие буквы текста в маленькие"></Keyword>
+    <Keyword name="$lcase" desc="$LCASE([$выражение]) - преобразует большие буквы текста в маленькие"></Keyword>
+    <Keyword name="len" desc="LEN([$выражение]) - возвращает длину указанной строки"></Keyword>
+    <Keyword name="mid" desc="MID([$текст],[#начало],[#длина]) - вырезает из текста строку указанной длины начиная с заданной позиции"></Keyword>
+    <Keyword name="$mid" desc="$MID([$текст],[#начало],[#длина]) - вырезает из текста строку указанной длины начиная с заданной позиции"></Keyword>
+    <Keyword name="replace" desc="REPLACE([$текст],[$искомый текст],[$текст для замены]) - заменяет в тексте заданную строку"></Keyword>
+    <Keyword name="$replace" desc="$REPLACE([$текст],[$искомый текст],[$текст для замены]) - заменяет в тексте заданную строку"></Keyword>
+    <Keyword name="str" desc="STR([#выражение]) - переводит число в строку"></Keyword>
+    <Keyword name="$str" desc="$STR([#выражение]) - переводит число в строку"></Keyword>
+    <Keyword name="val" desc="VAL([$выражение]) - переводит строку в число"></Keyword>
+    <Keyword name="arrcomp" desc="ARRCOMP([#начальный индекс],[$имя массива],[$шаблон]) - поиск в массиве элемента, соответствующего регулярному выражению"></Keyword>
+    <Keyword name="strcomp" desc="STRCOMP([$выражение],[$шаблон]) - проверяет заданный текст на соответствие регулярному выражению"></Keyword>
+    <Keyword name="strfind" desc="STRFIND([$выражение],[$шаблон],[#номер]) - возвращает подстроку, соответствующую группе с номером [#номер] регулярного выражения"></Keyword>
+    <Keyword name="$strfind" desc="$STRFIND([$выражение],[$шаблон],[#номер]) - возвращает подстроку, соответствующую группе с номером [#номер] регулярного выражения"></Keyword>
+    <Keyword name="strpos" desc="STRPOS([$выражение],[$шаблон],[#номер]) - возвращает позицию подстроки, соответствующей группе с номером [#номер] регулярного выражения"></Keyword>
+    <Keyword name="countobj" desc="COUNTOBJ - возвращает текущее число предметов"></Keyword>
+    <Keyword name="msecscount" desc="MSECSCOUNT - возвращает количество миллисекунд, прошедших с момента начала игры"></Keyword>
+    <Keyword name="rnd" desc="RND - возвращает случайное значение от 1 до 1000"></Keyword>
+    <Keyword name="curloc" desc="CURLOC - returns the name of the current location"></Keyword>
+    <Keyword name="$curloc" desc="$ CURLOC - returns the name of the current location"></Keyword>
+    <Keyword name="qspver" desc="QSPVER - возвращает версию интерпретатора"></Keyword>
+    <Keyword name="$qspver" desc="$QSPVER - возвращает версию интерпретатора"></Keyword>
+    <Keyword name="selobj" desc="SELOBJ - returns the name of the selected object"></Keyword>
+    <Keyword name="$selobj" desc="$ SELOBJ - returns the name of the selected object"></Keyword>
+    <Keyword name="selact" desc="SELACT - возвращает название выделенного действия"></Keyword>
+    <Keyword name="$selact" desc="$SELACT - возвращает название выделенного действия"></Keyword>
+    <Keyword name="curacts" desc="CURACTS - возвращает в виде кода все текущие действия"></Keyword>
+    <Keyword name="$curacts" desc="$CURACTS - возвращает в виде кода все текущие действия"></Keyword>
+    <Keyword name="user_text" desc="USER_TEXT - возвращает текст в строке ввода"></Keyword>
+    <Keyword name="$user_text" desc="$USER_TEXT - возвращает текст в строке ввода"></Keyword>
+    <Keyword name="usrtxt" desc="USRTXT - возвращает текст в строке ввода"></Keyword>
+    <Keyword name="$usrtxt" desc="$USRTXT - возвращает текст в строке ввода"></Keyword>
+    <Keyword name="maintxt" desc="MAINTXT - возвращает текст в основном окне описания"></Keyword>
+    <Keyword name="$maintxt" desc="$MAINTXT - возвращает текст в основном окне описания"></Keyword>
+    <Keyword name="stattxt" desc="STATTXT - возвращает текст в дополнительном окне описания"></Keyword>
+    <Keyword name="$stattxt" desc="$STATTXT - возвращает текст в дополнительном окне описания"></Keyword>
+  </Expressions>
+  <Variables>
+    <Keyword name="args" desc="ARGS - массив с параметрами процедуры / функции"></Keyword>
+    <Keyword name="$args" desc="$ARGS - массив с параметрами процедуры / функции"></Keyword>
+    <Keyword name="result" desc="RESULT - переменная содержит результат, возвращаемый текущей функцией"></Keyword>
+    <Keyword name="$result" desc="$RESULT - переменная содержит результат, возвращаемый текущей функцией"></Keyword>
+    <Keyword name="disablescroll" desc="DISABLESCROLL - если переменная не равна 0, то запрещает автопрокрутку текста при выводе"></Keyword>
+    <Keyword name="disablesubex" desc="DISABLESUBEX - если переменная не равна 0, то запрещает использование &quot;подвыражений&quot; в тексте"></Keyword>
+    <Keyword name="nosave" desc="NOSAVE - если переменная не равна 0, то сохранение состояния игры пользователем невозможно"></Keyword>
+    <Keyword name="debug" desc="DEBUG - если переменная не равна 0, то отключается проверка идентификатора игры при загрузке состояния"></Keyword>
+    <Keyword name="$counter" desc="$COUNTER - переменная содержит название локации-счётчика"></Keyword>
+    <Keyword name="$ongload" desc="$ONGLOAD - переменная содержит название локации-обработчика загрузки состояния"></Keyword>
+    <Keyword name="$ongsave" desc="$ONGSAVE - переменная содержит название локации-обработчика сохранения состояния"></Keyword>
+    <Keyword name="$onnewloc" desc="$ONNEWLOC - переменная содержит название локации-обработчика перехода на новую локацию"></Keyword>
+    <Keyword name="$onactsel" desc="$ONACTSEL - переменная содержит название локации-обработчика выбора действия"></Keyword>
+    <Keyword name="$onobjsel" desc="$ONOBJSEL - переменная содержит название локации-обработчика выбора предмета"></Keyword>
+    <Keyword name="$onobjadd" desc="$ONOBJADD - переменная содержит название локации-обработчика добавления предмета"></Keyword>
+    <Keyword name="$onobjdel" desc="$ONOBJDEL - переменная содержит название локации-обработчика удаления предмета"></Keyword>
+    <Keyword name="$usercom" desc="$USERCOM - переменная содержит название локации-обработчика строки ввода"></Keyword>
+    <Keyword name="usehtml" desc="USEHTML - если переменная не равна 0, то включает возможность использования HTML"></Keyword>
+    <Keyword name="bcolor" desc="BCOLOR - переменная содержит цвет фона"></Keyword>
+    <Keyword name="fcolor" desc="FCOLOR - переменная содержит основной цвет шрифта"></Keyword>
+    <Keyword name="lcolor" desc="LCOLOR - переменная содержит основной цвет ссылок"></Keyword>
+    <Keyword name="fsize" desc="FSIZE - переменная содержит основной размер шрифта"></Keyword>
+    <Keyword name="$fname" desc="$FNAME - переменная содержит название основного шрифта"></Keyword>
+    <Keyword name="$backimage" desc="$BACKIMAGE - переменная содержит путь к фоновому изображению"></Keyword>
+  </Variables>
+</QGen-keywords>

BIN
tools/QGen5/libgcc_s_dw2-1.dll


BIN
tools/QGen5/libstdc++-6.dll


BIN
tools/QGen5/libwinpthread-1.dll


BIN
tools/QGen5/platforms/qwindows.dll


BIN
tools/QSPgui/fmodexp.dll


BIN
tools/QSPgui/langs/de/qspgui.mo


BIN
tools/QSPgui/langs/en/qspgui.mo


BIN
tools/QSPgui/langs/eo/qspgui.mo


Some files were not shown because too many files changed in this diff