-
Notifications
You must be signed in to change notification settings - Fork 3
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Development roadmap and direction #7
Comments
I been so busy with math 242 that just noticed this! Also it is her! not him! wwww |
Correction made, sorry about that! |
it is ok! i am studying for exam 2 of math 242! also how to get sdtest.exe to play music? (i did not make the variables project 16 compatible yet.... because i need it working and need to know what needs to stay as an in file sctuct of variables like in 16_in) |
The quickest way would be to get some IMF files and write it to play that. Then music playback becomes a matter of timer ticks and raw register writes to the OPL2 chipset. |
i think it is the ticks and register writes the code has been written. but i ported it to open watcom... so i do not think it works... |
I wrote that code in Open Watcom. Are you sure? :) |
it is id engine code, silly! it is located in src/lib/16_sd.c |
ah yeah for testing reasons. |
I gotta work on getting the joystick stuff working again. and the palette manipulation stuff i been putting to the side too long. and more stuff but i cannot remember at the moment. besides actual engine stuff. |
For those who want to help, how exactly do you intend your palette manager to work? Will it allocate in blocks or groups? Multiples of 4, 8, and 16? EDIT: I mention 4, 8 and 16 as examples. You could simplify your palette manager if you allocate and manage in powers of 2 with each block starting at a power of 2. |
ok the palette stuff. this is rather long. The palette is an array. so.. the file containing some explanation is src/palllist.c An experiment where I make 2 small linked list which points to 2 arrays one is the "hardware palette" array the palette updater stuff i want to make is this: these are 2 arrays with some duplicate values VGA={*,1,2,3,4,5,6,7,8}; //(* is the overscan color which is not manipulated by this process)
VGA={*,1,2,3,4,5,6,7,8,23,0,9}; the merged colors is below
The new IMG array index change is below the matching colors of the image with vga palettes are merged. This should also change the matching numerical values in the image to the vga palette of same color. and for the non matching colors. These are placed at the end of the vga palette and the images index number of the pixel is changed to new number values of the newly added color in the vga palette. //wwww that is the theory but i have not been able to code it because. wither 2 busy (in class while making this) What makes this so difficult is the RGB part. every 3 colors is an index on the vga palette... |
also the drawing of sprites in xcroll are not fast enough on my XT on turbo mode.... i do not know why |
omg I been way too busy and TIRED |
quarter ending in a week so... i will pick up on coding again sometime~ |
I got some plans and such including the engine core stuff and offset array (like wolf3d's). going to use a bunch of code from wolfenstien 3d |
For sound you should look into implementing some of the advanced PC speaker sound algorithms. This involves timeslicing to convert the sound, the use of sample files, or the use of compressed sample files that use a timeslicer to decompress. The easiest and highest quality way is to encode the sound into a high frequency supersonic overtone. However, this method is very processor consuming, as it means you are operating the event timer for sound generation at a very high speed. That said you can operate all high-frequency timer-based preemption on this cycle. (Low frequency operates on the H-Sync (hardware), V-Sync (hardware) and Frame-Done (internal software) interrupts. However some lower quality core timer chips drop their highest frequency registers, and some PC Speaker controllers can't be operated at that speed. Because of this you need some sort of fallback. |
It might be simpler if @sparky4 were to just use Sound Blaster digitized speech if available, and implement PC speaker effects later. Focusing on all the neat tricks you can do with hardware will prevent you from writing the awesome game you want to make and it will never happen. I'd rather see what awesome JRPG or whatever idea @sparky4 wants to make. It might be an awesome story. PC speaker tricks and hardware tricks come second. I would say that's more important than getting a full framerate, which considering the target is XT hardware, probably won't happen for awhile. In fact, I think a better approach to this game is to make the first version and note what you're not happy with, and then some years down the road when making these games has improved your programming skills, you can go back and re-release this one with the faster, more optimized code you wanted in the first place. |
@Ruedii Sparky has been pulling in source code from Wolfenstein 3D to try and build on, so it's possible it may inherit Wolfenstein 3D's fixed tick rate (also used to drive the Adlib music if I recall). However the tick rate is high enough to allow for some good PC speaker sound effects. |
@sparky4 Speaking of JRPGs, you may also want to check out DOSBox-X. Since last November, DOSBox-X has a PC-98 emulation mode and many common games run perfectly fine in it including Touhou Project. |
!! i just noticed this! yeah i am working on other things.. i was not able to code much for like 9 months because classes been rough.. especially last quarter!!! |
aww yeah this is a cs class!! wich means i can code... if i am not so facking tired.. lol @Ruedii we do not even have a engine core.... i mean you can help out with that.. i was going to use the very VERY core stripped of everything of wolf3d engine and related engines.. also i have no idea how to do the map system coding.. also _CA is huge headache zone |
also from the commit from a year ago 16_ca needs huge amounts of work and I should remember what needs to be done soon[going to port rest of code to borland c some time so we can use the core components of id engine here ][going to add 16_us.c eventually but the debug system and CA_ PM_ and MM_ usage is priority now]older zcroll renamed to xcroll][zcroll is now the pre menu game loop system with PROPER data usage with CAMMPM] added 1st scroll back [i work on CA] palette debug show values added wwww and i need to know how to see vrs/vrl imaage data palette index numbers [i am trying to find out how the hell you get the index number values of VRL/VRS] boom has been fixed ^^[CA_CacheMap added seems to be used in start a new game] what is mapsegs? |
@sparky4 Regarding VRL don't forget the hw\vga\vrldbg.c source code which demonstrates how to parse VRL. |
i need to bleach vents again... my mind is too foggy and tired and it wakes too much effort to THINK ^^; @joncampbell123 i did not fully work with that yet. i just never been able to get around to do it. you know super math and very tired foggy head. and 8 am stuff. i need to bleach vents my head is too foggy |
i should do the wolf3d core core stuff and finish testing the joystick... i am forgetting what i have done.. |
I don't have time AND energy anymore >-< it is ALL being used up by school. this quarter is the descrete math which is entirely new to me and there is no tutoring or such so i have to burn al ot of time and energy just to make a C! >-< |
school has been pummeling me so badly. I been sleeping 12 hours everyday during this break if i can due to me not being able to rest from super stress. I am just catching up. also i have not been able to code for a year. i can sense more fucking math on the way. Hopefully this winter i can code. |
i gotta work on the core core (the actual game engine looping part. stripped to the most minimal of minimal. of just a loop and 16_in with a fuck load of //++++ [which means add this later] and then slowly add the 16 parts and then menu and so on) the cache manager is the biggest blockage for me to successfully get p16 into alpha phase wwww. also class is starting back tomarrow. i can barely code! it just shows the state of my mind from all that calculating |
I just updated the hw\vga VRL converter code to add a PNG to VRL converter. The PNG must be paletted with 8-bit depth, of course. The benefit over PCX is that one color can be explicitly set in the PNG as the transparent color instead of having to specify it manually. |
There's a Discord server about DOS games in general you might like. They have a channel on DOS game development that might be of use for Project 16. There is another channel on this server for the seasonal DOS games jams, if such a thing might help with game dev. |
thanks i will check it out! |
hey umm i need assistance with 2 pal files, merging them, removing duplicate color values, and changing the image index color number to match the original palette's color. like a array merger of removing duplicate colors. the code is paltest.c but it is messy and i forgotten how it works. |
I have a program to match colors to a common palette for PNG files here. Written for Linux, may compile elsewhere with some work: I wrote it because ImageMagick has a bad habit of matching to a color palette, but arranging the color palette per converted image in whatever order it feels like, and GIMP (GNU Image Manipulation Program) will shuffle the palette a bit if you load and save a PNG and one color is transparent. This game jam entry needed sprites with a consistent color palette to work. Yes, it uses VRLs. Although it also uses a very minimalist PNG reader library using ZLIB and the PNG spec that I wrote, that is able to run entirely in 16-bit real mode MS-DOS. The fonts in the game are PNG as well, generated by a Windows program that renders fonts to 256x256 TIFFs (intended obviously for OpenGL/DirectX games that need fonts). |
whoa! that is so cool! thank you so much <3 i will work on bcexmm.exe soon along with this |
is there a vrl version? |
No, but you could use it to ensure all PNGs have the same palette, then convert each PNG to VRL. |
oh the game engine would do it on the fly on vrl files not pre processed |
i actually have a question i been debating this since 2018 |
It depends on the variable names. If they're short names and potentially easily confused with local variables, a gvar struct is a good idea. Otherwise, either way is fine. |
it makes porting the ID engine components to be a pain in the butt.. i think a hybrid of the 2 variable stuff should work? |
https://github.com/mills32/Little-Game-Engine-for-VGA i found this engine... i should give it a look when i get some time too |
Nice. The README suggests it does a lot of what I've suggested doing with unchained VGA 256-color mode. Have fun. |
oh like what? |
Remember when I said it might be nice to compose parts of the screen in non-visible VGA memory and then Write Mode 1 32-bit copy to visible memory? Also VRL's formatting is optimized for drawing in 256-color unchained mode. That's why it's made in vertical strips, to minimize the I/O writes to the VGA hardware, and it's indexed on load so you can render every 4th strip for each VGA bitplane. |
oh? like a vram buffer? for parts of screen in a page not shown? no idea how to do that with out exposing that section of the screen with the scrolling with out constant updates? |
also i am a bit rusty with the code i been through alot of psychological (litteral psychosis delusions) issues in the 1st half of 2019 and i was taking a recovery break from the project to focous on school. i come back to some of my code i made and it is messy quick and dirty mess. thats hard to read. i need to practice again. |
also i cannot compile png2vrl due to issues with the png library not being found |
If you're on Linux, you can compile libpng, make, make install, or most distributions have a libpng and libpng-dev package for both libraries and headers needed to compile code against it. If you're on Windows, you can get libpng and dev headers for MinGW, or compile it yourself. If you're using VS2019 on Windows, you'll have to compile libpng yourself to get it to link to the program. |
You could allocate some part of video RAM at the end, and then make sure scrolling never goes down that far. My game jam entry for the most part never goes past using 128KB of VRAM (32KB planar) anyway unless absolutely necessary. |
oh interesting... i just have no idea how todo that the allocated memory part to never scroll down there part |
i am stuck on coding the joy stick buttons with more than 2 buttons like the gravis gamepad how do i get it to work the code is in src/lib/16_in.c |
okay @joncampbell123 i am making a decision to redo the video code and it would be based on wolf3d code but edited to suit project 16. (you know mode X and scrolling tile system and all of that) https://github.com/sparky4/16-0 this is the repository for non test exes. so everything that is NOT 16.exe or bakapi.exe will not be compiled. i need to clean up ALOT of code. and redo the video system (has a lot of old code). i will reuse the old code where needed and edited where it is necessary. i have learned to make better code.. xD (my #defines are fucking all over the place. i will clean this). i am thinking about doing a renewal of bakapi.exe 1st then working on 16.exe (the actual fuckin game engine). i have a weakness.. i cannot do non-text files. i just do not know how todo anything with them.. buut i will do as much as i can. that being said. i am genuinely tired of not having a dos game and i want to actually push it through. i am ALMOST DONE with uni! 💯 i kinda wanna keep borlandc compatibility so i will use the dos lib vga library code directly in p16 |
If you want my honest advice... it might be better to write a simple game without consideration for performance, in order to start game dev experience, than to spend years trying to write the perfect video framework without even getting to the game. Once you have a working game, then you can think about improving performance of the game. I'm saying this as someone who back in the 1990s might have written a DOS game if I hadn't made the same mistake trying to write the perfect code for a 386. But I didn't, all I managed were tiny tech demos, and then everything went to Windows 95 anyway. :( |
You can build up your library of code as you build better and better games and then Project 16 can become an achievable goal. You have to step up to it. So make your first project and just make a basic game as a start. Don't worry about extended/expanded memory yet. Don't worry about the fastest way to draw sprites and pan/scan the video. Just do basic 320x200 256-color and draw on the screen. Keep this repo as something to come back to as you learn from the smaller projects, of course. |
hmm i have experience making code but my code tends to be badly written xD and hard to understand |
good news i am done with school so i am working on ted5 |
Contributions may be easier to come by if Sparky4 can use this issue to communicate what needs to be done next. I am opening this issue as a sort of "forum of discussion" to enable that.
I'll start.
I don't recommend using VGM as IMF is much simpler and easier to implement. I have opened an issue in DOSLIB describing a tool to read MIDI and generate IMF (re-using the code in hw/adlib that already plays MIDI with OPL2 commands).
I also recommend writing a rough draft of the story behind the game. It doesn't have to be perfect, just put the base idea out there. Changing the story as the game develops is allowed. If all you have is a outline, a list, that's fine.
Other users on Github, especially those with an interest in this game, are welcome.
Sparky4 is on IRC on server 4ch.mooo.com in chat room "yotsubanome" if you need to ask her questions directly, though she's not always online.
Let's give this game direction, or if it already has direction, make it apparent to those who wish to help! Some discussion required, so let's talk! Others who wish to talk here, go!
The text was updated successfully, but these errors were encountered: