Jump to content

All Activity

This stream auto-updates

  1. Today
  2. i think this can you help you : https://www.leadwerks.com/learn/Widget_SetShape?lang=lua
  3. I'm curious how you "ran out of ammo" in a game with infinite ammo. R is the reload key, as per the standard for the last twenty years or so. I also highly doubt the monster was stuck. The monsters target the barricade, not the player. Once the barricade is destroyed, they will target the player. I'd appreciate it if you'd actually play the game before posting more misinformation about it.
  4. When I launched Lyburnum, the monster was stuck in objects and couldn't move, so it couldn't damage the character. I quickly ran out of ammo, but the monster remained alive. I ran around the level but couldn't find any more ammo. Escape from Vostorg uses a third-person view, so the character controller was written from scratch. In your game, the character controller is indistinguishable from the standard FPS Controller.lua. My character can move left and right; you just don't have to press two keys at the same time (forward and sideways). The character doesn't move diagonally due to the lack of appropriate animations. All the objects in your game are standard, which is not bad, but nothing new.
  5. As MonkeyFrog mentions I think this greyboxing/prototyping subject could be a large part of the issue. This is my preferred way of trying to work and it feels like Leadwerks should support it well . Brushes can be effective as simple objects. My winter game had 71 objects based on brushes and no 3d meshes. This SHOULD be where some of the Leadwerks FUN is, and it almost is, but then it feels like it doesn't work out and gets painful (...so...basically the opposite of fun). However it feels like it SHOULD work and should only be a checkbox or menu item away but currently it feels like a bit of a battle. There may be 2 broad sets of users. One set may be using more of a greyboxing/prototyping users approach. The other users probably use more predefined 3d imported models with well defined subobjects. Prototypers are going to be composing objects with parts which are not yet set in stone as well defined subobjets and for whom it is more important that updates carry to children. The other people have objects more often set in stone so want to retain sub object transforms. Would it not help if people could CHOOSE to pull the master prefab to the instance again. Part of the issue is that the manual way, which I suppose is the current 'solution' is to delete, re-add, reposition, which feel like no solution at all. Seems there should be other options here. Do neither of these work?..... 'REPLACE PREFAB' CONTEXT MENU ITEM: Allow a user to replace a prefab with another prefab. If it defaults to assuming the current filepath then it acts like an instance re-sync but you can change path to be a different object altogether if you want. Retains transforms that previous prefab has so it is same scale, orientation as before at top level node but actual sub-objects are reset (unless there is a way they can be matched). 'INSTANCE OUT OF DATE' UI INDICATIONA AND 'RESYNC ONE/ALL' CONTEXT MENU ITEM: There may be more complicated ways to do this but the basic idea is that Prefabs can tell when they are not in sync with the master and indicate this (by colour etc) and the user themselves chooses if they want to take the parent again (they will lose transforms unless this can be carried through). Couldn't there just be a guid or hash (based on file content or something) in the master prefabs and the instance get given that GUID/hash when created and when the master is resaved it gets a new GUID and the editor can check prefabs (based on matching filepath) and indicate in UI the prefabs where their GUid/hash does not now match the master prefab. Maybe when updating one there is additional menu item or checkbox to replace all. Hopefully this fits with UNDO system and you can step that action back should you notice you wanted only some to be affected and you can then do individuals. Maybe a plugin script thing could do one or both of these but most users are likely to not know how to deal with that. The source engine stuff sounds good too but initially maybe there is some simple option where you can just see an instance is out of date and pull again if you want to would help. Just flat out replacing a prefab with same/other seems useful to me as just a general option also.
  6. Simplified code, the application crashes in LoadScene. local displays = GetDisplays() local window = CreateWindow("Leadwerks", 0, 0, 1280, 720, displays[1], WINDOW_CENTER | WINDOW_TITLEBAR) local framebuffer = CreateFramebuffer(window) local world = CreateWorld() local camera = CreateCamera(world) camera:SetClearColor(0.125) camera:SetPosition(0, 0, -2) local buffer = LoadBuffer("Maps/Mars.map") local stream = CreateBufferStream(buffer) local jsonEnd = 0 for i = 0, buffer:GetSize() - 1 do if buffer:PeekByte(i) == string.byte('}') then jsonEnd = i end end local jsonStream = CreateStreamBuffer(stream, 0, jsonEnd + 1) local binstream = CreateStreamBuffer(stream, jsonEnd + 1, buffer:GetSize() - jsonEnd - 1) local scene = LoadScene(world, jsonStream, binstream) while window:KeyDown(KEY_ESCAPE) == false and window:Closed() == false do world:Update() world:Render(framebuffer) end
  7. -- Configuración mínima local displays = GetDisplays() local window = CreateWindow("Leadwerks", 0, 0, 1280, 720, displays[1], WINDOW_CENTER | WINDOW_TITLEBAR) local framebuffer = CreateFramebuffer(window) local world = CreateWorld() local camera = CreateCamera(world) camera:SetClearColor(0.125) camera:SetPosition(0, 0, -2) Print("=== CARGA DIRECTA DESDE BUFFER ===") -- 1. Cargar archivo completo a buffer Print("1. LoadBuffer('Maps/Mars.map')...") local buffer = LoadBuffer("Maps/Mars.map") if buffer == nil then Print("Error: LoadBuffer falló") return end Print(" Buffer: " .. buffer:GetSize() .. " bytes") -- 2. Crear BufferStream desde el buffer Print("2. CreateBufferStream(buffer)...") local stream = CreateBufferStream(buffer) if stream == nil then Print("Error: No se pudo crear stream") return end -- 3. Crear binstream vacío (requerido por LoadScene) Print("3. Creando binstream...") local binstream = CreateBufferStream() -- 4. Intentar carga directa desde buffer Print("4. LoadScene(world, stream, binstream)...") stream:Seek(0) binstream:Seek(0) local scene = LoadScene(world, stream, binstream) if scene == nil then Print("❌ FALLO: No se pudo cargar desde buffer") else Print("✅ ÉXITO: Escena cargada directamente desde buffer") end -- Loop mínimo while window:KeyDown(KEY_ESCAPE) == false and window:Closed() == false do world:Update() world:Render(framebuffer) end The entire file enters the buffer. Print("=== CARGA COMPLETA DE ARCHIVO A BUFFER ===") -- 1. Cargar archivo COMPLETO con LoadBuffer Print("1. Cargando archivo con LoadBuffer...") local buffer = LoadBuffer("Maps/Mars.map") if buffer == nil then Print("❌ LoadBuffer falló - el archivo no se pudo cargar") return end local bufferSize = buffer:GetSize() Print("✅ Buffer creado: " .. bufferSize .. " bytes") -- 2. Mostrar información general Print("\n2. Información del buffer:") Print(" - Tamaño total: " .. bufferSize .. " bytes") Print(" - Primer byte: " .. buffer:PeekByte(0) .. " (ASCII: " .. string.char(buffer:PeekByte(0)) .. ")") Print(" - Último byte: " .. buffer:PeekByte(bufferSize-1)) -- 3. Mostrar los primeros 500 bytes (como texto y hex) Print("\n3. Primeros 500 bytes del archivo:") local textPreview = "" local hexPreview = "" for i = 0, math.min(499, bufferSize-1) do local byte = buffer:PeekByte(i) -- Versión texto (solo caracteres imprimibles) if byte >= 32 and byte <= 126 then textPreview = textPreview .. string.char(byte) else textPreview = textPreview .. "." end -- Versión hexadecimal hexPreview = hexPreview .. string.format("%02X ", byte) if (i+1) % 16 == 0 then hexPreview = hexPreview .. "\n" end end Print(" Como texto (imprimible):") Print(" " .. textPreview) Print("\n En hexadecimal:") Print(" " .. hexPreview) -- 4. Mostrar los últimos 500 bytes Print("\n4. Últimos 500 bytes del archivo:") if bufferSize > 500 then local startPos = bufferSize - 500 local textEnd = "" local hexEnd = "" for i = startPos, bufferSize-1 do local byte = buffer:PeekByte(i) if byte >= 32 and byte <= 126 then textEnd = textEnd .. string.char(byte) else textEnd = textEnd .. "." end hexEnd = hexEnd .. string.format("%02X ", byte - startPos) if (i - startPos + 1) % 16 == 0 then hexEnd = hexEnd .. "\n" end end Print(" Como texto (imprimible):") Print(" " .. textEnd) else Print(" (El archivo es demasiado pequeño para mostrar últimos 500 bytes)") end -- 5. Buscar la transición de JSON a datos binarios Print("\n5. Analizando estructura del archivo:") local nullByteCount = 0 local jsonEnd = nil -- Buscar bytes nulos (0x00) que indican datos binarios for i = 0, math.min(1000, bufferSize-1) do if buffer:PeekByte(i) == 0 then nullByteCount = nullByteCount + 1 if jsonEnd == nil then jsonEnd = i Print(" - Primer byte nulo (0x00) en posición: " .. i) end end end Print(" - Bytes nulos en primeros 1000 bytes: " .. nullByteCount) Print(" - JSON probablemente termina cerca del byte: " .. (jsonEnd or "no encontrado")) -- 6. Verificar si es JSON válido Print("\n6. Verificando si es JSON válido:") local firstChar = string.char(buffer:PeekByte(0)) local secondChar = string.char(buffer:PeekByte(1)) Print(" - Primeros caracteres: " .. firstChar .. secondChar) if firstChar == "{" then Print(" ✅ Comienza con '{' (JSON válido)") -- Buscar la última llave de cierre local lastBrace = -1 for i = 0, bufferSize-1 do if buffer:PeekByte(i) == string.byte("}") then lastBrace = i end end if lastBrace > 0 then Print(" - Última '}' en posición: " .. lastBrace) Print(" - Tamaño del JSON: ~" .. (lastBrace + 1) .. " bytes") Print(" - Datos binarios después: ~" .. (bufferSize - lastBrace - 1) .. " bytes") end else Print(" ❌ No comienza con '{' (no es JSON puro)") end Print("\n=== ANÁLISIS COMPLETADO ===")
  8. Firstly, there is not one monster. There is one monster on wave 1, and the monster count increments at the end of every wave. If you manage to reach wave 50, you will be fighting 50 monsters simultaneously. Between waves, the player must allocate hours toward searching for weapons, searching for survivors, and repairing the barricade in order to begin the next wave. The system is central to the game loop and is what allows the player to survive increasing enemy counts. If you didn't experience this, you likely didn't progress beyond the first wave. The game uses a consistent art style, achieved through a shader. This is in direct contrast to Escape from Vostorg, which uses a hodgepodge of high-resolution textures mixed with materials that don't visually align. The game also has a fully functioning character controller, including the ability to move forward or backward while strafing left or right simultaneously, something notably missing from Escape from Vostorg. As for the game being "small": the level is intentionally contained. You are not meant to explore; you are meant to defend your barricade. Failing to do so results in death. This doesn't make the game small; it makes it focused. In fact, it has far more replay value than Escape from Vostorg, since players can experiment with different strategies to reach higher wave counts. There is also a restart button, allowing the game loop to begin again immediately after losing, something Escape from Vostorg lacks. The game includes sound, another feature missing from Escape from Vostorg. You can alt-tab freely while playing my game and still control your mouse. Escape from Vostorg locks the cursor, requiring the game to be paused before alt-tabbing. If we're going to talk about "small," I was able to complete Escape from Vostorg in 33 seconds. Once completed, there was no way to replay the game, as there is no restart functionality. On top of that, the character controller in Escape from Vostorg barely functions. The camera constantly clips into the player's head, which is genuinely nauseating. The lives counter does not work, and there are numerous ways to animation-lock the player and completely break the enemy AI. I would strongly suggest referring to Escape from Vostorg as a much clearer example of incompetence.
  9. Yesterday
  10. Another video demonstrates how to reliably create the error:
  11. I just render a splash screen with a logo on it until the start render event fires. Sometimes there is a millisecond of white but it's nothing to lose sleep over.
  12. I still say we should still have something like the Source Engine instance system. https://developer.valvesoftware.com/wiki/L4D2_Level_Design/VMF_Instances https://developer.valvesoftware.com/wiki/Working_with_instances If prefabs are going to be left flexible, then I want a system where I can make objects as map files and expose the I/O and some entity values to the main scene. the flow graph communications should also still work from the instance.
  13. yurembo

    Nerva

    This game isn't for a GameJam. As @Josh said in one of his podcasts: "don't make me read too much". I read the PDF with the rules and strategies twice, but I didn't understand anything. I think a game for a GameJam should be easy to learn, and yes, it should have a unique feature, but I don't want to have to work hard to play this game. Everything is very well done and beautiful, with nice sounds.
  14. Sorry, I seem to have missed your game. I'll definitely play it soon.
  15. You didnt play my game Nerva , also an entry in the Winter Games 2025
  16. Here is a demonstration that proves the cause:
  17. Hey @yurembo, thanks for playing the game! The graphic style is pretty niche, so I understand it won’t be for everyone. Thanks for the feedback, and for saying hello to the old lady :}
  18. Wow, wow, it flies! Write about the controls in the first post.
  19. Press F1 in Game Play and you will see the controls on the screen for about four seconds. I have to implement the sound improvement with bars in the settings option.
  20. You'll have to write a review for this game, my friends
  21. I played nine games presented at Winter Games 2025 GameJam, including my own, but excluding SnowBall VR, as I don't own a VR headset. Note: I tested them on my old computer with a GeForce GTX 750 graphics card, which is about 12 years old. - Nerva - I think this game isn't for a GameJam. As @Josh said in one of his podcasts: "don't make me read too much". I read the PDF with the rules and strategies twice, but I didn't understand anything. I think a game for a GameJam should be easy to learn, and yes, it should have a unique feature, but I don't want to have to work hard to play this game. Everything is very well done and beautiful, with nice sounds. - LeadwerksSurvivor - unfortunately, the game did not start. - Deakons mod - to be honest, there is no game here. - Ingenuity Legacy – lots and lots of text, interesting sound and singing. The wind is making a loud noise in my headphones. A helicopter appears on the screen. But how do I control it? Just press F1. The control information will appear on the screen, and you will be able to turn on the helicopter engine and do many other interesting things. - knucklebones-aftermath-v0_0_5 - looks great, the game definitely has potential. It currently consists of two rooms, and the game is very short. Picking up notes and solving riddles could be very interesting. The game lags on my test GeForce GTX 750 graphics card. The light looks like an opaque cone. Yes, the graphics card is very old. No question about the graphics performance. - KoffeeKrew-Winter-Games-2025 - the game is very small. There's only one monster, and it's incompetent. It looks like the level was completed the day before the jam ended - PenultimatePyre looks cool. I'm not a fan of imitation games based on old systems. But this game has a fully developed winter level where you can wander around, enter three houses, collect piles of branches and crosses. Climb a mountain and climb a metal structure. And in the very first house, say hello to Grandma. - Robot Concept is a really cool concept. The side view is something new. There's already an interesting level, but few gameplay mechanics have been implemented yet. Hopefully, a development will continue. - Escape from Vostorg - you'll have to write a review for this game, my friends
  22. PenultimatePyre looks cool. I'm not a fan of imitation games based on old systems. But this game has a fully developed winter level where you can wander around, enter three houses, collect piles of branches and crosses. Climb a mountain and climb a metal structure. And in the very first house, say hello to Grandma.
  23. Ingenuity Legacy – lots and lots of text, interesting sound and singing. The wind is making a loud noise in my headphones. A helicopter appears on the screen. But how do I control it? I press every key on the keyboard, but the helicopter doesn't budge.
  24. Interesting vote results. I would have expected people would agree with you. Usually if you phrase something in terms that sound like functionality is being restricted, people react against it.
  25. It is because of the LoadScene example in the documentation that presents errors.
  26. KoffeeKrew-Winter-Games-2025 - the game is very small. There's only one monster, and it's incompetent. It looks like the level was completed the day before the jam ended
  27. knucklebones-aftermath-v0_0_5 - looks great, the game definitely has potential. It currently consists of two rooms, and the game is very short. Picking up notes and solving riddles could be very interesting. The game lags on my test GeForce GTX 750 graphics card. The light looks like an opaque cone. Yes, the graphics card is very old. No question about the graphics performance.
  1. Load more activity
×
×
  • Create New...