星空:静默转变

“支线任务”,“星空”

《静默转变》是我为《星空》设计并开发的单人关卡,并作为一个独立的支线任务。关卡在一个环绕海王星运行的空间站上展开,关卡运用环境叙事的手法,结合充满悬疑的任务设置,围绕一起神秘的谋杀案展开。

玩家作为“群星组织”的调查员,需要揭开首席科学家Roo突然死亡的真相。通过探索随机的线索、审讯嫌疑人和检查证据,玩家将逐步重建事件的时间线并找出凶手。

与此同时,独特的重力切换机制也为空间探索与解谜的过程增添了深度。

静默转变

开发工具:Creation Kit
开发时长:8周
游玩时长:20分钟
我的角色:独立开发者(关卡设计、程序实现、战斗设计、剧情设计)

< Level Design Overview >

非线性探索路径

《静默转变》让玩家可以在八个互相连接的区域中自由穿行。破案的几个关键证据可以以任意顺序发现,支持多条调查路线。

关卡策划案

关卡平面图

关卡开发管线

  • 关卡策划案
  • 白盒
  • 基础玩法
  • 玩法实现
  • 美学介入
  • 发行

关卡特色

零重力环境

作为一款太空主题的游戏,重力是《星空》引人入胜的核心玩法之一。通过编写自定义脚本,我让玩家能够在游戏过程中切换重力。并且,我将这一机制作为我关卡的核心元素,将其与其他机制结合,用于引导玩家、设计谜题,并为战斗增添多样性。

通过启动重力开关,玩家可以在一倍地球重力与零重力模式间来回切换。在零重力状态下,玩家能够穿越狭窄的通风管道,抵达步行无法到达的空中通道。这不仅丰富了谜题设计,还为解谜过程引入了垂直维度的考量。

脚本实现:

Papyrus — aC34LR_GravitySwift_Button.psc
Scriptname Scriptname aC34LR:aC34LR_GravitySwift_Button extends ObjectReference

Cell Property targetCell Auto
ObjectReference Property LightEnableMarker Auto Const
WwiseEvent Property WwiseEvent_Gravity_Power_Lights_Off Auto Const
WwiseEvent Property WwiseEvent_Gravity_Power_Lights_On Auto Const
ObjectReference[] Property TargetComputer Auto Const
ObjectReference[] Property ReplaceComputer Auto Const
ObjectReference Property EnableMarker Auto Const
ObjectReference Property DoorToLock Auto Const

Event OnActivate(ObjectReference akActionRef)
    ObjectReference PlayerRef = Game.GetPlayer()
    Float myGravity = PlayerRef.GetGravityScale()
    if myGravity != 0
        DisableGravitySequence()
    else
        EnableGravitySequence()
    endif
EndEvent

Function DisableGravitySequence()
    ; 禁用TargetComputer
    int i = 0
    while (i < TargetComputer.Length)
        if TargetComputer[i] != None
            TargetComputer[i].Disable()
        endif
        i += 1
    endwhile

    ; 启用ReplaceComputer
    i = 0
    while (i < ReplaceComputer.Length)
        if ReplaceComputer[i] != None
            ReplaceComputer[i].Enable()
        endif
        i += 1
    endwhile

    ; 播放关闭电力声音
    WwiseEvent_Gravity_Power_Lights_Off.Play(Game.GetPlayer())
    
    ; 窗口抖动
    Game.ShakeCamera(afStrength = 0.2)
    Utility.Wait(2.0)
    Game.ShakeCamera()
    
    ; 灯光闪烁效果
    WwiseEvent_Gravity_Power_Lights_On.Play(Game.GetPlayer())
    LightEnableMarker.Disable()
    Utility.Wait(0.3)
    LightEnableMarker.Enable()
    Utility.Wait(0.3)
    LightEnableMarker.Disable()

    ; 实际设置重力
    targetCell.setGravityScale(0.0)
EndFunction

Function EnableGravitySequence()
    ; 启用TargetComputer
    int i = 0
    while (i < TargetComputer.Length)
        if TargetComputer[i] != None
            TargetComputer[i].Enable()
        endif
        i += 1
    endwhile

    ; 禁用ReplaceComputer
    i = 0
    while (i < ReplaceComputer.Length)
        if ReplaceComputer[i] != None
            ReplaceComputer[i].Disable()
        endif
        i += 1
    endwhile

    ; 播放恢复电力声音
    WwiseEvent_Gravity_Power_Lights_On.Play(Game.GetPlayer())
    Game.ShakeCamera(afStrength = 0.2)
    Utility.Wait(2.0)
    Game.ShakeCamera()

    ; 灯光闪烁效果
    WwiseEvent_Gravity_Power_Lights_Off.Play(Game.GetPlayer())
    LightEnableMarker.Enable()
    Utility.Wait(0.3)
    LightEnableMarker.Disable()
    Utility.Wait(0.3)
    LightEnableMarker.Enable()

    ; 实际开启重力
    targetCell.setGravityScale(1.0)
EndFunction

多功能终端

我设计了与故事情节一致的定制终端界面,包含专属文本和次级菜单。
这些终端包含权限锁定的子菜单(钥匙卡),增添了一层探索机制。

环境叙述

关卡中,我以大量的视觉线索取代繁琐的长篇说明,比如天花板上的血迹、在通风口前戛然而止的凌乱足迹,以及使用闪烁的廊灯勾勒出前进的路径。
除此之外,一些道具、贴花和灯光也在默默引导玩家走向导致犯罪的关键时刻。