diff --git a/public/libs/actions.js b/public/libs/actions.js index 170b781..c81ee4e 100644 --- a/public/libs/actions.js +++ b/public/libs/actions.js @@ -865,10 +865,7 @@ actions.prototype._getClickLoc = function (x, y) { if (core.domStyle.isVertical) { statusBar.x = 3; - statusBar.y = - core.dom.statusBar.offsetHeight + - 3 + - 32 * core.values.statusCanvasRowsOnMobile; + statusBar.y = core.dom.gameDraw.offsetTop; } else { statusBar.x = core.dom.statusBar.offsetWidth + 3; statusBar.y = 3; diff --git a/public/libs/control.js b/public/libs/control.js index fbc8bf4..731bd1e 100644 --- a/public/libs/control.js +++ b/public/libs/control.js @@ -3709,6 +3709,7 @@ control.prototype.resize = function () { extendToolbar = false; BAR_WIDTH = Math.round(core._PX_ * 0.3); } + core.domStyle.isVertical = matchMedia('(max-width: 600px)').matches; var statusCanvas = core.flags.statusCanvas, statusCanvasRows = core.values.statusCanvasRowsOnMobile || 3; diff --git a/public/libs/items.js b/public/libs/items.js index 760b143..3653d34 100644 --- a/public/libs/items.js +++ b/public/libs/items.js @@ -77,7 +77,7 @@ items.prototype.getItemEffectTip = function (itemId) { ////// 使用道具 ////// items.prototype.useItem = function (itemId, noRoute, callback) { /** @type {AllIdsOf<'items'>[]} */ - const ignore = ['I560', 'I559', 'skill1', 'I642', 'I565', 'I558']; + const ignore = ['I342']; if ( !this.canUseItem(itemId) || (core.isReplaying() && ignore.includes(itemId)) diff --git a/public/project/data.js b/public/project/data.js index 6792963..ed109b8 100644 --- a/public/project/data.js +++ b/public/project/data.js @@ -736,7 +736,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "hatred": 2, "animateSpeed": 300, "moveSpeed": 100, - "statusCanvasRowsOnMobile": 3, + "statusCanvasRowsOnMobile": 0, "floorChangeTime": 500 }, "flags": { diff --git a/public/project/functions.js b/public/project/functions.js index 7d5d586..24d373d 100644 --- a/public/project/functions.js +++ b/public/project/functions.js @@ -492,10 +492,24 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { // 更新跟随者状态,并绘制 core.updateFollowers(); core.drawHero(); + // 检查中毒状态的扣血和死亡 + if (core.hasFlag('poison')) { + core.status.hero.statistics.poisonDamage += + core.values.poisonDamage; + core.status.hero.hp -= core.values.poisonDamage; + if (core.status.hero.hp <= 0) { + core.status.hero.hp = 0; + core.updateStatusBar(false, true); + core.events.lose(); + return; + } else { + core.updateStatusBar(false, true); + } + } // 从v2.7开始,每一步行走不会再刷新状态栏。 // 如果有特殊要求(如每走一步都加buff之类),可手动取消注释下面这一句: - // core.updateStatusBar(true); + // core.updateStatusBar(true, true); // 检查自动事件 core.checkAutoEvents(); @@ -519,6 +533,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { // 执行目标点的阻激夹域事件 core.checkBlock(); + // 执行目标点的script和事件 if (!hasTrigger) core.trigger(nowx, nowy, callback); // 检查该点是否是滑冰 @@ -533,6 +548,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = { ); } + // ------ 检查目标点事件 END ------ // + // 如需强行终止行走可以在这里条件判定: // core.stopAutomaticRoute(); }, diff --git a/src/core/main/init/hotkey.ts b/src/core/main/init/hotkey.ts index 12397c2..6091efd 100644 --- a/src/core/main/init/hotkey.ts +++ b/src/core/main/init/hotkey.ts @@ -121,6 +121,26 @@ gameKey name: '轻按_2', defaults: KeyCode.Digit7 }) + .register({ + id: 'num1', + name: '破墙镐', + defaults: KeyCode.Digit1 + }) + .register({ + id: 'num2', + name: '炸弹', + defaults: KeyCode.Digit2 + }) + .register({ + id: 'num3', + name: '飞行器', + defaults: KeyCode.Digit3 + }) + .register({ + id: 'num4', + name: '其他道具', + defaults: KeyCode.Digit3 + }) .register({ id: 'mark', name: '标记怪物', @@ -488,6 +508,42 @@ gameKey }) .realize('comment', () => { core.actions._clickGameInfo_openComments(); + }) + .realize('num1', () => { + if (core.hasItem('pickaxe')) { + core.useItem('pickaxe'); + } + }) + .realize('num2', () => { + if (core.hasItem('bomb')) { + core.useItem('bomb'); + } + }) + .realize('num3', () => { + if (core.hasItem('centerFly')) { + core.useItem('centerFly'); + } + }) + .realize('num4', () => { + const list: ItemIdOf<'tools' | 'constants'>[] = [ + 'icePickaxe', + 'freezeBadge', + 'earthquake', + 'upFly', + 'downFly', + 'jumpShoes', + 'lifeWand', + 'poisonWine', + 'weakWine', + 'curseWine', + 'superWine' + ]; + for (const id of list) { + if (core.canUseItem(id)) { + core.useItem(id); + break; + } + } }); // ----- Storage diff --git a/src/game/enemy/battle.ts b/src/game/enemy/battle.ts index d24a9f5..0363718 100644 --- a/src/game/enemy/battle.ts +++ b/src/game/enemy/battle.ts @@ -16,9 +16,7 @@ export function getEnemy( return v.x === x && v.y === y; }); if (!enemy) { - throw new Error( - `Get null when getting enemy on '${x},${y}' in '${floorId}'` - ); + return null; } return enemy; } @@ -30,7 +28,7 @@ function init() { floorId: FloorIds = core.status.floorId ) { const enemy = getEnemy(x, y, floorId); - const { damage } = enemy.calDamage(); + const { damage } = enemy!.calDamage(); return damage < core.status.hero.hp; }; @@ -47,7 +45,7 @@ function init() { if (!core.canBattle(x, y) && !force && !core.status.event.id) { core.stopSound(); core.playSound('操作失败'); - core.drawTip('你打不过此怪物!', enemy.id); + core.drawTip('你打不过此怪物!', enemy!.id); return core.clearContinueAutomaticRoute(callback); } // 自动存档 @@ -98,7 +96,7 @@ function init() { const enemy = getEnemy(data.x, data.y); beforeBattle.push(...(floor.beforeBattle[loc] ?? [])); - beforeBattle.push(...(enemy.enemy.beforeBattle ?? [])); + beforeBattle.push(...(enemy!.enemy.beforeBattle ?? [])); if (beforeBattle.length > 0) { beforeBattle.push({ type: 'battle', x: data.x, y: data.y }); diff --git a/src/game/enemy/damage.ts b/src/game/enemy/damage.ts index e403d31..7cdb17c 100644 --- a/src/game/enemy/damage.ts +++ b/src/game/enemy/damage.ts @@ -95,6 +95,7 @@ export class EnemyCollection implements RangeCollection { core.extractBlocks(this.floorId); core.status.maps[this.floorId].blocks.forEach(v => { if (v.event.cls !== 'enemy48' && v.event.cls !== 'enemys') return; + if (v.disable) return; const enemy = core.material.enemys[v.event.id as EnemyIds]; this.list.push( new DamageEnemy(enemy, v.x, v.y, this.floorId, this) diff --git a/src/plugin/game/fx/rewrite.ts b/src/plugin/game/fx/rewrite.ts index dfa8e16..69b9e9e 100644 --- a/src/plugin/game/fx/rewrite.ts +++ b/src/plugin/game/fx/rewrite.ts @@ -1,5 +1,6 @@ import { getEnemy } from '@/game/enemy/battle'; import { formatDamage } from '../utils'; +import { DamageEnemy } from '@/game/enemy/damage'; export function init() { core.maps._initDetachedBlock = function ( @@ -36,7 +37,9 @@ export function init() { core.hasItem('book') && displayDamage ) { - const enemy = getEnemy(x, y); + const enemy = + getEnemy(x, y) ?? + new DamageEnemy(core.material.enemys[info.id as EnemyIds]); const dam = enemy.calDamage(); const { damage, color } = formatDamage(dam.damage); diff --git a/src/ui/start.vue b/src/ui/start.vue index 8a90d38..e8a663f 100644 --- a/src/ui/start.vue +++ b/src/ui/start.vue @@ -269,8 +269,7 @@ onUnmounted(() => { #title { margin-top: 7%; text-align: center; - font: 4em 'normal'; - font-weight: 200; + font-size: 4em; background-image: linear-gradient( to right, rgb(0, 0, 0), @@ -320,6 +319,7 @@ onUnmounted(() => { flex-direction: column; transition: height 0.2s ease; width: 25%; + font-size: 100%; .start-button { position: relative; @@ -463,4 +463,23 @@ onUnmounted(() => { transform: translateX(-20px); opacity: 0; } + +@media screen and (max-width: 600px) { + #start-main { + #buttons { + width: 50%; + font-size: 250%; + } + + #settings { + font-size: 300%; + width: 24%; + bottom: 2%; + } + + #title { + font-size: 8em; + } + } +} diff --git a/src/ui/statusBar.vue b/src/ui/statusBar.vue index c5dd717..c001e78 100644 --- a/src/ui/statusBar.vue +++ b/src/ui/statusBar.vue @@ -260,6 +260,7 @@ onMounted(() => { width: 100%; height: 100%; padding: 1vh 0; + font-size: 100%; } .status-item { @@ -342,4 +343,11 @@ onMounted(() => { .status-debuff-value[index='2'] { color: #c2f4e7; } + +@media screen and (max-width: 600px) { + .status-item { + font-size: 100%; + max-width: 28vw; + } +}