rgss_db 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +5 -0
  3. data/COPYING.md +674 -0
  4. data/README.md +347 -0
  5. data/bin/rgss-db +4 -0
  6. data/bin/rgssdb +4 -0
  7. data/lib/rgss_db/app.rb +928 -0
  8. data/lib/rgss_db/controller/data_manager.rb +557 -0
  9. data/lib/rgss_db/model/data_file.rb +516 -0
  10. data/lib/rgss_db/model/data_file_factory.rb +94 -0
  11. data/lib/rgss_db/model/debug.rb +199 -0
  12. data/lib/rgss_db/model/errors.rb +17 -0
  13. data/lib/rgss_db/model/mixins/jsonable.rb +35 -0
  14. data/lib/rgss_db/model/mixins/jsonable_constructor.rb +40 -0
  15. data/lib/rgss_db/model/rpg_maker_data/vx/rgss/color.rb +72 -0
  16. data/lib/rgss_db/model/rpg_maker_data/vx/rgss/rect.rb +70 -0
  17. data/lib/rgss_db/model/rpg_maker_data/vx/rgss/table.rb +99 -0
  18. data/lib/rgss_db/model/rpg_maker_data/vx/rgss/tone.rb +72 -0
  19. data/lib/rgss_db/model/rpg_maker_data/vx/rgss.rb +11 -0
  20. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/actor.rb +44 -0
  21. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/animation.rb +31 -0
  22. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/animation_frame.rb +20 -0
  23. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/animation_timing.rb +23 -0
  24. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/area.rb +26 -0
  25. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/armor.rb +31 -0
  26. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/audio_file.rb +23 -0
  27. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/base_item.rb +25 -0
  28. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/bgm.rb +36 -0
  29. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/bgs.rb +36 -0
  30. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/class.rb +31 -0
  31. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/class_learning.rb +20 -0
  32. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/common_event.rb +25 -0
  33. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/enemy.rb +44 -0
  34. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/enemy_action.rb +29 -0
  35. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/enemy_drop_item.rb +23 -0
  36. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/event.rb +36 -0
  37. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/event_command.rb +19 -0
  38. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/event_page.rb +32 -0
  39. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/event_page_condition.rb +34 -0
  40. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/event_page_graphic.rb +25 -0
  41. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/item.rb +27 -0
  42. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/map.rb +47 -0
  43. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/map_info.rb +26 -0
  44. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/me.rb +27 -0
  45. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/move_command.rb +18 -0
  46. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/move_route.rb +20 -0
  47. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/se.rb +21 -0
  48. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/skill.rb +22 -0
  49. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/state.rb +47 -0
  50. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/system.rb +43 -0
  51. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/system_terms.rb +53 -0
  52. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/system_test_battler.rb +25 -0
  53. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/system_vehicle.rb +24 -0
  54. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/troop.rb +24 -0
  55. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/troop_member.rb +23 -0
  56. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/troop_page.rb +21 -0
  57. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/troop_page_condition.rb +33 -0
  58. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/usable_item.rb +87 -0
  59. data/lib/rgss_db/model/rpg_maker_data/vx/rpg/weapon.rb +31 -0
  60. data/lib/rgss_db/model/rpg_maker_data/vx/rpg.rb +59 -0
  61. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rgss/color.rb +72 -0
  62. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rgss/rect.rb +70 -0
  63. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rgss/table.rb +99 -0
  64. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rgss/tone.rb +72 -0
  65. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rgss.rb +11 -0
  66. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/actor.rb +27 -0
  67. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/animation.rb +31 -0
  68. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/animation_frame.rb +23 -0
  69. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/animation_timing.rb +26 -0
  70. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/armor.rb +20 -0
  71. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/audio_file.rb +23 -0
  72. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/base_item.rb +31 -0
  73. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/base_item_feature.rb +29 -0
  74. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/bgm.rb +43 -0
  75. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/bgs.rb +43 -0
  76. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/class.rb +37 -0
  77. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/class_learning.rb +24 -0
  78. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/common_event.rb +33 -0
  79. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/enemy.rb +27 -0
  80. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/enemy_action.rb +26 -0
  81. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/enemy_drop_item.rb +24 -0
  82. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/equip_item.rb +19 -0
  83. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/event.rb +36 -0
  84. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/event_command.rb +19 -0
  85. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/event_page.rb +35 -0
  86. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/event_page_condition.rb +40 -0
  87. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/event_page_graphic.rb +31 -0
  88. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/item.rb +25 -0
  89. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/map.rb +58 -0
  90. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/map_encounter.rb +23 -0
  91. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/map_info.rb +26 -0
  92. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/me.rb +27 -0
  93. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/move_command.rb +17 -0
  94. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/move_route.rb +19 -0
  95. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/se.rb +21 -0
  96. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/skill.rb +25 -0
  97. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/state.rb +34 -0
  98. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/system.rb +62 -0
  99. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/system_terms.rb +25 -0
  100. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/system_test_battler.rb +24 -0
  101. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/system_vehicle.rb +27 -0
  102. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/tileset.rb +26 -0
  103. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/troop.rb +24 -0
  104. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/troop_member.rb +25 -0
  105. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/troop_page.rb +24 -0
  106. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/troop_page_condition.rb +39 -0
  107. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/usable_item.rb +84 -0
  108. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/usable_item_damage.rb +56 -0
  109. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/usable_item_effect.rb +25 -0
  110. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg/weapon.rb +25 -0
  111. data/lib/rgss_db/model/rpg_maker_data/vx_ace/rpg.rb +66 -0
  112. data/lib/rgss_db/model/rpg_maker_data/xp/rgss/color.rb +72 -0
  113. data/lib/rgss_db/model/rpg_maker_data/xp/rgss/rect.rb +70 -0
  114. data/lib/rgss_db/model/rpg_maker_data/xp/rgss/table.rb +99 -0
  115. data/lib/rgss_db/model/rpg_maker_data/xp/rgss/tone.rb +72 -0
  116. data/lib/rgss_db/model/rpg_maker_data/xp/rgss.rb +11 -0
  117. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/actor.rb +44 -0
  118. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/animation.rb +28 -0
  119. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/animation_frame.rb +20 -0
  120. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/animation_timing.rb +24 -0
  121. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/armor.rb +37 -0
  122. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/audio_file.rb +23 -0
  123. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/class.rb +28 -0
  124. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/class_learning.rb +20 -0
  125. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/common_event.rb +25 -0
  126. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/enemy.rb +47 -0
  127. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/enemy_action.rb +28 -0
  128. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/event.rb +36 -0
  129. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/event_command.rb +19 -0
  130. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/event_page.rb +32 -0
  131. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/event_page_condition.rb +30 -0
  132. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/event_page_graphic.rb +27 -0
  133. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/item.rb +48 -0
  134. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/map.rb +39 -0
  135. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/map_info.rb +26 -0
  136. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/move_command.rb +18 -0
  137. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/move_route.rb +19 -0
  138. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/skill.rb +47 -0
  139. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/state.rb +51 -0
  140. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/system.rb +56 -0
  141. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/system_test_battler.rb +25 -0
  142. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/system_words.rb +39 -0
  143. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/tileset.rb +39 -0
  144. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/troop.rb +24 -0
  145. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/troop_member.rb +23 -0
  146. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/troop_page.rb +21 -0
  147. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/troop_page_condition.rb +32 -0
  148. data/lib/rgss_db/model/rpg_maker_data/xp/rpg/weapon.rb +38 -0
  149. data/lib/rgss_db/model/rpg_maker_data/xp/rpg.rb +52 -0
  150. data/lib/rgss_db/model/strings.rb +607 -0
  151. data/lib/rgss_db/model/utilities.rb +90 -0
  152. data/lib/rgss_db/version.rb +7 -0
  153. data/lib/rgss_db/view/app_cli.rb +449 -0
  154. data/lib/rgss_db.rb +41 -0
  155. data/sig/rgss_db.rbs +5221 -0
  156. metadata +496 -0
@@ -0,0 +1,607 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgssDb
4
+ #
5
+ # Application strings module
6
+ #
7
+ module Strings
8
+ #
9
+ # Application information CLI strings
10
+ #
11
+ module StrAppEntryPoint
12
+ # Message shown when the app call is invalid
13
+ # @return [String]
14
+ CLI_INVALID_CALL_MSG = <<~INVALID_CALL
15
+ Please provide a RPG Maker database directory!
16
+ Use 'rgss-db --help' to get more information
17
+ INVALID_CALL
18
+
19
+ # App version message
20
+ #
21
+ # String contains a "%s" flag to insert the app version
22
+ # @return [String]
23
+ CLI_VERSION = "rgss-db version %s installed"
24
+
25
+ # App banner contents
26
+ # @return [String]
27
+ CLI_BANNER = <<~BANNER
28
+ SYNOPSIS
29
+ rgss-db is a tool for developers to export and/or import the database files of a game made in RPG Maker
30
+
31
+ This tool works on any RPG Maker editor based on RGSS:
32
+ - RPG Maker XP
33
+ - RPG Maker VX
34
+ - RPG Maker VX Ace
35
+
36
+ USAGE
37
+ rgss-db data_directory [options]
38
+
39
+ DESCRIPTION
40
+ You can simply use this tool by calling the rgss-db command and supplying a RPG Maker data path:
41
+ # Opens the current directory
42
+ rgss-db .
43
+
44
+ The path needs to be the data folder where all binary database files are stored, otherwise the app won't work
45
+
46
+ This will open the application's menu where you can manually perform the desired action.
47
+
48
+ The application has a number of options that allow you to customize the behavior and output, for example:
49
+ # You can set the application's debug mode with the following option
50
+ # A log file will be created inside the application's working directory
51
+ rgss-db . --debug 0 # Disables debug functionality (default)
52
+ rgss-db . --debug 1 # Enables debug error level
53
+ rgss-db . --debug 2 # Enables debug warning level
54
+ rgss-db . --debug 3 # Enables debug info level
55
+
56
+ # You can disable the automatic backup creation with the flag
57
+ rgss-db . --no-backup
58
+
59
+ # Sets the application's working directory (used for exporting and importing)
60
+ rgss-db . -d "./custom_path/from/the data folder"
61
+
62
+ # Sets the application's file format (used for exporting and importing)
63
+ rgss-db . -t json
64
+ rgss-db . -t yaml
65
+ rgss-db . -t binary # Auto. selects the appropiate binary format
66
+
67
+ # Sets a list of data files that will be affected by the action
68
+ # If not provided, it will consider all data files
69
+ rgss-db . -f Items.rvdata2 Weapons.rvdata2 Map001.rvdata2 # Selects "Items", "Weapons" and "Map001" files
70
+
71
+ # Sets a list of objects that will be affected by an action (per data file)
72
+ # This option only works for data files that supports this behavior (Actors, Items, States...)
73
+ # The ids that you can provide match the IDs in the database.
74
+ # If not provided it will consider all objects
75
+ rgss-db . -f Items.rvdata2 -i 10 122 # This will consider the items with ID: 10 and 122
76
+
77
+ # You can also set the list for each data file (if there is more than one)
78
+ # The object IDs list parameter can be repeated for each data file specified
79
+ rgss-db . -f Actors.rvdata2 Items.rvdata2 -i 10 -i 200 300 # 10 for Actors, 200 and 300 for Items
80
+
81
+
82
+ You can skip the application's CLI menu completely if you supply a supported action.
83
+
84
+ The application will start and perform the action, using the given files and object IDs (if any) and close itself when the action finishes
85
+
86
+ These are the possible actions:
87
+ - export: Exports RPG Maker database
88
+ - export_custom: Exports specific objects from the RPG Maker database
89
+ - import: Imports external data into the RPG Maker database
90
+ - import_custom: Imports custom external data into the RPG Maker database (merge)
91
+
92
+ Here's a few examples with the action option using the default application directory:
93
+ # Opens the current directory and export all data
94
+ rgss-db . -a export
95
+
96
+ # Opens the current directory and import all data
97
+ rgss-db . -a import
98
+
99
+ # Opens the current directory and export only the Items file
100
+ rgss-db . -a export -f Items.rvdata2
101
+
102
+ # Opens the current directory and export only the object with ID: 100 from the Items file
103
+ rgss-db . -a export_custom -f Items.rvdata2 -i 100
104
+
105
+ # Opens the current directory and export only the object with ID: 100 from the Items file to a JSON file
106
+ rgss-db . -a export_custom -f Items.rvdata2 -i 100 -t json
107
+
108
+ OPTIONS
109
+ BANNER
110
+
111
+ # App option back up mode info
112
+ # @return [String]
113
+ CLI_OPTION_BACK_UP = "Sets the back up mode"
114
+
115
+ # App option debug mode info
116
+ # @return [String]
117
+ CLI_OPTION_DEBUG_MODE = "Sets the debug mode"
118
+
119
+ # App option working directory info
120
+ # @return [String]
121
+ CLI_OPTION_WORKING_DIR = "Sets the working directory"
122
+
123
+ # App option action info
124
+ # @return [String]
125
+ CLI_OPTION_ACTION = "Sets the action to perform"
126
+
127
+ # App option file format type info
128
+ # @return [String]
129
+ CLI_OPTION_FORMAT_TYPE = "Specifies the file format type to use"
130
+
131
+ # App option file entries info
132
+ # @return [String]
133
+ CLI_OPTION_FILE_ENTRIES = "Sets a list of files affected by the action"
134
+
135
+ # App option object IDs info
136
+ # @return [String]
137
+ CLI_OPTION_IDS = "Sets a list of object IDs that will be affected per file"
138
+ end
139
+
140
+ #
141
+ # Application information strings
142
+ #
143
+ module StrAppInfo
144
+ # Invalid RPG Maker version label
145
+ # @return [String]
146
+ VERSION_INVALID_LABEL = "Unknown"
147
+
148
+ # Text as a warning when a RPG Maker version is not detected
149
+ # @return [String]
150
+ VERSION_INVALID_TEXT = <<~EOF
151
+ It was not possible to detect a valid RPG Maker version in the given directory!
152
+
153
+ The detected version of RPG Maker determines which type of database is imported
154
+
155
+ If the version is unknown, it means that the RPG Maker version could not be resolved, either because
156
+ there are no database files in the given path or because there are files from two versions of the engine
157
+ (such as Items.rvdata2 and Items.rxdata), therefore the correct RPG Maker version cannot be determined
158
+
159
+ This is because the app cannot work with different versions of RPG Maker data files at the same time
160
+
161
+ Some database classes have the same name but different definitions, which could result in data corruption
162
+
163
+ You should exit and fix the problems before interacting further with the database
164
+ EOF
165
+
166
+ # Application information data folder text
167
+ #
168
+ # String contains a "%s" flag to insert the data folder
169
+ # @return [String]
170
+ DATA_FOLDER = "RPG Maker Data Folder: %s"
171
+
172
+ # Application information RPG Maker version text
173
+ # @return [String]
174
+ #
175
+ # String contains a "%s" flag to insert the version
176
+ # @return [String]
177
+ RPG_VERSION = "RPG Maker Version: %s"
178
+ end
179
+
180
+ #
181
+ # Strings used in user prompts
182
+ #
183
+ module StrPrompts
184
+ # Text shown when a prompt operation finishes successfully
185
+ # @return [String]
186
+ SUCCESS_TEXT = "Operation finished!"
187
+
188
+ # Text shown when a prompt is stopped or cancelled
189
+ # @return [String]
190
+ CANCEL_TEXT = "Cancelling operation..."
191
+
192
+ # Text shown on the spinner prompt when the task is completed
193
+ # @return [String]
194
+ SPINNER_TASK_COMPLETED_TEXT = "Done!"
195
+
196
+ # Text shown on the pause prompt when requesting the user to press any key
197
+ # @return [String]
198
+ PAUSE_ANY_KEYS = "Press any key to continue..."
199
+
200
+ # Text shown on the pause prompt when requesting the user to press any key with a timeout
201
+ # @return [String]
202
+ PAUSE_ANY_KEYS_TIMEOUT = "Press any key to continue... (resumes automatically in :countdown seconds)"
203
+
204
+ # Text shown on the pause prompt when requesting the user to press specific keys
205
+ #
206
+ # String contains a "%s" flag to insert the list of keys
207
+ # @return [String]
208
+ PAUSE_KEYS = "Press %s to continue..."
209
+
210
+ # Text shown on the pause prompt when requesting the user to press specific keys with a timeout
211
+ #
212
+ # String contains a "%s" flag to insert the list of keys
213
+ # @return [String]
214
+ PAUSE_KEYS_TIMEOUT = "Press %s to continue... (resumes automatically in :countdown seconds)"
215
+
216
+ # Text shown on the confirmation prompt
217
+ # @return [String]
218
+ CONFIRM_INPUT_TEXT = "Are you sure you want to continue?"
219
+
220
+ # Text shown on the select and multi select prompts
221
+ # @return [String]
222
+ SELECT_INPUT_TEXT = "What would you like to do?"
223
+
224
+ # Text that could be used as a tip message for ask prompts
225
+ # @return [String]
226
+ ASK_TIP_TEXT = <<~EOF
227
+ Press ENTER to submit the current input
228
+
229
+ The option may have a default value between parentheses that will be used
230
+ if the input is left empty.
231
+ EOF
232
+
233
+ # Text that could be used as a fail message when an ask prompt fails validation
234
+ # @return [String]
235
+ ASK_VALIDATION_FAIL_TEXT = "The input is invalid!"
236
+
237
+ # Text that could be used as a tip message for select prompts
238
+ # @return [String]
239
+ SELECT_TIP_TEXT = <<~EOF
240
+ Press ↑/↓ arrows to move the cursor
241
+ Use SPACE or ENTER to select the current item
242
+ EOF
243
+
244
+ # Text that could be used as a tip message for multi select prompts
245
+ # @return [String]
246
+ MULTI_SELECT_TIP_TEXT = <<~EOF
247
+ Press ↑/↓ arrows to move the cursor
248
+ Use SPACE to select the current item
249
+ Press CTRL + A and to select all items available
250
+ You can also use CTRL + R to revert the current selection
251
+ Press ENTER to finish selection
252
+ EOF
253
+ end
254
+
255
+ #
256
+ # Menu strings
257
+ #
258
+ # This module contains menu options shown on the screen
259
+ #
260
+ module StrMenu
261
+ # App menu option that represents the main menu
262
+ # @return [String]
263
+ APP_MENU_MAIN_MENU = "Main Menu"
264
+
265
+ # App menu option to go to the actions menu
266
+ # @return [String]
267
+ APP_MENU_ACTIONS = "Perform Actions"
268
+
269
+ # App menu option for export command
270
+ # @return [String]
271
+ APP_MENU_ACTIONS_EXPORT = "Export RPG Maker Data Files"
272
+
273
+ # App menu option for export custom command
274
+ # @return [String]
275
+ APP_MENU_ACTIONS_EXPORT_CUSTOM = "Export RPG Maker Data Files (Custom)"
276
+
277
+ # App menu option for import command
278
+ # @return [String]
279
+ APP_MENU_ACTIONS_IMPORT = "Import External Data Into RPG Maker"
280
+
281
+ # App menu option for import custom command
282
+ # @return [String]
283
+ APP_MENU_ACTIONS_IMPORT_CUSTOM = "Import External Data Into RPG Maker (Custom)"
284
+
285
+ # App menu option to go to app options menu
286
+ # @return [String]
287
+ APP_MENU_OPTIONS = "Check and Modify Options"
288
+
289
+ # App menu option to set the output file format type
290
+ # @return [String]
291
+ APP_MENU_OPTIONS_SET_FORMAT_TYPE = "Set Type of File Format"
292
+
293
+ # App menu option to set the working directory
294
+ # @return [String]
295
+ APP_MENU_OPTIONS_SET_WORKING_DIR = "Set Working Directory"
296
+
297
+ # App menu option to select a list of file entries
298
+ # @return [String]
299
+ APP_MENU_OPTIONS_SET_ENTRIES = "Set File Entries List"
300
+
301
+ # App menu option to select a list of object IDs
302
+ # @return [String]
303
+ APP_MENU_OPTIONS_SET_IDS = "Set Object IDs List"
304
+
305
+ # App menu option to show the values of the current options (pretty format)
306
+ # @return [String]
307
+ APP_MENU_OPTIONS_SHOW_OPTIONS_PRETTY = "Show Options (Pretty)"
308
+
309
+ # App menu option to show the values of the current options (raw format)
310
+ # @return [String]
311
+ APP_MENU_OPTIONS_SHOW_OPTIONS_RAW = "Show Options (Raw)"
312
+
313
+ # App menu option for exiting command
314
+ # @return [String]
315
+ APP_MENU_EXIT = "Exit"
316
+ end
317
+
318
+ #
319
+ # Menu contents strings
320
+ #
321
+ # This module contains the contents for each menu
322
+ #
323
+ module StrMenuContents
324
+ # Main menu information contents
325
+ # @return [String]
326
+ APP_MENU_MAIN_MENU_TEXT_INFO = <<~EOF
327
+ This is the main menu of RGSS Database
328
+
329
+ You can use the first option to perform any action on the current RPG Maker database
330
+
331
+ You are also able to see and tweak the application's settings
332
+ EOF
333
+
334
+ # Actions menu information contents
335
+ # @return [String]
336
+ APP_MENU_ACTIONS_TEXT_INFO = <<~EOF
337
+ In this menu you can perform export and import operations on the current RPG Maker database
338
+
339
+ You can do the following operations:
340
+ - Export: Exports all RPG Maker database data into external files
341
+ - Export (Custom): Exports specific objects from the RPG Maker database
342
+ - Import: Imports all external data into the RPG Maker database
343
+ - Import (Custom): Imports specific objects ino the RPG Maker database
344
+ EOF
345
+
346
+ # Options menu information contents
347
+ # @return [String]
348
+ APP_MENU_OPTIONS_TEXT_INFO = <<~EOF
349
+ In this menu you can change the application's option values
350
+
351
+ You are also able to show the current value of each option in a table
352
+ EOF
353
+ end
354
+
355
+ #
356
+ # Submenu strings
357
+ #
358
+ # This module contains strings used in submenus
359
+ #
360
+ module StrSubMenu
361
+ # Text shown on the exit submenu
362
+ # @return [String]
363
+ EXIT_TEXT = "Exiting..."
364
+
365
+ # Text shown on the export submenu as an information message
366
+ # @return [String]
367
+ EXPORT_TEXT = <<~EOF
368
+ Choose the data files you want to export from the list of files below
369
+
370
+ All data files selected will be exported to the choosen file format
371
+
372
+ If you want to cancel this action do not select any data file
373
+ EOF
374
+
375
+ # Text shown on the export submenu when loading data files
376
+ # @return [String]
377
+ EXPORT_LOAD_FILES_TEXT = "Loading RPG Maker database files..."
378
+
379
+ # Text shown as an error when the application failed to detect RPG Maker database files
380
+ # @return [String]
381
+ EXPORT_LOAD_ERROR_TEXT = "No valid RPG Maker database files detected inside the data folder!"
382
+
383
+ # Text shown when the user does not select any data files from the export files list
384
+ # @return [String]
385
+ EXPORT_NO_FILES_ERROR_TEXT = "No data files were selected from the list!"
386
+
387
+ # Text shown on the export custom submenu as an information message
388
+ # @return [String]
389
+ EXPORT_CUSTOM_TEXT = <<~EOF
390
+ Choose the data files you want to export from the list of files below
391
+
392
+ You can only select data files that allows object selection.
393
+ If you wish to export a data file that does not appear here
394
+ try the other export action.
395
+
396
+ Keep in mind that if you do not select any object from the list or skip the
397
+ selection process all objects will be considered for the export operation
398
+
399
+ If you want to cancel this action do not select any data file
400
+ EOF
401
+
402
+ # Text shown when asking the user whether they want to select specific objects from a data file or not
403
+ #
404
+ # String contains a "%s" flag to insert the data file name
405
+ # @return [String]
406
+ EXPORT_CUSTOM_SELECT_OBJ_ID_TEXT = "Do you wish to select specific objects from '%s'?"
407
+
408
+ # Text shown when the application is exporting a data file
409
+ #
410
+ # String contains a "%s" flag to insert the data file name
411
+ # @return [String]
412
+ EXPORT_ACTION_TEXT = "Exporting data file '%s'..."
413
+
414
+ # Text shown when the application is exporting a custom data file
415
+ #
416
+ # String contains a "%s" flag to insert the data file name
417
+ # @return [String]
418
+ EXPORT_CUSTOM_ACTION_TEXT = "Exporting custom data file '%s'..."
419
+
420
+ # Text shown on the import submenu as an information message
421
+ # @return [String]
422
+ IMPORT_TEXT = <<~EOF
423
+ Choose the data files you want to import from the list of files below
424
+ When importing data, all objects are auto. considered for the operation
425
+
426
+ A backup of the original database file will be created for each data file
427
+ You can disable this behavior by disabling backups when running the application
428
+
429
+ If you want to cancel this action do not select any data file
430
+ EOF
431
+
432
+ # Text shown on the import submenu when loading data files
433
+ # @return [String]
434
+ IMPORT_LOAD_FILES_TEXT = "Loading extracted data files..."
435
+
436
+ # Text shown as an error when the application failed to detect external data files
437
+ # @return [String]
438
+ IMPORT_LOAD_ERROR_TEXT = "No valid extracted data file detected on the application's folder!"
439
+
440
+ # Text shown when the user does not select any data files from the import files list
441
+ # @return [String]
442
+ IMPORT_NO_FILES_ERROR_TEXT = "No data files were selected from the list!"
443
+
444
+ # Text shown on the import custom submenu as an information message
445
+ # @return [String]
446
+ IMPORT_CUSTOM_TEXT = <<~EOF
447
+ Choose which custom data files you want to import from the list of files below
448
+
449
+ The data files selected will be merged into their appropiate RPG Maker database file
450
+
451
+ New objects will be appended at the end of the list of objects to avoid problems
452
+
453
+ You should make sure that any reference to other database files that the new object
454
+ imported has, exists within the RPG Maker database.
455
+
456
+ A backup of the original database file will be created for each data file
457
+ You can disable this behavior by disabling backups when running the application
458
+
459
+ If you want to cancel this action do not select any data file
460
+ EOF
461
+
462
+ # Text shown on the import custom submenu when loading data files
463
+ # @return [String]
464
+ IMPORT_CUSTOM_LOAD_FILES_TEXT = "Loading custom extracted data files..."
465
+
466
+ # Text shown when the application is importing a data file
467
+ #
468
+ # String contains a "%s" flag to insert the data file name
469
+ # @return [String]
470
+ IMPORT_ACTION_TEXT = "Importing data file '%s'..."
471
+
472
+ # Text shown when the application is importing a custom data file
473
+ #
474
+ # String contains a "%s" flag to insert the data file name
475
+ # @return [String]
476
+ IMPORT_CUSTOM_ACTION_TEXT = "Importing custom data file '%s'..."
477
+
478
+ # Text shown on the set format type submenu as an information message
479
+ # @return [String]
480
+ SET_FORMAT_TYPE_TEXT = <<~EOF
481
+ You can set the type of file format the application will use below
482
+
483
+ The choosen file format will be used when exporting data files
484
+
485
+ If using binary, RPG Maker files will automatically use the appropiate binary file type
486
+ EOF
487
+
488
+ # Text shown on the set format type submenu when updating the file format type
489
+ #
490
+ # String contains a "%s" flag to insert the type of file format
491
+ # @return [String]
492
+ SET_FORMAT_TYPE_UPDATE_TEXT = "Type of file format updated to: '%s'"
493
+
494
+ # Text shown on the set app working directory submenu as an information message
495
+ # @return [String]
496
+ SET_WORKING_DIR_TEXT = <<~EOF
497
+ You can set the application's working directory to the desired one below
498
+
499
+ The path can be either an absolute or relative path to the RPG Maker data folder
500
+
501
+ Keep in mind that the app will overwrite any files inside of the working directory!
502
+ EOF
503
+
504
+ # Text shown when asking the user to set the app working directory
505
+ # @return [String]
506
+ SET_WORKING_DIR_ASK_TEXT = "Type the working directory"
507
+
508
+ # Text shown when the working directory validation fails
509
+ SET_WORKING_DIR_ASK_FAIL_TEXT = "The path contains invalid characters!"
510
+
511
+ # Text shown on the set working directory submenu when updating the working directory
512
+ #
513
+ # String contains a "%s" flag to insert the new working directory
514
+ #
515
+ # String contains a "%s" flag to insert the application working directory
516
+ # @return [String]
517
+ SET_WORKING_DIR_UPDATE_TEXT = "Application working directory updated to: '%s'"
518
+
519
+ # Tip text shown on the set file entries submenu as an information message
520
+ # @return [String]
521
+ SET_ENTRIES_TEXT = <<~EOF
522
+ You can set a list of file entries that will be pre-selected when performing an action
523
+
524
+ Keep in mind that if a file entry is deleted it will be removed from the object ID list too!
525
+
526
+ You must type all entries separated by commas!
527
+ EOF
528
+
529
+ # Text shown when asking the user to set the list of file entries
530
+ # @return [String]
531
+ SET_ENTRIES_ASK_TEXT = "Type the list of file entries"
532
+
533
+ # Text shown when asking the user to set the list of file entries
534
+ #
535
+ # String contains a "%s" flag to insert the file entries
536
+ # @return [String]
537
+ SET_ENTRIES_UPDATE_TEXT = "File entries updated to: '%s'"
538
+
539
+ # Tip text shown on the set object IDs submenu as an information message
540
+ # @return [String]
541
+ SET_IDS_TEXT = <<~EOF
542
+ You can set a list of IDs that will be selected for each file entry
543
+
544
+ You must type all ID values separated by commas!
545
+ EOF
546
+
547
+ # Text shown when the user does not have any file entry to select object IDs from
548
+ # @return [String]
549
+ SET_IDS_NO_FILES_ERROR_TEXT = "No file entries available to select from!"
550
+
551
+ # Text shown when the user does not select any file entries from the files list
552
+ # @return [String]
553
+ SET_IDS_NO_FILES_SELECTED_ERROR_TEXT = "No file entries were selected from the list!"
554
+
555
+ # Text shown when asking the user for the list of object IDs to select for a file entry
556
+ #
557
+ # String contains a "%s" flag to insert the file entry
558
+ # @return [String]
559
+ SET_IDS_ASK_IDS_TEXT = "Type the list of object IDs for '%s':"
560
+
561
+ # Text shown when updating the list of object IDs for a file entry
562
+ #
563
+ # String contains a "%s" flag to insert the hash of file entries and object IDs
564
+ # @return [String]
565
+ SET_IDS_UPDATE_TEXT = "List of object IDs updated to: '%s'"
566
+
567
+ # Text shown on the show options submenu in the raw mode
568
+ # @return [String]
569
+ SHOW_OPTIONS_RAW_TEXT = <<~EOF
570
+ All options will be shown below, note that not all options are relevant to the user
571
+ EOF
572
+
573
+ # Text shown on the show options submenu in the pretty mode
574
+ # @return [String]
575
+ SHOW_OPTIONS_PRETTY_TEXT = <<~EOF
576
+ All options will be shown below, note that not all options are relevant to the user
577
+
578
+ In case the table is unreadable, use the raw mode
579
+ EOF
580
+
581
+ # Column 1 text shown on the show options submenu
582
+ # @return [String]
583
+ SHOW_OPTIONS_COLUMN_1 = "Option ID"
584
+
585
+ # Column 2 text shown on the show options submenu
586
+ # @return [String]
587
+ SHOW_OPTIONS_COLUMN_2 = "Option Value"
588
+ end
589
+
590
+ #
591
+ # Other strings module
592
+ #
593
+ module StrOthers
594
+ # Information frame box label
595
+ # @return [String]
596
+ INFO_FRAME_LABEL = "ℹ️ Information"
597
+
598
+ # Warning frame box label
599
+ # @return [String]
600
+ WARN_FRAME_LABEL = "⚠️ Warning"
601
+
602
+ # Error frame box label
603
+ # @return [String]
604
+ ERRO_FRAME_LABEL = "🅾️ Error"
605
+ end
606
+ end
607
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgssDb
4
+ #
5
+ # Utilities module
6
+ #
7
+ module Utilities
8
+ # Regular expression of invalid characters or sequence of characters
9
+ # @return [Regexp]
10
+ INVALID_CHARACTERS = /[:*?"<>|]|(\bCON\b|\bPRN\b|\bAUX\b|\bNUL\b|\bCOM[1-9]\b|\bLPT[1-9]\b)/i
11
+
12
+ #
13
+ # Gets the list of the default (pre-selected) indexes for a TTY selection menu
14
+ #
15
+ # If a block is given, it will be used to evaluate the index selection
16
+ #
17
+ # The block receives the following parameters ``[Object, Integer, Object]``:
18
+ # - The first one is the current menu option being evaluated
19
+ # - The second one is the index of the menu option being evaluated
20
+ # - The third argument iterates through each user option
21
+ #
22
+ # If the block ever returns ``true`` for the current menu option, its index will be saved
23
+ #
24
+ # If no block is given, it will use ``Array#include?`` to check if either the menu option or the menu index exists
25
+ # in the options user list
26
+ #
27
+ # The following flags can be used to alter the behavior:
28
+ # - all_if_empty: Select all options if the user's options list is empty
29
+ #
30
+ # @param options_menu [Array] Menu options list
31
+ # @param options_user [Array] List of user selected options
32
+ # @param all_if_empty [Boolean] Whether to select all options if the user array is empty
33
+ # @param block [Proc] Evaluation callback
34
+ #
35
+ # @return [Array<Integer>]
36
+ #
37
+ # @yieldparam [Object]
38
+ # @yieldparam [Integer]
39
+ # @yieldparam [Object]
40
+ #
41
+ def self.menu_default_indexes(options_menu, options_user, all_if_empty: false, &block)
42
+ # Checks if user's options list is empty (and populate it with all indexes if allowed)
43
+ return (1..options_menu.size).to_a if options_user.empty? && all_if_empty
44
+ return [] if options_user.empty?
45
+
46
+ # Process the menu options list normally
47
+ options_indexes = []
48
+ if block_given?
49
+ options_menu.each_with_index do |menu_option, index|
50
+ menu_index = index + 1
51
+ options_indexes << menu_index if options_user.any? { |opt_user| yield menu_option, menu_index, opt_user }
52
+ end
53
+ else
54
+ options_menu.each_with_index do |menu_option, index|
55
+ menu_index = index + 1
56
+ options_indexes << menu_index if options_user.include?(menu_option) || options_user.include?(menu_index)
57
+ end
58
+ end
59
+ options_indexes
60
+ end
61
+
62
+ #
63
+ # Validates the path
64
+ #
65
+ # Returns a ``MatchData`` if the path is invalid, otherwise ``nil``
66
+ #
67
+ # The ``MatchData`` object contains the invalid characters
68
+ #
69
+ # @param path [String] Path
70
+ #
71
+ # @return [MatchData]
72
+ #
73
+ def self.validate_path(path)
74
+ path.to_s.match(INVALID_CHARACTERS)
75
+ end
76
+
77
+ #
78
+ # Checks whether the path is valid or not
79
+ #
80
+ # Returns ``true`` if the path is valid, otherwise ``false``
81
+ #
82
+ # @param path [String] Path
83
+ #
84
+ # @return [Boolean]
85
+ #
86
+ def self.valid_path?(path)
87
+ validate_path(path).nil?
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RgssDb
4
+ # App version as a string
5
+ # @return [String]
6
+ VERSION = "1.0.0"
7
+ end