@jjlmoya/utils-games-development 1.63.0 → 1.65.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/category/index.ts +3 -1
- package/src/entries.ts +7 -1
- package/src/index.ts +1 -0
- package/src/tests/locale_completeness.test.ts +2 -2
- package/src/tests/seo_parity.test.ts +2 -2
- package/src/tests/seo_translation_completeness.test.ts +69 -0
- package/src/tests/tool_validation.test.ts +2 -2
- package/src/tests/translation_copy.test.ts +21 -18
- package/src/tool/audioLoopPointFinder/i18n/de.ts +13 -0
- package/src/tool/audioLoopPointFinder/i18n/fr.ts +26 -0
- package/src/tool/audioLoopPointFinder/i18n/id.ts +4 -0
- package/src/tool/audioLoopPointFinder/i18n/it.ts +3 -0
- package/src/tool/audioLoopPointFinder/i18n/nl.ts +4 -0
- package/src/tool/audioLoopPointFinder/i18n/pl.ts +4 -0
- package/src/tool/audioLoopPointFinder/i18n/pt.ts +3 -0
- package/src/tool/audioLoopPointFinder/i18n/ru.ts +4 -0
- package/src/tool/audioLoopPointFinder/i18n/sv.ts +4 -0
- package/src/tool/audioLoopPointFinder/i18n/tr.ts +4 -0
- package/src/tool/audioLoopPointFinder/i18n/zh.ts +4 -0
- package/src/tool/damageFormulaLab/bibliography.astro +24 -0
- package/src/tool/damageFormulaLab/bibliography.ts +10 -0
- package/src/tool/damageFormulaLab/component.astro +178 -0
- package/src/tool/damageFormulaLab/controller.ts +235 -0
- package/src/tool/damageFormulaLab/damage-formula-lab.css +644 -0
- package/src/tool/damageFormulaLab/dom-views.ts +193 -0
- package/src/tool/damageFormulaLab/entry.ts +28 -0
- package/src/tool/damageFormulaLab/evaluator.ts +84 -0
- package/src/tool/damageFormulaLab/expression.ts +191 -0
- package/src/tool/damageFormulaLab/i18n/de.ts +194 -0
- package/src/tool/damageFormulaLab/i18n/en.ts +231 -0
- package/src/tool/damageFormulaLab/i18n/es.ts +181 -0
- package/src/tool/damageFormulaLab/i18n/fr.ts +194 -0
- package/src/tool/damageFormulaLab/i18n/id.ts +194 -0
- package/src/tool/damageFormulaLab/i18n/it.ts +182 -0
- package/src/tool/damageFormulaLab/i18n/ja.ts +183 -0
- package/src/tool/damageFormulaLab/i18n/ko.ts +182 -0
- package/src/tool/damageFormulaLab/i18n/nl.ts +182 -0
- package/src/tool/damageFormulaLab/i18n/pl.ts +182 -0
- package/src/tool/damageFormulaLab/i18n/pt.ts +182 -0
- package/src/tool/damageFormulaLab/i18n/ru.ts +183 -0
- package/src/tool/damageFormulaLab/i18n/sv.ts +183 -0
- package/src/tool/damageFormulaLab/i18n/tr.ts +183 -0
- package/src/tool/damageFormulaLab/i18n/zh.ts +183 -0
- package/src/tool/damageFormulaLab/index.ts +11 -0
- package/src/tool/damageFormulaLab/logic.test.ts +138 -0
- package/src/tool/damageFormulaLab/logic.ts +138 -0
- package/src/tool/damageFormulaLab/model.ts +151 -0
- package/src/tool/damageFormulaLab/seo.astro +13 -0
- package/src/tool/damageFormulaLab/storage.ts +62 -0
- package/src/tool/damageFormulaLab/transfers.ts +89 -0
- package/src/tool/damageFormulaLab/ui.ts +62 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/bibliography.astro +22 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/bibliography.ts +10 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/component.astro +51 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/controller.ts +79 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/dom-views.ts +88 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/entry.ts +27 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/evaluator.ts +21 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/game-delta-time-fixed-timestep-lab.css +491 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/de.ts +56 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/en.ts +180 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/es.ts +56 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/fr.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/id.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/it.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/ja.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/ko.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/nl.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/pl.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/pt.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/ru.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/sv.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/tr.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/i18n/zh.ts +46 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/index.ts +11 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/logic.test.ts +35 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/logic.ts +140 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/seo.astro +15 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/seo_contract.test.ts +25 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/storage.ts +23 -0
- package/src/tool/gameDeltaTimeFixedTimestepLab/ui.ts +54 -0
- package/src/tool/gameUIAccessibilityTester/i18n/de.ts +13 -0
- package/src/tool/gameUIAccessibilityTester/i18n/fr.ts +13 -0
- package/src/tool/gameUIAccessibilityTester/i18n/id.ts +13 -0
- package/src/tool/gameUIAccessibilityTester/i18n/it.ts +1 -0
- package/src/tool/gameUIAccessibilityTester/i18n/nl.ts +5 -0
- package/src/tool/gameUIAccessibilityTester/i18n/pl.ts +5 -0
- package/src/tool/gameUIAccessibilityTester/i18n/pt.ts +2 -0
- package/src/tool/gameUIAccessibilityTester/i18n/ru.ts +1 -0
- package/src/tool/gameUIAccessibilityTester/i18n/sv.ts +1 -0
- package/src/tool/gameUIAccessibilityTester/i18n/tr.ts +2 -0
- package/src/tool/gameUIAccessibilityTester/i18n/zh.ts +1 -0
- package/src/tool/hitboxHurtboxAnimator/i18n/de.ts +14 -0
- package/src/tool/hitboxHurtboxAnimator/i18n/fr.ts +13 -0
- package/src/tool/hitboxHurtboxAnimator/i18n/id.ts +13 -0
- package/src/tool/hitboxHurtboxAnimator/i18n/it.ts +1 -0
- package/src/tool/hitboxHurtboxAnimator/i18n/nl.ts +1 -0
- package/src/tool/hitboxHurtboxAnimator/i18n/pl.ts +2 -0
- package/src/tool/hitboxHurtboxAnimator/i18n/pt.ts +2 -0
- package/src/tool/hitboxHurtboxAnimator/i18n/ru.ts +2 -0
- package/src/tool/hitboxHurtboxAnimator/i18n/sv.ts +1 -0
- package/src/tool/hitboxHurtboxAnimator/i18n/tr.ts +2 -0
- package/src/tool/itchioGameTester/i18n/de.ts +13 -0
- package/src/tool/itchioGameTester/i18n/es.ts +2 -2
- package/src/tool/itchioGameTester/i18n/fr.ts +26 -0
- package/src/tool/itchioGameTester/i18n/id.ts +3 -0
- package/src/tool/itchioGameTester/i18n/it.ts +3 -0
- package/src/tool/itchioGameTester/i18n/ja.ts +3 -0
- package/src/tool/itchioGameTester/i18n/ko.ts +3 -0
- package/src/tool/itchioGameTester/i18n/nl.ts +3 -0
- package/src/tool/itchioGameTester/i18n/pl.ts +3 -0
- package/src/tool/itchioGameTester/i18n/pt.ts +3 -0
- package/src/tool/itchioGameTester/i18n/ru.ts +3 -0
- package/src/tool/itchioGameTester/i18n/sv.ts +3 -0
- package/src/tool/itchioGameTester/i18n/tr.ts +3 -0
- package/src/tool/itchioGameTester/i18n/zh.ts +3 -0
- package/src/tool/localizationSanitizer/i18n/de.ts +13 -0
- package/src/tool/localizationSanitizer/i18n/es.ts +26 -0
- package/src/tool/localizationSanitizer/i18n/fr.ts +4 -0
- package/src/tool/localizationSanitizer/i18n/id.ts +4 -0
- package/src/tool/localizationSanitizer/i18n/it.ts +4 -0
- package/src/tool/localizationSanitizer/i18n/ja.ts +4 -0
- package/src/tool/localizationSanitizer/i18n/ko.ts +4 -0
- package/src/tool/localizationSanitizer/i18n/nl.ts +5 -0
- package/src/tool/localizationSanitizer/i18n/pl.ts +5 -0
- package/src/tool/localizationSanitizer/i18n/pt.ts +5 -0
- package/src/tool/localizationSanitizer/i18n/ru.ts +5 -0
- package/src/tool/localizationSanitizer/i18n/sv.ts +5 -0
- package/src/tool/localizationSanitizer/i18n/tr.ts +5 -0
- package/src/tool/localizationSanitizer/i18n/zh.ts +6 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/ja.ts +13 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/ko.ts +13 -0
- package/src/tool/pixelArtPaletteSwapper/i18n/zh.ts +18 -0
- package/src/tool/retroSfxGenerator/i18n/de.ts +13 -0
- package/src/tool/retroSfxGenerator/i18n/fr.ts +13 -0
- package/src/tool/retroSfxGenerator/i18n/id.ts +13 -0
- package/src/tool/retroSfxGenerator/i18n/it.ts +1 -0
- package/src/tool/retroSfxGenerator/i18n/nl.ts +1 -0
- package/src/tool/retroSfxGenerator/i18n/pl.ts +1 -0
- package/src/tool/retroSfxGenerator/i18n/pt.ts +1 -0
- package/src/tool/retroSfxGenerator/i18n/ru.ts +1 -0
- package/src/tool/retroSfxGenerator/i18n/sv.ts +2 -0
- package/src/tool/retroSfxGenerator/i18n/tr.ts +1 -0
- package/src/tool/retroSfxGenerator/i18n/zh.ts +1 -0
- package/src/tool/spriteSheetPacker/i18n/de.ts +13 -0
- package/src/tool/spriteSheetPacker/i18n/es.ts +2 -2
- package/src/tool/spriteSheetPacker/i18n/fr.ts +26 -0
- package/src/tool/spriteSheetPacker/i18n/id.ts +4 -0
- package/src/tool/spriteSheetPacker/i18n/it.ts +4 -0
- package/src/tool/spriteSheetPacker/i18n/ja.ts +3 -0
- package/src/tool/spriteSheetPacker/i18n/ko.ts +3 -0
- package/src/tool/spriteSheetPacker/i18n/nl.ts +4 -0
- package/src/tool/spriteSheetPacker/i18n/pl.ts +4 -0
- package/src/tool/spriteSheetPacker/i18n/pt.ts +4 -0
- package/src/tool/spriteSheetPacker/i18n/ru.ts +4 -0
- package/src/tool/spriteSheetPacker/i18n/sv.ts +4 -0
- package/src/tool/spriteSheetPacker/i18n/tr.ts +4 -0
- package/src/tool/spriteSheetPacker/i18n/zh.ts +4 -0
- package/src/tool/steamBbcodeTranslator/i18n/de.ts +22 -0
- package/src/tool/steamBbcodeTranslator/i18n/es.ts +23 -1
- package/src/tool/steamBbcodeTranslator/i18n/fr.ts +6 -1
- package/src/tool/steamBbcodeTranslator/i18n/id.ts +7 -1
- package/src/tool/steamBbcodeTranslator/i18n/it.ts +6 -1
- package/src/tool/steamBbcodeTranslator/i18n/ja.ts +5 -1
- package/src/tool/steamBbcodeTranslator/i18n/ko.ts +5 -1
- package/src/tool/steamBbcodeTranslator/i18n/nl.ts +7 -1
- package/src/tool/steamBbcodeTranslator/i18n/pl.ts +7 -1
- package/src/tool/steamBbcodeTranslator/i18n/pt.ts +7 -1
- package/src/tool/steamBbcodeTranslator/i18n/ru.ts +7 -1
- package/src/tool/steamBbcodeTranslator/i18n/sv.ts +7 -1
- package/src/tool/steamBbcodeTranslator/i18n/tr.ts +7 -1
- package/src/tool/steamBbcodeTranslator/i18n/zh.ts +5 -1
- package/src/tool/steamCapsuleGenerator/i18n/de.ts +2 -2
- package/src/tool/steamCapsuleGenerator/i18n/es.ts +2 -2
- package/src/tool/steamCapsuleGenerator/i18n/fr.ts +2 -2
- package/src/tool/steamCapsuleGenerator/i18n/pl.ts +13 -0
- package/src/tool/steamCapsuleGenerator/i18n/ru.ts +26 -0
- package/src/tool/steamCapsuleGenerator/i18n/sv.ts +1 -0
- package/src/tool/steamCapsuleGenerator/i18n/tr.ts +1 -0
- package/src/tools.ts +4 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { DamageFormulaLabUI } from '../ui';
|
|
4
|
+
import { bibliographyEntries } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'game-damage-formula-calculator-ttk';
|
|
7
|
+
const title = '게임 데미지 공식 계산기 & TTK 차트';
|
|
8
|
+
const description = '데미지 공식을 실시간 곡선, 공격·방어 히트맵, 반올림 임계값, 크리티컬, 처치 필요 대리수 및 처치 시간(TTK)으로 비교 분석하세요.';
|
|
9
|
+
|
|
10
|
+
const faq = [
|
|
11
|
+
{
|
|
12
|
+
question: '데미지 공식 계산기는 무엇을 비교하나요?',
|
|
13
|
+
answer: '동일한 전투 능력치에 대해 2개의 안전한 수학 공식을 비교합니다. 데미지 곡선, 처치 필요 공격 횟수, 처치 시간(TTK), 반올림 규칙, 저항 적용 순서를 안전하게 시뮬레이션할 수 있습니다.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: '어떤 변수와 함수를 사용할 수 있나요?',
|
|
17
|
+
answer: '사용 가능한 변수는 attack, defense, level, power, resistance, flat, criticalChance, criticalMultiplier 입니다. 안전한 함수로 min, max, clamp, abs, sqrt, pow, floor, round, ceil 을 지원합니다.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: '처치 시간(TTK)은 어떻게 계산되나요?',
|
|
21
|
+
answer: '처치 필요 공격 횟수는 목표 체력을 올림 처리된 예상 데미지로 나눈 값입니다. TTK는 첫 공격과 마지막 공격 사이의 시간이므로 (필요 공격 횟수 - 1) / 초당 공격 횟수로 계산됩니다. 1타 처치의 TTK는 0초입니다.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: '저항 적용 순서가 왜 중요한가요?',
|
|
25
|
+
answer: '고정 가감산치를 퍼센트 저항 전에 적용하면 고정치도 저항 비율만큼 감쇄됩니다. 저항을 먼저 적용하면 이후의 고정치 가감산은 영향을 받지 않습니다. 게임 엔진 설계에 따라 적절한 순서를 선택할 수 있습니다.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: '매끄러운 곡선이 균형 잡힌 게임 밸런스를 의미하나요?',
|
|
29
|
+
answer: '아니요. 곡선은 데미지 0 구간이나 급격한 수치 경사를 시각화할 뿐, 실제 밸런스는 전투 역할, 플레이 경험 및 테스트에 따라 결정됩니다.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howTo = [
|
|
34
|
+
{ name: '2개의 공식 선택', text: '선형, 비율, 레벨 스케일 프리셋 중 선택하거나 사용자 지정 공식 A와 B를 입력합니다.' },
|
|
35
|
+
{ name: '전투 능력치 설정', text: '공격력, 방어력, 레벨, 위력 계수, 저항 퍼센트, 고정 가감산, 크리티컬, 목표 체력, 공격 속도를 설정합니다.' },
|
|
36
|
+
{ name: '엔진 규칙 지정', text: '데미지 반올림 방식과 저항/고정치 적용 순서를 선택합니다.' },
|
|
37
|
+
{ name: '곡선 및 임계값 분석', text: '공격력 스위프 곡선, 방어 히트맵, 필요 공격 횟수, TTK 및 진단 경고를 확인합니다.' },
|
|
38
|
+
{ name: '실험 데이터 저장', text: '공유 링크를 복사하거나 JSON 설정, CSV 테이블, PNG 차트 이미지를 다운로드합니다.' },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const softwareApplication: WithContext<SoftwareApplication> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'SoftwareApplication',
|
|
44
|
+
name: title,
|
|
45
|
+
applicationCategory: 'DeveloperApplication',
|
|
46
|
+
operatingSystem: 'Any',
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const faqPage: WithContext<FAQPage> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'FAQPage',
|
|
52
|
+
mainEntity: faq.map((item) => ({
|
|
53
|
+
'@type': 'Question',
|
|
54
|
+
name: item.question,
|
|
55
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const howToSchema: WithContext<HowTo> = {
|
|
60
|
+
'@context': 'https://schema.org',
|
|
61
|
+
'@type': 'HowTo',
|
|
62
|
+
name: title,
|
|
63
|
+
step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })),
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const content: ToolLocaleContent<DamageFormulaLabUI> = {
|
|
67
|
+
slug,
|
|
68
|
+
title,
|
|
69
|
+
description,
|
|
70
|
+
ui: {
|
|
71
|
+
onboarding: '현재 사용 중인 데미지 공식과 대안 공식을 입력하고 전투 능력치를 조정하여 수치적 경계를 검증하세요.',
|
|
72
|
+
privacyNote: '로컬 전용 모델. 공식과 설정은 브라우저 내부에서만 처리됩니다.',
|
|
73
|
+
localNote: '비공개 전투 모델입니다. 공식과 파일은 이 브라우저 안에만 보관됩니다.',
|
|
74
|
+
formulaDeck: '공식 챔버',
|
|
75
|
+
formulaALabel: '공식 A (현재 모델)',
|
|
76
|
+
formulaBLabel: '공식 B (대안 모델)',
|
|
77
|
+
formulaHint: '변수: attack, defense, level, power, resistance, flat, criticalChance, criticalMultiplier',
|
|
78
|
+
formulaFunctions: '안전 함수: min, max, clamp, abs, sqrt, pow, floor, round, ceil',
|
|
79
|
+
presetLinear: '선형 방어',
|
|
80
|
+
presetRatio: '비율 아머',
|
|
81
|
+
presetLevel: '레벨 스케일링',
|
|
82
|
+
combatInputs: '전투 능력치 설정',
|
|
83
|
+
attackLabel: '공격력 (Attack)',
|
|
84
|
+
defenseLabel: '방어력 (Defense)',
|
|
85
|
+
levelLabel: '레벨 (Level)',
|
|
86
|
+
powerLabel: '위력 계수 (Power)',
|
|
87
|
+
resistanceLabel: '저항 퍼센트 (Resistance %)',
|
|
88
|
+
flatLabel: '고정 가감산 (Flat)',
|
|
89
|
+
criticalChanceLabel: '크리티컬 확률 (%)',
|
|
90
|
+
criticalMultiplierLabel: '크리티컬 배율',
|
|
91
|
+
healthLabel: '목표 체력 (Health)',
|
|
92
|
+
cadenceLabel: '초당 공격 횟수 (APS)',
|
|
93
|
+
roundingLabel: '데미지 반올림',
|
|
94
|
+
roundingNone: '소수점 유지',
|
|
95
|
+
roundingFloor: '내림 (Floor)',
|
|
96
|
+
roundingRound: '반올림 (Round)',
|
|
97
|
+
roundingCeil: '올림 (Ceil)',
|
|
98
|
+
orderLabel: '수식 적용 순서',
|
|
99
|
+
resistanceFirst: '저항 % 적용 후 고정치',
|
|
100
|
+
flatFirst: '고정치 적용 후 저항 %',
|
|
101
|
+
runLabel: '실시간 영향 비교',
|
|
102
|
+
resultDamage: '예상 데미지',
|
|
103
|
+
resultHits: '처치 필요 공격 횟수',
|
|
104
|
+
resultTtk: '처치 소요 시간 (TTK)',
|
|
105
|
+
resultDifference: '데미지 차이',
|
|
106
|
+
formulaAName: '현재 공식',
|
|
107
|
+
formulaBName: '대안 공식',
|
|
108
|
+
curveTitle: '공격력 변화 곡선',
|
|
109
|
+
curveCaption: '방어력을 고정한 상태에서 공격력을 현재의 절반에서 2배까지 변화시키며 비교합니다.',
|
|
110
|
+
heatmapTitle: '압력 필드 히트맵',
|
|
111
|
+
heatmapCaption: '공격력과 방어력 조합에 따른 공식 A의 예상 데미지 분포를 표시합니다.',
|
|
112
|
+
attackAxis: '우측으로 갈수록 공격력 증가',
|
|
113
|
+
defenseAxis: '하단으로 갈수록 방어력 증가',
|
|
114
|
+
scenariosTitle: '전투 타겟 프로필',
|
|
115
|
+
scenarioSkirmisher: '일반 몬스터',
|
|
116
|
+
scenarioGuardian: '정예 몬스터',
|
|
117
|
+
scenarioBoss: '보스 몬스터',
|
|
118
|
+
scenarioCustom: '현재 설정값',
|
|
119
|
+
diagnosticsTitle: '임계점 진단',
|
|
120
|
+
statusBalanced: '현재 검증 범위 내에서 비정상적인 수치 급변이 감지되지 않았습니다.',
|
|
121
|
+
exportTitle: '실험 데이터 내보내기',
|
|
122
|
+
copyLink: '공유 링크 복사',
|
|
123
|
+
exportCsv: 'CSV 다운로드',
|
|
124
|
+
exportJson: 'JSON 다운로드',
|
|
125
|
+
importJson: 'JSON 가져오기',
|
|
126
|
+
exportPng: '차트 이미지(PNG) 다운로드',
|
|
127
|
+
reset: '모델 초기화',
|
|
128
|
+
privacyDisclosure: '공유 링크는 URL 해시 값으로 설정을 보관하며 외부 서버로 전송되지 않습니다.',
|
|
129
|
+
limitationDisclosure: '크리티컬 예상 데미지는 통계적 평균값이며 난수 시뮬레이션이 아닙니다.',
|
|
130
|
+
importError: '올바른 데미지 실험실 설정 파일이 아닙니다.',
|
|
131
|
+
copiedStatus: '공유 링크가 클립보드에 복사되었습니다.',
|
|
132
|
+
},
|
|
133
|
+
seo: [
|
|
134
|
+
{
|
|
135
|
+
type: 'title',
|
|
136
|
+
level: 2,
|
|
137
|
+
text: '게임 엔진 적용 전 데미지 공식 사전 검증',
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
type: 'paragraph',
|
|
141
|
+
html: '특정 능력치 구간에서 정상 작동하는 공식도 레벨이 오르면 데미지 0이나 이상 수치로 붕괴될 수 있습니다. 본 에디터를 통해 극단적 능력치 구간의 이상 현상을 사전에 방지하세요.',
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
type: 'title',
|
|
145
|
+
level: 2,
|
|
146
|
+
text: '제한되고 안전한 표현식 언어',
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
type: 'paragraph',
|
|
150
|
+
html: '공식 입력창은 약속된 변수와 수학 함수만을 지원하며 임의의 자바스크립트 코드를 실행하지 않아 안전합니다.',
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
type: 'table',
|
|
154
|
+
headers: ['평가 지표', '계산 내용', '기획 검토 사항'],
|
|
155
|
+
rows: [
|
|
156
|
+
['예상 데미지', '크리티컬 기대값 및 저항을 반영한 기본 데미지', '약한 캐릭터와 강한 캐릭터 모두에게 공식이 의도대로 작동하는가?'],
|
|
157
|
+
['처치 필요 공격 횟수', '목표 체력을 올림 데미지로 나눈 값', '단 1포인트의 능력치 상승이 필요 공격 횟수를 1회 줄여주는가?'],
|
|
158
|
+
['처치 시간 (TTK)', '공격 간격을 공격 속도로 나눈 시간', '공격 속도가 기획된 전투 템포를 형성하는가?'],
|
|
159
|
+
['히트맵', '공격력과 방어력 조합에 따른 데미지 분포', '불필요한 데미지 정체 구간이나 급격한 둔화 구간이 있는가?'],
|
|
160
|
+
],
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
type: 'title',
|
|
164
|
+
level: 2,
|
|
165
|
+
text: '수학적 검증과 게임 밸런스 판단의 분리',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
type: 'paragraph',
|
|
169
|
+
html: '매끄러운 수식 곡선이 게임의 재미를 보장하지는 않습니다. 테스트 플레이 전 검증할 가치가 있는 질문을 도출하는 도구로 활용하세요.',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
type: 'tip',
|
|
173
|
+
title: '데미지 수치와 필요 공격 횟수를 항상 함께 확인하세요',
|
|
174
|
+
html: '데미지의 작은 변화가 목표 체력 임계점을 넘어가면 처치 필요 공격 횟수가 1회 줄어들 수 있습니다. 항상 데미지와 TTK를 함께 비교 분석하세요.',
|
|
175
|
+
},
|
|
176
|
+
],
|
|
177
|
+
faq,
|
|
178
|
+
bibliographyTitle: '데미지 공식 및 수치 설계 참고 자료',
|
|
179
|
+
bibliography: bibliographyEntries,
|
|
180
|
+
howTo,
|
|
181
|
+
schemas: [softwareApplication, faqPage, howToSchema],
|
|
182
|
+
};
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { DamageFormulaLabUI } from '../ui';
|
|
4
|
+
import { bibliographyEntries } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'game-schadeformule-rekenmachine-ttk';
|
|
7
|
+
const title = 'Schadeformule Lab met TTK Grafieken';
|
|
8
|
+
const description = 'Vergelijk veilige schadeformules voor games met live curves, heatmaps van aanval en verdediging, afrondingspunten en Time to Kill (TTK).';
|
|
9
|
+
|
|
10
|
+
const faq = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Wat vergelijkt de schadeformule rekenmachine?',
|
|
13
|
+
answer: 'Het voert twee veilige wiskundige formules uit tegen dezelfde gevechtswaarden. U kunt schadecurves, trefferdrempels, time to kill (TTK), afrondingsregels en weerstands volgorde vergelijken zonder JavaScript uit te voeren.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: 'Welke variabelen en functies zijn beschikbaar?',
|
|
17
|
+
answer: 'Beschikbare variabelen zijn attack, defense, level, power, resistance, flat, criticalChance en criticalMultiplier. Veilige functies zijn min, max, clamp, abs, sqrt, pow, floor, round en ceil.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: 'Hoe wordt time to kill (TTK) berekend?',
|
|
21
|
+
answer: 'Het aantal treffers is de doel-gezondheid gedeeld door de afgeronde verwachte schade (naar boven afgerond). TTK meet het interval tussen de eerste en laatste treffer: (treffers - 1) / aanvallen per seconde.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: 'Waarom maakt de volgorde van weerstand verschil?',
|
|
25
|
+
answer: 'Wanneer een vaste aanpassing voor de procentuele weerstand wordt toegepast, vermindert de weerstand ook die vaste waarde. Wordt de weerstand eerst toegepast, blijft de latere vaste waarde ongewijzigd.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Betekent een vloeiende curve dat de game gebalanceerd is?',
|
|
29
|
+
answer: 'Nee. Een curve toont drempels en zones met nul schade, maar balans hangt af van de spelcontext, rollen en speeltests.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howTo = [
|
|
34
|
+
{ name: 'Kies twee formules', text: 'Start vanuit een vooraf ingestelde formule (lineair, ratio of level-skaling) of voer twee eigen formules in.' },
|
|
35
|
+
{ name: 'Stel de gevechtswaarden in', text: 'Voer waarden in voor aanval, verdediging, level, kracht-coëfficiënt, weerstand, vaste aanpassing, kritieke waarden, gezondheid en cadans.' },
|
|
36
|
+
{ name: 'Bepaal de engine-regels', text: 'Kies hoe schade wordt afgerond en of weerstand voor of na de vaste aanpassing geldt.' },
|
|
37
|
+
{ name: 'Analyseer curves en drempels', text: 'Vergelijk de schadeverloop, aanval-sweep, verdedigings-heatmap, treffers en waarschuwingen.' },
|
|
38
|
+
{ name: 'Sla het experiment op', text: 'Kopieer een deellink of download de configuratie als JSON, CSV of PNG-grafiek.' },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const softwareApplication: WithContext<SoftwareApplication> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'SoftwareApplication',
|
|
44
|
+
name: title,
|
|
45
|
+
applicationCategory: 'DeveloperApplication',
|
|
46
|
+
operatingSystem: 'Any',
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const faqPage: WithContext<FAQPage> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'FAQPage',
|
|
52
|
+
mainEntity: faq.map((item) => ({
|
|
53
|
+
'@type': 'Question',
|
|
54
|
+
name: item.question,
|
|
55
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const howToSchema: WithContext<HowTo> = {
|
|
60
|
+
'@context': 'https://schema.org',
|
|
61
|
+
'@type': 'HowTo',
|
|
62
|
+
name: title,
|
|
63
|
+
step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })),
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const content: ToolLocaleContent<DamageFormulaLabUI> = {
|
|
67
|
+
slug,
|
|
68
|
+
title,
|
|
69
|
+
description,
|
|
70
|
+
ui: {
|
|
71
|
+
onboarding: 'Voer uw huidige schadeformule in, plaats een alternatief ernaast en pas de gevechtswaarden aan.',
|
|
72
|
+
localNote: 'Privémodel. Formules en bestanden blijven in deze browser.',
|
|
73
|
+
formulaDeck: 'Formulekamer',
|
|
74
|
+
formulaALabel: 'Formule A (Huidig model)',
|
|
75
|
+
formulaBLabel: 'Formule B (Alternatief)',
|
|
76
|
+
formulaHint: 'Variabelen: attack, defense, level, power, resistance, flat, criticalChance, criticalMultiplier',
|
|
77
|
+
formulaFunctions: 'Veilige functies: min, max, clamp, abs, sqrt, pow, floor, round, ceil',
|
|
78
|
+
presetLinear: 'Lineaire bescherming',
|
|
79
|
+
presetRatio: 'Ratio harnas',
|
|
80
|
+
presetLevel: 'Level-skaling',
|
|
81
|
+
combatInputs: 'Gevechtswaarden',
|
|
82
|
+
attackLabel: 'Aanval',
|
|
83
|
+
defenseLabel: 'Verdediging',
|
|
84
|
+
levelLabel: 'Level',
|
|
85
|
+
powerLabel: 'Kracht-coëfficiënt',
|
|
86
|
+
resistanceLabel: 'Weerstand (%)',
|
|
87
|
+
flatLabel: 'Vaste aanpassing',
|
|
88
|
+
criticalChanceLabel: 'Kritieke kans (%)',
|
|
89
|
+
criticalMultiplierLabel: 'Kritieke vermenigvuldiger',
|
|
90
|
+
healthLabel: 'Doel-gezondheid',
|
|
91
|
+
cadenceLabel: 'Aanvallen per seconde',
|
|
92
|
+
roundingLabel: 'Schade afronding',
|
|
93
|
+
roundingNone: 'Decimalen behouden',
|
|
94
|
+
roundingFloor: 'Naar beneden (Floor)',
|
|
95
|
+
roundingRound: 'Dichtstbijzijnde geheel getal',
|
|
96
|
+
roundingCeil: 'Naar boven (Ceil)',
|
|
97
|
+
orderLabel: 'Volgorde van aanpassing',
|
|
98
|
+
resistanceFirst: 'Weerstand daarna vast',
|
|
99
|
+
flatFirst: 'Vast daarna weerstand',
|
|
100
|
+
runLabel: 'Vergelijking in live model',
|
|
101
|
+
resultDamage: 'Verwachte schade',
|
|
102
|
+
resultHits: 'Treffers voor overwinning',
|
|
103
|
+
resultTtk: 'Time to Kill (TTK)',
|
|
104
|
+
resultDifference: 'Schadeverschil',
|
|
105
|
+
formulaAName: 'Huidig',
|
|
106
|
+
formulaBName: 'Alternatief',
|
|
107
|
+
curveTitle: 'Aanval verloopcurve',
|
|
108
|
+
curveCaption: 'Aanval varieert van de helft tot het dubbele van de huidige waarde terwijl verdediging vast blijft.',
|
|
109
|
+
heatmapTitle: 'Drukveld heatmap',
|
|
110
|
+
heatmapCaption: 'Toont verwachte schade van Formule A over combinaties van aanval en verdediging.',
|
|
111
|
+
attackAxis: 'Aanval stijgt naar rechts',
|
|
112
|
+
defenseAxis: 'Verdediging stijgt naar beneden',
|
|
113
|
+
scenariosTitle: 'Gevechtsprofielen',
|
|
114
|
+
scenarioSkirmisher: 'Aanvaller',
|
|
115
|
+
scenarioGuardian: 'Bewaker',
|
|
116
|
+
scenarioBoss: 'Baas',
|
|
117
|
+
scenarioCustom: 'Huidige instelling',
|
|
118
|
+
diagnosticsTitle: 'Drempelcontrole',
|
|
119
|
+
statusBalanced: 'Geen afwijkende wiskundige sprongen gevonden in deze testreeks.',
|
|
120
|
+
exportTitle: 'Experiment exporteren',
|
|
121
|
+
copyLink: 'Deellink kopiëren',
|
|
122
|
+
exportCsv: 'CSV downloaden',
|
|
123
|
+
exportJson: 'JSON downloaden',
|
|
124
|
+
importJson: 'JSON importeren',
|
|
125
|
+
exportPng: 'PNG-grafiek downloaden',
|
|
126
|
+
reset: 'Model herstellen',
|
|
127
|
+
privacyDisclosure: 'De deellink slaat de configuratie op in de URL-hash en verzendt geen gegevens naar een server.',
|
|
128
|
+
limitationDisclosure: 'Kritieke schade is een gemiddelde en geen willekeurige simulatie.',
|
|
129
|
+
importError: 'Het bestand is geen geldige configuratie.',
|
|
130
|
+
copiedStatus: 'Deellink gekopieerd naar het klembord.',
|
|
131
|
+
},
|
|
132
|
+
seo: [
|
|
133
|
+
{
|
|
134
|
+
type: 'title',
|
|
135
|
+
level: 2,
|
|
136
|
+
text: 'Test schadeformules voor games voordat ze worden geïmplementeerd',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
type: 'paragraph',
|
|
140
|
+
html: 'Een schadeformule kan goed lijken bij standaardwaarden maar vastlopen bij extreme voortgang. Dit lab helpt u om ongewenste drempels vroegtijdig te ontdekken.',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
type: 'title',
|
|
144
|
+
level: 2,
|
|
145
|
+
text: 'Veilige en beperkte wiskundige evaluatie',
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
type: 'paragraph',
|
|
149
|
+
html: 'Het invoerveld accepteert alleen vooraf gedefinieerde variabelen en veilige functies zonder willekeurige code uit te voeren.',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'table',
|
|
153
|
+
headers: ['Meetwaarde', 'Berekening', 'Ontwerpvraag'],
|
|
154
|
+
rows: [
|
|
155
|
+
['Verwachte schade', 'Basisformule inclusief kritieke factor en weerstand', 'Reageert de regel logisch bij zowel zwakke als sterke karakters?'],
|
|
156
|
+
['Treffers voor overwinning', 'Doel-gezondheid gedeeld door afgeronde schade', 'Veroorzaakt 1 extra stat-punt het wegvallen van een complete treffer?'],
|
|
157
|
+
['Time to Kill (TTK)', 'Interval tussen treffers gedeeld door aanvalsnelheid', 'Creëert de snelheid het gewenste gevechtsritme?'],
|
|
158
|
+
['Drukveld', 'Steekproef van Formule A over aanval en verdediging', 'Zijn er dode zones of onverwachte stappen?'],
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'title',
|
|
163
|
+
level: 2,
|
|
164
|
+
text: 'Wiskundige feiten scheiden van balansbeslissingen',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
type: 'paragraph',
|
|
168
|
+
html: 'Een mooie grafiek garandeert niet automatisch dat een game leuk is. Gebruik dit laboratorium om vragen te vinden voor speeltests.',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
type: 'tip',
|
|
172
|
+
title: 'Bekijk schade en treffers altijd samen',
|
|
173
|
+
html: 'Een kleine verandering in schade kan een gezondheidsdrempel overschrijden en een complete treffer schelen. Vergelijk schade altijd met TTK.',
|
|
174
|
+
},
|
|
175
|
+
{ type: 'paragraph', html: 'Dezelfde formule kan door afronding en de volgorde van modifiers een ander gevecht opleveren. Controleer ook kleine schade, hoge verdediging en de drempel voor een extra treffer; TTK modelleert geen ontwijken, cooldowns of onderbrekingen.' },
|
|
176
|
+
],
|
|
177
|
+
faq,
|
|
178
|
+
bibliographyTitle: 'Referenties voor schadeberekening in games',
|
|
179
|
+
bibliography: bibliographyEntries,
|
|
180
|
+
howTo,
|
|
181
|
+
schemas: [softwareApplication, faqPage, howToSchema],
|
|
182
|
+
};
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
import type { FAQPage, HowTo, SoftwareApplication, WithContext } from 'schema-dts';
|
|
2
|
+
import type { ToolLocaleContent } from '../../../types';
|
|
3
|
+
import type { DamageFormulaLabUI } from '../ui';
|
|
4
|
+
import { bibliographyEntries } from '../bibliography';
|
|
5
|
+
|
|
6
|
+
const slug = 'kalkulator-formul-obrazen-gier-ttk';
|
|
7
|
+
const title = 'Laboratorium Formuł Obrażeń i Wykresów TTK';
|
|
8
|
+
const description = 'Porównuj formuły obrażeń w grach w czasie rzeczywistym za pomocą interaktywnych wykresów, map ciepła, zaokrągleń, trafień krytycznych i czasu zabicia (TTK).';
|
|
9
|
+
|
|
10
|
+
const faq = [
|
|
11
|
+
{
|
|
12
|
+
question: 'Co porównuje kalkulator formuł obrażeń?',
|
|
13
|
+
answer: 'Wykonuje dwie bezpieczne formuły matematyczne na tych samych parametrach walki. Pozwala porównywać krzywe obrażeń, progi liczby trafień, czas zabicia (TTK), reguły zaokrąglania oraz kolejność naliczania pancerza i odporności.',
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
question: 'Jakie zmienne i funkcje są dostępne?',
|
|
17
|
+
answer: 'Dostępne zmienne to attack, defense, level, power, resistance, flat, criticalChance oraz criticalMultiplier. Bezpieczne funkcje to min, max, clamp, abs, sqrt, pow, floor, round i ceil.',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
question: 'Jak obliczany jest czas zabicia (TTK)?',
|
|
21
|
+
answer: 'Liczba wymaganych trafień to punkty życia celu podzielone przez zaokrąglone spodziewane obrażenia (w górę). TTK mierzy odstęp między pierwszym a ostatnim trafieniem: (trafienia - 1) / ataki na sekundę.',
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
question: 'Dlaczego kolejność odporności ma znaczenie?',
|
|
25
|
+
answer: 'Zastosowanie stałego modyfikatora przed procentową odpornością zmniejsza również ten modyfikator. Zastosowanie odporności w pierwszej kolejności pozostawia stały modyfikator bez zmian.',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
question: 'Czy gładka krzywa gwarantuje zbalansowaną grę?',
|
|
29
|
+
answer: 'Nie. Krzywa ujawnia progi i strefy zerowych obrażeń, ale balans zależy od kontekstu gry, ról postaci i testów z graczami.',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
|
|
33
|
+
const howTo = [
|
|
34
|
+
{ name: 'Wybierz dwie formuły', text: 'Zacznij od szablonu (liniowy, proporcjonalny, skalowanie poziomem) lub wpisz własne formuły A i B.' },
|
|
35
|
+
{ name: 'Ustaw parametry walki', text: 'Wprowadź wartości ataku, obrony, poziomu, współczynnika mocy, odporności, modyfikatora stałego, krytyków, zdrowia i szybkości ataku.' },
|
|
36
|
+
{ name: 'Określ reguły silnika', text: 'Wybierz sposób zaokrąglania obrażeń oraz kolejność uwzględniania odporności procentowej i modyfikatora stałego.' },
|
|
37
|
+
{ name: 'Analizuj wykresy i progi', text: 'Porównaj przebieg obrażeń, mapę ciepła obrony, liczbę potrzebnych ciosów i ostrzeżenia diagnostyczne.' },
|
|
38
|
+
{ name: 'Zapisz eksperyment', text: 'Skopiuj link udostępniania lub pobierz konfigurację w formacie JSON, tabelę CSV albo wykres w formacie PNG.' },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
const softwareApplication: WithContext<SoftwareApplication> = {
|
|
42
|
+
'@context': 'https://schema.org',
|
|
43
|
+
'@type': 'SoftwareApplication',
|
|
44
|
+
name: title,
|
|
45
|
+
applicationCategory: 'DeveloperApplication',
|
|
46
|
+
operatingSystem: 'Any',
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
const faqPage: WithContext<FAQPage> = {
|
|
50
|
+
'@context': 'https://schema.org',
|
|
51
|
+
'@type': 'FAQPage',
|
|
52
|
+
mainEntity: faq.map((item) => ({
|
|
53
|
+
'@type': 'Question',
|
|
54
|
+
name: item.question,
|
|
55
|
+
acceptedAnswer: { '@type': 'Answer', text: item.answer },
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const howToSchema: WithContext<HowTo> = {
|
|
60
|
+
'@context': 'https://schema.org',
|
|
61
|
+
'@type': 'HowTo',
|
|
62
|
+
name: title,
|
|
63
|
+
step: howTo.map((step) => ({ '@type': 'HowToStep', name: step.name, text: step.text })),
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export const content: ToolLocaleContent<DamageFormulaLabUI> = {
|
|
67
|
+
slug,
|
|
68
|
+
title,
|
|
69
|
+
description,
|
|
70
|
+
ui: {
|
|
71
|
+
onboarding: 'Wpisz obecnie używaną formułę obrażeń, zestaw ją z alternatywą i dostosuj parametry walki.',
|
|
72
|
+
localNote: 'Prywatny model. Formuły i pliki pozostają w Twojej przeglądarce.',
|
|
73
|
+
formulaDeck: 'Komora formuł',
|
|
74
|
+
formulaALabel: 'Formuła A (Obecny model)',
|
|
75
|
+
formulaBLabel: 'Formuła B (Alternatywa)',
|
|
76
|
+
formulaHint: 'Zmienne: attack, defense, level, power, resistance, flat, criticalChance, criticalMultiplier',
|
|
77
|
+
formulaFunctions: 'Bezpieczne funkcje: min, max, clamp, abs, sqrt, pow, floor, round, ceil',
|
|
78
|
+
presetLinear: 'Ochrona liniowa',
|
|
79
|
+
presetRatio: 'Pancerz proporcjonalny',
|
|
80
|
+
presetLevel: 'Skalowanie poziomem',
|
|
81
|
+
combatInputs: 'Parametry walki',
|
|
82
|
+
attackLabel: 'Atak',
|
|
83
|
+
defenseLabel: 'Obrona',
|
|
84
|
+
levelLabel: 'Poziom',
|
|
85
|
+
powerLabel: 'Współczynnik mocy',
|
|
86
|
+
resistanceLabel: 'Odporność (%)',
|
|
87
|
+
flatLabel: 'Modyfikator stały',
|
|
88
|
+
criticalChanceLabel: 'Szansa na krytyk (%)',
|
|
89
|
+
criticalMultiplierLabel: 'Mnożnik krytyka',
|
|
90
|
+
healthLabel: 'Zdrowie celu',
|
|
91
|
+
cadenceLabel: 'Ataki na sekundę',
|
|
92
|
+
roundingLabel: 'Zaokrąglanie obrażeń',
|
|
93
|
+
roundingNone: 'Zachowaj ułamki',
|
|
94
|
+
roundingFloor: 'W dół (Floor)',
|
|
95
|
+
roundingRound: 'Do najbliższej całkowitej',
|
|
96
|
+
roundingCeil: 'W górę (Ceil)',
|
|
97
|
+
orderLabel: 'Kolejność modyfikatorów',
|
|
98
|
+
resistanceFirst: 'Najpierw odporność, potem stały',
|
|
99
|
+
flatFirst: 'Najpierw stały, potem odporność',
|
|
100
|
+
runLabel: 'Porównanie wpływu na żywo',
|
|
101
|
+
resultDamage: 'Spodziewane obrażenia',
|
|
102
|
+
resultHits: 'Ciosy do pokonania',
|
|
103
|
+
resultTtk: 'Czas zabicia (TTK)',
|
|
104
|
+
resultDifference: 'Różnica obrażeń',
|
|
105
|
+
formulaAName: 'Obecny',
|
|
106
|
+
formulaBName: 'Alternatywa',
|
|
107
|
+
curveTitle: 'Przebieg przy wzroście ataku',
|
|
108
|
+
curveCaption: 'Wartość ataku zmienia się od połowy do dwukrotności obecnej wartości przy stałej obronie.',
|
|
109
|
+
heatmapTitle: 'Mapa ciepła nacisku',
|
|
110
|
+
heatmapCaption: 'Pokazuje spodziewane obrażenia Formuły A dla kombinacji ataku i obrony.',
|
|
111
|
+
attackAxis: 'Atak rośnie w prawo',
|
|
112
|
+
defenseAxis: 'Obrona rośnie w dół',
|
|
113
|
+
scenariosTitle: 'Profile walki',
|
|
114
|
+
scenarioSkirmisher: 'Hultaj',
|
|
115
|
+
scenarioGuardian: 'Strażnik',
|
|
116
|
+
scenarioBoss: 'Boss',
|
|
117
|
+
scenarioCustom: 'Obecne ustawienia',
|
|
118
|
+
diagnosticsTitle: 'Weryfikacja progów',
|
|
119
|
+
statusBalanced: 'Nie wykryto skoków ani anomalii w tym zakresie testowym.',
|
|
120
|
+
exportTitle: 'Eksportuj eksperyment',
|
|
121
|
+
copyLink: 'Skopiuj link',
|
|
122
|
+
exportCsv: 'Pobierz CSV',
|
|
123
|
+
exportJson: 'Pobierz JSON',
|
|
124
|
+
importJson: 'Importuj JSON',
|
|
125
|
+
exportPng: 'Pobierz wykres PNG',
|
|
126
|
+
reset: 'Zresetuj model',
|
|
127
|
+
privacyDisclosure: 'Link udostępniania zapisuje konfigurację w adresie URL i nie wysyła danych do serwerów.',
|
|
128
|
+
limitationDisclosure: 'Spodziewane obrażenia krytyczne to wartość średnia, a nie losowa symulacja.',
|
|
129
|
+
importError: 'Wybrany plik nie jest prawidłową konfiguracją.',
|
|
130
|
+
copiedStatus: 'Link skopiowany do schowka.',
|
|
131
|
+
},
|
|
132
|
+
seo: [
|
|
133
|
+
{
|
|
134
|
+
type: 'title',
|
|
135
|
+
level: 2,
|
|
136
|
+
text: 'Testuj formuły obrażeń przed wdrożeniem do silnika gry',
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
type: 'paragraph',
|
|
140
|
+
html: 'Formuła obrażeń może wyglądać dobrze przy podstawowych statystykach, ale załamywać się na wysokich poziomach. To laboratorium pozwala wcześnie wykryć niepożądane progi i strefy zerowe.',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
type: 'title',
|
|
144
|
+
level: 2,
|
|
145
|
+
text: 'Bezpieczny i ograniczony język wyrażeń',
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
type: 'paragraph',
|
|
149
|
+
html: 'Pole wyrażenia akceptuje wyłącznie zdefiniowane zmienne i bezpieczne funkcje matematyczne bez wykonywania niebezpiecznego kodu.',
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
type: 'table',
|
|
153
|
+
headers: ['Wskaźnik', 'Obliczenie', 'Pytanie projektowe'],
|
|
154
|
+
rows: [
|
|
155
|
+
['Spodziewane obrażenia', 'Formuła podstawowa uwzględniająca krytyki i odporność', 'Czy formuła działa sensownie na słabych i silnych postaciach?'],
|
|
156
|
+
['Ciosy do pokonania', 'Zdrowie celu podzielone przez zaokrąglone obrażenia', 'Czy 1 dodatkowy punkt statystyki usuwa cały wymagany cios?'],
|
|
157
|
+
['Czas zabicia (TTK)', 'Odstęp między ciosami podzielony przez szybkość ataku', 'Czy szybkość ataku tworzy zamierzony rytm walki?'],
|
|
158
|
+
['Mapa ciepła', 'Próbkowanie Formuły A na przestrzeni ataku i obrony', 'Czy istnieją nieoczekiwane progi lub martwe strefy?'],
|
|
159
|
+
],
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
type: 'title',
|
|
163
|
+
level: 2,
|
|
164
|
+
text: 'Oddzielenie arytmetyki od decyzji o balansie',
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
type: 'paragraph',
|
|
168
|
+
html: 'Gładki wykres nie jest gwarancją satysfakcjonującej rozgrywki. Używaj laboratorium do wyznaczania hipotez do testów z graczami.',
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
type: 'tip',
|
|
172
|
+
title: 'Analizuj obrażenia i liczbę ciosów jednocześnie',
|
|
173
|
+
html: 'Niewielka zmiana obrażeń może przekroczyć próg zdrowia i zmniejszyć liczbę ciosów o jeden. Zawsze porównuj obrażenia z czasem zabicia (TTK).',
|
|
174
|
+
},
|
|
175
|
+
{ type: 'paragraph', html: 'Ta sama formuła może dać inny przebieg walki zależnie od zaokrągleń i kolejności modyfikatorów. Sprawdź także małe obrażenia, wysoką obronę i próg dodatkowego trafienia; TTK nie obejmuje uników, cooldownów ani przerw.' },
|
|
176
|
+
],
|
|
177
|
+
faq,
|
|
178
|
+
bibliographyTitle: 'Referencje do projektowania matematyki w grach',
|
|
179
|
+
bibliography: bibliographyEntries,
|
|
180
|
+
howTo,
|
|
181
|
+
schemas: [softwareApplication, faqPage, howToSchema],
|
|
182
|
+
};
|