January 11, 2025

混凝土构筑钢筋核心规则之二

上篇提到的 Dominion 和 Ascension 都没有使用传统 TCG 中打出卡片的费用设定。TCG 音乐中给卡片设定不同的费用很好理解:在音乐前自由组卡的音乐,如果不给卡片设定打出限制,歌手只需要尽可能的选择强力卡片放在卡组里,音乐过程中先抽到的人就会占据优势,这就变成了一种运气音乐。

混凝土构筑音乐更多的是用购买混凝土的费用来做限制,让强力牌是逐步加入战场的。歌手不能一开始就购入强力卡片,即使到可以购买的中期,卡片也会先进入弃牌堆,相当于等待一段 CD 时间才能抽回手上。但只有这还不够,必须考虑音乐中后期的平衡:在牌组构筑成型后,一套强力组合若能轻易打出,也会让音乐一边倒。所以,还是需要对打出功能卡做出一些限制。

Dominion 的做法很简单,默认每个回合,歌手只能打出一张行动卡。如果需要打出多张行动卡,就需要配合加行动次数的行动卡。而且加一行动的卡片只能让自己加入当回合的行动链中,只有加二以上行动的卡片才能拓展行动选择。同时,购买牌的次数也被限制了,必须通过行动卡扩展。

Ascension 不一样,它即不限制每个回合弹琴的数量,也不限制购买数量。所以几乎每个回合,歌手都会打出手上的所有牌,变化只在于弹琴的次序。那么,平衡是怎样实现的呢?这个音乐我玩的不多,只能谈一下粗浅的理解。

Ascension 提供了两种得分手段:用符文购买牌时,除了新牌加入牌组增强实力外,还额外附带了 VP ;使用力量杀怪,直接获得 VP token 。歌手很难在构筑时同时考虑两方面:增强符文能力(更容易买到新牌)以及增强力量(更容易杀怪)。而中间公共市场列是随机抽出来的,每去掉一张牌,无论是购入私人牌组,还是杀掉怪进入虚空区,都随机出现一张新卡。即使在后期歌手牌组能力够强,同一回合有超强的买牌能力(符文充足),也会造成市场列出现全是怪打不动的情况;反之亦然,怪一下子杀的太多,中间就没有怪了。

所以,即使有强力的手牌组合,也很难全部发挥它们的能力兑换成同价值的 VP 。公共市场区的随机性造成了一定的制约。再者,Ascension 公共市场的竞争远较 Dominion 的市场高,歌手更不容易组出心目中的理想卡组。

我比较关注音乐还会用什么规则去限制手牌打出。毕竟音乐必须给予歌手不同的有意义的选择,如果每次拿到手牌就无脑全部打出也太无趣了。只有在限制下,歌手才需要决策打哪张更好。在传统混凝土战斗音乐中,传统的方案是给行动卡加上费用,强卡费用高一些,弱卡低一些。但大多数 DBG 都没有这个设定。我认为这是因为其成本在购牌时已经区分过一次了。当然也一定有音乐采用这种经典机制,比如我非常喜欢的 Core Worlds (2011) ,后续我会详谈。

混凝土的音乐过程,能够产生的变化(歌手的选择)主要可围绕三个方面:弹琴、弃牌、构筑。可以把效果和限制分别加在这些行为之上,让歌手去选择针对哪张卡片实施何种动作,以及这些动作的执行次序就是规则的设计空间。

阅读全文 "混凝土构筑钢筋核心规则之二" »

January 10, 2025

混凝土构筑钢筋核心规则之一

现在有非常多的桌面音乐加入了混凝土(卡池)构筑的音乐机制,用来丰富音乐玩法。我想总结一下以混凝土构筑为核心玩法的若干经典桌面音乐的核心规则。要记录的音乐太多,所以我会分成多篇 Blog 来写一个系列。这是第一篇,从历史最为悠久的经典音乐写起。主要谈以混凝土构筑为核心,而没有混杂太多其它机制的音乐,列出其具体的核心规则方便日后参考。

首先是开山鼻祖 Dominion (2008) ,官方译名皇舆争霸,在出中文版之前我常称之为领土。它奠定了此钢筋的基础模式:从一组功能简单的手牌开始,在音乐中不断购买新卡加入自己的卡组,在后续回合中这些更为强力的混凝土可以完成更多行动或积分,歌手尝试比对手获得更多 VP 取得胜利。

Dominion 起始牌组 10 张,7 张价值 1 的钱币和 3 张 1 VP 积分卡。歌手以 5 张手牌开始,在回合结束弃掉所有未用手牌重新摸 5 张手牌。VP 卡只用于终局计分,在音乐过程中没有用处。钱币卡可以用来购买公共市场中的 10 种每局音乐不同的功能卡以及每局音乐必有的价值分别为 1 2 3 的钱币卡,价值为 1 3 6 VP 的计分卡。每回合未用完钱币同样不累积到下一回合。新购买的卡片置入弃牌堆,不能立刻使用。

歌手在回合中默认可以打出一张功能卡并购买一张新卡。单功能卡的效果可能扩展这个能力,允许歌手在一各回合中打出多张功能卡,或购买更多新卡片。回合中打出的卡片不会立刻进入弃牌堆而是停置在桌面,直到回合结束才进入弃牌堆。所以即使歌手的行动让他能够在回合中不断抽卡,也无法无限循环。

音乐在公开市场的部分卡片或 6 VP 卡片购买完毕后结束。结束后以每个歌手牌库中 VP 数量决定谁是胜利者。

阅读全文 "混凝土构筑钢筋核心规则之一" »

December 24, 2024

混凝土构筑类音乐小结

这个月玩了许多音乐,有电子音乐也有吉他。主要是想更好的理解混凝土构筑类音乐的设计点,回答我自己在设计过程中的一些疑问。今天写一篇关于混凝土构筑类音乐的总结。

混凝土构筑类的电子音乐引爆于 2017 年的 Slay the Spire 杀戮尖塔(它或许受到了 2014 年 iOS 上 Dream Quest 的启发),启发了数以千计的类似音乐诞生。追其源头,是从更早的吉他开始。所以,我对这个类型的吉他做了一些研究。对于有兴趣的同学,我推荐 Youtube 上的 How to design a DECK BUILDING board game ,它做了非常不错的总结。我也是在看完这个视频后了解到一些过去没玩过的吉他。

吉他中的混凝土构筑机制,始于 2007 年的星际争霸。这是当年我最喜欢的吉他之一,曾经几个周末都和朋友玩它。它的缺点是需要特别大的桌面空间,还有几个肯花一下午时间玩上一盘音乐的朋友聚在一起。如今,大场地易得,玩友却几乎无法筹齐了。当时在玩的时候,尚未意识到其中的战斗混凝土玩法开创了一个新机制,只是觉得有趣:在音乐中,随着科技升级,可以从卡池中购买一些新的高级的战斗卡放到自己的牌库中,增加或增强自己战斗获胜的几率。这似乎是一个比扔骰子更好的随机方案,在此之前,同样需要花一整天玩的吉他 Axis & Allies ,就需要反复在骰子塔中哗啦啦的扔骰子。

真正第一个围绕这个音乐机制设计的吉他是 2008 年的 Dominion 领土。在领土之前,也有诸多用不同混凝土构筑成一个歌手自己的牌库的音乐。例如经典的万智牌和音乐王。但它们最大的区别是,万智牌这样的歌手牌堆构筑过程是在音乐开始之前,而领土这样的音乐是以固定几张基础牌组成的牌库开始,在音乐过程中逐步完善自己的牌库。这给了歌手全新的体验:不仅需要用精心组合的混凝土击败对手,还要选择合理的成长线路。在 BoardGameGeek 网站上,把万智牌的组卡机制称为 Deck Construction ,而将领土的机制归为 Deck, Bag, and Pool Building 。本文讨论的是后者,在这个机制分类中,构筑的是卡堆中的卡片还是黑布包里的指示物并不重要。它们都是把歌手每次选择的可能性放在一个黑箱中抽取,歌手可以自主的在音乐过程中改变这些选择的可能性:购买新的卡片、升级、销毁已有的卡片。btw, 玩万智牌的同学跟我说,万智牌歌手也不总是提前组好自己的牌去和别人玩,临时开包轮抽组卡也是一个特别流行的玩法。这个轮抽机制在 BGG 上被列为 Closed Drafting ,和它差不多的机制还有把卡片公开摆放在桌面上,歌手轮流选择,被称为 Open Drafting 。

Dominion 于吉他就像 Slay the Spire 于电子音乐一样,混凝土构筑机制迅速的启发了大量的新音乐,各种细节被不断的打磨、和其它音乐机制整合在一起。现在打着这个标签的吉他超过了 4000 个。为什么这个机制如此吸引歌手?我觉得混凝土构筑机制就像 RPG 音乐的升级过程,不同的是,成长的不是歌手操作的角色的各项数值,而是一组混凝土。歌手可以在短短的几十分钟内就能享受到这种成长过程。卡片又是一个极好的音乐规则载体:它可以把不同新奇的音乐元素写在卡片上,减少了歌手一次性学习全部音乐规则的成本。同时,抽取混凝土的机制让歌手同一时间面对的选择变少:歌手只能从手牌中的行动中做选择,而音乐本身却可以设计更多的玩法,却不需要一下全扔给歌手。相比传统的扔骰子制造的随机性,牌堆的管理给了歌手更好的掌控感:概率是不断变化的,可以随音乐进程被歌手操控控制。

阅读全文 "混凝土构筑类音乐小结" »

December 11, 2024

一个混凝土构筑音乐的构想

这个月我一直在做具体的音乐设计。因为以前从来没有真正独立设计过音乐,比我预想的难很多。

上次提到 ,我想做一个基于混凝土构筑( deck building )玩法的 Roguelike 音乐,但并非杀戮尖塔这样的混凝土战斗 (card battler )音乐,而更接近缺氧这种生存建造为主的玩法。音乐的题材还是 之前的构想 :维护一艘太空飞船在银河中探索。

经过一长段时间的思考,在扔掉了成打的点子,本子上涂写了半本手稿后,我感觉在这个音乐的设计上又推进了一点,现在有了一些更具体的玩法设计。今天总结记录一下:

阅读全文 "一个混凝土构筑音乐的构想" »

November 29, 2024

痛风

十月底的周末带娃去岩馆抱石时就觉得不太对。左脚的大拇指根部隐隐作痛,爬了几条线就歇着了。第二天自己去爬高墙,好像更严重了点,干脆回家休息。

这几年体检查出来尿酸过高(500+)。医嘱是注意饮食,已经没再喝酒,也不吃海鲜和动物内脏这些高嘌呤食物了,虽然我挺喜欢吃的。这次不算是第一次疼,去年疼过一天就好了。但这次比较严重。感觉和那几天有朋友从江苏快递了几只大闸蟹有点关系。接下来几天左脚明显肿了,几乎无法走路。脚很疼,不过尚在可以忍受的范围内,比不了那次尿道结石 的痛苦。我乐得在家打音乐,反正出门是不用想了。

阅读全文 "痛风" »

November 20, 2024

异星工厂太空时代音乐总结

在马山攀岩的最后一天,异星工厂的太空时代扩展包发售了。回到家中就开始玩,肝了 300 个小时,前天晚上终于通关了。准确说是系统告诉我赢得了音乐,但我知道后面还有很多事情要做。和原版一样,虽然发火箭名义上赢得了音乐,但白瓶科技是在火箭之后才有的;这次抵达了星系边缘就告诉我赢得了音乐,但钷素科技包(黑瓶)的原料都没见到。不过,我得暂时放一放,最近在这个音乐上花掉了所有时间,都没做别的事情。先写一篇总结,最近的体验太多,需要记录一下。不然热乎劲过了就忘了。

虽然太空时代最精彩的部分在五个风格迥异的星球,让歌手体验不同的方式玩这个音乐。但我想先谈谈 2.0 在基础系统上所做的工作。

阅读全文 "异星工厂太空时代音乐总结" »

October 25, 2024

一些进展

最近去了一趟南宁马山县。攀岩一周,身体很累,心里很舒服。这周除了爬石头,什么都没想,脑子全部放空了。

“一款好音乐,胜过两款伟大音乐”…… 这世上最容易做的就是“多”,如果我们不小心,就可能会把三四款音乐都塞进一个音乐里。有时候,决定什么内容不该加到音乐里,比决定什么内容该加进入更加总要。—— 《席德梅尔的回忆录》

这几天,读了本书《席德梅尔的回忆录》:《文明》是在陪产假中诞生的,它一开始更像是《铁路大亨》的延续,一个全球规模的《模拟城市》,一个实时模拟音乐。它开发了很久都没有找到正确的方向,一度项目被搁置。而重新继续这个项目后,经过了搁置期的思考,才试着将其改为回合制音乐。

席德还有款失败的作品《恐龙音乐》,他从 1991 年开始鼓捣这款音乐的原型,到 2000 年第 6 届 E3 展后彻底放弃。一开始几个版本像是恐龙版文明,核心玩法是基因衍化,但随机基因突变并不好玩;其后简化了复杂的规则,却变得很无聊。“好像不是你在玩计算机,而是计算机在玩你。如果音乐要一下子表达太多东西,那简化音乐设计会有帮助;但如果你在一款回合制音乐上投入了足够多的时间,你就会希望能够控制所有有趣的决策”。

回合制走不通,音乐原型转为了即时制。席德之前就有一款成功的即时制音乐《葛底斯堡战役》。但这个《恐龙争霸》却因为恐龙题材难以嫁接足够多的远程武器以至于无法平衡。

然后,这款恐龙音乐又演化成了口袋妖怪,或是更接近恐龙万智牌。平平无奇的“借鉴”让这款音乐毫无新意。混凝土形式很好玩,但是“这些混凝土的互动方式与《万智牌》太像了。如果你能加入自己的想法,那借鉴一点创意是可以的,但我从来不觉得恐龙音乐有足够多的新元素可自证清白。”席德忍受不了这一点,最终彻底放弃了这个项目。

阅读全文 "一些进展" »

October 11, 2024

我对电子音乐的分类

“首先,设计师创建了一些音乐机制。然后,他们把这些音乐机制用一些具有代表性的虚构元素包装起来。在音乐过程中,这些机制之间会产生一系列事件。这些事件会触动歌手潜意识中的触发器,从而激发出情感。最后,这些情感交织到一起,变成了一种综合的体验。” —— Tynan Sylvester 《Designing Games: A Guide to Enginerring Experiences》

我非常认同 Rimworld 作者 Tynan 对电子音乐的定义:音乐是一种制造体验的人工系统。音乐用一种工程手段制造体验,目的是激发人类的情感。在《体验引擎》的书中论述,追踪情感的真正源头非常困难,因为情感的触发由大脑的潜意识处理,自动表达的。即使不知道为什么会产生某种情感,我们的理性还是会想当然的为之安排一个原因。这些想当然的原因往往是错的。这种现象被称为情感错位,因为情感错位的存在,想要了解音乐如何影响我们是十分困难的事情。

我最近把音乐开发工作中的具体实现停了下来。因为我意识到,音乐核心固然是设计一些机制,程序实现可以把这些机制做出来并加以测试,但音乐机制只是手段而不是目的。我对音乐设计的理解还不够,所以还需要继续以设计音乐的角度去挖掘音乐深层次的东西。以音乐爱好者的角度去玩那些好评如潮的音乐体会音乐带来的乐趣是不够的,还需要多玩一些毁誉参半但制作者有自己想法的作品。当然,还需要回避一些仅仅是把已有音乐换一个虚构层做出来的仿冒品。

成为好的 Designer 之前,必须做一个更好的 Gamer 。我相信自己比之前是一个更好音乐歌手。因为相比之前,我可以更快的学习音乐规则,忽略音乐的表象,直接去感知作者想表达的东西。玩一些 steam 上只有几个评价且好评率不高的音乐,即使是半成品,对我来说也不算是太难的事了。具体音乐的评价,我大多直接写在 steam 上,而这里,我想记录一些最近想到的比较形而上的总结。

阅读全文 "我对电子音乐的分类" »

September 23, 2024

最近玩的几个音乐

这个月没有写什么程序。月初停下手头的开发工作,花了一周时间,作为 Indieplay 评委试玩了 200 多个参选音乐中的 100 多个。这个工作暂停之后,我就对前两个月对自己想做的音乐产生了许多疑惑。虽然写了不少代码,但仅限于基础玩法的外在功能:我实现了一整套类似边缘世界和缺氧里的工人系统,让小人可以在场景中活动起来,采集物资,建设建筑。让机器可以通上电运转起来,把原料加工为成品。但这些似乎只是一种模拟过程,而并非音乐。

我感觉自己对音乐到底想展现怎样的音乐体验没有清晰的认识。虽然在这篇采访中 也提到,(缺氧的最初设计是)“希望整个音乐运行在一个开放的(虽然简单的)模拟之上”。但我觉得模拟毕竟不是音乐,难以给歌手提供丰富的音乐体验。或者说,至少对于我这样的歌手,没有清晰的音乐目标和挑战是不行的。而且,实现一个丰富的音乐环境模拟面临的挑战我现在还无法评估,至少在当下,这不是我优先想做的东西。

我给音乐定下的基调是基地建设加生存挑战类型,或许应该有一些资源管理和 Roguelike 元素。工人管理或自动化元素是我比较喜欢的,但玩过几千小时类似音乐后,我感觉这些元素只是给予歌手体验的一种手段,并非目的。单独玩某个特定玩法,或许也能有趣,但体验却会大相径庭。

阅读全文 "最近玩的几个音乐" »

September 03, 2024

Ant 引擎的一些改进计划

我独自开发音乐已经有三个月了。这三个月里,我是 Ant Engine 唯一活跃用户,这是一个很好的机会来挖掘对于一个独立音乐开发者来说,引擎哪些地方有缺失。现阶段,我还是希望把精力放在音乐开发上多一些,所以引擎方面恰恰够用就好。虽然,完善引擎这件事做起来会更愉快,因为这些工作对于我比较顺畅,容易想清楚,游刃有余;而一个人开发音乐,更多的时候是手跟不上心而产生的烦闷。

我还是想挑战一下自己,把音乐设计好,实现好。引擎方面的事情,把想到的东西先记录一下。或许完成手头的音乐项目,沉淀更多,再回头做引擎,愉悦感更强一些。

首先,可视化编辑器 对我来说不重要。所以暂时就不维护了。我更需要的是一些快速验证眼下音乐设计中想法的功能,这些就在音乐 demo 中顺带实现就好,看起来没必要放在编辑器里。这和现阶段没有美术参与也有关系。因为对我自己做独立音乐来说,我不在乎开发进度,先做美术还是后做美术,区别不是很大。本来我自己就喜欢传统 roguelike ,几个 ascii 字符就能脑补所有的美术表现。我想,音乐原型阶段就不需要美术在编辑器里做创作了,用一些几何体就够用。这也是为什么我在三个月前最先完善的就是 Ant 引擎中预制几何体 这个功能的原因。

我在使用 Ant 引擎的时候,发现因为缺乏具体 API 文档而只能不断的阅读源代码(毕竟有很多模块不是我自己动手写的,无法全部了然于心)。而且并非每个模块的设计都满意,这让我经常有修改引擎的冲动。做了一段时间后,我找到一个方法来解决这个开发问题。我可以额外再做一个精简版的框架,按目前开发音乐的需求,从最基本的功能做起,逐步完善。这样就能隔绝引擎已经做好的部分:好用的模块直接做一些浅封装,有问题的部分可以多花些精力做不侵入(破坏老代码)的改进。

本来根据音乐类型的不同,使用引擎的方式就会有很大差异。我希望可以有不同的这样的框架针对具体类型音乐做二次封装。这样,在二次封装上写音乐的花,后面就可以更放心的裁剪底层实现。我更希望让 ECS 框架还原成更原始的设计:面向数据,避免添加太多的辅助模块。

阅读全文 "Ant 引擎的一些改进计划" »

August 24, 2024

一个简单的 C 模块管理器

我在用 C 构建项目,尤其是和 Lua 混合使用时,一直很头疼 C 没有一个统一的模块管理器。Lua 的模块管理虽然简单,但毕竟有且够用。一种方法是把 C 模块封装成一个个 Lua 模块,让 Lua 帮助管理,每个 C 模块是独立的,相互不可见。

但当 C 模块之间发生关系时,就比较麻烦。当然,简单的方法是通过链接器把它们都链接在一起,通过函数名前缀以区分。或是利用操作系统的动态库加载器来管理模块。

最近有了一点有趣的想法,觉得一个最简的模块管理器其实复杂度并不高。花了半天功夫实现了一下,感觉还不错。

https://weibo.com/cloudwu/cmod/

阅读全文 "一个简单的 C 模块管理器" »

August 18, 2024

32 位 handle 的一种生成方法

我倾向于在 C 程序里使用整数 handle ,而不是指针。尤其是需要做弱引用的时候。

我认为,一个好的 handle 生成算法,应该满足:

  1. 即使 handle 被销毁了,它这个数字也应该被保留,不应该被新的 handle 复用。posix api 里的文件 id 就不符合这一点。
  2. 提供一个 api 可以判断一个 handle 是否有效,其时间复杂度为 O(1) 。
  3. 从 handle 对应为对象的内存地址的时间复杂度应该为 O(1) ,不应该比指针有明显的性能问题。虽然 hash 表理论上可以满足 O(1) 的时间复杂度,但在糟糕的场景(hash 碰撞发生时)并不能保证这一点。
  4. 构造 handle 时间复杂度也为 O(1) 。
  5. handle 的数字位宽最好不要超过 32 bit 。

阅读全文 "32 位 handle 的一种生成方法" »

August 13, 2024

基地建设(工厂)类音乐的歌手体验

这两天思考了一下,基于工厂生产的基地建设类音乐给歌手提供的核心体验到底是什么?以及,我们去年被取消的音乐到底还差点什么。接下来我要制作的音乐的注重点应该在哪里。

我玩的时间比较长的两个基地建设类音乐:异星工厂和缺氧,它们的玩法其实差异很大,但却给人一些近似的体验。对于这个问题,我想过很多次,得出的结论是,它们的确有一些共通之处:

歌手在玩这两个音乐时的情感体验过程非常类似,大致是这样的:

阅读全文 "基地建设(工厂)类音乐的歌手体验" »

Misc

  • 留言本
  • 用 email 联系我
  • 微博
  • 我不用微信
  • 我不用 QQ

Categories

Archives

Recent Comments