16 icon indicating copy to clipboard operation
16 copied to clipboard

Development roadmap and direction

Open joncampbell123 opened this issue 7 years ago • 56 comments

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!

joncampbell123 avatar Sep 10 '17 05:09 joncampbell123

I been so busy with math 242 that just noticed this! Also it is her! not him! wwww

sparky4 avatar Oct 18 '17 16:10 sparky4

Correction made, sorry about that!

joncampbell123 avatar Oct 18 '17 17:10 joncampbell123

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)

sparky4 avatar Oct 20 '17 15:10 sparky4

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.

joncampbell123 avatar Oct 20 '17 17:10 joncampbell123

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

sparky4 avatar Oct 21 '17 00:10 sparky4

I wrote that code in Open Watcom. Are you sure? :)

joncampbell123 avatar Oct 21 '17 01:10 joncampbell123

it is id engine code, silly!

it is located in src/lib/16_sd.c

sparky4 avatar Oct 21 '17 03:10 sparky4

ah yeah for testing reasons. getting borland c to be able to run the graphical stuff of the memory again...

sparky4 avatar Oct 23 '17 16:10 sparky4

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.

sparky4 avatar Oct 25 '17 15:10 sparky4

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.

joncampbell123 avatar Oct 25 '17 15:10 joncampbell123

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 other is "image palette" array and their respectable pointers point to their [i] values

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) IMG={*,23,4,2,0,9,0,}; //if the is duplicate index values in the image for some odd reason. ( is supposed to be the transparent color of the image) [this is a very messy palette]

	MERGE THEM INTO

VGA={*,1,2,3,4,5,6,7,8,23,0,9};

the merged colors is below *

  • VGA
  • (*)
  • 1
  • 2->IMG[3]
  • 3
  • 4->IMG[2]
  • 5
  • 6
  • 7
  • 8
  • 23->IMG[1]
  • 0->IMG[4]->IMG[6]
  • 9->IMG[5]

The new IMG array index change is below this also shows the new index numbers in the image IMG=[*][9][5][3][10][11][10]; //new index numbers for image palette

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) or my code was horrendous and complex!

What makes this so difficult is the RGB part. every 3 colors is an index on the vga palette...

sparky4 avatar Oct 26 '17 15:10 sparky4

also the drawing of sprites in xcroll are not fast enough on my XT on turbo mode.... i do not know why

sparky4 avatar Oct 26 '17 17:10 sparky4

omg I been way too busy and TIRED

sparky4 avatar Jan 24 '18 18:01 sparky4

quarter ending in a week so... i will pick up on coding again sometime~

sparky4 avatar Feb 19 '18 16:02 sparky4

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

sparky4 avatar Feb 21 '18 17:02 sparky4

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.

Ruedii avatar Apr 26 '18 00:04 Ruedii

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.

joncampbell123 avatar Apr 26 '18 00:04 joncampbell123

@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.

joncampbell123 avatar Apr 26 '18 00:04 joncampbell123

@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.

joncampbell123 avatar Apr 26 '18 01:04 joncampbell123

!! 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!!!

sparky4 avatar May 31 '18 15:05 sparky4

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

sparky4 avatar May 31 '18 15:05 sparky4

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 avatar Jun 05 '18 14:06 sparky4

@sparky4 Regarding VRL don't forget the hw\vga\vrldbg.c source code which demonstrates how to parse VRL.

joncampbell123 avatar Jun 05 '18 15:06 joncampbell123

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 that hard math is over. so i should have more time but i gotta do that special thing because my head works better afterwards!

sparky4 avatar Jun 05 '18 15:06 sparky4

i should do the wolf3d core core stuff and finish testing the joystick... i am forgetting what i have done..

sparky4 avatar Jun 05 '18 15:06 sparky4

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! >-<

sparky4 avatar Jul 05 '18 15:07 sparky4

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.

sparky4 avatar Sep 03 '18 21:09 sparky4

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

sparky4 avatar Sep 05 '18 03:09 sparky4

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.

joncampbell123 avatar Sep 02 '20 03:09 joncampbell123

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.

https://discord.gg/thmqvDf

joncampbell123 avatar Oct 27 '20 12:10 joncampbell123