Welcome!

Join our community of MMO enthusiasts and game developers! By registering, you'll gain access to discussions on the latest developments in MMO server files and collaborate with like-minded individuals. Join us today and unlock the potential of MMO server development!

Join Today!

PokeSharp, a C# pokemon engine (Fire Red based)

Custom Title Activated
Member
Joined
Nov 14, 2008
Messages
1,025
Reaction score
640
Last thread update: 2013, July 3rd

PokeSharp (for lack of a better name)

PokeSharp is a Pokemon engine written in C# using the XNA framework for rendering. The engine has been in development for quite some time however no in-game related things have been programmed yet, only the Map Editor has been worked on so far. However, Alot of the stuff written for the Map Editor will be reused for the Engine itself.

Purpose

The engine is being made to replace Pokemon Essentials. It will allow for a much better experience. Whenever I play a RPG maker based pokemon game, it alway feels weird and not like the original games and this is what I am trying to change in my Engine. The Map Editor is built for fast development and has only a small learning curve.

Cost

The engine will be absolutely free. I am 15 years old and doing this alone and completely out of free will, donations are greatly appreciated. Those who donate 5$ and up will have some sort of honorable mentions, I don't know yet. Perhaps a special rank on the forum when we have one or access to new builds of the engine and upcoming features.

Features

Engine Features:
- Day Night cycles with customizable colors
- C# Game component scripting
- Dynamically generated shadows for entities
- User-friendly easy to make events with all flow control statements
- Striving to make the engine feels EXACTLY like you were playing the real games, unlike with RPG Maker XP

Game Editor Features:
- All-in-one game editor, edit everything in it from maps to items to moves
- Import your own tilesets and entities
- Logic tile C# scripts
- Definable default project to load when the editor is opened
- 16 Layers of tiles
- Built-In script editor with syntax highlighting

FAQ

Q: What language is it written in? Does it use any framework?
A: C#, XNA framework

Q: What will it cost?
A: Free, will take donations

Q: How long have you been programming for?
A: Almost 2 years now. Started with Java and moved to C# about 2 months ago. C# is much more powerful. Screw Java. Java sucks. (for games at least...)

Q: What are your plans with regards to functions the future game developers will have once this engine is released? Rudimentary functions such as adding NPC's, giving Pokemon, giving items, etc. are expected but to which detail are you looking to giving default functions and actions for the developer to use?
A: Everything that has been done in Pokemon games from Pokemon Red to Pokemon Black and White 2 should be hopefully doable, whether it be an actual integrated feature of the engine or something you will have to code yourself with a LUA script.

Q: Will it be ported to the Xbox 360 seeing as it uses the XNA framework?
A: I don't think so. If yes, you will not be able to create projects on it, you will have to make them on the computer then submit them to a marketplace or something like that then it will be downloadable on the Xbox.

Medias

Engine
[youtube]https://www.youtube.com/watch?v=wPkDUCsacio[/youtube]
[youtube]https://www.youtube.com/watch?v=m7ZdS1g1Wvo[/youtube]
[youtube]http://www.youtube.com/watch?v=kO9rSbEZMyQ[/youtube]

Map Editor
[youtube]http://www.youtube.com/watch?feature=player_embedded&v=s09VA4pO0VQ[/youtube]

Credits
Pokemon Dawn / Krissel095 - same programming design patterns hierarchy reused + map editor design inspiration + some code from Dawn
 
Last edited:
RaGEZONER || Webdevloper
Banned
Joined
Oct 6, 2011
Messages
614
Reaction score
130
Not bad. I really like the map editor.
 
Initiate Mage
Joined
Jul 22, 2012
Messages
32
Reaction score
3
Wow this looks great, just a few questions.
When mapping how does it know a tile which can / cannot be walked on? Buildings for example you cannot walk on, but a door will move you to a new location. Im just curious, is it all coded into the actual Map Editor?

Another thing, i think solo is probably best to start with and then possibly add multiplayer as an option once majority of the core features have been implemented
 
Custom Title Activated
Member
Joined
Nov 14, 2008
Messages
1,025
Reaction score
640
Wow this looks great, just a few questions.
When mapping how does it know a tile which can / cannot be walked on? Buildings for example you cannot walk on, but a door will move you to a new location. Im just curious, is it all coded into the actual Map Editor?

Another thing, i think solo is probably best to start with and then possibly add multiplayer as an option once majority of the core features have been implemented

At first in my java engine, every tiles were treated as their own object and had their own class but it took a tremendous amount of work and I grew bored. It was also required due to how I had logic tiles set up. This time around, I decided to make it so only the map editor does the logic tile work and passable / non-passable tiles will be done on a different layer (kinda like the real pokemon)

Starting with multiplayer in mind is actually a much better way of doing things as most of the singleplayer code would be moved to multiplayer (or at least, if we don't want hackers or anything like that)
 
Last edited:
Initiate Mage
Joined
Jul 22, 2012
Messages
32
Reaction score
3
At first in my java engine, every tiles were treated as their own object and had their own class but it took a tremendous amount of work and I grew bored. It was also required due to how I had logic tiles set up. This time around, I decided to make it so only the map editor does the logic tile work and passable / non-passable tiles will be done on a different layer (kinda like the real pokemon)

Starting with multiplayer in mind is actually a much better way of doing things as most of the singleplayer code would be moved to multiplayer (or at least, if we don't want hackers or anything like that)
By layers you mean, Layer 1 = all walkable tiles, Layer 2 = non-passable tiles?

Starting with Multiplayer would make it more confusing when you make it Single player? as you would have to remove all of the multiplayer code. rather than adding it in once single is complete?

Another thing that crossed my mind was, how are you going to handle the pokemon?
For example, pokenet uses bulbapedia to store all the pokemon data, however in your original post you put "to make custom adventures and games", custom adventures then yeh this is beneficial, but if it was a brand new game with new monsters etc... the code would need modifying greatly due to it pulling the data from a 3rd party site
Have you got an idea in mind to handle this?
 
Custom Title Activated
Member
Joined
Nov 14, 2008
Messages
1,025
Reaction score
640
By layers you mean, Layer 1 = all walkable tiles, Layer 2 = non-passable tiles?

Starting with Multiplayer would make it more confusing when you make it Single player? as you would have to remove all of the multiplayer code. rather than adding it in once single is complete?

Another thing that crossed my mind was, how are you going to handle the pokemon?
For example, pokenet uses bulbapedia to store all the pokemon data, however in your original post you put "to make custom adventures and games", custom adventures then yeh this is beneficial, but if it was a brand new game with new monsters etc... the code would need modifying greatly due to it pulling the data from a 3rd party site
Have you got an idea in mind to handle this?

Layers as in tile layer, movement permission layer, just like in the real pokemon.

For the data, i'm gonna scrap all the data I need from bulbapedia and load it from my data files which will be easily editable for those who would like to turn for example castform into a completely viable team member.

Also pokenet did scrap information from bulbapedia but it of course did not scrap at every single executions, rather they scraped once and then saved all information in an INI file
 
Initiate Mage
Joined
Dec 22, 2010
Messages
74
Reaction score
7
I can't wait to see this progress. It looks promising.
 
Custom Title Activated
Member
Joined
Nov 14, 2008
Messages
1,025
Reaction score
640
oxysoft - PokeSharp, a C# pokemon engine (Fire Red based) - RaGEZONE Forums


nice little map I made in like 2 minutes just to demonstrate how much time my map editor actually saves you :)
 
Initiate Mage
Joined
Dec 22, 2010
Messages
74
Reaction score
7
Looks clean. Now I feel like showing off my editor xP
 
Custom Title Activated
Member
Joined
Nov 14, 2008
Messages
1,025
Reaction score
640
I scraped the whole editor and i decided to make something alot more like the one from pokemon dawn. I also stole all of their tiles :D
The project is also called "Pokemon: Project Aeon" or something like that now.

oxysoft - PokeSharp, a C# pokemon engine (Fire Red based) - RaGEZONE Forums
 
Custom Title Activated
Member
Joined
Nov 14, 2008
Messages
1,025
Reaction score
640
The map editor has came a really nice way now and I am starting to implements smaller features into such as programmable tile logics that you can create using the user friendly GUI I have created and implemented into the map editor.

Behold

 
Initiate Mage
Joined
Mar 7, 2012
Messages
18
Reaction score
5
The map editor has came a really nice way now and I am starting to implements smaller features into such as programmable tile logics that you can create using the user friendly GUI I have created and implemented into the map editor.

Behold



Oxy, I want to feel you...

NO NO! OMG ! NO not the way you think! I want to feel the way you feel about your engine. Looks promising, but still there is some work to do.

GL
 
Custom Title Activated
Member
Joined
Nov 14, 2008
Messages
1,025
Reaction score
640
I have not stopped working on it. This section is a little dead so I tend to forget about updating you guys here. I have made a subreddit for the engine which has amassed over 930 subscribers already.



Here is the current state of the map editor

oxysoft - PokeSharp, a C# pokemon engine (Fire Red based) - RaGEZONE Forums
 
Initiate Mage
Joined
May 6, 2013
Messages
4
Reaction score
1
Hey guys,

I view this site as a guest mainly, but I made an account to expose this idiot.

His "map editor" isn't anything unique... the source code for it is actually on the internet if you look around (Pokemon Dawn Engine, an open source C# Pokemon Engine). If you download the source code, you'll see that the map editor is exactly identical to his.. he didn't even change the design around -_-. Anyways, he got flammed pretty hard on other forums, so I just thought I let you guys know. You can download the map editor source from the dawn engine, and hopefully a real developer will continue to develop it.. not take something, and just claim it as their own without even changing the design of it.

I looked at the source code for it, and it's a fairly nice editor, just needs a few tweaking! Don't listen to this quail :), he's developping nothing new, in fact, he's just changing the name of the program.



EDIT: If people still don't believe me, oxysoft was told to post some of the source components to prove he didn't steal. He originally stated he wrote the script himself, and he posted one of the scripts he claimed he wrote:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using AeonEditor.States;
using General.Common;
using AeonEditor.Actions.Tile;
using AeonEditor.Actions;
using Engine.Tiles;
using Engine.Common;

namespace
AeonEditor.EngineDefinition.States.TileEditor {
public class
PencilTool : State, IState {
private
MultiAction action;

public static
PencilTool Instance {
get {
return Static<
PencilTool>.Value;
}
}

public
override void Initialize(FrmMainEditor mainForm) {
base.Initialize(mainForm);
}

public
string Name {
get {
return
"PencilState";
}
}

public
void Enter(IFiniteStateMachine stateMachine, IState oldState) {
EditorForm.tPencil.Checked = true;

EditorForm.editorcontrol.MouseDown += new MouseEventHandler(onMouseMove);
EditorForm.editorcontrol.MouseMove += new MouseEventHandler(onMouseMove);
EditorForm.editorcontrol.MouseUp += new MouseEventHandler(onMouseUp);
}

public
void Leave(IFiniteStateMachine stateMachine, IState newState) {
EditorForm.tPencil.Checked = false;

EditorForm.editorcontrol.MouseDown -= new MouseEventHandler(onMouseMove);
EditorForm.editorcontrol.MouseMove -= new MouseEventHandler(onMouseMove);
EditorForm.editorcontrol.MouseUp -= new MouseEventHandler(onMouseUp);
}

public
void Draw(GameTime gameTime) {
}

public
void Update(GameTime gameTime) {
}

int lxt = -1;
int lyt = -1;

private
void onMouseMove(object sender, MouseEventArgs e) {
if (
e.Button == MouseButtons.Left) {
if (
action == null) action = new MultipleSetTileAction();

bool ok = false;

int xt = (e.X + EditorEngine.Instance.xCam) >> 4;
int yt = (e.Y + EditorEngine.Instance.yCam) >> 4;

if (
xt != lxt || lyt != yt) {
ok = true;
}

lxt = xt;
lyt = yt;

if (
ok) {
if (
TileEditorState.Instance.SelectedRegion != Rectangle.Empty) {
MultiAction multiAction = new MultiAction();
Rectangle selection = TileEditorState.Instance.SelectedRegion;

for (
int x = 0; x < selection.Width; x++) {
for (
int y = 0; y < selection.Height; y++) {
int currentX = selection.X + x;
int currentY = selection.Y + y;

int tilesetIndex = TileEditorState.Instance.SelectedTileset;

Tilesheet tilesheet = EditorEngine.Instance.CurrentMap.Tilesets[tilesetIndex].Tileset;
int tileIndex = tilesheet.t2d.GetIndex(currentX, currentY);

int zt = EditorEngine.Instance.SelectedLayer;
MockupTile t = EditorEngine.Instance.CurrentMap.getTile(xt + x, yt + y, zt);

if (
t != null) {
SetTileAction tileAction = new SetTileAction(
xt + x, yt + y,
tilesetIndex,
tileIndex,
t.spritesheetindex,
t.spriteindex);
multiAction.actions.Add(tileAction);
}
}
}

multiAction.Execute();
action.actions.Add(multiAction);
}
}
}
}

private
void onMouseUp(object sender, MouseEventArgs e) {
if (
e.Button == MouseButtons.Left) {
ActionManager.Instance.Execute(action);
action = null;
}
}
}
}

That's his version of a script called PencilTool


Now here is open source map editor script:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Windows.Forms;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Dawn.Engine;
using Dawn.Engine.World.TileEngine;
using Dawn.MapEditor.Core;
using Dawn.MapEditor.Core.States;
using Dawn.MapEditor.Core.Actions;
using Dawn.MapEditor.Core.Actions.TileEditor;
using Dawn.MapEditor.Forms;

namespace
Dawn.MapEditor.States.TileEditor
{
public class
PencilTool : State, IState
{
#region Fields
private MultipleAction action;
#endregion

#region Properties
public static PencilTool Instance
{
get { return Static<PencilTool>.Value; }
}
#endregion

#region Methods
public override void Initialize(frmMain mainForm)
{
base.Initialize(mainForm);
}
#endregion

#region IState Member
public string Name
{
get { return "PencilState"; }
}
public
void Enter(IFiniteStateMachine stateMachine, IState oldState)
{
this.MainForm.tPencil.Checked = true;

this.MainForm.editor.MouseDown += new MouseEventHandler(onMouseMove);
this.MainForm.editor.MouseMove += new MouseEventHandler(onMouseMove);
this.MainForm.editor.MouseUp += new MouseEventHandler(onMouseUp);
}
public
void Leave(IFiniteStateMachine stateMachine, IState newState)
{
this.MainForm.tPencil.Checked = false;

this.MainForm.editor.MouseDown -= new MouseEventHandler(onMouseMove);
this.MainForm.editor.MouseMove -= new MouseEventHandler(onMouseMove);
this.MainForm.editor.MouseUp -= new MouseEventHandler(onMouseUp);
}
public
void Draw(GameTime gameTime)
{
}
public
void Update(GameTime gameTime)
{
}
#endregion

#region

[/COLOR]private void onMouseMove(object sender, MouseEventArgs e)
{
if (
e.Button == MouseButtons.Left)
{
if (
this.action == null)
{
this.action = new MultipleSetTileAction();
}

int tileX = (e.X + EditorEngine.Instance.HorizontalScrolling.Value) / Tile.Width;
int tileY = (e.Y + EditorEngine.Instance.VerticalScrolling.Value) / Tile.Height;

if (
TileEditorState.Instance.SelectedRegion != Rectangle.Empty)
{
MultipleAction multiAction = new MultipleAction();
Rectangle selection = TileEditorState.Instance.SelectedRegion;

for (
int x = 0; x < selection.Width; x++)
{
for (
int y = 0; y < selection.Height; y++)
{
int currentX = selection.X + x;
int currentY = selection.Y + y;

int tilesetIndex = TileEditorState.Instance.SelectedTileset;

Tileset tileset = EditorEngine.Instance.Map.Tilesets[tilesetIndex].Tileset;
int tileIndex = tileset.TileableTexture.GetIndex(currentX, currentY);

SetTileAction tileAction = new SetTileAction(
tileX + x, tileY + y,
TileEditorState.Instance.SelectedLayer,
tilesetIndex,
tileIndex);

multiAction.Actions.Add(tileAction);
}
}
multiAction.Execute();

this.action.Actions.Add(multiAction);
}
}
}
private
void onMouseUp(object sender, MouseEventArgs e)
{
if (
e.Button == MouseButtons.Left)
{
ActionManager.Instance.Push(this.action);
this.action = null;
}
if (
e.Button == MouseButtons.Right)
{
int tileX = e.X / Tile.Width;
int tileY = e.Y / Tile.Height;
int tileZ = TileEditorState.Instance.SelectedLayer;

TileReference reference = EditorEngine.Instance.Map.Tiles[tileX, tileY, tileZ];

Rectangle sourceRectangle = reference.Tileset.TileableTexture.GetSource(reference.TileIndex);

TileEditorState.Instance.SelectedTileset = reference.TilesetIndex;
TileEditorState.Instance.SelectedRegion = new Rectangle(
sourceRectangle.X / Tile.Width,
sourceRectangle.Y / Tile.Height,
1, 1);
}
}
#endregion
}
}
[/COLOR]

All he did was change the names around and add comments...
 
Last edited:
Back
Top