All Projects → flwmxd → Pharaohstroy

flwmxd / Pharaohstroy

Licence: agpl-3.0
A maplestory IDE which can develop the multi-platform maplestory game

Programming Languages

lua
6591 projects
cpp
1120 projects

Projects that are alternatives of or similar to Pharaohstroy

Etlegacy
ET: Legacy is an open source project based on the code of Wolfenstein: Enemy Territory which was released in 2010 under the terms of the GPLv3 license.
Stars: ✭ 212 (+207.25%)
Mutual labels:  game, game-engine, opengl
Magnum
Lightweight and modular C++11 graphics middleware for games and data visualization
Stars: ✭ 3,728 (+5302.9%)
Mutual labels:  game, game-engine, opengl
Urde
Data interchange and engine re-implementation for games by Retro Studios | Mirror
Stars: ✭ 253 (+266.67%)
Mutual labels:  game, opengl, editor
Flux
A real-time physically based rendering engine written in C++ and OpenGL
Stars: ✭ 171 (+147.83%)
Mutual labels:  game, game-engine, opengl
Etlegacy Deprecated
Archived repository. For current repo, see: https://github.com/etlegacy/etlegacy
Stars: ✭ 470 (+581.16%)
Mutual labels:  game, game-engine, opengl
Engine
A basic cross-platform 3D game engine
Stars: ✭ 208 (+201.45%)
Mutual labels:  game, game-engine, opengl
Rabbittoolbox
🤸🏾‍♀️👗开源的动画渲染软件,提倡以简单、易用,高质量的物理演算以及渲染质量和性能,为喜爱二次元动画的用户降低视频制作门槛
Stars: ✭ 309 (+347.83%)
Mutual labels:  game-engine, opengl, opengl-es
Magnum Examples
Examples for the Magnum C++11/C++14 graphics engine
Stars: ✭ 180 (+160.87%)
Mutual labels:  game-engine, opengl, opengl-es
Q3lite
Q3lite, an OpenGL ES port of Quake III Arena for embedded Linux systems.
Stars: ✭ 64 (-7.25%)
Mutual labels:  game, game-engine, opengl-es
Etengine
Realtime 3D Game-Engine with a focus on space sim. Written in C++ 14
Stars: ✭ 408 (+491.3%)
Mutual labels:  game-engine, opengl, editor
Openage
Free (as in freedom) open source clone of the Age of Empires II engine 🚀
Stars: ✭ 10,712 (+15424.64%)
Mutual labels:  game, game-engine, opengl
Ouzel
C++ game engine for Windows, macOS, Linux, iOS, tvOS, Android, and web browsers
Stars: ✭ 607 (+779.71%)
Mutual labels:  game, game-engine, opengl
Voxelman
Plugin-based client-server voxel game engine written in D language
Stars: ✭ 105 (+52.17%)
Mutual labels:  game, game-engine, opengl
Magnum Plugins
Plugins for the Magnum C++11/C++14 graphics engine
Stars: ✭ 66 (-4.35%)
Mutual labels:  game-engine, opengl, opengl-es
Flextgl
OpenGL and Vulkan header and loader generator.
Stars: ✭ 180 (+160.87%)
Mutual labels:  game-engine, opengl, opengl-es
Qfusion
Source code for cross-platform OpenGL gaming engine
Stars: ✭ 255 (+269.57%)
Mutual labels:  game-engine, opengl, opengl-es
O2
2D Game Engine with visual WYSIWYG editor
Stars: ✭ 121 (+75.36%)
Mutual labels:  game-engine, opengl, editor
Opentk
The Open Toolkit library is a fast, low-level C# wrapper for OpenGL, OpenAL & OpenCL. It also includes windowing, mouse, keyboard and joystick input and a robust and fast math library, giving you everything you need to write your own renderer or game engine. OpenTK can be used standalone or inside a GUI on Windows, Linux, Mac.
Stars: ✭ 2,284 (+3210.14%)
Mutual labels:  game-engine, opengl, opengl-es
Rigelengine
A modern re-implementation of the classic DOS game Duke Nukem II
Stars: ✭ 393 (+469.57%)
Mutual labels:  game, game-engine, opengl
Pmtech
Lightweight, multi-platform, data-oriented game engine.
Stars: ✭ 478 (+592.75%)
Mutual labels:  game-engine, opengl, opengl-es

Pharaoh MapleStory

Pharaoh-MapleStory is a collection of tools for MapleStory, which contains a client-editor, a file-browser and the client itself. It support the .wz files(include GMS KMS CMS).

The business logic are written by lua.

Windows10 Others
Build status Build Status

Usage

The editor contains a MapleStory-FileSystem-Browser, so you can use it find a resource and add it into game scene

Beside, it support script-binding like Unity. so you can drag your own script to some specific GameObject

### Others

if you want to add your own function,please read more NativeAPI for lua under the document.

Dependency

Main features

  • Language: C++ 17, with Lua, and lower dependency on os
  • High quality code and modern game engine architecture
  • Use own editor can be easily to create UI layer
  • Basic Buttons,EditText TextView (Supprot maplestory rich-text)
  • Smart memory management
  • Support SIMD
  • Support ImGui
  • Support for .ttf fonts
  • Support UTF-8 and UTF-16 and none-ascii characters

Current Code

Those code in this repository are lua script. the C++ code will be updated in the future because they are so messy now.

Architecture

this engine include two parts, one is the lua which is used to write core business and editor-plugin

in the native framework, it support the basic engine function such as Audio,Graphics,etc

Engine Architecture

in lua framework, it include all upper engine components (GameObject,Scene,Sprite,Other UI components)

Processing Graph

Some Concepts

GameObject

GameObject is a container and basic updatable, drawable, transformable, eventable,scriptable,serializable object. it's the root object in whole engine. it has a strong connection with engine and editor

Sprite

Sprite is a 2d graphic object which can change its color, transform(scale rotation postion,etc)

Scene

Scene is also a container, which is responsibilty for managing the whole game business logic and others components like sprite and UI . you can create it by using editor and can be switch easily.

UI

UI is user interface, these are components like Button TextView EditText.

The Button implements the original maplestory button logic, so you can add button from asserts easily.

The TextView implements the maplestory Rich-Text in native.

Roadmap

Platform Windows Mac Linux Android iOS Switch
Basic Render Done(OpenGL 2.0) - - Done(OpenGL ES 2.0) Done(OpenGL ES 2.0) -
Native Event Done(glfw3)
Audio XAudio - - OpenSLES OpenAL -
FileSystem Done - - - - -
SIMD SSE SSE SSE NEON NEON NEON
Lua Wrapper Progrssing
Editor Progrssing
Script Binding Progrssing
Physics Future
Particle System Future
Game Business Future

Some Native Api for Lua

  • Matrix (Native)

the matrix object is created by native because it involve a large number of calculation.

Example :
--create a zero matrix
    local matrix = Matrix.new()  
-- or 
    local matrix = Matrix.new({
        1,0,0,0,
        0,1,0,0,
        0,0,1,0,
        0,0,0,1
    })  
-- create an identity 
    local matrix = Matrix.identity()

-- there are others apis for transform

    function setTranslation(x,y,z) end
    function setRotation(Quaternion) end
    function setScale(x,y,z) end
    function setOrthographic(l,r,t,b,zNearPlane,zFarPlane) end

-- get a inverse matrix
-- @return a new matrix
    function invert() end
-- matrix also support the mul operator
    local m =  Matrix.new() *  Matrix.new()

  • Quaternion (Native)
Example :
-- create a Quaternion
    local q = Quaternion.new()
--or
    local q = Quaternion.identity()
-- set euler angle 
    function setEulerAngles(x,y,z) end

--combine with matrix
    local q = Quaternion.new()
    q:setEulerAngles(x,y,z)
    local rotationMatrix = Matrix.new()
    rotationMatrix:setRotation(self.rotation)

Example :

-- get a wz-node under UI.wz/UIWindow.img/AdminClaim
-- @return the WzNode which is a lua object
local node = WzFile.ui["UIWindow.img"]["AdminClaim"]["BtPClaim"]
  • if the current node is a sprite type, which can be used to init a sprite
local node = ......
--create a sprite with given node
local sprite = Sprite.new(node)
-- add into you scene
scene:addChild(sprite)

  • WzNode (Native)
-- parse the path resource
wz.flat(string path) -> table {
    name ->  WzNode(lightuserdata),
    name2 -> WzNode(lightuserdata)
    .....
}

-- expand the rawPtr, get all sub node in it
wz.expand(rawPtr) -> table {
    name ->  WzNode(lightuserdata),
    name2 -> WzNode(lightuserdata)
    .....
}

-- convert the current node into different data type 
wz.toInt(@lightuserdata rawPtr,default) -> lua_number

wz.toReal(@lightuserdata rawPtr,default) -> lua_number

wz.toString(@lightuserdata rawPtr,default) -> lua_string

wz.toVector(@lightuserdata rawPtr) -> lua_number

  • Audio (Native)

Audio component is a native engine which is desigined for play music and effect.

--- @param nodePath string
audio.playBGM(nodePath)

--- @param node string or id(which is pre-defined)
audio.playEffect(node)

-- there are all pre-defined audio effects
audio.BUTTONCLICK,
audio.BUTTONOVER,
audio.SELECTCHAR,
audio.GAMESTART,
audio.SCROLLUP,
audio.ATTACK,
audio.ALERT,
audio.JUMP,
audio.DROP,
audio.PICKUP,
audio.PORTAL,
audio.LEVELUP,
audio.DIED,
audio.INVITE,
audio.BUY_SHOP_ITEM,
audio.USE,
audio.TRANSFORM,
audio.QUEST_ALERT,
audio.QUEST_CLEAR,
audio.ENCHANT_FAILURE,
audio.ENCHANT_SUCCESS,

License


 This file is part of the PharaohStroy MMORPG client                      
 Copyright ?2020-2022 Prime Zeng                                          
                                                                          
 This program is free software: you can redistribute it and/or modify     
 it under the terms of the GNU Affero 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 Affero General Public License for more details.                      
                                                                          
 You should have received a copy of the GNU Affero General Public License 
 along with this program.  If not, see <http:www.gnu.org/licenses/>.    

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].