Compare commits

...

35 Commits

Author SHA1 Message Date
Maikel de Vries df1d93992f Make sure LargeCaveMushroom does not burn forever 2014-02-22 15:16:54 +01:00
Tobias Zwick 1066c4a4b3 increase engine version number to 5.4.1 2014-02-16 22:45:27 +07:00
Sven Eberhardt 455c35e2e5 Fix DarkCatle null pointers and intro (#1034)
(cherry picked from commit 085ec9de27)
2014-02-16 22:43:53 +07:00
Martin Plicht 92186db246 StdScheduler: Make DoScheduleProcs virtual, override it in C4AbstractApp and set isInManualLoop flag around the DoScheduleProcs call so the FlushMessages() of C4AbstractApp will happen when isInManualLoop is true 2014-02-16 14:48:16 +01:00
Martin Plicht 75f3fb2d70 C4NetIO: #ifdef __APPLE__, not APPLE 2014-02-16 14:28:01 +01:00
Maikel de Vries ce56d6a681 Fixed the pickaxe creating huge amounts of earth (#1030) 2014-02-16 12:00:25 +01:00
Martin Plicht d63ea57e5f C4NetIO: mac: To be on the safe side, only activate poll timeout cap when APPLE 2014-02-16 11:46:38 +01:00
Martin Plicht f90e67d4ca cmake: mac: Re-add libs bundling, revert to LegacyFindFreeType for APPLE 2014-02-16 11:46:38 +01:00
Martin Plicht e3b7d9841c C4NetIO: Place silly poll timeout fix where it actually helps in case of UDP 2014-02-16 11:46:38 +01:00
Martin Plicht a9abbd0cc8 cmake: mac: Reorder compiler flag selection a bit 2014-02-16 11:46:38 +01:00
Martin Plicht 16e55f9915 StdScheduler::Added is not necessarily called from the thread the
procedure is meant to be run on, so introduce yet another StdScheduler
extra method StartOnCurrentThread which on Mac OS X does the actual run
loop registration stuff and needs to be called from the actual thread
the scheduler is supposed to run on

StdSchedulerMac: Remove SCHAdditions objects again
2014-02-16 11:46:38 +01:00
Martin Plicht b76b4342aa StdSchedulerMac: Was crashy because of faulty memory management which is now hopefully better 2014-02-16 11:46:38 +01:00
Martin Plicht b6083f0e9f mac: Add precompiled nib files to really not require Xcode … 2014-02-16 11:46:37 +01:00
Martin Plicht bbc2547ab7 cmake: mac: make install installs bundle 2014-02-16 11:46:37 +01:00
Martin Plicht 7338153627 C4NetIO: Endless polls cut short by cheap hack 2014-02-16 11:46:37 +01:00
Martin Plicht 6c8b944272 StdSchedulerMac: Only add NSRunLoop additions for main thread 2014-02-16 11:46:37 +01:00
Martin Plicht 80fce0968d cmake: Insert hacks and hardcoded paths to make mac version compilable using Unix make 2014-02-16 11:46:37 +01:00
Maikel de Vries 72d8fd88c0 Fixed boomshire's door solidmasks (#1035) 2014-02-16 11:43:19 +01:00
Tobias Zwick c772ff8df6 fix possible block in tutorial 2 (#1036) 2014-02-16 13:31:12 +07:00
Tobias Zwick ba64fda137 selecting the clonks via hotkey was all backwards (#1031)
e.g. pressing ctrl+3 selected 1st clonk if there are 3 in the crew

(cherry picked from commit 3a8c8d7c3b)
2014-02-16 13:16:57 +07:00
Sven Eberhardt 48cc4be206 Fix save as scenario for Dialogue.
Add GameCall as fallback mechanism for dialog implementation if no local function is defined.

(cherry picked from commit 13a60848c6)
2014-02-16 12:34:40 +07:00
Nicolas Hake 4745f881c4 Use pkg-config over CMake to find Freetype (#1024)
If pkg-config does not exist on the build system, then the old
FindFreetype.cmake behavior will be fallen back upon, but pkg-config
should be a lot more reliable.
2014-02-12 13:28:43 +01:00
Nicolas Hake a7199c26a0 Add option to link Boost dynamically (#1025)
Distributions can guarantee the existence of a specific version of
the Boost libraries, so it makes less sense to link them statically.
2014-02-12 13:28:42 +01:00
Tobias Zwick 65873fbfdb add a note to CMakeLists.txt
(cherry picked from commit a0848af371d451e6ef69918bacf2dd42bf7a6202)
(cherry picked from commit 44ffc5c470)
2014-02-07 21:56:11 +07:00
Sven Eberhardt 638467d5a6 Make acid corrode coal and firestone (#1032)
(cherry picked from commit 959da11e11)
2014-02-07 21:56:04 +07:00
Tobias Zwick b63f46d0ba fix statistics in player selection dialogues ignore linebreaks (#1027)
I was unable to find the original commit that might have caused this, so I passed the constructor of the TextWindow an extra parameter to treat "|" as linebreaks and changed the translation files.

(cherry picked from commit e1cff59418)
2014-02-03 01:12:39 +07:00
Maikel de Vries 38ea88bdb2 Removed double Title1.png from Arena.ocf
(cherry picked from commit 6cbe9e0554)
2014-02-03 01:12:23 +07:00
Tobias Zwick 8741283ecb change a LogFatal() to Log() when loading of a player failed (related to #693)
(cherry picked from commit 724bb80300)
2014-02-03 00:22:21 +07:00
Maikel de Vries 037d167de8 Fix issues with Crash.ocs intro (#951)
(cherry picked from commit addf28a0ab)
2014-02-03 00:22:19 +07:00
Maikel de Vries 1f34a2bbef Moved Dialogue to Helpers.ocd to avoid copies
(cherry picked from commit 6ff632e2f2)
2014-02-03 00:22:14 +07:00
Tobias Zwick 325d2b80e1 fix update via *.ocu on Windows 7 (#870)
see bugtracker entry for details
2014-02-02 23:45:24 +07:00
Tobias Zwick ba2d71c942 installer should delete Issues.ocf, Experimental.ocf etc on install (part of solution to #1029) 2014-02-02 22:50:42 +07:00
Tobias Zwick 8bc4b086d5 fix typo in documentation (#1023)
(cherry picked from commit 1ed6521565)
2014-02-02 13:43:51 +07:00
Tobias Zwick 2f5946d419 fix typo in english translation
(cherry picked from commit 1e359bddf9)
2014-02-02 13:43:41 +07:00
Tobias Zwick 47984a322d fix game does not initialize when OS runs for longer than 30 days or so.
Special thanks to Yshxod for having the patience and debugging the game with me!

(cherry picked from commit a04a1b697b)
2014-02-02 13:43:21 +07:00
64 changed files with 1008 additions and 1050 deletions

View File

@ -99,6 +99,12 @@ set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_FLAGS}")
CHECK_CXX_SOURCE_COMPILES("#include <regex>\nint main() { std::cregex_iterator ri; }" HAVE_WORKING_REGEX)
CMAKE_DEPENDENT_OPTION(USE_BOOST_REGEX "Use Boost.Regex even if the C++ runtime has a working implementation of <regex>" OFF "HAVE_WORKING_REGEX" ON)
# We link Boost statically because that makes it easier for us to distribute
# the resulting binary. Distributions have the ability to guarantee a certain
# version of the library exists on the system though, so they may prefer
# dynamic linking.
option(USE_STATIC_BOOST "Link Boost libraries statically" ON)
if(MSVC_VERSION GREATER 1499)
list(APPEND OC_CXX_FLAGS /MP)
list(REMOVE_ITEM OC_CXX_FLAGS_DEBUG /Gm)
@ -843,8 +849,13 @@ if(NOT WIN32)
endif()
if(NOT USE_CONSOLE)
find_package(Freetype REQUIRED)
include_directories(${FREETYPE_INCLUDE_DIRS})
if(APPLE)
include(LegacyFindFreetype)
include_directories(${FREETYPE_INCLUDE_DIRS})
else()
find_package(Freetype REQUIRED)
include_directories(${FREETYPE_INCLUDE_DIRS})
endif()
endif()
# FINDLIB works the same as find_library, but also marks the resulting var as
@ -925,11 +936,6 @@ if(APPLE)
src/res/Clonk.icns
src/res/ocd.icns src/res/ocf.icns src/res/ocg.icns
src/res/C4P.icns src/res/ocs.icns src/res/ocu.icns
src/res/MainMenu.xib
src/res/FullScreen.xib
src/res/EditorGUIWindow.xib
src/res/EditorViewport.xib
src/res/Editor.xib
src/res/Mouse_Trans.png
src/res/Cursor_Trans.png
src/res/Brush_Trans.png
@ -945,6 +951,24 @@ if(APPLE)
src/res/Ift_Trans.png
src/res/NoIft_Trans.png
)
if (CMAKE_GENERATOR STREQUAL Xcode)
list(APPEND OC_BUNDLE_RESOURCES
src/res/MainMenu.xib
src/res/FullScreen.xib
src/res/EditorGUIWindow.xib
src/res/EditorViewport.xib
src/res/Editor.xib
)
else()
list(APPEND OC_BUNDLE_RESOURCES
src/res/nib/MainMenu.nib
src/res/nib/FullScreen.nib
src/res/nib/EditorGUIWindow.nib
src/res/nib/EditorViewport.nib
src/res/nib/Editor.nib
)
endif()
# Add icon resources
set_source_files_properties(
@ -1241,35 +1265,36 @@ endif()
############################################################################
if (APPLE)
add_custom_command(TARGET openclonk
POST_BUILD COMMAND "/usr/bin/ruby" "${CMAKE_CURRENT_SOURCE_DIR}/tools/osx_bundle_libs"
)
set(CMAKE_XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES)
set(CMAKE_XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/C4Include.h")
SET_TARGET_PROPERTIES(openclonk PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES)
SET_TARGET_PROPERTIES(openclonk PROPERTIES XCODE_ATTRIBUTE_GCC_PFE_FILE_C_DIALECTS "c++ objective-c++")
SET_TARGET_PROPERTIES(openclonk PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/C4Include.h")
SET_TARGET_PROPERTIES(c4group PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES)
SET_TARGET_PROPERTIES(c4group PROPERTIES XCODE_ATTRIBUTE_GCC_PFE_FILE_C_DIALECTS "c++ objective-c++")
SET_TARGET_PROPERTIES(c4group PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/C4Include.h")
SET_TARGET_PROPERTIES(libmisc PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES)
SET_TARGET_PROPERTIES(libmisc PROPERTIES XCODE_ATTRIBUTE_GCC_PFE_FILE_C_DIALECTS "c++ objective-c++")
SET_TARGET_PROPERTIES(libmisc PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/C4Include.h")
SET_TARGET_PROPERTIES(openclonk PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
if (USE_APPLE_CLANG)
# for good measure - seems to be part of default OSX installation
# linking with static freetype library requires it
target_link_libraries(openclonk "/usr/lib/libbz2.dylib")
set(HAVE_RVALUE_REF ON)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -std=c++0x -g -Wall -fobjc-arc")
if(CMAKE_GENERATOR STREQUAL Xcode)
add_custom_command(TARGET openclonk
POST_BUILD COMMAND "/usr/bin/ruby" "${CMAKE_CURRENT_SOURCE_DIR}/tools/osx_bundle_libs"
)
set(CMAKE_XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES)
set(CMAKE_XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/C4Include.h")
set_target_properties(openclonk PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES)
set_target_properties(openclonk PROPERTIES XCODE_ATTRIBUTE_GCC_PFE_FILE_C_DIALECTS "c++ objective-c++")
set_target_properties(openclonk PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/C4Include.h")
set_target_properties(c4group PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES)
set_target_properties(c4group PROPERTIES XCODE_ATTRIBUTE_GCC_PFE_FILE_C_DIALECTS "c++ objective-c++")
set_target_properties(c4group PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/C4Include.h")
set_target_properties(libmisc PROPERTIES XCODE_ATTRIBUTE_GCC_PRECOMPILE_PREFIX_HEADER YES)
set_target_properties(libmisc PROPERTIES XCODE_ATTRIBUTE_GCC_PFE_FILE_C_DIALECTS "c++ objective-c++")
set_target_properties(libmisc PROPERTIES XCODE_ATTRIBUTE_GCC_PREFIX_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/src/C4Include.h")
set_target_properties(openclonk PROPERTIES XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES)
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvm.clang.1_0")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++0x")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
set(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} -std=c++0x -stdlib=libc++ -g -Wall")
SET_TARGET_PROPERTIES(c4group PROPERTIES XCODE_ATTRIBUTE_GCC_PFE_FILE_C_DIALECTS "c++0x objective-c++0x")
SET_TARGET_PROPERTIES(openclonk PROPERTIES XCODE_ATTRIBUTE_GCC_PFE_FILE_C_DIALECTS "c++0x objective-c++0x")
set(HAVE_RVALUE_REF ON)
else()
set(CMAKE_XCODE_ATTRIBUTE_GCC_VERSION "com.apple.compilers.llvmgcc42")
set_target_properties(c4group PROPERTIES XCODE_ATTRIBUTE_GCC_PFE_FILE_C_DIALECTS "c++0x objective-c++0x")
set_target_properties(openclonk PROPERTIES XCODE_ATTRIBUTE_GCC_PFE_FILE_C_DIALECTS "c++0x objective-c++0x")
endif()
endif()
@ -1400,7 +1425,7 @@ if(HAVE_UPNP)
endif()
if(USE_BOOST_REGEX)
SET(Boost_USE_STATIC_LIBS ON)
SET(Boost_USE_STATIC_LIBS ${USE_STATIC_BOOST})
find_package(Boost 1.40.0 REQUIRED COMPONENTS regex)
# Disable automatic linking, we'll do it ourselves
add_definitions(-DBOOST_REGEX_NO_LIB)
@ -1439,38 +1464,44 @@ install(
)"
)
add_custom_target(icon32 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc32.png)
add_custom_target(icon64 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc64.png)
add_custom_target(icon128 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc128.png)
add_custom_target(icon256 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc256.png)
add_custom_target(icon512 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc512.png)
add_dependencies(data icon32 icon64 icon128 icon256 icon512)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc32.png
DESTINATION share/icons/hicolor/32x32/apps
RENAME openclonk.png
)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc64.png
DESTINATION share/icons/hicolor/64x64/apps
RENAME openclonk.png
)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc128.png
DESTINATION share/icons/hicolor/128x128/apps
RENAME openclonk.png
)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc256.png
DESTINATION share/icons/hicolor/256x256/apps
RENAME openclonk.png
)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc512.png
DESTINATION share/icons/hicolor/512x512/apps
RENAME openclonk.png
)
if (NOT APPLE)
add_custom_target(icon32 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc32.png)
add_custom_target(icon64 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc64.png)
add_custom_target(icon128 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc128.png)
add_custom_target(icon256 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc256.png)
add_custom_target(icon512 DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc512.png)
add_dependencies(data icon32 icon64 icon128 icon256 icon512)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc32.png
DESTINATION share/icons/hicolor/32x32/apps
RENAME openclonk.png
)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc64.png
DESTINATION share/icons/hicolor/64x64/apps
RENAME openclonk.png
)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc128.png
DESTINATION share/icons/hicolor/128x128/apps
RENAME openclonk.png
)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc256.png
DESTINATION share/icons/hicolor/256x256/apps
RENAME openclonk.png
)
install(
FILES ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc512.png
DESTINATION share/icons/hicolor/512x512/apps
RENAME openclonk.png
)
endif()
# NOTE: The scripts that does the autobuilds and ultimately the automated
# releases as well do keep their own list of group files around currently.
# So if you change anything here, change it in the release scripts as well.
# See openclonk-release-scripts.git/groupcontent.py
set(OC_C4GROUPS
Graphics.ocg
Material.ocg
@ -1489,12 +1520,23 @@ get_target_property(C4GROUP_LOCATION c4group LOCATION)
get_target_property(CLONK_LOCATION openclonk LOCATION)
foreach(group ${OC_C4GROUPS})
if (APPLE)
add_custom_command(TARGET openclonk
POST_BUILD COMMAND "/bin/sh" "${CMAKE_CURRENT_SOURCE_DIR}/tools/osx_pack_gamedata.sh"
"${C4GROUP_LOCATION}"
"${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}"
DEPENDS c4group
if (CMAKE_GENERATOR STREQUAL Xcode)
add_custom_command(TARGET openclonk
POST_BUILD COMMAND "/bin/sh" "${CMAKE_CURRENT_SOURCE_DIR}/tools/osx_pack_gamedata.sh"
"${C4GROUP_LOCATION}"
"${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}"
# leave out third parameter here so the script can figure out Xcode-ish paths as usual
DEPENDS c4group
)
else()
add_custom_command(TARGET openclonk
POST_BUILD COMMAND "/bin/sh" "${CMAKE_CURRENT_SOURCE_DIR}/tools/osx_pack_gamedata.sh"
"${C4GROUP_LOCATION}"
"${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}"
"${CMAKE_CURRENT_BINARY_DIR}/openclonk.app/Contents/Resources"
DEPENDS c4group
)
endif()
else()
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${group}
@ -1502,22 +1544,30 @@ foreach(group ${OC_C4GROUPS})
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/planet/${group}
DEPENDS c4group
VERBATIM
)
)
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${group} DESTINATION share/games/openclonk)
endif()
endforeach()
if (NOT APPLE)
add_custom_target(groups DEPENDS ${OC_C4GROUPS})
add_dependencies(data groups)
# Install new files
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/openclonk.desktop DESTINATION share/applications)
# Install binaries
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/openclonk DESTINATION games/)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/c4group DESTINATION bin/)
else()
install(TARGETS openclonk
BUNDLE DESTINATION .
)
install(TARGETS c4group c4script
RUNTIME DESTINATION .
)
endif()
# Install new files
install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/openclonk.desktop DESTINATION share/applications)
# Install binaries
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/openclonk DESTINATION games/)
install(PROGRAMS ${CMAKE_CURRENT_BINARY_DIR}/c4group DESTINATION bin/)
############################################################################
# setup_openclonk.exe
############################################################################

View File

@ -13,7 +13,7 @@ SET(C4ENGINEID "${C4PROJECT_TLD}.${C4PROJECT_DOMAIN}.${C4ENGINENICK}")
SET(C4XVER1 5)
SET(C4XVER2 4)
SET(C4XVER3 0)
SET(C4XVER3 1)
# C4VERSIONBUILDNAME should be witty and somewhat frequently changing
# for alpha and beta releases, and meaningful and stable for stable releases.

View File

@ -1,143 +1,42 @@
# - Locate FreeType library
# OpenClonk, http://www.openclonk.org
#
# Copyright (c) 2014, The OpenClonk Team and contributors
#
# Distributed under the terms of the ISC license; see accompanying file
# "COPYING" for details.
#
# "Clonk" is a registered trademark of Matthes Bender, used with permission.
# See accompanying file "TRADEMARK" for details.
#
# To redistribute this file separately, substitute the full license texts
# for the above references.
# This module defines
# FREETYPE_LIBRARIES, the library to link against
# FREETYPE_FOUND, if false, do not try to link to FREETYPE
# FREETYPE_INCLUDE_DIRS, where to find headers.
# FREETYPE_VERSION_STRING, the version of freetype found (since CMake 2.8.8)
# This is the concatenation of the paths:
# FREETYPE_INCLUDE_DIR_ft2build
# FREETYPE_INCLUDE_DIR_freetype2
#
# $FREETYPE_DIR is an environment variable that would
# correspond to the ./configure --prefix=$FREETYPE_DIR
# used in building FREETYPE.
# FREETYPE_VERSION_STRING, the version of freetype found
#=============================================================================
# CMake - Cross Platform Makefile Generator
# Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# * Neither the names of Kitware, Inc., the Insight Software Consortium,
# nor the names of their contributors may be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
# Created by Eric Wing.
# Modifications by Alexander Neundorf.
# This file has been renamed to "FindFreetype.cmake" instead of the correct
# "FindFreeType.cmake" in order to be compatible with the one from KDE4, Alex.
# Modified by Nicolas Hake for the OpenClonk Project to make FindFreetype also
# look for the versioned libraries the freetype MSVC project generates.
# Ugh, FreeType seems to use some #include trickery which
# makes this harder than it should be. It looks like they
# put ft2build.h in a common/easier-to-find location which
# then contains a #include to a more specific header in a
# more specific location (#include <freetype/config/ftheader.h>).
# Then from there, they need to set a bunch of #define's
# so you can do something like:
# #include FT_FREETYPE_H
# Unfortunately, using CMake's mechanisms like include_directories()
# wants explicit full paths and this trickery doesn't work too well.
# I'm going to attempt to cut out the middleman and hope
# everything still works.
find_path(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
HINTS
ENV FREETYPE_DIR
PATHS
/usr/X11R6
/usr/local/X11R6
/usr/local/X11
/usr/freeware
PATH_SUFFIXES include/freetype2 include
)
find_path(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
HINTS
ENV FREETYPE_DIR
PATHS
/usr/X11R6
/usr/local/X11R6
/usr/local/X11
/usr/freeware
PATH_SUFFIXES include/freetype2 include
)
if(FREETYPE_INCLUDE_DIR_freetype2 AND EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
file(STRINGS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h" freetype_version_str
REGEX "^#[\t ]*define[\t ]+FREETYPE_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
unset(FREETYPE_VERSION_STRING)
foreach(VPART MAJOR MINOR PATCH)
foreach(VLINE ${freetype_version_str})
if(VLINE MATCHES "^#[\t ]*define[\t ]+FREETYPE_${VPART}")
string(REGEX REPLACE "^#[\t ]*define[\t ]+FREETYPE_${VPART}[\t ]+([0-9]+)$" "\\1"
FREETYPE_VERSION_PART "${VLINE}")
if(FREETYPE_VERSION_STRING)
set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_STRING}.${FREETYPE_VERSION_PART}")
else()
set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_PART}")
endif()
unset(FREETYPE_VERSION_PART)
endif()
endforeach()
endforeach()
if(FREETYPE_VERSION_STRING)
string(REPLACE "." "" FREETYPE_VERSIONED_LIBRARY "${FREETYPE_VERSION_STRING}")
set(FREETYPE_VERSIONED_LIBRARY "freetype${FREETYPE_VERSIONED_LIBRARY}")
endif()
# Use pkg-config if possible instead of doing guesswork like the default CMake module does
find_package(PkgConfig QUIET)
if(PKG_CONFIG_FOUND)
set(_ft_pkgconfig_args "")
if(FREETYPE_FIND_REQUIRED)
set(_ft_pkgconfig_args "${_ft_pkgconfig_args}REQUIRED ")
endif()
if(FREETYPE_FIND_QUIET)
set(_ft_pkgconfig_args "${_ft_pkgconfig_args}QUIET ")
endif()
set(_ft_pkgconfig_args "${_ft_pkgconfig_args}freetype2")
if(FREETYPE_FIND_VERSION)
if(NOT FREETYPE_FIND_VERSION_EXACT)
set(_ft_pkgconfig_args "${_ft_pkgconfig_args}>")
endif()
set(_ft_pkgconfig_args "${_ft_pkgconfig_args}=${FREETYPE_FIND_VERSION} ")
endif()
pkg_check_modules(FREETYPE ${_ft_pkgconfig_args})
endif()
find_library(FREETYPE_LIBRARY
NAMES freetype libfreetype freetype219 ${FREETYPE_VERSIONED_LIBRARY}
HINTS
ENV FREETYPE_DIR
PATH_SUFFIXES lib
PATHS
/usr/X11R6
/usr/local/X11R6
/usr/local/X11
/usr/freeware
)
unset(FREETYPE_VERSIONED_LIBRARY)
# set the user variables
if(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
set(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}")
if(NOT FREETYPE_FOUND)
include(LegacyFindFreetype)
endif()
set(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}")
# handle the QUIETLY and REQUIRED arguments and set FREETYPE_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Freetype
REQUIRED_VARS FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS
VERSION_VAR FREETYPE_VERSION_STRING)
mark_as_advanced(FREETYPE_LIBRARY FREETYPE_INCLUDE_DIR_freetype2 FREETYPE_INCLUDE_DIR_ft2build)

View File

@ -0,0 +1,143 @@
# - Locate FreeType library
# This module defines
# FREETYPE_LIBRARIES, the library to link against
# FREETYPE_FOUND, if false, do not try to link to FREETYPE
# FREETYPE_INCLUDE_DIRS, where to find headers.
# FREETYPE_VERSION_STRING, the version of freetype found (since CMake 2.8.8)
# This is the concatenation of the paths:
# FREETYPE_INCLUDE_DIR_ft2build
# FREETYPE_INCLUDE_DIR_freetype2
#
# $FREETYPE_DIR is an environment variable that would
# correspond to the ./configure --prefix=$FREETYPE_DIR
# used in building FREETYPE.
#=============================================================================
# CMake - Cross Platform Makefile Generator
# Copyright 2000-2011 Kitware, Inc., Insight Software Consortium
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# * Neither the names of Kitware, Inc., the Insight Software Consortium,
# nor the names of their contributors may be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
# Created by Eric Wing.
# Modifications by Alexander Neundorf.
# This file has been renamed to "FindFreetype.cmake" instead of the correct
# "FindFreeType.cmake" in order to be compatible with the one from KDE4, Alex.
# Modified by Nicolas Hake for the OpenClonk Project to make FindFreetype also
# look for the versioned libraries the freetype MSVC project generates.
# Ugh, FreeType seems to use some #include trickery which
# makes this harder than it should be. It looks like they
# put ft2build.h in a common/easier-to-find location which
# then contains a #include to a more specific header in a
# more specific location (#include <freetype/config/ftheader.h>).
# Then from there, they need to set a bunch of #define's
# so you can do something like:
# #include FT_FREETYPE_H
# Unfortunately, using CMake's mechanisms like include_directories()
# wants explicit full paths and this trickery doesn't work too well.
# I'm going to attempt to cut out the middleman and hope
# everything still works.
find_path(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
HINTS
ENV FREETYPE_DIR
PATHS
/usr/X11R6
/usr/local/X11R6
/usr/local/X11
/usr/freeware
PATH_SUFFIXES include/freetype2 include
)
find_path(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
HINTS
ENV FREETYPE_DIR
PATHS
/usr/X11R6
/usr/local/X11R6
/usr/local/X11
/usr/freeware
PATH_SUFFIXES include/freetype2 include
)
if(FREETYPE_INCLUDE_DIR_freetype2 AND EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
file(STRINGS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h" freetype_version_str
REGEX "^#[\t ]*define[\t ]+FREETYPE_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
unset(FREETYPE_VERSION_STRING)
foreach(VPART MAJOR MINOR PATCH)
foreach(VLINE ${freetype_version_str})
if(VLINE MATCHES "^#[\t ]*define[\t ]+FREETYPE_${VPART}")
string(REGEX REPLACE "^#[\t ]*define[\t ]+FREETYPE_${VPART}[\t ]+([0-9]+)$" "\\1"
FREETYPE_VERSION_PART "${VLINE}")
if(FREETYPE_VERSION_STRING)
set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_STRING}.${FREETYPE_VERSION_PART}")
else()
set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_PART}")
endif()
unset(FREETYPE_VERSION_PART)
endif()
endforeach()
endforeach()
if(FREETYPE_VERSION_STRING)
string(REPLACE "." "" FREETYPE_VERSIONED_LIBRARY "${FREETYPE_VERSION_STRING}")
set(FREETYPE_VERSIONED_LIBRARY "freetype${FREETYPE_VERSIONED_LIBRARY}")
endif()
endif()
find_library(FREETYPE_LIBRARY
NAMES freetype libfreetype freetype219 ${FREETYPE_VERSIONED_LIBRARY}
HINTS
ENV FREETYPE_DIR
PATH_SUFFIXES lib
PATHS
/usr/X11R6
/usr/local/X11R6
/usr/local/X11
/usr/freeware
)
unset(FREETYPE_VERSIONED_LIBRARY)
# set the user variables
if(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
set(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}")
endif()
set(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}")
# handle the QUIETLY and REQUIRED arguments and set FREETYPE_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Freetype
REQUIRED_VARS FREETYPE_LIBRARY FREETYPE_INCLUDE_DIRS
VERSION_VAR FREETYPE_VERSION_STRING)
mark_as_advanced(FREETYPE_LIBRARY FREETYPE_INCLUDE_DIR_freetype2 FREETYPE_INCLUDE_DIR_ft2build)

View File

@ -16,7 +16,7 @@
</dd>
<dt id="fullscreen">--fullscreen</dt>
<dd>
<text>Starts in fullscreen mode (also called player mode). If no scenario and no direct join adress is given, the startup menu is shown.</text>
<text>Starts in fullscreen mode (also called player mode). If no scenario and no direct join address is given, the startup menu is shown.</text>
</dd>
<dt id="config">--config=Filename</dt>
<dd>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@ -11,6 +11,7 @@ Dig2ObjectRatio=140
Blast2ObjectRatio=200
MaxAirSpeed=100
MaxSlide=1
Corrode=50
Placement=40
TextureOverlay=coal
OverlayType=8

View File

@ -11,6 +11,7 @@ Blast2Object=Firestone
Blast2ObjectRatio=115
MaxAirSpeed=100
MaxSlide=1
Corrode=50
Placement=40
TextureOverlay=firestone
Inflammable=1

View File

@ -47,6 +47,7 @@ global func FxIntIntroStart(object target, proplist effect)
effect.Pilot->SetDir(DIR_Left);
effect.Pilot->SetObjectLayer(effect.Pilot);
effect.Dialog = effect.Pilot->SetDialogue("Pilot");
effect.Dialog->SetInteraction(false);
effect.Plane->FaceRight();
effect.Plane->StartInstantFlight(90, 15);
@ -106,10 +107,11 @@ global func FxIntIntroTimer(object target, proplist effect, int time)
if(effect.Time == 500)
for(var i = 0; i < GetPlayerCount(); ++i)
GetCursor(GetPlayerByIndex(i))->CloseMenu();
if(effect.Time >= 830)
{
effect.Pilot->SetCommand("MoveTo", effect.Pilot, 120 - effect.Pilot->GetX(), 860 - effect.Pilot->GetY());
effect.Dialog->SetInteraction(true);
return -1;
}
}

View File

@ -3,7 +3,7 @@ MsgIntro1=Wow, it's very turbulent here...
MsgIntro2=Have a look at that lava lake!
MsgIntro3=Come on old girl, hang in there...
MsgIntro4=Uh oh...
MsgIntro5=Quick! The ejecter seats!
MsgIntro5=Quick! The ejection seats!
# NPC Pilot
NamePilot=Pilot

View File

@ -1,10 +1,7 @@
[DefCore]
id=Dialogue
id=DialogueCastle
Version=5,2,0,1
Category=C4D_StaticBack
Picture=0,0,64,64
Width=1
Height=1

View File

@ -12,12 +12,12 @@ func GetPortraitDef(object talker)
var portrait = talker.portrait;
// Default definition has Clonk portrait
// (Can't get default from skin, because there's no function GetSkin D:)
if (!portrait || portrait == "" || portrait == "Clonk") return Dialogue;
if (!portrait || portrait == "" || portrait == "Clonk") return DialogueCastle;
// Otherwise, bind portrait to an invisible object
// (note: invisible object is leaked. can't really know when the message will be gone.)
if (!talker.portrait_obj)
{
talker.portrait_obj = CreateObject(Dialogue);
talker.portrait_obj = CreateObject(DialogueCastle);
talker.portrait_obj->SetAction("Attach", talker);
talker.portrait_obj->SetGraphics(portrait);
talker.portrait_obj.Visibility = VIS_None;

View File

@ -1,5 +1,7 @@
/* Automatically created objects file */
static g_shroom1, g_shroom2, g_shroom3, g_shroom4, g_ruin1, g_ruin2, g_ruin3, g_elev1, g_elev2, g_farmer, g_king;
func InitializeObjects()
{
var Grass0001 = CreateObject(Grass, 396, 1149);
@ -30,18 +32,22 @@ func InitializeObjects()
var Fern0011 = CreateObject(Fern, 312, 1432);
Fern0011->SetClrModulation(0xffa08060);
var LargeCaveMushroom0015 = CreateObject(LargeCaveMushroom, 1355, 1451);
LargeCaveMushroom0015->SetClrModulation(0xffcddfdf);
var LargeCaveMushroom0019 = CreateObject(LargeCaveMushroom, 1308, 1409);
LargeCaveMushroom0019->SetR(180);
LargeCaveMushroom0019->SetClrModulation(0xffdae7dc);
LargeCaveMushroom0019->SetPosition(1308, 1384);
var LargeCaveMushroom0023 = CreateObject(LargeCaveMushroom, 1411, 1447);
LargeCaveMushroom0023->SetClrModulation(0xffe9d5dd);
var LargeCaveMushroom0027 = CreateObject(LargeCaveMushroom, 1420, 1397);
LargeCaveMushroom0027->SetR(160);
LargeCaveMushroom0027->SetClrModulation(0xffeaedfb);
LargeCaveMushroom0027->SetPosition(1420, 1374);
g_shroom1 = CreateObject(LargeCaveMushroom, 1355, 1451);
g_shroom1->SetClrModulation(0xffcddfdf);
g_shroom1.StaticSaveVar = "g_shroom1";
g_shroom2 = CreateObject(LargeCaveMushroom, 1308, 1409);
g_shroom2->SetR(180);
g_shroom2->SetClrModulation(0xffdae7dc);
g_shroom2.StaticSaveVar = "g_shroom2";
g_shroom2->SetPosition(1308, 1384);
g_shroom3 = CreateObject(LargeCaveMushroom, 1411, 1447);
g_shroom3->SetClrModulation(0xffe9d5dd);
g_shroom3.StaticSaveVar = "g_shroom3";
g_shroom4 = CreateObject(LargeCaveMushroom, 1420, 1397);
g_shroom4->SetR(160);
g_shroom4->SetClrModulation(0xffeaedfb);
g_shroom4.StaticSaveVar = "g_shroom4";
g_shroom4->SetPosition(1420, 1374);
var Rank0031 = CreateObject(Rank, 1430, 1423);
Rank0031->SetR(-25);
@ -68,77 +74,96 @@ func InitializeObjects()
CreateObject(EnvPack_Candle, 1054, 672);
var EnvPack_Candle_Shine0049 = CreateObject(EnvPack_Candle_Shine, 1054, 672);
EnvPack_Candle_Shine0049->SetClrModulation(0xbfffffff);
EnvPack_Candle_Shine0049->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0049->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0050 = CreateObject(EnvPack_Candle_Shine, 1054, 672);
EnvPack_Candle_Shine0050->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0050->SetClrModulation(0xbfffffff);
EnvPack_Candle_Shine0050->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0051 = CreateObject(EnvPack_Candle_Shine, 1054, 671);
EnvPack_Candle_Shine0051->SetClrModulation(0xc9ffffff);
var EnvPack_Candle_Shine0051 = CreateObject(EnvPack_Candle_Shine, 1054, 672);
EnvPack_Candle_Shine0051->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0051->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0052 = CreateObject(EnvPack_Candle_Shine, 1054, 671);
EnvPack_Candle_Shine0052->SetClrModulation(0xc9ffffff);
EnvPack_Candle_Shine0052->SetObjectBlitMode(GFX_BLIT_Additive);
CreateObject(EnvPack_Candle, 1054, 575);
var EnvPack_Candle_Shine0053 = CreateObject(EnvPack_Candle_Shine, 1054, 575);
EnvPack_Candle_Shine0053->SetClrModulation(0xd9ffffff);
EnvPack_Candle_Shine0053->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0054 = CreateObject(EnvPack_Candle_Shine, 1054, 575);
EnvPack_Candle_Shine0054->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0054->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0055 = CreateObject(EnvPack_Candle_Shine, 1054, 575);
EnvPack_Candle_Shine0055->SetClrModulation(0xd8ffffff);
EnvPack_Candle_Shine0055->SetClrModulation(0xd9ffffff);
EnvPack_Candle_Shine0055->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0056 = CreateObject(EnvPack_Candle_Shine, 1054, 575);
EnvPack_Candle_Shine0056->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0056->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0057 = CreateObject(EnvPack_Candle_Shine, 1054, 575);
EnvPack_Candle_Shine0057->SetClrModulation(0xd8ffffff);
EnvPack_Candle_Shine0057->SetObjectBlitMode(GFX_BLIT_Additive);
CreateObject(EnvPack_Candle, 1185, 616);
var EnvPack_Candle_Shine0057 = CreateObject(EnvPack_Candle_Shine, 1185, 616);
EnvPack_Candle_Shine0057->SetClrModulation(0xc6ffffff);
EnvPack_Candle_Shine0057->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0058 = CreateObject(EnvPack_Candle_Shine, 1185, 616);
EnvPack_Candle_Shine0058->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0058->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0059 = CreateObject(EnvPack_Candle_Shine, 1185, 616);
EnvPack_Candle_Shine0059->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0059->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0060 = CreateObject(EnvPack_Candle_Shine, 1185, 616);
EnvPack_Candle_Shine0060->SetClrModulation(0xc6ffffff);
EnvPack_Candle_Shine0060->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0061 = CreateObject(EnvPack_Candle_Shine, 1185, 616);
EnvPack_Candle_Shine0061->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0061->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0062 = CreateObject(EnvPack_Candle_Shine, 1185, 616);
EnvPack_Candle_Shine0062->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0062->SetObjectBlitMode(GFX_BLIT_Additive);
CreateObject(EnvPack_Candle, 1531, 448);
var EnvPack_Candle_Shine0061 = CreateObject(EnvPack_Candle_Shine, 1531, 448);
EnvPack_Candle_Shine0061->SetClrModulation(0xd4ffffff);
EnvPack_Candle_Shine0061->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0062 = CreateObject(EnvPack_Candle_Shine, 1531, 448);
EnvPack_Candle_Shine0062->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0062->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0063 = CreateObject(EnvPack_Candle_Shine, 1531, 447);
EnvPack_Candle_Shine0063->SetClrModulation(0xddffffff);
EnvPack_Candle_Shine0063->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0064 = CreateObject(EnvPack_Candle_Shine, 1531, 448);
EnvPack_Candle_Shine0064->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0064->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0065 = CreateObject(EnvPack_Candle_Shine, 1531, 448);
EnvPack_Candle_Shine0065->SetClrModulation(0xd4ffffff);
EnvPack_Candle_Shine0065->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0066 = CreateObject(EnvPack_Candle_Shine, 1531, 448);
EnvPack_Candle_Shine0066->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0066->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0067 = CreateObject(EnvPack_Candle_Shine, 1531, 447);
EnvPack_Candle_Shine0067->SetClrModulation(0xddffffff);
EnvPack_Candle_Shine0067->SetObjectBlitMode(GFX_BLIT_Additive);
CreateObject(EnvPack_Candle, 1362, 432);
var EnvPack_Candle_Shine0065 = CreateObject(EnvPack_Candle_Shine, 1362, 432);
EnvPack_Candle_Shine0065->SetClrModulation(0xc7ffffff);
EnvPack_Candle_Shine0065->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0066 = CreateObject(EnvPack_Candle_Shine, 1362, 432);
EnvPack_Candle_Shine0066->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0066->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0067 = CreateObject(EnvPack_Candle_Shine, 1361, 430);
EnvPack_Candle_Shine0067->SetClrModulation(0xcbffffff);
EnvPack_Candle_Shine0067->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0069 = CreateObject(EnvPack_Candle_Shine, 1362, 432);
EnvPack_Candle_Shine0069->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0069->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0070 = CreateObject(EnvPack_Candle_Shine, 1362, 432);
EnvPack_Candle_Shine0070->SetClrModulation(0xc7ffffff);
EnvPack_Candle_Shine0070->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0071 = CreateObject(EnvPack_Candle_Shine, 1362, 432);
EnvPack_Candle_Shine0071->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0071->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0072 = CreateObject(EnvPack_Candle_Shine, 1361, 430);
EnvPack_Candle_Shine0072->SetClrModulation(0xcbffffff);
EnvPack_Candle_Shine0072->SetObjectBlitMode(GFX_BLIT_Additive);
CreateObject(EnvPack_CandleSmall, 1556, 432);
var EnvPack_CandleSmall_Shine0069 = CreateObject(EnvPack_CandleSmall_Shine, 1556, 423);
EnvPack_CandleSmall_Shine0069->SetCon(40);
EnvPack_CandleSmall_Shine0069->SetClrModulation(0x43ffffff);
EnvPack_CandleSmall_Shine0069->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_CandleSmall_Shine0070 = CreateObject(EnvPack_CandleSmall_Shine, 1556, 429);
EnvPack_CandleSmall_Shine0070->SetCon(40);
EnvPack_CandleSmall_Shine0070->SetClrModulation(0x46ffffff);
EnvPack_CandleSmall_Shine0070->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_CandleSmall_Shine0071 = CreateObject(EnvPack_CandleSmall_Shine, 1555, 432);
EnvPack_CandleSmall_Shine0071->SetCon(40);
EnvPack_CandleSmall_Shine0071->SetClrModulation(0x41ffffff);
EnvPack_CandleSmall_Shine0071->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_CandleSmall_Shine0074 = CreateObject(EnvPack_CandleSmall_Shine, 1556, 435);
EnvPack_CandleSmall_Shine0074->SetCon(40);
EnvPack_CandleSmall_Shine0074->SetClrModulation(0x46ffffff);
EnvPack_CandleSmall_Shine0074->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_CandleSmall_Shine0075 = CreateObject(EnvPack_CandleSmall_Shine, 1556, 423);
EnvPack_CandleSmall_Shine0075->SetCon(40);
EnvPack_CandleSmall_Shine0075->SetClrModulation(0x43ffffff);
EnvPack_CandleSmall_Shine0075->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_CandleSmall_Shine0076 = CreateObject(EnvPack_CandleSmall_Shine, 1556, 429);
EnvPack_CandleSmall_Shine0076->SetCon(40);
EnvPack_CandleSmall_Shine0076->SetClrModulation(0x46ffffff);
EnvPack_CandleSmall_Shine0076->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_CandleSmall_Shine0077 = CreateObject(EnvPack_CandleSmall_Shine, 1555, 432);
EnvPack_CandleSmall_Shine0077->SetCon(40);
EnvPack_CandleSmall_Shine0077->SetClrModulation(0x41ffffff);
EnvPack_CandleSmall_Shine0077->SetObjectBlitMode(GFX_BLIT_Additive);
CreateObject(EnvPack_Crate, 1017, 576);
@ -149,27 +174,33 @@ func InitializeObjects()
CreateObject(EnvPack_Lantern, 894, 488);
var EnvPack_Lantern_Shine0077 = CreateObject(EnvPack_Lantern_Shine, 894, 477);
EnvPack_Lantern_Shine0077->SetClrModulation(0xd3ffffff);
EnvPack_Lantern_Shine0077->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0078 = CreateObject(EnvPack_Lantern_Shine, 894, 477);
EnvPack_Lantern_Shine0078->SetClrModulation(0xe4ffffff);
EnvPack_Lantern_Shine0078->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0079 = CreateObject(EnvPack_Lantern_Shine, 894, 477);
EnvPack_Lantern_Shine0079->SetClrModulation(0xc6ffffff);
EnvPack_Lantern_Shine0079->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0083 = CreateObject(EnvPack_Lantern_Shine, 894, 477);
EnvPack_Lantern_Shine0083->SetClrModulation(0xe4ffffff);
EnvPack_Lantern_Shine0083->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0084 = CreateObject(EnvPack_Lantern_Shine, 894, 477);
EnvPack_Lantern_Shine0084->SetClrModulation(0xd3ffffff);
EnvPack_Lantern_Shine0084->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0085 = CreateObject(EnvPack_Lantern_Shine, 894, 477);
EnvPack_Lantern_Shine0085->SetClrModulation(0xe4ffffff);
EnvPack_Lantern_Shine0085->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0086 = CreateObject(EnvPack_Lantern_Shine, 894, 477);
EnvPack_Lantern_Shine0086->SetClrModulation(0xc6ffffff);
EnvPack_Lantern_Shine0086->SetObjectBlitMode(GFX_BLIT_Additive);
CreateObject(EnvPack_Lantern, 1291, 472);
var EnvPack_Lantern_Shine0081 = CreateObject(EnvPack_Lantern_Shine, 1291, 461);
EnvPack_Lantern_Shine0081->SetClrModulation(0xd5ffffff);
EnvPack_Lantern_Shine0081->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0082 = CreateObject(EnvPack_Lantern_Shine, 1291, 461);
EnvPack_Lantern_Shine0082->SetClrModulation(0xe4ffffff);
EnvPack_Lantern_Shine0082->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0083 = CreateObject(EnvPack_Lantern_Shine, 1291, 461);
EnvPack_Lantern_Shine0083->SetClrModulation(0xccffffff);
EnvPack_Lantern_Shine0083->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0088 = CreateObject(EnvPack_Lantern_Shine, 1291, 461);
EnvPack_Lantern_Shine0088->SetClrModulation(0xe4ffffff);
EnvPack_Lantern_Shine0088->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0089 = CreateObject(EnvPack_Lantern_Shine, 1291, 461);
EnvPack_Lantern_Shine0089->SetClrModulation(0xd5ffffff);
EnvPack_Lantern_Shine0089->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0090 = CreateObject(EnvPack_Lantern_Shine, 1291, 461);
EnvPack_Lantern_Shine0090->SetClrModulation(0xe4ffffff);
EnvPack_Lantern_Shine0090->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Lantern_Shine0091 = CreateObject(EnvPack_Lantern_Shine, 1291, 461);
EnvPack_Lantern_Shine0091->SetClrModulation(0xccffffff);
EnvPack_Lantern_Shine0091->SetObjectBlitMode(GFX_BLIT_Additive);
CreateObject(EnvPack_Painting, 1235, 537);
@ -184,191 +215,213 @@ func InitializeObjects()
CreateObject(EnvPack_Candle, 1471, 552);
var EnvPack_Candle_Shine0091 = CreateObject(EnvPack_Candle_Shine, 1471, 552);
EnvPack_Candle_Shine0091->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0091->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0092 = CreateObject(EnvPack_Candle_Shine, 1471, 552);
EnvPack_Candle_Shine0092->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0092->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0093 = CreateObject(EnvPack_Candle_Shine, 1472, 552);
EnvPack_Candle_Shine0093->SetClrModulation(0xddffffff);
EnvPack_Candle_Shine0093->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0099 = CreateObject(EnvPack_Candle_Shine, 1471, 552);
EnvPack_Candle_Shine0099->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0099->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0100 = CreateObject(EnvPack_Candle_Shine, 1471, 552);
EnvPack_Candle_Shine0100->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0100->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0101 = CreateObject(EnvPack_Candle_Shine, 1471, 552);
EnvPack_Candle_Shine0101->SetClrModulation(0xe4ffffff);
EnvPack_Candle_Shine0101->SetObjectBlitMode(GFX_BLIT_Additive);
var EnvPack_Candle_Shine0102 = CreateObject(EnvPack_Candle_Shine, 1472, 552);
EnvPack_Candle_Shine0102->SetClrModulation(0xddffffff);
EnvPack_Candle_Shine0102->SetObjectBlitMode(GFX_BLIT_Additive);
var Ruin10094 = CreateObject(Ruin1, 97, 1179);
Ruin10094->SetR(16);
Ruin10094->SetPosition(97, 1150);
g_ruin1 = CreateObject(Ruin1, 97, 1179);
g_ruin1->SetR(16);
g_ruin1.StaticSaveVar = "g_ruin1";
g_ruin1->SetPosition(97, 1150);
CreateObject(Ruin2, 353, 1145);
g_ruin2 = CreateObject(Ruin2, 353, 1145);
g_ruin2.StaticSaveVar = "g_ruin2";
CreateObject(Ruin3, 267, 1180);
g_ruin3 = CreateObject(Ruin3, 267, 1180);
g_ruin3.StaticSaveVar = "g_ruin3";
CreateObject(Foundry, 238, 1287);
var Chest0100 = CreateObject(Chest, 1473, 1414);
var Chest0101 = CreateObject(Chest, 1574, 583);
var Chest0102 = CreateObject(Chest, 823, 887);
var Chest0103 = CreateObject(Chest, 856, 887);
var Chest0104 = CreateObject(Chest, 1032, 575);
var Chest0105 = CreateObject(Chest, 136, 103);
var Chest0109 = CreateObject(Chest, 1473, 1414);
var Chest0110 = CreateObject(Chest, 1574, 583);
var Chest0111 = CreateObject(Chest, 823, 887);
var Chest0112 = CreateObject(Chest, 856, 887);
var Chest0113 = CreateObject(Chest, 1032, 575);
var Chest0114 = CreateObject(Chest, 136, 103);
var StoneDoor0106 = CreateObject(StoneDoor, 940, 671);
StoneDoor0106->SetComDir(COMD_Down);
var StoneDoor0107 = CreateObject(StoneDoor, 1348, 527);
StoneDoor0107->SetComDir(COMD_Down);
var StoneDoor0108 = CreateObject(StoneDoor, 1347, 431);
StoneDoor0108->SetComDir(COMD_Down);
var StoneDoor0115 = CreateObject(StoneDoor, 940, 671);
StoneDoor0115->SetComDir(COMD_Down);
var StoneDoor0116 = CreateObject(StoneDoor, 1348, 527);
StoneDoor0116->SetComDir(COMD_Down);
var StoneDoor0117 = CreateObject(StoneDoor, 1347, 431);
StoneDoor0117->SetComDir(COMD_Down);
var SpinWheel0109 = CreateObject(SpinWheel, 961, 672);
SpinWheel0109->SetStoneDoor(StoneDoor0106);
var SpinWheel0110 = CreateObject(SpinWheel, 1367, 527);
SpinWheel0110->SetStoneDoor(StoneDoor0107);
var SpinWheel0111 = CreateObject(SpinWheel, 1384, 471);
SpinWheel0111->SetStoneDoor(StoneDoor0108);
var SpinWheel0118 = CreateObject(SpinWheel, 961, 672);
SpinWheel0118->SetStoneDoor(StoneDoor0115);
var SpinWheel0119 = CreateObject(SpinWheel, 1367, 527);
SpinWheel0119->SetStoneDoor(StoneDoor0116);
var SpinWheel0120 = CreateObject(SpinWheel, 1384, 471);
SpinWheel0120->SetStoneDoor(StoneDoor0117);
CreateObject(Column, 1197, 551);
CreateObject(Column, 1218, 463);
CreateObject(Idol, 1080, 575);
var SteamEngine0115 = CreateObject(SteamEngine, 1529, 585);
SteamEngine0115->SetCategory(C4D_StaticBack);
var SteamEngine0124 = CreateObject(SteamEngine, 1529, 585);
SteamEngine0124->SetCategory(C4D_StaticBack);
CreateObject(Elevator, 1366, 615);
var Elevator0180 = CreateObject(Elevator, 167, 1184);
Elevator0180->SetClrModulation(0xffa08060);
g_elev1 = CreateObject(Elevator, 167, 1184);
g_elev1.StaticSaveVar = "g_elev1";
g_elev1->SetClrModulation(0xffa08060);
g_elev1->CreateShaft(4);
g_elev1->SetCasePosition(1176);
g_elev2 = CreateObject(Elevator, 1366, 615);
g_elev2.StaticSaveVar = "g_elev2";
g_elev2->CreateShaft(4);
g_elev2->SetCasePosition(607);
CreateObject(Airship, 931, 495);
var Catapult0202 = CreateObject(Catapult, 697, 887);
Catapult0202->SetRDir(2);
var Catapult0211 = CreateObject(Catapult, 697, 887);
Catapult0211->SetRDir(2);
var Lorry0203 = CreateObject(Lorry, 149, 1324);
Lorry0203->SetR(24);
Lorry0203->SetPosition(149, 1315);
var Lorry0205 = CreateObject(Lorry, 1428, 1253);
Lorry0205->SetR(-30);
Lorry0205->SetPosition(1428, 1243);
var Lorry0212 = CreateObject(Lorry, 149, 1324);
Lorry0212->SetR(24);
Lorry0212->SetPosition(149, 1315);
var Lorry0214 = CreateObject(Lorry, 1428, 1253);
Lorry0214->SetR(-30);
Lorry0214->SetPosition(1428, 1243);
CreateObject(Airship_Burnt, 38, 1152);
var Cannon0208 = CreateObject(Cannon, 788, 679);
Cannon0208->SetR(30);
Cannon0208->SetPosition(788, 669);
var Cannon0217 = CreateObject(Cannon, 788, 679);
Cannon0217->SetR(30);
Cannon0217->SetPosition(788, 669);
CreateObject(Cannon, 1004, 471);
CreateObject(Cannon, 1336, 336);
var Clonk0211 = CreateObject(Clonk, 673, 886);
Clonk0211->SetColor(0xff);
Clonk0211->SetName("Horst");
S2AI->AddAI(Clonk0211);
S2AI->SetHome(Clonk0211, 670, 878, DIR_Left);
S2AI->SetGuardRange(Clonk0211, 400, 800, 500, 150);
S2AI->SetAllyAlertRange(Clonk0211, 60);
S2AI->SetEncounterCB(Clonk0211, "EncounterOutpost");
var Clonk0219 = CreateObject(Clonk, 710, 887);
Clonk0219->SetColor(0xff);
Clonk0219->SetName("Hanniball");
S2AI->AddAI(Clonk0219);
S2AI->SetHome(Clonk0219, 709, 877, DIR_Left);
S2AI->SetGuardRange(Clonk0219, 300, 700, 500, 250);
S2AI->SetAllyAlertRange(Clonk0219, 60);
var Clonk0226 = CreateObject(Clonk, 781, 671);
Clonk0226->SetDir(DIR_Right);
Clonk0226->SetColor(0xff);
Clonk0226->SetName("Twonky");
S2AI->AddAI(Clonk0226);
S2AI->SetHome(Clonk0226, 781, 663, DIR_Right);
S2AI->SetGuardRange(Clonk0226, 481, 511, 600, 300);
var Clonk0234 = CreateObject(Clonk, 1010, 671);
var Clonk0220 = CreateObject(Clonk, 673, 886);
Clonk0220->SetColor(0xff);
Clonk0220->SetName("Horst");
S2AI->AddAI(Clonk0220);
S2AI->SetHome(Clonk0220, 670, 878, DIR_Left);
S2AI->SetGuardRange(Clonk0220, 400, 800, 500, 150);
S2AI->SetAllyAlertRange(Clonk0220, 60);
S2AI->SetEncounterCB(Clonk0220, "EncounterOutpost");
Clonk0220->SetDir(DIR_Left);
var Clonk0227 = CreateObject(Clonk, 710, 887);
Clonk0227->SetColor(0xff);
Clonk0227->SetName("Hanniball");
S2AI->AddAI(Clonk0227);
S2AI->SetHome(Clonk0227, 709, 877, DIR_Left);
S2AI->SetGuardRange(Clonk0227, 300, 700, 500, 250);
S2AI->SetAllyAlertRange(Clonk0227, 60);
Clonk0227->SetDir(DIR_Left);
var Clonk0234 = CreateObject(Clonk, 781, 671);
Clonk0234->SetDir(DIR_Right);
Clonk0234->SetColor(0xff);
Clonk0234->SetName("Sven");
Clonk0234->SetName("Twonky");
S2AI->AddAI(Clonk0234);
S2AI->SetHome(Clonk0234, 1010, 663, DIR_Right);
S2AI->SetGuardRange(Clonk0234, 710, 511, 600, 300);
var Clonk0242 = CreateObject(Clonk, 985, 671);
Clonk0242->SetDir(DIR_Right);
Clonk0242->SetColor(0xff);
Clonk0242->SetName("Luki");
S2AI->AddAI(Clonk0242);
S2AI->SetHome(Clonk0242, 985, 663, DIR_Right);
S2AI->SetGuardRange(Clonk0242, 685, 511, 600, 300);
var Clonk0250 = CreateObject(Clonk, 1373, 1246);
Clonk0250->SetColor(0xffff0000);
Clonk0250->SetName("Anna");
S2AI->AddAI(Clonk0250);
S2AI->SetHome(Clonk0250, 1370, 1237, DIR_Left);
S2AI->SetGuardRange(Clonk0250, 1150, 1140, 320, 150);
S2AI->SetAllyAlertRange(Clonk0250, 170);
var Clonk0258 = CreateObject(Clonk, 1449, 1246);
Clonk0258->SetColor(0xffff0000);
Clonk0258->SetName("Cindy");
S2AI->AddAI(Clonk0258);
S2AI->SetHome(Clonk0258, 1448, 1237, DIR_Left);
S2AI->SetGuardRange(Clonk0258, 1150, 1140, 320, 150);
S2AI->SetAllyAlertRange(Clonk0258, 170);
S2AI->SetEncounterCB(Clonk0258, "EncounterCave");
var Clonk0266 = CreateObject(Clonk, 307, 1166);
Clonk0266->SetDir(DIR_Right);
Clonk0266->SetColor(0xff);
Clonk0266->SetClrModulation(0xffffa020);
Clonk0266->SetName("Farmer");
var Clonk0273 = CreateObject(Clonk, 1197, 551);
Clonk0273->SetDir(DIR_Right);
Clonk0273->SetColor(0xff);
Clonk0273->SetName("Sabrina");
S2AI->AddAI(Clonk0273);
S2AI->SetHome(Clonk0273, 1196, 542, DIR_Right);
S2AI->SetGuardRange(Clonk0273, 896, 392, 600, 300);
var Clonk0281 = CreateObject(Clonk, 1266, 550);
Clonk0281->SetColor(0xff);
Clonk0281->SetName("Laura");
S2AI->AddAI(Clonk0281);
S2AI->SetGuardRange(Clonk0281, 966, 391, 600, 300);
S2AI->SetHome(Clonk0234, 781, 663, DIR_Right);
S2AI->SetGuardRange(Clonk0234, 481, 511, 600, 300);
var Clonk0241 = CreateObject(Clonk, 1010, 671);
Clonk0241->SetDir(DIR_Right);
Clonk0241->SetColor(0xff);
Clonk0241->SetName("Sven");
S2AI->AddAI(Clonk0241);
S2AI->SetHome(Clonk0241, 1010, 663, DIR_Right);
S2AI->SetGuardRange(Clonk0241, 710, 511, 600, 300);
var Clonk0248 = CreateObject(Clonk, 985, 671);
Clonk0248->SetDir(DIR_Right);
Clonk0248->SetColor(0xff);
Clonk0248->SetName("Luki");
S2AI->AddAI(Clonk0248);
S2AI->SetHome(Clonk0248, 985, 663, DIR_Right);
S2AI->SetGuardRange(Clonk0248, 685, 511, 600, 300);
var Clonk0255 = CreateObject(Clonk, 1373, 1246);
Clonk0255->SetColor(0xffff0000);
Clonk0255->SetName("Anna");
S2AI->AddAI(Clonk0255);
S2AI->SetHome(Clonk0255, 1370, 1237, DIR_Left);
S2AI->SetGuardRange(Clonk0255, 1150, 1140, 320, 150);
S2AI->SetAllyAlertRange(Clonk0255, 170);
Clonk0255->SetDir(DIR_Left);
var Clonk0262 = CreateObject(Clonk, 1449, 1246);
Clonk0262->SetColor(0xffff0000);
Clonk0262->SetName("Cindy");
S2AI->AddAI(Clonk0262);
S2AI->SetHome(Clonk0262, 1448, 1237, DIR_Left);
S2AI->SetGuardRange(Clonk0262, 1150, 1140, 320, 150);
S2AI->SetAllyAlertRange(Clonk0262, 170);
S2AI->SetEncounterCB(Clonk0262, "EncounterCave");
Clonk0262->SetDir(DIR_Left);
g_farmer = CreateObject(Clonk, 307, 1166);
g_farmer->SetDir(DIR_Left);
g_farmer->SetColor(0xff0000);
g_farmer->SetClrModulation(0xffffa020);
g_farmer->SetName("Farmer");
g_farmer.StaticSaveVar = "g_farmer";
var Clonk0275 = CreateObject(Clonk, 1197, 551);
Clonk0275->SetDir(DIR_Right);
Clonk0275->SetColor(0xff);
Clonk0275->SetName("Sabrina");
S2AI->AddAI(Clonk0275);
S2AI->SetHome(Clonk0275, 1196, 542, DIR_Right);
S2AI->SetGuardRange(Clonk0275, 896, 392, 600, 300);
var Clonk0282 = CreateObject(Clonk, 1266, 550);
Clonk0282->SetColor(0xff);
Clonk0282->SetName("Laura");
S2AI->AddAI(Clonk0282);
S2AI->SetGuardRange(Clonk0282, 966, 391, 600, 300);
Clonk0282->SetDir(DIR_Left);
var Clonk0289 = CreateObject(Clonk, 1287, 471);
Clonk0289->SetDir(DIR_Right);
Clonk0289->SetColor(0xff);
S2AI->AddAI(Clonk0289);
S2AI->SetHome(Clonk0289, 1287, 464, DIR_Right);
S2AI->SetGuardRange(Clonk0289, 987, 312, 600, 300);
var Clonk0297 = CreateObject(Clonk, 1092, 575);
Clonk0297->SetDir(DIR_Right);
Clonk0297->SetColor(0xff);
Clonk0297->SetName("Wolfgang");
S2AI->AddAI(Clonk0297);
S2AI->SetHome(Clonk0297, 1092, 567, DIR_Right);
S2AI->SetGuardRange(Clonk0297, 792, 416, 600, 300);
var Clonk0305 = CreateObject(Clonk, 1569, 431);
Clonk0305->Kill(Clonk0305, true);
Clonk0305->SetCon(200);
Clonk0305->SetColor(0xff);
Clonk0305->SetClrModulation(0xffff8000);
Clonk0305->SetObjectBlitMode(GFX_BLIT_Additive);
Clonk0305->SetName("Horax");
Clonk0305.MaxEnergy = 200000;
Clonk0305->DoEnergy(150);
S2AI->AddAI(Clonk0305);
S2AI->SetHome(Clonk0305, 1568, 413, DIR_Left);
S2AI->SetGuardRange(Clonk0305, 1268, 263, 600, 300);
S2AI->SetEncounterCB(Clonk0305, "EncounterKing");
var Clonk0312 = CreateObject(Clonk, 1070, 575);
Clonk0312->SetColor(0xff);
Clonk0312->SetName("Hans");
S2AI->AddAI(Clonk0312);
S2AI->SetHome(Clonk0312, 1069, 566, DIR_Left);
S2AI->SetGuardRange(Clonk0312, 769, 416, 600, 300);
var Clonk0320 = CreateObject(Clonk, 1019, 471);
Clonk0320->SetColor(0xff);
Clonk0320->SetName("Joki");
S2AI->AddAI(Clonk0320);
S2AI->SetGuardRange(Clonk0320, 719, 312, 600, 300);
var Clonk0328 = CreateObject(Clonk, 285, 1182);
Clonk0328->Kill(Clonk0328, true);
Clonk0328->SetColor(0xffff0000);
var Clonk0334 = CreateObject(Clonk, 208, 1183);
Clonk0334->Kill(Clonk0334, true);
Clonk0334->SetDir(DIR_Right);
Clonk0334->SetColor(0xffff0000);
var Clonk0296 = CreateObject(Clonk, 1092, 575);
Clonk0296->SetDir(DIR_Right);
Clonk0296->SetColor(0xff);
Clonk0296->SetName("Wolfgang");
S2AI->AddAI(Clonk0296);
S2AI->SetHome(Clonk0296, 1092, 567, DIR_Right);
S2AI->SetGuardRange(Clonk0296, 792, 416, 600, 300);
g_king = CreateObject(Clonk, 1569, 431);
g_king->SetDir(DIR_Left);
g_king->SetCon(200);
g_king->SetColor(0xff);
g_king->SetClrModulation(0xffff8000);
g_king->SetObjectBlitMode(GFX_BLIT_Additive);
g_king->SetName("Horax");
g_king.MaxEnergy = 200000;
g_king->DoEnergy(150);
g_king.StaticSaveVar = "g_king";
S2AI->AddAI(g_king);
S2AI->SetHome(g_king, 1568, 413, DIR_Left);
S2AI->SetGuardRange(g_king, 1268, 263, 600, 300);
S2AI->SetEncounterCB(g_king, "EncounterKing");
var Clonk0310 = CreateObject(Clonk, 1070, 575);
Clonk0310->SetDir(DIR_Right);
Clonk0310->SetColor(0xff);
Clonk0310->SetName("Hans");
S2AI->AddAI(Clonk0310);
S2AI->SetHome(Clonk0310, 1069, 566, DIR_Left);
S2AI->SetGuardRange(Clonk0310, 769, 416, 600, 300);
var Clonk0317 = CreateObject(Clonk, 1019, 471);
Clonk0317->SetColor(0xff);
Clonk0317->SetName("Joki");
S2AI->AddAI(Clonk0317);
S2AI->SetGuardRange(Clonk0317, 719, 312, 600, 300);
Clonk0317->SetDir(DIR_Left);
var Clonk0324 = CreateObject(Clonk, 285, 1182);
Clonk0324->Kill(Clonk0324, true);
Clonk0324->SetDir(DIR_Right);
Clonk0324->SetColor(0xffff0000);
var Clonk0330 = CreateObject(Clonk, 208, 1183);
Clonk0330->Kill(Clonk0330, true);
Clonk0330->SetDir(DIR_Right);
Clonk0330->SetColor(0xffff0000);
CreateObject(Rock, 879, 1003);
CreateObject(Rock, 262, 1182);
@ -395,18 +448,18 @@ func InitializeObjects()
CreateObject(Rock, 742, 1522);
CreateObject(Rock, 712, 1351);
CreateObject(Rock, 1047, 1207);
Clonk0250->CreateContents(Rock);
Clonk0250->CreateContents(Rock);
Clonk0250->CreateContents(Rock);
Clonk0255->CreateContents(Rock);
Clonk0255->CreateContents(Rock);
Clonk0255->CreateContents(Rock);
CreateObject(Coal, 59, 1346);
CreateObject(Coal, 156, 1370);
CreateObject(Coal, 243, 1555);
CreateObject(Coal, 61, 1495);
CreateObject(Coal, 140, 1380);
SteamEngine0115->CreateContents(Coal);
SteamEngine0115->CreateContents(Coal);
SteamEngine0115->CreateContents(Coal);
SteamEngine0124->CreateContents(Coal);
SteamEngine0124->CreateContents(Coal);
SteamEngine0124->CreateContents(Coal);
CreateObject(Ore, 227, 1366);
CreateObject(Ore, 64, 1421);
@ -425,65 +478,65 @@ func InitializeObjects()
CreateObject(Wood, 19, 1135);
CreateObject(Wood, 749, 1056);
CreateObject(Wood, 168, 1512);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Lorry0203->CreateContents(Wood);
Chest0103->CreateContents(Wood);
Chest0103->CreateContents(Wood);
Chest0103->CreateContents(Wood);
Chest0103->CreateContents(Wood);
Chest0103->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Lorry0212->CreateContents(Wood);
Chest0112->CreateContents(Wood);
Chest0112->CreateContents(Wood);
Chest0112->CreateContents(Wood);
Chest0112->CreateContents(Wood);
Chest0112->CreateContents(Wood);
CreateObject(Wood, 346, 1456);
CreateObject(Wood, 336, 1456);
Lorry0205->CreateContents(Wood);
Chest0100->CreateContents(Wood);
Chest0100->CreateContents(Wood);
Chest0100->CreateContents(Wood);
Chest0100->CreateContents(Wood);
Chest0100->CreateContents(Wood);
Chest0100->CreateContents(Wood);
Chest0100->CreateContents(Wood);
Lorry0205->CreateContents(Wood);
Lorry0205->CreateContents(Wood);
Lorry0205->CreateContents(Wood);
Lorry0205->CreateContents(Wood);
Chest0104->CreateContents(Wood);
Chest0104->CreateContents(Wood);
Chest0104->CreateContents(Wood);
Chest0104->CreateContents(Wood);
Chest0104->CreateContents(Wood);
Lorry0214->CreateContents(Wood);
Chest0109->CreateContents(Wood);
Chest0109->CreateContents(Wood);
Chest0109->CreateContents(Wood);
Chest0109->CreateContents(Wood);
Chest0109->CreateContents(Wood);
Chest0109->CreateContents(Wood);
Chest0109->CreateContents(Wood);
Lorry0214->CreateContents(Wood);
Lorry0214->CreateContents(Wood);
Lorry0214->CreateContents(Wood);
Lorry0214->CreateContents(Wood);
Chest0113->CreateContents(Wood);
Chest0113->CreateContents(Wood);
Chest0113->CreateContents(Wood);
Chest0113->CreateContents(Wood);
Chest0113->CreateContents(Wood);
CreateObject(Wood, 167, 1512);
CreateObject(Wood, 177, 1512);
CreateObject(Wood, 511, 1497);
Lorry0203->CreateContents(Loam);
Lorry0212->CreateContents(Loam);
CreateObject(Loam, 199, 1287);
CreateObject(Loam, 283, 1431);
CreateObject(Loam, 372, 1391);
@ -505,125 +558,125 @@ func InitializeObjects()
CreateObject(Loam, 1393, 644);
CreateObject(Loam, 1462, 1079);
CreateObject(Loam, 1501, 1415);
Chest0103->CreateContents(Loam);
Chest0103->CreateContents(Loam);
Chest0103->CreateContents(Loam);
Chest0105->CreateContents(Loam);
Chest0105->CreateContents(Loam);
Chest0105->CreateContents(Loam);
Chest0105->CreateContents(Loam);
Chest0105->CreateContents(Loam);
Chest0112->CreateContents(Loam);
Chest0112->CreateContents(Loam);
Chest0112->CreateContents(Loam);
Chest0114->CreateContents(Loam);
Chest0114->CreateContents(Loam);
Chest0114->CreateContents(Loam);
Chest0114->CreateContents(Loam);
Chest0114->CreateContents(Loam);
var GoldBar0478 = CreateObject(GoldBar, 1293, 1236);
GoldBar0478->SetR(22);
GoldBar0478->SetPosition(1293, 1235);
Lorry0205->CreateContents(GoldBar);
Lorry0205->CreateContents(GoldBar);
var GoldBar0474 = CreateObject(GoldBar, 1293, 1236);
GoldBar0474->SetR(22);
GoldBar0474->SetPosition(1293, 1235);
Lorry0214->CreateContents(GoldBar);
Lorry0214->CreateContents(GoldBar);
Clonk0211->CreateContents(Sword);
Clonk0258->CreateContents(Sword);
Clonk0234->CreateContents(Sword);
Clonk0242->CreateContents(Sword);
Clonk0312->CreateContents(Sword);
Clonk0220->CreateContents(Sword);
Clonk0262->CreateContents(Sword);
Clonk0241->CreateContents(Sword);
Clonk0248->CreateContents(Sword);
Clonk0310->CreateContents(Sword);
Clonk0289->CreateContents(Sword);
Clonk0305->CreateContents(Sword);
Clonk0219->CreateContents(Sword);
g_king->CreateContents(Sword);
Clonk0227->CreateContents(Sword);
var Arrow0489 = Clonk0211->CreateContents(Arrow);
var Arrow0485 = Clonk0220->CreateContents(Arrow);
Arrow0485->SetR(90);
var Arrow0486 = Clonk0220->CreateContents(Arrow);
Arrow0486->SetR(90);
var Arrow0487 = Chest0111->CreateContents(Arrow);
Arrow0487->SetR(90);
var Arrow0488 = Clonk0234->CreateContents(Arrow);
Arrow0488->SetR(90);
var Arrow0489 = Clonk0234->CreateContents(Arrow);
Arrow0489->SetR(90);
var Arrow0490 = Clonk0211->CreateContents(Arrow);
var Arrow0490 = Clonk0317->CreateContents(Arrow);
Arrow0490->SetR(90);
var Arrow0491 = Chest0102->CreateContents(Arrow);
var Arrow0491 = Clonk0317->CreateContents(Arrow);
Arrow0491->SetR(90);
var Arrow0492 = Clonk0226->CreateContents(Arrow);
var Arrow0492 = g_king->CreateContents(Arrow);
Arrow0492->SetR(90);
var Arrow0493 = Clonk0226->CreateContents(Arrow);
var Arrow0493 = g_king->CreateContents(Arrow);
Arrow0493->SetR(90);
var Arrow0494 = Clonk0320->CreateContents(Arrow);
Arrow0494->SetR(90);
var Arrow0495 = Clonk0320->CreateContents(Arrow);
Arrow0495->SetR(90);
var Arrow0496 = Clonk0305->CreateContents(Arrow);
Arrow0496->SetR(90);
var Arrow0497 = Clonk0305->CreateContents(Arrow);
Arrow0497->SetR(90);
Clonk0211->CreateContents(Bow);
Chest0102->CreateContents(Bow);
Clonk0226->CreateContents(Bow);
Clonk0320->CreateContents(Bow);
Clonk0305->CreateContents(Bow);
Clonk0220->CreateContents(Bow);
Chest0111->CreateContents(Bow);
Clonk0234->CreateContents(Bow);
Clonk0317->CreateContents(Bow);
g_king->CreateContents(Bow);
var Boompack0503 = CreateObject(Boompack, 135, 1324);
Boompack0503->SetColor(0xff);
var Boompack0499 = CreateObject(Boompack, 135, 1324);
Boompack0499->SetColor(0xff);
Lorry0203->CreateContents(DynamiteBox);
Lorry0205->CreateContents(DynamiteBox);
Chest0100->CreateContents(DynamiteBox);
Chest0100->CreateContents(DynamiteBox);
Chest0105->CreateContents(DynamiteBox);
Lorry0212->CreateContents(DynamiteBox);
Lorry0214->CreateContents(DynamiteBox);
Chest0109->CreateContents(DynamiteBox);
Chest0109->CreateContents(DynamiteBox);
Chest0114->CreateContents(DynamiteBox);
CreateObject(Dynamite, 1334, 1224);
Lorry0205->CreateContents(Pickaxe);
Clonk0250->CreateContents(Pickaxe);
Clonk0258->CreateContents(Pickaxe);
Lorry0214->CreateContents(Pickaxe);
Clonk0255->CreateContents(Pickaxe);
Clonk0262->CreateContents(Pickaxe);
Lorry0203->CreateContents(Shovel);
Lorry0212->CreateContents(Shovel);
var Barrel0514 = CreateObject(Barrel, 167, 1333);
Barrel0514->SetR(-13);
Barrel0514->SetPosition(167, 1327);
var Barrel0510 = CreateObject(Barrel, 167, 1333);
Barrel0510->SetR(-13);
Barrel0510->SetPosition(167, 1327);
var Seaweed0516 = CreateObject(Seaweed, 169, 1543);
Seaweed0516->SetPhase(49);
var Seaweed0519 = CreateObject(Seaweed, 815, 1342);
Seaweed0519->SetPhase(49);
var Seaweed0522 = CreateObject(Seaweed, 719, 1078);
Seaweed0522->SetPhase(68);
var Seaweed0525 = CreateObject(Seaweed, 772, 1087);
Seaweed0525->SetPhase(8);
var Seaweed0528 = CreateObject(Seaweed, 1258, 1279);
Seaweed0528->SetPhase(75);
var Seaweed0628 = CreateObject(Seaweed, 847, 1366);
Seaweed0628->SetCon(1);
var Seaweed0512 = CreateObject(Seaweed, 169, 1543);
Seaweed0512->SetPhase(49);
var Seaweed0515 = CreateObject(Seaweed, 815, 1342);
Seaweed0515->SetPhase(49);
var Seaweed0518 = CreateObject(Seaweed, 719, 1078);
Seaweed0518->SetPhase(68);
var Seaweed0521 = CreateObject(Seaweed, 772, 1087);
Seaweed0521->SetPhase(8);
var Seaweed0524 = CreateObject(Seaweed, 1258, 1279);
Seaweed0524->SetPhase(75);
var Seaweed0527 = CreateObject(Seaweed, 847, 1366);
Seaweed0527->SetCon(1);
CreateObject(Mushroom, 126, 1320);
CreateObject(Mushroom, 212, 1287);
CreateObject(Mushroom, 367, 1392);
CreateObject(Mushroom, 268, 1431);
Chest0101->CreateContents(Musket);
Chest0110->CreateContents(Musket);
Chest0101->CreateContents(LeadShot);
Chest0101->CreateContents(LeadShot);
Chest0101->CreateContents(LeadShot);
Chest0110->CreateContents(LeadShot);
Chest0110->CreateContents(LeadShot);
Chest0110->CreateContents(LeadShot);
Clonk0281->CreateContents(Javelin);
Clonk0273->CreateContents(Javelin);
Clonk0281->CreateContents(Javelin);
Clonk0273->CreateContents(Javelin);
Clonk0281->CreateContents(Javelin);
Clonk0273->CreateContents(Javelin);
Clonk0282->CreateContents(Javelin);
Clonk0275->CreateContents(Javelin);
Clonk0282->CreateContents(Javelin);
Clonk0275->CreateContents(Javelin);
Clonk0282->CreateContents(Javelin);
Clonk0275->CreateContents(Javelin);
Clonk0312->CreateContents(Shield);
Clonk0310->CreateContents(Shield);
Clonk0289->CreateContents(Shield);
Clonk0305->CreateContents(Shield);
g_king->CreateContents(Shield);
Chest0104->CreateContents(Bread);
Chest0104->CreateContents(Bread);
Chest0104->CreateContents(Bread);
Chest0105->CreateContents(Bread);
Chest0105->CreateContents(Bread);
Chest0105->CreateContents(Bread);
Chest0113->CreateContents(Bread);
Chest0113->CreateContents(Bread);
Chest0113->CreateContents(Bread);
Chest0114->CreateContents(Bread);
Chest0114->CreateContents(Bread);
Chest0114->CreateContents(Bread);
CreateObject(EnvPack_ManaAltar, 1052, 471);
Catapult0202->CreateContents(Firestone);
Catapult0202->CreateContents(Firestone);
Catapult0202->CreateContents(Firestone);
Catapult0202->CreateContents(Firestone);
Catapult0202->CreateContents(Firestone);
Catapult0211->CreateContents(Firestone);
Catapult0211->CreateContents(Firestone);
Catapult0211->CreateContents(Firestone);
Catapult0211->CreateContents(Firestone);
Catapult0211->CreateContents(Firestone);
CreateObject(Firestone, 38, 1190);
CreateObject(Firestone, 101, 1215);
CreateObject(Firestone, 369, 1282);
@ -647,22 +700,22 @@ func InitializeObjects()
CreateObject(Firestone, 781, 911);
CreateObject(Firestone, 1356, 806);
CreateObject(Firestone, 1287, 852);
Clonk0250->CreateContents(Firestone);
Clonk0250->CreateContents(Firestone);
Clonk0258->CreateContents(Firestone);
Chest0103->CreateContents(Firestone);
Chest0103->CreateContents(Firestone);
Chest0103->CreateContents(Firestone);
Clonk0297->CreateContents(Firestone);
Clonk0297->CreateContents(Firestone);
Clonk0297->CreateContents(Firestone);
Clonk0297->CreateContents(Firestone);
Chest0104->CreateContents(Firestone);
Chest0104->CreateContents(Firestone);
Chest0104->CreateContents(Firestone);
Clonk0305->CreateContents(Firestone);
Clonk0305->CreateContents(Firestone);
Clonk0305->CreateContents(Firestone);
Clonk0255->CreateContents(Firestone);
Clonk0255->CreateContents(Firestone);
Clonk0262->CreateContents(Firestone);
Chest0112->CreateContents(Firestone);
Chest0112->CreateContents(Firestone);
Chest0112->CreateContents(Firestone);
Clonk0296->CreateContents(Firestone);
Clonk0296->CreateContents(Firestone);
Clonk0296->CreateContents(Firestone);
Clonk0296->CreateContents(Firestone);
Chest0113->CreateContents(Firestone);
Chest0113->CreateContents(Firestone);
Chest0113->CreateContents(Firestone);
g_king->CreateContents(Firestone);
g_king->CreateContents(Firestone);
g_king->CreateContents(Firestone);
return true;
}

View File

@ -13,29 +13,30 @@ func DoInit(int first_player)
{
// Goal
var goal = CreateObject(Goal_Assassination);
if (goal) goal->SetVictim(Object(3816));
if (goal) goal->SetVictim(g_king);
// Elevators
// Top
Object(332)->SetNoPowerNeed(true);
Object(331)->CreateShaft(470);
g_elev2->SetNoPowerNeed(true);
g_elev2->CreateShaft(470);
// Left
Object(420)->CreateShaft(100);
g_elev1->SetNoPowerNeed(true);
g_elev1->CreateShaft(100);
// Shrooms
Object(2318)->AddPoisonEffect(0,0); // floor left
Object(2369)->AddPoisonEffect(0,0); // ceiling left
Object(2375)->AddPoisonEffect(-20,0); // floor right
Object(2398)->AddPoisonEffect(10,-10); // ceiling right
g_shroom1->AddPoisonEffect(0,0); // floor left
g_shroom2->AddPoisonEffect(0,0); // ceiling left
g_shroom3->AddPoisonEffect(-20,0); // floor right
g_shroom4->AddPoisonEffect(10,-10); // ceiling right
// Message when first player enters shroom area
ScheduleCall(nil, Scenario.ShroomCaveCheck, 21, 0xffffff);
// Scorching village
Object(343)->AddScorch(-20,-10, -45, 50, 1500);
Object(344)->AddScorch(-15,42, 90, 50, 1200);
Object(346)->AddScorch(-12,18, 130, 80, 1300);
g_ruin1->AddScorch(-20,-10, -45, 50, 1500);
g_ruin2->AddScorch(-15,42, 90, 50, 1200);
g_ruin3->AddScorch(-12,18, 130, 80, 1300);
// Rules
CreateObject(Rule_TeamAccount);
CreateObject(Rule_NoPowerNeed);
// Horax
Object(3816).JumpSpeed = 200;
g_king.JumpSpeed = 200;
// Update AI stuff
var fx;
for (var enemy in FindObjects(Find_ID(Clonk), Find_Owner(NO_OWNER)))
@ -47,8 +48,9 @@ func DoInit(int first_player)
enemy->AddEnergyBar();
}
// Intro. Message 250 frames + regular message time
Dialogue->MessageBoxAll("$MsgIntro1$", Object(2648), true);
Schedule(nil, "Dialogue->MessageBoxAll(\"$MsgIntro1$\", Object(2648))", 250, 1);
g_farmer.portrait = "Farmer2";
DialogueCastle->MessageBoxAll("$MsgIntro1$", g_farmer, true);
Schedule(nil, "DialogueCastle->MessageBoxAll(\"$MsgIntro1$\", g_farmer)", 250, 1);
return true;
}
@ -106,20 +108,20 @@ func JoinPlayer(int plr)
func EncounterCave(object enemy, object player)
{
Dialogue->MessageBoxAll("$MsgEncounterCave$", enemy);
DialogueCastle->MessageBoxAll("$MsgEncounterCave$", enemy);
return true;
}
func EncounterOutpost(object enemy, object player)
{
Dialogue->MessageBoxAll("$MsgEncounterOutpost$", enemy);
DialogueCastle->MessageBoxAll("$MsgEncounterOutpost$", enemy);
return true;
}
func EncounterKing(object enemy, object player)
{
if (!player) player = enemy; // Leads to a funny message, but better than a null pointer.
Dialogue->MessageBoxAll(Format("$MsgEncounterKing$", player->GetName()), enemy);
DialogueCastle->MessageBoxAll(Format("$MsgEncounterKing$", player->GetName()), enemy);
return true;
}
@ -130,7 +132,7 @@ func ShroomCaveCheck()
{
var intruder = FindObject(Find_InRect(1252,1342,320,138), Find_OCF(OCF_CrewMember));
if (!intruder) return true;
Dialogue->MessageBoxAll("$MsgEncounterShrooms$", intruder);
DialogueCastle->MessageBoxAll("$MsgEncounterShrooms$", intruder);
ClearScheduleCall(nil, Scenario.ShroomCaveCheck);
return true;
}

View File

@ -1,9 +0,0 @@
[DefCore]
id=Dialogue
Version=5,2,0,1
Category=C4D_StaticBack
Width=8
Height=20
Offset=-4,-10

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -1,215 +0,0 @@
/**
Dialogue
Attach to a non player charachter to provide a message interface.
*/
local dlg_target;
local dlg_name;
local dlg_info;
local dlg_progress;
local dlg_status;
static const DLG_Status_Active = 0;
static const DLG_Status_Stop = 1;
static const DLG_Status_Remove = 2;
/*-- Dialogue creation --*/
// Sets a new dialogue for a npc.
global func SetDialogue(string name)
{
if (!this)
return;
var dialogue = CreateObject(Dialogue);
dialogue->InitDialogue(name, this);
dialogue->SetObjectLayer(nil);
return dialogue;
}
// Removes the existing dialogue of an object.
global func RemoveDialogue()
{
if (!this)
return;
var dialogue = FindObject(Find_ID(Dialogue), Find_ActionTarget(this));
if (dialogue)
dialogue->RemoveObject();
return;
}
/*-- Dialogue properties --*/
protected func Initialize()
{
// Dialogue progress to one.
dlg_progress = 1;
dlg_status = DLG_Status_Active;
return;
}
public func InitDialogue(string name, object target)
{
dlg_target = target;
dlg_name = name;
// Attach dialogue object to target.
SetAction("Dialogue", target);
// Update dialogue to target.
UpdateDialogue();
return;
}
private func UpdateDialogue()
{
// Adapt size to target and its direction.
var wdt = dlg_target->GetID()->GetDefWidth();
var hgt = dlg_target->GetID()->GetDefHeight();
var dir = dlg_target->GetDir();
SetShape(-wdt/2 + 2*(dir-1)*wdt, -hgt/2, 3*wdt, hgt);
// Transfer target name.
//SetName(Format("$MsgSpeak$", dlg_target->GetName()));
return;
}
public func SetDialogueInfo()
{
return;
}
public func SetDialogueProgress(int progress)
{
dlg_progress = Max(1, progress);
return;
}
public func SetDialogueStatus(int status)
{
dlg_status = status;
return;
}
/*-- Interaction --*/
// Players can talk to NPC via the interaction bar.
public func IsInteractable() { return true; }
// Adapt appearance in the interaction bar.
public func GetInteractionMetaInfo(object clonk)
{
if (InDialogue(clonk))
return { Description = Format("$MsgSpeak$", dlg_target->GetName()) , IconName = nil, IconID = Clonk, Selected = true };
return { Description = Format("$MsgSpeak$", dlg_target->GetName()) , IconName = nil, IconID = Clonk, Selected = false };
}
// Called on player interaction.
public func Interact(object clonk)
{
// Currently in a dialogue: abort that dialogue.
if (InDialogue(clonk))
clonk->CloseMenu();
// No conversation context: abort.
if (!dlg_name)
return true;
// Stop dialogue?
if (dlg_status == DLG_Status_Stop)
{
clonk->CloseMenu();
dlg_status = DLG_Status_Active;
return true;
}
// Remove dialogue?
if (dlg_status == DLG_Status_Remove)
{
clonk->CloseMenu();
RemoveObject();
return true;
}
// Start conversation context.
// Update dialogue progress first.
var progress = dlg_progress;
dlg_progress++;
// Then call relevant functions.
Call(Format("Dlg_%s_%d", dlg_name, progress), clonk);
return true;
}
private func InDialogue(object clonk)
{
return clonk->GetMenu() == Dialogue;
}
public func MessageBoxAll(string message, object talker)
{
for(var i = 0; i < GetPlayerCount(); ++i)
MessageBox(message, GetCursor(GetPlayerByIndex(i)), talker);
}
private func MessageBox(string message, object clonk, object talker)
{
// Use current NPC as talker if unspecified.
if (!talker)
talker = dlg_target;
// Use a menu for this dialogue.
clonk->CreateMenu(Dialogue, this, C4MN_Extra_None, nil, nil, C4MN_Style_Dialog, false, Dialogue);
// Add NPC portrait.
//var portrait = Format("%i", talker->GetID()); //, Dialogue, talker->GetColor(), "1");
clonk->AddMenuItem("", "", Dialogue, nil, nil, nil, C4MN_Add_ImgObject, talker); //TextSpec);
// Add NPC message.
var msg = Format("<c %x>%s:</c> %s", talker->GetColor(), talker->GetName(), message);
clonk->AddMenuItem(msg, "", nil, nil, nil, nil, C4MN_Add_ForceNoDesc);
// Add answers.
//for (var i = 0; i < GetLength(message.Answers); i++)
//{
// var ans = message.Answers[i][0];
// var call_back = message.Answers[i][1];
// target->AddMenuItem(ans, call_back, nil, nil, target, nil, C4MN_Add_ForceNoDesc);
//}
// Set menu decoration.
clonk->SetMenuDecoration(GUI_MenuDeco);
// Set text progress to NPC name.
var name = dlg_target->GetName();
var n_length;
while (GetChar(name, n_length))
n_length++;
clonk->SetMenuTextProgress(n_length + 1);
return;
}
local ActMap = {
Dialogue = {
Prototype = Action,
Name = "Dialogue",
Procedure = DFA_ATTACH,
Delay = 0,
NextAction = "Dialogue",
}
};
local Name = "$Name$";

View File

@ -1,2 +0,0 @@
Name=Dialogue
MsgSpeak=%s ansprechen

View File

@ -1,2 +0,0 @@
Name=Dialogue
MsgSpeak=Speak to %s

View File

@ -4,6 +4,4 @@ Version=5,2,0,1
Category=C4D_StaticBack
Width=8
Height=20
Offset=-4,-10
Offset=-4,-10

View File

Before

Width:  |  Height:  |  Size: 5.4 KiB

After

Width:  |  Height:  |  Size: 5.4 KiB

View File

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -10,6 +10,7 @@ local dlg_name;
local dlg_info;
local dlg_progress;
local dlg_status;
local dlg_interact;
static const DLG_Status_Active = 0;
static const DLG_Status_Stop = 1;
@ -50,9 +51,10 @@ protected func Initialize()
{
// Dialogue progress to one.
dlg_progress = 1;
// Dialogue allows interaction by default.
dlg_interact = true;
// Dialogue is active by default.
dlg_status = DLG_Status_Active;
return;
}
@ -85,8 +87,12 @@ private func UpdateDialogue()
public func SetDialogueInfo()
{
return;
}
public func SetInteraction(bool allow)
{
dlg_interact = allow;
return;
}
@ -105,7 +111,7 @@ public func SetDialogueStatus(int status)
/*-- Interaction --*/
// Players can talk to NPC via the interaction bar.
public func IsInteractable() { return true; }
public func IsInteractable() { return dlg_interact; }
// Adapt appearance in the interaction bar.
public func GetInteractionMetaInfo(object clonk)
@ -119,6 +125,10 @@ public func GetInteractionMetaInfo(object clonk)
// Called on player interaction.
public func Interact(object clonk)
{
// Should not happen: not active -> stop interaction
if (!dlg_interact)
return true;
// Currently in a dialogue: abort that dialogue.
if (InDialogue(clonk))
clonk->CloseMenu();
@ -147,9 +157,8 @@ public func Interact(object clonk)
var progress = dlg_progress;
dlg_progress++;
// Then call relevant functions.
Call(Format("Dlg_%s_%d", dlg_name, progress), clonk);
if (!Call(Format("Dlg_%s_%d", dlg_name, progress), clonk))
GameCall(Format("Dlg_%s_%d", dlg_name, progress), this, clonk, dlg_target);
return true;
}
@ -176,11 +185,11 @@ private func MessageBox(string message, object clonk, object talker)
// Add NPC portrait.
//var portrait = Format("%i", talker->GetID()); //, Dialogue, talker->GetColor(), "1");
clonk->AddMenuItem("", "MenuOk", Dialogue, nil, clonk, nil, C4MN_Add_ImgObject, talker); //TextSpec);
clonk->AddMenuItem("", "MenuOK", Dialogue, nil, clonk, nil, C4MN_Add_ImgObject, talker); //TextSpec);
// Add NPC message.
var msg = Format("<c %x>%s:</c> %s", talker->GetColor(), talker->GetName(), message);
clonk->AddMenuItem(msg, "", nil, nil, nil, nil, C4MN_Add_ForceNoDesc);
clonk->AddMenuItem(msg, "MenuOK", nil, nil, clonk, nil, C4MN_Add_ForceNoDesc);
// Add answers.
//for (var i = 0; i < GetLength(message.Answers); i++)
@ -203,11 +212,29 @@ private func MessageBox(string message, object clonk, object talker)
return;
}
public func MenuOk(unused, object clonk)
public func MenuOK(proplist menu_id, object clonk)
{
Interact(clonk);
// prevent the menu from closing when pressing MenuOK
if (dlg_interact)
Interact(clonk);
}
/* Scenario saving */
// Scenario saving
func SaveScenarioObject(props)
{
if (!inherited(props, ...)) return false;
if (!dlg_target) return false; // don't save dead dialogue object
// Dialog has its own creation procedure
props->RemoveCreation();
props->Add(SAVEOBJ_Creation, "%s->SetDialogue(%v)", dlg_target->MakeScenarioSaveName(), dlg_name);
return true;
}
/* Properties */
local ActMap = {
Dialogue = {
Prototype = Action,

View File

@ -130,13 +130,21 @@ protected func DoSwing(object clonk, int ix, int iy)
Sound("Clang?");
}
//Do blastfree after landscape checks are made. Otherwise, mat always returns as "tunnel"
// Call in clonk context to ensure DigOutObject callback is done in Clonk
clonk->BlastFree(GetX()+x2,GetY()+y2,5,GetController(),MaxPickDensity);
// Do blastfree after landscape checks are made. Otherwise, mat always returns as "tunnel"
BlastFree(GetX()+x2,GetY()+y2,5,GetController(),MaxPickDensity);
}
}
// Reroute callback to clonk context to ensure DigOutObject callback is done in Clonk
public func DigOutObject(object obj)
{
// TODO: it would be nice if the method of finding the clonk does not rely on it to be the container of the pickaxe
var clonk = Contained();
if (clonk)
clonk->~DigOutObject(obj);
}
func FxIntPickaxeTimer(clonk, effect, time)
{
++swingtime;

View File

@ -179,6 +179,13 @@ func CheckSlavery()
}
}
// Forward config to case
func SetNoPowerNeed(bool to_val)
{
if (case) return case->SetNoPowerNeed(to_val);
return false;
}
local ActMap = {
Default = {
Prototype = Action,

View File

@ -135,10 +135,39 @@ func Damage()
{
SetClrModulation(RGB(100, 100, 100));
RemoveTimer("Growing");
if (GetDamage() > 3 * MaxDamage())
BurstIntoAshes();
return;
}
}
func BurstIntoAshes()
{
var particles =
{
Prototype = Particles_Dust(),
R = 50, G = 50, B = 50,
Size = PV_KeyFrames(0, 0, 0, 200, PV_Random(2, 10), 1000, 0),
};
var r = GetR();
var size = GetCon() * 110 / 100;
for(var cnt = 0; cnt < 10; ++cnt)
{
var distance = Random(size/2);
var x = Sin(r, distance);
var y = -Cos(r, distance);
for(var mirror = -1; mirror <= 1; mirror += 2)
{
CreateParticle("Dust", x * mirror, y * mirror, PV_Random(-3, 3), PV_Random(-3, -3), PV_Random(18, 1 * 36), particles, 2);
CastPXS("Ashes", 5, 30, x * mirror, y * mirror);
}
}
RemoveObject();
}
// called from the plant library
func Seed()
{

View File

@ -195,13 +195,13 @@ protected func Doors()
gate->CloseDoor();
AddEffect("SparklingAttention",wheel,100,100);
var gate = CreateObject(StoneDoor, 1935, 550, NO_OWNER);
var gate = CreateObject(StoneDoor, 1935, 558, NO_OWNER);
var wheel = CreateObject(SpinWheel, 1900, 565, NO_OWNER);
wheel->SetStoneDoor(gate);
gate->CloseDoor();
AddEffect("SparklingAttention",wheel,100,100);
var gate = CreateObject(StoneDoor, 2965, 310, NO_OWNER);
var gate = CreateObject(StoneDoor, 2965, 316, NO_OWNER);
var wheel = CreateObject(SpinWheel, 3260, 328, NO_OWNER);
wheel->SetStoneDoor(gate);
gate->CloseDoor();

View File

@ -1,2 +0,0 @@
GateHit.ogg by Sergenious (http://www.freesound.org/people/Sergenious/sounds/55820/), License: CC Attribution 3.0
Chain.ogg by daveincamas (http://www.freesound.org/people/daveincamas/sounds/44076/), License: CC Attribution 3.0

View File

@ -1,11 +0,0 @@
[DefCore]
id=StoneDoor
Version=5,2,0,1
Category=C4D_Structure
Width=10
Height=40
Offset=-5,-20
SolidMask=10,0,10,40,0,0
Value=10
Mass=1000
Components=Rock=10;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,67 +0,0 @@
/*-- Stone Door --*/
protected func Initialize()
{
SetAction("Door");
SetComDir(COMD_None);
return;
}
public func OpenDoor()
{
AddEffect("IntMoveGateUp", this, 100, 1, this);
Sound("GateMove");
return;
}
public func CloseDoor()
{
AddEffect("IntMoveGateDown", this, 100, 1, this);
Sound("GateMove");
return;
}
protected func FxIntMoveGateUpTimer(object target)
{
if (GBackSolid(0, -20))
{
Sound("GateHit");
SetYDir(0);
return -1;
}
SetYDir(-5);
return 1;
}
protected func FxIntMoveGateDownTimer(object target)
{
if (GBackSolid(0, 19))
{
Sound("GateHit");
SetYDir(0);
return -1;
}
SetYDir(5);
return 1;
}
func Definition(def)
{
SetProperty("ActMap", {
Door = {
Prototype = Action,
Name = "Door",
Procedure = DFA_FLOAT,
Length = 1,
Delay = 1,
X = 0,
Y = 0,
Wdt = 10,
Hgt = 40,
NextAction = "Door",
},
}, def);
SetProperty("Name", "$Name$", def);
}

View File

@ -1 +0,0 @@
Name=Steintür

View File

@ -1 +0,0 @@
Name=Stone Door

View File

@ -196,7 +196,7 @@ IDS_DESC_GAMERUNNING=Spiel läuft
IDS_DESC_GAMESOUND=Steuert Geräuscheffekte im Spiel.
IDS_DESC_GOALFULFILLED=Spielziel %s erfüllt
IDS_DESC_GOALNOTFULFILLED=Spielziel %s nicht erfüllt
IDS_DESC_LASTGAME=\nLetzte Runde: %s\nDatum: %s\nDauer: %s\nPunkte: %i\n
IDS_DESC_LASTGAME=|Letzte Runde: %s|Datum: %s|Dauer: %s|Punkte: %i|
IDS_DESC_LEAGUECHECKPASSWORD=Aktivieren, um ein eigenes Passwort einzugeben. Wird kein eigenes Passwort eingegeben, wird stattdessen der persönliche WebCode verwendet, der bereits auf diesem System gespeichert ist.
IDS_DESC_LEAGUESCOREANDPROJECTEDGA=Ligapunkte und möglicher Gewinn, wenn das Team dieses Spielers die Runde gewinnt.
IDS_DESC_LISTOFPLAYERSWHOPARTICIPA=Liste der Spieler, die an der Runde teilgenommen haben.
@ -205,12 +205,12 @@ IDS_DESC_MENUSOUND=Steuert Geräuscheffekte im Menüsystem.
IDS_DESC_NEXTMISSION=Mit der nächsten Runde forfahren.
IDS_DESC_NOPROMO=Wird nicht weiter befördert.
IDS_DESC_NOTINITED=Nicht initialisiert
IDS_DESC_OBJECT=Typ: %s\nErfahrung: %i\nRunden: %i\nGestorben: %i mal\n%s\nSpielzeit: %s\nGeburtstag: %s\n\n
IDS_DESC_OBJECT=Typ: %s|Erfahrung: %i|Runden: %i|Gestorben: %i mal|%s|Spielzeit: %s|Geburtstag: %s||
IDS_DESC_OLDANDNEWSCORE=Alter und neuer Punktestand.
IDS_DESC_PLAYER=Punkte: %i\nRunden: %i (%i gew. %i verl.)\nSpielzeit: %s\nKommentar: %s\n
IDS_DESC_PLAYER=Punkte: %i|Runden: %i (%i gew. %i verl.)|Spielzeit: %s|Kommentar: %s|
IDS_DESC_PLAYERSCONTROLLEDBYCOMPUT=Computergesteuerte Spieler.
IDS_DESC_PLRS=Spieler:
IDS_DESC_PROMO=Beförderung zum %s\nbei: %i
IDS_DESC_PROMO=Beförderung zum %s|bei: %i
IDS_DESC_RESETCONFIG=Alle Konfigurationswerte auf ihren Ursprungswert zurücksetzen.
IDS_DESC_RESOURCE=Die hier angezeigten Dateien werden in dieser Runde verwendet. Ressourcen, die dynamisch über das Netzwerk geladen wurden, können über das entsprechende Symbol dauerhaft auf diesem Computer gespeichert und später wieder verwendet werden.
IDS_DESC_SELECTAPICTUREANDORLOBBYI=Spielerbild oder Lobby-Icon auswählen.
@ -408,7 +408,7 @@ IDS_HOLD_SAVINGGAME=Spiel wird gespeichert...
IDS_LEAGUE_LEAGUEREPORTINGUNEXPECTED=Liga: unerwarteter Verbindungsabbruch wird gemeldet... (Grund %d)
IDS_LEAGUE_WAITINGFORLASTLEAGUESERVE=Warten auf letzte Meldung des Ligaservers...
IDS_LGA_INVALIDRESPONSE3=Ungültige Antwort des Ligaservers (kein CSID).
IDS_LGA_SERVERFAILURE=Ligaserver-Fehler: %s\n
IDS_LGA_SERVERFAILURE=Ligaserver-Fehler: %s
IDS_LGA_TOOMANYGAMESTARTS=Zu viele Versuche, ein Spiel zu starten
IDS_LGA_INVALIDPRODUCTID=Ungültiges Produkt oder Version
IDS_LGA_WRONGCHECKSUM=Falsche Prüfsumme

View File

@ -196,7 +196,7 @@ IDS_DESC_GAMERUNNING=Game is running
IDS_DESC_GAMESOUND=Enable sound effects in the game.
IDS_DESC_GOALFULFILLED=Goal %s fulfilled
IDS_DESC_GOALNOTFULFILLED=Goal %s not fulfilled
IDS_DESC_LASTGAME=\nLast round: %s\nDate: %s\nDuration: %s\nScore: %i\n
IDS_DESC_LASTGAME=|Last round: %s|Date: %s|Duration: %s|Score: %i|
IDS_DESC_LEAGUECHECKPASSWORD=Enable to enter your own password. If you do not enter a password of your own, the personal WebCode will be used which is already stored on this system.
IDS_DESC_LEAGUESCOREANDPROJECTEDGA=League score and projected gain if this player's team wins the round.
IDS_DESC_LISTOFPLAYERSWHOPARTICIPA=List of players who participated in the game.
@ -205,12 +205,12 @@ IDS_DESC_MENUSOUND=Enable sound effects in the startup menu (such as buttons cli
IDS_DESC_NEXTMISSION=Go on to the next mission.
IDS_DESC_NOPROMO=No further promotions.
IDS_DESC_NOTINITED=Not initialised
IDS_DESC_OBJECT=Type: %s\nExperience: %i\nRounds: %i\nDied: %i x\n%s\nPlaying time: %s\nBirthday: %s\n\n
IDS_DESC_OBJECT=Type: %s|Experience: %i|Rounds: %i|Died: %i x|%s|Playing time: %s|Birthday: %s||
IDS_DESC_OLDANDNEWSCORE=Old and new score.
IDS_DESC_PLAYER=Score: %i\nRounds: %i (%i won %i lost)\nPlaying time: %s\nComment: %s\n
IDS_DESC_PLAYER=Score: %i|Rounds: %i (%i won %i lost)|Playing time: %s|Comment: %s|
IDS_DESC_PLAYERSCONTROLLEDBYCOMPUT=Players controlled by computer.
IDS_DESC_PLRS=Players:
IDS_DESC_PROMO=Promotion to %s\nat: %i
IDS_DESC_PROMO=Promotion to %s|at: %i
IDS_DESC_RESETCONFIG=Reset all configuration values to factory default.
IDS_DESC_RESOURCE=The files shown here are used during this round. Resources which were dynamically loaded via the network can be permanently stored on this computer for later use by clicking the save symbol.
IDS_DESC_SELECTAPICTUREANDORLOBBYI=Select a picture and/or lobby icon for your player.
@ -408,7 +408,7 @@ IDS_HOLD_SAVINGGAME=Saving game...
IDS_LEAGUE_LEAGUEREPORTINGUNEXPECTED=League: Reporting unexpected disconnect (reason %d)...
IDS_LEAGUE_WAITINGFORLASTLEAGUESERVE=Waiting for last league server reply...
IDS_LGA_INVALIDRESPONSE3=Invalid reply from internet server (no CSID).
IDS_LGA_SERVERFAILURE=internet server error: %s\n
IDS_LGA_SERVERFAILURE=internet server error: %s
IDS_LGA_TOOMANYGAMESTARTS=Too many attempts to start a game
IDS_LGA_INVALIDPRODUCTID=Invalid product or version
IDS_LGA_WRONGCHECKSUM=Wrong checksum

View File

@ -150,7 +150,7 @@ global func Control2Player(int plr, int ctrl, int x, int y, int strength, bool r
if (hotkey > 0)
{
// valid crew number?
var crew = GetCrew(plr,GetCrewCount()-hotkey);
var crew = GetCrew(plr,hotkey-1);
if (!crew) return false;
// stop previously selected crew
StopSelected();

View File

@ -44,8 +44,8 @@ CON_MenuSelect=Menu - Select
CON_MenuSelect_Desc=Confirm a selection in a menu.
CON_MenuCancel=Menu - Close
CON_MenuCancel_Desc=Close a menu without having selected anything.
CON_MenuOKAll=Menü: okay, alle
CON_MenuOK=Menü: OK
CON_MenuOKAll=Menu: okay, all
CON_MenuOK=Menu: OK
CON_MenuOK_Desc=Confirm in a menu.
CON_NextCrew=Next Clonk

View File

@ -42,7 +42,7 @@ protected func Initialize()
var target = MakeTarget(380, 300, true)->GetActionTarget();
AddEffect("HorizontalMoving", target, 1, 1, target);
// A flying target which drops a flint.
var target = MakeTarget(690, 421, true);
var target = MakeTarget(690, 400, true);
AddEffect("FlintDrop", target, 1, 0, target);
// A moving and a static target.
var target = MakeTarget(880, 520, true)->GetActionTarget();
@ -172,18 +172,14 @@ protected func OnGuideMessageRemoved(int plr, int index)
private func MakeTarget(int x, int y, bool flying)
{
if (flying == nil)
var balloon = false;
var target = CreateObject(PracticeTarget, x, y, NO_OWNER);
if (flying == true)
if (flying)
{
var balloon = CreateObject(TargetBalloon, x, y-30, NO_OWNER);
target->SetAction("Attach", balloon);
CreateParticle("Flash", x, y - 50, 0, 0, 8, Particles_Flash());
}
if (flying == false)
else
{
CreateParticle("Flash", x, y, 0, 0, 8, Particles_Flash());
target->SetAction("Float");

View File

@ -407,7 +407,7 @@ C4ClientPlayerInfos::C4ClientPlayerInfos(const char *szJoinFilenames, bool fAdd,
// loading failure; clear info class
delete pNewInfo;
//
LogFatal(FormatString(LoadResStr("IDS_ERR_LOAD_PLAYER"), szPlrFile).getData());
Log(FormatString(LoadResStr("IDS_ERR_LOAD_PLAYER"), szPlrFile).getData());
}
}
}

View File

@ -836,7 +836,7 @@ bool C4Application::FullScreenMode()
C4ApplicationGameTimer::C4ApplicationGameTimer()
: CStdMultimediaTimerProc(26),
tLastGameTick(0), iGameTickDelay(0)
tLastGameTick(C4TimeMilliseconds::NegativeInfinity), iGameTickDelay(0)
{
}

View File

@ -496,7 +496,7 @@ C4StartupPlrSelDlg::C4StartupPlrSelDlg() : C4StartupDlg("W"), eMode(PSDM_Player)
pPlrListBox->UpdateElementPositions();
pPlrListBox->SetSelectionChangeCallbackFn(new C4GUI::CallbackHandler<C4StartupPlrSelDlg>(this, &C4StartupPlrSelDlg::OnSelChange));
pPlrListBox->SetSelectionDblClickFn(new C4GUI::CallbackHandler<C4StartupPlrSelDlg>(this, &C4StartupPlrSelDlg::OnSelDblClick));
AddElement(pSelectionInfo = new C4GUI::TextWindow(rcInfoWindow));
AddElement(pSelectionInfo = new C4GUI::TextWindow(rcInfoWindow,0,0,0,100,4096," ",false,NULL,0,true));
pSelectionInfo->SetDecoration(true, true, &C4Startup::Get()->Graphics.sfctBookScroll, true);
pSelectionInfo->UpdateHeight();

View File

@ -145,18 +145,6 @@ void C4UpdateDlg::UpdateText()
// --------------------------------------------------
// static update application function
static bool IsWindowsWithUAC()
{
#ifdef _WIN32
// Determine windows version
OSVERSIONINFO ver;
ver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
if (GetVersionEx((LPOSVERSIONINFO) &ver))
return (ver.dwMajorVersion >= 6);
#endif
return false;
}
void C4UpdateDlg::RedirectToDownloadPage()
{
OpenURL("http://www.openclonk.org/download");
@ -198,11 +186,11 @@ bool C4UpdateDlg::ApplyUpdate(const char *strUpdateFile, bool fDeleteUpdate, C4G
strUpdateProg += ".exe";
#endif
// Determine name of local extract of update program
StdStrBuf strUpdateProgEx; strUpdateProgEx.Copy(Config.AtExePath(strUpdateProg.getData()));
// Windows Vista/7: rename update program to setup.exe for UAC elevation and in temp path
if (IsWindowsWithUAC()) strUpdateProgEx.Copy(Config.AtTempPath("setup.exe"));
StdStrBuf strUpdateProgEx;
strUpdateProgEx.Copy(Config.AtExePath(strUpdateProg.getData()));
// Extract update program (the update should be applied using the new version)
C4Group UpdateGroup, SubGroup;
C4Group UpdateGroup;
if (!UpdateGroup.Open(strUpdateFile))
{
LogF("Error opening \"%s\": %s", strUpdateFile, UpdateGroup.GetError());
@ -228,30 +216,21 @@ bool C4UpdateDlg::ApplyUpdate(const char *strUpdateFile, bool fDeleteUpdate, C4G
}
#endif
UpdateGroup.Close();
// Execute update program
Log(LoadResStr("IDS_PRC_LAUNCHINGUPDATE"));
succeeded = true;
#ifdef _WIN32
// Notice: even if the update program and update group are in the temp path, they must be executed in our working directory
DWORD ProcessID = GetCurrentProcessId();
StdStrBuf strUpdateArgs, strTitle;
StdStrBuf strUpdateArgs;
strUpdateArgs.Format("\"%s\" \"%s\" %s %lu", strUpdateProgEx.getData(), strUpdateFile, fDeleteUpdate ? "-yd" : "-y", (unsigned long)ProcessID);
STARTUPINFOW startupInfo;
startupInfo.cb = sizeof(startupInfo);
startupInfo.lpReserved = NULL;
startupInfo.lpDesktop = NULL;
startupInfo.lpTitle = L"Updating OpenClonk...";
startupInfo.dwFlags = STARTF_USESHOWWINDOW;
startupInfo.wShowWindow = SW_SHOW;
startupInfo.cbReserved2 = 0;
startupInfo.lpReserved2 = NULL;
PROCESS_INFORMATION procInfo;
BOOL success = CreateProcessW(strUpdateProgEx.GetWideChar(), strUpdateArgs.GetWideChar(), NULL, NULL, FALSE, CREATE_NEW_CONSOLE, NULL, Config.General.ExePath.GetWideChar(), &startupInfo, &procInfo);
if(!success) return false;
// the magic verb "runas" opens the update program in a shell requesting elevation
int iError = (intptr_t)ShellExecute(NULL, L"runas", strUpdateProgEx.GetWideChar(), strUpdateArgs.GetWideChar(), Config.General.ExePath.GetWideChar(), SW_SHOW);
if (iError <= 32) return false;
//int iError = (intptr_t)ShellExecute(NULL, "open", strUpdateProgEx.getData(), strUpdateArgs.getData(), Config.General.ExePath, SW_SHOW);
//if (iError <= 32) return false;
// must quit ourselves for update program to work
if (succeeded) Application.Quit();
#else

View File

@ -385,6 +385,15 @@ bool C4NetIOTCP::CloseBroadcast()
return true;
}
#ifdef __APPLE__
static int fix_poll_timeout(int timeout) {
if (timeout < 0 || timeout > 1000)
return 1000;
else
return timeout;
}
#endif
bool C4NetIOTCP::Execute(int iMaxTime, pollfd *fds) // (mt-safe)
{
// security
@ -400,6 +409,10 @@ bool C4NetIOTCP::Execute(int iMaxTime, pollfd *fds) // (mt-safe)
WSANETWORKEVENTS wsaEvents;
#else
#ifdef __APPLE__
iMaxTime = fix_poll_timeout(iMaxTime);
#endif
std::vector<pollfd> fdvec;
std::map<SOCKET, const pollfd*> fdmap;
if (!fds)
@ -1511,6 +1524,10 @@ bool C4NetIOSimpleUDP::Execute(int iMaxTime, pollfd *)
if (!fInit) { SetError("not yet initialized"); return false; }
ResetError();
#ifdef __APPLE__
iMaxTime = fix_poll_timeout(iMaxTime);
#endif
// wait for socket / timeout
WaitResult eWR = WaitForSocket(iMaxTime);
if (eWR == WR_Error) return false;

View File

@ -25,7 +25,7 @@ void C4AbstractApp::Run()
ScheduleProcs();
}
bool C4AbstractApp::ScheduleProcs(int iTimeout)
bool C4AbstractApp::DoScheduleProcs(int iTimeout)
{
// Always fail after quit message
if(fQuitMsgReceived)
@ -34,7 +34,7 @@ bool C4AbstractApp::ScheduleProcs(int iTimeout)
// Unfortunately, the SDL event loop needs to be polled
FlushMessages();
#endif
return StdScheduler::ScheduleProcs(iTimeout);
return StdScheduler::DoScheduleProcs(iTimeout);
}
void C4Window::PerformUpdate()

View File

@ -97,7 +97,7 @@ public:
// Gamma
virtual bool ApplyGammaRamp(struct _GAMMARAMP &ramp, bool fForce);
virtual bool SaveDefaultGammaRamp(struct _GAMMARAMP &ramp);
virtual bool ScheduleProcs(int iTimeout = 1000/36);
virtual bool DoScheduleProcs(int iTimeout);
bool FlushMessages();
C4Window * pWindow;
bool fQuitMsgReceived; // if true, a quit message has been received and the application should terminate

View File

@ -149,6 +149,7 @@
#ifdef USE_COCOA
- (void) delayedRun:(id)sender
{
Application.StartOnCurrentThread();
running = YES;
//while (!Application.fQuitMsgReceived)
// Application.ScheduleProcs();

View File

@ -63,7 +63,13 @@ bool C4AbstractApp::IsClipboardFull(bool fClipboard)
void C4AbstractApp::MessageDialog(const char * message)
{
NSAlert* alert = [NSAlert alertWithMessageText:@"Fatal Error" defaultButton:nil alternateButton:nil otherButton:nil informativeTextWithFormat:[NSString stringWithUTF8String:message]];
NSAlert* alert = [NSAlert alertWithMessageText:@"Fatal Error"
defaultButton:nil
alternateButton:nil
otherButton:nil
informativeTextWithFormat:@"%@",
[NSString stringWithUTF8String:message]
];
[alert runModal];
}

View File

@ -132,7 +132,6 @@ C4TimeMilliseconds StdSchedulerProc::GetNextTick(C4TimeMilliseconds tNow)
bool StdScheduler::ScheduleProcs(int iTimeout)
{
isInManualLoop = true;
// Needs at least one process to work properly
if (!procs.size()) return false;
@ -149,8 +148,10 @@ bool StdScheduler::ScheduleProcs(int iTimeout)
}
}
bool old = isInManualLoop;
isInManualLoop = true;
bool res = DoScheduleProcs(iTimeout);
isInManualLoop = false;
isInManualLoop = old;
return res;
}
@ -269,6 +270,7 @@ void *StdSchedulerThread::_ThreadFunc(void *pPar)
unsigned int StdSchedulerThread::ThreadFunc()
{
StartOnCurrentThread();
// Keep calling Execute until someone gets fed up and calls StopThread()
while (fRunThreadRun)
ScheduleProcs(1000);

View File

@ -238,19 +238,21 @@ public:
void Add(StdSchedulerProc *pProc);
void Remove(StdSchedulerProc *pProc);
// extra events for above Add/Remove methods
void Added(StdSchedulerProc *pProc);
void Removing(StdSchedulerProc *pProc);
// called by StdSchedulerProcs when something important about their configuration changed
void Changed(StdSchedulerProc *pProc);
// needs to be called on thread tasks for this scheduler are meant to be run on
void StartOnCurrentThread();
virtual bool ScheduleProcs(int iTimeout = -1);
bool ScheduleProcs(int iTimeout = 1000/36);
void UnBlock();
protected:
// overridable
virtual void OnError(StdSchedulerProc *) { }
private:
bool DoScheduleProcs(int iTimeout);
virtual bool DoScheduleProcs(int iTimeout);
};
// A simple process scheduler thread

View File

@ -22,7 +22,7 @@ using namespace std;
@interface SCHNotify : SCHAddition
{
list<CFRunLoopSourceRef> socketSources;
list<pair<CFRunLoopSourceRef, CFSocketRef>> socketSources;
}
- (void) registerAt:(SCHAdditions*) _additions;
- (void) unregisterFrom:(SCHAdditions*) _additions;
@ -41,12 +41,14 @@ using namespace std;
{
NSMutableDictionary* procAdditions;
}
+ (SCHAdditions*) requestAdditionsForScheduler:(StdScheduler*) scheduler;
- (id) initWithScheduler:(StdScheduler*) scheduler;
- (SCHAddition*) additionForProc:(StdSchedulerProc*) proc;
- (SCHAddition*) assignAdditionForProc:(StdSchedulerProc*) proc;
+ (SCHAdditions*) requestAdditionForScheduler:(StdScheduler*) scheduler;
- (void) changed:(SCHAddition*)addition;
- (BOOL) removeAdditionForProc:(StdSchedulerProc*) proc;
@property(readonly) NSRunLoop* runLoop;
- (void) start;
@property(readonly) __weak NSRunLoop* runLoop;
@property(readonly) StdScheduler* scheduler;
@end
@ -54,12 +56,13 @@ using namespace std;
static NSMutableDictionary* additionsDictionary;
- (int) numberOfAdditions { return [additionsDictionary count]; }
- (id) initWithScheduler:(StdScheduler*) scheduler
{
if (self = [super init])
{
_scheduler = scheduler;
_runLoop = [NSRunLoop currentRunLoop];
procAdditions = [NSMutableDictionary new];
return self;
} else
@ -95,12 +98,40 @@ static NSMutableDictionary* additionsDictionary;
if (addition)
{
[procAdditions setObject:addition forKey:[NSNumber valueWithPointer:proc]];
if (_runLoop)
[addition registerAt:self];
return addition;
} else
return nullptr;
}
+ (SCHAdditions*) requestAdditionForScheduler:(StdScheduler *)scheduler
- (void) start
{
auto current = [NSRunLoop currentRunLoop];
if (current != [NSRunLoop mainRunLoop])
return; // oh well
_runLoop = current;
[procAdditions enumerateKeysAndObjectsUsingBlock:
^void (id key, SCHAddition* obj, BOOL* stop) { [obj registerAt:self]; }];
}
- (void) changed:(SCHAddition*)addition
{
[addition unregisterFrom:self];
if (_runLoop)
[addition registerAt:self];
}
+ (void) removeAdditions:(SCHAdditions*)additions
{
auto key = [NSNumber valueWithPointer:additions.scheduler];
@synchronized (additionsDictionary)
{
[additionsDictionary removeObjectForKey:key];
}
}
+ (SCHAdditions*) requestAdditionsForScheduler:(StdScheduler *)scheduler
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken,
@ -132,6 +163,8 @@ static NSMutableDictionary* additionsDictionary;
}
- (bool) shouldExecuteProc
{
if (!proc)
return false;
auto s = schedulerAdditions;
return s && !s.scheduler->IsInManualLoop();
}
@ -145,9 +178,7 @@ static NSMutableDictionary* additionsDictionary;
}
- (void) changed
{
auto s = schedulerAdditions;
[self unregisterFrom:s];
[self registerAt:s];
[schedulerAdditions changed:self];
}
@end
@ -197,8 +228,12 @@ void callback (CFSocketRef s, CFSocketCallBackType type, CFDataRef address, cons
[super registerAt:_additions];
vector<struct pollfd> vecs;
proc->GetFDs(vecs);
CFSocketContext ctx = {};
ctx.info = (__bridge void*)self;
CFSocketContext ctx =
{
.info = (__bridge void*)self,
.retain = CFRetain,
.release = CFRelease
};
for (auto p : vecs)
{
auto socket = CFSocketCreateWithNative(NULL,
@ -207,40 +242,45 @@ void callback (CFSocketRef s, CFSocketCallBackType type, CFDataRef address, cons
);
auto runLoopSource = CFSocketCreateRunLoopSource(NULL, socket, 0);
CFRunLoopAddSource([_additions.runLoop getCFRunLoop], runLoopSource, kCFRunLoopDefaultMode);
socketSources.push_back(runLoopSource);
socketSources.push_back(make_pair(runLoopSource, socket));
}
}
- (void) unregisterFrom:(SCHAdditions*) _additions
{
auto runLoop = [_additions.runLoop getCFRunLoop];
for (auto r : socketSources)
{
CFRunLoopSourceInvalidate(r);
CFRelease(r);
CFRunLoopRemoveSource(runLoop, r.first, kCFRunLoopDefaultMode);
CFSocketDisableCallBacks(r.second, kCFSocketReadCallBack|kCFSocketWriteCallBack);
CFRunLoopSourceInvalidate(r.first);
CFRelease(r.second);
CFRelease(r.first);
}
socketSources.clear();
[super unregisterFrom:_additions];
}
@end
void StdScheduler::StartOnCurrentThread()
{
[[SCHAdditions requestAdditionsForScheduler:this] start];
}
void StdScheduler::Added(StdSchedulerProc *pProc)
{
auto x = [SCHAdditions requestAdditionForScheduler:this];
auto addition = [x assignAdditionForProc:pProc];
if (addition)
[addition registerAt:x];
[[SCHAdditions requestAdditionsForScheduler:this] assignAdditionForProc:pProc];
}
void StdScheduler::Removing(StdSchedulerProc *pProc)
{
auto x = [SCHAdditions requestAdditionForScheduler:this];
auto x = [SCHAdditions requestAdditionsForScheduler:this];
[x removeAdditionForProc:pProc];
if ([x numberOfAdditions] == 0)
[SCHAdditions removeAdditions:x];
}
void StdScheduler::Changed(StdSchedulerProc* pProc)
{
auto x = [SCHAdditions requestAdditionForScheduler:this];
auto addition = [x additionForProc:pProc];
if (addition)
[addition changed];
[[[SCHAdditions requestAdditionsForScheduler:this] additionForProc:pProc] changed];
}
#endif

View File

@ -236,6 +236,7 @@ void CStdMultimediaTimerProc::GetFDs(std::vector<struct pollfd> & checkfds)
void StdScheduler::Added(StdSchedulerProc *pProc) {}
void StdScheduler::Removing(StdSchedulerProc *pProc) {}
void StdScheduler::Changed(StdSchedulerProc* pProc) {}
void StdScheduler::StartOnCurrentThread() {}
#endif
void *StdThread::_ThreadFunc(void *pPar)

View File

@ -157,6 +157,10 @@ void StdScheduler::Changed(StdSchedulerProc* pProc)
{
}
void StdScheduler::StartOnCurrentThread()
{
}
bool CStdMultimediaTimerProc::CheckAndReset()
{
if (!Check()) return false;

BIN
src/res/nib/Editor.nib generated 100644

Binary file not shown.

BIN
src/res/nib/EditorGUIWindow.nib generated 100644

Binary file not shown.

BIN
src/res/nib/EditorViewport.nib generated 100644

Binary file not shown.

BIN
src/res/nib/FullScreen.nib generated 100644

Binary file not shown.

BIN
src/res/nib/MainMenu.nib generated 100644

Binary file not shown.

View File

@ -97,6 +97,10 @@ Section
; delete obsolete folders
Delete "BackToTheRocks.ocf"
Delete "BeyondTheRocks.ocf"
; these got in in release 4.0, bug #1029
Delete "Issues.ocf"
Delete "Experimental.ocd"
Delete "Experimental.ocf"
File "${SRCDIR}\planet\AUTHORS"
File "${SRCDIR}\planet\COPYING"

View File

@ -5,7 +5,7 @@ $libs_to_bundle=".*?/lib(jpeg|GLEW|llvm|SDL|SDL_mixer|freetype|ogg|vorbis|vorbis
$executable_path = ENV['EXECUTABLE_PATH']
$frameworks_folder_path = ENV['FRAMEWORKS_FOLDER_PATH']
Dir.chdir ENV['TARGET_BUILD_DIR']
Dir.chdir ENV['TARGET_BUILD_DIR'] if ENV['TARGET_BUILD_DIR']
puts "Bundling libraries..."
def bundle_dependencies(executable_path)

13
tools/osx_pack_gamedata.sh 100644 → 100755
View File

@ -2,8 +2,7 @@
C4GROUP=$1
SRC_GROUP=$2
RESOURCES=$TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH
RESOURCES=${3:-$TARGET_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH}
TARGET_GROUP=$RESOURCES/`basename $SRC_GROUP`
should_update() {
@ -13,15 +12,15 @@ should_update() {
return 1
}
if [ "$CONFIGURATION" == "Release" ]
then if should_update
if [ "$CONFIGURATION" == "Debug" ]
then echo Linking $TARGET_GROUP...
rm -f $TARGET_GROUP
ln -sf $SRC_GROUP $TARGET_GROUP
else if should_update
then echo Packing $TARGET_GROUP...
rm -f $TARGET_GROUP
cd $RESOURCES
$C4GROUP $SRC_GROUP -t $TARGET_GROUP
else echo No changes found for $TARGET_GROUP, skipping
fi
else echo Linking $TARGET_GROUP...
rm -f $TARGET_GROUP
ln -sf $SRC_GROUP $TARGET_GROUP
fi