Skip to content

Releases: Natashi/Touhou-Danmakufu-ph3sx-2

Danmakufu ph3sx v1.33a-pre2

12 Apr 10:45
Compare
Choose a tag to compare

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

09 Apr 16:03
Compare
Choose a tag to compare

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.
  • 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.
  • 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!)

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

13 Feb 16:33
Compare
Choose a tag to compare

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

07 Feb 13:28
Compare
Choose a tag to compare

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

11 Dec 10:40
Compare
Choose a tag to compare

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

10 Dec 15:23
Compare
Choose a tag to compare

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

25 Jul 15:53
Compare
Choose a tag to compare

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

04 May 14:57
Compare
Choose a tag to compare
  • 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

21 Jan 06:38
Compare
Choose a tag to compare

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

17 Jan 13:04
Compare
Choose a tag to compare

The list of changes this time is longer than my lifespan.

Please read the Change Log for the full list.