-
Notifications
You must be signed in to change notification settings - Fork 9
/
Change Log.txt
665 lines (651 loc) · 36.5 KB
/
Change Log.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
A mostly-complete history log of engine updates can be found here.
1.33a-pre2:
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.
1.33a-pre: [Pre-release]
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.
- 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)
- 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.
- (Partial) 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.
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.