开源三国杀标准规范
1.基本框架
核心架构:游戏代理,用户代理
核心模型:回合、卡牌、牌堆与弃牌堆、卡牌区域
核心系统:阵营系统,角色系统,技能系统
核心流程:距离计算流程,体力变化结算流程,死亡结算流程
①游戏代理
游戏代理是一切系统的核心,是一切流程的结算者,是一切事件的观察者和接受者。
A.执行回合
游戏开始时,游戏代理从一号位,逆时针开始执行回合。
关于位次:根据实现模式分配位次,如身份局一般以主公身份为一号位次;1V1模式以先手为一号位次。
B.流程结算
按照下文提到的,满足某一条件后进入相应的流程结算,在流程结算中可能会触发其他条件插入其他结算,如:当A角色使用AOE时,B角色受到此AOE伤害,体力值-1,变为0,此时,在此AOE结算中插入濒死结算。
上述结算由游戏代理执行,代理在满足某一结算条件时把需要的结算推入结算栈,结算总是从栈顶开始,至栈尾结束。每一个结算过程必须有明确唯一地进入条件与退出条件;一旦进入结算,必须提供任何情况下退出结算的方案。
C.事件系统
游戏代理在满足某一条件后,发射相应事件,在事件中,游戏代理必须提供必要的参数供事件代理获取,如“当一名角色受到伤害时”,游戏代理必须在发射的事件中描述伤害来源、目标角色、伤害点数、伤害属性等。
用户代理是所有事件的监听者之一,除非某些事件规定了更好级别的权限。
②用户代理
用户代理负责接收来自游戏代理的事件信息,响应游戏代理的要求并为用户提供交互。
2.核心模型
①回合模型
每名用户回合都包含相同的几个阶段,默认地,一个回合应该包含准备、判定、摸牌、出牌、弃牌、结束六个阶段;牌的效果或技能效果允许插入或跳过新的阶段,也允许新建一个不同的回合模型,包含不同的阶段。
每个阶段都规定了默认行为,如摸牌阶段进行摸牌。一般地,在此阶段的默认行为结束后即进行下一个阶段,当一个阶段不包括任何默认行为时,什么也不做就结束了,但没有特殊规定,此阶段不能视为被跳过,如准备阶段。
出牌阶段被视为一个特殊的阶段,它没有默认行为,但除非用户代理发送结束此阶段的消息,游戏代理将一直处在等待状态,直到用户代理做出响应。游戏代理必须检测此阶段空闲时间点可主动使用的牌并告知用户代理。
游戏代理总是根据用户代理的数量和顺序构造一个回合栈,每一个回合属于一名指定的用户代理,然后依次执行出栈,当一个回合执行结束后便取出下一个回合执行,当回合栈中没有了回合,则视为一轮结束,如果游戏没有结束,进行下一轮,如此循环。角色的技能可以影响回合执行的顺序,例如角色“刘禅”的【放权】,即直接入栈一个新的回合来达到额外回合的效果。
②卡牌模型
一张牌必须具备以下属性:
牌类型(type)
牌类(class)
牌(instance)
可用时机 [{
默认目标
目标可选范围
目标可选数量
目标角色须响应
使用者须响应
是否须重复响应
响应与未响应者结算
结算完成回收
结算效果
装备区距离
装备区效果
判定区效果
判定区结算完成回收
},…
]
3.角色技能
①技能规范
- 所有技能都必须有一个明确的触发时机,或隐含一个明确的触发时机。如【武圣】,虽然没有指定明确时机,但使用或打出“杀”的时机是明确的。
- 所有技能均需要避免循环发动,如初版【激将】,没有规范发动限制的条件下可能会出现无限激将的情况。
- 1体力 = 2张未知的牌 = 1张武器牌;
②技能涉及范围
- 转化牌,即将X张A牌当一张B牌使用。
- 视为结算X牌,如夏侯渊跳过出牌阶段视为使用【杀】;“视为”结算必须有明确的目标,除非这张牌存在默认的目标,在没有明确说明时,目标选择不必遵循此牌选择目标的限制。如“你视为对该角色使用一张【杀】”。这里的“该角色”不必须处于攻击范围内。再如“你视为使用一张【南蛮入侵】”,因为【南蛮入侵】存在默认目标(场上出你以外所有存活的角色),不必明确描述。如你希望一张“视为”使用的牌按照默认的目标选择规则可以如此描述:“你视为对一名合理的目标使用一张基本牌。”。“视为使用”与“不能使用”并不冲突,因为不能使用的防止时机是此牌合理的使用时机,但“视为使用”不受这个时机的限制。
- 距离计算的加成,如【马术】、【天义】等。
- 造成伤害。不太推荐直接通过技能造成伤害的设计,可以改为“视为”使用一张可造成伤害的牌,如【离间】(视为使用“决斗”)。因为直接造成伤害往往会跳过游戏的核心——卡牌管理,当这类技能泛滥后,将影响游戏体验。
- 防止伤害。
- (某类的、某颜色的、某花色的)牌对你无效。
- 不能被指定为目标。
- 摸牌,弃牌,令X名角色摸牌,令X名角色弃牌。
- 流失体力。
- 将一张牌移出游戏。
- 本回合内存在X效果。
- 伤害转化,如改变伤害属性、点数、目标、来源等。
- 获得技能,失去技能,如【化身】、【豹变】。
- 改变自己的体力上限。但不推荐永久改变其他角色的体力上限,这将会造成一些不平衡。
- 翻面。
- 进行判定。
- 要求使用一张你指定的牌。
- 在一个判定生效前改变判定。
- 发起、要求发起、被发起拼点。
- 暗置一张牌,询问它的种类、颜色、花色、点数等。
- 观看、展示、重新排列牌堆、弃牌堆,将牌堆的一张牌(在合理的时机)直接使用。
- 请求其他角色替你使用、打出一张牌。
- 为一张牌增加或减少使用的目标。
- 改变一张牌指定的目标,将一张牌的使用者视为另一名角色。
- 将X牌视为Y,可以是花色、牌别、点数等。
- 改变角色势力、性别。
- 跳过一名角色的回合(阶段),为一名角色增加一个额外的回合(阶段)。
禁止的设计:
- 改变场上座次。
- 改变击杀奖惩规则。
- 改变身份、阵营。
- 移除场上的一个区域,可改为禁止使用某一类牌,禁止成为某一类牌的目标等达到类似的效果。
- 把一种结算改为另一种结算。
- 禁止失去X牌,禁止跳过阶段/回合。可以使用令X无效等类似的描述来达到类似的效果。
设计的注意事项:
- 发动时机。
- 结算嵌套。
- 与已有技能冲突。
———— 以上是规范节选。
1.基本框架
核心架构:游戏代理,用户代理
核心模型:回合、卡牌、牌堆与弃牌堆、卡牌区域
核心系统:阵营系统,角色系统,技能系统
核心流程:距离计算流程,体力变化结算流程,死亡结算流程
①游戏代理
游戏代理是一切系统的核心,是一切流程的结算者,是一切事件的观察者和接受者。
A.执行回合
游戏开始时,游戏代理从一号位,逆时针开始执行回合。
关于位次:根据实现模式分配位次,如身份局一般以主公身份为一号位次;1V1模式以先手为一号位次。
B.流程结算
按照下文提到的,满足某一条件后进入相应的流程结算,在流程结算中可能会触发其他条件插入其他结算,如:当A角色使用AOE时,B角色受到此AOE伤害,体力值-1,变为0,此时,在此AOE结算中插入濒死结算。
上述结算由游戏代理执行,代理在满足某一结算条件时把需要的结算推入结算栈,结算总是从栈顶开始,至栈尾结束。每一个结算过程必须有明确唯一地进入条件与退出条件;一旦进入结算,必须提供任何情况下退出结算的方案。
C.事件系统
游戏代理在满足某一条件后,发射相应事件,在事件中,游戏代理必须提供必要的参数供事件代理获取,如“当一名角色受到伤害时”,游戏代理必须在发射的事件中描述伤害来源、目标角色、伤害点数、伤害属性等。
用户代理是所有事件的监听者之一,除非某些事件规定了更好级别的权限。
②用户代理
用户代理负责接收来自游戏代理的事件信息,响应游戏代理的要求并为用户提供交互。
2.核心模型
①回合模型
每名用户回合都包含相同的几个阶段,默认地,一个回合应该包含准备、判定、摸牌、出牌、弃牌、结束六个阶段;牌的效果或技能效果允许插入或跳过新的阶段,也允许新建一个不同的回合模型,包含不同的阶段。
每个阶段都规定了默认行为,如摸牌阶段进行摸牌。一般地,在此阶段的默认行为结束后即进行下一个阶段,当一个阶段不包括任何默认行为时,什么也不做就结束了,但没有特殊规定,此阶段不能视为被跳过,如准备阶段。
出牌阶段被视为一个特殊的阶段,它没有默认行为,但除非用户代理发送结束此阶段的消息,游戏代理将一直处在等待状态,直到用户代理做出响应。游戏代理必须检测此阶段空闲时间点可主动使用的牌并告知用户代理。
游戏代理总是根据用户代理的数量和顺序构造一个回合栈,每一个回合属于一名指定的用户代理,然后依次执行出栈,当一个回合执行结束后便取出下一个回合执行,当回合栈中没有了回合,则视为一轮结束,如果游戏没有结束,进行下一轮,如此循环。角色的技能可以影响回合执行的顺序,例如角色“刘禅”的【放权】,即直接入栈一个新的回合来达到额外回合的效果。
②卡牌模型
一张牌必须具备以下属性:
牌类型(type)
牌类(class)
牌(instance)
可用时机 [{
默认目标
目标可选范围
目标可选数量
目标角色须响应
使用者须响应
是否须重复响应
响应与未响应者结算
结算完成回收
结算效果
装备区距离
装备区效果
判定区效果
判定区结算完成回收
},…
]
3.角色技能
①技能规范
- 所有技能都必须有一个明确的触发时机,或隐含一个明确的触发时机。如【武圣】,虽然没有指定明确时机,但使用或打出“杀”的时机是明确的。
- 所有技能均需要避免循环发动,如初版【激将】,没有规范发动限制的条件下可能会出现无限激将的情况。
- 1体力 = 2张未知的牌 = 1张武器牌;
②技能涉及范围
- 转化牌,即将X张A牌当一张B牌使用。
- 视为结算X牌,如夏侯渊跳过出牌阶段视为使用【杀】;“视为”结算必须有明确的目标,除非这张牌存在默认的目标,在没有明确说明时,目标选择不必遵循此牌选择目标的限制。如“你视为对该角色使用一张【杀】”。这里的“该角色”不必须处于攻击范围内。再如“你视为使用一张【南蛮入侵】”,因为【南蛮入侵】存在默认目标(场上出你以外所有存活的角色),不必明确描述。如你希望一张“视为”使用的牌按照默认的目标选择规则可以如此描述:“你视为对一名合理的目标使用一张基本牌。”。“视为使用”与“不能使用”并不冲突,因为不能使用的防止时机是此牌合理的使用时机,但“视为使用”不受这个时机的限制。
- 距离计算的加成,如【马术】、【天义】等。
- 造成伤害。不太推荐直接通过技能造成伤害的设计,可以改为“视为”使用一张可造成伤害的牌,如【离间】(视为使用“决斗”)。因为直接造成伤害往往会跳过游戏的核心——卡牌管理,当这类技能泛滥后,将影响游戏体验。
- 防止伤害。
- (某类的、某颜色的、某花色的)牌对你无效。
- 不能被指定为目标。
- 摸牌,弃牌,令X名角色摸牌,令X名角色弃牌。
- 流失体力。
- 将一张牌移出游戏。
- 本回合内存在X效果。
- 伤害转化,如改变伤害属性、点数、目标、来源等。
- 获得技能,失去技能,如【化身】、【豹变】。
- 改变自己的体力上限。但不推荐永久改变其他角色的体力上限,这将会造成一些不平衡。
- 翻面。
- 进行判定。
- 要求使用一张你指定的牌。
- 在一个判定生效前改变判定。
- 发起、要求发起、被发起拼点。
- 暗置一张牌,询问它的种类、颜色、花色、点数等。
- 观看、展示、重新排列牌堆、弃牌堆,将牌堆的一张牌(在合理的时机)直接使用。
- 请求其他角色替你使用、打出一张牌。
- 为一张牌增加或减少使用的目标。
- 改变一张牌指定的目标,将一张牌的使用者视为另一名角色。
- 将X牌视为Y,可以是花色、牌别、点数等。
- 改变角色势力、性别。
- 跳过一名角色的回合(阶段),为一名角色增加一个额外的回合(阶段)。
禁止的设计:
- 改变场上座次。
- 改变击杀奖惩规则。
- 改变身份、阵营。
- 移除场上的一个区域,可改为禁止使用某一类牌,禁止成为某一类牌的目标等达到类似的效果。
- 把一种结算改为另一种结算。
- 禁止失去X牌,禁止跳过阶段/回合。可以使用令X无效等类似的描述来达到类似的效果。
设计的注意事项:
- 发动时机。
- 结算嵌套。
- 与已有技能冲突。
———— 以上是规范节选。