Cirno2022/docs/Change Log.txt

550 lines
30 KiB
Plaintext
Raw Permalink Normal View History

A mostly-complete history log of engine updates can be found here.
1.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.
1.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
- 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:
- 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.
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.
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)
- Text objects can now be centered around their object positions. No need to use ObjText_SetMaxWidth for that anymore. (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 ObjText_SetVerticalAlignment. (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.
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".
- 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.
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.
- 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.
1.20b:
- 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.
1.20a:
- Reworked some math calculations. SIMD instructions are utilized.
- A legacy version will also be provided in case your CPU do not support vectorization.
- The vectorized version requires the following instruction sets:
- SSE
- SSE2
- SSE3
- SSE4.1
- Generally, you should be able to run it unless your PC is from 30000BC or you're using a literal potato.
- Added a native hitbox visualization mode.
- Improved the line-circle intersection algorithm. New algorithm behaves like a circle-polygon intersection.
- Overloaded ObjMove_SetDestAtFrame, where movement interpolation mode can be specified.
- Fixed a bug where the graze count obtained via GetGraze() may desync with the one obtained via EV_GRAZE's event argument.
- Fixed a bug where ObjText_GetTotalWidth/Height may break the font tag.
- Fixed a bug where font text tag properties do not get reset after using ObjText_SetText.
- Obj_GetValue will now ACTUALLY NOT crash the game if the requested value does not exist.
- Renamed the "Obj_[..]ValueR" function series to "Obj_[..]ValueI".
- Removed the constant 'pi'. Please use 'M_PI' instead.
- Changed error messages of some default functions to be more descriptive to aid debugging.
- Greatly improved script variable allocation.
- Added a concatenate-assign operator. (~=)
- Added bitwise operators. (~, &, |, ^^)
- Int values can now be declared with a suffix 'i' or 'I'.
- Static type declaration is planned.
- Added implicit type casting in default script operations, including comparison and assignment.
- Optimized the process of calling default constants.
- The default constants SCREEN_WIDTH and SCREEN_HEIGHT will now change to reflect the settings in th_dnh.def.
- Some functions will now return int values rather than real values.
- Fixed a bug where itoa, atoi, and IntToString would underflow if the input is larger than 2^31-1. (New limit is 2^63-1)
- Fixed a bug where the 3D viewport would get stretched out based on the size of the STG frame.
- Made the game no longer freeze and crash after Alt-Tab'ing out of true fullscreen mode or after waking the desktop from sleep.
- Pseudo-fullscreen mode now stops Windows from drifting off to Dreamland.
- Fixed a mistake involving matrix multiplication order in the internal shader for particle list objects.
- Removed CollectItemsByType and SetItemIntersectionRadius.
- Added new event, EV_COLLECT_ITEM, which triggers when the item starts to move towards the player.
- Fixed a bug where ObjShot_SetIntersectionScale[XY] does not scale the position offset.
- If ObjFile_Open/ObjFile_OpenNW fails, the reason for failure will now be written to the LogWindow.
- The ObjFileB_Read[...] functions no longer throw an error when attempting to read past EOF.
- ObjFileB_GetLastRead can be used to obtain the amount of bytes read in the last read operation.
- Various optimizations.
- Un-Utilized UPX Executable Packer to not-reduce file size.
1.10c:
- Fixed a bug in the UserShotData where rect can override animation_data.
- Fixed a bug in the UserShotData where collision did not work at all.
- Added functionality to change the color of the delay cloud per-shot.
- Fixed a parser bug with nested single-lined statements.
- Fixed a rare bug where object IDs may get duplicated when objects are created in rapid succession.
- Fixed a bug where the default charset for some fonts are incorrectly determined.
- Utilized UPX Executable Packer to reduce file size.
1.10b:
- Fixed bugs with logical and ternary statements.
- Improved data packing of common data files. (Files saved with 1.10a are now incompatible.)
- Bug fixes and optimizations.
1.10a:
- Fixed some random and function-related crashes.
- RenderToTextureXX alpha fix ported+modified from th_dnh_woo.
- Replaced ObjLaser_SetGrazeInvalidFrame with ObjShot_SetGrazeInvalidFrame.
- Alpha channel blending now exists in all blend modes except BLEND_NONE and BLEND_ADD_RGB.
- Fixed a bug where NotifyEvent and SetScriptArgument could not reach package-level scripts when called from a stage-level script.
- Event arguments will no longer be overwritten when notifying nested events inside @Event.
- Utilized variadic argument counts for the functions in the NotifyEvent series.
- Utilized variadic argument counts for the WriteLog function.
- Added transform functions for ObjPatternShot and relevant sample scripts, for former and current ECL modders.
- Please note that they may not be able to fully emulate ECL's behaviours.
- Added functionality to customize delay clouds.
- Added an option to use true fullscreen mode in the config.
- "Operation-assign" operators (+=, -=, ++, etc.) now work on indexed arrays.
- Given: a = [1, 2, 3]
- a[0]++ = [2, 2, 3]
- a[2] *= 3 = [1, 2, 9]
- a += [5, 6] = [6, 8, 3]
- Given: b = [[1, 2], [3, 4], [5, 6]]
- b[0] += 3 = [[4, 5], [3, 4], [5, 6]]
- b[2]-- = [[1, 2], [3, 4], [4, 5]]
- Array indexing/slicing operations now automatically truncate indices.
- Array slicing operation can now reverse an array.
- Given: a = [10, 12, 14, 16, 18, 20]
- a[0..3] = [10, 12, 14]
- a[3..0] = [14, 12, 10]
- a[1..0] = [10]
- a[6..2] = [20, 18, 16, 14]
- a[2..2] = []
- Added ternary statements.
- NO_CHANGE can now be used in the ObjMove_AddPatternBX functions.
- ObjMove_SetAngle and ObjMove_SetSpeed can now be used on B-pattern objects.
- Line-line intersection is now properly implemented.
- IsIntersected_Line_Circle can now be used in package-level scripts.
- Added a particle renderer object (ObjParticleList) and new relevant sample scripts.
- Added support for vertex indexing.
- Added support for basic directional lighting.
- Improved vertex shader support, and added sample scripts for demonstration.
- Fixed underflowing and overflowing issues with SetColor/SetAlpha functions.
- Fixed a bug where ObjText_SetFontCharacterSet doesn't work at all.
- Added more options to the [font] text tag.
- Available tag options:
- reset
- Resets the text to its original settings. Present in vanilla ph3 as "clear".
- size
- Adjusts font size. Unchanged from vanilla ph3.
- ox/oy
- Adjusts position offset.
- it
- Toggles italic. (true/false or 1/0)
- wg
- Adjusts font weight.
- br/bg/bb
- Adjusts font bottom color.
- tr/tg/tb
- Adjusts font top color.
- or/og/ob
- Adjusts font border color.
- bc
- Adjusts font bottom color as an (r, g, b) list.
- tc
- Adjusts font top color as an (r, g, b) list.
- oc
- Adjusts font border color as an (r, g, b) list.
- Added more options to the [ruby] text tag.
- Available tag options:
- rb
- Sets text. Unchanged from vanilla ph3.
- rt
- Sets ruby(furigana) text. Unchanged from vanilla ph3.
- sz
- Adjusts the ruby text's font size.
- wg
- Adjusts the ruby text's font weight.
- ox
- Adjusts the ruby text's left margin.
- op
- Adjusts the ruby text's side pitch.
- Improved spacing of ruby text.
- ObjFileT now properly reads from and writes to UTF-8 text files.
- ObjFile_OpenNW now allows both reading and writing, unless the file was stored in a .dat archive, in which case all write functions will fail.
- Pulled the plug on Shift-JIS support in favour of proper Unicode (UTF-8 and UTF-8-BOM) handling.
- Better Metasequoia mesh support, and temporarily(?) suspended Elfreina mesh support. Blender .obj mesh support is planned.
- The player object will now set its own movement speed and angle according to user key input.
- Collecting user-defined items now notify EV_GET_ITEM to the player script.
- Minimum custom window size is reduced to 320*240.
- GetShotDataInfoA1 no longer throws an error upon receiving an invalid graphic ID, and will instead return default values.
- Fixed a bug where the right and bottom source rect set with ObjSprite3D_SetSourceDestRect are 1 greater than expected.
- Improved loading of .wav files.
- Attempted to fix a bug where multiple sound objects simultaneously playing the same sound file (>1MB .wav, .ogg, or .mp3) would display strange behaviours.
- Improved the precision of ObjSound_GetWavePosition, and fixed an issue where ObjSound_GetTotalLength would work incorrectly with .ogg files.
- Added bitwise operators.
- Greatly improved the LogWindow's Script panel.
- Added a text showing the available video memory in the LogWindow's Texture panel.
- Added a text showing the used RAM and CPU in the LogWindow's Info panel.
- Enforced semicolons before closing braces.
- Removed ObjShot_AddShotA1/2.
- Various optimizations.
1.00a:
- Multidimensional array assignments are now possible.
- Arithmetic operations on array(s) are possible. (Left-right order is important)
- [1, 2, 3] + 5 = [6, 7, 8]
- [5, 5, 1] * 2 = [10, 10, 2]
- [2, 3, 4] - [7, 0, 2] = [-5, 3, 1]
- [10, 10, 10] / [5, 2] = [2, 5, 10]
- [2, 3] % [4, 2, 1, 6] = [2, 1]
- 4 + [2, 3, 6, 2] = 8
- Added support for multiple-pass shaders.
- Shot and item objects no longer respond to changes in X and Y angles.
- Bullet limit of 8192 for performance reasons.
- Multiple hitbox support for shot objects has been removed.
- Vertex shader support.
- Much smaller replay files.
- Added an option to specify the skip mode speed in th_dnh.def.
- Obj_GetValue will not crash the game if the requested value does not exist.