tormenta20 0.2.16 → 0.2.18

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 (167) hide show
  1. checksums.yaml +4 -4
  2. data/db/schema.sql +76 -0
  3. data/db/tormenta20.sqlite3 +0 -0
  4. data/src/json/itens_magicos/acessorios/amuleto_da_robustez.json +14 -0
  5. data/src/json/itens_magicos/acessorios/anel_da_energia.json +12 -0
  6. data/src/json/itens_magicos/acessorios/anel_da_liberdade.json +10 -0
  7. data/src/json/itens_magicos/acessorios/anel_da_protecao.json +12 -0
  8. data/src/json/itens_magicos/acessorios/anel_da_regeneracao.json +12 -0
  9. data/src/json/itens_magicos/acessorios/anel_da_vitalidade.json +12 -0
  10. data/src/json/itens_magicos/acessorios/anel_de_invisibilidade.json +10 -0
  11. data/src/json/itens_magicos/acessorios/anel_de_telecinesia.json +19 -0
  12. data/src/json/itens_magicos/acessorios/anel_do_escudo_mental.json +10 -0
  13. data/src/json/itens_magicos/acessorios/anel_do_sustento.json +10 -0
  14. data/src/json/itens_magicos/acessorios/anel_refletor.json +19 -0
  15. data/src/json/itens_magicos/acessorios/bainha_magica.json +19 -0
  16. data/src/json/itens_magicos/acessorios/bola_de_cristal.json +19 -0
  17. data/src/json/itens_magicos/acessorios/botas_aladas.json +19 -0
  18. data/src/json/itens_magicos/acessorios/botas_velozes.json +20 -0
  19. data/src/json/itens_magicos/acessorios/bracadeiras_do_arqueiro.json +12 -0
  20. data/src/json/itens_magicos/acessorios/braceletes_de_bronze.json +13 -0
  21. data/src/json/itens_magicos/acessorios/braceletes_de_ouro.json +13 -0
  22. data/src/json/itens_magicos/acessorios/brincos_da_sagacidade.json +14 -0
  23. data/src/json/itens_magicos/acessorios/brincos_de_marah.json +10 -0
  24. data/src/json/itens_magicos/acessorios/caveira_maldita.json +10 -0
  25. data/src/json/itens_magicos/acessorios/chapeu_do_disfarce.json +19 -0
  26. data/src/json/itens_magicos/acessorios/cinto_da_forca_do_gigante.json +14 -0
  27. data/src/json/itens_magicos/acessorios/cinto_do_campeao.json +14 -0
  28. data/src/json/itens_magicos/acessorios/colar_guardiao.json +12 -0
  29. data/src/json/itens_magicos/acessorios/corda_da_escalada.json +10 -0
  30. data/src/json/itens_magicos/acessorios/coroa_majestosa.json +14 -0
  31. data/src/json/itens_magicos/acessorios/elmo_do_teletransporte.json +25 -0
  32. data/src/json/itens_magicos/acessorios/espelho_da_oposicao.json +10 -0
  33. data/src/json/itens_magicos/acessorios/espelho_do_aprisionamento.json +10 -0
  34. data/src/json/itens_magicos/acessorios/estatueta_animista.json +10 -0
  35. data/src/json/itens_magicos/acessorios/estola_da_serenidade.json +14 -0
  36. data/src/json/itens_magicos/acessorios/faixas_do_pugilista.json +13 -0
  37. data/src/json/itens_magicos/acessorios/ferraduras_da_velocidade.json +10 -0
  38. data/src/json/itens_magicos/acessorios/flauta_fantasma.json +19 -0
  39. data/src/json/itens_magicos/acessorios/garrafa_da_fumaca_eterna.json +19 -0
  40. data/src/json/itens_magicos/acessorios/gema_da_luminosidade.json +19 -0
  41. data/src/json/itens_magicos/acessorios/gema_da_telepatia.json +25 -0
  42. data/src/json/itens_magicos/acessorios/gema_elemental.json +19 -0
  43. data/src/json/itens_magicos/acessorios/lanterna_da_revelacao.json +10 -0
  44. data/src/json/itens_magicos/acessorios/luvas_da_delicadeza.json +14 -0
  45. data/src/json/itens_magicos/acessorios/manoplas_da_forca_do_ogro.json +14 -0
  46. data/src/json/itens_magicos/acessorios/manto_da_aranha.json +20 -0
  47. data/src/json/itens_magicos/acessorios/manto_da_resistencia.json +12 -0
  48. data/src/json/itens_magicos/acessorios/manto_do_fascinio.json +14 -0
  49. data/src/json/itens_magicos/acessorios/manto_do_morcego.json +22 -0
  50. data/src/json/itens_magicos/acessorios/manto_elfico.json +14 -0
  51. data/src/json/itens_magicos/acessorios/manual_da_saude_corporal.json +10 -0
  52. data/src/json/itens_magicos/acessorios/manual_do_bom_exercicio.json +10 -0
  53. data/src/json/itens_magicos/acessorios/manual_dos_movimentos_precisos.json +10 -0
  54. data/src/json/itens_magicos/acessorios/medalhao_de_lena.json +10 -0
  55. data/src/json/itens_magicos/acessorios/mochila_de_carga.json +10 -0
  56. data/src/json/itens_magicos/acessorios/orbe_das_tempestades.json +25 -0
  57. data/src/json/itens_magicos/acessorios/pingente_da_saude.json +10 -0
  58. data/src/json/itens_magicos/acessorios/pingente_da_sensatez.json +14 -0
  59. data/src/json/itens_magicos/acessorios/pulseiras_da_celeridade.json +14 -0
  60. data/src/json/itens_magicos/acessorios/robe_do_arquimago.json +10 -0
  61. data/src/json/itens_magicos/acessorios/simbolo_aben/303/247oado.json +10 -0
  62. data/src/json/itens_magicos/acessorios/tapete_voador.json +10 -0
  63. data/src/json/itens_magicos/acessorios/tiara_da_sapiencia.json +14 -0
  64. data/src/json/itens_magicos/acessorios/tomo_da_compreensao.json +10 -0
  65. data/src/json/itens_magicos/acessorios/tomo_da_lideranca_e_influencia.json +10 -0
  66. data/src/json/itens_magicos/acessorios/tomo_dos_grandes_pensamentos.json +10 -0
  67. data/src/json/itens_magicos/acessorios/torque_do_vigor.json +14 -0
  68. data/src/json/itens_magicos/acessorios/vassoura_voadora.json +10 -0
  69. data/src/json/itens_magicos/pocoes/aben/303/247oar_alimentos.json +13 -0
  70. data/src/json/itens_magicos/pocoes/alterar_tamanho.json +13 -0
  71. data/src/json/itens_magicos/pocoes/aparencia_perfeita.json +13 -0
  72. data/src/json/itens_magicos/pocoes/area_escorregadia.json +13 -0
  73. data/src/json/itens_magicos/pocoes/arma_magica.json +13 -0
  74. data/src/json/itens_magicos/pocoes/arma_magica_maior.json +13 -0
  75. data/src/json/itens_magicos/pocoes/armamento_da_natureza.json +13 -0
  76. data/src/json/itens_magicos/pocoes/bola_de_fogo.json +13 -0
  77. data/src/json/itens_magicos/pocoes/bola_de_fogo_maior.json +13 -0
  78. data/src/json/itens_magicos/pocoes/camuflagem_ilusoria.json +13 -0
  79. data/src/json/itens_magicos/pocoes/compreensao.json +13 -0
  80. data/src/json/itens_magicos/pocoes/concentracao_de_combate.json +13 -0
  81. data/src/json/itens_magicos/pocoes/curar_ferimentos_maior.json +13 -0
  82. data/src/json/itens_magicos/pocoes/curar_ferimentos_maior2.json +13 -0
  83. data/src/json/itens_magicos/pocoes/curar_ferimentos_medio.json +13 -0
  84. data/src/json/itens_magicos/pocoes/curar_ferimentos_menor.json +13 -0
  85. data/src/json/itens_magicos/pocoes/disfarce_ilusorio.json +13 -0
  86. data/src/json/itens_magicos/pocoes/escudo_da_fe.json +13 -0
  87. data/src/json/itens_magicos/pocoes/escuridao.json +13 -0
  88. data/src/json/itens_magicos/pocoes/fisico_divino.json +13 -0
  89. data/src/json/itens_magicos/pocoes/fisico_divino_maior.json +13 -0
  90. data/src/json/itens_magicos/pocoes/invisibilidade.json +13 -0
  91. data/src/json/itens_magicos/pocoes/luz.json +13 -0
  92. data/src/json/itens_magicos/pocoes/mente_divina.json +13 -0
  93. data/src/json/itens_magicos/pocoes/metamorfose.json +13 -0
  94. data/src/json/itens_magicos/pocoes/nevoa.json +13 -0
  95. data/src/json/itens_magicos/pocoes/primor_atletico.json +13 -0
  96. data/src/json/itens_magicos/pocoes/protecao_divina.json +13 -0
  97. data/src/json/itens_magicos/pocoes/purificacao.json +13 -0
  98. data/src/json/itens_magicos/pocoes/resistencia_a_energia.json +13 -0
  99. data/src/json/itens_magicos/pocoes/sono.json +13 -0
  100. data/src/json/itens_magicos/pocoes/suporte_ambiental.json +13 -0
  101. data/src/json/itens_magicos/pocoes/tranca_arcana.json +13 -0
  102. data/src/json/itens_magicos/pocoes/velocidade.json +13 -0
  103. data/src/json/itens_magicos/pocoes/vestimenta_da_fe.json +13 -0
  104. data/src/json/itens_magicos/pocoes/visao_mistica.json +13 -0
  105. data/src/json/itens_magicos/pocoes/vitalidade_fantasma.json +13 -0
  106. data/src/json/itens_magicos/pocoes/voz_divina.json +13 -0
  107. data/src/json/itens_superiores/encantamentos/armaduras_escudos/abascanto.json +10 -0
  108. data/src/json/itens_superiores/encantamentos/armaduras_escudos/abencado.json +10 -0
  109. data/src/json/itens_superiores/encantamentos/armaduras_escudos/acrobatico.json +10 -0
  110. data/src/json/itens_superiores/encantamentos/armaduras_escudos/alado.json +10 -0
  111. data/src/json/itens_superiores/encantamentos/armaduras_escudos/animado.json +11 -0
  112. data/src/json/itens_superiores/encantamentos/armaduras_escudos/assustador.json +10 -0
  113. data/src/json/itens_superiores/encantamentos/armaduras_escudos/caustica.json +10 -0
  114. data/src/json/itens_superiores/encantamentos/armaduras_escudos/defensor.json +11 -0
  115. data/src/json/itens_superiores/encantamentos/armaduras_escudos/escorregadio.json +10 -0
  116. data/src/json/itens_superiores/encantamentos/armaduras_escudos/esmacador.json +11 -0
  117. data/src/json/itens_superiores/encantamentos/armaduras_escudos/fantasmagorico.json +10 -0
  118. data/src/json/itens_superiores/encantamentos/armaduras_escudos/fortificado.json +10 -0
  119. data/src/json/itens_superiores/encantamentos/armaduras_escudos/gelido.json +10 -0
  120. data/src/json/itens_superiores/encantamentos/armaduras_escudos/guardiao.json +13 -0
  121. data/src/json/itens_superiores/encantamentos/armaduras_escudos/hipnotico.json +10 -0
  122. data/src/json/itens_superiores/encantamentos/armaduras_escudos/ilusorio.json +10 -0
  123. data/src/json/itens_superiores/encantamentos/armaduras_escudos/incandescente.json +10 -0
  124. data/src/json/itens_superiores/encantamentos/armaduras_escudos/invulneravel.json +10 -0
  125. data/src/json/itens_superiores/encantamentos/armaduras_escudos/opaco.json +10 -0
  126. data/src/json/itens_superiores/encantamentos/armaduras_escudos/protetor.json +10 -0
  127. data/src/json/itens_superiores/encantamentos/armaduras_escudos/refletor.json +10 -0
  128. data/src/json/itens_superiores/encantamentos/armaduras_escudos/relampejante.json +10 -0
  129. data/src/json/itens_superiores/encantamentos/armaduras_escudos/reluzente.json +10 -0
  130. data/src/json/itens_superiores/encantamentos/armaduras_escudos/sombrio.json +10 -0
  131. data/src/json/itens_superiores/encantamentos/armaduras_escudos/zeloso.json +10 -0
  132. data/src/json/itens_superiores/encantamentos/armas/ameacadora.json +10 -0
  133. data/src/json/itens_superiores/encantamentos/armas/anticriatura.json +10 -0
  134. data/src/json/itens_superiores/encantamentos/armas/arremesso.json +10 -0
  135. data/src/json/itens_superiores/encantamentos/armas/assassina.json +10 -0
  136. data/src/json/itens_superiores/encantamentos/armas/cacadora.json +10 -0
  137. data/src/json/itens_superiores/encantamentos/armas/congelante.json +12 -0
  138. data/src/json/itens_superiores/encantamentos/armas/conjuradora.json +10 -0
  139. data/src/json/itens_superiores/encantamentos/armas/corrosiva.json +12 -0
  140. data/src/json/itens_superiores/encantamentos/armas/dancarina.json +10 -0
  141. data/src/json/itens_superiores/encantamentos/armas/defensora.json +11 -0
  142. data/src/json/itens_superiores/encantamentos/armas/destruidora.json +10 -0
  143. data/src/json/itens_superiores/encantamentos/armas/dilacerante.json +10 -0
  144. data/src/json/itens_superiores/encantamentos/armas/drenante.json +10 -0
  145. data/src/json/itens_superiores/encantamentos/armas/eletrica.json +12 -0
  146. data/src/json/itens_superiores/encantamentos/armas/energetica.json +13 -0
  147. data/src/json/itens_superiores/encantamentos/armas/excruciante.json +10 -0
  148. data/src/json/itens_superiores/encantamentos/armas/flamejante.json +12 -0
  149. data/src/json/itens_superiores/encantamentos/armas/formidavel.json +12 -0
  150. data/src/json/itens_superiores/encantamentos/armas/lancinante.json +12 -0
  151. data/src/json/itens_superiores/encantamentos/armas/magnifica.json +14 -0
  152. data/src/json/itens_superiores/encantamentos/armas/piedosa.json +10 -0
  153. data/src/json/itens_superiores/encantamentos/armas/profana.json +10 -0
  154. data/src/json/itens_superiores/encantamentos/armas/sagrada.json +10 -0
  155. data/src/json/itens_superiores/encantamentos/armas/sanguinaria.json +10 -0
  156. data/src/json/itens_superiores/encantamentos/armas/trovejante.json +10 -0
  157. data/src/json/itens_superiores/encantamentos/armas/tumular.json +12 -0
  158. data/src/json/itens_superiores/encantamentos/armas/veloz.json +10 -0
  159. data/src/json/itens_superiores/encantamentos/armas/venenosa.json +10 -0
  160. data/src/json/magias/curar_ferimentos.json +1 -1
  161. data/src/ruby/tormenta20/models/acessorio_magico.rb +25 -0
  162. data/src/ruby/tormenta20/models/encantamento.rb +44 -0
  163. data/src/ruby/tormenta20/models/pocao.rb +19 -0
  164. data/src/ruby/tormenta20/rules/pm_cap.rb +26 -0
  165. data/src/ruby/tormenta20/rules.rb +9 -0
  166. data/src/ruby/tormenta20.rb +30 -0
  167. metadata +163 -2
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "relampejante",
3
+ "name": "Relampejante",
4
+ "type": "encantamento",
5
+ "categoria": "armadura",
6
+ "efeito": {
7
+ "descricao_curta": "Redução de eletricidade 10; 2 PM: atacantes em corpo a corpo sofrem 2d6 de eletricidade"
8
+ },
9
+ "description": "Você recebe redução de eletricidade 10 e pode gastar uma ação de movimento e 2 PM para gerar arcos voltaicos até o fim da cena. Se fizer isso, qualquer criatura que o ataque em corpo a corpo sofre 2d6 pontos de dano de eletricidade. Um item relampejante é decorado com ouro, prata e cobre."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "reluzente",
3
+ "name": "Reluzente",
4
+ "type": "encantamento",
5
+ "categoria": "armadura",
6
+ "efeito": {
7
+ "descricao_curta": "2 PM: clarão de luz, inimigos em alcance curto ficam cegos 1 rodada (Reflexos CD Car evita)"
8
+ },
9
+ "description": "Você pode gastar uma ação de movimento e 2 PM para emitir um clarão de luz. Todos os inimigos em alcance curto devem passar num teste de Reflexos (CD Car) ou ficarão cegos por uma rodada. Um item reluzente é polido e brilhante."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "sombrio",
3
+ "name": "Sombrio",
4
+ "type": "encantamento",
5
+ "categoria": "armadura",
6
+ "efeito": {
7
+ "descricao_curta": "+5 em Furtividade; ignora penalidade de armadura para Furtividade"
8
+ },
9
+ "description": "Você recebe +5 em Furtividade e ignora a penalidade de armadura do item para testes dessa perícia. Um item sombrio é escuro, fosco e bem lubrificado, para não fazer barulho."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "zeloso",
3
+ "name": "Zeloso",
4
+ "type": "encantamento",
5
+ "categoria": "armadura",
6
+ "efeito": {
7
+ "descricao_curta": "Uma vez por rodada: gaste 1 PM para se tornar alvo de um ataque a um aliado adjacente"
8
+ },
9
+ "description": "Uma vez por rodada, se um aliado adjacente for alvo de um ataque, você pode gastar 1 PM para se tornar o alvo do ataque, que então é resolvido normalmente."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "ameacadora",
3
+ "name": "Ameaçadora",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Margem de ameaça duplica"
8
+ },
9
+ "description": "A margem de ameaça da arma duplica. Efeitos que duplicam a margem de ameaça são aplicados antes de quaisquer efeitos que a aumentem."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "anticriatura",
3
+ "name": "Anticriatura",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Uma vez por rodada vs. tipo de criatura: gasta 2 PM, +4d8 de dano"
8
+ },
9
+ "description": "A arma é letal contra um tipo de criatura (ou uma raça de humanoides). Uma vez por rodada, quando ataca uma criatura desse tipo, você pode gastar 2 PM. Se fizer isso e acertar o ataque, causa +4d8 de dano."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "arremesso",
3
+ "name": "Arremesso",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Pode ser arremessada em alcance curto; retorna após o ataque"
8
+ },
9
+ "description": "A arma pode ser arremessada em alcance curto. Caso já pudesse ser arremessada, seu alcance aumenta em uma categoria. Após o ataque, se estiver livre, a arma volta voando para você. Pegá-la é uma reação."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "assassina",
3
+ "name": "Assassina",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Ataque Furtivo usa d8; pode rolar novamente dados 1 por 2 PM"
8
+ },
9
+ "description": "A arma aumenta os dados de dano extra de um ataque furtivo para d8. Além disso, quando faz um Ataque Furtivo, você pode gastar 2 PM. Se fizer isso, pode rolar novamente quaisquer resultados 1 nesses dados de dano extra."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "cacadora",
3
+ "name": "Caçadora",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Ignora camuflagem leve/total e cobertura leve; armas à distância aumentam alcance"
8
+ },
9
+ "description": "A arma persegue o alvo, anulando penalidades por camuflagem leve e total e por cobertura leve. Caso a arma seja de ataque à distância, seu alcance também aumenta em uma categoria."
10
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "congelante",
3
+ "name": "Congelante",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "dano_extra": "1d6",
8
+ "tipo_dano_extra": "frio",
9
+ "descricao_curta": "+1d6 de dano de frio; por 2 PM enreda a vítima por uma rodada"
10
+ },
11
+ "description": "A arma causa +1d6 de dano de frio. Uma vez por rodada, quando ataca, você pode gastar 2 PM. Se fizer isso e acertar o ataque, a vítima fica enredada por uma rodada. Uma arma congelante é coberta por uma camada de gelo e névoa."
12
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "conjuradora",
3
+ "name": "Conjuradora",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Armazena uma magia; descarrega ao acertar o ataque"
8
+ },
9
+ "description": "Um conjurador pode lançar na arma uma magia que tenha como alvo uma criatura ou que afete uma área. A magia não gera efeito na hora; em vez disso, fica guardada no item. Quando acerta um ataque com a arma, você pode descarregar a magia guardada como uma ação livre e sem pagar seu custo. Uma vez que a magia seja descarregada, outra pode ser armazenada."
10
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "corrosiva",
3
+ "name": "Corrosiva",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "dano_extra": "1d6",
8
+ "tipo_dano_extra": "ácido",
9
+ "descricao_curta": "+1d6 de dano de ácido; por 2 PM a vítima sofre 4d4 de ácido na próxima rodada"
10
+ },
11
+ "description": "A arma causa +1d6 de dano de ácido. Uma vez por rodada, quando ataca, você pode gastar 2 PM. Se fizer isso e acertar o ataque, a vítima sofre 4d4 pontos de dano de ácido na próxima rodada. Uma arma corrosiva exala vapores e goteja líquido tóxico."
12
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "dancarina",
3
+ "name": "Dançarina",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Gaste 1 PM: a arma flutua e ataca sozinha em alcance curto (duração sustentada)"
8
+ },
9
+ "description": "Você pode gastar uma ação de movimento e 1 PM para fazer a arma flutuar e atacar uma criatura em alcance curto a sua escolha, com as mesmas estatísticas que teria se você a estivesse empunhando. Este efeito tem duração sustentada; se parar de sustentá-lo, a arma cai no chão."
10
+ }
@@ -0,0 +1,11 @@
1
+ {
2
+ "id": "defensora",
3
+ "name": "Defensora",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "bonus_defesa": 2,
8
+ "descricao_curta": "+2 na Defesa"
9
+ },
10
+ "description": "A arma se movimenta para aparar ataques contra você. Você recebe +2 na Defesa."
11
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "destruidora",
3
+ "name": "Destruidora",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "+2 ataque e +2d8 dano contra construtos e objetos"
8
+ },
9
+ "description": "Se usada contra construtos e objetos (com a manobra quebrar), a arma fornece +2 no teste de ataque e causa +2d8 de dano."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "dilacerante",
3
+ "name": "Dilacerante",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "+10 de dano em acertos críticos"
8
+ },
9
+ "description": "A arma inflige ferimentos profundos. Quando faz um acerto crítico com a arma, você causa +10 pontos de dano."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "drenante",
3
+ "name": "Drenante",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Crítico: vítima fica fraca, você ganha 2d10 PV temporários"
8
+ },
9
+ "description": "Quando você faz um acerto crítico em uma criatura viva, a criatura fica fraca e você ganha 2d10 pontos de vida temporários. Uma arma drenante emite um brilho púrpura."
10
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "eletrica",
3
+ "name": "Elétrica",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "dano_extra": "1d6",
8
+ "tipo_dano_extra": "eletricidade",
9
+ "descricao_curta": "+1d6 de eletricidade; 2 PM: raio causa 3d8 em criatura adjacente"
10
+ },
11
+ "description": "A arma causa +1d6 de dano de eletricidade. Uma vez por rodada, quando ataca, você pode gastar 2 PM. Se fizer isso e acertar o ataque, um raio atinge outra criatura em alcance curto, causando 3d8 pontos de dano de eletricidade. Uma arma elétrica emite faíscas e é coberta de arcos voltaicos."
12
+ }
@@ -0,0 +1,13 @@
1
+ {
2
+ "id": "energetica",
3
+ "name": "Energética",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "conta_como_dois": true,
7
+ "prerequisitos": ["formidavel"],
8
+ "efeito": {
9
+ "bonus_ataque": 4,
10
+ "descricao_curta": "+4 ataque, ignora 20 de RD, converte dano para essência; pré-req: formidável"
11
+ },
12
+ "description": "A arma tem sua parte perigosa transformada em magia pura. Ela fornece +4 em testes de ataque, ignora 20 pontos de redução de dano, converte todo o dano causado para essência e emana luz como uma tocha. Pré-requisito: formidável. Conta como dois encantos."
13
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "excruciante",
3
+ "name": "Excruciante",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Vítima fica fraca; se já fraca, fica debilitada"
8
+ },
9
+ "description": "A arma inflige dor terrível. Uma criatura viva atingida fica fraca. Se já estiver fraca, mesmo por este efeito, fica debilitada (a condição máxima que esta arma pode causar)."
10
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "flamejante",
3
+ "name": "Flamejante",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "dano_extra": "1d6",
8
+ "tipo_dano_extra": "fogo",
9
+ "descricao_curta": "+1d6 de dano de fogo; 2 PM: bola de fogo 6d6 em alcance médio"
10
+ },
11
+ "description": "A arma causa +1d6 de dano de fogo. Uma vez por rodada, quando ataca, você pode gastar 2 PM. Se fizer isso, em vez do ataque normal você dispara uma bola de fogo contra um alvo em alcance médio. O alvo sofre 6d6 pontos de dano. Um teste de Reflexos (CD For ou Des, à sua escolha) reduz à metade. Uma arma flamejante emana chamas como uma tocha."
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "formidavel",
3
+ "name": "Formidável",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "bonus_ataque": 2,
8
+ "bonus_dano": 2,
9
+ "descricao_curta": "+2 ataque e +2 dano"
10
+ },
11
+ "description": "A arma é encantada para desferir golpes precisos. Ela fornece +2 em testes de ataque e rolagens de dano."
12
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "lancinante",
3
+ "name": "Lancinante",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "conta_como_dois": true,
7
+ "prerequisitos": ["dilacerante"],
8
+ "efeito": {
9
+ "descricao_curta": "+10 dano OU multiplica bônus em críticos; substitui dilacerante"
10
+ },
11
+ "description": "A arma inflige ferimentos mortais. Quando faz um acerto crítico com a arma, você causa +10 pontos de dano ou, além de multiplicar os dados de dano, multiplica também quaisquer bônus numéricos, a sua escolha. Este efeito substitui o efeito de dilacerante. Pré-requisito: dilacerante. Conta como dois encantos."
12
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "id": "magnifica",
3
+ "name": "Magnífica",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "conta_como_dois": true,
7
+ "prerequisitos": ["formidavel"],
8
+ "efeito": {
9
+ "bonus_ataque": 4,
10
+ "bonus_dano": 4,
11
+ "descricao_curta": "+4 ataque e +4 dano; pré-req: formidável"
12
+ },
13
+ "description": "A arma é encantada para desferir golpes perfeitos. Ela fornece +4 em testes de ataque e rolagens de dano. Pré-requisito: formidável. Conta como dois encantos."
14
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "piedosa",
3
+ "name": "Piedosa",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "+1d8 de dano não letal (pode desativar por 1 PM)"
8
+ },
9
+ "description": "A arma causa +1d8 de dano, mas todo o dano causado é não letal. Você pode gastar 1 PM para desativar e ativar este encanto."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "profana",
3
+ "name": "Profana",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "+2d8 de dano contra devotos do Bem e criaturas bondosas"
8
+ },
9
+ "description": "A arma causa +2d8 de dano contra devotos de deuses que canalizam apenas energia positiva e criaturas bondosas (a critério do mestre). Uma arma profana emite luz rubra pulsante."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "sagrada",
3
+ "name": "Sagrada",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "+2d8 de dano contra devotos do Mal e criaturas malignas"
8
+ },
9
+ "description": "A arma causa +2d8 de dano contra devotos de deuses que canalizam apenas energia negativa e criaturas malignas (a critério do mestre). Uma arma sagrada emite uma sutil luz pura."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "sanguinaria",
3
+ "name": "Sanguinária",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Vítima sangra (cumulativo: +1d6 PV/rodada por acerto)"
8
+ },
9
+ "description": "Uma criatura viva atingida fica sangrando. A perda de PV por sangramento causada pela arma é cumulativa — uma criatura atingida duas vezes perde 2d6 PV por sangramento por rodada."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "trovejante",
3
+ "name": "Trovejante",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Crítico: vítima fica atordoada por uma rodada (Fort evita, uma vez por cena)"
8
+ },
9
+ "description": "A arma emite um trovão ribombante a cada golpe. Quando você faz um acerto crítico, a vítima fica atordoada por uma rodada (apenas uma vez por cena; Fort CD For ou Des, a sua escolha, evita)."
10
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "id": "tumular",
3
+ "name": "Tumular",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "dano_extra": "1d8",
8
+ "tipo_dano_extra": "trevas",
9
+ "descricao_curta": "+1d8 de dano de trevas; 2 PM: bônus sobe para +2d8, você perde 1d8 PV"
10
+ },
11
+ "description": "A arma causa +1d8 de dano de trevas. Uma vez por rodada, quando ataca, você pode gastar 2 PM. Se fizer isso, o bônus de dano aumenta para +2d8, mas você perde 1d8 pontos de vida. Uma arma tumular drena o calor ao redor."
12
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "veloz",
3
+ "name": "Veloz",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Fornece Ataque Extra; se já possui, reduz custo em -1 PM"
8
+ },
9
+ "description": "Você recebe a habilidade Ataque Extra, do guerreiro, mas só pode usá-la com esta arma. Se já a possui, em vez disso, o custo para usá-la com esta arma diminui em –1 PM."
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "id": "venenosa",
3
+ "name": "Venenosa",
4
+ "type": "encantamento",
5
+ "categoria": "arma",
6
+ "efeito": {
7
+ "descricao_curta": "Uma vez por rodada, 2 PM: vítima envenenada, perde 1d12 PV/rodada por 3 rodadas"
8
+ },
9
+ "description": "Uma vez por rodada, quando ataca, você pode gastar 2 PM. Se fizer isso e acertar o ataque, a vítima fica envenenada, perdendo 1d12 pontos de vida por rodada durante 3 rodadas. Uma arma venenosa verte um líquido verde e viscoso."
10
+ }
@@ -3,7 +3,7 @@
3
3
  "name": "Curar Ferimentos",
4
4
  "type": "divina",
5
5
  "circle": "1",
6
- "school": "abjur",
6
+ "school": "evoc",
7
7
  "execution": "padrão",
8
8
  "execution_details": null,
9
9
  "range": "toque",
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+
5
+ module Tormenta20
6
+ module Models
7
+ # Magic accessory items (rings, amulets, cloaks, etc.) with passive and active effects.
8
+ class AcessorioMagico < Base
9
+ self.table_name = "acessorios_magicos"
10
+
11
+ scope :menores, -> { where(categoria: "menor") }
12
+ scope :medios, -> { where(categoria: "medio") }
13
+ scope :maiores, -> { where(categoria: "maior") }
14
+
15
+ def efeito
16
+ raw = read_attribute(:efeito)
17
+ return {} if raw.blank?
18
+
19
+ raw.is_a?(Hash) ? raw : JSON.parse(raw)
20
+ rescue JSON::ParserError
21
+ {}
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+ require "json"
5
+
6
+ module Tormenta20
7
+ module Models
8
+ # Model representing an Encantamento (Enchantment) in Tormenta20.
9
+ #
10
+ # Enchantments are magical properties applied to permanent magic items
11
+ # (weapons, armor, shields). They are distinct from Melhorias (enhancements),
12
+ # which apply to superior items.
13
+ #
14
+ # @example Find all weapon enchantments
15
+ # Tormenta20.encantamentos.where(categoria: "arma")
16
+ #
17
+ # @example Find all armor/shield enchantments
18
+ # Tormenta20.encantamentos.where(categoria: "armadura_escudo")
19
+ class Encantamento < Base
20
+ self.table_name = "encantamentos"
21
+
22
+ validates :id, presence: true, uniqueness: true
23
+ validates :name, presence: true
24
+ validates :categoria, presence: true, inclusion: { in: %w[arma armadura_escudo] }
25
+
26
+ scope :armas, -> { where(categoria: "arma") }
27
+ scope :armaduras_escudos, -> { where(categoria: "armadura_escudo") }
28
+ scope :escudo_only, -> { where(escudo_only: true) }
29
+
30
+ def to_h
31
+ {
32
+ id: id,
33
+ name: name,
34
+ description: description,
35
+ categoria: categoria,
36
+ escudo_only: escudo_only == 1,
37
+ conta_como_dois: conta_como_dois == 1,
38
+ prerequisitos: prerequisitos,
39
+ efeito: efeito
40
+ }.compact
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_record"
4
+
5
+ module Tormenta20
6
+ module Models
7
+ # Consumable magic items: potions, oils, and grenades.
8
+ class Pocao < Base
9
+ self.table_name = "pocoes"
10
+
11
+ scope :menores, -> { where(categoria: "menor") }
12
+ scope :medias, -> { where(categoria: "medio") }
13
+ scope :maiores, -> { where(categoria: "maior") }
14
+ scope :pocoes, -> { where(subtipo: "pocao") }
15
+ scope :oleos, -> { where(subtipo: "oleo") }
16
+ scope :granadas, -> { where(subtipo: "granada") }
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Tormenta20
4
+ module Rules
5
+ # PM cap rules for variable-cost abilities (Tormenta20 core rules).
6
+ #
7
+ # Rule: the PM spent on a single use of a variable-cost ability cannot exceed
8
+ # the character's level in the class that provides it. If the ability comes
9
+ # from a race, origin, or general power (no class source), the cap equals the
10
+ # total character level.
11
+ module PmCap
12
+ # Returns the PM cap for a variable-cost ability.
13
+ #
14
+ # @param source_class [String, nil] name of the class that provides the
15
+ # ability (e.g. "arcanista"), or nil for race/origin/general powers
16
+ # @param class_level [Integer, nil] character's level in that class
17
+ # @param character_level [Integer] total character level (used as fallback)
18
+ # @return [Integer]
19
+ def self.for_ability(source_class:, class_level:, character_level:)
20
+ return character_level if source_class.nil? || class_level.nil?
21
+
22
+ class_level
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "rules/pm_cap"
4
+
5
+ module Tormenta20
6
+ # Namespace for Tormenta20 rule calculations and constraints.
7
+ module Rules
8
+ end
9
+ end
@@ -147,6 +147,16 @@ module Tormenta20
147
147
  Models::MaterialEspecial
148
148
  end
149
149
 
150
+ # Access the Encantamento (Enchantment) model for querying magic enchantments.
151
+ #
152
+ # @return [Class<Models::Encantamento>] The Encantamento model class
153
+ # @example
154
+ # Tormenta20.encantamentos.armas
155
+ # Tormenta20.encantamentos.armaduras_escudos
156
+ def encantamentos
157
+ Models::Encantamento
158
+ end
159
+
150
160
  # Access the Melhoria (Enhancement) model for querying magic enhancements.
151
161
  #
152
162
  # @return [Class<Models::Melhoria>] The Melhoria model class
@@ -199,6 +209,26 @@ module Tormenta20
199
209
  Models::IndiceRemissivo
200
210
  end
201
211
 
212
+ # Access the Pocao (Potion) model for querying magic potions, oils and grenades.
213
+ #
214
+ # @return [Class<Models::Pocao>] The Pocao model class
215
+ # @example
216
+ # Tormenta20.pocoes.menores
217
+ # Tormenta20.pocoes.granadas
218
+ def pocoes
219
+ Models::Pocao
220
+ end
221
+
222
+ # Access the AcessorioMagico (Magic Accessory) model for querying magic accessories.
223
+ #
224
+ # @return [Class<Models::AcessorioMagico>] The AcessorioMagico model class
225
+ # @example
226
+ # Tormenta20.acessorios.maiores
227
+ # Tormenta20.acessorios.find("anel_da_protecao")
228
+ def acessorios
229
+ Models::AcessorioMagico
230
+ end
231
+
202
232
  # @!endgroup
203
233
  end
204
234