Wizardry Knight of the Grave v3.1 - Database Changes
====================================================


Author: Eric Labelle (email:snafaru@zimlab.com)
Release date of this document: 01 May 2024


Note: These are the database fixes, several to fix game-breaking issues.

Note: Code fixes, game play enhancements, and quality of life improvements are also included in this release as it is using the Proving Grounds v3.1 game engine. Reference: https://www.zimlab.com/wizardry/proving-grounds-v3

Download Site: https://www.zimlab.com/wizardry

Warning: The following may contain spoilers.


Scenario side fixes - details
=============================

General info
------------

Originally the game's difficulty level was for characters around level 25-30. Even so, the monsters were so powerful that most spell did essentially nothing and experience allocation meant no progress. The only way to play it in its original state was to cheat. Therefore, the entire monster roster has been rebalanced for players starting at level 1 up to level 13-15. Several other game breaking issues in the maze have also been fixed.


End game adjustment
-------------------

Since this scenario does not end with the standard "Congratulations" Wizardry ending, added "-- THE END --" after the speech of the final NPC encounter to clearly indicate to the player the adventure has attained its final chapter.


Maze fixes
----------

Maze level 1 fixes:

- At E0 N0 and E8 N2, set to Corridor instead of Room, otherwise this slows down the game too much when going from or coming back to the Castle.
- For playability and make use of a particular item found on the 6th floor, at E14 N2 require item #93 to pass then that allows for Stairs at E13 N2 down to E4 N13 L5 which is the common landing spot to access the lower levels. Think of this like needing the Blue Ribbon in Proving Grounds to access lower levels.
- At E0 N10, E10 N0, E10 N19, and E19 N10 made one-way doors to prevent the party from being stuck after being teleported for whatever reason in those enclosed areas.


Maze level 2 fixes:

- All Rooms leading to Stairs changed to Corridors, it made no sense for mid to high level characters to be interrupted all the time by low-level monsters on their way to the lower levels.
- Special #0 from Darkness to None. Although making almost the entire 2nd floor corridors dark was probably originally meant as a challenge, it is just very tedious and unproductive and not fun,  especially this early in the game with low-level characters, we are here to play, not suffer over the top zeal with disproportionate difficulty.
- Special #1 from None 0 10 1 to None 0 0 0, for the sake of consistency. Not used in the game.
- Special #2 at E2 N3 from Teleport E4 N13 L5 to Stairs. Makes more sense and there is a way back configured on L5. This was a game breaker since without maps it meant almost certain death.
- Special #3 at E9 N1 from Teleport E9 N10 L4 to Stairs. Makes more sense and there is a way back configured on L4. This was a game breaker since without maps it meant almost certain death.
- Special #4 at E13 N11 from Teleport E15 N5 L3 to Stairs. Makes more sense and there is a way back configured on L3. This was a game breaker since without maps it meant almost certain death.
- Special #14 Stairs back to level 1 moved from location E0 N11 to E15, N15. Makes more sense.
- Special #15 from None 5 138 96 to SP Encounter 5 96 96. OK, the author got very confused with setting up this set encounter. Multiple room fixes for this, all is now where it is supposed to be.
- At 6E N15, put a door on west side, inadvertent miss by original author.


Maze level 3 fixes:

- At E8 N14, moved to E15 N5, change from Special #6 Chute E16 N16 L2 to Stairs E14 N11 L2. A way back to level 2, see level 2 fixes.
- At several locations, changed Special #7 to meet Dead-End Men instead of Spell Singers. The Spell Singers and their acolytes were way too strong, also this could have been an error because the message displayed with this encounter is "Dead-End!" so... you meet Dead-End Men! Of course!
- At E17 N2 changed Special #4 changed message from 141 to 154, makes sense with other same situations elsewhere in this story. 


Maze level 4 fixes:

- At E2 N17 make south door. Forgot to have a door to enter that room. 
- At E12 N11 make west door to go back, otherwise you are stuck in an area for which you need an item from that same level to continue!
- At E6 N4, moved to E9 N10, Special #9 from Chute E7 N6 L2 to Stairs E10 N1 L2. A way back to level 2, see level 2 fixes.
- At E19 N0, moved to E6 N4, Special #5 from Stairs E9 N10 L4 to Teleport E9 N10 L4. This is the proper place to replace the chute that was previously there, it is the only way back in case of accidental teleportation in that area if you don't yet have the necessary item to pass back to the stairs.


Maze level 5 fixes:

- At E10 N18 removed Special #1 Teleport E5 N15 L5, a second copy of that special set on that square, it is properly set to the proper place.
- At E12 N13, make one-way door west side, removed Special #2 Stairs E11 N13 L5. In combination of the fix above, the stairs to the next west square was a crutch which the one-way wall fixes.
- At E9 N5 move to E4 N13, Special # Chute E5 N19 L2 to Stairs E3 N3 L2.  A way back to level 2, see level 2 fixes.
- At E3 N14, make door east side. Opps, enclosed square, game breaker if you are teleported there.
- At E3 N14, add Special #13 Stairs E13 N2 L1 back to level 1, see level 1 fixes above for explanation.


Maze level 6 fixes:

- At E16 N13, set second copy of Special #13 Stairs E5 N13 L5. Only way back if party depleted and can't get required quest item located on the same floor in order to continue on this floor. Not a perfect solution but better than being hopelessly stuck, and avoid having a potential rescue team suffer the same fate.
- At E1 N13, make one way door west side, removed Special #4 Stairs E1 N13. The stairs to the next west square was a crutch.
- At E17 N17 and E15 N14 changed from Teleport to Stairs to Chutes. To improve upon the aimless mishmash of Stairs, Teleports and Chutes so that it makes more sense. 
- At E12 N15, make door north side. Opps, enclosed area, game breaker if you are teleported there.
- At E19 N12, E19 N10, E19 N8 make doors on the east wall for the room set encounters to trigger normally.


Maze level 7 fixes:

- At E3 N8 and E4 N16 make east doors. Forgot to have a door to enter those rooms.
- Changed 18 squares to Special #1 Rock. A miss by the author, it is obvious those squares were intended to be set as Rock.
- At E3 N17 change Special #2 Get Item 2 152 92 to Search (Y/N) 4 152 -1092, otherwise you'll be getting a ton of these item.
- At E0 N1, add Special #6 Stairs back to E3 N12 L5. Nice to have a path back since you may be in over your head on your first visit(s).


Maze level 8 fixes:

- At E9 N8, set special #6 Stairs E4 N14 L5. Provided a sensible means to go back to level 5, otherwise almost certain death if no maps because the party would get depleted before reaching where the stairs were put.
- At E5 N7, make door south side. Opps, enclosed room, fixes game breaker if you are teleported there.
- At E13 N1, removed Special # Stairs E14 N1 L8, which was the next square to the east and put and east door instead. Removes a crutch.
- At E13 N6, removed Special # Stairs E9 N9 L8. Not sure if this is an error but is certainly broke the natural flow. 
- At E13 N2, moved Special #4 Stairs E7 N12 L8 to replace Stairs at E18 N5, for better story flow. Those stairs, which led to the quest item were placed in the middle of that section instead of at the end which made no sense.
- At E7 N14, Special #3 Stairs E9 N9 L8 changed to #6 Stairs E4 N14 L5. This fixes an issue displaying the wrong walls on target location and also bypasses having to go through 2 sets of stairs to go back to level 5.


Maze level 9 fixes:

- Encounter tables changed from #84 - 91 to #84 - #92 to include the General Monkey.
- At E4 N0, Special #13 Stairs E3 N13 L5 moved to E9 N0. A more sensible place to put the stairs back to level 5.
- At E15 N7, lowered pit damage to 10d10 instead of 15d10+10 in order to be in line with characters' levels 13 to 15 hit points. Player should be on the edge of their seat after hitting that pit!
- At E13 N10 and E17 N9 added doors to trigger the Room squares.
- At E8 N10, N9, N8, N7, N6 removed Special #12 Spinners as unnecessary zeal, the party has to deal with potent encounters already on those squares.11
- At E6 N6 set to Corridor instead of Room. OK, you've made it, no need to have this square set as a Lair.
- At E6 N6 Special #11 Chute to E9 N0 L9 changed to Chute E3 N0 L10. A way to access level 10 without using Malor. The tip on Level 7, which you may have missed, forces you to use Malor.


Maze level 10 fixes:

- Encounter tables changed from #84 - 91 to #84 - #92 to include the General Monkey.
- At E18 N19, Special #14 Stairs E13 N3 L0 to Stairs E0 N0 L0. Make sure this doesn't lead the characters directly into the castle moat.



Items fixes
-----------

- #62 Evil Kote +2 change type from Armor to Gloves, reduced AC from 5 to 3. In line with other items.
- #64 Evil Wicker Shield +3 improved AC from 5 to 6. Inline with other items.
- #85 Lords Robes renamed Lord's Robes. Lord's Robes which is a type of "Armor" was flagged to grant critical hits and 2x damage towards weres, undead, and demons, but the game code works only with items of type "Weapon" for these flags. These attributes have thus been removed from the Lord's Robes.
- #93 Gold Key_ renamed Gold Key.
- #98 Sword of Courage, damage reduced from 4d8+10 to 2d4+10 to reflect the monsters being toned down, it still is the 2nd strongest weapon in the game after the Samurai Katana/Muramasa Blade.
- #30, 31, 32, 55, 57, 68, 71. Wizardry does not take in account the number of swings of 1 on a weapon since that is the minimum anyway. For the sake of consistency with other items, changed the number of swings from 1 to 0.


Items fixes - Gold only for beginning items
-------------------------------------------
#1 70 > 25
#2 45 > 15
#3 65 > 30
#4 450 > 150
#5 28 > 10
#6 20 > 5
#7 600 > 20
#8 840 > 40
#9 48 > 15
#10 750 > 50
#11 1200 > 90
#12 1600 > 200
#13 3150 > 750
#14 500 > 100
#15 800 > 500
#16 1300 > 300
#17 30000 > 10000
#18 45000 > 15000
#47 25000 > 6000


Monster fixes - various
-----------------------

- #2 Rogue Leader image from 4 to 8.
- #7 Ice Giant renamed Ice Dwarf, class from Giant to Midget.
- #14 Frost Mantis plural is Frost Mantises.
- #15 Plural Nght Wisps is Night Wisps.
- #17 Priest 18th Cir renamed Priest 3nd Cir.
- #18 Lvl 21 Fighter renamed Lvl 2 Fighter.
- #19 Lvl 19 Mage renamed Lvl 2 Mage.
- #20 Lvl 15 Thief renamed Lvl 2 Thief.
- #21 Lvl 19 Ninja renamed Lvl 2 Ninja.
- #23 Demon Lord rename Demon Imp.
- #29 5 HD-Grue is 5 Headed Grue, 5 Headed Grues, 5 Headed Animal, 5 Headed Animls.
- #35 Shadow Lurker image from 5 to 3.
- #41 Wight Lord renamed Wight.
- #43 Alaspian Viper image from 15 to 14.
- #57 Glerp image from 11 to 14.
- #69 Gozu-Oni image from 3 to 5.
- #70 Giant Spider plural is Giant Spiders.
- #71 Alien Ooze plural is Alien Oozes.
- #83 Elemntl prnce > Elemntal Prince, Elemntl Prnces > Elementl Princes. 
- #85 Tarrasque real spelling is Tarasque, D&D inadvertently got it wrong (or did not want to be sued?), a spelling error in a role-playing game can go on for eons.
- #86 Unseen Entity plural is Unseen Entities.


Monster fixes - toned down
monster names not displayed intentionally, this is not a spoiler list, this is just to keep track of changes
--------------------------

#0  1d1+100 > 1d1+1, dam1d10 > 1d4
#1  15d12 > 1d10+0, AC 0 > 8, #1d8 > 1d4, dam2d12, 2d12 > 1d4, 1d4, resist 33 > 11
#2  15d8 > 1d8+0, AC 0 > 8, priest 5 > 1, dam2d8+5, 2d8+5 > 2d3
#3  20d10 > 1d10+0, AC -1 > 7, #1d9 > 1d4, dam1d12+2, 1d12+2, 1d12+2 > 1d8
#4  12d4+4 > 1d4+0, 1d6 > 1d4, mage 5 > 1
#5  12d6 > 1d6+0, AC 3 > 8, #1d6 > 1d4, dam2d4, 2d4, 2d4, 2d4, 5d8 > 1d6
#6  5d8 > 1d10+0, AC 4 > 9, #1d4+4 > 1d4,dam3d10, 3d10, 2d4 > 1d4
#7  14d10 > 1d10+0, AC 3 > 8, dam2d10, 2d10, 2d4 > 1d2, 1d2, 1d2
#8  12d8+10 > 1d8+1, AC 4 > 9, regen 25 > 2, dam1d12+4, 1d12+4, 1d12+4 > 1d2, 1d2, 1d2
#9  10d8+3 > 1d8+3, no drain, regen 0 > 2
#10 Dam 0 > 1d1+1
#11 10d5 > 1d5, #9d1 > 1d6, dam4d10 > 4d1, regen 5 > 1
#12 10d1 > 5d1, #9d1 > 1d6, AC 0 > 7
#13 15d5 > 1d5 , #1d6+1 > 1d3+1, dam1d1+1, 1d1+1, 1d1+1, 1d1+1, 1d1+1, 1d1+1, 1d1+1 > 1d1+1, 1d1+1
#14 12d6 > 2d6, AC 1 > 6, dam5d6, 4d8 > 1d6, 1d8
#15 10d8+3 > 2d8+3, no drain
#16 16d8+7 > 2d6+6t, AC -2 > 4, #1d6 > 1d3, dam4d8, 1d16, 4d8 > 1d6, 1d6
#17 18d8 > 2d8+0, #1d8 > 1d6, AC 0 > 5, priest 7 > 2, dam3d8+2, 3d8+2, 3d8+2, 1d7
#18 21d10 > 2d10+0, #1d8 > 1d6, AC 0 > 5, dam1d269, 2d12, 2d12, 2d12, 1d269 > 
#19 19d4 > 2d4+0, AC 3 > 9, mage 7 > 2, dam1d4, 1d4 > 1d4
#20 15d6 > 2d6+0, AC 0 > 8, dam2d4+2, 2d4+2, 2d4+2, 2d4+2, 6d8+3 > 1d4, 1d4 
#21 19d4 > 2d6+0, AC -3 > 8, #1d6 > 1d3, dam3d6, 1d4, 1d4, 3d6, 1d4, 1d4, 1d8 > 2d8, 2d8 (game engine v3.x rules, he he he)
#22 18d1+140 > 2d1+14, dam10d6, 10d6, 10d4, 10d4 > 1d4, 1d4, 1d4, 1d4, resist 90 > 29
#23 18d8 > 2d8, #1d12 > 1d6, AC 0 > 6, dam4d6, 4d6, 2d3, 2d3, 2d4+4 > 1d3, 1d3, 1d3, 1d3, 1d3, mage 6 > 2, resist 70 > 23
#24 17d6 > 2d6, AC -2 > 5, #1d8 > 1d4, dam1d6, 1d6, 1d8, 1d8, 2d8, 3d8 > 1d3, 1d3, 1d4
#25 100d1-99 > 8d1-7, #9d1 > 1d6, resist 100 > 9, dam0d0+0 > 1d1+1
#26 17d6 > 2d6, AC 0 > 10, mage 5 > 1, resist 45 > 9
#27 15d6 > 3d4, AC 0 > 9, #2d8 > 2d3, mage 0 > 1, no drain, dam2d4, 5d6, 5d6 > 1d4, 1d4
#28 19d6+4 > 3d6+4, AC -1 > 6, #1d8 > 1d4, dam2d10, 2d10, 2d10, 1d10 > 1d6, 1d6
#29 15d8+9 > 3d8+3, AC -4 > 3, dam4d8, 4d8, 2d12, 2d12, 2d12 > 1d3, 1d3, 1d4, 1d4, 1d4, resist 45 > 15, regen 9 > 3
#30 24d1+216 > 4d1+16, dam19d7, 19d7 > 1d7, 1d7
#31 15d8 > 5d8, AC 0 > 7, #1d8 > 1d4, dam4d6, 4d6, 20d1 > 1d6, 1d6, 5d1
#32 22d8 > 3d8, AC -3 > 4, #3d3 > 1d3, 1dam2d8+4, 2d8+4, 2d8+4, 2d8+4 > 1d6+1, 1d6+1, mage 6 > 2, priest 7 > 3
#33 24d10 > 4d10, AC -6 > 1, #1d8 > 1d3, dam2d12+2, 2d12+2, 2d12+2, 2d12+2 > 1d12+2, 1d12+2, priest 6 > 3
#34 20d4 > 5d4, AC 2 > 8, #1d6 > 1d3, dam3d6 > 1d4+2, mage 6 > 3
#35 18d6 > 4d6, AC -3 > 4, dam2d6+2, 2d6+2, 2d6+2, 2d6+2, 8d8 > 1d6+2,  1d6+2
#36 24d4 > 4d6, AC -3 > 6,  #1d8 > 1d3, dam8d6+2, 2d8, 2d8 >  2d8+1, 2d8+1
#37 20d10+20 > 4d2+4, AC -8 > -1, resist 55 > 18
#38 20d8 > 4d8 > AC -22 > -2, dam5d8, 5d8, 5d8, 5d8 > 1d8, 1d8, 1d8, 1d8 resist 99 > 49
#39 18d8 > 4d8, AC -4 > 2, #1d8 > 1d4, dam3d8+1, 3d8+1, 3d8+1, 6d10+2 > 1d8+1, 1d8+1, 1d8+1
#40 200d1+521 > 5d1+13 
#41 20d6 > 4d6, AC -4 > 2, no drain, regen 0 > 2
#42 16d10 > 4d10, AC -4 > 2, no drain, regen 0 > 1, mage 6 > 3, dam2d8, 2d8, 4d10, 4d10 > 1d4, 1d4, 2d5, 2d5
#43 18d3 > 6d3, AC -2 > 4, no autokill, no paralyze, add poison
#44 20d4 > 5d4, AC -3 > 3, 6d8, 2d8, 2d8 > 3d4, 1d4, 1d4
#45 30d1+470 > 5d1+23, resist 95 > 29, dam20d9, 20d9 > 1d9, 1d9
#46 24d8 > 4d8, AC -4 > 2, regen 25 > 5, dam2d10, 2d10, 2d10 > 1d10, 1d10, 1d10 > 
#47 30d8 > 5d8, AC -1 > 5, priest 11 > 3, dam2d8+8, 2d8+8, 2d8+8, 2d8+8 > 1d8+2, 1d8+2
#48 24d4 > 6d4, AC 1 > 7, mage 7 > 3, dam2d6+4 > 1d4+2
#49 48d6 > 5d6, AC 1 > 7, dam4d4+16, 4d4+16, 4d4+16, 4d4+16, 16d8+8 > 1d6+2, 1d6+2
#50 24d4 > 6d4, AC -4 > 2, no autokill, dam4d8, 4d8, 12d6 > 2d4, 2d4, 6d3  
#51 22d8 > 8d4, AC -4 > 2, #1d4 > 1d1, drain 3 > 1, mage 5 > 2
#52 22d8 > 8d4. AC -5 > 1, #1d6 > 1d2, mage 6 > 3, resist 75 > 15, no call, dam4d12, 2d8, 2d8, 2d6, 2d6 > 2d6, 1d4, 1d4, 1d3, 1d3
#53 30d1+130 > 6d1+26, AC 0 > 6, resist 95 > 20, dam8d10 > 4d5
#54 24d8 > 4d8, AC -5 > 1, mage 6 > 2, dam2d8, 2d8, 6d12 > 1d4, 1d4, 3d6
#55 100d2 > 7d2, AC 6 > 10
#56 40d3+20 > 6d8, AC 0 > 9, mage 4 > 3, dam 2d3 > 1d5
#57 24d4+20 > 6d4, AC -3 > 3, dam2d12+4 > 1d6+2
#58 14d30 > 7d6, AC -7 > -1, dam2d10, 2d10, 2d10, 2d10 > 1d5, 1d5, 1d5, 1d5
#59 30d10+60 > 6d4+12, AC 10, regen 30 > 6, resist 85 > 15, dam2d10+10, 2d10+10 > 1d5+5, 1d5+5
#60 50d10 > 8d10, AC -8 > -2, resist 75 > 25, mage 7 > 4, dam20d9 > 1d4+2
#61 30d4 > 10d6, AC -5 > 1, dam4d10, 4d10, 16d8 > 2d8+2, 2d8+2
#62 40d12 > 10d6, AC -6 > 0, no autokill, dam 16d8 > 8d4
#63 40d4 > 8d4, AC -3 > 3, mage 8 > 4, dam2d8+4 > 2d4+1
#64 50d4 > 10d4, AC -8 > -2, mage 8 > 4, no drain
#65 40d8 > 10d4, AC -8 > -2, mage 7 > 3, no drain
#66 36d10 > 9d8, AC -5 > 1, mage 8 > 4
#67 14d8+10 > 7d8+5, AC -4 > 2
#68 20d8 > 10d4, AC -6 > 0, #1d8+1 > 1d4+1, resist 25 > 20, partner odds 80 > 60, dam4d6, 4d6, 4d6, 4d6 > 2d3, 2d3, 2d3, 2d3
#69 20d5 > 10d3, AC-6 > 0, no paralyze, regen 0 > 1, dam8d6 > 4d5 
#70 16d5 > 8d5, AC -2 > 4, dam6d8, 2d10, 2d8 > 3d4, 1d5, 1d4
#71 16d5+20 > 8d5+10, AC -7 > -1, #2d3-1 > 1d5
#72 20d10+40 > 10d5+20, AC 2 > 8, no drain, dam4d4+4, 4d4+4, 4d4+4, 4d4+4 > 2d2+2, 2d2+2, 2d2+2, 2d2+2
#73 50d10 > 20d10, AC -3 > 3, no autokill, regen 0 > 7, dam2d60, 2d60 > 2d12, 2d12
#74 200d2 > 20d2, AC -3 > 3, mage 7 > 5
#75 60d5 > 20d5, AC -13 > -7, dam4d10+20, 4d10+20, 4d10+20 > 2d5+10, 2d5+10, 2d5+10
#76 100d4 > 20d4, AC -3 > 3, mage 7 > 5, regen 0 > 8 (for exp)
#77 600d1 > 60d1, AC -13 > -7, regen 10 > 8
#78 AC -11 > -5, resist 95 > 69
#79 No change
#80 50d8+50 > 20d8+20
#81 70d8 > 20d8, AC -4 > 2, mage 7 > 5, regen 0 > 8 (for exp), dam9d4, 9d4, 36d4 > 2d9, 2d9, 2d36
#82 70d8 > 20d8, regen 0 > 8 (for exp)
#83 100d4 > 50d4, mage 7 > 6, regen 0 > 8 (for exp)
#84 No change
#85 300d1 > 200d1, no autokill, regen 0 > 9 (for exp), dam12d8, 12d8, 10d8 > 12d4, 12d4, 10d4
#86 78d8 > 15d8, no drain, AC -7 > -2, regen 4 > 9 (for exp)
#87 80d8 > 16d8, mage 7 > 6, #1d1 > 1d1, dam6d12, 3d6, 3d4, 3d4, 3d4 > 2d6, 2d6, 2d4, 2d4, 2d4
#88 1d1+500 > 25d1+75, AC -3 > 3
#89 88d8 > 18d8, AC -8 > -2, mage 7 > 6, regen 0 > 9 (for exp), dam9d8, 9d8, 25d12 > 2d8, 2d8, 2d12
#90 47d10 > 17d10, AC -6 > 0
#91 46d14 > 12d14, AC -8 > -2, no autokill, regen 0 > 9 (for exp), dam9d12, 9d12, 9d6 > 3d6, 3d6, 3d2
#92 46d12 > 12d12, AC -4 > 2, no autokill, no stone, mage 7 > 5, regen 0 > 8 (for exp)
#93 60d4 > 20d4, mage 7 > 6
#94 75d4 > 20d4, AC -8 > -2, dam5d15, 5d15, 20d8 > 3d5, 3d5, 10d4
#95 Mage 8 > 7, priest 9 > 7, drain 20 > 1, regen 10 > 7
#96 No drain, no autokill, no stone
#97 200d16+4000 > 50d16+4000, resis 99 > 89, regen 1500 > 7
#98 Regen 70 > 9
#99 Dm4d20, 3d20, 4d20, 3d20, 4d20 > 2d10, 2d10, 2d10, 2d10, 2d10
#100 60d12+50 > 12d12+50, AC -2 > 4, resist 90 >89


Conclusion
----------

This scenario includes all the fixes above as well as code fixes and the game enhancements of the Wizardry Proving Grounds v3.1 game engine.

It can be downloaded here: https://www.zimlab.com/wizardry

If you have more fixes for Wizardry, please let me know.

Thank you.

Eric Labelle (Snafaru)
Email: snafaru@zimlab.com
Web Site: https://www.zimlab.com/wizardry
GitHub:	https://github.com/snafaru
