Main Menu

News:

SyntaxBoom, now with pwetty syntax highlighted code boxes! \o/ 

https://www.syntaxboom.com/forum/index.php?topic=96

Shoutbox

Baggey

2025-09-24, 17:57:11
They'll be using Expanding foam to glue bricks together next  :-X

Dabzy

2025-09-24, 06:09:52
You can also get the expanding foam post fix, but, I wouldnt trust it really, especially where I live on the side of a valley and when the storms blow in the right direction, whistling down the valley, nowt is safe!

Baggey

2025-09-23, 08:53:01
That Postcrete stuff is amazing. I never know how much water to add. May be i should read the Instructions  ;D 

Dabzy

2025-09-22, 21:33:46
Cannot beat a breaky uppy mode, saves the hand cramps and chipped knuckles knocking ten bells out of a chod of conc with a hammer and chisel.

GfK

2025-09-22, 21:28:44
I have a massive JCB drill with a concrete breaky uppy mode which has got me out of jail free a couple of times replacing rotted fence posts that has been concreted in.

Amon

2025-09-22, 19:23:30
What about Roly?

Dabzy

2025-09-22, 19:22:35
Putting my 2 deckings in.... I've dug enough post holes to last me a life time... I feel sorry for the future poor sod who may want to shift'em... Like most things I do, I tend to go over the top, and as such, I've probably got shares in postcrete! :D

GfK

2025-09-22, 19:10:57
Round is a shape.

Baggey

2025-09-22, 19:04:49
Consult a qualified electrician for compliance with BS 7671 and local building Regs! Avoid areas where future digging is likely. ;)

Jackdaw

2025-09-22, 18:18:24
That depends on where the cable is to run. Minimum depth in a garden in 450mm. Under pavements 600mm.

Members
  • Total Members: 55
  • Latest: Amon
Stats
  • Total Posts: 1,607
  • Total Topics: 198
  • Online today: 12
  • Online ever: 54 (Sep 14, 2025, 08:48 AM)
Users Online
  • Users: 0
  • Guests: 3
  • Total: 3
Welcome to SyntaxBoom. Please login or sign up.

Recent

Tendency to make Editors..

Started by Hardcoal, Jun 29, 2025, 05:14 PM

Previous topic - Next topic

GfK

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.

Steve Elliott

#16
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.

Dabzy

#17
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
Intel i7-13620H, nVidia GerForce RTX 4060 Laptop GPU (8GB GDDR6), 16GB LPDDR5X, 1TB SSD, Windows 11 x64 piss flap of an OS!

Hardcoal

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
https://blitzmaxcoding.proboards.com/

Chat:  https://minnit.chat/MainHall2

Everything becomes easy, when you disintegrate it into pieces

Baggey

Id love to see some editor code to see how it's done. That is if you ever released any  :-X

Kind Regards Baggey
Running a Pc that just aint. Faster nough. I7-4Ghz, 32Gb Ram, 4Gb Nvidia, 2 x 1Tb SSD's, 2 x 24" LCD's

RETRO everything!

Jesus was only famous because of his Dad

Hardcoal

#20
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






https://blitzmaxcoding.proboards.com/

Chat:  https://minnit.chat/MainHall2

Everything becomes easy, when you disintegrate it into pieces

Baggey

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  ::)

Running a Pc that just aint. Faster nough. I7-4Ghz, 32Gb Ram, 4Gb Nvidia, 2 x 1Tb SSD's, 2 x 24" LCD's

RETRO everything!

Jesus was only famous because of his Dad

RemiD

#22
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...

Matty

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.

mrmediamanx

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 
;-----------------------------------------------------;
Blitz3d 4 lyfe.

Hardcoal

#25
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
https://blitzmaxcoding.proboards.com/

Chat:  https://minnit.chat/MainHall2

Everything becomes easy, when you disintegrate it into pieces