tormenta20 0.2.1 → 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
@@ -0,0 +1,789 @@
1
+ """
2
+ Prompts para extração de entidades do Tormenta 20.
3
+ Cada prompt inclui a estrutura JSON esperada e instruções específicas.
4
+ """
5
+
6
+ SYSTEM_PROMPT = """Você é um assistente especializado em extrair dados estruturados do sistema de RPG Tormenta 20.
7
+
8
+ Regras gerais:
9
+ - Use slugs em snake_case para IDs (ex: "bola_de_fogo", "poder_de_arcanista")
10
+ - Referências a outras entidades usam slugs (ex: "powers": ["raio_arcano"])
11
+ - Campos de texto livre mantêm acentos e formatação original
12
+ - Atributos abreviados: for, des, con, int, sab, car
13
+ - Se um campo não existir no texto, use null
14
+ - Retorne APENAS o JSON, sem explicações ou markdown"""
15
+
16
+
17
+ PROMPTS = {
18
+ "racas": {
19
+ "instruction": """Extraia os dados da RAÇA a seguir e retorne um JSON válido.
20
+
21
+ Estrutura esperada:
22
+ {
23
+ "id": "slug_da_raca",
24
+ "name": "Nome da Raça",
25
+ "description": "Texto descritivo completo...",
26
+ "attributes": {
27
+ "for": 0,
28
+ "des": 0,
29
+ "con": 0,
30
+ "int": 0,
31
+ "sab": 0,
32
+ "car": 0
33
+ },
34
+ "size": "medio|pequeno|grande|enorme|minusculo",
35
+ "creature_type": "humanoide|construto|monstro|morto_vivo",
36
+ "speed": 9,
37
+ "abilities": [
38
+ {
39
+ "id": "slug_habilidade",
40
+ "name": "Nome da Habilidade",
41
+ "description": "Descrição completa...",
42
+ "effects": [
43
+ { "type": "tipo_efeito", "value": "valor" }
44
+ ],
45
+ "costs": [
46
+ { "type": "PM", "value": 1 }
47
+ ],
48
+ "choices": [
49
+ { "id": "opcao", "description": "..." }
50
+ ]
51
+ }
52
+ ]
53
+ }
54
+
55
+ Notas:
56
+ - attributes: só inclua atributos mencionados, os demais são 0
57
+ - Se mencionar "+1 em Três Atributos Diferentes", use "any_three": 1
58
+ - speed padrão é 9 (9m), a menos que especificado
59
+ - creature_type padrão é "humanoide"
60
+ - costs e choices são opcionais, inclua só se existirem
61
+
62
+ TEXTO DA RAÇA:
63
+ """,
64
+ "example": """{
65
+ "id": "hynne",
66
+ "name": "Hynne",
67
+ "description": "Também conhecidos como halflings ou 'pequeninos'...",
68
+ "attributes": { "des": 2, "car": 1, "for": -1 },
69
+ "size": "pequeno",
70
+ "creature_type": "humanoide",
71
+ "speed": 6,
72
+ "abilities": [
73
+ {
74
+ "id": "arremessador",
75
+ "name": "Arremessador",
76
+ "description": "Quando faz um ataque à distância com uma funda ou uma arma de arremesso, seu dano aumenta em um passo.",
77
+ "effects": [{ "type": "damage_step_increase", "value": 1, "condition": "funda_ou_arremesso" }]
78
+ }
79
+ ]
80
+ }"""
81
+ },
82
+
83
+ "classes": {
84
+ "instruction": """Extraia os dados da CLASSE a seguir e retorne um JSON válido.
85
+
86
+ Estrutura esperada:
87
+ {
88
+ "id": "slug_da_classe",
89
+ "name": "Nome da Classe",
90
+ "description": "Texto descritivo...",
91
+ "hit_points": {
92
+ "initial": 8,
93
+ "per_level": 2,
94
+ "attribute": "con"
95
+ },
96
+ "mana_points_per_level": 6,
97
+ "skills": {
98
+ "mandatory": ["pericia1", "pericia2"],
99
+ "choose": {
100
+ "amount": 2,
101
+ "from": ["pericia3", "pericia4", ...]
102
+ }
103
+ },
104
+ "proficiencies": ["armaduras_leves", "armas_simples", ...],
105
+ "famous_characters": ["Nome1", "Nome2", ...],
106
+ "class_features": [
107
+ {
108
+ "id": "slug_habilidade",
109
+ "name": "Nome da Habilidade",
110
+ "level": 1,
111
+ "description": "...",
112
+ "choices": [
113
+ {
114
+ "id": "opcao",
115
+ "name": "Nome Opção",
116
+ "description": "...",
117
+ "key_attribute": "int",
118
+ "special_rules": { ... }
119
+ }
120
+ ]
121
+ }
122
+ ],
123
+ "powers": ["poder1", "poder2", ...]
124
+ }
125
+
126
+ Notas:
127
+ - Não inclua "poder_de_[classe]" nas class_features, é implícito
128
+ - powers: lista de slugs dos poderes disponíveis para a classe
129
+ - proficiencies: armaduras_leves, armaduras_pesadas, escudos, armas_simples, armas_marciais, armas_de_fogo, etc.
130
+
131
+ TEXTO DA CLASSE:
132
+ """,
133
+ "example": ""
134
+ },
135
+
136
+ "origens": {
137
+ "instruction": """Extraia os dados da ORIGEM a seguir e retorne um JSON válido.
138
+
139
+ Estrutura esperada:
140
+ {
141
+ "id": "slug_origem",
142
+ "name": "Nome da Origem",
143
+ "description": "Texto descritivo...",
144
+ "items": [
145
+ { "id": "slug_item", "name": "Nome do Item" },
146
+ { "id": "slug_item", "name": "Nome do Item", "value": 300 },
147
+ { "choose": 1, "from": [{ "id": "item1", "name": "Item 1" }, ...] }
148
+ ],
149
+ "benefits": {
150
+ "skills": ["pericia1", "pericia2"],
151
+ "powers": ["poder1", "poder2"],
152
+ "special_choices": [
153
+ { "type": "poder_de_combate", "choose": 1 }
154
+ ],
155
+ "choose": 2
156
+ },
157
+ "unique_power": {
158
+ "id": "slug_poder",
159
+ "name": "Nome do Poder",
160
+ "description": "Descrição completa...",
161
+ "effects": [...]
162
+ }
163
+ }
164
+
165
+ Notas:
166
+ - benefits.choose geralmente é 2
167
+ - special_choices para casos como "um poder de combate a sua escolha"
168
+ - unique_power é o poder exclusivo da origem
169
+
170
+ TEXTO DA ORIGEM:
171
+ """,
172
+ "example": ""
173
+ },
174
+
175
+ "divindades": {
176
+ "instruction": """Extraia os dados da DIVINDADE a seguir e retorne um JSON válido.
177
+
178
+ Estrutura esperada:
179
+ {
180
+ "id": "slug_divindade",
181
+ "name": "Nome",
182
+ "title": "Deus/Deusa de...",
183
+ "description": "Texto descritivo...",
184
+ "beliefs_and_goals": [
185
+ "Crença ou objetivo 1",
186
+ "Crença ou objetivo 2"
187
+ ],
188
+ "holy_symbol": "Descrição do símbolo sagrado",
189
+ "channel_energy": "positiva|negativa|qualquer",
190
+ "preferred_weapon": "slug_arma",
191
+ "devotees": {
192
+ "races": ["raca1", "raca2"],
193
+ "classes": ["classe1", "classe2"]
194
+ },
195
+ "granted_powers": ["poder1", "poder2", "poder3", "poder4"],
196
+ "obligations_and_restrictions": [
197
+ {
198
+ "type": "tipo_restricao",
199
+ "description": "Descrição da restrição..."
200
+ }
201
+ ]
202
+ }
203
+
204
+ Notas:
205
+ - channel_energy: "positiva", "negativa" ou "qualquer"
206
+ - Humanos e clérigos podem ser devotos de qualquer deus (não precisa listar)
207
+ - granted_powers: sempre 4 poderes concedidos
208
+
209
+ TEXTO DA DIVINDADE:
210
+ """,
211
+ "example": ""
212
+ },
213
+
214
+ "pericias": {
215
+ "instruction": """Extraia os dados da PERÍCIA a seguir e retorne um JSON válido.
216
+
217
+ Estrutura esperada:
218
+ {
219
+ "id": "slug_pericia",
220
+ "name": "Nome da Perícia",
221
+ "key_attribute": "for|des|con|int|sab|car",
222
+ "armor_penalty": true|false,
223
+ "trained_only": true|false,
224
+ "description": "Descrição geral...",
225
+ "uses": [
226
+ {
227
+ "id": "slug_uso",
228
+ "name": "Nome do Uso",
229
+ "cd": 15,
230
+ "trained_only": false,
231
+ "action": "padrao|movimento|completa|reacao|livre|parte_do_movimento",
232
+ "description": "Descrição do uso...",
233
+ "cd_table": [
234
+ { "condition": "condição", "cd": 10 }
235
+ ],
236
+ "effects": [
237
+ { "on_success": "efeito" },
238
+ { "on_fail": "efeito" },
239
+ { "on_fail_by_5": "efeito" }
240
+ ]
241
+ }
242
+ ]
243
+ }
244
+
245
+ Notas:
246
+ - armor_penalty: true se tiver "Armadura" na linha de atributos
247
+ - trained_only: true se tiver "Treinada" na linha de atributos
248
+ - cd pode ser número ou "teste_oposto"
249
+ - cd_table para CDs variáveis
250
+
251
+ TEXTO DA PERÍCIA:
252
+ """,
253
+ "example": ""
254
+ },
255
+
256
+ "magias": {
257
+ "instruction": """Extraia os dados da MAGIA a seguir e retorne um JSON válido.
258
+
259
+ Estrutura esperada:
260
+ {
261
+ "id": "slug_magia",
262
+ "name": "Nome da Magia",
263
+ "type": "arcana|divina|universal",
264
+ "circle": 1,
265
+ "school": "abjur|adiv|conv|encan|evoc|ilusao|necro|trans",
266
+ "execution": "padrao|movimento|completa|livre|reacao",
267
+ "execution_details": null,
268
+ "range": "pessoal|toque|curto|medio|longo|ilimitado",
269
+ "target": {
270
+ "amount": 1,
271
+ "up_to": null,
272
+ "type": "criatura|objeto|area|voce"
273
+ },
274
+ "effect": "alvo|area|...",
275
+ "effect_details": {
276
+ "shape": "esfera|cone|linha|cubo",
277
+ "dimension": "raio|comprimento",
278
+ "size": "6m"
279
+ },
280
+ "duration": "instantanea|cena|sustentada|1_dia|permanente",
281
+ "duration_details": null,
282
+ "resistance": {
283
+ "effect": "anula|parcial|reduz_metade",
284
+ "skill": "fortitude|reflexos|vontade"
285
+ },
286
+ "extra_costs": null,
287
+ "description": "Descrição completa...",
288
+ "enhancements": [
289
+ {
290
+ "cost": 2,
291
+ "type": "aumenta|muda",
292
+ "description": "Descrição do aprimoramento..."
293
+ }
294
+ ],
295
+ "effects": [
296
+ {
297
+ "type": "dano|bonus|cura|condicao",
298
+ "amount": "6d6",
299
+ "damage_type": "fogo|frio|eletricidade|acido|..."
300
+ }
301
+ ]
302
+ }
303
+
304
+ Notas:
305
+ - circle: número de 1 a 5
306
+ - school: abjur (abjuração), adiv (adivinhação), conv (convocação), encan (encantamento), evoc (evocação), ilusao (ilusão), necro (necromancia), trans (transmutação)
307
+ - range: curto=6m, medio=30m, longo=90m
308
+
309
+ TEXTO DA MAGIA:
310
+ """,
311
+ "example": ""
312
+ },
313
+
314
+ "poderes": {
315
+ "instruction": """Extraia os dados do PODER a seguir e retorne um JSON válido.
316
+
317
+ Estrutura esperada:
318
+ {
319
+ "id": "slug_poder",
320
+ "name": "Nome do Poder",
321
+ "type": "poder_geral|habilidade_de_classe",
322
+ "sub_type": "poder_de_combate|poder_de_destino|poder_de_magia|poder_de_[classe]",
323
+ "description": "Descrição completa...",
324
+ "requirements": [
325
+ {
326
+ "type": "attr_value|character_lvl|skill_training|feature|power",
327
+ "attr": "for|des|con|int|sab|car",
328
+ "value": 13,
329
+ "skill": "slug_pericia",
330
+ "power": "slug_poder",
331
+ "feature": "slug_habilidade"
332
+ }
333
+ ],
334
+ "effects": [
335
+ {
336
+ "type": "tipo_efeito",
337
+ "value": "valor",
338
+ "description": "descrição se necessário"
339
+ }
340
+ ],
341
+ "costs": [
342
+ { "type": "PM", "value": 1 },
343
+ { "type": "acao", "value": "movimento" }
344
+ ]
345
+ }
346
+
347
+ Notas:
348
+ - requirements pode ser null se não houver pré-requisitos
349
+ - effects pode ser null se o efeito for puramente descritivo
350
+ - costs pode ser null se não houver custo
351
+
352
+ TEXTO DO PODER:
353
+ """,
354
+ "example": ""
355
+ },
356
+
357
+ # ===========================================
358
+ # EQUIPAMENTO
359
+ # ===========================================
360
+
361
+ "armas": {
362
+ "instruction": """Extraia os dados da ARMA a seguir e retorne um JSON válido.
363
+
364
+ Estrutura esperada:
365
+ {
366
+ "id": "slug_arma",
367
+ "name": "Nome da Arma",
368
+ "category": "simples|marcial|exotica|fogo",
369
+ "type": "corpo_a_corpo|distancia|arremesso",
370
+ "price": 10,
371
+ "damage": "1d8",
372
+ "damage_type": "corte|perfuracao|impacto",
373
+ "critical": "19|20/x2|x3",
374
+ "range": null,
375
+ "weight": "1kg",
376
+ "properties": ["leve", "duas_maos", "alcance", ...],
377
+ "description": "Descrição se houver..."
378
+ }
379
+
380
+ Notas:
381
+ - price em T$ (tibares)
382
+ - properties: leve, pesada, duas_maos, versatil, alcance, arremesso, munição, recarga, etc.
383
+ - range só para armas de distância/arremesso (em metros)
384
+
385
+ TEXTO DA ARMA:
386
+ """,
387
+ "example": ""
388
+ },
389
+
390
+ "armaduras": {
391
+ "instruction": """Extraia os dados da ARMADURA ou ESCUDO a seguir e retorne um JSON válido.
392
+
393
+ Estrutura esperada:
394
+ {
395
+ "id": "slug_armadura",
396
+ "name": "Nome da Armadura",
397
+ "type": "leve|pesada|escudo",
398
+ "price": 100,
399
+ "defense_bonus": 4,
400
+ "armor_penalty": -2,
401
+ "weight": "10kg",
402
+ "description": "Descrição se houver..."
403
+ }
404
+
405
+ Notas:
406
+ - price em T$ (tibares)
407
+ - defense_bonus: bônus na Defesa
408
+ - armor_penalty: penalidade de armadura (valor negativo)
409
+
410
+ TEXTO DA ARMADURA:
411
+ """,
412
+ "example": ""
413
+ },
414
+
415
+ "itens_gerais": {
416
+ "instruction": """Extraia os dados do ITEM GERAL a seguir e retorne um JSON válido.
417
+
418
+ Estrutura esperada:
419
+ {
420
+ "id": "slug_item",
421
+ "name": "Nome do Item",
422
+ "category": "alimentacao|alquimia|vestuario|servico|transporte|hospedagem|animal|kit|ferramenta",
423
+ "price": 10,
424
+ "weight": "1kg",
425
+ "description": "Descrição do item..."
426
+ }
427
+
428
+ Notas:
429
+ - price em T$ (tibares)
430
+ - weight pode ser null para itens sem peso significativo
431
+
432
+ TEXTO DO ITEM:
433
+ """,
434
+ "example": ""
435
+ },
436
+
437
+ "itens_superiores": {
438
+ "instruction": """Extraia os dados do ITEM SUPERIOR a seguir e retorne um JSON válido.
439
+
440
+ Estrutura esperada:
441
+ {
442
+ "id": "slug_item",
443
+ "name": "Nome do Item Superior",
444
+ "base_item": "slug_item_base",
445
+ "type": "arma|armadura|escudo",
446
+ "price_modifier": "+500",
447
+ "effects": [
448
+ {
449
+ "type": "tipo_efeito",
450
+ "value": "valor",
451
+ "description": "descrição"
452
+ }
453
+ ],
454
+ "description": "Descrição completa..."
455
+ }
456
+
457
+ Notas:
458
+ - price_modifier: custo adicional sobre o item base
459
+ - base_item: referência ao item base (se aplicável)
460
+
461
+ TEXTO DO ITEM SUPERIOR:
462
+ """,
463
+ "example": ""
464
+ },
465
+
466
+ # ===========================================
467
+ # CRIATURAS E PERIGOS
468
+ # ===========================================
469
+
470
+ "criaturas": {
471
+ "instruction": """Extraia os dados da CRIATURA a seguir e retorne um JSON válido.
472
+
473
+ Estrutura esperada:
474
+ {
475
+ "id": "slug_criatura",
476
+ "name": "Nome da Criatura",
477
+ "nd": 5,
478
+ "type": "animal|construto|espirito|humanode|monstro|morto_vivo",
479
+ "size": "minusculo|pequeno|medio|grande|enorme|colossal",
480
+ "attributes": {
481
+ "for": 10, "des": 10, "con": 10, "int": 10, "sab": 10, "car": 10
482
+ },
483
+ "defense": 15,
484
+ "hit_points": 50,
485
+ "speed": 9,
486
+ "special_movement": ["voo_18m", "natacao_9m", ...],
487
+ "resistances": ["fogo_10", ...],
488
+ "immunities": ["veneno", "medo", ...],
489
+ "vulnerabilities": ["frio", ...],
490
+ "senses": ["visao_no_escuro", "faro", ...],
491
+ "attacks": [
492
+ {
493
+ "name": "Mordida",
494
+ "bonus": "+10",
495
+ "damage": "2d6+5",
496
+ "damage_type": "perfuracao",
497
+ "special": "descrição se houver"
498
+ }
499
+ ],
500
+ "abilities": [
501
+ {
502
+ "id": "slug_habilidade",
503
+ "name": "Nome",
504
+ "description": "Descrição..."
505
+ }
506
+ ],
507
+ "treasure": "padrao|dobro|triplo|nenhum|especifico",
508
+ "description": "Descrição da criatura..."
509
+ }
510
+
511
+ Notas:
512
+ - nd: Nível de Desafio
513
+ - speed em metros
514
+ - treasure indica o tesouro padrão da criatura
515
+
516
+ TEXTO DA CRIATURA:
517
+ """,
518
+ "example": ""
519
+ },
520
+
521
+ "perigos": {
522
+ "instruction": """Extraia os dados do PERIGO a seguir e retorne um JSON válido.
523
+
524
+ Estrutura esperada:
525
+ {
526
+ "id": "slug_perigo",
527
+ "name": "Nome do Perigo",
528
+ "type": "armadilha|ambiente|magico",
529
+ "nd": 3,
530
+ "detection": {
531
+ "skill": "percepcao|investigacao",
532
+ "cd": 20
533
+ },
534
+ "disarm": {
535
+ "skill": "ladinagem|misticismo",
536
+ "cd": 20
537
+ },
538
+ "trigger": "Descrição do gatilho...",
539
+ "effect": "Descrição do efeito...",
540
+ "damage": "4d6",
541
+ "damage_type": "perfuracao|fogo|veneno|...",
542
+ "save": {
543
+ "skill": "reflexos|fortitude|vontade",
544
+ "cd": 15,
545
+ "effect": "metade|anula"
546
+ },
547
+ "description": "Descrição completa..."
548
+ }
549
+
550
+ TEXTO DO PERIGO:
551
+ """,
552
+ "example": ""
553
+ },
554
+
555
+ # ===========================================
556
+ # RECOMPENSAS E ITENS MÁGICOS
557
+ # ===========================================
558
+
559
+ "tesouros": {
560
+ "instruction": """Extraia os dados do TESOURO a seguir e retorne um JSON válido.
561
+
562
+ Estrutura esperada:
563
+ {
564
+ "id": "slug_tesouro",
565
+ "name": "Nome do Tesouro",
566
+ "category": "gema|joia|arte|material|outros",
567
+ "value": 100,
568
+ "value_range": { "min": 50, "max": 150 },
569
+ "description": "Descrição..."
570
+ }
571
+
572
+ Notas:
573
+ - value em T$ (tibares)
574
+ - value_range para itens com valor variável
575
+
576
+ TEXTO DO TESOURO:
577
+ """,
578
+ "example": ""
579
+ },
580
+
581
+ "itens_magicos_armas": {
582
+ "instruction": """Extraia os dados da ARMA MÁGICA a seguir e retorne um JSON válido.
583
+
584
+ Estrutura esperada:
585
+ {
586
+ "id": "slug_arma_magica",
587
+ "name": "Nome da Arma",
588
+ "type": "arma",
589
+ "rarity": "menor|medio|maior",
590
+ "aura": "abjur|adiv|conv|encan|evoc|ilusao|necro|trans",
591
+ "price": 5000,
592
+ "base_item": "espada_longa",
593
+ "enhancement_bonus": 1,
594
+ "abilities": [
595
+ {
596
+ "id": "slug_habilidade",
597
+ "name": "Nome",
598
+ "description": "Descrição..."
599
+ }
600
+ ],
601
+ "description": "Descrição completa..."
602
+ }
603
+
604
+ TEXTO DA ARMA MÁGICA:
605
+ """,
606
+ "example": ""
607
+ },
608
+
609
+ "itens_magicos_armaduras": {
610
+ "instruction": """Extraia os dados da ARMADURA/ESCUDO MÁGICO a seguir e retorne um JSON válido.
611
+
612
+ Estrutura esperada:
613
+ {
614
+ "id": "slug_armadura_magica",
615
+ "name": "Nome da Armadura",
616
+ "type": "armadura|escudo",
617
+ "rarity": "menor|medio|maior",
618
+ "aura": "abjur|adiv|conv|encan|evoc|ilusao|necro|trans",
619
+ "price": 5000,
620
+ "base_item": "cota_de_malha",
621
+ "enhancement_bonus": 1,
622
+ "abilities": [
623
+ {
624
+ "id": "slug_habilidade",
625
+ "name": "Nome",
626
+ "description": "Descrição..."
627
+ }
628
+ ],
629
+ "description": "Descrição completa..."
630
+ }
631
+
632
+ TEXTO DA ARMADURA MÁGICA:
633
+ """,
634
+ "example": ""
635
+ },
636
+
637
+ "pocoes_pergaminhos": {
638
+ "instruction": """Extraia os dados da POÇÃO ou PERGAMINHO a seguir e retorne um JSON válido.
639
+
640
+ Estrutura esperada:
641
+ {
642
+ "id": "slug_item",
643
+ "name": "Nome do Item",
644
+ "type": "pocao|pergaminho",
645
+ "spell": "slug_magia",
646
+ "spell_circle": 1,
647
+ "price": 50,
648
+ "description": "Descrição..."
649
+ }
650
+
651
+ Notas:
652
+ - spell: referência à magia contida
653
+ - price em T$ (tibares)
654
+
655
+ TEXTO DO ITEM:
656
+ """,
657
+ "example": ""
658
+ },
659
+
660
+ "acessorios": {
661
+ "instruction": """Extraia os dados do ACESSÓRIO MÁGICO a seguir e retorne um JSON válido.
662
+
663
+ Estrutura esperada:
664
+ {
665
+ "id": "slug_acessorio",
666
+ "name": "Nome do Acessório",
667
+ "slot": "cabeca|olhos|pescoco|ombros|torso|corpo|cintura|bracos|maos|anel|pes|nenhum",
668
+ "rarity": "menor|medio|maior",
669
+ "aura": "abjur|adiv|conv|encan|evoc|ilusao|necro|trans",
670
+ "price": 2000,
671
+ "abilities": [
672
+ {
673
+ "id": "slug_habilidade",
674
+ "name": "Nome",
675
+ "description": "Descrição...",
676
+ "activation": "constante|uso|comando",
677
+ "uses_per_day": null
678
+ }
679
+ ],
680
+ "description": "Descrição completa..."
681
+ }
682
+
683
+ Notas:
684
+ - slot: local do corpo onde o acessório é usado
685
+ - activation: como a habilidade é ativada
686
+
687
+ TEXTO DO ACESSÓRIO:
688
+ """,
689
+ "example": ""
690
+ },
691
+
692
+ "artefatos": {
693
+ "instruction": """Extraia os dados do ARTEFATO a seguir e retorne um JSON válido.
694
+
695
+ Estrutura esperada:
696
+ {
697
+ "id": "slug_artefato",
698
+ "name": "Nome do Artefato",
699
+ "type": "arma|armadura|acessorio|outro",
700
+ "slot": "cabeca|maos|nenhum|...",
701
+ "aura": "forte",
702
+ "abilities": [
703
+ {
704
+ "id": "slug_habilidade",
705
+ "name": "Nome",
706
+ "description": "Descrição..."
707
+ }
708
+ ],
709
+ "drawbacks": [
710
+ {
711
+ "description": "Desvantagem ou maldição..."
712
+ }
713
+ ],
714
+ "destruction": "Como destruir o artefato...",
715
+ "history": "História/lore do artefato...",
716
+ "description": "Descrição completa..."
717
+ }
718
+
719
+ Notas:
720
+ - Artefatos são itens únicos e lendários
721
+ - drawbacks: desvantagens ou maldições do artefato
722
+ - destruction: condições para destruir (se aplicável)
723
+
724
+ TEXTO DO ARTEFATO:
725
+ """,
726
+ "example": ""
727
+ },
728
+
729
+ "condicoes": {
730
+ "instruction": """Extraia os dados da CONDIÇÃO a seguir e retorne um JSON válido.
731
+
732
+ Estrutura esperada:
733
+ {
734
+ "id": "slug_condicao",
735
+ "name": "Nome da Condição",
736
+ "description": "Descrição completa da condição...",
737
+ "effects": [
738
+ {
739
+ "type": "penalty|bonus|restriction|immunity",
740
+ "target": "ataque|defesa|deslocamento|pericias|...",
741
+ "value": -2,
742
+ "description": "Descrição do efeito"
743
+ }
744
+ ],
745
+ "duration": "ate_curar|1_rodada|cena|permanente",
746
+ "removal": "Como remover a condição..."
747
+ }
748
+
749
+ Notas:
750
+ - effects: lista de efeitos mecânicos da condição
751
+ - removal: condições para remover (se aplicável)
752
+
753
+ TEXTO DA CONDIÇÃO:
754
+ """,
755
+ "example": ""
756
+ }
757
+ }
758
+
759
+
760
+ # Mapeamento de tipos para prompts (para tipos que compartilham estrutura)
761
+ PROMPT_FALLBACKS = {
762
+ "poderes_combate": "poderes",
763
+ "poderes_destino": "poderes",
764
+ "poderes_magia": "poderes",
765
+ "poderes_concedidos": "poderes",
766
+ "poderes_tormenta": "poderes",
767
+ }
768
+
769
+
770
+ def get_prompt(entity_type: str, content: str) -> tuple[str, str]:
771
+ """
772
+ Retorna o prompt formatado para uma entidade.
773
+
774
+ Returns:
775
+ Tupla com (system_prompt, user_prompt)
776
+ """
777
+ # Usa fallback se o tipo não tiver prompt específico
778
+ prompt_type = PROMPT_FALLBACKS.get(entity_type, entity_type)
779
+
780
+ if prompt_type not in PROMPTS:
781
+ raise ValueError(f"Tipo de entidade desconhecido: {entity_type}. Tipos disponíveis: {list(PROMPTS.keys())}")
782
+
783
+ prompt_config = PROMPTS[prompt_type]
784
+ user_prompt = prompt_config["instruction"] + content
785
+
786
+ if prompt_config.get("example"):
787
+ user_prompt += f"\n\nEXEMPLO DE OUTPUT:\n{prompt_config['example']}"
788
+
789
+ return SYSTEM_PROMPT, user_prompt