Update Sphealy custom card to 0.850 OPS and cost 188

Increased target OPS from 0.820 to 0.850 with adjusted stat splits:
- vs RHP: .260/.340/.495 (power profile)
- vs LHP: .260/.375/.420 (patient/OBP profile)
- Cost updated from 85 to 188

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Cal Corum 2025-12-04 10:53:27 -06:00
parent c2ec561c82
commit 9d9c507e84
2 changed files with 27 additions and 27 deletions

View File

@ -44,7 +44,7 @@ async def create_sphealthamus_spheal():
print(f"✓ Using cardset ID: {cardset['id']} - Player description: '{player_description}'")
# Create custom archetype for Sphealthamus Sphealy Spheal Sr
# Target: Combined OPS = 0.820
# Target: Combined OPS = 0.850
# vs RHP: Power (singles + HRs with 3:2 BP-HR:HR ratio), high pull (62%)
# vs LHP: Patient (walks + singles), low pull (28%)
@ -52,17 +52,17 @@ async def create_sphealthamus_spheal():
name="Sphealthamus Sphealy Spheal Sr",
description="Power vs RHP, patience vs LHP, extreme splits",
# VS RHP: Target OPS = ~0.820 (power profile - singles + HRs)
avg_vs_r=0.250, # Boosted to hit OPS target
obp_vs_r=0.330, # Boosted to hit OPS target
slg_vs_r=0.475, # Boosted to hit OPS target
# VS RHP: Target OPS = ~0.850 (power profile - singles + HRs)
avg_vs_r=0.260, # Boosted to hit OPS target
obp_vs_r=0.340, # Boosted to hit OPS target
slg_vs_r=0.495, # Boosted to hit OPS target
bb_pct_vs_r=0.09, # Moderate walks
k_pct_vs_r=0.24, # Higher strikeouts (power hitter)
# VS LHP: Target OPS = ~0.800 (patient profile - walks + singles)
avg_vs_l=0.250, # Boosted to hit OPS target
obp_vs_l=0.350, # Boosted to hit OPS target
slg_vs_l=0.415, # Boosted to hit OPS target
# VS LHP: Target OPS = ~0.830 (patient profile - walks + singles)
avg_vs_l=0.260, # Boosted to hit OPS target
obp_vs_l=0.375, # Boosted to hit OPS target
slg_vs_l=0.420, # Boosted to hit OPS target
bb_pct_vs_l=0.15, # Very high walks
k_pct_vs_l=0.20, # Fewer strikeouts
@ -318,7 +318,7 @@ async def create_sphealthamus_spheal():
# Calculate and display total OPS
total_ops = calculate_total_ops(ratings[0], ratings[1], is_pitcher=False)
print(f"\nTotal OPS: {total_ops:.3f} (Target: 0.820)")
print(f"\nTotal OPS: {total_ops:.3f} (Target: 0.850)")
print(f"\nBaserunning:")
print(f" Steal: {baserunning['steal_low']}-{baserunning['steal_high']} (Jump: {baserunning['steal_jump']})")
@ -332,7 +332,7 @@ async def create_sphealthamus_spheal():
print(f"Position: 1B (Range 5, Error 3)")
print(f"Cardset: 29 (Custom Characters)")
print(f"Description: 05 Custom")
print(f"Total OPS: {total_ops:.3f} / 0.820 target")
print(f"Total OPS: {total_ops:.3f} / 0.850 target")
print(f"Pull Rate: {vl['pull_rate']*100:.0f}% vL / {vr['pull_rate']*100:.0f}% vR (Target: 28% vL, 62% vR)")
print(f"BP-HR:HR ratio vR: {vr['bp_homerun']:.0f}:{vr['homerun']:.0f} (Target: 3:2)")
@ -469,7 +469,7 @@ async def create_sphealthamus_spheal():
# Step 6: Update rarity and cost
print(f"\n✓ Updating rarity and cost...")
target_rarity_id = 3 # Starter
target_cost = 85
target_cost = 188
await db_patch('players', object_id=player_id, params=[('rarity_id', target_rarity_id)])
await db_patch('players', object_id=player_id, params=[('cost', target_cost)])

View File

@ -1,6 +1,6 @@
"""
Preview ratings for Sphealthamus Sphealy Spheal Sr custom player.
Target: 0.820 total OPS
Target: 0.850 total OPS
Power vs RHP (singles/HRs, 62% pull), Patient vs LHP (walks/singles, 28% pull)
"""
@ -9,24 +9,24 @@ from custom_cards.archetype_calculator import BatterRatingCalculator, calculate_
import random
# Create custom archetype for Sphealthamus Sphealy Spheal Sr
# Target: Combined OPS = 0.820 with formula: (OPS_vR + OPS_vL + min) / 3
# Target: Combined OPS = 0.850 with formula: (OPS_vR + OPS_vL + min) / 3
# Dramatic split: Power vs RHP, Patient vs LHP
spheal = BatterArchetype(
name="Sphealthamus Sphealy Spheal Sr",
description="Power vs RHP, patience vs LHP, extreme splits",
# VS RHP: Target OPS = ~0.820 (power profile - singles + HRs)
avg_vs_r=0.250, # Boosted to hit OPS target
obp_vs_r=0.330, # Boosted to hit OPS target
slg_vs_r=0.475, # Boosted to hit OPS target
# VS RHP: Target OPS = ~0.850 (power profile - singles + HRs)
avg_vs_r=0.260, # Boosted to hit OPS target
obp_vs_r=0.340, # Boosted to hit OPS target
slg_vs_r=0.495, # Boosted to hit OPS target
bb_pct_vs_r=0.09, # Moderate walks
k_pct_vs_r=0.24, # Higher strikeouts (power hitter)
# VS LHP: Target OPS = ~0.800 (patient profile - walks + singles)
avg_vs_l=0.250, # Boosted to hit OPS target
obp_vs_l=0.350, # Boosted to hit OPS target
slg_vs_l=0.415, # Boosted to hit OPS target
# VS LHP: Target OPS = ~0.830 (patient profile - walks + singles)
avg_vs_l=0.260, # Boosted to hit OPS target
obp_vs_l=0.375, # Boosted to hit OPS target
slg_vs_l=0.420, # Boosted to hit OPS target
bb_pct_vs_l=0.15, # Very high walks
k_pct_vs_l=0.20, # Fewer strikeouts
@ -84,7 +84,7 @@ print(" 1B: Range 5 / Error 3")
print()
print("Target Statistics:")
print(f" Target Total OPS: 0.820")
print(f" Target Total OPS: 0.850")
print(f" Pull Rate vs RHP: 62%")
print(f" Pull Rate vs LHP: 28%")
print(f" Running: 9")
@ -306,10 +306,10 @@ for rating in ratings:
total_ops = calculate_total_ops(ratings[0], ratings[1], is_pitcher=False)
print()
print("="*70)
print(f"TOTAL OPS: {total_ops:.3f} (Target: 0.820)")
if abs(total_ops - 0.820) <= 0.005:
print(f"TOTAL OPS: {total_ops:.3f} (Target: 0.850)")
if abs(total_ops - 0.850) <= 0.005:
print("✓ Within target range!")
elif abs(total_ops - 0.820) <= 0.015:
elif abs(total_ops - 0.850) <= 0.015:
print("~ Close to target (can tweak if needed)")
else:
print("⚠ Outside target range - needs adjustment")
@ -397,7 +397,7 @@ print("SUMMARY")
print("="*70)
print()
print("✓ Ratings calculated successfully")
print(f"✓ Total OPS: {total_ops:.3f} (Target: 0.820)")
print(f"✓ Total OPS: {total_ops:.3f} (Target: 0.850)")
print(f"✓ Pull Rates: {vl['pull_rate']*100:.0f}% vL, {vr['pull_rate']*100:.0f}% vR (Target: 28% vL, 62% vR)")
print(f"✓ BP-HR:HR Ratio vR: {vr['bp_homerun']:.0f}:{vr['homerun']:.0f} (Target: 3:2)")
print(f"✓ Triples: {vl['triple']:.0f} vL, {vr['triple']:.0f} vR (Target: 0 both)")