Coder Social home page Coder Social logo

aaronlcj / machines Goto Github PK

View Code? Open in Web Editor NEW

This project forked from nightdive-studio/machines

0.0 1.0 0.0 5.29 MB

The 3D Real-Time Strategy video game from 1999 developed by Charybdis and distributed by Acclaim.

License: GNU General Public License v3.0

CMake 0.22% Dockerfile 0.01% Shell 0.52% C++ 77.36% PHP 1.00% C 20.66% Objective-C 0.24%

machines's Introduction

Machines: Wired For War

3D Real Time Strategy video game GL port source code

Released as a free software under a permission of Night Dive Studios who owns the rights to the game.

Followed conventions:

  • file names use a DOS convention (8 chars + 3 for extension), not strictly followed any more,
  • macros are all UPPER_CASE in code, sometimes it may be enum cases,
  • classes are named WithUpperCaseLetter on the beginning and between words,
  • class private members are named with dash on the end someVar_ and with lower case on the beginning,
  • pointer names start from p pPointerVar_,
  • some class members are "seamleslly" declared from implClass with CB_DEPIMPL macro,
  • use _NEW, _NEW_ARRAY, _DELETE, _DELETE_ARRAY, _STATIC_CAST, _CONST_CAST macros instead,
  • comments added now to cut out the code starts from the beginning of the line// (no spaces before),
  • std::string and string are different classes - the second one is added to support persistence (dump to/load from binfile),
  • old watcom compiler did not support namespaces,
  • templates were instantiated explicitly in separate sources, this was commented out in most of the cases (not sure if it was reasonable),

The main code is spilt into a set of libraries:

  • afx - SDL app window creation, string resources handling,
  • ani - smacker animations,
  • base - compiler type things, new and delete overloaded global operators, leak and stack tracker (not used), persistence and logging mechanisms,
  • ctl - charybdis template library - this was created to improve STL functionality, now it is a wrapper around gnu stl - note it uses public inheritance from std containers, found no problems yet? Only ctl containers support persistence,
  • device - mice, keyboards, timers, (back when they did that stuff and didn't just rely on direct x), cd audio (music track),
  • envirnmt - maps, sky loading code,
  • gui - base classes for gui concepts (buttons, list, scrolling dialog windows and such like),
  • gxin - parser for old .agt text format meshes,
  • machgui - the real machines based UI,
  • machlog - the logic stuff, AI, choosing levels and such like,
  • machphys - the renderable bits of machines (agressors, administrators, mines, etc),
  • mathex - maths libraries,
  • network - low level communication layer,
  • phys - base classes of some physics types things - this is NOT real time physics - by how to fiddle it,
  • profiler - not used now,
  • recorder - allows to record and replay all the in game activity, events, random seeds etc. Game works in single thread, useful when reproducing a bug (not checked if it works),
  • render - base library for rendering primitives, triangles, meshes, textures, materials, surfaces, etc,
  • sim - base classes for things that can be simulated,
  • sound - loading and playing wave samples 2D/3D,
  • stdlib - now a little has left from it (there was cout, cerr, etc ),
  • system - mostly file device handling, msgbox, metafile, registry (xml config),
  • utility - helpers of various types, e.g. file parsers. again a lot of this stuff you wouldn't bother with now but back then there was no source forge or even google,
  • world4d - built on top of the render libraries, turned basic rendering into multi-mesh entities (W4dEntity is a base class for lot of things),
  • xin - .X mesh file loading into game engine (added now),

Build dependencies Use provided Docker image for building or manually setup your environment.

libsdl2-dev libsdl2-image-dev libopenal-dev libalure-dev libenet-dev libfreetype6-dev libglew-dev libglm-dev libaudio-dev

Building git clone && git lfs pull

  • Windows exe on linux/docker: sudo apt-get install mingw-w64 mkdir buildMingw64 && cd buildMingw64 cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw64.cmake .. or 32-bit mkdir buildMingw32 && cd buildMingw32 cmake -DCMAKE_TOOLCHAIN_FILE=../cmake/Toolchain-mingw32.cmake -DBUILD_32=1 .. Extra parameters for release optimizations: -DCMAKE_BUILD_TYPE=RELEASE -DDEV_BUILD=OFF

  • For linux: mkdir build && cd build cmake .. make -j 9

Class invariant checks export CB_INVARIANT_CHECKING=on

Debug streams To turn on a stream define environment variable with correct name, eg. set CB_HAL_TO=cout or in linux shell export CB_HAL_TO=cout. Target cout is a current shell of course, replace it with filename to write log into or leave empty to turn off. Avaiable streams: (base/diag.hpp)

  • BOB
  • HAL
  • IAIN
  • JERRY
  • RICHARD
  • JON
  • YUEAI
  • LIONEL
  • CERI
  • NEIL
  • MISC
  • WHERE
  • TRACE
  • MEMORY
  • RENDER
  • PER_READ
  • PER_WRITE
  • NETWORK
  • WAYNE
  • DANIEL
  • MOTSEQ
  • CS2PATH // Config space pathfinding stuff (domain and normal)
  • CS2VGRA // Visibility graph diagnostics
  • OBSERVER // trapping observer pattern problems - stream added to due volume of output
  • PATH_PROFILE // Debugging the path profile across the planet surface
  • SOUND
  • REC_RECORD
  • REC_PLAYBACK
  • NET_ANALYSIS
  • A_STAR
  • LINEAR_TRAVEL // Stream for use by PhysLinearTravelPlan
  • PLANET_SURFACE // Used for reporting errors in a planet surface
  • PHYS_MOTION // Physical motion stream
  • NETWORK_ERRORS // Specifically to help us spot network errors (such as loss of synchronicity)
  • MEX_GRID2D
  • CONFIG_SPACE

machines's People

Contributors

markol avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.