rom24-quickmud-python 2.5.0__tar.gz → 2.5.1__tar.gz

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 (619) hide show
  1. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/CHANGELOG.md +11 -0
  2. {rom24_quickmud_python-2.5.0/rom24_quickmud_python.egg-info → rom24_quickmud_python-2.5.1}/PKG-INFO +1 -1
  3. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/combat.py +26 -88
  4. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/healer.py +10 -10
  5. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/magic_items.py +1 -2
  6. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/game_loop.py +19 -13
  7. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/character.py +27 -26
  8. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/skills/handlers.py +24 -22
  9. rom24_quickmud_python-2.5.1/mud/skills/say_spell.py +153 -0
  10. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/spawning/reset_handler.py +16 -6
  11. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/world/world_state.py +3 -9
  12. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/pyproject.toml +1 -1
  13. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1/rom24_quickmud_python.egg-info}/PKG-INFO +1 -1
  14. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/rom24_quickmud_python.egg-info/SOURCES.txt +31 -1
  15. rom24_quickmud_python-2.5.1/tests/integration/test_spell_casting.py +365 -0
  16. rom24_quickmud_python-2.5.1/tests/test_act_info_rom_parity.py +65 -0
  17. rom24_quickmud_python-2.5.1/tests/test_act_obj_rom_parity.py +104 -0
  18. rom24_quickmud_python-2.5.1/tests/test_char_update_rom_parity.py +733 -0
  19. rom24_quickmud_python-2.5.1/tests/test_db_resets_rom_parity.py +1118 -0
  20. rom24_quickmud_python-2.5.1/tests/test_handler_affects_rom_parity.py +574 -0
  21. rom24_quickmud_python-2.5.1/tests/test_healer_rom_parity.py +100 -0
  22. rom24_quickmud_python-2.5.1/tests/test_nanny_rom_parity.py +217 -0
  23. rom24_quickmud_python-2.5.1/tests/test_obj_update_rom_parity.py +413 -0
  24. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_passive_skills_rom_parity.py +52 -0
  25. rom24_quickmud_python-2.5.1/tests/test_saves_rom_parity.py +530 -0
  26. rom24_quickmud_python-2.5.1/tests/test_say_spell.py +36 -0
  27. rom24_quickmud_python-2.5.1/tests/test_skill_combat_rom_parity.py +2779 -0
  28. rom24_quickmud_python-2.5.1/tests/test_spell_area_effects_rom_parity.py +355 -0
  29. rom24_quickmud_python-2.5.1/tests/test_spell_breath_weapons_rom_parity.py +204 -0
  30. rom24_quickmud_python-2.5.1/tests/test_spell_buff_debuff_additional_rom_parity.py +551 -0
  31. rom24_quickmud_python-2.5.1/tests/test_spell_buff_debuff_rom_parity.py +487 -0
  32. rom24_quickmud_python-2.5.1/tests/test_spell_charm_control_rom_parity.py +300 -0
  33. rom24_quickmud_python-2.5.1/tests/test_spell_creation_rom_parity.py +481 -0
  34. rom24_quickmud_python-2.5.1/tests/test_spell_critical_gameplay_rom_parity.py +459 -0
  35. rom24_quickmud_python-2.5.1/tests/test_spell_damage_additional_rom_parity.py +1137 -0
  36. rom24_quickmud_python-2.5.1/tests/test_spell_detection_rom_parity.py +270 -0
  37. rom24_quickmud_python-2.5.1/tests/test_spell_enchantment_rom_parity.py +314 -0
  38. rom24_quickmud_python-2.5.1/tests/test_spell_final_nine_rom_parity.py +418 -0
  39. rom24_quickmud_python-2.5.1/tests/test_spell_healing_rom_parity.py +340 -0
  40. rom24_quickmud_python-2.5.1/tests/test_spell_high_priority_missing_rom_parity.py +312 -0
  41. rom24_quickmud_python-2.5.1/tests/test_spell_information_rom_parity.py +588 -0
  42. rom24_quickmud_python-2.5.1/tests/test_spell_priority_high_rom_parity.py +297 -0
  43. rom24_quickmud_python-2.5.1/tests/test_spell_travel_portal_rom_parity.py +579 -0
  44. rom24_quickmud_python-2.5.1/tests/test_utility_spells_parity.py +142 -0
  45. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/LICENSE +0 -0
  46. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/MANIFEST.in +0 -0
  47. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/README.md +0 -0
  48. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/air.are +0 -0
  49. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/arachnos.are +0 -0
  50. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/area.lst +0 -0
  51. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/astral.are +0 -0
  52. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/canyon.are +0 -0
  53. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/catacomb.are +0 -0
  54. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/chapel.are +0 -0
  55. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/daycare.are +0 -0
  56. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/draconia.are +0 -0
  57. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/dream.are +0 -0
  58. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/drow.are +0 -0
  59. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/dwarven.are +0 -0
  60. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/dylan.are +0 -0
  61. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/eastern.are +0 -0
  62. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/galaxy.are +0 -0
  63. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/gnome.are +0 -0
  64. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/grave.are +0 -0
  65. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/group.are +0 -0
  66. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/grove.are +0 -0
  67. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/haon.are +0 -0
  68. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/help.are +0 -0
  69. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/hitower.are +0 -0
  70. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/hood.are +0 -0
  71. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/immort.are +0 -0
  72. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/limbo.are +0 -0
  73. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/mahntor.are +0 -0
  74. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/marsh.are +0 -0
  75. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/mega1.are +0 -0
  76. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/midennir.are +0 -0
  77. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/midgaard.are +0 -0
  78. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/mirror.are +0 -0
  79. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/mobfact.are +0 -0
  80. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/moria.are +0 -0
  81. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/newthalos.are +0 -0
  82. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/nirvana.are +0 -0
  83. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/ofcol.are +0 -0
  84. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/ofcol2.are +0 -0
  85. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/olympus.are +0 -0
  86. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/plains.are +0 -0
  87. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/proto.are +0 -0
  88. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/pyramid.are +0 -0
  89. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/quifael.are +0 -0
  90. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/redferne.are +0 -0
  91. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/rom.are +0 -0
  92. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/school.are +0 -0
  93. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/sewer.are +0 -0
  94. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/shire.are +0 -0
  95. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/smurf.are +0 -0
  96. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/social.are +0 -0
  97. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/thalos.are +0 -0
  98. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/tohell.are +0 -0
  99. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/trollden.are +0 -0
  100. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/valley.are +0 -0
  101. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/area/wyvern.are +0 -0
  102. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/air.json +0 -0
  103. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/arachnos.json +0 -0
  104. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/area.json +0 -0
  105. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/area_0.json +0 -0
  106. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/astral.json +0 -0
  107. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/canyon.json +0 -0
  108. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/catacomb.json +0 -0
  109. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/chapel.json +0 -0
  110. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/daycare.json +0 -0
  111. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/draconia.json +0 -0
  112. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/dream.json +0 -0
  113. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/drow.json +0 -0
  114. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/dwarven.json +0 -0
  115. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/eastern.json +0 -0
  116. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/galaxy.json +0 -0
  117. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/gnome.json +0 -0
  118. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/group.json +0 -0
  119. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/grove.json +0 -0
  120. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/haon.json +0 -0
  121. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/help.json +0 -0
  122. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/hitower.json +0 -0
  123. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/hood.json +0 -0
  124. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/immort.json +0 -0
  125. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/limbo.json +0 -0
  126. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/mahntor.json +0 -0
  127. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/marsh.json +0 -0
  128. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/mega1.json +0 -0
  129. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/midennir.json +0 -0
  130. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/midgaard.json +0 -0
  131. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/mirror.json +0 -0
  132. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/mobfact.json +0 -0
  133. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/moria.json +0 -0
  134. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/newthalos.json +0 -0
  135. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/nirvana.json +0 -0
  136. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/ofcol.json +0 -0
  137. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/ofcol2.json +0 -0
  138. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/olympus.json +0 -0
  139. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/plains.json +0 -0
  140. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/pyramid.json +0 -0
  141. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/quifael.json +0 -0
  142. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/redferne.json +0 -0
  143. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/rom.json +0 -0
  144. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/school.json +0 -0
  145. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/sewer.json +0 -0
  146. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/shire.json +0 -0
  147. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/smurf.json +0 -0
  148. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/social.json +0 -0
  149. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/thalos.json +0 -0
  150. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/tohell.json +0 -0
  151. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/trollden.json +0 -0
  152. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/valley.json +0 -0
  153. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas/wyvern.json +0 -0
  154. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/arachnos.json +0 -0
  155. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/area.json +0 -0
  156. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/area_0.json +0 -0
  157. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/astral_plane.json +0 -0
  158. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/catacombs.json +0 -0
  159. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/chapel.json +0 -0
  160. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/day_care.json +0 -0
  161. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/dragon_tower.json +0 -0
  162. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/drow_city.json +0 -0
  163. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/dwarven_kingdom.json +0 -0
  164. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/dylan's_area.json +0 -0
  165. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/elemental_canyon.json +0 -0
  166. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/galaxy.json +0 -0
  167. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/gangland.json +0 -0
  168. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/gnome_village.json +0 -0
  169. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/graveyard.json +0 -0
  170. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/group.json +0 -0
  171. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/haon_dor.json +0 -0
  172. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/help.json +0 -0
  173. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/high_tower.json +0 -0
  174. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/holy_grove.json +0 -0
  175. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/in_the_air.json +0 -0
  176. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/limbo.json +0 -0
  177. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/machine_dreams.json +0 -0
  178. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/mahn-tor.json +0 -0
  179. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/marsh.json +0 -0
  180. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/mega_city_one.json +0 -0
  181. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/miden'nir.json +0 -0
  182. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/midgaard.json +0 -0
  183. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/mob_factory.json +0 -0
  184. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/moria.json +0 -0
  185. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/mud_school.json +0 -0
  186. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/new_ofcol.json +0 -0
  187. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/new_thalos.json +0 -0
  188. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/nirvana.json +0 -0
  189. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/ofcol.json +0 -0
  190. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/old_thalos.json +0 -0
  191. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/olympus.json +0 -0
  192. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/plains.json +0 -0
  193. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/pyramid.json +0 -0
  194. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/quifael's.json +0 -0
  195. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/redferne's.json +0 -0
  196. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/rom.json +0 -0
  197. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/sands_of_sorrow.json +0 -0
  198. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/sewers.json +0 -0
  199. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/shire.json +0 -0
  200. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/smurfville.json +0 -0
  201. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/social.json +0 -0
  202. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/thalos.json +0 -0
  203. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/tohell.json +0 -0
  204. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/troll_den.json +0 -0
  205. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/valhalla.json +0 -0
  206. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/valley_of_the_elves.json +0 -0
  207. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/areas_backup/wyvern's_tower.json +0 -0
  208. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/help.json +0 -0
  209. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/players/.json +0 -0
  210. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/players/attacker.json +0 -0
  211. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/players/eddol.json +0 -0
  212. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/players/hero.json +0 -0
  213. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/players/sleeper.json +0 -0
  214. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/players/trouble.json +0 -0
  215. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/shops.json +0 -0
  216. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/skills.json +0 -0
  217. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/socials.json +0 -0
  218. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/data/time.json +0 -0
  219. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/MPDocs/examples.doc +0 -0
  220. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/MPDocs/hacker.doc +0 -0
  221. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/MPDocs/mobprog.doc +0 -0
  222. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/MPDocs/new_readme.txt +0 -0
  223. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/QuickMUD.txt +0 -0
  224. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/Rom2.4.doc +0 -0
  225. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/act.txt +0 -0
  226. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/area.txt +0 -0
  227. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/c_module_inventory.md +0 -0
  228. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/c_python_cross_reference.md +0 -0
  229. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/c_to_python_file_coverage.md +0 -0
  230. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/class.txt +0 -0
  231. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/command.txt +0 -0
  232. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/contrib.txt +0 -0
  233. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/drool.txt +0 -0
  234. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/hacker.txt +0 -0
  235. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/license.doc +0 -0
  236. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/license.txt +0 -0
  237. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/memory.txt +0 -0
  238. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/new.txt +0 -0
  239. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/pfile.txt +0 -0
  240. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/port.txt +0 -0
  241. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/pr_queue.md +0 -0
  242. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/python_architecture.md +0 -0
  243. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/python_module_inventory.md +0 -0
  244. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/security.txt +0 -0
  245. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/sites.txt +0 -0
  246. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/skill.txt +0 -0
  247. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/sky.txt +0 -0
  248. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/trad.txt +0 -0
  249. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/vnum.txt +0 -0
  250. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/doc/~$Rom2.4.doc +0 -0
  251. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/__init__.py +0 -0
  252. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/__main__.py +0 -0
  253. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/account/__init__.py +0 -0
  254. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/account/account_manager.py +0 -0
  255. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/account/account_service.py +0 -0
  256. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/admin_logging/__init__.py +0 -0
  257. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/admin_logging/admin.py +0 -0
  258. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/admin_logging/agent_trace.py +0 -0
  259. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/advancement.py +0 -0
  260. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/affects/engine.py +0 -0
  261. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/affects/saves.py +0 -0
  262. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/agent/__init__.py +0 -0
  263. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/agent/agent_protocol.py +0 -0
  264. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/agent/character_agent.py +0 -0
  265. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/ai/__init__.py +0 -0
  266. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/ai/aggressive.py +0 -0
  267. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/characters/__init__.py +0 -0
  268. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/characters/conditions.py +0 -0
  269. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/characters/follow.py +0 -0
  270. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/combat/__init__.py +0 -0
  271. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/combat/assist.py +0 -0
  272. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/combat/death.py +0 -0
  273. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/combat/engine.py +0 -0
  274. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/combat/kill_table.py +0 -0
  275. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/combat/messages.py +0 -0
  276. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/combat/safety.py +0 -0
  277. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/__init__.py +0 -0
  278. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/admin_commands.py +0 -0
  279. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/advancement.py +0 -0
  280. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/affects.py +0 -0
  281. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/alias_cmds.py +0 -0
  282. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/auto_settings.py +0 -0
  283. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/build.py +0 -0
  284. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/channels.py +0 -0
  285. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/character.py +0 -0
  286. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/communication.py +0 -0
  287. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/compare.py +0 -0
  288. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/consider.py +0 -0
  289. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/consumption.py +0 -0
  290. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/decorators.py +0 -0
  291. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/dispatcher.py +0 -0
  292. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/doors.py +0 -0
  293. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/equipment.py +0 -0
  294. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/feedback.py +0 -0
  295. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/give.py +0 -0
  296. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/group_commands.py +0 -0
  297. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/help.py +0 -0
  298. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/imc.py +0 -0
  299. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/imm_admin.py +0 -0
  300. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/imm_commands.py +0 -0
  301. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/imm_display.py +0 -0
  302. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/imm_emote.py +0 -0
  303. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/imm_load.py +0 -0
  304. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/imm_olc.py +0 -0
  305. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/imm_punish.py +0 -0
  306. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/imm_search.py +0 -0
  307. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/imm_server.py +0 -0
  308. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/imm_set.py +0 -0
  309. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/info.py +0 -0
  310. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/info_extended.py +0 -0
  311. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/inspection.py +0 -0
  312. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/inventory.py +0 -0
  313. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/liquids.py +0 -0
  314. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/misc_info.py +0 -0
  315. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/misc_player.py +0 -0
  316. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/mobprog_tools.py +0 -0
  317. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/movement.py +0 -0
  318. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/murder.py +0 -0
  319. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/notes.py +0 -0
  320. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/obj_manipulation.py +0 -0
  321. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/player_config.py +0 -0
  322. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/player_info.py +0 -0
  323. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/position.py +0 -0
  324. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/remaining_rom.py +0 -0
  325. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/session.py +0 -0
  326. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/shop.py +0 -0
  327. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/socials.py +0 -0
  328. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/thief_skills.py +0 -0
  329. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/commands/typo_guards.py +0 -0
  330. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/config.py +0 -0
  331. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/db/__init__.py +0 -0
  332. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/db/init.py +0 -0
  333. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/db/migrate_from_files.py +0 -0
  334. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/db/migrations.py +0 -0
  335. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/db/models.py +0 -0
  336. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/db/seed.py +0 -0
  337. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/db/session.py +0 -0
  338. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/devtools/__init__.py +0 -0
  339. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/devtools/agent_demo.py +0 -0
  340. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/entrypoint.py +0 -0
  341. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/game_tick_scheduler.py +0 -0
  342. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/groups/__init__.py +0 -0
  343. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/groups/xp.py +0 -0
  344. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/imc/__init__.py +0 -0
  345. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/imc/commands.py +0 -0
  346. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/imc/network.py +0 -0
  347. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/imc/protocol.py +0 -0
  348. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/__init__.py +0 -0
  349. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/area_loader.py +0 -0
  350. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/base_loader.py +0 -0
  351. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/help_loader.py +0 -0
  352. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/json_area_loader.py +0 -0
  353. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/json_loader.py +0 -0
  354. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/mob_loader.py +0 -0
  355. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/mobprog_loader.py +0 -0
  356. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/obj_loader.py +0 -0
  357. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/reset_loader.py +0 -0
  358. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/room_loader.py +0 -0
  359. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/shop_loader.py +0 -0
  360. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/social_loader.py +0 -0
  361. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/loaders/specials_loader.py +0 -0
  362. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/logging.py +0 -0
  363. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/magic/__init__.py +0 -0
  364. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/magic/effects.py +0 -0
  365. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/math/c_compat.py +0 -0
  366. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/mob_cmds.py +0 -0
  367. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/mobprog.py +0 -0
  368. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/__init__.py +0 -0
  369. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/area.py +0 -0
  370. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/area_json.py +0 -0
  371. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/board.py +0 -0
  372. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/board_json.py +0 -0
  373. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/character_json.py +0 -0
  374. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/clans.py +0 -0
  375. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/classes.py +0 -0
  376. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/constants.py +0 -0
  377. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/conversion.py +0 -0
  378. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/help.py +0 -0
  379. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/help_json.py +0 -0
  380. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/json_io.py +0 -0
  381. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/mob.py +0 -0
  382. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/note.py +0 -0
  383. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/note_json.py +0 -0
  384. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/obj.py +0 -0
  385. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/object.py +0 -0
  386. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/object_json.py +0 -0
  387. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/player_json.py +0 -0
  388. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/races.py +0 -0
  389. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/room.py +0 -0
  390. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/room_json.py +0 -0
  391. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/shop.py +0 -0
  392. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/shop_json.py +0 -0
  393. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/skill.py +0 -0
  394. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/skill_json.py +0 -0
  395. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/social.py +0 -0
  396. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/models/social_json.py +0 -0
  397. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/music/__init__.py +0 -0
  398. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/net/__init__.py +0 -0
  399. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/net/ansi.py +0 -0
  400. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/net/connection.py +0 -0
  401. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/net/protocol.py +0 -0
  402. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/net/session.py +0 -0
  403. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/net/ssh_server.py +0 -0
  404. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/net/telnet_server.py +0 -0
  405. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/network/__init__.py +0 -0
  406. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/network/websocket_server.py +0 -0
  407. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/network/websocket_session.py +0 -0
  408. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/notes.py +0 -0
  409. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/olc/__init__.py +0 -0
  410. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/olc/save.py +0 -0
  411. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/persistence.py +0 -0
  412. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/registry.py +0 -0
  413. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/rom_api.py +0 -0
  414. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/scripts/convert_are_to_json.py +0 -0
  415. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/scripts/convert_help_are_to_json.py +0 -0
  416. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/scripts/convert_player_to_json.py +0 -0
  417. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/scripts/convert_shops_to_json.py +0 -0
  418. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/scripts/convert_skills_to_json.py +0 -0
  419. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/scripts/convert_social_are_to_json.py +0 -0
  420. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/scripts/load_test_data.py +0 -0
  421. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/security/__init__.py +0 -0
  422. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/security/bans.py +0 -0
  423. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/security/hash_utils.py +0 -0
  424. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/server.py +0 -0
  425. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/skills/__init__.py +0 -0
  426. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/skills/groups.py +0 -0
  427. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/skills/metadata.py +0 -0
  428. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/skills/registry.py +0 -0
  429. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/spawning/__init__.py +0 -0
  430. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/spawning/mob_spawner.py +0 -0
  431. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/spawning/obj_spawner.py +0 -0
  432. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/spawning/templates.py +0 -0
  433. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/spec_funs.py +0 -0
  434. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/time.py +0 -0
  435. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/utils/act.py +0 -0
  436. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/utils/rng_mm.py +0 -0
  437. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/utils/text.py +0 -0
  438. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/wiznet.py +0 -0
  439. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/world/__init__.py +0 -0
  440. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/world/char_find.py +0 -0
  441. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/world/linking.py +0 -0
  442. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/world/look.py +0 -0
  443. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/world/movement.py +0 -0
  444. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/world/obj_find.py +0 -0
  445. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/mud/world/vision.py +0 -0
  446. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/rom24_quickmud_python.egg-info/dependency_links.txt +0 -0
  447. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/rom24_quickmud_python.egg-info/entry_points.txt +0 -0
  448. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/rom24_quickmud_python.egg-info/requires.txt +0 -0
  449. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/rom24_quickmud_python.egg-info/top_level.txt +0 -0
  450. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/setup.cfg +0 -0
  451. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/setup.py +0 -0
  452. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/conftest.py +0 -0
  453. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/helpers.py +0 -0
  454. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/helpers_player.py +0 -0
  455. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/integration/conftest.py +0 -0
  456. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/integration/test_architectural_parity.py +0 -0
  457. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/integration/test_auto_sequences.py +0 -0
  458. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/integration/test_mobprog_scenarios.py +0 -0
  459. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/integration/test_new_player_workflow.py +0 -0
  460. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/integration/test_pilot_integration.py +0 -0
  461. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/integration/test_player_npc_interaction.py +0 -0
  462. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_account_auth.py +0 -0
  463. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_admin_commands.py +0 -0
  464. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_advancement.py +0 -0
  465. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_affects.py +0 -0
  466. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_agent_interface.py +0 -0
  467. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_alias_parity.py +0 -0
  468. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_ansi.py +0 -0
  469. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_are_conversion.py +0 -0
  470. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_area_counts.py +0 -0
  471. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_area_exits.py +0 -0
  472. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_area_loader.py +0 -0
  473. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_area_specials.py +0 -0
  474. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_bans.py +0 -0
  475. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_boards.py +0 -0
  476. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_builder_hedit.py +0 -0
  477. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_builder_stat_commands.py +0 -0
  478. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_building.py +0 -0
  479. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat.py +0 -0
  480. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_assist.py +0 -0
  481. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_damage_types.py +0 -0
  482. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_death.py +0 -0
  483. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_defenses_prob.py +0 -0
  484. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_messages.py +0 -0
  485. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_position_damage.py +0 -0
  486. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_rom_parity.py +0 -0
  487. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_skills.py +0 -0
  488. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_state.py +0 -0
  489. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_surrender.py +0 -0
  490. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_thac0.py +0 -0
  491. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_combat_thac0_engine.py +0 -0
  492. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_command_abbrev.py +0 -0
  493. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_command_parity.py +0 -0
  494. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_commands.py +0 -0
  495. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_communication.py +0 -0
  496. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_connection_motd.py +0 -0
  497. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_convert_are_to_json_cli.py +0 -0
  498. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_critical_function_parity.py +0 -0
  499. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_damage_reduction.py +0 -0
  500. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_damage_reduction_integration.py +0 -0
  501. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_db_seed.py +0 -0
  502. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_defense_flags.py +0 -0
  503. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_encumbrance.py +0 -0
  504. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_enter_portal.py +0 -0
  505. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_fighting_state.py +0 -0
  506. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_game_loop.py +0 -0
  507. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_game_loop_order.py +0 -0
  508. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_game_loop_wait_daze.py +0 -0
  509. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_golden_reference.py +0 -0
  510. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_hash_utils.py +0 -0
  511. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_healer.py +0 -0
  512. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_healer_parity.py +0 -0
  513. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_help_conversion.py +0 -0
  514. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_help_system.py +0 -0
  515. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_imc.py +0 -0
  516. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_inventory_persistence.py +0 -0
  517. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_json_io.py +0 -0
  518. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_json_model_instantiation.py +0 -0
  519. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_json_room_fields.py +0 -0
  520. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_load_midgaard.py +0 -0
  521. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_logging_admin.py +0 -0
  522. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_logging_rotation.py +0 -0
  523. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_mob_act_flags.py +0 -0
  524. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_mob_damage_modifiers.py +0 -0
  525. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_mobprog.py +0 -0
  526. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_mobprog_commands.py +0 -0
  527. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_mobprog_helpers.py +0 -0
  528. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_mobprog_triggers.py +0 -0
  529. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_movement.py +0 -0
  530. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_movement_charm.py +0 -0
  531. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_movement_costs.py +0 -0
  532. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_movement_doors.py +0 -0
  533. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_movement_followers.py +0 -0
  534. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_movement_mobprog.py +0 -0
  535. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_movement_npc.py +0 -0
  536. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_movement_portals.py +0 -0
  537. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_movement_privacy.py +0 -0
  538. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_movement_visibility.py +0 -0
  539. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_music.py +0 -0
  540. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_networking_telnet.py +0 -0
  541. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_olc_aedit.py +0 -0
  542. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_olc_medit.py +0 -0
  543. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_olc_oedit.py +0 -0
  544. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_olc_save.py +0 -0
  545. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_persistence.py +0 -0
  546. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_affect_flags.py +0 -0
  547. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_auto_settings.py +0 -0
  548. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_combat_attributes.py +0 -0
  549. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_conditions.py +0 -0
  550. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_creation.py +0 -0
  551. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_equipment.py +0 -0
  552. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_flags.py +0 -0
  553. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_info_commands.py +0 -0
  554. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_mechanics.py +0 -0
  555. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_prompt.py +0 -0
  556. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_resistance_flags.py +0 -0
  557. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_save_format.py +0 -0
  558. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_skills_spells.py +0 -0
  559. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_stats.py +0 -0
  560. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_title_description.py +0 -0
  561. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_player_wimpy.py +0 -0
  562. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_practice.py +0 -0
  563. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_reset_levels.py +0 -0
  564. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_resets.py +0 -0
  565. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_rng_and_ccompat.py +0 -0
  566. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_rng_dice.py +0 -0
  567. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_rom_api.py +0 -0
  568. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_runtime_models.py +0 -0
  569. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_scan_parity.py +0 -0
  570. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_schema_validation.py +0 -0
  571. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_scripted_session.py +0 -0
  572. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_shop_conversion.py +0 -0
  573. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_shops.py +0 -0
  574. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skill_conversion.py +0 -0
  575. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skill_envenom_rom_parity.py +0 -0
  576. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skill_haggle_rom_parity.py +0 -0
  577. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skill_hide_rom_parity.py +0 -0
  578. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skill_peek_rom_parity.py +0 -0
  579. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skill_pick_lock_rom_parity.py +0 -0
  580. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skill_recall_rom_parity.py +0 -0
  581. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skill_registry.py +0 -0
  582. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skill_steal_rom_parity.py +0 -0
  583. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills.py +0 -0
  584. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_buffs.py +0 -0
  585. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_combat.py +0 -0
  586. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_conjuration.py +0 -0
  587. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_damage.py +0 -0
  588. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_debuffs.py +0 -0
  589. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_detection.py +0 -0
  590. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_healing.py +0 -0
  591. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_identify.py +0 -0
  592. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_learned.py +0 -0
  593. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_mass.py +0 -0
  594. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_misc.py +0 -0
  595. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_skills_transport.py +0 -0
  596. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_social_conversion.py +0 -0
  597. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_social_placeholders.py +0 -0
  598. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_socials.py +0 -0
  599. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spawning.py +0 -0
  600. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spec_fun_behaviors.py +0 -0
  601. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spec_funs.py +0 -0
  602. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spec_funs_extra.py +0 -0
  603. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_specials_loader_ext.py +0 -0
  604. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spell_cancellation_rom_parity.py +0 -0
  605. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spell_farsight_rom_parity.py +0 -0
  606. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spell_harm_rom_parity.py +0 -0
  607. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spell_heat_metal_rom_parity.py +0 -0
  608. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spell_mass_healing_rom_parity.py +0 -0
  609. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spell_shocking_grasp_rom_parity.py +0 -0
  610. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spells_basic.py +0 -0
  611. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_spells_damage.py +0 -0
  612. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_state_transitions.py +0 -0
  613. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_telnet_server.py +0 -0
  614. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_time_daynight.py +0 -0
  615. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_time_persistence.py +0 -0
  616. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_weapon_damage.py +0 -0
  617. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_weapon_special_attacks.py +0 -0
  618. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_wiznet.py +0 -0
  619. {rom24_quickmud_python-2.5.0 → rom24_quickmud_python-2.5.1}/tests/test_world.py +0 -0
@@ -7,6 +7,17 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.5.1] - 2025-12-30
11
+
12
+ ### Added
13
+
14
+ - **Session Summary Documentation**:
15
+ - `P0_P1_P2_EXTENDED_TESTING_SESSION_SUMMARY.md` - Verification session summary documenting that all P0/P1/P2 ROM C parity tests were already complete from previous sessions (December 29-30, 2025)
16
+
17
+ ### Changed
18
+
19
+ - Updated README badges and project status to reflect complete ROM C parity test coverage (735 total ROM parity tests including 127 P0/P1/P2 formula verification tests)
20
+
10
21
  ## [2.5.0] - 2025-12-29
11
22
 
12
23
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rom24-quickmud-python
3
- Version: 2.5.0
3
+ Version: 2.5.1
4
4
  Summary: A modern Python port of the ROM 2.4b6 MUD engine with full telnet server and JSON world loading
5
5
  Author-email: Mark Jedrzejczyk <mark.jedrzejczyk@gmail.com>
6
6
  Maintainer-email: Mark Jedrzejczyk <mark.jedrzejczyk@gmail.com>
@@ -246,14 +246,17 @@ def do_rescue(char: Character, args: str) -> str:
246
246
 
247
247
 
248
248
  def _find_room_target(char: Character, name: str) -> Character | None:
249
+ """Find a character in the same room by name.
250
+
251
+ ROM Reference: src/act_info.c get_char_room()
252
+ Note: ROM allows finding self - individual commands check victim == ch.
253
+ """
249
254
  room = getattr(char, "room", None)
250
255
  if room is None or not name:
251
256
  return None
252
257
 
253
258
  lowered = name.lower()
254
259
  for candidate in getattr(room, "people", []) or []:
255
- if candidate is char:
256
- continue
257
260
  candidate_name = getattr(candidate, "name", "") or ""
258
261
  if lowered in candidate_name.lower():
259
262
  return candidate
@@ -797,51 +800,22 @@ def do_dirt(char: Character, args: str) -> str:
797
800
  if victim is None:
798
801
  return "They aren't here."
799
802
 
800
- # Check if already blinded
803
+ # Match ROM safety/validation gates in the command layer.
804
+ if victim is char:
805
+ return "Very funny."
806
+
801
807
  victim_affected = getattr(victim, "affected_by", 0)
802
808
  if victim_affected & AffectFlag.BLIND:
803
809
  return "They're already blinded."
804
810
 
805
- if victim is char:
806
- return "Very funny."
807
-
808
- # Safety checks
809
811
  safety_msg = _kill_safety_message(char, victim)
810
812
  if safety_msg:
811
813
  return safety_msg
812
814
 
813
- # Calculate chance
814
- chance = skill_level
815
- char_dex = skill_handlers._coerce_int(
816
- getattr(char, "perm_stat", [13] * 5)[1] if isinstance(getattr(char, "perm_stat", []), list) else 13
817
- )
818
- victim_dex = skill_handlers._coerce_int(
819
- getattr(victim, "perm_stat", [13] * 5)[1] if isinstance(getattr(victim, "perm_stat", []), list) else 13
820
- )
821
- chance += char_dex - 2 * victim_dex
822
-
823
- # Level modifier
824
- char_level = skill_handlers._coerce_int(getattr(char, "level", 1))
825
- victim_level = skill_handlers._coerce_int(getattr(victim, "level", 1))
826
- chance += (char_level - victim_level) * 2
827
-
828
- # Roll
829
- if rng_mm.number_percent() < chance:
830
- # Success - blind the victim
831
- victim.affected_by = victim_affected | AffectFlag.BLIND
832
- skill_registry._apply_wait_state(char, get_pulse_violence())
833
-
834
- # Start combat if not already fighting
835
- if not getattr(char, "fighting", None):
836
- char.fighting = victim
837
- if not getattr(victim, "fighting", None):
838
- victim.fighting = char
839
-
840
- check_killer(char, victim)
841
- return f"You kick dirt into {getattr(victim, 'name', 'their')} eyes!"
842
- else:
843
- skill_registry._apply_wait_state(char, get_pulse_violence())
844
- return "You kick dirt but miss their eyes."
815
+ # Delegate parity math/effects to the skill handler.
816
+ result = skill_handlers.dirt_kicking(char, target=victim)
817
+ check_killer(char, victim)
818
+ return result
845
819
 
846
820
 
847
821
  def do_trip(char: Character, args: str) -> str:
@@ -943,57 +917,21 @@ def do_disarm(char: Character, args: str) -> str:
943
917
  if victim is None:
944
918
  return "You aren't fighting anyone."
945
919
 
946
- # Victim must be wielding a weapon
947
- victim_equipped = getattr(victim, "equipped", {})
948
- victim_weapon = victim_equipped.get("wield") or victim_equipped.get("main_hand")
949
- if victim_weapon is None:
950
- return "Your opponent is not wielding a weapon."
951
-
952
- # Attacker should have weapon (or hand-to-hand skill)
953
- char_equipped = getattr(char, "equipped", {})
954
- char_weapon = char_equipped.get("wield") or char_equipped.get("main_hand")
920
+ # Attacker must have a weapon, or meet ROM hand-to-hand / NPC OFF_DISARM exception.
921
+ caster_weapon = get_wielded_weapon(char)
955
922
  hth_skill = char.skills.get("hand to hand", 0)
956
-
957
- if char_weapon is None and hth_skill == 0:
923
+ if caster_weapon is None and hth_skill == 0:
958
924
  return "You must wield a weapon to disarm."
959
925
 
960
- # Calculate chance
961
- if char_weapon is None:
962
- chance = skill_level * hth_skill // 150
963
- else:
964
- chance = skill_level
965
-
966
- # Dex vs Str
967
- char_dex = skill_handlers._coerce_int(
968
- getattr(char, "perm_stat", [13] * 5)[1] if isinstance(getattr(char, "perm_stat", []), list) else 13
969
- )
970
- victim_str = skill_handlers._coerce_int(
971
- getattr(victim, "perm_stat", [13] * 5)[0] if isinstance(getattr(victim, "perm_stat", []), list) else 13
972
- )
973
- chance += char_dex - 2 * victim_str
974
-
975
- # Level modifier
976
- char_level = skill_handlers._coerce_int(getattr(char, "level", 1))
977
- victim_level = skill_handlers._coerce_int(getattr(victim, "level", 1))
978
- chance += (char_level - victim_level) * 2
979
-
980
- skill_registry._apply_wait_state(char, get_pulse_violence())
926
+ # Victim must be wielding a weapon
927
+ victim_weapon = get_wielded_weapon(victim)
928
+ if victim_weapon is None:
929
+ return "Your opponent is not wielding a weapon."
981
930
 
982
- # Roll
983
- if rng_mm.number_percent() < chance:
984
- # Success - remove weapon from victim
985
- if "wield" in victim_equipped:
986
- del victim_equipped["wield"]
987
- elif "main_hand" in victim_equipped:
988
- del victim_equipped["main_hand"]
989
-
990
- # Drop to room
991
- victim_room = getattr(victim, "room", None)
992
- if victim_room and hasattr(victim_room, "contents"):
993
- victim_room.contents.append(victim_weapon)
994
- victim_weapon.in_room = victim_room
931
+ success = skill_handlers.disarm(char, target=victim)
932
+ check_killer(char, victim)
995
933
 
996
- check_killer(char, victim)
997
- return f"You disarm {getattr(victim, 'name', 'them')}!"
998
- else:
999
- return f"You fail to disarm {getattr(victim, 'name', 'them')}."
934
+ victim_name = getattr(victim, "name", "them")
935
+ if success:
936
+ return f"You disarm {victim_name}!"
937
+ return f"You fail to disarm {victim_name}."
@@ -21,16 +21,16 @@ def _find_healer(char: Character) -> object | None:
21
21
 
22
22
 
23
23
  PRICE_GOLD = {
24
- "light": 10,
25
- "serious": 15,
26
- "critical": 25,
27
- "heal": 50,
28
- "blindness": 20,
29
- "disease": 15,
30
- "poison": 25,
31
- "uncurse": 50,
32
- "refresh": 5,
33
- "mana": 10,
24
+ "light": 10, # ROM healer.c:88: cost = 1000 (10 gold)
25
+ "serious": 16, # ROM healer.c:96: cost = 1600 (16 gold) - NOTE: Display says 15g but actual cost is 16g!
26
+ "critical": 25, # ROM healer.c:104: cost = 2500 (25 gold)
27
+ "heal": 50, # ROM healer.c:112: cost = 5000 (50 gold)
28
+ "blindness": 20, # ROM healer.c:120: cost = 2000 (20 gold)
29
+ "disease": 15, # ROM healer.c:128: cost = 1500 (15 gold)
30
+ "poison": 25, # ROM healer.c:136: cost = 2500 (25 gold)
31
+ "uncurse": 50, # ROM healer.c:144: cost = 5000 (50 gold)
32
+ "refresh": 5, # ROM healer.c:161: cost = 500 (5 gold)
33
+ "mana": 10, # ROM healer.c:152: cost = 1000 (10 gold)
34
34
  }
35
35
 
36
36
 
@@ -152,8 +152,7 @@ def do_recite(ch: Character, args: str) -> str:
152
152
  if not scroll:
153
153
  return "You do not have that scroll."
154
154
 
155
- # Check if it's actually a scroll
156
- if scroll.item_type != ItemType.ITEM_SCROLL:
155
+ if scroll.item_type != ItemType.SCROLL:
157
156
  return "You can recite only scrolls."
158
157
 
159
158
  # Check level requirement
@@ -198,10 +198,12 @@ def hit_gain(character: Character) -> int:
198
198
  gain = gain * getattr(room, "heal_rate", 100) // 100
199
199
 
200
200
  furniture = getattr(character, "on", None)
201
- if furniture is not None and getattr(furniture, "item_type", None) == ItemType.FURNITURE:
202
- values = getattr(furniture, "value", [100, 100, 100, 100, 100])
203
- if len(values) > 3:
204
- gain = gain * int(values[3]) // 100
201
+ if furniture is not None:
202
+ item_type = getattr(furniture.prototype, "item_type", None)
203
+ if item_type == ItemType.FURNITURE or item_type == int(ItemType.FURNITURE):
204
+ values = getattr(furniture, "value", [100, 100, 100, 100, 100])
205
+ if len(values) > 3:
206
+ gain = gain * int(values[3]) // 100
205
207
 
206
208
  if _has_affect(character, AffectFlag.POISON):
207
209
  gain //= 4
@@ -262,13 +264,15 @@ def mana_gain(character: Character) -> int:
262
264
  if character.pcdata.condition[Condition.THIRST] == 0:
263
265
  gain //= 2
264
266
 
265
- gain = gain * getattr(room, "mana_rate", 100) // 100
267
+ gain = gain * getattr(room, "heal_rate", 100) // 100
266
268
 
267
269
  furniture = getattr(character, "on", None)
268
- if furniture is not None and getattr(furniture, "item_type", None) == ItemType.FURNITURE:
269
- values = getattr(furniture, "value", [100, 100, 100, 100, 100])
270
- if len(values) > 4:
271
- gain = gain * int(values[4]) // 100
270
+ if furniture is not None:
271
+ item_type = getattr(furniture.prototype, "item_type", None)
272
+ if item_type == ItemType.FURNITURE or item_type == int(ItemType.FURNITURE):
273
+ values = getattr(furniture, "value", [100, 100, 100, 100, 100])
274
+ if len(values) > 3:
275
+ gain = gain * int(values[3]) // 100
272
276
 
273
277
  if _has_affect(character, AffectFlag.POISON):
274
278
  gain //= 4
@@ -307,10 +311,12 @@ def move_gain(character: Character) -> int:
307
311
  gain = gain * getattr(room, "heal_rate", 100) // 100
308
312
 
309
313
  furniture = getattr(character, "on", None)
310
- if furniture is not None and getattr(furniture, "item_type", None) == ItemType.FURNITURE:
311
- values = getattr(furniture, "value", [100, 100, 100, 100, 100])
312
- if len(values) > 3:
313
- gain = gain * int(values[3]) // 100
314
+ if furniture is not None:
315
+ item_type = getattr(furniture.prototype, "item_type", None)
316
+ if item_type == ItemType.FURNITURE or item_type == int(ItemType.FURNITURE):
317
+ values = getattr(furniture, "value", [100, 100, 100, 100, 100])
318
+ if len(values) > 3:
319
+ gain = gain * int(values[3]) // 100
314
320
 
315
321
  if _has_affect(character, AffectFlag.POISON):
316
322
  gain //= 4
@@ -260,20 +260,20 @@ class Character:
260
260
  description: str | None = None
261
261
  prompt: str | None = None
262
262
  prefix: str | None = None
263
-
263
+
264
264
  # Class/Race/Clan
265
265
  sex: int = 0
266
266
  ch_class: int = 0
267
267
  race: int = 0
268
268
  clan: int = 0
269
269
  group: int = 0 # Group number for area repop (ROM: sh_int group)
270
-
270
+
271
271
  # Levels and trust
272
272
  level: int = 0
273
273
  trust: int = 0
274
274
  invis_level: int = 0
275
275
  incog_level: int = 0
276
-
276
+
277
277
  # Stats
278
278
  hit: int = 0
279
279
  max_hit: int = 0
@@ -284,76 +284,77 @@ class Character:
284
284
  gold: int = 0
285
285
  silver: int = 0
286
286
  exp: int = 0
287
-
287
+
288
288
  # Flags
289
289
  act: int = 0
290
290
  affected_by: int = 0
291
-
291
+
292
292
  # Location
293
293
  position: int = Position.STANDING
294
294
  room: Room | None = None # ROM: in_room
295
295
  was_in_room: Room | None = None # ROM: was_in_room
296
296
  zone: object | None = None # ROM: AREA_DATA *zone
297
-
297
+
298
298
  # Relationships
299
299
  master: Character | None = None
300
300
  leader: Character | None = None
301
301
  pet: "Character | None" = None
302
302
  reply: Character | None = None # ROM: reply target for tells
303
303
  mprog_target: "Character | None" = None # ROM: mob program target
304
-
304
+ on: "Object | None" = None # ROM: furniture character is sitting/resting on (affects heal rate)
305
+
305
306
  # Skills and training
306
307
  practice: int = 0
307
308
  train: int = 0
308
309
  skills: dict[str, int] = field(default_factory=dict)
309
-
310
+
310
311
  # Encumbrance
311
312
  carry_weight: int = 0
312
313
  carry_number: int = 0
313
-
314
+
314
315
  # Combat stats
315
316
  saving_throw: int = 0
316
317
  alignment: int = 0
317
318
  hitroll: int = 0
318
319
  damroll: int = 0
319
320
  wimpy: int = 0
320
-
321
+
321
322
  # Display/UI
322
323
  lines: int = DEFAULT_PAGE_LINES
323
324
  newbie_help_seen: bool = False
324
-
325
+
325
326
  # Time tracking
326
327
  played: int = 0
327
328
  logon: int = 0
328
329
  timer: int = 0 # ROM: idle timer
329
-
330
+
330
331
  # Stats (permanent and temporary modifiers)
331
332
  perm_stat: list[int] = field(default_factory=list)
332
333
  mod_stat: list[int] = field(default_factory=list)
333
-
334
+
334
335
  # Body form and parts
335
336
  form: int = 0
336
337
  parts: int = 0
337
338
  size: int = 0
338
339
  material: str | None = None
339
340
  off_flags: int = 0
340
-
341
+
341
342
  # ROM parity: immunity/resistance/vulnerability bitvectors (merc.h)
342
343
  imm_flags: int = 0
343
344
  res_flags: int = 0
344
345
  vuln_flags: int = 0
345
-
346
+
346
347
  # Damage and attack type
347
348
  damage: list[int] = field(default_factory=lambda: [0, 0, 0])
348
349
  dam_type: int = 0
349
350
  start_pos: int = 0
350
351
  default_pos: int = 0
351
-
352
+
352
353
  # Mob programs
353
354
  mprog_delay: int = 0
354
355
  mob_programs: list[MobProgram] = field(default_factory=list)
355
356
  spec_fun: str | None = None # ROM: special function name
356
-
357
+
357
358
  # Custom fields (Python-specific)
358
359
  hometown_vnum: int = 0
359
360
  pcdata: PCData | None = None
@@ -365,7 +366,7 @@ class Character:
365
366
  connection: object | None = None
366
367
  desc: object | None = None # ROM: DESCRIPTOR_DATA
367
368
  is_admin: bool = False
368
-
369
+
369
370
  # Communication and channels
370
371
  imc_permission: str = "Mort" # IMC permission level (Notset/None/Mort/Imm/Admin/Imp)
371
372
  muted_channels: set[str] = field(default_factory=set)
@@ -374,33 +375,33 @@ class Character:
374
375
  wiznet: int = 0 # ROM: wiznet flags
375
376
  comm: int = 0 # ROM: comm flags
376
377
  log_commands: bool = False # Per-character admin logging flag mirroring ROM PLR_LOG
377
-
378
+
378
379
  # Wait state and delays
379
380
  wait: int = 0 # Wait-state (pulses) applied by actions like movement (ROM WAIT_STATE)
380
381
  daze: int = 0 # Daze (pulses) — separate action delay used by ROM combat
381
-
382
+
382
383
  # Armor class per index [AC_PIERCE, AC_BASH, AC_SLASH, AC_EXOTIC]
383
384
  armor: list[int] = field(default_factory=lambda: [100, 100, 100, 100])
384
-
385
+
385
386
  # Per-character command aliases: name -> expansion (pre-dispatch)
386
387
  aliases: dict[str, str] = field(default_factory=dict)
387
-
388
+
388
389
  # Optional defense chances (percent) for parity-friendly tests
389
390
  shield_block_chance: int = 0
390
391
  parry_chance: int = 0
391
392
  dodge_chance: int = 0
392
-
393
+
393
394
  # Combat skill levels (0-100) for multi-attack mechanics
394
395
  second_attack_skill: int = 0
395
396
  third_attack_skill: int = 0
396
397
  enhanced_damage_skill: int = 0 # Enhanced damage skill level (0-100)
397
-
398
+
398
399
  # Combat state - currently fighting target
399
400
  fighting: Character | None = None
400
-
401
+
401
402
  # Character type flag
402
403
  is_npc: bool = True # Default to NPC, set to False for PCs
403
-
404
+
404
405
  # Spell effects and character generation
405
406
  spell_effects: dict[str, SpellEffect] = field(default_factory=dict) # Active spell effects keyed by skill name
406
407
  default_weapon_vnum: int = 0
@@ -1354,7 +1354,7 @@ def bless(caster: Character, target: Character | None = None) -> bool:
1354
1354
  if target is None:
1355
1355
  raise ValueError("bless requires a target")
1356
1356
 
1357
- if target.position == Position.FIGHTING:
1357
+ if target.position == Position.FIGHTING or target.has_spell_effect("bless"):
1358
1358
  return False
1359
1359
 
1360
1360
  level = max(getattr(caster, "level", 0), 0)
@@ -1890,31 +1890,29 @@ def chain_lightning(caster: Character, target: Character | None = None) -> bool:
1890
1890
  if level <= 0:
1891
1891
  break
1892
1892
 
1893
- if found or level <= 0:
1894
- continue
1893
+ if not found:
1894
+ if last_victim is caster:
1895
+ broadcast_room(
1896
+ room,
1897
+ "The bolt seems to have fizzled out.",
1898
+ exclude=caster,
1899
+ )
1900
+ _send_to_char(caster, "The bolt grounds out through your body.")
1901
+ break
1895
1902
 
1896
- if last_victim is caster:
1903
+ last_victim = caster
1897
1904
  broadcast_room(
1898
1905
  room,
1899
- "The bolt seems to have fizzled out.",
1906
+ f"The bolt arcs to {caster_name}...whoops!",
1900
1907
  exclude=caster,
1901
1908
  )
1902
- _send_to_char(caster, "The bolt grounds out through your body.")
1903
- break
1904
-
1905
- last_victim = caster
1906
- broadcast_room(
1907
- room,
1908
- f"The bolt arcs to {caster_name}...whoops!",
1909
- exclude=caster,
1910
- )
1911
- _send_to_char(caster, "You are struck by your own lightning!")
1912
- damage = rng_mm.dice(level, 6)
1913
- if saves_spell(level, caster, DamageType.LIGHTNING):
1914
- damage = c_div(damage, 3)
1915
- apply_damage(caster, caster, damage, DamageType.LIGHTNING, dt="chain lightning")
1916
- any_hit = any_hit or damage > 0
1917
- level -= 4
1909
+ _send_to_char(caster, "You are struck by your own lightning!")
1910
+ damage = rng_mm.dice(level, 6)
1911
+ if saves_spell(level, caster, DamageType.LIGHTNING):
1912
+ damage = c_div(damage, 3)
1913
+ apply_damage(caster, caster, damage, DamageType.LIGHTNING, dt="chain lightning")
1914
+ any_hit = any_hit or damage > 0
1915
+ level -= 4
1918
1916
 
1919
1917
  return any_hit
1920
1918
 
@@ -3100,7 +3098,11 @@ def disarm(caster: Character, target: Character | None = None) -> bool:
3100
3098
  victim_weapon.wear_loc = int(WearLocation.NONE)
3101
3099
 
3102
3100
  drop_room = getattr(victim, "room", None)
3103
- if drop_room is not None and hasattr(drop_room, "add_object"):
3101
+
3102
+ # ROM src/fight.c:2258-2265 - ITEM_NODROP/ITEM_INVENTORY keep weapon on victim.
3103
+ if extra_flags & (int(ExtraFlag.NODROP) | int(ExtraFlag.INVENTORY)):
3104
+ victim.add_object(victim_weapon)
3105
+ elif drop_room is not None and hasattr(drop_room, "add_object"):
3104
3106
  drop_room.add_object(victim_weapon)
3105
3107
  else:
3106
3108
  victim.add_object(victim_weapon)
@@ -0,0 +1,153 @@
1
+ """ROM say_spell utility - syllable substitution for spell casting messages.
2
+
3
+ Mirroring ROM src/magic.c:132-207
4
+ """
5
+
6
+ from __future__ import annotations
7
+
8
+ from typing import TYPE_CHECKING, Any
9
+
10
+ if TYPE_CHECKING:
11
+ pass # Avoid import errors during type checking
12
+
13
+
14
+ # ROM src/magic.c:146-178 - Syllable substitution table
15
+ _SYL_TABLE = [
16
+ (" ", " "),
17
+ ("ar", "abra"),
18
+ ("au", "kada"),
19
+ ("bless", "fido"),
20
+ ("blind", "nose"),
21
+ ("bur", "mosa"),
22
+ ("cu", "judi"),
23
+ ("de", "oculo"),
24
+ ("en", "unso"),
25
+ ("light", "dies"),
26
+ ("lo", "hi"),
27
+ ("mor", "zak"),
28
+ ("move", "sido"),
29
+ ("ness", "lacri"),
30
+ ("ning", "illa"),
31
+ ("per", "duda"),
32
+ ("ra", "gru"),
33
+ ("fresh", "ima"),
34
+ ("re", "candus"),
35
+ ("son", "sabru"),
36
+ ("tect", "infra"),
37
+ ("tri", "cula"),
38
+ ("ven", "nofo"),
39
+ # Single character substitutions
40
+ ("a", "a"),
41
+ ("b", "b"),
42
+ ("c", "q"),
43
+ ("d", "e"),
44
+ ("e", "z"),
45
+ ("f", "y"),
46
+ ("g", "o"),
47
+ ("h", "p"),
48
+ ("i", "u"),
49
+ ("j", "y"),
50
+ ("k", "t"),
51
+ ("l", "r"),
52
+ ("m", "w"),
53
+ ("n", "i"),
54
+ ("o", "a"),
55
+ ("p", "s"),
56
+ ("q", "d"),
57
+ ("r", "f"),
58
+ ("s", "g"),
59
+ ("t", "h"),
60
+ ("u", "j"),
61
+ ("v", "z"),
62
+ ("w", "x"),
63
+ ("x", "n"),
64
+ ("y", "l"),
65
+ ("z", "k"),
66
+ ("", ""), # Terminator
67
+ ]
68
+
69
+
70
+ def say_spell(caster: Any, spell_name: str) -> tuple[str, str]:
71
+ """ROM say_spell: convert spell name to gibberish for non-class observers.
72
+
73
+ Args:
74
+ caster: Character casting the spell
75
+ spell_name: Name of the spell being cast
76
+
77
+ Returns:
78
+ Tuple of (actual_words, garbled_words)
79
+ - actual_words: Message shown to same-class observers
80
+ - garbled_words: Message shown to different-class observers
81
+
82
+ ROM C Reference: src/magic.c:132-207
83
+ """
84
+ if not spell_name:
85
+ return ("", "")
86
+
87
+ # Build garbled version using syllable substitution
88
+ garbled = []
89
+ name_lower = spell_name.lower()
90
+ pos = 0
91
+
92
+ while pos < len(name_lower):
93
+ matched = False
94
+
95
+ # Try each syllable in the table
96
+ for old, new in _SYL_TABLE:
97
+ if not old: # Terminator
98
+ break
99
+
100
+ if name_lower[pos:].startswith(old):
101
+ garbled.append(new)
102
+ pos += len(old)
103
+ matched = True
104
+ break
105
+
106
+ # If no match, advance by 1 character
107
+ if not matched:
108
+ pos += 1
109
+
110
+ garbled_words = "".join(garbled)
111
+
112
+ # Format messages
113
+ actual_msg = f"$n utters the words, '{spell_name}'."
114
+ garbled_msg = f"$n utters the words, '{garbled_words}'."
115
+
116
+ return (actual_msg, garbled_msg)
117
+
118
+
119
+ def broadcast_spell_words(caster: Any, spell_name: str) -> None:
120
+ """Broadcast spell words to room with class-based filtering.
121
+
122
+ ROM C Reference: src/magic.c:199-204
123
+ """
124
+ # Import here to avoid circular dependencies
125
+ try:
126
+ from mud.net.protocol import broadcast_room
127
+ except ImportError:
128
+ # Gracefully handle if module not available
129
+ return
130
+
131
+ room = getattr(caster, "room", None)
132
+ if room is None:
133
+ return
134
+
135
+ actual_msg, garbled_msg = say_spell(caster, spell_name)
136
+ caster_class = getattr(caster, "ch_class", None)
137
+
138
+ # ROM L199-203: Show actual words to same class, garbled to others
139
+ for occupant in list(getattr(room, "people", []) or []):
140
+ if occupant is caster:
141
+ continue
142
+
143
+ is_npc = getattr(occupant, "is_npc", True)
144
+ occupant_class = getattr(occupant, "ch_class", None)
145
+
146
+ # Non-NPCs of same class see actual words, others see garbled
147
+ if not is_npc and caster_class == occupant_class:
148
+ message = actual_msg.replace("$n", getattr(caster, "name", "Someone"))
149
+ else:
150
+ message = garbled_msg.replace("$n", getattr(caster, "name", "Someone"))
151
+
152
+ if hasattr(occupant, "messages"):
153
+ occupant.messages.append(message)