Development news : AAO goes open-source NOW !
- Unas
- Admin / Site programmer
- Posts: 8850
- Joined: Tue Jul 10, 2007 4:43 pm
- Gender: Male
- Spoken languages: Français, English, Español
- Contact:
Re: Development news : AAO goes open-source NOW !
Don't go and oversimplify everything xD
getPropertyConverter, just like populateAtRulesConverters and populateFunctionConverters, is here to provide a manual mapping from one standard CSS property to an experimental one.
(And yes, this style_loader is the closest thing in the AAO code to the browser hacks I mentioned in 1., though it almost doesn't rely on any browser-specific trick. It mostly just detects if CSS functionalities are implemented in the current browser as stable feature or an experimental one, and adapts the CSS code appropriately. This is what enables me to write CSS using only the standard syntax, and not experimental ones. But I only use properties which are being added to the standard anyway.)
It just so happens that for properties I haven't found any that needs manual mapping as it always follows the browser-prefix convention, so this one currently only returns false (ie no manual mapping, let the generic conversion function add the prefix).
If such a property suddenly appears, however, I can just add a case to the switch in that function and be done with it.
getPropertyConverter, just like populateAtRulesConverters and populateFunctionConverters, is here to provide a manual mapping from one standard CSS property to an experimental one.
(And yes, this style_loader is the closest thing in the AAO code to the browser hacks I mentioned in 1., though it almost doesn't rely on any browser-specific trick. It mostly just detects if CSS functionalities are implemented in the current browser as stable feature or an experimental one, and adapts the CSS code appropriately. This is what enables me to write CSS using only the standard syntax, and not experimental ones. But I only use properties which are being added to the standard anyway.)
It just so happens that for properties I haven't found any that needs manual mapping as it always follows the browser-prefix convention, so this one currently only returns false (ie no manual mapping, let the generic conversion function add the prefix).
If such a property suddenly appears, however, I can just add a case to the switch in that function and be done with it.
- Enthalpy
- Community Manager
- Posts: 5172
- Joined: Wed Jan 04, 2012 4:40 am
- Gender: Male
- Spoken languages: English, limited Spanish
Re: Development news : AAO goes open-source NOW !
Ha, no, I'm focused more on understanding the code. Simplifications are a nice side-benefit.
I'm working through the objects module and am a bit confused on objCompare. What is it trying to accomplish? What does it even mean to loop for var keyname in obj, where obj is a function? Some experimenting on my own has show that the loop acts as if the function is empty, but does that generalize?
I'm working through the objects module and am a bit confused on objCompare. What is it trying to accomplish? What does it even mean to loop for var keyname in obj, where obj is a function? Some experimenting on my own has show that the loop acts as if the function is empty, but does that generalize?
[D]isordered speech is not so much injury to the lips that give it forth, as to the disproportion and incoherence of things in themselves, so negligently expressed. ~ Ben Jonson
- Unas
- Admin / Site programmer
- Posts: 8850
- Joined: Tue Jul 10, 2007 4:43 pm
- Gender: Male
- Spoken languages: Français, English, Español
- Contact:
Re: Development news : AAO goes open-source NOW !
Well, objCompare compares two JS objects, to detemine if they are identical or not using a deep comparison (checking all properties recursively).
As far as functions go, well, functions are Javascript objects like any other : you can assign properties to a function and so on, so "for ... in f" will iterate through all the properties assigned to f.
That being said, this comparison does not make sense for functions to begin with : you can't compare the function body, and two functions can be very different even if they expose the same properties...
It could probably be updated with a "case 'function' : return false" or something, so that functions be assumed different as soon as they failed the "obj1 === obj2" test.
(=== will check if they are actually the same object in memory, which is a safe comparison; if they are not, then no other comparison really makes sense so they should be considered different)
I doesn't matter much though : I use objCompare to compare pieces of object model, so JSON-like objects : no functions in there.
As far as functions go, well, functions are Javascript objects like any other : you can assign properties to a function and so on, so "for ... in f" will iterate through all the properties assigned to f.
That being said, this comparison does not make sense for functions to begin with : you can't compare the function body, and two functions can be very different even if they expose the same properties...
It could probably be updated with a "case 'function' : return false" or something, so that functions be assumed different as soon as they failed the "obj1 === obj2" test.
(=== will check if they are actually the same object in memory, which is a safe comparison; if they are not, then no other comparison really makes sense so they should be considered different)
I doesn't matter much though : I use objCompare to compare pieces of object model, so JSON-like objects : no functions in there.
- Enthalpy
- Community Manager
- Posts: 5172
- Joined: Wed Jan 04, 2012 4:40 am
- Gender: Male
- Spoken languages: English, limited Spanish
Re: Development news : AAO goes open-source NOW !
Huh... I assumed JavaScript would naturally check for object equality that way, but no, it's memory location-based...
I've been working on module summaries. Right now, I have two complete ones for nodes and events, and a mostly complete one for var_environments. Would anybody be interested in looking over them? I figure they could be useful once we have the forum.
For Unas specifically... What are the objectives for the expression engine rewrite? That module is next on my list to look over, so if it's not too ambitious, I've been playing with the idea of working on that.
I've been working on module summaries. Right now, I have two complete ones for nodes and events, and a mostly complete one for var_environments. Would anybody be interested in looking over them? I figure they could be useful once we have the forum.
For Unas specifically... What are the objectives for the expression engine rewrite? That module is next on my list to look over, so if it's not too ambitious, I've been playing with the idea of working on that.
[D]isordered speech is not so much injury to the lips that give it forth, as to the disproportion and incoherence of things in themselves, so negligently expressed. ~ Ben Jonson
-
- Posts: 468
- Joined: Sat Sep 27, 2014 6:46 pm
- Gender: Male
- Spoken languages: English, français, un poco de español, עברית
- Location: USA
Re: Development news : AAO goes open-source NOW !
One question about the code editor: I have seen many pull requests accepted, but none of them are actually in the site. Is this a bug, or has it not been implemented? If the latter, when will it be implemented?
Thank you,
AceAttorneyMaster111
Thank you,
AceAttorneyMaster111
- Singidava
- Posts: 1621
- Joined: Fri Jul 23, 2010 6:56 pm
- Gender: Female
- Spoken languages: Suomi, English & 日本語
- Location: Finland
- Contact:
Re: Development news : AAO goes open-source NOW !
The changes have been made to the develop branch. I'm assuming AAO runs on the master branch (or a local clone of it) and thus what has been done doesn't actually affect the site yet. Dunno if Unas has any plans for a merge anytime soon though.AceAttorneyMaster111 wrote:One question about the code editor: I have seen many pull requests accepted, but none of them are actually in the site. Is this a bug, or has it not been implemented? If the latter, when will it be implemented?
Thank you,
AceAttorneyMaster111
- Unas
- Admin / Site programmer
- Posts: 8850
- Joined: Tue Jul 10, 2007 4:43 pm
- Gender: Male
- Spoken languages: Français, English, Español
- Contact:
Re: Development news : AAO goes open-source NOW !
@AAM111 : What Sing said is mostly correct.
At the moment there are a few changes on master not yet reflected on the site, but it will indeed work this way : develop will be merged to master when I decide it's fit to go to production; I'll then copy the code from the master branch to update the site.
It's not automated because updating the actual site is something I take pretty seriously in terms of security so I'd rather do it by hand, checking it at every step, and not storing my credentials anywhere dangerous.
As for when, well... I planned this week end, but forgot. I guess some time this week.
At the moment there are a few changes on master not yet reflected on the site, but it will indeed work this way : develop will be merged to master when I decide it's fit to go to production; I'll then copy the code from the master branch to update the site.
It's not automated because updating the actual site is something I take pretty seriously in terms of security so I'd rather do it by hand, checking it at every step, and not storing my credentials anywhere dangerous.
As for when, well... I planned this week end, but forgot. I guess some time this week.
-
- Posts: 468
- Joined: Sat Sep 27, 2014 6:46 pm
- Gender: Male
- Spoken languages: English, français, un poco de español, עברית
- Location: USA
Re: Development news : AAO goes open-source NOW !
Until there is a subforum, should we post questions in this topic?
If so, thenThank you!
If so, then
Spoiler : I have a question :
- Singidava
- Posts: 1621
- Joined: Fri Jul 23, 2010 6:56 pm
- Gender: Female
- Spoken languages: Suomi, English & 日本語
- Location: Finland
- Contact:
Re: Development news : AAO goes open-source NOW !
I warmly recommend using word search.AceAttorneyMaster111 wrote:Until there is a subforum, should we post questions in this topic?
If so, thenThank you!Spoiler : I have a question :
Code: Select all
Searching 418 files for "psyche"
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\mocked_install\config.php:
20 'defaultplaces_subdir' => "defaultplaces/",
21 'popups_subdir' => "popups/",
22: 'locks_subdir' => "psycheLocks/",
23 'music_dir' => "../test_install/resources/music/",
24 'sounds_dir' => "../test_install/resources/sounds/",
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\player.html:
51 <a class="bs-button topleft" id="press" data-locale-content="press"></a>
52 <a class="bs-button topmiddle" id="present-center" data-locale-content="present"></a>
53: <a id="locks"><img src="img/magatama.gif" alt="Psyche locks" /></a>
54 <a class="bs-button topright" id="present-topright" data-locale-content="present"></a>
55 </div>
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\test_install\config.php:
20 'defaultplaces_subdir' => "defaultplaces/",
21 'popups_subdir' => "popups/",
22: 'locks_subdir' => "psycheLocks/",
23 'music_dir' => "../test_install/resources/music/",
24 'sounds_dir' => "../test_install/resources/sounds/",
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\test_static\mock_bridge.js:
13 "defaultplaces_subdir": "defaultplaces/",
14 "popups_subdir": "chars/Cour/",
15: "locks_subdir": "psycheLocks/",
16 "music_dir": "test_install/resources/music/",
17 "sounds_dir": "test_install/resources/sounds/",
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\CSS\player_global.css:
245 }
246
247: /* Psyche locks button */
248 #locks
249 {
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\CSS\player_pwstyle.css:
86 }
87
88: /* Psyche locks button */
89 #locks
90 {
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\includes\action_descriptions.php:
322 );
323
324: //Psyche locks actions
325 $action_parameters['Locks'] = array();
326 $action_parameters['Locks']['LocksEnd'] = array(
327: 'context' => array( //Parameters to fill automatically when in psyche locks conversation, hidden from the user.
328 'out_of_editor' => array(
329 'type' => 'boolean',
...
338
339 $action_parameters['Locks']['LocksShow'] = $action_parameters['Locks']['LocksHide'] = array(
340: 'context' => array( //Parameters to fill automatically when in psyche locks conversation, hidden from the user.
341 'parent_dialogue' => array(
342 'type' => 'dialogue_descriptor',
...
347
348 $action_parameters['Locks']['LocksBreak'] = array(
349: 'context' => array( //Parameters to fill automatically when in psyche locks conversation, hidden from the user.
350 'parent_dialogue' => array(
351 'type' => 'dialogue_descriptor',
...
399 $action_parameters['Input'] = array();
400 $action_parameters['Input']['MultipleChoices'] = array(
401: 'context' => array( //Parameters to fill automatically when in psyche locks conversation, hidden from the user.
402 'parent_dialogue' => array(
403 'type' => 'dialogue_descriptor',
...
432
433 $action_parameters['Input']['AskForEvidence'] = array(
434: 'context' => array( //Parameters to fill automatically when in psyche locks conversation, hidden from the user.
435 'parent_dialogue' => array(
436 'type' => 'dialogue_descriptor',
...
482
483 $action_parameters['Input']['PointArea'] = array(
484: 'context' => array( //Parameters to fill automatically when in psyche locks conversation, hidden from the user.
485 'parent_dialogue' => array(
486 'type' => 'dialogue_descriptor',
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\includes\legacy_blocks.php:
189 $frame_mode = LOCKS_CONVERSATIONS;
190
191: //remove action : none necessary at start of psyche locks conversation
192 $frame_data['action_name'] = '';
193 $frame_data['action_parameters'] = array();
...
975 }
976
977: //Handle messed up psyche locks structure
978 if($dialogue['locks'] != null)
979 {
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\Javascript\display_engine_locks.js:
1 /*
2: Ace Attorney Online - Psyche locks display engine
3
4 */
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\Javascript\editor_frames_scene.js:
394 }
395
396: // Psyche locks editor
397 function locksEditor(dialogue)
398 {
...
614 if(dialogue.locks)
615 {
616: // If psyche locks are enabled, include locks edition tools
617
618 // Button to open locks editor
...
648 else
649 {
650: // If psyche locks are disabled, add button to enable them.
651 dialogue_setting_fields.push({
652 type: 'button',
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\Javascript\editor_rowmaps_frames.js:
285 if(dialogue.locks)
286 {
287: //Psyche locks conversation
288 conv_start_index = getRowIndexById('frames', dialogue.locks.start) + 1;
289 conv_end_index = getRowIndexById('frames', dialogue.locks.end) - 1;
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\Javascript\player_actions.js:
327 {
328 dialogue.locks.hidden = hidden;
329: //TODO : add psyche locks to debugger
330 }
331 showSkipButton();
...
338 break;
339
340: // Psyche locks actions
341
342 case 'LocksShow':
...
695 break;
696
697: // Psyche locks actions
698
699 case 'LocksEnd':
...
913 setClass(bottom_screen, 'options back'); // Display the options panel and back button
914
915: // Set the psyche locks button if needed
916 if(dialogue.locks && !dialogue.locks.hidden)
917 {
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\Languages\de\music.js:
48 "default_music_Ace Attorney 2/12 - Pursuit ~ Cornered (Variation)" : "12 - Pursuit ~ Cornered (Variation)",
49 "default_music_Ace Attorney 2/13 - Jingle ~ Cant Sleep on a Night Like This" : "13 - Jingle ~ Cant Sleep on a Night Like This",
50: "default_music_Ace Attorney 2/14 - Psyche Lock" : "14 - Psyche Lock",
51 "default_music_Ace Attorney 2/15 - Search ~ Opening 2002" : "15 - Search ~ Opening 2002",
52 "default_music_Ace Attorney 2/16 - Maya Fey ~ Turnabout Sisters Theme 2002" : "16 - Maya Fey ~ Turnabout Sisters Theme 2002",
..
416 "default_music_Remixes/Trailers - GS1 - Gyakuten Sisters Theme 2001" : "Trailers - GS1 - Gyakuten Sisters Theme 2001",
417 "default_music_Remixes/Trailers - GS1 - Investigation - Cornered" : "Trailers - GS1 - Investigation - Cornered",
418: "default_music_Remixes/Trailers - GS2 - Psyche Lock" : "Trailers - GS2 - Psyche Lock",
419 "default_music_Remixes/Trailers - GS3 - Court Begins" : "Trailers - GS3 - Court Begins",
420 "default_music_Remixes/Trailers - GS3 - Godot - The Fragrance Of Dark Coffee" : "Trailers - GS3 - Godot - The Fragrance Of Dark Coffee",
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\Languages\en\editor.js:
237 "actionCategory_EditEnvironment" : "Edit the game environment",
238 "actionCategory_Health" : "Manage player's health",
239: "actionCategory_Locks" : "Animate psyche-locks",
240 "actionCategory_Input" : "Ask for player's input",
241 "actionCategory_Vars" : "Manage variables",
...
256 "action_HideTalkTopic" : "Hide a talk topic",
257 "action_RevealTalkTopic" : "Reveal a talk topic",
258: "action_HideDialogueLocks" : "Hide psyche locks button",
259: "action_RevealDialogueLocks" : "Reveal psyche locks button",
260: "action_LocksHide" : "Hide the psyche locks",
261: "action_LocksShow" : "Show the psyche locks",
262: "action_LocksBreak" : "Break psyche locks",
263 "action_FlashHealth" : "Set flashing health points",
264 "action_SetHealth" : "Set player's health points",
...
372 "dialogue_main_screen" : "Main frame screen editor",
373 "dialogue_main_music" : "Main frame music",
374: "locks_add" : "Add psyche-locks conversation",
375: "locks_remove" : "Remove psyche-locks conversation",
376: "locks_remove_confirm" : "Are you sure you wish to delete this psyche-locks conversation ? This action is irreversible.",
377: "locks_edit" : "Edit number and position of psyche-locks",
378: "locks_editor" : "Psyche-locks editor",
379: "add_dialogue_locks" : "Add a psyche-lock",
380 "dialogue_intro" : "Introduction conversation",
381 "dialogue_intro_description" : "The introduction conversation is read the first time the player reaches this dialogue, and hidden afterwards. You can, however, reveal or hide it manually with actions.",
...
390 "dialogue_present_others" : "Presenting other evidence",
391 "add_present_conversations" : "Add a new present conversation",
392: "dialogue_locks" : "Psyche-Locks",
393 "dialogue_locks_description" : "This conversation can be accessed using the magatama button ingame. While in this conversation, you can set \"player input\" actions to display a back button. You can also use lock actions (Show, Break and Hide) to control the animations.",
394: "dialogue_locks_conv" : "Psyche-Locks conversation",
395
396
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\Languages\en\music.js:
48 "default_music_Ace Attorney 2/12 - Pursuit ~ Cornered (Variation)" : "12 - Pursuit ~ Cornered (Variation)",
49 "default_music_Ace Attorney 2/13 - Jingle ~ Cant Sleep on a Night Like This" : "13 - Jingle ~ Cant Sleep on a Night Like This",
50: "default_music_Ace Attorney 2/14 - Psyche Lock" : "14 - Psyche Lock",
51 "default_music_Ace Attorney 2/15 - Search ~ Opening 2002" : "15 - Search ~ Opening 2002",
52 "default_music_Ace Attorney 2/16 - Maya Fey ~ Turnabout Sisters Theme 2002" : "16 - Maya Fey ~ Turnabout Sisters Theme 2002",
..
416 "default_music_Remixes/Trailers - GS1 - Gyakuten Sisters Theme 2001" : "Trailers - GS1 - Gyakuten Sisters Theme 2001",
417 "default_music_Remixes/Trailers - GS1 - Investigation - Cornered" : "Trailers - GS1 - Investigation - Cornered",
418: "default_music_Remixes/Trailers - GS2 - Psyche Lock" : "Trailers - GS2 - Psyche Lock",
419 "default_music_Remixes/Trailers - GS3 - Court Begins" : "Trailers - GS3 - Court Begins",
420 "default_music_Remixes/Trailers - GS3 - Godot - The Fragrance Of Dark Coffee" : "Trailers - GS3 - Godot - The Fragrance Of Dark Coffee",
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\Languages\en\sounds.js:
39 "default_sounds_Photo" : "Sound effects|Camera click",
40 "default_sounds_Pistolet Extraterrestre" : "Character sounds|Oldbag - Ray gun",
41: "default_sounds_Rolling" : "Psyche-locks|Psyche-Locks appear",
42 "default_sounds_Rumeur" : "Court|Gallery speaking",
43 "default_sounds_SelectJingle" : "Sound effects|New evidence",
44: "default_sounds_Shatter" : "Psyche-locks|Lock breaks",
45 "default_sounds_Shing" : "Speaking expressions|Shouting",
46 "default_sounds_Shock" : "Speaking expressions|Waaah!",
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\Languages\es\music.js:
48 "default_music_Ace Attorney 2/12 - Pursuit ~ Cornered (Variation)" : "12 - Pursuit ~ Cornered (Variation)",
49 "default_music_Ace Attorney 2/13 - Jingle ~ Cant Sleep on a Night Like This" : "13 - Jingle ~ Cant Sleep on a Night Like This",
50: "default_music_Ace Attorney 2/14 - Psyche Lock" : "14 - Psyche Lock",
51 "default_music_Ace Attorney 2/15 - Search ~ Opening 2002" : "15 - Search ~ Opening 2002",
52 "default_music_Ace Attorney 2/16 - Maya Fey ~ Turnabout Sisters Theme 2002" : "16 - Maya Fey ~ Turnabout Sisters Theme 2002",
..
416 "default_music_Remixes/Trailers - GS1 - Gyakuten Sisters Theme 2001" : "Trailers - GS1 - Gyakuten Sisters Theme 2001",
417 "default_music_Remixes/Trailers - GS1 - Investigation - Cornered" : "Trailers - GS1 - Investigation - Cornered",
418: "default_music_Remixes/Trailers - GS2 - Psyche Lock" : "Trailers - GS2 - Psyche Lock",
419 "default_music_Remixes/Trailers - GS3 - Court Begins" : "Trailers - GS3 - Court Begins",
420 "default_music_Remixes/Trailers - GS3 - Godot - The Fragrance Of Dark Coffee" : "Trailers - GS3 - Godot - The Fragrance Of Dark Coffee",
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\Languages\es\sounds.js:
42 "default_sounds_Rumeur" : "Tribunal|Tribunal hablando",
43 "default_sounds_SelectJingle" : "Efectos|Nueva prueba",
44: "default_sounds_Shatter" : "Psyche-locks|Candado rompiendose",
45 "default_sounds_Shing" : "Expresiones|Grito",
46 "default_sounds_Shock" : "Expresiones|Waaah!",
AceAttorneyOnline-aao-game-creation-engine-5b28587f06a3\trunk\player.php:
75 <a class="bs-button topleft" id="press" data-locale-content="press"></a>
76 <a class="bs-button topmiddle" id="present-center" data-locale-content="present"></a>
77: <a id="locks"><img src="img/magatama.gif" alt="Psyche locks" /></a>
78 <a class="bs-button topright" id="present-topright" data-locale-content="present"></a>
79 </div>
55 matches across 19 files
- Enthalpy
- Community Manager
- Posts: 5172
- Joined: Wed Jan 04, 2012 4:40 am
- Gender: Male
- Spoken languages: English, limited Spanish
Re: Development news : AAO goes open-source NOW !
I started reading over the display engine, while on the hunt for the recent bug in Chrome, when I came across this in display_engine_global's set_transition function:
How exactly would the node be deleted? I can't find any possibilities through either reading the code, or experimenting in the editor or player.
EDIT: Oh, and have you looked at the changes I made to the "code beautification" pull request since you first commented on them?
Code: Select all
if(!node)
{
//if node has been deleted while transitioning, do not crash
return;
}
EDIT: Oh, and have you looked at the changes I made to the "code beautification" pull request since you first commented on them?
[D]isordered speech is not so much injury to the lips that give it forth, as to the disproportion and incoherence of things in themselves, so negligently expressed. ~ Ben Jonson
- Enthalpy
- Community Manager
- Posts: 5172
- Joined: Wed Jan 04, 2012 4:40 am
- Gender: Male
- Spoken languages: English, limited Spanish
Re: Development news : AAO goes open-source NOW !
...And another question.
In object_buffer_wrappers, what is the point of having the extension wrappers in, since there doesn't seem to be any code that uses them, and why have the buffer wrappers at all, instead of just editing the trial_data variable?
Sorry if this is too many questions. These aren't clearly answered in the comments, and this is coming up in my attempts to do the thorough root-out of the Chrome bug.
EDIT: Figured out the reason for the buffer wrappers. This mechanism allows the in-player changes to the trial file to carry over even when the author changes the core trial file. Otherwise, a player loading their save would have the old version of the game, instead of the new!
In object_buffer_wrappers, what is the point of having the extension wrappers in, since there doesn't seem to be any code that uses them, and why have the buffer wrappers at all, instead of just editing the trial_data variable?
Sorry if this is too many questions. These aren't clearly answered in the comments, and this is coming up in my attempts to do the thorough root-out of the Chrome bug.
EDIT: Figured out the reason for the buffer wrappers. This mechanism allows the in-player changes to the trial file to carry over even when the author changes the core trial file. Otherwise, a player loading their save would have the old version of the game, instead of the new!
[D]isordered speech is not so much injury to the lips that give it forth, as to the disproportion and incoherence of things in themselves, so negligently expressed. ~ Ben Jonson
- Unas
- Admin / Site programmer
- Posts: 8850
- Joined: Tue Jul 10, 2007 4:43 pm
- Gender: Male
- Spoken languages: Français, English, Español
- Contact:
Re: Development news : AAO goes open-source NOW !
Sorry, I haven't been nearly as present as I hoped lately.
FYI, I'm preparing the push of the first batch of updates since I received your pull requests - I expected to do that a few weeks ago but was stalled by technical issues : apparently, a lot of data was corrupted on the AAO server, in the directory I use to deliver updates to the site. Thankfully it did not affect the site itself, but it takes a little bit of time to understand roughly what happened and restore everything properly without risking anything.
Now on to your questions :
Keep in mind that this is event-based programming : there is never any guarantee on the order of execution of different event handlers after all. There are bound to be unforeseen situations every once in a while. In this case it's often simpler to use some kind of "defensive programming" on the event handlers so that they check if it made any sense calling them in that situation and act accordingly.
Extension wrappers are what allows to extend an object with default properties as defined in an object model. This is how I will manage future extensions of the V6 trial data format : I can add a new structure to the object model, and it will automatically added at runtime with default values (thanks to this extension wrapper) on all existing trials.
It avoids the need for the editor and player code to have null checks everywhere to handle legacy trials.
More generally, buffer wrappers allow me to know what exactly was changed in the wrapped object : this is important information for a future evolution I have in mind.
FYI, I'm preparing the push of the first batch of updates since I received your pull requests - I expected to do that a few weeks ago but was stalled by technical issues : apparently, a lot of data was corrupted on the AAO server, in the directory I use to deliver updates to the site. Thankfully it did not affect the site itself, but it takes a little bit of time to understand roughly what happened and restore everything properly without risking anything.
Now on to your questions :
To be honest, neither can I, but still, the issue occured quite often, so I had to handle this case. I guess it's related to the order of events if I change the displayed sprite several times quickly for example.Enthalpy wrote:How exactly would the node be deleted? I can't find any possibilities through either reading the code, or experimenting in the editor or player.
Keep in mind that this is event-based programming : there is never any guarantee on the order of execution of different event handlers after all. There are bound to be unforeseen situations every once in a while. In this case it's often simpler to use some kind of "defensive programming" on the event handlers so that they check if it made any sense calling them in that situation and act accordingly.
Because all the code soon willEnthalpy wrote:what is the point of having the extension wrappers in, since there doesn't seem to be any code that uses them
Extension wrappers are what allows to extend an object with default properties as defined in an object model. This is how I will manage future extensions of the V6 trial data format : I can add a new structure to the object model, and it will automatically added at runtime with default values (thanks to this extension wrapper) on all existing trials.
It avoids the need for the editor and player code to have null checks everywhere to handle legacy trials.
True, but not only. It also greatly reduces the size of game saves. Remember that some people here tend to write very big, very long cases : dumping the whole trial data into each game saves would make the size of those explode.Enthalpy wrote:EDIT: Figured out the reason for the buffer wrappers. This mechanism allows the in-player changes to the trial file to carry over even when the author changes the core trial file. Otherwise, a player loading their save would have the old version of the game, instead of the new!
More generally, buffer wrappers allow me to know what exactly was changed in the wrapped object : this is important information for a future evolution I have in mind.