rom24-quickmud-python 2.7.0__tar.gz → 2.8.21__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 (820) hide show
  1. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/CHANGELOG.md +285 -0
  2. {rom24_quickmud_python-2.7.0/rom24_quickmud_python.egg-info → rom24_quickmud_python-2.8.21}/PKG-INFO +22 -34
  3. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/README.md +19 -33
  4. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/air.json +358 -221
  5. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/arachnos.json +163 -345
  6. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/astral.json +488 -1418
  7. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/canyon.json +323 -1315
  8. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/catacomb.json +147 -653
  9. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/chapel.json +371 -1040
  10. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/daycare.json +97 -372
  11. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/draconia.json +245 -1330
  12. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/dream.json +507 -447
  13. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/drow.json +253 -665
  14. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/dwarven.json +156 -624
  15. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/dylan.json +62 -197
  16. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/eastern.json +365 -1104
  17. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/galaxy.json +278 -1256
  18. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/gnome.json +223 -898
  19. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/grave.json +92 -403
  20. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/grove.json +121 -515
  21. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/haon.json +107 -717
  22. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/help.json +6 -3
  23. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/hitower.json +742 -3457
  24. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/hood.json +109 -667
  25. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/immort.json +30 -26
  26. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/mahntor.json +821 -3343
  27. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/marsh.json +139 -375
  28. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/mega1.json +225 -716
  29. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/midennir.json +237 -356
  30. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/mirror.json +700 -1463
  31. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/mobfact.json +197 -148
  32. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/moria.json +781 -1561
  33. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/newthalos.json +861 -3373
  34. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/nirvana.json +101 -204
  35. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/ofcol.json +12 -3
  36. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/ofcol2.json +780 -2650
  37. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/olympus.json +237 -1054
  38. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/plains.json +94 -414
  39. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/pyramid.json +178 -1160
  40. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/quifael.json +9 -2
  41. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/redferne.json +22 -106
  42. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/school.json +517 -1005
  43. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/sewer.json +215 -1330
  44. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/shire.json +306 -826
  45. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/smurf.json +123 -408
  46. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/thalos.json +430 -1341
  47. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/tohell.json +617 -2254
  48. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/trollden.json +92 -289
  49. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/valley.json +547 -1030
  50. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/wyvern.json +434 -1015
  51. rom24_quickmud_python-2.8.21/data/time.json +7 -0
  52. rom24_quickmud_python-2.8.21/mud/account/account_manager.py +328 -0
  53. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/account/account_service.py +23 -18
  54. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/advancement.py +8 -2
  55. rom24_quickmud_python-2.8.21/mud/affects/engine.py +82 -0
  56. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/ai/__init__.py +0 -54
  57. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/combat/engine.py +54 -28
  58. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/admin_commands.py +4 -1
  59. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/build.py +1184 -95
  60. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/character.py +2 -4
  61. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/combat.py +7 -3
  62. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/communication.py +5 -1
  63. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/dispatcher.py +77 -16
  64. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/imm_admin.py +8 -0
  65. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/imm_olc.py +292 -63
  66. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/notes.py +42 -1
  67. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/remaining_rom.py +44 -6
  68. rom24_quickmud_python-2.8.21/mud/db/migrations.py +129 -0
  69. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/db/models.py +48 -1
  70. rom24_quickmud_python-2.8.21/mud/db/serializers.py +622 -0
  71. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/game_loop.py +225 -33
  72. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/groups/xp.py +30 -30
  73. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/handler.py +2 -5
  74. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/json_loader.py +5 -1
  75. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/obj_loader.py +6 -5
  76. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/board.py +1 -0
  77. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/character.py +181 -14
  78. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/mob.py +25 -0
  79. rom24_quickmud_python-2.8.21/mud/models/titles.py +292 -0
  80. rom24_quickmud_python-2.8.21/mud/models/weapon_table.py +86 -0
  81. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/music/__init__.py +69 -9
  82. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/net/connection.py +210 -12
  83. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/network/websocket_server.py +21 -13
  84. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/network/websocket_stream.py +3 -0
  85. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/skills/registry.py +4 -7
  86. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/utils/act.py +9 -5
  87. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/utils/prompt.py +96 -6
  88. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/wiznet.py +17 -0
  89. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/world/char_find.py +4 -0
  90. rom24_quickmud_python-2.8.21/mud/world/time_persistence.py +61 -0
  91. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/world/world_state.py +9 -0
  92. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/pyproject.toml +7 -1
  93. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21/rom24_quickmud_python.egg-info}/PKG-INFO +22 -34
  94. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/rom24_quickmud_python.egg-info/SOURCES.txt +31 -7
  95. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/rom24_quickmud_python.egg-info/requires.txt +2 -0
  96. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_boards_rom_parity.py +145 -3
  97. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_character_advancement.py +51 -4
  98. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_character_creation_runtime.py +53 -4
  99. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_communication_enhancement.py +5 -2
  100. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_consumables.py +0 -6
  101. rom24_quickmud_python-2.8.21/tests/integration/test_db_canonical_round_trip.py +433 -0
  102. rom24_quickmud_python-2.8.21/tests/integration/test_fight_c_do_kill_parity.py +67 -0
  103. rom24_quickmud_python-2.8.21/tests/integration/test_fight_c_safe_room_damage_gate.py +78 -0
  104. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_flag_command_parity.py +39 -5
  105. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_group_combat.py +7 -2
  106. rom24_quickmud_python-2.8.21/tests/integration/test_hedit_parity.py +268 -0
  107. rom24_quickmud_python-2.8.21/tests/integration/test_inv005_same_room_combat.py +100 -0
  108. rom24_quickmud_python-2.8.21/tests/integration/test_inv006_fighting_pointer_coherence.py +104 -0
  109. rom24_quickmud_python-2.8.21/tests/integration/test_inv008_persistence_coherence.py +191 -0
  110. rom24_quickmud_python-2.8.21/tests/integration/test_message_delivery_no_duplicate.py +76 -0
  111. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mob_ai.py +136 -62
  112. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_money_objects.py +36 -30
  113. rom24_quickmud_python-2.8.21/tests/integration/test_mpedit_001_interpret_mpedit.py +226 -0
  114. rom24_quickmud_python-2.8.21/tests/integration/test_mpedit_002_do_mpedit.py +114 -0
  115. rom24_quickmud_python-2.8.21/tests/integration/test_mpedit_003_mprog_code_model.py +70 -0
  116. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_music_play.py +83 -3
  117. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_nanny_login_parity.py +11 -1
  118. rom24_quickmud_python-2.8.21/tests/integration/test_olc_001_run_olc_editor.py +90 -0
  119. rom24_quickmud_python-2.8.21/tests/integration/test_olc_007_redit_list_show.py +236 -0
  120. rom24_quickmud_python-2.8.21/tests/integration/test_olc_008_oedit_missing_cmds.py +282 -0
  121. rom24_quickmud_python-2.8.21/tests/integration/test_olc_009_medit_missing_cmds.py +416 -0
  122. rom24_quickmud_python-2.8.21/tests/integration/test_olc_010_015_do_olc_router.py +252 -0
  123. rom24_quickmud_python-2.8.21/tests/integration/test_olc_011_aedit_flag_toggle.py +202 -0
  124. rom24_quickmud_python-2.8.21/tests/integration/test_olc_012_014_editor_fallback.py +211 -0
  125. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_alist.py +10 -5
  126. rom24_quickmud_python-2.8.21/tests/integration/test_olc_commands_listing.py +97 -0
  127. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_do_resets_subcommands.py +72 -0
  128. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_010_asave_area_dispatch.py +4 -8
  129. rom24_quickmud_python-2.8.21/tests/integration/test_olc_save_014_017_message_strings.py +137 -0
  130. rom24_quickmud_python-2.8.21/tests/integration/test_pc_death_keeps_connection.py +123 -0
  131. rom24_quickmud_python-2.8.21/tests/integration/test_pc_death_no_message_replay.py +90 -0
  132. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_prompt_rom_parity.py +35 -0
  133. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_skills_integration.py +38 -48
  134. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_spell_affects_persistence.py +116 -8
  135. rom24_quickmud_python-2.8.21/tests/integration/test_update_c_parity.py +447 -0
  136. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_account_auth.py +280 -28
  137. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_advancement.py +83 -4
  138. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_affects.py +59 -14
  139. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_area_loader.py +9 -3
  140. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_boards.py +44 -8
  141. rom24_quickmud_python-2.8.21/tests/test_builder_hedit.py +294 -0
  142. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_building.py +1 -1
  143. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat.py +53 -4
  144. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_defenses_prob.py +2 -2
  145. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_rom_parity.py +2 -1
  146. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_thac0_engine.py +2 -2
  147. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_commands.py +41 -15
  148. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_fighting_state.py +26 -0
  149. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_game_loop.py +53 -17
  150. rom24_quickmud_python-2.8.21/tests/test_game_loop_order.py +71 -0
  151. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_game_loop_wait_daze.py +1 -0
  152. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_logging_admin.py +52 -30
  153. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_mobprog_triggers.py +2 -0
  154. rom24_quickmud_python-2.8.21/tests/test_obj_loader.py +8 -0
  155. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_obj_update_rom_parity.py +18 -3
  156. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_olc_aedit.py +3 -0
  157. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_olc_medit.py +8 -7
  158. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_olc_oedit.py +8 -7
  159. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_olc_save.py +1 -1
  160. rom24_quickmud_python-2.8.21/tests/test_prompt_clamps_hp.py +54 -0
  161. rom24_quickmud_python-2.8.21/tests/test_rng_determinism.py +22 -0
  162. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_scan_parity.py +5 -8
  163. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_scripted_session.py +2 -2
  164. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skill_combat_rom_parity.py +24 -14
  165. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills.py +6 -6
  166. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_telnet_server.py +10 -0
  167. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_time_persistence.py +1 -1
  168. rom24_quickmud_python-2.8.21/tests/test_weapon_table_parity.py +97 -0
  169. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_wiznet.py +63 -12
  170. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_world.py +14 -0
  171. rom24_quickmud_python-2.7.0/data/time.json +0 -7
  172. rom24_quickmud_python-2.7.0/mud/account/account_manager.py +0 -108
  173. rom24_quickmud_python-2.7.0/mud/affects/engine.py +0 -32
  174. rom24_quickmud_python-2.7.0/mud/db/migrations.py +0 -63
  175. rom24_quickmud_python-2.7.0/mud/persistence.py +0 -1239
  176. rom24_quickmud_python-2.7.0/tests/integration/test_pet_persistence.py +0 -515
  177. rom24_quickmud_python-2.7.0/tests/integration/test_save_load_parity.py +0 -508
  178. rom24_quickmud_python-2.7.0/tests/integration/test_tables_001_affect_migration.py +0 -139
  179. rom24_quickmud_python-2.7.0/tests/test_builder_hedit.py +0 -300
  180. rom24_quickmud_python-2.7.0/tests/test_game_loop_order.py +0 -61
  181. rom24_quickmud_python-2.7.0/tests/test_inventory_persistence.py +0 -27
  182. rom24_quickmud_python-2.7.0/tests/test_persistence.py +0 -227
  183. rom24_quickmud_python-2.7.0/tests/test_player_save_format.py +0 -758
  184. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/LICENSE +0 -0
  185. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/MANIFEST.in +0 -0
  186. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/air.are +0 -0
  187. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/arachnos.are +0 -0
  188. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/area.lst +0 -0
  189. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/astral.are +0 -0
  190. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/canyon.are +0 -0
  191. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/catacomb.are +0 -0
  192. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/chapel.are +0 -0
  193. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/daycare.are +0 -0
  194. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/draconia.are +0 -0
  195. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/dream.are +0 -0
  196. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/drow.are +0 -0
  197. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/dwarven.are +0 -0
  198. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/dylan.are +0 -0
  199. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/eastern.are +0 -0
  200. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/galaxy.are +0 -0
  201. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/gnome.are +0 -0
  202. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/grave.are +0 -0
  203. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/group.are +0 -0
  204. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/grove.are +0 -0
  205. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/haon.are +0 -0
  206. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/help.are +0 -0
  207. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/hitower.are +0 -0
  208. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/hood.are +0 -0
  209. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/immort.are +0 -0
  210. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/limbo.are +0 -0
  211. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/mahntor.are +0 -0
  212. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/marsh.are +0 -0
  213. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/mega1.are +0 -0
  214. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/midennir.are +0 -0
  215. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/midgaard.are +0 -0
  216. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/mirror.are +0 -0
  217. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/mobfact.are +0 -0
  218. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/moria.are +0 -0
  219. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/newthalos.are +0 -0
  220. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/nirvana.are +0 -0
  221. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/ofcol.are +0 -0
  222. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/ofcol2.are +0 -0
  223. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/olympus.are +0 -0
  224. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/plains.are +0 -0
  225. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/proto.are +0 -0
  226. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/pyramid.are +0 -0
  227. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/quifael.are +0 -0
  228. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/redferne.are +0 -0
  229. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/rom.are +0 -0
  230. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/school.are +0 -0
  231. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/sewer.are +0 -0
  232. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/shire.are +0 -0
  233. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/smurf.are +0 -0
  234. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/social.are +0 -0
  235. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/thalos.are +0 -0
  236. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/tohell.are +0 -0
  237. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/trollden.are +0 -0
  238. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/valley.are +0 -0
  239. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/area/wyvern.are +0 -0
  240. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/area.json +0 -0
  241. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/area_0.json +0 -0
  242. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/group.json +0 -0
  243. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/limbo.json +0 -0
  244. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/midgaard.json +0 -0
  245. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/rom.json +0 -0
  246. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas/social.json +0 -0
  247. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/arachnos.json +0 -0
  248. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/area.json +0 -0
  249. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/area_0.json +0 -0
  250. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/astral_plane.json +0 -0
  251. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/catacombs.json +0 -0
  252. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/chapel.json +0 -0
  253. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/day_care.json +0 -0
  254. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/dragon_tower.json +0 -0
  255. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/drow_city.json +0 -0
  256. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/dwarven_kingdom.json +0 -0
  257. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/dylan's_area.json +0 -0
  258. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/elemental_canyon.json +0 -0
  259. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/galaxy.json +0 -0
  260. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/gangland.json +0 -0
  261. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/gnome_village.json +0 -0
  262. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/graveyard.json +0 -0
  263. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/group.json +0 -0
  264. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/haon_dor.json +0 -0
  265. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/help.json +0 -0
  266. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/high_tower.json +0 -0
  267. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/holy_grove.json +0 -0
  268. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/in_the_air.json +0 -0
  269. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/limbo.json +0 -0
  270. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/machine_dreams.json +0 -0
  271. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/mahn-tor.json +0 -0
  272. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/marsh.json +0 -0
  273. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/mega_city_one.json +0 -0
  274. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/miden'nir.json +0 -0
  275. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/midgaard.json +0 -0
  276. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/mob_factory.json +0 -0
  277. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/moria.json +0 -0
  278. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/mud_school.json +0 -0
  279. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/new_ofcol.json +0 -0
  280. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/new_thalos.json +0 -0
  281. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/nirvana.json +0 -0
  282. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/ofcol.json +0 -0
  283. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/old_thalos.json +0 -0
  284. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/olympus.json +0 -0
  285. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/plains.json +0 -0
  286. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/pyramid.json +0 -0
  287. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/quifael's.json +0 -0
  288. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/redferne's.json +0 -0
  289. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/rom.json +0 -0
  290. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/sands_of_sorrow.json +0 -0
  291. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/sewers.json +0 -0
  292. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/shire.json +0 -0
  293. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/smurfville.json +0 -0
  294. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/social.json +0 -0
  295. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/thalos.json +0 -0
  296. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/tohell.json +0 -0
  297. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/troll_den.json +0 -0
  298. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/valhalla.json +0 -0
  299. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/valley_of_the_elves.json +0 -0
  300. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/areas_backup/wyvern's_tower.json +0 -0
  301. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/help.json +0 -0
  302. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/players/.json +0 -0
  303. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/players/attacker.json +0 -0
  304. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/players/eddol.json +0 -0
  305. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/players/hero.json +0 -0
  306. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/players/sleeper.json +0 -0
  307. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/players/trouble.json +0 -0
  308. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/shops.json +0 -0
  309. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/skills.json +0 -0
  310. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/data/socials.json +0 -0
  311. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/MPDocs/examples.doc +0 -0
  312. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/MPDocs/hacker.doc +0 -0
  313. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/MPDocs/mobprog.doc +0 -0
  314. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/MPDocs/new_readme.txt +0 -0
  315. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/QuickMUD.txt +0 -0
  316. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/Rom2.4.doc +0 -0
  317. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/act.txt +0 -0
  318. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/area.txt +0 -0
  319. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/c_module_inventory.md +0 -0
  320. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/c_python_cross_reference.md +0 -0
  321. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/c_to_python_file_coverage.md +0 -0
  322. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/class.txt +0 -0
  323. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/command.txt +0 -0
  324. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/contrib.txt +0 -0
  325. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/drool.txt +0 -0
  326. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/hacker.txt +0 -0
  327. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/license.doc +0 -0
  328. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/license.txt +0 -0
  329. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/memory.txt +0 -0
  330. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/new.txt +0 -0
  331. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/pfile.txt +0 -0
  332. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/port.txt +0 -0
  333. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/pr_queue.md +0 -0
  334. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/python_architecture.md +0 -0
  335. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/python_module_inventory.md +0 -0
  336. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/security.txt +0 -0
  337. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/sites.txt +0 -0
  338. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/skill.txt +0 -0
  339. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/sky.txt +0 -0
  340. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/trad.txt +0 -0
  341. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/vnum.txt +0 -0
  342. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/doc/~$Rom2.4.doc +0 -0
  343. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/__init__.py +0 -0
  344. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/__main__.py +0 -0
  345. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/account/__init__.py +0 -0
  346. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/admin_logging/__init__.py +0 -0
  347. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/admin_logging/admin.py +0 -0
  348. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/admin_logging/agent_trace.py +0 -0
  349. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/affects/saves.py +0 -0
  350. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/agent/__init__.py +0 -0
  351. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/agent/agent_protocol.py +0 -0
  352. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/agent/character_agent.py +0 -0
  353. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/ai/aggressive.py +0 -0
  354. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/characters/__init__.py +0 -0
  355. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/characters/conditions.py +0 -0
  356. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/characters/follow.py +0 -0
  357. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/combat/__init__.py +0 -0
  358. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/combat/assist.py +0 -0
  359. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/combat/death.py +0 -0
  360. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/combat/kill_table.py +0 -0
  361. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/combat/messages.py +0 -0
  362. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/combat/safety.py +0 -0
  363. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/__init__.py +0 -0
  364. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/advancement.py +0 -0
  365. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/affects.py +0 -0
  366. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/alias_cmds.py +0 -0
  367. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/auto_settings.py +0 -0
  368. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/channels.py +0 -0
  369. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/compare.py +0 -0
  370. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/consider.py +0 -0
  371. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/consumption.py +0 -0
  372. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/decorators.py +0 -0
  373. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/doors.py +0 -0
  374. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/equipment.py +0 -0
  375. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/feedback.py +0 -0
  376. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/give.py +0 -0
  377. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/group_commands.py +0 -0
  378. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/healer.py +0 -0
  379. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/help.py +0 -0
  380. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/imc.py +0 -0
  381. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/imm_commands.py +0 -0
  382. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/imm_display.py +0 -0
  383. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/imm_emote.py +0 -0
  384. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/imm_load.py +0 -0
  385. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/imm_punish.py +0 -0
  386. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/imm_search.py +0 -0
  387. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/imm_server.py +0 -0
  388. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/imm_set.py +0 -0
  389. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/info.py +0 -0
  390. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/info_extended.py +0 -0
  391. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/inspection.py +0 -0
  392. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/inventory.py +0 -0
  393. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/liquids.py +0 -0
  394. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/magic_items.py +0 -0
  395. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/misc_info.py +0 -0
  396. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/misc_player.py +0 -0
  397. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/mobprog_tools.py +0 -0
  398. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/movement.py +0 -0
  399. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/murder.py +0 -0
  400. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/obj_manipulation.py +0 -0
  401. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/player_config.py +0 -0
  402. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/player_info.py +0 -0
  403. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/position.py +0 -0
  404. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/session.py +0 -0
  405. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/shop.py +0 -0
  406. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/socials.py +0 -0
  407. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/thief_skills.py +0 -0
  408. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/commands/typo_guards.py +0 -0
  409. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/config.py +0 -0
  410. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/db/__init__.py +0 -0
  411. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/db/init.py +0 -0
  412. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/db/migrate_from_files.py +0 -0
  413. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/db/seed.py +0 -0
  414. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/db/session.py +0 -0
  415. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/devtools/__init__.py +0 -0
  416. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/devtools/agent_demo.py +0 -0
  417. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/entrypoint.py +0 -0
  418. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/game_tick_scheduler.py +0 -0
  419. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/groups/__init__.py +0 -0
  420. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/imc/__init__.py +0 -0
  421. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/imc/commands.py +0 -0
  422. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/imc/network.py +0 -0
  423. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/imc/protocol.py +0 -0
  424. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/__init__.py +0 -0
  425. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/area_loader.py +0 -0
  426. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/base_loader.py +0 -0
  427. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/help_loader.py +0 -0
  428. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/json_area_loader.py +0 -0
  429. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/mob_loader.py +0 -0
  430. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/mobprog_loader.py +0 -0
  431. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/reset_loader.py +0 -0
  432. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/room_loader.py +0 -0
  433. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/shop_loader.py +0 -0
  434. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/social_loader.py +0 -0
  435. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/loaders/specials_loader.py +0 -0
  436. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/logging.py +0 -0
  437. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/magic/__init__.py +0 -0
  438. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/magic/effects.py +0 -0
  439. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/math/c_compat.py +0 -0
  440. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/math/stat_apps.py +0 -0
  441. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/mob_cmds.py +0 -0
  442. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/mobprog.py +0 -0
  443. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/__init__.py +0 -0
  444. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/area.py +0 -0
  445. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/area_json.py +0 -0
  446. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/board_json.py +0 -0
  447. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/character_json.py +0 -0
  448. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/clans.py +0 -0
  449. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/classes.py +0 -0
  450. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/constants.py +0 -0
  451. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/conversion.py +0 -0
  452. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/help.py +0 -0
  453. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/help_json.py +0 -0
  454. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/json_io.py +0 -0
  455. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/note.py +0 -0
  456. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/note_json.py +0 -0
  457. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/obj.py +0 -0
  458. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/object.py +0 -0
  459. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/object_json.py +0 -0
  460. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/player_json.py +0 -0
  461. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/races.py +0 -0
  462. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/room.py +0 -0
  463. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/room_json.py +0 -0
  464. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/shop.py +0 -0
  465. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/shop_json.py +0 -0
  466. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/skill.py +0 -0
  467. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/skill_json.py +0 -0
  468. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/social.py +0 -0
  469. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/models/social_json.py +0 -0
  470. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/net/__init__.py +0 -0
  471. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/net/ansi.py +0 -0
  472. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/net/protocol.py +0 -0
  473. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/net/session.py +0 -0
  474. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/net/ssh_server.py +0 -0
  475. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/net/telnet_server.py +0 -0
  476. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/network/__init__.py +0 -0
  477. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/network/websocket_session.py +0 -0
  478. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/notes.py +0 -0
  479. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/olc/__init__.py +0 -0
  480. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/olc/editor_state.py +0 -0
  481. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/olc/save.py +0 -0
  482. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/registry.py +0 -0
  483. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/rom_api.py +0 -0
  484. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/scripts/convert_are_to_json.py +0 -0
  485. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/scripts/convert_help_are_to_json.py +0 -0
  486. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/scripts/convert_player_to_json.py +0 -0
  487. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/scripts/convert_shops_to_json.py +0 -0
  488. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/scripts/convert_skills_to_json.py +0 -0
  489. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/scripts/convert_social_are_to_json.py +0 -0
  490. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/scripts/load_test_data.py +0 -0
  491. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/security/__init__.py +0 -0
  492. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/security/bans.py +0 -0
  493. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/security/hash_utils.py +0 -0
  494. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/server.py +0 -0
  495. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/skills/__init__.py +0 -0
  496. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/skills/groups.py +0 -0
  497. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/skills/handlers.py +0 -0
  498. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/skills/metadata.py +0 -0
  499. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/skills/say_spell.py +0 -0
  500. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/spawning/__init__.py +0 -0
  501. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/spawning/mob_spawner.py +0 -0
  502. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/spawning/obj_spawner.py +0 -0
  503. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/spawning/reset_handler.py +0 -0
  504. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/spawning/templates.py +0 -0
  505. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/spec_funs.py +0 -0
  506. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/time.py +0 -0
  507. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/utils/bit.py +0 -0
  508. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/utils/fix_sex.py +0 -0
  509. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/utils/olc_tables.py +0 -0
  510. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/utils/poses.py +0 -0
  511. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/utils/prefix_lookup.py +0 -0
  512. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/utils/rng_mm.py +0 -0
  513. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/utils/string_editor.py +0 -0
  514. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/utils/text.py +0 -0
  515. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/world/__init__.py +0 -0
  516. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/world/linking.py +0 -0
  517. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/world/look.py +0 -0
  518. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/world/movement.py +0 -0
  519. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/world/obj_find.py +0 -0
  520. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/mud/world/vision.py +0 -0
  521. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/rom24_quickmud_python.egg-info/dependency_links.txt +0 -0
  522. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/rom24_quickmud_python.egg-info/entry_points.txt +0 -0
  523. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/rom24_quickmud_python.egg-info/top_level.txt +0 -0
  524. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/setup.cfg +0 -0
  525. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/setup.py +0 -0
  526. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/conftest.py +0 -0
  527. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/helpers.py +0 -0
  528. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/helpers_player.py +0 -0
  529. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/conftest.py +0 -0
  530. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_act_comm_gaps.py +0 -0
  531. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_act_enter_gaps.py +0 -0
  532. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_act_wiz_command_parity.py +0 -0
  533. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_admin_commands.py +0 -0
  534. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_advancement_con_app.py +0 -0
  535. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_advancement_wis_app.py +0 -0
  536. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_alias_command_parity.py +0 -0
  537. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_architectural_parity.py +0 -0
  538. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_auto_flags.py +0 -0
  539. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_auto_sequences.py +0 -0
  540. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_ban_command_parity.py +0 -0
  541. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_bit_flag_string.py +0 -0
  542. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_bit_flag_value.py +0 -0
  543. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_bit_is_stat.py +0 -0
  544. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_channels.py +0 -0
  545. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_character_commands.py +0 -0
  546. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_combat_dex_app.py +0 -0
  547. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_combat_str_app.py +0 -0
  548. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_compare_critical_gaps.py +0 -0
  549. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_config_commands.py +0 -0
  550. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_container_retrieval.py +0 -0
  551. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_db2_loader_parity.py +0 -0
  552. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_death_and_corpses.py +0 -0
  553. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_affects.py +0 -0
  554. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_consider_command.py +0 -0
  555. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_equipment.py +0 -0
  556. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_examine_command.py +0 -0
  557. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_exits_command.py +0 -0
  558. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_help_command.py +0 -0
  559. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_inventory.py +0 -0
  560. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_password_command.py +0 -0
  561. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_practice_command.py +0 -0
  562. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_time_command.py +0 -0
  563. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_weather_command.py +0 -0
  564. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_where_command.py +0 -0
  565. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_who_command.py +0 -0
  566. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_do_worth.py +0 -0
  567. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_door_portal_commands.py +0 -0
  568. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_drop_command.py +0 -0
  569. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_environmental_effects.py +0 -0
  570. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_equipment_ac_calculations.py +0 -0
  571. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_equipment_system.py +0 -0
  572. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_furniture_occupancy.py +0 -0
  573. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_get_room_messages.py +0 -0
  574. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_give_command.py +0 -0
  575. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_healer_command_parity.py +0 -0
  576. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_info_display.py +0 -0
  577. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_interp_dispatcher.py +0 -0
  578. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_interp_prefix_order.py +0 -0
  579. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_interp_trust.py +0 -0
  580. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_invisibility_combat.py +0 -0
  581. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_json_loader_parity.py +0 -0
  582. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_lookup_parity.py +0 -0
  583. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mob_cmds_assist.py +0 -0
  584. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mob_cmds_call.py +0 -0
  585. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mob_cmds_cast.py +0 -0
  586. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mob_cmds_damage.py +0 -0
  587. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mob_cmds_flee.py +0 -0
  588. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mob_cmds_junk.py +0 -0
  589. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mob_cmds_kill.py +0 -0
  590. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mob_cmds_oload.py +0 -0
  591. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mob_cmds_purge.py +0 -0
  592. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mob_cmds_transfer.py +0 -0
  593. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mobprog_edge_cases.py +0 -0
  594. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mobprog_greet_trigger.py +0 -0
  595. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mobprog_predicates.py +0 -0
  596. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mobprog_program_flow.py +0 -0
  597. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_mobprog_scenarios.py +0 -0
  598. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_music_load_songs.py +0 -0
  599. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_new_player_workflow.py +0 -0
  600. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_numbered_get_syntax.py +0 -0
  601. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_001_aedit_create.py +0 -0
  602. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_002_redit_create.py +0 -0
  603. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_003_redit_reset.py +0 -0
  604. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_004_redit_vnum_teleport.py +0 -0
  605. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_005_oedit_create.py +0 -0
  606. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_006_medit_create.py +0 -0
  607. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_007_aedit_show_flags.py +0 -0
  608. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_008_redit_show_parity.py +0 -0
  609. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_009_oedit_show_parity.py +0 -0
  610. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_010_medit_show_parity.py +0 -0
  611. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_011_name_messages.py +0 -0
  612. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_012_aedit_reset.py +0 -0
  613. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_013_get_area_for_vnum_order.py +0 -0
  614. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_act_014_area_changed_protocol.py +0 -0
  615. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_builders.py +0 -0
  616. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_descriptor_state.py +0 -0
  617. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_display_resets.py +0 -0
  618. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_001_mob_defensive_flags.py +0 -0
  619. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_002_mob_form_parts_size_material.py +0 -0
  620. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_003_mob_mprogs.py +0 -0
  621. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_004_mob_shops.py +0 -0
  622. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_005_mob_spec_fun.py +0 -0
  623. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_006_object_level.py +0 -0
  624. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_007_object_affects.py +0 -0
  625. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_008_object_extra_descr.py +0 -0
  626. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_009_area_helps_round_trip.py +0 -0
  627. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_011_autosave_entry.py +0 -0
  628. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_012_npc_security_gate.py +0 -0
  629. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_olc_save_013_area_list_social_prepend.py +0 -0
  630. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_pilot_integration.py +0 -0
  631. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_pit_timer_handling.py +0 -0
  632. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_player_config.py +0 -0
  633. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_player_npc_interaction.py +0 -0
  634. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_position_commands.py +0 -0
  635. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_put_pit_timer.py +0 -0
  636. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_put_room_messages.py +0 -0
  637. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_put_weight_mult.py +0 -0
  638. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_recall_train_commands.py +0 -0
  639. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_remove_command.py +0 -0
  640. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_room_light_tracking.py +0 -0
  641. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_room_retrieval.py +0 -0
  642. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_room_safety_features.py +0 -0
  643. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_runtime_bugs_2026_04_30.py +0 -0
  644. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_sacrifice_command.py +0 -0
  645. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_scan_broadcasts.py +0 -0
  646. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_skills_integration_combat_specials.py +0 -0
  647. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_socials.py +0 -0
  648. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_spell_casting.py +0 -0
  649. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_steal_command.py +0 -0
  650. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_append.py +0 -0
  651. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_edit.py +0 -0
  652. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_first_arg.py +0 -0
  653. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_format_string.py +0 -0
  654. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_lineadd.py +0 -0
  655. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_linedel.py +0 -0
  656. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_merc_getline.py +0 -0
  657. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_numlines.py +0 -0
  658. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_proper.py +0 -0
  659. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_replace.py +0 -0
  660. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_string_add.py +0 -0
  661. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_string_editor_unpad.py +0 -0
  662. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_tables_parity.py +0 -0
  663. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/integration/test_weather_time.py +0 -0
  664. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_act_comm_rom_parity.py +0 -0
  665. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_act_enter_rom_parity.py +0 -0
  666. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_act_info_rom_parity.py +0 -0
  667. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_act_obj_rom_parity.py +0 -0
  668. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_act_wiz_rom_parity.py +0 -0
  669. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_agent_interface.py +0 -0
  670. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_alias_parity.py +0 -0
  671. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_ansi.py +0 -0
  672. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_are_conversion.py +0 -0
  673. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_area_counts.py +0 -0
  674. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_area_exits.py +0 -0
  675. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_area_specials.py +0 -0
  676. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_bans.py +0 -0
  677. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_builder_stat_commands.py +0 -0
  678. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_char_update_rom_parity.py +0 -0
  679. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_assist.py +0 -0
  680. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_damage_types.py +0 -0
  681. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_death.py +0 -0
  682. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_messages.py +0 -0
  683. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_position_damage.py +0 -0
  684. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_skills.py +0 -0
  685. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_state.py +0 -0
  686. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_surrender.py +0 -0
  687. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_combat_thac0.py +0 -0
  688. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_command_abbrev.py +0 -0
  689. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_command_parity.py +0 -0
  690. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_communication.py +0 -0
  691. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_connection_motd.py +0 -0
  692. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_convert_are_to_json_cli.py +0 -0
  693. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_critical_function_parity.py +0 -0
  694. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_damage_reduction.py +0 -0
  695. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_damage_reduction_integration.py +0 -0
  696. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_db_resets_rom_parity.py +0 -0
  697. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_db_seed.py +0 -0
  698. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_defense_flags.py +0 -0
  699. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_encumbrance.py +0 -0
  700. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_enter_portal.py +0 -0
  701. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_fix_sex.py +0 -0
  702. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_golden_reference.py +0 -0
  703. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_handler_affects_rom_parity.py +0 -0
  704. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_hash_utils.py +0 -0
  705. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_healer.py +0 -0
  706. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_healer_parity.py +0 -0
  707. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_healer_rom_parity.py +0 -0
  708. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_help_conversion.py +0 -0
  709. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_help_system.py +0 -0
  710. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_imc.py +0 -0
  711. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_json_io.py +0 -0
  712. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_json_model_instantiation.py +0 -0
  713. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_json_room_fields.py +0 -0
  714. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_load_midgaard.py +0 -0
  715. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_logging_rotation.py +0 -0
  716. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_mob_act_flags.py +0 -0
  717. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_mob_damage_modifiers.py +0 -0
  718. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_mobprog.py +0 -0
  719. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_mobprog_commands.py +0 -0
  720. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_mobprog_helpers.py +0 -0
  721. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_movement.py +0 -0
  722. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_movement_charm.py +0 -0
  723. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_movement_costs.py +0 -0
  724. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_movement_doors.py +0 -0
  725. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_movement_followers.py +0 -0
  726. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_movement_mobprog.py +0 -0
  727. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_movement_npc.py +0 -0
  728. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_movement_portals.py +0 -0
  729. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_movement_privacy.py +0 -0
  730. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_movement_visibility.py +0 -0
  731. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_music.py +0 -0
  732. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_nanny_rom_parity.py +0 -0
  733. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_networking_telnet.py +0 -0
  734. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_passive_skills_rom_parity.py +0 -0
  735. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_affect_flags.py +0 -0
  736. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_auto_settings.py +0 -0
  737. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_combat_attributes.py +0 -0
  738. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_conditions.py +0 -0
  739. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_creation.py +0 -0
  740. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_equipment.py +0 -0
  741. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_flags.py +0 -0
  742. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_info_commands.py +0 -0
  743. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_mechanics.py +0 -0
  744. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_prompt.py +0 -0
  745. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_resistance_flags.py +0 -0
  746. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_skills_spells.py +0 -0
  747. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_stats.py +0 -0
  748. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_title_description.py +0 -0
  749. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_player_wimpy.py +0 -0
  750. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_practice.py +0 -0
  751. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_reset_levels.py +0 -0
  752. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_resets.py +0 -0
  753. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_rng_and_ccompat.py +0 -0
  754. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_rng_dice.py +0 -0
  755. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_rom_api.py +0 -0
  756. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_runtime_models.py +0 -0
  757. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_saves_rom_parity.py +0 -0
  758. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_say_spell.py +0 -0
  759. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_schema_validation.py +0 -0
  760. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_shop_conversion.py +0 -0
  761. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_shops.py +0 -0
  762. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skill_conversion.py +0 -0
  763. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skill_envenom_rom_parity.py +0 -0
  764. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skill_haggle_rom_parity.py +0 -0
  765. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skill_hide_rom_parity.py +0 -0
  766. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skill_peek_rom_parity.py +0 -0
  767. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skill_pick_lock_rom_parity.py +0 -0
  768. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skill_recall_rom_parity.py +0 -0
  769. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skill_registry.py +0 -0
  770. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skill_steal_rom_parity.py +0 -0
  771. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_buffs.py +0 -0
  772. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_combat.py +0 -0
  773. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_conjuration.py +0 -0
  774. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_damage.py +0 -0
  775. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_debuffs.py +0 -0
  776. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_detection.py +0 -0
  777. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_healing.py +0 -0
  778. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_identify.py +0 -0
  779. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_learned.py +0 -0
  780. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_mass.py +0 -0
  781. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_misc.py +0 -0
  782. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_skills_transport.py +0 -0
  783. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_social_conversion.py +0 -0
  784. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_social_placeholders.py +0 -0
  785. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spawning.py +0 -0
  786. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spec_fun_behaviors.py +0 -0
  787. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spec_funs.py +0 -0
  788. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spec_funs_extra.py +0 -0
  789. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_specials_loader_ext.py +0 -0
  790. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_area_effects_rom_parity.py +0 -0
  791. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_breath_weapons_rom_parity.py +0 -0
  792. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_buff_debuff_additional_rom_parity.py +0 -0
  793. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_buff_debuff_rom_parity.py +0 -0
  794. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_cancellation_rom_parity.py +0 -0
  795. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_charm_control_rom_parity.py +0 -0
  796. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_creation_rom_parity.py +0 -0
  797. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_critical_gameplay_rom_parity.py +0 -0
  798. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_damage_additional_rom_parity.py +0 -0
  799. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_detection_rom_parity.py +0 -0
  800. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_enchantment_rom_parity.py +0 -0
  801. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_farsight_rom_parity.py +0 -0
  802. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_final_nine_rom_parity.py +0 -0
  803. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_harm_rom_parity.py +0 -0
  804. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_healing_rom_parity.py +0 -0
  805. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_heat_metal_rom_parity.py +0 -0
  806. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_high_priority_missing_rom_parity.py +0 -0
  807. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_information_rom_parity.py +0 -0
  808. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_mass_healing_rom_parity.py +0 -0
  809. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_priority_high_rom_parity.py +0 -0
  810. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_shocking_grasp_rom_parity.py +0 -0
  811. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spell_travel_portal_rom_parity.py +0 -0
  812. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spells_basic.py +0 -0
  813. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_spells_damage.py +0 -0
  814. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_state_transitions.py +0 -0
  815. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_thief_skills_dispatcher_parity.py +0 -0
  816. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_time_daynight.py +0 -0
  817. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_utility_spells_parity.py +0 -0
  818. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_weapon_damage.py +0 -0
  819. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_weapon_special_attacks.py +0 -0
  820. {rom24_quickmud_python-2.7.0 → rom24_quickmud_python-2.8.21}/tests/test_websocket_server.py +0 -0
@@ -7,6 +7,291 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.8.21]
11
+
12
+ ### Changed
13
+ - **README status refresh**: updated the public project status, audit coverage, test counts, and active-focus guidance so the README now matches the audited trackers and current session status.
14
+ - **Release wrap-up**: recertified the published repo state around the current fully green parity program (`4560 passed, 4 skipped`) and the completed 40/40 audit-bound ROM C file coverage.
15
+
16
+ ## [2.8.20]
17
+
18
+ ### Changed
19
+ - **Stability investigation recertified clean**: executed the queued descriptor/session reproduction subset and a full-suite rerun with no reproducing leak (`36 passed, 36 deselected` in the networking subset; full suite still `4560 passed, 4 skipped`).
20
+ - **Session guidance tightened**: `docs/sessions/SESSION_STATUS.md` now records that descriptor/session cleanup work should not proceed without a deterministic reproduction, and points the next agent at the standing investigation plan only if a leak reappears.
21
+
22
+ ## [2.8.19]
23
+
24
+ ### Added
25
+ - **Stability / invariant hardening handoff plan**: added a concrete next-agent execution plan for descriptor/session global-state isolation, targeting `descriptor_list`, `character_registry`, telnet/session teardown, and any newly discovered cross-file invariant.
26
+
27
+ ### Changed
28
+ - **Session handoff updated**: `docs/sessions/SESSION_STATUS.md` now points at the stability / invariant hardening queue, with a dedicated handoff summary and explicit first verification commands for the next agent.
29
+
30
+ ## [2.8.18]
31
+
32
+ ### Added
33
+ - **Descriptor-backed `wiznet` regression coverage**: `tests/test_wiznet.py` now registers ROM-style playing descriptors for listeners and includes a stale-descriptor regression, so the suite exercises the production descriptor path instead of relying on the character-registry fallback.
34
+
35
+ ### Fixed
36
+ - **`wiznet` descriptor-path immortal gate parity**: `mud/wiznet.py` now mirrors ROM `src/act_wiz.c:171-194` on the real descriptor path by rejecting NPC and non-immortal recipients before checking wiznet flags.
37
+
38
+ ### Changed
39
+ - **Full-suite recertification**: the suite now reruns clean at `4560 passed, 4 skipped`.
40
+
41
+ ## [2.8.17]
42
+
43
+ ### Added
44
+ - **`BOARD-014` AFK parity coverage**: added ROM-backed integration tests for note-editor AFK ownership, including `note write`, `note send`, and the new `note forget` cancel path.
45
+
46
+ ### Fixed
47
+ - **`BOARD-014` note-editor AFK parity**: `mud/commands/notes.py` and `mud/models/board.py` now mirror ROM `src/board.c` by setting AFK when note composition begins, clearing only note-owned AFK when posting or forgetting a note, and preserving manually enabled AFK.
48
+
49
+ ### Changed
50
+ - **`board.c` audit closure**: `docs/parity/BOARD_C_AUDIT.md` and `docs/parity/ROM_C_SUBSYSTEM_AUDIT_TRACKER.md` now record `board.c` as fully closed with `BOARD-014` no longer deferred.
51
+ - **Full-suite recertification**: the suite now reruns clean at `4559 passed, 4 skipped`.
52
+
53
+ ## [2.8.16]
54
+
55
+ ### Fixed
56
+ - **`MUSIC-005` global-channel recipient parity**: `mud/music/__init__.py` now mirrors ROM `src/music.c:88-97` by iterating the ROM-style descriptor list, requiring `CON_PLAYING`, checking `COMM_NOMUSIC` / `COMM_QUIET` on `descriptor.original` when switched, and delivering the line to the active descriptor character.
57
+ - **`MUSIC-006` jukebox visibility parity**: jukebox room output now resolves `$p` per viewer, so recipients who cannot see the jukebox get ROM-style `"something"` fallback instead of a leaked short description. Implemented in `mud/music/__init__.py` with object visibility fallback in `mud/utils/act.py`.
58
+
59
+ ### Changed
60
+ - **`music.c` audit closure**: `docs/parity/MUSIC_C_AUDIT.md` and `docs/parity/ROM_C_SUBSYSTEM_AUDIT_TRACKER.md` now record `music.c` at 100% with all six gaps closed.
61
+
62
+ ## [2.8.15]
63
+
64
+ ### Changed
65
+ - **Parity audit reconciliation**: refreshed stale `nanny.c` audit headers and the historical `save.c` tracker narrative so the docs match the verified codebase and enforced invariants (`INV-003`, `INV-008`).
66
+
67
+ ## [2.8.14]
68
+
69
+ ### Added
70
+ - **Deterministic ROM skill-improvement coverage**: `tests/integration/test_skills_integration.py` now enforces `check_improve()` on the live combat path, including the ROM rule that combat learning can continue above class adept up to 100.
71
+ - **Executable money and spell-affect integration coverage**: replaced stale skipped placeholders with live tests for drop-money consolidation, cursed no-remove equipment, poison damage-over-time, and plague contagion spread.
72
+
73
+ ### Fixed
74
+ - **`check_improve()` adept-cap parity**: `mud/skills/registry.py` now mirrors ROM `src/skills.c` by allowing post-use learning through 100 instead of stopping at the class adept cap.
75
+ - **Plague contagion parity**: `mud/game_loop.py` now applies a full `AffectData` record to newly infected victims during `char_update()`, matching ROM `src/update.c:839-840`.
76
+ - **Kick ROM parity test stability**: `tests/test_skill_combat_rom_parity.py` now isolates `check_improve()` from the kick damage-roll assertions so the test verifies the ROM damage call instead of incidental follow-up RNG.
77
+
78
+ ### Changed
79
+ - **Integration coverage tracker reconciliation**: the skills and spell-affects slices now record their real enforced status, and the stale info-command / equipment / group-combat historical narratives were collapsed to canonical current-state notes.
80
+ - **Full-suite recertification**: the suite now reruns clean at `4553 passed, 4 skipped`.
81
+
82
+ ## [2.8.13]
83
+
84
+ ### Added
85
+ - **ROM wear-off suppression enforcement**: added targeted regression coverage for `char_update()` and `obj_update()` so consecutive same-type affect expirations now stay locked to ROM `src/update.c` semantics, including single-message suppression for object wear-off.
86
+ - **Deterministic `mobile_update()` wander-gate enforcement**: added isolated integration coverage for `ACT_STAY_AREA`, `ACT_OUTDOORS`, and `ACT_INDOORS` movement restrictions using synthetic room topology instead of boot-world assumptions.
87
+
88
+ ### Fixed
89
+ - **`GL-010` character affect wear-off parity**: `mud/affects/engine.py` now preserves merged spell effects while any same-type `AffectData` remains active, matching ROM `src/update.c:762-786`.
90
+ - **`GL-017` object affect wear-off parity**: `mud/game_loop.py` now suppresses duplicate same-type object wear-off messages exactly once per tick, matching ROM `src/update.c:939-957`.
91
+
92
+ ### Changed
93
+ - **Parity tracker reconciliation**: cross-file invariant and integration-coverage trackers now record the enforced wander-gate and wear-off parity slices, and the full suite is recertified at `4547 passed, 10 skipped`.
94
+
95
+ ## [2.8.12]
96
+
97
+ ### Added
98
+ - **Canonical ROM `weapon_table`**: added `/mud/models/weapon_table.py` as the shared source for weapon class name, school weapon vnum, weapon type, and linked proficiency mapping, then wired combat, character-load skill seeding, and creation-time weapon handling to it.
99
+ - **`NANNY-010` reconnect descriptor sweep**: `mud/net/connection.py` now mirrors ROM `src/nanny.c:307-352` by sweeping duplicate descriptors on break-connect reconnect, including the switched-immortal `original->name` branch.
100
+
101
+ ### Fixed
102
+ - **`COMM-005` duplicate-newbie parity**: new-character name validation now closes matching non-playing duplicate descriptors and emits ROM's `Double newbie alert` wiznet notice.
103
+ - **`FLAG-002` settable-bit preservation**: `do_flag` now preserves ROM `settable=FALSE` bits across the `=` operator for `act`, `plr`, and `comm` fields.
104
+ - **Test determinism and suite stability**: stabilized wiznet and advancement integration tests by isolating shared descriptor-list state and replacing wall-clock ROM RNG seeding with a fixed Mitchell-Moore seed.
105
+
106
+ ### Changed
107
+ - **Parity tracker reconciliation**: refreshed stale audit/tracker rows for `act_obj.c`, `act_wiz.c`, `scan.c`, `special.c`, `healer.c`, `const/tables/lookup`, `fight.c`, and `comm.c` so docs match the verified codebase.
108
+ - **Full-suite recertification**: the suite now reruns clean at `4535 passed, 11 skipped`.
109
+
110
+ ## [2.8.11]
111
+
112
+ ### Fixed
113
+ - **`log` command trust parity**: restored the dispatcher registration for `log` to ROM `src/interp.c` level `L1` (`MAX_LEVEL - 1`) and updated the admin-logging tests to use a ROM-valid immortal trust level instead of `LEVEL_HERO`.
114
+
115
+ ## [2.8.10]
116
+
117
+ ### Fixed
118
+ - **Legacy character-row compatibility**: `mud/db/migrations.py` now backfills the DB-canonical `characters` columns that `load_character()` queries, so older SQLite databases with only the pre-2.8.0 schema can still load characters after migration. `mud/models/character.py:from_orm` and `mud/account/account_service.py:create_character` also keep persistent `points` aligned with ROM creation-point state.
119
+
120
+ ## [2.8.9]
121
+
122
+ ### Fixed
123
+ - **Command parser test parity**: leading punctuation commands now follow ROM `src/interp.c` single-character tokenization, restoring apostrophe-as-`say` handling. Updated scripted-session/command tests to match current ROM-faithful transcript ordering and scan output, and replaced a stale non-takeable school-sword pickup assumption with an explicit takeable test object.
124
+
125
+ ## [2.8.8]
126
+
127
+ ### Fixed
128
+ - **Admin `log` command parity**: dispatcher trust for `log` now matches ROM `src/interp.c`/`src/act_wiz.c`, `cmd_log` keeps the persisted `PLR_LOG` bit and `log_commands` boolean in sync, and admin player lookup now resolves through the live runtime character registry so `log <player>` works reliably.
129
+
130
+ ## [2.8.7]
131
+
132
+ ### Fixed
133
+ - **hedit RecursionError**: `_interpret_hedit` fallthrough on unknown commands now returns `"Unknown help editor command: <cmd>\n\r"` so `_should_fallback_from_olc` routes to the normal command table instead of re-entering hedit via `process_command`. Mirrors ROM `src/hedit.c:258` `interpret(ch, arg)` without the re-entry loop.
134
+
135
+ ### Changed
136
+ - **tests/test_builder_hedit.py rewrite**: All 19 stale tests replaced with 23 ROM-parity tests that verify actual `cmd_hedit`/`cmd_hesave` behavior (ROM-exact strings: `"HEdit: There is no default help to edit.\n\r"`, `"Ok.\n\r"`, `"Keyword : [...]"`, `"Level : [...]"`, etc.). Covers entry-point guard, `new` subcommand, session open/show/keyword/level/text/done, session-lost recovery, unknown-command non-recursion, and full `hesave` workflow.
137
+
138
+ ## [2.8.6]
139
+
140
+ ### Fixed
141
+ - **FIGHT-002 safe-room parity**: `mud/combat/engine.py:apply_damage` now mirrors ROM `src/fight.c:725-733` by re-checking `is_safe(ch, victim)` before any fighting-state or HP mutation. This stops melee damage, weapon procs, and other `apply_damage()`-backed attack paths from landing after combatants are moved into a safe room mid-fight. Regression coverage: `tests/integration/test_fight_c_safe_room_damage_gate.py`.
142
+
143
+ ## [2.8.5]
144
+
145
+ ### Fixed
146
+ - **FIGHT-001 combat-entry parity**: `mud/commands/combat.py:do_kill` now mirrors ROM `src/fight.c:2815-2817` by entering combat through `multi_hit(ch, victim, TYPE_UNDEFINED)` instead of a single `attack_round()`. This restores haste / second-attack / third-attack follow-up swings for `kill` command combat starts. Regression coverage: `tests/integration/test_fight_c_do_kill_parity.py`.
147
+
148
+ ## [2.8.4]
149
+
150
+ ### Changed
151
+ - **Pyright cleanup across test suite.** Eliminated ~30 pre-existing `reportOptionalMemberAccess` / `reportArgumentType` / `reportAttributeAccessIssue` warnings across `tests/test_boards.py`, `tests/test_logging_admin.py`, `tests/test_commands.py`, `tests/test_wiznet.py`, `tests/test_affects.py`, and `tests/test_account_auth.py`. Approach: per-call-site `assert x is not None` guards on `Optional` returns from `find_board(...)`, `from_orm(db_char)`, `load_character(...)`, `Character.pcdata`, etc.; `cast(StreamReader, …)` / `cast(TelnetStream, …)` / `cast(Room, …)` for test doubles; widened `DummyWriter.write` overrides to `bytes | bytearray | memoryview`; initialized possibly-unbound `menu_task: asyncio.Task | None = None`; `# type: ignore[arg-type]` on the two intentional `dam_type=None` cases that exercise edge-case handling. No behavior change; tests still pass at the prior pre-existing-failure baseline.
152
+
153
+ ## [2.8.3]
154
+
155
+ ### Changed
156
+ - **Extract `time_info` persistence to `mud/world/time_persistence.py`.** `save_time_info`, `load_time_info`, `TimeSave`, and `TIME_FILE` now live in the new module. `tests/test_time_persistence.py` updated to import from the new location.
157
+ - **Extract serialization helpers to `mud/db/serializers.py`.** All live helpers imported by `mud/account/account_manager.py` (`_normalize_int_list`, `_serialize_colour_table`, `_serialize_object`, `_serialize_pet`, `_serialize_skill_map`, `_serialize_groups`) and `mud/models/character.py:from_orm` (`_apply_colour_table`, `_normalize_int_list`, `_deserialize_object`, `ObjectSave`, `_deserialize_pet`) now live in `mud/db/serializers.py`. Both importers updated.
158
+
159
+ ### Removed
160
+ - **`mud/persistence.py` deleted.** The deprecated stub (holding only the two extracted surfaces above, plus dead code from the now-gone JSON-pfile path) is gone. No behavior change; `mud/persistence` was already a non-functional deprecation banner since 2.8.1.
161
+
162
+ ## [2.8.2]
163
+
164
+ ### Changed
165
+ - **Type cleanup on the new DB-canonical persistence surface.** `save_character_to_db` now types its `session` parameter as `sqlalchemy.orm.Session` (TYPE_CHECKING import) instead of `object`, dropping the `# type: ignore[union-attr]` on the `session.query` call. `mud/models/character.py:from_orm` casts `_deserialize_object(...)` to `Object | None` at the equipment-restore site so the `restored_equipment: dict[str, Object]` annotation is honored. No behavior change; pyright cleanup only. 25/25 critical persistence tests still green.
166
+
167
+ ## [2.8.1]
168
+
169
+ ### Changed
170
+ - **INV-008 reversal — Phase 2: DB-canonical persistence is live.** `mud/account/account_manager.save_character` and `load_character` now hit the SQL `Character` row directly (via Phase 1's `save_character_to_db` and `Character.from_orm`). The JSON-pfile delegation is removed; `mud/persistence.py` keeps only `time_info` save/load and a few ROM-only helpers (deprecated banner at module top). `tests/integration/test_inv008_persistence_coherence.py` now asserts the DB-canonical round-trip including a new `test_inv008_db_canonical_is_sole_path` case. INV-008 is ✅ ENFORCED again under the new architecture.
171
+
172
+ ### Removed
173
+ - **JSON-pfile test files** — deleted because the surface they covered no longer exists: `tests/test_persistence.py`, `tests/test_persistence_password_hash.py`, `tests/test_player_save_format.py`, `tests/test_inventory_persistence.py`, `tests/integration/test_pet_persistence.py`, `tests/integration/test_save_load_parity.py`, `tests/integration/test_tables_001_affect_migration.py`. Persistence coverage is now provided by `tests/integration/test_db_canonical_round_trip.py` (7 tests) + `tests/integration/test_inv008_persistence_coherence.py` (5 tests). The 3 pre-existing `test_persistence.py` / `test_inventory_persistence.py` failures (broken-area-JSON / vnum 3022) are no longer relevant — those tests went away with the surface they tested.
174
+
175
+ ## [2.8.0]
176
+
177
+ ### Added
178
+ - **INV-008 reversal — Phase 1 of 2: DB-canonical persistence schema.** Following the discovery that `mud/account/account_service.create_character` and `mud/models/character.py:from_orm` still write/read the DB row at first-login (the JSON-pfile path was load-bearing only after first save), the project is reversing course on INV-008: the DB row is being made canonical for ALL player state, the JSON pfile path will be deleted in Phase 2. This commit extends the `Character` SQLAlchemy model with 39 new columns to hold every field `PlayerSave` round-trips (scalars: `max_hit`, `mana`, `move`, `gold`, `silver`, `exp`, `trust`, `invis_level`, `incog_level`, `saving_throw`, `hitroll`, `damroll`, `wimpy`, `position`, `played`, `logon`, `lines`, `prompt`, `prefix`, `title`, `bamfin`, `bamfout`, `security`, `points`, `last_level`, `affected_by`, `comm`, `wiznet`, `log_commands`, `pfile_version`, `board`; JSON columns: `mod_stat`, `armor`, `conditions`, `aliases`, `skills`, `groups`, `last_notes`, `colours`, `pet_state`, `inventory_state`, `equipment_state`). Extended `Character.from_orm` to hydrate every new column. New `save_character_to_db(session, char)` in `mud/account/account_manager.py` writes the full state via UPDATE. Round-trip proven by 7 new tests in `tests/integration/test_db_canonical_round_trip.py` (all green). Public `save_character` / `load_character` surface unchanged in this phase — Phase 2 swaps the implementations and deletes `mud/persistence.py`. INV-008 reopened in the cross-file invariants tracker.
179
+ - **`docs/parity/INV008_REVERSAL_AUDIT.md`** — 71-field map (PlayerSave → Character columns), `from_orm` audit, new code surface, caller surface, INV-008 test rewrite plan, and risk register; produced as the spec for both phases of the migration.
180
+
181
+ ### Notes
182
+ - Pre-existing test slowness (full suite ~12 min vs. AGENTS.md's "~16s") and ~30 pre-existing test failures verified at the pre-Phase-1 baseline (git stash). Not introduced by this commit.
183
+
184
+ ## [2.7.6]
185
+
186
+ ### Changed
187
+ - **INV-008 DUAL-LOAD-CHARACTER-COHERENCE consolidated (hybrid path).** `mud/account/account_manager.py` is now a thin shim delegating `load_character` and `save_character` to `mud.persistence` (the JSON pfile path). The DB row (`mud/db/models.py:Character`) keeps `name` + `password_hash` for auth only; gameplay columns are vestigial and will be dropped in a later schema-migration session. Field-level audit at `docs/parity/INV008_DIVERGENCE_AUDIT.md`. No data migration was required — pre-launch.
188
+ - **`mud/persistence.py:PlayerSave` now persists `password_hash`** so the JSON pfile is the single ROM-faithful source of truth for all PC state, including auth credentials. `save_character` writes `pcdata.pwd`; `load_character` restores it. The shim's `save_character` also syncs the hash to the DB row so the auth path (`account_service.login_character`) stays consistent after `do_password`.
189
+
190
+ ### Fixed
191
+ - **30+ PC fields previously dropped on every WS logout** (because the DB-backed `account_manager.save_character` only persisted ~18 columns). Now restored on next login: current mana / current move, gold, silver, exp, hitroll, damroll, saving throw, AC array, wimpy, position, mod_stat array, comm bitfield, affected_by, wiznet flags, conditions (drunk/full/thirst/hunger), full skill learned-percent map, aliases, colour table, prompt, title, bamfin/bamfout, played time, logon timestamp, pets, item timer/value/condition/enchanted/affects on inventory and equipment, container contents.
192
+
193
+ ### Added
194
+ - **INV-008 enforcement test** (`tests/integration/test_inv008_persistence_coherence.py`): four cases asserting the `account_manager` shim round-trips full gameplay state, registers loaded characters in `character_registry` (INV-003), preserves `pcdata.pwd`, and restores room placement. INV-008 flipped from ⚠️ KNOWN DIVERGENCE → ✅ ENFORCED. **All 8 cross-file invariants are now ✅ ENFORCED.**
195
+ - `docs/parity/INV008_DIVERGENCE_AUDIT.md`: field-level provenance audit (51 vs 29 fields, caller surface, recommendation).
196
+
197
+ ## [2.7.5]
198
+
199
+ ### Added
200
+ - **INV-007 RNG-DETERMINISM enforcement test** (`tests/test_rng_determinism.py`): scans every `.py` file under `mud/combat/`, `mud/skills/`, and `mud/spells/` for `import random`, `from random`, or `random.` and fails with path:line detail if any match. Runs in <1s. INV-007 flipped from ⚠️ ENFORCED BY CONVENTION → ✅ ENFORCED. 7 of 8 cross-file invariants are now ✅ ENFORCED; INV-008 (DUAL-LOAD-CHARACTER-COHERENCE) remains a known divergence.
201
+
202
+ ### Removed
203
+ - **Vestigial `stdlib Random` from `SkillRegistry`** (`mud/skills/registry.py`): `__init__` accepted `rng: Random | None` and stored `self.rng`, but `self.rng` was never read — all rolls in registry.py already went through `rng_mm`. Removed the dead field, the dead parameter, and the `from random import Random` import. `tests/test_skills.py:load_registry` updated accordingly. Required before INV-007's grep test could be written cleanly.
204
+
205
+ ## [2.7.4]
206
+
207
+ ### Added
208
+ - **INV-005 SAME-ROOM-COMBAT-ONLY enforcement test** (`tests/integration/test_inv005_same_room_combat.py`): proves `mud/game_loop.py:violence_tick` skips `multi_hit` and stops fighting when attacker and victim are in different rooms (ROM `src/fight.c:violence_update`). Plus a same-room sanity case so a flipped equality wouldn't silently pass.
209
+ - **INV-006 FIGHTING-POINTER-COHERENCE enforcement test** (`tests/integration/test_inv006_fighting_pointer_coherence.py`): proves `mud/combat/engine.py:stop_fighting(victim, both=True)` sweeps `character_registry` and clears every attacker pointing at the victim (ROM `src/fight.c:stop_fighting(victim, TRUE)`); inverse case confirms `both=False` does not sweep.
210
+ - Both invariants flipped from ⚠️ VERIFIED MANUALLY → ✅ ENFORCED in `docs/parity/CROSS_FILE_INVARIANTS_TRACKER.md`.
211
+ - **Cross-File Invariants tracker** (`docs/parity/CROSS_FILE_INVARIANTS_TRACKER.md`): new top-level parity doc enumerating contracts the per-file audit methodology can't enforce on its own (single-delivery, registry membership, prompt-render-after-raw_kill, etc.). Eight INV-NNN entries seeded from this year's bug history; each has a stable ID, ROM mechanism, Python enforcement point, and regression test (or an action-item placeholder when the test is still missing).
212
+ - **AGENTS.md "Cross-File Invariants" section**: methodology note explaining what per-file audits miss and how to use the new tracker. Tracker added to the "Trackers" table.
213
+ - **rom-parity-audit skill update**: Phase 2 now requires following the call chain across module boundaries and consulting the cross-file invariants tracker; Phase 5 requires citing relevant INV-NNN statuses in each tracker row's Notes column ("Audited (per-file)" replaces bare "Audited").
214
+
215
+ ### Changed
216
+ - `docs/parity/ROM_C_SUBSYSTEM_AUDIT_TRACKER.md`: `comm.c`, `fight.c`, and `save.c` rows annotated with the cross-file invariants they touch and the bugs the per-file audit missed (single-delivery, prompt clamp, registry membership). Per-file ratings preserved; the new annotations make the audit's actual coverage explicit.
217
+
218
+
219
+ ## [2.7.3]
220
+
221
+ ### Fixed
222
+ - **Combat parity (death path)**: Combat messages now reach connected PCs exactly once. `mud/combat/engine.py:_push_message` previously appended every message to `char.messages` AND scheduled an async send, and `mud/net/connection.py:1756` unconditionally drained `char.messages` after every command — so each combat line was delivered TWICE to WebSocket clients. Live repro: PC dies, types `look`, sees the entire combat sequence (including "You have been KILLED!!") replayed milliseconds later, making it appear they died twice. ROM `src/comm.c:write_to_buffer` is one-shot. Per `docs/divergences/MESSAGE_DELIVERY.md`, the mailbox is fallback-only for tests/disconnected characters; fix returns immediately after the async dispatch when a connection exists.
223
+ - **Combat parity (prompt display)**: `bust_a_prompt` now clamps displayed hit to >= 0. The death path could leave `char.hit` negative between `update_pos` setting `Position.DEAD` (at hit <= -11) and `raw_kill` clamping to `max(1, hit)` — Python's async dispatch can interleave a prompt render in that window, exposing the negative transient. ROM never shows negative hp because `raw_kill` always finishes first in its single-threaded loop. Display-only clamp at the two render sites (default prompt + `%h` token).
224
+ - **Combat parity (death-path comments)**: `_handle_death` documents the bidirectional fighting-pointer clear and its relationship with `raw_kill → _stop_fighting`'s `char_list` sweep. ROM ref: `src/fight.c:damage` death branch.
225
+
226
+ ### Added
227
+ - `tests/test_prompt_clamps_hp.py` — 4 cases guarding prompt clamp (default + custom `%h`).
228
+ - `tests/integration/test_message_delivery_no_duplicate.py` — connected PC gets one async send, no mailbox queue; disconnected falls back to mailbox.
229
+ - `tests/integration/test_pc_death_no_message_replay.py` — end-to-end: pushes the actual death-message sequence, drives the read-loop drain manually, asserts "You have been KILLED!!" appears exactly once across both passes.
230
+ - `tests/integration/test_pc_death_keeps_connection.py` — regression guard that `raw_kill` keeps the PC in `character_registry`, in the death room, with hit/mana/move >= 1, position `RESTING`, connection intact.
231
+ - `mud/net/connection.py` — diagnostic logging upgrade: read-loop's outer `except` now prints `type(exc).__name__: exc!r` plus traceback so future disconnect causes are visible in server stdout.
232
+
233
+ ## [2.7.2]
234
+
235
+ ### Fixed
236
+ - Restore `version` field in `pyproject.toml` (accidentally dropped in `cdcd0cc`).
237
+ - Combat one-way bug: `mud/account/account_manager.load_character` now appends loaded PCs to `character_registry` so `violence_tick`/`char_update`/idle pump iterate them. Mirrors ROM `src/save.c:fread_char` `char_list` membership.
238
+ - World mob spawning: regenerated `resets` for 46 of 54 JSON area files via `scripts/patch_json_resets.py` so the school arena and other populated areas spawn ROM mobs on boot.
239
+ - BOARD-010: `note read again` is now a no-op (ROM `src/board.c:569-572`).
240
+
241
+ ### Changed
242
+ - Reconciled `BOARD_C_AUDIT.md`, `OLC_C_AUDIT.md`, and `ROM_C_SUBSYSTEM_AUDIT_TRACKER.md` against current implementation; folded several stale-test fixes (`test_save_load_parity`, `test_olc_alist`, `test_spell_affects_persistence`, `test_tables_001_affect_migration`, `test_nanny_login_parity`, `test_fighting_state`, `test_olc_save`) and added `tests/test_obj_loader.py`.
243
+ - Session summaries added under `docs/sessions/` for the 2026-05-02 work (combat triage, board audit, OLC audit, asave cleanup, broad-suite triage / JSON itemtype fix).
244
+
245
+
246
+ ### Fixed
247
+ - **OLC-004/005**: Active OLC editors now support ROM-style `commands` listings with five fixed-width columns, mirroring `src/olc.c:153-209`.
248
+ - **OLC-010/015**: `do_olc` / `editor_table[]` ported — `olc <area|room|object|mobile|mpcode|hedit>` now dispatches to the real per-editor entry points via prefix matching (`str_prefix` parity), NPC guard, and remainder-arg forwarding, mirroring ROM `src/olc.c:646-690`. Both `olc` and `edit` command aliases are live. Integration tests: `tests/integration/test_olc_010_015_do_olc_router.py` (14 cases).
249
+ - **OLC_SAVE-014**: `cmd_asave <vnum>` now silent on success (ROM `src/olc_save.c:982-995`)
250
+ - **OLC_SAVE-015**: `cmd_asave world` returns `"You saved the world.\n\r"` (ROM exact)
251
+ - **OLC_SAVE-016**: `cmd_asave changed` returns `"Saved zones:\n\r"` + per-area rows + `"None.\n\r"` fallback (ROM exact)
252
+ - **OLC_SAVE-017**: `cmd_asave area` returns `"Area saved.\n\r"` (ROM exact)
253
+ - **BOARD-010**: `note read again` is now a no-op (returns `""`) — mirrors ROM `src/board.c:569-572` empty `if`-body
254
+ - **MPEDIT-003**: Added `MprogCode` dataclass + `mprog_code_registry` dict + `get_mprog_index()` — mirrors ROM `MPROG_CODE` struct and `mprog_list` linked list (`src/olc_mpcode.c`)
255
+ - **MPEDIT-002**: `do_mpedit` now looks up `mprog_code_registry` (not `mob_prototypes`); opens `mpedit` session silently on success; exact Spanish error strings; `create` branch delegates to `_mpedit_create`
256
+ - **MPEDIT-001**: `_interpret_mpedit` session loop — smash_tilde, empty→show, `done` silent, security re-check, area=NULL→edit_done, dispatch table, fallback to `interpret()`
257
+ - **MPEDIT-004**: `_mpedit_show` — ROM exact format `"Vnum: [%d]\n\rCode:\n\r%s\n\r"`
258
+ - **MPEDIT-005**: `_mpedit_code` — no-arg enters string_edit mode; arg → `"Syntax: code\n\r"`
259
+ - **MPEDIT-006**: `_mpedit_list` — `[%3d] (%c) %5d\n\r` format; `*/space/?` builder indicator; `all`/area filter; exact empty messages
260
+ - **HEDIT-002**: `hedit level` accepts -1..MAX_LEVEL; exact ROM error message
261
+ - **HEDIT-003/004**: `hedit keyword`/`hedit level` return `"Ok.\n\r"` / exact ROM syntax strings
262
+ - **HEDIT-005**: `hedit text` no-arg is valid (triggers `string_append`); arg present → `"Syntax: text\n\r"`
263
+ - **HEDIT-006**: security check returns `"HEdit: Insufficient security to edit helps.\n\r"` (with `\n\r`)
264
+ - **HEDIT-007**: empty input in hedit session → `hedit_show` (not syntax string)
265
+ - **HEDIT-008**: `done` is silent (returns `""`, no verbose save message)
266
+ - **HEDIT-009**: unknown hedit command falls back to normal command table (`interpret`)
267
+ - **HEDIT-010**: `hedit delete` implemented — removes from `help_entries` + all keyword buckets
268
+ - **HEDIT-011**: `hedit list all` / `list area` implemented with ROM 4-column `%3d. %-14.14s` format
269
+ - **HEDIT-012**: `do_hedit new <topic>` path correctly creates entry + enters editor
270
+ - **HEDIT-013**: `do_hedit <keyword>` uses `is_name` word-match (not exact key lookup)
271
+ - **HEDIT-014**: `hedit_level`/`hedit_keyword` return `"Ok.\n\r"` (triggers `had->changed = TRUE` equivalent) (`src/olc_act.c:770-790`) — sets `pArea->age`, validates numeric arg, does not set `changed` (ROM parity). 6 integration tests added.
272
+ - **OLC-012/013/014**: `redit`/`oedit`/`medit` fallback to `interpret()` verified — `_should_fallback_from_olc()` + `_process_descriptor_input()` returning `None` correctly re-dispatches unknown OLC input through the normal command table (mirrors ROM `src/olc.c:519-521`, `575-577`, `631-633`). 14 integration tests added in `tests/integration/test_olc_012_014_editor_fallback.py`.
273
+ - **OLC-009**: `medit` missing subcommands ported — `act`, `affect`, `armor`, `form`, `part`, `imm`, `res`, `vuln`, `off`, `size`, `hitdice`, `manadice`, `damdice`, `position`, `addmprog`, `delmprog` now dispatched from `_interpret_medit`. Helpers mirror ROM `src/olc_act.c:4142-4969`. Flag toggles use XOR pattern (act/affect/form/part/imm/res/vuln/off); `act` always re-sets `IS_NPC` (ROM:4153); dice stored as `tuple[int,int,int]`; `addmprog` validates vnum against mob_registry; `delmprog` splices list and clears mprog_flags bit. Integration tests: `tests/integration/test_olc_009_medit_missing_cmds.py` (30 cases).
274
+ - **OLC-008**: `oedit` missing subcommands ported — `addaffect`, `addapply`, `delaffect`, `extra`, `wear` now dispatched from `_interpret_oedit`. Helpers mirror ROM `src/olc_act.c:2818-3450`: flag-value toggle for `extra`/`wear` (ExtraFlag/WearFlag XOR), affect list append/splice for `addaffect`/`addapply`/`delaffect` with `TO_OBJECT=1`, `type=-1`, `duration=-1` ROM defaults. Integration tests: `tests/integration/test_olc_008_oedit_missing_cmds.py` (16 cases).
275
+ - **OLC-007**: `redit` missing subcommands ported — `rlist`, `mlist`, `olist`, `mshow`, `oshow` are now dispatched from `_interpret_redit`. Helpers `_redit_rlist/mlist/olist/mshow/oshow` mirror ROM `src/olc_act.c:329-570` (3-column vnum/name listing, `is_name` filtering, item-type prefix matching, mob/obj show via `_medit_show`/`_oedit_show`). Integration tests: `tests/integration/test_olc_007_redit_list_show.py` (16 cases).
276
+ - **OLC-011**: `aedit` flag-toggle prefix ported — typing a bare `area_flags` name (e.g. `loading`, `added`) inside an active aedit session now toggles the flag via `flag_value(AreaFlag, command)` and sends `"Flag toggled."`, mirroring ROM `src/olc.c:443-449`. Integration tests: `tests/integration/test_olc_011_aedit_flag_toggle.py` (7 cases).
277
+
278
+ ## [2.7.1] — update.c Parity Gap Closures (GL-004/005/009/011/012/013/014/015/018)
279
+
280
+ ### Fixed
281
+ - **GL-004**: `mana_gain` now uses `room.mana_rate` instead of `room.heal_rate`; rooms with custom mana rates now regenerate mana at the correct rate (ROM `update.c:300`).
282
+ - **GL-005**: `mana_gain` furniture bonus now reads `value[4]` (mana bonus) instead of `value[3]` (hit bonus) (ROM `update.c:218,300`).
283
+ - **GL-009**: NPC `char_update` wanders-home: out-of-zone NPCs that are not fighting and not charmed now have a 5% per-tick chance of being extracted (despawned) — mirrors ROM `update.c:688-696`. Previously missing entirely.
284
+ - **GL-011**: Plague tick implemented: spreads to room occupants (5% per-tick per target, saves vs disease), drains mana and move, and deals HP damage per tick (ROM `update.c:794-846`). Previously missing.
285
+ - **GL-012**: Poison tick implemented: sends "You shiver and suffer" message and deals `level // 10 + 1` HP damage per tick (ROM `update.c:848-862`). Previously missing.
286
+ - **GL-013**: INCAP position tick damage: 50% chance of 1 HP damage per tick (ROM `update.c:864-867`). Previously missing.
287
+ - **GL-014**: MORTAL position tick damage: 1 HP damage every tick unconditionally (ROM `update.c:868-871`). Previously missing.
288
+ - **GL-015**: `_idle_to_limbo` now calls `stop_fighting(ch, both=True)` instead of `ch.fighting = None`, properly cleaning both sides of any fight (ROM `update.c:741-744`).
289
+ - **GL-018**: Decay messages for objects inside an untakeable pit (vnum 3010) are now suppressed (ROM `update.c:1017-1018`). Previously objects inside a pit always broadcast their decay message to the room.
290
+
291
+ ### Added
292
+ - `_char_update_tick_effects()` helper in `mud/game_loop.py` encapsulating all per-tick damage effects (plague, poison, INCAP, MORTAL).
293
+ - Integration tests: `tests/integration/test_update_c_parity.py` — 11 tests covering all closed gaps.
294
+
10
295
  ## [2.7.0] — ROM Character-First Login
11
296
 
12
297
  ### Changed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: rom24-quickmud-python
3
- Version: 2.7.0
3
+ Version: 2.8.21
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>
@@ -39,6 +39,7 @@ Provides-Extra: dev
39
39
  Requires-Dist: pytest>=8.0; extra == "dev"
40
40
  Requires-Dist: pytest-cov>=6.0; extra == "dev"
41
41
  Requires-Dist: pytest-timeout>=2.1.0; extra == "dev"
42
+ Requires-Dist: httpx>=0.27; extra == "dev"
42
43
  Requires-Dist: mypy>=1.0; extra == "dev"
43
44
  Requires-Dist: ruff>=0.1.0; extra == "dev"
44
45
  Requires-Dist: black>=22.0; extra == "dev"
@@ -49,16 +50,17 @@ Provides-Extra: test
49
50
  Requires-Dist: pytest>=8.0; extra == "test"
50
51
  Requires-Dist: pytest-cov>=6.0; extra == "test"
51
52
  Requires-Dist: pytest-timeout>=2.1.0; extra == "test"
53
+ Requires-Dist: httpx>=0.27; extra == "test"
52
54
  Dynamic: license-file
53
55
 
54
56
  # QuickMUD - A Modern ROM 2.4 Python Port
55
57
 
56
- [![Version](https://img.shields.io/badge/version-2.6.3-blue.svg)](https://github.com/Nostoi/rom24-quickmud-python)
58
+ [![Version](https://img.shields.io/badge/version-2.8.21-blue.svg)](https://github.com/Nostoi/rom24-quickmud-python)
57
59
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
58
60
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
59
- [![Tests](https://img.shields.io/badge/tests-3508%2F3521%20passing-brightgreen.svg)](https://github.com/Nostoi/rom24-quickmud-python)
61
+ [![Tests](https://img.shields.io/badge/tests-4560%20passing-brightgreen.svg)](https://github.com/Nostoi/rom24-quickmud-python)
60
62
  [![ROM 2.4b Parity](https://img.shields.io/badge/ROM%202.4b%20Parity-gameplay%20100%25-success.svg)](ROM_2.4B6_PARITY_CERTIFICATION.md)
61
- [![Function Coverage](https://img.shields.io/badge/ROM%20C%20Functions-96.1%25-blue.svg)](FUNCTION_MAPPING.md)
63
+ [![ROM C Audit](https://img.shields.io/badge/ROM%20C%20Audit-40%2F40%20audited-success.svg)](docs/parity/ROM_C_SUBSYSTEM_AUDIT_TRACKER.md)
62
64
  [![Integration Tests](https://img.shields.io/badge/integration%20tests-1000%2B-brightgreen.svg)](tests/integration/)
63
65
 
64
66
  **QuickMUD is a modern Python port of the legendary ROM 2.4b6 MUD engine**, derived from ROM 2.4b6, Merc 2.1 and DikuMUD. This is a complete rewrite that brings the classic text-based MMORPG experience to modern Python with async networking, JSON world data, and **100% ROM 2.4b behavioral parity**.
@@ -77,7 +79,7 @@ A "[Multi-User Dungeon](https://en.wikipedia.org/wiki/MUD)" (MUD) is a text-base
77
79
  - **⚔️ ROM Combat System**: Classic ROM combat mechanics and skill system
78
80
  - **👥 Social Features**: Say, tell, shout, and 100+ social interactions
79
81
  - **🛠️ Admin Commands**: Teleport, spawn, ban management, and OLC building
80
- - **📊 Comprehensive Testing**: 3,508 / 3,521 tests passing (99.6%) across unit, integration (1,000+), and command-registry suites
82
+ - **📊 Comprehensive Testing**: 4,560 passing tests across unit, integration, and command-registry suites
81
83
  - **🔧 ROM C-Compatible API**: Public API wrappers for external tools and scripts (27 functions)
82
84
 
83
85
  ## 📦 Installation
@@ -191,8 +193,6 @@ parity logic in this backend repo.
191
193
 
192
194
  ## 🏗️ For Developers
193
195
 
194
- ## 🏗️ For Developers
195
-
196
196
  ### Development Installation
197
197
 
198
198
  ```bash
@@ -206,8 +206,8 @@ pip install -e .[dev]
206
206
  ### Running Tests
207
207
 
208
208
  ```bash
209
- pytest # Run all 3,500+ tests
210
- pytest tests/integration/ -v # Run integration suite (1,000+ tests)
209
+ pytest # Run the full suite
210
+ pytest tests/integration/ -v # Run the integration suite
211
211
  ```
212
212
 
213
213
  ### Development Server
@@ -218,26 +218,19 @@ python -m mud # Start development server
218
218
 
219
219
  ## 🎯 Project Status
220
220
 
221
- - **Version**: 2.6.73 (Production Ready — gameplay parity shipped, OLC cluster in progress)
221
+ - **Version**: 2.8.21
222
222
  - **ROM 2.4b Gameplay Parity**: ✅ **100%** ([official certification](ROM_2.4B6_PARITY_CERTIFICATION.md)) —
223
223
  combat, skills, spells, movement, communication, world/db, save/load, mob programs,
224
224
  and all 255 ROM commands are implemented and audited.
225
- - **ROM C Source Audit**: 34 of 43 ROM C source files audited (24 at strict 100%);
226
- remaining work is the OLC editor cluster (`olc.c`, `olc_act.c`, `olc_save.c`,
227
- `olc_mpcode.c`, `hedit.c`) plus a small partial-audit tail (`board.c` 95%).
228
- Several audited files sit at 85–98% with deferred-by-design or sibling-gated
229
- gaps (`act_move.c`, `comm.c`, `nanny.c`, `const.c`, `music.c`, `board.c`).
230
- Gameplay is not blocked on any of them. See
225
+ - **ROM C Source Audit**: **100% audit-bound coverage** — 40 of 40 applicable ROM C files are audited, with
226
+ 3 additional ROM files intentionally N/A (`recycle.c`, `mem.c`, `imc.c`). See
231
227
  [`docs/parity/ROM_C_SUBSYSTEM_AUDIT_TRACKER.md`](docs/parity/ROM_C_SUBSYSTEM_AUDIT_TRACKER.md).
232
- - **ROM C Function Coverage**: 96.1% (716/745 functions mapped)
233
- - **Test Suite**: 3,508 / 3,521 passing (99.6%), 11 skipped, 2 known
234
- pre-existing failures, full run ~8 min. Three layers — unit (`tests/test_*.py`),
235
- integration (`tests/integration/`, 1,000+ tests), and command-registry
236
- (`test_all_commands.py`). Pre-existing skips/failures are catalogued in
237
- [`docs/parity/PRE_EXISTING_FAILURES_TRIAGE.md`](docs/parity/PRE_EXISTING_FAILURES_TRIAGE.md).
238
- - **Active focus**: `olc.c` cluster — OLC-020/022/023 + STRING-001..012 closed;
239
- remaining CRITICAL gaps (OLC-016/017/018/019, the `*edit create` subcommands)
240
- gated on the held `olc_act.c` sibling audit.
228
+ - **Cross-file Invariants**: **8/8 enforced** — message delivery, prompt clamping, registry membership,
229
+ same-room combat, death/connection behavior, RNG determinism, and persistence coherence are locked by dedicated tests.
230
+ - **Test Suite**: **4560 passed, 4 skipped**. Three layers — unit (`tests/test_*.py`),
231
+ integration (`tests/integration/`), and command-registry (`test_all_commands.py`).
232
+ - **Active focus**: parity work is effectively complete; current work is maintenance, frontend coordination,
233
+ and investigation only when a deterministic regression is reproduced.
241
234
  - **Compatibility**: Python 3.10+, cross-platform
242
235
 
243
236
  ## 🏛️ Architecture
@@ -323,7 +316,7 @@ Game systems are implemented in Python modules:
323
316
  - `mud/game_loop.py` drives the tick-based update loop.
324
317
  - `mud/commands` contains the command dispatcher and handlers.
325
318
  - `mud/combat` and `mud/skills` implement combat and abilities.
326
- - `mud/persistence.py` handles saving characters and world state.
319
+ - `mud/account/` and `mud/db/` handle character persistence and account state.
327
320
 
328
321
  Start the server with:
329
322
 
@@ -377,17 +370,12 @@ QuickMUD is a **production-ready ROM 2.4b MUD** with ✅ **100% behavioral parit
377
370
 
378
371
  ### 📈 Quality Metrics
379
372
 
380
- - **Test Suite**: 3,508 / 3,521 passing (99.6%), 11 skipped, 2 known
381
- pre-existing failures (full run ~8 min); pre-existing skips/failures are
382
- catalogued in
383
- [`docs/parity/PRE_EXISTING_FAILURES_TRIAGE.md`](docs/parity/PRE_EXISTING_FAILURES_TRIAGE.md).
373
+ - **Test Suite**: 4,560 passing, 4 skipped on the last full recertification.
384
374
  - **Behavioral Parity**: 100% of ROM 2.4b6 gameplay subsystems audited (combat,
385
375
  skills, spells, movement, communication, world/db, save/load, mob programs,
386
376
  255/255 commands).
387
- - **Function Coverage**: 716/745 ROM C functions mapped (96.1%)
388
- - **ROM C Source Audit**: 34 of 43 files audited (24 at strict 100%); remainder
389
- is the OLC editor cluster (`olc.c`/`olc_act.c`/`olc_save.c`/`olc_mpcode.c`/`hedit.c`)
390
- and a small partial tail (`board.c` 95%).
377
+ - **ROM C Source Audit**: 40 of 40 applicable ROM files audited, plus 3 intentional N/A files.
378
+ - **Cross-file Invariants**: 8 of 8 enforced by dedicated regression tests.
391
379
 
392
380
  ### 🔧 Advanced Features
393
381
 
@@ -1,11 +1,11 @@
1
1
  # QuickMUD - A Modern ROM 2.4 Python Port
2
2
 
3
- [![Version](https://img.shields.io/badge/version-2.6.3-blue.svg)](https://github.com/Nostoi/rom24-quickmud-python)
3
+ [![Version](https://img.shields.io/badge/version-2.8.21-blue.svg)](https://github.com/Nostoi/rom24-quickmud-python)
4
4
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)
5
5
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
6
- [![Tests](https://img.shields.io/badge/tests-3508%2F3521%20passing-brightgreen.svg)](https://github.com/Nostoi/rom24-quickmud-python)
6
+ [![Tests](https://img.shields.io/badge/tests-4560%20passing-brightgreen.svg)](https://github.com/Nostoi/rom24-quickmud-python)
7
7
  [![ROM 2.4b Parity](https://img.shields.io/badge/ROM%202.4b%20Parity-gameplay%20100%25-success.svg)](ROM_2.4B6_PARITY_CERTIFICATION.md)
8
- [![Function Coverage](https://img.shields.io/badge/ROM%20C%20Functions-96.1%25-blue.svg)](FUNCTION_MAPPING.md)
8
+ [![ROM C Audit](https://img.shields.io/badge/ROM%20C%20Audit-40%2F40%20audited-success.svg)](docs/parity/ROM_C_SUBSYSTEM_AUDIT_TRACKER.md)
9
9
  [![Integration Tests](https://img.shields.io/badge/integration%20tests-1000%2B-brightgreen.svg)](tests/integration/)
10
10
 
11
11
  **QuickMUD is a modern Python port of the legendary ROM 2.4b6 MUD engine**, derived from ROM 2.4b6, Merc 2.1 and DikuMUD. This is a complete rewrite that brings the classic text-based MMORPG experience to modern Python with async networking, JSON world data, and **100% ROM 2.4b behavioral parity**.
@@ -24,7 +24,7 @@ A "[Multi-User Dungeon](https://en.wikipedia.org/wiki/MUD)" (MUD) is a text-base
24
24
  - **⚔️ ROM Combat System**: Classic ROM combat mechanics and skill system
25
25
  - **👥 Social Features**: Say, tell, shout, and 100+ social interactions
26
26
  - **🛠️ Admin Commands**: Teleport, spawn, ban management, and OLC building
27
- - **📊 Comprehensive Testing**: 3,508 / 3,521 tests passing (99.6%) across unit, integration (1,000+), and command-registry suites
27
+ - **📊 Comprehensive Testing**: 4,560 passing tests across unit, integration, and command-registry suites
28
28
  - **🔧 ROM C-Compatible API**: Public API wrappers for external tools and scripts (27 functions)
29
29
 
30
30
  ## 📦 Installation
@@ -138,8 +138,6 @@ parity logic in this backend repo.
138
138
 
139
139
  ## 🏗️ For Developers
140
140
 
141
- ## 🏗️ For Developers
142
-
143
141
  ### Development Installation
144
142
 
145
143
  ```bash
@@ -153,8 +151,8 @@ pip install -e .[dev]
153
151
  ### Running Tests
154
152
 
155
153
  ```bash
156
- pytest # Run all 3,500+ tests
157
- pytest tests/integration/ -v # Run integration suite (1,000+ tests)
154
+ pytest # Run the full suite
155
+ pytest tests/integration/ -v # Run the integration suite
158
156
  ```
159
157
 
160
158
  ### Development Server
@@ -165,26 +163,19 @@ python -m mud # Start development server
165
163
 
166
164
  ## 🎯 Project Status
167
165
 
168
- - **Version**: 2.6.73 (Production Ready — gameplay parity shipped, OLC cluster in progress)
166
+ - **Version**: 2.8.21
169
167
  - **ROM 2.4b Gameplay Parity**: ✅ **100%** ([official certification](ROM_2.4B6_PARITY_CERTIFICATION.md)) —
170
168
  combat, skills, spells, movement, communication, world/db, save/load, mob programs,
171
169
  and all 255 ROM commands are implemented and audited.
172
- - **ROM C Source Audit**: 34 of 43 ROM C source files audited (24 at strict 100%);
173
- remaining work is the OLC editor cluster (`olc.c`, `olc_act.c`, `olc_save.c`,
174
- `olc_mpcode.c`, `hedit.c`) plus a small partial-audit tail (`board.c` 95%).
175
- Several audited files sit at 85–98% with deferred-by-design or sibling-gated
176
- gaps (`act_move.c`, `comm.c`, `nanny.c`, `const.c`, `music.c`, `board.c`).
177
- Gameplay is not blocked on any of them. See
170
+ - **ROM C Source Audit**: **100% audit-bound coverage** — 40 of 40 applicable ROM C files are audited, with
171
+ 3 additional ROM files intentionally N/A (`recycle.c`, `mem.c`, `imc.c`). See
178
172
  [`docs/parity/ROM_C_SUBSYSTEM_AUDIT_TRACKER.md`](docs/parity/ROM_C_SUBSYSTEM_AUDIT_TRACKER.md).
179
- - **ROM C Function Coverage**: 96.1% (716/745 functions mapped)
180
- - **Test Suite**: 3,508 / 3,521 passing (99.6%), 11 skipped, 2 known
181
- pre-existing failures, full run ~8 min. Three layers — unit (`tests/test_*.py`),
182
- integration (`tests/integration/`, 1,000+ tests), and command-registry
183
- (`test_all_commands.py`). Pre-existing skips/failures are catalogued in
184
- [`docs/parity/PRE_EXISTING_FAILURES_TRIAGE.md`](docs/parity/PRE_EXISTING_FAILURES_TRIAGE.md).
185
- - **Active focus**: `olc.c` cluster — OLC-020/022/023 + STRING-001..012 closed;
186
- remaining CRITICAL gaps (OLC-016/017/018/019, the `*edit create` subcommands)
187
- gated on the held `olc_act.c` sibling audit.
173
+ - **Cross-file Invariants**: **8/8 enforced** — message delivery, prompt clamping, registry membership,
174
+ same-room combat, death/connection behavior, RNG determinism, and persistence coherence are locked by dedicated tests.
175
+ - **Test Suite**: **4560 passed, 4 skipped**. Three layers — unit (`tests/test_*.py`),
176
+ integration (`tests/integration/`), and command-registry (`test_all_commands.py`).
177
+ - **Active focus**: parity work is effectively complete; current work is maintenance, frontend coordination,
178
+ and investigation only when a deterministic regression is reproduced.
188
179
  - **Compatibility**: Python 3.10+, cross-platform
189
180
 
190
181
  ## 🏛️ Architecture
@@ -270,7 +261,7 @@ Game systems are implemented in Python modules:
270
261
  - `mud/game_loop.py` drives the tick-based update loop.
271
262
  - `mud/commands` contains the command dispatcher and handlers.
272
263
  - `mud/combat` and `mud/skills` implement combat and abilities.
273
- - `mud/persistence.py` handles saving characters and world state.
264
+ - `mud/account/` and `mud/db/` handle character persistence and account state.
274
265
 
275
266
  Start the server with:
276
267
 
@@ -324,17 +315,12 @@ QuickMUD is a **production-ready ROM 2.4b MUD** with ✅ **100% behavioral parit
324
315
 
325
316
  ### 📈 Quality Metrics
326
317
 
327
- - **Test Suite**: 3,508 / 3,521 passing (99.6%), 11 skipped, 2 known
328
- pre-existing failures (full run ~8 min); pre-existing skips/failures are
329
- catalogued in
330
- [`docs/parity/PRE_EXISTING_FAILURES_TRIAGE.md`](docs/parity/PRE_EXISTING_FAILURES_TRIAGE.md).
318
+ - **Test Suite**: 4,560 passing, 4 skipped on the last full recertification.
331
319
  - **Behavioral Parity**: 100% of ROM 2.4b6 gameplay subsystems audited (combat,
332
320
  skills, spells, movement, communication, world/db, save/load, mob programs,
333
321
  255/255 commands).
334
- - **Function Coverage**: 716/745 ROM C functions mapped (96.1%)
335
- - **ROM C Source Audit**: 34 of 43 files audited (24 at strict 100%); remainder
336
- is the OLC editor cluster (`olc.c`/`olc_act.c`/`olc_save.c`/`olc_mpcode.c`/`hedit.c`)
337
- and a small partial tail (`board.c` 95%).
322
+ - **ROM C Source Audit**: 40 of 40 applicable ROM files audited, plus 3 intentional N/A files.
323
+ - **Cross-file Invariants**: 8 of 8 enforced by dedicated regression tests.
338
324
 
339
325
  ### 🔧 Advanced Features
340
326