• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

help to improve RPG controls & camera

Status
Not open for further replies.
Level 4
Joined
Oct 25, 2019
Messages
14
Hello, I made an RPG that was set in the time of Warcraft2 and I relied on a mix of old RPG games. (Warcraft Adventures: Lord of the Clans, Gothic, Secret of Evermore, Moonstone).
It is available for download here on hive Shadows of the Tides
I have invested a lot of time and effort, but the big problem remains with the movement controls and the camera.
Everything works but not precisely enough, which reduces the gaming experience. My strengths are more creativity and my knowledge of script, jass and co is limited.
It would enrich my RPG immensely if someone with a lot of experience with RPG controls and cameras could improve them.

I would be really grateful for help.
 
Last edited:
Level 4
Joined
Oct 25, 2019
Messages
14
Yes exactly, movement and camera.
I'm trying to post the code. You are free to take a look at the map, it is not encrypted.
However, I think that a new code would be better than my current code attempts to optimize it.
Custom RPG camera and motion control in warcraft3 always seemed not optimal but there are a lot of clever people here who could conjure up something like that.

JASS:
//***************************************************************************
//*
//*  Triggers
//*
//***************************************************************************

//===========================================================================
// Trigger: W Pressed
//===========================================================================
function Trig_W_Pressed_Actions takes nothing returns nothing
    set udg_TastaDruckOben[GetConvertedPlayerId(GetTriggerPlayer())] = true
    call ConditionalTriggerExecute( gg_trg_Movement )
endfunction

//===========================================================================
function InitTrig_W_Pressed takes nothing returns nothing
    local integer Index
    set Index = 0
    set gg_trg_W_Pressed = CreateTrigger()
    call TriggerAddAction( gg_trg_W_Pressed, function Trig_W_Pressed_Actions )
    loop
        exitwhen Index > 4
        call BlzTriggerRegisterPlayerKeyEvent( gg_trg_W_Pressed, Player(Index), OSKEY_W, 0, true )
        set Index = Index + 1
    endloop
endfunction

//===========================================================================
// Trigger: A Pressed
//===========================================================================
function Trig_A_Pressed_Actions takes nothing returns nothing
    set udg_TastaDruckLinks[GetConvertedPlayerId(GetTriggerPlayer())] = true
    call ConditionalTriggerExecute( gg_trg_Movement )
endfunction

//===========================================================================
function InitTrig_A_Pressed takes nothing returns nothing
    local integer Index
    set Index = 0
    set gg_trg_A_Pressed = CreateTrigger()
    call TriggerAddAction( gg_trg_A_Pressed, function Trig_A_Pressed_Actions )
    loop
        exitwhen Index > 4
        call BlzTriggerRegisterPlayerKeyEvent( gg_trg_A_Pressed, Player(Index), OSKEY_A, 0, true )
        set Index = Index + 1
    endloop
endfunction

//===========================================================================
// Trigger: D Pressed
//===========================================================================
function Trig_D_Pressed_Actions takes nothing returns nothing
    set udg_TastaDruckRechts[GetConvertedPlayerId(GetTriggerPlayer())] = true
    call ConditionalTriggerExecute( gg_trg_Movement )
endfunction

//===========================================================================
function InitTrig_D_Pressed takes nothing returns nothing
    local integer Index
    set Index = 0
    set gg_trg_D_Pressed = CreateTrigger()
    call TriggerAddAction( gg_trg_D_Pressed, function Trig_D_Pressed_Actions )
    loop
        exitwhen Index > 4
        call BlzTriggerRegisterPlayerKeyEvent( gg_trg_D_Pressed, Player(Index), OSKEY_D, 0, true )
        set Index = Index + 1
    endloop
endfunction


//===========================================================================
// Trigger: S Pressed
//===========================================================================
function Trig_S_Pressed_Actions takes nothing returns nothing
    set udg_TastaDruckUnten[GetConvertedPlayerId(GetTriggerPlayer())] = true
    call ConditionalTriggerExecute( gg_trg_Movement )
endfunction

//===========================================================================
function InitTrig_S_Pressed takes nothing returns nothing
    local integer Index
    set Index = 0
    set gg_trg_S_Pressed = CreateTrigger()
    call TriggerAddAction( gg_trg_S_Pressed, function Trig_S_Pressed_Actions )
    loop
        exitwhen Index > 4
        call BlzTriggerRegisterPlayerKeyEvent( gg_trg_S_Pressed, Player(Index), OSKEY_S, 0, true )
        set Index = Index + 1
    endloop
endfunction


//===========================================================================
// Trigger: P Pressed
//===========================================================================
function Trig_P_Pressed_Actions takes nothing returns nothing
    call IssueImmediateOrderBJ( udg_ZRPGHero[GetConvertedPlayerId(GetTriggerPlayer())], "holdposition" )
endfunction

//===========================================================================
function InitTrig_P_Pressed takes nothing returns nothing
    local integer Index
    set Index = 0
    set gg_trg_P_Pressed = CreateTrigger()
    call TriggerAddAction( gg_trg_P_Pressed, function Trig_P_Pressed_Actions )
    loop
        exitwhen Index > 4
        call BlzTriggerRegisterPlayerKeyEvent( gg_trg_P_Pressed, Player(Index), OSKEY_P, 0, true )
        set Index = Index + 1
    endloop
endfunction
//===========================================================================
// Trigger: W Released
//
// function InitTrig_W_Released takes nothing returns nothing
//     local integer Index
//     set Index = 0
//     set gg_trg_W_Released = CreateTrigger()
//     call TriggerAddAction( gg_trg_W_Released, function Trig_W_Released_Actions )
//     loop
//         exitwhen Index > 4
//         call BlzTriggerRegisterPlayerKeyEvent( gg_trg_W_Released, Player(Index), OSKEY_W, 0, false )
//         set Index = Index + 1
//     endloop
// endfunction
//===========================================================================
function Trig_W_Released_Actions takes nothing returns nothing
    set udg_TastaDruckOben[GetConvertedPlayerId(GetTriggerPlayer())] = false
    call IssueImmediateOrderBJ( udg_ZRPGHero[GetConvertedPlayerId(GetTriggerPlayer())], "stop" )
endfunction

//===========================================================================
function InitTrig_W_Released takes nothing returns nothing
    local integer Index
    set Index = 0
    set gg_trg_W_Released = CreateTrigger()
    call TriggerAddAction( gg_trg_W_Released, function Trig_W_Released_Actions )
    loop
        exitwhen Index > 4
        call BlzTriggerRegisterPlayerKeyEvent( gg_trg_W_Released, Player(Index), OSKEY_W, 0, false )
        set Index = Index + 1
    endloop
endfunction


//===========================================================================
// Trigger: A Released
//===========================================================================
function Trig_A_Released_Actions takes nothing returns nothing
    set udg_TastaDruckLinks[GetConvertedPlayerId(GetTriggerPlayer())] = false
endfunction

//===========================================================================
function InitTrig_A_Released takes nothing returns nothing
    local integer Index
    set Index = 0
    set gg_trg_A_Released = CreateTrigger()
    call TriggerAddAction( gg_trg_A_Released, function Trig_A_Released_Actions )
    loop
        exitwhen Index > 4
        call BlzTriggerRegisterPlayerKeyEvent( gg_trg_A_Released, Player(Index), OSKEY_A, 0, false )
        set Index = Index + 1
    endloop
endfunction


//===========================================================================
// Trigger: D Released
//===========================================================================
function Trig_D_Released_Actions takes nothing returns nothing
    set udg_TastaDruckRechts[GetConvertedPlayerId(GetTriggerPlayer())] = false
endfunction

//===========================================================================
function InitTrig_D_Released takes nothing returns nothing
    local integer Index
    set Index = 0
    set gg_trg_D_Released = CreateTrigger()
    call TriggerAddAction( gg_trg_D_Released, function Trig_D_Released_Actions )
    loop
        exitwhen Index > 4
        call BlzTriggerRegisterPlayerKeyEvent( gg_trg_D_Released, Player(Index), OSKEY_D, 0, false )
        set Index = Index + 1
    endloop
endfunction

//===========================================================================
// Trigger: S Released
//===========================================================================
function Trig_S_Released_Actions takes nothing returns nothing
    set udg_TastaDruckUnten[GetConvertedPlayerId(GetTriggerPlayer())] = false
endfunction

//===========================================================================
function InitTrig_S_Released takes nothing returns nothing
    local integer Index
    set Index = 0
    set gg_trg_S_Released = CreateTrigger()
    call TriggerAddAction( gg_trg_S_Released, function Trig_S_Released_Actions )
    loop
        exitwhen Index > 4
        call BlzTriggerRegisterPlayerKeyEvent( gg_trg_S_Released, Player(Index), OSKEY_S, 0, false )
        set Index = Index + 1
    endloop
endfunction

//===========================================================================
// Trigger: Movement
//===========================================================================
function Trig_Movement_Func002Func001Func001C takes nothing returns boolean
    if ( ( udg_TastaDruckOben[GetForLoopIndexA()] == true ) ) then
        return true
    endif
    if ( ( udg_TastaDruckRechts[GetForLoopIndexA()] == true ) ) then
        return true
    endif
    if ( ( udg_TastaDruckLinks[GetForLoopIndexA()] == true ) ) then
        return true
    endif
    if ( ( udg_TastaDruckUnten[GetForLoopIndexA()] == true ) ) then
        return true
    endif
    return false
endfunction

function Trig_Movement_Func002Func001Func005Func002Func002Func005Func004Func002Func003C takes nothing returns boolean
    if ( not ( udg_TastaDruckRechts[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckOben[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckLinks[GetForLoopIndexA()] == true ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckUnten[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001Func005Func002Func002Func005Func004Func002C takes nothing returns boolean
    if ( not Trig_Movement_Func002Func001Func005Func002Func002Func005Func004Func002Func003C() ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001Func005Func002Func002Func005Func004C takes nothing returns boolean
    if ( not ( udg_TastaDruckRechts[GetForLoopIndexA()] == true ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckOben[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckLinks[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckUnten[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001Func005Func002Func002Func005Func006C takes nothing returns boolean
    if ( not ( udg_TastaDruckRechts[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckOben[GetForLoopIndexA()] == true ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckLinks[GetForLoopIndexA()] == true ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckUnten[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001Func005Func002Func002Func005C takes nothing returns boolean
    if ( not Trig_Movement_Func002Func001Func005Func002Func002Func005Func006C() ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001Func005Func002Func002Func006C takes nothing returns boolean
    if ( not ( udg_TastaDruckRechts[GetForLoopIndexA()] == true ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckOben[GetForLoopIndexA()] == true ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckLinks[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckUnten[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001Func005Func002Func002C takes nothing returns boolean
    if ( not Trig_Movement_Func002Func001Func005Func002Func002Func006C() ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001Func005Func002C takes nothing returns boolean
    if ( not ( udg_TastaDruckUnten[GetForLoopIndexA()] == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001Func005Func005Func004C takes nothing returns boolean
    if ( not ( IsTerrainPathableBJ(udg_TerrainCheckLoc[GetForLoopIndexA()], PATHING_TYPE_WALKABILITY) == false ) ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001Func005Func005C takes nothing returns boolean
    if ( not ( IsTerrainPathableBJ(udg_TerrainCheckLoc[GetForLoopIndexA()], PATHING_TYPE_WALKABILITY) == false ) ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001Func005Func006C takes nothing returns boolean
    if ( not ( udg_TastaDruckOben[GetForLoopIndexA()] == true ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckRechts[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckLinks[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    if ( not ( udg_TastaDruckUnten[GetForLoopIndexA()] == false ) ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001Func005C takes nothing returns boolean
    if ( not Trig_Movement_Func002Func001Func005Func006C() ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Func002Func001C takes nothing returns boolean
    if ( not Trig_Movement_Func002Func001Func001C() ) then
        return false
    endif
    return true
endfunction

function Trig_Movement_Actions takes nothing returns nothing
    set bj_forLoopAIndex = 3
    set bj_forLoopAIndexEnd = 5
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if ( Trig_Movement_Func002Func001C() ) then
            // Walk Forward
            set udg_ZRotaAutoReaktiv[GetForLoopIndexA()] = true
            set udg_TerrainHeroLoc[GetForLoopIndexA()] = GetUnitLoc(udg_ZRPGHero[GetForLoopIndexA()])
            if ( Trig_Movement_Func002Func001Func005C() ) then
                // Landschafts Check
                set udg_TerrainCheckLoc[GetForLoopIndexA()] = PolarProjectionBJ(udg_TerrainHeroLoc[GetForLoopIndexA()], 100.00, GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()]))
                if ( Trig_Movement_Func002Func001Func005Func005C() ) then
                    call SetUnitPropWindow(udg_ZRPGHero[GetForLoopIndexA()], 1)
                    set udg_TerrainMoveLoc[GetForLoopIndexA()] = PolarProjectionBJ(udg_TerrainHeroLoc[GetForLoopIndexA()], ( GetUnitMoveSpeed(udg_ZRPGHero[GetForLoopIndexA()]) + 50.00 ), GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()]))
                    call IssuePointOrderLocBJ( udg_ZRPGHero[GetForLoopIndexA()], "move", udg_TerrainMoveLoc[GetForLoopIndexA()] )
                    set udg_ZCamera_Rotation[GetForLoopIndexA()] = GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()])
                else
                    // Sicherheits Antibug check - wirklich stop oder laufen?
                    set udg_TerrainCheckLoc[GetForLoopIndexA()] = PolarProjectionBJ(udg_TerrainHeroLoc[GetForLoopIndexA()], 200.00, GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()]))
                    if ( Trig_Movement_Func002Func001Func005Func005Func004C() ) then
                        call SetUnitPropWindow(udg_ZRPGHero[GetForLoopIndexA()], 1)
                        set udg_TerrainMoveLoc[GetForLoopIndexA()] = PolarProjectionBJ(udg_TerrainHeroLoc[GetForLoopIndexA()], ( GetUnitMoveSpeed(udg_ZRPGHero[GetForLoopIndexA()]) + 50.00 ), GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()]))
                        call IssuePointOrderLocBJ( udg_ZRPGHero[GetForLoopIndexA()], "move", udg_TerrainMoveLoc[GetForLoopIndexA()] )
                        set udg_ZCamera_Rotation[GetForLoopIndexA()] = GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()])
                    else
                        // ja - Stop
                    endif
                endif
            else
                // 180 turn
                if ( Trig_Movement_Func002Func001Func005Func002C() ) then
                    call SetUnitFacingTimed( udg_ZRPGHero[GetForLoopIndexA()], ( GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()]) + 180.00 ), 0.40 )
                    set udg_ZCamera_Rotation[GetForLoopIndexA()] = GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()])
                else
                    // Walk+Turn Right
                    if ( Trig_Movement_Func002Func001Func005Func002Func002C() ) then
                        set udg_TerrainMoveLoc[GetForLoopIndexA()] = PolarProjectionBJ(GetUnitLoc(udg_ZRPGHero[GetForLoopIndexA()]), ( GetUnitMoveSpeed(udg_ZRPGHero[GetForLoopIndexA()]) + 30.00 ), ( GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()]) - 18.00 ))
                        call IssuePointOrderLocBJ( udg_ZRPGHero[GetForLoopIndexA()], "move", udg_TerrainMoveLoc[GetForLoopIndexA()] )
                        set udg_ZCamera_Rotation[GetForLoopIndexA()] = GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()])
                    else
                        // Walk+Turn Left
                        if ( Trig_Movement_Func002Func001Func005Func002Func002Func005C() ) then
                            set udg_TerrainMoveLoc[GetForLoopIndexA()] = PolarProjectionBJ(GetUnitLoc(udg_ZRPGHero[GetForLoopIndexA()]), ( GetUnitMoveSpeed(udg_ZRPGHero[GetForLoopIndexA()]) + 30.00 ), ( GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()]) + 18.00 ))
                            call IssuePointOrderLocBJ( udg_ZRPGHero[GetForLoopIndexA()], "move", udg_TerrainMoveLoc[GetForLoopIndexA()] )
                            set udg_ZCamera_Rotation[GetForLoopIndexA()] = GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()])
                        else
                            // Turn Right
                            if ( Trig_Movement_Func002Func001Func005Func002Func002Func005Func004C() ) then
                                call SetUnitFacingTimed( udg_ZRPGHero[GetForLoopIndexA()], ( GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()]) - 20.00 ), 0.20 )
                                set udg_ZCamera_Rotation[GetForLoopIndexA()] = GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()])
                            else
                                // Turn Left
                                if ( Trig_Movement_Func002Func001Func005Func002Func002Func005Func004Func002C() ) then
                                    call SetUnitFacingTimed( udg_ZRPGHero[GetForLoopIndexA()], ( GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()]) + 20.00 ), 0.20 )
                                    set udg_ZCamera_Rotation[GetForLoopIndexA()] = GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()])
                                else
                                endif
                            endif
                        endif
                    endif
                endif
            endif
            call RemoveLocation(udg_TerrainHeroLoc[GetForLoopIndexA()])
            call RemoveLocation(udg_TerrainMoveLoc[GetForLoopIndexA()])
            call RemoveLocation(udg_TerrainCheckLoc[GetForLoopIndexA()])
        else
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
endfunction

//===========================================================================
function InitTrig_Movement takes nothing returns nothing
    set gg_trg_Movement = CreateTrigger(  )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Movement, 0.50 )
    call TriggerAddAction( gg_trg_Movement, function Trig_Movement_Actions )
endfunction

//===========================================================================
// Trigger: RPG Camera
//===========================================================================
function Trig_RPG_Camera_Func001Func003C takes nothing returns boolean
    if ( not ( udg_ZRotaAutoAn[GetForLoopIndexA()] == true ) ) then
        return false
    endif
    if ( not ( udg_ZRotaAutoReaktiv[GetForLoopIndexA()] == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_RPG_Camera_Actions takes nothing returns nothing
    set bj_forLoopAIndex = 3
    set bj_forLoopAIndexEnd = 5
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        call SetCameraFieldForPlayer( GetOwningPlayer(udg_ZRPGHero[GetForLoopIndexA()]), CAMERA_FIELD_TARGET_DISTANCE, I2R(udg_CameraDistance[GetForLoopIndexA()]), 0.20 )
        call SetCameraFieldForPlayer( GetOwningPlayer(udg_ZRPGHero[GetForLoopIndexA()]), CAMERA_FIELD_ANGLE_OF_ATTACK, I2R(udg_CameraAngle[GetForLoopIndexA()]), 0.20 )
        if ( Trig_RPG_Camera_Func001Func003C() ) then
            call SetCameraFieldForPlayer( GetOwningPlayer(udg_ZRPGHero[GetForLoopIndexA()]), CAMERA_FIELD_ROTATION, GetUnitFacing(udg_ZRPGHero[GetForLoopIndexA()]), 0.70 )
        else
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
endfunction

//===========================================================================
function InitTrig_RPG_Camera takes nothing returns nothing
    set gg_trg_RPG_Camera = CreateTrigger(  )
    call DisableTrigger( gg_trg_RPG_Camera )
    call TriggerRegisterTimerEventPeriodic( gg_trg_RPG_Camera, 0.20 )
    call TriggerAddAction( gg_trg_RPG_Camera, function Trig_RPG_Camera_Actions )
endfunction

//===========================================================================
// Trigger: RPG Terrain
//===========================================================================
function Trig_RPG_Terrain_Func001A takes nothing returns nothing
    set udg_Loc[GetConvertedPlayerId(GetEnumPlayer())] = GetUnitLoc(udg_ZRPGHero[GetConvertedPlayerId(GetEnumPlayer())])
    set udg_TerrainHeight[(GetPlayerId(GetEnumPlayer()))+1] = GetLocationZ(udg_Loc[(GetPlayerId(GetEnumPlayer()))+1])
    set udg_CameraHeight[GetConvertedPlayerId(GetEnumPlayer())] = ( R2I(udg_TerrainHeight[GetConvertedPlayerId(GetEnumPlayer())]) + ( udg_CameraDistance[GetConvertedPlayerId(GetEnumPlayer())] / 6 ) )
    call SetCameraZ (udg_CameraHeight[GetPlayerId(GetEnumPlayer())+1] , Player(GetPlayerId(GetEnumPlayer())))
endfunction

function Trig_RPG_Terrain_Actions takes nothing returns nothing
    call ForForce( udg_Spielergruppe, function Trig_RPG_Terrain_Func001A )
endfunction

//===========================================================================
function InitTrig_RPG_Terrain takes nothing returns nothing
    set gg_trg_RPG_Terrain = CreateTrigger(  )
    call DisableTrigger( gg_trg_RPG_Terrain )
    call TriggerRegisterTimerEventPeriodic( gg_trg_RPG_Terrain, 0.01 )
    call TriggerAddAction( gg_trg_RPG_Terrain, function Trig_RPG_Terrain_Actions )
endfunction

//===========================================================================
// Trigger: RPG RotaAutomatik
//===========================================================================
function Trig_RPG_RotaAutomatik_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A03L' ) ) then
        return false
    endif
    return true
endfunction

function Trig_RPG_RotaAutomatik_Func003C takes nothing returns boolean
    if ( not ( udg_ZRotaAutoAn[udg_TempInteger] == true ) ) then
        return false
    endif
    return true
endfunction

function Trig_RPG_RotaAutomatik_Actions takes nothing returns nothing
    set udg_TempInteger = GetConvertedPlayerId(GetTriggerPlayer())
    if ( Trig_RPG_RotaAutomatik_Func003C() ) then
        set udg_ZRotaAutoAn[udg_TempInteger] = false
        set udg_ZRotaAutoReaktiv[udg_TempInteger] = false
    else
        set udg_ZRotaAutoAn[udg_TempInteger] = true
        set udg_ZRotaAutoReaktiv[udg_TempInteger] = true
    endif
    set udg_TempInteger = 0
endfunction

//===========================================================================
function InitTrig_RPG_RotaAutomatik takes nothing returns nothing
    set gg_trg_RPG_RotaAutomatik = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_RPG_RotaAutomatik, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_RPG_RotaAutomatik, Condition( function Trig_RPG_RotaAutomatik_Conditions ) )
    call TriggerAddAction( gg_trg_RPG_RotaAutomatik, function Trig_RPG_RotaAutomatik_Actions )
endfunction

//===========================================================================
// Trigger: RPG Zoom
//===========================================================================
function Trig_RPG_Zoom_Func002Func001C takes nothing returns boolean
    if ( not ( I2R(udg_CameraDistance[udg_TempInteger]) < 450.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_RPG_Zoom_Func002C takes nothing returns boolean
    if ( not ( I2R(udg_CameraDistance[udg_TempInteger]) > 650.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_RPG_Zoom_Actions takes nothing returns nothing
    set udg_TempInteger = GetConvertedPlayerId(GetTriggerPlayer())
    if ( Trig_RPG_Zoom_Func002C() ) then
        set udg_CameraDistance[udg_TempInteger] = 400
    else
        if ( Trig_RPG_Zoom_Func002Func001C() ) then
            set udg_CameraDistance[udg_TempInteger] = 550
        else
            set udg_CameraDistance[udg_TempInteger] = 700
        endif
    endif
    set udg_TempInteger = 0
endfunction

//===========================================================================
function InitTrig_RPG_Zoom takes nothing returns nothing
    local integer Index
    set Index = 0
    set gg_trg_RPG_Zoom = CreateTrigger()
    call TriggerAddAction( gg_trg_RPG_Zoom, function Trig_RPG_Zoom_Actions )
    loop
        exitwhen Index > 4
        call BlzTriggerRegisterPlayerKeyEvent( gg_trg_RPG_Zoom, Player(Index), OSKEY_Q, 0, true )
        set Index = Index + 1
    endloop
endfunction

//===========================================================================
// Trigger: RPG Hero
//===========================================================================
function Trig_RPG_Hero_Actions takes nothing returns nothing
    set udg_ZRPGHero[3] = gg_unit_HC71_0017
    set udg_ZRPGHeroAusr[3] = gg_unit_HC39_0058
    set udg_ZRPGHero[4] = gg_unit_OC63_0012
    set udg_ZRPGHeroAusr[4] = gg_unit_H000_1143
    set udg_ZRPGHero[5] = gg_unit_H005_0061
    set udg_ZRPGHeroAusr[5] = gg_unit_HC65_1142
endfunction

//===========================================================================
function InitTrig_RPG_Hero takes nothing returns nothing
    set gg_trg_RPG_Hero = CreateTrigger(  )
    call TriggerAddAction( gg_trg_RPG_Hero, function Trig_RPG_Hero_Actions )
endfunction

//===========================================================================
// Trigger: Correct AoA
//===========================================================================
function Trig_Correct_AoA_Func001Func001Func001C takes nothing returns boolean
    if ( not ( I2R(udg_CameraAngle[GetForLoopIndexA()]) > 355.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Correct_AoA_Func001Func001C takes nothing returns boolean
    if ( not ( I2R(udg_CameraAngle[GetForLoopIndexA()]) < 270.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Correct_AoA_Actions takes nothing returns nothing
    set bj_forLoopAIndex = 1
    set bj_forLoopAIndexEnd = 12
    loop
        exitwhen bj_forLoopAIndex > bj_forLoopAIndexEnd
        if ( Trig_Correct_AoA_Func001Func001C() ) then
            set udg_CameraAngle[GetForLoopIndexA()] = 300
        else
            if ( Trig_Correct_AoA_Func001Func001Func001C() ) then
                set udg_CameraAngle[GetForLoopIndexA()] = 345
            else
                call DoNothing(  )
            endif
        endif
        set bj_forLoopAIndex = bj_forLoopAIndex + 1
    endloop
endfunction

//===========================================================================
function InitTrig_Correct_AoA takes nothing returns nothing
    set gg_trg_Correct_AoA = CreateTrigger(  )
    call DisableTrigger( gg_trg_Correct_AoA )
    call TriggerAddAction( gg_trg_Correct_AoA, function Trig_Correct_AoA_Actions )
endfunction

//===========================================================================
// Trigger: Links Pressen
//===========================================================================
function Trig_Links_Pressen_Func003C takes nothing returns boolean
    if ( not ( udg_CameraRotation[udg_TempInteger] < -390 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Links_Pressen_Actions takes nothing returns nothing
    set udg_TempInteger = GetConvertedPlayerId(GetTriggerPlayer())
    set udg_ZRotaAutoReaktiv[udg_TempInteger] = false
    if ( Trig_Links_Pressen_Func003C() ) then
        set udg_CameraRotation[udg_TempInteger] = 0
    else
    endif
    set udg_CameraRotation[udg_TempInteger] = ( udg_CameraRotation[GetConvertedPlayerId(GetTriggerPlayer())] - 5 )
    call ForceAddPlayerSimple( GetTriggerPlayer(), udg_CameraRotateLeft )
    set udg_TempInteger = 0
    call EnableTrigger( gg_trg_Links_Aufheben )
    call EnableTrigger( gg_trg_Links )
endfunction

//===========================================================================
function InitTrig_Links_Pressen takes nothing returns nothing
    set gg_trg_Links_Pressen = CreateTrigger(  )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Links_Pressen, Player(2), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_LEFT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Links_Pressen, Player(3), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_LEFT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Links_Pressen, Player(4), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_LEFT )
    call TriggerAddAction( gg_trg_Links_Pressen, function Trig_Links_Pressen_Actions )
endfunction

//===========================================================================
// Trigger: Links Aufheben
//===========================================================================
function Trig_Links_Aufheben_Actions takes nothing returns nothing
    call ForceRemovePlayerSimple( GetTriggerPlayer(), udg_CameraRotateLeft )
    call DisableTrigger( GetTriggeringTrigger() )
endfunction

//===========================================================================
function InitTrig_Links_Aufheben takes nothing returns nothing
    set gg_trg_Links_Aufheben = CreateTrigger(  )
    call DisableTrigger( gg_trg_Links_Aufheben )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Links_Aufheben, Player(0), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_LEFT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Links_Aufheben, Player(1), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_LEFT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Links_Aufheben, Player(2), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_LEFT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Links_Aufheben, Player(3), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_LEFT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Links_Aufheben, Player(4), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_LEFT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Links_Aufheben, Player(5), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_LEFT )
    call TriggerAddAction( gg_trg_Links_Aufheben, function Trig_Links_Aufheben_Actions )
endfunction

//===========================================================================
// Trigger: Links
//===========================================================================
function Trig_Links_Func001A takes nothing returns nothing
    set udg_CameraRotation[GetConvertedPlayerId(GetEnumPlayer())] = ( udg_CameraRotation[GetConvertedPlayerId(GetEnumPlayer())] - 5 )
    call SetCameraFieldForPlayer( GetOwningPlayer(udg_ZRPGHero[GetConvertedPlayerId(GetEnumPlayer())]), CAMERA_FIELD_ROTATION, I2R(udg_CameraRotation[GetConvertedPlayerId(GetEnumPlayer())]), 0.90 )
endfunction

function Trig_Links_Func002C takes nothing returns boolean
    if ( not ( CountPlayersInForceBJ(udg_CameraRotateLeft) == 0 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Links_Actions takes nothing returns nothing
    call ForForce( udg_CameraRotateLeft, function Trig_Links_Func001A )
    if ( Trig_Links_Func002C() ) then
        call DisableTrigger( GetTriggeringTrigger() )
    else
        call DoNothing(  )
    endif
endfunction

//===========================================================================
function InitTrig_Links takes nothing returns nothing
    set gg_trg_Links = CreateTrigger(  )
    call DisableTrigger( gg_trg_Links )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Links, 0.10 )
    call TriggerAddAction( gg_trg_Links, function Trig_Links_Actions )
endfunction

//===========================================================================
// Trigger: Rechts Pressen
//===========================================================================
function Trig_Rechts_Pressen_Func003C takes nothing returns boolean
    if ( not ( udg_CameraRotation[udg_TempInteger] > 390 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Rechts_Pressen_Actions takes nothing returns nothing
    set udg_TempInteger = GetConvertedPlayerId(GetTriggerPlayer())
    set udg_ZRotaAutoReaktiv[udg_TempInteger] = false
    if ( Trig_Rechts_Pressen_Func003C() ) then
        set udg_CameraRotation[udg_TempInteger] = 0
    else
    endif
    set udg_CameraRotation[udg_TempInteger] = ( udg_CameraRotation[udg_TempInteger] + 5 )
    call ForceAddPlayerSimple( GetTriggerPlayer(), udg_CameraRotateRight )
    set udg_TempInteger = 0
    call EnableTrigger( gg_trg_Rechts_Aufheben )
    call EnableTrigger( gg_trg_Rechts )
endfunction

//===========================================================================
function InitTrig_Rechts_Pressen takes nothing returns nothing
    set gg_trg_Rechts_Pressen = CreateTrigger(  )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Rechts_Pressen, Player(2), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_RIGHT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Rechts_Pressen, Player(3), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_RIGHT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Rechts_Pressen, Player(4), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_RIGHT )
    call TriggerAddAction( gg_trg_Rechts_Pressen, function Trig_Rechts_Pressen_Actions )
endfunction

//===========================================================================
// Trigger: Rechts Aufheben
//===========================================================================
function Trig_Rechts_Aufheben_Actions takes nothing returns nothing
    call ForceRemovePlayerSimple( GetTriggerPlayer(), udg_CameraRotateRight )
    call DisableTrigger( GetTriggeringTrigger() )
endfunction

//===========================================================================
function InitTrig_Rechts_Aufheben takes nothing returns nothing
    set gg_trg_Rechts_Aufheben = CreateTrigger(  )
    call DisableTrigger( gg_trg_Rechts_Aufheben )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Rechts_Aufheben, Player(0), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_RIGHT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Rechts_Aufheben, Player(1), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_RIGHT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Rechts_Aufheben, Player(2), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_RIGHT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Rechts_Aufheben, Player(3), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_RIGHT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Rechts_Aufheben, Player(4), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_RIGHT )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Rechts_Aufheben, Player(5), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_RIGHT )
    call TriggerAddAction( gg_trg_Rechts_Aufheben, function Trig_Rechts_Aufheben_Actions )
endfunction

//===========================================================================
// Trigger: Rechts
//===========================================================================
function Trig_Rechts_Func001A takes nothing returns nothing
    set udg_CameraRotation[GetConvertedPlayerId(GetEnumPlayer())] = ( udg_CameraRotation[GetConvertedPlayerId(GetEnumPlayer())] + 5 )
    call SetCameraFieldForPlayer( GetOwningPlayer(udg_ZRPGHero[GetConvertedPlayerId(GetEnumPlayer())]), CAMERA_FIELD_ROTATION, I2R(udg_CameraRotation[GetConvertedPlayerId(GetEnumPlayer())]), 0.90 )
endfunction

function Trig_Rechts_Func002C takes nothing returns boolean
    if ( not ( CountPlayersInForceBJ(udg_CameraRotateRight) == 0 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Rechts_Actions takes nothing returns nothing
    call ForForce( udg_CameraRotateRight, function Trig_Rechts_Func001A )
    if ( Trig_Rechts_Func002C() ) then
        call DisableTrigger( GetTriggeringTrigger() )
    else
        call DoNothing(  )
    endif
endfunction

//===========================================================================
function InitTrig_Rechts takes nothing returns nothing
    set gg_trg_Rechts = CreateTrigger(  )
    call DisableTrigger( gg_trg_Rechts )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Rechts, 0.10 )
    call TriggerAddAction( gg_trg_Rechts, function Trig_Rechts_Actions )
endfunction

//===========================================================================
// Trigger: Oben Pressen
//===========================================================================
function Trig_Oben_Pressen_Func006C takes nothing returns boolean
    if ( not ( I2R(udg_CameraAngle[udg_TempInteger]) < 275.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Oben_Pressen_Actions takes nothing returns nothing
    set udg_TempInteger = GetConvertedPlayerId(GetTriggerPlayer())
    set udg_CameraAngle[udg_TempInteger] = ( udg_CameraAngle[udg_TempInteger] - 5 )
    call ForceAddPlayerSimple( GetTriggerPlayer(), udg_CameraAngleUp )
    call EnableTrigger( gg_trg_Oben_Aufheben )
    call EnableTrigger( gg_trg_Oben )
    if ( Trig_Oben_Pressen_Func006C() ) then
        call ConditionalTriggerExecute( gg_trg_Correct_AoA )
    else
    endif
    set udg_TempInteger = 0
endfunction

//===========================================================================
function InitTrig_Oben_Pressen takes nothing returns nothing
    set gg_trg_Oben_Pressen = CreateTrigger(  )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Oben_Pressen, Player(2), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_UP )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Oben_Pressen, Player(3), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_UP )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Oben_Pressen, Player(4), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_UP )
    call TriggerAddAction( gg_trg_Oben_Pressen, function Trig_Oben_Pressen_Actions )
endfunction

//===========================================================================
// Trigger: Oben Aufheben
//===========================================================================
function Trig_Oben_Aufheben_Actions takes nothing returns nothing
    call ForceRemovePlayerSimple( GetTriggerPlayer(), udg_CameraAngleUp )
    call DisableTrigger( GetTriggeringTrigger() )
endfunction

//===========================================================================
function InitTrig_Oben_Aufheben takes nothing returns nothing
    set gg_trg_Oben_Aufheben = CreateTrigger(  )
    call DisableTrigger( gg_trg_Oben_Aufheben )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Oben_Aufheben, Player(0), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_UP )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Oben_Aufheben, Player(1), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_UP )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Oben_Aufheben, Player(2), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_UP )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Oben_Aufheben, Player(3), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_UP )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Oben_Aufheben, Player(4), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_UP )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Oben_Aufheben, Player(5), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_UP )
    call TriggerAddAction( gg_trg_Oben_Aufheben, function Trig_Oben_Aufheben_Actions )
endfunction

//===========================================================================
// Trigger: Oben
//===========================================================================
function Trig_Oben_Func001A takes nothing returns nothing
    set udg_CameraAngle[GetConvertedPlayerId(GetEnumPlayer())] = ( udg_CameraAngle[GetConvertedPlayerId(GetEnumPlayer())] - 5 )
endfunction

function Trig_Oben_Func002C takes nothing returns boolean
    if ( not ( CountPlayersInForceBJ(udg_CameraAngleUp) == 0 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Oben_Actions takes nothing returns nothing
    call ForForce( udg_CameraAngleUp, function Trig_Oben_Func001A )
    if ( Trig_Oben_Func002C() ) then
        call DisableTrigger( GetTriggeringTrigger() )
    else
        call DoNothing(  )
    endif
endfunction

//===========================================================================
function InitTrig_Oben takes nothing returns nothing
    set gg_trg_Oben = CreateTrigger(  )
    call DisableTrigger( gg_trg_Oben )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Oben, 0.10 )
    call TriggerAddAction( gg_trg_Oben, function Trig_Oben_Actions )
endfunction

//===========================================================================
// Trigger: Unten Pressen
//===========================================================================
function Trig_Unten_Pressen_Func006C takes nothing returns boolean
    if ( not ( I2R(udg_CameraAngle[udg_TempInteger]) > 350.00 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Unten_Pressen_Actions takes nothing returns nothing
    set udg_TempInteger = GetConvertedPlayerId(GetTriggerPlayer())
    set udg_CameraAngle[udg_TempInteger] = ( udg_CameraAngle[udg_TempInteger] + 5 )
    call ForceAddPlayerSimple( GetTriggerPlayer(), udg_CameraAngleDown )
    call EnableTrigger( gg_trg_Unten_Aufheben )
    call EnableTrigger( gg_trg_Unten )
    if ( Trig_Unten_Pressen_Func006C() ) then
        call ConditionalTriggerExecute( gg_trg_Correct_AoA )
    else
    endif
    set udg_TempInteger = 0
endfunction

//===========================================================================
function InitTrig_Unten_Pressen takes nothing returns nothing
    set gg_trg_Unten_Pressen = CreateTrigger(  )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Unten_Pressen, Player(2), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_DOWN )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Unten_Pressen, Player(3), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_DOWN )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Unten_Pressen, Player(4), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_DOWN )
    call TriggerAddAction( gg_trg_Unten_Pressen, function Trig_Unten_Pressen_Actions )
endfunction

//===========================================================================
// Trigger: Unten Aufheben
//===========================================================================
function Trig_Unten_Aufheben_Actions takes nothing returns nothing
    call ForceRemovePlayerSimple( GetTriggerPlayer(), udg_CameraAngleDown )
    call DisableTrigger( GetTriggeringTrigger() )
endfunction

//===========================================================================
function InitTrig_Unten_Aufheben takes nothing returns nothing
    set gg_trg_Unten_Aufheben = CreateTrigger(  )
    call DisableTrigger( gg_trg_Unten_Aufheben )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Unten_Aufheben, Player(0), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_DOWN )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Unten_Aufheben, Player(1), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_DOWN )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Unten_Aufheben, Player(2), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_DOWN )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Unten_Aufheben, Player(3), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_DOWN )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Unten_Aufheben, Player(4), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_DOWN )
    call TriggerRegisterPlayerKeyEventBJ( gg_trg_Unten_Aufheben, Player(5), bj_KEYEVENTTYPE_RELEASE, bj_KEYEVENTKEY_DOWN )
    call TriggerAddAction( gg_trg_Unten_Aufheben, function Trig_Unten_Aufheben_Actions )
endfunction

//===========================================================================
// Trigger: Unten
//===========================================================================
function Trig_Unten_Func001A takes nothing returns nothing
    set udg_CameraAngle[GetConvertedPlayerId(GetEnumPlayer())] = ( udg_CameraAngle[GetConvertedPlayerId(GetEnumPlayer())] + 5 )
endfunction

function Trig_Unten_Func002C takes nothing returns boolean
    if ( not ( CountPlayersInForceBJ(udg_CameraAngleDown) == 0 ) ) then
        return false
    endif
    return true
endfunction

function Trig_Unten_Actions takes nothing returns nothing
    call ForForce( udg_CameraAngleDown, function Trig_Unten_Func001A )
    if ( Trig_Unten_Func002C() ) then
        call DisableTrigger( GetTriggeringTrigger() )
    else
        call DoNothing(  )
    endif
endfunction

//===========================================================================
function InitTrig_Unten takes nothing returns nothing
    set gg_trg_Unten = CreateTrigger(  )
    call DisableTrigger( gg_trg_Unten )
    call TriggerRegisterTimerEventPeriodic( gg_trg_Unten, 0.10 )
    call TriggerAddAction( gg_trg_Unten, function Trig_Unten_Actions )
endfunction
 
Level 4
Joined
Oct 25, 2019
Messages
14
The code is quite messy because it is "convert to custom text" of normal triggers

What happens if you change your periodic events (All TriggerRegisterTimerEventPeriodic) with the same value at known frequency like (1. / 30.)?
Thanks for the suggestion. I played around with all possible values for a long time in order to get the best possible out of it.
I don’t think that any improvements can be made with it. The camera as such also works, it would rather need a wall collision or something similar.
The main problem is also more on the hero's movement control, this could be more precise.
But here, too, I tried to play with values in order to achieve the best possible results ...in my opinion.
 
Status
Not open for further replies.
Top