(() => { const pluginName = "survivor_core"; let textPictureText = ""; })(); //定数 const SURVIVOR_CONST = { DEATH_COUNT: 20, DAMAGE_DURATION: 20, DM_SE_DURATION: 6, POP_RATE: 2, LEFT_MARGIN: 0, RIGHT_MARGIN: 320, ABILITY_VARI: 173, // [100, 500, 700, 2000, 4000, 10000, 20000, 30000, 40000, 50000, Infinity] ABILITY_PRICE: [100, 500, 1000, 3000, 7000, Infinity], ABILITY_TEXT: { collect_range: "Increase Pickup Range", atk_power: "Increase Attack Power", atk_rate: "Decrease Cooldown", atk_speed: "Increase Attack Speed", atk_num: "Extra Shots", atk_range: "Increase Attack Range", st_hp: "Increase Max HP and Recovery", dm_resist: "Decrease Damage Taken", st_rec: "Increase HP Recovery per Second", st_exp: "Increase Experience Gained", st_money: "Increase Gold Gained", st_life: "Increase Revival Count" }, WEAPON_TEXT: { fire: "Fireballs orbit the caster", thunder: "Fires lightning orbs at enemies", ice: "Ice pillars emerge nearby", maryoku_gun: "Fires magic bullets forward", oboro: "Throws a sword upward", // Spins the sword around houou_soutou: "Throws a spinning sword", // Throws the sword sword: "Slashes enemies in front" }, MONEY_VARI: 15, COLLECT_RANGE: 50, PLAYER_DAMAGE_RANGE: 24, PLAYER_DAMAGE_DURATION: 6, PLAYER_DAMAGE_SPRITES: 5, PLAYER_BASE_HP: 100 }; var SURVIVOR_DATA = { WeaponList: [], //new WEAPON AbilityList: [], // {id:id, level:level} MobList: [], refreshPlayerState: function () { // 初期値 Object.assign($gameTemp.SURVIVOR_player_data, { collect_range: 1, atk_power: 1, atk_rate: 1, atk_speed: 1, atk_num: 0, atk_range: 1, st_hp: 1, dm_resist: 1, st_rec: 1, st_exp: 1, st_money: 1, st_life: 1 }); // ステータスは加算で計算するヤツ var kasan = { atk_num: true, st_rec: true, st_life: true }; //キャラのパラメータを追加 var params = SURVIVOR_UNIT_STATE[$gameTemp.survivor_ac]; for (var i = 0; i < params.length; i++) { var power = params[i]; if (kasan[power]) { $gameTemp.SURVIVOR_player_data[power.id] += power.value; } else { $gameTemp.SURVIVOR_player_data[power.id] *= power.value; } } // 購入したパラメータの値を追加 var powers = $gameVariables.value(173).power; for (var i = 0; i < powers.length; i++) { var power = powers[i]; if (kasan[power.id]) { $gameTemp.SURVIVOR_player_data[power.id] += SURVIVOR_DEFO_ABILITY_DATA[power.id][power.level]; } else { $gameTemp.SURVIVOR_player_data[power.id] *= SURVIVOR_DEFO_ABILITY_DATA[power.id][power.level]; } } // 所持してるアビリティのパラメータを追加 for (var i = 0; i < $gameTemp.SURVIVOR_player_data.ability_level.length; i++) { var data = $gameTemp.SURVIVOR_player_data.ability_level[i]; if (kasan[data.id]) { $gameTemp.SURVIVOR_player_data[data.id] += SURVIVOR_ABILITY_DATA[data.id][data.level]; } else { $gameTemp.SURVIVOR_player_data[data.id] *= SURVIVOR_ABILITY_DATA[data.id][data.level]; } } $gameTemp.SURVIVOR_player_data.collect_range *= SURVIVOR_CONST.COLLECT_RANGE; $gameTemp.SURVIVOR_player_data.maxhp = SURVIVOR_CONST.PLAYER_BASE_HP; $gameTemp.SURVIVOR_player_data.maxhp *= $gameTemp.SURVIVOR_player_data.st_hp; } }; function Spriteset_survivorMap() { this.initialize(...arguments); } Spriteset_survivorMap.prototype = Object.create(Spriteset_Map.prototype); Spriteset_survivorMap.prototype.constructor = Spriteset_survivorMap; (function () { //タイルマップを狭くして左に寄せる var Tilemap_initialize = Tilemap.prototype.initialize; Tilemap.prototype.initialize = function () { Tilemap_initialize.call(this); if (SceneManager._scene.constructor.name === "Scene_Survive_Battle_Map") { this._width -= SURVIVOR_CONST.RIGHT_MARGIN; } }; var Game_Player_centerX = Game_Player.prototype.centerX; Game_Player.prototype.centerX = function () { if (SceneManager._scene.constructor.name === "Scene_Survive_Battle_Map") { return ($gameMap.screenTileX() - 1) / 2 - SURVIVOR_CONST.RIGHT_MARGIN / 48 / 2; } else { return Game_Player_centerX.call(this); } }; Game_Message.prototype.isSurvivorBusy = function () { return this.hasText() || this.isChoice() || this.isNumberInput() || this.isItemChoice(); }; })(); Spriteset_survivorMap.prototype.createLowerLayer = function () { Spriteset_Base.prototype.createLowerLayer.call(this); this.createParallax(); this.createTilemap(); this.createCharacters(); this.createShadow(); this.createDestination(); this.createWeather(); this._mobSp = []; var wave_count = 0; for (var i = 0; i < Wave[$gameTemp.survivor_map][wave_count][0].count * SURVIVOR_CONST.POP_RATE; i++) { this.createMob(Wave[$gameTemp.survivor_map][wave_count][0].id, i); } this._weaponSp = {}; for (var i = 0; i < $gameTemp.SURVIVOR_player_data.weapon_level.length; i++) { this.addWeapon($gameTemp.SURVIVOR_player_data.weapon_level[i].id, 1); } this._keikenSp = []; this.createGauge(); this.createCharaWindow(); }; //経験値ゲージの作成 Spriteset_survivorMap.prototype.createGauge = function () { var sp = new Sprite_Gauge_K(); sp.x = (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2; sp.y = 20; sp.zIndex = 1000; this.addChild(sp); }; Spriteset_survivorMap.prototype.createCharaWindow = function (name, id) {}; Spriteset_survivorMap.prototype.createMob = function (name, id) { var m = new MOB(name, id); SURVIVOR_DATA.MobList.push(m); var sp = new Sprite_Mob(m, name, id); sp.zIndex = 300; this._mobSp.push(sp); this.addChild(sp); }; Spriteset_survivorMap.prototype.createKeiken = function (obj) { var sp = new Sprite_Keiken(Math.floor(10000 * Math.random())); sp.x = obj.x; sp.y = obj.y; sp._CBR_exp = obj.exp || 1; sp.zIndex = 100; this._keikenSp.push(sp); this.addChild(sp); }; // ######################## ココで武器情報を全て入れる ################## Spriteset_survivorMap.prototype.weaponMaker = function (name, level) { var d = new WEAPON_MAKER(name, level); if (name == "fire") { this._weaponSp.fire = []; for (var i = 0; i < d.num; i++) { var w = new WEAPON("fire", i, d, level); var sp = new Sprite_Survive_Weapon(w); SURVIVOR_DATA.WeaponList.push(w); sp.zIndex = 500; this._weaponSp.fire.push(sp); this.addChild(sp); } } else if (name == "thunder") { this._weaponSp.thunder = []; for (var i = 0; i < d.num; i++) { var w = new WEAPON(name, i, d, level); var sp = new Sprite_Survive_Weapon(w); SURVIVOR_DATA.WeaponList.push(w); sp.zIndex = 500; this._weaponSp.thunder.push(sp); this.addChild(sp); } } else if (name == "ice") { this._weaponSp.ice = []; for (var i = 0; i < d.num; i++) { var w = new WEAPON(name, i, d, level); var sp = new Sprite_Survive_Weapon(w); SURVIVOR_DATA.WeaponList.push(w); sp.zIndex = 500; this._weaponSp.ice.push(sp); this.addChild(sp); } // 連射系は5倍入れる } else if (name == "maryoku_gun") { this._weaponSp.maryoku_gun = []; for (var i = 0; i < d.num * 5; i++) { var w = new WEAPON(name, i, d, level); var sp = new Sprite_Survive_Weapon(w); SURVIVOR_DATA.WeaponList.push(w); sp.zIndex = 500; this._weaponSp.maryoku_gun.push(sp); this.addChild(sp); } // 連射系は5倍入れる } else if (name == "oboro") { this._weaponSp.oboro = []; for (var i = 0; i < d.num * 5; i++) { var w = new WEAPON(name, i, d, level); var sp = new Sprite_Survive_Weapon(w); SURVIVOR_DATA.WeaponList.push(w); sp.zIndex = 500; this._weaponSp.oboro.push(sp); this.addChild(sp); } // 連射系は5倍入れる } else if (name == "houou_soutou") { this._weaponSp.houou_soutou = []; for (var i = 0; i < d.num * 5; i++) { var w = new WEAPON(name, i, d, level); var sp = new Sprite_Survive_Weapon(w); SURVIVOR_DATA.WeaponList.push(w); sp.zIndex = 500; this._weaponSp.houou_soutou.push(sp); this.addChild(sp); } } else if (name == "sword") { this._weaponSp.sword = []; for (var i = 0; i < 1; i++) { var w = new WEAPON(name, i, d, level); var sp = new Sprite_Survive_Weapon(w); SURVIVOR_DATA.WeaponList.push(w); sp.zIndex = 500; this._weaponSp.sword.push(sp); this.addChild(sp); } } }; Spriteset_survivorMap.prototype.addWeapon = function (id, level) { this.weaponMaker(id, level); }; Spriteset_survivorMap.prototype.refreshWeapon = function (id, level) { this.delWeapon(id); this.weaponMaker(id, level); }; Spriteset_survivorMap.prototype.delWeapon = function (name) { if (this._weaponSp[name]) { for (var i = 0; i < this._weaponSp[name].length; i++) { this.removeChild(this._weaponSp[name][i]); this._weaponSp[name][i].destroy(); this._weaponSp[name][i] = null; } SURVIVOR_DATA.WeaponList = SURVIVOR_DATA.WeaponList.filter((e) => e.name !== name); } }; Spriteset_survivorMap.prototype.update = function () { if ($gameMessage.isBusy()) { return; } Spriteset_Base.prototype.update.call(this); this.updateTileset(); this.updateParallax(); this.updateTilemap(); this.updateShadow(); this.updateWeather(); this.updateAnimations(); this.updateBalloons(); var len = survivorState.newKeiken.length; if (len) { for (var i = 0; i < len; i++) { this.createKeiken(survivorState.newKeiken[i]); } this.sortChildren(); //新しいの作ったらモンスターの下にくるようにしないとね survivorState.newKeiken.length = 0; } if (survivorState.se_cool) { survivorState.se_cool--; } //消すべき経験のSpriteを削除 if (survivorState.keikenDel.length) { for (var i = 0, len = survivorState.keikenDel.length; i < len; i++) { var idx = this._keikenSp.findIndex((e) => e.spriteId == survivorState.keikenDel[i]); this.delKeiken(idx); } survivorState.keikenDel.length = 0; } }; Spriteset_survivorMap.prototype.delKeiken = function (idx) { $gameTemp.SURVIVOR_player_data.now_exp += this._keikenSp[idx]._CBR_exp * $gameTemp.SURVIVOR_player_data.st_exp; var v = $gameVariables.value(173); v.gold += Math.ceil(this._keikenSp[idx]._CBR_exp * $gameTemp.SURVIVOR_player_data.st_money); $gameVariables.setValue(173, v); this._keikenSp[idx].destroy(); //mapのremoveChild- this._keikenSp.splice(idx, 1); //_keikenSpからも消す }; Scene_Survive_Battle_Map.prototype.update = function () { Scene_Message.prototype.update.call(this); this.updateDestination(); this.updateMenuButton(); this.updateMapNameWindow(); this.updateMainMultiply(); if (this.isSceneChangeOk()) { this.updateScene(); } else if (SceneManager.isNextScene(Scene_Battle)) { this.updateEncounterEffect(); } this.updateWaitCount(); if ($gameMessage.isBusy()) { return; } if (0 < Survivor_var.dm_se) { Survivor_var.dm_se--; } //中心から離れてる順にソートする SURVIVOR_DATA.MobList.sort(function (a, b) { var ax = a.x - (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2; var bx = b.x - (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2; var ay = a.y - Graphics.height / 2; var by = b.y - Graphics.height / 2; return Math.sqrt(bx * bx + by * by) - Math.sqrt(ax * ax + ay * ay); }); //削除されてたら消す for (var i = SURVIVOR_DATA.MobList.length - 1; 0 <= i; i--) { if (!SURVIVOR_DATA.MobList[i]) { SURVIVOR_DATA.MobList.pop(); } else { break; } } this.updatePlayerDir(); this.updateMobCool(); this.updateMobPosition(); this.updateWeapon(); this.updateDamage(); this.updateKb(); this.rePopMob(); // レベルアップ処理、タイマーが0より大きい時だけ var next_exp = $gameTemp.SURVIVOR_next_exp($gameTemp.SURVIVOR_player_data.level); if (next_exp < $gameTemp.SURVIVOR_player_data.now_exp && 0 < $gameTimer._frames) { //$gameTemp.SURVIVOR_player_data.now_exp - next_exp; $gameMessage.setNumberInput(5, 3); // 5ならレベルアップウィンドウ、4ならキャンセルウィンドウ } if (this._spriteset._timerSprite) { this._spriteset._timerSprite.zIndex = 99999; this._spriteset.sortChildren(); } // タイマーが0になって生き延びたら if ($gameTimer.isWorking() && $gameTimer._frames <= 0) { // var maplist = [ // 280, //ヒストリア // 281, //鬼と刀 // 282, //令嬢 // 283, //ディストピア // 284 //軋轢 // ]; var data = $gameVariables.value(173); var memoryData = data.memory; // [{name: string, phase: number}] 1普通にクリア、2特定のキャラクターでクリア // フォーネリア if ($gameParty.leader().characterName() == "survive_main_unit1" && $gameParty.leader().characterIndex() == 5) { var nowName = "for"; // アリス } else if ($gameParty.leader().characterName() == "survive_main_unit1" && $gameParty.leader().characterIndex() == 2) { var nowName = "alice"; // 藍華 } else if ($gameParty.leader().characterName() == "survive_main_unit2" && $gameParty.leader().characterIndex() == 1) { var nowName = "aika"; // ハヅキ } else if ($gameParty.leader().characterName() == "survive_main_unit1" && $gameParty.leader().characterIndex() == 4) { var nowName = "hazu"; // クレイシア } else if ($gameParty.leader().characterName() == "survive_main_unit1" && $gameParty.leader().characterIndex() == 3) { var nowName = "cla"; } var nowMapId = $gameMap.mapId(); if (nowMapId === 280) { var stageName = "for"; var ev = [, 1223, 1224]; } else if (nowMapId === 282) { var stageName = "alice"; var ev = [, 1227, 1228]; } else if (nowMapId === 281) { var stageName = "aika"; var ev = [, 1225, 1226]; } else if (nowMapId === 283) { var stageName = "hazu"; var ev = [, 1229, 1230]; } else if (nowMapId === 284) { var stageName = "cla"; var ev = [, 1231, 1232]; } var clearIdx = memoryData.findIndex((e) => e.name === stageName); if (clearIdx === -1) { // このステージ初クリアだったら data.memory.push({ name: stageName, phase: 1 }); $gameTemp.survivor_reserve_kaisou = ev[1]; } else { if (data.memory[clearIdx].phase === 1 && stageName == nowName) { //2段階が初クリアだったら data.memory[clearIdx].phase = 2; $gameTemp.survivor_reserve_kaisou = ev[2]; } } $gameVariables.setValue(173, data); $gameTimer.stop(); $gameTemp.reserveCommonEvent(1221); } }; Scene_Survive_Battle_Map.prototype.updatePlayerDir = function () { if (tttt % 30 == 20) { if (Survivor_var.now_x != $gameMap._parallaxX || Survivor_var.now_y != $gameMap._parallaxY) { Survivor_var.bf_x = Survivor_var.now_x; Survivor_var.bf_y = Survivor_var.now_y; Survivor_var.now_x = $gameMap._parallaxX; Survivor_var.now_y = $gameMap._parallaxY; Survivor_var.player_dir = Math.atan2(Survivor_var.now_y - Survivor_var.bf_y, Survivor_var.now_x - Survivor_var.bf_x); } } }; //Sprite_Mobでdelが入ってから削除される Scene_Survive_Battle_Map.prototype.updateDelMob = function () { SURVIVOR_DATA.WeaponList.forEach((e, index) => { if (e.del) { SURVIVOR_DATA.WeaponList.splice(index, 1); } }); }; //Sprite_Mobでdelが入ってから削除される Scene_Survive_Battle_Map.prototype.updateDelMob = function () { SURVIVOR_DATA.MobList.forEach((e, index) => { if (e.del) { SURVIVOR_DATA.MobList.splice(index, 1); } }); }; var tttt = 0; Scene_Survive_Battle_Map.prototype.rePopMob = function () { var time_span = $gameTemp.timerStart - $gameTimer.seconds(); var wave_count = 0; wave_count = Math.floor(time_span / 30); wave_count = Math.min(wave_count, Wave[$gameTemp.survivor_map].length - 1); if (tttt % 30 == 10) { for (var i = 0, len = SURVIVOR_DATA.MobList.length; i < len; i++) { var m = SURVIVOR_DATA.MobList[i]; if (m.del) { m.resetMob(Wave[$gameTemp.survivor_map][wave_count][0].id, m.id); } } } tttt++; }; Scene_Survive_Battle_Map.prototype.updateKb = function () { for (var i = 0, len = SURVIVOR_DATA.MobList.length; i < len; i++) { var m = SURVIVOR_DATA.MobList[i]; if (m.death) { continue; } if (m.kb) { if (m.kb.f) { var r = m.kb.power / m.kb.f; m.x += r * Math.cos(m.kb.dir); m.y += r * Math.sin(m.kb.dir); m.kb.f--; } if (m.kb.f <= 0) { m.kb = null; } } } }; //移動、Sprite_Mobのupdateでやると順番がバラバラなのでココでやる Scene_Survive_Battle_Map.prototype.updateMobPosition = function () { for (var i = 0, len = SURVIVOR_DATA.MobList.length; i < len; i++) { var m = SURVIVOR_DATA.MobList[i]; //スクロールによる位置調整 m.x -= ($gameMap._parallaxX - m.dispX) * 48; m.dispX = $gameMap._parallaxX; m.y -= ($gameMap._parallaxY - m.dispY) * 48; m.dispY = $gameMap._parallaxY; //死んでたら移動しない if (m.death) { continue; } //中心へ向かって移動 var theta = Math.atan2(Graphics.height / 2 - m.y, (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2 - m.x); m.x += Math.cos(theta) * m.speed; m.y += Math.sin(theta) * m.speed; //もし範囲内にmobがいたら離れる for (var k = 0, len2 = SURVIVOR_DATA.MobList.length; k < len2; k++) { //自分より内側のヤツだけ攻撃範囲計算する //近付いてたら自分が離れる if (k <= i) { continue; } var m2 = SURVIVOR_DATA.MobList[k]; if (m2.death) { continue; } var saX = m2.x - m.x; var saY = m2.y - m.y; var sa = Math.sqrt(saX * saX + saY * saY); var r = (m.r + m2.r) * 0.75; //衝突判定は攻撃範囲の半分の大きさでいいや if (sa < r && m.id != m2.id) { theta += (0.5 - Math.random()) * 3; //だいたい±π/2 m.x -= Math.cos(theta) * (r - sa); //離したい分だけ離す m.y -= Math.sin(theta) * (r - sa); break; } } } }; //攻撃判定 Scene_Survive_Battle_Map.prototype.updateWeapon = function () { for (var i = 0, len = SURVIVOR_DATA.WeaponList.length; i < len; i++) { var w = SURVIVOR_DATA.WeaponList[i]; w.update_orbit(); } }; Scene_Survive_Battle_Map.prototype.updateMobCool = function () { for (var i = 0, len = SURVIVOR_DATA.MobList.length; i < len; i++) { var m = SURVIVOR_DATA.MobList[i]; m.cool.forEach((e, index) => { if (e.t < 1) { m.cool.splice(index, 1); } else { e.t--; } }); } }; Scene_Survive_Battle_Map.prototype.updateDamage = function () { $gameTemp.SURVIVOR_player_data.recover_cool--; if ($gameTemp.SURVIVOR_player_data.recover_cool < 0) { $gameTemp.SURVIVOR_player_data.recover_cool = 60; $gameTemp.SURVIVOR_player_data.nowhp += $gameTemp.SURVIVOR_player_data.st_rec; if ($gameTemp.SURVIVOR_player_data.maxhp < $gameTemp.SURVIVOR_player_data.nowhp) { $gameTemp.SURVIVOR_player_data.nowhp = $gameTemp.SURVIVOR_player_data.maxhp; } } //プレイヤーのダメージ if ( $gameTemp.SURVIVOR_player_data.damage_cool <= 0 && SURVIVOR_DATA.MobList && 2 < SURVIVOR_DATA.MobList.length && !$gameTemp.SURVIVOR_player_data.game_end ) { // 一番中心に近いMOBを抽出 var m = SURVIVOR_DATA.MobList[SURVIVOR_DATA.MobList.length - 1]; var px = (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2; var py = Graphics.height / 2; var kyori = (m.x - px) * (m.x - px); kyori += (m.y - py) * (m.y - py); kyori = Math.sqrt(kyori); // 距離の内側だったらダメージ if (kyori < SURVIVOR_CONST.PLAYER_DAMAGE_RANGE) { $gameTemp.SURVIVOR_player_data.damage_cool = SURVIVOR_CONST.PLAYER_DAMAGE_DURATION; $gameTemp.SURVIVOR_player_data.disp_damages[$gameTemp.SURVIVOR_player_data.damage_count] = { dm: m.damage, duration: SURVIVOR_CONST.DAMAGE_DURATION, visible: true }; // hpをダメージ分減らす $gameTemp.SURVIVOR_player_data.nowhp -= m.damage; $gameTemp.SURVIVOR_player_data.damage_count = ($gameTemp.SURVIVOR_player_data.damage_count + 1) % SURVIVOR_CONST.PLAYER_DAMAGE_SPRITES; // もし死んだら if ($gameTemp.SURVIVOR_player_data.nowhp < 0) { $gameTemp.SURVIVOR_player_data.death_count++; // デスカウントが復活回数超えてたら if ($gameTemp.SURVIVOR_player_data.st_life < $gameTemp.SURVIVOR_player_data.death_count) { $gameTimer.stop(); $gameTemp.reserveCommonEvent(1216); $gameTemp.SURVIVOR_player_data.game_end = true; // まだカウント残ってたら復活 } else { $gameTemp.SURVIVOR_player_data.nowhp = $gameTemp.SURVIVOR_player_data.maxhp; $gameTemp.requestAnimation([$gamePlayer], 49); } } } } else { $gameTemp.SURVIVOR_player_data.damage_cool--; } //モブのダメージ for (var i = 0, len = SURVIVOR_DATA.MobList.length; i < len; i++) { var m = SURVIVOR_DATA.MobList[i]; if (m.death) { continue; } for (var k = 0, len2 = SURVIVOR_DATA.WeaponList.length; k < len2; k++) { var w = SURVIVOR_DATA.WeaponList[k]; //その武器が攻撃上限に達してたらスルー if (w.break) { continue; } var kyori = (m.x - w.x) * (m.x - w.x); kyori += (m.y - w.y) * (m.y - w.y); kyori = Math.sqrt(kyori); //もし攻撃範囲内の場合 if (kyori < w.r * $gameTemp.SURVIVOR_player_data.atk_range) { //クールタイム中だったら次の武器へ var key = m.cool.findIndex(function (e) { return e.name == w.name + w.id; }); if (key != -1) { continue; } //武器の反対方向ではなくプレイヤーの反対へ if (Survivor_var.dm_se < 1) { AudioManager.playSe({ name: "Blow2", volume: 10, pitch: 200, pan: 0 }); Survivor_var.dm_se = SURVIVOR_CONST.DM_SE_DURATION; } //攻撃回数が設定されている場合 if (w.count_max) { w.count++; if (w.count_max <= w.count) { w.break = true; } } //死んだ瞬間 if (m.hp <= Math.ceil(w.damage * $gameTemp.SURVIVOR_player_data.atk_power)) { m.death = true; m.deathCount = SURVIVOR_CONST.DEATH_COUNT; m.deathFilter = false; survivorState.newKeiken.push({ x: m.x, y: m.y, exp: m.exp }); break; //ココで終わればブキと対象mobの処理も終わる } //吹っ飛ばす m.cool.push({ name: w.name + w.id, t: w.cool }); m.setDamage(Math.ceil(w.damage * $gameTemp.SURVIVOR_player_data.atk_power)); var theta = Math.atan2(m.y - Graphics.height / 2, m.x - (Graphics.width - SURVIVOR_CONST.RIGHT_MARGIN) / 2); m.kb = { dir: theta, f: w.kb.f, power: w.kb.power }; } } } }; const SURVIVOR_WEAPON_LIST = ["fire", "thunder", "ice", "maryoku_gun", "oboro", "houou_soutou", "sword"]; const SURVIVOR_WEAPON_DISP_DATA = { fire: { name: "Fire", evo_name: "Fire Lv10", icon: { x: 0, y: 4 } }, thunder: { name: "Thunder", evo_name: "Thunder Lv10", icon: { x: 2, y: 4 } }, ice: { name: "Ice", evo_name: "Ice Lv10", icon: { x: 1, y: 4 } }, maryoku_gun: { name: "Magic Bullet", evo_name: "Ancient", icon: { x: 8, y: 6 } }, oboro: { name: "Blurred Blade", evo_name: "Blurred Blade: Lust", icon: { x: 8, y: 7 } }, // 刀をグルグル回す houou_soutou: { name: "Twin Blades", evo_name: "Amatsukagami", icon: { x: 12, y: 7 } }, //刀を投げ飛ばす sword: { name: "Normal Sword", evo_name: "Excalibur", icon: { x: 1, y: 6 } } //slash }; const SURVIVOR_UNIT_STATE = { for: [ { id: "st_hp", value: 1.3 }, { id: "dm_resist", value: 0.8 } ], aika: [ { id: "atk_power", value: 1.2 }, { id: "atk_rate", value: 0.95 } ], hazu: [{ id: "atk_power", value: 1.3 }], alice: [{ id: "collect_range", value: 1.4 }], cla: [ { id: "atk_range", value: 1.3 }, { id: "atk_num", value: 1 } ] }; const SURVIVOR_ABILITY_LIST = [ "collect_range", "atk_power", "atk_rate", "atk_speed", "atk_num", "atk_range", "st_hp", "dm_resist", "st_rec", "st_exp", "st_money", "st_life" ]; SURVIVOR_ABILITY_DISP_DATA = { collect_range: { name: "Pickup Range", icon: { x: 3, y: 4 } }, atk_power: { name: "Attack Power", icon: { x: 13, y: 4 } }, atk_rate: { name: "Cooldown", icon: { x: 15, y: 4 } }, atk_speed: { name: "Attack Speed", icon: { x: 12, y: 4 } }, atk_num: { name: "Extra Shots", icon: { x: 6, y: 7 } }, atk_range: { name: "Attack Range", icon: { x: 8, y: 4 } }, st_hp: { name: "Max HP", icon: { x: 4, y: 5 } }, dm_resist: { name: "Resistance", icon: { x: 0, y: 8 } }, st_rec: { name: "Auto Recovery", icon: { x: 1, y: 15 } }, st_exp: { name: "Bonus EXP", icon: { x: 13, y: 18 } }, st_money: { name: "Bonus Money", icon: { x: 9, y: 19 } }, st_life: { name: "Revival Count", icon: { x: 13, y: 13 } } }; const SURVIVOR_DEFO_ABILITY_DATA = { collect_range: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0], atk_power: [1, 1.02, 1.04, 1.06, 1.08, 1.1, 1.12, 1.14, 1.16, 1.18, 1.2], atk_rate: [1, 0.98, 0.96, 0.94, 0.92, 0.9, 0.88, 0.06, 0.84, 0.82, 0.8], atk_speed: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0], atk_num: [0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3], //これは加算 atk_range: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0], st_hp: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0], dm_resist: [1, 0.97, 0.94, 0.91, 0.88, 0.85, 0.82, 0.79, 0.76, 0.73, 0.7], st_rec: [0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3], //これは加算 st_exp: [1, 1.02, 1.04, 1.06, 1.08, 1.1, 1.12, 1.14, 1.16, 1.18, 1.2], st_money: [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6.0], st_life: [0, 1, 1, 2, 2, 3, 3, 4, 4, 4, 5] //これは加算 }; const SURVIVOR_ABILITY_DATA = { collect_range: [1, 1.4, 1.8, 2.2, 2.6, 3.0], atk_power: [1, 1.06, 1.12, 1.18, 1.24, 1.3], atk_rate: [1, 0.94, 0.88, 0.82, 0.76, 0.7], atk_speed: [1, 1.4, 1.8, 2.2, 2.6, 3.0], atk_num: [0, 1, 1, 2, 2, 3], //これは加算 atk_range: [1, 1.2, 1.4, 1.6, 1.8, 2.0], st_hp: [1, 1.2, 1.4, 1.6, 1.8, 2.0], dm_resist: [1, 0.9, 0.8, 0.7, 0.6, 0.5], st_rec: [0, 1, 1, 1, 1, 2], //これは加算 st_exp: [1, 1.06, 1.12, 1.18, 1.24, 1.3], st_money: [1, 1.2, 1.4, 1.6, 1.8, 2.0], st_life: [0, 1, 2, 3, 4, 5], // これは加算 move_speed: [1, 1.2, 1.4, 1.6, 1.8, 2] }; const Survivor_var = { dm_se: 0, bf_x: 0, bf_y: 0, now_x: 0, now_y: 0, player_dir: 0 }; var survivorState = { newKeiken: [], se_cool: 0, keikenDel: [] }; // 1面 1wave 種類って感じ var Wave = { for: [ [{ id: "ossan", count: 50 }], [{ id: "monster_slime_b", count: 50 }], [{ id: "bat", count: 50 }], [{ id: "jelly", count: 50 }], [{ id: "ossan_hage", count: 50 }], [{ id: "monster_ghost", count: 50 }], [{ id: "ossan_red", count: 50 }], [{ id: "monster_bone", count: 50 }], [{ id: "monster_succubus_r", count: 50 }], [{ id: "ossan_gold", count: 50 }] ], aika: [ [{ id: "ossan", count: 50 }], [{ id: "bee", count: 50 }], [{ id: "spider", count: 50 }], [{ id: "ossan_long", count: 50 }], [{ id: "monster_ghost", count: 50 }], [{ id: "ossan_majime", count: 50 }], [{ id: "monster_imp", count: 50 }], [{ id: "ossan_red", count: 50 }], [{ id: "monster_flower_b", count: 50 }], [{ id: "ossan_gold", count: 50 }] ], alice: [ [{ id: "ossan", count: 50 }], [{ id: "monster_flower_r", count: 50 }], [{ id: "bat", count: 50 }], [{ id: "monster_ghost", count: 50 }], [{ id: "ossan_mura", count: 50 }], [{ id: "monster_imp", count: 50 }], [{ id: "ossan_hakase", count: 50 }], [{ id: "monster_flower_b", count: 50 }], [{ id: "monster_orc", count: 50 }], [{ id: "ossan_gold", count: 50 }] ], hazu: [ [{ id: "ossan", count: 50 }], [{ id: "monster_slime_b", count: 50 }], [{ id: "spider", count: 50 }], [{ id: "ossan_hakase", count: 50 }], [{ id: "monster_ghost", count: 50 }], [{ id: "monster_bone", count: 50 }], [{ id: "ossan_red", count: 50 }], [{ id: "ossan_battle", count: 50 }], [{ id: "medama", count: 50 }], [{ id: "ossan_gold", count: 50 }] ], cla: [ [{ id: "ossan", count: 50 }], [{ id: "scorpion", count: 50 }], [{ id: "jelly", count: 50 }], [{ id: "ossan_hage", count: 50 }], [{ id: "monster_ghost", count: 50 }], [{ id: "monster_imp", count: 50 }], [{ id: "ossan_red", count: 50 }], [{ id: "monster_succubus_r", count: 50 }], [{ id: "fishman", count: 50 }], [{ id: "ossan_gold", count: 50 }] ] }; // これ入れないとボカしoffなので拡大した時黒い線が表示される var sviv_Bitmap_updateScaleMode = Bitmap.prototype._updateScaleMode; Bitmap.prototype._updateScaleMode = function () { sviv_Bitmap_updateScaleMode.call(this); if (this._baseTexture && SceneManager._scene.constructor.name === "Scene_Survive_Battle_Map") { this._baseTexture.scaleMode = PIXI.SCALE_MODES.NEAREST; } }; // これ入れないとボカしoffなので拡大した時黒い線が表示される // Bitmap.prototype._updateScaleMode = function () { // if (this._baseTexture) { // if (SceneManager._scene.constructor.name === "Scene_Survive_Battle_Map") { // this._baseTexture.scaleMode = PIXI.SCALE_MODES.NEAREST; // } else { // if (this._smooth) { // this._baseTexture.scaleMode = PIXI.SCALE_MODES.LINEAR; // } else { // this._baseTexture.scaleMode = PIXI.SCALE_MODES.NEAREST; // } // } // } // }; //右のウィンドウ var Scene_Survive_Battle_Map_start = Scene_Survive_Battle_Map.prototype.start; Scene_Survive_Battle_Map.prototype.start = function () { Scene_Survive_Battle_Map_start.call(this); const rect = this.infoWindowRect(); this._infoWindow = new Window_Tachie_Info(rect); this.addWindow(this._infoWindow); }; Scene_Survive_Battle_Map.prototype.infoWindowRect = function () { const ww = SURVIVOR_CONST.RIGHT_MARGIN; const wh = Graphics.height; const wx = Graphics.width - ww; const wy = 0; return new Rectangle(wx, wy, ww, wh); }; function Window_Tachie_Info() { this.initialize(...arguments); } Window_Tachie_Info.prototype = Object.create(Window_Selectable.prototype); Window_Tachie_Info.prototype.constructor = Window_Tachie_Info; Window_Tachie_Info.prototype.initialize = function (rect) { Window_Selectable.prototype.initialize.call(this, rect); this.refresh(); this.now_cg_num = 0; }; Window_Tachie_Info.prototype.colSpacing = function () { return 0; }; Window_Tachie_Info.prototype.refresh = function () { this.contents.clear(); this.drawCharacter(3, 10, 10); //this.drawIcon(3,10,10); }; Window_Tachie_Info.prototype.update = function () { this.processCursorMove(); this.processHandling(); this.processTouch(); Window_Scrollable.prototype.update.call(this); var new_cg_num = Math.min(4, Math.max(1, 4 - Math.floor(($gameTemp.SURVIVOR_player_data.nowhp / $gameTemp.SURVIVOR_player_data.maxhp) * 4))); var ary = { for: "survive_tachi_for_", alice: "survive_tachi_alice_", hazu: "survive_tachi_hazu_", aika: "survive_tachi_aika_", cla: "survive_tachi_cla_" }; if (this.now_cg_num < new_cg_num) { this.drawCharacter(3, 10, 10, ary[$gameTemp.survivor_ac], new_cg_num); } }; Window_Tachie_Info.prototype.drawCharacter = function (iconIndex, x, y, new_cg_name, new_cg_num) { if (!new_cg_name) { return; } var bitmap = ImageManager.loadPicture(`${new_cg_name}${new_cg_num}`); if (bitmap._loadingState == "loaded" && this.contents) { this.contents.clear(); const pw = 675; const ph = 1080; const sx = 0; const sy = 0; this.contents.blt(bitmap, sx, sy, pw, ph, x - 110, y, (pw * 2) / 3, (ph * 2) / 3); this.now_cg_num = new_cg_num; } }; Window_Tachie_Info.prototype.value = function () {}; Window_Tachie_Info.prototype.currencyUnit = function () { return TextManager.currencyUnit; }; Window_Tachie_Info.prototype.open = function () { this.refresh(); Window_Selectable.prototype.open.call(this); }; Window_Tachie_Info.prototype.loadWindowskin = function () { this.windowskin = ImageManager.loadSystem("Window_sviv"); }; Window_Tachie_Info.prototype.updateBackOpacity = function () { this.backOpacity = 255; }; Window_Tachie_Info.prototype._refreshBack = function () { const m = this._margin; const w = Math.max(0, this._width - m * 2); const h = Math.max(0, this._height - m * 2); const sprite = this._backSprite; const tilingSprite = sprite.children[0]; // [Note] We use 95 instead of 96 here to avoid blurring edges. sprite.bitmap = this._windowskin; sprite.setFrame(0, 0, 95, 95); sprite.move(m, m); sprite.scale.x = w / 95; sprite.scale.y = h / 95; tilingSprite.bitmap = this._windowskin; tilingSprite.setFrame(0, 96, 96, 96); tilingSprite.move(0, 0, w, h); tilingSprite.scale.x = 1 / sprite.scale.x; tilingSprite.scale.y = 1 / sprite.scale.y; sprite.setColorTone([0, 0, 0, 255]); }; // ################ 左下のウィンドウ ################ function Window_Survive_Gold_Info() { this.initialize(...arguments); } (function () { Window_Survive_Gold_Info.prototype = Object.create(Window_Selectable.prototype); Window_Survive_Gold_Info.prototype.constructor = Window_Survive_Gold_Info; Window_Survive_Gold_Info.prototype.initialize = function (rect) { Window_Selectable.prototype.initialize.call(this, rect); this.refresh(); }; Window_Survive_Gold_Info.prototype.refresh = function () { this.contents.clear(); this.contents.fontSize = 18; this.drawText(`${$gameVariables.value(173).gold} GOLD`, 0, 10, 130, "right"); }; Window_Survive_Gold_Info.prototype.update = function () { this.processCursorMove(); this.processHandling(); this.processTouch(); Window_Scrollable.prototype.update.call(this); this.refresh(); }; Window_Survive_Gold_Info.prototype.open = function () { //this.refresh(); Window_Selectable.prototype.open.call(this); }; Window_Survive_Gold_Info.prototype.lineHeight = function () { return 12; }; Window_Survive_Gold_Info.prototype.loadWindowskin = function () { this.windowskin = ImageManager.loadSystem("Window_sviv"); }; const _Scene_Survive_Battle_Map_createAllWindows = Scene_Survive_Battle_Map.prototype.createAllWindows; Scene_Survive_Battle_Map.prototype.createAllWindows = function () { _Scene_Survive_Battle_Map_createAllWindows.call(this); const rect = this.goldWindowRect(); this._goldWindow = new Window_Survive_Gold_Info(rect); this.addChild(this._goldWindow); }; Scene_Survive_Battle_Map.prototype.goldWindowRect = function () { const ww = 130 + 12 * 2; const wh = 30 * 1 + 14 * 2; const wx = 806; const wy = 54; return new Rectangle(wx, wy, ww, wh); }; })();