游戏开发论坛

 找回密码
 立即注册
搜索
查看: 4356|回复: 14

我那RPG脚本语言的详细资料,各位斧正,谢谢。

[复制链接]

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
发表于 2007-2-13 20:02:00 | 显示全部楼层 |阅读模式
一.脚本语言语法

1.脚本的格式
第一行必须声明脚本的Tile编号和触发条件
语法: Function Event"Tile编号"_触发条件()
比如: Function Event1_Lookinto()
第0号事件为预设自动执行事件(Autoexec Event),在地图载入后如果第0号事件存在那么首先执行这一事件的脚本

2.触发事件的条件:
Lookinto,在Tile面前按下调查键触发事件
Walkon,停留在Tile上面触发事件
Leave,离开Tile时触发事件

3.脚本语句组成
脚本的语句由关键字和参数组成,参数一般由括号"(",")"括起来或者由空格" "分隔关键字和参数

4.脚本语句参数
以下介绍的脚本语句中用方括号"[","]"括起来的表示可以省略,一般省略的部分都给出缺省值

5.脚本语句参数的类型
String,字符串
Integer,整数
Real,实数
Boolean,布尔
UnsignInteger,没有符号的整数(即不小于0的整数)
UnsignReal,没有符号的整数(即不小于0的整数)
Direction,方向
其他类型的会另外说明

布尔型的变量值只能为:True(真)或者False(假)
方向型的变量值只能为:N(无),U(上),D(下),L(左),R(右)

6.引用变量的方法
引用变量时用单引号"'"将变量括起来比如'变量名'

7.预设全局变量:
.Direction
.Position

8.逻辑运算符
= :等于
< :小于
> :大于
<= :小于等于
>= :大于等于
== :等于(字符串)
!! :不等于(字符串)

9.语句
MsgBox
作用: 显示对话框
语法: MsgBox(Content[,Delay])
参数属性:
  Content,字符串,显示的内容
  Delay,不小于0的实数(单位,秒),内容显示延迟的时间
备注: 其中内容可以由多个#分隔作换行符以分开显示内容,支持变量引用,Delay缺省为0

OpenMap
作用: 切换到另一张地图
语法: OpenMap(MapName,Tile,BeforeKey,AfterKey[,Transition])
参数属性:
  MapName,字符串,切换到的地图的名字
  Tile,不小于1的整数,切换到的地图的位置
  BeforeKey,方向,之前按键请求
  AfterKey,方向,之后发送按键
  Transition,字符串,过度效果
备注: MapName所指的地图为保存在游戏目录下的\Maps\目录中扩展名为cmp的文件,MapName的值不需要包括扩展名, BeforeKey,AfterKey,Transition缺省为空字符串,当Transition为空字符串时,没有地图过渡效果,地图过渡,幕帘:Curtain

Sleep
作用: 产生延迟
语法: Sleep(Delay)
参数属性:
  Delay,不小于0的实数(单位,秒),延迟的时间
备注: 无

SetSpiritPos
作用: 设置精灵的位置
语法: SetSpiritPos(SpiritName,X,Y)
参数属性:
  SpiritName,字符串,精灵的名字
  X,整数,精灵要移动到的位置的横坐标
  Y,整数,精灵要移动到的位置的纵坐标
备注: 可用于将精灵移出地图,地图的最左上角的Tile的坐标分别为,X=1,Y=1,X坐标向右依次递增,Y坐标向下依次递增

SetSpiritVisible
作用: 设置精灵的可见度
语法: SetSpiritVisible(SpiritName,Visible)
参数属性:
  SpiritName,字符串,精灵的名字
  Visible,布尔,是否显示
备注: 无

SetSpiritEnabled
作用: 设置精灵自带脚本的有效性
语法: SetSpiritEnabled(SpiritName,Enabled)
参数属性:
  SpiritName,字符串,精灵的名字
  Enabled:布尔,自带脚本是否有效
备注: 自带脚本的语法在请参阅下面的内容

SetSpiritDirection
作用: 设置精灵的方向
语法: SetSpiritDirection(SpiritName,Direction)
参数属性:
  SpiritName,字符串,精灵的名字
  Direction,方向,精灵要转向的方向
备注: 无

Go
作用: 移动单个精灵
语法: Go(SpiritName,Steps)
参数属性:
  SpiritName,字符串,精灵的名字
  Steps,不小于1的整数,移动的布数  
备注: 无

MoveSpirits
作用: 同时移动多个精灵
语法: MoveSpirits(SpiritName1/SpiritName2.../SpiritNamen/,Steps)
参数属性:
  SpiritName,字符串,精灵的名字
  Steps,不小于1的整数,移动的布数  
备注: 可以先设置好每个精灵的方向然后统一移动

Tip
作用: 在精灵头上显示感叹标记
语法:Tip(SpiritName)
参数属性:
  SpiritName,字符串,精灵的名字
备注: 无

SetActor
作用: 设置所控制的主角的精灵模型
语法:SetActor(SpiritName)
参数属性:
  SpiritName,字符串,精灵的名字
备注: SpiritName所指的精灵模型为保存在游戏的目录下的\Resources\Oams\目录下中扩展名为oam的文件,SpiritName的值不需要包括扩展名

Music.Set
作用: 改变背景音乐
语法: Music.Set(MusicName)
参数属性:
  MusicName,字符串,音乐的名字
备注: MusicName所指的精灵模型为保存在游戏的目录下的\BGM\目录下中扩展名为sound的文件,MusicName的值不需要包括扩展名

Music.Play
作用: 开始播放背景音乐
语法: Music.Play
参数属性: 无
备注: 无

Music.Stop
作用: 停止播放背景音乐
语法: Music.Stop
参数属性: 无
备注: 无

Menu
作用: 显示菜单并根据所选内容跳转到指定的位置
语法: Menu(Width,ItemContent1@Label1/ItemContent2@Label2/...ItemContentn@Labeln/][,ShowContent][,PositionInScreen])
参数属性:
  Width,不小于0的整数,菜单的宽度
  ItemContent,字符串,项目的内容
  Label,字符串,要跳转的位置的标号
  ShowContent,字符串,显示的对话框中的内容
  PositionInScreen,斜方向(LU,LD,RU,RD,LeftUp,LeftDown,RightUp,RightDown),菜单在屏幕上显示的位置
备注: 跳转的标号由":"语句设置,ShowContent缺省为空字符串,当ShowContent为空字符串时,不显示提示框,PositionInScreen缺省为LU

Save
作用: 在暂存区中保存内容
语法: Save(Content)
参数属性:
  Content,字符串,保存的内容
备注: 暂存区为游戏进行中直接存取存档数据的地方,这里的数据为还未写入存档文件中的数据

Exit
作用: 如果保存有制定的内容就退出当前脚本事件
语法: Exit(Content)
参数属性:
  Content,字符串,保存的内容
备注: 无

IfSaveGoto
作用: 根据是否保存有指定的内容决定跳转的位置
语法: IfSaveGoto(Content,Exist,Label)
参数属性:
  Content,字符串,保存的内容
  Exist,布尔,是否存在
  Label,字符串,要跳转的位置的标号
备注: 无

DeleteSave
作用: 删除指定的保存的内容
语法: DeleteSave(Content)
参数属性:
  Content,字符串,保存的内容
备注: 无

PaintImage
作用: 在屏幕上显示图片
语法: PaintImage(PictureName,Delay)
参数属性:
  PictureName,字符串,图片的名字
  Delay,-1或不小于0的实数(单位:秒)
备注: PictureName所指的地图为保存在游戏目录下的\Resources\Gfx\目录中扩展名为gfx的文件,PictureName的值不需要包括扩展名,图片支持bmp,dib,gif,jpg,wmf,emf,ico,cur格式,当Delay为0时显示完图片后等待按键才执行下一条语句,当Delay大于0时等待指定的时间后执行下一条语句,当Delay为-1时显示完图片后不等待直接执行下一条语句,

Cls
作用: 清空屏幕
语法: Cls
参数属性: 无
备注: 屏幕清空后为黑色,但是独立于Menu

Draw
作用: 重新渲染屏幕
语法: Draw
参数属性: 无
备注: 常与Cls搭配使用在MsgBox,Menu和其他移动精灵相关的语句后都要重绘屏幕

PublicDim
作用: 声明全局变量
语法: PublicDim VarName1,VarName2, .. ,VarNamen
参数属性:
  VarName,字符串,变量名
备注: 变量只能在一行内声明,一般在游戏最开始时的事件开头声明,声明的变量全部为字符串,但是可以当变体使用,需要变量的值计算时在相关语句声明变量为数值类型即可

Dim
作用: 声明局部变量
语法: Dim VarName1,VarName2, .. ,VarNamen
参数属性:
  VarName,字符串,变量名
备注: 变量只能在一行内声明,一般在事件开头声明,声明的变量全部为字符串,但是可以当变体使用,需要变量的值计算时在相关语句声明变量为数值类型即可

Destroy
作用: 卸载变量
语法: Dim VarName1,VarName2, .. ,VarNamen
参数属性:
  VarName,字符串,变量名
备注: 变量可在多行内声明,一般在事件开头声明,声明的变量全部为字符串,但是可以当变体使用,需要变量的值计算时在相关语句声明变量为数值类型即可

SaveValue
作用: 在暂存区中指定的位置保存一个变量的值
语法: SaveValue(Position,VarName)
参数属性:
  Position,字符串,暂存区中的位置
  VarName,字符串,变量名
备注: 如果在暂存区中已经存在指定的位置那么用新的值替换原来的旧的值

GetSave
作用: 从暂存区中指定的位置提取一个值并放入一个变量
语法: GetValue(Position,VarName)
参数属性:
  Position,字符串,暂存区中的位置
  VarName,字符串,变量名
备注: 如果在暂存区中找不到指定的位置那么返回空字符串

SetValue
作用: 设置一个变量的值
语法: SetValue(VarName,Value[,Type])
参数属性:
  VarName,字符串,变量名
  Value,表达式,变量值
  Type,变量属性(String,字符串|Number,数字),变量属性
备注: 这个语句有计算的作用,表达式可以包含变量,无论是全局还是局部或者将要改变值的变量,Type缺省为String

Readln
作用: 显示一个输入对话框并将输入的内容放入一个变量
语法: Readln(VarName,Content[,DefaultValue])
参数属性:
  CarName,字符串,变量名
  Content,字符串,显示的提示内容
  DefaultValue,字符串,默认输入的内容(值)
备注: 可以使用一个"#"作为换行符,DefaultValue缺省为空字符串,输入完后确认按回车键

Goto
作用: 跳转到指定的标号位置的
语法: Goto Label
参数属性:
  Label,字符串,要跳转到的标号
备注: 无

:
作用: 设置标号
语法: 标号
参数属性: 无
备注: 可以由数字,字母组成

Jump
作用: 根据表达式的真假来确定跳转的位置
语法: Jump(Expression,Label)
参数属性:
  Expression,字符串,逻辑表达式
  Label,字符串,要跳转到的标号
备注: 表达式中可使用逻辑运算符

If [Else] End If
作用: 根据表达式的真假来确定要执行的语句(分支结构)
语法:
If(Expression)
  SentenceA1
  SentenceA2
  ...
  SentenceAn
[Else
  SentenceB1
  SentenceB2
  ...
  SentenceBn]
End If
参数属性:
  Expression,字符串,逻辑表达式
  Sentence,语句,其他语句
备注: 可以没有Else语句的部分

CallEvent
作用: 执行其他事件
语法: CallEvent(Tile)
参数属性:
  Tile,不小于0的整数,要跳转到的事件的编号
备注: 跳转到其他的事件,目前的事件中剩下的语句忽略不执行

ShiftTile
作用: 将指定的Tile在指定的层指向的额外资源
语法: ShiftTile(Tile,Layout,ExtraTileName)
参数属性:
  Tile,不小于1的整数,指定的Tile的编号
  Layout,层(0|1|2|3),指定的层
  ExtraTileName,字符串,附加的资源的名字
备注: Layout的数值0,1,2,3分别代表BG0,BG1,BG2,BG3

RestoreTile
作用: 恢复指定的Tile在指定的层原来的资源
语法: RestoreTile(Tile,Layout)
参数属性:
  Tile,不小于1的整数,指定的Tile的编号
  Layout,层(0|1|2|3),指定的层
备注: Shift改变的资源都会做记录以便恢复

Collision
作用: 改变指定的Tile的碰撞属性
语法: Collision(Tile,ConlisionValue)
参数属性:
  Tile,不小于1的整数,指定的Tile的编号
  ConlisionValue,
备注: ConlisionValue值1为不可通过,0为可通过

Game.Save
作用: 保存游戏进度
语法: Game.Save
参数属性: 无
备注: 将暂存区的数据写入存档文件

Game.Load
作用: 读取游戏进度并打开进度中的保存的地图
语法: Game.Load
参数属性: 无
备注: 在游戏开始选择继续游戏后使用

Game.LoadState
作用: 读取游戏进度
语法 Game.LoadState
参数属性: 无
备注: 在游戏最开始时使用已确定上次游戏后保存的进度

Game.Over
作用: 预设的游戏结束画面或动画
语法: Game.Over
参数属性: 无
备注: 无

PlayAnimation
作用: 在指定的Tile指定的层上播放动画
语法: PlayAnimation(Tile,Layout,AnimationName,FrameCount,FrameDelay)
参数属性:
  Tile,不小于0的整数,指定的Tile
  Layout,层(0|1|2|3),指定的层
  AnimationName,字符串,动画的名字
  FrameCount,不小于1的整数,总播放帧数
  FrameDelay,不小于0的实数,每帧的间隔(单位:秒)
备注: AnimationName所指的地图为保存在游戏目录下的\Resources\Animations\目录中扩展名为ani的文件,AnimationName的值不需要包括扩展名,这里的ani文件和地图编辑器在\Resources\Tiled\下的an文件格式不一样

Play,BackPlay

二.精灵的脚本语法

1.精灵的脚本的属性有脚本执行标签,脚本内容,精灵移动范围和延迟

2.脚本标签:
顺序(Order)
随机(Random)

3.脚本执行元素
精灵转向:U,D,L,R分别为向上,下,左,右转向
精灵移动:u,d,l,r分别为向上,下,左,右移动
等待:=,等待8个时钟周期

4.当脚本的标签为顺序(Order)时的脚本内容
把精灵的行动按顺序填写脚本在的内容
比如让精灵转一圈后休息: UuRrDdLl====
延迟和范围不用填

5.当脚本的标签为顺序(Random)时的脚本内容

把精灵的行动和执行这种行动的出现的次数填写在脚本的内容
格式:Act1*Num1+Act2*Num2+...Actn*Numn
参数属性:
  Act,脚本执行元素
  Num,总出现的次数
执行到某个元素的概率为: Nump/(Num1+Num2+...+Numn)*100%

精灵移动的范围按范围的左上角和右下角坐标填写
格式: X1-Y1-X2-Y2
比如: 1-1-10-10

1个延迟为8个时钟周期

注: 每个时钟周期大约为25毫秒

6.精灵与事件
每个精灵都可以指向一个事件,当与精灵对话时触发这个事件,建议将精灵事件的编号设为远远大过Tile的总数的数值,以免发生冲突

7

主题

438

帖子

438

积分

中级会员

Rank: 3Rank: 3

积分
438
发表于 2007-2-14 09:10:00 | 显示全部楼层

Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

看上去不错。
不过在lua之中也可以很容易的实现,只要用函数替换那些built-in关键字就行了。自己实现一个好像有点浪费了(当然,自己做一个会很好玩)。
随便说说,请其他有脚本系统实现经验的高手指正。

45

主题

222

帖子

229

积分

中级会员

Rank: 3Rank: 3

积分
229
发表于 2007-2-14 09:44:00 | 显示全部楼层

Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

多人移动语法??这个我忘了。呵呵。。,在RPG中确实有用的地方。
那个变量类型我觉得只需要数字一个类别就够了。所有的long,interger,un,float,double,都是数字。字符串可以考虑,目前想不出有用上字符串变量的地方。

0

主题

243

帖子

357

积分

中级会员

Rank: 3Rank: 3

积分
357
发表于 2007-2-14 13:36:00 | 显示全部楼层

Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

斧正是什么意思呀???

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2007-2-14 18:25:00 | 显示全部楼层

Re: Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

xiaoid: Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

那个变量类型我觉得只需要数字一个类别就...

用不上??要存储角色的名字,妖怪的名字,很多地方都需要呢,进度的标记。

9

主题

688

帖子

688

积分

高级会员

Rank: 4

积分
688
发表于 2007-2-14 18:53:00 | 显示全部楼层

Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

斧正:敬辞,请人修改文章,也作“斧政”

45

主题

222

帖子

229

积分

中级会员

Rank: 3Rank: 3

积分
229
发表于 2007-2-14 21:12:00 | 显示全部楼层

Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

角色名称需要用到变量吗???
进度用一个数字变量就可以了.
你来个例子说说.

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2007-2-14 21:29:00 | 显示全部楼层

Re: Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

xiaoid: Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

角色名称需要用到变量吗???
进度用一个数字变量就可以了.
你来个例子说说.

角色的名称可以自己起的,当然要变量。
进度不只是“完成度”,比如,还有完成了什么任务,执行了什么事件。
比如有两个城,你随便去了一个进度都会增加,但是去了哪个城呢??还需要字符串记录一下。

45

主题

222

帖子

229

积分

中级会员

Rank: 3Rank: 3

积分
229
发表于 2007-2-14 21:34:00 | 显示全部楼层

Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

那个名字嘛, 用系统内置变量就可以了. 用不着脚本变量.
游戏运行进度(就是完成了哪些任务,走过哪些地方等), 就数字来标识吧.

187

主题

6490

帖子

6491

积分

论坛元老

团长

Rank: 8Rank: 8

积分
6491
 楼主| 发表于 2007-2-14 21:37:00 | 显示全部楼层

Re: Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

xiaoid: Re:我那RPG脚本语言的详细资料,各位斧正,谢谢。

那个名字嘛, 用系统内置变量就可以了. 用不着脚本变量.
游戏运行进度(就是完成了哪些任务,走过哪些地方等), 就数字来标识吧.

有很多东西我不能确定的,要保存的东西太多了。
用数字??用了哪些到头来都忘记了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-26 13:05

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表