I'm kind of stuck though; I've been trying to tie the graphics API to the core, but it's not going so well; my design still seems to be off. I took my Draw[Image,SubImage] and variants and put them in the core, but that's kind of backwards. My core should have stuff like RenderVertices or whatnot that has all the advanced stuff and then the graphics API should have DrawImage and whatnot along with like, a base renderable class.
While the power was out I did light some candles and do some writing. First I wrote a list of what I want Beelz to achieve and pretty much came down to:
+ Automatically initialize subsystems
+ Handle resource management
+ A built-in plugins system
+ A built-in GUI system
+ Act as a "hub" between games*
+ Give access to a low level API while providing a high level API for the easy stuff.**
* I've thoughts of implementing some sort of users system along with some sort of "achievement" system or something. Whether I do or not, this would allow games to interact with each other easier (kind of like a database system.) MyGame! 1 could save info about you killing hard-to-find boss UltraBadGuy and then MyGame! 2 could take that into consideration or something. Or even settings, or better yet, tips. You've played every game in the series and if game 1 uses the same system as game 2, you don't need tips or "training." Interactivity between games in a series is something that I feel is very lacking.
** This is, combined with the first one, the main point. I want a system that has what I need for most everything, but if I need something else, I have access to the low level API to implement it myself. I was describing it to a friend and his exact words were "So, kind of like Win32. You can let Win32 handle the window creation, but you have the option of overriding it if needed" and that really about sums it up.
Back to work I guess; hopefully I can get this moving along lol.
EUREKA! I think I've got it; it's going to take a slight redesign, but I'm going to go ahead and design the thing out as far as I can ahead of time this time around. I'm going to separate the core into 7 components: Utilities, System, Window, Graphics, Input, Audio, and UI. These components will have all the functionality I need. On top of that, I'll build the RGDK.
For a quick and simple example, Beelz.Core.Graphics will have CaptureScreen(Path, Caption) which will do exactly that, take a screenshot, optionally write a caption to it, and then save it to the specified path. On the other hand, the RGDK will have CaptureScreen(ShowDialog). If ShowDialog is true, a prompt dialog will pop up (using the game's skin if available), allowing the user to enter a custom caption and choose a save path; otherwise it'll save it to some pre-defined path ("$(GamePath)Screenshots/Screenshot%1%.png" or something) without a caption.
The 7 core components will be available at all times and the RGDK will supply "built-in" components (like the above.) Then, while I'm working on my 2D projects I have planned, I'll build some helper modules that have stuff specifically for certain genres and whatnot.
Time for bed.