🤑 Indie game store🙌 Free games😂 Fun games😨 Horror games
👷 Game development🎨 Assets📚 Comics
🎉 Sales🎁 Bundles

DagonDev

45
Posts
20
Topics
5
Followers
9
Following
A member registered Mar 23, 2015 · View creator page →

Games

Recent community posts

Posted in SFX issues

If you try to play two sounds on one channel, only last one will play. You need to give unique channels if you want to hear all of 3 sounds at once, check: https://github.com/nesbox/tic.computer/wiki/sfx

Thank you for replying, it means much to get input from the developer itself!

I understand your stance on that and really appreciate honest response.

Luckily, variant with open source will allow me to achieve what I want so everything is good. Looking forward to it, great news. :D

Created a new topic Questions regarding code limit
(Edited 1 time)

TL;DR at the bottom.

I am writing this even though I didn't encounter code limit yet, but I think I will. I base this from my experience when I say I don't want to deal with that. I already had my code limit problems when I was developing game for PICO8. I tried to make quite a big game and, as it was my first time with code limit, it was difficult experience to try to work around that and left me burned out and negative towards fantasy console in general. (Although I finished game, much smaller and different from what I wanted)

My problem isn't with code limit itself (which I think is good) but how punishing it is for project that hits it before completion. If you want to create something more than demo scene or mini game you will hit it sooner or later. Is TIC-80 is designed only for small things?

I fell in love with TIC-80 and how user friendly it is and decided to use it regardless of code limit. But I didn't forget last time and said to myself: respect code limit and do something small. Thought about doing small prototypes around single mechanic/system. So I did. I released first prototype for TIC80 - https://tic.computer/play?cart=138 which sits at 57620/65535 code size. Idea was to prototype one system (lockpicking/opening locked containers) by creating sandbox in which player can do few actions (open/close locks,create/use keys). And I managed to do it without any code cleaning, while I was writing it in a way that was most readable to me (using classes, writing long/descriptive variables etc.) Success!

My initial plan was to do 2 more prototypes (around pickpocketing and sneaking mechanic) and that was ok. But now, it got bigger. I decided I want to make little game combining 3 of those (when I finish then) in one small scenario and I think I will hit code limit with it. Of course I can just do prototypes and then move to other engine, but porting all of this is, maybe, unnecessary work. Though that maybe I can do all of this with TIC-80?  But here is a thing, I don't want to go through fighting around code limit as I already had with last game. If there is no other way, I would prefer switching to other console (like LIKO12) than forcing myself through problems I don't want to have. Hence my questions below.

You could say: Obviously you made too big of a game then and want to repeat same mistake! And yes, it is how it looks like but I dare you to be this smart, about your project, when you start it. Knowing if your game is too big for arbitrary limit requires big experience in, not only in making games, knowing system inside out you are working with.


Look I know that if you go through my released code you can easily get 10k code free or more. Remove classes (OOP in lua, red flag, right?), remove half of variables with long ass names etc. Here is a thing. I want to start cleaning code only after I finish the whole game. There is a reason for I wrote stuff the way I wrote it - it makes remembering code and working with it easier for me - and don't want to handicap myself too early. What I want to is to have ability to ignore code limit as long as I am running it locally only. I don't like doing optimization mid coding, hate when I am forced to stop in the middle of writing somehing - so I can free some space  and dislike how code limit force you to write non-readable code. I could start with writing compact code from the beginning, but I don't want to do that. The more code I write, the more important is to me to write descriptive code - which isn't space friendly.

TL;DR


Tried to make too big of a game before (for PICO8) and code limit bite my ass hard. I created 1 small project for TIC-80, but looks like I want to create big game again later and before I do that I want to ask you if we can do something about code limit or should I just be realistic and move on to something else.

Questions:

1. Am I making too big of a game for TIC-80? (I am talking about consolidating 3 prototypes described earlier)
2. If yes, does that I mean I am trying to do a game that isn't compatible with TIC-80 design?
3. If yes, should I just move to other fantasy console (like LIKO12) that doesn't have code limit?
4. If no, can code limit became soft? Or can we do something about it?

If there is a yes to the 4th question, what I am proposing is:
- After you hit 64k code limit, show warning in editor (like having code count in red) and when running game/saving file/exporting game show descriptive warning (same as one you have when trying to run too much code via external lua file (dofile))
- Don't allow to upload such games to tic80 repository.
- If exporting to exe/html5 etc. show only warning
- Allow hard code limit to be configurable, so i.e. you can limit yourself to 128k/256k, while 64k is still hard limit for uploads.

I don't want to move to other console if I don't need. TIC-80 looks like the best of all fantasy stuff and perceive it as most user-friendly. Which is why I want to remove code limit as it is in my opinion very unfriendly and stands in contrast to what TIC-80 wants to be.
(But maybe I don't understand what TIC-80 is for?)

Created a new topic Tutorial for SFX Editor?

I have problems with creating sounds I want using SFX editor. I have trouble parsing what is written in the wiki to practical usage.
I didn't found any topic related to this or yt on the subject. I tried using sfx from other carts, but it isn't perfect...
I only have Pico8 and Pixel Vision 8 experience but don't really know how to translate that to Tic-80.

Ideally if someone would make video like one for pico8 (not made by creator!)

I understand that I am asking for much, so any tips are welcome. :)


(Linked video)

Thanks. :)

I think I fixed it now, dropbox is preventing you from clean link to image. If someone have same problem as me, look here: https://cantonbecker.com/etcetera/2014/how-to-directly-link-or-embed-dropbox-ima...

If someone could confirm, that would be great. :)

Update: Added working inventory which you can see with creating keys mechanic on this gif:


GIF LINK

Great, thank you for info. Roadmap would be nice, or is there a one already and I missed it?

Created a new topic Whats up with tilemap editor?

Hi all,

I am suprised how map editor is unfriendly compared to great sprite editor.

There is no erase brush (I use first, 'empty', tile as a substitute).

Not having ability to select more than one sprite is really tiring (when you have map piece that is bigger than 8x8 pixels), but that wouldn't be so bad if not the next point...

There isn't working select/copy/paste/cut option (which could really speed up creating process) even though there are icons for those in top bar.

Are those things are in and I just don't know how to use it? Or is there any eta for those things?

Thanks for help

Thanks for letting me know. Added clickable links below embeded ones as they don't look broken to me.

(Edited 5 times)

This is simple prototype of lockpicking mechanic. Currently the whole project serves only as proof of concept.

As you can see in the first gif:


GIF Link

you open lock by providing valid combination of Left/Right presses.
Idea is to have system similar to Gothic series/Risen 1 lockpicking but with more emphasis on player skill instead PC abilities unlocking.

So what is different in my version?

- There is no skill to unlock, from the start you know how to open locks.
- Difficulty of the lock depends on lock combination length and pattern a lock have
- Each type of lock determines different chest sprite - knowing what chest you are opening is valuable information
- No memorisation, you learn what pattern each lock type have, no specific combinations.
- No random chance
- Lockpick breaks only if you make a mistake at the same combination step twice, to punish recklessness.
- You can also open locks by force (but only low level ones) or by key
- With key you can also close the chest (if you need to cover your tracks or plant some item inside)
- You can create keys at special table, with every combination you want, or steal them from owners

Skilled lockpicker can quickly loot whole floor full of chests with only one lockpick and/or set of keys.


EDIT:

Atm. I am 80% completed, still need to implement inventory (to have ability to switch between created keys) and bashing locks.

Atm. I am 90% completed only need to add bashing locks to have full functionality I envisioned for lockpicking/opening locks mechanic. Although I think I skip (bashing locks) this and leave it for the future if I decide to make full thief build prototype (which would have sound/stealth mechanics where bashing locks would have consequences).

Not sure if I release it as playable version (cause I would need to make one), but wanted to share some stuff.
I have no idea how I could make simple scenario based only on opening locks mechanic, but if I think of one I would like to make playable version of this. If someone have idea, please let me know in the comments. :)

Regardless of playable version, I release WebGL build of project as soon as I manage to make one (https://github.com/PixelVision8/GameCreator/issues/40)


Bonus GIF:

Working inventory and creating keys mechanic on this gif:

Just like title says.


https://github.com/PixelVision...

https://github.com/PixelVision...

(Edited 1 time)

Btw. bug still exists. Just reminder, before you release bugfix version. :)

Edit: Github issue: https://github.com/PixelVision...

I will do that later, can't remember github creds. and have no access to mail currently. What you mean by adjusting? I don't think so.  I am only using ScrollPosition() as provided above and dynamic objects (that are drawn with DrawSprites()) have static x,y as they doesn't move (so far).

Hi, so title says all.

I have simple camera system in place that is based on player position in the world.

Camera position is set like this:

    function Init()
        glCamera.xPlayerOffset=glScreenPixelWidth/2
        glCamera.yPlayerOffset=glScreenPixelHeight/2
[...]
    function Update()
        glCamera.x=math.max(0,math.min(glPlayer.x-glCamera.xPlayerOffset,
            glTilemapPixelWidth))
        glCamera.y=math.max(0,math.min(glPlayer.y-glCamera.yPlayerOffset,
            glTilemapPixelHeight)) 

It makes sure that screen is always centered on player unless we hit bounds of map (0,0 or tilemap size).
I am scrolling stuff with ScrollPosition() and this is my order of calling stuff:

function Draw()
    Clear()
    ScrollPosition(glCamera.x,glCamera.y)
    DrawTilemap()
    DrawObjects()
end

Where DrawObjects() iterates over dynamic objects in the game and draws them using DrawSprites().

If I move player only on X axis, everything works as expected, but if I moved player over Y axis (or both) dynamic objects, drawn with DrawSprites, are somehow scrolling with camera (but only over Y axis) - and I made sure that those objects doesn't change position.

editorBridge.fps works as intended. :)

Yeah, after seeing Unity export function I feel like whole thread is over. I really like idea of sketching in GC and moving on into Unity. With that in mind I think it would be good to have some hard limitations.

The more statistics exposed, the better. :)

Somehow missed this function. Did quick test and works the same as apiBridge version.

You could paste all of this you wrote into documentation and it would help tremendously.

I was having wrong assumption that drawing to cache is faster and more desirable rather than drawing onto tiles itself, but seeing how easy it is to clear tile it now makes sense.

1. Yeah, while it is obvious in retrospective, it isn't really at the start. But I am used to thinking that if x,y args in method means diff. things depending on other argument, then it should be in separate method instead. So I wasn't expecting it.

Sure, getting good documentation is iterative process.

(Edited 3 times)

Thanks to this topic: If you want to redraw HUD part of screen, every frame, you basically lock yourself to 30fps I started thinking about Game Creator and

wondering if I am expecting something real or my own imagined fantasy console.
 
My biggest grip is how v0.7 introduced lot of limiting, hardware limitation like, decisions.
Last versions where more lenient on how stuff is done and imho that was good choice. Going back on this feels like a downgrade to me.

In my childhood I played on NES and SNES, and later on emulators, so I understand nostalgia and appeal of creating game from that times... but I have trouble seeing pros of developing with problems from that era. Of course, I am not your 8bit purist/'there is right way of doing things' type of guy. This is why I moved away from Pico8 with frustration, despite having game out and knowing how everything works. I was tired of those arbitrary decisions - most notably code limit. When i saw Game Creator, without code limit, with tool editing/creating and ability to choose/create template I thought this is what I was looking for.

I was seeing GC as a env. that takes 8bit idea as a concept, for player to decide what to do with it, rather than set of rules.
My grip is that v0.7 backed up from, what I was experiencing, is Game Creator spirit.

This isn't necessary bad, there is big group of 8bit purists, that still looks for something more than Pico8,TIC etc., and I may not be the target of GC. I just want to show my side of the coin, as I am identify myself as one wanting best of two worlds. Let's say I want to see 2017 development/way of doing things in 8bit env.

My question is: What is spirit/purpose of Game Creator? Do I have wrong impression of what GC is trying to accomplish?

(Edited 1 time)

Tough decision. I understand you trying to balance between going old style and going user convenience, but from my personal perspective, this gets detrimental to end product.

Good way, for now, would be to allow all solutions you described so user can decide what works best for his/her game.

Because if you choose to use more lenient method, purists will be angry and if I you choose 100% true way of 8bit, it will throw away all those people looking for developing game in 2017 way with limitations. (like me)

Then, making several methods is very time consuming and prone to bugs...

This thread made me think about Game Creator and I moved it to separate thread: LINK.

I found lacking in LUA Api that:

1. there is no information when I should pass pixel x,y, for drawing functions like DrawText/DrawSprite etc. , and when should I pass tile x,y.

2. There is no information where stuff,  ScrollPosition, RebuildTilemap etc., belongs to Update or Draw method and why. Looking at demos and my own experimentation it looks a bit confusing. like ScrollPosition should be done in Draw function (tilemap demo)?

Sorry I already moved past this so I can't provide code, but can confirm this behaviour was from rebuilding tilemap each frame.

I was doing this because I wanted to draw gui stuff at 0,0 space (where I have normal tilemap sprites) then draw HUD part of the game from 0,0 on tilemap and then clean tilemap to original state, so when drawing game portion of the screen gui doesn't appear there. But unless I missed something, it looks like it is bad way to approach drawing gui on tile map, so I switched to drawing GUI outside game portion of tilemap (I resized tilemap to have 1 empty screen of space for gui). I think this is how old games drawn gui, right?

Also, by asking for distinction between DrawMode.TilemapCache and DrawMode.Tile I meant what is a difference for me by using one over another.

Sure, thanks for letting me know.

Sounds good.


For now I created simple FPS calculator, which at least shows when game gets over 100% cpu consumption.

If someone want to use it:

function CalculateFPS(timeDelta)
    table.insert(FPSTable,(1/timeDelta))
    local l=#FPSTable
    if l<10 then
        return
    end
    local n=0
    for i,v in ipairs(FPSTable) do
        n=n+v
    end
    averageFPS=n/l
    table.remove(FPSTable,1)
end

Calling this function in Update function allows to check current FPS in averageFPS variable.

So I am trying to draw HUD just like it is done in need tilemap demo and if I want to redraw something from HUD space I am not drawing rest of the screen in that frame and vice versa.
My quick tests shows me that you can't draw both on same frame as it doesn't work.
I understand that every dynamic thing should be drawn with DrawSprite and not with redrawing tilemap, but I am trying to upgrade my logger debug lib (https://itch.io/t/79403/debugging-tools-logger) that would eat up sprite limit quite quickly.
Easy solution would be not to redraw HUD space every other frame, but... then you still lock drawing game space into <60 fps. What is the reasoning for how this works? And can I bypass this?

(Edited 4 times)

So I upgraded to v0.7 and I have trouble upgrading my code to get same behavior as I got from deprecated apiBridge.

I want to have ability to draw non dynamic text easily. Before v0.7 I used RebuildScreenBuffer() on each frame and then I drawn font with DrawFontToBuffer on each frame.

Now if I use RebuildTilemap() instead DrawFontToBuffer() on each frame I get wanted behaviour only if I use DrawText() with DrawMode.TilemapCache. Which isn't bad, but for some reason that text is drawn only on transparent pixels of tilemap (and there is no aboveBG bool for DrawText like it is for DrawSprite function). If I want to draw 'above' existing tilemap I need to use DrawText function with DrawMode.Tile, but then RebuildTilemap() doesn't clean it. My workaround around this is to:

1. generate 'clean' tilemap data (before calling any DrawFont) at Init() with:
    for y=0,tilemapHeight-1 do
        for x=0,tilemapWidth-1 do
            add(gl_tilemap,Tile(x,y)["spriteID"])
        end
    end
2. Clean whole tilemap with call on every frame: UpdateTiles(0,0,tilemapWidth,gl_tilemap)
3. call DrawFont with DrawMode.Tile after calling UpdateTiles

While I can make sure I don't regenerate whole tilemap every frame, but only overwritten parts, I am not sure if it is intented way, also I can't have fontSpacing with DrawMode.Tile. How I should procced with this?

Bonus question:
1. What is a difference between DrawMode.TilemapCache and DrawMode.Tile? I read new documentation but I still don't understand.

Bump

I have port some of the pico 8 functions and today I rewritten rect and rectfill methods, to be more performance friendly, which allows you to draw lines,rects and filled rects quite quickly. Check my post in this thread: pico-8-to-pixelvision8-tips

(Edited 1 time)

Yeah, I don't think I would release this as library anymore, as I am not feeling like porting just for sake of porting everything pico has, but feel free to use anything/everything from what I have written up here.

Great, looking forward to next version.

Nope, you draw it yourself, you just get data in variable.

No problem :)

(Edited 1 time)

Currently I have 128x32 cells tile map and I am moving camera via ScrollTo method. This is quite cumbersome when I try to draw text and graphics for gui efficiently by drawing to tile buffer. Why? Because for texts I can only provide row and column which makes text jumping for every 8 pixels as can be seen (top right corner) on this GIF: GIF


If I could have data what spriteID is on what x,y then I could draw sprites from tilemap always on 128x128 to draw buffer and eliminate problem that scrolling introduces. It could work similar to how Sprite Builder works. When tilemap is loaded, when in Tilemap tool, add button to write sprite id for every x,y.

(Edited 1 time)

So how our machine template relates to CPU and RAM consuption? Does PV8 always use whole CPU? Or does it limit itself to some arbitrary value?
Regardless of those questions, can you give some way to track CPU consuption for each frame? Pico 8 does it like this:
(command callable in your code)

stat x
Get system status where x is:



0 Memory usage (0..1024)
1 CPU used since last flip (1.0 == 100% CPU at 30fps)

I created spritesheet consiting from colors for tile flags written here: https://pixelvision8.gitbooks.io/game-creator-inst...

This is how my spritesheet looks like: CollisionFlags

I use this spritesheet as tiles in Tiled and export as advised to tilemap-flags.png. For some reason, the brightest flag (which should be 15) is read as 14.

Rest works as intended (although I am using 0 to 4 so far)

This is my tilemap-flags.png: tilemap-flags.png

(Edited 1 time)

For now only external editor. Open file:

C:\Users\[username]\AppData\LocalLow\Pixel Vision 8\Game Creator Pro\Workspace\Game\code.lua

with your favorite editor.