ephread / inkgd

Implementation of inkle's Ink in pure GDScript for Godot, with editor support.
MIT License
305 stars 33 forks source link

call_external_function errors when a parameter is populated with a blank/Nil value #81

Open Bard09 opened 7 months ago

Bard09 commented 7 months ago

Describe the bug Have an External Function in your Ink with a parameter that is populated with a blank value eg. "", you get the following error on line 1411 in ink_story.gd (Godot4 branch) when you handle the External Function.

while i < number_of_arguments:
        var popped_obj = InkUtils.as_or_null(self.state.pop_evaluation_stack(), "Value")
        var value_obj = popped_obj.value_object
        arguments.append(value_obj)

        i += 1

The error in this case is: Invalid get index 'value_object' (on base: 'Nil').

popped_obj renders as Void when I do a print on it.

To Reproduce

  1. Add an External Function in Ink with a parameter
  2. In your Ink code, call the External Function and populate the parameter as ""
  3. Bind/call the External Function via InkGD. You'll get the error documented above.

Expected behavior Null/blank values passed into External Functions are considered acceptable values and do not throw errors. In my specific scenario, I have a random variable that populates 25% of the time. In the scenarios when it is blank, I'd like that blank result to be passed via External Function the same way as any other parameter. I can technically workaround this with a specific nuller External Function, but that's not my preference.

Ink files ink_story.gd

Environment: