Every time I'm trying to make a game..
I tend to fall into the Editor Trap..
I mean its almost inevitable not to.
this does not happen to me when I make other things..
anyways.. you need an Editor if your game need maps and so on.
you cant bypass it..
Im trying this time to concentrate more on a game and let an Editor develop itself..
But My main concentration will be a Game.
Even a simple one.
Just to break the curse of repeating myself with making Editors.
Lets hope ill make it :)
Editors as in IDE's ::)
If you make a simple what style will it be Retro, Cartoon or hi pixel graphics.
What was your favorite arcade game as a kid?
One of the things id like todo is have crack at an editor but im going down the path of looking into BlitzmaxNG open source stuff. As i have no idea how one really works.
QuoteEditors as in IDE's
I think he's more referring towards editor for the game{s}, like, a tilemap editor, or a droplet app... Which you do your doings in it for said "games", so you can save then load the file with the games data.
Dabz
Quote from: Dabzy on Jun 29, 2025, 06:53 PMQuoteEditors as in IDE's
I think he's more referring towards editor for the game{s}, like, a tilemap editor, or a droplet app... Which you do your doings in it for said "games", so you can save then load the file with the games data.
Dabz
Ah, i havent come across the need to do that yet but i suppose having a .png of all the 8 x 8 chars and loading them into a pixmap array is a similar form of a very basic editor :-X
It's a common thing, sometimes you might want to build an external one, you may want to build one "in-game", where you dot inbetween game mode and editor mode, there is also ones you can download, like Tiled:
https://www.mapeditor.org/
If you look, their everywhere, but in the most part, rolling your own is usually best because you can be more specific with your needs.
Dabz
Quotebut in the most part, rolling your own is usually best because you can be more specific with your needs.
Dabsy i think you made a Spelling mistake with needs :P
So Editors or IDE Editor. Is Defo on my bucket list. Your Lauch pad IDE is something id like to do with open source BlitzmaxNG and make a few personnel tweaks to the Syntax.
Quote from: Hardcoal on Jun 29, 2025, 05:14 PMyou need an Editor if your game need maps and so on
for simple games, you can use an image editor (or a text editor), and use pixels (or chars) to make maps with different layers...
talking about map editors, this reminds me that i have a 'hero quest' game to finish, someday.
🤠🗡�🪓🏹🛡�
IDE is for Code Editor Is For Building Maps and the rest..
You can get along without an Editor.
But its like working in med evil times..
Anyways.. my point is.. I have a lot of experience making an Editor.
But now I want to make A Game.. more than I want to make an Editor..
So the solution is to concentrate on the Game and not on the perfect Editor.
I made that mistake years ago.. spending all my energy over trying to make an Editor.. And Game Framework, while what i love doing is Games..
so now, this is not gonna happen. I wont make the same mistake.
Even making a simple game will please me.
lets see it happen finally
a benevolent advice :
remove 'perfect' from your vocabulary / thoughts / ways to do things, and aim for 'good enough'.
this will simplify your life a lot ! 8)
Quoteremove 'perfect' from your vocabulary / thoughts / ways to do things
now youre telling me :'(
Yea man.. Im now much wiser.. but you should have told me that 20 years ago ;)
QuoteEven making a simple game will please me.
lets see it happen finally
Im not sure of your age. But if you remember when games first sort off appeared in Arcades.
You had :- Space invaders, Pac-man, Donkey kong, Asteroids, Defender.
These are simple enough to be interesting to play. You already have the knowledge for coding. So why not start there.
Or even simpler look at some of the ZX81 stuff or Vic 20 games.
Im not worried about looks yet ive just been trying to capture the game to play nice. Hopefully peeps will want another go and be prepeard to hit that buy me a Beer BUTTON
Kind Regards Baggey
Quoteeven simpler look at some of the ZX81 stuff or Vic 20 games.
Even if my game will be 2 Rects.. jumping
ill be pleased,
I can do good looking things if I want, but that's not the main thing.
Im gonna break the ice soon and release a game.
Im 50+ btw
i made a game in amiga and tried to make game in commodore..
i made in commodore sprite editor lol writing directly in assembler
i could have done amazing things back than because i was way ahead of my time
but i wasted this opportunity because i had no control over myself
and tried to make complex things.
i remember at age 16 or so i made a equation solver where you give
the computer a formula with X like X+2X*(67)=4X/15
and it solved it and showed you the process as well.
and i wrote that in commodore 64 basics
anyways.. back than you had to build even the scroll of the screen.
my main point is that ive always went around games
but never actually made a game or at least didnt finish one
Accept one card memory game on Amiga that ive actually finished
I will try to break to editor Curse
Quoteanyways.. back than you had to build even the scroll of the screen.
This is the sad thing i think about today everybody looks for an engine!?
You will have more Fun starting the game from scractch and learn all the bits needed. Then you understand!
Sadly people want Scroll my screen. But what really happens behind that. Well you'll need pointers to the surface. Know the dimensions. The pixel width, ARGB type etc... and scroll through line by line. ie pixel by pixel. Sadly this is being overlooked more and more.
Thats why i like Retro Programming. You are the true creator and the skill that it needs. Much more FUN!
Call it adult lego if you will.
So what game do you think you'll try?
Quotei remember at age 16 or so i made a equation solver where you give
the computer a formula with X like X+2X*(67)=4X/15
and it solved it and showed you the process as well.
This is interesting stuff Algebra and Equation solving of repeated roots etc.. I remember differentiation where you set about solving in a methodical pattern. Sadly i forgot about this! The grey matter is disappearing rapidly :(
With what i know now writing a program to do these things even teach. Would be a useful tool to have at hand. Some might say thats cheating? To me a learner could see where they made the mistake and learn from it. But we have AI now ::)
I generally write my own tools right into my game's.
Basically, exports all placed object's X,Y,Z,PITCH,YAW,ROLL out as a text doc.
I use my 3d modeling tool to make levels/scenes.
If it works, it works.
If you need bespoke level editors, just make them *for you*. Keep them as simple as possible.
Forget user friendliness - if *you* can use it that's all that matters. Things only need to look shiny if you want them to appeal to other people. Which you don't, so, why waste time doing it?
Crude and functional. That's it.
QuoteIf you need bespoke level editors, just make them *for you*. Keep them as simple as possible.
Agreed, as long as you're happy with it and it's functional then the project is done - so move on.
For general purpose solutions many use Visual Studio Code or Tiled for tile maps, Blender for 3D. But if that's not for you then roll your own software that meets your and only your particular needs.
Quote from: GfK on Jun 30, 2025, 02:43 PMIf you need bespoke level editors, just make them *for you*. Keep them as simple as possible.
Forget user friendliness - if *you* can use it that's all that matters. Things only need to look shiny if you want them to appeal to other people. Which you don't, so, why waste time doing it?
Crude and functional. That's it.
^That
Listen to the man
@Hardcoal , yep, he smells like a nursing home that's "Gone off", but he has more experience writing games for bread and butter then anyone else I know over the years.
When Vaux Brewery were going, the company I worked for did pub revamps for them, all over the country, yep, they were all different, but there was always a saying "They don't sell beer upstairs", which pretty much meant that area's the punters didnt go into, the more basic it was.
You may had a flashy bar, vinyl records bedded into stone walls, old fashioned sports equipment hanging from the walls. All funky jazzy gear, usually ended up looking gorgeous at the end...
Managers office/flat and other areas like that, they'd be lucky to have architraves around the door frames!
Same setup if you ask me, and that's what you should be looking for.
Dabz
I dont make Editors for others anymore, no worries.
And Yes I Agree with GfK.
But I still Cant get a Grip.. because of past mistakes and ambitions.
But Still, Part of it is because I dont have a particular game in mind..
So no specific Goal I guess.. But will see..
I will still fall into the Editors Trap
But Im trying to minimize the damage of loosing myself
Into the Editor more than into making a Game
Id love to see some editor code to see how it's done. That is if you ever released any :-X
Kind Regards Baggey
Sure Baggey, Ill post some of my Code.
BTW Its not only An Editor Issue, Its a Game Framework that gets me into trouble.
Here is Exmaple of one of my Main Loops for running objects
Function PlayElement_Req_PY(PE:PhyExtender_Type, PlayBehaviors = True)
Local C:TConstraint
'Draw
'Mass
SetColor(255, 255, 0)
For Local M:TMass = EachIn PE.PMass
M.Draw()
Next
'Constraint
SetColor(0, 255, 0)
For C = EachIn PE.Con
C.Draw()
Next
'Rig [Attached Images]
SetColor(255, 255, 255)
For Local Rig:TRig = EachIn PE.Rig
Rig.Draw()
Next
'AdvBody
If PE.AdvBody <> Null Then
If PE.Hide_flg = False Then
PE.AdvBody.ConDrawAll()
PE.AdvBody.MassDrawAll()
End If
End If
'Zone
If PE.zone <> Null Then PE.zone.draw()
'Media
'Image
If PE.ImageT <> Null Then
Local KeepR:Float = GetRotation()
SetRotation(PE.AdvBody.GetRotation())
DrawImage(PE.ImageT, PE.AdvBody.GetX(), PE.AdvBody.GetY())
SetRotation(KeepR)
End If
'Play Behaviors And Forces
If PlayBehaviors Then
'Behaviors
PE.PrivatePlay()
For Local BHV:BehaviorExtender_Type = EachIn PE.BehaviorsList
If BHV.IsActive_flg
If BHV.IsPlayedInTheLoop_flg Then BHV.MainPlay()
End If
Next
'Forces
PE.XForce = PE.XForce * 0.99
PE.yForce = PE.yForce * 0.99
PE.RollForce = PE.RollForce * 0.99
EndIf
'Sons
For Local S:PhyExtender_Type = EachIn PE.Sons
If S.IsActive_flg Then
PlayElement_Req_PY(S, PlayBehaviors)
End If
Next
End Function
This is not Editor Code, its More FrameWork Code btw
If ill ever have a worth working Editor, I will release it
QuoteFor Local S:PhyExtender_Type = EachIn PE.Sons
That's another thing id like to change about BlitzmaxNG. I know that you have to do it that way. But to an English way of thinking it dosent make sence.
But
For every Local S:PhyExtender_Type in PE.Sons
would make a lot more sense ::)
Quote from: GfK on Jun 30, 2025, 02:43 PMjust make them *for you*. Keep them as simple as possible.
sure... but consider to add comments for your future *you*, because after a few years, you may not understand what you have coded, and what are the controls / how the interface works / what are the keys shortcuts / the file format, etc...
A lot of my editors are for games that are usually strategy games of a sort, typically some kind of real time strategy. What I often do is build the game, and as I'm building the game I have a toggle flag that enables or disables the editor during gameplay. When the editor flag is switched on I disable most of the 'world game updates' except for stuff that has it in a form of 'idle state'. Add a small overlay of some text indicating what keys to press to put the game into a certain state such as 'place units' 'place scenery' etc and then have a sub-mode that could be 'place trees' or such and then you simply left click on the map to place and right click on the map to remove.
Basically - make your core game loop and then put a toggle switch in between edit mode and play mode and make sure you have a way to then write out the 'map' as a text file you can read back in later as a 'level' of sorts.
My generally funky object placement tool just incase.
Allows for placement and deletion of objects, think sonic debugmode cheat.
;-----------------------------------------------------;#**#
;DEBUGMODE/EDITOR
Global OBJ_COUNT=0,ROT_OBJ=Fals:Global Stringobj$:Global DEBUGMODE=False
Global filenameobj$=Chr$(34)+"DEBUG.txt"+Chr$(34)
Function DEBUGMODE(PLY.PLYTYPE)
For PLY.PLYTYPE=Each PLYTYPE
;---------------------------------------;
;OPEN_DEBUG_TXT
If KeyHit(207) Then ExecFile(filenameobj$)
;---------------------------------------;
;---------------------------------------;
;DEBUG_MOVEMENT
PLY_SPEED#=0:YVEL#=0
If KeyHit(30) And (DEBUGMODE=True) Then If(ChannelPlaying(CHANNEL_CURSOR)=False) Then CHANNEL_CURSOR=PlaySound(SYS_CURSOR):TranslateEntity PLY\OBJECTS\MESH,0,5,0;UP
If KeyHit(44) And (DEBUGMODE=True) Then If(ChannelPlaying(CHANNEL_CURSOR)=False) Then CHANNEL_CURSOR=PlaySound(SYS_CURSOR):TranslateEntity PLY\OBJECTS\MESH,0,-5,0;DOWN
If KeyHit(200) And (DEBUGMODE=True) Then If(ChannelPlaying(CHANNEL_CURSOR)=False) Then CHANNEL_CURSOR=PlaySound(SYS_CURSOR):MoveEntity PLY\OBJECTS\MESH,0,0,10;;FORWARD
If KeyHit(208) And (DEBUGMODE=True) Then If(ChannelPlaying(CHANNEL_CURSOR)=False) Then CHANNEL_CURSOR=PlaySound(SYS_CURSOR):MoveEntity PLY\OBJECTS\MESH,0,0,-10;BACKWARD
If KeyDown(203) And (DEBUGMODE=True) Then TurnEntity PLY\OBJECTS\MESH,0,3,0;TURN_LEFT
If KeyDown(205) And (DEBUGMODE=True) Then TurnEntity PLY\OBJECTS\MESH,0,-3,0;TURN_RIGHT
;ANGLES
If KeyDown(79) And (DEBUGMODE=True) Then RotateEntity PLY\OBJECTS\MESH,90,EntityYaw(CAMERA),0
If KeyDown(81) And (DEBUGMODE=True) Then RotateEntity PLY\OBJECTS\MESH,-90,EntityYaw(CAMERA),0
If KeyDown(73) And (DEBUGMODE=True) Then RotateEntity PLY\OBJECTS\MESH,45,EntityYaw(CAMERA),0
If KeyDown(71) And (DEBUGMODE=True) Then RotateEntity PLY\OBJECTS\MESH,-45,EntityYaw(CAMERA),0
;---------------------------------------;
YAW#=EntityYaw(CAMERA)
RotateEntity PLY\OBJECTS\MESH,0,YAW#,0
EntityType(CAMERA,T_NONE)
If (DEBUGMODE=True) Then
Text 20,100,"X: "+(EntityX(PLY\OBJECTS\MESH)),True,False
Text 20,120,"Y: "+(EntityY(PLY\OBJECTS\MESH)),True,False
Text 20,140,"Z: "+(EntityZ(PLY\OBJECTS\MESH)),True,False
Text 10,160,"OBJ_TYPE: "
If (OBJ_COUNT=0) Then Text 10,180,"PICKUP":ROT_OBJ=False
If (OBJ_COUNT=1) Then Text 10,180,"BOX":ROT_OBJ=False
If (OBJ_COUNT=2) Then Text 10,180,"SPIKE":ROT_OBJ=False
If (OBJ_COUNT=3) Then Text 10,180,"SPRING":ROT_OBJ=False
If (OBJ_COUNT=4) Then Text 10,180,"???":ROT_OBJ=False
If (OBJ_COUNT=5) Then Text 10,180,"???":ROT_OBJ=False
If (OBJ_COUNT=6) Then Text 10,180,"???":ROT_OBJ=False
If (OBJ_COUNT=7) Then Text 10,180,"???":ROT_OBJ=False
If (OBJ_COUNT=8) Then Text 10,180,"???":ROT_OBJ=False
If (OBJ_COUNT=9) Then Text 10,180,"???":ROT_OBJ=False
If (OBJ_COUNT=10) Then Text 10,180,"???":ROT_OBJ=False
If (OBJ_COUNT=11) Then Text 10,180,"???"
If (OBJ_COUNT=12) Then Text 10,180,"???"
EndIf
;---------------------------------------;
;DEBUG_MODE/OBJECT_RESPAWN
If KeyDown(57) And (DEBUGMODE=True) Then OBJ_RESPAWN(PLY.PLYTYPE):If(ChannelPlaying(CHANNEL_CURSOR)=False) Then CHANNEL_CURSOR=PlaySound(SYS_CURSOR)
Next
;---------------------------------------;
For PLY.PLYTYPE=Each PLYTYPE
;CHANGE_OBJECT_TYPE
If KeyHit(201) And (DEBUGMODE=True) Then If (ChannelPlaying(CHANNEL_CURSOR)=False) Then CHANNEL_CURSOR=PlaySound(SYS_CURSOR):OBJ_COUNT=OBJ_COUNT+1
If KeyHit(209) And (DEBUGMODE=True) Then If (ChannelPlaying(CHANNEL_CURSOR)=False) Then CHANNEL_CURSOR=PlaySound(SYS_CURSOR):OBJ_COUNT=OBJ_COUNT-1
;SET_CAPP
If (OBJ_COUNT>12) Then OBJ_COUNT=0
If (OBJ_COUNT<0) Then OBJ_COUNT=12
;PLACE_OBJ/WRITE_TO_FILE
If KeyHit(210) And (DEBUGMODE=True) Then
If (OBJ_COUNT=0) Then ADDPICKUP(EntityX(PLY\OBJECTS\MESH),EntityY(PLY\OBJECTS\MESH),EntityZ(PLY\OBJECTS\MESH)):WRITE_DEBUG(PLY.PLYTYPE)
If (OBJ_COUNT=1) Then ADDBOX(EntityX(PLY\OBJECTS\MESH),EntityY(PLY\OBJECTS\MESH),EntityZ(PLY\OBJECTS\MESH)):WRITE_DEBUG(PLY.PLYTYPE)
If (OBJ_COUNT=2) Then ADDSPIKE(EntityX(PLY\OBJECTS\MESH),EntityY(PLY\OBJECTS\MESH),EntityZ(PLY\OBJECTS\MESH)):WRITE_DEBUG(PLY.PLYTYPE)
If (OBJ_COUNT=3) Then ADDSPRING(EntityX(PLY\OBJECTS\MESH),EntityY(PLY\OBJECTS\MESH),EntityZ(PLY\OBJECTS\MESH)):WRITE_DEBUG(PLY.PLYTYPE)
;---------------------------------------;
EndIf:Next
;---------------------------------------;
;DELETE_OBJECT
For PLY.PLYTYPE=Each PLYTYPE
For PICKUP.PICKUPTYPE=Each PICKUPTYPE
If (EntityDistance(PLY\OBJECTS\MESH,PICKUP\ENTITY)<10) And KeyDown(211) And (DEBUGMODE=True) Then FreeEntity PICKUP\ENTITY:Delete PICKUP
Next
For BOX.BOXTYPE=Each BOXTYPE
If (EntityDistance(PLY\OBJECTS\MESH,BOX\ENTITY)<10) And KeyDown(211) And (DEBUGMODE=True) Then FreeEntity BOX\ENTITY:Delete BOX
Next
For SPIKE.SPIKETYPE=Each SPIKETYPE
If (EntityDistance(PLY\OBJECTS\MESH,SPIKE\ENTITY)<10) And KeyDown(211) And (DEBUGMODE=True) Then FreeEntity SPIKE\ENTITY:Delete SPIKE
Next
For SPRING.SPRINGTYPE=Each SPRINGTYPE
If (EntityDistance(PLY\OBJECTS\MESH,SPRING\ENTITY)<10) And KeyDown(211) And (DEBUGMODE=True) Then FreeEntity SPRING\ENTITY:Delete SPRING
Next
;---------------------------------------;
Next
;---------------------------------------;
End Function
;-----------------------------------------------------;
;WRITE_DEBUG_TO_FILE
Function WRITE_DEBUG(PLY.PLYTYPE)
;---------------------------------------;
For PLY.PLYTYPE=Each PLYTYPE
;OBJECT_NAME
If (OBJ_COUNT=0) Then String0$="ADDPICKUP"
If (OBJ_COUNT=1) Then String0$="ADDBOX"
If (OBJ_COUNT=2) Then String0$="ADDSPIKE"
If (OBJ_COUNT=3) Then String0$="ADDSPRING"
If (OBJ_COUNT=4) Then String0$="ADDGOAL"
;---------------------------------------;
;EXTRA_TEXT/POS
String1$=EntityX(PLY\OBJECTS\MESH)
String2$=EntityY(PLY\OBJECTS\MESH)
String3$=EntityZ(PLY\OBJECTS\MESH)
String4$=","
String5$="("
String6$=")"
String7$=":"
String8$=EntityPitch(PLY\OBJECTS\MESH)
String9$=EntityYaw(PLY\OBJECTS\MESH)
String10$=0
;---------------------------------------;
;WRITE_TO_FILE
fileout=WriteFile("DEBUG.txt")
If (ROT_OBJ=False) WriteLine(fileout,String7+String0+String5+String1+String4+String2+String4+String3+String6)
If (ROT_OBJ=True) WriteLine(fileout,String7+String0+String5+String1+String4+String2+String4+String3+String4+String8+String4+String9+String4+String10+String6)
;COPY AND PASTE IN LOADSTAGE()
;---------------------------------------;
;CLOSE_FILE
CloseFile(fileout)
;-----------------------------------------------------------------------------;
Next
End Function
;-----------------------------------------------------;
;OBJECT_RESPAWN
Function OBJ_RESPAWN(PLY.PLYTYPE)
For PICKUP.PICKUPTYPE=Each PICKUPTYPE:PICKUP\STATE=0:Next
For BOX.BOXTYPE=Each BOXTYPE:BOX\STATE=0:Next
End Function
;-----------------------------------------------------;
QuoteFor every Local S:PhyExtender_Type in PE.Sons
Youre right baggey, but you get used to what it is.. and eventually it kinda makes sense..
I bet Mark.S Knew what he is doing
Today things went well.. which gives me hope.
My NEW! Editor has a different approach..
I gave up on 3D and Blueprint, and so on.
And I aim it on Coding.. like components in unity.
Field ZoomSpeed:DataCell_Class = ClassManager.AddDC_StrOrValue(Self, 70)
Field XDiversion:DataCell_Class = ClassManager.AddDC_StrOrValue(Self)
Field YDiversion:DataCell_Class = ClassManager.AddDC_StrOrValue(Self)
Field ZoomDistance:DataCell_Class = ClassManager.AddDC_StrOrValue(Self, -20)
In this above Code I did something really cool
the function AddDC_StrOrValue was actually reading the Field name, (Zoomspeed etc..)
so In the Editor mode it automatically had the field name to change its value.
Matty.
I want to avoid building an editor for each game