feat: 修炼数值配置化,天灵根规则重构,更新主菜单背景
- GameConfig 新增 [cultivation] 修炼系统配置(基础速度/灵气浓度/资质及灵根倍率/天灵根加成) - 天灵根改为仅天骄资质再掷(heavenly_root_chance=50%),移入 GameConfig 可配置 - Disciple 修炼倍率常量改为从 GameConfig 读取,新增灵根数量倍率方法 - 主菜单背景更换为"图片大门",新增"宗门全景"资源,删除旧 BG1.png - 同步更新弟子系统设计文档及新增修炼系统设计文档
This commit is contained in:
@@ -9,12 +9,12 @@ enum Aptitude { ORDINARY, MEDIUM, SUPERIOR, HEAVENLY } # 下品/中品/上品/
|
||||
## 灵根五行。
|
||||
enum SpiritRoot { GOLD, WOOD, WATER, FIRE, EARTH }
|
||||
|
||||
# —— 常量表:枚举值 → 显示文本 / 倍率(按索引一一对应)——
|
||||
# —— 常量表:枚举值 → 显示文本(按索引一一对应)——
|
||||
const APTITUDE_NAMES: Array[String] = ["下品", "中品", "上品", "天骄"]
|
||||
const APTITUDE_SPEED: Array[float] = [0.6, 1.0, 1.5, 2.0] # D5 用
|
||||
const ROOT_NAMES: Array[String] = ["金", "木", "水", "火", "土"]
|
||||
const REALM_NAMES: Array[String] = ["练气", "筑基", "金丹", "元婴", "化神"] # 按 realm_index 索引
|
||||
const HEAVENLY_BONUS := 1.5 # 天灵根额外修炼速度倍率(D5 用)
|
||||
|
||||
# —— 修炼数值一律读 GameConfig(资质倍率/天灵根加成/速度等)——
|
||||
|
||||
# —— 实例字段 ——
|
||||
var id: int = 0 # 唯一编号(DiscipleManager 分配)
|
||||
@@ -22,7 +22,7 @@ var name: String = ""
|
||||
var age: int = 0
|
||||
var aptitude: Aptitude = Aptitude.ORDINARY
|
||||
var roots: Array[SpiritRoot] = [] # 普通弟子 1~3 根;天灵根固定 1 根
|
||||
var is_heavenly: bool = false # 天灵根标记(3% 概率)
|
||||
var is_heavenly: bool = false # 天灵根标记(仅天骄资质,概率见配置)
|
||||
var join_year: int = 0 # 入宗年份(0 = 未入宗/候选),accept 时快照
|
||||
var join_month: int = 0 # 入宗月份
|
||||
var join_day: int = 0 # 入宗日
|
||||
@@ -39,6 +39,12 @@ func get_roots_text() -> String:
|
||||
names.append(ROOT_NAMES[root])
|
||||
return "、".join(names)
|
||||
|
||||
## 灵根数量修炼倍率(根数越少越快,D5 修炼循环消费)。
|
||||
## 数值来自 GameConfig.root_count_speed,按根数-1 索引,越界钳制。
|
||||
func get_root_count_speed() -> float:
|
||||
var idx := clampi(roots.size() - 1, 0, GameConfig.root_count_speed.size() - 1)
|
||||
return GameConfig.root_count_speed[idx]
|
||||
|
||||
func get_realm_text() -> String:
|
||||
if realm_index == 0:
|
||||
return "%s%d层" % [REALM_NAMES[realm_index], sub_realm_index + 1]
|
||||
|
||||
@@ -14,9 +14,6 @@ var disciples: Array[Disciple] = []
|
||||
## 候选弟子池(未入宗,等待玩家选择)。
|
||||
var applicants: Array[Disciple] = []
|
||||
|
||||
## 天灵根生成概率(3%)。
|
||||
const HEAVENLY_CHANCE := 0.03
|
||||
|
||||
## 姓氏池。
|
||||
const SURNAMES: Array[String] = [
|
||||
"林", "苏", "叶", "萧", "顾", "沈", "楚", "白",
|
||||
@@ -118,15 +115,17 @@ func _get_interval_days() -> int:
|
||||
var days_per_year := TimeSystem.MONTHS_PER_YEAR * TimeSystem.DAYS_PER_MONTH
|
||||
return maxi(1, roundi(GameConfig.recruit_interval_years * days_per_year))
|
||||
|
||||
## 创建一名候选弟子:随机生成属性(姓名/年龄/灵根/资质),
|
||||
## 创建一名候选弟子:随机生成属性(姓名/年龄/资质/天灵根/灵根)。
|
||||
## 天灵根规则:仅天骄资质中再掷一次(概率来自 GameConfig.heavenly_root_chance)。
|
||||
## 不分配 ID——ID 在入宗时由 accept_applicant 分配,保证连续且无浪费。
|
||||
func _create_applicant() -> Disciple:
|
||||
var d := Disciple.new()
|
||||
d.name = _generate_name()
|
||||
d.age = randi_range(12, 18)
|
||||
d.is_heavenly = randf() < HEAVENLY_CHANCE
|
||||
d.roots = _generate_roots(d.is_heavenly)
|
||||
d.aptitude = _roll_aptitude()
|
||||
d.is_heavenly = d.aptitude == Disciple.Aptitude.HEAVENLY \
|
||||
and randf() < GameConfig.heavenly_root_chance
|
||||
d.roots = _generate_roots(d.is_heavenly)
|
||||
return d
|
||||
|
||||
## 随机生成姓名:单姓 + 1~2 个名用字。
|
||||
|
||||
@@ -17,6 +17,20 @@ var opening_pick_count := 3
|
||||
var recruit_interval_years := 0.1
|
||||
## 定期弹窗候选人数。
|
||||
var recruit_applicant_count := 3
|
||||
## 天灵根概率(仅天骄资质中再掷一次)。
|
||||
var heavenly_root_chance := 0.5
|
||||
|
||||
# —— 修炼系统(对应 cfg 的 [cultivation] 节)——
|
||||
## 基础修炼速度(修为/游戏日)。
|
||||
var cultivation_base_speed := 10.0
|
||||
## 宗门灵气浓度(修炼速度系数,D6 建筑系统接入后动态化)。
|
||||
var qi_concentration := 1.0
|
||||
## 资质修炼倍率(按下品/中品/上品/天骄索引)。
|
||||
var aptitude_speed: Array[float] = [0.6, 1.0, 1.5, 2.0]
|
||||
## 灵根数量修炼倍率(按根数-1 索引:1根/2根/3根)。
|
||||
var root_count_speed: Array[float] = [1.0, 0.8, 0.6]
|
||||
## 天灵根额外修炼速度倍率。
|
||||
var heavenly_bonus := 1.5
|
||||
|
||||
## 各难度资质权重表(键 = 难度档位,值 = 下品/中品/上品/天骄 权重)。
|
||||
var aptitude_weights_by_difficulty: Dictionary = {
|
||||
@@ -40,6 +54,23 @@ func _load_config() -> void:
|
||||
opening_pick_count = cfg.get_value("recruitment", "opening_pick_count", opening_pick_count)
|
||||
recruit_interval_years = cfg.get_value("recruitment", "recruit_interval_years", recruit_interval_years)
|
||||
recruit_applicant_count = cfg.get_value("recruitment", "recruit_applicant_count", recruit_applicant_count)
|
||||
heavenly_root_chance = cfg.get_value("recruitment", "heavenly_root_chance", heavenly_root_chance)
|
||||
# 修炼系统
|
||||
cultivation_base_speed = cfg.get_value("cultivation", "base_speed", cultivation_base_speed)
|
||||
qi_concentration = cfg.get_value("cultivation", "qi_concentration", qi_concentration)
|
||||
heavenly_bonus = cfg.get_value("cultivation", "heavenly_bonus", heavenly_bonus)
|
||||
var apt_raw: Variant = cfg.get_value("cultivation", "aptitude_speed", [])
|
||||
if apt_raw is Array and apt_raw.size() == aptitude_speed.size():
|
||||
var arr: Array[float] = []
|
||||
for v in apt_raw:
|
||||
arr.append(float(v))
|
||||
aptitude_speed = arr
|
||||
var root_raw: Variant = cfg.get_value("cultivation", "root_count_speed", [])
|
||||
if root_raw is Array and root_raw.size() == root_count_speed.size():
|
||||
var arr2: Array[float] = []
|
||||
for v in root_raw:
|
||||
arr2.append(float(v))
|
||||
root_count_speed = arr2
|
||||
# 逐档读取难度权重(INI 数组字面量,如 [45, 35, 15, 5])
|
||||
for key in aptitude_weights_by_difficulty.keys():
|
||||
var raw: Variant = cfg.get_value("recruitment_" + key, "aptitude_weights", [])
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
[gd_scene format=3 uid="uid://d1odycoaqhhyg"]
|
||||
|
||||
[ext_resource type="Script" uid="uid://drfyh36my6gj2" path="res://src/UI/Panels/MainMenu/MainMenu.gd" id="1_cwvg5"]
|
||||
[ext_resource type="Texture2D" uid="uid://caeqoc6wx8toy" path="res://assets/sprites/ui/BG1.png" id="1_hrti0"]
|
||||
[ext_resource type="Texture2D" uid="uid://c6bthhmao5fyh" path="res://assets/sprites/ui/图片大门.png" id="2_q7typ"]
|
||||
[ext_resource type="FontFile" uid="uid://drt448qncx27p" path="res://assets/fonts/dingliezhuhaifont-20240831GengXinBan)-2.ttf" id="3_q7typ"]
|
||||
[ext_resource type="PackedScene" uid="uid://dj7b5vssydifa" path="res://src/UI/Panels/SavePanel.tscn" id="3_wrf65"]
|
||||
|
||||
@@ -21,7 +21,9 @@ anchor_right = 1.0
|
||||
anchor_bottom = 1.0
|
||||
grow_horizontal = 2
|
||||
grow_vertical = 2
|
||||
texture = ExtResource("1_hrti0")
|
||||
expand_mode = 1
|
||||
stretch_mode = 6
|
||||
texture = ExtResource("2_q7typ")
|
||||
|
||||
[node name="Logo" type="TextureRect" parent="." unique_id=1485724026]
|
||||
layout_mode = 1
|
||||
|
||||
Reference in New Issue
Block a user