ModernUO/Projects/UOContent/Items/Misc
Jack 597c81345e
feat: Adjusts fame and karma system with era gates for OSI accuracy (#2389)
## Summary

Overhauls the fame and karma system to be more era-accurate, based on original design documents and publish notes.

### Karma on player kill → karma on murder report
- Removes karma gain/loss on player kill (was immediate on death)
- Karma is now set to `Kills * -1000` on murder **report** instead
- Fame on player kill now uses the same formula as monster kills (`Fame / 100`)

This karma loss on murder report behaviour was tested on both the demo and live servers, behaviour was matching in terms of karma loss on report. Official UO servers karma loss AMOUNT match with my memory of T2A/UOR with one caveat - it's doubled on live servers (-2000 * kill count). I'm not sure when this changed and this behaviour has always had very poor and incorrect documentation, even 10-20 years ago.  I was obsessed with the dread lord title on OSI and the only way I knew how to get it was reach 10 kills then macro them off. Even in publish 16 (when "The Murderer" title was removed) it still required 10 kills. Maybe it changed to -2000*Kills in AOS - that's where I've put the era gating diff.

### Era gates
- **Karma lock** (ankh toggle + auto-lock on negative karma) gated to `Core.UOTD && !Core.AOS` — [didn't exist before Jan 28, 2001](https://web.archive.org/web/20010128092700/http://update.uo.com/design_300.html)
- **Felucca fame/karma +30% bonus** gated to `Core.LBR` — [added in Publish 16, July 2002](https://uo.com/wiki/ultima-online-wiki/technical/previous-publishes/2002-2/publish-16-part-2-5-23rd-july/)
- **Fame/karma splitting** among damage dealers gated to `Core.UOR` — pre-UOR awards go to last hit only

### Skill karma penalties
- **Provocation** on innocent NPC: NPC says cliloc 501591, karma loss (floor -7500)
- **Stealing** attempt: karma loss on every attempt (floor -5000). Stealing did not cause karma loss at all before!
- **Summon Daemon**: karma loss on successful cast (floor -7000)
- **Corpse carving** (human): -70 for innocent corpses (floor -7000), -20 for freely-aggressable (floor -2000)
- **Bounty head turn-in**: karma gain capped at 2000 (was awarding flat +2000)

### Beneficial action karma
- **Beneficial spells** (heal, cure, etc.): `AwardKarma(caster, target.Karma / 5)` — healing good targets raises karma, healing evil targets lowers it - source is UO98 demo scripts
- **Bandages**: same formula but gain only (skipped if target karma ≤ 0) - see stratics link ("only ever gain karma, not lose it")

Sources: UO98 Demo scripts and playing, [Fame and Karma wiki](https://uo.com/wiki/ultima-online-wiki/player/fame-and-karma/), [UO design doc (Jan 2001)](https://web.archive.org/web/20010128092700/http://update.uo.com/design_300.html), [Publish 16](https://uo.com/wiki/ultima-online-wiki/technical/previous-publishes/2002-2/publish-16-part-2-5-23rd-july/), [Stratics healing reference](https://web.archive.org/web/20001209014200fw_/http://uo.stratics.com/heal.shtml)

### Refactoring
- Extracted `Titles.ComputeKillAwards(killed, map)` shared by player kill and creature kill paths
- Extracted `Titles.SetKarma(m, value, message)` for direct karma assignment (used by murder report)
- Extracted `SendKarmaMessage` and `CheckKarmaLock` helpers from `AwardKarma`
2026-04-25 11:19:57 -07:00
..
Bedlam fix: Codegens misc ML items (#1213) 2022-10-28 20:44:08 -07:00
Blighted Grove fix: Fixes splitting potions before error (#1862) 2024-07-06 16:39:47 -07:00
Corpses feat: Adjusts fame and karma system with era gates for OSI accuracy (#2389) 2026-04-25 11:19:57 -07:00
Labyrinth fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
Painted Caves fix: Codegens misc ML items (#1213) 2022-10-28 20:44:08 -07:00
Palace of Paroxysmus fix: Codegens misc ML items (#1213) 2022-10-28 20:44:08 -07:00
Prism of Light fix: Codegens misc ML items (#1213) 2022-10-28 20:44:08 -07:00
The Citadel fix: Codegens misc ML items (#1213) 2022-10-28 20:44:08 -07:00
Twisted Weald fix: Codegens misc ML items (#1213) 2022-10-28 20:44:08 -07:00
Acid.cs feat: Adds new decay system and SkipSerialization (#2311) 2026-01-08 11:43:51 -08:00
ArcaneGem.cs fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
BankCheck.cs fix: Fixes exploits with bank box deposits. Makes stacking more efficient (#2337) 2026-02-13 20:34:35 -08:00
Beeswax.cs fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
Blocker.cs chore: Use var everywhere (#2294) 2025-12-27 16:47:28 -08:00
Blood.cs fix: Codegens more misc items (#1214) 2022-10-29 00:43:30 -07:00
Bola.cs fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
BolaBall.cs fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
ClockworkAssembly.cs chore: Use var everywhere (#2294) 2025-12-27 16:47:28 -08:00
CommunicationCrystals.cs fix: Fixes serialization and dirty tracking conveniences (#1627) 2023-12-03 15:55:31 -08:00
DeceitBrazier.cs fix: Consolidates Color/Center html (#1762) 2024-05-07 23:56:32 -07:00
EffectController.cs fix: Fixes NPE with effect controller (#1406) 2023-05-21 23:29:16 -07:00
EffectItem.cs feat: Adds new decay system and SkipSerialization (#2311) 2026-01-08 11:43:51 -08:00
ExecutionersCap.cs fix: Optimizes items to use default weights. (Part 1) (#2240) 2025-07-24 14:44:39 -07:00
Firebomb.cs fix: Optimizes items to use default weights. (Part 2) (#2241) 2025-07-24 15:41:44 -07:00
FlippableAddonAttribute.cs feat: Replaces params array with params ReadOnlySpan (#2125) 2025-02-13 21:19:02 -08:00
FlippableAttribute.cs fix: Adds command help, webpage, and fixes issues with other commands (#1669) 2024-02-10 00:19:19 -08:00
GlassItems.cs fix: Optimizes items to use default weights. (Part 1) (#2240) 2025-07-24 14:44:39 -07:00
Gold.cs fix: Codegens more misc items (#1216) 2022-10-29 16:08:23 -07:00
Guillotine.cs fix: Fixes crafter deserialize, cleans up bandages, and codegens misc items (#1350) 2023-02-25 00:54:12 -08:00
GumpToggleItems.cs fix: Fixes edge cases with on off items (#1832) 2024-06-10 18:11:35 -07:00
HairDye.cs fix: Optimizes items to use default weights. (Part 1) (#2240) 2025-07-24 14:44:39 -07:00
HoveringWisp.cs fix: Codegens more misc items (#1216) 2022-10-29 16:08:23 -07:00
IDurability.cs fix: Codegens more misc items (#1216) 2022-10-29 16:08:23 -07:00
InteriorDecorator.cs fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
Key.cs fix: Fixes container enumeration not recycling pooled arrays (#2341) 2026-02-17 09:54:32 -08:00
KeyRing.cs fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
LOSBlocker.cs chore: Use var everywhere (#2294) 2025-12-27 16:47:28 -08:00
Moonstone.cs feat: Adds Mobile.Murderer virtual property, consolidates kill-threshold checks (#2355) 2026-03-06 08:36:41 -08:00
MoonstoneGate.cs feat: Adds Mobile.Murderer virtual property, consolidates kill-threshold checks (#2355) 2026-03-06 08:36:41 -08:00
MorphItem.cs fix: Changes Map.Sector.Mobiles to link list & Fixes various related crash bugs (#1553) 2023-10-29 22:42:46 -07:00
OilCloth.cs fix: Fixes crafter deserialize, cleans up bandages, and codegens misc items (#1350) 2023-02-25 00:54:12 -08:00
OilFlask.cs fix: Fixes arrow animations by using 0xC7 when possible. (#2343) 2026-03-05 23:23:20 -08:00
Origami.cs fix: Codegens more misc items (#1216) 2022-10-29 16:08:23 -07:00
PlayerBulletinBoards.cs fix: Optimizes items to use default weights. (Part 2) (#2241) 2025-07-24 15:41:44 -07:00
PlayerVendorDeed.cs fix: Optimizes items to use default weights. (Part 1) (#2240) 2025-07-24 14:44:39 -07:00
PowerCrystal.cs fix: Optimizes items to use default weights. (Part 1) (#2240) 2025-07-24 14:44:39 -07:00
PowerGenerator.cs fix: Optimizes gump relay info (Prep for Static Gumps) (#1698) 2024-03-07 20:54:53 -08:00
ProjectedItem.cs feat: Fixes spawner bugs with position finding, Adds [ShowSpawnerBorders (#2297) 2025-12-28 18:26:03 -08:00
PromotionalToken.cs fix: Fixes arrow animations by using 0xC7 when possible. (#2343) 2026-03-05 23:23:20 -08:00
PublicMoongate.cs feat: Adds Mobile.Murderer virtual property, consolidates kill-threshold checks (#2355) 2026-03-06 08:36:41 -08:00
Rares.cs fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
Scales.cs fix: Optimizes items to use default weights. (Part 2) (#2241) 2025-07-24 15:41:44 -07:00
SerpentPillar.cs feat: Adds SerializedCommandProperty (#1249) 2022-11-14 18:24:33 -08:00
SpecialBeardDye.cs fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
SpecialHairDye.cs fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
Static.cs feat: Adds SerializedCommandProperty (#1249) 2022-11-14 18:24:33 -08:00
SwarmOfFlies.cs fix: Finishes code gen for misc items (#1248) 2022-11-13 23:10:13 -08:00
Teleporter.cs fix: Fixes ConditionTeleporter.DenyFollowers (#2284) 2025-11-29 16:28:14 -08:00
TrashBarrel.cs fix: Codegens evil decor. Fixes trash items (#1362) 2023-03-06 19:28:58 -08:00
TrashChest.cs fix: Fixes crafter deserialize, cleans up bandages, and codegens misc items (#1350) 2023-02-25 00:54:12 -08:00
TribalBerry.cs fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
TribalPaint.cs fix: Optimizes items to use default weights. (Part 3) (#2242) 2025-07-24 16:21:27 -07:00
UnholyBone.cs fix: Finishes code gen for misc items (#1248) 2022-11-13 23:10:13 -08:00
WarningItem.cs fix: Fixes map iterators for Items (#1564) 2023-10-26 17:49:15 -07:00
WayPoint.cs fix: Fixes missing methods. Adds more admin gump world building (#1675) 2024-02-10 20:31:25 -08:00
WindChimes.cs feat: Moves gumps out of the core (#1916) 2024-08-09 19:07:32 -07:00