純美蘋果園

TRPG討論區 => 研討區 => 5版 討論區 => 主题作者是: \星尘/ 于 2024-03-17, 周日 09:50:59

主题: 关于细化士气机制的探讨
作者: \星尘/2024-03-17, 周日 09:50:59
5e dmg中有如下战斗选用项,而其他d20系规则如pf等,也有关于士气的规则。
引用
一些战斗人员可能会在一场战斗对自己不利时逃跑。你可以使用该选用规则来判定怪物和 NPC什么时候决定弃逃。
单个生物可能会在下列情况里选择逃跑:

该生物被突袭。
该生物在战斗中第一次被减少至一半或更少的生命值。
该生物无法在其自己的回合里伤害敌方人员。
一群生物可能会在以下情况里选择逃跑:

团体里所有生物都被突袭。
团体的领袖生命值被降至0,陷入失能,被俘虏或被从战斗中移除。
团体人员减少为原来的一半,而对方却没有人员损失。
为判定单个生物或一群生物是否决定逃走,你可以为该生物或该团体的领袖进行一次DC 10的感知豁免。如果对方势力碾压,则该豁免具有劣势,或者你也可以判定该豁免直接失败。如果团队的领袖因某些原因无法进行豁免,则团队中拥有最高魅力值的生物代为进行该豁免。

若豁免失败,则受影响的生物或团体依最快捷的路线逃跑。若无法实现逃离,则该生物或团体投降。已投降的生物或团体若受其投降方攻击,则双方战斗会重新展开,且此后不太可能再次作逃跑或投降的尝试。

这样的豁免失败在冒险者们看来不一定都是好事。例如,一个食人魔从战斗中逃跑,可能会导致地下城的其他地区敲响警报,或是它可能直接带着角色们要夺取的财宝逃之夭夭。

近期游玩《行商浪人》有所启发,这款采用战锤桌游规则游戏的战斗机制具有一个根据敌我状态或行动变动的士气机制,如果士气过高或过低,都可以发动对应的“英雄壮举”或者“背水一战”。

由此,本人草草撰写了一个简单的规则选用项,希望观者能给出意见。

需要预先说明的是,此规则选用项的使用场景为“配合融洽的长团”或“有一定默契的固桌”,其适用的跑团风格为“英雄奇幻”、“神话奇幻”、“史诗奇幻”或与之类似的故事,但并不适用于“暗黑奇幻”或“阴谋与悬疑”类型。

引用
一支互相熟悉的冒险者小队的战斗热情可以用士气来衡量,而它的积攒或丧失可以一定程度上影响战局。例如,全队齐心协力积攒的,可以扭转战局的绝招,或是背水一战的勇气,甚至是寻找逃离出路的敏锐目光。

身为主角的小队具有一个士气槽,士气的范围为0-30,dm可以适当调整这个范围阈值,以影响士气类技能触发的频率。在战斗开始时,士气的初始值为士气范围的中位数(即15)。

当一个生物的回合开始,且己方小队士气值达到最大时,可以使用极限技,如果低于某个阈值,则可以使用奋战技。dm也可以设置一些用反应触发的士气技能。

使用极限技或奋战技后,士气将回落至初始值重新积攒。

极限技与奋战技具体的效果可以由DM为每个角色量身定制,在本选用规则的末尾会给出一些范例。

一些英勇、取得胜果、控制敌人的行动会激励盟友,提高士气值。
将一个敌人的生命值降低至0(每回合一次,提高2),将敌人生命值降低至一半(每回合一次,提高1),对敌人成功施加状态表中的负面效果(每回合一次,提高1),在d20挑战的最终判定结果骰出20(提高1),一个生物的回合结束时在回合内造成过伤害(提高1),为盟友施加了增益效果(每回合一次,提高1)。

一些怯懦、战斗失利、被控制的行动会积蓄战斗的焦虑,降低士气值。
盟友的生命值被降低至0(每回合一次,降低2),盟友的生命值被降低至0(每回合一次,降低1),盟友被施加状态表中的负面效果(每回合一次,降低1),在d20挑战的最终判定结果骰出1(降低1),一个生物的回合结束时,在回合时进行的攻击检定半数失手(降低1),盟友被施加了减益效果(每回合一次,降低1)。

士气技能示例:

战斗怒吼 [极限技]
需求:士气值达到最大时
消耗:1附赠动作
你以战斗激励盟友,指定一个你能看到的目标,直到你的下一个回合开始前,你和你的盟友对所有能听见你的敌人进行的攻击检定具有优势,且优势始终被应用,无法被劣势抵消。

寻找出路 [奋战技]
需求:士气值低于3
消耗:1动作
鉴于战局不利,你开始寻找撤退的路线,你进行一次调查(智力)或察觉(感知)检定,其DC由dm设定,越难以逃脱的战斗环境,这个DC越高。如果你检定未成功,士气值不会回复,且再降低1,如果你检定成功,你与你的所有盟友可以立刻向远离敌人的方向移动等同于自己行动力的距离,且不会引发借机攻击。被受到速度降低效果影响,但仍保有神志的生物可以立即进行一次具有优势的检定以摆脱对应效应。
若盟友移动的距离路线上有陷入失能状态(但未被擒抱或束缚)的盟友,则可以将其拉走,与自身一起移动。

殉道者的干涉 [奋战技]
先决:拥有提供生命值回复的能力
需求:士气值低于7
触发:射程中的生物即将受到伤害导致其生命值减少至0
消耗:1反应
你的小队落入了危险的境地,你暗暗积蓄着治愈能量,让盟友不会倒地,尽管这会对你造成伤势。你用自己的生命能量保护一个陷入危机的生物,自己承担伤害来拯救它的生命。目标生命值减少至1,而不是0。该次伤害中被阻止的部分全部被转移给你。
作为反应的一部分,你还可以立即激活一次提供生命值回复的能力。如果这个能力是依靠消耗法术位运作的,那么它的有效法术环级等同于你的熟练加值。

这种规则会增加战斗的判定数据,但可以编写骰子插件,或FVTT的MOD来进行辅助。

海豹骰插件↓
代码: [选择]
// ==UserScript==
// @name         士气系统(星尘的DND房规
// @author       星尘
// @version      1.0.0
// @description  士气系统,默认士气为0-20,可用指令如下\n .bp setmax < 整数 > 设置最大士气\n .bp set < 整数 > 直接设定士气\n .bp < 变化 >(如 + 1、-1) 士气变化.bp re 重置士气 .bp 查看当前士气
// @timestamp    1710647207
// 2024-03-17
// @license      Apache-2
// @homepageURL  https://github.com/sealdice/javascript
// ==/UserScript==

// 编写一条自定义指令
// 先将扩展模块创建出来,如果已创建就直接使用
let ext = seal.ext.find('士气');
if (!ext) {
    ext = seal.ext.new('士气', '星尘', '1.0.0');
    seal.ext.register(ext);
}

// 创建指令 .seal
// 这个命令的功能为,显示「抓到一只海豹」的文案;
// 如果命令写 .seal ABC,那么文案中将海豹命名为「ABC」;
// 如果命令中没写名字,那么命名为默认值「氪豹」。
const cmdBp = seal.ext.newCmdItemInfo();
cmdBp.name = 'bp'; // 指令名字,可用中文
cmdBp.help = `士气系统,默认士气为0-20,可用指令如下\n
                .bp setmax <整数> 设置最大士气\n
                .bp set <整数> 直接设定士气\n
                .bp <变化>(如+1、-1) 士气变化
                .bp re 重置士气\n
                .bp help 查看帮助\n
                .bp 查看当前士气`;

let bpMin = 0;
let bp = 10;
let bpMax = 20;
let bpMedian = 10;
let bpMaxConfigMap = new Map();
let bpDataMap = new Map();
let bpMedianMap = new Map();
/* 士气值打印函数,参数为当前士气与最大士气,返回值为美观的士气值字符串 ,例如 (Min<===|========>Max)*/
function printBP(bp, bpMax) {
    let bpStr = '\(Min<';
    for (let i = bpMin; i < bp - 1; i = i + 2) {
        bpStr += '=';
    }
    bpStr += '|';
    for (let i = bp; i < bpMax; i = i + 2) {
        bpStr += '=';
    }
    bpStr += '>Max\)';
    return bpStr;
}




// 主函数,指令解析器会将指令信息解析,并储存在几个参数中
// ctx 主要是和当前环境以及用户相关的内容,如当前发指令用户,当前群组信息等
// msg 为原生态的指令内容,如指令文本,发送平台,发送时间等
// cmdArgs 为指令信息,会将用户发的信息进行分段,方便快速取用
cmdBp.solve = (ctx, msg, cmdArgs) => {
    // 获取第一个参数,例如 .seal A B C
    // 这里 cmdArgs.getArgN(1) 的结果即是 A,传参为 2 的话结果是 B
    let val = cmdArgs.getArgN(1);
    switch (val) {
        case 'help': {
            // 命令为 .seal help
            // 创建一个结果对象,并将 showHelp 标记为 true,这会自动给用户发送帮助
            const ret = seal.ext.newCmdExecuteResult(true);
            ret.showHelp = true;
            return ret;
        }
        case 'setmax': {
            // 检测该群组是否已设置最大士气值,没有则初始化
            if (!(bpMaxConfigMap.has(ctx.group.groupId)) && !(bpDataMap.has(ctx.group.groupId))) {
                bpMaxConfigMap.set(ctx.group.groupId, 20);
                bpDataMap.set(ctx.group.groupId, 10);
                bpMedianMap.set(ctx.group.groupId, 10);
            }
            bpMax = parseInt(cmdArgs.getArgN(2));
            bpMedian = Math.round(bpMax / 2);
            bpMaxConfigMap.set(ctx.group.groupId, bpMax);
            bpMedianMap.set(ctx.group.groupId, bpMedian);
            bpDataMap.set(ctx.group.groupId, bpMedian);
            seal.replyToSender(ctx, msg, `\(最大士气值已设置为${bpMax}\)`);
            return seal.ext.newCmdExecuteResult(true);
        }
        case 'maxset': {
            // 检测该群组是否已设置最大士气值,没有则初始化
            if (!(bpMaxConfigMap.has(ctx.group.groupId)) && !(bpDataMap.has(ctx.group.groupId))) {
                bpMaxConfigMap.set(ctx.group.groupId, 20);
                bpDataMap.set(ctx.group.groupId, 10);
                bpMedianMap.set(ctx.group.groupId, 10);
            }
            bpMax = parseInt(cmdArgs.getArgN(2));
            bpMaxConfigMap.set(ctx.group.groupId, bpMax);
            bpMedianMap.set(ctx.group.groupId, Math.round(bpMax / 2));
            seal.replyToSender(ctx, msg, `\(最大士气值已设置为${bpMax}\)`);
            return seal.ext.newCmdExecuteResult(true);
        }
        case 'set': {
            if (!(bpMaxConfigMap.has(ctx.group.groupId)) && !(bpDataMap.has(ctx.group.groupId))) {
                bpMaxConfigMap.set(ctx.group.groupId, 20);
                bpDataMap.set(ctx.group.groupId, 10);
                bpMedianMap.set(ctx.group.groupId, 10);
            }
            bpMax = bpMaxConfigMap.get(ctx.group.groupId);
            bp = parseInt(cmdArgs.getArgN(2));
            if (bp > bpMax || bp < 0) {
                seal.replyToSender(ctx, msg, `超出解限或为负数,最大士气为${bpMax}`);
                return seal.ext.newCmdExecuteResult(true);
            }

            bpDataMap.set(ctx.group.groupId, bp);
            seal.replyToSender(ctx, msg, printBP(bp, bpMax) + `\n\(士气值变化至${bp}\)`);
            if (parseInt(bp) === parseInt(bpMax)) {
                seal.replyToSender(ctx, msg, `(士气已经上升至最大!)`);
            }
            return seal.ext.newCmdExecuteResult(true);
        }
        case 're': {
            if (!(bpMaxConfigMap.has(ctx.group.groupId)) && !(bpDataMap.has(ctx.group.groupId))) {
                bpMaxConfigMap.set(ctx.group.groupId, 20);
                bpDataMap.set(ctx.group.groupId, 10);
                bpMedianMap.set(ctx.group.groupId, 10);
            }
            bpMax = bpMaxConfigMap.get(ctx.group.groupId);
            bp = bpMedianMap.get(ctx.group.groupId);
            bpDataMap.set(ctx.group.groupId, bp);
            seal.replyToSender(ctx, msg, printBP(bp, bpMax) + `\n\(士气值已重置\)`);
            return seal.ext.newCmdExecuteResult(true);
        }
        default: {
            if (!(bpMaxConfigMap.has(ctx.group.groupId)) && !(bpDataMap.has(ctx.group.groupId))) {
                bpMaxConfigMap.set(ctx.group.groupId, 20);
                bpDataMap.set(ctx.group.groupId, 10);
                bpMedianMap.set(ctx.group.groupId, 10);
            }
            bp = bpDataMap.get(ctx.group.groupId);
            bpMax = bpMaxConfigMap.get(ctx.group.groupId);
            // 如果是类似于-1 +1 *2 /2 这样的算式,就对bp的数值进行计算
            if (val.match(/^[\+\-\*\/]\d+$/)) {

                let op = val.charAt(0);
                let num = parseInt(val.substring(1));
                switch (op) {
                    case '+':
                        bp += num;
                        if (bp > bpMax) bp = bpMax;
                        break;
                    case '-':
                        bp -= num;
                        if (bp < 0) bp = 0;
                        break;
                    case '*':
                        bp *= num;
                        if (bp > bpMax) bp = bpMax;
                        break;
                    case '/':
                        bp /= num;
                        bp = Math.round(bp);
                        break;
                }
                bpDataMap.set(ctx.group.groupId, bp);
                seal.replyToSender(ctx, msg, printBP(bp, bpMax) + `\n\(士气值${op}${num},变化至${bp}\)`);
                if (parseInt(bp) === parseInt(bpMax)) {
                    seal.replyToSender(ctx, msg, `(士气已经上升至最大!)`);
                    return seal.ext.newCmdExecuteResult(true);
                }
                return seal.ext.newCmdExecuteResult(true);
            }
            // 如果为空则直接打印士气值
            if (val === '') {
                seal.replyToSender(ctx, msg, printBP(bp, bpMax) + `\n\(当前士气值为${bp}\)`);
                return seal.ext.newCmdExecuteResult(true);
            }

            // 命令为 .seal XXXX,取第一个参数为名字
            // if (!val) val = '氪豹';
            // // 进行回复,如果是群聊发送那么在群里回复,私聊发送则在私聊回复 (听起来是废话文学,但详细区别见暗骰例子)
            // seal.replyToSender(ctx, msg, `你抓到一只海豹!取名为${val}\n它的逃跑意愿为${Math.ceil(Math.random() * 100)}`);
            // return seal.ext.newCmdExecuteResult(true);
        }
    }
};

// 将命令注册到扩展中
ext.cmdMap['bp'] = cmdBp;
主题: Re: 关于细化士气机制的探讨
作者: shenanigan2024-03-17, 周日 09:55:11
2e有morale相关检定建议
主题: Re: 关于细化士气机制的探讨
作者: Juiblex2024-03-17, 周日 10:09:12
然后牧师有一个根据周围敌人人数成比例提升士气的技能,通过拿专长还能让周围的邪魔生物收到等同于士气提升的光耀伤害

即使在行商浪人里,战士也拥有名为终结技的动作如潮,无论到哪个游戏都是一样自信
主题: Re: 关于细化士气机制的探讨
作者: 调零2024-03-17, 周日 10:51:13
引用
但可以编写骰子插件
主题: Re: 关于细化士气机制的探讨
作者: 白戈2024-03-17, 周日 13:21:17
如果高和低都是收益的话,玩家似乎并不需要刻意在意士气条? :em008
主题: Re: 关于细化士气机制的探讨
作者: \星尘/2024-03-17, 周日 15:34:09
如果高和低都是收益的话,玩家似乎并不需要刻意在意士气条? :em008

战局占优的话用于增加战斗参与感,战局劣势用于放水 :em001
主题: Re: 关于细化士气机制的探讨
作者: 弑君者伊恩2024-03-17, 周日 15:45:49
我觉得士气条作为一个要追踪的数值资源太复杂了,还是做一个三五个档位的士气档(高涨,普通,低落,动摇),在特定条件下进行士气检定改变档位,更易于追踪记录和设计扩展能力
主题: Re: 关于细化士气机制的探讨
作者: shenanigan2024-03-17, 周日 17:49:55
我觉得士气条作为一个要追踪的数值资源太复杂了,还是做一个三五个档位的士气档(高涨,普通,低落,动摇),在特定条件下进行士气检定改变档位,更易于追踪记录和设计扩展能力
写个处理多部署的战阵规则
主题: Re: 关于细化士气机制的探讨
作者: paro2024-03-17, 周日 18:02:21
2e有morale相关检定建议

tsr时代dnd的morale跟楼主想要的士气很明显不是一回事
主题: Re: 关于细化士气机制的探讨
作者: shenanigan2024-03-17, 周日 18:24:13
2e有morale相关检定建议

tsr时代dnd的morale跟楼主想要的士气很明显不是一回事
楼主引用的dmg可选也是对NPC战斗意愿的衡量,辅助决定他们是否会弃战投降或者逃跑,用于PC方有楼上说的持续buff的问题(而且2e规则书直接解释了为什么morale更适用于NPC而非PC:In almost all situations, players should be the ones who decide what their characters do. A DM should never tell a player, "Your character decides he doesn't want to get hurt and runs from the fight," unless that character is charmed and therefore controlled by the DM.
A suggestion that a character might want to retreat, advance, open a chest, or whatever, is all right, but a DM shouldn't force a player character to do something by simply insisting. Only under the most unusual circumstances—charm, magical fear, or other forced effects—should the DM dictate the actions of a player character.
Monsters and NPCs are an entirely different matter, however. The DM makes their decisions, trying to think like each creature or non-player character, in turn.)
主题: Re: 关于细化士气机制的探讨
作者: 亦犬2024-03-17, 周日 19:07:36
我觉得士气条作为一个要追踪的数值资源太复杂了,还是做一个三五个档位的士气档(高涨,普通,低落,动摇),在特定条件下进行士气检定改变档位,更易于追踪记录和设计扩展能力
如果是我来设计的话,我会设计成士气天平/士气差(两边都士气高涨相当于都没高涨)。除了何时进行士气鉴定外并不会规定太多硬性的士气加成,像是士气高涨时进行的所有攻击检定拥有优势这种。而会把更多的精力用在设计依靠士气天平的特质上。【护国军队】:士气差大于+5时,你的豁免鉴定拥有+4加值。
主题: Re: 关于细化士气机制的探讨
作者: paro2024-03-17, 周日 19:28:50
所以说 D&D 的 morale 规则只是用来帮助 DM 决定敌人是否逃跑用的,没有其它的作用,跟楼主的目的八竿子打不着……

如果楼主只是希望这个系统能“战局占优的话用于增加战斗参与感,战局劣势用于放水”(而在战局没有明显倾向的时候则没有影响),那么其实没有必要增加一个额外的数值。D&D 中的 HP 和状态本来就可以体现战局状况,完全可以把敌人的 HP 和己方的 HP 作为那几个玩家能力发动的条件,在敌人的 HP 见底时获得优势,在自己的 HP 见底时给予治疗。或许看起来太强,但楼主的系统起到的不正是这个效果吗?

楼主添加的这个士气值反而可能和战局的实际状况错位,产生很滑稽的效果,除非数值平衡做得非常完美。
主题: Re: 关于细化士气机制的探讨
作者: shenanigan2024-03-17, 周日 19:37:13
所以说 D&D 的 morale 规则只是用来帮助 DM 决定敌人是否逃跑用的,没有其它的作用,跟楼主的目的八竿子打不着……

如果楼主只是希望这个系统能“战局占优的话用于增加战斗参与感,战局劣势用于放水”(而在战局没有明显倾向的时候则没有影响),那么其实没有必要增加一个额外的数值。D&D 中的 HP 和状态本来就可以体现战局状况,完全可以把敌人的 HP 和己方的 HP 作为那几个玩家能力发动的条件,在敌人的 HP 见底时获得优势,在自己的 HP 见底时给予治疗。或许看起来太强,但楼主的系统起到的不正是这个效果吗?

这个我倒觉得可以加些可选团队专长如“背水一战”(在己方减员至一定数目时每回合攻击获得有限次优势)或“明哲保身”(在己方减员至一定数目时增加移速,对方借机劣势等)……整体增加一个士气系统太繁琐了
楼主的要求或许更适合jrpg?我之前写过一个整活的契术师子职魔法少女,职业能力能实现类似的效果……

但用于敌方则开启权把控在DM手里,还能为团中偏好交涉/威吓/幻术/惑控的PL实现“嘴遁”“劝降”“胜于无形”“不战而屈人之兵”的画风
主题: Re: 关于细化士气机制的探讨
作者: Xtoril2024-03-17, 周日 20:13:17
比起Jrpg,士氣系統更多運用在大軍對抗的戰棋類
這種機制的問題就是,單獨計算個人的士氣太繁瑣,計算整個團隊的士氣又容易滾雪球
影響弄得太大,你的隊友被打成肉渣你自己可能得吃懲罰或者嚇到逃跑,影響太小,我浪費那麼多力氣去計算他幹嘛?
勸降對方本身就有態度方面的參考,搞一個士氣系統拿社交系弄到他不能和你打了何不是另外一種追求戰力和搶聚光燈?別忘記社交人主要戲份本來就在戰鬥以外的對人環節
能用一張嘴就解決的問題一開始就不會打起來,用這種理論我用惡毒嘲笑之類精神傷害嘴到你死何不是一種不戰而屈人之兵
主题: Re: 关于细化士气机制的探讨
作者: shenanigan2024-03-17, 周日 22:03:47
比起Jrpg,士氣系統更多運用在大軍對抗的戰棋類
這種機制的問題就是,單獨計算個人的士氣太繁瑣,計算整個團隊的士氣又容易滾雪球
影響弄得太大,你的隊友被打成肉渣你自己可能得吃懲罰或者嚇到逃跑,影響太小,我浪費那麼多力氣去計算他幹嘛?
勸降對方本身就有態度方面的參考,搞一個士氣系統拿社交系弄到他不能和你打了何不是另外一種追求戰力和搶聚光燈?別忘記社交人主要戲份本來就在戰鬥以外的對人環節
能用一張嘴就解決的問題一開始就不會打起來,用這種理論我用惡毒嘲笑之類精神傷害嘴到你死何不是一種不戰而屈人之兵
士气系统原本是这样,所以我在7楼回复“写个处理多部署的战阵规则”,但细看楼主的目的更像jrpg的套路。
你误解了我的意思,我从没说过“强制入社交”或“每战必计算士气”这种话,而是由DM把控这个系统何时开启,起到什么作用(NPC的战意未必有经常是拼死一搏的PC充分,当战斗开始变得不顺利时,他们可能会撤退,惊慌逃跑,甚至投降。每轮战斗中都进行士气检定不仅会拖慢战斗进程,还会导致不平衡和失真,因此什么时机合适需要DM心判),减少垃圾时间的同时增加可选策略与偶然性,同时也以可视化的表达方式提供反馈调控鼓励玩家思考战斗之外的可能。这可不是“社交人”的专利,一个战斗经验丰富的PC多少能意识到这点。完全可以结合玩家具体行动让他们进行基于力量的威吓等,而且不涉及随机要素甚至没必要依赖骰子(当玩家有某些意图但本人不能说清楚该怎样做时数值才有作用)。
我不知道你立的“这种理论”的靶子是什么,我一向认为如果只是把恶毒嘲笑作为一个造成心伤的战斗资源根本算不上“不战而屈人之兵”,因为核心思路还是依赖某个既定程式进行竞争式对抗,这种思路下士气自然只是作为和战斗本质无差的数值系统而存在,也因此就像PF的某些社交遭遇一样,因为被模块化机制代操而沦为机械的掷骰流程,丧失部分灵活性和体验感,也和很多人希望引入士气的初衷相悖,哪怕在故事中它体现为非武力冲突的嘴炮。不知道你能否认识到,同样的客体基于不同认识方式去看显现出来的面向是不同的。
主题: Re: 关于细化士气机制的探讨
作者: shenanigan2024-03-18, 周一 02:38:40
举个例子,在我的理解中士气机制比起这种
引用
DM:这条走廊宽10英尺,往北延伸到黑暗当中
PL:搜查陷阱 rd20+4=16
DM:你在检查前方时发现地板上有一条边长约6英尺的细小的方形裂缝:看起来是个落坑陷阱
PL:我要用盗贼工具解除陷阱
DM:你可以尝试这样做
PL:rd20+7=19
DM:你将陷阱的开关卡死,看上去它暂时不会造成威胁了
更接近
引用
DM:这条走廊宽10英尺,往北延伸到黑暗当中
PL:我往前移动,同时观察地板上是否有裂缝
DM:这是一条破败的石板路,地面上的裂缝多得数不胜数,你要怎么观察呢?
PL:我从背包里面拿出水囊,把一些水倒在地板上,这是否会淌入地板中的某些地方或是显示出某种图样?
DM:没错,地板上某个约6英尺边长的正方形周围积了点水,这个方形比起地板其他部分稍高一些
PL:看着像是个隐藏的落坑陷阱?
DM:没准哦
PL:我可以解除掉吗?
DM:可以,但你打算怎么做?
PL:也许可以卡住机件?
DM:你视线中并没有看到机件,你要怎么样试探到呢?
PL:不知道……它旁边距离墙壁处还有空隙吧?
DM:是的,大概有2英尺宽
PL:我绕过去
DM:你需要保持平衡,尽量不踩到陷阱上,要不进行一次体操检定吧?因为你很谨慎,这里可以算作有优势
PL:rd#20+7=22
DM:你贴着墙壁小心翼翼地走了过去,灵活地绕开了陷阱
进行数值检定是因为这增添了不确定性的趣味,而非被动运行且打包替代了玩家对角色该如何行动的想象,而玩家的表现和具体情境以调整值的方式影响成功的几率
主题: Re: 关于细化士气机制的探讨
作者: NOKO2024-03-18, 周一 13:06:23
這跟 dmg 提及的士氣八竿子打不著啊,撤了吧

這是在做一個水加電額外傷害元素反應的戰鬥機制,如果將這樣的機制常態化,那麼就要面臨被優化的命運——玩家完全忽視有這麼個東西存在直到有人提醒、或是被濫用到大家覺得不好玩。

想要的是像 Final Fantasy 隨著戰況激烈而啟用的特殊能力,這在電玩和桌上其實是相反實作過程。

電玩給予的特殊能力必須在指定時機才能使用,這樣才能讓玩家體驗提前設計好的戰鬥流程。

桌上很顯然不可能直接設計玩家的戰鬥流程,太醜陋了。都是用各種方式來提示玩家選項,像是對方因為自身弱點而對所有傷害易傷。玩家應該隨時都有使用極限突破的能力,並且在玩家認為應該使用的時候使用。

另一方面,士氣值其實可以擴寫成任意目標的計數機制:有一次在競技場要套取觀眾歡心的遊戲經驗,因為打掉怪物所有生命變成次要目標,此時就很需要明確的計數機制來提示場上的熱情度,這樣結合了額外目標和技能挑戰。
主题: Re: 关于细化士气机制的探讨
作者: leofor2024-03-18, 周一 13:47:18
不错的思考
主题: Re: 关于细化士气机制的探讨
作者: LUYE2024-03-18, 周一 20:44:08
我以前写过一个以DMG为基础的士气房规。
一开始士气数值=玩家队伍最高魅力数值,后来发现基本没有精力去追踪数值。
之后改成了3点(等于魅调的话变相需要玩家有一个魅力人,对玩家的队伍构筑颇有影响),并且简化士气变动。
体验还行,但也是老问题,没有精力去追踪数值的变化(哪怕只有1点)。
最后我把这条房规删了 :em006其实我觉得自己写的还不错来着
士气规则带给我的教训总结成一句话:以血量变化为基础的规则确实不需要第二种胜负条件,除非你给玩家看过后他们主动提出想用。

士气
凡兵,有以道胜,有以威胜,有以力胜。讲武料敌,使敌之气失而师散,虽形全而不为之用,此道胜也。审法制,明赏罚,便器用,使民有必战之心,此威胜也。破军杀将,乘闉发机,溃众夺地,成功乃返,此力胜也。王侯如此,[所]以三胜者毕矣。
——《尉缭子》


士气是维持战斗的根本,保持队伍旺盛的士气才能保证队伍的活力。一些能判断局势的生物可能会在战斗对自己不利时选择逃跑,或者在巨大的压力下坚持战斗。但并不是所有角色或敌人都会被士气影响(例如只懂服从命令的不死生物或构装体)。以下规则用于衡量战斗中的士气所带来的影响。

士气点
士气点是衡量士气高低的标准,玩家队伍和敌方队伍都有各自的士气点,团队的士气点上限为3。每次长休后都会回满队伍的士气点。后文列举了一些会改变士气的事件,以及士气点能做的事情。
引用
领袖
领袖默认为魅力最高者,也可以由队伍自行决定,其承担感知豁免维持士气的职责。一个队伍只能有一个领袖。
当士气点跌落到0时,领袖需立刻进行一次DC 15的感知豁免。如果敌人实力碾压或领袖处于恐惧或魅惑状态,则该豁免具有劣势,或者DM也可以判定该豁免直接失败(仅敌人)。如果领袖因某些原因无法进行豁免(如失能,被放逐),则团队中其他拥有最高魅力值的生物代为进行该豁免。
若感知豁免成功,则回复1士气点;若豁免失败,则受影响的生物或团体的所有成员进入士气低迷状态,并记录士气低迷次数+1。

士气低迷                                           
当士气跌落到0,且领袖没能很好调整队伍时,整个队伍都会进入士气低迷状态。士气低迷状态的角色回合开始时有两种选择:
  • 坚持战斗,但是攻击、属性检定获得劣势。
  • 逃跑,若无法逃跑则投降或坚持战斗。
处于士气低迷状态的领袖的回合内,他有以下方式提升队伍的士气点:
  • 以一个动作进行一次契合实际场景和扮演的技能检定*,将检定结果除以10(向下取整),回复对应的士气点(最大为2)。
    *通常为魅力系技能,但偶有例外(如以宗教名义的战斗中可用智力(宗教)代替)
  • 回合结束时,进行一次DC为10的感知豁免,若成功则回复1士气点。
无论选择哪种方式,回合内只有一次成功回复士气点的机会。如果领袖的回合结束后士气点仍为0,那么该团队继续保持士气低迷状态,并且士气低迷次数+1,该团队领袖在下一回合开始才能重新获得回复士气值的机会。
已投降的生物或团体若受其投降方攻击,则双方战斗会重新展开,且此后不太可能再次作逃跑或投降的尝试。
若士气低迷次数达到3,则该生物或团队视为士气崩溃且无条件投降。士气低迷次数会在长休后重置。

士气下降事件                                       
  • 团队所有生物被突袭。-1士气点
  • 团队触发危险等级的陷阱。-1士气点
  • 团体领袖生命值被降至0,被俘虏或被从战斗中移除,该项每场战斗仅生效一次。-1士气点
  • 团体昏迷(自然睡眠除外)和死亡角色达到满编制的一半(向上取整),该项每场战斗仅生效一次。-1士气点
  • 任一角色回合开始时,所属团体一半(向上取整)以上的角色处于恐慌、魅惑、失能状态,该项每战斗轮仅生效一次。-1士气点
  • 剧情或特殊事件可能会触发的效果。

士气回复事件                                       
  • 短休。+1士气点
  • 剧情或特殊事件可能会触发的效果。

战术指挥                                           
队长可以消耗士气点进行下文中列出的传奇动作,此传奇动作必须在另一生物结束其回合时使用,目标必须为60尺范围内可见的其他盟友。盟友可以选择是否听从指挥并执行相应行动。如果战术指挥会导致士气点降至0   以下,那么无法执行战术指挥。只有上下级关系明确的敌人会使用战术指挥。
  • 疾驰(消耗1士气点):你指挥一个盟友疾驰,该盟友可以消耗反应并移动不超过该盟友速度两倍的距离。
  • 撤退(消耗1士气点):你指挥一个盟友撤退,该盟友可以消耗反应并移动不超过该盟友速度的距离,这次移动不会引发借机攻击。
  • 进攻(消耗1士气点):你指挥一个盟友进攻,该盟友可以消耗反应并对其攻击范围内的单一生物或物件进行一次武器攻击,这次攻击检定获得优势。。
  • 坚守(消耗1士气点):你指挥一个盟友坚守,该盟友可以消耗反应并执行回避,且获得你的等级+你的魅力调整值的临时生命值。
  • 重振旗鼓(消耗X士气点):你指挥一个盟友重振旗鼓,该盟友如果被X种豁免成功就能结束的效应所影响,其立刻进行X次豁免检定以对抗这些效应。

特殊士气事件                                       
因为某种原因(如领袖的发言或行动),所有角色决定死战。士气点最低为1,士气低迷时无法选择逃跑或投降,不会士气崩溃,持续战斗到全体死亡或战斗胜利。特殊士气事件只会在某些剧情中有条件的触发。
主题: Re: 关于细化士气机制的探讨
作者: Alanryan2024-03-18, 周一 23:54:50
1,战斗-逃跑类的士气不适用于玩家角色。战斗中在不被法术或能力影响的情况下主动选择逃跑还是战斗属于扮演范畴,加入士气等于限制扮演,直接从根本上有违角色扮演游戏的原则
2,这类士气可以用于敌人,但在人怪分离、注重故事与场景的今天,这也完全可以dm根据情况决定,加入规则没有必要
3,会激发能力的士气在战斗中难以追踪,在短促的战斗中会挤压原有的职业能力,且因为变化激烈、这回合不用下回合就可能作废,实际反而会变相削减玩家的选择数量。

如果想表现“乘胜追击”或“背水一战”的效果,更合适的机制是英雄点,让pc去决定其使用时机
主题: Re: 关于细化士气机制的探讨
作者: WENZI0w2024-03-19, 周二 09:59:38
想法很好,但我很怀疑实际效果会不会那么美好。如果士气只对玩家角色有效,5e这种战棋类游戏先让对方减员或打出控制就已经很占据优势了,再获得士气只会让雪球越滚越大。如果对双方都有效,它也体现不出明显的战术优势,因为一方有高士气技能几乎也就代表另一方能用低士气技能。