- 23
- 10 946
Retro Love Letter
เข้าร่วมเมื่อ 11 พ.ค. 2022
Avid coffee drinker and developer of things.
Support: github.com/retroloveletter/support
Support: github.com/retroloveletter/support
Killing Time Style 3DO Engine Update | Enemy State & Sight | Part 4
In this video I showcase early game enemy support and their states. If you would like to skip the technical implementation and jump to the demos then you may use the timestamps below.
Enemy state and sight overview: 01:41
Visual demo of enemies and state: 10:52
Reject Table: 12:54
Enemy Field of View: 16:15
Direct Line of Sight: 19:06
Alert enemies with noise: 29:30
Visual demo of alerting enemies with noise: 31:25
My game publishing website: www.zyzixgames.com
I also develop for #nes
Socials:
x.com/ZyZixGames
zyzixgames
Github: github.com/retroloveletter
Itch.io: zyzixgames.itch.io/
Learn more about 3DO Development: 3dodev.com/
3DO Community Discord: discord.gg/EacJ8Uax
#retrogaming #homebrew #3do #gamedev #doom #killingtime #gamers
Enemy state and sight overview: 01:41
Visual demo of enemies and state: 10:52
Reject Table: 12:54
Enemy Field of View: 16:15
Direct Line of Sight: 19:06
Alert enemies with noise: 29:30
Visual demo of alerting enemies with noise: 31:25
My game publishing website: www.zyzixgames.com
I also develop for #nes
Socials:
x.com/ZyZixGames
zyzixgames
Github: github.com/retroloveletter
Itch.io: zyzixgames.itch.io/
Learn more about 3DO Development: 3dodev.com/
3DO Community Discord: discord.gg/EacJ8Uax
#retrogaming #homebrew #3do #gamedev #doom #killingtime #gamers
มุมมอง: 334
วีดีโอ
Killing Time Style 3DO Engine Update | Blockmaps | Part 3
มุมมอง 318หลายเดือนก่อน
A look at how I handle wall collisions by implementing the blockmap concept used in DOOM. Player velocity and friction were also added. 00:17 Blockmap concept 02:27 Wall collision 04:38 Demo My game publishing website: www.zyzixgames.com Socials: x.com/ZyZixGames zyzixgames Github: github.com/retroloveletter Itch.io: zyzixgames.itch.io/ Learn more about 3DO Development: 3dodev.com...
Killing Time Style 3DO Engine Update | Mip Mapping & Sprites | Part 2
มุมมอง 7753 หลายเดือนก่อน
I have made good progress on my 3D engine for 3DO, Matinicus. This engine is inspired by the Killing Time game for 3DO. I wrote a custom WAD data converter and custom engine so that I can use DOOM level editors to create my environments. The theory is that this is how KT was developed back in the day. 00:36 Visual engine run-through 01:20 Mip Mapping 04:27 Sprites 05:24 Support for narrow gaps ...
Jingles Defense for NES releases September 21st
มุมมอง 1693 หลายเดือนก่อน
My new NES homebrew game, Jingles Defense, releases on September 21st at noon Pacific! There are only 50 limited edition copies, each sealed in box with manual, dust sleeve, yellow cart, and rear holo label. Purchase link will be on the website: www.zyzixgames.com/games/jingles-defense You can access the game ROM here: zyzixgames.itch.io/jingles-defense #retrogaming #homebrew #nes #indiegames
Developing a Killing Time Style Game Engine for 3DO | Part 1
มุมมอง 9876 หลายเดือนก่อน
I have decided to take what I have learned after programming Tempest and other 3D projects and make a 3D game engine with capabilities inspired by Killing Time for 3DO. 0:46 Using DOOM editor to create WAD files for my engine 6:02 I added advanced sector attribute support 7:30 Current performance 31:34 More code review 35:56 BSP tree thoughts 39:50 Lighting support I have created my own WAD fil...
My New NES Homebrew - Jingles Defense
มุมมอง 3708 หลายเดือนก่อน
You can access the game ROM here: zyzixgames.itch.io/jingles-defense My first video showcasing a new video game project of mine for the Nintendo Entertainment System. My goal is to produce a limited number of physical in-box copies. My new website: www.zyzixgames.com My new instagram account: zyzixgames My github: github.com/retroloveletter You can find me on the 3DO Community Dis...
R.E.A.L. Tempest Source Code Released for 3DO. Overview of how the game works.
มุมมอง 314ปีที่แล้ว
#3do #tempest #homebrew #gamedev Source code is on my github: github.com/retroloveletter/tempest-3do R.E.A.L. Tempest, (aka Tempest 3DO), is my own Tempest port programmed from scratch in C for the 3DO. I programmed this port in 2 months as a self challenge to develop a 3D game on the 3DO. It has been tested on hardware using an ODE and from a burned disc. Leave a comment if you have any questi...
Tempest 3DO - Mouse support, Super Zapper, Auto-fire - v1.2.1
มุมมอง 546ปีที่แล้ว
#3do #tempest #atari #gameplay My 3DO port of an Atari classic game, Tempest. See GitHub for list of all changes in this release. To use the mouse, daisy chain it to the control pad. Once the game starts, you may choose between using the mouse or pad at any time. RetroRGB Article: www.retrorgb.com/tempest-gets-homebrew-release-on-3do.html GitHub: github.com/retroloveletter/tempest-3do/releases ...
Tempest 3DO Game Update - v1.1
มุมมอง 387ปีที่แล้ว
#3do #tempest #atari #gameplay My 3DO port of an Atari classic game, Tempest. See GitHub for list of all changes in this release. RetroRGB Article: www.retrorgb.com/tempest-gets-homebrew-release-on-3do.html GitHub: github.com/retroloveletter/tempest-3do/releases It is best to play on hardware by either using an ODE or CD. The Phoenix emulator will raster particle effects closer to hardware, but...
I developed Tempest for 3DO
มุมมอง 1.4Kปีที่แล้ว
#tempest #3DO #homebrew #gamedev A 3DO port of an Atari classic game, Tempest. This version supports NTSC. There are 99 levels and 8 enemy types. Levels repeat every 20. Levels get progressively more difficult as new enemy types spawn (see manual for list of all enemies). RetroRGB Article: www.retrorgb.com/tempest-gets-homebrew-release-on-3do.html GitHub: github.com/retroloveletter/tempest-3do/...
Developing a 3D Engine for 3DO - Part 2 - Importing Models
มุมมอง 486ปีที่แล้ว
#3do #gamedev #homebrew #3dgraphics #blender I have created a Python script that parses obj files exported from Blender and writes custom binary model files for rendering directly in my engine. Models can now be scaled, translated, and rotated about all axis. Perspective projection has been improved. Quads are now sorted based on their depth so the rendering order has been improved. Support / d...
Developing a 3D Engine for 3DO - Part 1
มุมมอง 1Kปีที่แล้ว
A new series documenting my efforts on writing a 3D engine for the 3DO. It is an early prototype at this time. #3do #gamedev #homebrew #3dgraphics
Jingles Defense - 3DO Puzzle Homebrew
มุมมอง 325ปีที่แล้ว
A small puzzle game I wrote for the 3DO. Use blocks around you to trap all the cats. A cat is trapped if it cannot move at all, but watch the corners as they can move diagonally. Once all on-screen cats are trapped they turn into cheese before the next wave, which you eat for points. Avoid mouse traps, they freeze you for a few seconds. You cannot push blue tiles, they are randomly placed and s...
3DO Pacman Clone
มุมมอง 420ปีที่แล้ว
Sorry for standard video quality, I need to redo my setup. Wreckman is a Pacman clone I made for 3DO. I don't think I've ever seen a Pacman clone for 3DO? Let me know if one exists. Thanks to Archive3DO from the 3DO community discord for helping me with some graphics. Join our discord: discord.gg/kvM9cQG Link to game: github.com/retroloveletter/Wreckman #3do #homebrew #gamedev #pacman
3DO Ray Casting Project - Part 8 - BioFury is complete
มุมมอง 1.3Kปีที่แล้ว
3DO Ray Casting Project - Part 8 - BioFury is complete
3DO Ray Casting Project - Part 7 - Using ODE, Demo Available
มุมมอง 7522 ปีที่แล้ว
3DO Ray Casting Project - Part 7 - Using ODE, Demo Available
Really impressive, can't wait to see more.
thats some really nice progress! pretty exciting to see thanks for sharing
Much appreciated! I look forward to sharing more progress soon.
I am not an expert in C programming or 3DO development. However, I noticed that on 30:16 and throughout the code, you are using uint32 or int32 as the data type almost everywhere. Is there a specific reason for dedicating 4 bytes to each variable? Considering the significant memory constraints of the 3DO hardware, wouldn’t it be better to use smaller data types like uint8 or int8? Could you please explain?
The 3DO uses an ARM60 CPU. Only bytes and 4 byte words are supported for load and store. All registers are 32bits. There are CPU costs to using non-word sized integers. Unless you really need the space then using them will increase the CPU costs. For small numbers, less than 256, then bytes will be free'ish but depends on usage. But you really shouldn't be using 16bit ints.
This is really impressive and lots of dedication, just like 3DO HD. It’s very refreshing to see the 3DO all of sudden getting the love it deserves.
I thought I left a reply but it was gone lol Thanks for your interest in this project!
@ you’re welcome and happy new year! Keep up the amazing work for this much understood machine.
Just found your channel. Love this content! Keep it up man!
Thank you!
Have you checked out the Killing Time Resurrected official modding SDK release? It has all the 3DO version's maps originally made with DEU, which were only partially converted due to the engine's way of handling enemies etc. (there's a .txt document explaining more about it). Not sure how useful they might be for the project, but it's a noteworthy curiosity nonetheless! Also, do you think it'd be possible to add a melee weapon that can instakill the enemies if the player goes unnoticed (i.e. the knife, which is restored in Resurrected)?
Hey there! Thanks for looking out, and it is a noteworthy find indeed. @Tristan885 a member from our 3DO discord recently posted about it. So far I've only used graphics assets to test with, so it has been helpful. I am curious about the maps and other information included, and will be checking it out soon.
@@TheFieryWind99 oh and yes on the melee!
This is amazing. Long live the 3DO
This is mental - in a very good way of course. The 3DO seems to be getting alot of indie development lately. Awesome work man. Seems like the 3DO has become a machine of great interest and proves it was far more capable then many gave it credit for.
Thanks. Some early projects did indeed attract new homebrewers, and there are different projects in the works. If you are not yet in the 3DO community discord, it is a good place to get project information and see updates prior to these videos. discord.gg/EacJ8Uax I go by 'zyzix' on there.
Looking good so far!
Thanks!
That's look very very good, keep going!
Thank you for the support!
Very nice progress. Cheers.
in the end it will be possible to make different mods, as well as port 3D games?
Any game that shares a similar style is doable to port. The best way to describe the main constraint this engine has is 'DOOM but cubicle', or games that resemble Killing Time for 3DO (not PC, as that is more advanced). The main constraint comes from using quads for everything, which was done in order to leverage the most out of the 3DO. As for mods, anything other than new 'skins' would require code changes.
@@retrolovelettercould you make a level where only convex edges need to meet exactly? Like steps and tables need to follow the cubes, but hallways don’t. Or multi-facet columns. You know, like this Sega Saturn quads on mode-7 games. Also: slopes. Here the roles would be reversed. Then find out if this glitches in z-order. Ah you have some faces like this. So let’s connect to a different room which is rotated relative to the current one? Oh no, does not work.
So cool!!!
🙏
Really looking forward to the finished product
It has been a journey so far, thanks for all the support!
Badass!
Thank you!
Great work! Keep on going!
this is sick :D hype for the killing time remaster
I'm looking forward to playing the remaster.
Do you have any advice for someone that doesn't know how to code but thinking of learning to make their own game engine?
I recommend smaller goals in the beginning, such as making various demos and smaller games. You can make many games without writing an engine. Game engines can be a rather large undertaking, but I feel they are critical when working on projects like mine for obscure hardware, where nothing pre-exists for me to use. The path can also vary depending on your target platform. If you are focusing on PC then I would start with learning C++. Once you have a good grasp of C++ then you can use barebone APIs like SDL to handle graphics, input, and audio, and practically create any sort of game framework you want from the ground up. Maybe stick to 2D for a while. You can adopt an API like OpenGL later for more advanced graphics. But if you choose to use an existing modern game engine then you can use C++ with Unreal Engine, another benefit to learning C++. There is also Unity, for which you would learn C#. You can also use C++ and C# with the Godot engine. My 3DO work has all been done in C, but I can also use arm assembly if I needed to. For NES everything I do is in 6502 assembly.
@@retroloveletter ok cool. My goal for games is to be close to retro style fps like blood or quake, maybe fear or survival horror like cry of fear. So start small and use a game engine. I did download unreal and stride3d to try out.
Impressive stuff!
Thanks Ben!
awesome i used to use that name for all kinds of things! i always thought the island name was so interesting
Maine really has an island named Matinicus. I just learned this when I began working on this engine, and found that very cool. I loved that the story took place on an island because the atmosphere felt more isolated, on top of an already creepy story.
@@retroloveletter oh that's really interesting! I always assumed it was made up
Great work this is awesome
Thank you!
This is looking really great man. Very cool
Thanks man! Much appreciated!
I misspoke at 05:24 - I meant to say the engine now supports narrow gaps between sectors, which ends up creating walls of various thickness. I also interchanged 'line definition' with 'line segment' in DOOM nomenclature. And re the skybox, the most a cel would be off screen by is cel size - 1. It uses 5 cels each for the background / foreground and stitches them together based on the view angle.
You can access the game ROM here: zyzixgames.itch.io/jingles-defense
You can access the game ROM here: zyzixgames.itch.io/jingles-defense
The physical release looks so good
@@archive3do769 thanks!
I hope it will also be available as a download?
Hey there, yes, I will be releasing the rom for download. Not on the physical release date but a short time afterwards.
The rom and game manual are now on my github.
looks like 3DO made a doom-clone engine. that time many of developers hid they used proprietary engine by reverse engineering or to ask someone to look at souce code.
I Wonder if the CPU could work with a voxel representation to slice by z, and then assemble quads from this. So kinda like kitchens are planned to have shelves to be integer multiples of a foot wide. Maybe even a more radial sorting would be possible. And close up to avoid warping, quads cover just one voxel. And close to high detail decoration. And collision detection works (roughly) over voxels. Only bullet / player within a voxel are CJK . Many clones of Minecraft exist. I am actually no expert because I like streamliners. But 1 MB RAM gives you 100 feet per dimension. Bytes can index to texture.
Awesome job. This looks great!!😳🤩
Good video with nice explanations in general. Making the second version using indexed rendering and sequential vertex processing from bigger buffers seems like a good decision. :) For those who want them, here are some notes: 5:45 The reason why the walls in the back are disappearing is far-plane clipping / culling, which eliminates any geometry that is deemed too far away. Back-face culling lets us see inside the closed room in the first place, by ignoring geometry that is facing away from the virtual camera's look direction. This is what was meant there (see below). The way this was phrased, it was unclear which was meant, as both types of culling were happening in view. Luckily... (keep reading) 10:42 clarifies the above. The explanation in the preceding segment can be somewhat misleading and is quite often insufficiently explained in videos. In the special case shown there, back-face culling is applied in a pre-process before anything is transformed. This is good. The following is about the general (often post-transform) case. In general you don't need to supply normals for back-face culling and in fact you don't unless you have full control over the transformation pipeline in software. The winding order is what really defines front- and back-facing surfaces, by providing a primitive's vertices in an either clockwise or counterclockwise sequence. You can typically set up which winding order is front-facing and then you can set which facing to cull (none, any or all). It is important to distinguish between the two types of normal used here: one needs to be explicitly provided for shading, the other can be completely left out and implicitly computed for culling (in one form or another). Thus a primitive can have multiple normals: its surface can be front-facing (implicit surface / primitive normal) while at the same time being back-facing (explicit shading / lighting normal) to e.g. simulate thin cloth lit from the back. In the extremes there are double-sided surfaces with independent front and back shading normals. (Shading normals don't have to be unit vectors. Older games used scaled normals to e.g. fake ambient occlusion on models.) That said, the explanation used in the video is fine, as long as both normals (shading and surface) always match and such a matching normal is always present. My issue is just with the missing distinction. Modern graphics use almost exclusively per-vertex normals, which typically bend into all sorts of directions away from the true surface normal and there being no explicit surface normal anyway, they perform back-face culling just fine. Beginner programmers and beginner artists often mix these two up which results in confusion. (No insinuation about the video's author is intended or should be made at this point. Seriously. As this stuff becomes second nature, people tend to skip a few steps in their explanations, which naturally also applies to me). 19:00 No, please go on, there are too few "very technical" in-depth explanations and it's always good to see other people's perspectives even on familiar topics. :)
To clarify, my backface removal is a loose implementation of what that generally means. It is one of the first steps in my pipeline because it can generally cut walls in a POV down 50%. But I'm using world space for it, not camera space. This means if my check says I cannot see a quad then I definitely cannot see it. If the check says I can see the quad, I still may not be able to see it as it still needs to be checked against the frustum. This was in place prior to my recent change of processing camera transformations in batches and so I didn't want to spend any time doing transformations until I (hopefully) culled roughly half of the scene down. The current check is issuing a single (and I believe hardware accelerated) dot product. Since the geometry (at least for now) will not rotate and I'm using world space I don't need to update my face normals. This is calculated in a pre-processing step. Any new approach would have to be faster than a single HW dot product since the face normal is serving to represent the winding order in my implementation. The CEL engine can handle backface removal given the proper flags, but I hadn't tried this yet since again prior to this update I didn't want to process a quad any further unless I absolutely had to.
@@retroloveletter Hi, thanks for the response. It’s important to me to state that my comment wasn’t criticising your method. In fact, what you are doing is reasonable and good. Many modern games do a similar thing where they cull small clusters or patches of geometry roughly facing the same direction with a shared pre-computed world-space position and facing direction (similar to a surface normal, but more of a cone in concept) before transforming anything. (Similar data is also used for proxy occlusion queries.) Some late PS1 games have supposedly even gone so far as to have multiple pre-sorted and pre-culled index arrays for their environments that could be selected based on the dominant component of the look axis, reducing the necessary sorting and culling to a minimum. Vagrant Story is one such game that comes to mind (I might be wrong though). I’ve clarified my original comment a bit in an effort to make it more fair to what you talked about in the video, while retaining the information I tried to convey.
Killing time was such a weird and awesome game
I enjoyed how they incorporated FMV. Moments captured in time similar to a creepy haunting.
This is super fun for someone like me who's working in modern graphics but wasn't around back then 😊
Will this be open source?
I would first like to make a game from it.
I believe Burger Becky has the 3DO version's source code. Perhaps reach out to her about your questions.
Excellent.
There is a version on GitHub with 10% speed up. How do you render visiplanes with quads? You cannot use BSP one 3do if you want any kind of speed. And when you want not only doors, but polygon vehicles or enemies, you can totally forget BSP. Open Lara sorts by z . I’d like to see code which efficiently slices hight fields along z. For a most horizontal camera .. but Lara dives.
The 3DO was basically my unobtainium in those days. I was never clear of the true capabilities since it didn't really live long enough for commercial devs to get a handle on it. I'm curious if the doom port could be fixed to run a bit faster after these years.
There is a guy in our 3DO discord that has been working on an optimized fork of DOOM. github.com/Optimus6128/optidoom3do A link to the discord is in the video description if you are interested. There are a lot of members and various interesting projects.
Very awesome
This is so cool!
I realized afterwards that part of my debug console is out of screen capture, apologies. Also sorry for my scratchy throat! I am only using Killing Time texture likeness for the purpose of testing my engine. I will not be using Killing Time assets nor any Killing Time creative elements when a game is eventually made from this engine. This is purely for demonstration / educational purposes.
@jeffcotten1081 I'm looking forward to Resurrected, too. The announcement pushed me to finally play and complete the PC version.
Great work! What programming language did you use for this?
Thanks! I programmed this in C.
Just wanted to say I have been streaming this and Biofury and adore both games. Brilliant job. Viewers loved em too with a few running to grab the downloads. I know they are currently free on digital but if you ever decide to sell both for a tenner or so digitally I am so there. Keep up the good work and ty for supporting the 3DO.
Hey there, thanks for the kind words! I'm glad that you've been enjoying these projects. You may enjoy checking out the 3DO Community Discord every now and then to see projects in the works prior to them hitting social media (if you are not already in the server). We even have some original 3DO devs that worked on licensed games. discord.gg/YEmfuRY3 I plan to go back to 3DO after finishing my NES game.
Welcome to the world of nesdev! Looking forward to future updates!!
Let us know when its completed! :)
Very cool man! Great stuff
I didn’t mind what everyone said about the 3DO, I thought it was cool and under appreciated even when the PlayStation and Saturn arrived. I still think it’s cool. Love your work and thank you
Hey there. Back when 3DO was beginning to phase out, I recall a game store selling off all of their 3DO products. A huge case full of sealed longbox games, $20 bucks each, your pick. I would go back every couple of weeks to try a new title. What a steal.
So cool! I had a 3DO in the day and always felt it didn’t get the love it deserved. Great to see a home brew scene for it.
Thanks. 3DO homebrew has gained another dev since I worked on this project, which is very cool to see. The 3DO discord linked in the description is the only solid source that I'm aware of to be informed of all things 3DO.
Superb so far, needs gourad shading though. Will mouse support translate to a spinner knob?
I think this will depend on the hardware device. Unfortunately, I have not seen any 3DO compatible controllers with a rotary dial. It would be very cool if someone made one. If the device is recognized by the 3DO as a Mouse, it should work just fine with the existing codebase. I initially thought the mouse would feel weird, but I have to say, it felt great. It is very precise.
How viable would it be for someone to use what you are developing to port say Duke Nuke 'em 3D to the 3do? This is all very exciting. Thanks!
This codebase wouldn't help with such a project, unfortunately.
Awesome! Great work! you do this from scratch/
Thanks, yeah, all of the game code was written from scratch. I recently released the source code.
micro-optimization: remember that the ARM60 doesn't have a cache so loop unrolling and data copy unrolling may buy you a few cycles here and there with no real penalty. Came to mind when I saw your COPY_MAT33F16 call. A memcpy is probably more expensive than an inline data structure copy.
Thanks for the tip.
Thanks for opening the source and going over it. I have to point out that your use of `_typ` is something I've not seen before.
I first saw that struct convention used by André LaMothe years ago and I liked it. My conventions can generally bounce around, but I try to keep them consistent in a project.
@@retroloveletterInteresting. Typically you will see `_t` and I will often use `_s` and `_e` for struct and enum. Why _typ ? Is it _type minus the `e`? Or does it have additional meaning?
@@trapexit It's just type minus 'e'.