tormenta20 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +27 -0
  3. data/README.md +203 -12
  4. data/Rakefile +9 -0
  5. data/db/schema.sql +382 -0
  6. data/db/seeds.rb +377 -0
  7. data/db/tormenta20.sqlite3 +0 -0
  8. data/docs/armaduras.md +72 -0
  9. data/docs/armas.md +95 -0
  10. data/docs/classes.md +105 -0
  11. data/docs/divindades.md +77 -0
  12. data/docs/escudos.md +49 -0
  13. data/docs/itens.md +59 -0
  14. data/docs/magias.md +157 -0
  15. data/docs/materiais_especiais.md +50 -0
  16. data/docs/melhorias.md +55 -0
  17. data/docs/origens.md +61 -0
  18. data/docs/poderes.md +98 -0
  19. data/docs/regras.md +51 -0
  20. data/examples/database_usage.rb +155 -0
  21. data/src/json/classes/arcanista.json +86 -0
  22. data/src/json/classes/barbaro.json +85 -0
  23. data/src/json/classes/bardo.json +91 -0
  24. data/src/json/classes/bucaneiro.json +96 -0
  25. data/src/json/classes/cacador.json +96 -0
  26. data/src/json/classes/cavaleiro.json +87 -0
  27. data/src/json/classes/clerigo.json +82 -0
  28. data/src/json/classes/druida.json +88 -0
  29. data/src/json/classes/guerreiro.json +90 -0
  30. data/src/json/classes/inventor.json +100 -0
  31. data/src/json/classes/ladino.json +96 -0
  32. data/src/json/classes/lutador.json +90 -0
  33. data/src/json/classes/nobre.json +100 -0
  34. data/src/json/classes/paladino.json +93 -0
  35. data/src/json/deuses/aharadak.json +26 -0
  36. data/src/json/deuses/allihanna.json +26 -0
  37. data/src/json/deuses/arsenal.json +28 -0
  38. data/src/json/deuses/azgher.json +28 -0
  39. data/src/json/deuses/hyninn.json +28 -0
  40. data/src/json/deuses/kallyadranoch.json +28 -0
  41. data/src/json/deuses/khalmyr.json +27 -0
  42. data/src/json/deuses/lena.json +28 -0
  43. data/src/json/deuses/lin_wu.json +28 -0
  44. data/src/json/deuses/marah.json +28 -0
  45. data/src/json/deuses/megalokk.json +28 -0
  46. data/src/json/deuses/nimb.json +27 -0
  47. data/src/json/deuses/oceano.json +26 -0
  48. data/src/json/deuses/sszzaas.json +28 -0
  49. data/src/json/deuses/tanna_toh.json +28 -0
  50. data/src/json/deuses/tenebra.json +26 -0
  51. data/src/json/deuses/thwor.json +27 -0
  52. data/src/json/deuses/thyatis.json +26 -0
  53. data/src/json/deuses/valkaria.json +30 -0
  54. data/src/json/deuses/wynna.json +25 -0
  55. data/src/json/equipamentos/armaduras/leves/armadura_acolchoada.json +15 -0
  56. data/src/json/equipamentos/armaduras/leves/armadura_de_couro.json +13 -0
  57. data/src/json/equipamentos/armaduras/leves/couraca.json +13 -0
  58. data/src/json/equipamentos/armaduras/leves/couro_batido.json +13 -0
  59. data/src/json/equipamentos/armaduras/leves/gibao_de_peles.json +13 -0
  60. data/src/json/equipamentos/armaduras/pesadas/armadura_completa.json +19 -0
  61. data/src/json/equipamentos/armaduras/pesadas/brunea.json +17 -0
  62. data/src/json/equipamentos/armaduras/pesadas/cota_de_malha.json +17 -0
  63. data/src/json/equipamentos/armaduras/pesadas/loriga_segmentada.json +17 -0
  64. data/src/json/equipamentos/armaduras/pesadas/meia_armadura.json +17 -0
  65. data/src/json/equipamentos/armas/exoticas/chicote.json +23 -0
  66. data/src/json/equipamentos/armas/exoticas/corrente_de_espinhos.json +23 -0
  67. data/src/json/equipamentos/armas/exoticas/espada_bastarda.json +19 -0
  68. data/src/json/equipamentos/armas/exoticas/katana.json +19 -0
  69. data/src/json/equipamentos/armas/exoticas/machado_anao.json +19 -0
  70. data/src/json/equipamentos/armas/exoticas/machado_taurico.json +17 -0
  71. data/src/json/equipamentos/armas/exoticas/rede.json +41 -0
  72. data/src/json/equipamentos/armas/fogo/mosquete.json +21 -0
  73. data/src/json/equipamentos/armas/fogo/pistola.json +21 -0
  74. data/src/json/equipamentos/armas/marciais/alabarda.json +17 -0
  75. data/src/json/equipamentos/armas/marciais/alfange.json +17 -0
  76. data/src/json/equipamentos/armas/marciais/arco_longo.json +22 -0
  77. data/src/json/equipamentos/armas/marciais/besta_pesada.json +21 -0
  78. data/src/json/equipamentos/armas/marciais/cimitarra.json +17 -0
  79. data/src/json/equipamentos/armas/marciais/espada_longa.json +17 -0
  80. data/src/json/equipamentos/armas/marciais/florete.json +17 -0
  81. data/src/json/equipamentos/armas/marciais/gadanho.json +17 -0
  82. data/src/json/equipamentos/armas/marciais/lanca_montada.json +20 -0
  83. data/src/json/equipamentos/armas/marciais/machadinha.json +19 -0
  84. data/src/json/equipamentos/armas/marciais/machado_de_batalha.json +17 -0
  85. data/src/json/equipamentos/armas/marciais/machado_de_guerra.json +17 -0
  86. data/src/json/equipamentos/armas/marciais/mangual.json +21 -0
  87. data/src/json/equipamentos/armas/marciais/marreta.json +17 -0
  88. data/src/json/equipamentos/armas/marciais/martelo_de_guerra.json +17 -0
  89. data/src/json/equipamentos/armas/marciais/montante.json +17 -0
  90. data/src/json/equipamentos/armas/marciais/picareta.json +17 -0
  91. data/src/json/equipamentos/armas/marciais/tridente.json +22 -0
  92. data/src/json/equipamentos/armas/simples/adaga.json +21 -0
  93. data/src/json/equipamentos/armas/simples/arco_curto.json +21 -0
  94. data/src/json/equipamentos/armas/simples/azagaia.json +20 -0
  95. data/src/json/equipamentos/armas/simples/besta_leve.json +21 -0
  96. data/src/json/equipamentos/armas/simples/bordao.json +17 -0
  97. data/src/json/equipamentos/armas/simples/clava.json +17 -0
  98. data/src/json/equipamentos/armas/simples/espada_curta.json +17 -0
  99. data/src/json/equipamentos/armas/simples/foice.json +17 -0
  100. data/src/json/equipamentos/armas/simples/funda.json +23 -0
  101. data/src/json/equipamentos/armas/simples/lanca.json +19 -0
  102. data/src/json/equipamentos/armas/simples/maca.json +17 -0
  103. data/src/json/equipamentos/armas/simples/pique.json +17 -0
  104. data/src/json/equipamentos/armas/simples/tacape.json +17 -0
  105. data/src/json/equipamentos/escudos/escudo_leve.json +22 -0
  106. data/src/json/equipamentos/escudos/escudo_pesado.json +22 -0
  107. data/src/json/equipamentos/itens/alimentacao/batata_valkariana.json +14 -0
  108. data/src/json/equipamentos/itens/alimentacao/gorad_quente.json +12 -0
  109. data/src/json/equipamentos/itens/alimentacao/macarrao_de_yuvalin.json +12 -0
  110. data/src/json/equipamentos/itens/alimentacao/prato_do_aventureiro.json +13 -0
  111. data/src/json/equipamentos/itens/alimentacao/racao_de_viagem.json +14 -0
  112. data/src/json/equipamentos/itens/alimentacao/refeicao_comum.json +9 -0
  113. data/src/json/equipamentos/itens/alimentacao/sopa_de_peixe.json +13 -0
  114. data/src/json/equipamentos/itens/alquimicos/catalisadores/baga_de_fogo.json +17 -0
  115. data/src/json/equipamentos/itens/alquimicos/catalisadores/dente_de_dragao.json +17 -0
  116. data/src/json/equipamentos/itens/alquimicos/catalisadores/essencia_abissal.json +22 -0
  117. data/src/json/equipamentos/itens/alquimicos/catalisadores/liquen_lilas.json +18 -0
  118. data/src/json/equipamentos/itens/alquimicos/catalisadores/musgo_purpura.json +18 -0
  119. data/src/json/equipamentos/itens/alquimicos/catalisadores/ossos_de_monstro.json +17 -0
  120. data/src/json/equipamentos/itens/alquimicos/catalisadores/po_de_cristal.json +18 -0
  121. data/src/json/equipamentos/itens/alquimicos/catalisadores/po_de_giz.json +18 -0
  122. data/src/json/equipamentos/itens/alquimicos/catalisadores/ramo_verdejante.json +16 -0
  123. data/src/json/equipamentos/itens/alquimicos/catalisadores/saco_de_sal.json +18 -0
  124. data/src/json/equipamentos/itens/alquimicos/catalisadores/seixo_de_ambar.json +18 -0
  125. data/src/json/equipamentos/itens/alquimicos/catalisadores/terra_de_cemiterio.json +18 -0
  126. data/src/json/equipamentos/itens/alquimicos/preparados/acido.json +19 -0
  127. data/src/json/equipamentos/itens/alquimicos/preparados/balsamo_restaurador.json +16 -0
  128. data/src/json/equipamentos/itens/alquimicos/preparados/bomba.json +30 -0
  129. data/src/json/equipamentos/itens/alquimicos/preparados/cosmetico.json +18 -0
  130. data/src/json/equipamentos/itens/alquimicos/preparados/elixir_do_amor.json +23 -0
  131. data/src/json/equipamentos/itens/alquimicos/preparados/essencia_de_mana.json +16 -0
  132. data/src/json/equipamentos/itens/alquimicos/preparados/fogo_alquimico.json +27 -0
  133. data/src/json/equipamentos/itens/alquimicos/preparados/po_do_desaparecimento.json +18 -0
  134. data/src/json/equipamentos/itens/alquimicos/venenos/beladona.json +22 -0
  135. data/src/json/equipamentos/itens/alquimicos/venenos/bruma_sonolenta.json +21 -0
  136. data/src/json/equipamentos/itens/alquimicos/venenos/cicuta.json +22 -0
  137. data/src/json/equipamentos/itens/alquimicos/venenos/essencia_de_sombra.json +20 -0
  138. data/src/json/equipamentos/itens/alquimicos/venenos/nevoa_toxica.json +22 -0
  139. data/src/json/equipamentos/itens/alquimicos/venenos/peconha_comum.json +24 -0
  140. data/src/json/equipamentos/itens/alquimicos/venenos/peconha_concentrada.json +22 -0
  141. data/src/json/equipamentos/itens/alquimicos/venenos/peconha_potente.json +22 -0
  142. data/src/json/equipamentos/itens/alquimicos/venenos/po_de_lich.json +23 -0
  143. data/src/json/equipamentos/itens/alquimicos/venenos/riso_de_nimb.json +21 -0
  144. data/src/json/equipamentos/itens/animais/alforje.json +11 -0
  145. data/src/json/equipamentos/itens/animais/cao_de_caca.json +18 -0
  146. data/src/json/equipamentos/itens/animais/cavalo.json +20 -0
  147. data/src/json/equipamentos/itens/animais/cavalo_de_guerra.json +17 -0
  148. data/src/json/equipamentos/itens/animais/estabulo.json +10 -0
  149. data/src/json/equipamentos/itens/animais/ponei.json +21 -0
  150. data/src/json/equipamentos/itens/animais/ponei_de_guerra.json +18 -0
  151. data/src/json/equipamentos/itens/animais/trobo.json +14 -0
  152. data/src/json/equipamentos/itens/aventura/agua_benta.json +23 -0
  153. data/src/json/equipamentos/itens/aventura/algemas.json +35 -0
  154. data/src/json/equipamentos/itens/aventura/arpeu.json +18 -0
  155. data/src/json/equipamentos/itens/aventura/bandoleira_de_pocoes.json +15 -0
  156. data/src/json/equipamentos/itens/aventura/barraca.json +14 -0
  157. data/src/json/equipamentos/itens/aventura/corda.json +26 -0
  158. data/src/json/equipamentos/itens/aventura/espelho.json +10 -0
  159. data/src/json/equipamentos/itens/aventura/lampiao.json +19 -0
  160. data/src/json/equipamentos/itens/aventura/mochila.json +12 -0
  161. data/src/json/equipamentos/itens/aventura/mochila_de_aventureiro.json +14 -0
  162. data/src/json/equipamentos/itens/aventura/oleo.json +19 -0
  163. data/src/json/equipamentos/itens/aventura/organizador_de_pergaminhos.json +14 -0
  164. data/src/json/equipamentos/itens/aventura/pe_de_cabra.json +18 -0
  165. data/src/json/equipamentos/itens/aventura/saco_de_dormir.json +13 -0
  166. data/src/json/equipamentos/itens/aventura/simbolo_sagrado.json +15 -0
  167. data/src/json/equipamentos/itens/aventura/tocha.json +28 -0
  168. data/src/json/equipamentos/itens/aventura/vara_de_madeira.json +12 -0
  169. data/src/json/equipamentos/itens/esotericos/bolsa_de_po.json +17 -0
  170. data/src/json/equipamentos/itens/esotericos/cajado_arcano.json +20 -0
  171. data/src/json/equipamentos/itens/esotericos/cetro_elemental.json +22 -0
  172. data/src/json/equipamentos/itens/esotericos/costela_de_lich.json +18 -0
  173. data/src/json/equipamentos/itens/esotericos/dedo_de_ente.json +21 -0
  174. data/src/json/equipamentos/itens/esotericos/luva_de_ferro.json +17 -0
  175. data/src/json/equipamentos/itens/esotericos/medalhao_de_prata.json +16 -0
  176. data/src/json/equipamentos/itens/esotericos/orbe_cristalino.json +15 -0
  177. data/src/json/equipamentos/itens/esotericos/tomo_hermetico.json +17 -0
  178. data/src/json/equipamentos/itens/esotericos/varinha_arcana.json +15 -0
  179. data/src/json/equipamentos/itens/ferramentas/alaude_elfico.json +16 -0
  180. data/src/json/equipamentos/itens/ferramentas/colecao_de_livros.json +16 -0
  181. data/src/json/equipamentos/itens/ferramentas/equipamento_de_viagem.json +19 -0
  182. data/src/json/equipamentos/itens/ferramentas/estojo_de_disfarces.json +18 -0
  183. data/src/json/equipamentos/itens/ferramentas/flauta_mistica.json +17 -0
  184. data/src/json/equipamentos/itens/ferramentas/gazua.json +18 -0
  185. data/src/json/equipamentos/itens/ferramentas/instrumento_musical.json +20 -0
  186. data/src/json/equipamentos/itens/ferramentas/instrumentos_de_oficio.json +21 -0
  187. data/src/json/equipamentos/itens/ferramentas/luneta.json +15 -0
  188. data/src/json/equipamentos/itens/ferramentas/maleta_de_medicamentos.json +17 -0
  189. data/src/json/equipamentos/itens/ferramentas/sela.json +19 -0
  190. data/src/json/equipamentos/itens/ferramentas/tambor_das_profundezas.json +17 -0
  191. data/src/json/equipamentos/itens/servicos/conducao.json +19 -0
  192. data/src/json/equipamentos/itens/servicos/curandeiro.json +9 -0
  193. data/src/json/equipamentos/itens/servicos/estadia.json +42 -0
  194. data/src/json/equipamentos/itens/servicos/magia.json +23 -0
  195. data/src/json/equipamentos/itens/servicos/mensageiro.json +10 -0
  196. data/src/json/equipamentos/itens/veiculos/balao_goblin.json +34 -0
  197. data/src/json/equipamentos/itens/veiculos/canoa.json +18 -0
  198. data/src/json/equipamentos/itens/veiculos/carroca.json +20 -0
  199. data/src/json/equipamentos/itens/veiculos/carruagem.json +21 -0
  200. data/src/json/equipamentos/itens/veiculos/veleiro.json +11 -0
  201. data/src/json/equipamentos/itens/vestuario/andrajos_de_aldeao.json +16 -0
  202. data/src/json/equipamentos/itens/vestuario/bandana.json +14 -0
  203. data/src/json/equipamentos/itens/vestuario/botas_reforcadas.json +15 -0
  204. data/src/json/equipamentos/itens/vestuario/camisa_bufante.json +14 -0
  205. data/src/json/equipamentos/itens/vestuario/capa_esvoacante.json +14 -0
  206. data/src/json/equipamentos/itens/vestuario/capa_pesada.json +14 -0
  207. data/src/json/equipamentos/itens/vestuario/casaco_longo.json +15 -0
  208. data/src/json/equipamentos/itens/vestuario/chapeu_arcano.json +15 -0
  209. data/src/json/equipamentos/itens/vestuario/enfeite_de_elmo.json +15 -0
  210. data/src/json/equipamentos/itens/vestuario/farrapos_de_ermitao.json +16 -0
  211. data/src/json/equipamentos/itens/vestuario/gorro_de_ervas.json +14 -0
  212. data/src/json/equipamentos/itens/vestuario/luva_de_pelica.json +14 -0
  213. data/src/json/equipamentos/itens/vestuario/manopla.json +15 -0
  214. data/src/json/equipamentos/itens/vestuario/manto_camuflado.json +20 -0
  215. data/src/json/equipamentos/itens/vestuario/manto_eclesiastico.json +14 -0
  216. data/src/json/equipamentos/itens/vestuario/robe_mistico.json +14 -0
  217. data/src/json/equipamentos/itens/vestuario/sapatos_de_camurca.json +14 -0
  218. data/src/json/equipamentos/itens/vestuario/tabardo.json +14 -0
  219. data/src/json/equipamentos/itens/vestuario/traje_da_corte.json +19 -0
  220. data/src/json/equipamentos/itens/vestuario/traje_de_viajante.json +13 -0
  221. data/src/json/equipamentos/itens/vestuario/veste_de_seda.json +14 -0
  222. data/src/json/equipamentos/municoes/balas.json +13 -0
  223. data/src/json/equipamentos/municoes/flechas.json +13 -0
  224. data/src/json/equipamentos/municoes/pedras.json +14 -0
  225. data/src/json/equipamentos/municoes/virotes.json +14 -0
  226. data/src/json/itens_superiores/materiais_especiais/aco_rubi.json +44 -0
  227. data/src/json/itens_superiores/materiais_especiais/adamante.json +35 -0
  228. data/src/json/itens_superiores/materiais_especiais/gelo_eterno.json +33 -0
  229. data/src/json/itens_superiores/materiais_especiais/madeira_tollon.json +31 -0
  230. data/src/json/itens_superiores/materiais_especiais/materia_vermelha.json +51 -0
  231. data/src/json/itens_superiores/materiais_especiais/mitral.json +38 -0
  232. data/src/json/itens_superiores/melhorias/armaduras_escudos/ajustada.json +11 -0
  233. data/src/json/itens_superiores/melhorias/armaduras_escudos/delicada.json +15 -0
  234. data/src/json/itens_superiores/melhorias/armaduras_escudos/espinhosa.json +15 -0
  235. data/src/json/itens_superiores/melhorias/armaduras_escudos/espinhoso.json +11 -0
  236. data/src/json/itens_superiores/melhorias/armaduras_escudos/polida.json +13 -0
  237. data/src/json/itens_superiores/melhorias/armaduras_escudos/reforcada.json +13 -0
  238. data/src/json/itens_superiores/melhorias/armaduras_escudos/selada.json +14 -0
  239. data/src/json/itens_superiores/melhorias/armaduras_escudos/sob_medida.json +13 -0
  240. data/src/json/itens_superiores/melhorias/armas/atroz.json +11 -0
  241. data/src/json/itens_superiores/melhorias/armas/certeira.json +11 -0
  242. data/src/json/itens_superiores/melhorias/armas/cruel.json +11 -0
  243. data/src/json/itens_superiores/melhorias/armas/equilibrada.json +11 -0
  244. data/src/json/itens_superiores/melhorias/armas/harmonizada.json +13 -0
  245. data/src/json/itens_superiores/melhorias/armas/injecao_alquimica.json +14 -0
  246. data/src/json/itens_superiores/melhorias/armas/macica.json +12 -0
  247. data/src/json/itens_superiores/melhorias/armas/mira_telescopica.json +16 -0
  248. data/src/json/itens_superiores/melhorias/armas/precisa.json +12 -0
  249. data/src/json/itens_superiores/melhorias/armas/pungente.json +11 -0
  250. data/src/json/itens_superiores/melhorias/esotericos/canalizador.json +11 -0
  251. data/src/json/itens_superiores/melhorias/esotericos/energetico.json +12 -0
  252. data/src/json/itens_superiores/melhorias/esotericos/harmonizado.json +16 -0
  253. data/src/json/itens_superiores/melhorias/esotericos/poderoso.json +11 -0
  254. data/src/json/itens_superiores/melhorias/esotericos/vigilante.json +11 -0
  255. data/src/json/itens_superiores/melhorias/ferramentas_vestuario/aprimorado.json +15 -0
  256. data/src/json/itens_superiores/melhorias/geral/banhado_a_ouro.json +17 -0
  257. data/src/json/itens_superiores/melhorias/geral/cravejado_de_gemas.json +12 -0
  258. data/src/json/itens_superiores/melhorias/geral/discreto.json +13 -0
  259. data/src/json/itens_superiores/melhorias/geral/macabro.json +12 -0
  260. data/src/json/itens_superiores/melhorias/geral/material_especial.json +13 -0
  261. data/src/json/origens/acolito.json +11 -0
  262. data/src/json/origens/amigo_dos_animais.json +11 -0
  263. data/src/json/origens/amnesico.json +10 -0
  264. data/src/json/origens/aristocrata.json +11 -0
  265. data/src/json/origens/artesao.json +11 -0
  266. data/src/json/origens/artista.json +11 -0
  267. data/src/json/origens/assistente_de_laboratorio.json +11 -0
  268. data/src/json/origens/batedor.json +11 -0
  269. data/src/json/origens/capanga.json +11 -0
  270. data/src/json/origens/charlatao.json +11 -0
  271. data/src/json/origens/circense.json +11 -0
  272. data/src/json/origens/criminoso.json +11 -0
  273. data/src/json/origens/curandeiro.json +11 -0
  274. data/src/json/origens/eremita.json +11 -0
  275. data/src/json/origens/escravo.json +11 -0
  276. data/src/json/origens/estudioso.json +11 -0
  277. data/src/json/origens/fazendeiro.json +11 -0
  278. data/src/json/origens/forasteiro.json +11 -0
  279. data/src/json/origens/gladiador.json +11 -0
  280. data/src/json/origens/guarda.json +11 -0
  281. data/src/json/origens/herdeiro.json +11 -0
  282. data/src/json/origens/heroi_campones.json +11 -0
  283. data/src/json/origens/marujo.json +11 -0
  284. data/src/json/origens/mateiro.json +11 -0
  285. data/src/json/origens/membro_de_guilda.json +11 -0
  286. data/src/json/origens/mercador.json +11 -0
  287. data/src/json/origens/minerador.json +11 -0
  288. data/src/json/origens/nomade.json +11 -0
  289. data/src/json/origens/pivete.json +11 -0
  290. data/src/json/origens/refugiado.json +11 -0
  291. data/src/json/origens/seguidor.json +11 -0
  292. data/src/json/origens/selvagem.json +11 -0
  293. data/src/json/origens/soldado.json +11 -0
  294. data/src/json/origens/taverneiro.json +11 -0
  295. data/src/json/origens/trabalhador.json +11 -0
  296. data/src/json/poderes/habilidades_unicas_de_origem/a_prova_de_tudo.json +14 -0
  297. data/src/json/poderes/habilidades_unicas_de_origem/agua_no_feijao.json +14 -0
  298. data/src/json/poderes/habilidades_unicas_de_origem/alpinista_social.json +9 -0
  299. data/src/json/poderes/habilidades_unicas_de_origem/amigo_especial.json +16 -0
  300. data/src/json/poderes/habilidades_unicas_de_origem/antigo_mestre.json +15 -0
  301. data/src/json/poderes/habilidades_unicas_de_origem/busca_interior.json +13 -0
  302. data/src/json/poderes/habilidades_unicas_de_origem/confissao.json +14 -0
  303. data/src/json/poderes/habilidades_unicas_de_origem/coracao_heroico.json +13 -0
  304. data/src/json/poderes/habilidades_unicas_de_origem/cultura_exotica.json +13 -0
  305. data/src/json/poderes/habilidades_unicas_de_origem/desejo_de_liberdade.json +12 -0
  306. data/src/json/poderes/habilidades_unicas_de_origem/detetive.json +14 -0
  307. data/src/json/poderes/habilidades_unicas_de_origem/dom_artistico.json +10 -0
  308. data/src/json/poderes/habilidades_unicas_de_origem/escavador.json +13 -0
  309. data/src/json/poderes/habilidades_unicas_de_origem/esforcado.json +13 -0
  310. data/src/json/poderes/habilidades_unicas_de_origem/esse_cheiro.json +14 -0
  311. data/src/json/poderes/habilidades_unicas_de_origem/estoico.json +16 -0
  312. data/src/json/poderes/habilidades_unicas_de_origem/frutos_do_trabalho.json +19 -0
  313. data/src/json/poderes/habilidades_unicas_de_origem/gororoba.json +12 -0
  314. data/src/json/poderes/habilidades_unicas_de_origem/heranca.json +13 -0
  315. data/src/json/poderes/habilidades_unicas_de_origem/influencia_militar.json +14 -0
  316. data/src/json/poderes/habilidades_unicas_de_origem/lembrancas_graduais.json +14 -0
  317. data/src/json/poderes/habilidades_unicas_de_origem/medico_de_campo.json +12 -0
  318. data/src/json/poderes/habilidades_unicas_de_origem/membro_da_igreja.json +14 -0
  319. data/src/json/poderes/habilidades_unicas_de_origem/mochileiro.json +9 -0
  320. data/src/json/poderes/habilidades_unicas_de_origem/negociacao.json +12 -0
  321. data/src/json/poderes/habilidades_unicas_de_origem/palpite_fundamentado.json +13 -0
  322. data/src/json/poderes/habilidades_unicas_de_origem/pao_e_circo.json +11 -0
  323. data/src/json/poderes/habilidades_unicas_de_origem/passagem_de_navio.json +13 -0
  324. data/src/json/poderes/habilidades_unicas_de_origem/punguista.json +15 -0
  325. data/src/json/poderes/habilidades_unicas_de_origem/quebra_galho.json +14 -0
  326. data/src/json/poderes/habilidades_unicas_de_origem/rede_de_contatos.json +14 -0
  327. data/src/json/poderes/habilidades_unicas_de_origem/sangue_azul.json +12 -0
  328. data/src/json/poderes/habilidades_unicas_de_origem/truque_de_magica.json +14 -0
  329. data/src/json/poderes/habilidades_unicas_de_origem/vendedor_de_carcacas.json +13 -0
  330. data/src/json/poderes/habilidades_unicas_de_origem/vida_rustica.json +13 -0
  331. data/src/json/poderes/poderes_concedidos/afinidade_com_a_tormenta.json +14 -0
  332. data/src/json/poderes/poderes_concedidos/almejar_o_impossivel.json +13 -0
  333. data/src/json/poderes/poderes_concedidos/anfibio.json +13 -0
  334. data/src/json/poderes/poderes_concedidos/apostar_com_o_trapaceiro.json +12 -0
  335. data/src/json/poderes/poderes_concedidos/armas_da_ambicao.json +12 -0
  336. data/src/json/poderes/poderes_concedidos/arsenal_das_profundezas.json +14 -0
  337. data/src/json/poderes/poderes_concedidos/astucia_da_serpente.json +14 -0
  338. data/src/json/poderes/poderes_concedidos/ataque_piedoso.json +13 -0
  339. data/src/json/poderes/poderes_concedidos/aura_de_medo.json +17 -0
  340. data/src/json/poderes/poderes_concedidos/aura_de_paz.json +18 -0
  341. data/src/json/poderes/poderes_concedidos/aura_restauradora.json +13 -0
  342. data/src/json/poderes/poderes_concedidos/bencao_do_mana.json +10 -0
  343. data/src/json/poderes/poderes_concedidos/caricia_sombria.json +26 -0
  344. data/src/json/poderes/poderes_concedidos/centelha_magica.json +13 -0
  345. data/src/json/poderes/poderes_concedidos/compreender_os_ermos.json +17 -0
  346. data/src/json/poderes/poderes_concedidos/conhecimento_enciclopedico.json +13 -0
  347. data/src/json/poderes/poderes_concedidos/conjurar_arma.json +19 -0
  348. data/src/json/poderes/poderes_concedidos/coragem_total.json +11 -0
  349. data/src/json/poderes/poderes_concedidos/cura_gentil.json +10 -0
  350. data/src/json/poderes/poderes_concedidos/curandeira_perfeita.json +15 -0
  351. data/src/json/poderes/poderes_concedidos/dedo_verde.json +14 -0
  352. data/src/json/poderes/poderes_concedidos/descanso_natural.json +10 -0
  353. data/src/json/poderes/poderes_concedidos/dom_da_esperanca.json +15 -0
  354. data/src/json/poderes/poderes_concedidos/dom_da_imortalidade.json +8 -0
  355. data/src/json/poderes/poderes_concedidos/dom_da_profecia.json +6 -0
  356. data/src/json/poderes/poderes_concedidos/dom_da_ressurreicao.json +8 -0
  357. data/src/json/poderes/poderes_concedidos/dom_da_verdade.json +15 -0
  358. data/src/json/poderes/poderes_concedidos/escamas_draconicas.json +13 -0
  359. data/src/json/poderes/poderes_concedidos/escudo_magico.json +12 -0
  360. data/src/json/poderes/poderes_concedidos/espada_justiceira.json +13 -0
  361. data/src/json/poderes/poderes_concedidos/espada_solar.json +16 -0
  362. data/src/json/poderes/poderes_concedidos/extase_da_loucura.json +12 -0
  363. data/src/json/poderes/poderes_concedidos/familiar_ofidico.json +13 -0
  364. data/src/json/poderes/poderes_concedidos/farsa_do_fingidor.json +14 -0
  365. data/src/json/poderes/poderes_concedidos/fe_guerreira.json +20 -0
  366. data/src/json/poderes/poderes_concedidos/forma_de_macaco.json +20 -0
  367. data/src/json/poderes/poderes_concedidos/fulgor_solar.json +18 -0
  368. data/src/json/poderes/poderes_concedidos/furia_divina.json +20 -0
  369. data/src/json/poderes/poderes_concedidos/golpista_divino.json +14 -0
  370. data/src/json/poderes/poderes_concedidos/habitante_do_deserto.json +14 -0
  371. data/src/json/poderes/poderes_concedidos/inimigo_de_tenebra.json +14 -0
  372. data/src/json/poderes/poderes_concedidos/kiai_divino.json +13 -0
  373. data/src/json/poderes/poderes_concedidos/liberdade_divina.json +12 -0
  374. data/src/json/poderes/poderes_concedidos/manto_da_penumbra.json +14 -0
  375. data/src/json/poderes/poderes_concedidos/mente_analitica.json +16 -0
  376. data/src/json/poderes/poderes_concedidos/mente_vazia.json +16 -0
  377. data/src/json/poderes/poderes_concedidos/mestre_dos_mares.json +18 -0
  378. data/src/json/poderes/poderes_concedidos/olhar_amedrontador.json +14 -0
  379. data/src/json/poderes/poderes_concedidos/palavras_de_bondade.json +14 -0
  380. data/src/json/poderes/poderes_concedidos/percepcao_temporal.json +17 -0
  381. data/src/json/poderes/poderes_concedidos/pesquisa_abencoada.json +15 -0
  382. data/src/json/poderes/poderes_concedidos/poder_oculto.json +21 -0
  383. data/src/json/poderes/poderes_concedidos/presas_primordiais.json +23 -0
  384. data/src/json/poderes/poderes_concedidos/presas_venenosas.json +16 -0
  385. data/src/json/poderes/poderes_concedidos/rejeicao_divina.json +13 -0
  386. data/src/json/poderes/poderes_concedidos/reparar_injustica.json +13 -0
  387. data/src/json/poderes/poderes_concedidos/sangue_de_ferro.json +13 -0
  388. data/src/json/poderes/poderes_concedidos/sangue_ofidico.json +14 -0
  389. data/src/json/poderes/poderes_concedidos/servos_do_dragao.json +24 -0
  390. data/src/json/poderes/poderes_concedidos/sopro_do_mar.json +25 -0
  391. data/src/json/poderes/poderes_concedidos/sorte_dos_loucos.json +13 -0
  392. data/src/json/poderes/poderes_concedidos/talento_artistico.json +14 -0
  393. data/src/json/poderes/poderes_concedidos/teurgista_mistico.json +11 -0
  394. data/src/json/poderes/poderes_concedidos/tradicao_de_lin_wu.json +14 -0
  395. data/src/json/poderes/poderes_concedidos/transmissao_da_loucura.json +17 -0
  396. data/src/json/poderes/poderes_concedidos/tropas_duyshidakk.json +24 -0
  397. data/src/json/poderes/poderes_concedidos/urro_divino.json +13 -0
  398. data/src/json/poderes/poderes_concedidos/visao_nas_trevas.json +10 -0
  399. data/src/json/poderes/poderes_concedidos/voz_da_civilizacao.json +10 -0
  400. data/src/json/poderes/poderes_concedidos/voz_da_natureza.json +18 -0
  401. data/src/json/poderes/poderes_concedidos/voz_dos_monstros.json +11 -0
  402. data/src/json/poderes/poderes_concedidos/zumbificar.json +18 -0
  403. data/src/json/poderes/poderes_da_tormenta/anatomia_insana.json +12 -0
  404. data/src/json/poderes/poderes_da_tormenta/antenas.json +18 -0
  405. data/src/json/poderes/poderes_da_tormenta/armamento_aberrante.json +14 -0
  406. data/src/json/poderes/poderes_da_tormenta/articulacoes_flexiveis.json +15 -0
  407. data/src/json/poderes/poderes_da_tormenta/asas_insetoides.json +17 -0
  408. data/src/json/poderes/poderes_da_tormenta/carapaca.json +12 -0
  409. data/src/json/poderes/poderes_da_tormenta/corpo_aberrante.json +13 -0
  410. data/src/json/poderes/poderes_da_tormenta/cuspir_enxame.json +20 -0
  411. data/src/json/poderes/poderes_da_tormenta/dentes_afiados.json +19 -0
  412. data/src/json/poderes/poderes_da_tormenta/desprezar_a_realidade.json +21 -0
  413. data/src/json/poderes/poderes_da_tormenta/empunhadura_rubra.json +13 -0
  414. data/src/json/poderes/poderes_da_tormenta/fome_de_mana.json +11 -0
  415. data/src/json/poderes/poderes_da_tormenta/larva_explosiva.json +17 -0
  416. data/src/json/poderes/poderes_da_tormenta/legiao_aberrante.json +19 -0
  417. data/src/json/poderes/poderes_da_tormenta/maos_membranosas.json +18 -0
  418. data/src/json/poderes/poderes_da_tormenta/membros_estendidos.json +12 -0
  419. data/src/json/poderes/poderes_da_tormenta/membros_extras.json +27 -0
  420. data/src/json/poderes/poderes_da_tormenta/mente_aberrante.json +20 -0
  421. data/src/json/poderes/poderes_da_tormenta/olhos_vermelhos.json +12 -0
  422. data/src/json/poderes/poderes_da_tormenta/pele_corrompida.json +13 -0
  423. data/src/json/poderes/poderes_da_tormenta/sangue_acido.json +13 -0
  424. data/src/json/poderes/poderes_da_tormenta/visco_rubro.json +15 -0
  425. data/src/json/regras/alcances.json +33 -0
  426. data/src/json/regras/carga.json +47 -0
  427. data/src/json/regras/critico.json +32 -0
  428. data/src/json/regras/dinheiro_inicial.json +27 -0
  429. data/src/json/regras/empunhaduras.json +22 -0
  430. data/src/json/regras/habilidades_armas.json +37 -0
  431. data/src/json/regras/itens_superiores.json +19 -0
  432. data/src/json/regras/limites_uso.json +22 -0
  433. data/src/json/regras/moedas.json +32 -0
  434. data/src/json/regras/passos_dano.json +20 -0
  435. data/src/json/regras/proficiencias.json +32 -0
  436. data/src/json/regras/propositos_armas.json +37 -0
  437. data/src/json/regras/tipos_dano.json +25 -0
  438. data/src/json/regras/venenos.json +45 -0
  439. data/src/ruby/tormenta20/database.rb +224 -0
  440. data/src/ruby/tormenta20/models/arma.rb +123 -0
  441. data/src/ruby/tormenta20/models/armadura.rb +96 -0
  442. data/src/ruby/tormenta20/models/base.rb +19 -0
  443. data/src/ruby/tormenta20/models/classe.rb +134 -0
  444. data/src/ruby/tormenta20/models/divindade.rb +98 -0
  445. data/src/ruby/tormenta20/models/escudo.rb +59 -0
  446. data/src/ruby/tormenta20/models/item.rb +61 -0
  447. data/src/ruby/tormenta20/models/magia.rb +226 -0
  448. data/src/ruby/tormenta20/models/material_especial.rb +52 -0
  449. data/src/ruby/tormenta20/models/melhoria.rb +52 -0
  450. data/src/ruby/tormenta20/models/origem.rb +71 -0
  451. data/src/ruby/tormenta20/models/poder.rb +120 -0
  452. data/src/ruby/tormenta20/models/regra.rb +47 -0
  453. data/src/ruby/tormenta20/seeder.rb +267 -0
  454. data/src/ruby/tormenta20/version.rb +1 -1
  455. data/src/ruby/tormenta20.rb +169 -7
  456. data/src/schema/magia.schema.json +277 -0
  457. data/src/schema/tormenta20.sql +433 -0
  458. data/tasks/jsonlint.rb +6 -4
  459. data/tools/pdf_extractor/README.md +171 -0
  460. data/tools/pdf_extractor/__init__.py +17 -0
  461. data/tools/pdf_extractor/pdf_extractor.py +441 -0
  462. data/tools/pdf_extractor/pipeline.py +450 -0
  463. data/tools/pdf_extractor/prompts.py +789 -0
  464. data/tools/pdf_extractor/requirements.txt +4 -0
  465. metadata +488 -12
  466. data/src/ruby/open_struct_json.rb +0 -35
  467. data/src/ruby/tormenta20/classes.rb +0 -0
  468. data/src/ruby/tormenta20/equipment.rb +0 -0
  469. data/src/ruby/tormenta20/magias.rb +0 -35
  470. data/src/ruby/tormenta20/origins.rb +0 -0
  471. data/src/ruby/tormenta20/races.rb +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b317a7a72c153c5459514af0d8da880d96262acb3197fe5767db476a21a7934e
4
- data.tar.gz: 53430745f78997003a93f7047aa3b0eee3416e846e8331dd44017f1dc7c37784
3
+ metadata.gz: 775c13dccef6b13bcd76ea3efc8e2cf8b4c5221faf4fb73dffce3ce9b265a101
4
+ data.tar.gz: 88618dbc1c4c5d1e6c6e9127e39b1c2726423bf79b0c8229452dc5c767273d0f
5
5
  SHA512:
6
- metadata.gz: 523855e9fca1f09ddbf0e82187cf2aa14032ddb74e8d43de49660c4b9cd19560fa6efcc1591ad4af796b0aaf7227dd2966fba852ba95bb8656079cc757d8e397
7
- data.tar.gz: 31b034fd1c721ade7c1bc8e5ed24437b14fbd92e6888bc352e8b56dd1737fc44b8c4948094cfa1a37490036e25572b5f07d8368877b150981742fe3ce7afb4af
6
+ metadata.gz: 759238af753ee81ef3619f372a7938c6a8a656988d63dca357bf997fdbe2dea6df45a2a1dbda5fc5374a4e49f52cb07c71f30d1ce33435e86a88332da4aa8f39
7
+ data.tar.gz: d3ead8b84ef084bdd77c6399d1b92fcafb8773cacd0b6a965bab9437356657246121ff880af605172baf6f2e129956a235ea8fc9566b6b21e37bcd01557ce91e
data/.rubocop.yml CHANGED
@@ -6,3 +6,30 @@ Style/StringLiterals:
6
6
 
7
7
  Style/StringLiteralsInInterpolation:
8
8
  EnforcedStyle: double_quotes
9
+
10
+ Metrics/AbcSize:
11
+ Enabled: false
12
+
13
+ Metrics/BlockLength:
14
+ Enabled: false
15
+
16
+ Metrics/ClassLength:
17
+ Enabled: false
18
+
19
+ Metrics/CyclomaticComplexity:
20
+ Enabled: false
21
+
22
+ Metrics/MethodLength:
23
+ Enabled: false
24
+
25
+ Metrics/ModuleLength:
26
+ Enabled: false
27
+
28
+ Metrics/ParameterLists:
29
+ Enabled: false
30
+
31
+ Metrics/PerceivedComplexity:
32
+ Enabled: false
33
+
34
+ Layout/LineLength:
35
+ Max: 200
data/README.md CHANGED
@@ -1,18 +1,24 @@
1
1
  # Tormenta20
2
2
 
3
- TODO: Delete this and the text below, and describe your gem
3
+ Uma biblioteca Ruby com dados do RPG de mesa brasileiro Tormenta20.
4
4
 
5
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/tormenta20`. To experiment with that code, run `bin/console` for an interactive prompt.
5
+ A gem inclui um banco de dados SQLite pré-populado com informações sobre magias, classes, origens, divindades, poderes e equipamentos do sistema Tormenta20.
6
6
 
7
7
  ## Installation
8
8
 
9
- Install the gem and add to the application's Gemfile by executing:
9
+ Adicione ao Gemfile da sua aplicacao:
10
+
11
+ ```ruby
12
+ gem 'tormenta20'
13
+ ```
14
+
15
+ E execute:
10
16
 
11
17
  ```bash
12
- bundle add tormenta20
18
+ bundle install
13
19
  ```
14
20
 
15
- If bundler is not being used to manage dependencies, install the gem by executing:
21
+ Ou instale diretamente:
16
22
 
17
23
  ```bash
18
24
  gem install tormenta20
@@ -20,22 +26,207 @@ gem install tormenta20
20
26
 
21
27
  ## Usage
22
28
 
23
- TODO: Write usage instructions here
29
+ A gem ja vem com o banco de dados populado. Basta fazer require e usar:
30
+
31
+ ```ruby
32
+ require 'tormenta20'
33
+
34
+ # Magias
35
+ Tormenta20.magias.count # => 198
36
+ Tormenta20.magias.arcanas # Magias arcanas
37
+ Tormenta20.magias.divinas # Magias divinas
38
+ Tormenta20.magias.by_circle("3") # Magias do 3o circulo
39
+ Tormenta20.magias.by_school('evoc') # Magias de evocacao
40
+ Tormenta20.magias.arcanas.by_circle("1") # Combinar filtros
41
+
42
+ # Classes
43
+ Tormenta20.classes.all
44
+ Tormenta20.classes.conjuradores # Classes com magia
45
+
46
+ # Origens
47
+ Tormenta20.origens.all
48
+ Tormenta20.origens.find('soldado')
49
+ Tormenta20.origens.with_unique_power # Origens com poder unico
50
+
51
+ # Divindades
52
+ Tormenta20.divindades.all
53
+ Tormenta20.divindades.energia_positiva # Deuses de energia positiva
54
+ Tormenta20.divindades.energia_negativa # Deuses de energia negativa
55
+
56
+ # Poderes
57
+ Tormenta20.poderes.all
58
+ Tormenta20.poderes.habilidades_unicas # Habilidades unicas de origem
59
+ Tormenta20.poderes.poderes_concedidos # Poderes concedidos por divindades
60
+ Tormenta20.poderes.poderes_tormenta # Poderes da Tormenta
61
+
62
+ # Equipamentos
63
+ Tormenta20.armas.all
64
+ Tormenta20.armas.simples # Armas simples
65
+ Tormenta20.armas.marciais # Armas marciais
66
+ Tormenta20.armaduras.all
67
+ Tormenta20.armaduras.leves # Armaduras leves
68
+ Tormenta20.escudos.all
69
+
70
+ # Itens Superiores
71
+ Tormenta20.materiais_especiais.all
72
+
73
+ # Regras
74
+ Tormenta20.regras.all
75
+ ```
76
+
77
+ ### Query Interface
78
+
79
+ A gem oferece uma interface de consulta simplificada. Todos os metodos retornam modelos ActiveRecord, permitindo encadeamento de scopes e queries:
80
+
81
+ ```ruby
82
+ # Accessors disponiveis
83
+ Tormenta20.origens # => Tormenta20::Models::Origem
84
+ Tormenta20.poderes # => Tormenta20::Models::Poder
85
+ Tormenta20.divindades # => Tormenta20::Models::Divindade
86
+ Tormenta20.classes # => Tormenta20::Models::Classe
87
+ Tormenta20.magias # => Tormenta20::Models::Magia
88
+ Tormenta20.armas # => Tormenta20::Models::Arma
89
+ Tormenta20.armaduras # => Tormenta20::Models::Armadura
90
+ Tormenta20.escudos # => Tormenta20::Models::Escudo
91
+ Tormenta20.itens # => Tormenta20::Models::Item
92
+ Tormenta20.materiais_especiais # => Tormenta20::Models::MaterialEspecial
93
+ Tormenta20.melhorias # => Tormenta20::Models::Melhoria
94
+ Tormenta20.regras # => Tormenta20::Models::Regra
95
+
96
+ # Exemplos de queries ActiveRecord
97
+ Tormenta20.magias.where(type: 'arcana')
98
+ Tormenta20.magias.where(school: 'evoc').order(:name)
99
+ Tormenta20.poderes.where("name LIKE ?", "%Furia%")
100
+ ```
101
+
102
+ ### Models Disponiveis
103
+
104
+ | Model | Descricao | Quantidade | Documentacao |
105
+ |-------|-----------|------------|--------------|
106
+ | `Magia` | Magias arcanas, divinas e universais | 198 | [docs/magias.md](docs/magias.md) |
107
+ | `Classe` | Classes de personagem | 14 | [docs/classes.md](docs/classes.md) |
108
+ | `Origem` | Origens de personagem | 35 | [docs/origens.md](docs/origens.md) |
109
+ | `Divindade` | Deuses do Panteao | 20 | [docs/divindades.md](docs/divindades.md) |
110
+ | `Poder` | Poderes (habilidades unicas, concedidos, tormenta) | 129 | [docs/poderes.md](docs/poderes.md) |
111
+ | `Arma` | Armas | - | [docs/armas.md](docs/armas.md) |
112
+ | `Armadura` | Armaduras | - | [docs/armaduras.md](docs/armaduras.md) |
113
+ | `Escudo` | Escudos | 2 | [docs/escudos.md](docs/escudos.md) |
114
+ | `Item` | Itens gerais | - | [docs/itens.md](docs/itens.md) |
115
+ | `MaterialEspecial` | Materiais especiais | 6 | [docs/materiais_especiais.md](docs/materiais_especiais.md) |
116
+ | `Melhoria` | Melhorias magicas | - | [docs/melhorias.md](docs/melhorias.md) |
117
+ | `Regra` | Regras e dados de referencia | 14 | [docs/regras.md](docs/regras.md) |
118
+
119
+ > Cada link de documentacao contem a lista completa de atributos, scopes, metodos e exemplos de uso.
120
+
121
+ ### Exemplos
122
+
123
+ ```ruby
124
+ # Buscar uma magia especifica
125
+ bola_de_fogo = Tormenta20.magias.find('bola_de_fogo')
126
+ puts bola_de_fogo.name # => "Bola de Fogo"
127
+ puts bola_de_fogo.circle # => "3"
128
+ puts bola_de_fogo.school # => "evoc"
129
+ puts bola_de_fogo.description
130
+
131
+ # Listar poderes de uma divindade
132
+ khalmyr = Tormenta20.divindades.find('khalmyr')
133
+ puts khalmyr.name # => "Khalmyr"
134
+ puts khalmyr.granted_powers # => ["coragem_total", "espada_justiceira", ...]
135
+
136
+ # Buscar poderes concedidos
137
+ Tormenta20.poderes.poderes_concedidos.each do |poder|
138
+ puts "#{poder.name}: #{poder.deities.join(', ')}"
139
+ end
140
+
141
+ # Classe com informacoes de magia
142
+ mago = Tormenta20.classes.find('arcanista')
143
+ puts mago.initial_hp # PV inicial
144
+ puts mago.mp_per_level # PM por nivel
145
+ puts mago.conjurador? # => true
146
+
147
+ # Filtrar magias arcanas do 1o circulo da escola de evocacao
148
+ Tormenta20.magias.arcanas.by_circle("1").by_school("evoc").each do |magia|
149
+ puts "#{magia.name} - #{magia.description}"
150
+ end
151
+ ```
24
152
 
25
153
  ## Development
26
154
 
27
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
155
+ ### Pre-requisitos
156
+
157
+ - Ruby >= 3.0.0
158
+ - Bundler
159
+
160
+ ### Setup
161
+
162
+ ```bash
163
+ git clone https://github.com/LuanGB/tormenta20.git
164
+ cd tormenta20
165
+ bundle install
166
+ ```
167
+
168
+ ### Construir o Banco de Dados
169
+
170
+ O banco de dados SQLite e construido a partir dos arquivos JSON em `src/json/`:
28
171
 
29
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
172
+ ```bash
173
+ # Construir apenas o banco
174
+ rake build_db
175
+
176
+ # Build completo da gem (inclui build_db automaticamente)
177
+ rake build
178
+ ```
179
+
180
+ ### Estrutura do Projeto
181
+
182
+ ```
183
+ tormenta20/
184
+ ├── src/
185
+ │ ├── json/ # Dados em formato JSON
186
+ │ │ ├── magias/
187
+ │ │ ├── classes/
188
+ │ │ ├── origens/
189
+ │ │ ├── deuses/
190
+ │ │ ├── poderes/
191
+ │ │ │ ├── habilidades_unicas_de_origem/
192
+ │ │ │ ├── poderes_concedidos/
193
+ │ │ │ └── poderes_da_tormenta/
194
+ │ │ ├── equipamentos/
195
+ │ │ ├── itens_superiores/
196
+ │ │ └── regras/
197
+ │ └── ruby/ # Codigo Ruby
198
+ │ └── tormenta20/
199
+ │ ├── models/ # ActiveRecord models
200
+ │ ├── database.rb # Conexao com banco
201
+ │ └── seeder.rb # Import de dados
202
+ ├── db/
203
+ │ ├── schema.sql # Schema SQLite
204
+ │ ├── seeds.rb # Script de seed (desenvolvimento)
205
+ │ └── tormenta20.sqlite3 # Banco pre-construido (gerado)
206
+ └── bin/
207
+ └── build_db # Script de build do banco
208
+ ```
209
+
210
+ ### Testes
211
+
212
+ ```bash
213
+ rake spec
214
+ ```
215
+
216
+ ### Linting
217
+
218
+ ```bash
219
+ rake rubocop
220
+ ```
30
221
 
31
222
  ## Contributing
32
223
 
33
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/tormenta20. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [code of conduct](https://github.com/[USERNAME]/tormenta20/blob/master/CODE_OF_CONDUCT.md).
224
+ Bug reports e pull requests sao bem-vindos em https://github.com/LuanGB/tormenta20.
34
225
 
35
226
  ## License
36
227
 
37
- The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
228
+ Disponivel como open source sob os termos da [MIT License](https://opensource.org/licenses/MIT).
38
229
 
39
- ## Code of Conduct
230
+ ## Aviso Legal
40
231
 
41
- Everyone interacting in the Tormenta20 project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/[USERNAME]/tormenta20/blob/master/CODE_OF_CONDUCT.md).
232
+ Tormenta20 e uma marca registrada da Jambo Editora. Esta biblioteca e um projeto de fa nao oficial e nao e afiliada, endossada ou patrocinada pela Jambo Editora.
data/Rakefile CHANGED
@@ -10,3 +10,12 @@ require "rubocop/rake_task"
10
10
  RuboCop::RakeTask.new
11
11
 
12
12
  task default: %i[spec rubocop]
13
+
14
+ # Database build task
15
+ desc "Build the SQLite database with all JSON data"
16
+ task :build_db do
17
+ ruby "bin/build_db"
18
+ end
19
+
20
+ # Ensure database is built before gem packaging
21
+ Rake::Task[:build].enhance([:build_db])
data/db/schema.sql ADDED
@@ -0,0 +1,382 @@
1
+ -- =============================================================================
2
+ -- TORMENTA 20 SQLITE SCHEMA
3
+ -- =============================================================================
4
+ -- Schema para todos os tipos de dados do sistema Tormenta 20
5
+ -- Usa SQLite com JSON para campos flexíveis
6
+ -- =============================================================================
7
+
8
+ -- -----------------------------------------------------------------------------
9
+ -- ORIGENS (Character Origins)
10
+ -- -----------------------------------------------------------------------------
11
+ CREATE TABLE IF NOT EXISTS origens (
12
+ id TEXT PRIMARY KEY,
13
+ name TEXT NOT NULL,
14
+ description TEXT,
15
+ items JSON DEFAULT '[]',
16
+ benefits JSON DEFAULT '{}',
17
+ unique_power TEXT,
18
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
19
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
20
+ );
21
+
22
+ CREATE INDEX IF NOT EXISTS idx_origens_name ON origens(name);
23
+
24
+ CREATE TRIGGER IF NOT EXISTS update_origens_timestamp
25
+ AFTER UPDATE ON origens
26
+ BEGIN
27
+ UPDATE origens SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
28
+ END;
29
+
30
+ -- -----------------------------------------------------------------------------
31
+ -- PODERES (Powers) - Tabela unificada para todos os tipos de poderes
32
+ -- -----------------------------------------------------------------------------
33
+ CREATE TABLE IF NOT EXISTS poderes (
34
+ id TEXT PRIMARY KEY,
35
+ name TEXT NOT NULL,
36
+ type TEXT NOT NULL CHECK(type IN (
37
+ 'habilidade_unica_origem',
38
+ 'poder_concedido',
39
+ 'poder_tormenta',
40
+ 'poder_classe',
41
+ 'poder_geral',
42
+ 'poder_combate',
43
+ 'poder_destino',
44
+ 'poder_magia'
45
+ )),
46
+ description TEXT,
47
+ effects JSON DEFAULT '{}',
48
+ prerequisites JSON DEFAULT '[]',
49
+ origin_id TEXT,
50
+ deities JSON DEFAULT '[]',
51
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
52
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
53
+ );
54
+
55
+ CREATE INDEX IF NOT EXISTS idx_poderes_type ON poderes(type);
56
+ CREATE INDEX IF NOT EXISTS idx_poderes_name ON poderes(name);
57
+ CREATE INDEX IF NOT EXISTS idx_poderes_origin ON poderes(origin_id);
58
+
59
+ CREATE TRIGGER IF NOT EXISTS update_poderes_timestamp
60
+ AFTER UPDATE ON poderes
61
+ BEGIN
62
+ UPDATE poderes SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
63
+ END;
64
+
65
+ -- -----------------------------------------------------------------------------
66
+ -- DIVINDADES (Deities)
67
+ -- -----------------------------------------------------------------------------
68
+ CREATE TABLE IF NOT EXISTS divindades (
69
+ id TEXT PRIMARY KEY,
70
+ name TEXT NOT NULL,
71
+ title TEXT,
72
+ description TEXT,
73
+ beliefs_objectives JSON DEFAULT '[]',
74
+ holy_symbol TEXT,
75
+ energy TEXT NOT NULL DEFAULT 'qualquer' CHECK(energy IN ('positiva', 'negativa', 'qualquer')),
76
+ preferred_weapon TEXT,
77
+ devotees JSON DEFAULT '{}',
78
+ granted_powers JSON DEFAULT '[]',
79
+ obligations_restrictions TEXT,
80
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
81
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
82
+ );
83
+
84
+ CREATE INDEX IF NOT EXISTS idx_divindades_name ON divindades(name);
85
+ CREATE INDEX IF NOT EXISTS idx_divindades_energy ON divindades(energy);
86
+
87
+ CREATE TRIGGER IF NOT EXISTS update_divindades_timestamp
88
+ AFTER UPDATE ON divindades
89
+ BEGIN
90
+ UPDATE divindades SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
91
+ END;
92
+
93
+ -- -----------------------------------------------------------------------------
94
+ -- CLASSES (Character Classes)
95
+ -- -----------------------------------------------------------------------------
96
+ CREATE TABLE IF NOT EXISTS classes (
97
+ id TEXT PRIMARY KEY,
98
+ name TEXT NOT NULL,
99
+ hit_points JSON NOT NULL,
100
+ mana_points JSON NOT NULL,
101
+ skills JSON NOT NULL,
102
+ proficiencies JSON NOT NULL,
103
+ abilities JSON DEFAULT '[]',
104
+ powers JSON DEFAULT '[]',
105
+ progression JSON DEFAULT '[]',
106
+ spellcasting JSON,
107
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
108
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
109
+ );
110
+
111
+ CREATE INDEX IF NOT EXISTS idx_classes_name ON classes(name);
112
+
113
+ CREATE TRIGGER IF NOT EXISTS update_classes_timestamp
114
+ AFTER UPDATE ON classes
115
+ BEGIN
116
+ UPDATE classes SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
117
+ END;
118
+
119
+ -- -----------------------------------------------------------------------------
120
+ -- MAGIAS (Spells)
121
+ -- -----------------------------------------------------------------------------
122
+ CREATE TABLE IF NOT EXISTS magias (
123
+ id TEXT PRIMARY KEY,
124
+ name TEXT NOT NULL,
125
+ type TEXT NOT NULL CHECK(type IN ('arcana', 'divina', 'universal')),
126
+ circle TEXT NOT NULL,
127
+ school TEXT NOT NULL CHECK(school IN ('abjur', 'adiv', 'conv', 'encan', 'evoc', 'ilus', 'necro', 'trans')),
128
+ execution TEXT NOT NULL,
129
+ execution_details TEXT,
130
+ range TEXT NOT NULL,
131
+ duration TEXT NOT NULL,
132
+ duration_details TEXT,
133
+ counterspell TEXT,
134
+ description TEXT NOT NULL,
135
+
136
+ -- Target information
137
+ target_amount INTEGER,
138
+ target_up_to INTEGER,
139
+ target_type TEXT,
140
+
141
+ -- Effect information
142
+ effect TEXT,
143
+ effect_shape TEXT,
144
+ effect_dimention TEXT,
145
+ effect_size TEXT,
146
+ effect_other_details TEXT,
147
+
148
+ -- Alternative effect fields
149
+ area_effect TEXT,
150
+ area_effect_details TEXT,
151
+
152
+ -- Resistance information
153
+ resistence_effect TEXT,
154
+ resistence_skill TEXT,
155
+
156
+ -- Extra costs
157
+ extra_costs_material_component TEXT,
158
+ extra_costs_material_cost TEXT,
159
+ extra_costs_pm_debuff TEXT,
160
+ extra_costs_pm_sacrifice TEXT,
161
+
162
+ -- Complex nested data stored as JSON
163
+ enhancements JSON NOT NULL DEFAULT '[]',
164
+ effects JSON NOT NULL DEFAULT '[]',
165
+
166
+ -- Metadata
167
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
168
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
169
+ );
170
+
171
+ CREATE INDEX IF NOT EXISTS idx_magias_type ON magias(type);
172
+ CREATE INDEX IF NOT EXISTS idx_magias_circle ON magias(circle);
173
+ CREATE INDEX IF NOT EXISTS idx_magias_school ON magias(school);
174
+ CREATE INDEX IF NOT EXISTS idx_magias_name ON magias(name);
175
+
176
+ CREATE TRIGGER IF NOT EXISTS update_magias_timestamp
177
+ AFTER UPDATE ON magias
178
+ BEGIN
179
+ UPDATE magias SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
180
+ END;
181
+
182
+ -- -----------------------------------------------------------------------------
183
+ -- EQUIPAMENTOS - ARMAS (Weapons)
184
+ -- -----------------------------------------------------------------------------
185
+ CREATE TABLE IF NOT EXISTS armas (
186
+ id TEXT PRIMARY KEY,
187
+ name TEXT NOT NULL,
188
+ category TEXT NOT NULL CHECK(category IN ('simples', 'marciais', 'exoticas', 'fogo')),
189
+ price INTEGER,
190
+ damage TEXT,
191
+ damage_type TEXT,
192
+ critical TEXT,
193
+ range TEXT,
194
+ weight REAL,
195
+ properties JSON DEFAULT '[]',
196
+ description TEXT,
197
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
198
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
199
+ );
200
+
201
+ CREATE INDEX IF NOT EXISTS idx_armas_category ON armas(category);
202
+ CREATE INDEX IF NOT EXISTS idx_armas_name ON armas(name);
203
+
204
+ CREATE TRIGGER IF NOT EXISTS update_armas_timestamp
205
+ AFTER UPDATE ON armas
206
+ BEGIN
207
+ UPDATE armas SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
208
+ END;
209
+
210
+ -- -----------------------------------------------------------------------------
211
+ -- EQUIPAMENTOS - ARMADURAS (Armors)
212
+ -- -----------------------------------------------------------------------------
213
+ CREATE TABLE IF NOT EXISTS armaduras (
214
+ id TEXT PRIMARY KEY,
215
+ name TEXT NOT NULL,
216
+ category TEXT NOT NULL CHECK(category IN ('leve', 'pesada')),
217
+ price INTEGER,
218
+ defense_bonus INTEGER NOT NULL,
219
+ armor_penalty INTEGER DEFAULT 0,
220
+ weight REAL,
221
+ properties JSON DEFAULT '[]',
222
+ description TEXT,
223
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
224
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
225
+ );
226
+
227
+ CREATE INDEX IF NOT EXISTS idx_armaduras_category ON armaduras(category);
228
+ CREATE INDEX IF NOT EXISTS idx_armaduras_name ON armaduras(name);
229
+
230
+ CREATE TRIGGER IF NOT EXISTS update_armaduras_timestamp
231
+ AFTER UPDATE ON armaduras
232
+ BEGIN
233
+ UPDATE armaduras SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
234
+ END;
235
+
236
+ -- -----------------------------------------------------------------------------
237
+ -- EQUIPAMENTOS - ESCUDOS (Shields)
238
+ -- -----------------------------------------------------------------------------
239
+ CREATE TABLE IF NOT EXISTS escudos (
240
+ id TEXT PRIMARY KEY,
241
+ name TEXT NOT NULL,
242
+ price INTEGER,
243
+ defense_bonus INTEGER NOT NULL,
244
+ armor_penalty INTEGER DEFAULT 0,
245
+ weight REAL,
246
+ properties JSON DEFAULT '[]',
247
+ description TEXT,
248
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
249
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
250
+ );
251
+
252
+ CREATE INDEX IF NOT EXISTS idx_escudos_name ON escudos(name);
253
+
254
+ CREATE TRIGGER IF NOT EXISTS update_escudos_timestamp
255
+ AFTER UPDATE ON escudos
256
+ BEGIN
257
+ UPDATE escudos SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
258
+ END;
259
+
260
+ -- -----------------------------------------------------------------------------
261
+ -- EQUIPAMENTOS - ITENS GERAIS (General Items)
262
+ -- -----------------------------------------------------------------------------
263
+ CREATE TABLE IF NOT EXISTS itens (
264
+ id TEXT PRIMARY KEY,
265
+ name TEXT NOT NULL,
266
+ category TEXT,
267
+ price INTEGER,
268
+ weight REAL,
269
+ description TEXT,
270
+ effects JSON DEFAULT '{}',
271
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
272
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
273
+ );
274
+
275
+ CREATE INDEX IF NOT EXISTS idx_itens_category ON itens(category);
276
+ CREATE INDEX IF NOT EXISTS idx_itens_name ON itens(name);
277
+
278
+ CREATE TRIGGER IF NOT EXISTS update_itens_timestamp
279
+ AFTER UPDATE ON itens
280
+ BEGIN
281
+ UPDATE itens SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
282
+ END;
283
+
284
+ -- -----------------------------------------------------------------------------
285
+ -- ITENS SUPERIORES - MATERIAIS ESPECIAIS (Special Materials)
286
+ -- -----------------------------------------------------------------------------
287
+ CREATE TABLE IF NOT EXISTS materiais_especiais (
288
+ id TEXT PRIMARY KEY,
289
+ name TEXT NOT NULL,
290
+ description TEXT,
291
+ applicable_to JSON DEFAULT '[]',
292
+ price_modifier JSON,
293
+ effects JSON DEFAULT '{}',
294
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
295
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
296
+ );
297
+
298
+ CREATE INDEX IF NOT EXISTS idx_materiais_especiais_name ON materiais_especiais(name);
299
+
300
+ CREATE TRIGGER IF NOT EXISTS update_materiais_especiais_timestamp
301
+ AFTER UPDATE ON materiais_especiais
302
+ BEGIN
303
+ UPDATE materiais_especiais SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
304
+ END;
305
+
306
+ -- -----------------------------------------------------------------------------
307
+ -- ITENS SUPERIORES - MELHORIAS (Enhancements)
308
+ -- -----------------------------------------------------------------------------
309
+ CREATE TABLE IF NOT EXISTS melhorias (
310
+ id TEXT PRIMARY KEY,
311
+ name TEXT NOT NULL,
312
+ description TEXT,
313
+ applicable_to JSON DEFAULT '[]',
314
+ price INTEGER,
315
+ effects JSON DEFAULT '{}',
316
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
317
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
318
+ );
319
+
320
+ CREATE INDEX IF NOT EXISTS idx_melhorias_name ON melhorias(name);
321
+
322
+ CREATE TRIGGER IF NOT EXISTS update_melhorias_timestamp
323
+ AFTER UPDATE ON melhorias
324
+ BEGIN
325
+ UPDATE melhorias SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
326
+ END;
327
+
328
+ -- -----------------------------------------------------------------------------
329
+ -- REGRAS (Rules/Reference Data)
330
+ -- -----------------------------------------------------------------------------
331
+ CREATE TABLE IF NOT EXISTS regras (
332
+ id TEXT PRIMARY KEY,
333
+ name TEXT NOT NULL,
334
+ description TEXT,
335
+ data JSON NOT NULL,
336
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
337
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
338
+ );
339
+
340
+ CREATE INDEX IF NOT EXISTS idx_regras_name ON regras(name);
341
+
342
+ CREATE TRIGGER IF NOT EXISTS update_regras_timestamp
343
+ AFTER UPDATE ON regras
344
+ BEGIN
345
+ UPDATE regras SET updated_at = CURRENT_TIMESTAMP WHERE id = NEW.id;
346
+ END;
347
+
348
+ -- =============================================================================
349
+ -- VIEWS ÚTEIS
350
+ -- =============================================================================
351
+
352
+ -- View de resumo de magias
353
+ CREATE VIEW IF NOT EXISTS magias_summary AS
354
+ SELECT
355
+ id,
356
+ name,
357
+ type,
358
+ circle,
359
+ school,
360
+ execution,
361
+ range,
362
+ duration
363
+ FROM magias;
364
+
365
+ -- View de poderes por tipo
366
+ CREATE VIEW IF NOT EXISTS poderes_por_tipo AS
367
+ SELECT
368
+ type,
369
+ COUNT(*) as total,
370
+ GROUP_CONCAT(name, ', ') as nomes
371
+ FROM poderes
372
+ GROUP BY type;
373
+
374
+ -- View de divindades com contagem de poderes
375
+ CREATE VIEW IF NOT EXISTS divindades_resumo AS
376
+ SELECT
377
+ d.id,
378
+ d.name,
379
+ d.title,
380
+ d.energy,
381
+ json_array_length(d.granted_powers) as total_poderes
382
+ FROM divindades d;