Danmakufu ph3sx v1.33a-pre
THIS IS A PRE-RELEASE, CERTAIN FEATURES AND DOCUMENTATIONS MAY BE INCOMPLETE OR OUT OF DATE
I am being pressured to make a new release after 8 billion years of inactivity, so here you go.
Changes:
- Reworked the FileArchiver to have a more modern-looking UI.
- Also changed the .dat archive format and how archive loading works.
- Not backwards-compatible with archives from older versions.
- Also changed the .dat archive format and how archive loading works.
- Reworked the Config to have a more modern-looking UI.
- Improved controller support, the D-Pad is now supported as an input method.
- Number literals without decimal points now default to integer type, unless specified otherwise by a float suffix.
- Made both the function "divide" and the division operator always perform a float division.
- For int divisions, use the floored division operator/function.
- Temporarily removed mp3 support.
- Completely overhauled the shot and item renderers.
- It is now possible to apply shaders on shots and items, check the new sample script. (!WILL BE MADE LATER!)
- Added OBJ_STRAIGHT_LASER support for ObjPatternShot_SetShotType.
- Changed how delay data definition in shot data files work:
- Delays will now take data from another shot data for greater flexibility.
- Use "delay_id = x" to specify delay data, with x being a shot data ID.
- Use at the top for a "global" definition, and locally inside shot data definitions for shot-specific overrides.
- Allowed ObjPatternShot to create straight lasers.
- Renamed ObjShot_SetSourceBlendType to ObjShot_SetDelayBlendType.
- Completely overhauled the frame timing algorithm, which allows the game to run at a more stable frame rate.
- The frameskip mode "Automatic" may currently be unstable.
- Changed the frame parameter of ObjMove_AddPatternXX to be unsigned.
- If you were previously using -1, change them to 0 now. Nothing will change in terms of functionality.
- Allowed NotifyEvent, NotifyEventOwn, and NotifyEventAll to be called without event arguments. (Thanks to Naudiz)
- Allowed KillPlayer to be used in stage scripts instead of being exclusive to the player script. (Thanks to Naudiz)
- ObjEnemy_SetDamageRate now ranges from 0 to 1 instead of 0 to 100.
- Changed how Obj_Delete works. (Thanks to Naudiz)
- Using Obj_Delete no longer instantly deletes the object, but will rather mark the object for deletion and turn it inactive.
- Objects marked for deletion will be actually deleted at the start of the next frame.
- Using Obj_Delete no longer instantly deletes the object, but will rather mark the object for deletion and turn it inactive.
- Changed the minimum window size to 64x64, and the maximum window size to 3840x2160.
- (Incomplete) Massive overhaul of window resolution system:
- Use SetFullscreenDisplayMatrix and SetWindowedDisplayMatrix to change how the game renders onto the game window.
- May be used to manually tweak the aspect ratio for instance.
- New built-in render target "SECONDARY_BACKSURFACE" may be used to fill in the "black bars" at the sides of the screen with custom texture/scene.
- Check the new sample script for usage example. (!WILL BE MADE LATER!)
- Use SetFullscreenDisplayMatrix and SetWindowedDisplayMatrix to change how the game renders onto the game window.
Additions:
- Added "standard.fps" property to the th_dnh.def, allowing scripters to change the standard game logic rate.
- Default is 60 (60 logic frames per second).
- Added GetCurrentUpdateFps and GetCurrentRenderFps.
- Added a prototype implementation of function pointers.
- Obtain the function pointer of a function/task/sub with "__funcptr".
- Call the function pointer with "invoke".
- See "New Scripting Features". (!WILL BE WRITTEN LATER!)
- Added the ability to cast values with type keywords.
- as_float(x) -> float(x)
- as_int(x) -> int(x)
- ...
- Added as_x, an all-in-one type conversion function.
- Added the ability to visualize sound data with ObjSound_GetSamplesFFT.
- Added GetCurrentUpdateFps and GetCurrentRenderFps.
- Added MatrixRotate.
- Added new object functions and constant: (Thanks to Naudiz)
- Obj_Create
- Obj_GetExistFrame
- Obj_GetParentScriptID
- Obj_SetParentScriptID
- OBJ_BASE
- Added Obj_Clone.
- Added missing Obj_CopyValueTableI.
- Added new shader object functions:
- ObjShader_ValidateTechnique
- ObjShader_SetInt
- ObjShader_GetInt
- ObjShader_SetIntArray
- ObjShader_GetIntArray
- ObjShader_GetFloat
- ObjShader_GetFloatArray
- ObjShader_GetVector
- ObjShader_GetMatrix
- ObjShader_GetMatrixArray
- ObjShader_GetTexture
- Added functions for the new window resolution system:
- SetWindowedDisplayMatrix
- SetFullscreenDisplayMatrix
- SetWindowedDisplayShader
- SetFullscreenDisplayShader
- Added ObjRender_SetRenderTarget and ObjRender_Render.
- Added SetEnableAntiAliasing.
- Added UNCAPPED_MAX, which can be used in the "max speeds" parameters of ObjMove_AddPatternXX to disable max/min speeds for these properties:
- A-movement:
- max speed
- angular max velocity
- B-movement:
- max X speed
- max Y speed
- C-movement:
- max X speed
- max Y speed
- angle offset max speed
- A-movement:
- Added ObjShot_SetDelayScalingEnable. (Thanks to Naudiz)
- Added ObjShot_SetFrameDeleteType. (Thanks to Naudiz)
- Added ObjEnemy_SetDamageRateByShotDataID. (Thanks to Naudiz)
- Added "oy" as another ruby text tag for text objects. (Thanks to Naudiz)
Bug fixes:
- Fixed crash bugs with sound objects.
- Fixed "_Restore" crashes when switching to and from true fullscreen or when alt-tab'ing away.
- Fixed the window sizes list in the config.exe being empty if th_dnh.def is absent.
- Fixed strange anti-aliasing and mipmapping behaviours.
- Fixed the game not respecting monitor DPI by default, resulting in loss of graphic quality.
- Fixed bodiless for-loops being mistakenly optimized away in some cases.
- Fixed incorrect angle calculation for objects using B-movement and C-movement.
- Fixed ColorHSVtoHexRGB incorrectly having an alpha channel value in its return value.
- Fixed the window title (set using SetWindowTitle) not resetting upon exiting the script.
- Fixed fixed default cancel items not spawning if there is no item script.
- Fixed the default item score text incorrectly being affected by item autocollection.
- Fixed the enemy delete clip mistakenly not checking the top boundary.
- Fixed IsFileExists, IsDirectoryExists, GetFilePathList, and GetDirectoryPathList ignoring files and paths in loaded archive files.
- Optimizations to the script interpreter.