diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/blackmarket/blackmarket_l.png b/addons/game_asset_backup/data/game_assets/buildings/spring/blackmarket/blackmarket_l.png index 36d403a..bfbb712 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/blackmarket/blackmarket_l.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/blackmarket/blackmarket_l.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/blackmarket/blackmarket_r.png b/addons/game_asset_backup/data/game_assets/buildings/spring/blackmarket/blackmarket_r.png index e675667..7b1fde9 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/blackmarket/blackmarket_r.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/blackmarket/blackmarket_r.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/blacksmith/blacksmith_l.png b/addons/game_asset_backup/data/game_assets/buildings/spring/blacksmith/blacksmith_l.png index 4966fd8..9112c4a 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/blacksmith/blacksmith_l.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/blacksmith/blacksmith_l.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/blacksmith/blacksmith_r.png b/addons/game_asset_backup/data/game_assets/buildings/spring/blacksmith/blacksmith_r.png index 0138ff6..df82e57 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/blacksmith/blacksmith_r.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/blacksmith/blacksmith_r.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/clinic/clinic_l.png b/addons/game_asset_backup/data/game_assets/buildings/spring/clinic/clinic_l.png index cb310fc..9c12e71 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/clinic/clinic_l.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/clinic/clinic_l.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/clinic/clinic_r.png b/addons/game_asset_backup/data/game_assets/buildings/spring/clinic/clinic_r.png index 02c5dc8..9af64e3 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/clinic/clinic_r.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/clinic/clinic_r.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/cottage/cottage_l.png b/addons/game_asset_backup/data/game_assets/buildings/spring/cottage/cottage_l.png index 06dd3c2..8d1d944 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/cottage/cottage_l.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/cottage/cottage_l.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/cottage/cottage_r.png b/addons/game_asset_backup/data/game_assets/buildings/spring/cottage/cottage_r.png index f1a974f..3ae8e1e 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/cottage/cottage_r.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/cottage/cottage_r.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/grocery/grocery_l.png b/addons/game_asset_backup/data/game_assets/buildings/spring/grocery/grocery_l.png index f81f357..c192db4 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/grocery/grocery_l.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/grocery/grocery_l.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/grocery/grocery_r.png b/addons/game_asset_backup/data/game_assets/buildings/spring/grocery/grocery_r.png index a9ee0a3..cfb761e 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/grocery/grocery_r.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/grocery/grocery_r.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/pasture/pasture_l.png b/addons/game_asset_backup/data/game_assets/buildings/spring/pasture/pasture_l.png index d4d6d1f..1babe0c 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/pasture/pasture_l.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/pasture/pasture_l.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/pasture/pasture_r.png b/addons/game_asset_backup/data/game_assets/buildings/spring/pasture/pasture_r.png index 4ae53be..34cd3b5 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/pasture/pasture_r.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/pasture/pasture_r.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/restaurant/restaurant_l.png b/addons/game_asset_backup/data/game_assets/buildings/spring/restaurant/restaurant_l.png index 3683881..ccd6a3d 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/restaurant/restaurant_l.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/restaurant/restaurant_l.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/restaurant/restaurant_r.png b/addons/game_asset_backup/data/game_assets/buildings/spring/restaurant/restaurant_r.png index c228ac1..97cb6f6 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/restaurant/restaurant_r.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/restaurant/restaurant_r.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/temple/temple_l.png b/addons/game_asset_backup/data/game_assets/buildings/spring/temple/temple_l.png index 6a7c6aa..ae5470d 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/temple/temple_l.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/temple/temple_l.png differ diff --git a/addons/game_asset_backup/data/game_assets/buildings/spring/temple/temple_r.png b/addons/game_asset_backup/data/game_assets/buildings/spring/temple/temple_r.png index 52b6094..d83dacd 100644 Binary files a/addons/game_asset_backup/data/game_assets/buildings/spring/temple/temple_r.png and b/addons/game_asset_backup/data/game_assets/buildings/spring/temple/temple_r.png differ diff --git a/assets/buildings/spring/barracks/barracks_l.png b/assets/buildings/spring/barracks/barracks_l.png index 0dcb5ee..37cc879 100644 Binary files a/assets/buildings/spring/barracks/barracks_l.png and b/assets/buildings/spring/barracks/barracks_l.png differ diff --git a/assets/buildings/spring/barracks/barracks_r.png b/assets/buildings/spring/barracks/barracks_r.png index 3eb8b8d..15b7675 100644 Binary files a/assets/buildings/spring/barracks/barracks_r.png and b/assets/buildings/spring/barracks/barracks_r.png differ diff --git a/assets/buildings/spring/blackmarket/blackmarket_l.png b/assets/buildings/spring/blackmarket/blackmarket_l.png index d5b3615..bfbb712 100644 Binary files a/assets/buildings/spring/blackmarket/blackmarket_l.png and b/assets/buildings/spring/blackmarket/blackmarket_l.png differ diff --git a/assets/buildings/spring/blackmarket/blackmarket_r.png b/assets/buildings/spring/blackmarket/blackmarket_r.png index a6e161f..7b1fde9 100644 Binary files a/assets/buildings/spring/blackmarket/blackmarket_r.png and b/assets/buildings/spring/blackmarket/blackmarket_r.png differ diff --git a/assets/buildings/spring/blacksmith/blacksmith_l.png b/assets/buildings/spring/blacksmith/blacksmith_l.png index 4966fd8..9112c4a 100644 Binary files a/assets/buildings/spring/blacksmith/blacksmith_l.png and b/assets/buildings/spring/blacksmith/blacksmith_l.png differ diff --git a/assets/buildings/spring/blacksmith/blacksmith_r.png b/assets/buildings/spring/blacksmith/blacksmith_r.png index 0138ff6..df82e57 100644 Binary files a/assets/buildings/spring/blacksmith/blacksmith_r.png and b/assets/buildings/spring/blacksmith/blacksmith_r.png differ diff --git a/assets/buildings/spring/clinic/clinic_l.png b/assets/buildings/spring/clinic/clinic_l.png index cb310fc..9c12e71 100644 Binary files a/assets/buildings/spring/clinic/clinic_l.png and b/assets/buildings/spring/clinic/clinic_l.png differ diff --git a/assets/buildings/spring/clinic/clinic_r.png b/assets/buildings/spring/clinic/clinic_r.png index 02c5dc8..9af64e3 100644 Binary files a/assets/buildings/spring/clinic/clinic_r.png and b/assets/buildings/spring/clinic/clinic_r.png differ diff --git a/assets/buildings/spring/cottage/cottage_l.png b/assets/buildings/spring/cottage/cottage_l.png index 06dd3c2..8d1d944 100644 Binary files a/assets/buildings/spring/cottage/cottage_l.png and b/assets/buildings/spring/cottage/cottage_l.png differ diff --git a/assets/buildings/spring/cottage/cottage_r.png b/assets/buildings/spring/cottage/cottage_r.png index f1a974f..3ae8e1e 100644 Binary files a/assets/buildings/spring/cottage/cottage_r.png and b/assets/buildings/spring/cottage/cottage_r.png differ diff --git a/assets/buildings/spring/grocery/grocery_l.png b/assets/buildings/spring/grocery/grocery_l.png index f81f357..c192db4 100644 Binary files a/assets/buildings/spring/grocery/grocery_l.png and b/assets/buildings/spring/grocery/grocery_l.png differ diff --git a/assets/buildings/spring/grocery/grocery_r.png b/assets/buildings/spring/grocery/grocery_r.png index a9ee0a3..cfb761e 100644 Binary files a/assets/buildings/spring/grocery/grocery_r.png and b/assets/buildings/spring/grocery/grocery_r.png differ diff --git a/assets/buildings/spring/guild/guild_l.png b/assets/buildings/spring/guild/guild_l.png index ef16076..03880db 100644 Binary files a/assets/buildings/spring/guild/guild_l.png and b/assets/buildings/spring/guild/guild_l.png differ diff --git a/assets/buildings/spring/guild/guild_r.png b/assets/buildings/spring/guild/guild_r.png index 44bc117..ef7c67c 100644 Binary files a/assets/buildings/spring/guild/guild_r.png and b/assets/buildings/spring/guild/guild_r.png differ diff --git a/assets/buildings/spring/library/library_l.png b/assets/buildings/spring/library/library_l.png index 2d60ae8..1f20ecc 100644 Binary files a/assets/buildings/spring/library/library_l.png and b/assets/buildings/spring/library/library_l.png differ diff --git a/assets/buildings/spring/library/library_r.png b/assets/buildings/spring/library/library_r.png index 0df047e..03cfd16 100644 Binary files a/assets/buildings/spring/library/library_r.png and b/assets/buildings/spring/library/library_r.png differ diff --git a/assets/buildings/spring/pasture/pasture_l.png b/assets/buildings/spring/pasture/pasture_l.png index d4d6d1f..1babe0c 100644 Binary files a/assets/buildings/spring/pasture/pasture_l.png and b/assets/buildings/spring/pasture/pasture_l.png differ diff --git a/assets/buildings/spring/pasture/pasture_r.png b/assets/buildings/spring/pasture/pasture_r.png index 4ae53be..34cd3b5 100644 Binary files a/assets/buildings/spring/pasture/pasture_r.png and b/assets/buildings/spring/pasture/pasture_r.png differ diff --git a/assets/buildings/spring/restaurant/restaurant_l.png b/assets/buildings/spring/restaurant/restaurant_l.png index 3683881..ccd6a3d 100644 Binary files a/assets/buildings/spring/restaurant/restaurant_l.png and b/assets/buildings/spring/restaurant/restaurant_l.png differ diff --git a/assets/buildings/spring/restaurant/restaurant_r.png b/assets/buildings/spring/restaurant/restaurant_r.png index c228ac1..97cb6f6 100644 Binary files a/assets/buildings/spring/restaurant/restaurant_r.png and b/assets/buildings/spring/restaurant/restaurant_r.png differ diff --git a/assets/buildings/spring/school/school_l.png b/assets/buildings/spring/school/school_l.png index 4867e98..e5482b0 100644 Binary files a/assets/buildings/spring/school/school_l.png and b/assets/buildings/spring/school/school_l.png differ diff --git a/assets/buildings/spring/school/school_r.png b/assets/buildings/spring/school/school_r.png index 1425b69..836d033 100644 Binary files a/assets/buildings/spring/school/school_r.png and b/assets/buildings/spring/school/school_r.png differ diff --git a/assets/buildings/spring/temple/temple_l.png b/assets/buildings/spring/temple/temple_l.png index 6a7c6aa..ae5470d 100644 Binary files a/assets/buildings/spring/temple/temple_l.png and b/assets/buildings/spring/temple/temple_l.png differ diff --git a/assets/buildings/spring/temple/temple_r.png b/assets/buildings/spring/temple/temple_r.png index 52b6094..d83dacd 100644 Binary files a/assets/buildings/spring/temple/temple_r.png and b/assets/buildings/spring/temple/temple_r.png differ diff --git a/assets/buildings/spring/village/village_l.png b/assets/buildings/spring/village/village_l.png index 38ff082..4b48f11 100644 Binary files a/assets/buildings/spring/village/village_l.png and b/assets/buildings/spring/village/village_l.png differ diff --git a/assets/buildings/spring/village/village_r.png b/assets/buildings/spring/village/village_r.png index 65d9d86..e3f06c5 100644 Binary files a/assets/buildings/spring/village/village_r.png and b/assets/buildings/spring/village/village_r.png differ diff --git a/assets/characters.js b/assets/characters.js index 35e16fd..86dfe7f 100644 --- a/assets/characters.js +++ b/assets/characters.js @@ -7,14 +7,19 @@ const RACE_CONFIG = { demon: { name: '妖族', speed: 90, attack: 5, hpMax: 50, regen: false, trait: '均衡型。无特殊被动,与人类齐平的基础战力。', walk: 'assets/characters/demon/demon_walk_1x6.png', idle_attack: 'assets/characters/demon/demon_idle_attack_1x6.png', work_comm: 'assets/characters/demon/demon_work_comm_1x6.png' }, dwarf: { name: '矮人', speed: 72, attack: 5, hpMax: 50, regen: false, enrage: true, shieldRatio: 0.10, trait: '铁壁·狂暴:移速较慢(0.8倍);每损失10%生命攻击+5%;生命≤30%时获得10%最大生命护盾。', walk: 'assets/characters/dwarf/dwarf_walk_1x6.png', idle_attack: 'assets/characters/dwarf/dwarf_idle_attack_1x6.png', work_comm: 'assets/characters/dwarf/dwarf_work_comm_1x6.png' }, elf: { name: '精灵', speed: 135, attack: 5, hpMax: 50, regen: false, trait: '疾风:移速飞快(1.5倍),机动性最强的种族。', walk: 'assets/characters/elf/elf_walk_1x6.png', idle_attack: 'assets/characters/elf/elf_idle_attack_1x6.png', work_comm: 'assets/characters/elf/elf_work_comm_1x6.png' }, - dragon: { name: '龙族', speed: 90, attack: 8, hpMax: 50, regen: false, trait: '龙威:攻击力高(8),爆发型输出种族。', walk: 'assets/characters/dragon/dragon_walk_1x6.png', idle_attack: 'assets/characters/dragon/dragon_idle_attack_1x6.png', work_comm: 'assets/characters/dragon/dragon_work_comm_1x6.png' }, + dragon: { name: '龙族', speed: 90, attack: 8, attackRange: 90, hpMax: 50, regen: false, trait: '龙威:攻击力高(8),攻击范围大(1.5倍),爆发型输出种族。', walk: 'assets/characters/dragon/dragon_walk_1x6.png', idle_attack: 'assets/characters/dragon/dragon_idle_attack_1x6.png', work_comm: 'assets/characters/dragon/dragon_work_comm_1x6.png' }, undead: { name: '不死族', speed: 90, attack: 4, hpMax: 100, regen: true, trait: '不死:生命极高(100);脱战10秒后每秒恢复5%最大生命。', walk: 'assets/characters/undead/undead_walk_1x6.png', idle_attack: 'assets/characters/undead/undead_idle_attack_1x6.png', work_comm: 'assets/characters/undead/undead_work_comm_1x6.png' }, + orc: { name: '兽人', speed: 90, attack: 5, hpMax: 50, regen: false, trait: '均衡型。绿皮獠牙的战士,无特殊被动,基础战力与人类一致。', walk: 'assets/characters/orc/orc_walk_1x6.png', idle_attack: 'assets/characters/orc/orc_idle_attack_1x6.png', work_comm: 'assets/characters/orc/orc_work_comm_1x6.png' }, + angel: { name: '天使', speed: 90, attack: 5, hpMax: 50, regen: false, trait: '均衡型。头顶光环的天界战士,无特殊被动,基础战力与人类一致。', walk: 'assets/characters/angel/angel_walk_1x6.png', idle_attack: 'assets/characters/angel/angel_idle_attack_1x6.png', work_comm: 'assets/characters/angel/angel_work_comm_1x6.png' }, + werewolf:{ name: '狼人', speed: 90, attack: 5, hpMax: 50, regen: false, trait: '均衡型。竖耳狼首的猎手,无特殊被动,基础战力与人类一致。', walk: 'assets/characters/werewolf/werewolf_walk_1x6.png', idle_attack: 'assets/characters/werewolf/werewolf_idle_attack_1x6.png', work_comm: 'assets/characters/werewolf/werewolf_work_comm_1x6.png' }, + golem: { name: '石傀儡', speed: 90, attack: 5, hpMax: 50, regen: false, trait: '均衡型。眼中发光的岩石巨像,无特殊被动,基础战力与人类一致。', walk: 'assets/characters/golem/golem_walk_1x6.png', idle_attack: 'assets/characters/golem/golem_idle_attack_1x6.png', work_comm: 'assets/characters/golem/golem_work_comm_1x6.png' }, }; function raceStats(race) { const rc = RACE_CONFIG[race] || RACE_CONFIG.human; return { - speed: rc.speed, attack: rc.attack, hpMax: rc.hpMax, regen: !!rc.regen, + speed: rc.speed, attack: rc.attack, attackRange: rc.attackRange || CHAR_ATTACK_RANGE, + hpMax: rc.hpMax, regen: !!rc.regen, enrage: !!rc.enrage, shieldRatio: rc.shieldRatio || 0, }; } @@ -219,6 +224,7 @@ async function loadMicroChars() { hp: (typeof c.hp === 'number' && c.hp > 0) ? c.hp : stats.hpMax, hpMax: stats.hpMax, attack: stats.attack, + attackRange: stats.attackRange, regen: stats.regen, enrage: stats.enrage, shieldMax: stats.shieldRatio ? Math.max(1, Math.round(stats.hpMax * stats.shieldRatio)) : 0, @@ -231,6 +237,7 @@ async function loadMicroChars() { wanderT: Math.random() * 3, wanderInterval: 2 + Math.random() * 4, _userMove: false, + freeMove: true, // 自由移动开关(默认开;面板按钮可切换) ...(local ? { frame: local.frame, frameT: local.frameT } : {}), }; }); @@ -254,6 +261,7 @@ function createChar(race, x, y) { hp: stats.hpMax, // 生命值(满血) hpMax: stats.hpMax, // 最大生命(种族差异) attack: stats.attack, // 攻击力(种族差异) + attackRange: stats.attackRange, // 攻击范围(龙族 1.5 倍 = 90px) regen: stats.regen, // 是否有脱战恢复 enrage: stats.enrage, // 是否狂暴(矮人:掉血加攻) shieldMax: stats.shieldRatio ? Math.max(1, Math.round(stats.hpMax * stats.shieldRatio)) : 0, // 护盾上限(矮人 10% 最大生命) @@ -267,6 +275,7 @@ function createChar(race, x, y) { wanderT: Math.random() * 3, // 首次漫游前随机等待 wanderInterval: 2 + Math.random() * 4, // 2~6 秒 _userMove: false, // 是否用户指令移动 + freeMove: charPlaceFreeMove, // 自由移动开关(默认按右侧面板"自由移动"按钮) }; microChars.push(ch); selectChar(id); @@ -321,12 +330,13 @@ function triggerCharAction(charId, action) { function applyAttackDamage(attacker) { const now = Date.now(); const damage = currentAttackOf(attacker); // 攻击力(含矮人狂暴加成) + const range = attacker.attackRange || CHAR_ATTACK_RANGE; // 攻击范围(龙族 1.5 倍 = 90px) const fmt = (v) => (v % 1 === 0 ? String(v) : String(parseFloat(v.toFixed(2)))); // 显示去尾零 const vis = visibleMicroChars(); for (const other of vis) { if (other.id === attacker.id) continue; const d = Math.hypot(other.x - attacker.x, other.y - attacker.y); - if (d <= CHAR_ATTACK_RANGE) { + if (d <= range) { let dmg = damage; // 护盾优先吸收(矮人铁壁) if ((other.shield || 0) > 0 && dmg > 0) { @@ -442,7 +452,8 @@ function updateChars(dt) { ch.targetY = ch.y; } else { // 原有漫游 / 行走逻辑 - if (!ch.selected && ch.state === 'idle') { + // 自由移动开关:ch.freeMove !== false 才允许自主漫游(默认开,可被面板按钮关闭) + if (ch.freeMove !== false && !ch.selected && ch.state === 'idle') { ch.wanderT = (ch.wanderT || 0) + dt; const interval = ch.wanderInterval || (2 + Math.random() * 4); if (ch.wanderT >= interval) { @@ -854,6 +865,9 @@ function updateCharPanel() {