FPI 脚本
一位维基教科书用户认为此页面应该拆分为更小的页面,包含更窄的子主题。 您可以通过将此大页面拆分为更小的页面来提供帮助。请确保遵循命名策略。将书籍划分为更小的部分可以提供更多关注,并允许每个部分做好一件事,这将使每个人受益。 |
FPI 脚本语言是一种简单的基于触发的人工智能语言,用于在游戏中对对象进行编程。它包含简单的 if/then 语法以及预定义的条件语句和命令列表。
- condition,[第二个条件(可选)]:action,[第二个动作(可选)]
语句以冒号开头。紧随其后是条件,用于测试某件事是否为真。如果有多个条件,则用逗号隔开。列出所有条件后,将有另一个冒号。第二个冒号将条件与操作隔开。如果您熟悉其他编程语言,这类似于 IF THEN 条件语句。
if(CONDITION) { ACTION }
翻译成
- :CONDITION: ACTION
还有注释来帮助您组织脚本,注释以分号开头,例如
FPI 脚本可用于多种操作,包括对象行为和人工智能脚本。有关每个子句的更详细描述和示例,请参见FPI 使用示例
这是 FPI 脚本最常见的用途之一。下面的脚本显示了一个简单的伤害区域脚本,每次玩家进入伤害区域时,它都会从玩家那里扣除 5 生命值。
- 人工智能脚本
- 描述
state0,plriswithin=zone,plraddhealth=-5
请注意代码开头处的“state0 命令。状态就像积木 - “state0 始终是代码段中的第一个状态。它是主要基础。其他代码行都是从 “state0” 命令调用的。
人工智能行为告诉 NPC 或玩家如何表现。除了主要动画之外,所有内容都是建立在 AI 脚本之上的。与对象行为脚本一样,代码始终必须以“;人工智能脚本”命令开头。没有它,您的代码将无法运行。另一个变化是“desc”命令。
"从对象行为脚本中获取"
- 人工智能脚本
- 描述
- 人工智能脚本
- desc () = 跟踪并射击
请注意 desc 后的命令。“跟踪并射击”告诉角色要采取的操作。不言自明。
在第二部分中,我将进一步解释 rotateplr 命令,以及如何将其运用到实际应用中。
- ACTIVATED=X 当实体的激活值等于 X 时为真
- ALPHAFADEEQUAL=X 当 alpha 值等于 X 时为真
- ALWAYS 始终为真
- ANIMATIONOVER=X 当动画 X 完成时为真
- ANYFURTHER=X 当不在 X 个四分之一瓦片范围内时为真
- ANYWITHIN=X 当任何其他实体在 X 个四分之一瓦片范围内移动时为真
- ASSOCIATED=X 当实体与玩家关联(抬起)时为真
- ENTITYWITHINZONE 当实体在触发区域内时为真
- FRAMEATEND=X 当动画 X 结束时为真
- FRAMEATSTART=X 当动画 X 开始时为真
- FRAMEBEYOND=X Y 当动画 X 超过帧 Y 时为真
- FRAMEWITHIN=X Y 当动画 X 在帧 Y 内时为真
- HEADANGLEGREATER=X 当头部角度大于 X 时为真
- HEADANGLELESS=X 当头部角度小于 X 时为真
- HEALTH=X 当生命值等于 X 时为真
- HEALTHLESS=X 当生命值小于 X 时为真
- IFWEAPON=X 当实体使用的武器处于准备状态且 X 为 1 时为真
- LOSETARGET=X 当实体在 X 次尝试后卡住时为真
- NEARACTIVATABLE=X 当实体即将被激活时为真
- NEVER 从不为真
- NEWWEAPONCANBESEEN=X 当实体可以看到更好的武器时为真
- NOISEHEARD=X 当实体从场景中听到广播噪音时为真
- PLRALIVE=X 当玩家活着且 X 为 1 时为真
- PLRCANBESEEN 当玩家可见时为真
- PLRCANNOTBESEEN 当玩家不可见时为真
- PLRDISTFURTHER=X 当玩家距离超过 X 个单位时为真
- PLRDISTWITHIN=X 当玩家距离小于 X 个单位时为真
- PLRELEVFURTHER=X 当玩家在垂直方向上不可见 X 度时为真
- PLRELEVWITHIN=X 当玩家在垂直方向上可见 X 度时为真
- PLRHASKEY=X 当玩家按下以值 X 表示的键时为真
- PLRHIGHER=X 当玩家比实体高 X 个单位时为真
- PLRINGUNSIGHT=X 当实体的枪口瞄准玩家时为真
- PLRUSINGACTION=X 当玩家执行使用操作时为真
- PLRWITHINZONE 当玩家在触发区域内时为真
- QUANTITY=X 当数量等于 X 时为真
- RANDOM=X 当 0 到 X 之间的随机值等于 1 时为真
- RAYCAST=X Y 当射线从 X 到 Y 个单位击中前方的东西时为真
- RAYCASTBACK=X 当射线从 X 到 Y 个单位击中后方的东西时为真
- RAYCASTUP=X 当射线从 X 到 Y 个单位击中上方的东西时为真
- REACHTARGET=X 当实体到达目标时为真
- SHOTDAMAGE=X 当受到的伤害超过值 X 时为真
- SPEED=X 当速度等于 X 时为真
- STATE=X 当存储在 FPI 脚本中的值等于 X 时为真
这些是条件词,如果所有条件都为真,它们将执行操作
- WAYPOINTSTATE=X 当航点状态值等于 X 时为真
- 状态 0 表示实体尚未开始跟踪航点
- 状态 1 表示实体正在寻找最近的航点标记作为起点
- 状态 2 表示实体正在沿着航点线跟踪其当前航点标记
- 状态 3 表示实体已到达航点标记,需要决定下一步行动
- 状态 4 表示实体已到达航点标记,它会分裂成多个其他方向
- 状态 5 表示实体已到达当前航点结构的末尾,需要做出决策
注意:状态 999 表示实体已置于零航点模式,在这种模式下,实体会简单地忽略航点。
- ANYFURTHER=X 当任何实体距离它超过 X 个单位时为真
- ANYWITHIN=X 当任何实体距离它小于 X 个单位时为真
- ANYWITHINZONE 当任何实体在它的区域内时为真
- CANTAKE 当玩家可以收集实体时为真
- ESCAPEKEYPRESSED=X 当按下 Escape 键时为真
- HUDEDITDONE=X 当使用“可编辑”的 HUD 项目 X 时为真
- HUDHAVENAME 当未输入玩家名称时为真
- HUDSELECTIONMADE=X 当用户点击 HUD 按钮 X 时为真
- IFMARKER=X 当场景中存在实体先前放置的标记时为真
- IFPLRTRAIL=X 当存在玩家留下的轨迹时为真
- NORAYCASTUP=X Y 当向上 X 到 Y 没有碰撞时为真
- PLRHEALTHGREATER=X 当玩家生命值大于 X 时为真
- PLRHEALTHLESS=X 当玩家生命值低于 X 时为真
- SCANCODEKEYPRESSED=X 当 X=按下键的键码时为真。例如:SCANCODEKEYPRESSED=5 当按下 Tab 键时为真
- TIMERGREATER=X 当内部 FPI 计时器超过 X 毫秒时为真
- ANIMATE=X 自动播放动画 X
- DECFRAME=X 在动画 X 中减少一帧
- DESTROY 销毁实体
- FLOATRATE=X 使实体以 X 的悬停速度在空中漂浮
- FORCEBACK=X 以 X 的倍数对实体施加向后力
- FORCEBOUNCE=X 对实体施加力,使其以 X 的倍数弹回
- FORCEFORE=X 以 X 的倍数对实体施加向前力
- FORCELEFT=X 以 X 的倍数对实体施加向左力
- FORCERIGHT=X 以 X 的倍数对实体施加向右力
- FREEZE=X 阻止实体移动
- INCFRAME=X 在动画 X 中增加一帧
- MOVEBACK=X 将实体向后移动 X 个单位
- MOVEFORE=X 将实体向前移动 X 个单位
- MOVEUP=X 将实体向上移动 X 个单位
- NONE 无操作
- RESETHEAD 如果实体有头部,则重置头部角度
- ROTATEHEAD=X 将实体的头部旋转 X 度
- ROTATEHEADRANDOM=X 以 X 度的随机角度旋转实体的头部
- ROTATEIY=X 围绕 Y 轴对实体进行 X 度的增量旋转
- ROTATETOPLR 将实体旋转以面向玩家
- ROTATEY=X 将实体绕 Y 轴旋转 X 度
- RUNFPI=X 按名称 X 运行另一个 FPI 脚本(即,appear1.fpi)
- RUNFPIDEFAULT=X 运行默认 FPI 脚本,X 值为 (0-初始化、1-主脚本、2-结束)
- SETFRAME=X 设置动画 X 的起始帧
- SPINRATE=X 以 X 的速度绕 Y 轴旋转实体
- STATE=X 将内部变量 State 的值设置为 X
- SUSPEND 永久禁用实体,并保持可见
关于提供的角色,内置了可以播放的动画。
- 0 = 生成
- 1 = 空闲
- 2 = 缓慢移动
- 3 = 左侧横移
- 4 = 右侧横移
- 5 = 快速移动
- 6 = 重新装填武器(或投掷)
- 10 = 攀爬
- 11 = 正面冲击
- 12 = 正面反弹
- 13 = 正面起身
- 14 = 背面冲击
- 15 = 背面反弹
- 16 = 背面起身
- 17 = 左侧冲击
- 18 = 左侧反弹
- 20 = 右侧冲击
- 21 = 右侧反弹
- 31 = 蹲姿空闲
- 32 = 蹲姿缓慢移动(相同)
- 33 = 蹲姿左侧横移(相同)
- 34 = 蹲姿右侧横移(相同)
- 35 = 蹲姿快速移动(相同)
- 36 = 蹲姿重新装填武器(或投掷)
- 40 = 自由形式空闲
- 41 = 自由形式移动
- 50 = 武器生成
- 51 = 武器空闲
- 52 = 武器缓慢移动
- 53 = 武器左侧横移
- 54 = 武器右侧横移
- 55 = 武器快速移动
- 56 = 武器重新装填武器(或投掷)
- 57 = 武器全新攀爬
- 61 = 武器正面冲击
- 62 = 武器正面反弹
- 63 = 武器正面起身
- 64 = 武器背面冲击
- 65 = 武器背面反弹
- 66 = 武器背面起身
- 67 = 武器左侧冲击
- 68 = 武器左侧反弹
- 70 = 武器右侧冲击
- 71 = 武器右侧反弹
- 81 = 武器蹲姿空闲
- 82 = 武器蹲姿缓慢移动(相同)
- 83 = 武器蹲姿左侧横移(相同)
- 84 = 武器蹲姿右侧横移(相同)
- 85 = 武器蹲姿快速移动(相同)
- 86 = 武器蹲姿重新装填武器(或投掷)
- 90 = 武器自由形式空闲
- 91 = 武器自由形式移动
- 3DSOUND=X 播放由 X 文件名指定的 3D 音效。使用 $0 表示 soundest
- ACTIVATE=X 使用值 X 激活此实体
- ACTIVATE=X 将实体的激活值设置为 X
- ACTIVATEALLINZONE=X 激活触发区域内的所有实体,使用 X
- ACTIVATEIFUSED=X 激活在 IFUSED 属性中描述的实体
- ACTIVATEIFUSEDNEAR=X 激活在 IFUSED 中描述的实体,并靠近它
- ACTIVATETARGET=X 激活之前标记为目标的实体,使用 X
- ACTIVEALLINZONE 激活实体区域内的所有内容
- ADVFRAME=X 将动画前进 X%
- ALTTEXTURE=X 根据 X 为零或一设置使用的纹理
- AMBIENCE=X 将场景中的整体环境光级别设置为 X
- AMBIENCEBLUE=X 将环境光的蓝色分量设置为 X
- AMBIENCEGREEN=X 将环境光的绿色分量设置为 X
- AMBIENCERED=X 将环境光的红色分量设置为 X
- BACKDROP=X 使用 X 文件名加载并粘贴屏幕背景
- CHOOSESTRAFE 随机选择一个横移方向(即左/右/前)
- COLLECTTARGET 如果目标是可收集的,则在靠近时收集目标
- COLOFF 禁用玩家与此实体的所有碰撞
- COLON 启用玩家与此实体的所有碰撞
- CONTINUEGAME=X 继续游戏操作,发出指令进入下一页
- DECALPHAFADE=X 递减 Alpha 渐变,X 为目标值
- DROPMARKER 实体以后可以返回的放置标记
- FLOORLOGIC=X 如果 X 为 1,实体永远不会离开其 Y 位置
- FOG=X 当 X 为 1 时,设置场景中的雾模式
- FOGBLUE=X 将雾的蓝色分量设置为 X
- FOGGREEN=X 将雾的绿色分量设置为 X
- FOGRED=X 将雾的红色分量设置为 X
- FOLLOWPLR 如果存在,则跟随玩家的轨迹
- HOSTGAME 触发多人游戏,被 HOSTED
- HUDANIM=X 设置动画序列的 X 文件名(不包括 #.TGA)
- HUDBLUE=X 设置 HUD 项目的蓝色分量
- HUDFADEOUT 使 HUD 项目从屏幕上淡出
- HUDFONT=X 设置 HUD 项目的字体名称
- HUDGREEN=X 设置 HUD 项目的绿色分量
- HUDHIDE=X 将 X 设置为要隐藏的 HUD 项目的名称
- HUDIMAGE=X 设置 HUD 项目的图像文件名
- HUDIMAGEFINE=X 使用高质量加载 HUD 的图像
- HUDMAKE=X 当所有 HUD 项目设置完毕时,使用此操作来最终创建 HUD
- HUDNAME=X 设置要创建的 HUD 项目的名称
- HUDRED=X 设置 HUD 项目的红色分量
- HUDRESET=X 调用此方法重置 HUD 创建系统
- HUDSHOW=X 将 X 设置为要显示的 HUD 项目的名称
- HUDSIZE=X 设置 HUD 项目的字体大小
- HUDSIZEX=X 设置 HUD 项目的 X 大小 90
- HUDSIZEY=X 设置 HUD 项目的 Y 大小
- HUDSIZEZ=X 设置 HUD 项目的 X 大小
- HUDTEXT=X 设置将用于代替 HUD 项目无图像的文本
- HUDTYPE=X 设置 HUD 类型 (1-生命值、2-生命值、3-武器)
- HUDUNSHOW=X 将 X 设置为要取消隐藏的 HUD 项目的名称
- HUDX=X 设置要放置 HUD 项目的 X 位置百分比
- HUDY=X 设置要放置 HUD 项目的 Y 位置百分比
- HUDZ=X 设置要放置 HUD 项目的 Z 位置百分比
- INCALPHAFADE=X 增加 Alpha 渐变,X 为目标值
- INCSTATE=X 将状态变量递增 X
- JOINGAME 触发多人游戏,被 JOINED
- LIGHTBLUE=X 淡蓝色
- LIGHTGREEN=X 淡绿色
- LIGHTOFF=X 灯光关闭
- LIGHTON=X 灯光开启
- LIGHTRANGE=X 灯光范围
- LIGHTRED=X 淡红色
- LOADGAME=X 触发加载已保存的游戏
- LOOKATPLR=X 直接看向玩家,即使看不到玩家
- LOOKATTARGET 旋转实体的头,使其面向目标
- LOOPSOUND=X 循环播放由 X 文件名指定的 3D 音效。
- MOVETOTARGET 移动到目标
- MUSIC=X 加载并播放使用 X 文件名的 WAV
- MUSICVOLUME=X 将音乐音量设置为 0-100 范围内的值
- NEWGAME=X 触发运行新游戏(通常从标题页面开始)
- NEXTMARKER 指示实体转到最后一个放置的标记
- NOGRAVITY 为物理实体关闭重力
- PAUSEGAME=X 触发游戏暂停,通常进入游戏菜单
- PIVOTRANDOM=X 随机绕轴旋转,面向另一个方向,旋转 X 度
- PLRADDHEALTH=X 将 X 点添加到玩家的生命值
- PLRASS=X 将此实体与玩家关联(提升)
- PLRDROP 用于从玩家的库存中删除物品
- PLRMOVEDOWN=X 将玩家向下移动 X 个单位
- PLRMOVEEAST=X 将玩家向东移动 X 个单位
- PLRMOVEIFUSED=X 如果玩家执行 USE 操作,则按上述方式移动玩家
- PLRMOVENORTH=X 将玩家向北移动 X 个单位
- PLRMOVESOUTH=X 将玩家向南移动 X 个单位
- PLRMOVETO=X 将玩家移动到 X 实体名称描述的新位置
- PLRMOVEUP=X 将玩家向上移动 X 个单位
- PLRMOVEWEST=X 将玩家向西移动 X 个单位
- PLRNOASS=X 取消将此实体与玩家关联
- PLRTAKE 用于将实体添加到玩家的库存中并获取其资产
- QUITGAME=X 触发当前游戏退出,返回到标题页面
- RELOADWEAPON 从实体的无限弹药库存中重新装填武器
- REPEATGAME 触发多人游戏重复播放
- RESETMARKERS 重置此实体放置的所有标记
- RESUMEGAME=X 触发游戏恢复,在之前暂停后
- ROTATETOTARGET 旋转实体,使其面向目标
- RUNDECAL=X 从实体创建贴花,X 为特定模式 1-6
- RUNFORE 使实体以跑步速度向前移动
- SAVEGAME=X 触发当前游戏的保存
- SETALPHAFADE=X 将 Alpha 值设置为 X,导致实体透明
- SETTARGET 为实体设置内部目标,遵循“目标”条件
- SHAPEDECAL=X 将实体的贴花模式更改为 X
- SHOOTPLR 运行在角色属性中指定的内部 FPI 脚本 SHOOT
- SKY=X 将天空盒设置为 X 文件名指定的天空模型
- SKYSCROLL=X 将天空滚动纹理设置为 X 文件名指定的文件
- SOUND=X 播放由 X 文件名指定的音效。使用 $0 指定 soundest
- SOUNDSCALE=X 按百分比 X 更改 3D 音效比例
- SPAWNOFF 关闭实体的生成能力
- SPAWNON 启用实体的生成能力
- STRAFE 执行先前选择的横移,以躲避玩家射击
- TIMERSTART 将 FPI 脚本计时器重置为零,允许计时
- TRIGGERFORCE=X 以 X 的大小对实体施加力
- USEWEAPON 实体朝目标方向开火任何武器
- VIDEO 全屏播放动画文件一次
- WAYPOINTNEXT 指示实体找到下一个路点
- WAYPOINTPREV 指示实体找到上一个路点
- WAYPOINTRANDOM 指示实体选择一个随机路点方向
- WAYPOINTREVERSE 使实体反向行驶,走另一条路
- WAYPOINTSTART 指示实体找到最近的路点
- WAYPOINTSTOP 停止实体跟随路点