mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-24 17:15:50 +00:00
fix: 改用 Gen 3+ 标准方法生成 PID/IV/闪亮/性别
- 新增 generatePID() 生成 32 位 Personality Value - IV 改为 PID 位提取法(word1/word2 各取 3 个 5-bit),替换 LCRNG - Shiny 检测改为 PID XOR 方法,阈值 < 16(Gen 8+ 约 1/4096) - 性别阈值从 (rate/8)*256 改为 rate*32,消除浮点精度丢失 - 生成生物时使用 randomAbility() 替代 getDefaultAbility() - 解决 #14 Shiny 检测、#15 IV 生成、#16 性别阈值、#20 Ability 选择 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -3,13 +3,16 @@ import type { Gender, SpeciesData } from '../types'
|
||||
/**
|
||||
* Determine gender based on species gender ratio.
|
||||
* genderRate: -1 = genderless, 0 = always male, 1-7 = female chance = genderRate/8, 8 = always female
|
||||
*
|
||||
* Gen 3+ style: PID low byte (0-255) compared directly against genderRate * 32.
|
||||
* If value < genderRate * 32 → female, otherwise male.
|
||||
*/
|
||||
export function determineGender(speciesData: SpeciesData, seed: number): Gender {
|
||||
if (speciesData.genderRate === -1) return 'genderless'
|
||||
if (speciesData.genderRate === 0) return 'male'
|
||||
if (speciesData.genderRate === 8) return 'female'
|
||||
// Use seed value (0-255) to determine gender
|
||||
const threshold = (speciesData.genderRate / 8) * 256
|
||||
// Direct comparison: genderRate maps 0-8 to threshold 0-255 in steps of 32
|
||||
const threshold = speciesData.genderRate * 32
|
||||
return (seed % 256) < threshold ? 'female' : 'male'
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user