Here is my list of needed capabilities (I plan on updating this as I encounter further limitations or missing options):
- Double integers and other larger value sizes. Even 32-bit apps support this and AppGameKit also has 64-bit runtime interpreters, so it should support larger data types. They can be restricted or truncated as needed for narrow OpenGL requirements, but for fundamental math operations, larger value types are essential. DBPro handles these just fine (and it's 32-bit only), AppGameKit should also.
- Password protected ZIP access (as with DBPro's file block commands via the enhancement pack). Just a basic asset protection mechanism. Should be internal and not dependent on outside plugins for global access and cross-platform support.
- Ability to extract individual files from a ZIP, rather than all in bulk. I'm actually surprised this doesn't appear to be in AppGameKit since it is such a basic ZIP operation, so perhaps there is a way? If it's truly not available at all, then something equivalent to DBPro's 'Extract File From Block ID,File$,Path$' would be needed. And for such an option, being able to open and close a ZIP file to access individual files would also be needed.
- Optional specular and emissive layers added to current internal diffuse and normal mapping shader (or perhaps something a little more toward PBR and less of a Lambertian approach). Updating to Vulkan would likely help with more current graphics options/effects overall.
- Support for F9-F12, separate left/right CONTROL/ALT/SHIFT keys, and dedicated Numpad keys. There appears to be no or limited support for these keys (at least with the 'GetRawKey' command set). Only duplicate scancodes are returned or no scancodes are returned. Control keys both only return '17', Alt keys both only return '18', and both Shift keys only return '16'. Each key should be detected with a dedicated return as with DBPro and any other Windows based system. I have put together a list of both AppGameKit and DBPro's scancodes below showing the lack of independent key signals for certain keys and also the lack of any key signal for other keys (marked with a '?' under the AppGameKit column):
rem **** AGK scancodes / DBPro scancodes
KEY_BACK 8 / 14
KEY_TAB 9 / 5
KEY_ENTER 13 / 28
KEY_SHIFT 16 / 42 & 54
KEY_CONTROL 17 / 29 & 157
KEY_ALT 18 / 56 & 184
KEY_ESCAPE 27 / 1
KEY_SPACE 32 / 57
KEY_PAGEUP 33 / 201
KEY_PAGEDOWN 34 / 209
KEY_END 35 / 207
KEY_HOME 36 / 199
KEY_LEFT 37 / 203
KEY_UP 38 / 200
KEY_RIGHT 39 / 205
KEY_DOWN 40 / 208
KEY_INSERT 45 / 210
KEY_DELETE 46 / 28
KEY_0 48 / 11
KEY_1 49 / 2
KEY_2 50 / 3
KEY_3 51 / 4
KEY_4 52 / 5
KEY_5 53 / 6
KEY_6 54 / 7
KEY_7 55 / 8
KEY_8 56 / 9
KEY_9 57 / 10
KEY_A 65 / 30
KEY_B 66 / 48
KEY_C 67 / 46
KEY_D 68 / 32
KEY_E 69 / 18
KEY_F 70 / 33
KEY_G 71 / 34
KEY_H 72 / 35
KEY_I 73 / 23
KEY_J 74 / 36
KEY_K 75 / 37
KEY_L 76 / 38
KEY_M 77 / 50
KEY_N 78 / 49
KEY_O 79 / 24
KEY_P 80 / 25
KEY_Q 81 / 16
KEY_R 82 / 19
KEY_S 83 / 31
KEY_T 84 / 20
KEY_U 85 / 22
KEY_V 86 / 47
KEY_W 87 / 17
KEY_X 88 / 45
KEY_Y 89 / 21
KEY_Z 90 / 44
KEY_F1 112 / 59
KEY_F2 113 / 60
KEY_F3 114 / 61
KEY_F4 115 / 62
KEY_F5 116 / 63
KEY_F6 117 / 64
KEY_F7 118 / 65
KEY_F8 119 / 66
KEY_F9 ? / 67
KEY_F10 ? / 68
KEY_F11 ? / 87
KEY_F12 ? / 88
scrolllock ? / 70
capslock ? / 58
NUMPAD_/ ? / 181
NUMPAD_* ? / 55
NUMPAD_- ? / 74
NUMPAD_+ ? / 78
NUMPAD_1 ? / 79
NUMPAD_2 ? / 80
NUMPAD_3 ? / 81
NUMPAD_4 ? / 75
NUMPAD_5 ? / 76
NUMPAD_6 ? / 77
NUMPAD_7 ? / 71
NUMPAD_8 ? / 72
NUMPAD_9 ? / 73
NUMPAD_0 ? / 82
NUMPAD_. ? / 83
NUMPAD_ENTER ? / 156
; 186 / 39
= 187 / 13
, 188 / 51
- 189 / 12
. 190 / 52
/ 191 / 53
'/~/tilde 192 / 41
[ 219 / 26
\ 220 / 43
] 221 / 27
# 222 / ?
` 223 / 40
- SetImageMinFilter() to support anisotropic filtering to avoid the poor narrow angle image quality currently required with the linear filtering. A simple added value of 'SetImageMinFilter(img#,2,anisolevel)' would be all that's needed.
- Inverse transparency option (black is solid to white as transparent, ie DBPro's 'Ghost Object On ObjID,1' command) in addition to the current additive option.
- Complete control device support. The current XInput type system is far too limited. There is currently no support for anything beyond one joystick type and only one device of that type. In addition to too few device types, too few axis channels, too few buttons, and too few secondary control functions are supported on a device that is picked up. This is required to support HOTAS, control panels, rudders, yokes, steering wheels, etc. Multiple controllers and controller types need to be supported internally without the use of external plugins (which are often not available on different OS's/platforms). So a complete universal control system is needed. Support for at least up to 10 devices, 10 axis channels per device, 40 buttons per device, and at least one (preferably as many as the device has though) POV/HAT per device is needed if Windows is to be a supported OS.
- 'Add/Rotate/Offset/Scale Limb' commands (and associated position/offset retrieval commands). Binding objects to objects may not be able to support various things that true limbs as substructures within objects can. **** Edit: I'm currently exploring alternatives using offset object indexes as part of the DBPro-to-AGK code converter I'm working on. Limbs may not be critical, but would be very helpful in the process of migrating DBPro projects and/or duplicating true limb behavior as in DBPro.
- 'Make Mesh From Object' and related mesh commands for use to build other objects and (possibly) limbs from a global mesh.
- 'Fade Object ObjID,%' to fade an object's visibility to black (disappearing black-transparent objects slowly, fading solid objects to black).
- 'Set object normals'.
- 'Convert object fvf'.
- 'Set Object Mask' (couldn't find an equivalent) to mask specific objects from specific cameras.
- 'Wrapvalue' command.
- 'MakeCamera' to support DBPro's 'Make Camera' command so multiple cameras can be used with different parameters. Otherwise, one camera has to be used for everything, which requires remaking it for different FOV/etc values for different applications, destroying performance and making certain effects/techniques impractical/impossible during runtime.
- 'CopyFile' (same as DBPro's Copy File command).
- 'GetFolderExists' equivalent to DBPro's 'path exist'.
> Along with the command above, far better file and folder management is needed. If we are forced to be sandboxed in to the \User folder tree on Windows, we should at least be able to navigate around folders and files for the current user and other users. Unfortunately, limiting the read/write operations to the \AGKApps folder under only -one- specific user folder tree means we can't cleanly provide global settings for all users on a computer for any game we make with AppGameKit (since we also can't write to a root folder or any other location outside of the AGKApps folder for only -one- user). For even basic Windows support, we'd need to be able to read and write to/from other folders (and/or their users) in the user folder tree or have some kind of access to folders outside of the sandbox location. Many Windows games these days also allow the player to specify a save folder for their settings and save games, but this isn't even an option with AGK. 'SetRawWritePath' appears to not be able to set a folder to such locations. Such functionality should be internal to AppGameKit for complete cross-platform support (not requiring separate plugins for every platform, external runtime dependencies, and different bit limits), certainly with reasonable limitations for certain platforms that require restrictions (ie iOS).
These are basic options/functions that I've encountered as either limitations or entirely unavailable with AppGameKit that I feel should be supported internally. Minimizing the use of plugins would be important to provide full cross-platform support and to avoid unnecessary runtime dependencies that previous plugins tended to have.