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 停止實體跟隨路點