All Projects → ocharles → Hs Quake 3

ocharles / Hs Quake 3

Licence: other
Quake 3 map viewer written in Haskell

Programming Languages

haskell
3896 projects

Projects that are alternatives of or similar to Hs Quake 3

Yampa
Functional Reactive Programming domain-specific language embedded in Haskell, for programming efficient hybrid (mixed discrete-time and continuous-time) systems.
Stars: ✭ 294 (+790.91%)
Mutual labels:  frp, game, opengl
Open Builder
Open "Minecraft-like" game with multiplayer support and Lua scripting support for the both client and server
Stars: ✭ 569 (+1624.24%)
Mutual labels:  game, opengl
Freeorion
Source code repository of the FreeOrion project.
Stars: ✭ 507 (+1436.36%)
Mutual labels:  game, opengl
Gameoverlay
🎮 GameOverlay using CEF with support for common rendering backends
Stars: ✭ 32 (-3.03%)
Mutual labels:  game, opengl
Tprpix
a Cross-Platform, 2D Survival Sandbox Game Project. Based on C++17/cmake/OpenGL/SQLite3.
Stars: ✭ 448 (+1257.58%)
Mutual labels:  game, opengl
Lasercrabs
Launch your LASERCRAB at walls, ceilings, and enemy heads in this indie multiplayer shooter where "move" and "attack" are synonymous.
Stars: ✭ 465 (+1309.09%)
Mutual labels:  game, opengl
Ouzel
C++ game engine for Windows, macOS, Linux, iOS, tvOS, Android, and web browsers
Stars: ✭ 607 (+1739.39%)
Mutual labels:  game, opengl
Sulis
Turn based tactical RPG with several campaigns, written in Rust
Stars: ✭ 338 (+924.24%)
Mutual labels:  game, opengl
Effekseer
Stars: ✭ 728 (+2106.06%)
Mutual labels:  game, opengl
Openspades
Compatible client of Ace of Spades 0.75
Stars: ✭ 769 (+2230.3%)
Mutual labels:  game, opengl
Zemeroth
😠⚔️😈 A minimalistic 2D turn-based tactical game in Rust
Stars: ✭ 940 (+2748.48%)
Mutual labels:  game, opengl
Taisei
A free and open-source Touhou Project fangame
Stars: ✭ 428 (+1196.97%)
Mutual labels:  game, opengl
Rigelengine
A modern re-implementation of the classic DOS game Duke Nukem II
Stars: ✭ 393 (+1090.91%)
Mutual labels:  game, opengl
Etlegacy Deprecated
Archived repository. For current repo, see: https://github.com/etlegacy/etlegacy
Stars: ✭ 470 (+1324.24%)
Mutual labels:  game, opengl
Exengine
A C99 3D game engine
Stars: ✭ 391 (+1084.85%)
Mutual labels:  game, opengl
Arxlibertatis
Cross-platform port of Arx Fatalis, a first-person role-playing game
Stars: ✭ 602 (+1724.24%)
Mutual labels:  game, opengl
Fimbulclient
Open source Ragnarök Online client in C++
Stars: ✭ 8 (-75.76%)
Mutual labels:  game, opengl
Zoc
⬡ Zone of Control is a hexagonal turn-based strategy game written in Rust. [DISCONTINUED]
Stars: ✭ 327 (+890.91%)
Mutual labels:  game, opengl
Magnum
Lightweight and modular C++11 graphics middleware for games and data visualization
Stars: ✭ 3,728 (+11196.97%)
Mutual labels:  game, opengl
Expo Crossy Road
🐥🚙 Crossy Road game clone made in Expo (iOS, Android, web), THREE.js, Tween, React Native. 🐔
Stars: ✭ 701 (+2024.24%)
Mutual labels:  game, opengl

hs-quake-3

Hello, welcome to the hs-quake-3 repository! This project re-implements various parts of the Quake 3 game in Haskell.

.. image:: 2017-04-17-progress.png

Features currently supported:

  • Most shader operations work. Most texture modulation functions work, multiple passes with blending, alpha testing and sorting are implemented.

  • BSP file parsing, and use of the PVS data to perform occlusion culling.

Still to be done:

  • Sky boxes
  • Fog
  • Vertex deformation
  • Curved surfaces
  • Entities

Map

To give you an overview of the project:

  • Quake3.Shader.Parser is responsible for parsing Quake 3 shader files into an AST.

  • Quake3.Shader.TypeCheck "type checks" the result of parsing. At this stage, we register known shader opcodes and their parameters, and type check into a considerably richer data structure.

  • Quake3.Shader.GL takes the result of type-checking, and can transform shaders into a graph of OpenGL calls. This graph is described by RenderGraph.

  • RenderGraph allows one to describe a rendering pipe-line out of smaller components. The idea behind the render graph is to collect and sort common operations - state changes in OpenGL are expensive, so we want to avoid them wherever possible. RenderGraph currently contains nodes necessary for rendering (most of) Quake 3 - nodes to bind texture stages, set shader parameters, enable multiple passes, and so.

    This module is independent of Quake 3, and may well be usable in other projects.

  • GLObjects is a light wrapper around objects offered by OpenGL. Here we have what are essentially newtype wrappers around textures, vertex array objects, and helper functions to create/upload data.

  • Wires.* contains the logic of the game. Wires.Game is responsible for taking the camera position, determining which clusters are visible to deliver a final render. Wires.Camera implements a rudimentary first-person camera, interpreting SDL keyboard and mouse events as matrix transformations.

  • UI/Main forms the initialization process.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].