返回
Featured image of post 人生重开模拟器魔改

人生重开模拟器魔改

渡劫成仙ヾ(≧▽≦*)o

如果人生可以重开的话,我选择开挂

背景

最近发现Github上一款比较火的小游戏,人生重开模拟器。对于一个老非酋来说,什么胎死腹中、生了一场重病就一命呜呼了等等莫名其妙的死法都是常规操作了。

于是乎,开始魔改数据ing。。。

游戏界面


环境配置

开发环境

  • Webstorm
  • nodejs(推荐使用scoop安装nvm管理node版本)
  • git

下载运行项目

直接使用Webstorm克隆lifeRestart项目

克隆后,在终端执行命令npm install安装依赖;每次修改后,执行命令npm run build重新编译;执行命令npm run dev即可在本地部署游戏。

> xlsx_transform@ dev D:\Workspace\Webstorm\lifeRestart
> webpack serve --open /view/index.html

<i> [webpack-dev-server] Project is running at:
<i> [webpack-dev-server] Loopback: http://localhost:8080/
<i> [webpack-dev-server] On Your Network (IPv4): http://10.39.103.140:8080/
<i> [webpack-dev-server] On Your Network (IPv6): http://[fe80::1c2b:20b8:519a:6583]:8080/
<i> [webpack-dev-server] Content not from webpack is served from 
 'D:\Workspace\Webstorm\lifeRestart\data, 
  D:\Workspace\Webstorm\lifeRestart\public, 
  D:\Workspace\Webstorm\lifeRestart\view' directory
<i> [webpack-dev-middleware] wait until bundle finished: /view/index.html
asset bundle.js 1.22 MiB [emitted] [minimized] [big] (name: main)
...

魔改

修改天赋概率

  • 修改talent.js代码
    talentRandom(include) {
    const talentList = {};
    for(const talentId in this.#talents) {
        const { id, grade, name, description } = this.#talents[talentId];
        if(id == include) {
            include = { grade, name, description, id };
            continue;
        }
        if(!talentList[grade]) talentList[grade] = [{ grade, name, description, id }];
        else talentList[grade].push({ grade, name, description, id });
    }

    return new Array(10)
        .fill(1).map((v, i)=>{
            if(!i && include) return include;
            const gradeRandom = Math.random();
            let grade;
            /**
             * grade代表天赋等级,3级代表最高等级
             * P(grade=0) = 1-0.990
             * P(grade=1) = 1-0.980
             * P(grade=2) = 1-0.970
             * P(grade=3) = 0.970
             * 所以上面魔改使每次刷新基本必出高等级天赋(除非你太'欧'了)
             */
            if(gradeRandom>=0.990) grade = 0;
            else if(gradeRandom>=0.980) grade = 1;
            else if(gradeRandom>=0.970) grade = 2;
            else grade = 3;

            while(talentList[grade].length == 0) grade--;

            const length = talentList[grade].length;

            const random = Math.floor(Math.random()*length) % length;
            return talentList[grade].splice(random,1)[0];
        });
}

修改属性点

  • 修改app.js代码
// 代码一
talentPage
    .find('#next')
    .click(()=>{
        if(this.#talentSelected.size!=5) {
            this.hint('请选择3个天赋');
            return;
        }
        // 初始属性点totalMax默认20+...,这里魔改成80000+
        this.#totalMax = 80000 + this.#life.getTalentAllocationAddition(Array.from(this.#talentSelected).map(({id})=>id));
        this.switch('property');
    })

// 代码二
// 这里的20000代表属性值上限,保证这些属性值上限值的和大于代码一中的totalMax值
groups.CHR = getBtnGroups("颜值", 0, 20000); // 颜值 charm CHR
groups.INT = getBtnGroups("智力", 0, 20000); // 智力 intelligence INT
groups.STR = getBtnGroups("体质", 0, 20000); // 体质 strength STR
groups.MNY = getBtnGroups("家境", 0, 20000); // 家境 money MNY

修改随机事件

  • 修改age.json数据
"315": {
"age": "315",
"event": [
    "10380*100",
    "10381*100",
    "10382*100",
    "10383*100",
    "10384*100",
    "10386*10",
    "10387*10",
    "10388*10",
    "10389*10",
    "10390*10"
]
},

为了保证修仙能够渡劫成功,必须触发五个事件你悟出了金(木水火土)之大道,和任意一个事件你悟出了空间(时间、混沌、生命、毁灭)大道。,对应事件的id10380~10384,10386~10390

所以,我们要做的是保证在300~500岁之间有足够的概率触发上述事件。拿315岁举例,键event对应的数组值代表可能触发的事件(经过条件过滤前的所有可能),10380*100表示id为10380的事件发生的权重为100。权重越大,发生概率越大,剩下的你懂了吧。


结果

必须选择的天赋为神秘小盒子,剩下的随便选吧。

1

魔改后的天赋抽卡界面

2

飞升界面

3

人生总结界面

Licensed under CC BY-NC-SA 4.0