- Hi Iritscen,
- it has been a long time since I have contributed something. I don't have time (and Oni) right now, but I ask you to try this idea out. It is connected to AI2 driven characters being able to actually use hypo sprays they possess to heal themselves (like the human player).
- It could be easy as it involves only usage of BSL. However, I don't know if several things (mainly "chr_holdkey" command, which is core of this idea) work the way I think they work.
- Requirements for the experiment:
- - take one AI2 character whose name you know from some level you like. But this AI should be near some savepoint for easy debugging.
- - add function to the scripts of your selected level, which will be forked from your selected savepoint, where your AI2 spawns.
- - this function will contain following commands:
- "ai2_showhealth=1" - I think this is clear
- "ai2_spawn name" - clear
- "ai2_ignore_player=1" - to be able to experiment
- "chr_inv_reset name" - to make sure we have everything under control
- "chr_givepowerup name hypo" - now we know our AI2 char has one hypo
- "chr_set_health name 1" - to make it logical to use a hypo ^_^
- "chr_wait_animtype 0 crouch" - to be able to trigger it when you want
- "chr_holdkey name keys_hypo 10" - THIS IS IT. Key part, if I understand that command right
- - now run the selected savepoint of selected level, don't crouch, get to your AI2, which is active but ignores you as a player and has only one HP left. NOW crouch. If everything goes according to the theory, this AI2 will use its one hypo to heal itself. Obviously should be seen with "ai2_showhealth=1".
- - if it works, please let us (community) know. This way, we can set up smarter behavior for AI2s, where AI2s heal themselves in battle. Well, they try at least, because if they get hit, healing effect is reduced, as we know. And we cannot command AI2 to "play defensively because it used a hypo and healing is in the process". At least not the BSL way.
- - also, this could be used for some daodanized AI2 characters, where AI2s inject hypos to get into regular overpower mode.
- - I am aware of the fact that we can use "chr_set_health" command to do the same work. However, "chr_set_health" is dependent on the value it has written in, so you have to set up some mechanisms to reduce the value in "chr_set_health" command as AI2s health drops if we want to use it as an hypo emulation. Plus it is tied with only one AI2 character then.
- - hypo usage emulation via "chr_holdkey" (if it will work) is on the other hand simply used to force any AI2 char (just input its name and be sure this char has a hypo in its inventory) to take a hypo and rest is handled by engine. Simple and effective.
- --Loser 00:12, 17 March 2009 (UTC)
Loser, I have tried to get chr_holdkey to work for some time now. Peering at the asm, I can see that there is code there for it, but it might have been commented out in some form. It is really hard to tell. ALSO, using a hypo doesn't seem to be one of the allowable keys. They seem to be: forward, back, stepleft, stepright, crouch, jump, fire, altfire, punch, kick, action. HOWEVER, there is a different method we can use for AIs using hypos. Record Konoko using a hypo, export\import it using Onisplit, then use the from_here option in chr_playback. I would recommend using Konoko's watch animation or something of the sort to go along as a visual cue. Gumby
Thank you for report, Gumby. Yes, I know about playback solution, that way of solving this problem works quite fine. Point of this BSL idea was that it requires only scripting, no files changed.
- But if we have to end up with changing files, then we can modify CHAR as well, adding trigger of the function *heal_mechanicsXX.name_of_ai2_written_here* into CHAR when character is hurt. XX represents number of the healing group. If I recall correctly, engine takes "name_of_ai2_written_here" as string parameter of the function *heal_mechanics*.
- About that XX - enemies have various health levels, but we can see some of them have quite similar max health levels (+/- 25 HP). So my idea is - we have groups of CHARacters, which share same version of heal_mechanicsXX function, labeled by its number (saves space). These CHARacters have similar max health levels and have exactly the same amount of hypos they can use.
- Then one very simple function for such a group can look like this:
- func void heal_mechanics01(string ai_name)
- chr_wait_health (ai_name, value_of_approximate_half_of_max_HP_for_this_group_members)
- chr_playback_block (ai_name, name_of_hypo_trigger_FILM_file, fromhere)
- This function would be triggered by members of heal_mechanics01 (they have writen it in their CHAR file, under "hurt" trigger). When called, it takes name of the CHAR as a parameter and then waits until this CHAR's HP drops around 1/2 (value is set maually in the script). Then it calles hypo using FILM for this CHAR.
- Nice, isn't it? --Loser 18:29, 17 March 2009 (UTC)
- Yeah, thats about what I meant. :) Either method requires changing files though, because AFAIK AI aren't given hypos in the CHAR. Gumby 08:24, 18 March 2009 (UTC)
Hey. When Gumby is on it, there's another worthy thing to try. Duplicating chr_poison (ai_name, damage, interval, initial_interval) and replacing the health reducing function by a health adding function. Then that could be used instead of chr_playback_block. It would not only simulate "AI Hypos" but better AI and player regeneration than chr_set_health. Smooth health increment (for player) can be done in a looped BSL function. 20:35, 17 March 2009 (UTC)
- Done that already, in ReOni. The problem lies in the fact that there isn't an easy way AFAIK to copy a function using the Daodan. The other problem is that Macs would be left out cold. Gumby 08:24, 18 March 2009 (UTC)
- Hm, do I actually even need to say anything? The conversation is going well without me ^_^ I find your idea interesting, Loser, but I personally just can't focus on it at this point, or I won't be able to help Gumby with the Edition (Real Life is knocking hard on my door right now and demanding me to cut down on my Oni time). Besides, any topic beyond BSL is kinda over my head anyway :-) --Iritscen 14:35, 18 March 2009 (UTC)
- Ran into a small problem, the character still rotates, even with "fromhere". :( Gumby 19:07, 18 March 2009 (UTC)
This pre-beta image really seems bio lab to me. Didn't you agree?
See you. Script 10k
- Ah, you're right, that must be the pre-beta night-time version of the Lab! I've re-named it and moved it to the proper place on the page. Thanks. --Iritscen 01:31, 23 November 2009 (UTC)
Oi who are all those never editing newbees? Are you sure they are human? --Paradox-01
- My bad, you're correct. '=' is the assignment operator. --Iritscen (talk) 19:49, 11 November 2012 (CET)
"no idea why I wrote that about slowmo"
EdT told me when making the Old China level that it was different in mac and pc. If you check the scripts you will notice that the parameter values are different for each version. Not sure how it works on mac since I don't own one. Script 10k (talk) 17:32, 28 April 2013 (CEST)
- Yes, I see now, that was why I wrote that. I guess I have to ask EdT about that. --Iritscen (talk) 17:37, 28 April 2013 (CEST)
- The answer, I don't know. I believe that normally, slowmo works the same for both PC and Mac. However, in the old China Mod, there was a big difference. For the PC slowmo(100) lasted less than 2 seconds, on the Mac is was more like 15-20 seconds and during that time you couldn't do anything. So we changed it to slowmo(30) for the Mac, but it could simply have been my computer not able to handle all the action of the final battle. :) EdT (talk) 00:36, 8 May 2013 (CEST)
- Hmm, okay. Well, I guess we'll just have to keep an eye out for a possible difference in the future (maybe it's really just tied to computer performance, as you indicated), but it probably won't crop up often since slowmo isn't used much. Thanks for the response. --Iritscen (talk) 00:43, 8 May 2013 (CEST)
- Yes; in fact it's funny you should ask, because this ability was just added in Windows by the Daodan DLL within the last couple weeks: http://oni.bungie.org/forum/viewtopic.php?pid=48117#p48117. --Iritscen (talk) 23:39, 27 March 2014 (CET)