Skip to content

Latest commit

 

History

History
110 lines (61 loc) · 3.63 KB

feature.md

File metadata and controls

110 lines (61 loc) · 3.63 KB

语言特性

PM3GenScript(简称 PTS)基于 XSE 风格的脚本语言,但进行了诸多优化与魔改,提供了更多人性化的功能。以下是对 PTS 语言特性的详细介绍:

编译器宏 - Macro

编译器宏(简称宏)为以 # 开头、由小写字母构成的伪指令(= 例外)。它不写入 ROM,但指示了编译器在编译期间的行为。

强制换行

宏语句必须以 EOL 结尾(即单行只能存在一条宏)。

宏提升

部分宏在编译期间将被提前解析,以提供对指令语句内定义符号、动态偏移参数等的完备检测,即:宏语句与指令语句之间并不是完全顺序执行的。如:

#org @1
checkflag 0x616
if B_YES goto @2
end

#dynamic 0xA00000
#define B_YES 0x1

#define 所定义的符号将对上方的脚本正常生效,因为它触发了宏提升;#alias 同样有这个效果。

宏合并

#define 对符号的定义、#alias 对指令别名的定义、#dynamic 所指示的动态偏移起始地址等,都能够被同样作用的语句所覆盖而合并。如果在一段脚本中多次定义了同一个符号,将只有最后一条语句生效。

宏包含

#include 能够将其他文件的部分可提升宏合并至当前脚本。它自身也是一条可提升宏。

指令 - Command

指令由小写字母和数字构成,必须以小写字母开头。使用别名时,也支持出现下划线。

每条指令语句都由指令名(1 字节)与它所需的参数顺序组成,指令可以分为以下两种:

  • 基础指令
  • 复合指令

基础指令直接编译为十六进制数据,而复合指令会先转换为多条基础指令,然后再进行编译。

不强制换行

多条指令语句允许写在同一行。

语句内可换行

指令的参数之间允许出现换行。

定义符号 - Symbol

定义符号(简称符号)由大写字母、数字和下划线构成,必须以大写字母开头。符号需要使用 #define 来进行定义,它的值必须是至多 4 字节的数字。

动态偏移 - Dynamic

动态偏移以 @ 开头,由大小写字母、数字和下划线构成。它能够代替任何指针类型的参数,并在写入 ROM 时由程序自动寻找合适的空位。空位的起始地址由 #dynamic 指定。

不可重名

不同脚本块之间不允许使用同一动态偏移名。

不可空指

作为指令内的参数时,它必须指向文件内同名的脚本块。

数字 - Number

数字为十进制或十六进制(以 0x 开头)的数字字面量。

非负整数

数字必须为非负整数,不允许出现负号或小数点。

字符串 - String

字符串为以双引号包裹的字符串字面量。

无效换行

字符串内允许出现换行,但编译不通过。原因是游戏内存在多种不同类型的换行符,程序无法判断 \n 符号究竟指代哪种(\n\l\p),因此在需要时请显式填入(\ 无需转义)。

空字符串

即使将空字符串作为参数,也会在 ROM 中插入一个字节的 0xFF

支持中文

本扩展内置中文字符集,可直接编译或反编译中文文本:

= "[文本色_07]你自己魔怔吧,\n我要去二次元了。"

支持原始数据

如果需要直接插入十六进制的原始数据,可以在字符串中使用 \h 符号后接字节值:

= "[文本色_07]你自己\h09\h9D\h10\h6D吧,\n我要去\h03\hA3\h02\hAE\h0F\hB6了。"

注释 - Comment

PTS 支持 Javascript 风格的单行注释(//)或多行注释(/* */)。