Merge branch 'master' into Controls

Conflicts:
	CMakeLists.txt
	Makefile.am
	planet/Objects.ocd/HUD.ocd/Controller.ocd/Script.c
	planet/Objects.ocd/Items.ocd/Weapons.ocd/Club.ocd/Script.c
	planet/Objects.ocd/Libraries.ocd/ClonkControl.ocd/Script.c
	src/control/C4Control.cpp
	src/control/C4Control.h
	src/gamescript/C4GameScript.cpp
Controls
David Dormagen 2014-02-14 23:48:54 +01:00 committed by Nicolas Hake
commit 06ac00ace8
1604 changed files with 20202 additions and 46785 deletions

1
.gitignore vendored
View File

@ -138,3 +138,4 @@ mape
mape-icons.h
tests/openclonk_unittest.sln

View File

@ -1,27 +1,15 @@
# OpenClonk, http://www.openclonk.org
#
# Copyright (c) 2009-2011 Günther Brammer
# Copyright (c) 2009-2012 Nicolas Hake
# Copyright (c) 2009 David Dormagen
# Copyright (c) 2009-2012 Armin Burgmeier
# Copyright (c) 2009-2010 Sven Eberhardt
# Copyright (c) 2009 Tobias Zwick
# Copyright (c) 2009 Richard Gerum
# Copyright (c) 2010-2011 Julius Michaelis
# Copyright (c) 2010-2011 Peter Wortmann
# Copyright (c) 2010-2011 Martin Plicht
# Copyright (c) 2010 Manuel Riecke
# Copyright (c) 2009-2013, The OpenClonk Team and contributors
#
# Portions might be copyrighted by other authors who have contributed
# to OpenClonk.
# Distributed under the terms of the ISC license; see accompanying file
# "COPYING" for details.
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
# See isc_license.txt for full license and disclaimer.
# "Clonk" is a registered trademark of Matthes Bender, used with permission.
# See accompanying file "TRADEMARK" for details.
#
# "Clonk" is a registered trademark of Matthes Bender.
# See clonk_trademark_license.txt for full license.
# To redistribute this file separately, substitute the full license texts
# for the above references.
cmake_minimum_required (VERSION 2.6.0)
project (openclonk CXX C)
@ -53,9 +41,6 @@ endfunction()
include(CMakeDependentOption)
option(PROJECT_FOLDERS "Put source files into subfolders in project file" ON)
option(USE_CONSOLE "Build dedicated server" OFF)
CMAKE_DEPENDENT_OPTION(USE_GL "Enable OpenGL support" ON "NOT USE_CONSOLE" OFF)
# DirectX is disabled because it misses essential features
CMAKE_DEPENDENT_OPTION(USE_DIRECTX "Enable DirectX support" OFF "WIN32 AND NOT USE_CONSOLE" OFF)
CMAKE_DEPENDENT_OPTION(USE_SDL_MAINLOOP "Use SDL to create windows etc." OFF "NOT USE_CONSOLE" OFF)
CMAKE_DEPENDENT_OPTION(USE_X11 "Use X11 to create windows etc." ON
"UNIX AND NOT APPLE AND NOT USE_SDL_MAINLOOP AND NOT USE_CONSOLE" OFF)
@ -70,9 +55,11 @@ else()
SET(INITIAL_USE_OPEN_AL OFF)
endif()
option(USE_OPEN_AL "Use OpenAL to play sounds" ${INITIAL_USE_OPEN_AL})
option(OC_BUILD_MULTIPROCESSOR "Use all processor cores to build" OFF)
option(WITH_AUTOMATIC_UPDATE "Automatic updates are downloaded from the project website." OFF)
# Remove obsolete options
unset(OC_BUILD_MULTIPROCESSOR CACHE)
############################################################################
# Check for compiler quirks and features
############################################################################
@ -104,15 +91,24 @@ CHECK_CXX_SOURCE_COMPILES("int main() { void *d = nullptr; }" HAVE_NULLPTR)
CHECK_CXX_SOURCE_COMPILES("int main() { static_assert(true, \"\"); }" HAVE_STATIC_ASSERT)
set(CMAKE_REQUIRED_FLAGS "${SAFE_CMAKE_REQUIRED_FLAGS}")
# g++'s libstdc++ doesn't properly support <regex> until 4.8.1 (maybe later?).
# They ship a header that declares functions, but they don't ship an
# implementation for some things (like std::regex_iterator).
# This needs to test *linking*, not compilation; cmake does both at the same
# time, so the test below works.
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)
# Activate minimal rebuild
if(OC_BUILD_MULTIPROCESSOR)
list(APPEND OC_CXX_FLAGS /MP)
list(REMOVE_ITEM OC_CXX_FLAGS_DEBUG /Gm)
else()
list(REMOVE_ITEM OC_CXX_FLAGS /MP)
list(APPEND OC_CXX_FLAGS_DEBUG /Gm)
endif()
if (NOT CMAKE_CL_64)
# Activate edit-and-continue
list(REMOVE_ITEM OC_CXX_FLAGS_DEBUG /Zi)
@ -215,10 +211,6 @@ set(OC_CLONK_SOURCES
src/graphics/Bitmap256.cpp
src/graphics/Bitmap256.h
src/graphics/C4Draw.cpp
src/graphics/C4DrawD3D.cpp
src/graphics/C4DrawD3D.h
src/graphics/C4DrawD3DShader.cpp
src/graphics/C4DrawD3DShader.h
src/graphics/C4DrawGL.cpp
src/graphics/C4DrawGLCtx.cpp
src/graphics/C4DrawGL.h
@ -268,11 +260,13 @@ set(OC_CLONK_SOURCES
src/gui/C4Gui.cpp
src/gui/C4GuiDialogs.cpp
src/gui/C4GuiEdit.cpp
src/gui/C4GuiWindow.cpp
src/gui/C4Gui.h
src/gui/C4GuiLabels.cpp
src/gui/C4GuiListBox.cpp
src/gui/C4GuiMenu.cpp
src/gui/C4GuiTabular.cpp
src/gui/C4GuiWindow.cpp
src/gui/C4KeyboardInput.cpp
src/gui/C4KeyboardInput.h
src/gui/C4LoaderScreen.cpp
@ -285,8 +279,6 @@ set(OC_CLONK_SOURCES
src/gui/C4MessageBoard.h
src/gui/C4MessageInput.cpp
src/gui/C4MessageInput.h
src/gui/C4GuiWindow.cpp
src/gui/C4GuiWindow.h
src/gui/C4MouseControl.cpp
src/gui/C4MouseControl.h
src/gui/C4PlayerInfoListBox.cpp
@ -359,8 +351,6 @@ set(OC_CLONK_SOURCES
src/lib/PathFinder.cpp
src/lib/PathFinder.h
src/lib/StdAdaptors.h
src/lib/StdBase64.cpp
src/lib/StdBase64.h
src/lib/StdColors.h
src/lib/StdMesh.cpp
src/lib/StdMesh.h
@ -376,7 +366,6 @@ set(OC_CLONK_SOURCES
src/lib/StdMeshMath.h
src/lib/StdMeshUpdate.cpp
src/lib/StdMeshUpdate.h
src/lib/StdResStr.h
src/network/C4Client.cpp
src/network/C4Client.h
src/network/C4GameControlNetwork.cpp
@ -461,6 +450,8 @@ set(OC_CLONK_SOURCES
src/platform/C4SoundLoaders.h
src/platform/C4SoundSystem.cpp
src/platform/C4SoundSystem.h
src/platform/C4TimeMilliseconds.cpp
src/platform/C4TimeMilliseconds.h
src/platform/C4StdInProc.cpp
src/platform/C4StdInProc.h
src/platform/C4Video.cpp
@ -579,6 +570,7 @@ if(APPLE)
src/platform/C4FileMonitorMac.mm
src/platform/C4AppDelegate.h
src/platform/C4AppDelegate.mm
src/platform/StdSchedulerMac.mm
)
else()
list(APPEND OC_SYSTEM_SOURCES
@ -591,6 +583,8 @@ if(WIN32)
src/res/resource.h
)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/res/openclonk.manifest" "${CMAKE_CURRENT_BINARY_DIR}/openclonk.manifest" COPYONLY)
if(MINGW)
# cmake does not support compiling resources with MinGW
# natively, see http://www.cmake.org/Bug/view.php?id=4068.
@ -841,31 +835,24 @@ if(MSVC)
endif()
if(NOT USE_CONSOLE)
SET(JPEG_NAMES ${JPEG_NAMES} libjpeg)
SET(JPEG_NAMES ${JPEG_NAMES} libjpeg jpeg-static)
include(FindJPEG)
endif()
include(FindPNG)
include(FindZLIB)
include_directories(${JPEG_INCLUDE_DIR} ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
find_package("Boost" 1.40.0)
if(NOT Boost_INCLUDE_DIR)
message(SEND_ERROR "Could not find the Boost C++ Libraries")
else()
include_directories(SYSTEM ${Boost_INCLUDE_DIR})
endif()
find_package("Boost" 1.40.0 REQUIRED)
include_directories(SYSTEM ${Boost_INCLUDE_DIR})
include(FindThreads)
if(NOT WIN32)
SET(HAVE_PTHREAD ${CMAKE_USE_PTHREADS_INIT} CACHE INTERNAL "libpthread available")
endif()
# isilkor 09-05-29: FindFreetype only checks for no-ver and 219
if(NOT USE_CONSOLE)
find_library(FREETYPE_LIBRARY NAMES freetype239 freetype2411)
include(FindFreetype)
find_package(Freetype REQUIRED)
include_directories(${FREETYPE_INCLUDE_DIRS})
SET(HAVE_FREETYPE ${FREETYPE_FOUND} CACHE INTERNAL "Rename of FREETYPE_FOUND for config.h")
endif()
# FINDLIB works the same as find_library, but also marks the resulting var as
@ -943,14 +930,9 @@ endif()
if(APPLE)
list(APPEND OC_BUNDLE_RESOURCES
src/res/Clonk.icns
src/res/oc.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
@ -966,6 +948,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(
@ -999,6 +999,8 @@ add_executable(c4group
add_executable(netpuncher EXCLUDE_FROM_ALL
src/platform/StdScheduler.cpp
src/platform/StdSchedulerWin32.cpp
src/platform/StdSchedulerPoll.cpp
src/netpuncher/main.cpp
)
@ -1021,16 +1023,18 @@ src/lib/StdCompiler.h
src/lib/C4Markup.cpp
src/lib/C4Markup.h
src/lib/StdResStr2.cpp
src/lib/StdResStr2.h
src/network/C4NetIO.cpp
src/network/C4NetIO.h
src/platform/GetTime.cpp
src/platform/StdFile.cpp
src/platform/StdFile.h
src/platform/StdRegistry.cpp
src/platform/StdRegistry.h
src/platform/StdScheduler.cpp
src/platform/StdSchedulerWin32.cpp
src/platform/StdSchedulerPoll.cpp
src/platform/StdScheduler.h
src/platform/C4TimeMilliseconds.cpp
src/platform/C4TimeMilliseconds.h
src/zlib/gzio.c
src/zlib/gzio.h
src/zlib/zutil.h
@ -1155,7 +1159,7 @@ endif()
set_property(TARGET openclonk APPEND PROPERTY COMPILE_DEFINITIONS GLEW_STATIC)
set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG _DEBUG)
# This expands some variables in Info.plist as a side-effect. XCode might then
# This expands some variables in Info.plist as a side-effect. XCode might then
# expand a second time, using the same syntax. Try not to get confused by this!
set_target_properties(openclonk PROPERTIES MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/src/res/Info.plist")
@ -1175,6 +1179,11 @@ if(MSVC)
oc_set_target_names(c4group)
oc_set_target_names(c4script)
oc_set_target_names(netpuncher)
# cmake does not support embedding arbitrary manifests,
# so we add it to the resource file ourselves and tell
# MSVC not to create its own.
set_property(TARGET openclonk APPEND PROPERTY LINK_FLAGS "/MANIFEST:NO")
endif()
############################################################################
@ -1253,32 +1262,33 @@ 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")
# 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_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(CMAKE_GENERATOR STREQUAL Xcode)
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)
endif()
if (USE_APPLE_CLANG)
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(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -stdlib=libc++ -g -Wall -fobjc-arc")
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")
@ -1316,7 +1326,7 @@ if(WIN32)
set(HAVE_DBGHELP ${DBGHELP_FOUND})
endif()
if(USE_GL)
if(NOT USE_CONSOLE)
include(FindOpenGL)
FINDLIB(GLEW_LIBRARIES NAMES GLEW glew32 glew32s)
FIND_PATH(GLEW_INCLUDE_DIR NAMES GL/glew.h)
@ -1326,28 +1336,6 @@ if(USE_GL)
)
include_directories(${GLEW_INCLUDE_DIR})
endif()
if(USE_DIRECTX)
if(EXISTS $ENV{DXSDK_DIR})
list(APPEND CMAKE_INCLUDE_PATH $ENV{DXSDK_DIR}/Include)
if(CMAKE_CL_64)
list(APPEND CMAKE_LIBRARY_PATH $ENV{DXSDK_DIR}/Lib/x64)
else()
list(APPEND CMAKE_LIBRARY_PATH $ENV{DXSDK_DIR}/Lib/x86)
endif()
endif()
FINDLIB(DIRECT3D_LIBRARIES d3d9)
FINDLIB(DIRECT3DX_LIBRARIES d3dx9)
FIND_PATH(DIRECT3D_INCLUDE_DIR NAMES d3d9.h)
FIND_PATH(DIRECT3DX_INCLUDE_DIR NAMES d3dx9.h)
target_link_libraries(openclonk
${DIRECT3D_LIBRARIES}
${DIRECT3DX_LIBRARIES}
)
include_directories(
${DIRECT3D_INCLUDE_DIR}
${DIRECT3DX_INCLUDE_DIR}
)
endif()
if(USE_GTK)
SET(WITH_DEVELOPER_MODE ${GTK_FOUND})
SET(WITH_GLIB ${GTK_FOUND})
@ -1433,6 +1421,15 @@ if(HAVE_UPNP)
target_link_libraries(openclonk ${UPNP_LIBRARIES})
endif()
if(USE_BOOST_REGEX)
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)
target_link_libraries(libc4script ${Boost_REGEX_LIBRARY})
target_link_libraries(c4group ${Boost_REGEX_LIBRARY})
endif()
add_subdirectory(tests EXCLUDE_FROM_ALL)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h)
@ -1448,10 +1445,6 @@ endif()
############################################################################
# installation
############################################################################
# Install the icon into share/icons/hicolor/48x48/apps/openclonk.png. Do this by
# extracting the correct size from oc.ico. Currently this is layer 2 - let's
# hope that it stays this way.
# Don't allow installation for WITH_AUTOMATIC_UPDATE because otherwise
# the installed binary wouldn't find its game data in the system data path.
IF(WITH_AUTOMATIC_UPDATE)
@ -1468,22 +1461,44 @@ install(
)"
)
FIND_PACKAGE(ImageMagick COMPONENTS convert)
if(ImageMagick_convert_FOUND)
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/openclonk.png
COMMAND "${ImageMagick_convert_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc.ico[2]" "${CMAKE_CURRENT_BINARY_DIR}/openclonk.png"
MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/src/res/oc.ico
VERBATIM
)
add_custom_target(icon DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/openclonk.png)
add_dependencies(data icon)
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_BINARY_DIR}/openclonk.png
DESTINATION share/icons/hicolor/48x48/apps
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
@ -1493,20 +1508,32 @@ set(OC_C4GROUPS
Objects.ocd
Arena.ocf
Parkour.ocf
Settlement.ocf
Missions.ocf
Tutorial.ocf
Worlds.ocf
)
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}
@ -1514,21 +1541,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 ${CMAKE_CURRENT_BINARY_DIR}/c4group DESTINATION bin/)
############################################################################
# setup_openclonk.exe
############################################################################

47
COPYING 100644
View File

@ -0,0 +1,47 @@
Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de
Copyright (c) 2009-2013, The OpenClonk Team and contributors
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Portions of the code have been contributed by other authors:
Copyright (c) 2006-2007 Alexander Post
Copyright (c) 2004-2013 Armin Burgmeier
Copyright (c) 2005-2006, 2008-2010 Asmageddon
Copyright (c) 2010, 2012 Benjamin Herr
Copyright (c) 2006, 2012 Bernhard Bonigl
Copyright (c) 2009-2010 Carl-Philip Hänsch
Copyright (c) 2001 Carlo Teubner
Copyright (c) 2009, 2011-2013 David Dormagen
Copyright (c) 2011-2012 Felix Wagner
Copyright (c) 2006 Florian Groß
Copyright (c) 2004-2012 Günther Brammer
Copyright (c) 2006-2008 Julian Raschke
Copyright (c) 2010-2012 Julius Michaelis
Copyright (c) 2010-2011 Maikel de Vries
Copyright (c) 2010 Manuel Riecke
Copyright (c) 2009 Mark Haßelbusch
Copyright (c) 2009-2012 Martin Plicht
Copyright (c) 1998-2008 Matthes Bender
Copyright (c) 2001 Michael Käser
Copyright (c) 2009 mizipzor
Copyright (c) 2009-2013 Nicolas Hake
Copyright (c) 2010 Peewee
Copyright (c) 2001-2011 Peter Wortmann
Copyright (c) 2012 Philipp Kern
Copyright (c) 2009-2010 Richard Gerum
Copyright (c) 2001-2013 Sven Eberhardt
Copyright (c) 2004-2005, 2009-2013 Tobias Zwick
Code inside the "thirdparty" directory has been included for convenience
and may be licensed under different terms. See the respective directories
for details.

View File

@ -1,25 +1,30 @@
<Engine and Tools>
Armin Burgmeier (Clonk-Karl)
Günther Brammer (Günther)
Nicolas Hake (Isilkor)
Günther Brammer (Günther)
Sven Eberhardt (Sven2)
Nicolas Hake (Isilkor)
Martin Plicht (Mortimer)
Peter Wortmann (PeterW)
Julius Michaelis (Caesar)
<Scripting and Content>
Maikel de Vries (Maikel)
David Dormagen (Zapper)
Felix Wagner (Clonkonaut)
Bernhard Bonigl (Boni)
<Art and Content>
Charles Spurrill (Ringwaul)
Richard Gerum (Randrian)
Timo Stabbert (Mimmo)
Matthias Rottländer (Matthi)
Felix Riese (Fungiform)
Florian Graier (Nachtfalter)
<Scripting and Content>
Maikel de Vries (Maikel)
Bernhard Bonigl (Boni)
Felix Wagner (Clonkonaut)
David Dormagen (Zapper)
<Coordination, Administration>
<Coordination>
Tobias Zwick (Newton)
<Thanks to Contributors>
Benjamin Herr (Loriel), Matthias Rottländer (Matthi), Felix Riese (Fungiform), Manuel Riecke (MrBeast), Benedict Etzel (B_E), Carl-Philip Hänsch (Carli), Alexander Semeniuk (AlteredARMOR), Florian Graier (Nachtfalter), Daniel Theuke (ST-DDT), Asmageddon, Merten Ehmig (Pluto), Mark Haßelbusch (Marky), Luchs, Peewee, Lauri Niskanen (Ape), Dominik Bayerl (Kanibal), Faby, Checkmaty, Gurkenglas, Clonkine, mizipzor, mixi, Pyrit, grgecko, Koronis, RedWolf Design GmbH and all those who contributed to previous Clonk titles for the passion they put into the game and for agreeing to make Clonk open source.
<Special Thanks to Contributors>
Benjamin Herr (Loriel), Benedict Etzel (B_E), Oliver Schneider (ker), Philipp Kern (pkern), Carl-Philip Hänsch (Carli), Manuel Rieke (MrBeast), Alexander Semeniuk (AlteredARMOR), Merten Ehmig (Pluto) Daniel Theuke (ST-DDT), Asmageddon, Faby, Russel, Peewee, Tim Blume (End), Andriel, Gurkenglas, Pyrit, Luchs, grgecko, Dominik Bayerl (Kannibal), Lauri Niskanen (Ape), Clonkine, Checkmaty, Sven-Hendrik Haase, Johannes Nixdorf (mixi), Stan, Koronis, mizipzor, Mark Haßelbusch (Marky), Sebastian Rühl and TomyLobo.
Also, big thanks to RedWolf Design GmbH and all those who contributed to previous Clonk titles for the passion they put into the game and for agreeing to make Clonk open source.

View File

@ -1,987 +0,0 @@
# Copyright (c) 2005-2011 Günther Brammer
# Copyright (c) 2009 Armin Burgmeier
# Copyright (c) 2010-2011 Nicolas Hake
# Copyright (c) 2005-2009, RedWolf Design GmbH, http://www.clonk.de
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
ACLOCAL_AMFLAGS = -I autotools --install
bin_PROGRAMS = openclonk c4group puncher c4script
if MAPE
bin_PROGRAMS += mape
endif
EXTRA_PROGRAMS = tstc4netio gunzip4c4group
noinst_LIBRARIES = libmisc.a libc4script.a
# Some defines and warning options
if RECENT_GCC
WARNING_FLAGS = -Wall -Wextra -Wredundant-decls -Wendif-labels -Wpointer-arith \
-Wcast-qual -Wcast-align -Wwrite-strings -Winit-self -Wsign-promo \
-Wno-reorder -Wno-unused-parameter -Wnon-virtual-dtor -Woverloaded-virtual
##-Wmissing-format-attribute -Wdisabled-optimization -Wlogical-op
##-Weffc++ -Wold-style-cast -Wunsafe-loop-optimizations
else
WARNING_FLAGS = -Wall
endif
AM_CXXFLAGS = $(PTHREAD_CFLAGS) $(WINDOWS_CFLAGS) $(WARNING_FLAGS)
AM_CFLAGS = -Wall
AM_CPPFLAGS = \
-I$(builddir) \
-I$(srcdir)/src \
-I$(srcdir)/src/c4group \
-I$(srcdir)/src/config \
-I$(srcdir)/src/control \
-I$(srcdir)/src/editor \
-I$(srcdir)/src/game \
-I$(srcdir)/src/gamescript \
-I$(srcdir)/src/graphics \
-I$(srcdir)/src/gui \
-I$(srcdir)/src/landscape \
-I$(srcdir)/src/lib \
-I$(srcdir)/src/network \
-I$(srcdir)/src/object \
-I$(srcdir)/src/platform \
-I$(srcdir)/src/player \
-I$(srcdir)/src/res \
-I$(srcdir)/src/script \
-I$(srcdir)/thirdparty \
$(BOOST_CPPFLAGS)
BUILT_SOURCES = C4Version.h
CLEANFILES =
DISTCLEANFILES = C4Version.h
do_subst = sed -e 's,[@]C4PROJECT[@],'"$$(sed -n 's/SET(C4PROJECT\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)"',g' \
-e 's,[@]C4PROJECT_DOMAIN[@],'"$$(sed -n 's/SET(C4PROJECT_DOMAIN\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)"',g' \
-e 's,[@]C4PROJECT_TLD[@],'"$$(sed -n 's/SET(C4PROJECT_TLD\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)"',g' \
-e 's,[@]C4PROJECT_URL[@],http://www.openclonk.org,g' \
-e 's,[@]C4COPYRIGHT_YEAR[@],'"$$(date '+%Y')"',g' \
-e 's,[@]C4ENGINENAME[@],'"$$(sed -n 's/SET(C4ENGINENAME\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)"',g' \
-e 's,[@]C4ENGINENICK[@],'"$$(sed -n 's/SET(C4ENGINENICK\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)"',g' \
-e 's,[@]C4ENGINEID[@],org.openclonk." C4ENGINENICK ",g' \
-e 's,[@]C4XVER1[@],'"$$(sed -n 's/SET(C4XVER1\s\+\(.\+\))/\1/ p' $(srcdir)/Version.txt)"',g' \
-e 's,[@]C4XVER2[@],'"$$(sed -n 's/SET(C4XVER2\s\+\(.\+\))/\1/ p' $(srcdir)/Version.txt)"',g' \
-e 's,[@]C4XVER3[@],'"$$(sed -n 's/SET(C4XVER3\s\+\(.\+\))/\1/ p' $(srcdir)/Version.txt)"',g' \
-e 's,[@]C4XVER4[@],'"$$(sed -n 's/SET(C4XVER4\s\+\(.\+\))/\1/ p' $(srcdir)/Version.txt)"',g' \
-e 's,[@]C4VERSIONBUILDNAME[@],'"$$(sed -n 's/SET(C4VERSIONBUILDNAME\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)"',g' \
-e 's,[@]C4VERSIONEXTRA[@],'"$$(sed -n 's/SET(C4VERSIONEXTRA\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)"',g' \
-e 's,[@]OC_BUILD_ID[@],,g'
C4Version.h: $(srcdir)/src/C4Version.h.in $(srcdir)/Version.txt
$(do_subst) < $< > $@
WindowsGamesExplorer.xml: $(srcdir)/src/res/WindowsGamesExplorer.xml.in $(srcdir)/Version.txt
$(do_subst) < $< > $@
src/res/engine.o: WindowsGamesExplorer.xml
#various hacks to get dependency tracking working with a precompiled C4Include
if RECENT_GCC
BUILT_SOURCES += C4Include.h.gch
CLEANFILES += C4Include.h.gch
DISTCLEANFILES += @am__quote@$(DEPDIR)/C4Include.Po@am__quote@
# Adapted from the automake compile-command for normal source files.
# Has to be updated after certain changes in this file.
C4Include.h.gch: src/C4Include.h
@am__fastdepCXX_TRUE@ $(CXXCOMPILE) -x c++-header -MT C4Include.h.gch -MD -MP -MF $(DEPDIR)/C4Include.Tpo -c -o $@ $(srcdir)/src/C4Include.h
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/C4Include.Tpo $(DEPDIR)/C4Include.Po
@am__fastdepCXX_FALSE@ $(CXXCOMPILE) -x c++-header -c -o $@ $(srcdir)/src/C4Include.h
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/C4Include.Po@am__quote@
if am__fastdepCXX
AM_CXXFLAGS += -fpch-deps
endif
WARNING_FLAGS += -Winvalid-pch
endif
libmisc_a_SOURCES = \
src/c4group/C4Group.cpp \
src/c4group/C4Group.h \
src/c4group/C4Update.cpp \
src/c4group/C4Update.h \
src/c4group/CStdFile.cpp \
src/c4group/CStdFile.h \
src/lib/C4InputValidation.cpp \
src/lib/C4InputValidation.h \
src/lib/SHA1.h \
src/lib/Standard.cpp \
src/lib/Standard.h \
src/lib/StdBuf.cpp \
src/lib/StdBuf.h \
src/lib/StdCompiler.cpp \
src/lib/StdCompiler.h \
src/lib/C4Markup.cpp \
src/lib/C4Markup.h \
src/lib/StdResStr2.cpp \
src/lib/StdResStr2.h \
src/network/C4NetIO.cpp \
src/platform/GetTime.cpp \
src/platform/StdFile.cpp \
src/platform/StdFile.h \
src/platform/StdRegistry.cpp \
src/platform/StdRegistry.h \
src/platform/StdScheduler.cpp \
src/platform/StdScheduler.h \
src/zlib/gzio.c \
src/zlib/gzio.h \
src/zlib/zutil.h
libc4script_a_SOURCES = \
src/c4group/C4GroupSet.cpp \
src/c4group/C4GroupSet.h \
src/c4group/C4ComponentHost.cpp \
src/c4group/C4ComponentHost.h \
src/c4group/C4LangStringTable.cpp \
src/c4group/C4LangStringTable.h \
src/lib/C4Real.cpp \
src/lib/C4Real.h \
src/lib/C4Random.cpp \
src/lib/C4Random.h \
src/object/C4Id.cpp \
src/object/C4Id.h \
src/script/C4Aul.cpp \
src/script/C4AulDefFunc.h \
src/script/C4AulExec.cpp \
src/script/C4AulExec.h \
src/script/C4AulFunc.cpp \
src/script/C4AulFunc.h \
src/script/C4Aul.h \
src/script/C4AulLink.cpp \
src/script/C4AulParse.cpp \
src/script/C4PropList.cpp \
src/script/C4PropList.h \
src/script/C4Script.cpp \
src/script/C4ScriptHost.cpp \
src/script/C4ScriptHost.h \
src/script/C4StringTable.cpp \
src/script/C4StringTable.h \
src/script/C4ValueArray.cpp \
src/script/C4ValueArray.h \
src/script/C4Value.cpp \
src/script/C4Value.h \
src/script/C4ValueMap.cpp \
src/script/C4ValueMap.h
openclonk_SOURCES = \
src/C4Globals.cpp \
src/c4group/C4Components.h \
src/c4group/C4Extra.cpp \
src/c4group/C4Extra.h \
src/c4group/C4Language.cpp \
src/c4group/C4Language.h \
src/C4Include.h \
src/C4Prototypes.h \
src/C4Version.h.in \
src/config/C4Config.cpp \
src/config/C4Config.h \
src/config/C4Constants.h \
src/config/C4Reloc.cpp \
src/config/C4Reloc.h \
src/control/C4Control.cpp \
src/control/C4Control.h \
src/control/C4GameControl.cpp \
src/control/C4GameControl.h \
src/control/C4GameParameters.cpp \
src/control/C4GameParameters.h \
src/control/C4GameSave.cpp \
src/control/C4GameSave.h \
src/control/C4PlayerControl.cpp \
src/control/C4PlayerControl.h \
src/control/C4PlayerInfoConflicts.cpp \
src/control/C4PlayerInfo.cpp \
src/control/C4PlayerInfo.h \
src/control/C4Record.cpp \
src/control/C4Record.h \
src/control/C4RoundResults.cpp \
src/control/C4RoundResults.h \
src/control/C4Teams.cpp \
src/control/C4Teams.h \
src/editor/C4Console.cpp \
src/editor/C4ConsoleGUICommon.h \
src/editor/C4ConsoleGUI.h \
src/editor/C4Console.h \
src/editor/C4EditCursor.cpp \
src/editor/C4EditCursor.h \
src/editor/C4ObjectListDlg.cpp \
src/editor/C4ObjectListDlg.h \
src/editor/C4ToolsDlg.cpp \
src/editor/C4ToolsDlg.h \
src/editor/C4ViewportWindow.cpp \
src/editor/C4ViewportWindow.h \
src/game/C4Application.cpp \
src/game/C4Application.h \
src/game/C4FullScreen.cpp \
src/game/C4FullScreen.h \
src/game/C4Game.cpp \
src/game/C4Game.h \
src/game/C4GameVersion.h \
src/game/C4GraphicsSystem.cpp \
src/game/C4GraphicsSystem.h \
src/game/C4Physics.h \
src/game/C4Viewport.cpp \
src/game/C4Viewport.h \
src/gamescript/C4Effect.cpp \
src/gamescript/C4Effects.h \
src/gamescript/C4FindObject.cpp \
src/gamescript/C4FindObject.h \
src/gamescript/C4GameScript.cpp \
src/gamescript/C4Script.h \
src/gamescript/C4TransferZone.cpp \
src/gamescript/C4TransferZone.h \
src/graphics/Bitmap256.cpp \
src/graphics/Bitmap256.h \
src/graphics/C4Draw.cpp \
src/graphics/C4DrawD3D.cpp \
src/graphics/C4DrawD3D.h \
src/graphics/C4DrawD3DShader.cpp \
src/graphics/C4DrawD3DShader.h \
src/graphics/C4DrawGL.cpp \
src/graphics/C4DrawGLCtx.cpp \
src/graphics/C4DrawGL.h \
src/graphics/C4DrawMeshGL.cpp \
src/graphics/C4DrawT.cpp \
src/graphics/C4DrawT.h \
src/graphics/C4Draw.h \
src/graphics/C4Facet.cpp \
src/graphics/C4FacetEx.cpp \
src/graphics/C4FacetEx.h \
src/graphics/C4Facet.h \
src/graphics/C4FontLoader.cpp \
src/graphics/C4FontLoader.h \
src/graphics/C4GraphicsResource.cpp \
src/graphics/C4GraphicsResource.h \
src/graphics/C4Surface.cpp \
src/graphics/C4Surface.h \
src/graphics/C4SurfaceLoaders.cpp \
src/graphics/CSurface8.cpp \
src/graphics/CSurface8.h \
src/graphics/StdPNG.cpp \
src/graphics/StdPNG.h \
src/gui/C4ChatDlg.cpp \
src/gui/C4ChatDlg.h \
src/gui/C4DownloadDlg.cpp \
src/gui/C4DownloadDlg.h \
src/gui/C4FileSelDlg.cpp \
src/gui/C4FileSelDlg.h \
src/gui/C4Folder.cpp \
src/gui/C4Folder.h \
src/gui/C4GameDialogs.cpp \
src/gui/C4GameDialogs.h \
src/gui/C4GameLobby.cpp \
src/gui/C4GameLobby.h \
src/gui/C4GameMessage.cpp \
src/gui/C4GameMessage.h \
src/gui/C4GameOptions.cpp \
src/gui/C4GameOptions.h \
src/gui/C4GameOverDlg.cpp \
src/gui/C4GameOverDlg.h \
src/gui/C4GfxErrorDlg.cpp \
src/gui/C4GfxErrorDlg.h \
src/gui/C4GuiButton.cpp \
src/gui/C4GuiCheckBox.cpp \
src/gui/C4GuiComboBox.cpp \
src/gui/C4GuiContainers.cpp \
src/gui/C4Gui.cpp \
src/gui/C4GuiDialogs.cpp \
src/gui/C4GuiEdit.cpp \
src/gui/C4Gui.h \
src/gui/C4GuiLabels.cpp \
src/gui/C4GuiListBox.cpp \
src/gui/C4GuiMenu.cpp \
src/gui/C4GuiTabular.cpp \
src/gui/C4KeyboardInput.cpp \
src/gui/C4KeyboardInput.h \
src/gui/C4LoaderScreen.cpp \
src/gui/C4LoaderScreen.h \
src/gui/C4MainMenu.cpp \
src/gui/C4MainMenu.h \
src/gui/C4Menu.cpp \
src/gui/C4Menu.h \
src/gui/C4MessageBoard.cpp \
src/gui/C4MessageBoard.h \
src/gui/C4MessageInput.cpp \
src/gui/C4MessageInput.h \
src/gui/C4GuiWindow.cpp \
src/gui/C4GuiWindow.h \
src/gui/C4MouseControl.cpp \
src/gui/C4MouseControl.h \
src/gui/C4PlayerInfoListBox.cpp \
src/gui/C4PlayerInfoListBox.h \
src/gui/C4Scoreboard.cpp \
src/gui/C4Scoreboard.h \
src/gui/C4StartupAboutDlg.cpp \
src/gui/C4StartupAboutDlg.h \
src/gui/C4Startup.cpp \
src/gui/C4Startup.h \
src/gui/C4StartupMainDlg.cpp \
src/gui/C4StartupMainDlg.h \
src/gui/C4StartupNetDlg.cpp \
src/gui/C4StartupNetDlg.h \
src/gui/C4StartupOptionsDlg.cpp \
src/gui/C4StartupOptionsDlg.h \
src/gui/C4StartupPlrSelDlg.cpp \
src/gui/C4StartupPlrSelDlg.h \
src/gui/C4StartupScenSelDlg.cpp \
src/gui/C4StartupScenSelDlg.h \
src/gui/C4UpperBoard.cpp \
src/gui/C4UpperBoard.h \
src/landscape/C4Landscape.cpp \
src/landscape/C4Landscape.h \
src/landscape/C4LandscapeRenderClassic.cpp \
src/landscape/C4LandscapeRender.cpp \
src/landscape/C4LandscapeRender.h \
src/landscape/C4Map.cpp \
src/landscape/C4MapCreatorS2.cpp \
src/landscape/C4MapCreatorS2.h \
src/landscape/C4MapScript.cpp \
src/landscape/C4MapScriptAlgo.cpp \
src/landscape/C4MapScript.h \
src/landscape/C4Map.h \
src/landscape/C4MassMover.cpp \
src/landscape/C4MassMover.h \
src/landscape/C4Material.cpp \
src/landscape/C4Material.h \
src/landscape/C4MaterialList.cpp \
src/landscape/C4MaterialList.h \
src/landscape/C4Particles.cpp \
src/landscape/C4Particles.h \
src/landscape/C4PathFinder.cpp \
src/landscape/C4PathFinder.h \
src/landscape/C4PXS.cpp \
src/landscape/C4PXS.h \
src/landscape/C4Scenario.cpp \
src/landscape/C4Scenario.h \
src/landscape/C4ScenarioSection.cpp \
src/landscape/C4Sky.cpp \
src/landscape/C4Sky.h \
src/landscape/C4SolidMask.cpp \
src/landscape/C4SolidMask.h \
src/landscape/C4Texture.cpp \
src/landscape/C4Texture.h \
src/landscape/C4Weather.cpp \
src/landscape/C4Weather.h \
src/lib/C4LogBuf.cpp \
src/lib/C4LogBuf.h \
src/lib/C4Log.cpp \
src/lib/C4Log.h \
src/lib/C4NameList.cpp \
src/lib/C4NameList.h \
src/lib/C4Rect.cpp \
src/lib/C4Rect.h \
src/lib/C4RTF.cpp \
src/lib/C4RTF.h \
src/lib/C4Stat.cpp \
src/lib/C4Stat.h \
src/lib/PathFinder.cpp \
src/lib/PathFinder.h \
src/lib/StdAdaptors.h \
src/lib/StdBase64.cpp \
src/lib/StdBase64.h \
src/lib/StdColors.h \
src/lib/StdMesh.cpp \
src/lib/StdMesh.h \
src/lib/StdMeshLoaderBinaryChunks.cpp \
src/lib/StdMeshLoaderBinaryChunks.h \
src/lib/StdMeshLoaderBinary.cpp \
src/lib/StdMeshLoaderDataStream.h \
src/lib/StdMeshLoader.h \
src/lib/StdMeshLoaderXml.cpp \
src/lib/StdMeshMaterial.cpp \
src/lib/StdMeshMaterial.h \
src/lib/StdMeshMath.cpp \
src/lib/StdMeshMath.h \
src/lib/StdMeshUpdate.cpp \
src/lib/StdMeshUpdate.h \
src/lib/StdResStr.h \
src/network/C4Client.cpp \
src/network/C4Client.h \
src/network/C4GameControlNetwork.cpp \
src/network/C4GameControlNetwork.h \
src/network/C4InteractiveThread.cpp \
src/network/C4InteractiveThread.h \
src/network/C4League.cpp \
src/network/C4League.h \
src/network/C4NetIO.h \
src/network/C4Network2Client.cpp \
src/network/C4Network2Client.h \
src/network/C4Network2.cpp \
src/network/C4Network2Dialogs.cpp \
src/network/C4Network2Dialogs.h \
src/network/C4Network2Discover.cpp \
src/network/C4Network2Discover.h \
src/network/C4Network2.h \
src/network/C4Network2IO.cpp \
src/network/C4Network2IO.h \
src/network/C4Network2IRC.cpp \
src/network/C4Network2IRC.h \
src/network/C4Network2Players.cpp \
src/network/C4Network2Players.h \
src/network/C4Network2Reference.cpp \
src/network/C4Network2Reference.h \
src/network/C4Network2Res.cpp \
src/network/C4Network2ResDlg.cpp \
src/network/C4Network2Res.h \
src/network/C4Network2Stats.cpp \
src/network/C4Network2Stats.h \
src/network/C4Network2UPnP.h \
src/network/C4Packet2.cpp \
src/network/C4PacketBase.h \
src/object/C4Action.cpp \
src/object/C4Command.cpp \
src/object/C4Command.h \
src/object/C4Def.cpp \
src/object/C4DefGraphics.cpp \
src/object/C4DefGraphics.h \
src/object/C4Def.h \
src/object/C4DefList.cpp \
src/object/C4DefList.h \
src/object/C4GameObjects.cpp \
src/object/C4GameObjects.h \
src/object/C4IDList.cpp \
src/object/C4IDList.h \
src/object/C4InfoCore.cpp \
src/object/C4InfoCore.h \
src/object/C4MeshAnimation.cpp \
src/object/C4MeshAnimation.h \
src/object/C4Movement.cpp \
src/object/C4ObjectCom.cpp \
src/object/C4ObjectCom.h \
src/object/C4Object.cpp \
src/object/C4Object.h \
src/object/C4ObjectInfo.cpp \
src/object/C4ObjectInfo.h \
src/object/C4ObjectInfoList.cpp \
src/object/C4ObjectInfoList.h \
src/object/C4ObjectList.cpp \
src/object/C4ObjectList.h \
src/object/C4ObjectMenu.cpp \
src/object/C4ObjectMenu.h \
src/object/C4ObjectPtr.cpp \
src/object/C4ObjectPtr.h \
src/object/C4ObjectScript.cpp \
src/object/C4Sector.cpp \
src/object/C4Sector.h \
src/object/C4Shape.cpp \
src/object/C4Shape.h \
src/platform/C4App.cpp \
src/platform/C4App.h \
src/platform/C4AppWin32Impl.h \
src/platform/C4FileMonitor.cpp \
src/platform/C4FileMonitor.h \
src/platform/C4GamePadCon.cpp \
src/platform/C4GamePadCon.h \
src/platform/C4MusicFile.cpp \
src/platform/C4MusicFile.h \
src/platform/C4MusicSystem.cpp \
src/platform/C4MusicSystem.h \
src/platform/C4SoundLoaders.cpp \
src/platform/C4SoundLoaders.h \
src/platform/C4SoundSystem.cpp \
src/platform/C4SoundSystem.h \
src/platform/C4StdInProc.cpp \
src/platform/C4StdInProc.h \
src/platform/C4Video.cpp \
src/platform/C4Video.h \
src/platform/C4Window.h \
src/platform/C4windowswrapper.h \
src/platform/PlatformAbstraction.cpp \
src/platform/PlatformAbstraction.h \
src/platform/StdSync.h \
src/platform/StdVideo.cpp \
src/platform/StdVideo.h \
src/player/C4Player.cpp \
src/player/C4Player.h \
src/player/C4PlayerList.cpp \
src/player/C4PlayerList.h \
src/player/C4RankSystem.cpp \
src/player/C4RankSystem.h \
src/res/Brush.h \
src/res/Cursor.h \
src/res/Dynamic.h \
src/res/Exact.h \
src/res/Fill.h \
src/res/Halt.h \
src/res/Ift.h \
src/res/Line.h \
src/res/Mouse.h \
src/res/NoIft.h \
src/res/Picker.h \
src/res/Play.h \
src/res/Rect.h \
src/res/resource.h \
src/res/Static.h \
src/script/C4AulDebug.cpp \
src/script/C4AulDebug.h \
thirdparty/timsort/sort.h \
thirdparty/tinyxml/tinystr.cpp \
thirdparty/tinyxml/tinystr.h \
thirdparty/tinyxml/tinyxml.cpp \
thirdparty/tinyxml/tinyxmlerror.cpp \
thirdparty/tinyxml/tinyxml.h \
thirdparty/tinyxml/tinyxmlparser.cpp
if WIN32
openclonk_SOURCES += \
src/platform/C4CrashHandlerWin32.cpp \
src/res/engine.rc \
src/res/resource.h
endif
if MACOSX
openclonk_SOURCES += \
src/platform/C4AppDelegate.h \
src/platform/C4AppDelegate.mm \
src/platform/C4FileMonitorMac.mm
else
openclonk_SOURCES += \
src/game/ClonkMain.cpp
endif
if SDL_MAIN_LOOP
openclonk_SOURCES += \
src/platform/C4AppSDL.cpp \
src/platform/C4WindowSDL.cpp
else
if GTK
openclonk_SOURCES += \
editor-icons.h oc-icon.h \
src/editor/C4ConsoleGTK.cpp \
src/editor/C4ConsoleGTKDlg.cpp \
src/editor/C4ConsoleGTKDlg.h \
src/platform/C4AppGTK.cpp \
src/platform/C4AppGTKImpl.h \
src/platform/C4WindowGTK.cpp
else
if CONSOLE
openclonk_SOURCES += \
src/platform/C4AppT.cpp
else
if WIN32
openclonk_SOURCES += \
src/editor/C4ConsoleWin32.cpp \
src/platform/C4WindowWin32.cpp \
src/platform/StdJoystick.cpp \
src/platform/StdJoystick.h
endif
if MACOSX
openclonk_SOURCES += \
src/editor/C4ConsoleCocoa.mm \
src/editor/C4EditorWindowController.h \
src/editor/C4EditorWindowController.mm \
src/graphics/C4DrawGLMac.h \
src/graphics/C4DrawGLMac.mm \
src/platform/C4AppDelegate+MainMenuActions.h \
src/platform/C4AppDelegate+MainMenuActions.mm \
src/platform/C4AppMac.mm \
src/platform/C4WindowController.h \
src/platform/C4WindowController.mm \
src/platform/C4WindowMac.mm \
src/platform/CocoaKeycodeMap.h \
src/platform/ObjectiveCAssociated.h
endif
endif
endif
endif
if AUTOUPDATE
openclonk_SOURCES += \
src/gui/C4UpdateDlg.cpp \
src/gui/C4UpdateDlg.h
endif
if LIBUPNP
openclonk_SOURCES += src/network/C4Network2UPnPLinux.cpp
else
if NATUPNP
openclonk_SOURCES += src/network/C4Network2UPnPWin32.cpp
else
openclonk_SOURCES += src/network/C4Network2UPnPDummy.cpp
endif
endif
openclonk_CPPFLAGS = \
$(AM_CPPFLAGS) \
$(GLEW_CFLAGS) \
$(GTK_CFLAGS) \
$(OPENAL_CFLAGS) \
$(FREETYPE_CFLAGS) \
$(SDL_CFLAGS) \
$(LIBUPNP_CFLAGS)
openclonk_LDADD = \
libc4script.a \
libmisc.a \
$(LDADD) \
$(LIBICONV) \
$(GTK_LIBS) \
$(OPENAL_LIBS) \
$(FREETYPE_LIBS) \
$(SDL_LIBS) \
$(PTHREAD_LIBS) \
$(Z_LIBS) \
$(CLONK_LIBS) \
$(LIBUPNP_LIBS)
# build the resources
.rc.o:
$(WINDRES) -I $(srcdir)/src/res -I $(builddir) -i $< -o $@
if GTK
editor-icons.h: \
src/res/Brush_Trans.png \
src/res/Halt_Trans.png \
src/res/Picker_Trans.png \
src/res/Cursor_Trans.png \
src/res/Ift_Trans.png \
src/res/Play_Trans.png \
src/res/Dynamic_Trans.png \
src/res/Line_Trans.png \
src/res/Rect_Trans.png \
src/res/Exact_Trans.png \
src/res/Mouse_Trans.png \
src/res/Static_Trans.png \
src/res/Fill_Trans.png \
src/res/NoIft_Trans.png
gdk-pixbuf-csource --raw --rle --static --build-list \
brush_pixbuf_data "$(srcdir)/src/res/Brush_Trans.png" \
halt_pixbuf_data "$(srcdir)/src/res/Halt_Trans.png" \
picker_pixbuf_data "$(srcdir)/src/res/Picker_Trans.png" \
cursor_pixbuf_data "$(srcdir)/src/res/Cursor_Trans.png" \
ift_pixbuf_data "$(srcdir)/src/res/Ift_Trans.png" \
play_pixbuf_data "$(srcdir)/src/res/Play_Trans.png" \
dynamic_pixbuf_data "$(srcdir)/src/res/Dynamic_Trans.png" \
line_pixbuf_data "$(srcdir)/src/res/Line_Trans.png" \
rect_pixbuf_data "$(srcdir)/src/res/Rect_Trans.png" \
exact_pixbuf_data "$(srcdir)/src/res/Exact_Trans.png" \
mouse_pixbuf_data "$(srcdir)/src/res/Mouse_Trans.png" \
static_pixbuf_data "$(srcdir)/src/res/Static_Trans.png" \
fill_pixbuf_data "$(srcdir)/src/res/Fill_Trans.png" \
no_ift_pixbuf_data "$(srcdir)/src/res/NoIft_Trans.png" \
> $@
oc-icon.h: src/res/oc.ico
gdk-pixbuf-csource --raw --rle --static --build-list oc_icon_pixbuf_data "$(srcdir)/src/res/oc.ico" > $@
BUILT_SOURCES += editor-icons.h oc-icon.h
CLEANFILES += editor-icons.h oc-icon.h
endif
## c4group
c4group_SOURCES = \
src/lib/C4SimpleLog.cpp \
src/c4group/C4GroupMain.cpp
if WIN32
c4group_SOURCES += src/c4group/Resource.rc
endif
c4group_LDADD = \
libmisc.a \
$(LDADD) \
$(LIBICONV) \
$(Z_LIBS) \
$(PTHREAD_LIBS)
## gunzip4c4group
gunzip4c4group_SOURCES = \
src/lib/C4SimpleLog.cpp \
src/c4group/gunzip4c4group.cpp
gunzip4c4group_LDADD = \
libmisc.a \
$(LDADD) \
$(Z_LIBS) \
$(PTHREAD_LIBS)
## puncher
puncher_SOURCES = \
src/lib/C4SimpleLog.cpp \
src/netpuncher/main.cpp
puncher_LDADD = \
libmisc.a \
$(LDADD) \
$(PTHREAD_LIBS)
if WIN32
puncher_LDADD += -lws2_32
endif
## tstc4netio
tstc4netio_SOURCES = \
src/lib/C4SimpleLog.cpp \
src/netio/TstC4NetIO.cpp
tstc4netio_LDADD = \
libmisc.a \
$(LDADD) \
$(Z_LIBS) \
$(PTHREAD_LIBS)
if WIN32
tstc4netio_LDADD += -lws2_32
endif
## c4script shell
c4script_SOURCES = \
src/lib/C4SimpleLog.cpp \
include/c4script/c4script.h \
src/script/C4ScriptMain.cpp \
src/script/C4ScriptStandalone.cpp
c4script_LDADD = \
libc4script.a \
libmisc.a \
$(LDADD) \
$(Z_LIBS)
## mape
if MAPE
mape_SOURCES = \
mape-icons.h \
src/landscape/C4MapCreatorS2.cpp \
src/landscape/C4Material.cpp \
src/landscape/C4Scenario.cpp \
src/landscape/C4Texture.cpp \
src/lib/C4NameList.cpp \
src/lib/C4Rect.cpp \
src/mape/configfile.c \
src/mape/configfile.h \
src/mape/cpp-handles/group-handle.cpp \
src/mape/cpp-handles/group-handle.h \
src/mape/cpp-handles/log-handle.cpp \
src/mape/cpp-handles/log-handle.h \
src/mape/cpp-handles/mapgen-handle.cpp \
src/mape/cpp-handles/mapgen-handle.h \
src/mape/cpp-handles/material-handle.cpp \
src/mape/cpp-handles/material-handle.h \
src/mape/cpp-handles/random-handle.cpp \
src/mape/cpp-handles/random-handle.h \
src/mape/cpp-handles/stub-handle.cpp \
src/mape/cpp-handles/texture-handle.cpp \
src/mape/cpp-handles/texture-handle.h \
src/mape/cpp-handles/version-handle.cpp \
src/mape/cpp-handles/version-handle.h \
src/mape/diskview.c \
src/mape/diskview.h \
src/mape/editview.c \
src/mape/editview.h \
src/mape/fileicon.c \
src/mape/fileicon.h \
src/mape/forward.h \
src/mape/group.c \
src/mape/group.h \
src/mape/header.c \
src/mape/header.h \
src/mape/iconview.c \
src/mape/iconview.h \
src/mape/mape.c \
src/mape/mapgen.c \
src/mape/mapgen.h \
src/mape/material.c \
src/mape/material.h \
src/mape/mattexview.c \
src/mape/mattexview.h \
src/mape/preferences.c \
src/mape/preferences.h \
src/mape/preferencesdialog.c \
src/mape/preferencesdialog.h \
src/mape/preview.c \
src/mape/preview.h \
src/mape/random.c \
src/mape/random.h \
src/mape/statusbar.c \
src/mape/statusbar.h \
src/mape/texture.c \
src/mape/texture.h \
src/mape/window.c \
src/mape/window.h \
src/script/C4Script.cpp
mape_CPPFLAGS = \
$(AM_CPPFLAGS) \
$(MAPE_CFLAGS)
mape_LDADD = \
libc4script.a \
libmisc.a \
$(LDADD) \
$(MAPE_LIBS) \
$(Z_LIBS)
mape_icons = \
$(srcdir)/src/res/ocd.ico \
$(srcdir)/src/res/ocf.ico \
$(srcdir)/src/res/ocg.ico \
$(srcdir)/src/res/ocm.ico \
$(srcdir)/src/res/ocs.ico
mape-icons.h: $(mape_icons)
gdk-pixbuf-csource --raw --static --build-list \
mape_icon_ocd "$(srcdir)/src/res/ocd.ico" \
mape_icon_ocf "$(srcdir)/src/res/ocf.ico" \
mape_icon_ocg "$(srcdir)/src/res/ocg.ico" \
mape_icon_ocm "$(srcdir)/src/res/ocm.ico" \
mape_icon_ocs "$(srcdir)/src/res/ocs.ico" \
> $@
BUILT_SOURCES += mape-icons.h
CLEANFILES += mape-icons.h
endif
## documentation
dist_doc_DATA = planet/AUTHORS planet/COPYING licenses/LGPL.txt Credits.txt
## game data
c4groups = \
Graphics.ocg \
Material.ocg \
Music.ocg \
Sound.ocg \
System.ocg \
Objects.ocd \
Arena.ocf \
Parkour.ocf \
Settlement.ocf \
Tutorial.ocf
CLEANFILES += $(c4groups)
pkgdata_DATA = $(c4groups)
AM_CXXFLAGS += -DOC_SYSTEM_DATA_DIR=\"${pkgdatadir}\"
%.ocg: $(srcdir)/planet/%.ocg c4group$(EXEEXT)
./c4group$(EXEEXT) $< -t $@ || c4group $< -t $@
%.ocd: $(srcdir)/planet/%.ocd c4group$(EXEEXT)
./c4group$(EXEEXT) $< -t $@ || c4group $< -t $@
%.ocf: $(srcdir)/planet/%.ocf c4group$(EXEEXT)
./c4group$(EXEEXT) $< -t $@ || c4group $< -t $@
## windows setup.exe
if WIN32
tools/install/firewall.dll: $(srcdir)/tools/install/firewall.cpp
mkdir -p tools/install
$(CXX) -shared -o tools/install/firewall.dll $(srcdir)/tools/install/firewall.cpp -lole32 -loleaut32
setup_openclonk.exe: $(srcdir)/tools/install/oc.nsi c4group$(EXEEXT) openclonk$(EXEEXT) $(c4groups)
makensis -NOCD -DSRCDIR=$(srcdir) '-DPROGRAMFILES=$$PROGRAMFILES' \
-DPRODUCT_NAME="$$(sed -n 's/SET(C4ENGINENAME\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)$$(sed -n 's/SET(C4VERSIONBUILDNAME\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)" \
-DPRODUCT_COMPANY="$$(sed -n 's/SET(C4PROJECT\s\+"\(.\+\)")/\1/ p' $(srcdir)/Version.txt)" \
$< "-XOutFile $@"
endif
## other stuff
EXTRA_DIST = \
planet \
Version.txt \
CMakeLists.txt \
Makefile.am \
config.h.cmake \
planet/System.ocg/LanguageUS.txt \
planet/System.ocg/LanguageDE.txt \
clonk.anjuta \
licenses \
src/netio/NetIO.dsp \
src/netpuncher/Puncher.dsp \
src/c4group/Resource.rc \
src/res/brush1.bmp \
src/res/Brush2.bmp \
src/res/Brush.bmp \
src/res/Brush.h \
src/res/Brush_Trans.png \
src/res/C4K.icns \
src/res/C4P.icns \
src/res/c4x.xpm \
src/res/Clonk.icns \
src/res/ClonkWindow.xib \
src/res/ConsoleGUIWindow.xib \
src/res/ConsoleWindow.xib \
src/res/Cursor2.bmp \
src/res/Cursor.bmp \
src/res/Cursor.h \
src/res/Cursor_Trans.png \
src/res/dynamic1.bmp \
src/res/Dynamic.h \
src/res/Dynamic_Trans.png \
src/res/Exact.h \
src/res/Exact_Trans.png \
src/res/fill1.bmp \
src/res/Fill.bmp \
src/res/Fill.h \
src/res/Fill_Trans.png \
src/res/FullscreenWindow.xib \
src/res/Game.pal \
src/res/Grab.bmp \
src/res/Halt2.bmp \
src/res/Halt.bmp \
src/res/Halt.h \
src/res/Halt_Trans.png \
src/res/ift1.bmp \
src/res/IFT.bmp \
src/res/Ift.h \
src/res/Ift_Trans.png \
src/res/Info.plist \
src/res/line1.bmp \
src/res/Line.bmp \
src/res/Line.h \
src/res/Line_Trans.png \
src/res/MainMenu.xib \
src/res/mouse1.bmp \
src/res/mouse.bmp \
src/res/Mouse.h \
src/res/Mouse_Trans.png \
src/res/NoIFT.bmp \
src/res/NoIft.h \
src/res/NoIft_Trans.png \
src/res/ocb.ico \
src/res/ocd.icns \
src/res/ocd.ico \
src/res/ocf.icns \
src/res/ocf.ico \
src/res/ocg.icns \
src/res/ocg.ico \
src/res/oc.ico \
src/res/oci.ico \
src/res/ocl.ico \
src/res/ocm.ico \
src/res/ocp.ico \
src/res/ocs.icns \
src/res/ocs.ico \
src/res/ocu.icns \
src/res/ocu.ico \
src/res/ocv.ico \
src/res/picker1.bmp \
src/res/Picker.h \
src/res/Picker_Trans.png \
src/res/Play2.bmp \
src/res/Play.bmp \
src/res/Play.h \
src/res/Play_Trans.png \
src/res/rect1.bmp \
src/res/Rectangle.bmp \
src/res/Rect.h \
src/res/Rect_Trans.png \
src/res/static1.bmp \
src/res/Static.h \
src/res/Static_Trans.png \
src/res/English.lproj/InfoPlist.strings \
src/res/English.lproj/Localizable.strings \
src/res/German.lproj/Localizable.strings \
src/res/SDLMain.nib/objects.nib

55
README 100644
View File

@ -0,0 +1,55 @@
Requirements
============
You should be able to build OpenClonk with any C++ compiler that supports
ISO C++11. That said, on Windows, we recommend using Microsoft Visual C++
2010 or higher; the Express edition will be sufficient. On Linux, you will
be fine with GNU g++ 4.6 or later. Apple users should use a clang-based
XCode version.
To generate project files for your chosen build system, you will also have to
install CMake from http://www.cmake.org/.
Additionally, OpenClonk depends on a number of third-party libraries:
- zlib (http://zlib.net/)
- libpng (http://www.libpng.org/pub/png/libpng.html)
- libjpeg-turbo (http://sourceforge.net/projects/libjpeg-turbo/files/)
- FreeType (http://www.freetype.org/)
- The OpenGL Extension Wrangler Library (http://glew.sourceforge.net/)
- FreeALUT (https://github.com/openclonk/freealut)
- libogg and libvorbis (https://www.xiph.org/downloads/)
- Boost (http://www.boost.org/users/download/)
OS X Specific
=============
OpenClonk supports OS X versions 10.6 "Snow Leopard" and later. You can build
universal binaries by setting CMAKE_OSX_ARCHITECTURES to "x86_64 i386", but
you will of course need universal versions of the dependencies in that case.
If you are using brew (https://github.com/mxcl/homebrew) or MacPorts
(http://www.macports.org/), the packages you'll have to install are:
libjpeg, libpng, freetype, glew, libogg, libvorbis, boost
Linux Specific
==============
For building OpenClonk on Linux, you need the following libraries in addition
to the ones listed above:
- libxpm
- libGL
- SDL 1.2 (http://www.libsdl.org/download-1.2.php)
- SDL_mixer 1.2 (http://www.libsdl.org/projects/SDL_mixer/release-1.2.html)
Most distributions should provide these dependencies via their packaging
system. For Debian based distributions, you will need these packages:
build-essential cmake libx11-dev libxxf86vm-dev libxrandr-dev libxpm-dev
libglew-dev libgl1-mesa-dev libpng12-dev libsdl1.2-dev
libsdl-mixer1.2-dev libgtk2.0-dev libjpeg8-dev zlib1g-dev libboost-dev
(This list was compiled on Debian 7.0 "Wheezy". More recent distributions may
provide packages with a higher version number.)
Windows Specific
================
In addition to the libraries above, you will need one more if you want to
target Windows:
- OpenAL Soft (http://kcat.strangesoft.net/openal.html)
To create an installer, you will also need the Nullsoft Install System
(http://nsis.sourceforge.net/). makensis needs to be in the PATH, and
the DLLs used by openclonk must be in the build directory. To create the
installer, build the "setup" target.

View File

@ -1,74 +0,0 @@
Requirements
============
To build on DEB-based Linux distributions (Debian, Ubuntu etc.) you need the
following packages:
make gcc g++
cmake OR automake autoconf
libc6-dev libx11-dev libxxf86vm-dev libxrandr-dev libxpm-dev libglew-dev
libgl1-mesa-dev libpng12-dev libsdl1.2-dev libsdl-mixer1.2-dev libgtk2.0-dev
libjpeg62-dev zlib1g-dev libboost-dev
(Most of those packages can be substituted with a newer version if required,
for example libglew1.6-dev instead of libglew1.5-dev.)
To build on RPM-based Linux distributions (Red Hat, Fedora, Mandriva,
SuSE etc.) you need the following packages:
make gcc gcc-c++
cmake OR automake autoconf
libX11-devel libXxf86vm-devel libXrandr-devel libXpm-devel glew-devel
mesa-libGL-devel libpng-devel SDL-devel SDL_mixer1.2-dev gtk2-devel
libjpeg-devel zlib-devel boost-devel
Build using cmake
=================
To build OpenClonk, execute the following command inside of the source tree:
cmake . && make
By default, the binary will be built without debugging support. If you want
to generate a debug build, pass the parameter -DCMAKE_BUILD_TYPE=Debug to
your cmake invocation.
Please note that you do not need to build a Debug binary if you only want to
debug C4Script code.
You can see other build variables with:
cmake . -N -L
Build using autotools
=====================
If you build from version control, you need to run this:
autoreconf -i && ./configure && make
To build from tarball, run this:
./configure && make
If you want a debug build, pass --enable-debug to configure. Other options are
listed by ./configure --help.
On subsequent build runs, you only have to execute make.
Running
=======
You can run the game from the build directory:
./openclonk
See docs/sdk/cmdline.xml for the supported command line options.
Or install it with this:
make install

View File

@ -1,47 +0,0 @@
Requirements
============
OSX 10.6 or higher (might also work with 10.5)
an Intel mac
brew (https://github.com/mxcl/homebrew) or macports (http://www.macports.org/)
Xcode
Apple X11
CMake (http://www.cmake.org/)
Build
=====
-Install dependencies using brew or port (libjpeg, libpng, freetype, glew, libogg, libvorbis, libvorbisfile)
-Launch the CMake GUI application
-Click Browse Source… button, navigate to your openclonk repository folder
-Also Specify location where you want to build
-Click Configure and use default native compilers
-Wait
-<Potentially include additional steps to make CMake find the right libraries>
-If you want 64-bit builds set the CMAKE_OSX_ARCHITECTURES setting to "x86_64"
-For universal builds set it to "x86_64 i386", but then you'll also need universal versions of the dependencies
-Click Configure button again for good measure
-Click Generate
-Launch xcode and load the project. Select the desired configuration and build.
It should be pretty straight forward, hopefully.
Additional CMake hints
=====================
FREETYPE_LIBRARY should be set to /usr/X11/lib/libfreetype.6.dylib
ZLIB_LIBRARY to /usr/lib/libz.dylib
ZLIB_INCLUDE_DIR to /usr/include
Situation with Xcode 4.3+
========================
[This applies only to CMake versions prior to 2.8-8, later versions should deal with Xcode 4.3+ just fine]
Xcode is now a self-contained application bundle which confuses CMake.
The CMake git repo contains necessary fixes but those haven't been incorporated into a new CMake release yet so to use those you have to build the cmake command line tool yourself by
* cloning git://cmake.org/cmake.git
* running git checkout next
* running ./configure, make and sudo make install
The project generation command I (Mortimer) used was `cmake -G Xcode -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++`, obviously specifying clang as the compiler. There is a related CMake option called USE_APPLE_CLANG which should be ON by default.
After that I had a proper Xcode 4.3 project.
To use the CMake GUI for setting some library paths I put the self-built cmake command from /usr/local/bin into CMake 2.8-7.app/Contents/bin/ but one could have probably done that by editing CMakeCache.txt or setting via however the cli syntax for setting variables is.

View File

@ -1,61 +0,0 @@
Requirements
============
You can build on Windows using either:
* vc10 (Microsoft Visual C++ 2010)
- you need CMake (http://www.cmake.org/cmake/resources/software.html) to
create the "solution"
- you might have to set the correct DXSDK include and library directories
* MinGW and MSYS
- plus DXSDK 9 (if you want DirectX support)
* Some other compilers and IDEs which are supported by CMake might also work
OpenClonk requires some additional libraries. Prebuilt versions of them can be
found on http://openclonk.org.
Building the installer
======================
The installer is created with NSIS. makensis needs to be in the PATH, and
the dlls used by openclonk in the build directory. To create the installer,
build the "setup" target if using CMake, or if using autotools, run:
make setup_openclonk.exe
Get NSIS from http://nsis.sourceforge.net/.
Notes for MinGW
===============
You need gcc, g++, mingw-runtime, w32api, msys, msyscore, autoconf, automake,
and any packages needed by these.
Get the library package from openclonk.org and unpack it into the mingw
directory.
If you want DirectX support, get a DirectX 9 SDK from Microsoft. Copy the
contents of its include dir to the include dir of your MinGW installation,
and pass --with-directx to configure below.
Start msys (your MinGW directory, e.g. C:\MinGW -> msys.bat),
cd to this directory, and execute:
autoreconf -i && ./configure && make
To compile a debugbuild, pass --enable-debug to configure. Other options are
listed by ./configure --help.
On subsequent build runs, you only have to execute make.
If you want to separate the source directory and the output files, you can call
configure from another directory. You can call configure by it's relative path,
but using the full path helps gdb find the source files. Example:
mkdir build
cd build
/path/to/clonksource/configure --with-directx CXXFLAGS='-Os'
make

View File

@ -12,14 +12,14 @@ SET(C4ENGINENICK "openclonk")
SET(C4ENGINEID "${C4PROJECT_TLD}.${C4PROJECT_DOMAIN}.${C4ENGINENICK}")
SET(C4XVER1 5)
SET(C4XVER2 3)
SET(C4XVER3 90)
SET(C4XVER2 4)
SET(C4XVER3 0)
# C4VERSIONBUILDNAME should be witty and somewhat frequently changing
# for alpha and beta releases, and meaningful and stable for stable releases.
# Both variables need to start with a space if they aren't empty.
SET(C4VERSIONBUILDNAME " Beyond the Rocks")
SET(C4VERSIONEXTRA " Delta")
SET(C4VERSIONEXTRA "")
############################################################################
# Get revision from Git

View File

@ -1,258 +0,0 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_boost_base.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_BOOST_BASE([MINIMUM-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
#
# DESCRIPTION
#
# Test for the Boost C++ libraries of a particular version (or newer)
#
# If no path to the installed boost library is given the macro searchs
# under /usr, /usr/local, /opt and /opt/local and evaluates the
# $BOOST_ROOT environment variable. Further documentation is available at
# <http://randspringer.de/boost/index.html>.
#
# This macro calls:
#
# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS)
#
# And sets:
#
# HAVE_BOOST
#
# LICENSE
#
# Copyright (c) 2008 Thomas Porschberg <thomas@randspringer.de>
# Copyright (c) 2009 Peter Adolphs
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
#serial 20
AC_DEFUN([AX_BOOST_BASE],
[
AC_ARG_WITH([boost],
[AS_HELP_STRING([--with-boost@<:@=ARG@:>@],
[use Boost library from a standard location (ARG=yes),
from the specified location (ARG=<path>),
or disable it (ARG=no)
@<:@ARG=yes@:>@ ])],
[
if test "$withval" = "no"; then
want_boost="no"
elif test "$withval" = "yes"; then
want_boost="yes"
ac_boost_path=""
else
want_boost="yes"
ac_boost_path="$withval"
fi
],
[want_boost="yes"])
AC_ARG_WITH([boost-libdir],
AS_HELP_STRING([--with-boost-libdir=LIB_DIR],
[Force given directory for boost libraries. Note that this will override library path detection, so use this parameter only if default library detection fails and you know exactly where your boost libraries are located.]),
[
if test -d "$withval"
then
ac_boost_lib_path="$withval"
else
AC_MSG_ERROR(--with-boost-libdir expected directory name)
fi
],
[ac_boost_lib_path=""]
)
if test "x$want_boost" = "xyes"; then
boost_lib_version_req=ifelse([$1], ,1.20.0,$1)
boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'`
boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'`
boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
if test "x$boost_lib_version_req_sub_minor" = "x" ; then
boost_lib_version_req_sub_minor="0"
fi
WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor`
AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req)
succeeded=no
dnl On 64-bit systems check for system libraries in both lib64 and lib.
dnl The former is specified by FHS, but e.g. Debian does not adhere to
dnl this (as it rises problems for generic multi-arch support).
dnl The last entry in the list is chosen by default when no libraries
dnl are found, e.g. when only header-only libraries are installed!
libsubdirs="lib"
ax_arch=`uname -m`
if test $ax_arch = x86_64 -o $ax_arch = ppc64 -o $ax_arch = s390x -o $ax_arch = sparc64; then
libsubdirs="lib64 lib lib64"
fi
dnl first we check the system location for boost libraries
dnl this location ist chosen if boost libraries are installed with the --layout=system option
dnl or if you install boost with RPM
if test "$ac_boost_path" != ""; then
BOOST_CPPFLAGS="-I$ac_boost_path/include"
for ac_boost_path_tmp in $libsubdirs; do
if test -d "$ac_boost_path"/"$ac_boost_path_tmp" ; then
BOOST_LDFLAGS="-L$ac_boost_path/$ac_boost_path_tmp"
break
fi
done
elif test "$cross_compiling" != yes; then
for ac_boost_path_tmp in /usr /usr/local /opt /opt/local ; do
if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then
for libsubdir in $libsubdirs ; do
if ls "$ac_boost_path_tmp/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
done
BOOST_LDFLAGS="-L$ac_boost_path_tmp/$libsubdir"
BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include"
break;
fi
done
fi
dnl overwrite ld flags if we have required special directory with
dnl --with-boost-libdir parameter
if test "$ac_boost_lib_path" != ""; then
BOOST_LDFLAGS="-L$ac_boost_lib_path"
fi
CPPFLAGS_SAVED="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
export CPPFLAGS
LDFLAGS_SAVED="$LDFLAGS"
LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
export LDFLAGS
AC_REQUIRE([AC_PROG_CXX])
AC_LANG_PUSH(C++)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
@%:@include <boost/version.hpp>
]], [[
#if BOOST_VERSION >= $WANT_BOOST_VERSION
// Everything is okay
#else
# error Boost version is too old
#endif
]])],[
AC_MSG_RESULT(yes)
succeeded=yes
found_system=yes
],[
])
AC_LANG_POP([C++])
dnl if we found no boost with system layout we search for boost libraries
dnl built and installed without the --layout=system option or for a staged(not installed) version
if test "x$succeeded" != "xyes"; then
_version=0
if test "$ac_boost_path" != ""; then
if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
_version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
V_CHECK=`expr $_version_tmp \> $_version`
if test "$V_CHECK" = "1" ; then
_version=$_version_tmp
fi
VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE"
done
fi
else
if test "$cross_compiling" != yes; then
for ac_boost_path in /usr /usr/local /opt /opt/local ; do
if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then
for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do
_version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'`
V_CHECK=`expr $_version_tmp \> $_version`
if test "$V_CHECK" = "1" ; then
_version=$_version_tmp
best_path=$ac_boost_path
fi
done
fi
done
VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'`
BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE"
if test "$ac_boost_lib_path" = ""; then
for libsubdir in $libsubdirs ; do
if ls "$best_path/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
done
BOOST_LDFLAGS="-L$best_path/$libsubdir"
fi
fi
if test "x$BOOST_ROOT" != "x"; then
for libsubdir in $libsubdirs ; do
if ls "$BOOST_ROOT/stage/$libsubdir/libboost_"* >/dev/null 2>&1 ; then break; fi
done
if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/$libsubdir" && test -r "$BOOST_ROOT/stage/$libsubdir"; then
version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'`
stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'`
stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'`
V_CHECK=`expr $stage_version_shorten \>\= $_version`
if test "$V_CHECK" = "1" -a "$ac_boost_lib_path" = "" ; then
AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT)
BOOST_CPPFLAGS="-I$BOOST_ROOT"
BOOST_LDFLAGS="-L$BOOST_ROOT/stage/$libsubdir"
fi
fi
fi
fi
CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS"
export CPPFLAGS
LDFLAGS="$LDFLAGS $BOOST_LDFLAGS"
export LDFLAGS
AC_LANG_PUSH(C++)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
@%:@include <boost/version.hpp>
]], [[
#if BOOST_VERSION >= $WANT_BOOST_VERSION
// Everything is okay
#else
# error Boost version is too old
#endif
]])],[
AC_MSG_RESULT(yes)
succeeded=yes
found_system=yes
],[
])
AC_LANG_POP([C++])
fi
if test "$succeeded" != "yes" ; then
if test "$_version" = "0" ; then
AC_MSG_NOTICE([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.]])
else
AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).])
fi
# execute ACTION-IF-NOT-FOUND (if present):
ifelse([$3], , :, [$3])
else
AC_SUBST(BOOST_CPPFLAGS)
AC_SUBST(BOOST_LDFLAGS)
AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available])
# execute ACTION-IF-FOUND (if present):
ifelse([$2], , :, [$2])
fi
CPPFLAGS="$CPPFLAGS_SAVED"
LDFLAGS="$LDFLAGS_SAVED"
fi
])

View File

@ -1,72 +0,0 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS])
#
# DESCRIPTION
#
# Check whether the given FLAG works with the current language's compiler
# or gives an error. (Warnings, however, are ignored)
#
# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
# success/failure.
#
# If EXTRA-FLAGS is defined, it is added to the current language's default
# flags (e.g. CFLAGS) when the check is done. The check is thus made with
# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
# force the compiler to issue an error when a bad flag is given.
#
# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
#
# LICENSE
#
# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
#serial 2
AC_DEFUN([AX_CHECK_COMPILE_FLAG],
[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
_AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
[AS_VAR_SET(CACHEVAR,[yes])],
[AS_VAR_SET(CACHEVAR,[no])])
_AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
[m4_default([$2], :)],
[m4_default([$3], :)])
AS_VAR_POPDEF([CACHEVAR])dnl
])dnl AX_CHECK_COMPILE_FLAGS

View File

@ -1,75 +0,0 @@
dnl Copyright (C) 2000-2002 Free Software Foundation, Inc.
dnl This file is free software; the Free Software Foundation
dnl gives unlimited permission to copy and/or distribute it,
dnl with or without modifications, as long as this notice is preserved.
dnl From Bruno Haible.
dnl Modified for Clonk to not do all that weird stuff
AC_DEFUN([_AX_ICONV_LINK],
[
dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
dnl those with the standalone portable GNU libiconv installed).
dnl Search for libiconv and define LIBICONV and INCICONV
dnl accordingly.
AC_CACHE_CHECK(for iconv, ax_cv_func_iconv, [
ax_cv_func_iconv="no, consider installing GNU libiconv"
ax_cv_lib_iconv=no
LIBICONV=""
AC_TRY_LINK([#include <stdlib.h>
#include <iconv.h>],
[iconv_t cd = iconv_open("","");
iconv(cd,NULL,NULL,NULL,NULL);
iconv_close(cd);],
ax_cv_func_iconv=yes)
if test "$ax_cv_func_iconv" != yes; then
ax_save_LIBS="$LIBS"
LIBS="$LIBS -liconv"
AC_TRY_LINK([#include <stdlib.h>
#include <iconv.h>],
[iconv_t cd = iconv_open("","");
iconv(cd,NULL,NULL,NULL,NULL);
iconv_close(cd);],
ax_cv_lib_iconv=yes
ax_cv_func_iconv=yes
LIBICONV=-liconv)
LIBS="$ax_save_LIBS"
fi
])
if test "$ax_cv_func_iconv" = yes; then
AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
fi
if test "$ax_cv_lib_iconv" = yes; then
AC_MSG_CHECKING([how to link with libiconv])
AC_MSG_RESULT([-liconv])
fi
AC_SUBST(LIBICONV)
])
AC_DEFUN([AX_ICONV],
[
_AX_ICONV_LINK
if test "$ax_cv_func_iconv" = yes; then
AC_MSG_CHECKING([for iconv declaration])
AC_CACHE_VAL(ax_cv_proto_iconv, [
AC_TRY_COMPILE([
#include <stdlib.h>
#include <iconv.h>
extern
#ifdef __cplusplus
"C"
#endif
#if defined(__STDC__) || defined(__cplusplus)
size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
#else
size_t iconv();
#endif
], [], ax_cv_proto_iconv_arg1="", ax_cv_proto_iconv_arg1="const")])
AC_MSG_RESULT([extern size_t iconv (iconv_t cd, $ax_cv_proto_iconv_arg1 char * * inbuf, size_t * inbytesleft, char * * outbuf, size_t * outbytesleft);])
AC_DEFINE_UNQUOTED(ICONV_CONST, $ax_cv_proto_iconv_arg1,
[Define as const if the declaration of iconv() needs const.])
fi
])

View File

@ -1,309 +0,0 @@
# ===========================================================================
# http://www.gnu.org/software/autoconf-archive/ax_pthread.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
#
# DESCRIPTION
#
# This macro figures out how to build C programs using POSIX threads. It
# sets the PTHREAD_LIBS output variable to the threads library and linker
# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
# flags that are needed. (The user can also force certain compiler
# flags/libs to be tested by setting these environment variables.)
#
# Also sets PTHREAD_CC to any special C compiler that is needed for
# multi-threaded programs (defaults to the value of CC otherwise). (This
# is necessary on AIX to use the special cc_r compiler alias.)
#
# NOTE: You are assumed to not only compile your program with these flags,
# but also link it with them as well. e.g. you should link with
# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
#
# If you are only building threads programs, you may wish to use these
# variables in your default LIBS, CFLAGS, and CC:
#
# LIBS="$PTHREAD_LIBS $LIBS"
# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
# CC="$PTHREAD_CC"
#
# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
#
# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
# PTHREAD_PRIO_INHERIT symbol is defined when compiling with
# PTHREAD_CFLAGS.
#
# ACTION-IF-FOUND is a list of shell commands to run if a threads library
# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
# is not found. If ACTION-IF-FOUND is not specified, the default action
# will define HAVE_PTHREAD.
#
# Please let the authors know if this macro fails on any platform, or if
# you have any other suggestions or comments. This macro was based on work
# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
# Alejandro Forero Cuervo to the autoconf macro repository. We are also
# grateful for the helpful feedback of numerous users.
#
# Updated for Autoconf 2.68 by Daniel Richard G.
#
# LICENSE
#
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation, either version 3 of the License, or (at your
# option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with this program. If not, see <http://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
# scripts that are the output of Autoconf when processing the Macro. You
# need not follow the terms of the GNU General Public License when using
# or distributing such scripts, even though portions of the text of the
# Macro appear in them. The GNU General Public License (GPL) does govern
# all other use of the material that constitutes the Autoconf Macro.
#
# This special exception to the GPL applies to versions of the Autoconf
# Macro released by the Autoconf Archive. When you make and distribute a
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
#serial 17
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
AC_DEFUN([AX_PTHREAD], [
AC_REQUIRE([AC_CANONICAL_HOST])
AC_LANG_PUSH([C])
ax_pthread_ok=no
# We used to check for pthread.h first, but this fails if pthread.h
# requires special compiler flags (e.g. on True64 or Sequent).
# It gets checked for in the link test anyway.
# First of all, check if the user has set any of the PTHREAD_LIBS,
# etcetera environment variables, and if threads linking works using
# them:
if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
save_LIBS="$LIBS"
LIBS="$PTHREAD_LIBS $LIBS"
AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
AC_MSG_RESULT($ax_pthread_ok)
if test x"$ax_pthread_ok" = xno; then
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
fi
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
fi
# We must check for the threads library under a number of different
# names; the ordering is very important because some systems
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
# libraries is broken (non-POSIX).
# Create a list of thread flags to try. Items starting with a "-" are
# C compiler flags, and other items are library names, except for "none"
# which indicates that we try without any flags at all, and "pthread-config"
# which is a program returning the flags for the Pth emulation library.
ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
# The ordering *is* (sometimes) important. Some notes on the
# individual items follow:
# pthreads: AIX (must check this before -lpthread)
# none: in case threads are in libc; should be tried before -Kthread and
# other compiler flags to prevent continual compiler warnings
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
# -pthreads: Solaris/gcc
# -mthreads: Mingw32/gcc, Lynx/gcc
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
# doesn't hurt to check since this sometimes defines pthreads too;
# also defines -D_REENTRANT)
# ... -mt is also the pthreads flag for HP/aCC
# pthread: Linux, etcetera
# --thread-safe: KAI C++
# pthread-config: use pthread-config program (for GNU Pth library)
case "${host_cpu}-${host_os}" in
*solaris*)
# On Solaris (at least, for some versions), libc contains stubbed
# (non-functional) versions of the pthreads routines, so link-based
# tests will erroneously succeed. (We need to link with -pthreads/-mt/
# -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
# a function called by this macro, so we could check for that, but
# who knows whether they'll stub that too in a future libc.) So,
# we'll just look for -pthreads and -lpthread first:
ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
;;
*-darwin*)
ax_pthread_flags="-pthread $ax_pthread_flags"
;;
esac
if test x"$ax_pthread_ok" = xno; then
for flag in $ax_pthread_flags; do
case $flag in
none)
AC_MSG_CHECKING([whether pthreads work without any flags])
;;
-*)
AC_MSG_CHECKING([whether pthreads work with $flag])
PTHREAD_CFLAGS="$flag"
;;
pthread-config)
AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
if test x"$ax_pthread_config" = xno; then continue; fi
PTHREAD_CFLAGS="`pthread-config --cflags`"
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
;;
*)
AC_MSG_CHECKING([for the pthreads library -l$flag])
PTHREAD_LIBS="-l$flag"
;;
esac
save_LIBS="$LIBS"
save_CFLAGS="$CFLAGS"
LIBS="$PTHREAD_LIBS $LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
# Check for various functions. We must include pthread.h,
# since some functions may be macros. (On the Sequent, we
# need a special flag -Kthread to make this header compile.)
# We check for pthread_join because it is in -lpthread on IRIX
# while pthread_create is in libc. We check for pthread_attr_init
# due to DEC craziness with -lpthreads. We check for
# pthread_cleanup_push because it is one of the few pthread
# functions on Solaris that doesn't have a non-functional libc stub.
# We try pthread_create on general principles.
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
static void routine(void *a) { a = 0; }
static void *start_routine(void *a) { return a; }],
[pthread_t th; pthread_attr_t attr;
pthread_create(&th, 0, start_routine, 0);
pthread_join(th, 0);
pthread_attr_init(&attr);
pthread_cleanup_push(routine, 0);
pthread_cleanup_pop(0) /* ; */])],
[ax_pthread_ok=yes],
[])
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
AC_MSG_RESULT($ax_pthread_ok)
if test "x$ax_pthread_ok" = xyes; then
break;
fi
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
done
fi
# Various other checks:
if test "x$ax_pthread_ok" = xyes; then
save_LIBS="$LIBS"
LIBS="$PTHREAD_LIBS $LIBS"
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
AC_MSG_CHECKING([for joinable pthread attribute])
attr_name=unknown
for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
[int attr = $attr; return attr /* ; */])],
[attr_name=$attr; break],
[])
done
AC_MSG_RESULT($attr_name)
if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
[Define to necessary symbol if this constant
uses a non-standard name on your system.])
fi
AC_MSG_CHECKING([if more special flags are required for pthreads])
flag=no
case "${host_cpu}-${host_os}" in
*-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
*-osf* | *-hpux*) flag="-D_REENTRANT";;
*solaris*)
if test "$GCC" = "yes"; then
flag="-D_REENTRANT"
else
flag="-mt -D_REENTRANT"
fi
;;
esac
AC_MSG_RESULT(${flag})
if test "x$flag" != xno; then
PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
fi
AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
ax_cv_PTHREAD_PRIO_INHERIT, [
AC_LINK_IFELSE([
AC_LANG_PROGRAM([[#include <pthread.h>]], [[int i = PTHREAD_PRIO_INHERIT;]])],
[ax_cv_PTHREAD_PRIO_INHERIT=yes],
[ax_cv_PTHREAD_PRIO_INHERIT=no])
])
AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], 1, [Have PTHREAD_PRIO_INHERIT.]))
LIBS="$save_LIBS"
CFLAGS="$save_CFLAGS"
# More AIX lossage: must compile with xlc_r or cc_r
if test x"$GCC" != xyes; then
AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
else
PTHREAD_CC=$CC
fi
else
PTHREAD_CC="$CC"
fi
AC_SUBST(PTHREAD_LIBS)
AC_SUBST(PTHREAD_CFLAGS)
AC_SUBST(PTHREAD_CC)
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
if test x"$ax_pthread_ok" = xyes; then
ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
:
else
ax_pthread_ok=no
$2
fi
AC_LANG_POP
])dnl AX_PTHREAD

View File

@ -1,157 +0,0 @@
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
# serial 1 (pkg-config-0.24)
#
# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
# As a special exception to the GNU General Public License, if you
# distribute this file as part of a program that contains a
# configuration script generated by Autoconf, you may include it under
# the same distribution terms that you use for the rest of that program.
# PKG_PROG_PKG_CONFIG([MIN-VERSION])
# ----------------------------------
AC_DEFUN([PKG_PROG_PKG_CONFIG],
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
fi
if test -n "$PKG_CONFIG"; then
_pkg_min_version=m4_default([$1], [0.9.0])
AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
PKG_CONFIG=""
fi
fi[]dnl
])# PKG_PROG_PKG_CONFIG
# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
#
# Check to see whether a particular set of modules exists. Similar
# to PKG_CHECK_MODULES(), but does not set variables or print errors.
#
# Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
# only at the first occurence in configure.ac, so if the first place
# it's called might be skipped (such as if it is within an "if", you
# have to call PKG_CHECK_EXISTS manually
# --------------------------------------------------------------
AC_DEFUN([PKG_CHECK_EXISTS],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
if test -n "$PKG_CONFIG" && \
AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
m4_default([$2], [:])
m4_ifvaln([$3], [else
$3])dnl
fi])
# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
# ---------------------------------------------
m4_define([_PKG_CONFIG],
[if test -n "$$1"; then
pkg_cv_[]$1="$$1"
elif test -n "$PKG_CONFIG"; then
PKG_CHECK_EXISTS([$3],
[pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
[pkg_failed=yes])
else
pkg_failed=untried
fi[]dnl
])# _PKG_CONFIG
# _PKG_SHORT_ERRORS_SUPPORTED
# -----------------------------
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
_pkg_short_errors_supported=yes
else
_pkg_short_errors_supported=no
fi[]dnl
])# _PKG_SHORT_ERRORS_SUPPORTED
# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
# [ACTION-IF-NOT-FOUND])
#
#
# Note that if there is a possibility the first call to
# PKG_CHECK_MODULES might not happen, you should be sure to include an
# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
#
#
# --------------------------------------------------------------
AC_DEFUN([PKG_CHECK_MODULES],
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
pkg_failed=no
AC_MSG_CHECKING([for $1])
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
and $1[]_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.])
if test $pkg_failed = yes; then
AC_MSG_RESULT([no])
_PKG_SHORT_ERRORS_SUPPORTED
if test $_pkg_short_errors_supported = yes; then
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors "$2" 2>&1`
else
$1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors "$2" 2>&1`
fi
# Put the nasty error message in config.log where it belongs
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
m4_default([$4], [AC_MSG_ERROR(
[Package requirements ($2) were not met:
$$1_PKG_ERRORS
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
_PKG_TEXT])dnl
])
elif test $pkg_failed = untried; then
AC_MSG_RESULT([no])
m4_default([$4], [AC_MSG_FAILURE(
[The pkg-config script could not be found or is too old. Make sure it
is in your PATH or set the PKG_CONFIG environment variable to the full
path to pkg-config.
_PKG_TEXT
To get pkg-config, see <http://pkg-config.freedesktop.org/>.])dnl
])
else
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
AC_MSG_RESULT([yes])
$3
fi[]dnl
])# PKG_CHECK_MODULES

View File

@ -1,23 +0,0 @@
dnl Copyright (C) 2009 Günther Brammer
AC_DEFUN([AX_PROG_CXX_REFTOTEMP],
[
AC_LANG_ASSERT([C++])
AC_CACHE_CHECK([wether the C++ compiler is friendly], [ax_cv_reftotemp], [
AC_COMPILE_IFELSE([
struct Foo {
operator Foo & () { return *this; }
};
#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (defined(__GNUC__) && ((__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))
void frobnicate(Foo &&) { }
#else
void frobnicate(Foo &) { }
#endif
int main () {
frobnicate (Foo());
}
], [ax_cv_reftotemp=yes], [ax_cv_reftotemp=no])])
if test $ax_cv_reftotemp = no; then
AC_MSG_ERROR([The C++ compiler won't be able to compile Clonk. Try CXX='g++ -std=gnu++0x' or CXX='g++-4.1'.])
fi[]dnl
])# AX_PROG_CXX_REFTOTEMP

View File

@ -1,185 +0,0 @@
# Configure paths for SDL
# Sam Lantinga 9/21/99
# stolen from Manish Singh
# stolen back from Frank Belew
# stolen from Manish Singh
# Shamelessly stolen from Owen Taylor
# serial 1
dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]])
dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS
dnl
AC_DEFUN([AM_PATH_SDL],
[dnl
dnl Get the cflags and libraries from the sdl-config script
dnl
AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)],
sdl_prefix="$withval", sdl_prefix="")
AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)],
sdl_exec_prefix="$withval", sdl_exec_prefix="")
AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program],
, enable_sdltest=yes)
if test x$sdl_exec_prefix != x ; then
sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix"
if test x${SDL_CONFIG+set} != xset ; then
SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config
fi
fi
if test x$sdl_prefix != x ; then
sdl_config_args="$sdl_config_args --prefix=$sdl_prefix"
if test x${SDL_CONFIG+set} != xset ; then
SDL_CONFIG=$sdl_prefix/bin/sdl-config
fi
fi
as_save_PATH="$PATH"
if test "x$prefix" != xNONE; then
PATH="$prefix/bin:$prefix/usr/bin:$PATH"
fi
AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH])
PATH="$as_save_PATH"
min_sdl_version=ifelse([$1], ,0.11.0,$1)
AC_MSG_CHECKING(for SDL - version >= $min_sdl_version)
no_sdl=""
if test "$SDL_CONFIG" = "no" ; then
no_sdl=yes
else
SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags`
SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs`
sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \
sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
if test "x$enable_sdltest" = "xyes" ; then
ac_save_CFLAGS="$CFLAGS"
ac_save_CXXFLAGS="$CXXFLAGS"
ac_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $SDL_CFLAGS"
CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
LIBS="$LIBS $SDL_LIBS"
dnl
dnl Now check if the installed SDL is sufficiently new. (Also sanity
dnl checks the results of sdl-config to some extent
dnl
rm -f conf.sdltest
AC_TRY_RUN([
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "SDL.h"
char*
my_strdup (char *str)
{
char *new_str;
if (str)
{
new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char));
strcpy (new_str, str);
}
else
new_str = NULL;
return new_str;
}
int main (int argc, char *argv[])
{
int major, minor, micro;
char *tmp_version;
/* This hangs on some systems (?)
system ("touch conf.sdltest");
*/
{ FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); }
/* HP/UX 9 (%@#!) writes to sscanf strings */
tmp_version = my_strdup("$min_sdl_version");
if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, &micro) != 3) {
printf("%s, bad version string\n", "$min_sdl_version");
exit(1);
}
if (($sdl_major_version > major) ||
(($sdl_major_version == major) && ($sdl_minor_version > minor)) ||
(($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro)))
{
return 0;
}
else
{
printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version);
printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro);
printf("*** best to upgrade to the required version.\n");
printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n");
printf("*** to point to the correct copy of sdl-config, and remove the file\n");
printf("*** config.cache before re-running configure\n");
return 1;
}
}
],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"])
CFLAGS="$ac_save_CFLAGS"
CXXFLAGS="$ac_save_CXXFLAGS"
LIBS="$ac_save_LIBS"
fi
fi
if test "x$no_sdl" = x ; then
AC_MSG_RESULT(yes)
ifelse([$2], , :, [$2])
else
AC_MSG_RESULT(no)
if test "$SDL_CONFIG" = "no" ; then
echo "*** The sdl-config script installed by SDL could not be found"
echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in"
echo "*** your path, or set the SDL_CONFIG environment variable to the"
echo "*** full path to sdl-config."
else
if test -f conf.sdltest ; then
:
else
echo "*** Could not run SDL test program, checking why..."
CFLAGS="$CFLAGS $SDL_CFLAGS"
CXXFLAGS="$CXXFLAGS $SDL_CFLAGS"
LIBS="$LIBS $SDL_LIBS"
AC_TRY_LINK([
#include <stdio.h>
#include "SDL.h"
int main(int argc, char *argv[])
{ return 0; }
#undef main
#define main K_and_R_C_main
], [ return 0; ],
[ echo "*** The test program compiled, but did not run. This usually means"
echo "*** that the run-time linker is not finding SDL or finding the wrong"
echo "*** version of SDL. If it is not finding SDL, you'll need to set your"
echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point"
echo "*** to the installed location Also, make sure you have run ldconfig if that"
echo "*** is required on your system"
echo "***"
echo "*** If you have an old version installed, it is best to remove it, although"
echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"],
[ echo "*** The test program failed to compile or link. See the file config.log for the"
echo "*** exact error that occured. This usually means SDL was incorrectly installed"
echo "*** or that you have moved SDL since it was installed. In the latter case, you"
echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ])
CFLAGS="$ac_save_CFLAGS"
CXXFLAGS="$ac_save_CXXFLAGS"
LIBS="$ac_save_LIBS"
fi
fi
SDL_CFLAGS=""
SDL_LIBS=""
ifelse([$3], , :, [$3])
fi
AC_SUBST(SDL_CFLAGS)
AC_SUBST(SDL_LIBS)
rm -f conf.sdltest
])

View File

@ -1,93 +0,0 @@
dnl @synopsis VL_LIB_READLINE
dnl
dnl Searches for a readline compatible library. If found, defines
dnl `HAVE_LIBREADLINE'. If the found library has the `add_history'
dnl function, sets also `HAVE_READLINE_HISTORY'. Also checks for the
dnl locations of the necessary include files and sets `HAVE_READLINE_H'
dnl or `HAVE_READLINE_READLINE_H' and `HAVE_READLINE_HISTORY_H' or
dnl 'HAVE_HISTORY_H' if the corresponding include files exists.
dnl
dnl The libraries that may be readline compatible are `libedit',
dnl `libeditline' and `libreadline'. Sometimes we need to link a
dnl termcap library for readline to work, this macro tests these cases
dnl too by trying to link with `libtermcap', `libcurses' or
dnl `libncurses' before giving up.
dnl
dnl Here is an example of how to use the information provided by this
dnl macro to perform the necessary includes or declarations in a C
dnl file:
dnl
dnl #ifdef HAVE_LIBREADLINE
dnl # if defined(HAVE_READLINE_READLINE_H)
dnl # include <readline/readline.h>
dnl # elif defined(HAVE_READLINE_H)
dnl # include <readline.h>
dnl # else /* !defined(HAVE_READLINE_H) */
dnl extern char *readline ();
dnl # endif /* !defined(HAVE_READLINE_H) */
dnl char *cmdline = NULL;
dnl #else /* !defined(HAVE_READLINE_READLINE_H) */
dnl /* no readline */
dnl #endif /* HAVE_LIBREADLINE */
dnl
dnl #ifdef HAVE_READLINE_HISTORY
dnl # if defined(HAVE_READLINE_HISTORY_H)
dnl # include <readline/history.h>
dnl # elif defined(HAVE_HISTORY_H)
dnl # include <history.h>
dnl # else /* !defined(HAVE_HISTORY_H) */
dnl extern void add_history ();
dnl extern int write_history ();
dnl extern int read_history ();
dnl # endif /* defined(HAVE_READLINE_HISTORY_H) */
dnl /* no history */
dnl #endif /* HAVE_READLINE_HISTORY */
dnl
dnl @category InstalledPackages
dnl @author Ville Laurikari <vl@iki.fi>
dnl @version 2002-04-04
dnl @license AllPermissive
AC_DEFUN([VL_LIB_READLINE], [
AC_CACHE_CHECK([for a readline compatible library],
vl_cv_lib_readline, [
ORIG_LIBS="$LIBS"
for readline_lib in readline edit editline; do
for termcap_lib in "" termcap curses ncurses; do
if test -z "$termcap_lib"; then
TRY_LIB="-l$readline_lib"
else
TRY_LIB="-l$readline_lib -l$termcap_lib"
fi
LIBS="$ORIG_LIBS $TRY_LIB"
AC_TRY_LINK_FUNC(readline, vl_cv_lib_readline="$TRY_LIB")
if test -n "$vl_cv_lib_readline"; then
break
fi
done
if test -n "$vl_cv_lib_readline"; then
break
fi
done
if test -z "$vl_cv_lib_readline"; then
vl_cv_lib_readline="no"
LIBS="$ORIG_LIBS"
fi
])
if test "$vl_cv_lib_readline" != "no"; then
AC_DEFINE(HAVE_LIBREADLINE, 1,
[Define if you have a readline compatible library])
AC_CHECK_HEADERS(readline.h readline/readline.h)
AC_CACHE_CHECK([whether readline supports history],
vl_cv_lib_readline_history, [
vl_cv_lib_readline_history="no"
AC_TRY_LINK_FUNC(add_history, vl_cv_lib_readline_history="yes")
])
if test "$vl_cv_lib_readline_history" = "yes"; then
AC_DEFINE(HAVE_READLINE_HISTORY, 1,
[Define if your readline library has \`add_history'])
AC_CHECK_HEADERS(history.h readline/history.h)
fi
fi
])dnl

View File

@ -1,3 +1,16 @@
# OpenClonk, http://www.openclonk.org
#
# Copyright (c) 2011-2013, 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.
# - Find DbgHelp
# Find the DbgHelp library
# This module defines
@ -5,20 +18,6 @@
# DBGHELP_LIBRARIES, the libraries needed to use DbgHelp.
# DBGHELP_FOUND, If false, do not try to use DbgHelp.
#=============================================================================
# OpenClonk, http://www.openclonk.org
#
# Copyright (c) 2011 Nicolas Hake
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
# See isc_license.txt for full license and disclaimer.
#
# "Clonk" is a registered trademark of Matthes Bender.
# See clonk_trademark_license.txt for full license.
#=============================================================================
find_path(DBGHELP_INCLUDE_DIR NAMES dbghelp.h)
set(DBGHELP_NAMES ${DBGHELP_NAMES} dbghelp)
find_library(DBGHELP_LIBRARY NAMES ${DBGHELP_NAMES})

View File

@ -1,3 +1,16 @@
# OpenClonk, http://www.openclonk.org
#
# Copyright (c) 2011-2013, 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.
# - Find FMod
# Find the FMod library
# This module defines
@ -5,20 +18,6 @@
# FMOD_LIBRARIES, the libraries needed to use FMod.
# FMOD_FOUND, If false, do not try to use FMod.
#=============================================================================
# OpenClonk, http://www.openclonk.org
#
# Copyright (c) 2011 Nicolas Hake
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
# See isc_license.txt for full license and disclaimer.
#
# "Clonk" is a registered trademark of Matthes Bender.
# See clonk_trademark_license.txt for full license.
#=============================================================================
find_path(FMOD_INCLUDE_DIR fmod.h)
if(CMAKE_CL_64)

View File

@ -0,0 +1,42 @@
# 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
# 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()
if(NOT FREETYPE_FOUND)
include(LegacyFindFreetype)
endif()

105
cmake/FindPNG.cmake 100644
View File

@ -0,0 +1,105 @@
# - Find the native PNG includes and library
#
# This module searches libpng, the library for working with PNG images.
#
# It defines the following variables
# PNG_INCLUDE_DIRS, where to find png.h, etc.
# PNG_LIBRARIES, the libraries to link against to use PNG.
# PNG_DEFINITIONS - You should add_definitons(${PNG_DEFINITIONS}) before compiling code that includes png library files.
# PNG_FOUND, If false, do not try to use PNG.
# PNG_VERSION_STRING - the version of the PNG library found (since CMake 2.8.8)
# Also defined, but not for general use are
# PNG_LIBRARY, where to find the PNG library.
# For backward compatiblity the variable PNG_INCLUDE_DIR is also set. It has the same value as PNG_INCLUDE_DIRS.
#
# Since PNG depends on the ZLib compression library, none of the above will be
# defined unless ZLib can be 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.
#=============================================================================
# Modified by Nicolas Hake for the OpenClonk Project to make FindPNG also
# look for versioned libraries.
if(PNG_FIND_QUIETLY)
set(_FIND_ZLIB_ARG QUIET)
endif()
find_package(ZLIB ${_FIND_ZLIB_ARG})
if(ZLIB_FOUND)
find_path(PNG_PNG_INCLUDE_DIR png.h
/usr/local/include/libpng # OpenBSD
)
if (PNG_PNG_INCLUDE_DIR AND EXISTS "${PNG_PNG_INCLUDE_DIR}/png.h")
file(STRINGS "${PNG_PNG_INCLUDE_DIR}/png.h" png_version_str REGEX "^#define[ \t]+PNG_LIBPNG_VER_STRING[ \t]+\".+\"")
string(REGEX REPLACE "^#define[ \t]+PNG_LIBPNG_VER_STRING[ \t]+\"([^\"]+)\".*" "\\1" PNG_VERSION_STRING "${png_version_str}")
unset(png_version_str)
endif ()
if (PNG_VERSION_STRING)
string(REGEX REPLACE "^([0-9]+)\\.([0-9]+).*" "png\\1\\2" PNG_VERSIONED_LIBRARY "${PNG_VERSION_STRING}")
set(PNG_VERSIONED_LIBRARY ${PNG_VERSIONED_LIBRARY} lib${PNG_VERSIONED_LIBRARY} lib${PNG_VERSIONED_LIBRARY}_static ${PNG_VERSIONED_LIBRARY}d lib${PNG_VERSIONED_LIBRARY}d lib${PNG_VERSIONED_LIBRARY}d_static)
endif ()
set(PNG_NAMES ${PNG_NAMES} png libpng ${PNG_VERSIONED_LIBRARY} png15 libpng15 png15d libpng15d png14 libpng14 png14d libpng14d png12 libpng12 png12d libpng12d)
unset(PNG_VERSIONED_LIBRARY)
find_library(PNG_LIBRARY NAMES ${PNG_NAMES} )
if (PNG_LIBRARY AND PNG_PNG_INCLUDE_DIR)
# png.h includes zlib.h. Sigh.
set(PNG_INCLUDE_DIRS ${PNG_PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} )
set(PNG_INCLUDE_DIR ${PNG_INCLUDE_DIRS} ) # for backward compatiblity
set(PNG_LIBRARIES ${PNG_LIBRARY} ${ZLIB_LIBRARY})
if (CYGWIN)
if(BUILD_SHARED_LIBS)
# No need to define PNG_USE_DLL here, because it's default for Cygwin.
else()
set (PNG_DEFINITIONS -DPNG_STATIC)
endif()
endif ()
endif ()
endif()
# handle the QUIETLY and REQUIRED arguments and set PNG_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(PNG
REQUIRED_VARS PNG_LIBRARY PNG_PNG_INCLUDE_DIR
VERSION_VAR PNG_VERSION_STRING)
mark_as_advanced(PNG_PNG_INCLUDE_DIR PNG_LIBRARY )

View File

@ -1,3 +1,16 @@
# OpenClonk, http://www.openclonk.org
#
# Copyright (c) 2011-2013, 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.
# - Find READLINE
# Find the native READLINE includes and library
#

View File

@ -1,3 +1,16 @@
# OpenClonk, http://www.openclonk.org
#
# Copyright (c) 2012-2013, 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.
# - Find libupnp
# Find the libupnp library
# This module defines
@ -5,21 +18,6 @@
# UPNP_LIBRARIES, the libraries needed to use libupnp.
# UPNP_FOUND, If false, do not try to use libupnp.
#=============================================================================
# OpenClonk, http://www.openclonk.org
#
# Copyright (c) 2012 Armin Burgmeier
# Copyright (c) 2012 Nicolas Hake
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
# See isc_license.txt for full license and disclaimer.
#
# "Clonk" is a registered trademark of Matthes Bender.
# See clonk_trademark_license.txt for full license.
#=============================================================================
# TODO: Use pkg-config if available
find_path(UPNP_INCLUDE_DIR NAMES upnp.h PATH_SUFFIXES upnp)

View File

@ -0,0 +1,113 @@
# - Find zlib
# Find the native ZLIB includes and library.
# Once done this will define
#
# ZLIB_INCLUDE_DIRS - where to find zlib.h, etc.
# ZLIB_LIBRARIES - List of libraries when using zlib.
# ZLIB_FOUND - True if zlib found.
#
# ZLIB_VERSION_STRING - The version of zlib found (x.y.z)
# ZLIB_VERSION_MAJOR - The major version of zlib
# ZLIB_VERSION_MINOR - The minor version of zlib
# ZLIB_VERSION_PATCH - The patch version of zlib
# ZLIB_VERSION_TWEAK - The tweak version of zlib
#
# The following variable are provided for backward compatibility
#
# ZLIB_MAJOR_VERSION - The major version of zlib
# ZLIB_MINOR_VERSION - The minor version of zlib
# ZLIB_PATCH_VERSION - The patch version of zlib
#
# An includer may set ZLIB_ROOT to a zlib installation root to tell
# this module where to look.
#=============================================================================
# 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.
#=============================================================================
set(_ZLIB_SEARCHES)
# Search ZLIB_ROOT first if it is set.
if(ZLIB_ROOT)
set(_ZLIB_SEARCH_ROOT PATHS ${ZLIB_ROOT} NO_DEFAULT_PATH)
list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_ROOT)
endif()
# Normal search.
set(_ZLIB_SEARCH_NORMAL
PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]"
"$ENV{PROGRAMFILES}/zlib"
)
list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_NORMAL)
set(ZLIB_NAMES z zlib zlibstatic zdll zlib1 zlibd zlibd1)
# Try each search configuration.
foreach(search ${_ZLIB_SEARCHES})
find_path(ZLIB_INCLUDE_DIR NAMES zlib.h ${${search}} PATH_SUFFIXES include)
find_library(ZLIB_LIBRARY NAMES ${ZLIB_NAMES} ${${search}} PATH_SUFFIXES lib)
endforeach()
mark_as_advanced(ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
if(ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h")
file(STRINGS "${ZLIB_INCLUDE_DIR}/zlib.h" ZLIB_H REGEX "^#define ZLIB_VERSION \"[^\"]*\"$")
string(REGEX REPLACE "^.*ZLIB_VERSION \"([0-9]+).*$" "\\1" ZLIB_VERSION_MAJOR "${ZLIB_H}")
string(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_MINOR "${ZLIB_H}")
string(REGEX REPLACE "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.([0-9]+).*$" "\\1" ZLIB_VERSION_PATCH "${ZLIB_H}")
set(ZLIB_VERSION_STRING "${ZLIB_VERSION_MAJOR}.${ZLIB_VERSION_MINOR}.${ZLIB_VERSION_PATCH}")
# only append a TWEAK version if it exists:
set(ZLIB_VERSION_TWEAK "")
if( "${ZLIB_H}" MATCHES "^.*ZLIB_VERSION \"[0-9]+\\.[0-9]+\\.[0-9]+\\.([0-9]+).*$")
set(ZLIB_VERSION_TWEAK "${CMAKE_MATCH_1}")
set(ZLIB_VERSION_STRING "${ZLIB_VERSION_STRING}.${ZLIB_VERSION_TWEAK}")
endif()
set(ZLIB_MAJOR_VERSION "${ZLIB_VERSION_MAJOR}")
set(ZLIB_MINOR_VERSION "${ZLIB_VERSION_MINOR}")
set(ZLIB_PATCH_VERSION "${ZLIB_VERSION_PATCH}")
endif()
# handle the QUIETLY and REQUIRED arguments and set ZLIB_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ZLIB REQUIRED_VARS ZLIB_LIBRARY ZLIB_INCLUDE_DIR
VERSION_VAR ZLIB_VERSION_STRING)
if(ZLIB_FOUND)
set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
endif()

View File

@ -1,3 +1,16 @@
# OpenClonk, http://www.openclonk.org
#
# Copyright (c) 2012-2013, 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.
function(git_get_changeset_id VAR)
find_package(Git QUIET)
if (GIT_FOUND)

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

@ -1,14 +1,15 @@
# OpenClonk, http://www.openclonk.org
#
# Copyright (c) 2013 Nicolas Hake
# Copyright (c) 2013, The OpenClonk Team and contributors
#
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
# See isc_license.txt for full license and disclaimer.
# Distributed under the terms of the ISC license; see accompanying file
# "COPYING" for details.
#
# "Clonk" is a registered trademark of Matthes Bender.
# See clonk_trademark_license.txt for full license.
# "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.
include(CheckCXXSourceCompiles)
macro(REQUIRE_CXX_SOURCE_COMPILES _code _var)

View File

@ -13,9 +13,6 @@
/* Whether FMOD shall be used */
#cmakedefine HAVE_FMOD 1
/* Define to 1 if you have FreeType2. */
#cmakedefine HAVE_FREETYPE 1
/* Define to 1 if you have the <history.h> header file. */
#cmakedefine HAVE_HISTORY_H 1
@ -160,12 +157,6 @@
/* dedicated server mode */
#cmakedefine USE_CONSOLE 1
/* DirectX graphics */
#cmakedefine USE_DIRECTX 1
/* OpenGL graphics */
#cmakedefine USE_GL 1
/* MP3 music */
#cmakedefine USE_MP3 1
@ -184,6 +175,9 @@
/* Developer mode */
#cmakedefine WITH_DEVELOPER_MODE 1
/* Define to 1 if you want to use Boost.Regex instead of <regex>. */
#cmakedefine USE_BOOST_REGEX 1
/* Glib */
#cmakedefine WITH_GLIB 1

View File

@ -1,209 +0,0 @@
/* config.h.in. Generated from configure.ac by autoheader. */
/* Activate DebugRecs */
#undef DEBUGREC
/* define if the Boost library is available */
#undef HAVE_BOOST
/* Generate minidumps on crash */
#undef HAVE_DBGHELP
/* Define to 1 if you have the <dbghelp.h> header file. */
#undef HAVE_DBGHELP_H
/* Define to 1 if you have the <direct.h> header file. */
#undef HAVE_DIRECT_H
/* The backtrace function is declared in execinfo.h and works */
#undef HAVE_EXECINFO_H
/* Define to 1 if you have FreeType2. */
#undef HAVE_FREETYPE
/* Define to 1 if you have the <history.h> header file. */
#undef HAVE_HISTORY_H
/* Define if you have the iconv() function. */
#undef HAVE_ICONV
/* Define to 1 if you have the <inttypes.h> header file. */
#undef HAVE_INTTYPES_H
/* Define to 1 if you have the <io.h> header file. */
#undef HAVE_IO_H
/* Define to 1 if you have the <langinfo.h> header file. */
#undef HAVE_LANGINFO_H
/* Define if you have a readline compatible library */
#undef HAVE_LIBREADLINE
/* Define to 1 if you have SDL_mixer. */
#undef HAVE_LIBSDL_MIXER
/* Define to 1 if you have the <locale.h> header file. */
#undef HAVE_LOCALE_H
/* Define to 1 if you have the <memory.h> header file. */
#undef HAVE_MEMORY_H
/* Define to 1 if you have the <natupnp.h> header file. */
#undef HAVE_NATUPNP_H
/* Define to 1 if you have support for nullptr. */
#undef HAVE_NULLPTR
/* Define to 1 if you have the <poll.h> header file. */
#undef HAVE_POLL_H
/* Define if you have POSIX threads libraries and header files. */
#undef HAVE_PTHREAD
/* Have PTHREAD_PRIO_INHERIT. */
#undef HAVE_PTHREAD_PRIO_INHERIT
/* Define to 1 if you have the <readline.h> header file. */
#undef HAVE_READLINE_H
/* Define if your readline library has \`add_history' */
#undef HAVE_READLINE_HISTORY
/* Define to 1 if you have the <readline/history.h> header file. */
#undef HAVE_READLINE_HISTORY_H
/* Define to 1 if you have the <readline/readline.h> header file. */
#undef HAVE_READLINE_READLINE_H
/* C++ Compiler has rvalue references, a C++0x feature. */
#undef HAVE_RVALUE_REF
/* Define to 1 if you have SDL. */
#undef HAVE_SDL
/* Define to 1 if you have the <share.h> header file. */
#undef HAVE_SHARE_H
/* Define to 1 if you have the <signal.h> header file. */
#undef HAVE_SIGNAL_H
/* Define to 1 if your compiler supports static_assert */
#undef HAVE_STATIC_ASSERT
/* Define to 1 if you have the <stdint.h> header file. */
#undef HAVE_STDINT_H
/* Define to 1 if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define to 1 if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define to 1 if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define to 1 if you have the <sys/eventfd.h> header file. */
#undef HAVE_SYS_EVENTFD_H
/* Define to 1 if you have the <sys/file.h> header file. */
#undef HAVE_SYS_FILE_H
/* Define to 1 if you have the <sys/inotify.h> header file. */
#undef HAVE_SYS_INOTIFY_H
/* Define to 1 if you have the <sys/socket.h> header file. */
#undef HAVE_SYS_SOCKET_H
/* Define to 1 if you have the <sys/stat.h> header file. */
#undef HAVE_SYS_STAT_H
/* Define to 1 if you have the <sys/timerfd.h> header file. */
#undef HAVE_SYS_TIMERFD_H
/* Define to 1 if you have the <sys/types.h> header file. */
#undef HAVE_SYS_TYPES_H
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
/* Define to 1 if you have the `vasprintf' function. */
#undef HAVE_VASPRINTF
/* */
#undef HAVE_VFW32
/* Define to 1 if you have the <X11/extensions/Xrandr.h> header file. */
#undef HAVE_X11_EXTENSIONS_XRANDR_H
/* Define to 1 if you have the <X11/keysym.h> header file. */
#undef HAVE_X11_KEYSYM_H
/* Define as const if the declaration of iconv() needs const. */
#undef ICONV_CONST
/* compile without debug options */
#undef NDEBUG
/* Define to 1 if your C compiler doesn't accept -c and -o together. */
#undef NO_MINUS_C_MINUS_O
/* Define to the address where bug reports for this package should be sent. */
#undef PACKAGE_BUGREPORT
/* Define to the full name of this package. */
#undef PACKAGE_NAME
/* Define to the full name and version of this package. */
#undef PACKAGE_STRING
/* Define to the one symbol short name of this package. */
#undef PACKAGE_TARNAME
/* Define to the home page for this package. */
#undef PACKAGE_URL
/* Define to the version of this package. */
#undef PACKAGE_VERSION
/* Define to necessary symbol if this constant uses a non-standard name on
your system. */
#undef PTHREAD_CREATE_JOINABLE
/* Define to 1 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* dedicated server mode */
#undef USE_CONSOLE
/* DirectX graphics */
#undef USE_DIRECTX
/* OpenGL graphics */
#undef USE_GL
/* MP3 music */
#undef USE_MP3
/* OpenAL sound */
#undef USE_OPEN_AL
/* Define to 1 if SDL is used for the main loop */
#undef USE_SDL_MAINLOOP
/* Define to 1 if the X Window System is used */
#undef USE_X11
/* Enable automatic update system */
#undef WITH_AUTOMATIC_UPDATE
/* Developer mode */
#undef WITH_DEVELOPER_MODE
/* Glib */
#undef WITH_GLIB
/* Define to 1 if the X Window System is missing or not being used. */
#undef X_DISPLAY_MISSING
/* compile with debug options */
#undef _DEBUG

View File

@ -1,428 +0,0 @@
dnl Process this file with autoconf to produce a configure script.
# Copyright (c) 2005-2011 Günther Brammer
# Copyright (c) 2005, 2008 Peter Wortmann
# Copyright (c) 2006 Julian Raschke
# Copyright (c) 2010 Armin Burgmeier
# Copyright (c) 2010 Martin Plicht
# Copyright (c) 2005-2009, RedWolf Design GmbH, http://www.clonk.de
# Permission to use, copy, modify, and/or distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
# copyright notice and this permission notice appear in all copies.
# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
AC_PREREQ([2.67])
AC_INIT([openclonk], [m4_esyscmd([sed -n 's/SET(C4XVER1\s\+\(.\+\))/\1/ p' Version.txt | tr -d '\n' | tr -d '\r'
]).m4_esyscmd([sed -n 's/SET(C4XVER2\s\+\(.\+\))/\1/ p' Version.txt | tr -d '\n' | tr -d '\r'
]).m4_esyscmd([sed -n 's/SET(C4XVER3\s\+\(.\+\))/\1/ p' Version.txt | tr -d '\n' | tr -d '\r'])])
AC_COPYRIGHT([©2005-2011 Günther Brammer])
AC_CONFIG_SRCDIR([/src/C4Include.h])
AC_CONFIG_AUX_DIR([autotools])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([Makefile])
AC_CANONICAL_HOST
dnl foreign to tell automake to shut up,
dnl and subdir-objects because it makes the Makefile smaller.
dnl no-define because PACKAGE and VERSION are not used
AM_INIT_AUTOMAKE([foreign tar-ustar nostdinc no-define 1.10])
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
AC_PROG_CXX
AC_LANG([C++])
AX_CHECK_COMPILE_FLAG([-std=gnu++0x], [CXX="${CXX} -std=gnu++0x"], [])
AC_MSG_CHECKING([for rvalue references])
AC_COMPILE_IFELSE([void f(struct D&&); int main() { return 0; }], [
AC_DEFINE([HAVE_RVALUE_REF], [], [C++ Compiler has rvalue references, a C++0x feature.])
AC_MSG_RESULT([yes])
], [
AC_MSG_RESULT([no])
AX_PROG_CXX_REFTOTEMP
])
AC_MSG_CHECKING([for nullptr])
AC_COMPILE_IFELSE([int main() { void *d = nullptr; }], [
AC_DEFINE([HAVE_NULLPTR], [], [Define to 1 if you have support for nullptr.])
AC_MSG_RESULT([yes])
], [AC_MSG_RESULT([no])])
AC_MSG_CHECKING([for static_assert])
AC_COMPILE_IFELSE([int main() { static_assert(true, \"\"); }], [
AC_DEFINE([HAVE_STATIC_ASSERT], [], [Define to 1 if your compiler supports static_assert])
AC_MSG_RESULT([yes])
], [AC_MSG_RESULT([no])])
AC_PROG_CC
AM_PROG_CC_C_O
AC_PROG_RANLIB
# Automake 1.12 breaks if this isn't run unconditionally
AC_PROG_OBJCXX
case $host in
*-*-mingw32* | *-*-cygwin* | *-*-windows*)
win32=true; osx=false;;
*-*-darwin*)
win32=false; osx=true;;
*)
win32=false; osx=false;;
esac
# Detect Wine. Unfortunately, at the moment winegcc does not meet the demands
AC_CHECK_HEADER([windows.h], [win32=true], [], [[ ]])
AM_CONDITIONAL(WIN32, [test $win32 = true])
AM_CONDITIONAL(MACOSX, [test $osx = true])
# various used headers
dnl the whitespace is there to prevent AC_INCLUDES_DEFAULT
AC_CHECK_HEADERS([stdint.h unistd.h poll.h sys/file.h sys/stat.h sys/types.h locale.h sys/socket.h signal.h langinfo.h sys/eventfd.h sys/timerfd.h sys/inotify.h], , , [[ ]])
AC_CHECK_HEADERS([io.h direct.h share.h natupnp.h dbghelp.h], [], [], [[#include <windows.h>]])
# iconv
AX_ICONV
# vasprintf is a GNU extension
AC_CHECK_FUNCS(vasprintf)
# so is execinfo.h - and some systems have the header despite the functions not being in the c library
AC_CHECK_HEADER(execinfo.h)
if test "x$ac_cv_header_execinfo_h" = xyes; then
AC_CHECK_FUNC(backtrace, [], [
AC_CHECK_LIB(execinfo, backtrace, [
CLONK_LIBS="-lexecinfo $CLONK_LIBS"
], [
ac_cv_header_execinfo_h=no
])
])
fi
if test "x$ac_cv_header_execinfo_h" = xyes; then
AC_DEFINE(HAVE_EXECINFO_H, 1, [The backtrace function is declared in execinfo.h and works])
fi
AC_ARG_ENABLE([debug],
[AS_HELP_STRING([--enable-debug],[debugging options [default=no]])],
, [enable_debug=no])
if test $enable_debug = yes; then
AC_DEFINE([_DEBUG], 1, [compile with debug options])
else
AC_DEFINE([NDEBUG], 1, [compile without debug options])
fi
AC_ARG_ENABLE([debugrec],
[AS_HELP_STRING([--enable-debugrec],[write additional debug control to records [default=no]])],
, [enable_debugrec=no])
if test $enable_debugrec = yes; then
AC_DEFINE([DEBUGREC], 1, [Activate DebugRecs])
fi
AC_ARG_ENABLE([console],
[AS_HELP_STRING([--enable-console],[compile as pure console application [default=no]])],
, [enable_console=no])
AC_ARG_ENABLE([sound],
[AS_HELP_STRING([--enable-sound],[compile with sound support [default=yes]])],
, [if test $enable_console = yes; then enable_sound=no; else enable_sound=yes; fi])
# GTK+
GTK2_REQUIRED="glib-2.0 >= 2.24 gtk+-2.0 >= 2.20"
GTK3_REQUIRED="glib-2.0 >= 2.32 gtk+-3.0 >= 3.4"
PKG_PROG_PKG_CONFIG
AC_MSG_CHECKING([which gtk+ version to compile against])
AC_ARG_WITH([gtk],
[AS_HELP_STRING([--with-gtk=2.0|3.0],[which gtk+ version to compile against [default: auto]])],
[case "$with_gtk" in
2.0|3.0) ;;
no) ;;
*) AC_MSG_ERROR([invalid gtk version specified]) ;;
esac],
[AS_IF([test $enable_console = no],
[PKG_CHECK_EXISTS([$GTK3_REQUIRED],
[with_gtk=3.0],
[PKG_CHECK_EXISTS([$GTK2_REQUIRED],
[with_gtk=2.0],
[with_gtk=no])])],
[with_gtk=no])])
AC_MSG_RESULT([$with_gtk])
AS_IF([test $with_gtk != no],[
case "$with_gtk" in
2.0) GTK_REQUIRED="$GTK2_REQUIRED"
MAPE_REQUIRED="$GTK2_REQUIRED gthread-2.0 gtksourceview-2.0"
;;
3.0) GTK_REQUIRED="$GTK3_REQUIRED"
MAPE_REQUIRED="$GTK3_REQUIRED gthread-2.0 gtksourceview-3.0"
;;
esac
PKG_CHECK_MODULES(GTK, [$GTK_REQUIRED])
AC_ARG_ENABLE([mape],
[AS_HELP_STRING([--enable-mape],[build mape landscape.txt editor [default: auto]])], [],
[PKG_CHECK_EXISTS([$MAPE_REQUIRED], [enable_mape=yes], [enable_mape=no])])
AS_IF([test $enable_mape != no],
[PKG_CHECK_MODULES(MAPE, [$MAPE_REQUIRED])])
AC_DEFINE([WITH_GLIB], 1, [Glib])
AC_DEFINE([WITH_DEVELOPER_MODE], 1, [Developer mode])
])
AM_CONDITIONAL(GTK, [test $with_gtk != no])
AM_CONDITIONAL(MAPE, [test $enable_mape != no])
# OpenAL
AC_ARG_WITH([openal],
[AS_HELP_STRING([--with-openal],[compile with openal support [default=no]])],
, [with_openal=no])
if test $with_openal = yes; then
PKG_CHECK_MODULES(OPENAL, [vorbis vorbisfile openal freealut])
AC_DEFINE([USE_OPEN_AL], 1, [OpenAL sound])
if test $enable_sound = no; then
AC_MSG_ERROR([--with-openal cannot be used with --disable-sound.])
fi
fi
# SDL
with_sdl_mixer=no
AC_ARG_WITH([sdl],
AS_HELP_STRING([--with-sdl], [Use SDL @<:@default=yes (no for win32)@:>@]),
, [if test $win32 = true; then with_sdl=no; else if test $enable_console = yes; then with_sdl=no; else with_sdl=yes; fi fi])
if test $with_sdl = yes; then
# Check for SDL
SDL_VERSION=1.2.0
AM_PATH_SDL($SDL_VERSION,
[AC_DEFINE(HAVE_SDL, 1, [Define to 1 if you have SDL.])],
[AC_MSG_ERROR([libSDL not found.])])
AC_SUBST(SDL_CFLAGS)
AC_SUBST(SDL_LIBS)
if test $enable_sound = yes && test $with_openal = no; then
# Check for SDL_mixer library
AC_CHECK_LIB(SDL_mixer, Mix_OpenAudio,
[AC_DEFINE(HAVE_LIBSDL_MIXER,1,[Define to 1 if you have SDL_mixer.])
SDL_LIBS="-lSDL_mixer $SDL_LIBS"
with_sdl_mixer=yes],
[AC_MSG_ERROR([SDL_mixer not found.])],
[$SDL_LIBS])
fi
AC_ARG_ENABLE(sdlmainloop,
[AS_HELP_STRING([--enable-sdlmainloop],[use SDL instead of X11 or Win32 [default=no]])],
, [if test $osx = true; then enable_sdlmainloop=yes; else enable_sdlmainloop=no; fi ])
else
enable_sdlmainloop=no
fi
if test $enable_sdlmainloop = yes; then
with_x=no
AC_DEFINE(USE_SDL_MAINLOOP, 1, [Define to 1 if SDL is used for the main loop])
fi
AM_CONDITIONAL(SDL_MAIN_LOOP, [test $enable_sdlmainloop = yes])
if test $enable_sound = yes; then
AC_ARG_ENABLE([mp3],
[AS_HELP_STRING([--enable-mp3],[enable mp3 support [default=no]])],
, [enable_mp3=no])
if test $enable_mp3 = yes; then
AC_DEFINE([USE_MP3], 1, [MP3 music])
fi
fi
if test $enable_console = no; then
if test $win32 = true; then
AC_SUBST(WINDOWS_CFLAGS, "-mwindows")
fi
else
# console mode
AC_DEFINE([USE_CONSOLE], 1, [dedicated server mode])
with_x=no
enable_sdlmainloop=no
VL_LIB_READLINE
fi
AM_CONDITIONAL([CONSOLE], [test $enable_console = yes])
# Check for boost
AX_BOOST_BASE([1.40.0], [], [
AC_MSG_ERROR([Boost not found.])
])
# Check for libjpeg
AC_CHECK_LIB(jpeg, jpeg_read_header, [
CLONK_LIBS="-ljpeg $CLONK_LIBS"
], [
AC_MSG_ERROR([libjpeg not found.])
])
# Check for libpng
AC_CHECK_LIB(png, png_read_image, [
CLONK_LIBS="-lpng $CLONK_LIBS"
], [
AC_MSG_ERROR([libpng not found.])
], [-lz])
# Check for libz
AC_CHECK_LIB(z, deflate, [
Z_LIBS="-lz $Z_LIBS"
], [
AC_MSG_ERROR([libz not found.])
])
# Check for librt
AC_CHECK_LIB(rt, clock_gettime, [
LDADD="-lrt $LDADD"
], [])
# Check for libfreetype
if test $enable_console = no; then
PKG_CHECK_MODULES(FREETYPE, freetype2, ,[
if test "$cross_compiling" = no; then
AC_CHECK_PROG(FREETYPE_CONFIG, freetype-config, freetype-config)
fi
if test $FREETYPE_CONFIG; then
AC_SUBST(FREETYPE_CFLAGS, [`$FREETYPE_CONFIG --cflags`])
AC_SUBST(FREETYPE_LIBS, [`$FREETYPE_CONFIG --libs`])
else
AC_MSG_ERROR([Freetype not found.])
fi
])
AC_DEFINE(HAVE_FREETYPE, 1, [Define to 1 if you have FreeType2.])
fi
# X11, Xrandr
AC_PATH_XTRA
if test $have_x = yes; then
AC_DEFINE(USE_X11, 1, [Define to 1 if the X Window System is used])
CLONK_LIBS="$X_LIBS $CLONK_LIBS"
AC_CHECK_HEADERS([X11/keysym.h X11/extensions/Xrandr.h], ,
[AC_MSG_ERROR([A required X11 header was not found.])], [[#include <X11/Xlib.h>]])
AC_CHECK_LIB(X11, XOpenDisplay, [CLONK_LIBS="-lX11 $CLONK_LIBS"],
[AC_MSG_ERROR([libX11 not found.])], [$X_LIBS])
AC_CHECK_LIB(Xrandr, XRRQueryExtension, [CLONK_LIBS="-lXrandr $CLONK_LIBS"],
[AC_MSG_ERROR([libXrandr not found.])], [$X_LIBS])
fi
# OpenGL
AC_ARG_WITH([gl],
[AS_HELP_STRING([--with-gl],[compile with opengl support [default=yes]])],
, [if test $enable_console = yes; then with_gl=no; else with_gl=yes; fi])
if test $with_gl = yes; then
if test $osx = true; then
CLONK_LIBS="-framework OpenGL $CLONK_LIBS"
PKG_CHECK_MODULES(GLEW, [glew], [CLONK_LIBS="$GLEW_LIBS $CLONK_LIBS"], [AC_MSG_ERROR([glew not found.])])
elif test $win32 = true; then
AC_CHECK_LIB(opengl32, main, [CLONK_LIBS="-lopengl32 $CLONK_LIBS"],
[AC_MSG_ERROR([opengl32 not found.])])
AC_CHECK_LIB(glu32, main, [CLONK_LIBS="-lglu32 $CLONK_LIBS"],
[AC_MSG_ERROR([glu32 not found.])])
AC_CHECK_LIB(glew32, main, [CLONK_LIBS="-lglew32 $CLONK_LIBS"],
[AC_MSG_ERROR([glew not found.])])
AC_SUBST([GLEW_CFLAGS],["-DGLEW_STATIC"])
else
AC_CHECK_LIB(GL, glBegin, [CLONK_LIBS="-lGL $CLONK_LIBS"],
[AC_MSG_ERROR([libGL not found.])])
AC_CHECK_LIB(GLU, gluOrtho2D, [CLONK_LIBS="-lGLU $CLONK_LIBS"],
[AC_MSG_ERROR([libGLU not found.])])
AC_CHECK_LIB(GLEW, glewInit, [CLONK_LIBS="-lGLEW $CLONK_LIBS"],
[AC_MSG_ERROR([glew not found.])])
fi
AC_DEFINE([USE_GL], 1, [OpenGL graphics])
fi
# DirectX
AC_ARG_WITH([directx],
[AS_HELP_STRING([--with-directx],[compile with directx support [default=no]])],
, [with_directx="no"])
if test "$with_directx" = yes; then
AC_CHECK_LIB(d3d9, main, [CLONK_LIBS="-ld3d9 $CLONK_LIBS"],
[AC_MSG_ERROR([d3d9 not found.])])
AC_DEFINE([USE_DIRECTX], 1, [DirectX graphics])
fi
# UPnP
AC_ARG_WITH([upnp],
[AS_HELP_STRING([--with-upnp],[compile with upnp support [default=no]])],
, [with_upnp=no])
AS_IF([test $with_upnp = yes], [
AM_CONDITIONAL(NATUPNP, [test "$ac_cv_header_natupnp_h" = yes])
PKG_CHECK_MODULES(LIBUPNP, [libupnp], [have_libupnp=yes], [have_libupnp=no])
], [
AM_CONDITIONAL(NATUPNP, [false])
have_libupnp=no
])
AM_CONDITIONAL(LIBUPNP, [test "$have_libupnp" = yes])
# Automatic Update
AC_ARG_ENABLE([autoupdate],
[AS_HELP_STRING([--disable-autoupdate],[support for automatic engine updates [default=yes]])],
, [enable_autoupdate="yes"])
AS_IF([test "$enable_autoupdate" = yes], [
AC_DEFINE([WITH_AUTOMATIC_UPDATE], 1, [Enable automatic update system])
])
AM_CONDITIONAL(AUTOUPDATE, [test "$enable_autoupdate" = yes])
if test $win32 = false; then
# pthread
AX_PTHREAD( , [AC_MSG_ERROR([No pthread support.])])
AC_SUBST(PTHREAD_LIBS)
AC_SUBST(PTHREAD_CFLAGS)
else
# Windows
for WIN32LIB in gdi32 comdlg32 ws2_32
do
AC_CHECK_LIB([$WIN32LIB], main, [CLONK_LIBS="-l$WIN32LIB $CLONK_LIBS"], [AC_MSG_ERROR([$WIN32LIB not found.])])
done
AC_CHECK_LIB([winmm], main, [LDADD="-lwinmm $LDADD"], [AC_MSG_ERROR([winmm not found.])])
AC_CHECK_LIB([vfw32], main, [
CLONK_LIBS="-lvfw32 $CLONK_LIBS"
AC_DEFINE([HAVE_VFW32], 1, [ ])
], [])
AC_CHECK_LIB([dbghelp], main, [AS_IF([test "x$ac_cv_header_dbghelp_h" = xyes], [
CLONK_LIBS="-ldbghelp $CLONK_LIBS"
AC_DEFINE([HAVE_DBGHELP], 1, [Generate minidumps on crash])
])], [])
# windres
AC_CHECK_TOOL(WINDRES, windres, no)
if test $WINDRES = no; then
AC_MSG_ERROR([windres not found.])
fi
# ASLR/DEP
LDADD="-Wl,--nxcompat -Wl,--dynamicbase $LDADD"
fi
AC_SUBST(LDADD)
AC_SUBST(CLONK_LIBS)
AC_SUBST(Z_LIBS)
# precompiled headers and -Wextra
AC_MSG_CHECKING([whether we are using a GNU C++ compiler version 4.1 or newer])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[#if defined(__GNUC__) && (((__GNUC__ >= 4) && (__GNUC_MINOR__ >= 1)) || (__GNUC__ > 4))
// all ok
#else
choke me
#endif
]])], RECENT_GCC="yes", RECENT_GCC="no")
AC_MSG_RESULT([$RECENT_GCC])
AM_CONDITIONAL(RECENT_GCC, [test $RECENT_GCC = yes])
AC_OUTPUT
echo "Configuration:
CFLAGS: $CFLAGS
CXXFLAGS: $CXXFLAGS
Debug: $enable_debug
Debugrec: $enable_debugrec
Pure console: $enable_console
Autoupdate: $enable_autoupdate
DirectX: $with_directx
OpenGL: $with_gl
Nat/LibUPnP: $ac_cv_header_natupnp_h/$have_libupnp
Sound: $enable_sound
SDL_Mixer: $with_sdl_mixer
OpenAL: $with_openal
GTK+: $with_gtk
X11: $have_x"
if test "$enable_sdlmainloop" = yes; then echo " SDL: mainloop";
else echo " SDL: $with_sdl"; fi

View File

@ -2954,8 +2954,8 @@ msgid "Sets the transfer zone of the object. If the pathfinding trail of another
msgstr "Setzt einen neuen Transferbereich für das aufrufende Objekt. Führt die Suche der Wegfindung durch einen Transferbereich (dieser gilt für die Wegfindung immer als komplett durchlaufbar), werden für den Clonk ControlTransfer-Aufrufe an das Script des Objekts aufgerufen. In diesen sollte mit Hilfe von Befehlen dafür gesorgt werden, dass der Clonk an seine Zielposition kommt."
#: sdk/script/fn/SetTransferZone.xml:37(remark)
msgid "Transfer zones have to be set anew when the object has moved. Also, they should be set anew in response to a UpdateTransferZone callback made by the engine."
msgstr "Transferzonen müssen neu gesetzt werden, wenn sich das Objekt bewegt. Außerdem sollten sie immer als Antwort auf einen UpdateTransferZone-Callback der Engine neu gesetzt werden."
msgid "Transfer zones have to be set anew when the object has moved. Also, they should be set anew in response to a OnSynchronized callback made by the engine."
msgstr "Transferzonen müssen neu gesetzt werden, wenn sich das Objekt bewegt. Außerdem sollten sie immer als Antwort auf einen OnSynchronized-Callback der Engine neu gesetzt werden."
#: sdk/script/fn/SetTransferZone.xml:49(text)
msgid "Script for a cheat object: a clonk with a movement command will be immediately warped to the destination."
@ -3102,8 +3102,8 @@ msgid "Changes the bounding rectangle of the object. This rectangle is used e.g.
msgstr "Ändert das interne Objektrechteck des aufrufenden Objekts. Das Objektrechteck wird beispielsweise für Kollisionsabfragen verwendet. Dies hat keine Auswirkung auf die Darstellung des Objekts."
#: sdk/script/fn/SetShape.xml:36(remark)
msgid "In various situations the engine will reset the object's shape to the definition value. This might overwrite changes made with SetShape. This will happen e.g. during object rotation but also when resuming a saved game. So this function should only be used for mainly static, unchanging objects and you should readjust the shape manually in synchronization calls like UpdateTransferZone."
msgstr "Die Engine aktualisiert in diversen Fällen das Objektrechteck, wobei es die Definitionswerte zurückkopiert (und damit eventuelle, durch SetShape gesetzte Objektrechtecke verwirft). Die ist beispielsweise beim Ändern der Objektrotation, aber auch beim Neuladen der Spielstände der Fall. Die Funktion sollte also besser nur bei statischen, relativ unveränderten Objekten verwendet werden, und das Shape muss jeweils in einem Synchronisationsaufruf wie UpdateTransferZone neu gesetzt werden."
msgid "In various situations the engine will reset the object's shape to the definition value. This might overwrite changes made with SetShape. This will happen e.g. during object rotation but also when resuming a saved game. So this function should only be used for mainly static, unchanging objects and you should readjust the shape manually in synchronization calls like OnSynchronized."
msgstr "Die Engine aktualisiert in diversen Fällen das Objektrechteck, wobei es die Definitionswerte zurückkopiert (und damit eventuelle, durch SetShape gesetzte Objektrechtecke verwirft). Die ist beispielsweise beim Ändern der Objektrotation, aber auch beim Neuladen der Spielstände der Fall. Die Funktion sollte also besser nur bei statischen, relativ unveränderten Objekten verwendet werden, und das Shape muss jeweils in einem Synchronisationsaufruf wie OnSynchronized neu gesetzt werden."
#: sdk/script/fn/SetShape.xml:40(text)
msgid "Enlarges the area or distance from which you can chop down one coniferous tree."
@ -15347,7 +15347,7 @@ msgstr "Wenn ein durch die Wegfindungsroutine gesteuertes Objekt (obj) die Trans
#: sdk/definition/script.xml:149(col)
msgid "When an object is loaded from a savegame or network synchronization is performed. Objects with a transfer zone should reset the zone in this call. Also see <emlink href=\"script/fn/SetTransferZone.html\">SetTransferZone</emlink>()."
msgstr "Wenn ein Objekt geladen oder synchronisiert wird. Objekte mit einer TransferZone sollten diese bei jedem Aufruf von UpdateTransferZone neu setzen. Siehe auch <emlink href=\"script/fn/SetTransferZone.html\">SetTransferZone</emlink>()."
msgstr "Wenn ein Objekt geladen oder synchronisiert wird. Objekte mit einer TransferZone sollten diese bei jedem Aufruf von OnSynchronized neu setzen. Siehe auch <emlink href=\"script/fn/SetTransferZone.html\">SetTransferZone</emlink>()."
#: sdk/definition/script.xml:153(col)
msgid "int selection, object menu_object"
@ -18412,8 +18412,8 @@ msgstr "Dieses Kommandozeilen-Programm dient zum Bearbeiten von Gruppendateien.
#~ msgid "Animation"
#~ msgstr "Animation"
#~ msgid "UpdateTransferZone"
#~ msgstr "UpdateTransferZone"
#~ msgid "OnSynchronized"
#~ msgstr "OnSynchronized"
#~ msgid "CatchBlow"
#~ msgstr "CatchBlow"

View File

@ -1,3 +1,9 @@
@font-face{
font-family: Endeavour;
src: url('/Endeavour.eot');
src: local('Endeavour'),url('/Endeavour.ttf') format("truetype");
}
body {
margin: 0;
font-size: small;
@ -244,4 +250,6 @@ ul.nav li.switchlang img {
margin: 0;
}
a {
color: rgb(0, 102, 153);
}

View File

@ -4,65 +4,55 @@ header is an appropiate html element, so it's arbitrarily chosen.
clonk.xsl also uses it to match the processing for it. -->
<header>
<style type="text/css">@import url("http://www.openclonk.org/header/header.css");</style>
<div id="nav_header">
<div id="nav_logo">
<a href="http://www.openclonk.org/" target="_top"><img src="http://www.openclonk.org/header/logo.png" alt="OpenClonk"/></a>
</div>
</div>
<div id="nav_navigation">
<div id="nav_search">
<form action="http://www.openclonk.org/header/search.php" id="searchform" method="get" target="_top"><div>
search <input id="searchInput" name="s" type="text" value="" /> in the
<form action="http://www.openclonk.org/header/search.php" id="nav_searchform" method="get" target="_top"><div>
<input id="nav_searchInput" name="s" type="text" value="search" onfocus="if(this.value == 'search') { this.value = ''; }" onblur="if(this.value == '') { this.value = 'search'; }"/> in the
<select name="p">
<option value="blog">blog</option>
<option selected="selected" value="docs">c4script documentation</option>
<option value="bugtrack">bugtracker</option>
<option value="forum">forum</option>
<option value="git">repository</option>
<option value="git-resources">resources repository</option>
<option value="wiki">website</option>
<option value="forum">forum</option>
<option value="docs">documentation</option>
<option value="git">repository</option>
<option value="crucible">crucible</option>
<option value="bugtrack">bugtracker</option>
</select>
<input type='submit' class="nav_searchButton" id="searchButton" value="Go" title="Search" />
<input type='submit' id="nav_searchButton" value="Go" title="Search" />
</div></form>
</div>
<div style="float:right">
<ul>
<li>
<a href="http://docs.openclonk.org/en/sdk/" target="_top"><img src="http://forum.openclonk.org/flags/gb.png"/></a>
</li>
<li>
<a href="http://docs.openclonk.org/de/sdk/" target="_top"><img src="http://forum.openclonk.org/flags/de.png"/></a>
</li>
</ul>
</div>
<ul>
<li><a class="current" href="http://www.openclonk.org/" target="_top">Home</a> <ul>
<li><a href="http://wiki.openclonk.org/w/FAQ" target="_top">FAQ</a></li>
<li><a href="http://wiki.openclonk.org/w/About" target="_top">About</a></li>
</ul>
</li>
<li><!--[if lt IE 9]><span><![endif]--><a href="http://www.openclonk.org/download/" target="_top">Download</a><!--[if lt IE 9]></span><![endif]--> <ul>
<li><a href="http://www.openclonk.org/download/" target="_top">Latest Release</a></li>
<li><a href="http://www.openclonk.org/nightly-builds" target="_top">Development Snapshot</a></li>
<li><a href="http://www.openclonk.org/builds/release/" target="_top">Archive</a></li>
</ul>
</li>
<li><!--[if lt IE 9]><span><![endif]--><a href="http://forum.openclonk.org/" target="_top">Forum</a><!--[if lt IE 9]></span><![endif]--></li>
<li><!--[if lt IE 9]><span><![endif]--><a href="http://wiki.openclonk.org/w/Development" target="_top">Development</a><!--[if lt IE 9]></span><![endif]--> <ul>
<li><a href="http://bugs.openclonk.org" target="_top">Bugtracker</a></li>
<li><a href="http://git.openclonk.org/openclonk.git" target="_top">Repository</a></li>
<li><a href="http://git.openclonk.org/openclonk-resources.git" target="_top">Resource Repository</a></li>
</ul>
</li>
<li><!--[if lt IE 9]><span><![endif]--><a class="current" href="http://wiki.openclonk.org/w/C4Script_Documentation" target="_top">Documentation</a><!--[if lt IE 9]></span><![endif]--> <ul>
<li><a href="http://docs.openclonk.org/en/sdk/" target="_top">C4Script Reference</a></li>
</ul>
</li>
<li><!--[if lt IE 9]><span><![endif]--><a href="http://blog.openclonk.org/" target="_top">Blog</a><!--[if lt IE 9]></span><![endif]--></li>
</ul>
<div style="float:right">
<ul>
<li>
<a href="http://docs.openclonk.org/en/sdk/" target="_top"><img src="http://forum.openclonk.org/flags/gb.png"/></a>
</li>
<li>
<a href="http://docs.openclonk.org/de/sdk/" target="_top"><img src="http://forum.openclonk.org/flags/de.png"/></a>
</li>
</ul>
</div>
<div id="nav_logo">
<a href="http://www.openclonk.org/" target="_top"><img src="http://www.openclonk.org/header/logo.jpg" width="450" height="94" alt="OpenClonk"/></a>
</div>
<div id="nav_navigation">
<div id="nav_links">
<ul>
<li><a href="http://www.openclonk.org/" target="_top">Home</a></li>
<li><a href="http://www.openclonk.org/download/" target="_top">Download</a></li>
<li><a href="http://blog.openclonk.org/" target="_top">Blog</a></li>
<li><a href="http://forum.openclonk.org/" target="_top">Forum</a></li>
<!--<li><a href="http://league.openclonk.org/" target="_top">League</a></li>-->
<li><a href="http://wiki.openclonk.org/w/C4Script_Documentation" target="_top">Docs</a></li>
<li><a href="http://wiki.openclonk.org/w/Development" target="_top">Developers</a></li>
<li><a href="http://git.openclonk.org/openclonk.git" target="_top">Repository</a></li>
<li><a href="http://bugs.openclonk.org" target="_top">Bugs</a></li>
</ul>
</div>
</div>
</div>
</header>

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>

View File

@ -87,6 +87,7 @@
<li><emlink href="scenario/scenario.html">Scenario</emlink></li>
<li><emlink href="scenario/Teams.html">Multiplayer</emlink></li>
<li><emlink href="scenario/MapCreatorS2.html">Map Generator</emlink></li>
<li><emlink href="script/MapScript.html">Map Scripts</emlink></li>
<li><emlink href="scenario/script.html">Scripts</emlink></li>
</ul>
</li>

View File

@ -15,6 +15,11 @@
<col>Data type</col>
<col>Description</col>
</rowh>
<row>
<literal_col>Prototype</literal_col>
<col>proplist</col>
<col>Must be Action. See below in the example.</col>
</row>
<row>
<literal_col>Name</literal_col>
<col>String</col>
@ -43,7 +48,7 @@
<row>
<literal_col>Directions</literal_col>
<col>Integer</col>
<col>Number of animation directions. Animation directions are arranged vertically in Graphics.png.</col>
<col>Number of animation directions. Animation directions are arranged vertically in Graphics.png. Default 1.</col>
</row>
<row>
<literal_col>FlipDir</literal_col>
@ -53,7 +58,7 @@
<row>
<literal_col>Length</literal_col>
<col>Integer</col>
<col>Number of animation phases for this activity (arranged horizontally in Graphics.png)</col>
<col>Number of animation phases for this activity (arranged horizontally in Graphics.png). Default 1.</col>
</row>
<row>
<literal_col>Reverse</literal_col>
@ -65,10 +70,15 @@
<col>Integer</col>
<col>Time difference in frames (ticks) between two animation phases.</col>
</row>
<row>
<literal_col>Step</literal_col>
<col>Integer</col>
<col>How many animation phases the animation should advance after Delay frames. Default 1.</col>
</row>
<row>
<literal_col>Attach</literal_col>
<col>Integer</col>
<col>Attachment to surfaces: <emlink href="definition/cnat.html">CNAT Value</emlink>, e.g. value 8 if the object should attach to the floor like a walking clonk does; or 4 for attachment to the ceiling like a hangling clonk. Only evaluated if the procedure is NONE.</col>
<col>A bitmask for the attachment to surfaces. See <emlink href="definition/cnat.html">CNAT Values</emlink> for a documentation of possible values. Only evaluated if the procedure is NONE.</col>
</row>
<row>
<literal_col>X</literal_col>
@ -90,6 +100,16 @@
<col>Integer</col>
<col>Height of the animation graphic from Graphics.png.</col>
</row>
<row>
<literal_col>OffX</literal_col>
<col>Integer</col>
<col>X-Offset at which to display the animation graphics.</col>
</row>
<row>
<literal_col>OffY</literal_col>
<col>Integer</col>
<col>Y-Offset at which to display the animation graphics.</col>
</row>
<row>
<literal_col>FacetBase</literal_col>
<col>Integer</col>
@ -102,13 +122,13 @@
</row>
<row>
<literal_col>FacetTargetStretch</literal_col>
<col>Boolean</col>
<col>Integer</col>
<col>0 or 1. If 1, the graphics will be stretched down towards the upper border of the ActionTarget. Used e.g. for the elevator line.</col>
</row>
<row>
<literal_col>NextAction</literal_col>
<col>String</col>
<col>Next action being set after the current one has reached its end.</col>
<col>Next action being set after the current one has reached its end. If it is not specified, the action will be kept and the animation phase resets to 0 and the animation begins anew. If it is "Hold", the action will also be kept but stops at the last animation frame. If it is "Idle", the object will have no action after this one.</col>
</row>
<row>
<literal_col>NoOtherAction</literal_col>
@ -117,22 +137,22 @@
</row>
<row>
<literal_col>StartCall</literal_col>
<col>String (max. 30 chars)</col>
<col>String</col>
<col>Object script function which is called when the activity is started.</col>
</row>
<row>
<literal_col>EndCall</literal_col>
<col>String (max. 30 chars)</col>
<col>String</col>
<col>Called when an activity reaches the end of its animation.</col>
</row>
<row>
<literal_col>PhaseCall</literal_col>
<col>String (max. 30 chars)</col>
<col>String</col>
<col>Called whenever the animation phase changes.</col>
</row>
<row>
<literal_col>AbortCall</literal_col>
<col>String (max. 30 chars)</col>
<col>String</col>
<col>Called if an activity is being replaced by another before its regular end; i.e. not by a transition through NextAction. Parameters are the previous animation phase, previous ActionTarget and previous ActionTarget2.</col>
</row>
<row>
@ -142,8 +162,8 @@
</row>
<row>
<literal_col>Sound</literal_col>
<col>String (max. 30 chars)</col>
<col>Permanent sound being played during this action.</col>
<col>String</col>
<col>Permanent sound being played during this action. The same can be achieved with <funclink>Sound</funclink> which is the more flexible solution.</col>
</row>
<row>
<literal_col>ObjectDisabled</literal_col>
@ -158,7 +178,7 @@
<row>
<literal_col>Animation</literal_col>
<col>String</col>
<col>Specifies the animation to be played in the mesh of the object. Works only if the object uses a mesh for its graphics. If given all of Facet, FacetBase, FacetTopFace and FacetTargetStretch are ignored. The Length times Delay possible animation phases are mapped linearly on the animation length. If Delay equals 0 only Length will be used and the animation does not play automatically. See <emlink href="definition/animations.html">Animationen</emlink> for further documentation on animations.</col>
<col>Specifies the animation to be played in the mesh of the object. Works only if the object uses a mesh for its graphics. If given all of Facet, FacetBase, FacetTopFace and FacetTargetStretch are ignored. The Length times Delay possible animation phases are mapped linearly on the animation length. If Delay equals 0 only Length will be used and the animation does not play automatically. See <emlink href="definition/animations.html">Animations</emlink> for further documentation on animations.</col>
</row>
</table>
</text>

View File

@ -7,67 +7,83 @@
<h>Object Categories</h>
<part>
<text>An object's category specifies parts of its behavior. For a definition it is set by the <code id="Category">Category</code> entry in the DefCore.txt file. Multiple categories can be combined using the binary OR operator.</text>
<text>A category also specifies the default plane an object is drawn in if it doesn't specify this property itself. The higher the plane number, the further in the front an object is drawn. See <emlink href="definition/properties.html">Properties</emlink>.</text>
<text>
<table>
<rowh>
<col>Category</col>
<col>Description</col>
<col>Default plane</col>
</rowh>
<row>
<col>C4D_StaticBack</col>
<col>Immovable object.</col>
<col>100</col>
</row>
<row>
<col>C4D_Structure</col>
<col>Unused.</col>
<col>Structures.</col>
<col>200</col>
</row>
<row>
<col>C4D_Vehicle</col>
<col>Unused.</col>
<col>Vehicles.</col>
<col>300</col>
</row>
<row>
<col>C4D_Living</col>
<col>A living being.</col>
<col>400</col>
</row>
<row>
<col>C4D_Object</col>
<col>An item that can hit alive objects.</col>
<col>500</col>
</row>
<row>
<col>C4D_Goal</col>
<col>Game goal.</col>
<col></col>
</row>
<row>
<col>C4D_Environment</col>
<col>Environmental control object.</col>
<col></col>
</row>
<row>
<col>C4D_Rule</col>
<col>Rule control object.</col>
<col></col>
</row>
<row>
<col>C4D_Background</col>
<col>Object is behind the landscape.</col>
<col>Object is behind the landscape. Can be combined with any of the first 5 categories.</col>
<col>-600 (combined with C4D_StaticBack) to -100 (C4D_Object)</col>
</row>
<row>
<col>C4D_Parallax</col>
<col>Object moves parallax according to the Parallaxity property. For more information see <funclink>C4D_Parallax</funclink>.</col>
<col></col>
</row>
<row>
<col>C4D_MouseSelect</col>
<col>Object can be clicked with the mouse, causing a MouseSelection(int player) callback in the object.</col>
<col></col>
</row>
<row>
<col>C4D_Foreground</col>
<col>Object is always in the foreground, even before global particles.</col>
<col>+1100 (combined with C4D_StaticBack) to +1500 (C4D_Object)</col>
</row>
<row>
<col>C4D_MouseIgnore</col>
<col>Object cannot be selected with the mouse.</col>
<col></col>
</row>
<row>
<col>C4D_IgnoreFoW</col>
<col>Object is drawn above fog of war. Useful for creating status displays or gui elements using objects.</col>
<col></col>
</row>
</table>
</text>
@ -80,6 +96,6 @@
</examples>
</part>
<author>Sven2</author><date>2006-05</date>
<author>Newton</author><date>2005-01</date>
<author>Günther</author><date>2005, 2011</date>
<date>2013-11</date>
</doc>

View File

@ -9,57 +9,41 @@
<text>
<table>
<rowh>
<col>Bit</col>
<col>Value</col>
<col>CNAT</col>
<col>Description</col>
</rowh>
<row>
<col>0</col>
<col>1</col>
<col>CNAT_Left</col>
<col>Direction: Left</col>
</row>
<row>
<col>1</col>
<col>2</col>
<col>CNAT_Right</col>
<col>Direction: Right</col>
</row>
<row>
<col>2</col>
<col>4</col>
<col>CNAT_Top</col>
<col>Direction: Up</col>
</row>
<row>
<col>3</col>
<col>8</col>
<col>CNAT_Bottom</col>
<col>Direction: Down</col>
</row>
<row>
<col>4</col>
<col>16</col>
<col>CNAT_Center</col>
<col>Direction: Center (not for attachment)</col>
</row>
<row>
<col>5</col>
<col>32</col>
<col>CNAT_MultiAttach</col>
<col>Special flag: new attachment behaviour for objects with the same direction value at several vertices.</col>
</row>
<row>
<col>6</col>
<col>64</col>
<col>CNAT_NoCollision</col>
<col>Extra flag: non-colliding vertex</col>
</row>
<bitmask>CNAT</bitmask>
</table>
</text>
<author>Sven2</author><date>2002-04</date>
<author>Newton &amp; Günther</author><date>2005-01</date>
<author>Matthes</author><date>2005-08</date>
<text>A vertex can have multiple CNAT values, they can be combined them with the | operator. Example:</text>
<code>Attach = CNAT_Bottom | CNAT_Left</code>
<author>Newton</author><date>2013-11</date>
</doc>

View File

@ -25,21 +25,16 @@
<col>3 Integers</col>
<col>Minimal engine version required by the object. Should be always the current engine version at the time of the last change.</col>
</row>
<row>
<literal_col>Name</literal_col>
<col>String (max. 30 chars)</col>
<col>Name of the object. Will be overwritten by the applicable one in the Names.txt.</col>
</row>
<row>
<literal_col>RequireDef</literal_col>
<col>Definition IDs</col>
<col>List of definition IDs this object depends upon.</col>
</row>
<row>
<literal_col>Category</literal_col>
<col>Integer</col>
<col>Category of the object. Also see <emlink href="definition/category.html">object categories</emlink>.</col>
</row>
<row>
<literal_col>MaxUserSelect</literal_col>
<col>Integer</col>
<col>Maximal allowed count when placed in the menu system.</col>
</row>
<row>
<literal_col>ContactCalls</literal_col>
<col>Integer</col>
@ -78,7 +73,7 @@
<row>
<literal_col>SolidMask</literal_col>
<col>6 integers</col>
<col>Solid areas of the object. Target rectangle from the source graphics onto the object.</col>
<col>Solid areas of the object. Target rectangle from the <emlink href="definition/index.html#SolidMask">SolidMask.png</emlink> graphics onto the object.</col>
</row>
<row>
<literal_col>TopFace</literal_col>
@ -135,11 +130,6 @@
<col>Integer</col>
<col>0 or 1. Determines whether the object blocks objects behind it.</col>
</row>
<row>
<literal_col>Base</literal_col>
<col>Integer</col>
<col>0 or 1. Determines whether the building can be a home base.</col>
</row>
<row>
<literal_col>Line</literal_col>
<col>Integer</col>
@ -150,16 +140,6 @@
<col>Integer</col>
<col>0 or 1. If 1, the object is added to the player's crew upon purchase. Objects created using CreateObject have to be added to a player's crew manually using <emlink href="script/fn/MakeCrewMember">MakeCrewMember</emlink>.</col>
</row>
<row>
<literal_col>Growth</literal_col>
<col>Integer</col>
<col>Growth of the object. Trees 1-4, living beings 15.</col>
</row>
<row>
<literal_col>Rebuy</literal_col>
<col>Integer</col>
<col>0 or 1. Determines whether the object can be bought back after selling it.</col>
</row>
<row>
<literal_col>Construction</literal_col>
<col>Integer</col>
@ -170,31 +150,16 @@
<col>C4ID</col>
<col>Definition change upon building.</col>
</row>
<row>
<literal_col>Grab</literal_col>
<col>Integer</col>
<col>0 no grabbing, 1 grab and push, 2 grab only.</col>
</row>
<row>
<literal_col>GrabPutGet</literal_col>
<col>Integer</col>
<col>Bit mask: bit 0 (value 1) putting possible, bit 1 (value 2) getting possible.</col>
</row>
<row>
<literal_col>Collectible</literal_col>
<col>Integer</col>
<col>0 or 1. Determines whether the object can be collected.</col>
</row>
<row>
<literal_col>Rotate</literal_col>
<col>Integer</col>
<col>0 no rotation, 1 full rotation, 2-360 limited rotation.</col>
</row>
<row>
<literal_col>Chop</literal_col>
<col>Integer</col>
<col>0 or 1. Determines whether the object can be chopped.</col>
</row>
<row>
<literal_col>Float</literal_col>
<col>Integer</col>
@ -210,11 +175,6 @@
<col>Integer</col>
<col>0 or 1. If 1, the specified sections of the object's graphcis are colored by the player color.</col>
</row>
<row>
<literal_col>ColorByMaterial</literal_col>
<col>String (max. 15)</col>
<col>The object is colored by the color of the specified material.</col>
</row>
<row>
<literal_col>HorizontalFix</literal_col>
<col>Integer</col>
@ -235,11 +195,6 @@
<col>Integer</col>
<col>0 or 1. If 1, the uncomplete object (see <emlink href="script/fn/GetCon.html">GetCon</emlink>) is scaled, not sliced from the bottom like a construction site.</col>
</row>
<row>
<literal_col>Basement</literal_col>
<col>Integer</col>
<col>0 no basement, 1 normal basement, other values reserved.</col>
</row>
<row>
<literal_col>IncompleteActivity</literal_col>
<col>Integer</col>
@ -303,7 +258,7 @@
<row>
<literal_col>BlitMode</literal_col>
<col>Integer</col>
<col>0 or 1. Value 1 for addtive drawing.</col>
<col>0 or 1. Value 1 for addtive drawing. Use <funclink>SetObjectBlitMode</funclink> for more flexibility.</col>
</row>
<row>
<literal_col>NoBreath</literal_col>
@ -315,11 +270,6 @@
<col>Integer</col>
<col>Values grater than 0 are deducted from the top of necessary construction space.</col>
</row>
<row>
<literal_col>NoSell</literal_col>
<col>Integer</col>
<col>0 or 1. If 1 the object can not be sold.</col>
</row>
<row>
<literal_col>NoGet</literal_col>
<col>Integer</col>
@ -345,115 +295,8 @@
<col>Integer</col>
<col>0 or 1. If 1 the object's pathfinding will ignore any transfer zones.</col>
</row>
<row>
<literal_col>AutoContextMenu</literal_col>
<col>Integer</col>
<col>0 or 1. If 1, the building's context menu will open automatically upon entry.</col>
</row>
</table>
</text>
<text>
<table>
<caption id="SektionPhysical">Section [Physical]</caption>
<rowh>
<col>Value</col>
<col>Data type</col>
<col>Description</col>
</rowh>
<row>
<literal_col>Energy</literal_col>
<col>Integer</col>
<col>0-100000. Maximum life energy.</col>
</row>
<row>
<literal_col>Breath</literal_col>
<col>Integer</col>
<col>0-100000. Maximum breath.</col>
</row>
<row>
<literal_col>Walk</literal_col>
<col>Integer</col>
<col>0-100000. Walking speed.</col>
</row>
<row>
<literal_col>Jump</literal_col>
<col>Integer</col>
<col>0-100000. Jump force.</col>
</row>
<row>
<literal_col>Scale</literal_col>
<col>Integer</col>
<col>0-100000. Scaling speed.</col>
</row>
<row>
<literal_col>Hangle</literal_col>
<col>Integer</col>
<col>0-100000. Hangling speed.</col>
</row>
<row>
<literal_col>Dig</literal_col>
<col>Integer</col>
<col>0-100000. Digging speed.</col>
</row>
<row>
<literal_col>Swim</literal_col>
<col>Integer</col>
<col>0-100000. Swimming speed.</col>
</row>
<row>
<literal_col>Throw</literal_col>
<col>Integer</col>
<col>0-100000. Throwing force.</col>
</row>
<row>
<literal_col>Push</literal_col>
<col>Integer</col>
<col>0-100000. Push power.</col>
</row>
<row>
<literal_col>Magic</literal_col>
<col>Integer</col>
<col>0-100000. Maximal magic energy.</col>
</row>
<row>
<literal_col>Float</literal_col>
<col>Integer</col>
<col>0-100. Flight speed.</col>
</row>
<row>
<literal_col>CanScale</literal_col>
<col>Integer</col>
<col>0 or 1. Scale.</col>
</row>
<row>
<literal_col>CanHangle</literal_col>
<col>Integer</col>
<col>0 or 1. Brachiation.</col>
</row>
<row>
<literal_col>CanDig</literal_col>
<col>Integer</col>
<col>0 or 1. Dig.</col>
</row>
<row>
<literal_col>CanConstruct</literal_col>
<col>Integer</col>
<col>0 or 1. Construct. If greater than 1, percentage construction speed. (100 normal, 50 half, etc.)</col>
</row>
<row>
<literal_col>CorrosionResist</literal_col>
<col>Integer</col>
<col>0 or 1. Determines wether the object resists acid.</col>
</row>
<row>
<literal_col>BreatheWater</literal_col>
<col>Integer</col>
<col>0 object breathes air, 1 object breathes water.</col>
</row>
</table>
</text>
<h>Note:</h>
<text>When a crew member is created, it gets an own physical section in it's Objectinfo (oci). In there, the individual changes to the physicals (for example because of training) are saved and restored when an object enters a player's crew. The physical section of the defcore is only used for new crew members and normal objects.</text>
</part>
<author>Sven2</author><date>2002-04</date>
<author>Newton</author><date>2013-11</date>
</doc>

View File

@ -38,6 +38,10 @@
<dt id="Graphicsex"><img height="16" src="../../images/icon_image.png" width="16"/>Graphics*.png/Overlay*.png</dt>
<dd>
<text>Objects can also contain alternative sets of graphics which can be selected ingame using the script command <funclink>SetGraphics</funclink>(). The name corresponds to the file name portion following "Graphics". The matching overlay is automatically selected. For more information see <funclink>SetGraphics</funclink>().</text>
</dd>
<dt id="SolidMask"><img height="16" src="../../images/icon_image.png" width="16"/>SolidMask.png</dt>
<dd>
<text>Image describing areas in this object that are solid, so vertices of other objects will collide with it. Pixels are made solid if they are 50% or less transparent in this image. Source rectangle within this graphic and target position on the object must be set in <emlink href="definition/defcore.html">DefCore.txt</emlink> property "SolidMask" or using the script function <funclink>SetSolidMask</funclink>.</text>
</dd>
</dl>
<h id="MeshGraphics">3D Graphics</h>

View File

@ -21,91 +21,91 @@
<col>Action.Attach</col>
</row>
<row id="WALK">
<col>WALK</col>
<col>DFA_WALK</col>
<col>Walking</col>
<col>According to current <emlink href="script/fn/SetComDir.html">ComDir</emlink>.</col>
<col>CNAT_Bottom</col>
</row>
<row id="FLIGHT">
<col>FLIGHT</col>
<col>DFA_FLIGHT</col>
<col>Free fall</col>
<col>Only gravitational effects</col>
<col>CNAT_None</col>
</row>
<row id="KNEEL">
<col>KNEEL</col>
<col>DFA_KNEEL</col>
<col>Getting up</col>
<col>Behaviour according to <emlink href="definition/actmap.html">activity</emlink>.</col>
<col>CNAT_Bottom</col>
</row>
<row id="SCALE">
<col>SCALE</col>
<col>DFA_SCALE</col>
<col>Scaling a wall</col>
<col>According to current <emlink href="script/fn/SetComDir.html">ComDir</emlink>.</col>
<col>CNAT_Left/Right</col>
</row>
<row id="HANGLE">
<col>HANGLE</col>
<col>DFA_HANGLE</col>
<col>Climbing on the ceiling</col>
<col>According to current <emlink href="script/fn/SetComDir.html">ComDir</emlink>.</col>
<col>CNAT_Top</col>
</row>
<row id="DIG">
<col>DIG</col>
<col>DFA_DIG</col>
<col>Dig</col>
<col>According to current <emlink href="script/fn/SetComDir.html">ComDir</emlink>. With <emlink href="script/fn/SetActionData.html">Data</emlink>=1 material chunks are dug free.</col>
<col>CNAT_None</col>
</row>
<row id="SWIM">
<col>SWIM</col>
<col>DFA_SWIM</col>
<col>Swimming</col>
<col>According to current <emlink href="script/fn/SetComDir.html">ComDir</emlink>.</col>
<col>CNAT_None</col>
</row>
<row id="THROW">
<col>THROW</col>
<col>DFA_THROW</col>
<col>Throw</col>
<col>Behaviour according to <emlink href="definition/actmap.html">activity</emlink>.</col>
<col>CNAT_Bottom</col>
</row>
<row id="BRIDGE">
<col>BRIDGE</col>
<col>DFA_BRIDGE</col>
<col>Bridge building</col>
<col>According to <emlink href="script/fn/SetComDir.html">ComDir</emlink>. Bridge material is a material number in <emlink href="script/fn/SetActionData.html">Data</emlink>.</col>
<col>CNAT_Bottom</col>
</row>
<row id="PUSH">
<col>PUSH</col>
<col>DFA_PUSH</col>
<col>Pushing</col>
<col>Pushes the <emlink href="script/fn/SetAction.html">target object </emlink> according to <emlink href="script/fn/SetComDir.html">ComDir</emlink>.</col>
<col>CNAT_Bottom</col>
</row>
<row id="LIFT">
<col>LIFT</col>
<col>DFA_LIFT</col>
<col>Lifting</col>
<col>Lifts the <emlink href="script/fn/SetAction.html">target object</emlink> according to <emlink href="script/fn/SetComDir.html">ComDir</emlink>.</col>
<col>CNAT_None</col>
</row>
<row id="FLOAT">
<col>FLOAT</col>
<col>DFA_FLOAT</col>
<col>Floating in mid-air</col>
<col>According to current <emlink href="script/fn/SetComDir.html">ComDir</emlink>.</col>
<col>CNAT_None</col>
</row>
<row id="ATTACH">
<col>ATTACH</col>
<col>DFA_ATTACH</col>
<col>Attachment to another object</col>
<col>Adjusts object position at vertex a to the position of vertex b of the <emlink href="script/fn/SetAction.html">target object</emlink>. a and b are the two low bytes of <emlink href="script/fn/SetActionData.html">ActionData</emlink> (see <emlink href="script/fn/SetActionData.html">SetActionData</emlink> for an example).</col>
<col>CNAT_None</col>
</row>
<row id="CONNECT">
<col>CONNECT</col>
<col>DFA_CONNECT</col>
<col>Line connections</col>
<col>Only <emlink href="definition/lineconnect.html">line objects</emlink>. Connects <emlink href="script/fn/SetAction.html">target object 1</emlink> and <emlink href="script/fn/SetAction.html">target object 2</emlink>. If property LineMaxDistance is a nonzero integer, the line breaks when the target objects are further apart than the given distance.</col>
<col>CNAT_None</col>
</row>
<row id="PULL">
<col>PULL</col>
<col>DFA_PULL</col>
<col>Pulling</col>
<col>Pulls the <emlink href="script/fn/SetAction.html">target object</emlink> according to <emlink href="script/fn/SetComDir.html">ComDir</emlink>.</col>
<col>CNAT_Bottom</col>

View File

@ -33,22 +33,22 @@ Stand = {
<row>
<col><code>Name</code></col>
<col>string</col>
<col></col>
<col>Name of the object. This string should be <emlink href="lang.html">internationalized</emlink>.</col>
</row>
<row>
<col><code>Collectible</code></col>
<col></col>
<col></col>
<col>bool</col>
<col>Whether the object can be picked up.</col>
</row>
<row>
<col><code>Touchable</code></col>
<col></col>
<col></col>
<col>int</col>
<col>1 the object can be grabbed, 2 the object can be grabbed and pushed</col>
</row>
<row>
<col><code>ActMap</code></col>
<col>proplist</col>
<col></col>
<col>See the <emlink href="definition/actmap.html">detailed description of the ActMap</emlink></col>
</row>
<row>
<col><code>Visibility</code></col>
@ -57,68 +57,73 @@ Stand = {
</row>
<row>
<col><code>LineColors</code></col>
<col></col>
<col></col>
<col>array</col>
<col>An array of two integers. The first denotes the color of the line and the second the color of the endpoints if the object is drawn as a line.</col>
</row>
<row>
<col><code>LineAttach</code></col>
<col></col>
<col></col>
</row>
<col>array</col>
<col>An array of two integers. Denotes the position of where the endpoint of the line is located relative to the object center.</col>
</row>
<row>
<col><code>PictureTransformation</code></col>
<col></col>
<col></col>
<col>array</col>
<col>If the object is a mesh, the picture graphic of the object can be transformed with this property. See <funclink>Trans_Mul</funclink> for an example.</col>
</row>
<row>
<col><code>MeshTransformation</code></col>
<col></col>
<col></col>
</row>
<row>
<col><code>MouseDragImage</code></col>
<col></col>
<col></col>
<col>array</col>
<col>If the object is a mesh, the ingame graphic of the object can be transformed with this property. See <funclink>Trans_Mul</funclink> for an example.</col>
</row>
<row>
<col><code>MouseDrag</code></col>
<col></col>
<col></col>
<col>bool</col>
<col>Whether the object can be dragged with the mouse. What exactly happens when an object is dragged onto another is defined in script.</col>
</row>
<row>
<col><code>Animation</code></col>
<col></col>
<col></col>
<col><code>MouseDragImage</code></col>
<col>id / object</col>
<col>The object or object id of which the picture should be displayed below the cursor while dragging.</col>
</row>
<row>
<col><code>Tooltip</code></col>
<col>string</col>
<col>A tooltip that is displayed for objects of the category <emlink href="definition/category.html">C4D_MouseSelect</emlink>. This string should be <emlink href="lang.html">internationalized</emlink>.</col>
</row>
<row>
<col><code>Action</code></col>
<col>proplist</col>
<col></col>
<col>The current action of the object as a proplist.</col>
</row>
<row>
<col><code>BreatheWater</code></col>
<col></col>
<col></col>
<col>bool</col>
<col>Whether the object breathes in water rather than air.</col>
</row>
<row>
<col><code>CorrosionResist</code></col>
<col></col>
<col></col>
<col>bool</col>
<col>Whether the alive object does not loose energy when in corrosive material.</col>
</row>
<row>
<col><code>MaxEnergy</code></col>
<col>int</col>
<col></col>
<col>Maximum life energy in a precision of 100.</col>
</row>
<row>
<col><code>MaxBreath</code></col>
<col>int</col>
<col></col>
<col>Maximum breath.</col>
</row>
<row>
<col><code>ThrowSpeed</code></col>
<col>int</col>
<col></col>
<col>Throwing speed in a precision of 100.</col>
</row>
<row>
<col><code>JumpSpeed</code></col>
<col>int</col>
<col>Jump speed in a precision of 100.</col>
</row>
<row id="Parallaxity">
<col><code>Parallaxity</code></col>
@ -138,7 +143,7 @@ Stand = {
<row>
<literal_col>BlastIncinerate</literal_col>
<col>Integer</col>
<col>Incineration by explosion: 0 none, otherwise the damage level of incineration.</col>
<col>Incineration by explosion: 0 none, otherwise the damage level that has to be reached until the object is incinerated. </col>
</row>
<row>
<literal_col>BurnTo</literal_col>

View File

@ -143,8 +143,8 @@
<col>object obj, int x, int y</col>
<col>When an object (obj) using the internal pathfinding algorithm is trying to pass the transfer zone of this object on its way to point x/y. The transfer function can then help the object along by giving special script commands and returning <code>true</code>. Also see <emlink href="script/fn/SetTransferZone.html">SetTransferZone</emlink>().</col>
</row>
<row id="UpdateTransferZone">
<literal_col>UpdateTransferZone</literal_col>
<row id="OnSynchronized">
<literal_col>OnSynchronized</literal_col>
<col></col>
<col>When an object is loaded from a savegame or network synchronization is performed. Objects with a transfer zone should reset the zone in this call. Also see <emlink href="script/fn/SetTransferZone.html">SetTransferZone</emlink>().</col>
</row>
@ -333,12 +333,201 @@
<col></col>
<col>When object is deselected in editor. Use this callback to hide any information previously shown in EditCursorSelection.</col>
</row>
<row id="SaveScenarioObject">
<literal_col>SaveScenarioObject</literal_col>
<col>proplist props</col>
<col>Called when scenario is saved from the editor. Object should write creation of itself and properties to the buffer props. Return true if the object should be saved and false if saving of this object should be omitted. See <emlink href="definition/script.html#ScenSave">Scenario saving</emlink>.</col>
</row>
</table>
</text>
<h id="ScenSave">Scenario saving</h> <part>
<text>When the user chooses the "Save Scenario" option from the editor menu, the engine calls a global function SaveScenarioObjects defined in System.ocg/SaveScenario.c. This function writes all objects to the Objects.c file in their current state. The function stores all objects except the crew of currently joined human players and objects of a type that starts with GUI_. By default, objects are recreated using a call to <funclink>CreateObject</funclink> followed by setting a number of default properties like position, rotation, speed, action, if they are not in their default state.</text>
<text>For most object, the default saving method should be fine. However, it is possible to override the SaveScenarioObject callback to control how objects are created and which properties are set.</text>
<text>For example if a switch wants to save its target which is stored in a local variable called "target", the switch definition can override the callback:</text>
<code>local target;
func SetTarget(object new_target) { target = new_target; return true; }
func SaveScenarioObject(props)
{
if (!inherited(props, ...)) return false;
if (target) props->AddCall("Target", this, "SetTarget", target);
return true;
}</code>
<text>As a result, the generated Objects.c file will include the call to SetTarget if the switch is saved. Dependent objects should always either be passed to the AddCall function or stored as a string from the <funclink>MakeScenarioSaveName</funclink> function. If this is done, that object is marked as a dependency. The saving mechanism will ensure that any object this object depends on will be created before. In case of circular dependencies, the object property setting script is detached from object creation script.</text>
<text>If an object should not be saved in scenarios - for example, because it is just the helper of another object - the SaveScenarioObject callback should be overloaded to return false.</text>
<text>The object creation procedure can also be adjusted. For example, the waterfall object (defined in Objects.ocd/Environment.ocd/Waterfall.ocd) is created using the global functions CreateWaterfall and CreateLiquidDrain, which create a Waterfall object and attach an effect to it. To generate the creation functions from the effects, the waterfall overrides SaveScenarioObject:</text>
<code>func SaveScenarioObject(props)
{
if (!inherited(props, ...)) return false;
var fx_waterfall = GetEffect("IntWaterfall", this);
if (fx_waterfall)
{
props->RemoveCreation();
props->Add(SAVEOBJ_Creation, "CreateWaterfall(%d,%d,%d,%v)",fx_waterfall.X, fx_waterfall.Y, fx_waterfall.Strength, fx_waterfall.Material);
}
return true;
}</code>
<text>The call to RemoveCreation removes the existing object creation using <funclink>CreateObject</funclink>.</text>
<text>If you need access to one of the objects created in the editor, you can set its "StaticSaveVar" property to the name of a static variable. The InitializeObjects() function will then save the object in that variable.</text>
<text>The following table lists standard properties that are saved if their value is different from the default and if it is not removed using a props->Remove call.
<table>
<rowh>
<col>Property name</col>
<col>Default value</col>
<col>Description</col>
</rowh>
<row id="defprops_Alive">
<literal_col>Alive</literal_col>
<col>true</col>
<col>Category C4D_Living only: If object is not alive, a call to SetKill is stored. See <funclink>GetAlive</funclink> and <funclink>Kill</funclink>.</col>
</row>
<row id="defprops_Action">
<literal_col>Action</literal_col>
<col>this.DefaultAction</col>
<col>Action as retrieved using <funclink>GetAction</funclink> and set using <funclink>SetAction</funclink>. Includes ActionTargets. Not stored by default but only if <funclink>SaveScenarioObjectAction</funclink> is called.</col>
</row>
<row id="defprops_Phase">
<literal_col>Phase</literal_col>
<col>0</col>
<col>Action phase (see <funclink>GetPhase</funclink> and <funclink>SetPhase</funclink>). Not stored by default but only if <funclink>SaveScenarioObjectAction</funclink> is called.</col>
</row>
<row id="defprops_Dir">
<literal_col>Dir</literal_col>
<col>DIR_Left</col>
<col>Animation direction (see <funclink>GetDir</funclink> and <funclink>SetDir</funclink>)</col>
</row>
<row id="defprops_ComDir">
<literal_col>ComDir</literal_col>
<col>COMD_Stop</col>
<col>Commanded movement direction (see <funclink>GetComDir</funclink> and <funclink>SetComDir</funclink>)</col>
</row>
<row id="defprops_Con">
<literal_col>Con</literal_col>
<col>100</col>
<col>Construction percentage, i.e. object size (see <funclink>GetCon</funclink> and <funclink>SetCon</funclink>)</col>
</row>
<row id="defprops_Category">
<literal_col>Category</literal_col>
<col>GetID()->GetCategory()</col>
<col>Object category (see <funclink>GetCategory</funclink> and <funclink>SetCategory</funclink>)</col>
</row>
<row id="defprops_R">
<literal_col>R</literal_col>
<col>0</col>
<col>Rotation (see <funclink>GetR</funclink> and <funclink>SetR</funclink>)</col>
</row>
<row id="defprops_XDir">
<literal_col>XDir</literal_col>
<col>0</col>
<col>Horizontal speed (see <funclink>GetXDir</funclink> and <funclink>SetXDir</funclink>)</col>
</row>
<row id="defprops_YDir">
<literal_col>YDir</literal_col>
<col>0</col>
<col>Vertical speed (see <funclink>GetYDir</funclink> and <funclink>SetYDir</funclink>). Vertical speed is not saved it is very small and the object touches the ground to avoid saving of speed on idle objects.</col>
</row>
<row id="defprops_RDir">
<literal_col>RDir</literal_col>
<col>0</col>
<col>Rotation speed (see <funclink>GetRDir</funclink> and <funclink>SetRDir</funclink>)</col>
</row>
<row id="defprops_Color">
<literal_col>Color</literal_col>
<col>0, 0xffffffff</col>
<col>Object color of ColorByOwner-surfaces (see <funclink>GetColo</funclink> and <funclink>SetColor</funclink>)</col>
</row>
<row id="defprops_ClrModulation">
<literal_col>ClrModulation</literal_col>
<col>0, 0xffffffff</col>
<col>Object color modulation of all surfaces (see <funclink>GetClrModulation</funclink> and <funclink>SetClrModulation</funclink>)</col>
</row>
<row id="defprops_BlitMode">
<literal_col>BlitMode</literal_col>
<col>0</col>
<col>Object drawing mode (see <funclink>GetObjectBlitMode</funclink> and <funclink>SetObjectBlitMode</funclink>)</col>
</row>
<row id="defprops_Name">
<literal_col>Name</literal_col>
<col>GetID()->GetName()</col>
<col>Object name (see <funclink>GetName</funclink> and <funclink>SetName</funclink>)</col>
</row>
<row id="defprops_MaxEnergy">
<literal_col>MaxEnergy</literal_col>
<col>GetID().MaxEnergy</col>
<col>Maximum energy (see <emlink href="definition/properties.html">Properties</emlink>)</col>
</row>
<row id="defprops_Energy">
<literal_col>Energy</literal_col>
<col>GetID().MaxEnergy/1000</col>
<col>Current energy level (see <funclink>GetEnergy</funclink> and <funclink>DoEnergy</funclink>)</col>
</row>
<row id="defprops_Visibility">
<literal_col>Visibility</literal_col>
<col>VIS_All</col>
<col>Object visibility (see <emlink href="definition/properties.html">Properties</emlink>)</col>
</row>
<row id="defprops_Plane">
<literal_col>Plane</literal_col>
<col>GetID().Plane</col>
<col>Object plane, i.e. z-order (see <emlink href="definition/properties.html">Properties</emlink>)</col>
</row>
<row id="defprops_Position">
<literal_col>Position</literal_col>
<col></col>
<col>Object position. This is only set if the object has a rotation and could not be created directly at the correct offset (see <funclink>SetPosition</funclink>)</col>
</row>
<row id="defprops_Commands">
<literal_col>Command</literal_col>
<col>None</col>
<col>Stores only the topmost command of the chain (see <funclink>GetCommand</funclink> and <funclink>SetCommand</funclink>)</col>
</row>
<row id="defprops_Fire">
<literal_col>Fire</literal_col>
<col></col>
<col>Fire effect.</col>
</row>
</table>
</text>
<text>By default, effects are not saved in scenarios. To force saving of an effect, define the Fx*SaveScen callback. For example, the fire effect saves itself like this:</text>
<code>global func FxFireSaveScen(object obj, proplist fx, proplist props)
{
// this is burning. Save incineration to scenario.
props->AddCall("Fire", obj, "Incinerate", fx.strength, fx.caused_by, fx.blasted, fx.incinerating_object);
return true;
}</code>
<text>obj and fx refer to the object and effect proplist as for any effect call. save_name is the variable name of the effected object and is unset for global effects.</text>
<h id="ScenSave">Scenario saving reference</h>
<text>The following functions are available to call on the "props" parameter passed to SaveScenarioObject callbacks:</text>
<h>AddCall</h>
<text><code>bool AddCall(string id, object target, string function, any par1, any par2, ...);</code></text>
<text>Adds a new call of format target->Function(par1, par2, ...) to the stored object script. Object parameters may be passed as is; strings must be quoted explicitely.</text>
<text>The id parameter is an identifier which can be used by derived objects to remove the property again.</text>
<h>Add</h>
<text><code>bool AddCall(string id, string script, any par1, any par2, ...);</code></text>
<text>Adds a custom script snippet of any format. script may contain format characters and parameters are formatted into the string using <funclink>Format</funclink>().</text>
<h>Remove</h>
<text><code>int Remove(string id);</code></text>
<text>Remove all strings added previously using AddCall or Add with the given ID. Can also be used to remove default properties. Returns number of script lines removed.</text>
<h>RemoveCreation</h>
<text><code>bool RemoveCreation();</code></text>
<text>Remove all strings added previously using with IDs SAVEOBJ_Creation or SAVEOBJ_ContentsCreation.</text>
<h>Clear</h>
<text><code>bool Clear();</code></text>
<text>Remove all creation and property setting strings.</text>
</part>
</part>
<author>sulai</author><date>2003-11</date>
<author>Sven2</author><date>2004-02</date>
<author>matthes</author><date>2004-07</date>
<author>Clonkonaut</author><date>2008-04</date>
<author>Sven2</author><date>2013-12</date>
</doc>

View File

@ -23,7 +23,7 @@
<row>
<col>ColorAnimation</col>
<col>Integer</col>
<col>0 oder 1. Color animation.</col>
<col>0 or 1. Color animation.</col>
</row>
<row>
<col>Shape</col>
@ -33,7 +33,7 @@
<row>
<col>Density</col>
<col>Integer</col>
<col>Density: 50 solid, 25 liquid (other values not allowed).</col>
<col>A density of 25 and above is liquid. 50 and above is solid. <funclink>BlastFree</funclink> offers a parameter to only blast solid materials of a given density or lower.</col>
</row>
<row>
<col>Friction</col>
@ -43,12 +43,12 @@
<row>
<col>DigFree</col>
<col>Integer</col>
<col>0 oder 1. Determines wether the material can be dug into.</col>
<col>0 or 1. Determines wether the material can be dug into.</col>
</row>
<row>
<col>BlastFree</col>
<col>Integer</col>
<col>0 oder 1. Determines whether the material can be blasted away.</col>
<col>0 or 1. Determines whether the material can be blasted away.</col>
</row>
<row>
<col>Blast2Object</col>
@ -83,7 +83,7 @@
<row>
<col>Instable</col>
<col>Integer</col>
<col>0 oder 1. Stability.</col>
<col>0 or 1. Stability.</col>
</row>
<row>
<col>MaxAirSpeed</col>

View File

@ -7,7 +7,7 @@
<h>Particle</h>
<part>
<text>Particles are lightweight objects which are not synchronized in a network game. This means that on the one hand you can create huge amounts of particles without slowing down the game too much but on the other hand there are only limited options for control of particle behaviour. If the particles are not sufficient for a given effect you have in mind, you can always use true objects instead.</text>
<text>If a particle is defined in a ocd group, any object definition located in the same group is ignored. This used to be a way to allow loading of placeholder options in the old graphics system which didn't support particles.</text>
<text>If a particle is defined in a ocd group, any object definition located in the same group is ignored.</text>
<text>Particles are not stored in savegames and are designed for temporary visual effects only.</text>
<h id="PartikelKomponentenOCD">Particle Components (ocd)</h>
<dl>
@ -34,190 +34,120 @@
<row>
<col>Name</col>
<col>String (max. 30 chars)</col>
<col>Name of the particle definition. This name is also used to refer to this particle type in scripts. For multi-language display in the menu system you should use the Names.txt component.</col>
</row>
<row>
<col>MaxCount</col>
<col>Integer</col>
<col>Maximum number of instances of this particle type. See <a href="#maxcount">instance control</a>.</col>
</row>
<row>
<col>MinLifetime</col>
<col>Integer</col>
<col>Only for smoke particles: lower limit for the lifetime, which ranges from MinLifetime to MaxLifetime.</col>
</row>
<row>
<col>MaxLifetime</col>
<col>Integer</col>
<col>Only for smoke particles: upper limit for the lifetime, which ranges from MinLifetime to MaxLifetime.</col>
</row>
<row>
<col>InitFn</col>
<col>String (max. 30 chars)</col>
<col>Identifier for the function used to initialize the particle. For valid functions see section <a href="#funcs">particle functions</a>.</col>
</row>
<row>
<col>ExecFn</col>
<col>String (max. 30 chars)</col>
<col>Identifier for the function used to execute the particle each frame. For valid functions see section <a href="#funcs">particle functions</a>.</col>
</row>
<row>
<col>DrawFn</col>
<col>String (max. 30 chars)</col>
<col>Identifier for the function used to draw the particle. For valid functions see section <a href="#drawfuncs">drawing functions</a>.</col>
</row>
<row>
<col>CollisionFn</col>
<col>String (max. 30 chars)</col>
<col>Identifier for the function called upon collision with the landscape. Also see <a href="#collision">collision checking</a>.</col>
<col>Name of the particle definition. This name is also used to refer to this particle type in scripts.</col>
</row>
<row>
<col>Face</col>
<col>6 integers</col>
<col>4 integers</col>
<col>Target rectangle for the graphics within Graphics.png. See <a href="#face">particle graphics</a>.</col>
</row>
<row>
<col>YOff</col>
<col>Integer</col>
<col>Upper spatial limit for the particle. At this limit the particles will be deleted as if the landscape would end here. Only StdExec.</col>
</row>
<row>
<col>Delay</col>
<col>Integer</col>
<col>Delay between two animation phases. If Delay = 0 one randomly chosen phase is permanently displayed.</col>
</row>
<row>
<col>Repeats</col>
<col>Integer</col>
<col>Number of animation runs until the particle is destroyed.</col>
</row>
<row>
<col>Reverse</col>
<col>Integer</col>
<col>0 or 1. If 1 every seconds animation is played backwards.</col>
</row>
<row>
<col>FadeOutLen</col>
<col>Integer</col>
<col>If specified, this number of animation phases is truncated from the end and reserved for a death animation which is displayed after all repetitions of the standard animation.</col>
</row>
<row>
<col>FadeOutDelay</col>
<col>Integer</col>
<col>Delay between two animation phases of the death animation.</col>
</row>
<row>
<col>RByV</col>
<col>Integer</col>
<col>0 to 3. 0 for no particle rotation. If 1 the particle will be aligned to its direction of travel; the particle's up-side will be in front. If 2 the speed parameters only determine rotation; the particle will not move. If 3 a random rotation is applied.</col>
</row>
<row>
<col>GravityAcc</col>
<col>Integer</col>
<col>Effects of gravity. At 0 the particle is not affected by gravity, at 100 it is fully affected. Negative values are also possible.</col>
</row>
<row>
<col>WindDrift</col>
<col>Integer</col>
<col>Horizontal drift by wind. Same as the material property of the same name.</col>
</row>
<row>
<col>VertexCount</col>
<col>Integer</col>
<col>0 or 1. If 1, <a href="#collision">collision detection</a> is done.</col>
</row>
<row>
<col>VertexY</col>
<col>Integer</col>
<col>Y offset of the collision checking point in percent. Also see <a href="#collision">collision detection</a>.</col>
</row>
<row>
<col>Additive</col>
<col>Integer</col>
<col>0 or 1. If 1, the particle is drawn additively.</col>
</row>
<row>
<col>AlphaFade</col>
<col>Integer</col>
<col>0 to 40. Rate of fade out per FadeDelay. A fully faded particle is removed.</col>
</row>
<row>
<col>FadeDelay</col>
<col>Integer</col>
<col>The default is 1.</col>
</row>
<row>
<col>Parallaxity</col>
<col>2 Integer</col>
<col>Parallaxity in x and y directions. 0 is locked with the viewport; 100 is default (locked with the landscape).</col>
</row>
<row>
<col>Attach</col>
<col>Integer</col>
<col>0 or 1. If 1 the particle is moving relative to its target object's position.</col>
</row>
</table>
</text>
<h id="attributes">Properties</h>
<text>Each particle has a position (x, y), horizontal and vertical impulse (xdir and ydir), life time (life), and two extra parameters (a and b). These are initialized by script and then processed by the <a href="#funcs">particle functions</a>. For more information see <a href="#funcs">particle functions</a> and <a href="#drawfuncs">drawing functions</a>.</text>
<h id="face">Graphics</h>
<text>The coordinates for the source rectangle within Graphics.png of a particle are comparable to the Face entry in an object's <emlink href="definition/actmap.html">ActMap</emlink>. The coordinates only specify the first animation phase. All following animation phases should be located on the right (with smoke also below) of the initial phase. The animation length is then automatically determined from the image size. For the drawing offset you should usually specify half the particle size. An offset 0/0 would cause the particle graphics to be drawn below actual particle position.</text>
<text>If Delay = 0, a random animation phase is chosen on startup and maintained. The particle will exist until is falls out of the landscape.</text>
<h id="maxcount">Particle Amounts</h>
<text>For each particle type a maximum count is defined which is then also adjusted by the configuration setting for effect levels in the graphics options. As soon as half of the maximum amount of particles is created, new particles are only created based on random selected and the closer you get to the maximum value, the smaller the chance of new particle generation. This ensures a smooth approach to the actual limit.</text>
<h id="collision">Collision Detection</h>
<text>Particles can collide with the landscape. This is not very exact, however. Fast moving particles might pass through very thin layers of solid materials. If you need more precision, you should use objects instead.</text>
<text>Collision detection is only done in StdExec (i.e. not with smoke particles). For valid functions see <a href="#funcs">particle functions</a>. Collision detection is done at the particle center and only if VertexCount is specified. The point of detection can be shifted using VertexY. The specified values are in percent of the particle size, meaning VertexY=100 would check at the bottom of the particle. The visual size specified in Face doesn't affect this.</text>
<h id="funcs">Particle Functions</h>
<text>The behaviour of particles can be controlled by predefined particle functions. These are executed for initialization, then at each fram, and in case of <a href="#collision">collision</a> with the landscape.</text>
<dl>
<dt id="stdexec">StdExec</dt>
<dd>
<text>Standard function ExecFn for almost all particle types. The particle runs through an animation defined by Face, Delay, Repeats, Reverse, FadeOutLen, and FadeOutDelay and is then destroyed. The extra parameter defines the size of the particle in 1/10 pixels. b defines color modulation; if b = 0 no modulation is applied. aa as well as b are not modified by this function and will preserve the <a href="#control">initial</a> values. Also, the particle moves according to xdir and ydir while ydir is affected by gravity if GravityAcc is enabled.</text>
</dd>
<dt id="stdinit">StdInit</dt>
<dd>
<text>Standard function for InitFn to be used with StdExec.</text>
</dd>
<dt id="bounce">Bounce</dt>
<dd>
<text>Collision function: the particle will bounce back into the exact opposite direction.</text>
</dd>
<dt id="bouncey">BounceY</dt>
<dd>
<text>Collision function: the particle will bounce back vertically.</text>
</dd>
<dt id="stop">Stop</dt>
<dd>
<text>Collision function: the particle will stop.</text>
</dd>
<dt id="die">Die</dt>
<dd>
<text>Collision function: the particle will be destroyed.</text>
</dd>
<dt id="smokeexec">SmokeExec</dt>
<dd>
<text>Hard coded processing function for smoke particles. a is puff size; b is color modulation. Smoke graphics must be defined in 4 x 4 animation phases in Graphics.png of which the one on the lower right is used only rarely. The other animation phases are used evenly. Smoke always rises continuously until it collides with the landscape. If the life time has passed, the smoke particle fades out until it is deleted.</text>
</dd>
<dt id="smokeinit">SmokeInit</dt>
<dd>
<text>Hard coded initialization function for smoke to be used in conjunction with SmokeExec.</text>
</dd>
</dl>
<h id="drawfuncs">Drawing Functions</h>
<text>Functions that can be assigned to DrawFn.</text>
<dl>
<dt id="drawstd">Std</dt>
<dd>
<text>Standard function for most particles except smoke. The particle is drawn at position x/y with size a/5 x a/5 and color modulated with b.</text>
</dd>
<dt id="drawsmoke">Smoke</dt>
<dd>
<text>Drawing function for smoke.</text>
</dd>
</dl>
<h id="control">Control</h>
<text>External control of particles is very limited and only allows creation, global offset, and global removal. This is necessary as particles are not synchronized on computers throughout a network game and any deviation in particle handling would cause sync loss. Particles are created using <funclink>CreateParticle</funclink>.</text>
<h id="face">Graphics</h>
<text>The coordinates for the source rectangle within Graphics.png of a particle specify the first phase of the particle graphics the other phases should follow to the right and can be continued in the next row. The animation length is then automatically determined from the image size.</text>
<h id="properties">Properties</h>
<text>Each particle has different attributes like position, lifetime, size and more. These are set by script when creating the particle.</text>
<text>The following properties can be contained in a proplist passed to <funclink>CreateParticle</funclink>. For an example, see <funclink>CreateParticle</funclink></text>
<text>You can assign either constants to the properties (f.e. <code>R = 200</code>) or use certain value provider functions (f.e. <code>R = <funclink>PV_Linear</funclink>(200, 0)</code>). Available value provider functions are:
<funclink>PV_Linear</funclink>
<funclink>PV_Direction</funclink>
<funclink>PV_Random</funclink>
<funclink>PV_Step</funclink>
<funclink>PV_Speed</funclink>
<funclink>PV_KeyFrames</funclink>
<funclink>PV_Wind</funclink>
<funclink>PV_Gravity</funclink>
</text>
<text>
<table>
<caption id="particledef">Particle definition proplist</caption>
<rowh>
<col>Name</col>
<col>Values</col>
<col>Description</col>
</rowh>
<row>
<col>R</col>
<col>0 to 255</col>
<col>Red part of the color modulation.</col>
</row>
<row>
<col>G</col>
<col>0 to 255</col>
<col>Green part of the color modulation.</col>
</row>
<row>
<col>B</col>
<col>0 to 255</col>
<col>Blue part of the color modulation.</col>
</row>
<row>
<col>Alpha</col>
<col>0 to 255</col>
<col>Alpha part of the color modulation.</col>
</row>
<row>
<col>Size</col>
<col>pixels</col>
<col>Size of the particle in pixels.</col>
</row>
<row>
<col>Stretch</col>
<col>factor</col>
<col>The vertical stretch of the particle. 1000 equals no stretch.</col>
</row>
<row>
<col>Phase</col>
<col>Index of phase</col>
<col>The displayed phase of the particle from the Graphics.png. The index starts at 0 and will be wrapped.</col>
</row>
<row>
<col>Rotation</col>
<col>0 to 360</col>
<col>Rotation of the particle.</col>
</row>
<row>
<col>ForceX</col>
<col>Integer</col>
<col>Force in x-direction that is constantly applied to the particle's speed. Can f.e. simulate wind.</col>
</row>
<row>
<col>ForceY</col>
<col>Integer</col>
<col>Force in y-direction that is constantly applied to the particle's speed. Ca f.e. simulate gravity.</col>
</row>
<row>
<col>DampingX</col>
<col>0 to 1000</col>
<col>Damping of the particle's speed in x-direction. 1000 means no damping, 0 means instant stop.</col>
</row>
<row>
<col>DampingY</col>
<col>0 to 1000</col>
<col>Damping of the particle's speed in y-direction. 1000 means no damping, 0 means instant stop.</col>
</row>
<row>
<col>BlitMode</col>
<col>0 or GFX_BLIT_Additive</col>
<col>The particle's blit mode. Currently only additive blitting is supported.</col>
</row>
<row>
<col>CollisionVertex</col>
<col>0 to 1000</col>
<col>The offset of the particle's hit point relative to its width. When set, the particle will collide with the landscape. 0 means the particle will collide with its center.</col>
</row>
<row>
<col>OnCollision</col>
<col><funclink>PC_Die</funclink>, <funclink>PC_Bounce</funclink>, <funclink>PC_Stop</funclink></col>
<col>Defines what happens when the particle collides with the landscape.</col>
</row>
<row>
<col>Attach</col>
<col>bit mask</col>
<col>Defines the attachment of the particles to the calling object. Can be a combination of ATTACH_Front, ATTACH_Back, and ATTACH_MoveRelative. For example <code>ATTACH_Front | ATTACH_MoveRelative</code></col>
</row>
</table>
</text>
</part>
<author>Sven2</author><date>2002-04</date>
<author>Zapper</author><date>2013-10</date>
</doc>

View File

@ -245,13 +245,18 @@
<col>The key press is always passed to the mapping with the next lowest priority, independent of whether the previous command was executed successfully or not.</col>
</row>
<row>
<literal_col>OverrideAssignments</literal_col>
<col>The assignment overwrites all other assignments for the same control with the same press/release trigger mode.</col>
<literal_col>ClearRecentKeys</literal_col>
<col>When the assignment is triggered, all recent keys are deleted and the trigger key is not added to the recent list. This means no future key combos can be triggered with any keys including and preceding the current.</col>
</row>
</table>
</col>
</row>
<row>
<literal_col>OverrideAssignments</literal_col>
<col>Boolean</col>
<col>The assignment overwrites all other assignments for the same control with the same press/release trigger mode.</col>
</row>
</table>
</part>
<h id="Script">Script callbacks</h>

View File

@ -108,10 +108,14 @@ US:Attack of the Killer Wipfs</code>
<dd>
<text>Stores the material table used in this scenario. The materials listed here are used by the exact landscape and have to be available in the loaded Material.ocg group.</text>
</dd>
<dt id="Objectstxt"><img height="16" src="../../images/icon_text.png" width="16"/>Objects.txt</dt>
<dt id="Objectstxt"><img height="16" src="../../images/icon_text.png" width="16"/>Game.txt</dt>
<dd>
<text>This component is generated by the engine and stores runtime object data of a savegame.</text>
</dd>
<dt id="Objectsc"><img height="16" src="../../images/icon_text.png" width="16"/>Objects.c</dt>
<dd>
<text>This component is generated by the engine if the game is stored as a scenario. Contains an InitializeObjects() function to recreate all objects placed during editing before. See <emlink href="definition/script.html#ScenSave">Object saving</emlink>.</text>
</dd>
</dl>
<h id="UeberladungenOCS">Overloading Rules</h>
<text>Various system components (graphics, loader screens, materials, music, or objects) can be overloaded in scenarios. In doing this, parent scenario folders (ocf) are searched. Also, components located in child groups will always overload the same components located in parent groups.</text>

View File

@ -62,8 +62,8 @@ var copy_layer = Duplicate();
Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
</code>
<text>Note: If you are using the target layer in a drawing command, always draw from a copy. Otherwise, the result is undefined.</text>
<h>SCRIPTALGO_Layer</h><part>
<text>Returns the pixel value at the x,y position of the given layer. Instead of passing a SCRIPTALGO_Layer prop list, layers can also be passed directly as algorithms.</text>
<h>MAPALGO_Layer</h><part>
<text>Returns the pixel value at the x,y position of the given layer. Instead of passing a MAPALGO_Layer prop list, layers can also be passed directly as algorithms.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
<col>Layer</col>
@ -71,7 +71,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>The layer from which pixel values are taken.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_RndChecker</h><part>
<h>MAPALGO_RndChecker</h><part>
<text>Returns values from a checkerboard pattern of rectangles that are filled with ones or zeros.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -96,7 +96,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>If true, the pattern always starts at position (0,0). Otherwise, it is offset by a random phase.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Rect</h><part>
<h>MAPALGO_Rect</h><part>
<text>Returns one if the position is in a given rectangle and zero otherwise.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -117,7 +117,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>Height of rectangle.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Ellipsis</h><part>
<h>MAPALGO_Ellipsis</h><part>
<text>Returns one if the position is in a given ellipsis and zero otherwise.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -138,7 +138,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>Vertical radius of ellipsis</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Polygon</h><part>
<h>MAPALGO_Polygon</h><part>
<text>Returns one if the position is in a given polygon or on its border and zero otherwise.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -163,7 +163,33 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>If true, the last segment of the polygon is not drawn. Useful to draw lines. Only valid if Empty is true.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_And</h><part>
<h>MAPALGO_Lines</h><part>
<text>Returns one if the point is on regular stripes and zero otherwise.</text>
<text>Vector (X,Y) determines both width and direction of the stripes. So, for instance, if you want to draw vertical stripes of 10 pixels width and a gap of 5 pixels between them, you would set X=10, Y=0, Distance=15.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
<col>X</col>
<col>0</col>
<col>X size of vector that points perpendicular to stripes.</col>
</row><row>
<col>Y</col>
<col>0</col>
<col>Y size of vector that points perpendicular to stripes.</col>
</row><row>
<col>OffX</col>
<col>0</col>
<col>Offset of stripes. If unspecified, stripes begin at (0,0).</col>
</row><row>
<col>OffY</col>
<col>0</col>
<col>Offset of stripes.</col>
</row><row>
<col>Distance</col>
<col>2*Sqrt(X*X+Y*Y)</col>
<col>Distance between two stripes. Includes the stripe width!</col>
</row>
</table></text></part>
<h>MAPALGO_And</h><part>
<text>Returns zero if any of the operands is zero. Otherwise, returns the value of the last operand. If there are zero operands, always returns zero.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -172,7 +198,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>Array of algorithms that are tested.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Or</h><part>
<h>MAPALGO_Or</h><part>
<text>Returns the first operand that is nonzero. If all operands are zero, returns zero. If there are zero operands, always returns zero.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -181,7 +207,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>Array of algorithms that are tested.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Not</h><part>
<h>MAPALGO_Not</h><part>
<text>Returns one if the operand is zero. Returns zero otherwise.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -190,7 +216,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>Algorithms that is negated.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Xor</h><part>
<h>MAPALGO_Xor</h><part>
<text>If exactly one of the two operands is nonzero, returns that operand. Otherwise, returns zero.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -199,7 +225,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>Array of two algorithms that are tested.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Offset</h><part>
<h>MAPALGO_Offset</h><part>
<text>Moves its operand by an offset.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -216,7 +242,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>Vertical offset downwards.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Scale</h><part>
<h>MAPALGO_Scale</h><part>
<text>Scales its operand by a point.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -241,7 +267,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>Y position of fixed point that remains in position.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Rotate</h><part>
<h>MAPALGO_Rotate</h><part>
<text>Rotates its operand around a point.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -262,7 +288,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>Y position of fixed point that remains in position.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Turbulence</h><part>
<h>MAPALGO_Turbulence</h><part>
<text>Jumbles its operand around by moving points by a randomized offset.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -283,7 +309,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>Number of times each point is pushed around. The amplitude of the n'th successive push is reduced by 1/n.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Border</h><part>
<h>MAPALGO_Border</h><part>
<text>Returns true for positions that lie on an inner or outer border of an operand. An inner border is defined as a position where the operand is nonzero and a position where it is zero lies within inner border width range. An outer border is defined as a position where the operand is zero and a position where it is nonzero lies within outer border width range. Note that borders are only searched in four directions (left, right, upwards, downwards) and not diagonally. This means that for a square, outer borders to not catch the corners.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>
@ -312,7 +338,7 @@ Blit({Algo=MAPALGO_Scale, OffX=Wdt/2, X=-100, Op=copy_layer});
<col>Border width downwards. Definition like Wdt. Falls back to Wdt if not specified.</col>
</row>
</table></text></part>
<h>SCRIPTALGO_Filter</h><part>
<h>MAPALGO_Filter</h><part>
<text>Return only pixel values of the operand that match the mask specification. Returns zero for other pixels.</text>
<text><table><rowh><col>Parameter</col><col>Default</col><col>Meaning</col></rowh>
<row>

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>BlastFree</title>
<category>Landscape</category>
<version>5.1 OC</version>
<syntax>
<rtype>int</rtype>
<params>
<param>
<type>int</type>
<name>x</name>
<desc>X coordinate</desc>
</param>
<param>
<type>int</type>
<name>y</name>
<desc>Y coordinate</desc>
</param>
<param>
<type>int</type>
<name>radius</name>
<desc>Radius</desc>
</param>
<param>
<type>int</type>
<name>caused_by</name>
<desc>The controller of objects that are created by the blast. See Blast2Objects in <emlink href="material/ocm.html">material definitions</emlink>. If not set, the controller is the owner of the calling object.</desc>
<optional />
</param>
<param>
<type>int</type>
<name>max_density</name>
<desc>Only materials of the given density or lower are blasted by this explosion. If not specified, any material is blasted.</desc>
<optional />
</param>
</params>
</syntax>
<desc>Blasts a hole in solid materials. </desc>
<examples>
<example>
<code>BlastFree(300, 300, 40, nil, 70);</code>
<text>Blasts a hole into the landscape with the center of the blast being 300,300. Additionally, only materials of a density of 70 or lower are blasted, so this blast does not blast granite.</text>
</example>
</examples>
<related>
<funclink>Explode</funclink>
</related>
</func>
<date>2014-01</date>
</funcs>

View File

@ -1,81 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>CastParticles</title>
<category>Particle</category>
<version>5.1 OC</version>
<syntax>
<rtype>bool</rtype>
<params>
<param>
<type>string</type>
<name>name</name>
<desc>Name of the particle type.</desc>
</param>
<param>
<type>int</type>
<name>amount</name>
<desc>Amount of particles.</desc>
</param>
<param>
<type>int</type>
<name>level</name>
<desc>Velocity at which to cast the particles.</desc>
</param>
<param>
<type>int</type>
<name>x</name>
<desc>X coordinate of the particle. Offset in local calls.</desc>
</param>
<param>
<type>int</type>
<name>y</name>
<desc>Y coordinate of the particle. Offset in local calls.</desc>
</param>
<param>
<type>int</type>
<name>a0</name>
<desc>Lower limit for the first extra parameter. This is usually the size of the particles in 1/5 pixels.</desc>
</param>
<param>
<type>int</type>
<name>a1</name>
<desc>Upper limit for the first extra parameter.</desc>
</param>
<param>
<type>int</type>
<name>b0</name>
<desc>Lower limit for the second extra parameter. This is usually the color modulation of the particles.</desc>
</param>
<param>
<type>int</type>
<name>b1</name>
<desc>Upper limit for the second extra parameter.</desc>
</param>
<param>
<type>object</type>
<name>obj</name>
<desc>Target object for object local particles. Object local particles are drawn directly on top of the object and are removed when the object is deleted.</desc>
<optional />
</param>
</params>
</syntax>
<desc>Casts the specified amount of particles of the specified type. The extra parameters are set randomly in the range from a0/b0 to a1/b1.</desc>
<remark>This function returns <code>false</code> if the particle definition was not found, otherwise <code>true</code>. There is no return value indicating whether the particle has actually been created. This must be so to prevent synchronization problems in network games, as particles may be handled differently on each computer in the network.</remark>
<examples>
<example>
<code>CastParticles(&quot;MagicSpark&quot;, 10,100, 0,0, 100, 200, <funclink>RGBa</funclink>(128,128,255,0), <funclink>RGBa</funclink>(255,255,255,127));</code>
<text>Creates some sparks.</text>
</example>
</examples>
<related>
<funclink>CreateParticle</funclink>
<funclink>CastObjects</funclink>
<funclink>CastPXS</funclink>
</related>
</func>
<author>Sven2</author><date>2002-05</date>
</funcs>

View File

@ -4,7 +4,7 @@
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>FreeRect</title>
<title>ClearFreeRect</title>
<category>Landscape</category>
<version>5.1 OC</version>
<syntax>
@ -13,12 +13,12 @@
<param>
<type>int</type>
<name>x</name>
<desc>Left limit of the rectangle</desc>
<desc>Left limit of the rectangle. Always global coordinates.</desc>
</param>
<param>
<type>int</type>
<name>y</name>
<desc>Top limit of the rectangle</desc>
<desc>Top limit of the rectangle. Always global coordinates.</desc>
</param>
<param>
<type>int</type>
@ -30,27 +30,21 @@
<name>height</name>
<desc>Height of the rectangle</desc>
</param>
<param>
<type>int</type>
<name>density</name>
<desc>If specified, material of the specified density is removed.</desc>
</param>
</params>
</syntax>
<desc>Removes all material within the specified rectangle. Coordinates are always global. Excluding the right and lower limits of the rectangle.</desc>
<remark>This call may take quite a while for large rectangles.</remark>
<examples>
<example>
<code>FreeRect(0, 0, <funclink>LandscapeWidth</funclink>(), <funclink>LandscapeHeight</funclink>());</code>
<code>ClearFreeRect(0, 0, <funclink>LandscapeWidth</funclink>(), <funclink>LandscapeHeight</funclink>());</code>
<text>Empties the complete landscape.</text>
</example>
</examples>
<related>
<funclink>DigFree</funclink>
<funclink>DigFreeRect</funclink>
<funclink>Explode</funclink>
<funclink>BlastFree</funclink>
</related>
</func>
<author>Sven2</author><date>2001-11</date>
<author>Clonkonaut</author><date>2008-04</date>
<date>2014-01</date>
</funcs>

View File

@ -5,36 +5,23 @@
<funcs>
<func>
<title>ClearParticles</title>
<category>Particle</category>
<category>Particles</category>
<version>5.1 OC</version>
<syntax>
<rtype>bool</rtype>
<params>
<param>
<type>string</type>
<name>name</name>
<desc>Name of the particle definition of which you want to delete all particles. If not specified, all particles of all types will be removed.</desc>
<optional />
</param>
<param>
<type>object</type>
<name>obj</name>
<desc>If specified, only the particles local to that object are removed.</desc>
<optional />
</param>
</params>
</syntax>
<desc>Removes all particles of the specified type.</desc>
<desc>Removes all particles associated with the calling object or the global particles if not called from object context.</desc>
<examples>
<example>
<code>ClearParticles(&quot;Smoke&quot;);</code>
<text>Removes all smoke.</text>
<code>
GetCursor(0)->ClearParticles();
Scenario->ClearParticles();</code>
<text>Removes all particles belonging to the first player's Clonk and all global particles.</text>
</example>
</examples>
<related>
<funclink>CreateParticle</funclink>
<funclink>PushParticles</funclink>
</related>
</func>
<author>Sven2</author><date>2002-04</date>
<author>Zapper</author><date>2013-12</date>
</funcs>

View File

@ -5,72 +5,91 @@
<funcs>
<func>
<title>CreateParticle</title>
<category>Particle</category>
<version>5.1 OC</version>
<category>Particles</category>
<version>5.3.4 OC</version>
<syntax>
<rtype>bool</rtype>
<params>
<param>
<type>string</type>
<name>szName</name>
<desc>Name of the particle</desc>
<name>particle_name</name>
<desc>Name of the particle definition.</desc>
</param>
<param>
<type>int</type>
<name>x</name>
<desc>X coordinate of the particle. Offset in local calls.</desc>
<desc>X-coordinate of the new particle (relative to object for local calls)</desc>
</param>
<param>
<type>int</type>
<name>y</name>
<desc>Y coordinate of the particle. Offset in local calls.</desc>
<desc>Y-coordinate of the new particle (relative to object for local calls)</desc>
</param>
<param>
<type>int</type>
<name>xdir</name>
<desc>Initial horizontal velocity of the particle.</desc>
<name>speed_x</name>
<desc>Starting speed of the particle in x-direction. Can also be a value provider function.</desc>
</param>
<param>
<type>int</type>
<name>ydir</name>
<desc>Initial vertical velocity of the particle.</desc>
<name>speed_y</name>
<desc>Starting speed of the particle in y-direction. Can also be a value provider function.</desc>
</param>
<param>
<param>
<type>int</type>
<name>a</name>
<desc>Extra parameter. This is usually the size of the particle in 1/5 pixels.</desc>
<name>lifetime</name>
<desc>Time in frames that the particle will be alive before it is removed. Can also be a value provider function.</desc>
</param>
<param>
<param>
<type>proplist</type>
<name>properties</name>
<desc>PropList with the particle attributes (see the <emlink href="particle/index.html#attributes">particle documentation</emlink>).</desc>
</param>
<param>
<type>int</type>
<name>b</name>
<desc>Extra parameter. This is usually the color modulation of the particle.</desc>
</param>
<param>
<type>object</type>
<name>target</name>
<desc>Target object for object local particles. Object local particles are drawn directly on top of the object and are removed when the object is deleted.</desc>
<optional />
</param>
<param>
<type>bool</type>
<name>behind_target</name>
<desc>If specified and not <code>false</code>, the particle is drawn directly behind the target object.</desc>
<optional />
<name>amount</name>
<desc>Amount of particles to create. Defaults to 1.</desc>
</param>
</params>
</syntax>
<desc>Creates a particle. The named particle definition must be loaded. For more information see the particle documentation.</desc>
<remark>This function returns <code>false</code> if the particle definition was not found, otherwise <code>true</code>. There is no return value indicating whether the particle has actually been created. This must be so to prevent synchronization problems in network games, as particles may be handled differently on each computer in the network.</remark>
<examples>
<example>
<code>CreateParticle(&quot;Blast&quot;, 0,0, 0,0, 100, <funclink>RGB</funclink>(128,128,255));</code>
<text>Creates a blue explosion at the position of the calling object.</text>
</example>
</examples>
<related>
<funclink>PushParticles</funclink>
<funclink>ClearParticles</funclink>
<desc>Creates a new particle with the given properties. Note that particle creation is not necessarily synchronized over the network and thus, the return value is not whether the particle was actually created but whether the particle definition was found.</desc>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations.</remark>
<examples>
<example>
<code>
var particles =
{
Size = <funclink>PV_KeyFrames</funclink>(0, 0, 0, 200, 50, 1000, 0),
DampingX = 900,
DampingY = 900,
R = 255,
G = <funclink>PV_Linear</funclink>(255, 0),
B = <funclink>PV_Linear</funclink>(128, 0),
Alpha = <funclink>PV_Linear</funclink>(255, 0),
Rotation = <funclink>PV_Direction</funclink>(),
Stretch = <funclink>PV_Speed</funclink>(5 * 1000),
ForceY = <funclink>PV_KeyFrames</funclink>(0, 0, 0, 900, 0, 1000, -20),
ForceX = <funclink>PV_Random</funclink>(-5, 5, 15),
Phase = <funclink>PV_Step</funclink>(1, 0, 10)
};
<funclink>CreateParticle</funclink>("Fire", 0, 0, <funclink>PV_Random(-200, 200)</funclink>, <funclink>PV_Random</funclink>(-200, 200), <funclink>PV_Random</funclink>(18, 38 * 5), particles, 100);
</code>
<text>Casts 100 particles with a previously defined behavior.</text>
</example>
</examples>
<related>
<funclink>PV_Linear</funclink>
<funclink>PV_Direction</funclink>
<funclink>PV_Random</funclink>
<funclink>PV_Step</funclink>
<funclink>PV_Speed</funclink>
<funclink>PV_KeyFrames</funclink>
<funclink>PV_Wind</funclink>
<funclink>PV_Gravity</funclink>
<funclink>PC_Die</funclink>
<funclink>PC_Bounce</funclink>
<funclink>PC_Stop</funclink>
</related>
</func>
<author>Sven2</author><date>2002-04</date>
<author>Zapper</author><date>2013-10</date>
</funcs>

View File

@ -5,7 +5,7 @@
<funcs>
<func>
<title>CreateParticleAtBone</title>
<category>Particle</category>
<category>Particles</category>
<version>5.4 OC</version>
<syntax>
<rtype>bool</rtype>
@ -30,27 +30,20 @@
<name>dir</name>
<desc>Vector of three elements with the X,Y and Z components of the velocity of theparticle relative to the bone orientation.</desc>
</param>
<param>
<param>
<type>int</type>
<name>a</name>
<desc>Extra parameter. This is usually the size of the particle in 1/5 pixels.</desc>
<name>lifetime</name>
<desc>Time in frames that the particle will be alive before it is removed. Can also be a value provider function.</desc>
</param>
<param>
<param>
<type>proplist</type>
<name>properties</name>
<desc>PropList with the particle attributes (see the <emlink href="particle/index.html#attributes">particle documentation</emlink>).</desc>
</param>
<param>
<type>int</type>
<name>b</name>
<desc>Extra parameter. This is usually the color modulation of the particle.</desc>
</param>
<param>
<type>object</type>
<name>target</name>
<desc>Target object for object local particles. Object local particles are drawn directly on top of the object and are removed when the object is deleted.</desc>
<optional />
</param>
<param>
<type>bool</type>
<name>behind_target</name>
<desc>If specified and not <code>false</code>, the particle is drawn directly behind the target object.</desc>
<optional />
<name>amount</name>
<desc>Amount of particles to create. Defaults to 1.</desc>
</param>
</params>
</syntax>
@ -65,9 +58,9 @@
global func FxIntColorizeTimer()
{
FindObject(Find_ID(Clonk))->CreateParticleAtBone("PSpark", "skeleton_body", [0, 0, 0], [0, 0, 0], 8, RGB(255,0,0));
FindObject(Find_ID(Clonk))->CreateParticleAtBone("PSpark", "pos_hand1", [0, 0, 0], [0, 0, 0], 8, RGB(0,255,0));
FindObject(Find_ID(Clonk))->CreateParticleAtBone("PSpark", "pos_hand2", [0, 0, 0], [0, 0, 0], 8, RGB(0,0,255));
FindObject(Find_ID(Clonk))->CreateParticleAtBone("SphereSpark", "skeleton_body", [0, 0, 0], [0, 0, 0], PV_Random(20, 30), Particles_Spark());
FindObject(Find_ID(Clonk))->CreateParticleAtBone("Fire", "pos_hand1", [0, 0, 0], [0, 0, 0], PV_Random(5, 10), Particles_Fire());
FindObject(Find_ID(Clonk))->CreateParticleAtBone("Fire", "pos_hand2", [0, 0, 0], [0, 0, 0], PV_Random(5, 10), Particles_Fire());
return(0);
}</code>
<text>Scenario script. Creates an effect which traces a Clonk's body, left hand and right hand with differently colored sparks.</text>

View File

@ -29,11 +29,13 @@
<type>bool</type>
<name>no_dig2objects</name>
<desc>Prevent objects from being dug out</desc>
<optional />
</param>
<param>
<type>bool</type>
<name>no_instability_check</name>
<desc>Does not perform instability checks around dug pixels, i.e. prevents surrounding single pixels and liquids from becoming loose.</desc>
<optional />
</param>
</params>
</syntax>
@ -46,8 +48,7 @@
</examples>
<related>
<funclink>DigFreeRect</funclink>
<funclink>Explode</funclink>
</related>
</func>
<author>jwk</author><date>2002-04</date>
<date>2013-03</date>
</funcs>

View File

@ -34,11 +34,13 @@
<type>bool</type>
<name>no_dig2objects</name>
<desc>Prevent objects from being dug out</desc>
<optional />
</param>
<param>
<type>bool</type>
<name>no_instability_check</name>
<desc>Does not perform instability checks around dug pixels, i.e. prevents surrounding single pixels and liquids from becoming loose.</desc>
<optional />
</param>
</params>
</syntax>
@ -52,5 +54,5 @@
</examples>
<related><funclink>DigFree</funclink></related>
</func>
<author>jwk</author><date>2002-04</date>
<date>2013-03</date>
</funcs>

View File

@ -5,7 +5,7 @@
<funcs>
<func>
<title>DrawParticleLine</title>
<category>Particle</category>
<category>Particles</category>
<version>5.1 OC</version>
<syntax>
<rtype>int</rtype>

View File

@ -41,7 +41,8 @@
<related>
<funclink>RemoveObject</funclink>
<funclink>BlastObjects</funclink>
</related>
<funclink>BlastFree</funclink>
</related>
</func>
<author>Sven2</author><date>2001-11</date>
<author>Clonkonaut</author><date>2008-04</date>

View File

@ -42,6 +42,9 @@
}</code><text></text>
</example>
</examples>
<related>
<funclink>LogCallStack</funclink>
</related>
</func>
<author>Newton</author><date>2011-09</date>
</funcs>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>FileWrite</title>
<category>System</category>
<version>5.3 OC</version>
<syntax>
<rtype>bool</rtype>
<params>
<param>
<type>int</type>
<name>fid</name>
<desc>ID of file to be written to.</desc>
</param>
<param>
<type>string</type>
<name>data</name>
<desc>String to be written to the file.</desc>
</param>
</params>
</syntax>
<desc>Adds a text string to an open file. Currently, this function is only used to write to the Objects.c file in the SaveScenarioObjects callback defined in System.ocg/SaveScenario.c (See <emlink href="definition/script.html#ScenSave">Scenario objects saving</emlink>).</desc>
<examples>
<example>
<code>global func SaveScenarioObjects(f)
{
FileWrite(f, "func InitializeObjects() { return true; }\n");
}</code>
<text>When the user presses "Save scenario" in the editor, he won't save any objects.</text>
</example>
</examples>
<related>
<emlink href="definition/script.html#ScenSave">Scenario objects saving</emlink>
</related>
</func>
<author>Sven2</author><date>2013-12</date>
</funcs>

View File

@ -24,7 +24,7 @@
</param>
</params>
</syntax>
<desc>Ends a command in the command stack of an object.</desc>
<desc>Ends a command in the command stack of an object. A finished command stays in the stack until it would be time for it to be executed and is removed only then.</desc>
<related>
<funclink>SetCommand</funclink>
<funclink>GetCommand</funclink>
@ -33,4 +33,5 @@
</related>
</func>
<author>Günther</author><date>2004-04</date>
<author>Newton</author><date>2013-12</date>
</funcs>

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>GetAverageTextureColor</title>
<category>Landscape</category>
<subcat>Material</subcat>
<version>5.4 OC</version>
<syntax>
<rtype>int</rtype>
<params>
<param>
<type>string</type>
<name>texture_name</name>
<desc>Name of the texture for which to retrieve the average color.</desc>
</param>
</params>
</syntax>
<desc>Returns the average color of the given material texture.</desc>
<related>
<funclink>GetTexture</funclink>
</related>
</func>
<date>2014-01</date>
</funcs>

View File

@ -19,7 +19,7 @@
<param>
<type>int</type>
<name>dwCNAT</name>
<desc>Bit mask of CNAT values which determine which directions to check. If not specified, all directions are checked.</desc>
<desc>Bit mask of CNAT values which determine which directions to check. If not specified, defaults to the vertices own CNAT mode, i.e. usually the one specified in VertexCNAT in the definition DefCore.txt file. If the vertex does not have any CNAT value, no direction is checked.</desc>
<optional />
</param>
</params>

View File

@ -9,7 +9,7 @@
<subcat>Status</subcat>
<version>5.1 OC</version>
<syntax><rtype>int</rtype></syntax>
<desc>Determines the lower limit of an object. This corresponds to y position + DefCore OffsetY + DefCore Height. Object rotation is not taken into consideration.</desc>
<desc>Determines the lower limit of an object. This corresponds to the bottom vertex on objects that have vertices and y position + DefCore OffsetY + DefCore Height for objects without vertices.</desc>
<examples>
<example>
<code><funclink>Contents</funclink>()-&gt;<funclink>Exit</funclink>(0, GetDefBottom()-<funclink>GetY</funclink>());</code>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>GetMatAdjust</title>
<category>Landscape</category>
<version>5.1 OC</version>
<syntax>
<rtype>int</rtype>
</syntax>
<desc>Returns the material modulation as set by <funclink>SetMatAdjust</funclink>.</desc>
<related>
<funclink>SetMatAdjust</funclink>
<funclink>SetSkyAdjust</funclink>
<funclink>GetSkyAdjust</funclink>
<funclink>SetGamma</funclink>
<funclink>RGB</funclink>
<funclink>RGBa</funclink>
</related>
</func>
<author>Sven2</author><date>2003-06</date>
</funcs>

View File

@ -4,7 +4,7 @@
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>GetPlrColor</title>
<title>GetPlayerColor</title>
<category>Player</category>
<version>5.1 OC</version>
<syntax>
@ -20,7 +20,7 @@
<desc>Determines the player color. The player color is used to identify various owned objects such as flags or clonks as well as his text messages.</desc>
<examples>
<example>
<code><funclink>Log</funclink>(&quot;&lt;c %x&gt;%s&lt;/c&gt; has a score of %d.&quot;, GetPlrColor(0), <funclink>GetPlayerName</funclink>(0), <funclink>GetScore</funclink>(0));</code>
<code><funclink>Log</funclink>(&quot;&lt;c %x&gt;%s&lt;/c&gt; has a score of %d.&quot;, GetPlayerColor(0), <funclink>GetPlayerName</funclink>(0), <funclink>GetScore</funclink>(0));</code>
<text>Returns status information about the first player, highlighting the player's name in the player color.</text>
</example>
</examples>
@ -29,5 +29,5 @@
<funclink>SetColor</funclink>
</related>
</func>
<author>Sven2</author><date>2003-10</date>
<author>Sven2</author><date>2013-12</date>
</funcs>

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>GetTexture</title>
<category>Landscape</category>
<subcat>Material</subcat>
<version>5.4 OC</version>
<syntax>
<rtype>string</rtype>
<params>
<param>
<type>int</type>
<name>x</name>
<desc>X coordinate at which to check the texture. Offset in local calls.</desc>
</param>
<param>
<type>int</type>
<name>y</name>
<desc>Y coordinate at which to check the texture. Offset in local calls.</desc>
</param>
</params>
</syntax>
<desc>Returns the name of the texture used for the material at the given position.</desc>
<examples>
<example>
<code>func ControlUse(object clonk)<br/>
{<br/>
var tex_name = clonk->GetTexture(0,0);<br/>
var tex_color = <funclink>GetAverageTextureColor</funclink>();<br/>
clonk-><funclink>SetColor</funclink>(tex_color);
clonk-><funclink>PlayerMessage</funclink>(clonk-><funclink>GetOwner()</funclink>, &quot;Camoflaging Clonk to look like %s&quot;, tex_name);<br/>
}</code>
<text>A script for a carmoflage item. When used, the clonk's overlay color is set to the average color of the texture where he is currently standing and he announces the name of the texture he is carmoflaging as.</text>
</example>
</examples>
<related>
<funclink>GetAverageTextureColor</funclink>
</related>
</func>
<date>2014-01</date>
</funcs>

View File

@ -18,8 +18,7 @@
<param>
<type>int</type>
<name>y</name>
<desc>Y target position. Default: Bottom of the landscape.</desc>
<optional />
<desc>Y position</desc>
</param>
<param>
<type>int</type>
@ -33,6 +32,12 @@
<desc>Name of the material. The default is "Lava"</desc>
<optional />
</param>
<param>
<type>int</type>
<name>angle</name>
<desc>Direction into which to erupt. 0 (default) is straight up.</desc>
<optional />
</param>
</params>
</syntax>
<desc>Launches a volcano at the specified position.</desc>
@ -41,5 +46,5 @@
<funclink>LaunchEarthquake</funclink>
</related>
</func>
<author>Newton</author><date>2009-07</date>
<author>Newton</author><date>2013-12</date>
</funcs>

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>MakeScenarioSaveName</title>
<category>System</category>
<version>5.3 OC</version>
<syntax>
<rtype>string</rtype>
</syntax>
<desc>Returns the name under which an object is stored in an Objects.c file if it is saved with the "Save scenario" option (See <emlink href="definition/script.html#ScenSave">Scenario objects saving</emlink>).</desc>
<examples>
<example>
<code>local target;
func SaveScenarioObject(props)
{
if (!inherited(props, ...)) return false;
if (target) props->Add("Target", "SetTarget(%s)", target->MakeScenarioSaveName());
return false;
}</code>
<text>Stores a call to SetTarget using a reference to an object stored in the target variable.</text>
</example>
</examples>
<related>
<emlink href="definition/script.html#ScenSave">Scenario objects saving</emlink>
</related>
</func>
<author>Sven2</author><date>2013-12</date>
</funcs>

View File

@ -26,6 +26,8 @@
</syntax>
<desc>Plays a music track. The corresponding music file must be available in the active music group. If the loaded scenario contains music files, the scenario file will be the music group. Otherwise, the global file Music.ocg will be used.</desc>
<related><funclink>SetPlayList</funclink></related>
</func>
<related><funclink>Sound</funclink></related>
<related><funclink>SoundAt</funclink></related>
</func>
<author>jwk</author><date>2002-08</date>
</funcs>

View File

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>PC_Bounce</title>
<category>Particles</category>
<version>5.3.3 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param>
<type>int</type>
<name>bouncyness</name>
<desc>Factor to multiply the new speed with. 1000 equals a factor of 1.0. Defaults to 1000.</desc>
</param>
</params>
</syntax>
<desc>A particle collision function. The particle will bounce off the ground on collision. If your particles get stuck instead of bouncing, you might need to increase the CollisionVertex value a bit.</desc>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations of the particle system.</remark>
<related>
<funclink>CreateParticle</funclink>
<funclink>PV_Linear</funclink>
<funclink>PV_Direction</funclink>
<funclink>PV_Random</funclink>
<funclink>PV_KeyFrames</funclink>
<funclink>PV_Step</funclink>
<funclink>PV_Speed</funclink>
<funclink>PC_Die</funclink>
</related>
</func>
<author>Zapper</author><date>2013-10</date>
</funcs>

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>PC_Die</title>
<category>Particles</category>
<version>5.3.3 OC</version>
<syntax>
<rtype>array</rtype>
</syntax>
<desc>A particle collision function. The particle will die on collision.</desc>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations of the particle system.</remark>
<related>
<funclink>CreateParticle</funclink>
<funclink>PV_Linear</funclink>
<funclink>PV_Direction</funclink>
<funclink>PV_Random</funclink>
<funclink>PV_KeyFrames</funclink>
<funclink>PV_Step</funclink>
<funclink>PV_Speed</funclink>
<funclink>PC_Bounce</funclink>
</related>
</func>
<author>Zapper</author><date>2013-10</date>
</funcs>

View File

@ -0,0 +1,29 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>PC_Stop</title>
<category>Particles</category>
<version>5.3.3 OC</version>
<syntax>
<rtype>array</rtype>
</syntax>
<desc>A particle collision function. The particle will set its velocity to zero on collision.</desc>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations of the particle system.</remark>
<related>
<funclink>CreateParticle</funclink>
<funclink>PV_Linear</funclink>
<funclink>PV_Direction</funclink>
<funclink>PV_Random</funclink>
<funclink>PV_KeyFrames</funclink>
<funclink>PV_Step</funclink>
<funclink>PV_Speed</funclink>
<funclink>PV_Wind</funclink>
<funclink>PC_Bounce</funclink>
<funclink>PC_Die</funclink>
</related>
</func>
<author>Zapper</author><date>2013-10</date>
</funcs>

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>PV_Direction</title>
<category>Particles</category>
<version>5.3.3 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param>
<type>int</type>
<name>factor</name>
<desc>Factor to multiply the angle with. The factor of 1000 is equal to a real factor of 1.0.</desc>
<optional />
</param>
</params>
</syntax>
<desc>The value depends on the current angle of movement of the particle. Usually the factor-parameter can be left out, since the original purpose of this function is to be used for the rotation-property.</desc>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations of the particle system.</remark>
<related>
<funclink>CreateParticle</funclink>
<funclink>PV_Linear</funclink>
<funclink>PV_Random</funclink>
<funclink>PV_Step</funclink>
<funclink>PV_Speed</funclink>
<funclink>PV_KeyFrames</funclink>
<funclink>PC_Die</funclink>
<funclink>PC_Bounce</funclink>
</related>
</func>
<author>Zapper</author><date>2013-10</date>
</funcs>

View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>PV_KeyFrames</title>
<category>Particles</category>
<version>5.3.3 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param>
<type>int</type>
<name>smoothing</name>
<desc>Smoothing of the curve. 0 means linear interpolation.</desc>
</param>
<param>
<type>int</type>
<name>position1</name>
<desc>Position relative to the particle age of value1 (0 to 1000).</desc>
</param>
<param>
<type>int</type>
<name>value1</name>
<desc>Value at position1.</desc>
</param>
<param>
<type>int</type>
<name>position2</name>
<desc>Position relative to the particle age of value2 (0 to 1000).</desc>
</param>
<param>
<type>int</type>
<name>value2</name>
<desc>Value at position2.</desc>
</param>
</params>
</syntax>
<desc>The value returned will be an interpolated value of the (smoothed) curve between the up to 4 key frames. PV_KeyFrames(0, 0, X, 1000, Y) is equivalent to PV_Linear(X, Y).</desc>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations of the particle system.</remark>
<related>
<funclink>CreateParticle</funclink>
<funclink>PV_Linear</funclink>
<funclink>PV_Direction</funclink>
<funclink>PV_Random</funclink>
<funclink>PV_Speed</funclink>
<funclink>PV_Step</funclink>
<funclink>PC_Die</funclink>
<funclink>PC_Bounce</funclink>
</related>
</func>
<author>Zapper</author><date>2013-10</date>
</funcs>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>PV_Linear</title>
<category>Particles</category>
<version>5.3.3 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param>
<type>int</type>
<name>start_value</name>
<desc>Begin of the interval.</desc>
</param>
<param>
<type>int</type>
<name>end_value</name>
<desc>End of the interval.</desc>
</param>
</params>
</syntax>
<desc>The value will go linearly from start_value to end_value over the life of the particle.</desc>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations of the particle system.</remark>
<related>
<funclink>CreateParticle</funclink>
<funclink>PV_Direction</funclink>
<funclink>PV_Random</funclink>
<funclink>PV_Step</funclink>
<funclink>PV_Speed</funclink>
<funclink>PV_KeyFrames</funclink>
<funclink>PC_Die</funclink>
<funclink>PC_Bounce</funclink>
</related>
</func>
<author>Zapper</author><date>2013-10</date>
</funcs>

View File

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>PV_Random</title>
<category>Particles</category>
<version>5.3.3 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param>
<type>int</type>
<name>start_value</name>
<desc>Begin of the interval to draw the random number from.</desc>
<optional />
</param>
<param>
<type>int</type>
<name>end_value</name>
<desc>End of the interval to draw the random number from.</desc>
<optional />
</param>
<param>
<type>int</type>
<name>reroll_interval</name>
<desc>Interval in frames after which a new random number will be drawn.</desc>
<optional />
</param>
</params>
</syntax>
<desc>The value will be a random number in the interval from start_value to (not including) end_value. The values in between are not whole integers, but are also in fraction of integers. This means that PV_Random(0, 1) can not only return one value (the 0) but a lot of different values in the interval between 0 and 1.</desc>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations of the particle system.</remark>
<related>
<funclink>CreateParticle</funclink>
<funclink>PV_Linear</funclink>
<funclink>PV_Direction</funclink>
<funclink>PV_Step</funclink>
<funclink>PV_Speed</funclink>
<funclink>PV_KeyFrames</funclink>
<funclink>PC_Die</funclink>
<funclink>PC_Bounce</funclink>
</related>
</func>
<author>Zapper</author><date>2013-10</date>
</funcs>

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>PV_Speed</title>
<category>Particles</category>
<version>5.3.3 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param>
<type>int</type>
<name>factor</name>
<desc>Factor to multiply the speed with. 1000 is equal to a factor of 1.0. Defaults to 1000.</desc>
</param>
<param>
<type>int</type>
<name>start_value</name>
<desc>Base value to add to the calculated speed-value.</desc>
</param>
</params>
</syntax>
<desc>The value will depend on the speed of the particle.</desc>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations of the particle system.</remark>
<related>
<funclink>CreateParticle</funclink>
<funclink>PV_Linear</funclink>
<funclink>PV_Direction</funclink>
<funclink>PV_Random</funclink>
<funclink>PV_KeyFrames</funclink>
<funclink>PV_Step</funclink>
<funclink>PC_Die</funclink>
<funclink>PC_Bounce</funclink>
</related>
</func>
<author>Zapper</author><date>2013-10</date>
</funcs>

View File

@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>PV_Step</title>
<category>Particles</category>
<version>5.3.3 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param>
<type>int</type>
<name>step</name>
<desc>Increase per each step (usually one frame, see the delay-parameter).</desc>
</param>
<param>
<type>int</type>
<name>start_value</name>
<desc>Value that will be added to the current step-value.</desc>
<optional />
</param>
<param>
<type>int</type>
<name>delay</name>
<desc>Delay in frames for every step (defaults to 1).</desc>
<optional />
</param>
</params>
</syntax>
<desc>PV_Step can be used for values that do not depend on the particle age (unlike f.e. <funclink>PV_Linear</funclink>).</desc>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations of the particle system.</remark>
<related>
<funclink>CreateParticle</funclink>
<funclink>PV_Linear</funclink>
<funclink>PV_Direction</funclink>
<funclink>PV_Random</funclink>
<funclink>PV_Speed</funclink>
<funclink>PV_KeyFrames</funclink>
<funclink>PC_Die</funclink>
<funclink>PC_Bounce</funclink>
</related>
</func>
<author>Zapper</author><date>2013-10</date>
</funcs>

View File

@ -0,0 +1,40 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>PV_Wind</title>
<category>Particles</category>
<version>5.3.3 OC</version>
<syntax>
<rtype>array</rtype>
<params>
<param>
<type>int</type>
<name>factor</name>
<desc>Factor for the speed. 1000 is a factor of 1.0.</desc>
</param>
<param>
<type>int</type>
<name>constant_value</name>
<desc>Value that is added to the result.</desc>
</param>
</params>
</syntax>
<desc>The value will depend on the wind at the current position of the particle.</desc>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations of the particle system.</remark>
<related>
<funclink>CreateParticle</funclink>
<funclink>PV_Direction</funclink>
<funclink>PV_Random</funclink>
<funclink>PV_Step</funclink>
<funclink>PV_Speed</funclink>
<funclink>PV_KeyFrames</funclink>
<funclink>PC_Die</funclink>
<funclink>PC_Bounce</funclink>
<funclink>PC_Stop</funclink>
</related>
</func>
<author>Zapper</author><date>2013-10</date>
</funcs>

View File

@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>Particles_Colored</title>
<category>Particles</category>
<version>5.3.3 OC</version>
<syntax>
<rtype>proplist</rtype>
<params>
<param>
<type>proplist</type>
<name>prototype</name>
<desc>Particle prototype of which a colored version is returned.</desc>
</param>
<param>
<type>int</type>
<name>color1</name>
<desc>RGB color in format 0xRRGGBB</desc>
</param>
<param>
<type>int</type>
<name>color2</name>
<desc>Secondary color. If given, particles are created with a random color between color and color2.</desc>
<optional />
</param>
</params>
</syntax>
<desc>Creates a colored version of another particle definition.</desc>
<examples>
<example>
<code>CreateParticle("MagicSpark", 0,0, PV_Random(-10,10), PV_Random(-10,10), PV_Random(10,50), Particles_Colored(Particles_Spark(),0xff0000,0x00ff00), 15);</code>
<text>Creates 15 particles with coloration varying between red and green.</text>
</example>
</examples>
<remark>See the <emlink href="particle/index.html">particle documentation</emlink> for further explanations of the particle system.</remark>
<related>
<funclink>CreateParticle</funclink>
</related>
</func>
<author>Sven2</author><date>2013-12</date>
</funcs>

View File

@ -5,7 +5,7 @@
<funcs>
<func>
<title>PushParticles</title>
<category>Particle</category>
<category>Particles</category>
<version>5.1 OC</version>
<syntax>
<rtype>bool</rtype>

View File

@ -13,7 +13,7 @@
<param>
<type>int</type>
<name>max</name>
<desc>Maximum value</desc>
<desc>Maximum value. Must be zero or greater. The bevaviour for negative values is undefined.</desc>
</param>
</params>
</syntax>

View File

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>SaveScenarioObjectAction</title>
<category>System</category>
<version>5.3 OC</version>
<syntax>
<rtype>bool</rtype>
<params>
<param>
<type>proplist</type>
<name>props</name>
<desc>Handle to proplist for storage of this object.</desc>
</param>
</params>
</syntax>
<desc>Stores object action and phase for Objects.c scenario saving (See <emlink href="definition/script.html#ScenSave">Scenario objects saving</emlink>).</desc>
<examples>
<example>
<code>func SaveScenarioObject(props)
{
if (!inherited(props, ...)) return false;
if (!ActIdle())SaveScenarioObjectAction(props);
return false;
}</code>
<text>In addition to default properties, this object also saved its current action unless it is idle.</text>
</example>
</examples>
<related>
<emlink href="definition/script.html#ScenSave">Scenario objects saving</emlink>
</related>
</func>
<author>Sven2</author><date>2013-12</date>
</funcs>

View File

@ -18,7 +18,7 @@
</param>
</params>
</syntax>
<desc>Sets the direction of the object.</desc>
<desc>Sets the direction of the object. If the object defines an action named "Turn", this action is executed after the call of this function.</desc>
<remark>SetDir affects the visual direction of an active object; to modify object motion use <funclink>SetComDir</funclink>.</remark>
<remark>If the object's action has more than two directions (see <emlink href="definition/actmap.html">the ActMap</emlink>), you can also use values other than just <funclink>DIR_Right</funclink> and <funclink>DIR_Left</funclink>.</remark>
<related>
@ -28,5 +28,5 @@
<funclink>SetAction</funclink>
</related>
</func>
<author>jwk</author><date>2002-08</date>
<author>Newton</author><date>2013-11</date>
</funcs>

View File

@ -33,7 +33,7 @@
</params>
</syntax>
<desc>Changes the bounding rectangle of the object. This rectangle is used e.g. for collision or overlap detection. It does not affect object drawing.</desc>
<remark>In various situations the engine will reset the object's shape to the definition value. This might overwrite changes made with SetShape. This will happen e.g. during object rotation but also when resuming a saved game. So this function should only be used for mainly static, unchanging objects and you should readjust the shape manually in synchronization calls like UpdateTransferZone.</remark>
<remark>In various situations the engine will reset the object's shape to the definition value. This might overwrite changes made with SetShape. This will happen e.g. during object rotation but also when resuming a saved game. So this function should only be used for mainly static, unchanging objects and you should read just the shape manually in synchronization calls like OnSynchronized.</remark>
<examples>
<example>
<code><funclink>FindObject</funclink>(<funclink>Find_ID</funclink>(Tree_Coniferous))-&gt;SetShape(-200,-300,400,600);</code>

View File

@ -14,22 +14,22 @@
<param>
<type>int</type>
<name>x</name>
<desc>X position of the top left corner of the new SolidMask rectangle within the definition graphic.</desc>
<desc>X position of the top left corner of the new SolidMask rectangle within the definition's SolidMask.png image.</desc>
</param>
<param>
<type>int</type>
<name>y</name>
<desc>Y position of the top left corner of the new SolidMask rectangle within the definition graphic.</desc>
<desc>Y position of the top left corner of the new SolidMask rectangle within the definition's SolidMask.png image.</desc>
</param>
<param>
<type>int</type>
<name>width</name>
<desc>Width of the new SolidMask rectangle within the definition graphic.</desc>
<desc>Width of the new SolidMask rectangle within the definition's SolidMask.png image.</desc>
</param>
<param>
<type>int</type>
<name>height</name>
<desc>Height of the new SolidMask rectangle within the definition graphic.</desc>
<desc>Height of the new SolidMask rectangle within the definition's SolidMask.png image.</desc>
</param>
<param>
<type>int</type>
@ -43,7 +43,7 @@
</param>
</params>
</syntax>
<desc>Sets the solid area of an object. The source rectangle determines which pixels from the definition graphic should be used. All pixels within the rectangle of less than 50% transparency will be solid. Also see the SolidMask entry in <emlink href="definition/defcore.html">DefCore.txt</emlink>.</desc>
<desc>Sets the solid area of an object. The source rectangle determines which pixels from the definition's SolidMask.png graphic should be used. All pixels within the rectangle of less than 50% transparency will be solid. Also see the SolidMask entry in <emlink href="definition/defcore.html">DefCore.txt</emlink>.</desc>
<remark>Solid areas will internally be drawn in the landscape using the "Vehicle" material.</remark>
<examples>
<example>
@ -52,5 +52,5 @@
</example>
</examples>
</func>
<author>Sven2</author><date>2003-06</date>
<author>Sven2</author><date>2014-01</date>
</funcs>

View File

@ -34,12 +34,12 @@
</params>
</syntax>
<desc>Sets the transfer zone of the object. If the pathfinding trail of another object leads through this transfer zone (a transfer zone is always considered completely passable in pathfinding) ControlTransfer calls will be made to the transfer zone object for the passing clonk. In these calls, the necessary script commands should be given to the clonk so he can pass the object and reach his destination.</desc>
<remark>Transfer zones have to be set anew when the object has moved. Also, they should be set anew in response to a UpdateTransferZone callback made by the engine.</remark>
<remark>Transfer zones have to be set anew when the object has moved. Also, they should be set anew in response to a OnSynchronized callback made by the engine.</remark>
<examples>
<example>
<code>protected func Initialize() { <funclink>return</funclink> UpdateTransferZone(); }
<code>protected func Initialize() { <funclink>return</funclink> OnSynchronized(); }
protected func UpdateTransferZone() { <funclink>return</funclink> SetTransferZone(-<funclink>GetX</funclink>(), -<funclink>GetY</funclink>(), <funclink>LandscapeWidth</funclink>(), <funclink>LandscapeHeight</funclink>());
protected func OnSynchronized() { <funclink>return</funclink> SetTransferZone(-<funclink>GetX</funclink>(), -<funclink>GetY</funclink>(), <funclink>LandscapeWidth</funclink>(), <funclink>LandscapeHeight</funclink>());
protected func ControlTransfer(clonk, endx, endy)
{

View File

@ -39,7 +39,13 @@
<desc>Increases or decreases the number of sounds running in a continuous loop. Value +1 will play this sound indefinitely until it is stopped by calling this function again with value -1. Value 0 will play the sound once normally.</desc>
<optional />
</param>
</params>
<param>
<type>int</type>
<name>custom_falloff_distance</name>
<desc>The further away the sound effect from the player, the more quiet it is played. By default, the sound will not be hearable anymore in a distance of 700 pixels. A custom distance can be specified here.</desc>
<optional />
</param>
</params>
</syntax>
<desc>Plays a sound. The specified sound file has to be available in the group Sound.ocg, in the active scenario file, or in any loaded object definition. The audibility of object local sounds will depend on the position of the object relative to the visible viewports.</desc>
<examples>
@ -48,6 +54,7 @@
<text>Plays a 'Fanfare' sound next to the first found wind generator at half volume.</text>
</example>
</examples>
<related><funclink>SoundAt</funclink></related>
<related><funclink>Music</funclink></related>
</func>
<author>Sven2</author><date>2002-08</date>

View File

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE funcs
SYSTEM '../../../clonk.dtd'>
<?xml-stylesheet type="text/xsl" href="../../../clonk.xsl"?>
<funcs>
<func>
<title>SoundAt</title>
<category>Effects</category>
<version>5.4 OC</version>
<syntax>
<rtype>bool</rtype>
<params>
<param>
<type>string</type>
<name>name</name>
<desc>Name of the sound effect (without .wav/.ogg extension). Wildcards as used by <funclink>WildcardMatch</funclink> are used.</desc>
</param>
<param>
<type>int</type>
<name>x</name>
<desc>X-Position of the sound effect. An offset if called from object-context.</desc>
</param>
<param>
<type>int</type>
<name>y</name>
<desc>Y-Position of the sound effect. An offset if called from object-context.</desc>
</param>
<param>
<type>int</type>
<name>volume</name>
<desc>0-100: volume for playback of the sound. A volume value of <code>nil</code> means playback at 100.</desc>
<optional />
</param>
<param>
<type>int</type>
<name>player</name>
<desc>Player number of the player for which the sound is to be played. In network games, the sound will thus not be audible for the other players. If <code>nil</code> (or not specified), the sound will be played for all players.</desc>
<optional />
</param>
<param>
<type>int</type>
<name>custom_falloff_distance</name>
<desc>The further away the sound effect from the player, the more quiet it is played. By default, the sound will not be hearable anymore in a distance of 700 pixels. A custom distance can be specified here.</desc>
<optional />
</param>
</params>
</syntax>
<desc>Plays a sound at the specified position. The specified sound file has to be available in the group Sound.ocg, in the active scenario file, or in any loaded object definition.</desc>
<related><funclink>Sound</funclink></related>
<related><funclink>Music</funclink></related>
</func>
<author>Sven2</author><date>2002-08</date>
</funcs>

View File

@ -107,11 +107,7 @@ text-decoration: none;
</head>
<body>
<?php
if ($lang == 'de') {
readfile("http://www.openclonk.org/header/header.php?p=docsde");
} else {
readfile("http://www.openclonk.org/header/header.php?p=docs");
}
readfile("http://www.openclonk.org/header/header.html");
?>
<div id="iframe"><iframe src="sdk/content.html"></iframe></div>
<div id="content">

View File

@ -1,19 +1,16 @@
/*
* OpenClonk, http://www.openclonk.org
*
* Copyright (c) 2012 Günther Brammer
* Copyright (c) 2012-2013, The OpenClonk Team and contributors
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
* Distributed under the terms of the ISC license; see accompanying file
* "COPYING" for details.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
* "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.
*/
#ifndef C4SCRIPTSTANDALONE_H

View File

@ -1,36 +0,0 @@
Clonk Source Code License
Clonk source code is distributed through the OpenClonk project
at http://www.openclonk.org under the following license:
-------------------------------------------------------------------------------
Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
-------------------------------------------------------------------------------
Third party library code is included for convenience only and is
covered by their respective licenses. List of libraries:
zlib: Jean-loup Gailly, Mark Adler
libpng: Glenn Randers-Pehrson
jpeglib: Independent JPEG Group
FMOD: Firelight Multimedia
Freetype: The FreeType Project
Allegro: Shawn Hargreaves
GTK+: see LGPL.txt
SDL: see LGPL.txt
SDL_mixer: see LGPL.txt
getopt: see getopt.txt

View File

@ -1,13 +0,0 @@
Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

View File

@ -1,16 +0,0 @@
/*
* OpenClonk, http://www.openclonk.org
*
* Copyright (c) 2001-2009, RedWolf Design GmbH, http://www.clonk.de
*
* Portions might be copyrighted by other authors who have contributed
* to OpenClonk.
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
* See isc_license.txt for full license and disclaimer.
*
* "Clonk" is a registered trademark of Matthes Bender.
* See clonk_trademark_license.txt for full license.
*/

View File

@ -20,10 +20,9 @@ require_once('frontend.php');
<title>OpenClonk Masterserver</title>
<meta charset='utf-8'>
<link rel='stylesheet' href='masterserver.css'>
<link rel='stylesheet' href='http://www.openclonk.org/header/header.css'>
</head>
<body>
<?php include("http://www.openclonk.org/header/header.php?p=masterserver"); ?>
<?php readfile($_SERVER['DOCUMENT_ROOT'].'../www/header/header.html'); ?>
<div id="masterserver">
<h1>Masterserver</h1>
<?php

View File

@ -39,40 +39,16 @@ if ($link && $db) {
die();
}
$server->cleanUp(true); //Cleanup old stuff
if (ParseINI::parseValue('oc_enable_update', $config) == 1 && isset($_REQUEST['action']) && $_REQUEST['action'] == 'release-file' && isset($_REQUEST['file']) && isset($_REQUEST['hash']) && isset($_REQUEST['new_version']) && isset($_REQUEST['platform'])) {
$absolutefile = ParseINI::parseValue('oc_update_path', $config) . $_REQUEST['file'];
if (file_exists($absolutefile)) {
if(hash_hmac_file('sha256', $absolutefile, ParseINI::parseValue('oc_update_secret', $config)) == $_REQUEST['hash']) {
$old_version = isset($_REQUEST['old_version']) && !empty($_REQUEST['old_version']) ? explode(',', mysql_real_escape_string($_REQUEST['old_version'], $link)) : array();
$new_version = mysql_real_escape_string($_REQUEST['new_version'], $link);
$platform = mysql_real_escape_string($_REQUEST['platform'], $link);
$file = mysql_real_escape_string($_REQUEST['file'], $link);
if (!empty($old_version)) {
if (isset($_REQUEST['delete_old_files']) && $_REQUEST['delete_old_files'] == 'yes') {
$result = mysql_query('SELECT `file` FROM `' . $prefix . 'update` WHERE `new_version` != \'' . $new_version . '\' AND `old_version` != \'\' AND `platform` = \'' . $platform . '\'');
while (($row = mysql_fetch_assoc($result)) != false) {
unlink(ParseINI::parseValue('oc_update_path', $config) . $row['file']);
}
}
mysql_query('DELETE FROM `' . $prefix . 'update` WHERE `new_version` != \'' . $new_version . '\' AND `old_version` != \'\' AND `platform` = \'' . $platform . '\'');
foreach ($old_version as $version) {
mysql_query('INSERT INTO `' . $prefix . 'update` (`old_version`, `new_version`, `platform`, `file`) VALUES (\'' . $version . '\', \'' . $new_version . '\', \'' . $platform . '\', \'' . $file . '\')');
}
} else {
if (isset($_REQUEST['delete_old_files']) && $_REQUEST['delete_old_files'] == 'yes') {
$row = mysql_fetch_assoc(mysql_query('SELECT `file` FROM `' . $prefix . 'update` WHERE `old_version` = \'\' AND `platform` = \'' . $platform . '\''));
unlink(ParseINI::parseValue('oc_update_path', $config) . $row['file']);
}
mysql_query('DELETE FROM `' . $prefix . 'update` WHERE `old_version` = \'\' AND `platform` = \'' . $platform . '\'');
mysql_query('INSERT INTO `' . $prefix . 'update` (`old_version`, `new_version`, `platform`, `file`) VALUES (\'\', \'' . $new_version . '\', \'' . $platform . '\', \'' . $file . '\')');
}
} else {
C4Network::sendAnswer(C4Network::createError('Hash incorrect.'));
}
} else {
C4Network::sendAnswer(C4Network::createError('Specified file not found.'));
// register new release
if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'release-file') {
try {
registerRelease();
} catch(Exception $e) {
C4Network::sendAnswer(C4Network::createError($e->getMessage()));
}
} else if (isset($GLOBALS['HTTP_RAW_POST_DATA'])) { //data sent from engine?
// prepare data for the engine
} else if (isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
$input = $GLOBALS['HTTP_RAW_POST_DATA'];
$action = ParseINI::parseValue('Action', $input);
$csid = ParseINI::parseValue('CSID', $input);
@ -83,17 +59,17 @@ if ($link && $db) {
switch ($action) {
case 'Start': //start a new round
if (ParseINI::parseValue('LeagueAddress', $reference)) {
C4Network::sendAnswer(C4Network::createError('League not supported!'));
C4Network::sendAnswer(C4Network::createError('IDS_MSG_LEAGUENOTSUPPORTED'));
} else {
$csid = $server->addReference($reference);
if ($csid) {
$answer = array('Status' => 'Success', 'CSID' => $csid);
if(!testHostConn($input))
$answer['Message'] = 'Your network failed to pass certain tests. It is unlikely that are you able to host for the public.|To fix that, you need port forwarding in your router.';
$answer['Message'] = 'IDS_MSG_MASTERSERVNATERROR';
C4Network::sendAnswer(C4Network::createAnswer($answer));
unset($answer);
} else {
C4Network::sendAnswer(C4Network::createError('Round signup failed. (To many tries?)'));
C4Network::sendAnswer(C4Network::createError('IDS_MSG_MATERSERVSIGNUPFAIL'));
}
}
break;
@ -101,26 +77,26 @@ if ($link && $db) {
if ($server->updateReference($csid, $reference)) {
C4Network::sendAnswer(C4Network::createAnswer(array('Status' => 'Success')));
} else {
C4Network::sendAnswer(C4Network::createError('Round update failed.'));
C4Network::sendAnswer(C4Network::createError('IDS_MSG_MASTERSERVUPDATEFAIL'));
}
break;
case 'End': //remove a round
if ($server->removeReference($csid)) {
C4Network::sendAnswer(C4Network::createAnswer(array('Status' => 'Success')));
} else {
C4Network::sendAnswer(C4Network::createError('Round end failed.'));
C4Network::sendAnswer(C4Network::createError('IDS_MSG_MASTERSERVENDFAIL'));
}
break;
default:
if (!empty($action)) {
C4Network::sendAnswer(C4Network::createError('Unknown action.'));
C4Network::sendAnswer(C4Network::createError('IDS_MSG_MASTERSERVNOOP'));
} else {
C4Network::sendAnswer(C4Network::createError('No action defined.'));
C4Network::sendAnswer(C4Network::createError('IDS_MSG_MASTERSERVNOOP'));
}
break;
}
} else {
C4Network::sendAnswer(C4Network::createError('Wrong engine, "' . ParseINI::parseValue('Game', $input) . '" expected.'));
C4Network::sendAnswer(C4Network::createError('IDS_MSG_MASTERSERVWRONGENGINE'));
}
} else { //list availabe games
$list = array();
@ -178,4 +154,76 @@ if ($link && $db) {
else {
C4Network::sendAnswer(C4Network::createError('Database error.'));
}
function registerRelease()
{
global $config, $link, $prefix;
// check request validity
if (ParseINI::parseValue('oc_enable_update', $config) != 1)
throw new Exception('Update disabled on this server.');
// mandatory parameters
if (!isset($_REQUEST['file']))
throw new Exception('Missing mandatory parameter "file"');
if (!isset($_REQUEST['hash']))
throw new Exception('Missing mandatory parameter "hash"');
if (!isset($_REQUEST['new_version']))
throw new Exception('Missing mandatory parameter "new_version"');
if (!isset($_REQUEST['platform']))
throw new Exception('Missing mandatory parameter "platform"');
if (!isset($_REQUEST['hash']))
throw new Exception('Missing mandatory parameter "hash"');
// authorization
$absolutefile = ParseINI::parseValue('oc_update_path', $config) . $_REQUEST['file'];
if (!file_exists($absolutefile))
throw new Exception('Specified file "'.$absolutefile.'" not found.');
$filehash = hash_hmac_file('sha256', $absolutefile, ParseINI::parseValue('oc_update_secret', $config));
if ($filehash != $_REQUEST['hash'])
throw new Exception('Authorization failure: Hash incorrect.');
// checks done, now update DB
$old_version = array();
if (isset($_REQUEST['old_version']) && !empty($_REQUEST['old_version']))
$old_version = explode(',', mysql_real_escape_string($_REQUEST['old_version'], $link));
$delete_old_files = false;
if (isset($_REQUEST['delete_old_files']) && $_REQUEST['delete_old_files'] == 'yes')
$delete_old_files = true;
$new_version = mysql_real_escape_string($_REQUEST['new_version'], $link);
$platform = mysql_real_escape_string($_REQUEST['platform'], $link);
$file = mysql_real_escape_string($_REQUEST['file'], $link);
if (!empty($old_version)) {
if ($delete_old_files) {
$result = mysql_query('SELECT `file` FROM `' . $prefix . 'update` WHERE `new_version` != \'' . $new_version . '\' AND `old_version` != \'\' AND `platform` = \'' . $platform . '\'');
while (($row = mysql_fetch_assoc($result)) != false) {
unlink(ParseINI::parseValue('oc_update_path', $config) . $row['file']);
}
}
mysql_query('DELETE FROM `' . $prefix . 'update` WHERE `new_version` != \'' . $new_version . '\' AND `old_version` != \'\' AND `platform` = \'' . $platform . '\'');
foreach ($old_version as $version) {
mysql_query('INSERT INTO `' . $prefix . 'update` (`old_version`, `new_version`, `platform`, `file`) VALUES (\'' . $version . '\', \'' . $new_version . '\', \'' . $platform . '\', \'' . $file . '\')');
}
} else {
if ($delete_old_files) {
$row = mysql_fetch_assoc(mysql_query('SELECT `file` FROM `' . $prefix . 'update` WHERE `old_version` = \'\' AND `platform` = \'' . $platform . '\''));
unlink(ParseINI::parseValue('oc_update_path', $config) . $row['file']);
}
mysql_query('DELETE FROM `' . $prefix . 'update` WHERE `old_version` = \'\' AND `platform` = \'' . $platform . '\'');
mysql_query('INSERT INTO `' . $prefix . 'update` (`old_version`, `new_version`, `platform`, `file`) VALUES (\'\', \'' . $new_version . '\', \'' . $platform . '\', \'' . $file . '\')');
}
}
?>

View File

@ -1,2 +1,2 @@
[Head]
Index=4
Index=5

Some files were not shown because too many files have changed in this diff Show More