https://github.com/flwmxd/MapleStory-Porting
MapleStory implementation build with early stage MapleEngine
https://github.com/flwmxd/MapleStory-Porting
android client cpp editor game game-engine game-engine-2d ios lua maplestory opengl opengl-es opengl2 switch windows
Last synced: about 5 hours ago
JSON representation
MapleStory implementation build with early stage MapleEngine
- Host: GitHub
- URL: https://github.com/flwmxd/MapleStory-Porting
- Owner: flwmxd
- License: agpl-3.0
- Created: 2020-05-16T11:27:30.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2020-09-25T09:28:13.000Z (over 5 years ago)
- Last Synced: 2023-10-19T19:41:10.047Z (over 2 years ago)
- Topics: android, client, cpp, editor, game, game-engine, game-engine-2d, ios, lua, maplestory, opengl, opengl-es, opengl2, switch, windows
- Language: Lua
- Homepage:
- Size: 30.1 MB
- Stars: 122
- Watchers: 4
- Forks: 21
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-maplestory - PharaohStroy - A maplestory IDE which can develop the multi-platform maplestory game (Uncategorized / Uncategorized)
README
# 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|
| ----|------|
[]()|[]()

# 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
* [glfw3](https://github.com/glfw/glfw)
* [glew](https://github.com/nigels-com/glew)
* [freetype2](https://www.freetype.org/)
* [iconv](http://www.gnu.org/software/libiconv/)
* [lua](http://www.lua.org/)
* [openal](www.openal.org/)
* [zlib](www.zlib.net/)
* [imgui](https://github.com/ocornut/imgui)
* [WzTools](https://github.com/flwmxd/WzTools)
# 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 :
``` lua
--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 :
``` lua
-- 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 :
``` lua
-- 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
``` lua
local node = ......
--create a sprite with given node
local sprite = Sprite.new(node)
-- add into you scene
scene:addChild(sprite)
```
* WzNode (Native)
```lua
-- 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.
```lua
--- @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 .
```