Releases: Natashi/Touhou-Danmakufu-ph3sx-2
Releases · Natashi/Touhou-Danmakufu-ph3sx-2
Danmakufu ph3sx v1.33a-pre2
THIS IS A PRE-RELEASE, CERTAIN FEATURES AND DOCUMENTATIONS MAY BE INCOMPLETE OR OUT OF DATE
Changes:
- ObjEnemy_SetDamageRate now ranges from 0 to 1 instead of 0 to 100.
- Bumped up the minimum window size to 150x150 due to limitations imposed by Windows.
Bug fixes:
- Fixed a rendering glitch that happens if the selected window size is less than the game's resolution.
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.
Touhou Danmakufu ph3sx v1.32b
Changes:
- All functions and actions that change a shot's graphic ID has an additional feature:
- The actual graphic ID will be the absolute value of the value received.
- If the value received was negative, the graphic change operation will preserve the shot's previous spin angular velocity and Z-angle.
- Affected functions and actions:
- ObjShot_SetGraphic
- ObjMove_AddPatternA3
- ObjMove_AddPatternA4
- ObjMove_AddPatternB3
- ObjMove_AddPatternC3
- ObjMove_AddPatternC4
- TRANSFORM_GRAPHIC_CHANGE
Additions:
- Added an instruction on how to get ph3sx to work with Wine. (Check readme.txt)
- Added SetIntersectionVisualizationRenderPriority.
Bug fixes:
- Fixed incorrect documentation for some functions.
- Fixed AddPoint not working correctly.
- Fixed some issues with acceleration and max speed when converting from B-movement to A-movement or C-movement with AddPattern.
Touhou Danmakufu ph3sx v1.32a
Changes:
- Renamed "real" to "float".
- r (number suffix) -> f (number suffix)
- 45.22r -> 45.22f
- real -> float
- as_real -> as_float
- as_real_array -> as_float_array
- VAR_REAL -> VAR_FLOAT
- r (number suffix) -> f (number suffix)
- Changed how setting curvy laser node widths work. Instead of directly setting the width, the functions will set the nodes' width scales.
- Renamed ObjCrLaser_SetNodeWidth to ObjCrLaser_SetNodeWidthScale.
- Renamed ObjCrLaser_GetNodeWidth to ObjCrLaser_GetNodeWidthScale.
- Improved cross-compatibility between different movement types of the following functions:
- ObjMove_SetSpeed
- ObjMove_SetAngle
- ObjMove_SetAcceleration
- ObjMove_SetMaxSpeed
- ObjMove_SetAngularVelocity
- Swapped the "shot graphic ID" and "target ID" arguments in ObjMove_AddPatternA4.
- Swapped the "max speed" and "angular velocity" arguments of the following functions:
- CreateShotA2
- ObjMove_AddPatternA2
- ObjMove_AddPatternA3
- ObjMove_AddPatternA4
- TRANSFORM_ADDPATTERN_A2 in ObjPatternShot transforms
- Completely removed shot scripts.
- Moved SetShotDeleteEventEnable to the stage script.
- Default values for all three delete events are true.
- Furthermore, fixed EV_DELETE_SHOT_IMMEDIATE and EV_DELETE_SHOT_FADE not being notified properly.
- Restructed event arguments of EV_DELETE_SHOT_TO_ITEM.
- The third event argument; "player collision", has been removed.
- Collision with the player will now trigger EV_DELETE_SHOT_IMMEDIATE instead of EV_DELETE_SHOT_TO_ITEM.
- The third event argument; "player collision", has been removed.
- Moved SetShotDeleteEventEnable to the stage script.
- Increased the minimum width for straight and curve lasers, primarily for delay visibility purposes. (Thanks to Naudiz)
- Allowed lasers to lose penetration (life) points. (Thanks to Naudiz)
- Like with any shot object, this will only occur when a laser lacks spell resistance (which it has by default).
- Removed #BGM.
- Made it so that the window sizes list will be autogenerated instead of defaulting to [640x480, 800x600, 960x720, 1280x960] when window.size.list in th_dnh.def doesn't exist.
- Size multipliers are [x1, x1.25, x1.5, x2], with screen.width and screen.height being the base resolution.
- Made it so that the engine will check for the required .dll modules during initialization.
- d3d9.dll
- d3dx9_43.dll
- d3dcompiler_43.dll
- dinput8.dll
- dsound.dll
- In the event where the Direct3D device enters a lost state, the engine will now attempt to restore up to 60 times before throwing an error, rather than only once.
- Removed ObjItem_SetAutoCollectEnable, and replaced it with ObjItem_SetAutoCollectEnableFlags.
Additions:
- Added Interpolate_X_Array, Interpolate_X_Angle, and Interpolate_X_AngleR. (Thanks to Naudiz)
- Added ObjShot_SetEnemyIntersectionInvalidFrame and ObjShot_SetPenetrateShotEnable. (Thanks to Naudiz)
- Added SetShotTextureFilter, SetItemTextureFilter, ObjRender_SetTextureFilter, and ObjShot_SetAngleRounding. (Thanks to Naudiz)
- Added SetEnemyAutoDeleteClip, ObjEnemy_SetAutoDelete, and ObjEnemy_SetDeleteFrame. (Thanks to NicholasLogan)
- Added ObjMove_SetAngularAcceleration, ObjMove_SetAngularMaxVelocity, and ObjMove_AddPatternA5. (Thanks to NicholasLogan)
- Added an overload to CreateShotA2, adding an angular velocity argument in between the acceleration and max speed ones. (Thanks to Naudiz)
- Added ObjMove_GetMovementType. (Thanks to Naudiz)
- Added constants:
- MOVE_NONE
- MOVE_ANGLE
- MOVE_XY
- MOVE_XY_ANGLE
- MOVE_LINE
- Added constants:
- Added the C-movement type for ObjMove. (Thanks to Naudiz)
- CreateShotC1
- CreateShotC2
- CreateShotOC1
- ObjMove_AddPatternC1
- ObjMove_AddPatternC2
- ObjMove_AddPatternC3
- Added AddPattern functions for line-movement. (Thanks to Naudiz)
- ObjMove_AddPatternD1 (AddPattern version of ObjMove_SetDestAtSpeed)
- ObjMove_AddPatternD2 (AddPattern version of ObjMove_SetDestAtFrame)
- ObjMove_AddPatternD3 (AddPattern version of ObjMove_SetDestAtWeight)
- Added ObjMove_CancelMovement.
- Added new transformations to pattern shot objects. (Thanks to Naudiz)
- TRANSFORM_ADDPATTERN_C1
- TRANSFORM_ADDPATTERN_C2
- Added psrand.
- Added array overloads to the following functions:
- ObjSprite2D_SetSourceRect
- ObjSprite2D_SetDestRect
- ObjSpriteList2D_SetSourceRect
- ObjSpriteList2D_SetDestRect
- ObjSprite3D_SetSourceRect
- ObjSprite3D_SetDestRect
- ObjSprite3D_SetSourceDestRect
- Added support for hexadecimal numbers in text color tags.
- "[f tc=0xffffff]" is equivalent to "[f tc=(255,255,255)]".
- Added GetWorkingDirectory.
- Added an option to allow the engine to keep running while the window is unfocused. (Thanks to Naudiz)
- Added SetEnableUnfocusedProcessing and IsWindowFocused.
- Added the property "unfocused.processing" to th_dnh.def.
- Added EV_APP_LOSE_FOCUS and EV_APP_RESTORE_FOCUS.
- Added exponent format for numbers.
- "5.462e3" or "-231.9e-2" are now valid numbers.
- Added ObjItem_SetAutoCollectEnableFlags.
- ITEM_AUTOCOLLECT_PLAYER_SCOPE
- ITEM_AUTOCOLLECT_COLLECT_ALL
- ITEM_AUTOCOLLECT_POC_LINE
- ITEM_AUTOCOLLECT_COLLECT_CIRCLE
- ITEM_AUTOCOLLECT_ALL
- Added an overload to atoi.
- Added SetScore, SetGraze, and SetPoint.
Bug fixes:
- Fixed .dat archives not working.
- Fixed incorrect null checks, resulting in the game crashing when trying to operate on a null value.
- For example, using Obj_GetValue on a non-existent key will yield a null value.
- Fixed a crash bug which may sometimes happen when trying to parse a script file that ends with a line comment.
- Fixed ObjMove_AddPatternXX's shot graphic change not working with loose and curvy lasers.
- Fixed SetShotIntersectionCircle/Line not registering intersection, despite showing up in intersection visualization.
Touhou Danmakufu ph3sx v.1.31b
Bug fixes:
- Fixed a bug where the game would freeze when compiling a script with a syntax error.
- Fixed a minor visual bug where the LogWindow's sub-info fields would all try to display over each other on initialization.
Touhou Danmakufu ph3sx v.1.31a
Changes:
- This version breaks replay, common data, and .dat archive backwards compatibility.
- Replaced the default script select backgrounds with a radder version. (Thanks to Naudiz)
- Renamed GetShotIdAll to GetAllShotID.
- Changed the text representation of script value types in error messages.
- "real-array-array" -> "real[][]"
- Script matrix functions can now take in a 4x4 array instead of only a 1x16 array previously.
- The element type is also no longer limited to real.
- Made setting ObjRender_SetEnableDefaultTransformMatrix to false still load the camera matrix.
- Allowed multiple ObjSounds to independently stream the same sound file.
- Shortened the module directory in Log messages of the LogWindow to "../".
- Removed the behaviour where the 2D and 3D camera resets upon transitioning from the package scene to the stage scene.
- Fog data is no longer split between package-level and stage-level scripts.
- The default FPS counter no longer briefly appears when starting with package.script.main.
- Maximizing the window now triggers fullscreen mode.
- Objects now have separate tables each for string-indexed and int-indexed.
- Improved support for particle list objects for older PCs.
- Made it so that curvy lasers can be shortened. (Thanks to Naudiz)
- ObjFileT_SplitLineText now splits from pattern rather than from a list of delimiters.
- Reduced the float truncation epsilon. (0.01 -> 0.000001)
- #include in shader source files now behaves like regular script includes.
- Normal shot objects can now have multiple hitboxes again.
- Change loose and curvy lasers behaviour when delay motion is enabled. (Thanks to Naudiz)
Additions:
- Added missing function documentation for GetAllEnemyID.
- Added an overload each for Rotate2D and Rotate3D, taking in the rotation origin point.
- Expanded the variety of intersection-checking functions:
- IsIntersected_Point_Polygon
- IsIntersected_Point_Circle
- IsIntersected_Point_Ellipse
- IsIntersected_Point_Line
- IsIntersected_Point_RegularPolygon
- IsIntersected_Circle_Polygon
- IsIntersected_Circle_Circle
- IsIntersected_Circle_Ellipse
- IsIntersected_Circle_RegularPolygon
- IsIntersected_Line_Polygon
- IsIntersected_Line_Circle
- IsIntersected_Line_Ellipse
- IsIntersected_Line_Line
- IsIntersected_Line_RegularPolygon
- IsIntersected_Polygon_Polygon
- IsIntersected_Polygon_Ellipse
- IsIntersected_Polygon_RegularPolygon
- Added ReflectAngle and ReflectAngleR. (Thanks to Naudiz)
- Added Python-style reverse indexing of arrays. (Thanks to Naudiz)
- See "New Scripting Features".
- arr[-n] is equivalent to arr[length(arr) - n]
- Also works in erase and insert.
- Added replace and remove. (Thanks to Naudiz)
- #ifdef, #ifndef, #else, and #endif preprocessor directives for scripts.
- Several script macros were added:
- _DNH_PH3SX_
- SCRIPT_PACKAGE (defined in package-level scripts)
- SCRIPT_STAGE (defined in stage-level scripts)
- #define is not yet supported.
- Several script macros were added:
- Added ObjItem_GetIntersectionEnable. (Thanks to Naudiz)
- Added ObjRender_GetColorHex, ObjPrim_GetVertexColorHex, and ObjCrLaser_GetNodeColorHex. (Thanks to Naudiz)
- Added ColorHexRGBtoHSV.
- Added another event argument to EV_DELETE_SHOT_PLAYER.
- Added a "Sound Memory" display to the Sound tab of the LogWindow.
- Added INFO_IS_REQUIRE_ALL_DOWN to ObjEnemyBossScene_GetInfo. (Thanks to Naudiz)
- Added ObjEnemy_SetMaximumDamage and ObjEnemy_AddLifeEx.
- Added INFO_DAMAGE_PREVIOUS_FRAME to ObjEnemy_GetInfo.
- Added ObjText_SetFixedWidth.
- Added ObjText_GetText. (Thanks to Naudiz)
- Added ObjCrLaser_SetTipCapping, ObjCrLaser_GetNodeRenderWidth, and ObjCrLaser_SetNodeRenderWidth. (Thanks to Naudiz)
- Added overloads to ObjCrLaser_SetNode and ObjCrLaser_AddNode. (Thanks to Naudiz)
- Added ObjShot_SetFixedAngle and ObjShot_SetDelayAngularVelocity. (Thanks to Naudiz)
- Added SplitString2.
- Added Obj_GetValueCount and Obj_GetValueCountI.
- Added a progress bar to the FileArchiver.
- Added an overload to SetStgFrame. (Thanks to Naudiz)
- Added GetConfigVirtualKeyMapping and GetVirtualKeyMapping. (Thanks to Naudiz)
Bug fixes:
- Fixed incorrect documentation of IsIntersected_Circle_RegularPolygon.
- Fixed the Y shot intersection scale not functioning properly on loose lasers.
- Fixed the engine crashing upon trying to parse an excess comma in function parameter lists.
- Fixed type-checking bugs with array-index-assignment operations.
- Fixed an issue where the parser would indefinitely hang upon trying to parse an ill-formed for-loop.
- Fixed a bug where .wav files over 1MB large would get cut off at the end.
- Fixed a bug where multiple streaming ObjSounds playing the same file would not function correctly.
- Fixed ObjSound_IsPlaying returning false if called in the same frame of ObjSound_Play.
- Fixed a bug where shot objects colliding with the player gets deleted before EV_HIT is notified.
- Fixed GetShotIdInCircleA1 incorrectly returning player shot IDs instead of enemy shot IDs.
- Fixed ObjShot_Regist in a player script returning null if IsPermitPlayerShot is true.
- Fixed a bug where the shot object colliding with the player is deleted before the notification of EV_HIT.
- Fixed off-centered shot and item graphics.
- Fixed the game crashing upon trying to parse an ill-formed argument list in user shot/item data files.
- Fixed a bug where 3D render objects drawn below the min STG frame render priority would get abnormally stretched out.
- Fixed ObjMove_GetSpeedX/Y returning incorrect values for ObjMove_SetDestAtXXX functions.
- Fixed the game crashing when setting ObjRender_SetEnableDefaultTransformMatrix to false for 3D objects.
- Fixed incorrect conversion of A-movement to B-movement for ObjMove.
- Fixed CreateItemU1/2 causing the created item to render at (0, 0) for a single frame. (Thanks to Naudiz)
- Fixed ObjMove_AddPatternXX not working on move objects that do not have an existing movement pattern. (Thanks to Naudiz)
- Fixed a rare bug with array initialization.
- Fixed a bug where ObjShot_SetPenetration(obj, 0) would not notify EV_DELETE_SHOT_PLAYER.
- Fixed a rare crash during enemy boss scene loading.
- Fixed a bug where the game would freeze when trying to restart the stage scene in a package script while an enemy boss scene hasn't finished loading.
- Fixed a rare crash with script object deletion.
Touhou Danmakufu ph3sx v.1.30a
Changes:
- Greatly improved the speed of the script code interpreter.
- Made the maximum sizes of render targets respect the Direct3D device capabilities.
- EV_REQUEST_LIFE now accepts all types of values (will be converted to reals).
- In case that an array was passed (multiple bosses), each elements will also be converted to reals.
- Direct3D device capabilities will now be checked at the start, and the user will be notified if they are insufficient to run the engine.
- Changed the default render priority of items to 40. (Previously 60, what the fuck mkm)
- Changed the behaviour of resource pre-loading. (LoadTexture, LoadMesh, etc.)
- Loaded resources are no longer script-dependent, they will remain loaded even if the script that loaded them has been closed.
- Changed the arguments of ObjPatternShot_AddTransform/ObjPatternShot_SetTransform.
- Additionally, the above two functions now take in varargs.
- Improved GetObjectDistance.
- Introduced the ability to use StartScript a second time without having to use LoadScript again.
- Renamed ObjSound_SetRestartEnable to ObjSound_SetResumeEnable.
- Usage unchanged.
- Rearranged the arguments of ObjPatternShot_Add/SetTransform.
- ObjFile_Store now use the source file's original line endings.
- Binary, octal, and hexadecimal number literals now default to int.
- Changed the usage of the function "resize".
- Improved the speed of boss scene scripts loading.
Additions:
- Many new additions to the scripting language.
- See "New Scripting Features.txt".
- Added GetObjectDistanceSq and GetObjectDeltaAngle.
- Added an overload each for GetCommonData and GetAreaCommonData.
- Added GetSystemTimeMilliS and GetSystemTimeNanoS.
- Added SetInvalidPositionReturn, a function for changing the "invalid position" from (0, 0).
- Added functions for pointer-based common data access:
- LoadCommonDataValuePointer
- LoadAreaCommonDataValuePointer
- IsValidCommonDataValuePointer
- SetCommonDataPtr
- GetCommonDataPtr
- Added IsVertexShaderSupported.
- Added the ability to set the read offset of .dat archives.
- Added new ObjPatternShot transforms:
- TRANSFORM_ADDPATTERN_B1
- TRANSFORM_ADDPATTERN_B2
- Renamed TRANSFORM_ADDPATTERNA1 to TRANSFORM_ADDPATTERN_A1
- Renamed TRANSFORM_ADDPATTERNA2 to TRANSFORM_ADDPATTERN_A2
- Added new ObjPatternShot patterns: (thanks to Naudiz)
- PATTERN_LINE
- PATTERN_ROSE
- Added back in script source caching, plus the ability to remove a script from the cache.
- Added ObjEnemyBossScene_SetUnloadCache.
- Added a "Cached Scripts" panel to the Script tab of the LogWindow.
- Added a "CPU Time" column to the Script tab of the LogWindow.
- Added a "Shader" tab to the LogWindow.
- Added an overload for ColorARGBToHex.
- Added ObjItem_SetPositionRounding.
- Added new maths functions:
- log2
- logn
- erf
- gamma
- distance
- distancesq
- dottheta
- rdottheta
- cbrt
- AngularDistance
- AngularDistanceR
- Rotate2D
- Rotate3D
- Added count_rand, count_prand, reset_count_rand, and reset_count_prand.
- Added Interpolate_X and Interpolate_X_PackedInt.
- Added GetScriptStatus.
- STATUS_LOADING
- STATUS_LOADED
- STATUS_RUNNING
- STATUS_PAUSED
- STATUS_CLOSING
- STATUS_INVALID
- Added implicit array casting for initialization, assignment, and concatenation.
- Only applicable for int[] <-> real[] <-> null
- Added array casting functions:
- as_int_array
- as_real_array
- as_bool_array
- as_char_array
- as_x_array
- Added StringFormat, a string formatting function in the style of C's sprintf.
- Added IsIntersected_Circle_RegularPolygon and IsIntersected_Circle_Ellipse.
- Added new array functions: contains, insert.
- Added ObjRender_SetEnableDefaultTransformMatrix.
- Added ObjPrim_GetTexture.
Bug fixes:
- Fixed LoadMesh crashing the engine.
- Fixed ObjCol_GetListOfIntersectedShotID incorrectly expecting only 1 argument.
- Fixed a bug where whitespaces in parameter lists in text object tags are incorrectly parsed.
- Fixed a bug where the "Show LogWindow" option would disappear if the game was set to start in (borderless) fullscreen mode.
- Fixed the sound streamer behaving incorrectly when playing a .wav file larger than 1MB a second time.
- Fixed a bug where ObjSound_Seek would be ineffectual if used when the sound isn't playing or within 2 frames after being played.
- Fixed the Y hitbox scale not affecting the hitboxes of laser objects.
- Fixed the LogWindow not able to output logs to file.
- Fixed a bug where penetrating player shots may randomly not correctly collide with enemy hitboxes and mess up replays.
- Fixed the engine crashing if the stage scene is quit and there is an ObjPatternShot, whose parent is a dead boss object, that wasn't manually deleted.
- Fixed the LogWindow's Log tab not horizontally scrolling the newest line into view.
- Fixed a bug with the remainder operation where using (kn % -n) or (-kn % n) where (k) is an integer results in (-n).
- Fixed crash bugs with ternary statements in the following cases:
- let a = [condition ? 0 : 1];
- a[condition ? 0 : 1] = 100;
- Fixed a package crash that happens when LoadScriptInLoadThread loads a stage script that contains a parser error.
- Fixed a bug that made variable-overshadowing a function throw a parser error.
- let power = 100; //This is possible again.
- Fixed a bug where an ObjMove would lag for one frame after applying its last AddPattern transform.
- Fixed a "feature" where a multidimensional array can host values of different types.
- Fixed a bug where Windows' list-searching feature was interfering with key remapping in the config.
- Fixed a bug where empty lines in text file object are skipped over in some devices.
- Fixed ObjFileT_SplitLineText having an incorrect return value if the object is invalid.
- Fixed an issue where the engine's default 3D render shader and 3D particle list shader don't work on AMD graphics cards.
- Also updated the shader source files in the sample scripts with this fix.
- Fixed a null pointer read crash bug during engine initialization.
- Fixed a bug where short-circuited logical expressions would not convert to boolean.
Touhou Danmakufu ph3sx v.1.21a
- Fixed MatrixMultiply and MatrixDivide functioning incorrectly.
- Added MatrixTransformVector for transforming a Vector3 by a transformation matrix.
- Added a hex overload for SetFogParam.
- Added a floored division operation. ("~/" and "~/=")
- Added "resize", a function for resizing arrays.
- Modified the functionality of the array slice operation and operator.
- Upper slice bound is automatically capped at the array's size.
- More options for text object tags. (See "New Scripting Features.txt")
- Increased the smoothness of rendered fonts.
- Fixed SetShotIntersectionCircle and SetShotIntersectionLine not working.
- Fixed a memory leak issue that was causing the "too many open files" error message.
- Using ObjRender_SetAlpha on a 2D sprite list object whose vertices were closed will now have an alpha-multiply effect.
- Optimizations.
Touhou Danmakufu ph3sx v.1.20b
Fixed some bugs present in 1.20a
- Fixed a bug that caused for loops using new variables to not function correctly.
- Fixed a bug that caused all GetColor functions to return incorrect values. (Including GetShotDataInfoA1)
- Fixed a bug where off-centered player hitboxes would behave strangely.
- Fixed the game crashing on script end/retry. (How the fuck did I not notice this before 1.20a release bloody hell)
- Added ObjShot_SetSpinAngularVelocity.
Touhou Danmakufu ph3sx v.1.20a
The list of changes this time is longer than my lifespan.
Please read the Change Log for the full list.