mirror of
https://github.com/claude-code-best/claude-code.git
synced 2026-06-18 22:35:51 +00:00
- 新增 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>
30 lines
1015 B
TypeScript
30 lines
1015 B
TypeScript
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'
|
|
// 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'
|
|
}
|
|
|
|
/** Get gender symbol for display */
|
|
export function getGenderSymbol(gender: Gender): string {
|
|
switch (gender) {
|
|
case 'male':
|
|
return '♂'
|
|
case 'female':
|
|
return '♀'
|
|
case 'genderless':
|
|
return ''
|
|
}
|
|
}
|