From 637bf96d4e431efc566daca170611b7ca1b9c004 Mon Sep 17 00:00:00 2001 From: unanmed <1319491857@qq.com> Date: Mon, 5 Feb 2024 12:41:32 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=88=98=E6=96=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/_server/editor_file.js | 2 +- public/libs/control.js | 23 + public/project/floors/sample0.js | 10 +- public/project/icons.js | 14 +- public/project/items.js | 64 +- public/project/maps.js | 14 +- public/project/materials/items.png | Bin 18696 -> 23506 bytes public/project/plugins.js | 355 +++++++++++ src/core/main/init/hotkey.ts | 3 - src/game/enemy/damage.ts | 286 +++------ src/game/system.ts | 15 +- src/plugin/use.ts | 2 +- src/source/cls.d.ts | 485 +-------------- src/source/items.d.ts | 161 +---- src/source/maps.d.ts | 966 ++--------------------------- 15 files changed, 680 insertions(+), 1720 deletions(-) diff --git a/public/_server/editor_file.js b/public/_server/editor_file.js index 41caceb..e1ded93 100644 --- a/public/_server/editor_file.js +++ b/public/_server/editor_file.js @@ -1101,7 +1101,7 @@ editor_file = function (editor, callback) { for (var id_ in plmap) { plraw = plraw.replace('"' + id_ + '"', plmap[id_]) } - var datastr = 'var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = \n'; + var datastr = '///\nvar plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = \n'; datastr += plraw; fs.writeFile('project/plugins.js', encode(datastr), 'base64', function (err, data) { callback(err); diff --git a/public/libs/control.js b/public/libs/control.js index abffea1..5f517ea 100644 --- a/public/libs/control.js +++ b/public/libs/control.js @@ -3535,6 +3535,29 @@ control.prototype.hideStatusBar = function (showToolbox) { // see src/plugin/game/ui.js }; +////// 更新状态栏的勇士图标 ////// +control.prototype.updateHeroIcon = function (name) { + name = name || 'hero.png'; + if (core.statusBar.icons.name == name) return; + core.statusBar.icons.name = name; + + var image = core.material.images.hero; + // 全身图 + var w = core.material.icons.hero.width || 32; + var h = core.material.icons.hero.height || 48; + var ratio = Math.min(w / h, 1), + width = 32 * ratio, + left = 16 - width / 2; + + var canvas = document.createElement('canvas'); + var ctx = canvas.getContext('2d'); + canvas.width = 32; + canvas.height = 32; + core.drawImage(ctx, image, 0, 0, w, h, left, 0, width, 32); + + core.statusBar.image.name.src = canvas.toDataURL('image/png'); +}; + ////// 改变工具栏为按钮1-8 ////// control.prototype.setToolbarButton = function (useButton) { if (!core.domStyle.showStatusBar) { diff --git a/public/project/floors/sample0.js b/public/project/floors/sample0.js index 7ffc756..3937c3f 100644 --- a/public/project/floors/sample0.js +++ b/public/project/floors/sample0.js @@ -19,7 +19,7 @@ main.floors.sample0= [ 6, 6,125, 6, 6, 6, 0, 3, 0, 0, 0, 0, 0], [208,227,212,216,278, 5, 0, 1, 1, 1,319, 1, 1], [201,205,217,215,224, 5, 0, 1, 27, 28, 29, 30, 31], - [ 5, 5,125, 5, 5, 5, 0, 1, 21, 22, 23, 24, 26], + [ 5, 5,125, 5, 5, 5,342, 1, 21, 22, 23, 24, 26], [ 0, 0,263, 0, 0, 0, 45, 1, 1, 1,121, 1, 1], [ 4, 4,133, 4, 4, 4, 0, 0, 0, 0, 0, 85,124], [ 87, 11, 12, 13, 14, 4, 4, 2, 2,122, 2, 2, 2], @@ -255,5 +255,11 @@ main.floors.sample0= "height": 13, "autoEvent": {}, "beforeBattle": {}, - "cannotMoveIn": {} + "cannotMoveIn": {}, + "bg2map": [ + +], + "fg2map": [ + +] } \ No newline at end of file diff --git a/public/project/icons.js b/public/project/icons.js index c0d6eae..955c2b7 100644 --- a/public/project/icons.js +++ b/public/project/icons.js @@ -260,7 +260,19 @@ var icons_4665ee12_3a1f_44a4_bea3_0fccba634dc1 = "jumpShoes": 49, "skill1": 30, "wand": 10, - "pack": 46 + "pack": 46, + "I331": 5, + "I332": 7, + "I333": 26, + "I334": 31, + "I335": 32, + "I336": 34, + "I337": 35, + "I338": 36, + "I339": 37, + "I340": 38, + "I341": 39, + "I342": 62 }, "autotile": { "autotile": 0, diff --git a/public/project/items.js b/public/project/items.js index d7ba487..3de10be 100644 --- a/public/project/items.js +++ b/public/project/items.js @@ -144,7 +144,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "itemEffectTip": ",攻击+0" }, "sword1": { - "cls": "items", + "cls": "equips", "name": "铁剑", "text": "一把很普通的铁剑", "equip": { @@ -528,5 +528,67 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "name": "钱袋", "itemEffect": "core.status.hero.money += 500", "itemEffectTip": ",金币+500" + }, + "I331": { + "cls": "items", + "name": "新物品", + "canUseItemEffect": "true" + }, + "I332": { + "cls": "items", + "name": "新物品", + "canUseItemEffect": "true" + }, + "I333": { + "cls": "items", + "name": "新物品", + "canUseItemEffect": "true" + }, + "I334": { + "cls": "items", + "name": "新物品", + "canUseItemEffect": "true" + }, + "I335": { + "cls": "items", + "name": "新物品", + "canUseItemEffect": "true" + }, + "I336": { + "cls": "items", + "name": "新物品", + "canUseItemEffect": "true" + }, + "I337": { + "cls": "items", + "name": "新物品", + "canUseItemEffect": "true" + }, + "I338": { + "cls": "items", + "name": "新物品", + "canUseItemEffect": "true" + }, + "I339": { + "cls": "items", + "name": "新物品", + "canUseItemEffect": "true" + }, + "I340": { + "cls": "items", + "name": "新物品", + "canUseItemEffect": "true" + }, + "I341": { + "cls": "items", + "name": "新物品", + "canUseItemEffect": "true" + }, + "I342": { + "cls": "constants", + "name": "系统设置", + "canUseItemEffect": "true", + "text": "系统设置,用于打开新样板的新设置界面", + "useItemEffect": "Mota.require('var', 'mainUi').open('settings');" } } \ No newline at end of file diff --git a/public/project/maps.js b/public/project/maps.js index fbf881c..112bcdd 100644 --- a/public/project/maps.js +++ b/public/project/maps.js @@ -223,5 +223,17 @@ var maps_90f36752_8815_4be8_b32b_d7fad1d0542e = "327": {"cls":"enemy48","id":"bearDown"}, "328": {"cls":"enemy48","id":"bearLeft"}, "329": {"cls":"enemy48","id":"bearRight"}, - "330": {"cls":"enemy48","id":"bearUp"} + "330": {"cls":"enemy48","id":"bearUp"}, + "331": {"cls":"items","id":"I331"}, + "332": {"cls":"items","id":"I332"}, + "333": {"cls":"items","id":"I333"}, + "334": {"cls":"items","id":"I334"}, + "335": {"cls":"items","id":"I335"}, + "336": {"cls":"items","id":"I336"}, + "337": {"cls":"items","id":"I337"}, + "338": {"cls":"items","id":"I338"}, + "339": {"cls":"items","id":"I339"}, + "340": {"cls":"items","id":"I340"}, + "341": {"cls":"items","id":"I341"}, + "342": {"cls":"items","id":"I342"} } \ No newline at end of file diff --git a/public/project/materials/items.png b/public/project/materials/items.png index 04dc29b26ed379fd8d7537a1d290174c30fe2732..8272317dc98be059e294a8db0f36f031bd1435b1 100644 GIT binary patch literal 23506 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 N-hE@Oat*uC{{WinVXgoG literal 18696 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 var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { fiveLayer: function () { // 注册插件 @@ -297,6 +298,211 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { }); } }, + special: function () { + // 这个插件负责定义怪物属性 + const specials = Mota.require('var', 'enemySpecials'); + // 怪物特殊属性包含四个信息 + // code: 索引,必须与该属性在数组内的索引一致 + // name: 特殊属性名称,可以是一个函数,接受 enemy 作为参数,返回字符串 + // desc: 特殊属性说明,也可以是一个函数,接受 enemy 作为参数,返回字符串 + // color: 特殊属性颜色,会在怪物手册中显示出来 + specials.push( + { + code: 0, + name: '空', + desc: '空', + color: '#fff' + }, + { + code: 1, + name: '致命一击', + desc: enemy => + `怪物每5回合触发一次强力攻击,造成${enemy.crit}%的伤害`, + color: '#fc3' + }, + { + code: 2, + name: '恶毒', + desc: '怪物攻击无视勇士的防御', + color: '#bbb0ff' + }, + { + code: 3, + name: '坚固', + desc: '怪物防御不小于勇士攻击-1', + color: '#c0b088' + }, + { + code: 4, + name: '2连击', + desc: '怪物每回合攻击2次', + color: '#fe7' + }, + { + code: 5, + name: '3连击', + desc: '怪物每回合攻击3次', + color: '#fe7' + }, + { + code: 6, + name: enemy => `${enemy.n}连击`, + desc: enemy => `怪物每回合攻击${enemy.n}次`, + color: '#fe7' + }, + { + code: 7, + name: '饥渴', + desc: enemy => + `战斗前,怪物降低勇士${enemy.hungry}%的攻击,并加在自己身上`, + color: '#b67' + }, + { + code: 8, + name: '抱团', + desc: enemy => + `怪物周围5×5范围内每有一个拥有该属性的怪物,自身攻防就增加${enemy.together}%(线性叠加)`, + color: '#fa4' + }, + { + code: 9, + name: '绝对防御', + desc: '怪物的奇特护甲可以让勇士的额外攻击失效,攻击变为基础攻击+额外攻击', + color: '#80eed6' + }, + { + code: 10, + name: '勇气之刃', + desc: enemy => `怪物第一回合造成${enemy.courage}%的伤害`, + color: '#b0c0dd' + }, + { + code: 11, + name: '勇气冲锋', + desc: enemy => + `怪物首先攻击,造成${enemy.charge}%的伤害,并眩晕勇士5回合`, + color: '#ff00d2' + }, + { + code: 12, + name: '追猎', + desc: '当勇士移动到该怪物的水平或竖直方向上时,怪物向勇士移动一格', + color: '#9e8' + }, + { + code: 13, + name: '魔攻', + desc: '怪物攻击无视勇士的防御', + color: '#bbb0ff' + }, + { + code: 14, + name: '智慧之源', + desc: '困难难度下(简单难度没有效果),战斗后,怪物会吸取勇士30%的智慧(勇士智慧向下取整至整十)加在本层的拥有该属性的怪物攻击上', + color: '#bbeef0' + }, + { + code: 15, + name: '突刺', + desc: enemy => + `勇士走到怪物怪物周围四格时,怪物对勇士造成${core.formatBigNumber( + Math.max((enemy.value || 0) - getHeroStatusOn('def')) + )}点伤害`, + color: '#c677dd' + }, + { + code: 16, + name: '空', + desc: '空', + color: '#fff' + }, + { + code: 17, + name: '先攻', + desc: '战斗时,怪物首先攻击', + color: '#b0b666' + }, + { + code: 18, + name: '阻击', + desc: enemy => + `经过怪物十字范围内时怪物后退一格,同时对勇士造成${enemy.value}点伤害`, + color: '#8888e6' + }, + { + code: 19, + name: '电摇嘲讽', + desc: + '当勇士移动到怪物同行或同列时,勇士会直接冲向怪物,撞碎路上的所有地形和门,拾取路上的道具,与路上的怪物战斗' + + ',最后与该怪物战斗', + color: '#ff6666' + }, + { + code: 20, + name: '霜冻', + desc: enemy => + `怪物寒冷的攻击使勇士动作变慢,勇士每回合对怪物造成的伤害减少${enemy.ice}%。装备杰克的衣服后可以免疫。`, + color: 'cyan' + }, + { + code: 21, + name: '冰封光环', + desc: enemy => + `寒气逼人,使勇士对该怪物周围7*7范围内的怪物伤害减少${enemy.iceHalo}%(线性叠加)`, + color: 'cyan' + }, + { + code: 22, + name: '永夜', + desc: enemy => + `战斗后,减少勇士${enemy.night}点攻防,增加本层所有怪物${enemy.night}点攻防,仅在本层有效`, + color: '#d8a' + }, + { + code: 23, + name: '极昼', + desc: enemy => + `战斗后,减少本层所有怪物${enemy.day}点攻防,增加勇士${enemy.day}点攻防,仅在本层有效`, + color: '#ffd' + }, + { + code: 24, + name: '射击', + desc: function () { + return '经过怪物同行或同列的可视范围内时受到一次普通攻击的伤害'; + }, + color: '#dda0dd' + }, + { + code: 25, + name: '融化', + desc: enemy => + `战斗后该怪物会融化,在怪物位置产生一个3*3的范围光环,光环内怪物的攻防增加${enemy.melt}%`, + color: '#e6e099' + }, + { + code: 26, + name: '冰封之核', + desc: enemy => + `怪物拥有逼人的寒气,使周围5*5范围内的怪物防御增加${enemy.iceCore}%`, + color: '#70ffd1' + }, + { + code: 27, + name: '火焰之核', + desc: enemy => + `怪物拥有灼热的火焰,使周围5*5范围内的怪物攻击增加${enemy.fireCore}%`, + color: '#ff6f0a' + }, + { + code: 28, + name: '苍蓝刻', + desc: enemy => + `怪物使用苍蓝之灵的力量,使自身受到的伤害减少${enemy.paleShield}%`, + color: '#ff6f0a' + } + ); + }, battle: function () { // 这个插件负责战斗相关内容 @@ -364,6 +570,29 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { return damage; }); + // --------------- 秒杀伤害计算 + // 用于计算一些特殊属性怪物在一回合内秒杀所需的攻击,依此计算临界的上界 + // 函数没有参数,返回一个数字,表示临界上界,Infinity表示没有上界,不计算临界 + // 不能返回数字型外的量 + Mota.rewrite( + Mota.require('class', 'DamageEnemy').prototype, + 'getSeckillAtk', + 'full', + function () { + // 获取怪物的属性 + const info = this.getRealInfo(); + // 对于一般的怪物,应该是怪物防御加上怪物血量 + const add = info.def + info.hp; + + // 坚固,不可能通过攻击秒杀 + if (info.special.includes(3)) { + return Infinity; + } + + return add; + } + ); + // --------------- 地图伤害 // 全量复写地图伤害的计算函数,注意此处不能使用箭头函数,因为这是在原型上的函数,其this指向实例,也即怪物(DamageEnemy实例) // 函数接收两个参数,damage和hero,前者表示要将结果存入的对象,后者是勇士真实属性 @@ -442,5 +671,131 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = { ); // --------------- 光环处理 + // 光环分为两类,一类是会增强光环或者给怪物加光环的光环,另一类就是普通光环,这两种光环处理方式不同 + // 对于前者,光环将会优先递归计算,同时每个光环将会确保只计算一次,直到没有光环需要计算 + // 对于后者,不进行递归计算,只进行单次遍历计算。 + // 光环使用 provideHalo 和 injectHalo 作为api,表示提供光环和接受光环 + + // 光环属性列表,是一个集合Set,你可以在这里配置会被视为光环的属性 + const haloSpecials = Mota.require('module', 'Damage').haloSpecials; + haloSpecials.add(8).add(11); + + // ----- 计算第二类光环,即普通光环,这类光环更常见,因此放到前面了 + Mota.rewrite( + Mota.require('class', 'DamageEnemy').prototype, + 'provideHalo', + 'full', + function () { + // 这部分用于判断当前是否应该计算光环,即计算光环的函数是否在不应该被调用的时刻调用了 + // 一般不需要改动 + if (this.progress !== 2) return; + this.progress = 3; + if (!this.floorId) return; + if (!has(this.x) || !has(this.y)) return; + const col = this.col ?? core.status.maps[this.floorId].enemy; + if (!col) return; + // 获取所有还没有计算的光环,注意这里不能直接获取haloSpecial + const special = this.getHaloSpecials(); + + const square7 = []; + const square5 = []; + + // e 是被加成怪的属性,enemy 是施加光环的怪 + + for (const halo of special) { + switch (halo) { + case 8: + square5.push((e, enemy) => { + if ( + e.special.includes(8) && + (e.x !== this.x || this.y !== e.y) + ) { + e.atkBuff += enemy.together ?? 0; + e.defBuff += enemy.together ?? 0; + } + }); + this.providedHalo.add(8); + break; + case 21: + square7.push(e => { + // e.damageDecline += this.enemy.iceHalo ?? 0; + }); + col.haloList.push({ + type: 'square', + data: { x: this.x, y: this.y, d: 7 }, + special: 21, + from: this + }); + this.providedHalo.add(21); + break; + case 26: + square5.push(e => { + e.defBuff += this.enemy.iceCore ?? 0; + }); + col.haloList.push({ + type: 'square', + data: { x: this.x, y: this.y, d: 5 }, + special: 26, + from: this + }); + this.providedHalo.add(26); + break; + case 27: + square5.push(e => { + e.atkBuff += this.enemy.fireCore ?? 0; + }); + col.haloList.push({ + type: 'square', + data: { x: this.x, y: this.y, d: 5 }, + special: 27, + from: this + }); + this.providedHalo.add(27); + break; + } + } + + col.applyHalo( + 'square', + { x: this.x, y: this.y, d: 7 }, + square7 + ); + col.applyHalo( + 'square', + { x: this.x, y: this.y, d: 5 }, + square5 + ); + } + ); + + // ----- 计算第一类光环 + Mota.rewrite( + Mota.require('class', 'DamageEnemy').prototype, + 'preProvideHalo', + 'full', + function () { + if (this.progress !== 0) return; + this.progress = 1; + const special = this.getHaloSpecials(); + + for (const halo of special) { + switch (halo) { + default: + break; + } + } + } + ); + + // ----- 接受光环处理 + Mota.rewrite( + Mota.require('class', 'DamageEnemy').prototype, + 'injectHalo', + 'full', + function (halo, enemy) { + // 这里的 halo 是光环函数,enemy 是施加光环的怪物,this.info 是当前怪物信息 + halo(this.info, enemy); + } + ); } }; diff --git a/src/core/main/init/hotkey.ts b/src/core/main/init/hotkey.ts index 0d462ed..12397c2 100644 --- a/src/core/main/init/hotkey.ts +++ b/src/core/main/init/hotkey.ts @@ -445,9 +445,6 @@ gameKey .realize('skillTree', () => { core.useItem('skill1', true); }) - .realize('desc', () => { - core.useItem('I560', true); - }) .realize('undo', () => { core.doSL('autoSave', 'load'); }) diff --git a/src/game/enemy/damage.ts b/src/game/enemy/damage.ts index ad3ae8c..927c9ab 100644 --- a/src/game/enemy/damage.ts +++ b/src/game/enemy/damage.ts @@ -21,7 +21,6 @@ interface EnemyInfo { def: number; hp: number; special: number[]; - damageDecline: number; atkBuff: number; defBuff: number; hpBuff: number; @@ -64,9 +63,6 @@ interface CriticalDamageDelta extends Omit { type HaloFn = (info: EnemyInfo, enemy: Enemy) => void; -/** 光环属性 */ -export const haloSpecials: number[] = [8, 21, 25, 26, 27]; - export class EnemyCollection implements RangeCollection { floorId: FloorIds; list: DamageEnemy[] = []; @@ -285,7 +281,7 @@ export class DamageEnemy { info!: EnemyInfo; /** 向其他怪提供过的光环 */ - providedHalo: number[] = []; + providedHalo: Set = new Set(); /** * 伤害计算进度,0 -> 预平衡光环 -> 1 -> 计算没有光环的属性 -> 2 -> provide inject 光环 @@ -316,7 +312,6 @@ export class DamageEnemy { atk: enemy.atk, def: enemy.def, special: enemy.special.slice(), - damageDecline: 0, atkBuff: 0, defBuff: 0, hpBuff: 0, @@ -326,7 +321,7 @@ export class DamageEnemy { floorId: this.floorId }; this.progress = 0; - this.providedHalo = []; + this.providedHalo = new Set(); } /** @@ -387,7 +382,7 @@ export class DamageEnemy { if (!has(this.x) || !has(this.y)) return []; const special = this.info.special ?? this.enemy.special; const filter = special.filter(v => { - return haloSpecials.includes(v) && !this.providedHalo.includes(v); + return Damage.haloSpecials.has(v) && !this.providedHalo.has(v); }); if (filter.length === 0) return []; const collection = this.col ?? core.status.maps[this.floorId].enemy; @@ -405,6 +400,14 @@ export class DamageEnemy { preProvideHalo() { if (this.progress !== 0) return; this.progress = 1; + const special = this.getHaloSpecials(); + + for (const halo of special) { + switch (halo) { + default: + break; + } + } } /** @@ -424,60 +427,57 @@ export class DamageEnemy { // e 是被加成怪的属性,enemy 是施加光环的怪 - // 抱团 - if (special.includes(8)) { - square5.push((e, enemy) => { - if ( - e.special.includes(8) && - (e.x !== this.x || this.y !== e.y) - ) { - e.atkBuff += enemy.together ?? 0; - e.defBuff += enemy.together ?? 0; - } - }); - this.providedHalo.push(8); - } - - // 冰封光环 - if (special.includes(21)) { - square7.push(e => { - e.damageDecline += this.enemy.iceHalo ?? 0; - }); - this.providedHalo.push(21); - col.haloList.push({ - type: 'square', - data: { x: this.x, y: this.y, d: 7 }, - special: 21, - from: this - }); - } - - // 冰封之核 - if (special.includes(26)) { - square5.push(e => { - e.defBuff += this.enemy.iceCore ?? 0; - }); - this.providedHalo.push(26); - col.haloList.push({ - type: 'square', - data: { x: this.x, y: this.y, d: 5 }, - special: 26, - from: this - }); - } - - // 火焰之核 - if (special.includes(27)) { - square5.push(e => { - e.atkBuff += this.enemy.fireCore ?? 0; - }); - this.providedHalo.push(27); - col.haloList.push({ - type: 'square', - data: { x: this.x, y: this.y, d: 5 }, - special: 27, - from: this - }); + for (const halo of special) { + switch (halo) { + case 8: + square5.push((e, enemy) => { + if ( + e.special.includes(8) && + (e.x !== this.x || this.y !== e.y) + ) { + e.atkBuff += enemy.together ?? 0; + e.defBuff += enemy.together ?? 0; + } + }); + this.providedHalo.add(8); + break; + case 21: + square7.push(e => { + // e.damageDecline += this.enemy.iceHalo ?? 0; + }); + col.haloList.push({ + type: 'square', + data: { x: this.x, y: this.y, d: 7 }, + special: 21, + from: this + }); + this.providedHalo.add(21); + break; + case 26: + square5.push(e => { + e.defBuff += this.enemy.iceCore ?? 0; + }); + col.haloList.push({ + type: 'square', + data: { x: this.x, y: this.y, d: 5 }, + special: 26, + from: this + }); + this.providedHalo.add(26); + break; + case 27: + square5.push(e => { + e.atkBuff += this.enemy.fireCore ?? 0; + }); + col.haloList.push({ + type: 'square', + data: { x: this.x, y: this.y, d: 5 }, + special: 27, + from: this + }); + this.providedHalo.add(27); + break; + } } col.applyHalo('square', { x: this.x, y: this.y, d: 7 }, square7); @@ -538,32 +538,31 @@ export class DamageEnemy { // 射击 if (this.info.special.includes(24)) { - const dirs: Dir[] = ['left', 'down', 'up', 'right']; - const dam = Math.max((enemy.atk ?? 0) - hero.def!, 0); - const objs = core.getMapBlocksObj(this.floorId); - - for (const dir of dirs) { - let x = this.x; - let y = this.y; - const { x: dx, y: dy } = core.utils.scan[dir]; - while (x >= 0 && y >= 0 && x < w && y < h) { - x += dx; - y += dy; - const loc = `${x},${y}` as LocString; - const block = objs[loc]; - if ( - block && - block.event.noPass && - block.event.cls !== 'enemys' && - block.event.cls !== 'enemy48' && - block.id !== 141 && - block.id !== 151 - ) { - break; - } - this.setMapDamage(damage, loc, dam, '射击'); - } - } + // const dirs: Dir[] = ['left', 'down', 'up', 'right']; + // const dam = Math.max((enemy.atk ?? 0) - hero.def!, 0); + // const objs = core.getMapBlocksObj(this.floorId); + // for (const dir of dirs) { + // let x = this.x; + // let y = this.y; + // const { x: dx, y: dy } = core.utils.scan[dir]; + // while (x >= 0 && y >= 0 && x < w && y < h) { + // x += dx; + // y += dy; + // const loc = `${x},${y}` as LocString; + // const block = objs[loc]; + // if ( + // block && + // block.event.noPass && + // block.event.cls !== 'enemys' && + // block.event.cls !== 'enemy48' && + // block.id !== 141 && + // block.id !== 151 + // ) { + // break; + // } + // this.setMapDamage(damage, loc, dam, '射击'); + // } + // } } return damage; @@ -583,27 +582,8 @@ export class DamageEnemy { private calEnemyDamageOf(hero: Partial, enemy: EnemyInfo) { const status = getHeroStatusOf(hero, Damage.realStatus, this.floorId); let damage = Damage.calDamageWith(enemy, status) ?? Infinity; - let skill = -1; - // 自动切换技能 - if (flags.autoSkill) { - for (let i = 0; i < skills.length; i++) { - const [unlock, condition] = skills[i]; - if (!flags[unlock]) continue; - flags[condition] = true; - const status = getHeroStatusOf(hero, Damage.realStatus); - - const d = Damage.calDamageWith(enemy, status) ?? Infinity; - - if (d < damage) { - damage = d; - skill = i; - } - flags[condition] = false; - } - } - - return { damage, skill }; + return { damage }; } /** @@ -687,7 +667,7 @@ export class DamageEnemy { } if (i++ >= 10000) { console.warn( - `Unexpected endless loop in calculating critical.` + + `Unexpected long loop in calculating critical.` + `Enemy Id: ${this.id}. Loc: ${this.x},${this.y}. Floor: ${this.floorId}` ); break; @@ -742,51 +722,14 @@ export class DamageEnemy { return Infinity; } - // 列方程求解,拿笔算一下就知道了 - // 饥渴,会偷取勇士攻击 - if (info.special.includes(7)) { - if (info.damageDecline === 0) { - return add / (1 - this.enemy.hungry! / 100); - } else { - return ( - (info.hp / (1 - info.damageDecline / 100) - - core.status.hero.mana + - info.def) / - (1 - this.enemy.hungry! / 100) - ); - } - } - - // 霜冻 - if (info.special.includes(20) && !core.hasEquip('I589')) { - return ( - info.def + - info.hp / (1 - this.enemy.ice! / 100) - - core.status.hero.mana - ); - } - - if (info.damageDecline !== 0) { - return ( - info.def + - info.hp / (1 - info.damageDecline / 100) - - core.status.hero.mana - ); - } else { - return add; - } + return add; } } -/** - * 主动技能列表 - */ -const skills: [unlock: string, condition: string][] = [ - ['bladeOn', 'blade'], - ['shieldOn', 'shield'] -]; - export namespace Damage { + /** 光环属性 */ + export const haloSpecials: Set = new Set(); + /** * 计算伤害时会用到的勇士属性,攻击防御,其余的不会有buff加成,直接从core.status.hero取 */ @@ -817,10 +760,7 @@ export namespace Damage { let heroPerDamage: number; // 绝对防御 - if (special.includes(9)) { - heroPerDamage = atk + mana - monDef; - if (heroPerDamage <= 0) return null; - } else if (special.includes(3)) { + if (special.includes(3)) { // 由于坚固的特性,只能放到这来计算了 if (atk > enemy.def) heroPerDamage = 1 + mana; else return null; @@ -830,13 +770,6 @@ export namespace Damage { else return null; } - // 霜冻 - if (special.includes(20) && !core.hasEquip('I589')) { - heroPerDamage *= 1 - enemy.ice! / 100; - } - - heroPerDamage *= 1 - info.damageDecline / 100; - let enemyPerDamage: number; // 魔攻 @@ -857,39 +790,8 @@ export namespace Damage { if (special.includes(5)) enemyPerDamage *= 3; if (special.includes(6)) enemyPerDamage *= enemy.n!; - // 苍蓝刻 - if (special.includes(28)) { - heroPerDamage *= 1 - enemy.paleShield! / 100; - } - let turn = Math.ceil(monHp / heroPerDamage); - // 致命一击 - if (special.includes(1)) { - const times = Math.floor(turn / 5); - damage += ((times * (enemy.crit! - 100)) / 100) * enemyPerDamage; - } - - // 勇气之刃 - if (turn > 1 && special.includes(10)) { - damage += (enemy.courage! / 100 - 1) * enemyPerDamage; - } - - // 勇气冲锋 - if (special.includes(11)) { - damage += (enemy.charge! / 100) * enemyPerDamage; - turn += 5; - } - - damage += (turn - 1) * enemyPerDamage; - // 无上之盾 - if (flags.superSheild) { - damage -= mdef / 10; - } - // 生命回复 - damage -= hpmax * turn; - if (flags.hard === 1) damage *= 0.9; - return damage; } diff --git a/src/game/system.ts b/src/game/system.ts index 2ad8ab1..fcc4c18 100644 --- a/src/game/system.ts +++ b/src/game/system.ts @@ -105,7 +105,6 @@ interface VariableInterface { settingStorage: GameStorage; status: Ref; // 定义于游戏进程,渲染进程依然可用 - haloSpecials: number[]; enemySpecials: typeof specials; } @@ -519,14 +518,18 @@ function rewrite, T = O>( ); } if (type === 'full') { + function res(this: T, ...params: any[]) { + // @ts-ignore + return re.call(rebind ?? this, ...params); + } // @ts-ignore - return (base[key] = re.bind(rebind ?? base)); + return (base[key] = res); } else if (type === 'add') { const origin = base[key]; function res(this: T, ...params: [..._F[0], ...any[]]) { - const v = (origin as _Func).call(bind ?? base, ...params); + const v = (origin as _Func).call(bind ?? this, ...params); // @ts-ignore - const ret = re.call(rebind ?? base, v, ...params); + const ret = re.call(rebind ?? this, v, ...params); return ret; } // @ts-ignore @@ -535,8 +538,8 @@ function rewrite, T = O>( const origin = base[key]; function res(this: T, ...params: [..._F[0], ...any[]]) { // @ts-ignore - re.call(rebind ?? base, ...params); - const ret = (origin as _Func).call(bind ?? base, ...params); + re.call(rebind ?? this, ...params); + const ret = (origin as _Func).call(bind ?? this, ...params); return ret; } // @ts-ignore diff --git a/src/plugin/use.ts b/src/plugin/use.ts index 1cc799a..96ad41b 100644 --- a/src/plugin/use.ts +++ b/src/plugin/use.ts @@ -30,7 +30,7 @@ checkMobile(); function checkMobile() { if (isMobile && !alerted) { alert( - '手机端建议使用自带的浏览器进行游玩,并在进入游戏后开启游戏内的全屏设置游玩' + '手机端建议使用新版APP或者自带的浏览器进行游玩,并在进入游戏后开启游戏内的全屏设置游玩' ); alerted = true; } diff --git a/src/source/cls.d.ts b/src/source/cls.d.ts index b717cee..6bfc2f7 100644 --- a/src/source/cls.d.ts +++ b/src/source/cls.d.ts @@ -4,7 +4,7 @@ interface IdToCls { blueWall: 'animates'; star: 'animates'; lava: 'animates'; - ice: 'terrains'; + ice: 'animates'; blueShopLeft: 'terrains'; blueShopRight: 'terrains'; pinkShopLeft: 'terrains'; @@ -13,7 +13,7 @@ interface IdToCls { poisonNet: 'animates'; weakNet: 'animates'; curseNet: 'animates'; - blueWater: 'animates'; + blueLava: 'animates'; water: 'animates'; autotile: 'autotile'; yellowKey: 'items'; @@ -58,7 +58,7 @@ interface IdToCls { curseWine: 'items'; superWine: 'items'; dagger: 'items'; - silverCoin: 'items'; + pack: 'items'; amulet: 'items'; hammer: 'items'; lifeWand: 'items'; @@ -85,10 +85,6 @@ interface IdToCls { crystalBottom: 'animates'; fire: 'animates'; switch: 'animates'; - steelDoor2: 'animates'; - steelDoor3: 'animates'; - iceDoor: 'animates'; - iceDoor2: 'animates'; magentaWall: 'animates'; man: 'npcs'; trader: 'npcs'; @@ -108,16 +104,6 @@ interface IdToCls { npc3: 'npc48'; greenMan: 'npcs'; blueTrader: 'npcs'; - redMSNpc: 'npcs'; - blackTrader: 'npcs'; - autotile4: 'autotile'; - autotile5: 'autotile'; - autotile6: 'autotile'; - autotile7: 'autotile'; - autotile8: 'autotile'; - autotile9: 'autotile'; - autotile10: 'autotile'; - autotile11: 'autotile'; autotile1: 'autotile'; autotile2: 'autotile'; autotile3: 'autotile'; @@ -131,22 +117,6 @@ interface IdToCls { flower: 'terrains'; box: 'terrains'; boxed: 'terrains'; - octopusLeftTop: 'npcs'; - octopusTop: 'npcs'; - octopusRightTop: 'npcs'; - octopusLeft: 'npcs'; - octopusCenter: 'npcs'; - octopusRight: 'npcs'; - octopusLeftBottom: 'npcs'; - octopusRightBottom: 'npcs'; - dragonLeftTop: 'npcs'; - dragonTop: 'npcs'; - dragonRightTop: 'npcs'; - dragonLeft: 'npcs'; - dragonCenter: 'npcs'; - dragonRight: 'npcs'; - dragonLeftBottom: 'npcs'; - dragonRightBottom: 'npcs'; greenSlime: 'enemys'; redSlime: 'enemys'; blackSlime: 'enemys'; @@ -214,15 +184,10 @@ interface IdToCls { silverSlimelord: 'enemys'; goldSlimelord: 'enemys'; grayRock: 'enemys'; - blueRock: 'enemys'; - skeletonLite: 'enemys'; greenKnight: 'enemys'; bowman: 'enemys'; - liteBowman: 'enemys'; - crimsonZombie: 'enemys'; - frozenSkeleton: 'enemys'; + purpleBowman: 'enemys'; watcherSlime: 'enemys'; - mutantSlimeman: 'enemys'; frostBat: 'enemys'; devilKnight: 'enemys'; grayPriest: 'enemys'; @@ -246,422 +211,28 @@ interface IdToCls { sWallTLR: 'terrains'; sWallTBR: 'terrains'; sWallTBL: 'terrains'; - I319: 'items'; - I320: 'items'; - I321: 'items'; - I322: 'items'; - I323: 'items'; - I324: 'items'; - I325: 'items'; - I326: 'items'; - I327: 'items'; - I328: 'items'; - I329: 'items'; - I330: 'items'; - T331: 'terrains'; - T332: 'terrains'; - T333: 'terrains'; - T334: 'terrains'; - T335: 'terrains'; - T336: 'terrains'; - T337: 'terrains'; - T338: 'terrains'; - T339: 'terrains'; - T340: 'terrains'; - T341: 'terrains'; - T342: 'terrains'; - T343: 'terrains'; - T344: 'terrains'; - T345: 'terrains'; - T346: 'terrains'; - T347: 'terrains'; - T348: 'terrains'; - T349: 'terrains'; - T350: 'terrains'; - T351: 'terrains'; - T352: 'terrains'; - T353: 'terrains'; - T354: 'terrains'; - T355: 'terrains'; - T356: 'terrains'; - T357: 'terrains'; - T358: 'terrains'; - T359: 'terrains'; - T360: 'terrains'; - T361: 'terrains'; - T362: 'terrains'; - T363: 'terrains'; - T364: 'terrains'; - T365: 'terrains'; - T366: 'terrains'; - N367: 'npc48'; - E368: 'enemys'; - E369: 'enemys'; - E370: 'enemys'; - E371: 'enemys'; - E372: 'enemys'; - E373: 'enemys'; - E374: 'enemys'; - E375: 'enemys'; - I376: 'items'; - I377: 'items'; - I378: 'items'; - I379: 'items'; - I380: 'items'; - I381: 'items'; - I382: 'items'; - I383: 'items'; - I384: 'items'; - I385: 'items'; - I386: 'items'; - I387: 'items'; - I388: 'items'; - I389: 'items'; - I390: 'items'; - I391: 'items'; - I392: 'items'; - I393: 'items'; - I394: 'items'; - I395: 'items'; - I396: 'items'; - I397: 'items'; - I398: 'items'; - I399: 'items'; - I400: 'items'; - I401: 'items'; - I402: 'items'; - I403: 'items'; - I404: 'items'; - I405: 'items'; - I406: 'items'; - I407: 'items'; - I408: 'items'; - I409: 'items'; - I410: 'items'; - I411: 'items'; - I412: 'items'; - I413: 'items'; - I414: 'items'; - I415: 'items'; - I416: 'items'; - I417: 'items'; - I418: 'items'; - I419: 'items'; - I420: 'items'; - I421: 'items'; - I422: 'items'; - I423: 'items'; - I424: 'items'; - I425: 'items'; - I426: 'items'; - I427: 'items'; - I428: 'items'; - I429: 'items'; - I430: 'items'; - I431: 'items'; - I432: 'items'; - I433: 'items'; - I434: 'items'; - I435: 'items'; - I436: 'items'; - I437: 'items'; - I438: 'items'; - I439: 'items'; - I440: 'items'; - I441: 'items'; - I442: 'items'; - I443: 'items'; - I444: 'items'; - I445: 'items'; - I446: 'items'; - I447: 'items'; - I448: 'items'; - I449: 'items'; - I450: 'items'; - I451: 'items'; - I452: 'items'; - I453: 'items'; - I454: 'items'; - I455: 'items'; - I456: 'items'; - I457: 'items'; - I458: 'items'; - I459: 'items'; - I460: 'items'; - I461: 'items'; - I462: 'items'; - I463: 'items'; - I464: 'items'; - I465: 'items'; - I466: 'items'; - I467: 'items'; - I468: 'items'; - I469: 'items'; - I470: 'items'; - I471: 'items'; - I472: 'items'; - I473: 'items'; - I474: 'items'; - I475: 'items'; - I476: 'items'; - I477: 'items'; - I478: 'items'; - I479: 'items'; - I480: 'items'; - I481: 'items'; - I482: 'items'; - I483: 'items'; - I484: 'items'; - I485: 'items'; - I486: 'items'; - I487: 'items'; - I488: 'items'; - I489: 'items'; - I490: 'items'; - I491: 'items'; - A492: 'animates'; - A493: 'animates'; - A494: 'animates'; - A495: 'animates'; - A496: 'animates'; - A497: 'animates'; - E498: 'enemys'; - E499: 'enemys'; - E500: 'enemys'; - E501: 'enemys'; - E502: 'enemys'; - E503: 'enemys'; - E504: 'enemys'; - E505: 'enemys'; - A506: 'animates'; - A507: 'animates'; - A508: 'animates'; - A509: 'animates'; - A510: 'animates'; - E511: 'enemys'; - E512: 'enemys'; - E513: 'enemys'; - E514: 'enemys'; - E515: 'enemys'; - T516: 'terrains'; - E517: 'enemys'; - E518: 'enemys'; - E519: 'enemys'; - E520: 'enemys'; - E521: 'enemys'; - E522: 'enemys'; - E523: 'enemys'; - E524: 'enemys'; - E525: 'enemys'; - T526: 'terrains'; - T527: 'terrains'; - T528: 'terrains'; - T529: 'terrains'; - T530: 'terrains'; - T531: 'terrains'; - N532: 'npcs'; - N533: 'npcs'; - N534: 'npcs'; - N535: 'npcs'; - E536: 'enemys'; - E537: 'enemys'; - E538: 'enemys'; - E539: 'enemys'; - A540: 'animates'; - A541: 'animates'; - A542: 'animates'; - A543: 'animates'; - E544: 'enemys'; - E545: 'enemys'; - E546: 'enemys'; - E547: 'enemys'; - E548: 'enemys'; - E549: 'enemys'; - E550: 'enemys'; - T551: 'terrains'; - T552: 'terrains'; - T553: 'terrains'; - T554: 'terrains'; - T555: 'terrains'; - E556: 'enemys'; - E557: 'enemys'; - I558: 'items'; - I559: 'items'; - I560: 'items'; - E561: 'enemys'; - E562: 'enemys'; - E563: 'enemys'; - E564: 'enemys'; - I565: 'items'; - E566: 'enemys'; - E567: 'enemys'; - E568: 'enemys'; - E569: 'enemys'; - E570: 'enemys'; - E571: 'enemys'; - E572: 'enemys'; - E573: 'enemys'; - I574: 'items'; - I575: 'items'; - E576: 'enemys'; - E577: 'enemys'; - E578: 'enemys'; - E579: 'enemys'; - T580: 'terrains'; - T581: 'terrains'; - T582: 'terrains'; - T583: 'terrains'; - T584: 'terrains'; - T585: 'terrains'; - T586: 'terrains'; - T587: 'terrains'; - T588: 'terrains'; - I589: 'items'; - E590: 'enemys'; - E591: 'enemys'; - E592: 'enemys'; - E593: 'enemys'; - E594: 'enemys'; - E595: 'enemys'; - E596: 'enemys'; - E597: 'enemys'; - E598: 'enemys'; - E599: 'enemys'; - E600: 'enemys'; - E601: 'enemys'; - E602: 'enemys'; - E603: 'enemys'; - T604: 'terrains'; - E605: 'enemys'; - E606: 'enemys'; - E607: 'enemys'; - E608: 'enemys'; - E609: 'enemys'; - E610: 'enemys'; - E611: 'enemys'; - E612: 'enemys'; - E613: 'enemys'; - E614: 'enemys'; - E615: 'enemys'; - E616: 'enemys'; - E617: 'enemys'; - E618: 'enemys'; - N619: 'npcs'; - N620: 'npcs'; - N621: 'npcs'; - N622: 'npcs'; - N623: 'npcs'; - N624: 'npcs'; - N625: 'npcs'; - N626: 'npcs'; - T627: 'terrains'; - T628: 'terrains'; - T629: 'terrains'; - N630: 'npc48'; - N631: 'npc48'; - N632: 'npc48'; - N633: 'npc48'; - N634: 'npc48'; - N635: 'npc48'; - N636: 'npc48'; - N637: 'npc48'; - N638: 'npc48'; - N639: 'npc48'; - T640: 'terrains'; - I641: 'items'; - I642: 'items'; - E643: 'enemys'; - E644: 'enemys'; - E645: 'enemys'; - E646: 'enemys'; - E647: 'enemys'; - T648: 'terrains'; - T649: 'terrains'; - T650: 'terrains'; - T651: 'terrains'; - T652: 'terrains'; - T653: 'terrains'; - T654: 'terrains'; - X20032: 'tileset'; - X20033: 'tileset'; - X20034: 'tileset'; - X20037: 'tileset'; - X20038: 'tileset'; - X20039: 'tileset'; - X20040: 'tileset'; - X20041: 'tileset'; - X20042: 'tileset'; - X20045: 'tileset'; - X20047: 'tileset'; - X20048: 'tileset'; - X20049: 'tileset'; - X20050: 'tileset'; - X20053: 'tileset'; - X20054: 'tileset'; - X20055: 'tileset'; - X20056: 'tileset'; - X20057: 'tileset'; - X20058: 'tileset'; - X20064: 'tileset'; - X20065: 'tileset'; - X20066: 'tileset'; - X20074: 'tileset'; - X20152: 'tileset'; - X20153: 'tileset'; - X30040: 'tileset'; - X30041: 'tileset'; - X30042: 'tileset'; - X30048: 'tileset'; - X30050: 'tileset'; - X30056: 'tileset'; - X30057: 'tileset'; - X30058: 'tileset'; - X30105: 'tileset'; - X30112: 'tileset'; - X30113: 'tileset'; - X30121: 'tileset'; - X30196: 'tileset'; - X30204: 'tileset'; - X70019: 'tileset'; - X70048: 'tileset'; - X70049: 'tileset'; - X70050: 'tileset'; - X70056: 'tileset'; - X70058: 'tileset'; - X70059: 'tileset'; - X70060: 'tileset'; - X70064: 'tileset'; - X70065: 'tileset'; - X70066: 'tileset'; - X70072: 'tileset'; - X70073: 'tileset'; - X70074: 'tileset'; - X70080: 'tileset'; - X70081: 'tileset'; - X70082: 'tileset'; - X70083: 'tileset'; - X70084: 'tileset'; - X70090: 'tileset'; - X70091: 'tileset'; - X70098: 'tileset'; - X70099: 'tileset'; - X70112: 'tileset'; - X70114: 'tileset'; - X70116: 'tileset'; - X70120: 'tileset'; - X70122: 'tileset'; - X70124: 'tileset'; - X70128: 'tileset'; - X70130: 'tileset'; - X70131: 'tileset'; - X70132: 'tileset'; - X70184: 'tileset'; - X70185: 'tileset'; - X70186: 'tileset'; - X70200: 'tileset'; - X70201: 'tileset'; - X70202: 'tileset'; - X90153: 'tileset'; - X90154: 'tileset'; - X90155: 'tileset'; + tallYellowDoor: 'npc48'; + tallBlueDoor: 'npc48'; + tallRedDoor: 'npc48'; + tallGreenDoor: 'npc48'; + tallSpecialDoor: 'npc48'; + tallSteelDoor: 'npc48'; + keiskeiFairy: 'enemys'; + tulipFairy: 'enemys'; + bearDown: 'enemy48'; + bearLeft: 'enemy48'; + bearRight: 'enemy48'; + bearUp: 'enemy48'; + I331: 'items'; + I332: 'items'; + I333: 'items'; + I334: 'items'; + I335: 'items'; + I336: 'items'; + I337: 'items'; + I338: 'items'; + I339: 'items'; + I340: 'items'; + I341: 'items'; + I342: 'items'; } \ No newline at end of file diff --git a/src/source/items.d.ts b/src/source/items.d.ts index 307232e..4f56dd0 100644 --- a/src/source/items.d.ts +++ b/src/source/items.d.ts @@ -12,18 +12,17 @@ interface ItemDeclaration { greenPotion: 'items'; sword0: 'items'; sword1: 'equips'; - sword2: 'equips'; + sword2: 'items'; sword3: 'items'; sword4: 'items'; sword5: 'items'; shield0: 'items'; - shield1: 'equips'; - shield2: 'equips'; + shield1: 'items'; + shield2: 'items'; shield3: 'items'; shield4: 'items'; shield5: 'items'; superPotion: 'items'; - silverCoin: 'items'; book: 'constants'; fly: 'constants'; coin: 'constants'; @@ -37,7 +36,7 @@ interface ItemDeclaration { pickaxe: 'tools'; icePickaxe: 'tools'; bomb: 'tools'; - centerFly: 'constants'; + centerFly: 'tools'; upFly: 'tools'; downFly: 'tools'; earthquake: 'tools'; @@ -49,142 +48,18 @@ interface ItemDeclaration { lifeWand: 'tools'; jumpShoes: 'tools'; skill1: 'constants'; - wand: 'constants'; - I319: 'items'; - I320: 'items'; - I321: 'items'; - I322: 'constants'; - I323: 'items'; - I324: 'items'; - I325: 'items'; - I326: 'items'; - I327: 'items'; - I328: 'items'; - I329: 'items'; - I330: 'constants'; - I376: 'items'; - I377: 'items'; - I378: 'items'; - I379: 'items'; - I380: 'items'; - I381: 'items'; - I382: 'items'; - I383: 'items'; - I384: 'items'; - I385: 'items'; - I386: 'items'; - I387: 'items'; - I388: 'items'; - I389: 'items'; - I390: 'items'; - I391: 'items'; - I392: 'items'; - I393: 'items'; - I394: 'items'; - I395: 'items'; - I396: 'items'; - I397: 'items'; - I398: 'items'; - I399: 'items'; - I400: 'items'; - I401: 'items'; - I402: 'items'; - I403: 'items'; - I404: 'items'; - I405: 'items'; - I406: 'items'; - I407: 'items'; - I408: 'items'; - I409: 'items'; - I410: 'items'; - I411: 'items'; - I412: 'items'; - I413: 'items'; - I414: 'items'; - I415: 'items'; - I416: 'items'; - I417: 'items'; - I418: 'items'; - I419: 'items'; - I420: 'items'; - I421: 'items'; - I422: 'items'; - I423: 'items'; - I424: 'items'; - I425: 'items'; - I426: 'items'; - I427: 'items'; - I428: 'items'; - I429: 'items'; - I430: 'items'; - I431: 'items'; - I432: 'items'; - I433: 'items'; - I434: 'items'; - I435: 'items'; - I436: 'items'; - I437: 'items'; - I438: 'items'; - I439: 'items'; - I440: 'items'; - I441: 'items'; - I442: 'items'; - I443: 'items'; - I444: 'items'; - I445: 'items'; - I446: 'items'; - I447: 'items'; - I448: 'items'; - I449: 'items'; - I450: 'items'; - I451: 'items'; - I452: 'items'; - I453: 'items'; - I454: 'items'; - I455: 'items'; - I456: 'items'; - I457: 'items'; - I458: 'items'; - I459: 'items'; - I460: 'items'; - I461: 'items'; - I462: 'items'; - I463: 'items'; - I464: 'items'; - I465: 'items'; - I466: 'items'; - I467: 'items'; - I468: 'items'; - I469: 'items'; - I470: 'items'; - I471: 'items'; - I472: 'items'; - I473: 'items'; - I474: 'items'; - I475: 'items'; - I476: 'items'; - I477: 'items'; - I478: 'items'; - I479: 'items'; - I480: 'items'; - I481: 'items'; - I482: 'items'; - I483: 'items'; - I484: 'items'; - I485: 'items'; - I486: 'items'; - I487: 'items'; - I488: 'items'; - I489: 'items'; - I490: 'items'; - I491: 'items'; - I558: 'constants'; - I559: 'constants'; - I560: 'constants'; - I565: 'constants'; - I574: 'items'; - I575: 'equips'; - I589: 'equips'; - I641: 'equips'; - I642: 'constants'; + wand: 'items'; + pack: 'items'; + I331: 'items'; + I332: 'items'; + I333: 'items'; + I334: 'items'; + I335: 'items'; + I336: 'items'; + I337: 'items'; + I338: 'items'; + I339: 'items'; + I340: 'items'; + I341: 'items'; + I342: 'constants'; } \ No newline at end of file diff --git a/src/source/maps.d.ts b/src/source/maps.d.ts index f16d744..ae63f39 100644 --- a/src/source/maps.d.ts +++ b/src/source/maps.d.ts @@ -13,7 +13,7 @@ interface IdToNumber { poisonNet: 12; weakNet: 13; curseNet: 14; - blueWater: 15; + blueLava: 15; water: 16; autotile: 20; yellowKey: 21; @@ -58,7 +58,7 @@ interface IdToNumber { curseWine: 60; superWine: 61; dagger: 62; - silverCoin: 63; + pack: 63; amulet: 64; hammer: 65; lifeWand: 68; @@ -85,10 +85,6 @@ interface IdToNumber { crystalBottom: 102; fire: 103; switch: 104; - steelDoor2: 105; - steelDoor3: 106; - iceDoor: 107; - iceDoor2: 108; magentaWall: 109; man: 121; trader: 122; @@ -108,16 +104,6 @@ interface IdToNumber { npc3: 136; greenMan: 137; blueTrader: 138; - redMSNpc: 139; - blackTrader: 140; - autotile4: 141; - autotile5: 142; - autotile6: 143; - autotile7: 144; - autotile8: 145; - autotile9: 146; - autotile10: 147; - autotile11: 148; autotile1: 151; autotile2: 152; autotile3: 153; @@ -131,22 +117,6 @@ interface IdToNumber { flower: 168; box: 169; boxed: 170; - octopusLeftTop: 181; - octopusTop: 182; - octopusRightTop: 183; - octopusLeft: 184; - octopusCenter: 185; - octopusRight: 186; - octopusLeftBottom: 187; - octopusRightBottom: 188; - dragonLeftTop: 189; - dragonTop: 190; - dragonRightTop: 191; - dragonLeft: 192; - dragonCenter: 193; - dragonRight: 194; - dragonLeftBottom: 195; - dragonRightBottom: 196; greenSlime: 201; redSlime: 202; blackSlime: 203; @@ -214,15 +184,10 @@ interface IdToNumber { silverSlimelord: 265; goldSlimelord: 266; grayRock: 267; - blueRock: 268; - skeletonLite: 269; greenKnight: 270; bowman: 271; - liteBowman: 272; - crimsonZombie: 273; - frozenSkeleton: 274; + purpleBowman: 272; watcherSlime: 275; - mutantSlimeman: 276; frostBat: 277; devilKnight: 278; grayPriest: 279; @@ -246,424 +211,30 @@ interface IdToNumber { sWallTLR: 316; sWallTBR: 317; sWallTBL: 318; - I319: 319; - I320: 320; - I321: 321; - I322: 322; - I323: 323; - I324: 324; - I325: 325; - I326: 326; - I327: 327; - I328: 328; - I329: 329; - I330: 330; - T331: 331; - T332: 332; - T333: 333; - T334: 334; - T335: 335; - T336: 336; - T337: 337; - T338: 338; - T339: 339; - T340: 340; - T341: 341; - T342: 342; - T343: 343; - T344: 344; - T345: 345; - T346: 346; - T347: 347; - T348: 348; - T349: 349; - T350: 350; - T351: 351; - T352: 352; - T353: 353; - T354: 354; - T355: 355; - T356: 356; - T357: 357; - T358: 358; - T359: 359; - T360: 360; - T361: 361; - T362: 362; - T363: 363; - T364: 364; - T365: 365; - T366: 366; - N367: 367; - E368: 368; - E369: 369; - E370: 370; - E371: 371; - E372: 372; - E373: 373; - E374: 374; - E375: 375; - I376: 376; - I377: 377; - I378: 378; - I379: 379; - I380: 380; - I381: 381; - I382: 382; - I383: 383; - I384: 384; - I385: 385; - I386: 386; - I387: 387; - I388: 388; - I389: 389; - I390: 390; - I391: 391; - I392: 392; - I393: 393; - I394: 394; - I395: 395; - I396: 396; - I397: 397; - I398: 398; - I399: 399; - I400: 400; - I401: 401; - I402: 402; - I403: 403; - I404: 404; - I405: 405; - I406: 406; - I407: 407; - I408: 408; - I409: 409; - I410: 410; - I411: 411; - I412: 412; - I413: 413; - I414: 414; - I415: 415; - I416: 416; - I417: 417; - I418: 418; - I419: 419; - I420: 420; - I421: 421; - I422: 422; - I423: 423; - I424: 424; - I425: 425; - I426: 426; - I427: 427; - I428: 428; - I429: 429; - I430: 430; - I431: 431; - I432: 432; - I433: 433; - I434: 434; - I435: 435; - I436: 436; - I437: 437; - I438: 438; - I439: 439; - I440: 440; - I441: 441; - I442: 442; - I443: 443; - I444: 444; - I445: 445; - I446: 446; - I447: 447; - I448: 448; - I449: 449; - I450: 450; - I451: 451; - I452: 452; - I453: 453; - I454: 454; - I455: 455; - I456: 456; - I457: 457; - I458: 458; - I459: 459; - I460: 460; - I461: 461; - I462: 462; - I463: 463; - I464: 464; - I465: 465; - I466: 466; - I467: 467; - I468: 468; - I469: 469; - I470: 470; - I471: 471; - I472: 472; - I473: 473; - I474: 474; - I475: 475; - I476: 476; - I477: 477; - I478: 478; - I479: 479; - I480: 480; - I481: 481; - I482: 482; - I483: 483; - I484: 484; - I485: 485; - I486: 486; - I487: 487; - I488: 488; - I489: 489; - I490: 490; - I491: 491; - A492: 492; - A493: 493; - A494: 494; - A495: 495; - A496: 496; - A497: 497; - E498: 498; - E499: 499; - E500: 500; - E501: 501; - E502: 502; - E503: 503; - E504: 504; - E505: 505; - A506: 506; - A507: 507; - A508: 508; - A509: 509; - A510: 510; - E511: 511; - E512: 512; - E513: 513; - E514: 514; - E515: 515; - T516: 516; - E517: 517; - E518: 518; - E519: 519; - E520: 520; - E521: 521; - E522: 522; - E523: 523; - E524: 524; - E525: 525; - T526: 526; - T527: 527; - T528: 528; - T529: 529; - T530: 530; - T531: 531; - N532: 532; - N533: 533; - N534: 534; - N535: 535; - E536: 536; - E537: 537; - E538: 538; - E539: 539; - A540: 540; - A541: 541; - A542: 542; - A543: 543; - E544: 544; - E545: 545; - E546: 546; - E547: 547; - E548: 548; - E549: 549; - E550: 550; - T551: 551; - T552: 552; - T553: 553; - T554: 554; - T555: 555; - E556: 556; - E557: 557; - I558: 558; - I559: 559; - I560: 560; - E561: 561; - E562: 562; - E563: 563; - E564: 564; - I565: 565; - E566: 566; - E567: 567; - E568: 568; - E569: 569; - E570: 570; - E571: 571; - E572: 572; - E573: 573; - I574: 574; - I575: 575; - E576: 576; - E577: 577; - E578: 578; - E579: 579; - T580: 580; - T581: 581; - T582: 582; - T583: 583; - T584: 584; - T585: 585; - T586: 586; - T587: 587; - T588: 588; - I589: 589; - E590: 590; - E591: 591; - E592: 592; - E593: 593; - E594: 594; - E595: 595; - E596: 596; - E597: 597; - E598: 598; - E599: 599; - E600: 600; - E601: 601; - E602: 602; - E603: 603; - T604: 604; - E605: 605; - E606: 606; - E607: 607; - E608: 608; - E609: 609; - E610: 610; - E611: 611; - E612: 612; - E613: 613; - E614: 614; - E615: 615; - E616: 616; - E617: 617; - E618: 618; - N619: 619; - N620: 620; - N621: 621; - N622: 622; - N623: 623; - N624: 624; - N625: 625; - N626: 626; - T627: 627; - T628: 628; - T629: 629; - N630: 630; - N631: 631; - N632: 632; - N633: 633; - N634: 634; - N635: 635; - N636: 636; - N637: 637; - N638: 638; - N639: 639; - T640: 640; - I641: 641; - I642: 642; - E643: 643; - E644: 644; - E645: 645; - E646: 646; - E647: 647; - T648: 648; - T649: 649; - T650: 650; - T651: 651; - T652: 652; - T653: 653; - T654: 654; - X20032: 20032; - X20033: 20033; - X20034: 20034; - X20037: 20037; - X20038: 20038; - X20039: 20039; - X20040: 20040; - X20041: 20041; - X20042: 20042; - X20045: 20045; - X20047: 20047; - X20048: 20048; - X20049: 20049; - X20050: 20050; - X20053: 20053; - X20054: 20054; - X20055: 20055; - X20056: 20056; - X20057: 20057; - X20058: 20058; - X20064: 20064; - X20065: 20065; - X20066: 20066; - X20074: 20074; - X20152: 20152; - X20153: 20153; - X30040: 30040; - X30041: 30041; - X30042: 30042; - X30048: 30048; - X30050: 30050; - X30056: 30056; - X30057: 30057; - X30058: 30058; - X30105: 30105; - X30112: 30112; - X30113: 30113; - X30121: 30121; - X30196: 30196; - X30204: 30204; - X70019: 70019; - X70048: 70048; - X70049: 70049; - X70050: 70050; - X70056: 70056; - X70058: 70058; - X70059: 70059; - X70060: 70060; - X70064: 70064; - X70065: 70065; - X70066: 70066; - X70072: 70072; - X70073: 70073; - X70074: 70074; - X70080: 70080; - X70081: 70081; - X70082: 70082; - X70083: 70083; - X70084: 70084; - X70090: 70090; - X70091: 70091; - X70098: 70098; - X70099: 70099; - X70112: 70112; - X70114: 70114; - X70116: 70116; - X70120: 70120; - X70122: 70122; - X70124: 70124; - X70128: 70128; - X70130: 70130; - X70131: 70131; - X70132: 70132; - X70184: 70184; - X70185: 70185; - X70186: 70186; - X70200: 70200; - X70201: 70201; - X70202: 70202; - X90153: 90153; - X90154: 90154; - X90155: 90155; + tallYellowDoor: 319; + tallBlueDoor: 320; + tallRedDoor: 321; + tallGreenDoor: 322; + tallSpecialDoor: 323; + tallSteelDoor: 324; + keiskeiFairy: 325; + tulipFairy: 326; + bearDown: 327; + bearLeft: 328; + bearRight: 329; + bearUp: 330; + I331: 331; + I332: 332; + I333: 333; + I334: 334; + I335: 335; + I336: 336; + I337: 337; + I338: 338; + I339: 339; + I340: 340; + I341: 341; + I342: 342; } interface NumberToId { 1: 'yellowWall'; @@ -680,7 +251,7 @@ interface NumberToId { 12: 'poisonNet'; 13: 'weakNet'; 14: 'curseNet'; - 15: 'blueWater'; + 15: 'blueLava'; 16: 'water'; 20: 'autotile'; 21: 'yellowKey'; @@ -725,7 +296,7 @@ interface NumberToId { 60: 'curseWine'; 61: 'superWine'; 62: 'dagger'; - 63: 'silverCoin'; + 63: 'pack'; 64: 'amulet'; 65: 'hammer'; 68: 'lifeWand'; @@ -752,10 +323,6 @@ interface NumberToId { 102: 'crystalBottom'; 103: 'fire'; 104: 'switch'; - 105: 'steelDoor2'; - 106: 'steelDoor3'; - 107: 'iceDoor'; - 108: 'iceDoor2'; 109: 'magentaWall'; 121: 'man'; 122: 'trader'; @@ -775,16 +342,6 @@ interface NumberToId { 136: 'npc3'; 137: 'greenMan'; 138: 'blueTrader'; - 139: 'redMSNpc'; - 140: 'blackTrader'; - 141: 'autotile4'; - 142: 'autotile5'; - 143: 'autotile6'; - 144: 'autotile7'; - 145: 'autotile8'; - 146: 'autotile9'; - 147: 'autotile10'; - 148: 'autotile11'; 151: 'autotile1'; 152: 'autotile2'; 153: 'autotile3'; @@ -798,22 +355,6 @@ interface NumberToId { 168: 'flower'; 169: 'box'; 170: 'boxed'; - 181: 'octopusLeftTop'; - 182: 'octopusTop'; - 183: 'octopusRightTop'; - 184: 'octopusLeft'; - 185: 'octopusCenter'; - 186: 'octopusRight'; - 187: 'octopusLeftBottom'; - 188: 'octopusRightBottom'; - 189: 'dragonLeftTop'; - 190: 'dragonTop'; - 191: 'dragonRightTop'; - 192: 'dragonLeft'; - 193: 'dragonCenter'; - 194: 'dragonRight'; - 195: 'dragonLeftBottom'; - 196: 'dragonRightBottom'; 201: 'greenSlime'; 202: 'redSlime'; 203: 'blackSlime'; @@ -881,15 +422,10 @@ interface NumberToId { 265: 'silverSlimelord'; 266: 'goldSlimelord'; 267: 'grayRock'; - 268: 'blueRock'; - 269: 'skeletonLite'; 270: 'greenKnight'; 271: 'bowman'; - 272: 'liteBowman'; - 273: 'crimsonZombie'; - 274: 'frozenSkeleton'; + 272: 'purpleBowman'; 275: 'watcherSlime'; - 276: 'mutantSlimeman'; 277: 'frostBat'; 278: 'devilKnight'; 279: 'grayPriest'; @@ -913,422 +449,28 @@ interface NumberToId { 316: 'sWallTLR'; 317: 'sWallTBR'; 318: 'sWallTBL'; - 319: 'I319'; - 320: 'I320'; - 321: 'I321'; - 322: 'I322'; - 323: 'I323'; - 324: 'I324'; - 325: 'I325'; - 326: 'I326'; - 327: 'I327'; - 328: 'I328'; - 329: 'I329'; - 330: 'I330'; - 331: 'T331'; - 332: 'T332'; - 333: 'T333'; - 334: 'T334'; - 335: 'T335'; - 336: 'T336'; - 337: 'T337'; - 338: 'T338'; - 339: 'T339'; - 340: 'T340'; - 341: 'T341'; - 342: 'T342'; - 343: 'T343'; - 344: 'T344'; - 345: 'T345'; - 346: 'T346'; - 347: 'T347'; - 348: 'T348'; - 349: 'T349'; - 350: 'T350'; - 351: 'T351'; - 352: 'T352'; - 353: 'T353'; - 354: 'T354'; - 355: 'T355'; - 356: 'T356'; - 357: 'T357'; - 358: 'T358'; - 359: 'T359'; - 360: 'T360'; - 361: 'T361'; - 362: 'T362'; - 363: 'T363'; - 364: 'T364'; - 365: 'T365'; - 366: 'T366'; - 367: 'N367'; - 368: 'E368'; - 369: 'E369'; - 370: 'E370'; - 371: 'E371'; - 372: 'E372'; - 373: 'E373'; - 374: 'E374'; - 375: 'E375'; - 376: 'I376'; - 377: 'I377'; - 378: 'I378'; - 379: 'I379'; - 380: 'I380'; - 381: 'I381'; - 382: 'I382'; - 383: 'I383'; - 384: 'I384'; - 385: 'I385'; - 386: 'I386'; - 387: 'I387'; - 388: 'I388'; - 389: 'I389'; - 390: 'I390'; - 391: 'I391'; - 392: 'I392'; - 393: 'I393'; - 394: 'I394'; - 395: 'I395'; - 396: 'I396'; - 397: 'I397'; - 398: 'I398'; - 399: 'I399'; - 400: 'I400'; - 401: 'I401'; - 402: 'I402'; - 403: 'I403'; - 404: 'I404'; - 405: 'I405'; - 406: 'I406'; - 407: 'I407'; - 408: 'I408'; - 409: 'I409'; - 410: 'I410'; - 411: 'I411'; - 412: 'I412'; - 413: 'I413'; - 414: 'I414'; - 415: 'I415'; - 416: 'I416'; - 417: 'I417'; - 418: 'I418'; - 419: 'I419'; - 420: 'I420'; - 421: 'I421'; - 422: 'I422'; - 423: 'I423'; - 424: 'I424'; - 425: 'I425'; - 426: 'I426'; - 427: 'I427'; - 428: 'I428'; - 429: 'I429'; - 430: 'I430'; - 431: 'I431'; - 432: 'I432'; - 433: 'I433'; - 434: 'I434'; - 435: 'I435'; - 436: 'I436'; - 437: 'I437'; - 438: 'I438'; - 439: 'I439'; - 440: 'I440'; - 441: 'I441'; - 442: 'I442'; - 443: 'I443'; - 444: 'I444'; - 445: 'I445'; - 446: 'I446'; - 447: 'I447'; - 448: 'I448'; - 449: 'I449'; - 450: 'I450'; - 451: 'I451'; - 452: 'I452'; - 453: 'I453'; - 454: 'I454'; - 455: 'I455'; - 456: 'I456'; - 457: 'I457'; - 458: 'I458'; - 459: 'I459'; - 460: 'I460'; - 461: 'I461'; - 462: 'I462'; - 463: 'I463'; - 464: 'I464'; - 465: 'I465'; - 466: 'I466'; - 467: 'I467'; - 468: 'I468'; - 469: 'I469'; - 470: 'I470'; - 471: 'I471'; - 472: 'I472'; - 473: 'I473'; - 474: 'I474'; - 475: 'I475'; - 476: 'I476'; - 477: 'I477'; - 478: 'I478'; - 479: 'I479'; - 480: 'I480'; - 481: 'I481'; - 482: 'I482'; - 483: 'I483'; - 484: 'I484'; - 485: 'I485'; - 486: 'I486'; - 487: 'I487'; - 488: 'I488'; - 489: 'I489'; - 490: 'I490'; - 491: 'I491'; - 492: 'A492'; - 493: 'A493'; - 494: 'A494'; - 495: 'A495'; - 496: 'A496'; - 497: 'A497'; - 498: 'E498'; - 499: 'E499'; - 500: 'E500'; - 501: 'E501'; - 502: 'E502'; - 503: 'E503'; - 504: 'E504'; - 505: 'E505'; - 506: 'A506'; - 507: 'A507'; - 508: 'A508'; - 509: 'A509'; - 510: 'A510'; - 511: 'E511'; - 512: 'E512'; - 513: 'E513'; - 514: 'E514'; - 515: 'E515'; - 516: 'T516'; - 517: 'E517'; - 518: 'E518'; - 519: 'E519'; - 520: 'E520'; - 521: 'E521'; - 522: 'E522'; - 523: 'E523'; - 524: 'E524'; - 525: 'E525'; - 526: 'T526'; - 527: 'T527'; - 528: 'T528'; - 529: 'T529'; - 530: 'T530'; - 531: 'T531'; - 532: 'N532'; - 533: 'N533'; - 534: 'N534'; - 535: 'N535'; - 536: 'E536'; - 537: 'E537'; - 538: 'E538'; - 539: 'E539'; - 540: 'A540'; - 541: 'A541'; - 542: 'A542'; - 543: 'A543'; - 544: 'E544'; - 545: 'E545'; - 546: 'E546'; - 547: 'E547'; - 548: 'E548'; - 549: 'E549'; - 550: 'E550'; - 551: 'T551'; - 552: 'T552'; - 553: 'T553'; - 554: 'T554'; - 555: 'T555'; - 556: 'E556'; - 557: 'E557'; - 558: 'I558'; - 559: 'I559'; - 560: 'I560'; - 561: 'E561'; - 562: 'E562'; - 563: 'E563'; - 564: 'E564'; - 565: 'I565'; - 566: 'E566'; - 567: 'E567'; - 568: 'E568'; - 569: 'E569'; - 570: 'E570'; - 571: 'E571'; - 572: 'E572'; - 573: 'E573'; - 574: 'I574'; - 575: 'I575'; - 576: 'E576'; - 577: 'E577'; - 578: 'E578'; - 579: 'E579'; - 580: 'T580'; - 581: 'T581'; - 582: 'T582'; - 583: 'T583'; - 584: 'T584'; - 585: 'T585'; - 586: 'T586'; - 587: 'T587'; - 588: 'T588'; - 589: 'I589'; - 590: 'E590'; - 591: 'E591'; - 592: 'E592'; - 593: 'E593'; - 594: 'E594'; - 595: 'E595'; - 596: 'E596'; - 597: 'E597'; - 598: 'E598'; - 599: 'E599'; - 600: 'E600'; - 601: 'E601'; - 602: 'E602'; - 603: 'E603'; - 604: 'T604'; - 605: 'E605'; - 606: 'E606'; - 607: 'E607'; - 608: 'E608'; - 609: 'E609'; - 610: 'E610'; - 611: 'E611'; - 612: 'E612'; - 613: 'E613'; - 614: 'E614'; - 615: 'E615'; - 616: 'E616'; - 617: 'E617'; - 618: 'E618'; - 619: 'N619'; - 620: 'N620'; - 621: 'N621'; - 622: 'N622'; - 623: 'N623'; - 624: 'N624'; - 625: 'N625'; - 626: 'N626'; - 627: 'T627'; - 628: 'T628'; - 629: 'T629'; - 630: 'N630'; - 631: 'N631'; - 632: 'N632'; - 633: 'N633'; - 634: 'N634'; - 635: 'N635'; - 636: 'N636'; - 637: 'N637'; - 638: 'N638'; - 639: 'N639'; - 640: 'T640'; - 641: 'I641'; - 642: 'I642'; - 643: 'E643'; - 644: 'E644'; - 645: 'E645'; - 646: 'E646'; - 647: 'E647'; - 648: 'T648'; - 649: 'T649'; - 650: 'T650'; - 651: 'T651'; - 652: 'T652'; - 653: 'T653'; - 654: 'T654'; - 20032: 'X20032'; - 20033: 'X20033'; - 20034: 'X20034'; - 20037: 'X20037'; - 20038: 'X20038'; - 20039: 'X20039'; - 20040: 'X20040'; - 20041: 'X20041'; - 20042: 'X20042'; - 20045: 'X20045'; - 20047: 'X20047'; - 20048: 'X20048'; - 20049: 'X20049'; - 20050: 'X20050'; - 20053: 'X20053'; - 20054: 'X20054'; - 20055: 'X20055'; - 20056: 'X20056'; - 20057: 'X20057'; - 20058: 'X20058'; - 20064: 'X20064'; - 20065: 'X20065'; - 20066: 'X20066'; - 20074: 'X20074'; - 20152: 'X20152'; - 20153: 'X20153'; - 30040: 'X30040'; - 30041: 'X30041'; - 30042: 'X30042'; - 30048: 'X30048'; - 30050: 'X30050'; - 30056: 'X30056'; - 30057: 'X30057'; - 30058: 'X30058'; - 30105: 'X30105'; - 30112: 'X30112'; - 30113: 'X30113'; - 30121: 'X30121'; - 30196: 'X30196'; - 30204: 'X30204'; - 70019: 'X70019'; - 70048: 'X70048'; - 70049: 'X70049'; - 70050: 'X70050'; - 70056: 'X70056'; - 70058: 'X70058'; - 70059: 'X70059'; - 70060: 'X70060'; - 70064: 'X70064'; - 70065: 'X70065'; - 70066: 'X70066'; - 70072: 'X70072'; - 70073: 'X70073'; - 70074: 'X70074'; - 70080: 'X70080'; - 70081: 'X70081'; - 70082: 'X70082'; - 70083: 'X70083'; - 70084: 'X70084'; - 70090: 'X70090'; - 70091: 'X70091'; - 70098: 'X70098'; - 70099: 'X70099'; - 70112: 'X70112'; - 70114: 'X70114'; - 70116: 'X70116'; - 70120: 'X70120'; - 70122: 'X70122'; - 70124: 'X70124'; - 70128: 'X70128'; - 70130: 'X70130'; - 70131: 'X70131'; - 70132: 'X70132'; - 70184: 'X70184'; - 70185: 'X70185'; - 70186: 'X70186'; - 70200: 'X70200'; - 70201: 'X70201'; - 70202: 'X70202'; - 90153: 'X90153'; - 90154: 'X90154'; - 90155: 'X90155'; + 319: 'tallYellowDoor'; + 320: 'tallBlueDoor'; + 321: 'tallRedDoor'; + 322: 'tallGreenDoor'; + 323: 'tallSpecialDoor'; + 324: 'tallSteelDoor'; + 325: 'keiskeiFairy'; + 326: 'tulipFairy'; + 327: 'bearDown'; + 328: 'bearLeft'; + 329: 'bearRight'; + 330: 'bearUp'; + 331: 'I331'; + 332: 'I332'; + 333: 'I333'; + 334: 'I334'; + 335: 'I335'; + 336: 'I336'; + 337: 'I337'; + 338: 'I338'; + 339: 'I339'; + 340: 'I340'; + 341: 'I341'; + 342: 'I342'; } \ No newline at end of file