Dayummm. I've been waiting for this. So I noticed, that the current coop online modes don't work. Also replay etc. Do you need anyone to help test that?you're talking about that version on MA with brokenMugen screenpack included? I didn't upload it there. There is no point in testing build that is several months old (all of the stuff you mentioned have been fixed long time ago).
is it possible to add sth that prevents you from picking same char twice on simul to new version of engineSomething like that would also come in handy for arcade order battles too.
cause I dont want ryu's assist to be ryu or evil ryu,same goes with different versions of character(final bison,violent ken etc etc)
is it possible to add sth that prevents you from picking same char twice on simul to new version of engine
cause I dont want ryu's assist to be ryu or evil ryu,same goes with different versions of character(final bison,violent ken etc etc)
Something like that would also come in handy for arcade order battles too.
is it possible to add sth that prevents you from picking same char twice on simul to new version of engine
cause I dont want ryu's assist to be ryu or evil ryu,same goes with different versions of character(final bison,violent ken etc etc)
Something like that would also come in handy for arcade order battles too.When character with particular order is selected than you won't face that character again in this arcade play through (just like in mugen IIRC)
well, a problem with transparency is happening on ikemen plus ... see:it's fixed for the screenpacks (to be more precise in old Ikemen Plus animSetColorKey was used incorrectly). As for the stages please upload the problematic one and I will check it out. Even if the problem is still there I know how to fix it (should be a matter of changing one of the bg.anim.mask lines in stages.go from 0 to -1 or maybe defaulting this value to -1).
(...)
I would like to know if this has already been identified and corrected in the GO version
Well, that is exactly what I mean. Wouldn't you need someone to test the online capabilities with regardless? No, not the old one, its a general question, like how can I help you.yes, but not yet.
Not much of a question, but I'm excited for this. I'm just wondering how much can the engine handle? Me, and some others I know, like to really push the limits on graphics, and last I checked, regular Ikemen couldn't handle it too well.Loading times are infinitely better in current build (in old Ikemen Plus characters loader was badly coded). As for performance I don't know since I have fast computer, so can't test how it performs on weaker setups.
-I'm not sure if its already possible, but can the character select scrolling be configurable with the option for it to be more like Mugen? I can see the benefit it has but it's also problematic when trying to create certain kinds of motifs
-Can Turns and Simul be made modifiable ? How can I word this.... I can see the situations where the way it currently is would be useful, but there are times where it'd be nicer to be able to have it selectable from maybe a screen prior or even just separated at the main menu? It's kind of variable I supposed based on person/full game needs. Like personally, I like turns and i like when you can have 4 weaker chars fight one "boss" char or something, but I also hate having to choose that right before I select my fighters at the select. I hope I'm being clear, but I'm willing to explain what I mean more if need be.everything in interface can be changed. But adjusting when exactly team mode menu should show up or what values should be selected automatically requires lua file edits, so it's better suited for full games. Adding additional screenpack parameters for this sounds like bloated functionality to me (please elaborate how you want it to be implemented taking screenpack coding into account - if your implementation idea is intuitive than we can think about it).
-Can systems be altered where the way localcoord affects characters and their portraits and stuff isnt so.....disjointed? It's been some times since I touched either engine, but if my memory serves me right, if a like HD character has its own localcoord thing going on, it became hard to properly adjust the portrait (different resolutions required different localcoords, and ports were always affected badly, especially on more experimental resolutions)I've noticed weird way that mugen handles portraits during localcoord implementation. To be precise mugen seems to be using following equation for portrait scaling:
portrait.scale = scaleX * localCoordY / 240, scaleY * localCoordY / 240Same for face scaling. I've implemented additional optional screenpack parameter that makes the portrait scaling work like any other image (so for example, if the parameter is set, and "portrait.scale = 1, 1" than portrait will maintain the correct pixel size regardless of localcoord). For compatibility sake this parameter is disabled by default.
-Animated menu items? like an alternative to the font system it already uses?I don't want to make screenpack creation confusing (even if it's optional feature). How exactly you want it to work? Tens of new menu.itemname.anim parameters for each mode? Sounds like a feature more suited for full game adjustments.
-Profile/Progress Saving (arcade/story mode progress, record of battle wins/losses, survival tracking, etc)It's on the roadmap for future releases. It’s needed for ranking score system and characters unlocking functionality, so progress and tons of data will need to be saved.
Well the engine does not distinguish in who is who, just know that they are independent characters from each other.Looks like I misunderstood mete122's question if this is what he meant. I'm not interested in coding it myself but if MangeX implements it than I don't see a problem with adding this functionality of course.
There could not be a syntax that says if it is original, clone or modified; since they are all original creations.
maybe the engine in select.def can recognize words like same author, display name, the name of the definitions file, here is an example of how it could be:
MangeX, are you interested in collaborating on Ikemen GO Plus fork development or you will create separate one? If the former I will give you access to the repository on Github, so that you can commit and create branches without pull requests.
Well the engine does not distinguish in who is who, just know that they are independent characters from each other.
crap. looks like I'll have to figure out how to combine characters together like in KOFZ
Wait wait wait, what about my issue? I can't get the specific arcade order and stages to work in conjunction.
; - 1, 2, (...)This has nothing to do with stages. So this syntax that you have posted:
; IKEMEN feature: paramname points to the match number in
; arcade mode. paramvalue overwrites character that you would
; face following normal 'order'. paramvalue should match exactly
; the charname text typed after "Insert your characters below"
; line, so it can be either full DEF path or just folder name.
; This functionality introduces simple solution for implementing
; story like arcade mode similar to the one in Street Fighter
; Alpha 3 where characters always face their rivals along the way.
; If you're playing in Team mode than paramvalue character becomes
; opposite team leader, other characters follow normal order.
Ryu, stages/Suzaku2014.def, order=3, 1=Alex, stages/Shiyo/ring2014.def, 2=Terry stages/Shiyo/west2014.def, 3=Sakura stages/Shiyo/home2014.def, 4=Ryo stages/Shiyo/home2014.def, 5=kfma4a, 6=Kyo stages/Shiyo/neogeoland2014.def, 7=Sagat stages/Shiyo/ayutaya2014.def, 8=Ken stages/Shiyo/wall2014.def,9=M.Bison stages/Shiyo/drive2014.def, 10=Akuma stages/Shiyo/shrine2014.defis wrong and currently not supported. Here is correct syntax:
kfm, stages/mybg1.def, 3=SuaveDude, 5=ShinGoukiIn this example KFM will always face SuaveDude in 3rd match and that SuaveDude will randomly use mybg2 or mybg3 stage. On 5th match he will face ShinGouki on mybg4 stage. Other matches will follow the normal order. Selecting SuaveDude would result normal arcade run with exception of 3rd fight which would be against KFM on mybg1 stage. In other words it works the same way as mugen but with optional additional parameters explained in select.def.
SuaveDude, stages/mybg2.def, stages/mybg3.def, 3=kfm
ShinGouki, stages/mybg4.def
num={charname, stages/stagename.def, music=musicname}using your example:
Ryu, stages/Suzaku2014.def, order=3, 1={Alex, stages/Shiyo/ring2014.def}, 2={Terry, stages/Shiyo/west2014.def}, 3={Sakura, stages/Shiyo/home2014.def}, 4={Ryo, stages/Shiyo/home2014.def}, 5={kfma4a}, 6={Kyo, stages/Shiyo/neogeoland2014.def}, 7={Sagat, stages/Shiyo/ayutaya2014.def}, 8={Ken, stages/Shiyo/wall2014.def},9={M.Bison, stages/Shiyo/drive2014.def}, 10={Akuma, stages/Shiyo/shrine2014.def}
Quotewell, a problem with transparency is happening on ikemen plus ... see:it's fixed for the screenpacks (to be more precise in old Ikemen Plus animSetColorKey was used incorrectly). As for the stages please upload the problematic one and I will check it out. Even if the problem is still there I know how to fix it (should be a matter of changing one of the bg.anim.mask lines in stages.go from 0 to -1 or maybe defaulting this value to -1).
(...)
I would like to know if this has already been identified and corrected in the GO version
ok, the game was tested on the GO versionAs mentioned in the post you quoted, if you want it to be fixed, please upload the problematic stage, so I can test it myself. chars, screenpacks and portraits mask compatibility have been already fixed in current GO build.
the same problem keeps happening ... in stages, chars, screenpacks and portraits.
animSetColorKey ... please, where do I find this parameter?
And about fight.def file, can you add a Bgdef for round, fight, k.o and win animations? This is possible using Add004 addon but impossible with mugen because you only have 1 simple layer for every action and it´s very limited to create good works.Other than stage portrait, I'm afraid none of this stuff is currently on ikemen go plus roadmap. Join the project and start implementing them if you want to get these features in foreseeable future.
Another thing that I don´t read nothing it´s about stages, please, can you add a 9000,1 portrait to them? With mugen you need to add a image for each letter or symbol but it´s very limited too.
I read that it´s possible use various portraits for select, versus and winner screens but, it´s possible do actions ( Interpolate Blend, Offset, Scale and Angle) with them?
Another thing that I like it very much in Add004 addon are the combo messages, it´s possible to add to Ikemen Go this feature?
Thank you very much for your work and waiting more news about it, see you and forgive my english...
It has been already requested to extend "1, 2, (...)" parameter feature to take into account additional parameters like music and stages, but this will require changes in the current code and the syntax will need to be different in order to parse such monstrosity. Probably in future, once it's supported, syntax will look like this:Code:num={charname, stages/stagename.def, music=musicname}using your example:Code:Ryu, stages/Suzaku2014.def, order=3, 1={Alex, stages/Shiyo/ring2014.def}, 2={Terry, stages/Shiyo/west2014.def}, 3={Sakura, stages/Shiyo/home2014.def}, 4={Ryo, stages/Shiyo/home2014.def}, 5={kfma4a}, 6={Kyo, stages/Shiyo/neogeoland2014.def}, 7={Sagat, stages/Shiyo/ayutaya2014.def}, 8={Ken, stages/Shiyo/wall2014.def},9={M.Bison, stages/Shiyo/drive2014.def}, 10={Akuma, stages/Shiyo/shrine2014.def}
[Characters] ; each character code can be contained in variables including the stages already ones
0 = randomselect
1 = homelessryu ,1
2 = ken_speed_buster.def ,2,sound/rap.mp3
3 = chunli/lee.def ,6,order = 2
4 = guillermo ,5,sound/vivaldi.ogg,order = 2
5 = cammyla.def ,7,order = 3
6 = mister_vegan ,3,order = 3
7 = agogouken.def ,3 , order = 4 ,hidden
[Stages] ;each stage on its own variable
0 = stages/training.def
1 = stages/road.def
2 = stages/bay.def
3 = stages/ruins.def
4 = stages/uglyplace.def
5 = stages/militarybase.def
6 = stages/chinatown.def
7 = stages/castle.def
[Routes] ; forced routes without taking into account the established orders
3 = 2,4,randomselect,1,6 ;Chunli first vs ken, then vs guile, then some with order three, then vs ryu and lastly bison.
1 = randomselect,randomselect,randomselect,4 ;Ryu rute always be random fights from three first orders and lastly vs akuma.
[Status] ;in char cns file
hidden.statedef = 666 ;overite the common one if exist for full games, or only has conditions if any has this char in hidden status for fun.
[Statedef 666] ;the statedef with conditions ,maybe lua is better for this
type = H
[state 666]
type= unlock
trigger1 = (if var (666) + (rank) = 999) ;some amount of point for rank variable will unlock
trigger2 = ifselect(command = "QCF_z",2) ;some command in select screen will unlock
Unlockable Characters/Palettes/Stages - Supports Triggers for:I'm in the middle of implementing this myself. Here is what I've designed when it comes to save system, characters unlocking, global scores etc.:
-Time Played
-Time Played Online
-Matches Played(can include online)
-Matches Won/Lost
-Arcade Mode results(Includes parameters for Characters used, characters fought, clear time, and times cleared)
(Fully Functional, unlocked data can be cleared through a branch I added to the Options menu~)
gametime = 0, --total amount of time played2. Above save file (table) is updated after each match (other than gametime which is updated every minute).
chars = { --[data related to individual characters]
<charname> = { --[subtable existing for each playable character in game]
<modename> = { --[subtable existing for each playable mode in game]
--stats tracked after each match
matches = 0, --played matches count
wins = 0, --won matches count
loose = 0, --lost matches count
draws = 0, --draw matches count
rankd = 0, --total rank D count
rankc = 0, --total rank C count
rankb = 0, --total rank B count
ranka = 0, --total rank A count
ranks = 0, --total rank S count
rankss = 0, --total rank SS count
--stats tracked after mode is cleared
cleared = 0, --mode cleared count
consecutive = 0, --maximum consecutive won matches count
perfects = 0, --maximum perfect matches count (flawless victory)
continues = 99, --minimum continuous count
score = 0, --maximum total score
cleartime = 999999999, --minimum clear time (in ticks, so divide by 60)
difficulty = 0, --maximum difficulty level used to clear the mode
},
},
},
scores = { --[data related to global score rankings]
<modename> = { --[subtable existing for each mode in game]
<num> = { --[subtable existing for each score saved - amount probably limited to 10]
teammode = {0, 0} --team mode selected for P1 and P2 side (0-single, 1-simul, 2-turns, 3-tag)
team = {} --slice containing character references (only 1 if single)
},
},
},
; - hidden
; IKEMEN feature: Set the paramvalue to hide a character:
; 1: cursor can move to this cell, face and face background are not
; rendered (same result as hiding selectable characters in mugen by
; placing them outside visible grid, but without need to create lots
; of unnecessary select.def slots to do so),
; 2: cell can't be selected, art is not rendered (slot is ignored until
; character is unlocked).
; 3: cell behaves like randomselect slot until character is unlocked.
; Unlocking hidden characters is handled via [UnlockContent] section.
And Finally, Branching Arcade/Story Mode(Fully functional)missed this one. In such case, discord group discussion may be better apprach. Please check your PM box.
QuoteEm no works build.bat :(you should NOT use any of the BAT and SH files. Those are for source code developers and require Go compiler to work (build - compiles ikemen go source code, get - downloads external packages used by the engine, run - compiles source on the fly and starts it, without creating executable).
Ikemen is started via Ikemen_GO.exe.
If it doesn't work probably your computer is too old to run it (opengl is required, probably also 64-bit system since the compiler is 64-bit). Also check what "debug/log.txt" says.
edit: see my next post
Oh,wait the new version is for 64 bits computers?
This is bad for me sorry :P
Ash, maybe try installing OpenAL 1.1 Windows Installer (https://www.openal.org/downloads/) (no idea if it's needed but ikemen uses openal for sound in source code).
Ikemen GO system requirements that I know about:
- GPU with decent OpenGL support (pretty much anything from the last 10 years should work, some older graphic cards may require drivers update),
- 64-bit system (not sure if there is 32-bit windows GO compiler available - if someone will send me a link to it, we could provide additional exe).
Is there a way to implement DirectX to Ikemen GO, just like the vanilla Ikemen?
anyone know if this is compatible with sdl1.2.15 ot 1.2?
https://gbatemp.net/threads/sdl-1-2-15-for-switch-libnx-based.497412/
@MangeX Hey man, in case you didn't saw.Is there a way to implement DirectX to Ikemen GO, just like the vanilla Ikemen?
I've finished implementing (https://github.com/K4thos/Ikemen-GO-Plus/issues/9) flexible bgdef parsing and rendering directly in source code (based on existing stages bgdef code), which means all bgdef, bgctrldef, bgctrl parameters and animation types are now supported via independent functions and can be implemented elsewhere without much effort. This means that the bolded requests can be fulfilled (I do think this stuff would be nice to have).QuoteAnd about fight.def file, can you add a Bgdef for round, fight, k.o and win animations? This is possible using Add004 addon but impossible with mugen because you only have 1 simple layer for every action and it´s very limited to create good works.Other than stage portrait, I'm afraid none of this stuff is currently on ikemen go plus roadmap. Join the project and start implementing them if you want to get these features in foreseeable future.
Another thing that I don´t read nothing it´s about stages, please, can you add a 9000,1 portrait to them? With mugen you need to add a image for each letter or symbol but it´s very limited too.
I read that it´s possible use various portraits for select, versus and winner screens but, it´s possible do actions ( Interpolate Blend, Offset, Scale and Angle) with them?
Another thing that I like it very much in Add004 addon are the combo messages, it´s possible to add to Ikemen Go this feature?
Thank you very much for your work and waiting more news about it, see you and forgive my english...
Quick question. Isn't there some limit on mugen where you can only have a certain amount of ports for stage select? What is the deal with that exactly? Not that I have 200 stages, but just curious if that issue would well still be an issue with this.There are no portraits for stages in mugen. What you're talking about is a trick with using fonts to render images (which already works in ikemen go plus the same way as in mugen). Proper stages portrait support is already on the roadmap for future releases (see above quoted post)
Also selfish of me to ask this one, but as someone who actually plans to use this, I want the animated ports(I've seen some others here also interested). We can all agree that we basically want it similar to say, older MVC series https://youtu.be/fNuX9cTkHJ4?t=31s animated, when selected they use "state 195"(whatever you have). I've seen it asked, but hasn't been answered.already answered (http://mugenguild.com/forum/msg.2406004)
Also hasn't been mentioned in a whileeee, but the announcer on character select, even a little note on how to do so would be appreciated.What announcer? That says character name after select? Seems like a stuff for full games (so that the voice is consistent) and something that almost noone would use, so it doesn't really fit basic engine, imo.
Also, another thing, is there any possible way using this to integrate second round themes?This will be implemented in future (support for additional optional parameters in stage DEF file that sets different bgmusic for final round.)
I'm really only suggesting this for people interested in projects, not for casual use.Yes, you showed me how to do it on the old one. I was only asking if even a note could be made as you labeled everything else.
Where does it say?
Quote15.- is possible both static and animated portraits for all characters involved (6) in select and versus?, it seems disabled the anim0 currentlyQuoteThe animated portraits, using group 0 was one of the best things added in this engine. Yes, because you no longer need to change sff of each char to customize the portraits. The Ikemen do it automatically for you. That's one of the big reasons I want Ikemen instead of Mugen 1.1.I'm planning to work on adding animated portraits back in future. No promises though.
I read the post and there are very good news! I read that now lifebar have bgdef for the animations. In mugen you have round, fight, ko, win, time over, draw and double ko. If it´s possible with all of them? The´re will be possible add more actions to the fight archive, would be great: Perfect, you lose for 1 player modes, hyper move ko and intro before round 1, it would be perfect!
Mugen it´s very limited too for create the lifebar and powerbar... You only have p1.bg0.anim, p1.bg1.anim, p1.bg2.anim, mid and front animations, the same for p2, if you need more actions then you need to use time, face, etc and it´s a little annoying... please can you add more bg actions for lifebar and powerbar sections?
About the combo counter. I like very much this part in Add004 addon because implement messages in combos. Something like 5 hits (Nice Combo), 10 hits (Great Combo) and successively.
Another messages that are nice are from info like first attack, counter, danger, etc.
And the last for portraits, name and time fonts if It would be nice to control them with animations.
Ah! you can´t use loopstart with the fight.def archive.
Wow! This project looks very good, good luck with it! See you.
I've finished implementing (https://github.com/K4thos/Ikemen-GO-Plus/issues/9) flexible bgdef parsing and rendering directly in source code (based on existing stages bgdef code), which means all bgdef, bgctrldef, bgctrl parameters and animation types are now supported via independent functions and can be implemented elsewhere without much effort. This means that the bolded requests can be fulfilled (I do think this stuff would be nice to have).
I never coded a lifebar, so please elaborate how lifebar layers works currently and what exactly should be implemented. Extra points if you could suggest parameter names, in which section of the lifebar DEF they should be placed etc).
Regarding combo messages - isn't there already combo counter in mugen lifebars? Please elaborate what exactly you mean.
That still doesn’t answer what I was asking, but I’ll just figure it out should the time come. Thanks for the response.
New snd file for scenarios, independent of the music for environmental sounds.
Commands (px.lifebar.bgdef = xxx) for the fight.def that defines a total control for x background of x player lifebar.
Exclusive sound number for name announcer on selection screen (like snd 9000,1).
Combo.msg.statedef = xxx, which defines in a personalized way how the combos system would be, at what level of damage or hits and with what sounds.
The´re will be possible add more actions to the fight archive, would be great: Perfect, you lose for 1 player modes, hyper move ko and intro before round 1, it would be perfect!In other words you want more components under [Round] section triggered by different conditions, right? Considering there are already Finish Type conditions coded for the lifebar, but used only for icons, we could as well add them here:
I read that now lifebar have bgdef for the animations. In mugen you have round, fight, ko, win, time over, draw and double ko. If it´s possible with all of them?If I understand you correctly you want following components from the [Round] section to trigger bgdef (if existing in lifebar code)
[DKODef]Alternatively storyboards system where 'bg.name' is used to declare bgdef could be implemented (when I now think about it maybe that would be faster to parse). Here is explanation from documentation:
[DKO my_element_name]
[DKOCtrlDef my_controller_name]
bg.name = bgname (string)example: KO.bg.name = somename
If this parameter is specified, you can make use of a background object. bgname is a string prepended to your background definition groups. For example, if bgname is "Scene04bg", then your background definition group must be named "Scene04bgDef", and the following background elements must begin with "Scene04bg". data/kfm/intro.def and data/kfm/credits.def are examples that use this parameter. Note that background objects are not affected by the "window" parameter. All elements of a background objects are drawn underneath all "layerX" animation objects, with the exception of elements with the "layer" parameter set at 1.
Mugen it´s very limited too for create the lifebar and powerbar... You only have p1.bg0.anim, p1.bg1.anim, p1.bg2.anim, mid and front animations, the same for p2, if you need more actions then you need to use time, face, etc and it´s a little annoying... please can you add more bg actions for lifebar and powerbar sections?I can add it to roadmap if you (or someone else) design how it should be coded in lifebar DEF file. I can't think about anything that wouldn't become a confusing mess. Stuff like character's power, life and combo count are easily accessible.
About the combo counter. I like very much this part in Add004 addon because implement messages in combos. Something like 5 hits (Nice Combo), 10 hits (Great Combo) and successively.
Another messages that are nice are from info like first attack, counter, danger, etc.
And the last for portraits, name and time fonts if It would be nice to control them with animations.Considering characters are already loaded during fight displaying animations from thier SFF file should be doable. Not sure what you mean with time, though. How? Like different animations assigned to different numbers? That doesn't sound like a good idea. (unless I missed something)
Ah! you can´t use loopstart with the fight.def archive.did you try it in Ikemen GO? I doubt the same limitation would be the case in this engine. Please check it out and let us know.
1-3 hmm. Isn't that already controllable? You can change that setting in the options. The whole, you lose the round ala SFXT. Everything else can already be done, but you'd basically be asking them to develop a tag system all together. Much of what you describe, is already doable...
1. Tag functions built into the engine
I feel that it would benefit to just have a SCTRL of this rather than have to fiddle around with uno tag (even though it's pretty good as it is) and such. Maybe have options upon how the tag works like is it following tekken tag rules, (when a character gets KOed the team loses the round rather than the partner coming out) are the characters jumping in or running in, can they attack while tagging, do they have to be in a specific spot to tag in (Like Kizuna Encounter https://youtu.be/U77h27eSa8U?t=15s), etc.
1. Yes it's doable (I even said uno tag in my post so I know it's doable) but I feel it would be better as a dedicated SCTRL that could be just inserted into a common1 file or even a dedicated play mode rather then having a separate piece of code which requires patching and such.
Root,TagMode=1I don't know why you mentioned SCTRL. What should it do? If you mean hardcoding tag behaviour in source code than I don't think it's a good idea compared to leaving details that you have mentioned to cns code. If all this tag related stuff is handled via cns than mugen authors can easily distribute different systems.
Enemy,TagMode=1
[Command]
name = "v"
command = v
time = 1
[Command]
name = "w"
command = w
time = 1
2. Offical 3v3 and 4v4 simul supportIt's already supported by default for all team modes:
Even though I am not a fan of this mode, plenty of people are and it would bring attraction towards this engine just becuase of that. Stages would have to have their own p3 and p4 triggers repectivly. (like p3startx = , p4startx =, etc) You could also apply this to the tag fuction above.
Quote1. Tag functions built into the engine
I feel that it would benefit to just have a SCTRL of this rather than have to fiddle around with uno tag (even though it's pretty good as it is) and such. Maybe have options upon how the tag works like is it following tekken tag rules, (when a character gets KOed the team loses the round rather than the partner coming out) are the characters jumping in or running in, can they attack while tagging, do they have to be in a specific spot to tag in (Like Kizuna Encounter https://youtu.be/U77h27eSa8U?t=15s), etc.Quote1. Yes it's doable (I even said uno tag in my post so I know it's doable) but I feel it would be better as a dedicated SCTRL that could be just inserted into a common1 file or even a dedicated play mode rather then having a separate piece of code which requires patching and such.
All of this is already implemented in latest GO build.
1. Tag mode is selectable from select screen the same way as Single, Simul and Turns (if you add new teammenu.itemname.tag parameter to screenpack DEF file) which makes all the characters in your team being controlled by player (or in case of side controlled by CPU - not, obviously) and sets value for trigger.
(https://i.imgur.com/NqMKKi5.png)
anyone know if this is compatible with sdl1.2.15 ot 1.2?
https://gbatemp.net/threads/sdl-1-2-15-for-switch-libnx-based.497412/@MangeX Hey man, in case you didn't saw.Is there a way to implement DirectX to Ikemen GO, just like the vanilla Ikemen?
Ikemen Vanilla Plus use SDL2 API with OpenGL functions, that´s why it can be disabled for incompatibilities and is enabled by default.
Ikemen GO Plus does not have any SDL compatibility, it uses the GLFW API (Application Programming Interface) who work and is made with Opengl only in mind, that´s why this version of the engine has very broken incompatibility with lots of systems, like Windows for example who try to redirect an older version of simple opengl functions (1.2) is the reason for the video inconveniences.
It can be solved using wrappers for every possible configuration on each user system but is more effective the use of a more flexible and universal API (SDL)
I'm on the way to implement that Simple Direct-Media Layer (SDL) to surpass those issues, DirectX and OpenGL Can/Will be secondary alternative runtimes attached.
Is better to wait until that happen ,beacuse in fact, to make any port to whatever system or hardware you Will need to adapt the core code engine (Ram management, Proccesor calls, unique optimizations) not only the API, SDL libraries in this case (the physical interface)
The actual engine code is functional but a little chaotic in organization and needs more modular presentation for anyone to understant it.
I know that the engine was made to emulate or simulate mugen, but is a new engine itself, so can be used for more than only fight games using the intuitive file system and programming that everyone know.
I think you should try it first. As was said many of these things have already been done. Unfortunately, no matter what you are going to have to “patch” somewhere or the other for things like interactivity etc. I forgot to show an example for the stage intro, 3:30. This stuff goes beyond the system at this point, it should be specific for those who want it, well you’d put the extra work in.
[youtube]https://youtu.be/vqIbC06CptY[/youtube]
this means it isnot possible to port yet or it will not work?
is there a beta version that is easier to port via sdl?(for nintendo switch)
I think you should try it first. As was said many of these things have already been done. Unfortunately, no matter what you are going to have to “patch” somewhere or the other for things like interactivity etc. I forgot to show an example for the stage intro, 3:30. This stuff goes beyond the system at this point, it should be specific for those who want it, well you’d put the extra work in.
[youtube]https://youtu.be/vqIbC06CptY[/youtube]
You can make a stage intro since the very first mugen in 1999, you just need to use properly the "stages background or foreground controllers [BGctrl] (http://www.elecbyte.com/mugendocs-11b1/bgs.html) before the round start
[youtube]https://youtu.be/uwwW_4bzcv4[/youtube]
3. Stage intros and stage fx
Now i've seen that sounds are going to be introduced but not sure if I saw mention of stage intros. Plenty of fighting games have this and one example I can think up of is any stage in KoF95, one example would be is garou stage where they jump into the foreground https://youtu.be/lTMwD9ybSAQ?t=9m2s . Also on that stage the characters have landing dust (rather water splashing) applied to them which would be cool for stages that look better with it. Also having options whether the fx add to the ones on the character, or override the ones on the character already.
[StageInfo]
zoffset = 190
autoturn = 1
resetBG = 1
localcoord = 320, 240
xscale = 1
yscale = 1
;Sets whether the stage has an intro or not
stageIntro = 1
;Sets what BGCtrl is used for the stage intro. Characters start after the BGCtrl has ended, controllers must not have a looptime trigger assigned to them.
stageIntroCtrlID = 20
[PlayerInfo]
p1startx = -70 ;Starting x coordinates
p1starty = 0 ;Starting y coordinates
p1facing = 1 ;Direction player faces: 1=right, -1=left
p2startx = 70
p2starty = 0
p2facing = -1
leftbound = -1000
rightbound = 1000
; Common effects for all of the players.
; This is used if your stage benefits from having landing effects other than standard landing effects.
effectsType = replace ; none uses the characters standard effects
; replace replaces the effects with the stages own
; add adds the effect along with the characters own
effectsAnimation = 500 ;You can also use animations from the FightFX in the data folder
effectsSound = 2 ;You can also use sounds from the common.snd in the data folder
[Files]With this in place it would be a matter of controlling actual characters behavior via stage cns code instead of depending on fightfx air and tons of new stage parameters. For example if stage has stageIntro = 1 parameter set than characters are not forced into statedef 5900 at the start of the round - they wait for stage to control them and change their state to 5900. Should be doable with my current understanding of the engine (I hope)
st = somename.cns ;States
anim = somename.air ;Animation
sound = somename.snd ;Sound
Amidweiz, now that's what I'd like to see more - fully designed feature request with explanation how it should work internally. If you upload a sample stage that could be used for tests (with stageIntroCtrlID already set and BGCtrl coded to display something before the characters have statedef 5900 assigned and internal lifebar counter starts) I think I will be able to handle the implementation.
As for the second part I think the more flexible approach would be treating stage somewhat like a character, so that it can use CNS, AIR, SND files referenced in stage DEF file, which would open gate for proper stage interactivity:Code:[Files]With this in place it would be a matter of controlling actual characters behavior via stage cns code instead of depending on fightfx air and tons of new stage parameters. For example if stage has stageIntro = 1 parameter set than characters are not forced into statedef 5900 at the start of the round - they wait for stage to control them and change their state to 5900. Should be doable with my current understanding of the engine (I hope)
st = somename.cns ;States
anim = somename.air ;Animation
sound = somename.snd ;Sound
Sounds good, I'm going to send you the stage that was shown MangeX's video and the one I initially shown (CVS Pro Train stage and KOF 95 Garou stage). The Train stage for the stage intro (It's not the best example of a stage intro but it is one) and the Garou stage for the water effects and possibly the movement (as shown in the video I first showed for the request https://youtu.be/lTMwD9ybSAQ?t=9m2s ) here is the link to them two http://www.mediafire.com/file/2hj6lnnk7hpihag/stages.rar . I'll see if I can make a mock implementation for the other requests laterthanks, I will try to implement it once I finish other things that I’m messing with.
I dont what your trying to do but I got my to work for ikemen plus only problem its the timing adjustment on the intro and timing adjustment on the lifebars rounds setting timer and fight setting timer in the fight.def and stage.defAmidweiz, now that's what I'd like to see more - fully designed feature request with explanation how it should work internally. If you upload a sample stage that could be used for tests (with stageIntroCtrlID already set and BGCtrl coded to display something before the characters have statedef 5900 assigned and internal lifebar counter starts) I think I will be able to handle the implementation.
As for the second part I think the more flexible approach would be treating stage somewhat like a character, so that it can use CNS, AIR, SND files referenced in stage DEF file, which would open gate for proper stage interactivity:Code:[Files]With this in place it would be a matter of controlling actual characters behavior via stage cns code instead of depending on fightfx air and tons of new stage parameters. For example if stage has stageIntro = 1 parameter set than characters are not forced into statedef 5900 at the start of the round - they wait for stage to control them and change their state to 5900. Should be doable with my current understanding of the engine (I hope)
st = somename.cns ;States
anim = somename.air ;Animation
sound = somename.snd ;Sound
Sounds good, I'm going to send you the stage that was shown MangeX's video and the one I initially shown (CVS Pro Train stage and KOF 95 Garou stage). The Train stage for the stage intro (It's not the best example of a stage intro but it is one) and the Garou stage for the water effects and possibly the movement (as shown in the video I first showed for the request https://youtu.be/lTMwD9ybSAQ?t=9m2s ) here is the link to them two http://www.mediafire.com/file/2hj6lnnk7hpihag/stages.rar . I'll see if I can make a mock implementation for the other requests later
if err := c.paramValue(is, sc, "anim",
stateDef_anim, VT_Int, 1, false); err != nil {
return err
}
More Arcade stuff as I wait for the SP support.Could you please elaborate which part of the video has those arcade stuff that you've mentioned? If it's rivals matches for arcade mode than it's already implemented. Here's the quote from the latest select.def that explains 2 new character's parameters that handles adjusting general order and match settings: (expanded compared to what was previously posted in this topic, fulfilling your older feature request)Spoiler, click to toggle visibilty
; - 1, 2, 3, ... (rivals)------------------------
; IKEMEN feature: The parameter alters standard arcade order system and other
; default match settings, allowing to force pre-defined matches along the
; way. paramname refers to arcade match number (for example 4 = 4th match).
; paramvalue, enclosed in {} brackets, follows the same syntax as adding a
; new character with optional stage assignment and accepts following optional
; char parameters: music, musicalt, musiclife, zoom, ai, winscreen, rounds,
; time, lifebar, onlyme. If 'onlyme' parameter is not set and you're playing
; in team mode the referenced character becomes the opposite team leader, and
; other characters follows order settings. Chars and stages referenced here,
; if not already present in [Characters] and [ExtraStages] sections as
; separate entries, won't be selectable in select screen.
;
; - maxmatches
; IKEMEN feature: This parameter makes the character ignore default
; *.maxmatches settings under [Options] section and assign different ones
; instead, allowing you to set up custom maximum number of matches to fight
; before game ends in arcade mode, as well as order priority. paramvalue is
; used as a prefix to the original names of these settings, followed by dot,
; so the new entries added under [Options] section should look like this:
; 'paramvalue.arcade.maxmatches', 'paramvalue.team.maxmatches'.
The dialogue stuff can't be done like that anyway, as I want the characters to share the palette they are using, so it must be within the character.Face sprite and conversation text existing within character doesn't make the feature not viable. It's almost the exact same thing as Victory Quote mugen functionality (that I've finished implementing in Ikemen GO on engine level some time ago), just triggered during fight, right after intro. So the difference would be mostly in different text formatting (since the text should also have data regarding faces, player number). And probably lifebar would be better place for declaring fonts and backgrounds. If Ikemen GO ever becomes a new standard for mugen creators than custom portraits for conversations may become common like Victory portraits are since mugen 1.0 release.
rival1 = "1, 1, 1, {Geese Howard. What is your connection with Shadoldo? How are you affiliated with Bison. I'm taking you in for questioning.}, 2, 1, 1, {Geese reply}"state added to Charlie's cns, for example pre-intro
[State 190, vs Geese]Right after intro the engine would check if player has rivalquote set and start rendering stuff before the match actually starts using fonts and the art declared in lifebar DEF file (or screenpack, not sure which place is better suited for this kind of feature, when it comes to existing mugen conventions).
type = rivalquote
trigger1 = enemy, name = "Geese"
value = 1
I just wanted to ask if there is a set release date or not?no set release date.
K4thos Is there a Discord server or some other place (aside from here) for GO Plus discussion exclusively? Reading about the changes you've introduced and how they impact the environment as a whole, I'd rather be in the know sooner than later. If not, cool, just curious.there is a discord only for the fork developers to discuss features that we are working on (in order to gather internal feedback, help and to inform who is developing what to not duplicate the work). No access to it, sorry. This topic is the best place if you want to be in touch with Ikemen GO Plus news.
Public Releases:
You can build the IKEMEN GO Plus with Go's gc compiler in the repository below. (keep in mind that the code hanging there is currently outdated, updated source code should be available soon, though. No public releases as of yet.
Will there be an option to disable turns/tag/team and only allow for singles?Already implemented. Works the same as removing modes from mugen - by disabling "itemname" parameter in screenpack. For example if you have this in your screenpack then only Single mode will be available (also changing order of these itemnames changes order in which they are displayed):
teammenu.itemname.single = SingleOn top of it if you leave just 1 team mode itemname in screenpack DEF file than the team selection menu won't show up at all.
teammenu.itemname.tag =
teammenu.itemname.simul =
teammenu.itemname.turns =
Arcade Mode
- Arcade (fight against AI-controlled opponents in a customizable arcade ladder)
- Team Arcade (team of fighters fights against AI-controlled opponents in a customizable arcade ladder)
- Team Co-op (team up with another player against AI-controlled opponents in a customizable arcade ladder)
Versus Mode
- Versus (choose a fighter to defeat a human opponent)
- Team Versus (choose a team of fighters to defeat team of human opponents)
- Versus Co-op (team up with another player to defeat co-op team of human opponents)
Story Mode
- Arc_name_1 (follow story mode arc designed for this mugen game)
- (...) (there can be multiple story arcs in a single game)
Network
- Versus (choose fighter(s) to defeat online human opponent(s))
- Arcade Co-op (team up with online player against AI-controlled opponents in a customizable arcade ladder)
- Survival Co-op (defeat as many opponents as you can in a row with an online human teammate)
Tournament
- Round of 32 (participate in a customizable single-elimination tournament starting from Round of 32)
- Round of 16 (participate in a customizable single-elimination tournament starting from Round of 16)
- Quarterfinals (participate in a customizable single-elimination tournament starting from Quarterfinals)
- Semifinals (participate in a customizable single-elimination tournament starting from Semifinals)
Practice
- Training (practice special attacks and combos with training KFM by stupa)
- Quick Match (practice your skills against AI controlled CPU character(s) of your choice)
- Trials (complete moves and combos trial challenges)
Challenges
- Time Attack (defeat 10 opponents as quickly as possible, beating previous time records)
- Survival (defeat as many opponents as you can on a single Health Meter)
- Survival Co-op (defeat as many opponents as you can with a human teammate, on a single Health Meter)
- Boss Rush (defeat all bosses in a row)
- VS 100 Kumite (see how many characters out of 100 you can take down)
- Time Challenge (defeat 1 selected opponent beating previous time record)
- Score Challenge (defeat 1 selected opponent beating previous score record)
- Bonus Games (defeat 1 selected bonus character beating previous score record)
Watch Mode
- Select (watch CPU controlled match of your choice)
- Random (watch endless random CPU matches, generating useful AI rank data)
- Replay (watch saved replays of your online matches)
Profile
- Records (display overall score data)
- Ranking (display rankings data)
Options (adjust game settings)
Exit (exit the game)
menu.itemname.arcade(new ones needs to be added into screenpack DEF file to show up)
menu.itemname.versus
menu.itemname.teamarcade
menu.itemname.teamversus
menu.itemname.teamcoop
menu.itemname.survival
menu.itemname.survivalcoop
menu.itemname.training
menu.itemname.watch
menu.itemname.options
menu.itemname.exit
arcadeAssigning particular mode to a group will be done by adding the group name to itemname, for example:
versus
story
network
tournament
practice
challenges
watchmode
profile
menu.itemname.challenges.survivalplaces Survival Mode into Challenges sub-group. Omitting "challenges" would result in Survival Mode available from within main menu (like in mugen).
QuoteWill there be an option to disable turns/tag/team and only allow for singles?Already implemented. Works the same as removing modes from mugen - by disabling "itemname" parameter in screenpack. For example if you have this in your screenpack then only Single mode will be available (also changing order of these itemnames changes order in which they are displayed):Code:teammenu.itemname.single = SingleOn top of it if you leave just 1 team mode itemname in screenpack DEF file than the team selection menu won't show up at all.
teammenu.itemname.tag =
teammenu.itemname.simul =
teammenu.itemname.turns =
Another question, can we define custom placements for individual character slots, instead of them all being determined based on rows/columns?no, it's still grid based. But following features makes it more flexible:
; - exclude
; IKEMEN feature: Set the paramvalue to 1 to avoid including this character
; in 'rows' and 'columns' screenpack selection grid. (similar result as
; hiding unselectable AI only characters in mugen without need to create tons
; of unnecessary select.def slots to do so) Excluded characters are not added
; to randomselect pool.
;
; - hidden
; IKEMEN feature: Set the paramvalue to hide a character:
; 1: cursor can move to this cell, face and face background are not rendered
; (same result as hiding selectable characters in mugen by placing them
; outside visible grid, but without need to create lots of unnecessary
; select.def slots to do so),
; 2: cell can't be selected, art is not rendered (slot is ignored until
; character is unlocked).
; 3: cell behaves like randomselect slot until character is unlocked.
; Unlocking hidden characters is handled via [UnlockContent] section.
I wonder if tag mode could be a game mode in the arcade selection instead of in the character selection, just a suggestion.Then we would need the same for Simul and Turns. And why just Arcade? In such case, for consistency sake, all the other modes that support teams should have it separated. Sounds bad, imo. To be honest I don't even see a point in "Arcade" and "VS Mode" as separate entries when both "Team Arcade" and "Team VS" already have Single option to choose, but that’s Elecbyte implementation, so it's there for compatibility sake. Useless (imo) modes like these can be disabled via itemname in screenpack.
A native, universal pause screen.Game pause is already implemented, works the same as in mugen (during a fight, press the button literally labeled "Pause" on your keyboard.)
You added two extra buttons correct? Not sure the total number available? So taunt could be select and pause start?7 mugen buttons + 2 new ones (intended for tag related stuff, but works the same as any others, so can be used normally in CMD files and assigned to whatever you wish)
Similar to the training menu, but all being accessible through player 1. This is ideally how I had wanted to do command list(in-game). So exiting straight to menu and or gameover instead of going to continue.Changing Esc button functionality when pressed during fight to display Tekken like menu is on the roadmap.
I’m interested to see this ranking system as well.
So about th we extra modes. Are you going to make a story mode? Don’t you need to create a base for these things? Just curious if you were, that’d be cool. What do you think about cutscenes? Think cvs series, Rugal/Akuma on roof etc. After you beat the boss hmm, various things like showing Geese falling, Rugal losing control then it goes to the characters ending. Now that I think about it, you made those SVC endings.Not implemented yet but already designed: (quote from select.def)
Game pause I mean the actual menu. Like pressing start in a normal game. I usually play on my TV with wireless controllers so having to(sounds lazy lol) get up and press on the keyboard, ruins the experience. I'm just asking what you think though.Already partially answered:
(https://i.imgur.com/N5vy7AH.png)
Changing Esc button functionality when pressed during fight to display Tekken like menu is on the roadmap.As for assigning Esc button to some button on gamepad then don't worry. I'm planning to add system button configuration (Esc, screenshot, etc.) to options screen at some point.
Cutscenes & story. Separate things being asked. In arcade mode of the cvs series, it has that tournament image, showing the characters etc, stuff like that for arcade. Then of course these So as with this game, you have two main bosses so it'd be set to each individual. When you beat Bison in cvs the base explodes, Geese falls to his "death"(oan if there is anyway to get something high quality to replicate that would be so sick, imagine? With interactivity you can really knock him off the stage.) The scenes from CVS-W, were those storyboards? Like a way to insert storyboards in-between fights (not limited to story) pretty much how SFV is now. Not very good at typing down plans, I usually just do it & figure it out as things go, but sure you get it.Storyboards other than intro and ending between fights in arcade mode could be implemented via already existing "rivals" character parameter in select.def desribed in this post (http://mugenguild.com/forum/msg.2410347). I will add it to roadmap, it's easy to implement.
The ranking, you brought up and have a list of modes that have to do with score so I was just commenting on it. So you aren't interested in that?
The score thing is pretty much the same as in various games. Tech/Reversal/Counter/Combo etc etc. He already started working on it, score staying constant till the end of arcade, but haven't had time to look into it myself, but it is being experimented on atm.We are interested in how Tatsu's score system works internally (I've even sent him a message, asking if he could share his general design, exact formulas and values, no reply unfortunately) but things like add004 CNS code and tricks to keep the value saved between matches are not needed at all for implementing this feature. Ikemen GO is an open source engine, so tricks and convoluted solutions in order to circumvent around mugen engine limitations is not something that we want to replicate.
https://www.youtube.com/watch?v=wItqlQ8Uepk
As for cutscenes I would just make the engine being able to open movie files, if you know what you're doing you can keep the quality 720p ( have not tested 1080) for like up to a minute to like 10mbs size with little to no quality loss( I doubt most of the cutscenes are longer) I would allow for more customization too if people plan to edit the old slide in cutscenes sf3 had and whatnot.see the "scene" parameter desription in the previously posted story mode desing. Movies are already planned - WebM (aka the only movie format that makes sense these days).
how the SF2 snes score system worksThanks. In other words in SF2 (and probably in many more commercial games) score is determined by individual values associated with each move. That's easy to implement and it would be a nice feature for full game developers. Probably the best way is just adding new parameter to statedef when "movetype = A". Something like "score = x" where x is the score value that should be added when attack successfully hits. But as you mentioned yourself this is not really something that would work for normal mugen compilations.
https://gamefaqs.gamespot.com/snes/588700-street-fighter-ii/faqs/25190
I dont care for a score system in fighting games but if I was to implement it I would strip it down to the most generic and easy to implement way.yep, that's exactly what is needed to make it "just work". And considering add004 already uses a system that ranks player's actions in a solid way, I hope someone will be able to analyze the common1.cns and describe how it works in detail, so that we can implement it on engine level (fully adjustable via mugen files).
What I mean is, instead of doing it on per char basis, I would assign generic points for a light,medium,heavy,grab,special,hyper etc.
Lets say a jab is worth 100 points a medium punch would be 200 heavy 300 once I got all my values set I would calculate the A B C whatever ranks at the end by how much points the user has accumulated split them up into banks lets say an 100-1000 is an F at the end or whatever and go from there.
As for unlockable bosses chars etc, the easiest way to go about it is just lock em behind points total if you wanna go into it a bit more you can add a difficulty modifier easy 1x normal 2x etc.this is how unlocking stuff is designed currently (only partially implemented but I will handle it soon). Quote from select.def:
;-------------------------------------------------------------------------------
[UnlockContent]
;IKEMEN feature: Unlock in-game content by fulfilling game progress conditions.
;Characters are locked via [Characters] 'hidden' parameter flag. Stages and
;modes are automatically hidden when any condition for unlocking them exists.
;---------------------
; Use the format:
; type:name = (condition_1), (condition_2), (...)
;
; type:name construct sets what content should be unlocked:
; char: Character filename (or full path to DEF file)
; stage: Path to stage DEF file
; mode: Mode reference:
; - arcade: Arcade Mode
; - versus: Versus Mode
; - teamcoop: Team Co-op Mode
; - survival: Survival Mode
; - survivalcoop: Survival Co-op Mode
; - training: Training Mode
; - netplayversus: Netplay Versus Mode
; - netplayteamcoop: Netplay Team Co-op Mode
; - netplaysurvivalcoop: Netplay Survival Co-op Mode
; - freebattle: Free Battle Mode
; - 100kumite: VS 100 Kumite Mode
; - bossrush: Boss Rush Mode
; When it comes to individual bonuses (generated via bonus=1 char param)
; name of the mode is the same as 'name' set in [Info] section of char
; DEF file. Story Mode arcs use the 'modename' from [StoryMode] section.
;
; Condition consists of declarations: stat, op, value, mode, char, tmode
; If there is only 1 condition brackets can be omitted. "stat", "op", "value"
; parameters are required. Save file tracks stats for each mode, character and
; team mode individually allowing you to be specific when declaring stat
; conditions via optional "mode", "char", "tmode" parameters.
;
; stat: Game stat that should be checked.
; Stats tracked globally:
; - gametime: total amount of time played
; Stats tracked after each match:
; - matches: played matches count
; - wins: won matches count
; - loose: lost matches count
; - draws: draw matches count
; - rankd: total rank D count
; - rankc: total rank C count
; - rankb: total rank B count
; - ranka: total rank A count
; - ranks: total rank S count
; - rankss: total rank SS count
; Stats tracked after mode is cleared:
; - cleared: mode cleared count
; - consecutive: max consecutive won matches count
; - perfects: max perfect matches count
; - continues: min continuous count
; - score: max total score
; - cleartime: min clear time (in seconds)
; - difficulty: max AI level used to clear the mode
; op: The equality and relational operators between stat and value:
; ==, !=, >, >=, <, <=
; value: Condition stat value
; mode: Game mode that stat check should be limited to. Use names from the
; above mentioned 'modename' list. If not set all modes will be taken
; into account (the value will be sum of counts, min or max)
; char: Character filename (or full path to DEF file) Stat check will be
; limited to this character. If not set stat check takes into account
; all characters (the value will be sum of counts, min or max)
; tmode: Team mode that stat check should be optionally limited to. Options:
; - 0: Single
; - 1: Simul
; - 2: Turns
; - 3: Tag
;
;Examples:
; Unlock kfm if total amount of time played is greater then 1 hour:
; char:kfm = gametime, >, 3600
;
; Unlock SuaveDude if:
; - arcade mode (Single) has been cleared at least 1 time with Kung Fu Man
; - total time played is greater then 1 hour
; char:SuaveDude = (cleared, >=, 1, arcade, kfm, 0), (gametime, >, 3600)
;
; Unlock stage if VS 100 Kumite Mode has been cleared in less than 1 hour
; stage:stages/mybg.def = cleartime, <, 3600, 100kumite
;
; Unlock "story_kfm2" story mode arc if "story_kfm1" arc has been cleared
; mode:story_kfm2 = cleared, !=, 0, story_kfm1
;
;Insert your conditions for content unlocking below.
Sorry if this has been suggested before, could we have adjustable bgm and sfx volume settings like in native mugen?sfx, yes - WavVolume setting will be available in the stable version.
hi guys,
well, a problem with transparency is happening on ikemen plus ... see:
(https://i.imgur.com/bQr3KBz.png)
this game of naruto works perfectly in mugen ... but see what happens in ikemen:
(https://i.imgur.com/bqrRBa7.png)
(https://i.imgur.com/IC0e3yB.png)
I would like to know if this has already been identified and corrected in the GO version
thanks
Same IKEMEN buildThis is Ikemen GO Plus topic, not S-SIZE ikemen. Here is whole intro captured in the latest build, I don't see the problem.
but the demo at the start screen, if you don’t press anything, that’s been done right?yes
QuoteSame IKEMEN buildThis is Ikemen GO Plus topic, not S-SIZE ikemen. Here is whole intro captured in the latest build, I don't see the problem.
https://www.dropbox.com/s/h7yrek432wirj86/anim.7z?dl=1
I've requested uploading that Naruto stage but adriano gt ignored it, so can't test it more.
Not much of a question, but I'm excited for this. I'm just wondering how much can the engine handle? Me, and some others I know, like to really push the limits on graphics, and last I checked, regular Ikemen couldn't handle it too well.
I'd like to try it but I do not have a 64-bit system. Could you pass it to 32 bits?there will be 32-bit version executable available (once released, there are no public releases yet). But check opengl video card requirement mentioned in the first post. If you're still on 32-bit system I'm afraid your video card may be too old to run the engine.
Same question my boy Genesis asked, since I do like pushing Mugen to its limits with my SP's, with the HD content, and with my previous encounters with Ikemen and the way it handled 32 bit sprites in the SP, it wasn't the best at times.
Same really I used 32 bit portraits for lifebar in old ikemen but was wondering how this would support 32bitPlease upload that lifebar with 32-bit images so I can test if it works as expected. No idea if the 32-bit images support is better here compared to old ikemen.
Hi are controllers supported in the ikeman plus build? Are they implemented into this already?yes, up to 4 joypads. You can also change joypad controlls directly in the options screen like in mugen.
Maybe old Ikemen Sp support? Mugen Sp's are nice and all but Really don't wanna remake an entire screenpack based on mugen versionScreenpacks are already supported. The only notable missing feature when it comes to mugen screenpack support is localcoord (which will be handled soon).
QuoteSame question my boy Genesis asked, since I do like pushing Mugen to its limits with my SP's, with the HD content, and with my previous encounters with Ikemen and the way it handled 32 bit sprites in the SP, it wasn't the best at times.QuoteSame really I used 32 bit portraits for lifebar in old ikemen but was wondering how this would support 32bitNo idea if the 32-bit images support is better here compared to old ikemen.
Alt+ Enter should be for fullscreen
Not sure if anyone asked this but..... Will it show/support more than 2 lifebars like mvc2 I guess
Some nice progress when it comes to expanding lifebar DEF functionality. Here is what I've already implemented (none of this is possible in mugen from within lifebar DEF):
- BG, BGDef, BGCtrlDef, BGCtrl support (expanded with triggers)
currently supported BGCtrlDef trigger list:Spoiler, click to toggle visibilty- optional 8 players support in [Simul Face], [Simul Name]
- new [Tag Face], [Tag Name] sections (if not present vanilla Simul sections are used instead)
- [Round] section now supports more events: Win by normal / Win by special / Win by hyper / Win by normal throw / Win by cheese / Win by time over / Win by suicide / Opponent beaten by his own teammate / Win by perfect
- [Challenger] section ("Here Comes A New Challenger" anim / bg / text, sound and config how soon players should be paused and when to end the match)
- [Simul_3P Lifebar], [Simul_4P Lifebar], [Tag Lifebar], [Tag_3P Lifebar], [Tag_4P Lifebar] - new sections for team 3p and 4p team sizes (matches with up to 8 players) for simul and tag mode, so that we can use different lifebar layout depending on team count
- [Simul Powerbar], [Simul_3P Powerbar], [Simul_4P Powerbar], [Tag Powerbar] (more than 2 players are used only if "team power share" is disabled in options), [Turns Powerbar]
- [Powerbar] levelX.snd now supports 'pX.' prefix in order to optionally differentiate sounds among players (or to disable them for particular player if paramvalue is set to '-1, 0')
- lifebar changing color depending on health (pX.front.spr / pX.front.anim now can store additional value in the name e.g. pX.front90.spr, which is used to swap the current front spr / animation to this one if player's life matches the percentage value. There can be multiple frontX spr/anim assignments (no hard limits).
Here is an example of a simul 3p vs simul 4p match interrupted by challenger (default lifebar using optional [Simul_3P Lifebar], [Simul_4P Lifebar], [Challenger] sections. Only 2 powerbars and faces because adding more with this lifebar design would look even more silly)
(https://i.imgur.com/5rrFfdM.jpg)
There is still some work to make the lifebar DEF file flexible enough to make convoluted explode lifebars workaround obsolete. Next on the schedule are events like "First Attack", "Danger", "Reversal", "Counter", combo text, guard bar, coloring powerbars etc. It's becoming more and more troublesome to implement this stuff using current lifebar due to missing art and sounds, so I'm thinking about porting add004 lifebar (which is coded entierly with common1.cns and fightfx - there are like 2 sprites in fight.sff) to normal fight.def file, so that all new features can be showcased (something that can be used as a reference for those interested in working with ikemen GO Plus). I will contact Shiyo Kakuge if he is ok with this.
edit: tagging @GaziraAgain:, since he requested some of these features.
Thanks Ash!
Well no one answers my question?This is disappoinitng if a engine is made but doesnt want to be shared with users,bah.
Well no one answers my question?This is disappoinitng if a engine is made but doesnt want to be shared with users,bah.
devs are active they answered a persons question in github.I followed this but it says somethings are missing i dont have linux so i cant use get.sh file.he explained detally how to compile it for linux https://github.com/K4thos/Ikemen-GO-Plus/issues/18 .I wanted something like this.
Question: Its possible to implement zoom for win pose like on KoF XIII?
Thanks Ash!
Mind you bizz @Koopa901: :mlol:
Will there be support for menu controls, like for the menu icons scrolling other than what Mugen currently does?
This concept I made for Mugen, its coded but it only scrolls up and down with Mugens current functions?
(https://i.imgur.com/pV7azee.png)
(https://i.imgur.com/SLJm2Ce.png)
Thanks Ash!
Mind you bizz @Koopa901: :mlol:
Will there be support for menu controls, like for the menu icons scrolling other than what Mugen currently does?
This concept I made for Mugen, its coded but it only scrolls up and down with Mugens current functions?
(https://i.imgur.com/pV7azee.png)
(https://i.imgur.com/SLJm2Ce.png)
Cant wait to see the SP out in a decade >:[
yeah mane....eating all that delicious looking ass food! Where those screenpacks at?!
Finally i managed to compile it.Please add joystick support so i can play it.
Does anyone has any news about this project? Was it completely abandoned by the coders!? I was so hyped about the screenpack support update that I bought a new laptop only to run it lmao.
I guess there is some light in the horizon then.
Does anyone has any news about this project? Was it completely abandoned by the coders!? I was so hyped about the screenpack support update that I bought a new laptop only to run it lmao.The development in the Ikemen GO repository at OSDN is ongoing.
Does anyone has any news about this project? Was it completely abandoned by the coders!? I was so hyped about the screenpack support update that I bought a new laptop only to run it lmao.The development in the Ikemen GO repository at OSDN is ongoing.
In my opinion, K4thos and ShinLucho should provide pull requests with their improvements and fixes from Ikemen GO Plus at OSDN.
This would be beneficial for the engine, if they are not interested in developing their fork anymore.
The development in the Ikemen GO repository at OSDN is ongoing.
In my opinion, K4thos and ShinLucho should provide pull requests with their improvements and fixes from Ikemen GO Plus at OSDN.
This would be beneficial for the engine, if they are not interested in developing their fork anymore.
Well i tried one of comittments of osnd but it just opens and immdiately closes on windows.
Hopefuly K4thos comes back and adds comments to the code.
So... that's great news!?
Ikemen go updated at osdn but looks like it now requires new github software thing for compile.You should upload the compile for your peers still stuck on the first step.
Nvm i figured it out.
Well i couldnt upload to mediafire but i uploaded to this site https://www.sendspace.com/file/h1pbw9 Well will you help me to add add004 stage effects?
Do you think it's possible to port Ikemen Go Plus to all platforms, including Android and iOS?
OK This is another build of Ikemen Go.
The main difference with the one that Adnan uploaded is that it supports fntv2 (Ported from a fork by ShinLucho) and some bugfixes by me.
It supports most of the mugen 1.1 features (fntv2 and png sprites), localcoord in screenpacks is not supported. (In characters localcoord works)
Download: http://www.mediafire.com/file/o9mn5jlb112rcqm/ikemen_go_14-02-2019.zip/file
The repo: https://github.com/Windblade-GR01/Ikemen_GO
EDIT: In my rig the fullcolor/png sprites does not work on the Intel graphics it only works on the Nvidia for some reason...
I would like to some people test in their PC to see if Png sprites works on their end.
EDIT:
Localcoord in Ikemen works different. Mugen in widescreen with 4:3 characters cuts the bottom of the resolution.
In Ikemen the localcoord works always in a 4:3 scale and adds horizontal space.
;--------------------
;Blink on Player Hit
[Statedef -30]
[State -3, VarSet]
type = VarSet
trigger1 = sysvar(3) <= 0
trigger2 = sysvar(3) <= 0
trigger3 = sysvar(3) > 35
ignorehitpause = 1
sysvar(3) = 0
[State -3, VarSet]
type = VarSet
triggerall = !IsHelper
triggerall = stateno != [150,155]
trigger1 = MoveType = H
trigger1 = Time > 0
ignorehitpause = 1
sysvar(3) = 30
[State -3, VarAdd]
type = VarAdd
trigger1 = StateType != L
trigger1 = MoveType != H
trigger1 = sysvar(3) > 0
ignorehitpause = 1
sysvar(3) = -1
[State -3, NotHitBy]
type = NotHitBy
trigger1 = StateType != L
trigger1 = MoveType != H
trigger1 = sysvar(3) > 0
ignorehitpause = 1
value = SCA
time = 1
[State -3, PalFX]
type = PalFX
triggerall = Alive
trigger1 = StateType != L
trigger1 = MoveType != H
trigger1 = GameTime % 4 = 0
trigger1 = sysvar(3) > 0
ignorehitpause = 1
time = 2
add = 250,250,250
;--------------------
OK This is another build of Ikemen Go.
The main difference with the one that Adnan uploaded is that it supports fntv2 (Ported from a fork by ShinLucho) and some bugfixes by me.
It supports most of the mugen 1.1 features (fntv2 and png sprites), localcoord in screenpacks is not supported. (In characters localcoord works)
Download: http://www.mediafire.com/file/o9mn5jlb112rcqm/ikemen_go_14-02-2019.zip/file
The repo: https://github.com/Windblade-GR01/Ikemen_GO
EDIT: In my rig the fullcolor/png sprites does not work on the Intel graphics it only works on the Nvidia for some reason...
I would like to some people test in their PC to see if Png sprites works on their end.
Something unfortunate happened, the build you released closes imediately after launch.
That's because you need copy the mugen files inside the folder...
I'm gonna post a ready to use folder for download.
Since you're at it, could you please explain the exact steps on how to install a screenpack on Ikemen GO?
Well dee2ever,go is now have a mp3 supportIf he compiled the newest exe, you are still using the old one with the same problems. You've been able to use 1.0 screen packs since vanilla Ikemen, same goes for plus. http://mugenguild.com/forum/topics/ikemen-table-contents-please-read-first-175520.0.html
Isn't that eve, winmugen?
You seem to be using the same old version if...Well dee2ever,go is now have a mp3 supportIf he compiled the newest exe, you are still using the old one with the same problems. You've been able to use 1.0 screen packs since vanilla Ikemen, same goes for plus. http://mugenguild.com/forum/topics/ikemen-table-contents-please-read-first-175520.0.html
I assume, you mean port as in drag/drop. It's not hard especially with http://mugenguild.com/forum/ikemen-general-discussion-and-help.427
if you refuse to do any work then nope. Local Cord isn't supported so any SP with one will crash in GO.
So good new and bad news...
The Good, PNG files are working and loading just fine.
The Bad: Since SP localcoord doesn't work my current WIP SP that is in 1080P looks like this lol but its a start!Spoiler, click to toggle visibilty
Adan said it was the most updated version of Go, same as the fork. MP3 definitely is an issue, I even converted all sounds to ogg and it cuts off frequently https://youtu.be/2YnaQrvAKFY
Tbh, I kinda got bored of waiting for local cord, but if you ever need someone to mess around with stuff with, I use Ikemen exclusively to make all my content.So good new and bad news...
The Good, PNG files are working and loading just fine.
The Bad: Since SP localcoord doesn't work my current WIP SP that is in 1080P looks like this lol but its a start!Spoiler, click to toggle visibilty
Use anim scale? What would be the downside doing so with a SP, not an expert. You’ve been waiting to do that forever good, finally eh.
EDIT: In my rig the fullcolor/png sprites does not work on the Intel graphics it only works on the Nvidia for some reason...
I would like to some people test in their PC to see if Png sprites works on their end.
Progress on screenpack localcoord.
(https://i.imgur.com/7bn5Hjh.png)
I'm not sure about what I'm doing but it's working.
EDIT: Notice how mugen is cut's the bottom of the screen (And borders) in this screenpack (This explains why it looks so high)
EDIT2: This is the best I can do it's not perfect (p1/p2.face doesn't coordinate scale) but it the best I can do....
Kr4thos code broke my will...
(It really says something that the lua code is more complex/entangled than the go code, it even has his own custom parser)
(https://i.imgur.com/YkV69lw.png)
It's 2am I'm going to sleep.
Yup, for now anim scale it's the only solution.
And about localcoord it's ovious that it k4thos will never do it. So i will do it. (I also got tired of waiting)
https://github.com/Windblade-GR01/Ikemen_GO (The exe I posted is based on this)
This is a fork that i'm making and i'm implementing localcoord (Read: working on it)
But first I have to fix the mp3 loading.
EDIT: Supersuehiro doens't have the lua screenpack files on his repo (I,m gonna see if he can post them) so the kr4tos one are the only avalible.
EDIT2: After working on fixing the mp3 i noticed that is easier to rebuild the music loading from the ground up.
Well it seems that i'm gonna work on implementing SP localcoord first. (In the weekend)
Progress on screenpack localcoord.
...
I'm not sure about what I'm doing but it's working.
EDIT: Notice how mugen is cut's the bottom of the screen (And borders) in this screenpack (This explains why it looks so high)
EDIT2: This is the best I can do it's not perfect (p1/p2.face doesn't coordinate scale) but it the best I can do....
Kr4thos code broke my will...
(It really says something that the lua code is more complex/entangled than the go code, it even has his own custom parser)
...
You are making a SDL fork? Awesome! I would like to see you repo.
And for the people interested in localcoord: I decided that editing the k4atos lua files was a waste (I simply cant understand his code) so I edited the lua command parser so it supports screenpack scale.
It maybe be ready today or tomorrow (But don't count on it)
Damn dude you're fast, good stuff.
Whats next? MP3 support!?
Remember back when K4thos said a new button had been added? If start could be pause and trigger the actual pause as it does on the keyboard, select could be the taunt. Instead of building a pause screen in the characters.
type CommandList struct {
Buffer *CommandBuffer
Names map[string]int
Commands [][]Command
DefaultTime int32
DefaultBufferTime int32
}
luaRegister(l, "getcommandNames", func(*lua.LState) int {
if sys.netInput == nil && sys.fileInput == nil {
level := int32(numArg(l, 1))
sys.com[sys.debugWC.playerNo] = level
for _, c := range sys.chars[sys.debugWC.playerNo] {
l.Push(lua.LTable(c.cmd[0].Names))
}
}
return 0
})
Maybe you should try to mess with.
setLuaSpriteOffsetX()
And
main.screenOverscan
The required value varies by screenpack and resolution.
for example the winmugen pack requires.
main.screenOverscan = -53
and
setLuaSpriteOffsetX(0)
MUGEN is really quirky with screenpacks.
Wolf release your SP NAAAAOOOOOOW!
It's working for me.Make sure you get the latest verison.If you cant change buttons then edit config.json file in data folder.Also gacel,can you add interactive mugen in next update?And were?
A question for all of you:
I´m doing this project..
http://mugenguild.com/forum/topics/marvel-vs-capcom-extreme-marvel-vs-capcom-2-characters-project-176156.600.html
is a good choice that I migrate all of this mugen 1.1 project into the last version of Ikemen that is... Ikemen go plus (maybe?).
Considering that this engine will grow too..
Supports HD resolution and is the same way to code like mugen?
And there are a easy way to install this engine?
Is anyone else experiencing audio cut-off/injection delay in regards to character sounds? I think it's an issue with sounds playing on the same channel.
Is anyone else experiencing audio cut-off/injection delay in regards to character sounds? I think it's an issue with sounds playing on the same channel.It’s the music, not character sounds
A question for all of you:Literally, the only real setback for you would be the 1.1 SP implementation. No reason for you not to. I suggest just adding a few of your characters to it and playing around with it. Most importantly, you need this.(https://i.imgur.com/5rrFfdM.jpg) You could already do 3v3 since years ago, no one had built anything for it. You don't need some crazy workaround either.
I´m doing this project..
http://mugenguild.com/forum/topics/marvel-vs-capcom-extreme-marvel-vs-capcom-2-characters-project-176156.600.html
is a good choice that I migrate all of this mugen 1.1 project into the last version of Ikemen that is... Ikemen go plus (maybe?).
Considering that this engine will grow too..
Supports HD resolution and is the same way to code like mugen?
And there are a easy way to install this engine?
Then im really sure you are using old version of ikemen go.K4thos repo is outdated.Update your exe.If you cant then install joytokey software.
It’s the music, not character soundsI know what I said. They're both issues.
I’m not “telling” you asked, never have had issues with character sounds, only music, but whatever.It’s the music, not character soundsI know what I said. They're both issues.
Gacel, when you get the chance, if you want to work on some stuff, email me please.
EDIT:
xxJoe_NoeFER94xx Here is a Updated EXE from my fork:
http://www.mediafire.com/file/ode8t9a7qnocdyx/Ikemen_GO_15-02-2019.zip/file
"JoystickConfig":[{
"Joystick":0,
"Buttons":["-7","-8","-5","-6","0","1","4","2","3","5","7","6","8"]
},{
"Joystick":1,
"Buttons":["-7","-8","-5","-6","0","1","4","2","3","5","7","6","8"]
}],
Ikemen does not have a gamepad configuration (In gui at least)
You have to modify the "JoystickConfig" inside the config.json file.
This oneCode:"JoystickConfig":[{
"Joystick":0,
"Buttons":["-7","-8","-5","-6","0","1","4","2","3","5","7","6","8"]
},{
"Joystick":1,
"Buttons":["-7","-8","-5","-6","0","1","4","2","3","5","7","6","8"]
}],
Trivia: you can add more than 2 players for 4 player (Or more) support
The full config.json file created by ikekemn go at launchSpoiler, click to toggle visibilty
As you can see "JoystickConfig" and "KeyConfig" are two separate things.
There is no way of configuring "JoystickConfig" from inside the engine.
Basic things about joystick config the minus are controller axis and the positives are controller buttons.
I think their is a bug in arcade mode, you fight the same first order character over and over and you dont move to the next order character.
Hey HUNGRY WOLF here is a updated script folder this fixes the screenpack cutoff.
https://www55.zippyshare.com/v/Cyz8wvb3/file.htmlSpoiler, click to toggle visibilty
EDIT: I screwed up the upload you have to uncomment "main.normalSpriteCenter = 0" inside main.lua
is it on suehiro's osdn or where should I be looking? From what I see Gacel and Suehiro have been doing some recent work, gacel implemented all the stuff he posted here and suehiro last fixed a bunch of stuff and even added mp3 support. It'd be nice for a merge of both
Is anyone else experiencing audio cut-off/injection delay in regards to character sounds? I think it's an issue with sounds playing on the same channel.
I know you are watching, so I'll also show this.. Just imagine this with your setup etc Name display was always the only thing.Spoiler, click to toggle visibilty
Old video, but I've been messing with this for years, name display was always the only setback.
Has anyone been able to compile this one? Since it uses new extensions like BEEP for mp3, so you cant compile it like the abandonded ikemen go plus right?
Has anyone been able to compile this one? Since it uses new extensions like BEEP for mp3, so you cant compile it like the abandonded ikemen go plus right?
You have to download the new build from osdn then tap get, you will download all the files from repo then paste inside the ikemen folder the script folder from gacel latest build. place all the necessary mugen files for ikemen (chars, stages) gacel has a zip file with necessary mugen files a couple pages back at this thread. After you place all those files inside the ikemen folder press windows build icon and an ikemen exe will be created. Mp3 sound works and tested cvs2 screenpack for winmugen that also works.
Has anyone been able to compile this one? Since it uses new extensions like BEEP for mp3, so you cant compile it like the abandonded ikemen go plus right?
You have to download the new build from osdn then tap get, you will download all the files from repo then paste inside the ikemen folder the script folder from gacel latest build. place all the necessary mugen files for ikemen (chars, stages) gacel has a zip file with necessary mugen files a couple pages back at this thread. After you place all those files inside the ikemen folder press windows build icon and an ikemen exe will be created. Mp3 sound works and tested cvs2 screenpack for winmugen that also works.
It would be pretty awesome if you shared that compiled folder with all those files, I'm sure everyone and I would be very great full of your contribution.
oto: NewContext can be called only once
goroutine 1 [running, locked to thread]:
github.com/yuin/gopher-lua.(*LState).PCall.func1(0x8fa338, 0xc00005a280, 0xc000077c00, 0x0, 0x0, 0x0)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/go/src/github.com/yuin/gopher-lua/state.go:1634 +0x650
panic(0x821c20, 0x962a70)
C:/Go/src/runtime/panic.go:513 +0x1c7
github.com/hajimehoshi/oto.NewContext(0xbb80, 0x2, 0x2, 0x2580, 0x0, 0x0, 0x0)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/go/src/github.com/hajimehoshi/oto/context.go:60 +0x2a8
github.com/hajimehoshi/oto.NewPlayer(0xbb80, 0x2, 0x2, 0x2580, 0x2580, 0x2580, 0x1)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/go/src/github.com/hajimehoshi/oto/context.go:89 +0x54
github.com/faiface/beep/speaker.Init(0xbb80, 0x960, 0x0, 0x0)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/go/src/github.com/faiface/beep/speaker/speaker.go:42 +0x16f
main.(*Bgm).ReadMp3(0x7c8a68)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/src/sound.go:377 +0x183
main.(*Bgm).Open(0x7c8a68, 0xc000fe4300, 0x15)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/src/sound.go:364 +0x12a
main.scriptCommonInit.func14(0xc00005a280, 0x967400)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/src/script.go:197 +0x5f
github.com/yuin/gopher-lua.callGFunction(0xc00005a280, 0x0, 0x1)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/go/src/github.com/yuin/gopher-lua/vm.go:136 +0x47
github.com/yuin/gopher-lua.init.3.func26(0xc00005a280, 0x7c0c0202, 0xc000196000, 0x0)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/go/src/github.com/yuin/gopher-lua/vm.go:717 +0x39b
github.com/yuin/gopher-lua.mainLoop(0xc00005a280, 0xc000196000)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/go/src/github.com/yuin/gopher-lua/vm.go:31 +0xe1
github.com/yuin/gopher-lua.(*LState).callR(0xc00005a280, 0x0, 0xffffffffffffffff, 0x0)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/go/src/github.com/yuin/gopher-lua/state.go:876 +0x24e
github.com/yuin/gopher-lua.(*LState).Call(0xc00005a280, 0x0, 0xffffffffffffffff)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/go/src/github.com/yuin/gopher-lua/state.go:1613 +0x4f
github.com/yuin/gopher-lua.(*LState).PCall(0xc00005a280, 0x0, 0xffffffffffffffff, 0x0, 0x964600, 0xc0011c3f80)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/go/src/github.com/yuin/gopher-lua/state.go:1676 +0xe1
github.com/yuin/gopher-lua.(*LState).DoFile(0xc00005a280, 0xc000060900, 0xf, 0x964920, 0xc0000c52f0)
C:/Users/Jim/Desktop/ikemen_go-8644bb1/go/src/github.com/yuin/gopher-lua/auxlib.go:394 +0xc9
main.main()
C:/Users/Jim/Desktop/ikemen_go-8644bb1/src/main.go:235 +0x15c2
stack traceback:
[G]: in function 'playBGM'
script/main.lua:674: in function 'f_resetBG'
.\script\select.lua:704: in function 'f_selectAdvance'
script/main.lua:1542: in function 'f_mainMenu'
script/main.lua:2116: in main chunk
[G]: ?
tried new one,do I compile this in a different way?
its cool I got it to work,tho it doesnt work with 1.0 screenpacks and breaks main lua sometimes
No seeing it, can I get a link to the info? ... I need coffee.
Edit - Just noticed it, see I did need coffee lol.
yep nevermind,although cant get 1.0 screenpack to work on it even tho hungry wolf seems to pull it off a little bit
No seeing it, can I get a link to the info? ... I need coffee.
Edit - Just noticed it, see I did need coffee lol.
Finish your SP already : lol
Fixed an empty palette as it is when sffv2's palette number is less than MaxPalNo
Fix for the moment that it falls on mp3 add-on loading
There is a bug that the round does not end so we will return Win related updates
Tell him.......NOOO!!!!
From now on I will upload the releases to github.
https://github.com/Windblade-GR01/Ikemen_GO/releases
And as always the required mugen files.
http://www.mediafire.com/file/i2u70ordfjqj186/Ikemen_Mugen_Files.zip
From now I will not upload a new release until I:
- Implement localcoord for lifebars.
- Or Remove the openAL dependencies.
- Or Fix the infinite rounds bug.
Anyways if someone wants to compile the builds himself it's not that hard and I posted the build instructions.
(Honestly sooner or later we need a new tread that could be updated because K4thos left the development)
Theres something wrong in ikemen go.When you try to do special moves of your chars.It is easier to execute on right side than left side.However this doesnt exist on mugen 1.0/1.1 as you can execute moves easier on both sides.Also can you add interactive stuff on your next update?
Theres something wrong in ikemen go.When you try to do special moves of your chars.It is easier to execute on right side than left side.However this doesnt exist on mugen 1.0/1.1 as you can execute moves easier on both sides.Also can you add interactive stuff on your next update?
Maybe Is your keyboard, I will search a way to test frame perfect stuff to see if is a problem with the engine.
Characters as stages (Interactive Stages), maybe will be a new feature but first SuperSuehiro, NeatUnsou and I have to finish the core parts of Ikemen (On my end is full lifebar support) after that I will consider adding features beyond the one already in MUGEN.
For now you can use Statedef -20 and -30 (In common1.cns) to make global coding on all characters.
hi, I need two helps:
1. how to disable ducking sound effect while fighting?
2. how to hide players in game? in mugen, we can do such by pressing:
- ctrl+alt+1 = hides player 1
- ctrl+alt+2 = hides player 2
- ctrl+alt+3 = hides player 3
- ctrl+alt+4 = hides player 4
can we do the same in Ikemen too?
pls help...thanks in advance
Gacel our saviour!!! Thank you for the hard work!!!! Very grateful to have someone pick up what was abandoned by K4thos! I was wondering Gacel, are you aware of superpauses not pausing projectiles? I was testing out and when a character does a sper pause and the enemy shoots a projectile before it, the projectile does not pause. Only helpers pause. Bug?
Theres something wrong in ikemen go.When you try to do special moves of your chars.It is easier to execute on right side than left side.However this doesnt exist on mugen 1.0/1.1 as you can execute moves easier on both sides.Also can you add interactive stuff on your next update?
Maybe Is your keyboard, I will search a way to test frame perfect stuff to see if is a problem with the engine.
Characters as stages (Interactive Stages), maybe will be a new feature but first SuperSuehiro, NeatUnsou and I have to finish the core parts of Ikemen (On my end is full lifebar support) after that I will consider adding features beyond the one already in MUGEN.
For now you can use Statedef -20 and -30 (In common1.cns) to make global coding on all characters.
Well i tried again on mugen 1.1 i can do special moves on all sides easily.But in ikemen go,i cant do.For example i cant do kaiser wave on left side but i can do it easily on right side.Also thanks i will try to add those.
Ducking sound effect?
In my end there is no sound when ducking.
Ducking sound effect?
In my end there is no sound when ducking.
He means audio ducking (https://en.wikipedia.org/wiki/Ducking), where sounds and music become quieter as other sounds play. This has been a thing since base IKEMEN.
Ducking sound effect?
In my end there is no sound when ducking.
He means audio ducking (https://en.wikipedia.org/wiki/Ducking), where sounds and music become quieter as other sounds play. This has been a thing since base IKEMEN.
yes, you got me right. pls lemme know if its pos not to lower the bgm volume while other sounds are on the go !!
Can you show me example of how to add interactive stuff?Cus i copied and pasted interactive codes on common1 but it doesnt work.
Aaaaa that thing. (Sorry English is not my native language) As I said a audio system rewrite is in progress. (NeatUnsou already made a lot of progress)
The audio ducking is caused by the dumb openAL audio audio normalizer (At least I thinks is the openAL "Enhancements") we have no way to disable it so rewrite the current audio system is our better option.
The engine needs a lot of refactoring. The last updated modified the whole render to improve compatibility with integrated Intel GPUs and other stuff. (Again NeatUnsou's work)
Also the BGM ducking also happens when using MP3s? (I'm asking this beacuse the MP3 player uses a whole different audio system)
Hey @Gacel: https://osdn.net/users/neatunsou/pf/ikemen_go/scm/commits/72a56b9d103b64c74e5232544867925793d88a1b
looks like neatunsou fixed the pause and superpause with projectiles bug, is he reading our issues on the forums? Or you guys stay in contact with eachother? Anyway, this is great news!
Gacel
Was going to ask,think you can check the zoomout option? It seems too zoom out extreme even if I decrease it no matter what,wasnt having this issue in Ikemen Plus.
No, neatunsou only info is his profile in OSDN. We are not in contact.
Considering that neatunsou merged my work maybe they read this thread. (Or that superpause bug was a know bug)
Anyway it would be great if it posted on this tread.
There is a more updated go plus versión that kathos did but forget to upload on the Github with MP3 ,fnt2 and some other things dated from September 2018
And Even there is a discord chat for the fork
What are your current plans @Neat Unsou: ?Known bug fixes and implementation of 1.1 features.
Confused to what the new download process is for y'all's builds.
I assume it's different from the one listed on Kathos' first post and GitHub.
I agree with the suggestion of starting a new topic for this.
I have been having problem with characters running that I needed to rename stateno 100,and also nowalk works different than mugen,preventing me from running as well
Confused to what the new download process is for y'all's builds.
I assume it's different from the one listed on Kathos' first post and GitHub.
I agree with the suggestion of starting a new topic for this.
It's the same honestly, I've been grabbing the builds from neatunsou's repo on osdn since he tends to merge gacel's fixes as well. There's an updated way to build these I think 1 or 2 pages before that Gacel explains. But it's pretty much the same, just make sure you update sources from get.sh, I think recent ones have kind of flip flop Ed around
Ok, when I try to open DeathScythe's Mugen Ultimate Tournament, the game just closes on startup.
Compatibility issues again?
@K4thos Do you still plan to implement tournament mode and universal tag system to the engine?
amazing! Thank you for the fixes!
And on the topic of 8 vs 8 etc, I remember in Ikemen Plus 0.3 we were able to add in additional lifebars for the rest of the characters if you did more than 2v2. So if you had 3v3, a 3rd lifebar could appear for the 3rd team member, and this was done simply by adding "p5" and "p6" in the lifebar def file in Ikemen Plus. Here's an example I did in it, Ikemen plus 0.3:
(https://i.imgur.com/2OmLr69.jpg)
And you had all the permiters as you did the rest of the lifebars, like the size, positioning, etc, simply by adding "p5." or "p6." So in this pic I made the 3rd partner's lifebars smaller simply by editing it in the def file. Thoughts if this will get implemented in the future?
Obviously take your time, because you guys have gotten so far in Ikemen and its amazing to see the progress!
this char: http://www.mediafire.com/file/gt40svdnd4bzru7/Ember+Eputh-CKOFM.rar
Loads perfectly on mugen and winmugen, but not on IKEMEN...can anyone find out why?
I tried him in ikemen and mugen, so basically the only thing you can do is hit hte directional keys and CPU will activate and do a bunch of stuff. Its working fine for me on ikemen, what seems to be the specific issue you have? Working ok on my end.
I tried him in ikemen and mugen, so basically the only thing you can do is hit hte directional keys and CPU will activate and do a bunch of stuff. Its working fine for me on ikemen, what seems to be the specific issue you have? Working ok on my end.
you sure about that? I use IKEMEN plus go and when I try to play with that char, I see this error message:
(http://img10.lostpic.net/2019/03/05/576a1c674d17ee6ceac0baed6838d542.png)
that's not ikemen Go plus, you are using an old Ikemen 0.3 with old ssz code. The new one uses google's golang and that is what this thread is about. It is quite confusing because there are so many ikements out there, but you have to download the latest Ikemen Go Plus in the thread. It should work then.
that's not ikemen Go plus, you are using an old Ikemen 0.3 with old ssz code. The new one uses google's golang and that is what this thread is about. It is quite confusing because there are so many ikements out there, but you have to download the latest Ikemen Go Plus in the thread. It should work then.
can you provide me the link of the exact one you are using pls?
Being able to switch sff on the fly huh.
I'd implement that as somekind of "invisible" tag, as doing it "on the fly" would pause the game when the transofrmation happens; at least the first time it does.
I'd implement that as somekind of "invisible" tag, as doing it "on the fly" would pause the game when the transofrmation happens; at least the first time it does.
yep, this is exactly how I imagine it. Like it'll select the 2nd form as an invisible character, no lifebar or displayname, but it wont count as a team member. Then there would have to be some kind of statedef to trigger this. So probably in simple terms, ability to invisible select and invisible tag a character to "transform" into them.
So basically more things to be automated? Hmm. Have any of you messed with screen-bound? Does it work as intended? Sometimes it feels as though it doesn't, might be stages though. Also which is the most updated version.
http://www.mediafire.com/file/97hgvaxyh2j4n2p/Ikemen+GO+Plus.zip (http://www.mediafire.com/file/97hgvaxyh2j4n2p/Ikemen+GO+Plus.zip)
http://www.mediafire.com/file/97hgvaxyh2j4n2p/Ikemen+GO+Plus.zip (http://www.mediafire.com/file/97hgvaxyh2j4n2p/Ikemen+GO+Plus.zip)
Wah..You are a Life saver! Now I can play with all of my fav chars abesnt issue. Btw, there are some chars that use high gfx while attacking (i.e. donald edits). While playing with them, the frame passes too slow on IKEMEN while I can play with them on mugen real smooth. I guess video setting from the options might be tricky for that purpose. Unfortunately I have no knowledge on that. So if you provide some fix would be so nice of you...you are an angel living among men 0:)
A question as well, I have used ikemen and I dunno, how does it handle the little intricacies when it comes to mugen chars ? It felt a bit off when using some of the chars I've been using for years at this point
src/main.go:46:21: undefined: syscall.NewLazyDLL
src/main.go:48:21: too many arguments in call to syscall.Syscall
src/main.go:49:20: undefined: syscall.GetStdHandle
src/main.go:49:41: undefined: syscall.STD_OUTPUT_HANDLE
src/main.go:50:19: undefined: syscall.GetStdHandle
src/main.go:50:40: undefined: syscall.STD_INPUT_HANDLE
If I was updating the engine I would fuse all of your branches into 1 its way more user friendly, gonna keep an eye on this.
A question as well, I have used ikemen and I dunno, how does it handle the little intricacies when it comes to mugen chars ? It felt a bit off when using some of the chars I've been using for years at this point.
I know mugen is closed source and you guys are doing your best to emulate it and its a teething period but I believe its still worth asking about.
A question as well, I have used ikemen and I dunno, how does it handle the little intricacies when it comes to mugen chars ? It felt a bit off when using some of the chars I've been using for years at this point
They've made some huge progress, but yes I do have the same feelings about just the little intracracies as well. Example, this code behaves differently in Ikemen GO, vs Mugen 1.0, 1.1 (this is during an attack in which the character's position can be moved if holding forward):
[State 1900, GoFwd1]
type = VelAdd
trigger1 = command = "holdfwd"
x = 1.2
[State 1900,GoFwd2]
type = VelSet
trigger1 = command = "holdfwd"
trigger1 = Vel X < 0
x = 0
In Ikemen the velocity is atleast 2x greater than it should be, but I think if we post examples it will give them a good idea of what some issues are at present. But I have full faith in their ability to fix things like this.
Also there is no "SPEED" option in the menu, for example Normal, Fast 1, Fast 2, etc. Ctrl + S toggles speed but its either to ofast or too slow, and you have to click keys every round.
Knockback is higher in IKEMEN, which also extends to cornerpush.
I cant compile it in Linux... :(Quotesrc/main.go:46:21: undefined: syscall.NewLazyDLL
src/main.go:48:21: too many arguments in call to syscall.Syscall
src/main.go:49:20: undefined: syscall.GetStdHandle
src/main.go:49:41: undefined: syscall.STD_OUTPUT_HANDLE
src/main.go:50:19: undefined: syscall.GetStdHandle
src/main.go:50:40: undefined: syscall.STD_INPUT_HANDLE
I cant compile it in Linux... :(Quotesrc/main.go:46:21: undefined: syscall.NewLazyDLL
src/main.go:48:21: too many arguments in call to syscall.Syscall
src/main.go:49:20: undefined: syscall.GetStdHandle
src/main.go:49:41: undefined: syscall.STD_OUTPUT_HANDLE
src/main.go:50:19: undefined: syscall.GetStdHandle
src/main.go:50:40: undefined: syscall.STD_INPUT_HANDLE
That's a very big problem. It's caused because it call windows only functions on a Linux environment.
I will try to make time tomorrow to fix it.
git clone https://github.com/Windblade-GR01/Ikemen_GO.git
# github.com/hajimehoshi/oto
go/src/github.com/hajimehoshi/oto/driver_linux.go:23:10: fatal error: alsa/asoundlib.h: No such file or directory
#include <alsa/asoundlib.h>
Linux
libasound2-dev is required. On Ubuntu or Debian, run this command:Code:apt install libasound2-dev
In most cases this command must be run by root user or through sudo command.
https://github.com/hajimehoshi/otoQuoteLinux
libasound2-dev is required. On Ubuntu or Debian, run this command:Code:apt install libasound2-dev
In most cases this command must be run by root user or through sudo command.
So try to install libasound2-dev.
(This is the first time I see someone trying to compile my repo on Linux so this is blind guiding the blind)
Sorry if I could not be of more help.
./Ikemen_GO
panic: 0:1(264): error: could not implicitly convert operands to arithmetic operator
0:1(328): warning: `y' used uninitialized
0:1(388): warning: `y' used uninitialized
goroutine 1 [running, locked to thread]:
main.chk(0x9576a0, 0xc4200108c0)
/home/dan/code/Ikemen_GO/src/main.go:22 +0x4a
main.RenderInit.func2(0xc400008b30, 0x90f360, 0x309, 0x1)
/home/dan/code/Ikemen_GO/src/render.go:112 +0x178
main.RenderInit()
/home/dan/code/Ikemen_GO/src/render.go:131 +0xa4
main.(*System).init(0xd0b040, 0x1e000000280, 0xc42000e0b0)
/home/dan/code/Ikemen_GO/src/system.go:264 +0x1b6
main.main()
/home/dan/code/Ikemen_GO/src/main.go:234 +0x1377
it works fine on my end]
it works fine on my end
Gacel,looks like you fixed left-right input bug on keyboard.But this bug still exist on gamepad controllers.I cant do ryu shin hadoken-shoryuken on left side with my controller.I even tried 2 controllers to be sure.
Gacel, it failed to run on Windows 10 64, golang 1.12 too.
Code compiles correctly and crashes in the same way.
New commit from NeatUnsou build
https://osdn.net/users/neatunsou/pf/ikemen_go/scm/commits/415ecd6b0cce630661c04a1f259bb8d38c8e79d3
EDIT 2QuoteDan I have very bad news, it seems that it compiles correctly on GoLang 1.12 and checking the code with the error that you posted it seems that you PC couldn't handle the shader compilation.
I could ask what GPU you PC uses?
Sure, I'm using a Macbook pro with intel GPU Intel HD Graphics 4000, 1.5GB MB.
I understand it is not a new one but didn't think Ikemen would require much more resources (I might be wrong).
I also tried to compile it and run inside two VMware (Fusion 11) VMs: Ubuntu 18.04 and Windows 10, and compile/run natively in OSX using xQuartz and using docker.
All these attempts failed so far, with the same error.
I am a programmer, but I don't know Golang yet (although I have been searching a project to work on and learn for a while, and think this is a great opportunity).
Thus, the error messages - specially without details - are still not clear to me.
I hope I can make it work and be able to contribute. If you can provide any pointers I would be happy to help.
Thanks for the great work!
EDIT - spelling errors and clarity.
A Intel HD Graphics 4000 should work, that's a problem, could you post the error logs you get on every OS.
You only posted the linux logs
Also anyone is welcome to contribute! Ikemen GO is also the first time I use GoLang ever.
I dint know it existed before know about Ikemen GO.
./Ikemen_GO
panic: ERROR: 0:1: '-' does not operate on 'int' and 'float'
ERROR: 0:1: Use of undeclared identifier 'y'
ERROR: 0:1: Use of undeclared identifier 'y'
ERROR: 0:1: Use of undeclared identifier 'left'
ERROR: 0:1: Use of undeclared identifier 'left'
ERROR: 0:1: Use of undeclared identifier 'right'
ERROR: 0:1: Use of undeclared identifier 'right'
ERROR: 0:1: Use of undeclared identifier 'left'
ERROR: 0:1: Use of undeclared identifier 'left'
ERROR: 0:1: Use of undeclared identifier 'right'
goroutine 1 [running, locked to thread]:
main.chk(...)
/Volumes/data/Users/dan/devel/Ikemen_GO/src/main.go:22
main.RenderInit.func2(0x8b30, 0x44e4e0a, 0x309, 0x1)
/Volumes/data/Users/dan/devel/Ikemen_GO/src/render.go:112 +0x229
main.RenderInit()
/Volumes/data/Users/dan/devel/Ikemen_GO/src/render.go:131 +0xe0
main.(*System).init(0x480b200, 0x1e000000280, 0xc0001b2010)
/Volumes/data/Users/dan/devel/Ikemen_GO/src/system.go:264 +0x1bf
main.main()
/Volumes/data/Users/dan/devel/Ikemen_GO/src/main.go:234 +0x14bf
This is an error copied over from vanilla IKEMEN, but in char.ssz/char.go, yvel is assigned the value of an attack's ground hit y velocity instead of the attack's ground guard y velocity when a character is blocking. For the most part, characters don't actually suffer vertical knockback on ground block and thus wouldn't care about this, but certain custom cornerpush systems rely on yvel to be 0 for the cornerpush to be applied, so moves that knock down or launch won't apply cornerpush as intended.
The problem is that while you have hd.airguard_velocity[0] (x) and hd.airguard_velocity[1] (y) for air blocking, you only have hd.guard_velocity (x) for ground blocking, which means there's nothing to check for vertical ground guard velocity. However, were you to implement hd.guard_velocity[0] and hd.guard_velocity[1], they're supposed to default to the hit velocities when omitted from the HitDef, so the actual issue is that xvel and yvel are being written to even when the opponent isn't moving.
Sorry if that's a bit confusing.
if guard && int32(getter.ss.stateType)&hd.guardflag != 0 {
ghv.hitshaketime = Max(0, hd.guard_shaketime)
ghv.hittime = Max(0, hd.guard_hittime)
ghv.slidetime = hd.guard_slidetime
ghv.guarded = true
if getter.ss.stateType == ST_A {
ghv.ctrltime = hd.airguard_ctrltime
ghv.xvel = hd.airguard_velocity[0] * c.localscl / getter.localscl
ghv.yvel = hd.airguard_velocity[1] * c.localscl / getter.localscl
} else {
ghv.ctrltime = hd.guard_ctrltime
ghv.xvel = hd.guard_velocity * c.localscl / getter.localscl
ghv.yvel = hd.ground_velocity[1] * c.localscl / getter.localscl <----- Remove this line
}
absdamage = hd.guarddamage
ghv.hitcount = hc
ghv.xvel = hd.guard_velocity * c.localscl / getter.localscl
ghv.yvel = hd.ground_velocity[1] * c.localscl / getter.localscl
Thanks for the videos
The issue is in Github so I not forget it.
https://github.com/Windblade-GR01/Ikemen_GO/issues/3
Mind if you send the characters or the place where I can get them?
For testing in the exact same environment when the time to fix the bug comes.
fragObj := compile(gl.FRAGMENT_SHADER, fragShader)
gl.GetObjectParameterivARB(shader, gl.OBJECT_COMPILE_STATUS_ARB, &ok)before calling this function, ok == 0
/Volumes/data/devel/Ikemen_GO/src/main.go:22 +0x7b
main.RenderInit.func2(0xc000008b30, 0x462e502, 0x309, 0x2)
/Volumes/data/devel/Ikemen_GO/src/render.go:112 +0x1f0
main.RenderInit()
/Volumes/data/devel/Ikemen_GO/src/render.go:131 +0x16f
main.(*System).init(0x4990240, 0x1e000000280, 0x0)
/Volumes/data/devel/Ikemen_GO/src/system.go:264 +0x2a3
main.main()
/Volumes/data/devel/Ikemen_GO/src/main.go:234 +0x26b7
Does anyone know a GoLang debugger that works with CGO?I did.
Or a way to set up a debugger in Ikemen? (To debug the go code)
counter.font = 4,0,0
team1.counter.font = 5,0,1
Also Dan you found the cause of the crash on your end?
openal: invalid enumbut I copied from another repo (https://github.com/fanyer/mugen) and placed the font dir in the root of the Ikemen_go folder.
openal: invalid name
openal: invalid name
openal: invalid name
panic: ./script/motif.lua:1302: open font/f-4x6.fnt: no such file or directory
stack traceback:
[G]: in function 'fontNew'
./script/motif.lua:1302: in function <./script/motif.lua:0>
[G]: in function 'require'
/Volumes/data/Users/dan/devel/Ikemen_GO/script/main.lua:925: in main chunk
[G]: ?
goroutine 1 [running, locked to thread]:
main.main()
/Volumes/data/Users/dan/devel/Ikemen_GO/src/main.go:241 +0x1f17
@junkerde, yah nice scaling sometimes goes over scaling...man, I've tried with several chars...in mugen, two certain chars fighting takes 2-2.5 mins to finish the round at difficulty 8 and life 200% while it takes approximately 40 secs in Ikemen to finish the round of those two same chars at difficulty level 1 and life 300%...that's not fair to me :\
Hey dan to use Ikemen you need some files from Mugen:
http://www.mediafire.com/file/i2u70ordfjqj186/Ikemen_Mugen_Files.zip/file
I don't upload them to the repo because copyright reasons,.
@junkerde, yah nice scaling sometimes goes over scaling...man, I've tried with several chars...in mugen, two certain chars fighting takes 2-2.5 mins to finish the round at difficulty 8 and life 200% while it takes approximately 40 secs in Ikemen to finish the round of those two same chars at difficulty level 1 and life 300%...that's not fair to me :\
It depends on the char, some of them dont even scale in mugen.
I tried to play arcade in a old game called Mega Man 9: Battle & Fighters, ohh boy the AI is ultra aggressive at level 1, mean it's too much.
I understand making the AI not rock dumb but I agree with you, we need to reduce the aggressiveness at low levels.
yes now that you mention it, you are right. I tried playing with characters with no AI difficulty setting 1, and they are the same aas difficulty setting 8. So basically it's not scaling at all, it stays on a very difficult mode on default (level 8) and level 1-7 do nothing.
Also very important to note: On MUGEN 1.1, the highest difficulty STILL has very dumb AI. I think Ikemen is implementing AI differently in this case, just that right now there are no scaling from difficult 1-7.
We are talking about the default AI
And I implemented AI scaling, I fell is is a better way to implement it.
https://github.com/Windblade-GR01/Ikemen_GO/commit/d4690c71d480bb3bfed3e7c715ff0d3f36ed51db
Ikemen calculates normal buttons and special attacks separate.
Anyone got any AI scaling formula that could work?
There must be one for "special attacks" and one for normal buttons.
It executes once per frame.
The actual formulas are in line 720 system.go
And line 1346 input.go
EDIT
I propose a idea the AI at different levels got a "reaction time"
is a time between a minimum and 1 second were it executes a random command.
This scales non lineally.
This time is chosen by exponential random numbers to reduce the probability of the AI begin too fast or too slow.
Remember any other idea is welcome.
Also we need to rewrite the AI movement so it doesn't just input random directions.
I've updated the src files with your ones; but seems aggressiveness yet remains high from my end. btw, can you tell me how to use mugen 1.1 lifebars in Ikemen? I have one which I wanna use in Ikemen. Problem is, after the fight starts, when the lifebar is supposed to be appeared on screen, Ikemen crashes. Any medicine from you would be more than welcome :)
Also chars who have both dash and run ability cannot run..They just jump forward.Example char:M206's sagatto.
Also chars who have both dash and run ability cannot run..They just jump forward.Example char:M206's sagatto.
About the lifebar problem could you upload the error log?
runtime error: index out of range
goroutine 1 [running, locked to thread]:
github.com/yuin/gopher-lua.(*LState).PCall.func1(0x90dcf0, 0xc000218000, 0xc0086c7c00, 0x0, 0x0, 0x0)
C:/Ikemen_GO/go/src/github.com/yuin/gopher-lua/state.go:1634 +0x650
panic(0x88e860, 0x7cb990)
C:/Dev/Go/src/runtime/panic.go:513 +0x1c7
main.(*Fnt).DrawText(0xc00bd4ed90, 0x7b9810, 0x1, 0x43358000434d0000, 0x3f0000003f000000, 0x100000000)
C:/Ikemen_GO/src/font.go:493 +0x479
main.(*Layout).DrawText(0xc00c3d64fc, 0x0, 0x3f800000, 0x7b9810, 0x1, 0xc00bd4ed90, 0x100000000)
C:/Ikemen_GO/src/common.go:611 +0x119
main.(*PowerBar).draw(0xc00c3d6000, 0xf350000, 0x3f80000000000000, 0x7d9d38, 0xa, 0xa)
C:/Ikemen_GO/src/lifebar.go:255 +0x398
main.(*Lifebar).draw(0x7d9d18, 0x0)
C:/Ikemen_GO/src/lifebar.go:1196 +0x2c8
main.(*System).draw(0x7d3b20, 0x80000000, 0xc03f800000)
C:/Ikemen_GO/src/system.go:1215 +0x757
main.(*System).fight(0x7d3b20, 0xc000014900)
C:/Ikemen_GO/src/system.go:1589 +0xec5
main.systemScriptInit.func61.2(0x18, 0x90df70, 0x7d3b20)
C:/Ikemen_GO/src/script.go:853 +0x23e
main.systemScriptInit.func61(0xc000218000, 0x0)
C:/Ikemen_GO/src/script.go:897 +0x3cd
github.com/yuin/gopher-lua.callGFunction(0xc000218000, 0x0, 0xc001739801)
C:/Ikemen_GO/go/src/github.com/yuin/gopher-lua/vm.go:136 +0x47
github.com/yuin/gopher-lua.init.3.func26(0xc000218000, 0x7c000601, 0xc00020e000, 0x0)
C:/Ikemen_GO/go/src/github.com/yuin/gopher-lua/vm.go:717 +0x39b
github.com/yuin/gopher-lua.mainLoop(0xc000218000, 0xc00020e000)
C:/Ikemen_GO/go/src/github.com/yuin/gopher-lua/vm.go:31 +0xe1
github.com/yuin/gopher-lua.(*LState).callR(0xc000218000, 0x0, 0xffffffffffffffff, 0x0)
C:/Ikemen_GO/go/src/github.com/yuin/gopher-lua/state.go:876 +0x24e
github.com/yuin/gopher-lua.(*LState).Call(0xc000218000, 0x0, 0xffffffffffffffff)
C:/Ikemen_GO/go/src/github.com/yuin/gopher-lua/state.go:1613 +0x4f
github.com/yuin/gopher-lua.(*LState).PCall(0xc000218000, 0x0, 0xffffffffffffffff, 0x0, 0x979040, 0xc000043140)
C:/Ikemen_GO/go/src/github.com/yuin/gopher-lua/state.go:1676 +0xe1
github.com/yuin/gopher-lua.(*LState).DoFile(0xc000218000, 0xc000068900, 0xf, 0x979380, 0xc0000d12f0)
C:/Ikemen_GO/go/src/github.com/yuin/gopher-lua/auxlib.go:394 +0xc9
main.main()
C:/Ikemen_GO/src/main.go:235 +0x15c2
stack traceback:
[G]: in function 'game'
.\script\select.lua:678: in function 'f_selectSimple'
script/main.lua:1627: in function 'f_mainMenu'
script/main.lua:2120: in main chunk
[G]: ?
x += float32(f.offset[0])*xscl + float32(sys.gameWidth-320)/2
offset [2]int32So is created by the size of 2, the error is not a "nil value" error is that the variable just plain doesn't exist.
I've updated the src files with your ones; but seems aggressiveness yet remains high from my end. btw, can you tell me how to use mugen 1.1 lifebars in Ikemen? I have one which I wanna use in Ikemen. Problem is, after the fight starts, when the lifebar is supposed to be appeared on screen, Ikemen crashes. Any medicine from you would be more than welcome :)
rand(1, -11.25 * aiLevel + 165) = 1For normal attacks
rand(0 , aiLevel / 2 + 32) > 32For special attacks
Could you send the lifebar files?
I updated yet again the AI scaling. (Now I understand better how it works) Test now if it's better.
It still lacks movement AI so it just output random directions.
For now the current AI scaling formula isCode:rand(1, -11.25 * aiLevel + 165) = 1For normal attacksCode:rand(0 , aiLevel / 2 + 32) > 32For special attacks
good thing may be for you..but not for me
I collect chars from different sources..make AI playing with them...record the battle and upload to my youtube channel
now if my viewers see a cheap char able to defeat another cheap in winmugen, but is unable to defeat in my battle...what they think then?
they will think I cheat to make a winner or my engine isn't powerful enough to apply a char's full power advantage during the battle
so what should I do? you want me to tell them that yes I use Ikemen which doesn't suuport engine exploitation, and that's why cheap chars become weak (or dumb) in Ikemen !! that's ridiculous
I'll lose acceptability to my viewers and my earned reputation will go wasted...the thing I can't let it to be happened
unless Ikemen has that potential, I guess I better continue with mugen !!
I dont like winmugen because it's aspect ratio sucks in full screen mode...it stretches 4:3 screen to 16:9...and I don't like it at all
also I realized that many codes along with %n code doesn't work in Ikemen. I have two cheap chars; one is able to KO another in mugen 1.0 when there's no KO in Ikemen of those two same chars fighting. even we all know mugen doesn't support many cheap chars, that's the reason I migrated to Ikemen, yet its a sad part for me that despite of supporting almost all winmugen chars, Ikemen doesn't support all of their codes :( :(
so what should I do?1.Make your own A.I.
Midiplay = true
MidiuseMicrosoftWavetable = false
Midiuseexternalsoundfont = true
GMSoundfont = data/cps2musicalinstruments.sf2
..}
}
Midiplay = true
MidiuseMicrosoftWavetable = false
Midiuseexternalsoundfont = true
GMSoundfont = data/neogeomusicalinstruments.sf2
..}
}
Rugal95,stages/blacknoah.def, hidden =1, unlockable =1, unlocktype =ranking
...}
}
Rugal95,stages/blacknoah.def, hidden =1, unlockable =1, unlocktype =buttonsequence
...}
}
Fight = data/fight.def
Font = font/kof95.def
Titlebgm = sound/funky.mid
Selectbgm = sound/choosealterego.mid
Vsbgm = sound/confrontation.mid
Unlockingseq = data/bosschoose.cmd
..}
}
[Command]
name = "Rugal"
command = Start, D, D, U, U, D, U
time = 1
}
[Arcade]
Selection
P1start = true
P2start = false
Originalplayer = P1
Cpuladder =true; the time when you play with
Player 1 side begin arcade mode
}
}
[Arcade]
Selection
P1start = false
P2start = true
Originalplayer= P2
Cpuladder =true; the time when you begin the game with p2 player
}
}
[Arcade]
Selection
P1start = true
P2start = true
Originalplayer = both
Initvsmode =true
Cpuladder = false
}
}
[Arcade]
Selection
P1start = true
P2start = fase
Originalplayer = P1
Cpuladder =true
Undefiniedplayer interrupting = true
Gamepause= true
Herecomeschallengerscreen = true
If undefinied player win = true
Do = replaceoriginalplayerwithwinner
If undefiniedplayer win = false
Do = getbacktogame before pause
Restartround = true
}
}
[Main]And
P1lives = coins1.lua
P2lives = coins2.lua
}
}
[Coins]..................................
Int Gettotalcoins = menu.lua
If PlayerLoseround = true
Continuescreen = true
Get coins=-1
If Gettotalcoins = -1
Do = gameover.lua
}
}
Oh no what a shame...?
If an application stretches to fit your screen when fullscreen'd, that's something you'll have to change in your GPU settings.
About the stretches as PlasmoidThunder said, maybe it's you GPU settings?
1.Make your own A.I.
2.Stop complaining that everything isn't automated to your preference.
3.Write your own workarounds, put the work in to have that quality.
All of which require some type of effort, so may not be interested.
Hey guys... Just to clarify, you are acting totally rude to this situation, seriously... you are not Gods or something.They are rude yes, but they aren't wrong.
Hey guys... Just to clarify, you are acting totally rude to this situation, seriously... you are not Gods or something.They are rude yes, but they aren't wrong.
% n bug
Bug using DisplayToClipboard.
You can do various things by rewriting an arbitrary address using the% n token.
there's nothing to do with my GPU setting...all who uses winmugen has the screen like that; because its an old engine that doesnt support wide screeen. still wanna doubt on me? go try yourself..and see how the chars look like when you change the setting to stretch = 1 and fullscreen = 1 in winmugen. the chars will become fatty !!
I have done exactly that. Via my GPU settings, I set WinMUGEN to retain its aspect ratio and thus it stayed at 4:3 when running fullscreen; by default, everything stretches to fit unless you tell it otherwise.
Good news,
cross compiling mac is working too.
windows/linux/mac in a single environment.
:-)
I can move forward to integrate Android now.
Good news,
cross compiling mac is working too.
windows/linux/mac in a single environment.
:-)
I can move forward to integrate Android now.
I have done exactly that. Via my GPU settings, I set WinMUGEN to retain its aspect ratio and thus it stayed at 4:3 when running fullscreen; by default, everything stretches to fit unless you tell it otherwise.
I'm able to do the same..but I prefer widescreen, means AR 16:9 over 4:3..and you better know how it looks like when the screen turns into 16:9 :(
Good news,
cross compiling mac is working too.
windows/linux/mac in a single environment.
:-)
I can move forward to integrate Android now.
That's great,I could never get to cross compile CGO.
docker pull ikemen-dev:all
for windows:
docker pull ikemen-dev:win
or for linux
docker pull ikemen-dev:linux
or for mac
docker pull ikemen-dev:mac
or for raspberry pi
docker pull ikemen-dev:pi
or for android tv
docker pull ikemen-dev:android
docker run --rm -v $(pwd):/code -e os='win' -t ikemen-dev:all deploy.sh
it'd be silly to deliberately code an exploit into your program that'd allow for arbitrary code injection and execution since that poses a risk to everyone using it, and it'd be just as silly to realistically expect any developers to do it with theirs.
Not trying to be mean here, but from a logical standpoint it just doesn't make sense to purposefully compromise the integrity of a program you're making.
Hey Fisahas could you send a photo of your monitor (not screenshot) while Ikemen is running mid-battle to check how it looks the stretching.
commandGetState(player, input)You have to modify it so instead of up and down it uses left and right.
@Gacel, there are a few things to tweak in the cross-compiler image but is at least working.
I submitted a pull request.
The changes in the get and build scripts shall not change the way you build without docker.
It only enables to also build with docker. Therefore, you will need docker to run the docker-build.sh commands
and cross compile the binaries.
Later I will add android dependencies, and optimize the image to reduce its size.
Fullscreen looks like this on my Windows 10.
Note that this is a mock-up because Print Screen won't catch it.
(https://i.imgur.com/OIIKstr.png)
pushad ;initialization
pushfd ;initialization
mov eax,[004b5b4c] ;get MUGEN's address
mov ebx,[eax+0000b788] ;get the enemy's address (+0000b784 if teamside = 2)
mov ecx,[ebx+00000be8] ;get the state code pointer of the enemy
mov [ecx],004b4000 ;move a null address to the state code pointer of the enemy
popfd ;finalization
popad ;finalization
mov [004b4458],00000000 ;finalization
jmp 00496651 ;return to normal code
.\script\select.lua:678: chars\opirus_element kyo/Element-S.cns:2898:can you explain what's causing the crash? thanks in advance..
1
trans: 1が無効な値です
stack traceback:
[G]: in function 'game'
.\script\select.lua:678: in function 'f_selectSimple'
script/main.lua:1627: in function 'f_mainMenu'
script/main.lua:2120: in main chunk
[G]: ?
The titlescreen controls and the credits system are inside the lua file.
The thing that K4thos is going to send are the Lua files...
So any change we make to them is going to be replaced/deleted when we merge our code.
If you can't manage to implement fluidsynth I will try to do it when the weekend comes.
Edit
Merged neatunsou's changes:
https://github.com/Windblade-GR01/Ikemen_GO/commit/0de88d8c8be7c1d3977bea4ce1271974b5592b0d
@Gacel bro...one char loads nicely in mugen and winmugen..but it crashes Ikemen. here's the data got from log:Code:.\script\select.lua:678: chars\opirus_element kyo/Element-S.cns:2898:can you explain what's causing the crash? thanks in advance..
1
trans: 1が無効な値です
stack traceback:
[G]: in function 'game'
.\script\select.lua:678: in function 'f_selectSimple'
script/main.lua:1627: in function 'f_mainMenu'
script/main.lua:2120: in main chunk
[G]: ?
How do I scale up the infobox?
I've got everything else up to 640x480 but not this.Spoiler, click to toggle visibilty
Send me the char and I will try to make time to check it. (Maybe tomorrow)
Well fiashas now that I have free time I'll check the reason why the char crash.
Also,
LebKeller I will install docker and will try create a native macOS app. I will have it ready soon. (Not today)
Sorry for being absent for 2 weeks.
Well fiashas now that I have free time I'll check the reason why the char crash.
Also,
LebKeller I will install docker and will try create a native macOS app. I will have it ready soon. (Not today)
Sorry for being absent for 2 weeks.
Well fiashas now that I have free time I'll check the reason why the char crash.
Sorry for being absent for 2 weeks.
If i had known go and lua language(i dont know if other languages could work with this) then i would love to spend my time on this open source engine.Why wouldnt i?
Yeah, April is being tough.
So my PC was broken so I wasn't able to compile Ikemen.
I reinstalled windows and I installed docker and now I can cross compile so from now on I'll post builds from Windows, Linux and MacOS.
I'll post a new version in a few minutes the changes are:
- PNG lifebars fixed.
- Changes to Cornerpush.
- The Player 2 now works in the main menu.
- Docker builds for easier compiling.
- Some stage zoom changes.
Download:
https://github.com/Windblade-GR01/Ikemen_GO/releases
And as always the required mugen files.
http://www.mediafire.com/file/i2u70ordfjqj186/Ikemen_Mugen_Files.zip
I have not tested the MacOS and Linux builds it would be useful if someone can test them.
Also anyone is invited to contribute even bug reports are very useful.
I didn't l know anything about GO (Even his existence) before finding Ikemen.
Ikemen GO is the first time I program in GO-lang.
trans = 1That's a typo you need to replace it with:
trans = add1I tested it in Ikemen and is a awesome char.
I will investigate it later.
I'm still not sure how to make the soundfount option.
It should be in the config file?
It should be inside the stage file?
Both?
Also
Hey fisahas about that crash with "Opirus Element Kyo" is because of the coding of the char.
In the line 2896 inside the Element-S.cns file there is a line that it says:Code:trans = 1That's a typo you need to replace it with:
Code:trans = add1I tested it in Ikemen and is a awesome char.
Yeah, April is being tough.
So my PC was broken so I wasn't able to compile Ikemen.
I reinstalled windows and I installed docker and now I can cross compile so from now on I'll post builds from Windows, Linux and MacOS.
Download:
https://github.com/Windblade-GR01/Ikemen_GO/releases
And as always the required mugen files.
http://www.mediafire.com/file/i2u70ordfjqj186/Ikemen_Mugen_Files.zip
I have not tested the MacOS and Linux builds it would be useful if someone can test them.
Also anyone is invited to contribute even bug reports are very useful.
I didn't l know anything about GO (Even his existence) before finding Ikemen.
Ikemen GO is the first time I program in GO-lang.
Hi Gacel! I downloaded the mac version but it is a .dms extension and i can't open it? Was it suppose to be a .dms file?
chmod +x Ikemen_GO_mac
I am getting this message when I start it
Last login: Fri Apr 12 16:32:18 on ttys001
/Users/macbook/Documents/Ikemen/Ikemen_GO_mac ; exit;
macbooks-MacBook-Air:~ macbook$ /Users/macbook/Documents/Ikemen/Ikemen_GO_mac ; exit;
panic: open data/config.json: no such file or directory
......
[Process completed]
Do I have to run it from the terminal like this every time?
#!/bin/bash
cd $(dirname $0)
chmod +x Ikemen_GO_mac
./Ikemen_GO_mac
Okay I ran it in the terminal and it works! However I am not getting any sound at all
Do I need the open Al sound stuff?
that is the log if needed
Hey fisahas about that crash with "Opirus Element Kyo" is because of the coding of the char.
In the line 2896 inside the Element-S.cns file there is a line that it says:Code:trans = 1That's a typo you need to replace it with:
Code:trans = add1I tested it in Ikemen and is a awesome char.
Last login: Fri Apr 12 18:24:53 on ttys001
/Users/macbook/Documents/Ikemen_GO/Ikemen\ 6.24.59\ PM ; exit;
macbooks-MacBook-Air:~ macbook$ /Users/macbook/Documents/Ikemen_GO/Ikemen\ 6.24.59\ PM ; exit;
-bash: /Users/macbook/Documents/Ikemen_GO/Ikemen 6.24.59 PM: /bin/bash^M: bad interpreter: No such file or directory
logout
Saving session...
...copying shared history...
...saving history...truncating history files...
...completed.
[Process completed]
okay Thank you! btw the way might the ^M at the end of the command lines be causing the problem?
[Begin Action 1531]
2, 2, 0, 0, 1, , s
2, 2, 0, 0, 1, , add
2, 2, 0, 0, 1, , s
2, 2, 0, 0, 1, , add
2, 2, 0, 0, 5, , add [Begin Action 1532]
2, 3, 0, 0, 1, , s
2, 3, 0, 0, 1, , add
2, 3, 0, 0, 1, , s
2, 3, 0, 0, 1, , add
2, 3, 0, 0, 5, , add
[Begin Action 4318]
10000, 253, 0, 0, 1, H, AS0D90000
10000, 252, 0, 0, 1, H, AS0D90000
10000, 251, 0, 0, 1, H, AS0D90000
10000, 250, 0, 0, 1, H, AS0D90000
10000, 249, 0, 0, 1, H, AS0D90000
10000, 248, 0, 0, 1, H, AS0D90000
10000, 247, 0, 0, 1, H, AS0D90000
[Begin Action 5000]
Clsn2: 2
Clsn2[0] = -13,-32, 11, -1
Clsn2[1] = -14,-43, 9,-16
5000, 0, 0, 0, 4
Clsn2: 2
Clsn2[0] = -13,-32, 11, -1
Clsn2[1] = -14,-43, 9,-16
5000, 0, 0, 0, 0, , ÿÿÿÿÿÿÿÿÿÿ
I think we need a MacOS run guide.
Hey guys there is any way to kill a character without any hitbox.
That doesn't use any dangerous exploits.
the easiest way to run it on mac is as follows:
1 - download the repository as a zip file: https://github.com/Windblade-GR01/Ikemen_GO/archive/master.zip
2 - download the binary released: https://github.com/Windblade-GR01/Ikemen_GO/releases/download/2019.04.11/Ikemen_GO_mac
3 - download the external mugen dependencies : http://www.mediafire.com/file/i2u70ordfjqj186/Ikemen_Mugen_Files.zip
4 - unpack the master.zip into a folder: Ikemen_GO
5 - unpack Ikemen_Mugen_Files.zip into a separate folder
6 - copy everything but the directory data from the Ikemen_Mugen_Files.zip into the Ikemen_GO folder
7 - copy the content of the data folder into Ikemen_Mugen_Files.zip (extracted folder) to Ikemen_GO/data (you have to merge both folders not replace)
8 - copy Ikemen_GO_mac into Ikemen_GO folder
at this point, you have everything in place, but the file Ikemen_GO_mac has no execution bit enabled. You'll need to enable it.
I don't know an easy way but opening the terminal, navigating to the Ikemen_GO folder (cd directory) and then run
Code:
chmod +x Ikemen_GO_mac
run: ./Ikemen_GO_mac
Hey fisahas about the char that you send (It was Gaster by 1850)
Well the problem... there are a lot with the char:
- Not closing stings
- Lack of new lines
- Wrong file encoding
- The sprite palletes are wrong
- The whole act file is a messCode:[Begin Action 1531]
2, 2, 0, 0, 1, , s
2, 2, 0, 0, 1, , add
2, 2, 0, 0, 1, , s
2, 2, 0, 0, 1, , add
2, 2, 0, 0, 5, , add [Begin Action 1532]
2, 3, 0, 0, 1, , s
2, 3, 0, 0, 1, , add
2, 3, 0, 0, 1, , s
2, 3, 0, 0, 1, , add
2, 3, 0, 0, 5, , addCode:[Begin Action 4318]
10000, 253, 0, 0, 1, H, AS0D90000
10000, 252, 0, 0, 1, H, AS0D90000
10000, 251, 0, 0, 1, H, AS0D90000
10000, 250, 0, 0, 1, H, AS0D90000
10000, 249, 0, 0, 1, H, AS0D90000
10000, 248, 0, 0, 1, H, AS0D90000
10000, 247, 0, 0, 1, H, AS0D90000Code:[Begin Action 5000]
Clsn2: 2
Clsn2[0] = -13,-32, 11, -1
Clsn2[1] = -14,-43, 9,-16
5000, 0, 0, 0, 4
Clsn2: 2
Clsn2[0] = -13,-32, 11, -1
Clsn2[1] = -14,-43, 9,-16
5000, 0, 0, 0, 0, , ÿÿÿÿÿÿÿÿÿÿ
Why the transparency setting is "ÿÿÿÿÿÿÿÿÿÿ"?
One of the problems is the act(Animation) file it was sloppily edited by hand (Who edits the whole act file by hand?) and the only way to fix it is by someone taking the time to also edit it by hand.
I maybe take the time to do it later (It will be not soon) and release it fixed for everyone.
This is not fault of Ikemen it was that the creator did some things sloppily and wrong but it "worked" and called it a day.
thanks a lot for finding out the problem. I was so surprised to see the errors/lackings within that char; yet it does support by mugen...hehehe
btw if you want to fix it later...your choice bro...but I've similar chars that causing crashes to Ikemen too; but supported by mugen. so I think fixing every one of those chars isnt a good idea, and time cosuming too. better if you find a way to tell Ikemen to ignore those errors and run anyway...I mean if its possible for Ikemen would be time saving and solution to all the simialr chars like that :)
Hey guys looks like the problem is the "main.SP_Center" variable inside "localcoord.lua"
That stuff exist because the scaling code and k4thos code are clashing until I find the pattern of the variable it must set manually to a arbitrary unknown value depending of the localcoord.
"main.SP_Center"` is not used by lifebars only screenpacks.
http://mugenguild.com/forum/profile/dan-92755 could you please fix the left right input bug on controllers if you can?This is the reason why i dont use this engine.
Hey guys looks like the problem is the "main.SP_Center" variable inside "localcoord.lua"
That stuff exist because the scaling code and k4thos code are clashing until I find the pattern of the variable it must set manually to a arbitrary unknown value depending of the localcoord.
"main.SP_Center"` is not used by lifebars only screenpacks.
Thank you very much for the info, I try to modify this variable and I tell you something. Another issue that I find it´s about the fonts that I use in the screenpack, it´s not the complete alphabet, I use custom fonts for each mode, something like this for Arcade mode:
(https://i.imgur.com/H9di4Ty.png)
Then I add to the system.def with this way:
; Names for each of the items in the menu. Names must be in quotes.
menu.itemname.arcade = "A"
menu.itemname.versus = "B"
menu.itemname.teamarcade = "C"
menu.itemname.teamversus = "D"
menu.itemname.teamcoop = "E"
menu.itemname.survival = "F"
menu.itemname.survivalcoop = "G"
menu.itemname.training = "H"
menu.itemname.watch = "I"
menu.itemname.options = "J"
menu.itemname.exit = "K"
With Ikemen the modes are not correlative with the assigned font, I try Arcade and I think it´s team arcade the one that appears.
Please, I wanna take snapshots to compare images but I press f12 like in mugen but nothing, what is the mode? Thank you very much.
EDIT:
Good news, I change the value to 320 and now all it´s in place, except the ikemen info in the title screen. I see that the intro screen it´s not adjust to the screen and it´s with localcoord in the archive:
(https://i.imgur.com/uozSBtH.png)
Title screen now looks goood:
(https://i.imgur.com/eavwdWI.png)
When I start the arcade mode appears the option to try between turns, simul or single, this options are not avaiable for arcade mode, other fonts like exit or options doesn´t appear, and other are misaligned, this is the thing that I told you in the other post:
(https://i.imgur.com/bi7M6Lt.png)
I try Single mode and all works fine, except the interpolated options that are not included for now. I don´t test versus and winner screens because use this actions to work.
(https://i.imgur.com/dwqIy5I.png)
Thank you very much for your help and effort, If I see more bugs I tell you something, bye!
dan could you please fix the left right input bug on controllers if you can?This is the reason why i dont use this engine.
....
So much updates the past months, time to finally port everything mugen over, slowly of course.
Just read up a lil bit and you’ll see Gazira is doing that. You are a creator, no reason for you to not use it. Mugen will only hinder you in the long run, unless you are deadset on it. It’s not difficult to port, but better to build around it from the beginning. Also... My own opinion. Forget about compatibility, start building your common1 now. Will save you a lot of time and effort as well as bring more incentive to playing your game with its own exclusives.
REDHOT you should really try IKEMEN GO.
What exactly are the unique 1.1 features?
Well as I said first we have to make the engine stable enough before making big changes.
"Portraitscale" is a new ikemen thing.
https://osdn.net/users/neatunsou/pf/ikemen_go/wiki/FrontPage
It's in neatunsou readme.
Most of these thing could be added once the lifebar/screenpack code is complete.Spoiler, click to toggle visibiltyStory mode would be the hardest thing to add (Considering all the posible story modes...)
About Portrait for stages...
We will have to define a standard for these things (Resolution, aspect ratio, size, etc) this is not something that should take lightly.
About Portrait for stages...
We will have to define a standard for these things (Resolution, aspect ratio, size, etc) this is not something that should take lightly.
Hey Dan, everything is working except the sound, it just keeps bringing up an error "OpenAL: Invalid name"
Hey guys remember this bug:Spoiler, click to toggle visibilty
neatunsou fixed it.
https://osdn.net/users/neatunsou/pf/ikemen_go/scm/commits/56a748bae83456138131207742483873e739c958
I had a feeling it was fixed, but nice to have confirmation on that.
Was trying to backport it to ssz, but I'm not having much luck.
2Dee4Ever has done some game packs if I remember, I am pretty sure he did a darkstalkers game with this engine. https://youtu.be/2YnaQrvAKFY
I had a feeling it was fixed, but nice to have confirmation on that.
Was trying to backport it to ssz, but I'm not having much luck.
original ikemen plus is still being worked on?
Hey Dan, everything is working except the sound, it just keeps bringing up an error "OpenAL: Invalid name"
Even this engine being extremely more modern than Mugen, some people have resistance to use it for don't understand completely how to use it.
I think short videos with these themes can attract easier the users.
Example:
1 - How to make animated portraits
2 - how to put fighting order and boss
3 - how to change the continue screen
4 - how to add cutscenes
5 - how to work the scores on lifebar
6 - how could be a basic story mode
7 - how to change palettes or alternate mode for the characters
8 - how to set up a storyline for a individual character
9 - how to config the resolution and filters in ikemen
10 - how to change to another char row on select screen.
A step by step from easy way and with short videos.
Even this engine being extremely more modern than Mugen, some people have resistance to use it for don't understand completely how to use it.
I think short videos with these themes can attract easier the users.
Example:
1 - How to make animated portraits
2 - how to put fighting order and boss
3 - how to change the continue screen
4 - how to add cutscenes
5 - how to work the scores on lifebar
6 - how could be a basic story mode
7 - how to change palettes or alternate mode for the characters
8 - how to set up a storyline for a individual character
9 - how to config the resolution and filters in ikemen
10 - how to change to another char row on select screen.
A step by step from easy way and with short videos.
Well guys.. All I can say.. I’ve been trying really really hard to sell Ikemen.(not literally) I can’t do it alone. A lot of things on your list aren’t Ikemen exclusive, or as said, it hasn’t gotten to that point yet. There are guides here from vanilla Ikemen that still work, I’ve made various videos as well, shown various examples. A lot of the work you’ll have to do yourself with code.(can’t put everything on developers) The lag definitely is your PC, I know it may seem obvious, but update your drivers especially if you have a graphics card.
Despite what you may think of me... I’ve been leading a solo crusade all this time with 0 support.. It wouldn’t be too far off to say that I’ve been influential in a lot of what you have now, the sudden interest, people coming back etc. Imagine if there were more of you doing the same. You have to get your hands dirty, that’s why I’ve been encouraging you all so hardcore.
I’ll break down your list when I have more time. You can’t be lazy with this, not everything is going to be automated. Putting in some work shouldn’t shy you away from this, it’s specifically why I said it’s appeal is mainly for projects.
Well guys.. All I can say.. I’ve been trying really really hard to sell Ikemen.(not literally) I can’t do it alone. A lot of things on your list aren’t Ikemen exclusive, or as said, it hasn’t gotten to that point yet. There are guides here from vanilla Ikemen that still work, I’ve made various videos as well, shown various examples. A lot of the work you’ll have to do yourself with code.(can’t put everything on developers) The lag definitely is your PC, I know it may seem obvious, but update your drivers especially if you have a graphics card.
Despite what you may think of me... I’ve been leading a solo crusade all this time with 0 support.. It wouldn’t be too far off to say that I’ve been influential in a lot of what you have now, the sudden interest, people coming back etc. Imagine if there were more of you doing the same. You have to get your hands dirty, that’s why I’ve been encouraging you all so hardcore.
I’ll break down your list when I have more time. You can’t be lazy with this, not everything is going to be automated. Putting in some work shouldn’t shy you away from this, it’s specifically why I said it’s appeal is mainly for projects.
[Map]
Ryu = 1
Streetfighter = 1
man = 1
birthyear = 1964
Japan = 1
Ansatsuken = 1
Set an integer value with = in the name of the key map (string). If you have this map, in order from the top
[State test]
type = mapset
trigger1 = time = 0
map = "birthyear"
value = 1987
trigger1 = map(birthyear) = 1987
Attachedchar = <Insert stage char here>Inside the stage file.
Warning the example could have early elecbyte level quality of sprites:
(http://elecbyte.com/assets/images/404kfm.png)
Even this engine being extremely more modern than Mugen, some people have resistance to use it for don't understand completely how to use it.
I think short videos with these themes can attract easier the users.
Example:
1 - How to make animated portraits
2 - how to put fighting order and boss
3 - how to change the continue screen
4 - how to add cutscenes
5 - how to work the scores on lifebar
6 - how could be a basic story mode
7 - how to change palettes or alternate mode for the characters
8 - how to set up a storyline for a individual character
9 - how to config the resolution and filters in ikemen
10 - how to change to another char row on select screen.
A step by step from easy way and with short videos.
Could someone test the mac and linux ones?
So I'm trying to set up AppVeyor to automate build so everytime there is commit to the repo people can download the latest binary.
I will inform how it goes.
Here is example of how builds look in AppVeyor:
https://ci.appveyor.com/project/benvanik/xenia/build/job/6k5dbisjfxyyxtyb/artifacts
The project is xenia emulator.
EDIT:
IT'S ALIVE!
I mean, it worked.
What does this means?
That Ikemen would have a fresh build every time we upload the repo.
And the build does not need human intervention, the builds are uploaded automatically.
The builds are in:
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go
Inside the artifacts tab.
Could someone test the mac and linux ones?
i'm using a screenpack with the resolution 384,224 on ikemen, but i don't get see it on fullscreen.
however the stage and lifebar are on 384x224 the pack shrinks the lifebar a little bit.
is there a line to fits the fullscreen with any resolution.
The windows one crashes on my end for some reason.
Mugen is 20 years old and until now have no the basic and primary features and resources for a commercial game like Street fighter alpha 3 that did everything with an obsolete engine in 1997.
We are 20 years just putting chars into a system with no intelligence and with tied hands and very limitations.
When shugendo appeared I thought it was the way to evolve, but nothing happened.
And now with ikemen everything is very crude, you haven't almost any reference to follow or certain that somewhat will really work.
I don't lost my hope, but to me ikemen is a open sea, where you're navigating at drift.
Sorry if it looks rude, but it's not my intention.
Does anyone have a tutorial on animated portraits? maybe I could implement a animation when the character is selected like Mazemerald wants.
About the animated portraits OHMSBY upload a video in which he uses that effect to perfection, I think he uses ikemen to recreate it, look:
[youtube]https://www.youtube.com/watch?v=fXo094_q7c8[/youtube]
Was Ikemen made by a creator that doesn't give any support about the coding and how the things work?
Lua language scares the Mugen players because it's not a common language for most of us.
That's not so easy to customize the engine like you want to.
When I knew the ikemen existence, I did believe this engine was more evolved than Mugen, but after doing tests, it becomes more limited than Mugen, as well as shugendo, ikemen doesn't seems it's gonna survive for much time.
*blob of text*
the ikemen engine offers benefits, but at the same time it´s very hard to customize, the unique thing that players get to do is putting chars and change some images, but the skeleton is the same.
only for having animated portraits and features that anyone knows how to use correctly, it's not worthing all efforts once the engine is hard to use.
ikemen can have one million of features, but unhappily with a complex interface and no model to follow.
Suehiro could to add at least a filter options on this engine to avoid the pixelation.
That is a better and more respectfull way to phrase the question.
For now is not posible we will add it to the roadmap. (There is sure a lot of people who will want this)
OpenGL can load shaders at runtime so it should be posible to load even custom ones!
But for now there is a tool called Reshade that does just that, junkerde made it work so you should ask them how he did it.
new commit from neatunsou:I cant see any difference on my controller.
https://osdn.net/users/neatunsou/pf/ikemen_go/scm/commits/525e7a53f411afc2c170ad718e9753718452a799
Fixed the 360 controller judgment.
Gacel have you checked run issue?
also fullscreen option in options doesnt really work sometimes,
Is this different in GO? Training does work that way already for me, though I haven’t fully switched over yet.
My training mode recovers automatically as normal? Does your fall down when at low health?
The logo, you can customize as you see fit as you would any icon on your pc. If you want to make a new general icon for Ikemen, go for it. The black/grey is kinda boring.
Did anyone answer your question about character themes not working? If not, can you type how you’ve written it in the select.
Scanline filter is done:Spoiler, click to toggle visibilty
Actually i'm porting libretro filters.
Here is what 2xsai looks like:Spoiler, click to toggle visibilty
You guys can tell me which filters do you want.
Copyright (C) 2007 guest(r) - guest.r@gmail.com
Copyright (c) 2015-2016 Lior Halphon
<Insert MIT Licence here>
Time for another episode of Is It Possible?:
Hidden Characters selectable when holding Start during Character Selection.
I mean having the hidden char popup while Start is pushed down like in KOF XIII.
I could add it but I have no idea how the select file should look.I want it to be easily configurable. I feel this would work:
How do you think the select file should look for a secret character?
I'm confused about which version you are using now.
Ikemen go or ikemen go plus
What is the version working with native reshade?
Actually i'm porting libretro filters.it looks fuzzy I believe it lacks the internal interpolation, this is a good step in the right direction good job.
Here is what 2xsai looks like:Spoiler, click to toggle visibilty
You guys can tell me which filters do you want.
Still though Ikemen has a buttload of issues regarding charsthat I do not know how to fix. I'll assume its because of ikemen.
I would still use Mugen for single player over itbecause I don't know what I'm doing.
However with that being said Yamori's project is the only one that looks and plays legit to me when it comes to ikemenbecause I haven't played or used any of the other projects on this board such as Rev 2,Famicom Fighters, all the builds by RodKnee..
So I guess you can code around its issues which is good to knowdisregard my previous statement as I contradict myself, if you actually put the work in there are no issues...
Actually i'm porting libretro filters.it looks fuzzy I believe it lacks the internal interpolation, this is a good step in the right direction good job.
Here is what 2xsai looks like:Spoiler, click to toggle visibilty
You guys can tell me which filters do you want.Spoiler, click to toggle visibilty
Still though Ikemen has a buttload of issues regarding chars.
I would still use Mugen for single player over it.
The "mugen emulation" to put it as this as it stands and being that mugen is closed source, you guys have come a long way.
Im actually stunned.
However with that being said Yamori's project is the only one that looks and plays legit to me when it comes to ikemen.
So I guess you can code around its issues which is good to know.
Its great to see that engine is now in active development good work to everyone involved.
I'll start messing with this new version. I'll experiment with Redhot's stuff. Just to show you an example of things we'd discussed previously.
Still though Ikemen has a buttload of issues regarding charsthat I do not know how to fix. I'll assume its because of ikemen.
I would still use Mugen for single player over itbecause I don't know what I'm doing.
However with that being said Yamori's project is the only one that looks and plays legit to me when it comes to ikemenbecause I haven't played or used any of the other projects on this board such as Rev 2,Famicom Fighters, all the builds by RodKnee..
So I guess you can code around its issues which is good to knowdisregard my previous statement as I contradict myself, if you actually put the work in there are no issues...Spoiler, click to toggle visibiltyI know, I have a bad habit of doing this to anyone who doesn't know what they are talking about sorry.
Well, you wanted to know what I do.. Someone will always undermine you, how it goes.Spoiler, click to toggle visibiltyNow you? What are you doing? What have you done? @PeXXeR: Only because you called me out. Ultimately we should just be enjoying this stuff, there is no requirement for that.Spoiler, click to toggle visibilty
Interactive stages work by using.Code:Attachedchar = <Insert stage char here>Inside the stage file.
And with it a stage is also his own char so to make the car destroyable the stage could create a car helper that receives damage on hit.
The stage itself has infinite life and recives no damage so it could not be killed and can damage both players so we need to use helpers to make breakable stuff.
Maybe I could make a example of both systems.
Warning the example could have early elecbyte level quality of sprites:
(http://elecbyte.com/assets/images/404kfm.png)
- Stage intros: some stages already have this in mugen but with mugen they characters ignore the fact it's happening along with the life bar as well. I want to see them implemented properly.
Example: https://youtu.be/0asY2HMxc3g?t=10 and a lot of SNK fighting games had this (I'm sure other companies did this as well)- Stage Depth and Stage FX: Using KOF as an example again with the Mediterranean stage, the characters start out in the background a bit then jump into the foreground as well their normal landing fx being overidden by the stage. I did see that 2Dee4ever did something similar to this in his full game, but I was thinking upon it just overidding every characters landing fx and such.
Example: https://youtu.be/zhV11wG9zDY?t=13- Breakable walls and platforms: Since you are doing stage interaction, it would be cool to see platforms that the players can stand on and walls that can be broken. (one things for sure with the walls you'd have to make them god press compatible AKA any move that takes you to the corner)
Examples: https://youtu.be/cBfNVqgYqg0?t=2542 , https://youtu.be/qkSl1toLDUw?t=121 , https://youtu.be/3zs0dy7ieY4?t=106
I'll start messing with this new version. I'll experiment with Redhot's stuff. Just to show you an example of things we'd discussed previously.
Sometimes I have curiosity to know what's the engine and coding used to coded games like STREET FIGHTER ZERO 2 for cps2, considering the game was made in 1996, what kinda engine ever have got so many features and resources in that period?You have to consider that when making a video game, you're only factoring in what affects that game and can thus code everything specifically, but when making an engine, you have to be as loose as possible so as to consider a variety of scenarios; given how Elecbyte prioritised ease of use and understanding with the CNS language, it's not realistically possible to have an engine that can do everything while having an easy to understand and use coding language, as to make something easy you have to compromise on complexity. IKEMEN does not have the limitations of MUGEN, but as you have stated, it's nowhere near as easy to learn the likes of Lua, S-SIZE, or Go because they're so vast (or in S-SIZE's case, inadequately documented).
The elecbyte always released versions very limited.
Is syntax language so limited than almost nothing is possible?
Got it working,tho the moment I try to enter video settings its shutting down.
K4thos was active yesterday.Did he send the lua files?
Sorry for not begin so active I'm drowning with college work.
After the amount of time that has passed I decided to stop waiting for K4thos to send the files.
We could implement the changes ourselves.
I did send a PM so at least he could update some important info on the first post. I will give him a week...
Also there have been a big change without K4thos Variable Names!!!(tm) by NeatUnsou.
The interactive stage feature.
The localcoord sceenpack support by me.
Dan is adding android support.
Kidcy added shaders.
And bug fixes a whole load of bugfixes.
I'm still trying to fix some bugs...
I will stop for now to make the interactive stage example. (Also counts as a variable map/name example)
Oh, and also NeatUnsou made another commit!
https://osdn.net/users/neatunsou/pf/ikemen_go/scm/commits/542e8bb9f5a3cb12415366cd5026d554fa48f5b0
Not sure what it does...
Tested with add004,my partner is still controlledd by ai when switched
Got it working,tho the moment I try to enter video settings its shutting down.
delete config.json in the data folder, re-open and go to video settings again, it will rebuild a non corrupt one
you dont really have to patch anything at all.
I'm wondering how we should make the change system with 8 chars (Or more) per team.
Remember that Ikemen GO could load a "unlimited" number of chars per match. (As long you PC can handle it)
Any ideas?
Two more buttons a la play station controller (l2 ,r2) provide extra functionalities with debatable use.We can't use the 7 original Mugen buttons for tag because it will break existing chars.
[State 200, Tag]
Type = TagIn
Trigger1 = AnimTime = 0
StateNo = 0
PartnerStateNo = 0
RedirectID = 2 ;optional
IgnoreHitPause = 0 ;optional
[State 200, Tag]
Type = TagOut
Trigger1 = AnimTime = 40
RedirectID = 2 ;optional
IgnoreHitPause = 0 ;optional
- FNTv2 fonts (feature added in mugen 1.0) - alternatively I can implement it via pure lua using anim functions.FNTv2 by lua anim... (He did retire before doing that)
check it out yourself Sending it,Nopatching add004(last version) tho you still use the patcher for portraits(since some people use different groups indexes,axis,etc,it isnt viable to put this to common.air)
https://1drv.ms/u/s!AispdDQgkFaalxzqMI1qE5yNk52L
8vs8 is already posible you but have to edit the config file manually.
Take in mind that 8vs8 is bigger than the call of duty team player number in a match.
(https://cdn.discordapp.com/attachments/488624710226018316/551959445756968971/jeiofiohrwiohrwiofwe4.png)
Here is Vulturon a "summoner" character in 8vs8.
It's a mess. Fun to watch mess but a mess nonetheless.
But the 8 team limit is really useful in turns mode.
I was trying for a month to learn how to use ikemen go/plus, but i gave up for now because i had many difficulties for using the engine.
1 - i didn't get convert my screenpacks to it, it needs a tutorial easier teaching how to do it. (readme - how to install)
2 - needs a download where there's folder with all files necessaries to run a model to you start to edit.
3 - it's not clear to me which version is being used for now ikemen go or ikemen plus.
4 - there are many documents and you don't understand the use for each one of them.
5 - although the engine has a lot of potential, but you do not even know where to start.
6 - things like increase the numbers of slots or positioning them on screen seems to be a complex editing.
7 - the exe. should run with a model done for use as the mugen when you download without editing.
8 - It's very strange that other forum members are not here to comment and supporting this engine
it can indicate they think this engine is complex too much to use.
9 - maybe my expectations about some features are a dream very ambitious.
10 - but surely you deserve congrats for all efforts to take your time for researching about.
-------------------------
ESPAÑOL
Durante un mes intenté aprender a usar ikemen go / plus, pero por el momento me rendí porque tuve muchas dificultades para usar la engine.
1 - No conseguí convertir mis screenpack pa' él, necesita un tutorial que enseñe cómo hacerlo. (readme - cómo instalar)
2 - necesita una descarga donde hay una carpeta con todos los archivos necesarios para ejecutar un modelo para comenzar a editar.
3 - no me queda claro qué versión se está utilizando para ahora ikemen go o ikemen plus.
4 - Hay muchos documentos y no entiendes el uso de cada uno de ellos.
5 - aunque la engine tiene mucho potencial, pero ni siquiera sabes por dónde empezar.
6 - cosas como aumentar la cantidad de espacios o posicionarlos en la pantalla parece ser una edición compleja.
7 - el exe. Debería ejecutarse con un modelo hecho para usar así como Mugen cuando descargalo por la primera vez.
8 - Es muy extraño que otros miembros del foro no estén aquí para comentar y dar soporte a esta engine.
puede indicar que piensan que esta engine es demasiada compleja para usarla.
9 - tal vez mis expectativas sobre algunas funcciones sean un sueño muy ambicioso.
10 - pero seguramente mereces felicitaciones por todos los esfuerzos por dedicar tu tiempo a investigar su uso.
Will Tag work with the ai too? For add004 and for the new native tag that you are making Gacel?
Tagin and tagout are features that we're never finished, but from what people documented, the sctrl Tagout crashes Mugen 1.1
Idk if you're trying to use the original Tagin and Tagout sctrls or if you're gonna rewrite those from scratch. But they don't work too well from what users experimented with.
Gacel you can use ELECTRO's interactive stages for example.
Spoiler, click to toggle visibilty
**error log**
There´s a way that config a game with ONLY tag system play (like MvC2)? example: arcade, versus and training mode with only 3vs3 (so if I choose training mode, directly I choose 3 players and no single mode or team mode)
Hi all,
From what I see there are 2 devs really active on Ikemen Go Plus, Gacel and Neat Unsou.
They both merge the commits of each other so there is only one common project for the community, this is great !
I'd like to know if there are documentations on the source code, because it uses magic numbers everywhere and is not commented...
Do I need to analyse the source code with only var names as hint to implement anything ??
Is someone trying to create a lobby so you choose your server location and see the other players online (for each game, not a global system for all games) ?
Thanks for your answer and anything that could help me doing so (even if I doubt I'll be able to do it :/ ).
Cheers
new comit but i dont know what this does/fixes
https://osdn.net/users/neatunsou/pf/ikemen_go/scm/commits/7892eef21ee5e56a44b0356b757e964ab24d1213
trigger1 = Selfstatenoexist(3000)Returns 1 if the specified Statedef number exists. If not, it returns 0. Use the number of Statedef you want to recognize in parentheses.
It could be done you have to edit the lua files.
I'm busy today so I could not help you today, but tomorrow I'll post a guide on how to do it if you are willing to wait one day.
There´s a way that config a game with ONLY tag system play (like MvC2)? example: arcade, versus and training mode with only 3vs3 (so if I choose training mode, directly I choose 3 players and no single mode or team mode)
https://youtu.be/HZ6jszfLpVc
You can tell differences quickly. Ignore the Intro to the Ikemen bit because I hadn't set the char to CPU just yet.
Hi guys!
I wondering if anyone would know what is wrong with this character? It crashes with this error:
panic: ./script/select.lua:942: chars/nightwing/hypers.st:1273:
"Heat Seeker Batarang
name: "で囲まれていません
The Character is Nightwing by Mu and McCready (I got him off Mugen archive btw, specifically the one edited by ssonic)
"Heat Seeker Batarang
name: not enclosed
"Heat Seeker Batarang
"Heat Seeker Batarang"It lacks a quote.
Good that you good your char working.
Before I made a new tread I need to make some changes:
- Upload the interactive stage examples. (I already finished)
- Finish the TAG system.
- Improve lifebar font loading. (So it search directories like mugen)
- Ask dan to create a updated version of the installer once I finish the rest.
The default system will include a "jump out" animation for the tag.
Also yeah the "Standby State Level 2" could work great for a transformation system.
Maybe not so far in the future.
Yeah is obvious that he left but at least he could say something about it.
Well guys more progress on making TAG a real mode (Right now is a glorified simul)
(https://i.imgur.com/dIcWHwW.png)
Now is his own option in the menu.
And when selected TeamMode returns "Tag"
TagIn and TagOut now can only be called when is in Tag mode (Maybe I should add a option to force it on other modes?)
EDIT:
Also Tag now has his own lifebar separate from simul.
It was a side effect of creating a new game mode.
I don’t think you should remove turns mode, it can be easily removed from the code if one doesn’t want it. Turns has its own unique challenge and fun. Just my opinion though.
Go 1.12 significantly improves the performance of sweeping when a large fraction of the heap remains live. This reduces allocation latency immediately following a garbage collection.
The Go runtime now releases memory back to the operating system more aggressively, particularly in response to large allocations that can't reuse existing heap space.
The Go runtime's timer and deadline code is faster and scales better with higher numbers of CPUs. In particular, this improves the performance of manipulating network connection deadlines.
So it's not implemented?
Thanks for the info.
I'll implement lifebars for 4 players on each side.
I would not be too hard just some lines of code to the compiler.
There is a guide about how to install this engine.You just need to download mugen.zip script.zip and ikemen go.exe.
I tried convert some screenpacks to ikemen and when I open the exe, it simply closes abruptly.
The fullscreen doesn't follow the entire screen, it will be very good a video or screenshots teaching how to change the screenpack correctly and what files need to altered once the ikemen has more files than Mugen.
I tried convert some screenpacks to ikemen and when I open the exe, it simply closes abruptly.
The fullscreen doesn't follow the entire screen, it will be very good a video or screenshots teaching how to change the screenpack correctly and what files need to altered once the ikemen has more files than Mugen.
ok crap, my bad, i now dont remember where exactly I had to put the fonts, how does your folder structure look like? i copy and pasted my fonts in a bunch of folders but now i dont remember which folder its reading
font1 = Font/f-4x6.def ;System fonts
font2 = Font/f-6x9.def ;System fonts
font3 = Font/jg.fnt ;System fonts
Great to hear! Hopefully your exams went well?Yeah exams went well.
Where will you post your bug reports with the new site?New site?
I've been testing Soy Sauce's Ryo and Robert with Don Drago's Geese and this happens when Geese uses his OTG Grab and Grab Type Thunder Break, but not for any other move.
https://streamable.com/cn85w
P.S. The Super finish doesn't seem to occur for supers involving helpers e.g the Raising Storm.
Gacel can you post resources to learn go or goby?Any news about interactive stages?
just posted an another issue
I really want to use Ikemen GO plus to my MvC project, and I will do, because I could edit almost all the game system.
Gacel, do you recommend me to use Ikemen now to aim a complete game project? (Which will have tag system and more) or do I wait for a more complete and oficial release version?
oh thats coolYes, changing aspect ratio changes chara and stages localcoord
Does resoulution changes in option,affect zoom etc? was messing with it,it looks huge when I go from 1080p to 720p
also weird,my lifebar got messed up after redownloading stuff,any changes you did?
it got messy oh well,also why lifebar got messed up as wellIn mugen 1.1 the Lifebar is also affected by the aspect ratio.
Neat Unsou I think that images show the problems with Elecbyte implementation.If do not change the localcoord of char, stage looks bigger than char.
it got messy oh well,also why lifebar got messed up as wellIn mugen 1.1 the Lifebar is also affected by the aspect ratio.
ikemen go does not support this yet.Neat Unsou I think that images show the problems with Elecbyte implementation.If do not change the localcoord of char, stage looks bigger than char.
so I will try to change the zoom automatically.
(main.LB_Localcoord43[0] - main.LB_Localcoord[0]) / 2The half of the 4:3 version of the resolution minus the full with resolution.
(main.LB_ScreenWidth - 320) / (main.LB_ScreenWidth / 320)I not sure why it works... I just have theories.
thats nice,I got it working as well
you guys can change how sth actually works?
was going to ask if you guys can mess with posx! trigger,helper projectiles have problem with
zoom,they dont appear dissappear before they reach opponent etc,this can be fixed by using alternative codes,but that would require people to edit characters one by one.
pos x != [-200,200]
I may have suggested this before, but has "Stage Orders" been considered?
For example, in the [ExtraStages] section.
stages/Boss.def, order=3
You could have it like, for example, in CVS2 where the penultimate stage is in the Osaka Arena.
Edit: for the Victory Screen, the Char name appears even if you commented the related lines.
For some reason, it seems Ikemen GO manages the launch distances values(ground.velocity, air velocity) kinda different from Mugen 1.1
https://youtu.be/Yaa90qm1nbM
Check how Ryo misses that super on Ikemen Go, while in Mugen works as intended.
Also I tested Ikemen Go on a AMD Radeon HD 7750 computer and it suffered of frame skipping even with filters turned off. Anyone else with AMD cards having bad performance?
Edit: Commenting the "snap = 40,-30" line on the hitdef fixed the problem. Wonder why.
ground.type = High
ground.slidetime = 20
ground.hittime = 20
ground.velocity = -.2,-7
air.velocity = -.2,-7
snap = 40,-30
p2stateno = 2021;2020
;p2facing =1
I've tested REDHOT's Bison and his Psycho Explosion seems to be less effective than in Mugen.
MUGEN:
https://streamable.com/amrc9
IKEMEN:
https://streamable.com/31f1p
I've tested REDHOT's Bison and his Psycho Explosion seems to be less effective than in Mugen.
MUGEN:
https://streamable.com/amrc9
IKEMEN:
https://streamable.com/31f1p
I've tested REDHOT's Bison and his Psycho Explosion seems to be less effective than in Mugen.
MUGEN:
https://streamable.com/amrc9
IKEMEN:
https://streamable.com/31f1p
The training character in ikemen has more health or takes way less damage if I remember correctly. That is why it looks like it is less powerful.
snap doesnt work well even in Mugen, it 's better to use TargetBind.I know that, but Im not the character creator
new commit by neatonsou
https://osdn.net/users/neatunsou/pf/ikemen_go/scm/commits/baeb303b92b8187047f1c7f3da32805d70406c3a
"Fixed Projectile's Pause behavior and attackmulset references "
new commit by neatonsou
https://osdn.net/users/neatunsou/pf/ikemen_go/scm/commits/baeb303b92b8187047f1c7f3da32805d70406c3a
"Fixed Projectile's Pause behavior and attackmulset references "
Sounds like it's gonna fix the Proj problem I complained about.
I forgot to say it but you have to delete the old config.json file.
Exe is x64 because that's just how it's built. I imagine Gacel could set up an automated x86 build, but he may not have the means to do so.
Exe is large because it contains all the compiled Go code, unlike vanilla IKEMEN where the code files are external.
LMAO calm down, dickwad.
Why i have this video problem on a Windows 7 machine with a capable AMD video card?
Is a problem with the Open GL , the machine used had 2009 drivers and was fixed updating them; is because default windows only have OGL 1.0 support in favor for it´s Direct X.
But unless mugen wich can be played in older enviroments, ikemen has driver issues and ikemen go have problems because of pure OGL so an alternative is highly required (SDL, DirectX).
By the way i found this familiar thing:
4 tag vs 3 simul characters separated lifebars
[youtube]https://youtu.be/f4790ipIDcA[/youtube]
Lost Here comes a new challenger working
[youtube]https://youtu.be/DAL8SVcD-4w[/youtube]
In favor of kh4tos labor i can´t share his code unless authorization, he didn´t made it publicily available for an unknown reason that i must respect.
Hi, I'm new to Ikemen. Quick, very general question - What advantages does Ikemen GO Plus have over Mugen 1.1, from a creators side? It looks real interesting, I see it has netplay.
Android version near or far?
Netplay on Android should be awesome!
i tried replace the new stuff for a screenpack with the resolution 384,224 and 470,240 but the screen didn't run correctly with the aspect ratio of fullscreen.
the resolution seems to be a problem when you add a new screenpack, i hope a more stable version with animated portraits and a perfect fit with other resolution for different screenpacks can be released soon.
https://media.discordapp.net/attachments/560287470390870016/582974316472434688/unknown.png?width=637&height=383
Gacel, are you aware that mask and transparencies are not working on Screenpacks? Just to know if you are aware.
Down the text that says press abxy to start should be masked inside the box and the cursor is not transparent, because is hiding the first item.
On the topic of issues, I'll dig up another issue I have.
"Infinite's SVK Ryu's Afterimages don't disappear until he's airborne. And his dash-in after his Supers doesn't work well with zoom-out."
This goes for his other edits of this type.
Question about Tag System:
I´m trying to implement myself a Tag System in mugen 1.1 using add004 and UNOtag, to create a new one from my MvC project (3 lifebars too).
I´m implement this into simul mode.
This could work perfectly on Ikemen too? or in Ikemen works only with the tag mode that you are doing Gacel? I want later in Ikemen to remove all the modes, and that the user can use only simul mode with this tag system that I´m doing.
The Ikemen GO TAG mode that I'm making is made in CNS and would be able to edit and/or be replaced by the user.
To make it more clear people could still create his own custom TAG systems (The system even encourages that). Ikemen GO is just making the process more streamlined and remove the individual patching and override simul requirements.
Spoiler, click to toggle visibilty
Spoiler, click to toggle visibilty
https://media.discordapp.net/attachments/560287470390870016/582974316472434688/unknown.png?width=637&height=383
Gacel, are you aware that mask and transparencies are not working on Screenpacks? Just to know if you are aware.
Down the text that says press abxy to start should be masked inside the box and the cursor is not transparent, because is hiding the first item.
Right now I'm working on Directory handling™
For example lifebar font loading does not work correctly or "../../Data/Common4.cns" does not work.
And yeah creating a TAG mode is that simple... =D
Recycling Mugen default animations was the plan.
Actually what you posted should work just only gripe "team mode" is written "teammode"
KFM is not the only character for bug testing, other characters exhibit bugs in the engine that we could not found otherwise.
For example the audio overlapping bug.
Also I merged some changes on the repo.
Kidcy added a scanline shader.
And neatunsou made some improvements to the lifebars and it seems it fixed a audio bug.
maybe we can help ( i was thinking that your main focus was tag because you talked about so much)
Maybe we can help (I was thinking that your main focus was tag because you talked about so much)
yes by giving K4thos updated code to Gacel, K4thos already gave him his blessing, changed the front page for him etc as K4thos no longer wants to put any development in it. He literally told Gacel that hes going to give him his code, its just something has happened to him since and he dissapeared, he was already willing. Please that would help greatly and contribute.
The filters are interesting, more arcadeish stuff
team mode or temmode it was just a bad written example with triggers and one needed variable to activate on common cns
what are your plans ,please can you make a list?
maybe we can help (I was thinking that your main focus was tag because you talked about so much)
https://media.discordapp.net/attachments/560287470390870016/582974316472434688/unknown.png?width=637&height=383
Gacel, are you aware that mask and transparencies are not working on Screenpacks? Just to know if you are aware.
Down the text that says press abxy to start should be masked inside the box and the cursor is not transparent, because is hiding the first item.
This is the same screenpack on MUGEN, you can see the cursor transparency allows you to see the menu item name behind it and the mask on the "Press ABXY to Start" working fine.
I just report this kind of stuff on IkemenGO AFTER testing it on Mugen.
PS: Dont ask about the KOF XIII on the menu, I was doing some job on the screenpack by the time.
https://scontent.fsyq1-1.fna.fbcdn.net/v/t1.0-9/61496771_359076608297176_225670629842485248_n.jpg?_nc_cat=100&_nc_eui2=AeEFjWOoPJut3I5T4CGrN5ttclrEA-JXyNqX9oNUEkblv-_5kwH1F7CrdxLS8uk6zw3wLXr3GBNG49VAbnUjRs_EOEHi9etPioQ5Tsmtqwielg&_nc_ht=scontent.fsyq1-1.fna&oh=21d8274d1d05ce7220137292a1829ab2&oe=5D53B822
It will work there is a "Legacy tag mode" option if you don't want to do any changes.
And if you replace "TeamMode = Simul" for "TeamMode = Tag" it will probably work in the new system.
And I'll say it again: (I did say that in the post above, I hope you read it.)The Ikemen GO TAG mode that I'm making is made in CNS and would be able to edit and/or be replaced by the user.
To make it more clear people could still create his own custom TAG systems (The system even encourages that). Ikemen GO is just making the process more streamlined and remove the individual patching and override simul requirements.
So the TAG mode I'm making is probably not too different from the one the other people could make.
It could be removed with just removing a file.
Is not built in in the exe.
Is begin made in CNS (The same stuff the characters are made) so it's not harcoded.
It can be replaced and/or edited.
Maybe it just me that I'm very bad at explaining. :embarrassed:
Gacel's comment
I´m asking because right now I´m implementing a Tag System with add004 & unotag combined, with adds and edited things into the CNS file.
Is a very hard work, so I wanted to be sure that all of this will work on Ikemen if I port all the game there, that surelly will be.
Thanks!
At simple sight without the menu code portion for your SP available to read and replicate the error i theorized two things:
1.- problems with "fnt v2" menu.item.font and menu.item.active.font using alternate "font" colors via menu localcoord bug.
2.- problem with "window" parameter coordinates again via localcoord resize on menu.
Believe me, is strange because the original mugen motif has window and item fonts working as intended.
Can you post only the first part for your screenpack code until menu please?
can you tell if is used fnt or fnt2? alternate colors for fonts? true fonts? fnt file or sff?
Even the broken mugen SP works on ikemen go.
stage issues
........
I say MUGEN 1.1 for a reason.
Also I kinda resent you calling my coding "awfull".
Agreee with devon,1.1 exclusive features and 32 bit are awful now?.Shouldnt any kind of imge work with ikemen since it was supposed to be better than mugen,definitely not liking your attitude
Nah if anything he's right for saying I'm mixing 32-bit and 8-bit images together, I've basically hacked the stage to work with 1.1 and only 1.1 because I really don't care about any other platform. It's best to not use my stages with IKEMEN.
[State 10371, LP Dec]
type = VarAdd
triggerall = root, HitPauseTime = 0
trigger1 = Var(0)
Var(0) = -1
[State 10371, LP Init]
type = VarSet
trigger1 = command = "x"
Var(0) = 3 ;This defines how long the buffering should be for this button.
[State 10371, LP Dec]
type = MapAdd
triggerall = root, HitPauseTime = 0
trigger1 = Map(LowPunch)
Map(LowPunch) = -1
[State 10371, LP Init]
type = MapSet
trigger1 = command = "x"
Map(LowPunch) = 3 ;This defines how long the buffering should be for this button.
Well my current "check list" is:
- Fix/Improve the directory handling on screenpacks and chars.
- Make the option menu and scaling scale correctly with the localcoord. <= This one
- Fix arcade mode order and add the "Here comes a new challenger"
- Make lifebar support more than 2 players per team.
EDIT 2So you could potentially have Chars transform into a different SFF or have one SFF for helpers or FX shared among all your chars. I hope so.
So I was reading the lua specifications and I noticed that you could program a lifebar in that.
The Lua "debug file" can:
- All the chars variable, state, animation, sound, life, power, constants, hitboxes, hidden flags, etc and modify or read them.
- Parse multiple ssf files on the fly.
- Parse audio files.
- Load literally any type of file.
- Display text, sprites, play sounds, etc.
So I was reading the lua specifications and I noticed that you could program a lifebar in that.
EDIT 2So you could potentially have Chars transform into a different SFF or have one SFF for helpers or FX shared among all your chars. I hope so.
So I was reading the lua specifications and I noticed that you could program a lifebar in that.
The Lua "debug file" can:
- All the chars variable, state, animation, sound, life, power, constants, hitboxes, hidden flags, etc and modify or read them.
- Parse multiple ssf files on the fly.
- Parse audio files.
- Load literally any type of file.
- Display text, sprites, play sounds, etc.
xinput works well but there is a bug that makes harder to execute specail moves.It depends on either you are on left or right side.
If you are on left side.It is harder to execute moves using right direction button.If you are on right,then left is harder.
It is more visible if you use simple chars like ryu.,
Also i am trying to learn Go language.But there are not enough tutorials for it as C languages.
So I was reading the lua specifications and I noticed that you could program a lifebar in that.
sadly it is impossible without modifications to the engine. Right now main.lua calls the game() function and waits until it's done. However we can define some kind of hook function in lua and call it every tick.
EDIT:
Right now PNG loading wastes too many resources. I've been working on a better implementation for a while, and i could share it if IKEMEN really needs it.
**EVILED question post**
1) That refers to the common1.cns file, it is copyrighted by elecbyte and it's under the mugen licence.
All the other files in the repo are under the MIT one.
The k4thos repo (Now outdated) have some characters and all of the mugen files.
3) There is a credits system in arcade mode. Make a coin operated mode is something people actually have requested so maybe it could be implemented into the future.
Arcade mode needs a lot of changes because right now is not working correctly so maybe it could be implemented at that time.
About using Ikemen commercially it could be used but you have to create a new screenpack (Because elecbyte non commercial use) and use the .zss vesion of common1.
4) Right now the Ikemen developers are well, not centralized... so who is the money for, on what base it will be split?
For me it's a hobby so on my part I will not make a Patreon.
5) Actually my fork is not forked from the K4thos one is based on the Suehiro one the reason it haves the Plus features is because Suehiro ported them to his fork. About the name right now we say Ikemen GO <Insert dev here> fork, if we want to specify what one.
What does Ikemen mean? I looked it up and all I keep getting is "handsome" and "beautiful man."
. As you noted, it could stand in the way of commercial use if someone were able to find a way to set up a coin operated cabinet.
It's good to know that it's just one mugen file with this engine, though, compared to all of them. Progress.
Thank you for your responses. They have helped me understand better.
. As you noted, it could stand in the way of commercial use if someone were able to find a way to set up a coin operated cabinet.
It's good to know that it's just one mugen file with this engine, though, compared to all of them. Progress.
Thank you for your responses. They have helped me understand better.
It will happend the same as STEPMANIA , you can use ikemen engine for an arcade machine but don't forget the games assets, characters, sounds and some code mechanics have copyright and can't be used for comercial use.
You can only use this to make a 100% original games because we ( or myself) can't support piracy with those mame machines and 100000 roms which can be free obtained (dubious ways).
MUGEN on wich ikemen is based have original games that can be counted with one hand and of course MIT licence admits to obtain the source code of any fork by itself.
If you make money, everyone can too by default so not get to exited about the future coin feature, it Will be most for nostalgic purposes (As FreePlay too).
This is the exact same conversation with another user last year who likes doom engine mods and was talking about the licences issues with ikemen and the possibilities with proffit.
what-exactly-are-ikemen-and-ikemen plus (http://mugenguild.com/forum/topics/what-exactly-are-ikemen-and-ikemen--183960.0.html)
The difference is that he was talking about Libre software instead of free software, you can take a look.
Believe me , in the community around Mugen there is a little line to cross when talking about money, proffit and commercial releases.
This is a hobby and sure are manners to obtain feeds, just don´t do the same as many people making bad things disguised as good things.
ikemen-and-deep-learning (http://mugenguild.com/forum/topics/ikemen-and-deep-learning-184020.0.html)
Use the engine as you wish and make anything you want, only respect what needs to be respected, that´s all, have fun and accomplish your dreams.
I hope to see your arcade machine finished one day.
EDIT: This is a release discussion thread, anything about personal dreams and nightmares belong to their respective section, please avoid more of that big writing blocks not related here.
About macros.
You can use a software like autoit, assign movements and even full combos on the keyboard keys, then assign the keyboard key that executes the script to a button on your gamepad using Joytokey or Xpadder.
Hey gacel you said that on github fightfx scale needs to be ported.But it already exist on fight.def in ikemen data folder?
Also UMK3 engine's source code is leaked for a year.It may be useful for you.
https://github.com/RetailGameSourceCode/UltimateMortalKombat3
Is this useful for this engine?
Ryu, random, order=1, 2=Ken, 5=Kyo, 9=Akuma
stages/KOFU-NPalace.def, music=sound/song.mp3
I downloaded one that had a premade screenpack so I'm not sure what version it came with, I also couldnt exactly figure out how to compile the build together since it's not just a straight download and seems like it had multiple steps, I had some stuff that didn't seem like it was matching up when I was trying to follow the tutorial. Also when I looked into some of the "downloads" sections for NeatUnsou's or the original build they didn't seem to have anything listed in their respective downloads sections. My apologies if I missed something but as far as I could see there was no simple way of just downloading the current build unless I misunderstood something.
Also I forgot to say it. I uploaded the screenpack changes to github.
As always builds are in AppVeyor:
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go/builds/25073384/artifacts
Curious fact: The 32 bit exe is lower in size, but the load times are a little higher. (About 5% more)
Hey MangeX thanks but I did try both that and the 64 bit and 32 bit versions I assume aren't complete, am I supposed to just add this to an existing build? because when I launch the exe included it also just crashes, I'm new to Ikemen so again I apologizeStick to plus right now imo. There isn’t any huge gain from using Go right now. Don’t worry, you can easily port things over should things change. In that older version, mp3s don’t work. If you aren’t dead set on using a 1.1 SP, you can do everything else just fine with better stability.
Been silent for a bit but idk where this is even going in the slightest now
Add Stagefrontedge, Stagebackedge.
Add projangle to Projectile.
When Destroyself is executed during the frame bound to target, the specification to return bind destination to 5050 is invalid.
Fix localcoord support for BindToTarget.
Add a platform function for creating a foothold in the Projectile, deprecated as it is still being made.
I was meant to go over this a month or so ago but you should maybe look into the zoom code on the chars.
I tested Mr.Ansatsuken's 1.1 version of his Broly. These screenshots are of the Camera Zoom on his supers.
Normal (No Zoom):
(https://i.imgur.com/IOEGqsj.png)
Zoomed Out to the right of the stage (Training is to the right off screen):
(https://i.imgur.com/tVelA6F.png)
I can probably post a video if you don't understand.
MatchRestartA interesting one it could be made for a boss that changes stages (And character def) in the second round for example.Code:[state test]Reset the round and resume. (Same effect as debug key F4)
type = MatchRestart
trigger1 = time = 10
p1def = "kfm.def"
p2def = "kfm.def"
Stagedef = "stage0.def"
reload = 1,1
Set Reload to 1 to reload the file and restart the round from the beginning. (Same effect as the debug key Shift + F4)
One item of Reload specifies whether P1 or 2 item reloads P2. If all 0, do not reload and reset the round.
When the path of def file is specified in P1def, P2def, Stagedef, the file is read when reloading. The pass at that time is based on the execution character.
All i get is a black screen with the new version and ikemen doesnt start at all.
Back again.
About making a in game store.
It's posible but not easy right now there is no score system.
The store fontend could be made in lua and there
It seems that Afterfx and the combo counter time is ignoring pausetime.
Another 2 bugs.
About fluidsytnh...
I have investigated and there are bindings for GO but are undocumented and I have not a single clue on how to use it.
I will try to build a basic command line app that loads a midi to get a hang on it.
EDIT
Also new features by neatunsou.QuoteMatchRestartA interesting one it could be made for a boss that changes stages (And character def) in the second round for example.Code:[state test]Reset the round and resume. (Same effect as debug key F4)
type = MatchRestart
trigger1 = time = 10
p1def = "kfm.def"
p2def = "kfm.def"
Stagedef = "stage0.def"
reload = 1,1
Set Reload to 1 to reload the file and restart the round from the beginning. (Same effect as the debug key Shift + F4)
One item of Reload specifies whether P1 or 2 item reloads P2. If all 0, do not reload and reset the round.
When the path of def file is specified in P1def, P2def, Stagedef, the file is read when reloading. The pass at that time is based on the execution character.
$ fluidsynth -a alsa -m alsa_seq -l -i /usr/share/soundfonts/FluidR3_GM.sf2 example.midiassuming than you installed soundfont-fluid.
ln -s FluidR3_GM.sf2 /usr/share/soundfonts/default.sf2
SOUND_FONT=/usr/share/soundfonts/FluidR3_GM.sf2
OTHER_OPTS='-a alsa -m alsa_seq -r 48000'
$ aconnect -o
client 128: 'FLUID Synth (5117)' [type=user]
0 'Synth input port (5117:0)
$ aplaymidi -p128:0 example.midi
$ SDL_SOUNDFONTS=/usr/share/soundfonts/FluidR3_GM.sf2 ./program
#include <fluidsynth.h>
int main(int argc, char** argv)
{
fluid_settings_t* settings = new_fluid_settings();
fluid_settings_setint(settings, "synth.polyphony", 128);
/* ... */
delete_fluid_settings(settings);
return 0;
}
#include <fluidsynth.h>For a full list of available synthesizer settings, please refer to FluidSettings Documentation.
int main(int argc, char** argv)
{
fluid_settings_t* settings;
fluid_synth_t* synth;
settings = new_fluid_settings();
synth = new_fluid_synth(settings);
/* Do useful things here */
delete_fluid_synth(synth);
delete_fluid_settings(settings);
return 0;
void init()
{
fluid_settings_t* settings;
fluid_synth_t* synth;
fluid_audio_driver_t* adriver;
settings = new_fluid_settings();
/* Set the synthesizer settings, if necessary */
synth = new_fluid_synth(settings);
fluid_settings_setstr(settings, "audio.driver", "jack");
adriver = new_fluid_audio_driver(settings, synth);
}
#include <fluidsynth.h>
int handle_midi_event(void* data, fluid_midi_event_t* event)
{
printf("event type: %d\n", fluid_midi_event_get_type(event));
}
int main(int argc, char** argv)
{
fluid_settings_t* settings;
fluid_midi_driver_t* mdriver;
settings = new_fluid_settings();
mdriver = new_fluid_midi_driver(settings, handle_midi_event, NULL);
/* ... */
delete_fluid_midi_driver(mdriver);
return 0;
}
#include <fluidsynth.h>
int main(int argc, char** argv)
{
int i;
fluid_settings_t* settings;
fluid_synth_t* synth;
fluid_player_t* player;
fluid_audio_driver_t* adriver;
settings = new_fluid_settings();
synth = new_fluid_synth(settings);
player = new_fluid_player(synth);
adriver = new_fluid_audio_driver(settings, synth);
/* process command line arguments */
for (i = 1; i < argc; i++) {
if (fluid_is_soundfont(argv[i])) {
fluid_synth_sfload(synth, argv[1], 1);
}
if (fluid_is_midifile(argv[i])) {
fluid_player_add(player, argv[i]);
}
}
/* play the midi files, if any */
fluid_player_play(player);
/* wait for playback termination */
fluid_player_join(player);
/* cleanup */
delete_fluid_audio_driver(adriver);
delete_fluid_player(player);
delete_fluid_synth(synth);
delete_fluid_settings(settings);
return 0;
}
fluid_settings_t* settings;
fluid_synth_t* synth;
fluid_player_t* player;
fluid_file_renderer_t* renderer;
settings = new_fluid_settings();
// specify the file to store the audio to
// make sure you compiled fluidsynth with libsndfile to get a real wave file
// otherwise this file will only contain raw s16 stereo PCM
fluid_settings_setstr(settings, "audio.file.name", "/path/to/output.wav");
// use number of samples processed as timing source, rather than the system timer
fluid_settings_setstr(settings, "player.timing-source", "sample");
// since this is a non-realtime szenario, there is no need to pin the sample data
fluid_settings_setint(settings, "synth.lock-memory", 0);
synth = new_fluid_synth(settings);
// *** loading of a soundfont omitted ***
player = new_fluid_player(synth);
fluid_player_add(player, "/path/to/midifile.mid");
fluid_player_play(player);
renderer = new_fluid_file_renderer (synth);
while (fluid_player_get_status(player) == FLUID_PLAYER_PLAYING)
{
if (fluid_file_renderer_process_block(renderer) != FLUID_OK)
{
break;
}
}
// just for sure: stop the playback explicitly and wait until finished
fluid_player_stop(player);
fluid_player_join(player);
delete_fluid_file_renderer(renderer);
delete_fluid_player(player);
delete_fluid_synth(synth);
delete_fluid_settings(settings);
package fluidsynth
// #cgo pkg-config: fluidsynth
// #include <fluidsynth.h>
// #include <stdlib.h>
import "C"
type AudioDriver struct {
ptr *C.fluid_audio_driver_t
}
func NewAudioDriver(settings Settings, synth Synth) AudioDriver {
return AudioDriver{C.new_fluid_audio_driver(settings.ptr, synth.ptr)}
}
func (d *AudioDriver) Delete() {
C.delete_fluid_audio_driver(d.ptr)
}
type FileRenderer struct {
ptr *C.fluid_file_renderer_t
}
func NewFileRenderer(synth Synth) FileRenderer {
return FileRenderer{C.new_fluid_file_renderer(synth.ptr)}
}
func (r *FileRenderer) Delete() {
C.delete_fluid_file_renderer(r.ptr)
}
func (r *FileRenderer) ProcessBlock() bool {
return C.fluid_file_renderer_process_block(r.ptr) == C.FLUID_OK
import "C"
import (
"os"
"fmt"
"unsafe"
)
type Synth struct {
csettings *C.fluid_settings_t
csynth *C.fluid_synth_t
cdriver *C.fluid_audio_driver_t
ptr *C.fluid_synth_t
}
func NewSynth(settings map[string]interface{}) *Synth {
csettings, _ := C.new_fluid_settings()
for key, value := range settings {
ckey := C.CString(key)
switch value := value.(type) {
case string:
cval := C.CString(value)
C.fluid_settings_setstr(csettings, ckey, cval)
C.free(unsafe.Pointer(cval))
case int:
C.fluid_settings_setint(csettings, ckey, C.int(value))
case float64:
C.fluid_settings_setnum(csettings, ckey, C.double(value))
default:
fmt.Fprintf(os.Stderr, "NewSynth: ignoring setting %s: unhandled type %T\n", key, value)
}
C.free(unsafe.Pointer(ckey))
func cbool(b bool) C.int {
if b {
return 1
}
csynth := C.new_fluid_synth(csettings)
//cdriver := C.new_fluid_audio_driver(csettings, csynth)
return &Synth{csettings, csynth, nil}
return 0
}
func NewSynth(settings Settings) Synth {
return Synth{C.new_fluid_synth(settings.ptr)}
}
func (s *Synth) Delete() {
C.delete_fluid_synth(s.ptr)
}
func (s *Synth) SFLoad(path string, resetPresets bool) int {
cpath := C.CString(path)
defer C.free(unsafe.Pointer(cpath))
creset := C.int(1)
if !resetPresets {
creset = 0
}
cfont_id, _ := C.fluid_synth_sfload(s.csynth, cpath, creset)
creset := cbool(resetPresets)
cfont_id, _ := C.fluid_synth_sfload(s.ptr, cpath, creset)
return int(cfont_id)
}
/* XXX can this be run automatically on gc? */
func (s *Synth) Delete() {
//C.delete_fluid_audio_driver(s.cdriver)
C.delete_fluid_synth(s.csynth)
C.delete_fluid_settings(s.csettings)
}
func (s *Synth) NoteOn(channel, note, velocity uint8) {
C.fluid_synth_noteon(s.csynth, C.int(channel), C.int(note), C.int(velocity))
C.fluid_synth_noteon(s.ptr, C.int(channel), C.int(note), C.int(velocity))
}
func (s *Synth) NoteOff(channel, note uint8) {
C.fluid_synth_noteoff(s.csynth, C.int(channel), C.int(note))
C.fluid_synth_noteoff(s.ptr, C.int(channel), C.int(note))
}
func (s *Synth) ProgramChange(channel, program uint8) {
C.fluid_synth_program_change(s.csynth, C.int(channel), C.int(program))
C.fluid_synth_program_change(s.ptr, C.int(channel), C.int(program))
}
func (s *Synth) WriteFrames_int16(dst []int16) {
if len(dst) % 2 != 0 {
panic("dst not disivible by 2")
/* WriteS16 synthesizes signed 16-bit samples. It will fill as much of the provided
slices as it can without overflowing 'left' or 'right'. For interleaved stereo, have both
'left' and 'right' share a backing array and use lstride = rstride = 2. ie:
synth.WriteS16(samples, samples[1:], 2, 2)
*/
func (s *Synth) WriteS16(left, right []int16, lstride, rstride int) {
nframes := (len(left) + lstride - 1) / lstride
rframes := (len(right) + rstride - 1) / rstride
if rframes < nframes {
nframes = rframes
}
cbuf := unsafe.Pointer(&dst[0])
C.fluid_synth_write_s16(s.csynth, C.int(len(dst)/2), cbuf, 0, 2, cbuf, 1, 2)
C.fluid_synth_write_s16(s.ptr, C.int(nframes), unsafe.Pointer(&left[0]), 0, C.int(lstride), unsafe.Pointer(&right[0]), 0, C.int(rstride))
}
func (s *Synth) WriteFloat(left, right []float32, lstride, rstride int) {
nframes := (len(left) + lstride - 1) / lstride
rframes := (len(right) + rstride - 1) / rstride
if rframes < nframes {
nframes = rframes
}
C.fluid_synth_write_float(s.ptr, C.int(nframes), unsafe.Pointer(&left[0]), 0, C.int(lstride), unsafe.Pointer(&right[0]), 0, C.int(rstride))
}
type TuningId struct {
Bank, Program uint8
}
/* ActivateKeyTuning creates/modifies a specific tuning bank/program */
func (s *Synth) ActivateKeyTuning(id TuningId, name string, tuning [128]float64, apply bool) {
n := C.CString(name)
defer C.free(unsafe.Pointer(n))
C.fluid_synth_activate_key_tuning(s.ptr, C.int(id.Bank), C.int(id.Program), n, (*C.double)(&tuning[0]), cbool(apply))
}
/* ActivateTuning switches a midi channel onto the specified tuning bank/program */
func (s *Synth) ActivateTuning(channel uint8, id TuningId, apply bool) {
C.fluid_synth_activate_tuning(s.ptr, C.int(channel), C.int(id.Bank), C.int(id.Program), cbool(apply))
package fluidsynth
// #cgo pkg-config: fluidsynth
// #include <fluidsynth.h>
// #include <stdlib.h>
import "C"
import (
"unsafe"
)
var settingNames map[string]*C.char
var nSettings = 0
type Settings struct {
ptr *C.fluid_settings_t
}
func NewSettings() Settings {
if settingNames == nil {
settingNames = make(map[string]*C.char)
}
nSettings++
return Settings{ptr: C.new_fluid_settings()}
}
func (s *Settings) Delete() {
nSettings--
if nSettings == 0 {
settingNames = nil
}
C.delete_fluid_settings(s.ptr)
}
func cname(name string) *C.char {
if cname, ok := settingNames[name]; ok {
return cname
}
cname := C.CString(name)
settingNames[name] = cname
return cname
}
/* IsRealtime returns true if changing the specified setting immediately affects an associated Synth */
func (s *Settings) IsRealtime(name string) bool {
return C.fluid_settings_is_realtime(s.ptr, cname(name)) == 1
}
func (s *Settings) SetInt(name string, val int) bool {
return C.fluid_settings_setint(s.ptr, cname(name), C.int(val)) == 1
}
func (s *Settings) SetNum(name string, val float64) bool {
return C.fluid_settings_setnum(s.ptr, cname(name), C.double(val)) == 1
}
func (s *Settings) SetString(name, val string) bool {
cval := C.CString(val)
defer C.free(unsafe.Pointer(cval))
return C.fluid_settings_setstr(s.ptr, cname(name), cval) == 1
}
func (s *Settings) GetInt(name string, val *int) bool {
return C.fluid_settings_getint(s.ptr, cname(name), (*C.int)(unsafe.Pointer(val))) == 1
}
func (s *Settings) GetNum(name string, val *float64) bool {
return C.fluid_settings_getnum(s.ptr, cname(name), (*C.double)(unsafe.Pointer(val))) == 1
}
func (s *Settings) GetString(name string, val *string) bool {
var cstr *C.char
ok := (C.fluid_settings_getstr(s.ptr, cname(name), &cstr) == 1)
if ok {
*val = C.GoString(cstr)
}
return ok
}
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"regexp"
"runtime"
"strconv"
"strings"
"github.com/go-gl/glfw/v3.2/glfw"
"github.com/yuin/gopher-lua"
)
func init() {
runtime.LockOSThread()
}
func chk(err error) {
if err != nil {
panic(err)
}
}
func createLog(p string) *os.File {
//fmt.Println("Creating log")
f, err := os.Create(p)
if err != nil {
panic(err)
}
return f
}
func closeLog(f *os.File) {
//fmt.Println("Closing log")
f.Close()
}
func main() {
if len(os.Args[1:]) > 0 {
sys.cmdFlags = make(map[string]string)
key := ""
player := 1
for _, a := range os.Args[1:] {
match, _ := regexp.MatchString("^-", a)
if match {
help, _ := regexp.MatchString("^-[h%?]", a)
if help {
fmt.Println("I.K.E.M.E.N\nOptions (case sensitive):")
fmt.Println(" -h -? Help")
fmt.Println(" -log <logfile> Records match data to <logfile>")
fmt.Println(" -r <sysfile> Loads motif <sysfile>. eg. -r motifdir or -r motifdir/system.def")
fmt.Println("\nQuick VS Options:")
fmt.Println(" -p<n> <playername> Loads player n, eg. -p3 kfm")
fmt.Println(" -p<n>.ai <level> Set player n's AI to <level>, eg. -p1.ai 8")
fmt.Println(" -p<n>.color <col> Set player n's color to <col>")
fmt.Println(" -p<n>.life <life> Sets player n's life to <life>")
fmt.Println(" -p<n>.power <power> Sets player n's power to <power>")
fmt.Println(" -rounds <num> Plays for <num> rounds, and then quits")
fmt.Println(" -s <stagename> Loads stage <stagename>")
fmt.Println("\nPress ENTER to exit.")
var s string
fmt.Scanln(&s)
os.Exit(0)
}
sys.cmdFlags[a] = ""
key = a
} else if key == "" {
sys.cmdFlags[fmt.Sprintf("-p%v", player)] = a
player += 1
} else {
sys.cmdFlags[key] = a
key = ""
}
}
}
chk(glfw.Init())
defer glfw.Terminate()
defcfg := []byte(strings.Join(strings.Split(`{
"HelperMax":56,
"PlayerProjectileMax":256,
"ExplodMax":512,
"AfterImageMax":128,
"MasterVolume":80,
"WavVolume":80,
"BgmVolume":80,
"Attack.LifeToPowerMul":0.7,
"GetHit.LifeToPowerMul":0.6,
"Width":640,
"Height":480,
"Super.TargetDefenceMul":1.5,
"LifebarFontScale":1,
"System":"script/main.lua",
"KeyConfig":[{
"Joystick":-1,
"Buttons":["UP","DOWN","LEFT","RIGHT","z","x","c","a","s","d","RETURN","q","w"]
},{
"Joystick":-1,
"Buttons":["t","g","f","h","j","k","l","u","i","o","RSHIFT","LEFTBRACKET","RIGHTBRACKET"]
}],
"JoystickConfig":[{
"Joystick":0,
"Buttons":["-7","-8","-5","-6","0","1","4","2","3","5","7","6","8"]
},{
"Joystick":1,
"Buttons":["-7","-8","-5","-6","0","1","4","2","3","5","7","6","8"]
}],
"Motif":"data/system.def",
"CommonAir":"data/common.air",
"CommonCmd":"data/common.cmd",
"SimulMode":true,
"LifeMul":100,
"Team1VS2Life":120,
"TurnsRecoveryRate":300,
"ZoomActive":false,
"ZoomMin":0.75,
"ZoomMax":1.1,
"ZoomSpeed":1,
"RoundTime":99,
"NumTurns":4,
"NumSimul":4,
"NumTag":4,
"Difficulty":8,
"Credits":10,
"ListenPort":7500,
"ContSelection":true,
"AIRandomColor":true,
"AIRamping":true,
"AutoGuard":false,
"TeamPowerShare":false,
"TeamLifeShare":false,
"Fullscreen":false,
"AudioDucking":false,
"QuickLaunch":0,
"AllowDebugKeys":true,
"PostProcessingShader": 0,
"LocalcoordScalingType": 1,
"IP":{
}
}
`, "\n"), "\r\n"))
tmp := struct {
HelperMax int32
PlayerProjectileMax int
ExplodMax int
AfterImageMax int32
MasterVolume int
WavVolume int
BgmVolume int
Attack_LifeToPowerMul float32 `json:"Attack.LifeToPowerMul"`
GetHit_LifeToPowerMul float32 `json:"GetHit.LifeToPowerMul"`
Width int32
Height int32
Super_TargetDefenceMul float32 `json:"Super.TargetDefenceMul"`
LifebarFontScale float32
System string
KeyConfig []struct {
Joystick int
Buttons []interface{}
}
JoystickConfig []struct {
Joystick int
Buttons []interface{}
}
NumTag int
TeamLifeShare bool
AIRandomColor bool
Fullscreen bool
AudioDucking bool
AllowDebugKeys bool
PostProcessingShader int32
LocalcoordScalingType int32
CommonAir string
CommonCmd string
QuickLaunch int
}{}
chk(json.Unmarshal(defcfg, &tmp))
const configFile = "data/config.json"
if bytes, err := ioutil.ReadFile(configFile); err != nil {
f, err := os.Create(configFile)
chk(err)
f.Write(defcfg)
chk(f.Close())
} else {
if len(bytes) >= 3 &&
bytes[0] == 0xef && bytes[1] == 0xbb && bytes[2] == 0xbf {
bytes = bytes[3:]
}
chk(json.Unmarshal(bytes, &tmp))
}
sys.helperMax = tmp.HelperMax
sys.playerProjectileMax = tmp.PlayerProjectileMax
sys.explodMax = tmp.ExplodMax
sys.afterImageMax = tmp.AfterImageMax
sys.attack_LifeToPowerMul = tmp.Attack_LifeToPowerMul
sys.getHit_LifeToPowerMul = tmp.GetHit_LifeToPowerMul
sys.super_TargetDefenceMul = tmp.Super_TargetDefenceMul
sys.lifebarFontScale = tmp.LifebarFontScale
sys.quickLaunch = tmp.QuickLaunch
sys.masterVolume = tmp.MasterVolume
sys.wavVolume = tmp.WavVolume
sys.bgmVolume = tmp.BgmVolume
sys.AudioDucking = tmp.AudioDucking
stoki := func(key string) int {
return int(StringToKey(key))
}
Atoi := func(key string) int {
var i int
i, _ = strconv.Atoi(key)
return i
}
for a := 0; a < tmp.NumTag; a++ {
for _, kc := range tmp.KeyConfig {
b := kc.Buttons
if kc.Joystick < 0 {
sys.keyConfig = append(sys.keyConfig, KeyConfig{kc.Joystick,
stoki(b[0].(string)), stoki(b[1].(string)),
stoki(b[2].(string)), stoki(b[3].(string)),
stoki(b[4].(string)), stoki(b[5].(string)), stoki(b[6].(string)),
stoki(b[7].(string)), stoki(b[8].(string)), stoki(b[9].(string)),
stoki(b[10].(string)), stoki(b[11].(string)), stoki(b[12].(string))})
}
}
for _, jc := range tmp.JoystickConfig {
b := jc.Buttons
if jc.Joystick >= 0 {
sys.JoystickConfig = append(sys.JoystickConfig, KeyConfig{jc.Joystick,
Atoi(b[0].(string)), Atoi(b[1].(string)),
Atoi(b[2].(string)), Atoi(b[3].(string)),
Atoi(b[4].(string)), Atoi(b[5].(string)), Atoi(b[6].(string)),
Atoi(b[7].(string)), Atoi(b[8].(string)), Atoi(b[9].(string)),
Atoi(b[10].(string)), Atoi(b[11].(string)), Atoi(b[12].(string))})
}
}
}
sys.teamLifeShare = tmp.TeamLifeShare
sys.fullscreen = tmp.Fullscreen
sys.PostProcessingShader = tmp.PostProcessingShader
sys.LocalcoordScalingType = tmp.LocalcoordScalingType
sys.aiRandomColor = tmp.AIRandomColor
sys.allowDebugKeys = tmp.AllowDebugKeys
air, err := ioutil.ReadFile(tmp.CommonAir)
if err != nil {
fmt.Print(err)
}
sys.commonAir = string("\n") + string(air)
cmd, err := ioutil.ReadFile(tmp.CommonCmd)
if err != nil {
fmt.Print(err)
}
sys.commonCmd = string("\n") + string(cmd)
//os.Mkdir("debug", os.ModeSticky|0755)
log := createLog("Ikemen.txt")
defer closeLog(log)
l := sys.init(tmp.Width, tmp.Height)
if err := l.DoFile(tmp.System); err != nil {
fmt.Fprintln(log, err)
switch err.(type) {
case *lua.ApiError:
errstr := strings.Split(err.Error(), "\n")[0]
if len(errstr) < 10 || errstr[len(errstr)-10:] != "<game end>" {
panic(err)
}
default:
panic(err)
}
}
if !sys.gameEnd {
sys.gameEnd = true
}
<-sys.audioClose
package main
import (
"C"
"encoding/json"
"fmt"
"io/ioutil"
"os"
"regexp"
"runtime"
"strconv"
"strings"
"path/filepath"
"github.com/go-gl/glfw/v3.2/glfw"
"github.com/yuin/gopher-lua"
"github.com/x42/avldrums.lv2/tree/master/fluidsynth"
)
func init() {
runtime.LockOSThread()
}
func chk(err error) {
if err != nil {
panic(err)
}
}
func createLog(p string) *os.File {
//fmt.Println("Creating log")
f, err := os.Create(p)
if err != nil {
panic(err)
}
return f
}
func closeLog(f *os.File) {
//fmt.Println("Closing log")
f.Close()
}
func (s *Synth) SFLoad(path string, resetPresets bool) int {
cpath := C.CString(path)
defer C.free(unsafe.Pointer(cpath))
creset := C.int(1)
if !resetPresets {
creset = 0
}
cfont_id, _ := C.fluid_synth_sfload("data/gamesoundfont.sf2")
creset := cbool(resetPresets)
cfont_id, _ := C.fluid_synth_sfload("data/gamesoundfont.sf2")
return int(cfont_id)
}
func main() {
if len(os.Args[1:]) > 0 {
sys.cmdFlags = make(map[string]string)
key := ""
player := 1
for _, a := range os.Args[1:] {
match, _ := regexp.MatchString("^-", a)
if match {
help, _ := regexp.MatchString("^-[h%?]", a)
if help {
fmt.Println("I.K.E.M.E.N\nOptions (case sensitive):")
fmt.Println(" -h -? Help")
fmt.Println(" -log <logfile> Records match data to <logfile>")
fmt.Println(" -r <sysfile> Loads motif <sysfile>. eg. -r motifdir or -r motifdir/system.def")
fmt.Println("\nQuick VS Options:")
fmt.Println(" -p<n> <playername> Loads player n, eg. -p3 kfm")
fmt.Println(" -p<n>.ai <level> Set player n's AI to <level>, eg. -p1.ai 8")
fmt.Println(" -p<n>.color <col> Set player n's color to <col>")
fmt.Println(" -p<n>.life <life> Sets player n's life to <life>")
fmt.Println(" -p<n>.power <power> Sets player n's power to <power>")
fmt.Println(" -rounds <num> Plays for <num> rounds, and then quits")
fmt.Println(" -s <stagename> Loads stage <stagename>")
fmt.Println("\nPress ENTER to exit.")
var s string
fmt.Scanln(&s)
os.Exit(0)
}
sys.cmdFlags[a] = ""
key = a
} else if key == "" {
sys.cmdFlags[fmt.Sprintf("-p%v", player)] = a
player += 1
} else {
sys.cmdFlags[key] = a
key = ""
}
}
}
chk(glfw.Init())
defer glfw.Terminate()
defcfg := []byte(strings.Join(strings.Split(`{
"HelperMax":56,
"PlayerProjectileMax":256,
"ExplodMax":512,
"AfterImageMax":128,
"MasterVolume":80,
"WavVolume":80,
"BgmVolume":80,
"Attack.LifeToPowerMul":0.7,
"GetHit.LifeToPowerMul":0.6,
"Width":640,
"Height":480,
"Super.TargetDefenceMul":1.5,
"LifebarFontScale":1,
"System":"script/main.lua",
"KeyConfig":[{
"Joystick":-1,
"Buttons":["UP","DOWN","LEFT","RIGHT","z","x","c","a","s","d","RETURN","q","w"]
},{
"Joystick":-1,
"Buttons":["t","g","f","h","j","k","l","u","i","o","RSHIFT","LEFTBRACKET","RIGHTBRACKET"]
}],
"JoystickConfig":[{
"Joystick":0,
"Buttons":["-7","-8","-5","-6","0","1","4","2","3","5","7","6","8"]
},{
"Joystick":1,
"Buttons":["-7","-8","-5","-6","0","1","4","2","3","5","7","6","8"]
}],
"Motif":"data/system.def",
"CommonAir":"data/common.air",
"CommonCmd":"data/common.cmd",
"SFLoad":"data/gamesoundfont.sf2"
"SimulMode":true,
"LifeMul":100,
"Team1VS2Life":120,
"TurnsRecoveryRate":300,
"ZoomActive":false,
"ZoomMin":0.75,
"ZoomMax":1.1,
"ZoomSpeed":1,
"RoundTime":99,
"NumTurns":4,
"NumSimul":4,
"NumTag":4,
"Difficulty":8,
"Credits":10,
"ListenPort":7500,
"ContSelection":true,
"AIRandomColor":true,
"AIRamping":true,
"AutoGuard":false,
"TeamPowerShare":false,
"TeamLifeShare":false,
"Fullscreen":false,
"AudioDucking":false,
"QuickLaunch":0,
"AllowDebugKeys":true,
"PostProcessingShader": 0,
"LocalcoordScalingType": 1,
"IP":{
}
}
`, "\n"), "\r\n"))
tmp := struct {
HelperMax int32
PlayerProjectileMax int
ExplodMax int
AfterImageMax int32
MasterVolume int
WavVolume int
BgmVolume int
Attack_LifeToPowerMul float32 `json:"Attack.LifeToPowerMul"`
GetHit_LifeToPowerMul float32 `json:"GetHit.LifeToPowerMul"`
Width int32
Height int32
Super_TargetDefenceMul float32 `json:"Super.TargetDefenceMul"`
LifebarFontScale float32
System string
KeyConfig []struct {
Joystick int
Buttons []interface{}
}
JoystickConfig []struct {
Joystick int
Buttons []interface{}
}
NumTag int
TeamLifeShare bool
AIRandomColor bool
Fullscreen bool
AudioDucking bool
AllowDebugKeys bool
PostProcessingShader int32
LocalcoordScalingType int32
CommonAir string
CommonCmd string
QuickLaunch int
}{}
chk(json.Unmarshal(defcfg, &tmp))
const configFile = "data/config.json"
if bytes, err := ioutil.ReadFile(configFile); err != nil {
f, err := os.Create(configFile)
chk(err)
f.Write(defcfg)
chk(f.Close())
} else {
if len(bytes) >= 3 &&
bytes[0] == 0xef && bytes[1] == 0xbb && bytes[2] == 0xbf {
bytes = bytes[3:]
}
chk(json.Unmarshal(bytes, &tmp))
}
sys.helperMax = tmp.HelperMax
sys.playerProjectileMax = tmp.PlayerProjectileMax
sys.explodMax = tmp.ExplodMax
sys.afterImageMax = tmp.AfterImageMax
sys.attack_LifeToPowerMul = tmp.Attack_LifeToPowerMul
sys.getHit_LifeToPowerMul = tmp.GetHit_LifeToPowerMul
sys.super_TargetDefenceMul = tmp.Super_TargetDefenceMul
sys.lifebarFontScale = tmp.LifebarFontScale
sys.quickLaunch = tmp.QuickLaunch
sys.masterVolume = tmp.MasterVolume
sys.wavVolume = tmp.WavVolume
sys.bgmVolume = tmp.BgmVolume
sys.AudioDucking = tmp.AudioDucking
stoki := func(key string) int {
return int(StringToKey(key))
}
Atoi := func(key string) int {
var i int
i, _ = strconv.Atoi(key)
return i
}
for a := 0; a < tmp.NumTag; a++ {
for _, kc := range tmp.KeyConfig {
b := kc.Buttons
if kc.Joystick < 0 {
sys.keyConfig = append(sys.keyConfig, KeyConfig{kc.Joystick,
stoki(b[0].(string)), stoki(b[1].(string)),
stoki(b[2].(string)), stoki(b[3].(string)),
stoki(b[4].(string)), stoki(b[5].(string)), stoki(b[6].(string)),
stoki(b[7].(string)), stoki(b[8].(string)), stoki(b[9].(string)),
stoki(b[10].(string)), stoki(b[11].(string)), stoki(b[12].(string))})
}
}
for _, jc := range tmp.JoystickConfig {
b := jc.Buttons
if jc.Joystick >= 0 {
sys.JoystickConfig = append(sys.JoystickConfig, KeyConfig{jc.Joystick,
Atoi(b[0].(string)), Atoi(b[1].(string)),
Atoi(b[2].(string)), Atoi(b[3].(string)),
Atoi(b[4].(string)), Atoi(b[5].(string)), Atoi(b[6].(string)),
Atoi(b[7].(string)), Atoi(b[8].(string)), Atoi(b[9].(string)),
Atoi(b[10].(string)), Atoi(b[11].(string)), Atoi(b[12].(string))})
}
}
}
sys.teamLifeShare = tmp.TeamLifeShare
sys.fullscreen = tmp.Fullscreen
sys.PostProcessingShader = tmp.PostProcessingShader
sys.LocalcoordScalingType = tmp.LocalcoordScalingType
sys.aiRandomColor = tmp.AIRandomColor
sys.allowDebugKeys = tmp.AllowDebugKeys
air, err := ioutil.ReadFile(tmp.CommonAir)
if err != nil {
fmt.Print(err)
}
sys.commonAir = string("\n") + string(air)
cmd, err := ioutil.ReadFile(tmp.CommonCmd)
if err != nil {
fmt.Print(err)
}
sys.commonCmd = string("\n") + string(cmd)
//os.Mkdir("debug", os.ModeSticky|0755)
log := createLog("Ikemen.txt")
defer closeLog(log)
l := sys.init(tmp.Width, tmp.Height)
if err := l.DoFile(tmp.System); err != nil {
fmt.Fprintln(log, err)
switch err.(type) {
case *lua.ApiError:
errstr := strings.Split(err.Error(), "\n")[0]
if len(errstr) < 10 || errstr[len(errstr)-10:] != "<game end>" {
panic(err)
}
default:
panic(err)
}
}
if !sys.gameEnd {
sys.gameEnd = true
}
<-sys.audioClose
Maybe MSAA is not compatible with all graphics cards because my pc can definitely run high specs games (I7, 8gb sapphire with 12gb ram).All i get is a black screen with the new version and ikemen doesnt start at all.
Possibly due to the MSAA implementation.
This will need to be an option.
jdoodle.go:15:2: cannot find package "github.com/go-gl/glfw/v3.2/glfw" in any of:
/usr/lib/go/src/github.com/go-gl/glfw/v3.2/glfw (from $GOROOT)
/root/go/src/github.com/go-gl/glfw/v3.2/glfw (from $GOPATH)
jdoodle.go:18:5: cannot find package "github.com/sqweek/fluidsynth" in any of:
/usr/lib/go/src/github.com/sqweek/fluidsynth (from $GOROOT)
/root/go/src/github.com/sqweek/fluidsynth (from $GOPATH)
jdoodle.go:17:5: cannot find package "github.com/x42/avldrums.lv2/tree/master/fluidsynth" in any of:
/usr/lib/go/src/github.com/x42/avldrums.lv2/tree/master/fluidsynth (from $GOROOT)
/root/go/src/github.com/x42/avldrums.lv2/tree/master/fluidsynth (from $GOPATH)
jdoodle.go:16:2: cannot find package "github.com/yuin/gopher-lua" in any of:
/usr/lib/go/src/github.com/yuin/gopher-lua (from $GOROOT)
/root/go/src/github.com/yuin/gopher-lua (from $GOPATH)
Command exited with non-zero status 1
$go run main.go
main.go:15:2: cannot find package "github.com/go-gl/glfw/v3.2/glfw" in any of:
/usr/lib/golang/src/github.com/go-gl/glfw/v3.2/glfw (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/go-gl/glfw/v3.2/glfw (from $GOPATH)
main.go:18:9: cannot find package "github.com/sqweek/fluidsynth" in any of:
/usr/lib/golang/src/github.com/sqweek/fluidsynth (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/sqweek/fluidsynth (from $GOPATH)
main.go:17:9: cannot find package "github.com/x42/avldrums.lv2/tree/master/fluidsynth" in any of:
/usr/lib/golang/src/github.com/x42/avldrums.lv2/tree/master/fluidsynth (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/x42/avldrums.lv2/tree/master/fluidsynth (from $GOPATH)
main.go:16:2: cannot find package "github.com/yuin/gopher-lua" in any of:
/usr/lib/golang/src/github.com/yuin/gopher-lua (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/yuin/gopher-lua (from $GOPATH)
package main
import (
"encoding/binary"
"fmt"
"math"
"os"
"path/filepath"
"github.com/timshannon/go-openal/openal"
"github.com/faiface/beep"
"github.com/faiface/beep/effects"
"github.com/faiface/beep/flac"
"github.com/faiface/beep/mp3"
"github.com/faiface/beep/speaker"
"github.com/faiface/beep/vorbis"
)
const (
audioOutLen = 2048
audioFrequency = 48000
)
// ------------------------------------------------------------------
// Audio Source
// AudioSource structure.
// It contains OpenAl's sound destination and buffer
type AudioSource struct {
Src openal.Source
bufs openal.Buffers
}
func NewAudioSource() (s *AudioSource) {
s = &AudioSource{Src: openal.NewSource(), bufs: openal.NewBuffers(2)}
for i := range s.bufs {
s.bufs[i].SetDataInt16(openal.FormatStereo16, sys.nullSndBuf[:],
audioFrequency)
}
s.Src.QueueBuffers(s.bufs)
if err := openal.Err(); err != nil {
println(err.Error())
}
return
}
func (s *AudioSource) Delete() {
for s.Src.BuffersQueued() > 0 {
s.Src.UnqueueBuffer()
}
s.bufs.Delete()
s.Src.Delete()
}
// ------------------------------------------------------------------
// Mixer
type Mixer struct {
buf [audioOutLen * 2]float32
sendBuf []int16
out chan []int16
normalizer *Normalizer
}
func newMixer() *Mixer {
return &Mixer{out: make(chan []int16, 1), normalizer: NewNormalizer()}
}
func (m *Mixer) bufClear() {
for i := range m.buf {
m.buf[i] = 0
}
}
func (m *Mixer) write() bool {
if m.sendBuf == nil {
m.sendBuf = make([]int16, len(m.buf))
for i := 0; i <= len(m.sendBuf)-2; i += 2 {
l, r := m.normalizer.Process(m.buf[i], m.buf[i+1])
m.sendBuf[i] = int16(32767 * l)
m.sendBuf[i+1] = int16(32767 * r)
}
}
select {
case m.out <- m.sendBuf:
default:
return false
}
m.sendBuf = nil
m.bufClear()
return true
}
func (m *Mixer) Mix(wav []byte, fidx float64, bytesPerSample, channels int,
sampleRate float64, loop bool, volume float32) float64 {
fidxadd := sampleRate / audioFrequency
if fidxadd > 0 {
switch bytesPerSample {
case 1:
switch channels {
case 1:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := int(fidx)
if iidx >= len(wav) {
if !loop {
break
}
iidx, fidx = 0, 0
}
sam := volume * (float32(wav[iidx]) - 128) / 128
m.buf[i] += sam
m.buf[i+1] += sam
fidx += fidxadd
}
return fidx
case 2:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := 2 * int(fidx)
if iidx > len(wav)-2 {
if !loop {
break
}
iidx, fidx = 0, 0
}
m.buf[i] += volume * (float32(wav[iidx]) - 128) / 128
m.buf[i+1] += volume * (float32(wav[iidx+1]) - 128) / 128
fidx += fidxadd
}
return fidx
}
case 2:
switch channels {
case 1:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := 2 * int(fidx)
if iidx > len(wav)-2 {
if !loop {
break
}
iidx, fidx = 0, 0
}
sam := volume *
float32(int(wav[iidx])|int(int8(wav[iidx+1]))<<8) / (1 << 15)
m.buf[i] += sam
m.buf[i+1] += sam
fidx += fidxadd
}
return fidx
case 2:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := 4 * int(fidx)
if iidx > len(wav)-4 {
if !loop {
break
}
iidx, fidx = 0, 0
}
m.buf[i] += volume *
float32(int(wav[iidx])|int(int8(wav[iidx+1]))<<8) / (1 << 15)
m.buf[i+1] += volume *
float32(int(wav[iidx+2])|int(int8(wav[iidx+3]))<<8) / (1 << 15)
fidx += fidxadd
}
return fidx
}
}
}
return float64(len(wav))
}
// ------------------------------------------------------------------
// Normalizer
type Normalizer struct {
mul float64
l, r *NormalizerLR
}
func NewNormalizer() *Normalizer {
return &Normalizer{mul: 4, l: &NormalizerLR{1, 0, 1, 1 / 32.0, 0, 0},
r: &NormalizerLR{1, 0, 1, 1 / 32.0, 0, 0}}
}
func (n *Normalizer) Process(l, r float32) (float32, float32) {
lmul := n.l.process(n.mul, &l)
rmul := n.r.process(n.mul, &r)
if sys.AudioDucking {
if lmul < rmul {
n.mul = lmul
} else {
n.mul = rmul
}
if n.mul > 16 {
n.mul = 16
}
} else {
n.mul = 0.5 * (float64(sys.wavVolume) * float64(sys.masterVolume) * 0.0001)
}
return l, r
}
type NormalizerLR struct {
heri, herihenka, fue, heikin, katayori, katayori2 float64
}
func (n *NormalizerLR) process(bai float64, sam *float32) float64 {
n.katayori = (n.katayori*audioFrequency/110 + float64(*sam)) /
(audioFrequency/110.0 + 1)
n.katayori2 = (n.katayori2*audioFrequency/112640 + float64(*sam)) /
(audioFrequency/112640.0 + 1)
s := (n.katayori2 - n.katayori) * bai
if math.Abs(s) > 1 {
bai *= math.Pow(1/math.Abs(s), n.heri)
n.herihenka += 32 * (1 - n.heri) / float64(audioFrequency+32)
if s < 0 {
s = -1
} else {
s = 1
}
} else {
tmp := (1 - math.Pow(1-math.Abs(s), 64)) * math.Pow(0.5-math.Abs(s), 3)
bai += bai * (n.heri*(1/32.0-n.heikin)/n.fue + tmp*n.fue*(1-n.heri)/32) /
(audioFrequency*2/8.0 + 1)
n.herihenka -= (0.5 - n.heikin) * n.heri / (audioFrequency * 2)
}
n.fue += (32*n.fue*(1/n.fue-math.Abs(s)) - n.fue) /
(32 * audioFrequency * 2)
n.heikin += (math.Abs(s) - n.heikin) / (audioFrequency * 2)
n.heri += n.herihenka
if n.heri < 0 {
n.heri = 0
} else if n.heri > 0 {
n.heri = 1
}
*sam = float32(s)
return bai
}
// ------------------------------------------------------------------
// Bgm
type Bgm struct {
filename string
ctrl *beep.Ctrl
}
func newBgm() *Bgm {
return &Bgm{}
}
func (bgm *Bgm) IsVorbis() bool {
return bgm.IsFormat(".ogg")
}
func (bgm *Bgm) IsMp3() bool {
return bgm.IsFormat(".mp3")
}
func (bgm *Bgm) IsFLAC() bool {
return bgm.IsFormat(".flac")
}
func (bgm *Bgm) IsFormat(extension string) bool {
return filepath.Ext(bgm.filename) == extension
}
func (bgm *Bgm) Open(filename string) {
if filepath.Base(bgm.filename) == filepath.Base(filename) {
return
}
bgm.filename = filename
speaker.Clear()
if bgm.IsVorbis() {
bgm.ReadVorbis()
} else if bgm.IsMp3() {
bgm.ReadMp3()
} else if bgm.IsFLAC() {
bgm.ReadFLAC()
}
}
func (bgm *Bgm) ReadMp3() {
f, _ := os.Open(bgm.filename)
s, format, err := mp3.Decode(f)
if err != nil {
return
}
bgm.ReadFormat(s, format)
}
func (bgm *Bgm) ReadFLAC() {
f, _ := os.Open(bgm.filename)
s, format, err := flac.Decode(f)
if err != nil {
return
}
bgm.ReadFormat(s, format)
}
func (bgm *Bgm) ReadVorbis() {
f, _ := os.Open(bgm.filename)
s, format, err := vorbis.Decode(f)
if err != nil {
return
}
bgm.ReadFormat(s, format)
}
func (bgm *Bgm) ReadFormat(s beep.StreamSeekCloser, format beep.Format) {
streamer := beep.Loop(-1, s)
volume := -5 + float64(sys.bgmVolume)*0.06*(float64(sys.masterVolume)/100)
streamer = &effects.Volume{Streamer: streamer, Base: 2, Volume: volume, Silent: volume <= -5}
resample := beep.Resample(int(3), format.SampleRate, beep.SampleRate(Mp3SampleRate), streamer)
bgm.ctrl = &beep.Ctrl{Streamer: resample}
speaker.Play(bgm.ctrl)
}
func (bgm *Bgm) Pause() {
speaker.Lock()
bgm.ctrl.Paused = true
speaker.Unlock()
return
}
// ------------------------------------------------------------------
// Wave
type Wave struct {
SamplesPerSec uint32
Channels uint16
BytesPerSample uint16
Wav []byte
}
func ReadWave(f *os.File, ofs int64) (*Wave, error) {
buf := make([]byte, 4)
n, err := f.Read(buf)
if err != nil {
return nil, err
}
if string(buf[:n]) != "RIFF" {
return nil, Error("RIFFではありません")
}
read := func(x interface{}) error {
return binary.Read(f, binary.LittleEndian, x)
}
var riffSize uint32
if err := read(&riffSize); err != nil {
return nil, err
}
riffSize += 8
if n, err = f.Read(buf); err != nil {
return nil, err
}
if string(buf[:n]) != "WAVE" {
return &Wave{SamplesPerSec: 11025, Channels: 1, BytesPerSample: 1}, nil
}
fmtSize, dataSize := uint32(0), uint32(0)
w := Wave{}
riffend := ofs + 16 + int64(riffSize)
ofs += 28
for (fmtSize == 0 || dataSize == 0) && ofs < riffend {
if n, err = f.Read(buf); err != nil {
return nil, err
}
var size uint32
if err := read(&size); err != nil {
return nil, err
}
switch string(buf[:n]) {
case "fmt ":
fmtSize = size
var fmtID uint16
if err := read(&fmtID); err != nil {
return nil, err
}
if fmtID != 1 {
return nil, Error("リニアPCMではありません")
}
if err := read(&w.Channels); err != nil {
return nil, err
}
if w.Channels < 1 || w.Channels > 2 {
return nil, Error("チャンネル数が不正です")
}
if err := read(&w.SamplesPerSec); err != nil {
return nil, err
}
if w.SamplesPerSec < 1 || w.SamplesPerSec >= 0xfffff {
return nil, Error(fmt.Sprintf("周波数が不正です %d", w.SamplesPerSec))
}
var musi uint32
if err := read(&musi); err != nil {
return nil, err
}
var mushi uint16
if err := read(&mushi); err != nil {
return nil, err
}
if err := read(&w.BytesPerSample); err != nil {
return nil, err
}
if w.BytesPerSample != 8 && w.BytesPerSample != 16 {
return nil, Error("bit数が不正です")
}
w.BytesPerSample >>= 3
case "data":
dataSize = size
w.Wav = make([]byte, dataSize)
if err := binary.Read(f, binary.LittleEndian, w.Wav); err != nil {
return nil, err
}
}
ofs += int64(size) + 8
f.Seek(ofs, 0)
}
if fmtSize == 0 {
if dataSize > 0 {
return nil, Error("fmt がありません")
}
return nil, nil
}
return &w, nil
}
// ------------------------------------------------------------------
// Snd
type Snd struct {
table map[[2]int32]*Wave
ver, ver2 uint16
}
func newSnd() *Snd {
return &Snd{table: make(map[[2]int32]*Wave)}
}
func LoadSnd(filename string) (*Snd, error) {
s := newSnd()
f, err := os.Open(filename)
if err != nil {
return nil, err
}
defer func() { chk(f.Close()) }()
buf := make([]byte, 12)
var n int
if n, err = f.Read(buf); err != nil {
return nil, err
}
if string(buf[:n]) != "ElecbyteSnd\x00" {
return nil, Error("ElecbyteSndではありません")
}
read := func(x interface{}) error {
return binary.Read(f, binary.LittleEndian, x)
}
if err := read(&s.ver); err != nil {
return nil, err
}
if err := read(&s.ver2); err != nil {
return nil, err
}
var numberOfSounds uint32
if err := read(&numberOfSounds); err != nil {
return nil, err
}
var subHeaderOffset uint32
if err := read(&subHeaderOffset); err != nil {
return nil, err
}
for i := uint32(0); i < numberOfSounds; i++ {
f.Seek(int64(subHeaderOffset), 0)
var nextSubHeaderOffset uint32
if err := read(&nextSubHeaderOffset); err != nil {
return nil, err
}
var subFileLenght uint32
if err := read(&subFileLenght); err != nil {
return nil, err
}
var num [2]int32
if err := read(&num); err != nil {
return nil, err
}
if num[0] >= 0 && num[1] >= 0 {
_, ok := s.table[num]
if !ok {
tmp, err := ReadWave(f, int64(subHeaderOffset))
if err != nil {
return nil, err
}
s.table[num] = tmp
}
}
subHeaderOffset = nextSubHeaderOffset
}
return s, nil
}
func (s *Snd) Get(gn [2]int32) *Wave {
return s.table[gn]
}
func (s *Snd) play(gn [2]int32) bool {
c := sys.sounds.GetChannel()
if c == nil {
return false
}
c.sound = s.Get(gn)
return c.sound != nil
}
// ------------------------------------------------------------------
// Sound
type Sound struct {
sound *Wave
volume int16
loop bool
freqmul float32
fidx float64
}
func (s *Sound) mix() {
if s.sound == nil {
return
}
s.fidx = sys.mixer.Mix(s.sound.Wav, s.fidx,
int(s.sound.BytesPerSample), int(s.sound.Channels),
float64(s.sound.SamplesPerSec)*float64(s.freqmul), s.loop,
float32(s.volume)/256)
if int(s.fidx) >= len(s.sound.Wav)/
int(s.sound.BytesPerSample*s.sound.Channels) {
s.sound = nil
s.fidx = 0
}
}
func (s *Sound) SetVolume(vol int32) {
if vol < 0 {
s.volume = 0
} else if vol > 512 {
s.volume = 512
} else {
s.volume = int16(vol)
}
}
func (s *Sound) SetPan(pan float32, offset *float32) {
// 未実装
}
type Sounds []Sound
func newSounds(size int) (s Sounds) {
s = make(Sounds, size)
for i := range s {
s[i] = Sound{volume: 256, freqmul: 1}
}
return
}
func (s Sounds) GetChannel() *Sound {
for i := range s {
if s[i].sound == nil {
return &s[i]
}
}
return nil
}
func (s Sounds) mixSounds() {
for i := range s {
s[i].mix()
}
}
package main
import (
"C"
"encoding/binary"
"fmt"
"math"
"os"
"path/filepath"
"github.com/timshannon/go-openal/openal"
"github.com/faiface/beep"
"github.com/faiface/beep/effects"
"github.com/faiface/beep/flac"
"github.com/faiface/beep/mp3"
"github.com/faiface/beep/speaker"
"github.com/faiface/beep/vorbis"
"github.com/x42/avldrums.lv2/tree/master/fluidsynth"
"github.com/sqweek/fluidsynth"
)
const (
audioOutLen = 2048
audioFrequency = 48000
)
// ------------------------------------------------------------------
// Audio Source
// AudioSource structure.
// It contains OpenAl's sound destination and buffer
type AudioSource struct {
Src openal.Source
bufs openal.Buffers
}
func NewAudioSource() (s *AudioSource) {
s = &AudioSource{Src: openal.NewSource(), bufs: openal.NewBuffers(2)}
for i := range s.bufs {
s.bufs[i].SetDataInt16(openal.FormatStereo16, sys.nullSndBuf[:],
audioFrequency)
}
s.Src.QueueBuffers(s.bufs)
if err := openal.Err(); err != nil {
println(err.Error())
}
return
}
func (s *AudioSource) Delete() {
for s.Src.BuffersQueued() > 0 {
s.Src.UnqueueBuffer()
}
s.bufs.Delete()
s.Src.Delete()
}
// ------------------------------------------------------------------
//MIDI HANDLING (FLUIDSYNTH)
type AudioDriver struct {
ptr *C.fluid_audio_driver_t
}
func NewAudioDriver(settings Settings, synth Synth) AudioDriver {
return AudioDriver{C.new_fluid_audio_driver(settings.ptr, synth.ptr)}
}
func (d *AudioDriver) Delete() {
C.delete_fluid_audio_driver(d.ptr)
}
type FileRenderer struct {
ptr *C.fluid_file_renderer_t
}
func NewFileRenderer(synth Synth) FileRenderer {
return FileRenderer{C.new_fluid_file_renderer(synth.ptr)}
}
func (r *FileRenderer) Delete() {
C.delete_fluid_file_renderer(r.ptr)
}
func (r *FileRenderer) ProcessBlock() bool {
return C.fluid_file_renderer_process_block(r.ptr) == C.FLUID_OK
}
func NewSettings() Settings {
if settingNames == nil {
settingNames = make(map[string]*C.char)
}
nSettings++
return Settings{ptr: C.new_fluid_settings()}
}
func (s *Settings) Delete() {
nSettings--
if nSettings == 0 {
settingNames = nil
}
C.delete_fluid_settings(s.ptr)
}
func cname(name string) *C.char {
if cname, ok := settingNames[name]; ok {
return cname
}
cname := C.CString(name)
settingNames[name] = cname
return cname
}
/* IsRealtime returns true if changing the specified setting immediately affects an associated Synth */
func (s *Settings) IsRealtime(name string) bool {
return C.fluid_settings_is_realtime(s.ptr, cname(name)) == 1
}
func (s *Settings) SetInt(name string, val int) bool {
return C.fluid_settings_setint(s.ptr, cname(name), C.int(val)) == 1
}
func (s *Settings) SetNum(name string, val float64) bool {
return C.fluid_settings_setnum(s.ptr, cname(name), C.double(val)) == 1
}
func (s *Settings) SetString(name, val string) bool {
cval := C.CString(val)
defer C.free(unsafe.Pointer(cval))
return C.fluid_settings_setstr(s.ptr, cname(name), cval) == 1
}
func (s *Settings) GetInt(name string, val *int) bool {
return C.fluid_settings_getint(s.ptr, cname(name), (*C.int)(unsafe.Pointer(val))) == 1
}
func (s *Settings) GetNum(name string, val *float64) bool {
return C.fluid_settings_getnum(s.ptr, cname(name), (*C.double)(unsafe.Pointer(val))) == 1
}
func (s *Settings) GetString(name string, val *string) bool {
var cstr *C.char
ok := (C.fluid_settings_getstr(s.ptr, cname(name), &cstr) == 1)
if ok {
*val = C.GoString(cstr)
}
return ok
}
type Synth struct {
ptr *C.fluid_synth_t
}
func cbool(b bool) C.int {
if b {
return 1
}
return 0
}
func NewSynth(settings Settings) Synth {
return Synth{C.new_fluid_synth(settings.ptr)}
}
func (s *Synth) Delete() {
C.delete_fluid_synth(s.ptr)
}
func (s *Synth) NoteOn(channel, note, velocity uint8) {
C.fluid_synth_noteon(s.ptr, C.int(channel), C.int(note), C.int(velocity))
}
func (s *Synth) NoteOff(channel, note uint8) {
C.fluid_synth_noteoff(s.ptr, C.int(channel), C.int(note))
}
func (s *Synth) ProgramChange(channel, program uint8) {
C.fluid_synth_program_change(s.ptr, C.int(channel), C.int(program))
}
/* WriteS16 synthesizes signed 16-bit samples. It will fill as much of the provided
slices as it can without overflowing 'left' or 'right'. For interleaved stereo, have both
'left' and 'right' share a backing array and use lstride = rstride = 2. ie:
synth.WriteS16(samples, samples[1:], 2, 2)
*/
func (s *Synth) WriteS16(left, right []int16, lstride, rstride int) {
nframes := (len(left) + lstride - 1) / lstride
rframes := (len(right) + rstride - 1) / rstride
if rframes < nframes {
nframes = rframes
}
C.fluid_synth_write_s16(s.ptr, C.int(nframes), unsafe.Pointer(&left[0]), 0, C.int(lstride), unsafe.Pointer(&right[0]), 0, C.int(rstride))
}
func (s *Synth) WriteFloat(left, right []float32, lstride, rstride int) {
nframes := (len(left) + lstride - 1) / lstride
rframes := (len(right) + rstride - 1) / rstride
if rframes < nframes {
nframes = rframes
}
C.fluid_synth_write_float(s.ptr, C.int(nframes), unsafe.Pointer(&left[0]), 0, C.int(lstride), unsafe.Pointer(&right[0]), 0, C.int(rstride))
}
type TuningId struct {
Bank, Program uint8
}
/* ActivateKeyTuning creates/modifies a specific tuning bank/program */
func (s *Synth) ActivateKeyTuning(id TuningId, name string, tuning [128]float64, apply bool) {
n := C.CString(name)
defer C.free(unsafe.Pointer(n))
C.fluid_synth_activate_key_tuning(s.ptr, C.int(id.Bank), C.int(id.Program), n, (*C.double)(&tuning[0]), cbool(apply))
}
/* ActivateTuning switches a midi channel onto the specified tuning bank/program */
func (s *Synth) ActivateTuning(channel uint8, id TuningId, apply bool) {
C.fluid_synth_activate_tuning(s.ptr, C.int(channel), C.int(id.Bank), C.int(id.Program), cbool(apply))
}
// ------------------------------------------------------------------
// Mixer
type Mixer struct {
buf [audioOutLen * 2]float32
sendBuf []int16
out chan []int16
normalizer *Normalizer
}
func newMixer() *Mixer {
return &Mixer{out: make(chan []int16, 1), normalizer: NewNormalizer()}
}
func (m *Mixer) bufClear() {
for i := range m.buf {
m.buf[i] = 0
}
}
func (m *Mixer) write() bool {
if m.sendBuf == nil {
m.sendBuf = make([]int16, len(m.buf))
for i := 0; i <= len(m.sendBuf)-2; i += 2 {
l, r := m.normalizer.Process(m.buf[i], m.buf[i+1])
m.sendBuf[i] = int16(32767 * l)
m.sendBuf[i+1] = int16(32767 * r)
}
}
select {
case m.out <- m.sendBuf:
default:
return false
}
m.sendBuf = nil
m.bufClear()
return true
}
func (m *Mixer) Mix(wav []byte, fidx float64, bytesPerSample, channels int,
sampleRate float64, loop bool, volume float32) float64 {
fidxadd := sampleRate / audioFrequency
if fidxadd > 0 {
switch bytesPerSample {
case 1:
switch channels {
case 1:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := int(fidx)
if iidx >= len(wav) {
if !loop {
break
}
iidx, fidx = 0, 0
}
sam := volume * (float32(wav[iidx]) - 128) / 128
m.buf[i] += sam
m.buf[i+1] += sam
fidx += fidxadd
}
return fidx
case 2:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := 2 * int(fidx)
if iidx > len(wav)-2 {
if !loop {
break
}
iidx, fidx = 0, 0
}
m.buf[i] += volume * (float32(wav[iidx]) - 128) / 128
m.buf[i+1] += volume * (float32(wav[iidx+1]) - 128) / 128
fidx += fidxadd
}
return fidx
}
case 2:
switch channels {
case 1:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := 2 * int(fidx)
if iidx > len(wav)-2 {
if !loop {
break
}
iidx, fidx = 0, 0
}
sam := volume *
float32(int(wav[iidx])|int(int8(wav[iidx+1]))<<8) / (1 << 15)
m.buf[i] += sam
m.buf[i+1] += sam
fidx += fidxadd
}
return fidx
case 2:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := 4 * int(fidx)
if iidx > len(wav)-4 {
if !loop {
break
}
iidx, fidx = 0, 0
}
m.buf[i] += volume *
float32(int(wav[iidx])|int(int8(wav[iidx+1]))<<8) / (1 << 15)
m.buf[i+1] += volume *
float32(int(wav[iidx+2])|int(int8(wav[iidx+3]))<<8) / (1 << 15)
fidx += fidxadd
}
return fidx
}
}
}
return float64(len(wav))
}
// ------------------------------------------------------------------
// Normalizer
type Normalizer struct {
mul float64
l, r *NormalizerLR
}
func NewNormalizer() *Normalizer {
return &Normalizer{mul: 4, l: &NormalizerLR{1, 0, 1, 1 / 32.0, 0, 0},
r: &NormalizerLR{1, 0, 1, 1 / 32.0, 0, 0}}
}
func (n *Normalizer) Process(l, r float32) (float32, float32) {
lmul := n.l.process(n.mul, &l)
rmul := n.r.process(n.mul, &r)
if sys.AudioDucking {
if lmul < rmul {
n.mul = lmul
} else {
n.mul = rmul
}
if n.mul > 16 {
n.mul = 16
}
} else {
n.mul = 0.5 * (float64(sys.wavVolume) * float64(sys.masterVolume) * 0.0001)
}
return l, r
}
type NormalizerLR struct {
heri, herihenka, fue, heikin, katayori, katayori2 float64
}
func (n *NormalizerLR) process(bai float64, sam *float32) float64 {
n.katayori = (n.katayori*audioFrequency/110 + float64(*sam)) /
(audioFrequency/110.0 + 1)
n.katayori2 = (n.katayori2*audioFrequency/112640 + float64(*sam)) /
(audioFrequency/112640.0 + 1)
s := (n.katayori2 - n.katayori) * bai
if math.Abs(s) > 1 {
bai *= math.Pow(1/math.Abs(s), n.heri)
n.herihenka += 32 * (1 - n.heri) / float64(audioFrequency+32)
if s < 0 {
s = -1
} else {
s = 1
}
} else {
tmp := (1 - math.Pow(1-math.Abs(s), 64)) * math.Pow(0.5-math.Abs(s), 3)
bai += bai * (n.heri*(1/32.0-n.heikin)/n.fue + tmp*n.fue*(1-n.heri)/32) /
(audioFrequency*2/8.0 + 1)
n.herihenka -= (0.5 - n.heikin) * n.heri / (audioFrequency * 2)
}
n.fue += (32*n.fue*(1/n.fue-math.Abs(s)) - n.fue) /
(32 * audioFrequency * 2)
n.heikin += (math.Abs(s) - n.heikin) / (audioFrequency * 2)
n.heri += n.herihenka
if n.heri < 0 {
n.heri = 0
} else if n.heri > 0 {
n.heri = 1
}
*sam = float32(s)
return bai
}
// ------------------------------------------------------------------
// Bgm
type Bgm struct {
filename string
ctrl *beep.Ctrl
}
func newBgm() *Bgm {
return &Bgm{}
}
func (bgm *Bgm) IsVorbis() bool {
return bgm.IsFormat(".ogg")
}
func (bgm *Bgm) IsMp3() bool {
return bgm.IsFormat(".mp3")
}
func (bgm *Bgm) IsFLAC() bool {
return bgm.IsFormat(".flac")
}
func (bgm *Bgm) IsMIDI() bool {
return bgm.IsFormat(".mid")
}
func (bgm *Bgm) IsFormat(extension string) bool {
return filepath.Ext(bgm.filename) == extension
}
func (bgm *Bgm) Open(filename string) {
if filepath.Base(bgm.filename) == filepath.Base(filename) {
return
}
bgm.filename = filename
speaker.Clear()
if bgm.IsVorbis() {
bgm.ReadVorbis()
} else if bgm.IsMp3() {
bgm.ReadMp3()
} else if bgm.IsFLAC() {
bgm.ReadFLAC()
}else if bgm.IsMIDI() {
C.new_fluid_player()
bgm.ReadMIDI()
C.fluid_player_play()
}
}
func (bgm *Bgm) ReadMp3() {
f, _ := os.Open(bgm.filename)
s, format, err := mp3.Decode(f)
if err != nil {
return
}
bgm.ReadFormat(s, format)
}
func (bgm *Bgm) ReadFLAC() {
f, _ := os.Open(bgm.filename)
s, format, err := flac.Decode(f)
if err != nil {
return
}
bgm.ReadFormat(s, format)
}
func (bgm *Bgm) ReadVorbis() {
f, _ := os.Open(bgm.filename)
s, format, err := vorbis.Decode(f)
if err != nil {
return
}
bgm.ReadFormat(s, format)
}
func (bgm *Bgm) ReadMIDI() {
f, _ := os.Open(bgm.filename)
s, format, err := C.fluid_player_play(f)
if err != nil {
return
}
bgm.ReadFormat(s, format)
}
func (bgm *Bgm) ReadFormat(s beep.StreamSeekCloser, format beep.Format) {
streamer := beep.Loop(-1, s)
volume := -5 + float64(sys.bgmVolume)*0.06*(float64(sys.masterVolume)/100)
streamer = &effects.Volume{Streamer: streamer, Base: 2, Volume: volume, Silent: volume <= -5}
resample := beep.Resample(int(3), format.SampleRate, beep.SampleRate(Mp3SampleRate), streamer)
bgm.ctrl = &beep.Ctrl{Streamer: resample}
speaker.Play(bgm.ctrl)
}
func (bgm *Bgm) Pause() {
speaker.Lock()
bgm.ctrl.Paused = true
speaker.Unlock()
return
}
// ------------------------------------------------------------------
// Wave
type Wave struct {
SamplesPerSec uint32
Channels uint16
BytesPerSample uint16
Wav []byte
}
func ReadWave(f *os.File, ofs int64) (*Wave, error) {
buf := make([]byte, 4)
n, err := f.Read(buf)
if err != nil {
return nil, err
}
if string(buf[:n]) != "RIFF" {
return nil, Error("RIFFではありません")
}
read := func(x interface{}) error {
return binary.Read(f, binary.LittleEndian, x)
}
var riffSize uint32
if err := read(&riffSize); err != nil {
return nil, err
}
riffSize += 8
if n, err = f.Read(buf); err != nil {
return nil, err
}
if string(buf[:n]) != "WAVE" {
return &Wave{SamplesPerSec: 11025, Channels: 1, BytesPerSample: 1}, nil
}
fmtSize, dataSize := uint32(0), uint32(0)
w := Wave{}
riffend := ofs + 16 + int64(riffSize)
ofs += 28
for (fmtSize == 0 || dataSize == 0) && ofs < riffend {
if n, err = f.Read(buf); err != nil {
return nil, err
}
var size uint32
if err := read(&size); err != nil {
return nil, err
}
switch string(buf[:n]) {
case "fmt ":
fmtSize = size
var fmtID uint16
if err := read(&fmtID); err != nil {
return nil, err
}
if fmtID != 1 {
return nil, Error("リニアPCMではありません")
}
if err := read(&w.Channels); err != nil {
return nil, err
}
if w.Channels < 1 || w.Channels > 2 {
return nil, Error("チャンネル数が不正です")
}
if err := read(&w.SamplesPerSec); err != nil {
return nil, err
}
if w.SamplesPerSec < 1 || w.SamplesPerSec >= 0xfffff {
return nil, Error(fmt.Sprintf("周波数が不正です %d", w.SamplesPerSec))
}
var musi uint32
if err := read(&musi); err != nil {
return nil, err
}
var mushi uint16
if err := read(&mushi); err != nil {
return nil, err
}
if err := read(&w.BytesPerSample); err != nil {
return nil, err
}
if w.BytesPerSample != 8 && w.BytesPerSample != 16 {
return nil, Error("bit数が不正です")
}
w.BytesPerSample >>= 3
case "data":
dataSize = size
w.Wav = make([]byte, dataSize)
if err := binary.Read(f, binary.LittleEndian, w.Wav); err != nil {
return nil, err
}
}
ofs += int64(size) + 8
f.Seek(ofs, 0)
}
if fmtSize == 0 {
if dataSize > 0 {
return nil, Error("fmt がありません")
}
return nil, nil
}
return &w, nil
}
// ------------------------------------------------------------------
// Snd
type Snd struct {
table map[[2]int32]*Wave
ver, ver2 uint16
}
func newSnd() *Snd {
return &Snd{table: make(map[[2]int32]*Wave)}
}
func LoadSnd(filename string) (*Snd, error) {
s := newSnd()
f, err := os.Open(filename)
if err != nil {
return nil, err
}
defer func() { chk(f.Close()) }()
buf := make([]byte, 12)
var n int
if n, err = f.Read(buf); err != nil {
return nil, err
}
if string(buf[:n]) != "ElecbyteSnd\x00" {
return nil, Error("ElecbyteSndではありません")
}
read := func(x interface{}) error {
return binary.Read(f, binary.LittleEndian, x)
}
if err := read(&s.ver); err != nil {
return nil, err
}
if err := read(&s.ver2); err != nil {
return nil, err
}
var numberOfSounds uint32
if err := read(&numberOfSounds); err != nil {
return nil, err
}
var subHeaderOffset uint32
if err := read(&subHeaderOffset); err != nil {
return nil, err
}
for i := uint32(0); i < numberOfSounds; i++ {
f.Seek(int64(subHeaderOffset), 0)
var nextSubHeaderOffset uint32
if err := read(&nextSubHeaderOffset); err != nil {
return nil, err
}
var subFileLenght uint32
if err := read(&subFileLenght); err != nil {
return nil, err
}
var num [2]int32
if err := read(&num); err != nil {
return nil, err
}
if num[0] >= 0 && num[1] >= 0 {
_, ok := s.table[num]
if !ok {
tmp, err := ReadWave(f, int64(subHeaderOffset))
if err != nil {
return nil, err
}
s.table[num] = tmp
}
}
subHeaderOffset = nextSubHeaderOffset
}
return s, nil
}
func (s *Snd) Get(gn [2]int32) *Wave {
return s.table[gn]
}
func (s *Snd) play(gn [2]int32) bool {
c := sys.sounds.GetChannel()
if c == nil {
return false
}
c.sound = s.Get(gn)
return c.sound != nil
}
// ------------------------------------------------------------------
// Sound
type Sound struct {
sound *Wave
volume int16
loop bool
freqmul float32
fidx float64
}
func (s *Sound) mix() {
if s.sound == nil {
return
}
s.fidx = sys.mixer.Mix(s.sound.Wav, s.fidx,
int(s.sound.BytesPerSample), int(s.sound.Channels),
float64(s.sound.SamplesPerSec)*float64(s.freqmul), s.loop,
float32(s.volume)/256)
if int(s.fidx) >= len(s.sound.Wav)/
int(s.sound.BytesPerSample*s.sound.Channels) {
s.sound = nil
s.fidx = 0
}
}
func (s *Sound) SetVolume(vol int32) {
if vol < 0 {
s.volume = 0
} else if vol > 512 {
s.volume = 512
} else {
s.volume = int16(vol)
}
}
func (s *Sound) SetPan(pan float32, offset *float32) {
// 未実装
}
type Sounds []Sound
func newSounds(size int) (s Sounds) {
s = make(Sounds, size)
for i := range s {
s[i] = Sound{volume: 256, freqmul: 1}
}
return
}
func (s Sounds) GetChannel() *Sound {
for i := range s {
if s[i].sound == nil {
return &s[i]
}
}
return nil
}
func (s Sounds) mixSounds() {
for i := range s {
s[i].mix()
}
}
jdoodle.go:13:2: cannot find package "github.com/faiface/beep" in any of:
/usr/lib/go/src/github.com/faiface/beep (from $GOROOT)
/root/go/src/github.com/faiface/beep (from $GOPATH)
jdoodle.go:14:2: cannot find package "github.com/faiface/beep/effects" in any of:
/usr/lib/go/src/github.com/faiface/beep/effects (from $GOROOT)
/root/go/src/github.com/faiface/beep/effects (from $GOPATH)
jdoodle.go:15:2: cannot find package "github.com/faiface/beep/flac" in any of:
/usr/lib/go/src/github.com/faiface/beep/flac (from $GOROOT)
/root/go/src/github.com/faiface/beep/flac (from $GOPATH)
jdoodle.go:16:2: cannot find package "github.com/faiface/beep/mp3" in any of:
/usr/lib/go/src/github.com/faiface/beep/mp3 (from $GOROOT)
/root/go/src/github.com/faiface/beep/mp3 (from $GOPATH)
jdoodle.go:17:2: cannot find package "github.com/faiface/beep/speaker" in any of:
/usr/lib/go/src/github.com/faiface/beep/speaker (from $GOROOT)
/root/go/src/github.com/faiface/beep/speaker (from $GOPATH)
jdoodle.go:18:2: cannot find package "github.com/faiface/beep/vorbis" in any of:
/usr/lib/go/src/github.com/faiface/beep/vorbis (from $GOROOT)
/root/go/src/github.com/faiface/beep/vorbis (from $GOPATH)
jdoodle.go:21:10: cannot find package "github.com/sqweek/fluidsynth" in any of:
/usr/lib/go/src/github.com/sqweek/fluidsynth (from $GOROOT)
/root/go/src/github.com/sqweek/fluidsynth (from $GOPATH)
jdoodle.go:11:2: cannot find package "github.com/timshannon/go-openal/openal" in any of:
/usr/lib/go/src/github.com/timshannon/go-openal/openal (from $GOROOT)
/root/go/src/github.com/timshannon/go-openal/openal (from $GOPATH)
jdoodle.go:20:9: cannot find package "github.com/x42/avldrums.lv2/tree/master/fluidsynth" in any of:
/usr/lib/go/src/github.com/x42/avldrums.lv2/tree/master/fluidsynth (from $GOROOT)
/root/go/src/github.com/x42/avldrums.lv2/tree/master/fluidsynth (from $GOPATH)
Command exited with non-zero status 1
$go run main.go
main.go:13:2: cannot find package "github.com/faiface/beep" in any of:
/usr/lib/golang/src/github.com/faiface/beep (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/faiface/beep (from $GOPATH)
main.go:14:2: cannot find package "github.com/faiface/beep/effects" in any of:
/usr/lib/golang/src/github.com/faiface/beep/effects (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/faiface/beep/effects (from $GOPATH)
main.go:15:2: cannot find package "github.com/faiface/beep/flac" in any of:
/usr/lib/golang/src/github.com/faiface/beep/flac (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/faiface/beep/flac (from $GOPATH)
main.go:16:2: cannot find package "github.com/faiface/beep/mp3" in any of:
/usr/lib/golang/src/github.com/faiface/beep/mp3 (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/faiface/beep/mp3 (from $GOPATH)
main.go:17:2: cannot find package "github.com/faiface/beep/speaker" in any of:
/usr/lib/golang/src/github.com/faiface/beep/speaker (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/faiface/beep/speaker (from $GOPATH)
main.go:18:2: cannot find package "github.com/faiface/beep/vorbis" in any of:
/usr/lib/golang/src/github.com/faiface/beep/vorbis (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/faiface/beep/vorbis (from $GOPATH)
main.go:21:10: cannot find package "github.com/sqweek/fluidsynth" in any of:
/usr/lib/golang/src/github.com/sqweek/fluidsynth (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/sqweek/fluidsynth (from $GOPATH)
main.go:11:2: cannot find package "github.com/timshannon/go-openal/openal" in any of:
/usr/lib/golang/src/github.com/timshannon/go-openal/openal (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/timshannon/go-openal/openal (from $GOPATH)
main.go:20:9: cannot find package "github.com/x42/avldrums.lv2/tree/master/fluidsynth" in any of:
/usr/lib/golang/src/github.com/x42/avldrums.lv2/tree/master/fluidsynth (from $GOROOT)
/home/cg/root/1773287/go/src/github.com/x42
package main
// #include <stdio.h>
// #include <fluidsynth.h>
import (
"C"
"encoding/json"
"fmt"
"io/ioutil"
"os"
"regexp"
"runtime"
"strconv"
"strings"
"path/filepath"
"github.com/go-gl/glfw/v3.2/glfw"
"github.com/yuin/gopher-lua"
"github.com/x42/avldrums.lv2/tree/master/fluidsynth"
)
func init() {
runtime.LockOSThread()
}
func chk(err error) {
if err != nil {
panic(err)
}
}
func createLog(p string) *os.File {
//fmt.Println("Creating log")
f, err := os.Create(p)
if err != nil {
panic(err)
}
return f
}
func closeLog(f *os.File) {
//fmt.Println("Closing log")
f.Close()
}
func (s *Synth) SFLoad(path string, resetPresets bool) int {
cpath := C.CString(path)
defer C.free(unsafe.Pointer(cpath))
creset := C.int(1)
if !resetPresets {
creset = 0
}
cfont_id, _ := C.fluid_synth_sfload("data/gamesoundfont.sf2")
creset := cbool(resetPresets)
cfont_id, _ := C.fluid_synth_sfload("data/gamesoundfont.sf2")
return int(cfont_id)
}
func main() {
if len(os.Args[1:]) > 0 {
sys.cmdFlags = make(map[string]string)
key := ""
player := 1
for _, a := range os.Args[1:] {
match, _ := regexp.MatchString("^-", a)
if match {
help, _ := regexp.MatchString("^-[h%?]", a)
if help {
fmt.Println("I.K.E.M.E.N\nOptions (case sensitive):")
fmt.Println(" -h -? Help")
fmt.Println(" -log <logfile> Records match data to <logfile>")
fmt.Println(" -r <sysfile> Loads motif <sysfile>. eg. -r motifdir or -r motifdir/system.def")
fmt.Println("\nQuick VS Options:")
fmt.Println(" -p<n> <playername> Loads player n, eg. -p3 kfm")
fmt.Println(" -p<n>.ai <level> Set player n's AI to <level>, eg. -p1.ai 8")
fmt.Println(" -p<n>.color <col> Set player n's color to <col>")
fmt.Println(" -p<n>.life <life> Sets player n's life to <life>")
fmt.Println(" -p<n>.power <power> Sets player n's power to <power>")
fmt.Println(" -rounds <num> Plays for <num> rounds, and then quits")
fmt.Println(" -s <stagename> Loads stage <stagename>")
fmt.Println("\nPress ENTER to exit.")
var s string
fmt.Scanln(&s)
os.Exit(0)
}
sys.cmdFlags[a] = ""
key = a
} else if key == "" {
sys.cmdFlags[fmt.Sprintf("-p%v", player)] = a
player += 1
} else {
sys.cmdFlags[key] = a
key = ""
}
}
}
chk(glfw.Init())
defer glfw.Terminate()
defcfg := []byte(strings.Join(strings.Split(`{
"HelperMax":56,
"PlayerProjectileMax":256,
"ExplodMax":512,
"AfterImageMax":128,
"MasterVolume":80,
"WavVolume":80,
"BgmVolume":80,
"Attack.LifeToPowerMul":0.7,
"GetHit.LifeToPowerMul":0.6,
"Width":640,
"Height":480,
"Super.TargetDefenceMul":1.5,
"LifebarFontScale":1,
"System":"script/main.lua",
"KeyConfig":[{
"Joystick":-1,
"Buttons":["UP","DOWN","LEFT","RIGHT","z","x","c","a","s","d","RETURN","q","w"]
},{
"Joystick":-1,
"Buttons":["t","g","f","h","j","k","l","u","i","o","RSHIFT","LEFTBRACKET","RIGHTBRACKET"]
}],
"JoystickConfig":[{
"Joystick":0,
"Buttons":["-7","-8","-5","-6","0","1","4","2","3","5","7","6","8"]
},{
"Joystick":1,
"Buttons":["-7","-8","-5","-6","0","1","4","2","3","5","7","6","8"]
}],
"Motif":"data/system.def",
"CommonAir":"data/common.air",
"CommonCmd":"data/common.cmd",
"SFLoad":"data/gamesoundfont.sf2"
"SimulMode":true,
"LifeMul":100,
"Team1VS2Life":120,
"TurnsRecoveryRate":300,
"ZoomActive":false,
"ZoomMin":0.75,
"ZoomMax":1.1,
"ZoomSpeed":1,
"RoundTime":99,
"NumTurns":4,
"NumSimul":4,
"NumTag":4,
"Difficulty":8,
"Credits":10,
"ListenPort":7500,
"ContSelection":true,
"AIRandomColor":true,
"AIRamping":true,
"AutoGuard":false,
"TeamPowerShare":false,
"TeamLifeShare":false,
"Fullscreen":false,
"AudioDucking":false,
"QuickLaunch":0,
"AllowDebugKeys":true,
"PostProcessingShader": 0,
"LocalcoordScalingType": 1,
"IP":{
}
}
`, "\n"), "\r\n"))
tmp := struct {
HelperMax int32
PlayerProjectileMax int
ExplodMax int
AfterImageMax int32
MasterVolume int
WavVolume int
BgmVolume int
Attack_LifeToPowerMul float32 `json:"Attack.LifeToPowerMul"`
GetHit_LifeToPowerMul float32 `json:"GetHit.LifeToPowerMul"`
Width int32
Height int32
Super_TargetDefenceMul float32 `json:"Super.TargetDefenceMul"`
LifebarFontScale float32
System string
KeyConfig []struct {
Joystick int
Buttons []interface{}
}
JoystickConfig []struct {
Joystick int
Buttons []interface{}
}
NumTag int
TeamLifeShare bool
AIRandomColor bool
Fullscreen bool
AudioDucking bool
AllowDebugKeys bool
PostProcessingShader int32
LocalcoordScalingType int32
CommonAir string
CommonCmd string
QuickLaunch int
}{}
chk(json.Unmarshal(defcfg, &tmp))
const configFile = "data/config.json"
if bytes, err := ioutil.ReadFile(configFile); err != nil {
f, err := os.Create(configFile)
chk(err)
f.Write(defcfg)
chk(f.Close())
} else {
if len(bytes) >= 3 &&
bytes[0] == 0xef && bytes[1] == 0xbb && bytes[2] == 0xbf {
bytes = bytes[3:]
}
chk(json.Unmarshal(bytes, &tmp))
}
sys.helperMax = tmp.HelperMax
sys.playerProjectileMax = tmp.PlayerProjectileMax
sys.explodMax = tmp.ExplodMax
sys.afterImageMax = tmp.AfterImageMax
sys.attack_LifeToPowerMul = tmp.Attack_LifeToPowerMul
sys.getHit_LifeToPowerMul = tmp.GetHit_LifeToPowerMul
sys.super_TargetDefenceMul = tmp.Super_TargetDefenceMul
sys.lifebarFontScale = tmp.LifebarFontScale
sys.quickLaunch = tmp.QuickLaunch
sys.masterVolume = tmp.MasterVolume
sys.wavVolume = tmp.WavVolume
sys.bgmVolume = tmp.BgmVolume
sys.AudioDucking = tmp.AudioDucking
stoki := func(key string) int {
return int(StringToKey(key))
}
Atoi := func(key string) int {
var i int
i, _ = strconv.Atoi(key)
return i
}
for a := 0; a < tmp.NumTag; a++ {
for _, kc := range tmp.KeyConfig {
b := kc.Buttons
if kc.Joystick < 0 {
sys.keyConfig = append(sys.keyConfig, KeyConfig{kc.Joystick,
stoki(b[0].(string)), stoki(b[1].(string)),
stoki(b[2].(string)), stoki(b[3].(string)),
stoki(b[4].(string)), stoki(b[5].(string)), stoki(b[6].(string)),
stoki(b[7].(string)), stoki(b[8].(string)), stoki(b[9].(string)),
stoki(b[10].(string)), stoki(b[11].(string)), stoki(b[12].(string))})
}
}
for _, jc := range tmp.JoystickConfig {
b := jc.Buttons
if jc.Joystick >= 0 {
sys.JoystickConfig = append(sys.JoystickConfig, KeyConfig{jc.Joystick,
Atoi(b[0].(string)), Atoi(b[1].(string)),
Atoi(b[2].(string)), Atoi(b[3].(string)),
Atoi(b[4].(string)), Atoi(b[5].(string)), Atoi(b[6].(string)),
Atoi(b[7].(string)), Atoi(b[8].(string)), Atoi(b[9].(string)),
Atoi(b[10].(string)), Atoi(b[11].(string)), Atoi(b[12].(string))})
}
}
}
sys.teamLifeShare = tmp.TeamLifeShare
sys.fullscreen = tmp.Fullscreen
sys.PostProcessingShader = tmp.PostProcessingShader
sys.LocalcoordScalingType = tmp.LocalcoordScalingType
sys.aiRandomColor = tmp.AIRandomColor
sys.allowDebugKeys = tmp.AllowDebugKeys
air, err := ioutil.ReadFile(tmp.CommonAir)
if err != nil {
fmt.Print(err)
}
sys.commonAir = string("\n") + string(air)
cmd, err := ioutil.ReadFile(tmp.CommonCmd)
if err != nil {
fmt.Print(err)
}
sys.commonCmd = string("\n") + string(cmd)
//os.Mkdir("debug", os.ModeSticky|0755)
log := createLog("Ikemen.txt")
defer closeLog(log)
l := sys.init(tmp.Width, tmp.Height)
if err := l.DoFile(tmp.System); err != nil {
fmt.Fprintln(log, err)
switch err.(type) {
case *lua.ApiError:
errstr := strings.Split(err.Error(), "\n")[0]
if len(errstr) < 10 || errstr[len(errstr)-10:] != "<game end>" {
panic(err)
}
default:
panic(err)
}
}
if !sys.gameEnd {
sys.gameEnd = true
}
<-sys.audioClose
package main
// #include <stdio.h>
// #include <fluidsynth.h>
import (
"C"
"encoding/binary"
"fmt"
"math"
"os"
"path/filepath"
"github.com/timshannon/go-openal/openal"
"github.com/faiface/beep"
"github.com/faiface/beep/effects"
"github.com/faiface/beep/flac"
"github.com/faiface/beep/mp3"
"github.com/faiface/beep/speaker"
"github.com/faiface/beep/vorbis"
"github.com/x42/avldrums.lv2/tree/master/fluidsynth"
"github.com/sqweek/fluidsynth"
)
const (
audioOutLen = 2048
audioFrequency = 48000
)
// ------------------------------------------------------------------
// Audio Source
// AudioSource structure.
// It contains OpenAl's sound destination and buffer
type AudioSource struct {
Src openal.Source
bufs openal.Buffers
}
func NewAudioSource() (s *AudioSource) {
s = &AudioSource{Src: openal.NewSource(), bufs: openal.NewBuffers(2)}
for i := range s.bufs {
s.bufs[i].SetDataInt16(openal.FormatStereo16, sys.nullSndBuf[:],
audioFrequency)
}
s.Src.QueueBuffers(s.bufs)
if err := openal.Err(); err != nil {
println(err.Error())
}
return
}
func (s *AudioSource) Delete() {
for s.Src.BuffersQueued() > 0 {
s.Src.UnqueueBuffer()
}
s.bufs.Delete()
s.Src.Delete()
}
// ------------------------------------------------------------------
//MIDI HANDLING (FLUIDSYNTH)
type AudioDriver struct {
ptr *C.fluid_audio_driver_t
}
func NewAudioDriver(settings Settings, synth Synth) AudioDriver {
return AudioDriver{C.new_fluid_audio_driver(settings.ptr, synth.ptr)}
}
func (d *AudioDriver) Delete() {
C.delete_fluid_audio_driver(d.ptr)
}
type FileRenderer struct {
ptr *C.fluid_file_renderer_t
}
func NewFileRenderer(synth Synth) FileRenderer {
return FileRenderer{C.new_fluid_file_renderer(synth.ptr)}
}
func (r *FileRenderer) Delete() {
C.delete_fluid_file_renderer(r.ptr)
}
func (r *FileRenderer) ProcessBlock() bool {
return C.fluid_file_renderer_process_block(r.ptr) == C.FLUID_OK
}
func NewSettings() Settings {
if settingNames == nil {
settingNames = make(map[string]*C.char)
}
nSettings++
return Settings{ptr: C.new_fluid_settings()}
}
func (s *Settings) Delete() {
nSettings--
if nSettings == 0 {
settingNames = nil
}
C.delete_fluid_settings(s.ptr)
}
func cname(name string) *C.char {
if cname, ok := settingNames[name]; ok {
return cname
}
cname := C.CString(name)
settingNames[name] = cname
return cname
}
/* IsRealtime returns true if changing the specified setting immediately affects an associated Synth */
func (s *Settings) IsRealtime(name string) bool {
return C.fluid_settings_is_realtime(s.ptr, cname(name)) == 1
}
func (s *Settings) SetInt(name string, val int) bool {
return C.fluid_settings_setint(s.ptr, cname(name), C.int(val)) == 1
}
func (s *Settings) SetNum(name string, val float64) bool {
return C.fluid_settings_setnum(s.ptr, cname(name), C.double(val)) == 1
}
func (s *Settings) SetString(name, val string) bool {
cval := C.CString(val)
defer C.free(unsafe.Pointer(cval))
return C.fluid_settings_setstr(s.ptr, cname(name), cval) == 1
}
func (s *Settings) GetInt(name string, val *int) bool {
return C.fluid_settings_getint(s.ptr, cname(name), (*C.int)(unsafe.Pointer(val))) == 1
}
func (s *Settings) GetNum(name string, val *float64) bool {
return C.fluid_settings_getnum(s.ptr, cname(name), (*C.double)(unsafe.Pointer(val))) == 1
}
func (s *Settings) GetString(name string, val *string) bool {
var cstr *C.char
ok := (C.fluid_settings_getstr(s.ptr, cname(name), &cstr) == 1)
if ok {
*val = C.GoString(cstr)
}
return ok
}
type Synth struct {
ptr *C.fluid_synth_t
}
func cbool(b bool) C.int {
if b {
return 1
}
return 0
}
func NewSynth(settings Settings) Synth {
return Synth{C.new_fluid_synth(settings.ptr)}
}
func (s *Synth) Delete() {
C.delete_fluid_synth(s.ptr)
}
func (s *Synth) NoteOn(channel, note, velocity uint8) {
C.fluid_synth_noteon(s.ptr, C.int(channel), C.int(note), C.int(velocity))
}
func (s *Synth) NoteOff(channel, note uint8) {
C.fluid_synth_noteoff(s.ptr, C.int(channel), C.int(note))
}
func (s *Synth) ProgramChange(channel, program uint8) {
C.fluid_synth_program_change(s.ptr, C.int(channel), C.int(program))
}
/* WriteS16 synthesizes signed 16-bit samples. It will fill as much of the provided
slices as it can without overflowing 'left' or 'right'. For interleaved stereo, have both
'left' and 'right' share a backing array and use lstride = rstride = 2. ie:
synth.WriteS16(samples, samples[1:], 2, 2)
*/
func (s *Synth) WriteS16(left, right []int16, lstride, rstride int) {
nframes := (len(left) + lstride - 1) / lstride
rframes := (len(right) + rstride - 1) / rstride
if rframes < nframes {
nframes = rframes
}
C.fluid_synth_write_s16(s.ptr, C.int(nframes), unsafe.Pointer(&left[0]), 0, C.int(lstride), unsafe.Pointer(&right[0]), 0, C.int(rstride))
}
func (s *Synth) WriteFloat(left, right []float32, lstride, rstride int) {
nframes := (len(left) + lstride - 1) / lstride
rframes := (len(right) + rstride - 1) / rstride
if rframes < nframes {
nframes = rframes
}
C.fluid_synth_write_float(s.ptr, C.int(nframes), unsafe.Pointer(&left[0]), 0, C.int(lstride), unsafe.Pointer(&right[0]), 0, C.int(rstride))
}
type TuningId struct {
Bank, Program uint8
}
/* ActivateKeyTuning creates/modifies a specific tuning bank/program */
func (s *Synth) ActivateKeyTuning(id TuningId, name string, tuning [128]float64, apply bool) {
n := C.CString(name)
defer C.free(unsafe.Pointer(n))
C.fluid_synth_activate_key_tuning(s.ptr, C.int(id.Bank), C.int(id.Program), n, (*C.double)(&tuning[0]), cbool(apply))
}
/* ActivateTuning switches a midi channel onto the specified tuning bank/program */
func (s *Synth) ActivateTuning(channel uint8, id TuningId, apply bool) {
C.fluid_synth_activate_tuning(s.ptr, C.int(channel), C.int(id.Bank), C.int(id.Program), cbool(apply))
}
// ------------------------------------------------------------------
// Mixer
type Mixer struct {
buf [audioOutLen * 2]float32
sendBuf []int16
out chan []int16
normalizer *Normalizer
}
func newMixer() *Mixer {
return &Mixer{out: make(chan []int16, 1), normalizer: NewNormalizer()}
}
func (m *Mixer) bufClear() {
for i := range m.buf {
m.buf[i] = 0
}
}
func (m *Mixer) write() bool {
if m.sendBuf == nil {
m.sendBuf = make([]int16, len(m.buf))
for i := 0; i <= len(m.sendBuf)-2; i += 2 {
l, r := m.normalizer.Process(m.buf[i], m.buf[i+1])
m.sendBuf[i] = int16(32767 * l)
m.sendBuf[i+1] = int16(32767 * r)
}
}
select {
case m.out <- m.sendBuf:
default:
return false
}
m.sendBuf = nil
m.bufClear()
return true
}
func (m *Mixer) Mix(wav []byte, fidx float64, bytesPerSample, channels int,
sampleRate float64, loop bool, volume float32) float64 {
fidxadd := sampleRate / audioFrequency
if fidxadd > 0 {
switch bytesPerSample {
case 1:
switch channels {
case 1:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := int(fidx)
if iidx >= len(wav) {
if !loop {
break
}
iidx, fidx = 0, 0
}
sam := volume * (float32(wav[iidx]) - 128) / 128
m.buf[i] += sam
m.buf[i+1] += sam
fidx += fidxadd
}
return fidx
case 2:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := 2 * int(fidx)
if iidx > len(wav)-2 {
if !loop {
break
}
iidx, fidx = 0, 0
}
m.buf[i] += volume * (float32(wav[iidx]) - 128) / 128
m.buf[i+1] += volume * (float32(wav[iidx+1]) - 128) / 128
fidx += fidxadd
}
return fidx
}
case 2:
switch channels {
case 1:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := 2 * int(fidx)
if iidx > len(wav)-2 {
if !loop {
break
}
iidx, fidx = 0, 0
}
sam := volume *
float32(int(wav[iidx])|int(int8(wav[iidx+1]))<<8) / (1 << 15)
m.buf[i] += sam
m.buf[i+1] += sam
fidx += fidxadd
}
return fidx
case 2:
for i := 0; i <= len(m.buf)-2; i += 2 {
iidx := 4 * int(fidx)
if iidx > len(wav)-4 {
if !loop {
break
}
iidx, fidx = 0, 0
}
m.buf[i] += volume *
float32(int(wav[iidx])|int(int8(wav[iidx+1]))<<8) / (1 << 15)
m.buf[i+1] += volume *
float32(int(wav[iidx+2])|int(int8(wav[iidx+3]))<<8) / (1 << 15)
fidx += fidxadd
}
return fidx
}
}
}
return float64(len(wav))
}
// ------------------------------------------------------------------
// Normalizer
type Normalizer struct {
mul float64
l, r *NormalizerLR
}
func NewNormalizer() *Normalizer {
return &Normalizer{mul: 4, l: &NormalizerLR{1, 0, 1, 1 / 32.0, 0, 0},
r: &NormalizerLR{1, 0, 1, 1 / 32.0, 0, 0}}
}
func (n *Normalizer) Process(l, r float32) (float32, float32) {
lmul := n.l.process(n.mul, &l)
rmul := n.r.process(n.mul, &r)
if sys.AudioDucking {
if lmul < rmul {
n.mul = lmul
} else {
n.mul = rmul
}
if n.mul > 16 {
n.mul = 16
}
} else {
n.mul = 0.5 * (float64(sys.wavVolume) * float64(sys.masterVolume) * 0.0001)
}
return l, r
}
type NormalizerLR struct {
heri, herihenka, fue, heikin, katayori, katayori2 float64
}
func (n *NormalizerLR) process(bai float64, sam *float32) float64 {
n.katayori = (n.katayori*audioFrequency/110 + float64(*sam)) /
(audioFrequency/110.0 + 1)
n.katayori2 = (n.katayori2*audioFrequency/112640 + float64(*sam)) /
(audioFrequency/112640.0 + 1)
s := (n.katayori2 - n.katayori) * bai
if math.Abs(s) > 1 {
bai *= math.Pow(1/math.Abs(s), n.heri)
n.herihenka += 32 * (1 - n.heri) / float64(audioFrequency+32)
if s < 0 {
s = -1
} else {
s = 1
}
} else {
tmp := (1 - math.Pow(1-math.Abs(s), 64)) * math.Pow(0.5-math.Abs(s), 3)
bai += bai * (n.heri*(1/32.0-n.heikin)/n.fue + tmp*n.fue*(1-n.heri)/32) /
(audioFrequency*2/8.0 + 1)
n.herihenka -= (0.5 - n.heikin) * n.heri / (audioFrequency * 2)
}
n.fue += (32*n.fue*(1/n.fue-math.Abs(s)) - n.fue) /
(32 * audioFrequency * 2)
n.heikin += (math.Abs(s) - n.heikin) / (audioFrequency * 2)
n.heri += n.herihenka
if n.heri < 0 {
n.heri = 0
} else if n.heri > 0 {
n.heri = 1
}
*sam = float32(s)
return bai
}
// ------------------------------------------------------------------
// Bgm
type Bgm struct {
filename string
ctrl *beep.Ctrl
}
func newBgm() *Bgm {
return &Bgm{}
}
func (bgm *Bgm) IsVorbis() bool {
return bgm.IsFormat(".ogg")
}
func (bgm *Bgm) IsMp3() bool {
return bgm.IsFormat(".mp3")
}
func (bgm *Bgm) IsFLAC() bool {
return bgm.IsFormat(".flac")
}
func (bgm *Bgm) IsMIDI() bool {
return bgm.IsFormat(".mid")
}
func (bgm *Bgm) IsFormat(extension string) bool {
return filepath.Ext(bgm.filename) == extension
}
func (bgm *Bgm) Open(filename string) {
if filepath.Base(bgm.filename) == filepath.Base(filename) {
return
}
bgm.filename = filename
speaker.Clear()
if bgm.IsVorbis() {
bgm.ReadVorbis()
} else if bgm.IsMp3() {
bgm.ReadMp3()
} else if bgm.IsFLAC() {
bgm.ReadFLAC()
}else if bgm.IsMIDI() {
C.new_fluid_player()
bgm.ReadMIDI()
C.fluid_player_play()
}
}
func (bgm *Bgm) ReadMp3() {
f, _ := os.Open(bgm.filename)
s, format, err := mp3.Decode(f)
if err != nil {
return
}
bgm.ReadFormat(s, format)
}
func (bgm *Bgm) ReadFLAC() {
f, _ := os.Open(bgm.filename)
s, format, err := flac.Decode(f)
if err != nil {
return
}
bgm.ReadFormat(s, format)
}
func (bgm *Bgm) ReadVorbis() {
f, _ := os.Open(bgm.filename)
s, format, err := vorbis.Decode(f)
if err != nil {
return
}
bgm.ReadFormat(s, format)
}
func (bgm *Bgm) ReadMIDI() {
f, _ := os.Open(bgm.filename)
s, format, err := C.fluid_player_play(f)
if err != nil {
return
}
bgm.ReadFormat(s, format)
}
func (bgm *Bgm) ReadFormat(s beep.StreamSeekCloser, format beep.Format) {
streamer := beep.Loop(-1, s)
volume := -5 + float64(sys.bgmVolume)*0.06*(float64(sys.masterVolume)/100)
streamer = &effects.Volume{Streamer: streamer, Base: 2, Volume: volume, Silent: volume <= -5}
resample := beep.Resample(int(3), format.SampleRate, beep.SampleRate(Mp3SampleRate), streamer)
bgm.ctrl = &beep.Ctrl{Streamer: resample}
speaker.Play(bgm.ctrl)
}
func (bgm *Bgm) Pause() {
speaker.Lock()
bgm.ctrl.Paused = true
speaker.Unlock()
return
}
// ------------------------------------------------------------------
// Wave
type Wave struct {
SamplesPerSec uint32
Channels uint16
BytesPerSample uint16
Wav []byte
}
func ReadWave(f *os.File, ofs int64) (*Wave, error) {
buf := make([]byte, 4)
n, err := f.Read(buf)
if err != nil {
return nil, err
}
if string(buf[:n]) != "RIFF" {
return nil, Error("RIFFではありません")
}
read := func(x interface{}) error {
return binary.Read(f, binary.LittleEndian, x)
}
var riffSize uint32
if err := read(&riffSize); err != nil {
return nil, err
}
riffSize += 8
if n, err = f.Read(buf); err != nil {
return nil, err
}
if string(buf[:n]) != "WAVE" {
return &Wave{SamplesPerSec: 11025, Channels: 1, BytesPerSample: 1}, nil
}
fmtSize, dataSize := uint32(0), uint32(0)
w := Wave{}
riffend := ofs + 16 + int64(riffSize)
ofs += 28
for (fmtSize == 0 || dataSize == 0) && ofs < riffend {
if n, err = f.Read(buf); err != nil {
return nil, err
}
var size uint32
if err := read(&size); err != nil {
return nil, err
}
switch string(buf[:n]) {
case "fmt ":
fmtSize = size
var fmtID uint16
if err := read(&fmtID); err != nil {
return nil, err
}
if fmtID != 1 {
return nil, Error("リニアPCMではありません")
}
if err := read(&w.Channels); err != nil {
return nil, err
}
if w.Channels < 1 || w.Channels > 2 {
return nil, Error("チャンネル数が不正です")
}
if err := read(&w.SamplesPerSec); err != nil {
return nil, err
}
if w.SamplesPerSec < 1 || w.SamplesPerSec >= 0xfffff {
return nil, Error(fmt.Sprintf("周波数が不正です %d", w.SamplesPerSec))
}
var musi uint32
if err := read(&musi); err != nil {
return nil, err
}
var mushi uint16
if err := read(&mushi); err != nil {
return nil, err
}
if err := read(&w.BytesPerSample); err != nil {
return nil, err
}
if w.BytesPerSample != 8 && w.BytesPerSample != 16 {
return nil, Error("bit数が不正です")
}
w.BytesPerSample >>= 3
case "data":
dataSize = size
w.Wav = make([]byte, dataSize)
if err := binary.Read(f, binary.LittleEndian, w.Wav); err != nil {
return nil, err
}
}
ofs += int64(size) + 8
f.Seek(ofs, 0)
}
if fmtSize == 0 {
if dataSize > 0 {
return nil, Error("fmt がありません")
}
return nil, nil
}
return &w, nil
}
// ------------------------------------------------------------------
// Snd
type Snd struct {
table map[[2]int32]*Wave
ver, ver2 uint16
}
func newSnd() *Snd {
return &Snd{table: make(map[[2]int32]*Wave)}
}
func LoadSnd(filename string) (*Snd, error) {
s := newSnd()
f, err := os.Open(filename)
if err != nil {
return nil, err
}
defer func() { chk(f.Close()) }()
buf := make([]byte, 12)
var n int
if n, err = f.Read(buf); err != nil {
return nil, err
}
if string(buf[:n]) != "ElecbyteSnd\x00" {
return nil, Error("ElecbyteSndではありません")
}
read := func(x interface{}) error {
return binary.Read(f, binary.LittleEndian, x)
}
if err := read(&s.ver); err != nil {
return nil, err
}
if err := read(&s.ver2); err != nil {
return nil, err
}
var numberOfSounds uint32
if err := read(&numberOfSounds); err != nil {
return nil, err
}
var subHeaderOffset uint32
if err := read(&subHeaderOffset); err != nil {
return nil, err
}
for i := uint32(0); i < numberOfSounds; i++ {
f.Seek(int64(subHeaderOffset), 0)
var nextSubHeaderOffset uint32
if err := read(&nextSubHeaderOffset); err != nil {
return nil, err
}
var subFileLenght uint32
if err := read(&subFileLenght); err != nil {
return nil, err
}
var num [2]int32
if err := read(&num); err != nil {
return nil, err
}
if num[0] >= 0 && num[1] >= 0 {
_, ok := s.table[num]
if !ok {
tmp, err := ReadWave(f, int64(subHeaderOffset))
if err != nil {
return nil, err
}
s.table[num] = tmp
}
}
subHeaderOffset = nextSubHeaderOffset
}
return s, nil
}
func (s *Snd) Get(gn [2]int32) *Wave {
return s.table[gn]
}
func (s *Snd) play(gn [2]int32) bool {
c := sys.sounds.GetChannel()
if c == nil {
return false
}
c.sound = s.Get(gn)
return c.sound != nil
}
// ------------------------------------------------------------------
// Sound
type Sound struct {
sound *Wave
volume int16
loop bool
freqmul float32
fidx float64
}
func (s *Sound) mix() {
if s.sound == nil {
return
}
s.fidx = sys.mixer.Mix(s.sound.Wav, s.fidx,
int(s.sound.BytesPerSample), int(s.sound.Channels),
float64(s.sound.SamplesPerSec)*float64(s.freqmul), s.loop,
float32(s.volume)/256)
if int(s.fidx) >= len(s.sound.Wav)/
int(s.sound.BytesPerSample*s.sound.Channels) {
s.sound = nil
s.fidx = 0
}
}
func (s *Sound) SetVolume(vol int32) {
if vol < 0 {
s.volume = 0
} else if vol > 512 {
s.volume = 512
} else {
s.volume = int16(vol)
}
}
func (s *Sound) SetPan(pan float32, offset *float32) {
// 未実装
}
type Sounds []Sound
func newSounds(size int) (s Sounds) {
s = make(Sounds, size)
for i := range s {
s[i] = Sound{volume: 256, freqmul: 1}
}
return
}
func (s Sounds) GetChannel() *Sound {
for i := range s {
if s[i].sound == nil {
return &s[i]
}
}
return nil
}
func (s Sounds) mixSounds() {
for i := range s {
s[i].mix()
}
}
Thanks!!
I'll test it once Install more dependencies. (There is so many stuff to install...)
It seem that Fluidsynth require pkg-config.
A recommendation for the next time you can use something like github gist to upload code like that. (If you don not want to create a merge commit)
https://gist.github.com/
EDIT:
Hey Mike can I ask what dependencies did you install? I'm lost.
#include "DrumPins.h"
#include <midi.h>
#include <EEPROM.h>
#define VersionMajor 1
#define VersionMinor 0
#pragma region arrays
byte pinLocation[MAX_PIN_SIZE] = {
getPinLoc(A6 , 0), // HiHat Pedal
getPinLoc(A7 , 0), // HiHat Cymbal T
getPinLoc(A8 , 0), // HiHat Cymbal R
getPinLoc(A9 , 0), // Kick Drum
getPinLoc(A0 , 0), // Snare T
getPinLoc(A0 , 1), // Snare R
getPinLoc(A0 , 2), // Tom 1 T
getPinLoc(A0 , 3), // Tom 1 R
getPinLoc(A0 , 4), // Tom 2 T
getPinLoc(A0 , 5), // Tom 2 R
getPinLoc(A0 , 6), // Tom 3 T
getPinLoc(A0 , 7), // Tom 3 R
getPinLoc(A1 , 0), // Tom 4 T
getPinLoc(A1 , 1), // Tom 4 R
getPinLoc(A1 , 2), // Crash 1 T
getPinLoc(A1 , 3), // Crash 1 R
getPinLoc(A1 , 4), // Crash 2 T
getPinLoc(A1 , 5), // Crash 2 R
getPinLoc(A1 , 6), // Ride 1 T
getPinLoc(A1 , 7), // Ride 1 R
getPinLoc(A2 , 0), // Ride 1 S
getPinLoc(A2 , 1), // Ride 2 T
getPinLoc(A2 , 2), // Ride 2 R
getPinLoc(A2 , 3), // Ride 2 S
getPinLoc(A2 , 4), // Ride 3 T
getPinLoc(A2 , 5), // Ride 3 R
getPinLoc(A2 , 6), // Ride 3 S
getPinLoc(A2 , 7), // Aux 1 T
getPinLoc(A3 , 0), // Aux 1 R
getPinLoc(A3 , 1), // Aux 2 T
getPinLoc(A3 , 2), // Aux 2 R
getPinLoc(A3 , 3), // Aux 3 T
getPinLoc(A3 , 4), // Aux 3 R
getPinLoc(A3 , 5), // Aux 4 T
getPinLoc(A3 , 6), // Aux 4 R
getPinLoc(A3 , 7), // Aux 5 T
getPinLoc(A10 , 0), // Aux 5 R
};
byte pinType[MAX_PIN_SIZE];
byte pinThreshold[MAX_PIN_SIZE];
byte pinNoteOnThreshold[MAX_PIN_SIZE];
byte pinNoteOnValue[MAX_PIN_SIZE];
byte pinPitch[MAX_PIN_SIZE];
#pragma endregion
#pragma region Setups
void setup() {
EEPROM_Load();
setupADC();
setupSerial();
}
// set up funcs
void setupADC() {
// Define various ADC prescaler
//------------------------------
const unsigned char PS_16 = (1 << ADPS2);
//const unsigned char PS_32 = (1 << ADPS2) | (1 << ADPS0);
//const unsigned char PS_64 = (1 << ADPS2) | (1 << ADPS1);
const unsigned char PS_128 = (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0);
//http://www.microsmart.co.za/technical/2014/03/01/advanced-arduino-adc/
ADCSRA &= ~PS_128; // remove bits set by Arduino library
ADCSRA |= PS_16; // set our own prescaler to 16 for ~20 us
}
#pragma endregion
#pragma region Serial
#define BAUD_RATE 115200
#define MAX_DATA_BYTES 7 // max number of data bytes in incoming messages
#define START_SYSEX 0xF0 // start a MIDI Sysex message
#define END_SYSEX 0xF7 // end a MIDI Sysex message
byte storedInputData[MAX_DATA_BYTES]; // multi-byte data for SysEx
int sysexBytesRead = 0;
boolean parsingSysex = false;
void setupSerial() {
Serial.begin(BAUD_RATE);
while (!Serial);
Serial.print("Welcome to aDrums v");
Serial.print(VersionMajor);
Serial.print(".");
Serial.print(VersionMinor);
}
void processSerialInput() {
while (Serial.available()) {
int inputData = Serial.read(); // this is 'int' to handle -1 when no data
if (inputData != -1) {
parse(inputData);
}
}
}
void parse(byte inputData) {
if (parsingSysex)
{
if (inputData == END_SYSEX)
{
//stop sysex byte
parsingSysex = false;
//fire off handler function
processSysexMessage();
}
else
{
//normal data byte - add to buffer
storedInputData[sysexBytesRead] = inputData;
sysexBytesRead++;
}
}
else if (inputData == START_SYSEX)
{
parsingSysex = true;
sysexBytesRead = 0;
}
}
void processSysexMessage() {
sysexCallback(storedInputData[0], sysexBytesRead - 1, storedInputData + 1);
}
void TX_SERIAL(byte command, byte pin, int value) {
Serial.write(START_SYSEX);
Serial.write(command);
Serial.write(pin);
Serial.write(value);
Serial.write(END_SYSEX);
Serial.flush();
}
#pragma endregion
#pragma region Loops
void loop()
{
processSerialInput();
readPins();
}
#pragma endregion
#pragma region MIDI
#define DEFAULT_CHANNEL 0
// First parameter is the event type (0x09 = note on, 0x08 = note off).
// Second parameter is note-on/note-off, combined with the channel.
// Channel can be anything between 0-15. Typically reported to the user as 1-16.
// Third parameter is the note number (48 = middle C).
// Fourth parameter is the velocity (64 = normal, 127 = fastest).
void noteOn(byte channel, byte pitch, byte velocity) {
midiEventPacket_t noteOn = { 0x09, 0x90 | channel, pitch, velocity };
MidiUSB.sendMIDI(noteOn);
}
void noteOff(byte channel, byte pitch, byte velocity) {
midiEventPacket_t noteOff = { 0x08, 0x80 | channel, pitch, velocity };
MidiUSB.sendMIDI(noteOff);
}
// First parameter is the event type (0x0B = control change).
// Second parameter is the event type, combined with the channel.
// Third parameter is the control number number (0-119).
// Fourth parameter is the control value (0-127).
void controlChange(byte channel, byte control, byte value) {
midiEventPacket_t event = { 0x0B, 0xB0 | channel, control, value };
MidiUSB.sendMIDI(event);
}
#pragma endregion
#pragma region ReadDrums
void readPins() {
for (byte i = 0; i < MAX_PIN_SIZE; i++)
{
switch (pinType[i])
{
case PINTYPE_DISABLED:
break;
default:
ReadDrum(i, getAnalogueValue(i));
break;
}
}
}
int getAnalogueValue(byte pin) {
byte location = pinLocation[pin];
digitalWrite(ADCD1, (location & FLAG_IC1) ? HIGH : LOW); //flag 00000001
digitalWrite(ADCD2, (location & FLAG_IC2) ? HIGH : LOW); //flag 00000010
digitalWrite(ADCD3, (location & FLAG_IC3) ? HIGH : LOW); //flag 00000100
return analogRead((location >> 3));
}
void ReadDrum(byte pin, int value) {
if (value >= pinThreshold[pin])
{
if (pinNoteOnValue[pin] == 0)
noteOn(DEFAULT_CHANNEL, pinPitch[pin], getVelocity(pin, value));
pinNoteOnValue[pin]++;
}
else if (pinNoteOnValue[pin] > 0 && pinNoteOnValue[pin] > pinNoteOnThreshold[pin])
{
noteOff(DEFAULT_CHANNEL, pinPitch[pin], 0);
pinNoteOnValue[pin] = 0;
}
}
byte getVelocity(byte pin, int analogue_value) {
//analogue_value max = 1023
return (analogue_value / 8);
}
#pragma endregion
#pragma region Callbacks
#define toMSG(NAME) MSG_ ## NAME
#define caseCallBack(NAME) \
case toMSG(NAME): \
if(isSet) \
NAME [arrayPointer[0]] = arrayPointer[1]; \
else \
TX_SERIAL( command , arrayPointer[0], NAME [arrayPointer[0]] ); \
break;
#define MSG_GET_HANDSHAKE 0
#define MSG_GET_PINCOUNT 8
#define MSG_EEPROM 100
#define MSG_pinType 1
#define MSG_pinThreshold 2
#define MSG_pinNoteOnThreshold 3
#define MSG_pinPitch 4
void sysexCallback(byte command, byte size, byte* arrayPointer) {
bool isSet = command & 1;
switch ((command >> 1))
{
case MSG_GET_HANDSHAKE: TX_SERIAL(command, VersionMajor, VersionMinor); break;
case MSG_GET_PINCOUNT: TX_SERIAL(command, MAX_PIN_SIZE, 0); break;
case MSG_EEPROM: if (isSet) EEPROM_Save(); else EEPROM_Load(); TX_SERIAL(command, 1, 1); break;
caseCallBack(pinType);
caseCallBack(pinThreshold);
caseCallBack(pinNoteOnThreshold);
caseCallBack(pinPitch);
}
}
#pragma endregion
#pragma region EEPROM
#define _S_EPROM(a,b) eeprom_write_bytes((MAX_PIN_SIZE * b), a, MAX_PIN_SIZE)
#define _L_EPROM(a,b) eeprom_read_bytes((MAX_PIN_SIZE * b), a, MAX_PIN_SIZE)
#define _EPROM_StartAddr 0
void EEPROM_Save() {
_S_EPROM(pinType, 0);
_S_EPROM(pinThreshold, 1);
_S_EPROM(pinNoteOnThreshold, 2);
_S_EPROM(pinPitch, 3);
}
void EEPROM_Load() {
_L_EPROM(pinType, 0);
_L_EPROM(pinThreshold, 1);
_L_EPROM(pinNoteOnThreshold, 2);
_L_EPROM(pinPitch, 3);
}
//
// Absolute min and max eeprom addresses.
// Actual values are hardware-dependent.
//
// These values can be changed e.g. to protect
// eeprom cells outside this range.
//
const int EEPROM_MIN_ADDR = 0;
const int EEPROM_MAX_ADDR = 1023;
//
// Returns true if the address is between the
// minimum and maximum allowed values,
// false otherwise.
//
// This function is used by the other, higher-level functions
// to prevent bugs and runtime errors due to invalid addresses.
//
boolean eeprom_is_addr_ok(int addr) {
return ((addr >= EEPROM_MIN_ADDR) && (addr <= EEPROM_MAX_ADDR));
}
//
// Writes a sequence of bytes to eeprom starting at the specified address.
// Returns true if the whole array is successfully written.
// Returns false if the start or end addresses aren't between
// the minimum and maximum allowed values.
// When returning false, nothing gets written to eeprom.
//
boolean eeprom_write_bytes(int startAddr, const byte* array, int numBytes) {
// counter
int i;
// both first byte and last byte addresses must fall within
// the allowed range
if (!eeprom_is_addr_ok(startAddr) || !eeprom_is_addr_ok(startAddr + numBytes)) {
return false;
}
for (i = 0; i < numBytes; i++) {
EEPROM.write(startAddr + i, array[i]);
}
return true;
}
//
// Reads the specified number of bytes from the specified address into the provided buffer.
// Returns true if all the bytes are successfully read.
// Returns false if the star or end addresses aren't between
// the minimum and maximum allowed values.
// When returning false, the provided array is untouched.
//
// Note: the caller must ensure that array[] has enough space
// to store at most numBytes bytes.
//
boolean eeprom_read_bytes(int startAddr, byte array[], int numBytes) {
int i;
// both first byte and last byte addresses must fall within
// the allowed range
if (!eeprom_is_addr_ok(startAddr) || !eeprom_is_addr_ok(startAddr + numBytes)) {
return false;
}
for (i = 0; i < numBytes; i++) {
array[i] = EEPROM.read(startAddr + i);
}
return true;
}
#pragma endregion
Import
"C"
"github.com/x42/avldrums.lv2/tree/master/fluidsynth"
"github.com/sqweek/fluidsynth"
Ikemen is written in Go ,uses Lua for scripting, JSON languaje for config and ranking system and now C calls too for audio synth, this is not good at all but.
Here is a manner to use some C in goolang (https://karthikkaranth.me/blog/calling-c-code-from-go/) altought are completely diferent kind of coding. Just as Mike said, is a matter of importing c and the synth packages.Code:Import
"C"
"github.com/x42/avldrums.lv2/tree/master/fluidsynth"
"github.com/sqweek/fluidsynth"
fight = fight.def
fightfx = fightfx.def
select = select.def
soundfont= data/gamesoundfont.sf2
YM2151 confing file= data/YM2151.def
YM2612 config file data/YM2612=
Hello, this is the config file
for instrument section of YM2151, please add your OPM
file for GM instrument playing
00 piano= pianostreetfighter2.opm
01 brightpiano = pianostrider.opm
02 harpsichord = thunderzonehpr.opm
40 bass = zangiefingerbass.opm....
... the cherry over the cake, YM2151 and or YM2612 custom patches loading for every General Midi Instrument, an onboard FM synth
for example, do you remember Street Fighter 2 World Warrior?, imagine have something similar on the music but natively maded instead of reading an MP# prerendered file
Example on a file system.defCode:fight = fight.def
fightfx = fightfx.def
select = select.def
soundfont= data/gamesoundfont.sf2
YM2151 confing file= data/YM2151.def
YM2612 config file data/YM2612=
00 piano= pianostreetfighter2.opm
01 brightpiano = pianostrider.opm
02 harpsichord = thunderzonehpr.opm
40 bass = zangiefingerbass.opm....[/code]
something like that for the FM synth
Thanks!!
I'll test it once Install more dependencies. (There is so many stuff to install...)
It seem that Fluidsynth require pkg-config.
A recommendation for the next time you can use something like github gist to upload code like that. (If you don not want to create a merge commit)
https://gist.github.com/
EDIT:
Hey Mike can I ask what dependencies did you install? I'm lost.
git clone git://github.com/x42/avldrums.lv2.git
cd avldrums.lv2
make submodules
make
sudo make install PREFIX=/usr
https://gist.github.com/Mike77154/92c18fd70bb4b54e6533935f03911d6e
Ok thanks for the update.
I forgot to tell you about another issue with the Broly, and that's how Helpers/Projectiles overlap each other. The creator said he combines add transparency and sub transparency, and that doesn't work well in this build seemingly.
MUGEN: https://streamable.com/pdmk6
IKEMEN: https://streamable.com/r9z4t
Stage problems, it's with the floor on the Shine of the Forgotten God stage.
Mugen 1.1: https://i.imgur.com/nK1ehBl.png
Ikemen: https://i.imgur.com/bUqlwUH.png
Demo mode crashes for me, error log below:
*Error log*
Any possibilities on porting this wonder to Android??
WTF!!
Demo mode uses a file called "randomtest.lua" that stuff is not used anywhere else and is completely undocumented...
Does anyone know what demo mode is supposed to do?
I think it was like Mugen demo mode were it shows AI fighting if you stay in the title screen for some time. (Yes I know it can be accessed fro the menu)
But now I'm not sure if it was what I was thinking.
* Gacel post *
Is exactly what you think, the unreleased k4thos build is a lot far more advanced than you imagine.
Suehiro merging the last build with his own code Was a huge mistake.
You have my curiosity apart from "4 tag vs 3 simul characters separated lifebars" and the "Here comes a new challenger" what else it does have?
Also I do not consider the merge and error, if you check the commit on the merge:
https://github.com/Windblade-GR01/Ikemen_GO/commit/666325921da86a675dd7c472ddef5e15627ba4b7
You can see that the GO part of the code did not change much.
Most of the K4thos work is in the lua files (That are what provides screenpack support and the whole menu frontend)
So this also broke on the GO transition?
I'll see if I rewrite it from scratch (K4thos code is sometimes weird)
EDIT:
WTF!!
Demo mode uses a file called "randomtest.lua" that stuff is not used anywhere else and is completely undocumented...
Does anyone know what demo mode is supposed to do?
I think it was like Mugen demo mode were it shows AI fighting if you stay in the title screen for some time. (Yes I know it can be accessed fro the menu)
But now I'm not sure if it was what I was thinking.
EDIT END
Demo Mode used to work in your older builds of ikemen go plus, yes it is an ai vs ai thing picked randomly and they fight against each other.
The last public release from him is the basis from the suehiros merge and your work too....so are using an old code.
The unrelease has changes on source code and lua code to achieve more and optimized functionalities, so many changes cause that trying to fuse your current with his latest in broken compatibility, almost as two different engines.
the challenger and lifebars are only two small bits, he did a little but big change, he deprecated statedef -10 -20 -30 and added a better -1 -2 -3 compatibility.
all in page 4 and 5 of this thread.
Render changes, sound changes, camera changes, lifebar changes, controller changes, option changes.
Any plans for the option for the old Mugen Continue screen?
It would be more convenient especially with Mugen SPs.
brew install openal-soft
SavefileSo yeah, now characters can save permanent data.Code:[State Test]Put specified data together and save it as binary. It uses gob, which is a serialized format for Go language, as the storage format.
type = SaveFile
trigger1 = time = 10
savedata = var
path = "kfm.gob"
Specify the data saved by savedata as var, fvar, or map. All characters specified by the character or helper who executed the function are stored at that time.
Specify the save destination file path by path (execution character standard). Can use any extension (.gob is recomneded)
LoadfileCode:[State Test]Loads the specified data and overwrites the data of the execution character. Note that all the data before reading will disappear.
type = Loadfile
trigger1 = time = 10
savedata = var
path = "kfm.gob"
Specify the data to be read by savedata from var, fvar, or map. An error occurs if you make a mistake in the path.
Specify the path of the file to be read in path (Relative to the character folder).
Is it possible to create a round intro system using fonts like snk vs capcom dialogues?I know it is possible to do it using coding but it will be great to use fonts instead of text sprites.
Boy, you better start adding documentation to in the game files, because I'm gonna be lost when I start using this for real.
Also I assume we can safely disable options in the motif file or whatever?
{data = textImgNew(), itemname = 'enginesettings', displayname = motif.option_info.menu_itemname_main_engine},
Did new font support got added? I remember it wasn't running mugen 1.1 fonts. Also can Select Screen get more customizable options? Like Pallete Select or Groove Select
I assume it's like the Menu Options in normal Mugen where you score out an option by leaving the name blank?
Hiya all. Made an account so I can reply this thread. Thank you SO much for updating this time to time. I been having a blast using this Ikemen Go Plus playing with my family here and want to tell you to keep up the good work! Although I would really wish to know how to add more HP Lifebars for Players 5-8 and Powerbars for Players 3-8 but I know you all are always been busy so I can't be picky about it. Really, thank you so much and please keep up the good work :D
Yup, you need the perfect movement. Hibiki/Ryo, supers like that. I just ended up getting used to it, but there is definitely something up with the commands. If you mean how you have to be extra firm with it to work. I feel as though it’s gotten better from vanilla Ikemen though. I want to say, it’s the diagonals.
I'm happy you like the engine.
About expanded lifebar and powerbar support. If I code it in the "obvious way" (Building on top on how it works now) I need to assign the variables of the life bar (Life bar only not energy bar and only for simul not tag) for 72 different types (If we limit to 8), so now I'm thinking on a diferent way to code it so it does not duplicate a lot of data.
Curently working on that and learning how the CNS parser works so I can edit TagIn to work with more than 2 chars at the time.
Ikemen GO Plus: https://streamable.com/gqndf
Mugen 1.1: https://streamable.com/9ac4g
Few things I had observed with Ikemen GO plus compared to mugen
- Combo counter doesn't work properly
- Afterfx seem to be affected by pausetime
- Damage that is displayed on the lifebar falls more instantly than mugen
- Sound is clearer in Ikemen than it is in mugen, though not affected by pan currently
- fall.defence_up seems to actually get applied properly
- The camera in general seems to operate more harshly than it is in mugen
Combo counter already been fixed.I dont know others through.
The builds are on AppVeyor as they always have:
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go/build/artifacts
(It will take like 20 minutes from the time I write this to compile so wait)
[Characters]
;Insert your characters below.
Ryu\NormalRyu.def,stages\Suzaku2014.def,music=sound\Suzaku2014.mp3
Ken\SFIIIKen.def,,includestage=0
C:\Users\METEHAN\Desktop\Ikemen\ThirdStrikeYo\Sean\NormalSean.def
EvilRyu\ShinEvilRyu.def
Ken\ViolentKen.def,includestage=0
Akuma\ShinAkuma.def,includestage=0
Dhalsim,,includestage=0
R. Mika,stages\iwashi2014.def, music=sound\R.Mika.mp3,includestage=1
Guy,includestage=0
Maki,includestage=0, order=0
CharlieNash\Nash.def,, includestage=1
Guile,includestage=0
Chun-Li,stages\rushhour2014.def
Sakura,stages\home2014.def,includestage=1
Karin,includestage=0
Honda,includestage=0
Rolento,,includestage=0
Eagle,includestage=0
Balrog
Sagat\DivineSagat.def,stages\ayutaya2014.def,music=sound\ShiyoBGM\ayutaya2014.mp3,includestage=1,order=5
Adon,,includestage=0
DivineBlair\DivineBlair.def,includestage=0, order=0
DivineSkullo
FinalBison\Vega.def,stages\drive-remains2014.def
C:\Users\USER\Desktop\Mugen\mugen-1.1b1\ThirdStrikeYo\Urien\Urien.def
C:\Users\USER\Desktop\Mugen\mugen-1.1b1\ThirdStrikeYo\Gill\Gill.def
Ingrid,includestage=0
Blanka
Demitri\Demitri.def,stages\demitri.def,music=sound\Lord Demitri.mp3
Lei-Lei\Lei-Lei\Lei-Lei.def
DivineLilith,includestage=0, order=0
DivineMorrigan
Kyo\NormalKyo.def,includestage=0
Iori\NormalIori.def,includestage=0
Iori\OrochiIori.def
Ash Crimson
Benimaru
Kim\Kim.def
Joe,includestage=0
Clark,includestage=0, order=0
Ralf
Raiden\Raiden.def
Takuma\Takuma.def,, includestage=0
Ryo\Ryo.def, stages\Kyokugenryu2014WS.def, music=sound\KOFXIII Sakazaki Dojo.mp3
DivineRobert,, includestage=0, order=0
MrKarate\MrKarate.def, stages\Kyokugenryu2014WS.def
DivineRock,, includestage=0, order=0
cvsxTerry\cvsxTerry.def,, includestage=0
Haohmaru\Haohmaru.def,, includestage=0
Rugal\Rugal.def, stages\skynoah2014.def
Geese\Geese.def, stages\tower2014.def
Nakoruru
DivineAthena\DivineAthena.def
Vice\Vice.def,stages\Mukai_Orochi_mix.def
Shermie\Shermie.def,includestage=0, order=0
King\King.def,includestage=0
DivineKula\DivineKula.def,, includestage=0, order=0
Tiffany,includestage=0, order=0
DivineTia,includestage=0, order=0
Rouga\Rouga.def
Jotaro
Mike Haggar\Mike Haggar.def,includestage=0, order=0
DivineJill\DivineJill.def,includestage=0, order=0
Psylocke\DivinePsy.def
Wolverine\Wolverine.def,includestage=0, order=0
Yoko,includestage=0,order=0
C:\Users\METEHAN\Desktop\Ikemen\MeltyBlood\Arcueid\Arcueid.def
C:\Users\METEHAN\Desktop\Ikemen\MeltyBlood\Hisui_Infinite_SE\Hisui_Infinite_SE.def
;--------------
[ExtraStages]
stages\Electro\Ultimate_Port_Town_FF3_Hon_Fu.def
stages\Electro\Ultimate_AoDK_Korea_Lee.def
stages\Electro\Ultimate_AoF3_Wyler_Mansion.def
stages\Electro\Ultimate_LB2_Forest_of_Forgetfulness.def
stages\Electro\Ultimate_LB2_Legendary_Resurrection_Musashi.def
stages\Electro\Ultimate_RBFFS_Hong_Kong.def
stages\Electro\Ultimate_UCop_Energy_Beach.def
stages\Electro\Ultimate_WHP_Genesis.def
stages\ff5b2014.def
stages\JailBreak.def
stages\cave2014.def
stages\saloon2014.def
stages\wall2014.def
stages\dated2014.def
stages\syuri2014.def
stages\ganga2014.def
stages\ayutaya2014.def
stages\ayutaya-blue2014.def
stages\bamboo2014.def
stages\bar2014.def
stages\bay2014.def
stages\bay-night2014.def
stages\neogeoland2014.def
stages\beach2014.def
stages\golddust2014.def
stages\golddust2014_v2.def
stages\hawk2014.def
stages\jet2014.def
stages\jet-night2014.def
stages\kiri2014.def
stages\kiri-blue2014.def
stages\lane2014.def
stages\liner2014.def
stages\liner-sunset2014.def
stages\lotus2014.def
stages\lotus-morn2014.def
stages\KoreanDock.def
stages\KoreaMarket2014.def
stages\Kyokugenryu2014WS.def
stages\plain2014.def
stages\plain-a2014.def
stages\thirst2014.def
stages\tower2014.def
stages\west2014.def
stages\water2014.def
stages\waterfall2016.def
stages\mount2014.def
stages\iwashi2014.def
stages\ring2014.def
stages\ring-rain2014.def
stages\sakura2014.def
stages\home2014.def
stages\snow2014.def
stages\snow-aurora2014.def
stages\cloud2014.def
stages\willow2014.def
stages\street2014.def
stages\street-night2014.def
stages\suzaku2014.def
stages\SuzakuNight2014.def
stages\SuzakuSunset2014.def
stages\Suzaku2015.def
stages\drive2014.def
stages\skynoah2014.def
stages\skynoah2014alt.def
stages\skynoah-red2014.def
stages\sanctuary2016.def
stages\ShrineChonshu2014.def
stages\GoNight2014.def
stages\osaka-cloudy2014.def
stages\rushhour2014.def
stages\cammy2014.def
stages\Heaven2014.def
stages\southkorea2014.def
stages\Tiger2014.def
stages\Columns.def
stages\Columns_2.def
stages\Columns_3.def
stages\Columns_4.def
stages\Columns_snow.def
stages\Columns_Urien.def
stages\Columns_Gill.def
stages\DarminorOutside.def
stages\rasslemania-ws.def
stages\rooftop-neo.def
stages\rolentoturf_1.1.def
stages\Ken-SNK.def
stages\XX'SPACE'LIFT'XX.def
stages\XX'AIRPORT'XX.def
stages\XX'LIGHTS'XX.def
stages\XX'ALPHA'BASE'XX.def
stages\XX'XDRENALINE'XX.def
stages\KOF2000_Korea_Street_1.1.def
stages\KOF94_Japan_Stage_1.1.def
stages\KoF95_Garou.def
stages\BloodDome.def
stages\SF2_EvilKen.def
stages\aof2geese.def
stages\yuki.def
stages\GOW_SHENLONGBG.def
stages\scbridge.def
stages\crypt.def
stages\The_Waterfall.def
stages\YDA_Forest-of_Desolation.def
stages\svc_sanctua.def
stages\Kofxi_Shion_Stage.def
stages\Reppu2.def
stages\Mexico 2k2 ~ Nighttime - Addition FX (M.U.G.E.N. 1.1B1).def
stages\CentralGeo.def
stages\CentralGeo2.def
stages\Burning_Osaka_CVS2.def
[Options]
;--------------------------------------------------
;Set up the order of battles here for Arcade mode!
;--------------------------------------------------
arcade.maxmatches = 6,1,1,5,0,0,0,0,0,0
;-------------------------------------------------------
;Set up the order of battles here for Team Arcade mode!
;-------------------------------------------------------
team.maxmatches = 6,1,1,5,0,0,0,0,0,0
Bug reports
Similar approach is preferred when it comes to bug reports. "X doesn't work" is not good enough report. Test cases (KFM with code that showcases the issue) and repro steps are appreciated (in most cases required).
script/main.lua:1076: table index is nil
stack traceback:
script/main.lua:1076: in function 'f_addChar'
script/main.lua:1135: in main chunk
[G]: ?
uhm facing this
Are you familiar with emulators and the like? They usually have a stable version aside from the ongoing dev builds. That's what I was suggesting. This way things can continue to go forward without huge gaps of lost time.
Also, prebuilt. So people can experiment easily.
1)Spoiler, click to toggle visibilty
...As of now, I don't see any real reason to use Go. Originally plus was scrapped in favor of this new thing, but seeing as it stopped, Plus is still viable. The main thing I've seen people go on and on about is not having to index. What other game breaking feature is preventing others from using it? The whole goal behind this was really to add things, K4thos already did everything else. As is, right now, with a lil bit of extra work one could already create a something using Ikemen Plus. All of this work is really to make it so, no one has to get their hands dirty, lets be real here.
Gacel any idea why Stage zoom commands are causing problems only on Arcade mode?The bug is because the lua code lacks Null checks. >_> This bug and the last one (The screen select one) are that.Spoiler, click to toggle visibilty
Spoiler, click to toggle visibilty
Hmm. Well all in all having a visible roadmap/checklist can only do good. In this way, people can know whats going on. Couldn't hurt for things to be more concise. Did he ever give access to the thread?
Not Maximilian, but I'm building my platform for this specific reason, the more people that know about it, the higher chance of solving these issues/getting more people on board, expansion. I know no one is losing sleep over it, definitely not complaining, but I would never undermine our interest, we care, those of us that plan to use it, so yes it does merit some resolve. I just want to help. If I have all the info then I can start a campaign on it.
It may not seem like much, but when you guys join in on the conversation it kinda raises the morale, for me anyway. I get everyone is kinda doing their own thing, but its great to see the interest and we can share thoughts.
The biggest thing for me? I've only been learning about things I'm trying to do. Only once I start looking into it do I realize something is amiss. As everyone is doing their own experimenting it could save a lot of time. I'm going to have to set some time aside and try to port my things over.
- Implement localcoord on screenpacks and lifeabars [Done]It will not take me much time to finish that. I think we can fix some of the know bugs (There are only 8) and we can launching a stable release.
- Fix MP3 audio loading (This was one of the first ones) [Done]
- Implement fntv2 on lifebars [Done by kidcy]
- Fix option menu and infobox scaling [Done]
- Hide the console terminal on windows [Done]
- Improve lifebar font loading. (So it search directories like mugen) [Done]
- Fix online mode reder clean [Done]
- Add alternative widescreen scaling
- Make localcoord values loadable from the screenpack files
- Edit UNO tag to the work on the new tag mode (So the Tag option does something)
Once finished all of that create a installer like Dan did before.
Plus or Go Plus?
Guys you really have to work all together in one same engine.
I'm not a dev so my words are probably useless here, but if some new dev jump into the working force of this project it may be if it's on a well known language, like C... So for Go Plus, no?
There is no way that you guys port into Go Plus the "extra" features that already exist in Plus?
I just have another question: What engine would be the most 'futureproof'? I mean even if we do not know what can happen with software support and things?
[State -2, Poison]
type = LifeAdd
trigger1 = <Is the enemy posioned? trigger> ;(Could be a var that get set to a certain amount when a attack hits)
value = -1
kill = 0
RedirectID = <Enemy id here> ;(You can save it in a var when a attack hits)
But maybe I should start a bug report tread.
K4thos looks like was active 12 days ago.Did he said anything about unrelased code?
So yeah.. Screenbound does not work no matter what you try. Found a temp workaround using the camera helper. At the very least can see partners off screen.Spoiler, click to toggle visibilty
"KeyConfig":[{
"Joystick":-1,
"Buttons":["UP","DOWN","LEFT","RIGHT","z","x","c","a","s","d","RETURN","q","w"]
},{
"Joystick":-1,
"Buttons":["i","j","j","l","KP_3","KP_2","KP_1","KP_6","KP_5","KP_4","KP_0","KP_7","KP_8"]
},{
"Joystick":-1,
"Buttons":["t","g","f","h","j","k","l","u","i","o","RSHIFT","LEFTBRACKET","RIGHTBRACKET"]
}],
You may of said this before, but could it be possible for ikemen go plus to have a feature that would allow you to choose the stage music in vs, watch and free battle mode?
https://osgameclones.com/ you can submit a pull request here.
Inside the save folder there is a config.json file.
In the section "KeyConfig" you can just add more players like this:
The code snippet posted above should add a third keyboard player.
If you want send me your config.json file and what the third and fourth player keybard map you want and I'll add it
I think the select.def would be best imo. Sorry for the late reply.
I would not be too hard there is a lua command called "playBGM()" that is the one that emm.. plays the BGM.
It just have to read a music list.
Now the question, I make the music list loaded from select.def?
The code snippet posted above should add a third keyboard player.
If you want send me your config.json file and what the third and fourth player keybard map you want and I'll add it
thanks, here: https://mega.nz/#!jE5ViKBR!himQqwe-GgteeB8SAPtukmzZg6OIAvoIME4FafCSJew
P1- up, down, left, right, q,w,e,a,s,d, return
P2- numpad8, numpad2, numpad4, numpad6, i,o,p,j,k,l, enter
P3- r,t,y,u, 1,2,3,4,5,6, left ctrl
P4- z,x,c,v, f,g,h,b,n,m, right ctrl
also is there a tutorial on increasing the character slot numbers? I saw one for Ikemen Plus but Ive no idea where to start in Ikemen GO so if you could point me to the correct file(s) I would be very much appreciated.
Thanks again, Im really loving this version of Mugen.
The code snippet posted above should add a third keyboard player.
If you want send me your config.json file and what the third and fourth player keybard map you want and I'll add it
thanks, here: https://mega.nz/#!jE5ViKBR!himQqwe-GgteeB8SAPtukmzZg6OIAvoIME4FafCSJew
P1- up, down, left, right, q,w,e,a,s,d, return
P2- numpad8, numpad2, numpad4, numpad6, i,o,p,j,k,l, enter
P3- r,t,y,u, 1,2,3,4,5,6, left ctrl
P4- z,x,c,v, f,g,h,b,n,m, right ctrl
also is there a tutorial on increasing the character slot numbers? I saw one for Ikemen Plus but Ive no idea where to start in Ikemen GO so if you could point me to the correct file(s) I would be very much appreciated.
Thanks again, Im really loving this version of Mugen.
I'm sure Infinite scrolling select screen was a thing in ikemen plus any chance for it to be on go?
Hi guys, recently I changed from Mugen 1.1 to this IKEMEN project, very interesting.
But I have a doubt about the tag mode, when I enter this mode and select the characters, at the beginning of the fight these do not come out of the screen and remain on the stage all controlled at the same time by the player.
Should the characters be patched? I read that there is no need ...
Fixed p1stateno not functioning when hitting Projectile with P in hitflag
Fixed AI not entering in BONUS GAMES
There you go:
https://github.com/Windblade-GR01/Ikemen_GO/files/3673861/config.zip
https://www.moddb.com/groups/mugen-elecbyte/tutorials/how-to-add-more-character-slots-in-your-select-screen
This tutorial works, it is exactly the same like normal mugen btw.
I'm sure Infinite scrolling select screen was a thing in ikemen plus any chance for it to be on go?I have no problem implementing it.
How it was done on Ikemen plus?
how do I turn off the win screen after battle, I tried disabling it in the system,def but it still display after every fight.
Hi Gacel this is kinda how it was implemented, https://youtu.be/Z8D3-UwdFok?t=159 below in the video description you can find an example of the ikemen plus screenpack with the infinite scrolling, it was a select screen for each player that could be scrolled vertically but not horizontallyI'm sure Infinite scrolling select screen was a thing in ikemen plus any chance for it to be on go?
I have no problem implementing it.
How it was done on Ikemen plus?
how do I turn off the win screen after battle, I tried disabling it in the system,def but it still display after every fight.
Ikemen GO first check common Mugen files then Ikemen lua files, so check out you disable the win screen on the screenpack . def files first.
GGPO is fully open source now. Wonder if we can see Rollback netcode on Ikemen GO. Correct if I wrong but Ikemen netcode is still input delay based.
how do I turn off the win screen after battle, I tried disabling it in the system,def but it still display after every fight.
Ikemen GO first check common Mugen files then Ikemen lua files, so check out you disable the win screen on the screenpack . def files first.
No luck, I already disable victory screen in system.def and Motif.lua. I looked at other lua files but nothing related.
There is something wrong with the latest version, i cant open screenpacks that used to load like akito's cvs screenpack now ikemen crashes.The log is empty so i cant understand where is the problem.
Thank you for a great job, Gacel. Very interesting and promising project. However, there are problems with the speed with a large number of characters (400+ characters, especially on the selection screen). Can you add WinXP support to IKEMEN?
Gacel there is open source project called''supertuxkart''.ıt uses openal for sound.You can check it out its code.Also its on android too.
And added a Icon. What do you guys think of it?
is there documentation for how to port mugen screenpacks to ikemen go plus? i tried just copying the over from legacy mugen screen pack to ikemen go plus and it just crashes, no error or log that shows why it even crashed? Are current screen packs compatible?
is there documentation for how to port mugen screenpacks to ikemen go plus? i tried just copying the over from legacy mugen screen pack to ikemen go plus and it just crashes, no error or log that shows why it even crashed? Are current screen packs compatible?
I've managed to convert all my mmx Fighting Arena screenpack, but sadly it crashes randomly, specially during the start up, so it still unstable and I left for now, the devs are really working hard on it, and i hope they get hd screenpacks working, because the engine is great.
how were you able to do it? which files do i need to work on?
sadly it crashes randomly, specially during the start up, so it still unstable and I left for now
is there documentation for how to port mugen screenpacks to ikemen go plus? i tried just copying the over from legacy mugen screen pack to ikemen go plus and it just crashes, no error or log that shows why it even crashed? Are current screen packs compatible?
sadly it crashes randomly, specially during the start up, so it still unstable and I left for now
I didn't, it still crashes, Managed to convert all the lifebar to my HD version, but when started to change the screenpack, the crashes started. It runs sometimes, but normally the load fails.
Has there been any suggestions for or talk of Stage Music changes mid-match?
The load fails?!Did you? I'll try again as soon as possible!
I did think that was fixed months ago.
You are using the more updated version?
My two cents, developing IMO should be on fixing bugs first, I would like to see Ikemen GO taking Screenpacks, stages and Chars without having some issues. Just saying.
It seems, all the bugs with projectiles are fixed, projectile priority and mirroring projectiles now works fine. Also some transparencies on projectiles are gone now, everything looks fine.
But somehow the yellow transparency that used to appear over the characters when "cancel bar" is activated is gone too :P.
https://streamable.com/8ijji
Also it seems Arcade and Kumite mode bug that triggered when you turn on the zoom is gone, nice!!
Gacel are you planning on adding animated portaits like normail ikemen?
Hi, so I've tried this (Gacel branch) online in tag mode (using add004) and whenever you switch to your second character (only tried 2v2) that character is not controllable. I imagine it must be thinking the character is a CPU? Is this a problem with add004 or IKEMEN Go Plus?
Thanks for the quick response. I assume it's on the list to be fixed eventually then?Yeah, once I found how in the world does the netplay/replay assign inputs.
If legacy is ported to Ikemen I don't mind switching.Is in a zip in the previous page, but it still have some glitches.
You guys are doing bits. good job.
I've tested this and its an awesome alternative to MUGEN. However, I still don't know how to do online with it though.
Ok, I dont know why Mugen would actually works with PALFX time = 1, it is like telling Mugen the PALFX effect will only last 1 tick. Changing the parameter value to time = -1 will fix the yellow glow not appearing over characters
[State a]
type = palfx
triggerall = (gethitvar(chainid)%10000)/1000 != [1,9]
triggerall = var(20) > 0
trigger1 = gametime % 14 = 4
trigger2 = gametime % 14 = 10
time = -1
add = 48,48,0
color = 226
ignorehitpause = 1
This fixed all the "glows" on the game including Chris 236 AC and Kensou 236236 E(That KOF XI special when he charges the energy dragoon on his body).
One question Gacel, it would be easy or hard to implement some sort of "quick rematch"? I mean some way to choose to start the fight again with the same characters instead of going to the character select screen?
Hello, I was busy on these days, but I find two things that can be useful, instead of using fluidsynth I was thinking on Tinysoundfont, a complete midi synth with soundfont, even it have GOLANG BINDINGS, yes is more even usable, but about midi messages I don't know how to use it.
someone will know how I can put a screenpack to the Ikemen-Plus-0.3
I found a small problem with explods - they are not destroyed at the end of the animation. There is no such problem in mugen.Spoiler, click to toggle visibilty
Character - Shiki Tohno by rajaaboy - http://www.mediafire.com/file/h3m893wqqy547cd/Shiki_Tohno.rar/file (http://www.mediafire.com/file/h3m893wqqy547cd/Shiki_Tohno.rar/file)
Gacel changes:
- Fixed TTF blending . (It should fix font display on screenpacks like MTHD)
- Improved the screenpacks parser, now it should load more screenpacks AS-IS.
- Added AiLevelF.
- Fixed hidden flag on Chars.
Neatunsou changes:
- Fixed not being able to read some SFFv2.00 portrait.
- Fixed const240p, const480p and const720p.
- Fixed references to second and subsequent characters in enemynear.
- Fixed so that palfx can not be used when helper ownpal is 0.
It could be in the win screen?
If yes, I think it only would require lua code.
They're automated builds, so no.
I wouldn't have said anything if I wasn't correct. They're called automated builds because they're automatically built, so what you download is pre-built and ready to go.
Hopefully that's correct, probably gotta wait for a dev's response doe.
**Mike's 2 post above**
That's a much better icon. It has a transparent background normally, right?Yes.
The new Icon:
(https://media.discordapp.net/attachments/622354737232216094/650550672563109888/unknown.png)
Made by Cylia Margatroid.
The new Icon:
(https://media.discordapp.net/attachments/622354737232216094/650550672563109888/unknown.png)
Made by Cylia Margatroid.
[State Test]
Type = MapSet
Trigger1 = time = 0
Map = "birthyear"
Value = 1257
trigger1 = Map(birthyear) = 1257
About MatchRestart, can I set the p(number)defs blank and keep the fighter from match before restarting?
Is pad support properly working now?
Does mugen legacy custom work properly now with the last update? The cursor sound was an issue.
So I decided to test a few AI-Less Characters (Goku and Kage by Vyn and 2 Haggars by ReddBrink)
https://streamable.com/3ulyg
The only good AI was Kage's. Haggar did nothing except the odd parry.
I'm assuming Haggar's is because of the Explodsive Buffering.
I tried to give Goku an AI back when he was released, that's why he keeps spamming the same combo, I'll redo this without it when I can.
Wow, this engine is awesome! I'm going to make a compilation game filled with pocket/chibi/JUS/SD characters using it!
Do you think Ikemen go plus will ever have a feature similar to Vselect that would allow you to add chracters, move them around, add themes, stages and orders?
Yeah, Ikemen GO AI sucks, it's on some regards even worse than Mugen's.
It literally just mash buttons and specials.
I should at least make it walk to close gaps.
Yeah, Ikemen GO AI sucks, it's on some regards even worse than Mugen's.
It literally just mash buttons and specials.
I should at least make it walk to close gaps.
Well it at-least uses specials more often.
Left a quick issue about inputs in the bug thread.
This game looks great! I will definitely download it! This should work on mac right? If not I can just run it with wine probably.
This game looks great! I will definitely download it! This should work on mac right? If not I can just run it with wine probably.
Yeah, but I didn't include the Mac executable inside the build since I can't test it. Pretty sure is a matter of just copying the mac file in the game folder.
This game looks great! I will definitely download it! This should work on mac right? If not I can just run it with wine probably.
Yeah, but I didn't include the Mac executable inside the build since I can't test it. Pretty sure is a matter of just copying the mac file in the game folder.
Amazing job with the game! It feels like a commercial game and work very well on mac at my native resolution!
Guys, for whoever is having troubles with PS4 pads, Gacel just released a fix. Check it out.
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go
Guys, for whoever is having troubles with PS4 pads, Gacel just released a fix. Check it out.
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go
It is incredible to see how a good evolution of the controls in IKEMEN has been achieved, since these at the beginning was something very annoying ...
But I still have the problem that many, THOUSANDS of people have and want to switch to IKEMEN GO Plus but cannot because of this dilemma ...
Was there any way to run IKEMEN GO Plus without using OpenGL in a 32-bit system?
Seriously, I have been in many communities and most of them tell me that they want to go to IKEMEN for their splendid freedom of codification, it is a supreme Engine, things as they are.
But they have left it for the problem of OpenGL ... And it is that not all graphic cards accept this feature ... Seriously, if you could run in DirectX as MUGEN does, God, this would be the BEST OF THE WORLD .. .
Please...
Any recommendations at least? Of course it is not to buy a new computer
Guys, for whoever is having troubles with PS4 pads, Gacel just released a fix. Check it out.
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go
It is incredible to see how a good evolution of the controls in IKEMEN has been achieved, since these at the beginning was something very annoying ...
But I still have the problem that many, THOUSANDS of people have and want to switch to IKEMEN GO Plus but cannot because of this dilemma ...
Was there any way to run IKEMEN GO Plus without using OpenGL in a 32-bit system?
Seriously, I have been in many communities and most of them tell me that they want to go to IKEMEN for their splendid freedom of codification, it is a supreme Engine, things as they are.
But they have left it for the problem of OpenGL ... And it is that not all graphic cards accept this feature ... Seriously, if you could run in DirectX as MUGEN does, God, this would be the BEST OF THE WORLD .. .
Please...
Any recommendations at least? Of course it is not to buy a new computer
BNOC I just noticed that you say 32-bit computer.
Considering that OpenGL 2.1 is older than Windows Vista, maybe you PC has no graphic card at all (Or has a old integrated VIA gpu, these does not even fully support DX9)
If it's a desktop PC that did come with Windows XP you can trow 30 USD for a old GeForce 210. (It even supports DX11 and GL 3.1)
Also even more old GPU works.
EDIT
Even a Nvidia Geforce GT 120 also works, but that's is even older and hard to get.
If someone wants to port Ikemen GO to DX9 you are welcome, I'll be honest I barely know OpenGL :( , and have no idea how Direct X works so I can not do it myself. So if someone know how to use Direct X and is interested in creating a second renderer inform me. (Or you can start now Ikemen GO is open source)
EDIT 2
So um if you port it to DX9 it will also need to port the input parser to DirectInput because that also uses GLFW.
Positive point: You can use SDL if you want to port it.
What it need to port is:
- Input.
- Texture Parser (Char SFF)
- Renderer.
- SFX player.
- Audio file parser (Char Audio)
It's really a big undertaking to port to DX9 or SDL.
Guys, for whoever is having troubles with PS4 pads, Gacel just released a fix. Check it out.
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go
It is incredible to see how a good evolution of the controls in IKEMEN has been achieved, since these at the beginning was something very annoying ...
But I still have the problem that many, THOUSANDS of people have and want to switch to IKEMEN GO Plus but cannot because of this dilemma ...
Was there any way to run IKEMEN GO Plus without using OpenGL in a 32-bit system?
Seriously, I have been in many communities and most of them tell me that they want to go to IKEMEN for their splendid freedom of codification, it is a supreme Engine, things as they are.
But they have left it for the problem of OpenGL ... And it is that not all graphic cards accept this feature ... Seriously, if you could run in DirectX as MUGEN does, God, this would be the BEST OF THE WORLD .. .
Please...
Any recommendations at least? Of course it is not to buy a new computer
I have tested Ikemen GO in a wide range of computers, with both Linux and Windows installation without hassles so far.
3 are mine, one of them has an Athlon X2 and GT 630, this computer at least has 10 years old and Ikemen GO works there.
If you cant run this, maybe it is time to seriously upgrade your PC, going DirectX means less compatibility with other OS, maybe you don't give a damn about it, but I do. Intel Cards have support for Open GL years ago and they even take the next step to invest in Vulkan.
Going OpenGL could be the smart thing the devs can do, OpenGL can evolve without the need of a company.
What you ask is so selfish, it is like going on a race and asking the others "please slow down because I can't go that fast".
I'm not that guy on Steam Forums telling people to waste on 1000$ on a VR device to play Alyx, in this case, a 200$ computer can run Ikemen.
About those "communities" you said so, I think you are just trying to "make things looks bigger" just because you don't want to upgrade. 32-bit was cool but it is almost 2020 and it is time to move, sry.
Since when is he back? Have you been talking to him privately?via ikemen discord. I'm on MFG as well. For now no new developments from me, I'm currently working on updating old Lua files to work with latest engine iteration (using them as it is would be a downgrade compared to what's currently available in Gacel's and Neat Unsou's forks since they are missing localcoord and some other features and bugfixes). Once done I'd like to finish implementing Tournament mode and maybe some other minor stuff in Lua side of things.
Since when is he back? Have you been talking to him privately?via ikemen discord. I'm on MFG as well. For now no new developments from me, I'm currently working on updating old Lua files to work with latest engine iteration (using them as it is would be a downgrade compared to what's currently available in Gacel's and Neat Unsou's forks since they are missing localcoord and some other features and bugfixes). Once done I'd like to finish implementing Tournament mode and maybe some other minor stuff in Lua side of things.
localcoord.origin = "Default"
localcoord.origin = "Left"
localcoord.origin = "Center"
localcoord.origin = "Right"
Via ikemen discord. I'm on MFG as well. For now no new developments from me, I'm currently working on updating old Lua files to work with latest engine iteration (using them as it is would be a downgrade compared to what's currently available in Gacel's and Neat Unsou's forks since they are missing localcoord and some other features and bugfixes). Once done I'd like to finish implementing Tournament mode and maybe some other minor stuff in Lua side of things.
@K4thos, links are a bit scattered (even in discord) and it does require some digging. Would you be able to single out the latest build/s in the first post?Which part of the opening post is confusing?
Installing
For now automated build from AppVeyor can be found at:
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go
Inside the artifacts tab. Installation bundles will be provided in the future.
References
Suehiro repo (Original creator of the engine): https://osdn.net/users/supersuehiro/pf/ikemen_go/
Gacel's fork: https://github.com/Windblade-GR01/Ikemen_GO
Neat Unsou's fork: https://osdn.net/users/neatunsou/pf/ikemen_go/wiki/FrontPage
Gacel and Neatunsou merge the changes of each other constantly so most of the time the 2 repos are the same.
Folks ending up with the wrong build initially was fairly common so I wanted to help clarify if possible. However, you're right. I suppose it doesn't get simpler than that.
EDIT 2
Done:
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go-plus
Remember that these are still a WIP and screenpacks does not work as are supposed to.
stage.portrait.spr = 9000, 0PS: It only works on the K4thos fork for now.
stage.portrait.offset = 0, 0
stage.portrait.scale = 1.0, 1.0
stage.portrait.random.spr =
stage.portrait.random.offset = 0, 0
stage.portrait.random.scale = 1.0, 1.0
One thing that's come to mind:it’s already implemented (and such parameter even exists in vanilla mugen). You can assign stage as a character parameter in select.def with additional includestage = 0 param (this way it will only show up when facing the opponent that the stage is attached to in arcade modes and won't be selected randomly). Expanding this feature to cover each mode separately seems excessive to me.
An excludestage for Arcade mode only (Or other single player modes), where it won't be used by characters that the stage is not set to.
Yeah I mean't includestage = 0 but that mean't you couldn't Stage Select it in vanilla Mugen.
So basically a way to exclude stages from random while still allowing them to be selected in versus.
; - includestage
; Set the paramvalue to 0 to avoid including this stage in the stage select
; list (in VS, training modes, etc). The stage is also blocked from being
; randomly selected for a match.
; IKEMEN feature: Setting paramvalue to -1 prevents stage from being randomly
; selected for a match, while still allowing you to choose it from the stage
; select list.
Just a rapid suggestion:sounds like a nice idea. I've implemented it locally. If lifebarName is present under [Info] section it will replace displayName (only in lifebars).
Seperate displayname for Lifebars and such, like on the Select Screen it's "Ken Masters" but in matches on the Lifebar display it's "Ken".
That was quickit needed just few lines of code: https://github.com/K4thos/Ikemen-GO-Plus/commit/88d96176ce0320a1f72b96856e6f06001e916d9f
I assume these changes aren't in the Pre-Built version yet, unless I add them myself right?for some reason appveyor for my fork hasn't been updated in 3 days, so you will have to manually compile the executable to test it (or wait for other forks to incorporate these changes, once my build is stable)
I wonder if it is possible to have the powerbar parameters divided by modes. Something like [Powebar], [Simul Powerbar], [Tag Powerbar] and [Turns Powerbar]. Would be great.It's already implemented: https://github.com/K4thos/Ikemen-GO-Plus/commit/68f80903ec3f0b3e2364c551904f3e83e67fb06d
Kathos any news on the animated portaits?@Gacel works on this feature, no idea.
Kathos, I downloaded Ikemen from your fork a few days ago and it was running normally. I tried the newest update and now I'm getting this error:if you're referring to the latest build from my github (which you manually compiled from source code and then got the missing screenpack files) then deleting your "save/config.json" and starting the game should do the job.
(https://i.imgur.com/6ZiIuVO.png)
Kathos any news on the animated portaits?Gacel works on this feature, no idea.
I assume these changes aren't in the Pre-Built version yet, unless I add them myself right?for some reason appveyor for my fork hasn't been updated in 3 days, so you will have to manually compile the executable to test it (or wait for other forks to incorporate these changes, once my build is stable)
Any chance to make it so we don't face the same character in team mode?if you're talking strictly about enemy teams then this should not be the case in ikemen go. We're not following mugen implementations if something doesn't make sense. If you have enough characters all battles should be unique (while still randomized of course). Let me know if this issue happened using latest scripts from my fork.
Like you play against Guile,Charlie and 3 matches later you play agains Guile,x(someone else)
also mugen's random is quite trash,if you got 100 characters you will only get like barely 20 of them appear in arcade,same with stages any fix for that
I assume onlyme in select.def forces the Opponent into Single mode?I can add it but why? Disabling winscreen for a bonus character like Duck Hunt seems logicial but I can't think about any character that doesn't have versus portrait.
Is there an option to disable the versus screen like how winscreen disables winscreens?
Well classics like SF2 didn't have VS screens for Bonus Stages.fair enough, implemented.
I can't seem to change the SFX volume on the new Plus Appveyor build.thanks, fixed
K4thos, I read that you were going to add a tournament mode once you're done updating your fork. Will it be similar to the tournament mode in Dragon ball z Budokai tenkaichi 3. https://youtu.be/o7qArL1pnqQyes, but more customizable
If I may ask, does anyone know how to convert this screenpack to work in Ikemen GO Plus? https://www.infinitymugenteam.com/I've just tested IMT01 (8400 slots) and IMT03 (336 slots) - both works just fine. The only thing you need to do is opening screenpack system.def files that come with these screenpacks and change this line:
It's the IMT screenpack in the Screenpacks section.
localcoord = 640,360to this:
localcoord = 640,480I have no idea what's up with that 360p localcoord setting when the game clearly opens at 480p resolution when started with included mugen executable and config file that comes with this screenpack. After this change both tested screenpacks looks fine to me:
- Portraits and names of teammates on the versus screen (and maybe on the win screen too).
p1.spacing = 20, 0
p1.num = 4
Any way to change the position of a certain row?http://mugenguild.com/forum/msg.2410866
Also in older versions of Ikemen go plus, the computer player used to randomize their character order (in team mode) if you lost a fight and continued, also stages used to be randomized when continuing. I noticed that this doesn't happen anymore for some reason.These were bugs, not features (or better say - something that worked like this because I forgot to implement proper stage and order data persistence at the time).
For example in old versions if you faced robin and joker on a team, the first time you fight them they would have for example Robin as the first player, if you lost and Continued, then they could randomize and put Joker as the first player and robin as the second one.
Ikemen GO screenbound (http://mugenguild.com/forum/topics/screenbound-sctrl-169605.0.html) engine bug reported by @JustNoPoint from HDBZ team. The problem can be reliably reproduced for example with Piccolo's lvl3 finisher.
As presented in the below video, the finisher works correctly on KFM temple stage. From my tests there is also no problem with other stages that don't allow super jump. But any larger stage will cause this bug (as showcased at 1:45s)
https://www.dropbox.com/s/r1pwctfjd2g49m6/Ikemen%20GO%202020-01-18%2021-46-19.mp4
Repo steps:
- Download character: http://network.mugenguild.com/balthazar/char_piccolo.html
- Download stage: https://www.dropbox.com/s/9l5fbavz2axuwd9/sf3-3-shinakuma.zip?dl=1
- Go to training and activate Piccolo's power mode with Down Down MP+MK (you’ll get a new meter). Spam HP to fill it all the way to max. Then QCBx2P for his lvl3 hyper. Then wait a bit or do the Down Down MP+MK to activate it.
"KeyConfig":[{
"JoystickConfig":[{
"Joystick":0,
"Buttons":["-5","-6","-1","-2","0","1","9","3","4","7","11","6","8"]
},{
"Joystick":1,
"Buttons":["-5","-6","-1","-2","0","1","9","3","4","7","11","6","8"]
}],
"Joystick":2,
"Buttons":["-5","-6","-1","-2","0","1","9","3","4","7","11","6","8"]
},{
"Joystick":3,
"Buttons":["-5","-6","-1","-2","0","1","9","3","4","7","11","6","8"]
}],
Ignoring the multi-post weirdness, I'd suggest a different link.
trigger1=1||fvar(25):=((var(9)&68)=68)*5 +((var(9)&128)=128)*30 +((var(9)&256)=256)*20 +(var(41)>=30)*25 +fvar(3)+fvar(5)+fvar(6)
Gacel just released a new build with both K4thos and his code merged.Gacel forgot to update his screenpack repository, so until he does, you also need to manually download and overwrite files with these ones: https://github.com/K4thos/Ikemen_GO-Elecbyte-Screenpack
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go
We now have ratio system!!! Thank you all for your hard work. Amazing progress
At Gacels latest build shaders dont work from option menu(i tried the scanlines).
No shaders folder on my end, I've downloaded the 0.84 build.
Gacel just released a new build with both K4thos and his code merged.I have to add more dependencies (libglib2.0-dev) to the containers make it compile on linux
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go
Expect some bugs but also new features.
BTW, no mac release yet(because of some troubles with dependencies), and the Linux build is missing the executable. I had to compile it myself from Github.
Still no shaders folder on my end. Can you please link me it separately?
IKEMEN GO Plus Ultimate is a mod of IKEMEN GO Plus by K4thos that adds and changes a handful of features.https://www.dropbox.com/s/b56j7y4pv61e32k/ikemen_go_plus_ultimate.zip?dl=0
IKEMEN GO Plus can be downloaded at https://ci.appveyor.com/project/Windblade-GR01/ikemen-go-plus/build/artifacts
IKEMEN GO Plus Ultimate changes the script files and adds new settings to system.def. Both of these need to be replaced or edited for IKEMEN GO Plus Ultimate to work correctly.
Coins: Coins can be collected when winning matches. The amount earned depends on team sizes, AI difficulty, and options in system.def .
Arcade Progress: The game now keeps track of who has finished Arcade mode. This shows on the character select and at the top of the main and arcade menus.
Character Unlocking: Characters with hidden set to 3 can be unlocked through a few ways: spending coins, finishing a specific character's Arcade mode, and having a certain amount of characters finish Arcade mode.
Mode Unlocking: Boss Rush and Survival can now be locked behind Arcade mode, requiring a certain amount of completed characters for Survival and a certain % for Boss Rush.
New Mode: All Rush is just like Boss Rush, except instead of just bosses, it's all of the fighters on the select screen!
More Option: Under the Ultimate Settings menu, there is an option called Unlock All. This unlocks all of the characters in the select menu until it is disabled.
Very interesting! Some of those features would be nice to see in ikemen go plus.
I need to check this out. But judging by the code, it seems to work like the names in team mode. If so, it would be better to have a separate versus by mode, to be able to use different portraits, projects could benefit a lot in that way.Spoiler, click to toggle visibilty
Already posible.
Using:Code:p1.spacing = 20, 0
p1.num = 4
In the [VS Screen] section of system.def
I'll also see if when I can add it to the win screen.
Hello, I Just Joined MFG.Thanks for informing.
Apparently, Dolmexica Infinite has an Exclusive Mode that's Called "Credits" Mode.
You can View Dolmexica Infinite Here: https://captaindreamcast.itch.io/dolmexica-infinite (https://captaindreamcast.itch.io/dolmexica-infinite)
Anyways, It's a mode that Shows the Character on the Cursor's Name (Not Display Name), Author, and Date.
Would you be Able to implement That Mode? Gacel or K4thos?
Another similar suggestion. I think it would be great if [WinIcon] were separated by modes, mainly because of a 3x3 or 4x4 simul/tag. It can be complicated to adapt the lifebar design to these modes, otherwise it is not possible to have a good design for them.I'll will implement it soon.
[quote]
;P3 Lifebar
[State 0, Helper]
type = Helper
TriggerAll = TeamSide = 1
TriggerAll = id > partner, id
TriggerAll = TeamMode = Simul
triggerAll = NumHelper(5800) = 0
TriggerAll = Name != "Rugal Bernstein" || Name != "Krizalid 2001" || Name != "Sachiel"
TriggerAll = Name != "Sinobu Amou" || Name != "Adelheid Bernstein" || Name != "Kyo Story"
TriggerAll = Name != "Platform 1" || Name != "ALIEN QUEEN" || Name != "Duck Hunt"
TriggerAll = Name != "Catwalk" || Name != "Training"
trigger1 = roundstate = 2
helpertype = normal ;player
name = "Lifebar Player 3"
ID = 5800
stateno = 5800
pos = 0,0
postype = left ;p2,front,back,left,right
facing = 1
keyctrl = 0
ownpal = 1
supermovetime = 0
pausemovetime = 0
ignorehitpause = 1
;P5 Lifebar
[State 0, Helper]
type = Helper
TriggerAll = TeamSide = 2
TriggerAll = NumEnemy = 3
;TriggerAll = Enemy,TeamMode = Simul
triggerAll = NumHelper(5801) = 0
trigger1 = roundstate = 2
helpertype = normal ;player
name = "Lifebar Player 5"
ID = 5801
stateno = 5801
pos = 0,0
postype = left ;p2,front,back,left,right
facing = 1
keyctrl = 0
ownpal = 1
supermovetime = 0
pausemovetime = 0
ignorehitpause = 1
;P4 Lifebar
[State 0, Helper]
type = Helper
TriggerAll = TeamSide = 2
TriggerAll = id > partner, id
TriggerAll = TeamMode = Simul
triggerAll = NumHelper(5810) = 0
trigger1 = roundstate = 2
helpertype = normal ;player
name = "Lifebar Player 4"
ID = 5810
stateno = 5810
pos = 0,0
postype = left ;p2,front,back,left,right
facing = 1
keyctrl = 0
ownpal = 1
supermovetime = 0
pausemovetime = 0
ignorehitpause = 1
;P6 Lifebar
[State 0, Helper]
type = Helper
TriggerAll = TeamSide = 1
TriggerAll = NumEnemy = 3
;TriggerAll = Enemy,TeamMode = Simul
triggerAll = NumHelper(5811) = 0
trigger1 = roundstate = 2
helpertype = normal ;player
name = "Lifebar Player 6"
ID = 5811
stateno = 5811
pos = 0,0
postype = left ;p2,front,back,left,right
facing = 1
keyctrl = 0
ownpal = 1
supermovetime = 0
pausemovetime = 0
ignorehitpause = 1
Amazing work, really interesting, congratulations.This was on the MugenHook thread.
Any chance to play video files that replace intros / endings? This can reduce the full game size and editing time, and maybe you can add animation in stage selection...
Amazing work, really interesting, congratulations.This was on the MugenHook thread.
Any chance to play video files that replace intros / endings? This can reduce the full game size and editing time, and maybe you can add animation in stage selection...
Just wondering if you guys could take this into consideration aswell.
- If we can't have 1v1v1v1's, or online group 2v2's, would it be possible to add?Support for 4 players fighting simultaneously locally (in 2vs2 versus co-op mode) was implemented at some point but due to problems with gamepads I've reverted this change for now (although probably will be back in future). Not sure about netplay though. Maybe Gacel will be able to say something more about it.
- Also, a variable to check which character id each player controlsI've just implemented this trigger:
Returns ID of the player with specified number. Returns 0 if the player doesn't exist.Example:
Format:
GetPlayerID(player_number)
Arguments:
player_number
Expression evaluating to player number (P1 team members use odd values starting from 1, P2 team members use even values)
Return type:
int
trigger1 = PlayerID(GetPlayerID(2)), MoveType=A
- If we can't have 1v1v1v1's, or online group 2v2's, would it be possible to add?Support for 4 players fighting simultaneously locally (in 2vs2 versus co-op mode) was implemented at some point but due to problems with gamepads I've reverted this change for now (although probably will be back in future). Not sure about netplay though. Maybe Gacel will be able to say something more about it.- Also, a variable to check which character id each player controlsI've just implemented this trigger:QuoteReturns ID of the player with specified number. Returns 0 if the player doesn't exist.Example:
Format:
GetPlayerID(player_number)
Arguments:
player_number
Expression evaluating to player number (P1 team members use odd values starting from 1, P2 team members use even values)
Return type:
intCode:trigger1 = PlayerID(GetPlayerID(2)), MoveType=A
Is this good enough or you meant something else here? btw. if you're requesting new triggers or sctrls please consider writing it using the above template. It took me more time to think about the trigger name that would fit here and writing the documentation than actually implementing it in engine.
Returns True if character is being controlled by this client, returns 0 if otherwise. Pretty much an Addon to the first variable y'made hre.Example:
Format:
IsClient(player_number)
Arguments:
player_number
Expression evaluating to player number (P1 team members use odd values starting from 1, P2 team members use even values)
Return type:
int
trigger1 = PlayerID(GetPlayerID(2)), !IsClientto check if an character isn't being played locally.
Example:Code:trigger1 = PlayerID(GetPlayerID(2)), !IsClientto check if an character isn't being played locally.
not sure what it's for but I've implemented it anyway (the way I understood the request):Example:Code:trigger1 = PlayerID(GetPlayerID(2)), !IsClientto check if an character isn't being played locally.
That, yes or yes would cause a desync online.
What would you use it for?
NetworkPlayerfrom source code perspective it looks like this:
Returns 1 if the player is host in online match, 2 if the player is client, otherwise it returns 0.
func (c *Char) networkPlayer() int32 {
if sys.netInput == nil || sys.com[c.playerNo] > 0 {
return 0
}
if sys.home == 0 { //Versus style modes
if c.teamside == 0 {
return 1
} else if c.teamside == 1 {
return 2
}
} else if c.teamside == 0 { //Co-op, players side
if c.playerNo == 0 {
return 1 //host
}
return 2 //client
}
return 0
}
Example:Code:trigger1 = PlayerID(GetPlayerID(2)), !IsClientto check if an character isn't being played locally.
That, yes or yes would cause a desync online.
What would you use it for?
main.credits = config.Credits - 1 --amount of continues
main.credits = config.Credits + 1and ikemen adds a credit indepently of any moment of the game
main.credits = config.Credits - 1 --amount of continues
main.credits = config.Credits + 1y que al realizar esta funcion, ikemen al presionar la tecla G te añada una vida
main.credits = config.Credits + 1y que al realizar esta funcion, ikemen al presionar la tecla G te añada una vida
For options menu you need to use the updated mugen files from kathos. Kathos upload them 5 days ago.
BTW guys 0.90 has its own TAG system based on ADD004, also you need to declare the option menu parameters in system.def, if not you will not see any Options!!
BTW guys 0.90 has its own TAG system based on ADD004, also you need to declare the option menu parameters in system.def, if not you will not see any Options!!
How exactly is one supposed to get the tag-in/tag-out working properly? All I get is three or four characters playing simultaneously instead of actual tagging. Is it still necessary to patch them to use add004?
download updated mugen files from the repo to enable tag.You can you use add004 if you change statefef-20 to statedef - 2 and - 10 to - 1 at shiyo's common file and delete the code from tag and score files.
some people have problem to download the automatic build so they have to download the mugen files, also want the add004 lifebars and add004 system so i just point out how to use the add004 system.Please stop being rude to people that want to help.
^
You have a point about the requests that people make. But while they can overwhelm the work of developers, most requests are for "basic" features that have been asked for a long time. At the end of the day, it's up to the developers whether they are worth adding or not. It is interesting the small number of active people here on this board, considering that the team working on IKEMEN is basically doing what the community has always wanted Elecbyte to do.
Now, about converting things to IKEMEN, it's still too early. Even though it is already in version "0.9", there are still many bugs and even the basic things are not working as they should. I suppose it will be a long time before we get to a stable build.
Meanwhile I still have(and I know many outthere just notice this) this trouble the engine cant detect properly two(or more) button pressings on keyboards or sticks. Ex movements and two level special that need two buttons pressed are hard to make, this is basic for me, still no fix yet.Two button press actually technically works properly, however it could possibly be made more lenient, although in all honesty it would require a fix in regular characters before it could be done engine wide, I think. More info here: https://mugenguild.com/forum/msg.2468886 long and short though, MUGEN's original button press check code was wrong because it checked for a hold first, then a press, introducing arbitrary input latency on press inputs and two additional frames for 2 button press inputs (if EX Flash Kicks have ever been harder in regular MUGEN for you, this is why)
From someone who has been flirting with Ikemen for years now, I can tell that the reason that I didn't dropped MUGEN for good already is because its just more pratical and pleb friendly. Setting screenpacks is easy, and the characters work as they should, while on Ikemen you need to manually adjust screenpacks(which requires some knowledge) and the two buttons thing and some bugs just kills it to me. I hope that this changes in the future because I love the features that the engine has but to me functionality will always trump everything else.
What line did you changed?
So you just changed that and suddenly everything works just like in MUGEN!? Fonts, menus, characters cells!? I have to see that for myself.
Also about the buttons problem, have they pronounced on that already? I feel like the bug report section doesn't get much attention.
I just tried a screenpack here and...
(https://i.imgur.com/uLFeYph.png)
The options menu was set as = "Options" here, so I don't think that's the same case.
There you go... https://mugengermany.com/downloads/?sa=downfile&id=134 (https://mugengermany.com/downloads/?sa=downfile&id=134)
Its a very simple screenpack because I wanted to play safe.
;Victory screen definition
;This is the screen that is shown when you win a match in arcade mode.
;It will not be displayed on the last match of arcade mode.
[Victory Screen]
enabled = 1
time = 300 ;Time to show screen
fadein.time = 0
fadeout.time = 15
;Winner's portrait and name
p1.offset = 100,20
p1.spr = 9000,2
p1.facing = 1
p1.scale = 1,1
p1.window = 0,0, 319,160
p1.name.offset = 20,180
p1.name.font = 3,0,1
;Win quote text
winquote.text = "Winner!" ;Default win quote text to show
winquote.offset = 20,192
winquote.font = 2,0,1
winquote.window = 18,171, 301,228
winquote.textwrap = w ;Word wrap
winquote.length = 280 ;Ikemen feature
;-----------------------
;Victory screen background
[VictoryBGdef]
[VictoryBG 1]
type = normal
spriteno = 100,0
start = 0,0
tile = 1,1
velocity = 0,1.5
[VictoryBG 2]
type = normal
spriteno = 100,1
start = 20,13
tile = 1,1
trans = sub
window = 0,19, 319,160
velocity = -2, 0
[VictoryBG 3]
type = normal
spriteno = 100,1
start = 10,170
tile = 1,1
trans = sub
window = 15,170, 304,229
velocity = 0, 0
This is the kind of stuff I'm talking about. With mugen I just put the files in and everything is working.
If Mugen was doing things wrong with simultaneous buttons, please don't fix what is not broken. The important thing is that it works from the front end user. When Gacel build was by 0.70 version, the problem wasn't that serious, but it just getting worst.It kind of was broken, though. It made button holds detect earlier than two button press, leading to very.....funky results, including variable input latency (which you can tangibly notice), inconsistencies with various cancel windows, and it also made button inputs fall 1 frame behind directional inputs, which is its own can of worms. Two button press lags about 2 frames behind directional inputs, vs. regular button press which is about a frame. This makes things like Flash Kicks extremely hard in regular MUGEN if the character's pre-jump frames are like, 3. Doubly so if they involve two button press.
If I would know how the command parser works I'll have fixed the compatibility for it a long time ago.
The problem is.
I have absolutely no idea on how the input parser works. :S
So.... Game kept closing when I tried to add the characters back in.... until I realized I just have to keep opening the game because it was loading 1 character at a time thus it kept closing until a certain amount. Interesting.
Greetings, people of MFG. I used to have an account here with my main email but have long lost it, and did not interact at all with you either. Anyway, I long wanted to try out this fancy reverse-engineering of the engine, as I like the consistency and features it seems to possess. I am used to the screenpack LEGACY (the one with normal, character-provided portraits) and I remember seeing screenpacks of similar quality for this engine -- I also remember being able to, in place of portraits, setting the characters' idle animation. Do you have any quick suggestions for quality screenpacks, and the documentation for the aforementioned alternative to traditional portraits? I am also wondering if the special, stage-bound boss introduction trick found in Mr. Ansatsuken's Akuma is still working with this (it is not vital, of course).Reverse-engineering? Ok. I didnt know you can call a new piece of software made from the scratch in a new coding language "reverse-engineering".
And lastly, is there anything remotely similar to VSelect? I am ready to be confined to editing text, but a graphical editor would be a nice addition.
Ikemen GO it's technically a clone engine.QuoteReverse-engineering? OK. I didn't know you can call a new piece of software made from the scratch in a new coding language "reverse-engineering".Yes, as it can at least partly run the same things as the original (characters that worked in MUGEN work here too, right?) and has roughly the same objective while being coded from scratch and in this case being more polished.
Has someone the latest version to me make a test.It's in the first post.
I'd like to see the current progress these days.
That's looking better every updating.
--------------------
In another note, my PC laptop did broke (Literally, the case did broke and it does not charge) so I'll will be not able to update Ikemen GO until I get i fixed.
Ikemen GO uses Mugen screen packs, it's just that has more [experimental] feature compare to the Mugen ones.
SSZ-Ikemen Plus uses his own screenpack format and can not be ported to Ikemen GO with ease.
So the best option is using Mugen screenpacks. (It support up to Mugen 1.1 screenpacks)
That said, screenpacks are the most unstable area of Ikemen GO and some could not work.
so.... how do I get Player 3 and 4 to work now? Adding controls to config doesn't seem to work because I can't get Simul mode to use 2 vs 2 with 4 players to work now. Unless I have to use Tag mode but Tag is just changing characters during battle though. Unless it hasn't been implement yet since this is a new version with new codes?
Unfortunately I can't run Ikemen GO on my Ubuntu Bionic Beaver I don't know why.
so.... how do I get Player 3 and 4 to work now? Adding controls to config doesn't seem to work because I can't get Simul mode to use 2 vs 2 with 4 players to work now. Unless I have to use Tag mode but Tag is just changing characters during battle though. Unless it hasn't been implement yet since this is a new version with new codes?
It has not been implemented yet.
The code snippet posted above should add a third keyboard player.
If you want send me your config.json file and what the third and fourth player keybard map you want and I'll add it
thanks, here: https://mega.nz/#!jE5ViKBR!himQqwe-GgteeB8SAPtukmzZg6OIAvoIME4FafCSJew
P1- up, down, left, right, q,w,e,a,s,d, return
P2- numpad8, numpad2, numpad4, numpad6, i,o,p,j,k,l, enter
P3- r,t,y,u, 1,2,3,4,5,6, left ctrl
P4- z,x,c,v, f,g,h,b,n,m, right ctrl
also is there a tutorial on increasing the character slot numbers? I saw one for Ikemen Plus but Ive no idea where to start in Ikemen GO so if you could point me to the correct file(s) I would be very much appreciated.
Thanks again, Im really loving this version of Mugen.
I've been messing around with Ikemen for a bit and it seems very cool. Is Zoom functional in it though? because I watched the how ikemen part on zoom and went into the options.lua and I set it to true and absolutI us3ely nothing changed. I tested out stages that would zoom in 1.1b and nothing happened
[State 125]
type = MapSet
trigger1 = 1
map = "Test"
value = 42
[State 125]
type = RoundTimeSet
trigger1 = map(Test) = 42
value = 99
2.
Currently there is no way to do multiple music files for one stage (I think)
stages/mybg.def, music=sound/song.mp3, music=sound/song2.mp3
music=<song> bgmVolume bgmLoopStart bgmLoopEndA example:
stages/stage0.def, music=sound/song.mp3 100 213 321
[State -2, HyperComboFinish]
type = PlaySnd
triggerall = roundstate >= 2
trigger1 = WinKo && !var(32)
trigger1 = stateno != 3201
value = 9000,0
ignorehitpause = 1
[State 9020, PlaySnd]
type = PlaySnd
triggerall = roundstate >= 2
trigger1 = WinKo && !var(32)
trigger1 = fvar(9)=12
value = 9000,4
ignorehitpause = 1
[State -2, HyperComboFinish]
type = Pause
triggerall = roundstate >= 2
trigger1 = WinKo && !var(32)
trigger1 = stateno != 3201
time = 17
ignorehitpause = 1
[State -2,KO]
type = Varadd
trigger1 = roundstate = 3
ignorehitpause = 1
var(32) = 1
Wait. How do I add004 lifebars to Ikemen GO?Yeah, I tried to add them but only the char names showed up. The lifebars just weren't drawn.
Just tried IKEMEN GO recently. I know that previous ikemen versions allow you to take out team modes but in ikemen go, the method on how to do so seems different. Is there a way for me to take out some of the team modes for ikemen go? I want to take out simul mode at least
Wait. How do I add004 lifebars to Ikemen GO?Yeah, I tried to add them but only the char names showed up. The lifebars just weren't drawn.
Wait. How do I add004 lifebars to Ikemen GO?Yeah, I tried to add them but only the char names showed up. The lifebars just weren't drawn.
You guys need to replace common1.cns.zss with the one provided by add004.
You guys need to replace common1.cns.zss with the one provided by add004.I did but it still doesn't work.
Really hyped for the 3D stage feature that would be coming to this soon, so I can recreate the MvC2 experience.I don't know anything about anyone planning to add such feature
- Lifebar mid animation still plays when the game is paused.0.93.1 doesn't have some of the fixes mentioned in my previous post (https://mugenguild.com/forum/msg.2475600) so don't bother testing them just yet.
- If you pause the screen during a combo, the combo text will slide out ignoring the pause.
- With P1, there is a problem with the alignment of the combo text when you do a 2-digit combo (x axis):from the screenshot this looks like a result of "1" having less width than "2". If you want me to test it upload the lifebar (but first please check if the same thing doesn't happen in mugen)
from the screenshot this looks like a result of "1" having less width than "2". If you want me to test it upload the lifebar (but first please check if the same thing doesn't happen in mugen)I had already tested with MUGEN, it doesn't happen.
"Really hyped for the 3D stage feature that would be coming to this soon, so I can recreate the MvC2 experience."
I don't know anything about anyone planning to add such feature
You guys need to replace common1.cns.zss with the one provided by add004.I did but it still doesn't work.
Do your characters have an stcommon that's not common1.cns?
I've seen of a patcher exe but it is not in my download of add004.That was only for the vanilla Mugen versions.
Was thinking this could be the answer to transformations.This is the answer to transformations:
...Could it be possible though?everything is possible in open source engine. But that message sounded like someone actually started working on such feature, which is not the case (or at least I'm not aware about it)
Kinda new to Ikemen GO so I have two questions:all changes to lifebars are documented on wiki: https://github.com/K4thos/Ikemen_GO/wiki#lifebarJust super curious about this because that would mean we could finally make pretty wild lifebars. I'm already amazed at the score and stage display properties!
- Is there a way to reorder the priority of appearance of combo counters? (ie. having .counter before .text)
- Is it possible to customize how the counter works deeper than just the .shake property? If I wanted to do like Guilty Gear X/XX and make it so it starts from a y-only stretch at low transparency to normal scale and fully opaque?
Was thinking this could be the answer to transformations.This is the answer to transformations:
https://github.com/K4thos/Ikemen_GO/wiki#sctrlnew_remapsprite
https://github.com/K4thos/Ikemen_GO/wiki#char_cns_remappreset
with each other (so that they are moved when there is more than 1 message on the screen). So no, there won't Guilty Gear style stuff (unless someone else will implement it)
I've seen of a patcher exe but it is not in my download of add004.That was only for the vanilla Mugen versions.
I get invalid state controller when I try to use itIt has been added today (https://github.com/K4thos/Ikemen_GO/commit/8a11d184ba0211bab907fa3e12cdf23c9134f3d3), it's not yet available in current appveyor build.
I get invalid state controller when I try to use itIt has been added today (https://github.com/K4thos/Ikemen_GO/commit/8a11d184ba0211bab907fa3e12cdf23c9134f3d3), it's not yet available in current appveyor build.
I don't see a point. Animations local to character are not a problem when it comes to implementing character transformations (there are like 1000 characters in mugen that have them). The only engine limitation that I'm aware of is when character is forced into custom state that applies p2 custom animation into p1 (throws etc.) - in such case in mugen your character looses the transformed look (or attachable accessories like in Vega claw case) because he is forced to use one of his standard sprites (http://www.elecbyte.com/mugendocs-11b1/spr.html). That's what this sctrl is for - to remap sprites as needed so that the character always looks correctly, even in custom state. All the remaining coding is not meant to be changed compared to mugen transforming characters.I get invalid state controller when I try to use itIt has been added today (https://github.com/K4thos/Ikemen_GO/commit/8a11d184ba0211bab907fa3e12cdf23c9134f3d3), it's not yet available in current appveyor build.
Cool didn't know you could implement things that fast. I'll wait until the new build then. Only thing I ask for is it possible to do the same but for animation? I say this because if you have a transformation that is a different size then the hit boxes will be off
I don't see a point. Animations local to character are not a problem when it comes to implementing character transformations (there are like 1000 characters in mugen that have them). The only engine limitation that I'm aware of is when character is forced into custom state that applies p2 custom animation into p1 (throws etc.) - in such case in mugen your character looses the transformed look (or attachable accessories like in Vega claw case) because he is forced to use one of his standard sprites (http://www.elecbyte.com/mugendocs-11b1/spr.html). That's what this sctrl is for - to remap sprites as needed so that the character always looks correctly, even in custom state. All the remaining coding is not meant to be changed compared to mugen transforming characters.I get invalid state controller when I try to use itIt has been added today (https://github.com/K4thos/Ikemen_GO/commit/8a11d184ba0211bab907fa3e12cdf23c9134f3d3), it's not yet available in current appveyor build.
Cool didn't know you could implement things that fast. I'll wait until the new build then. Only thing I ask for is it possible to do the same but for animation? I say this because if you have a transformation that is a different size then the hit boxes will be off
Last thing lol I see there is a counter count trigger but is there a way to get a counter trigger if there isn't already one. I didn't see one in the documentation.
if CounterCount > Map(_iksys_counterCount) {
#do something
MapSet{map: "_iksys_counterCount"; value: CounterCount}
}
QuoteLast thing lol I see there is a counter count trigger but is there a way to get a counter trigger if there isn't already one. I didn't see one in the documentation.
you mean the same thing but just returning boolean 1 in a single frame when the counter occurs? Sounds useless to be honest when you have access to unlimited amount of named variables that can be used for this purpose. Example from data/score.zss file (btw. ZSS format (https://github.com/K4thos/Ikemen_GO/wiki#misc_zss) is the same thing as CNS, just uses more sane syntax and is easier to work with)Code:if CounterCount > Map(_iksys_counterCount) {
ScoreAdd{value: (CounterCount - Map(_iksys_counterCount)) * 100}
MapSet{map: "_iksys_counterCount"; value: CounterCount}
}
edit: on the other hand removing CounterCount trigger and replacing it with Counter may be a good idea (the total count is meant to be used by end match rank system similar to add004, that I'm planning to implement, but is not really that useful as a general trigger).
This is the code I have to use to make a "Reversal" helper come out. (Like 1st attack or danger). Feel like it would be easier to just have a trigger that says Counter or MoveCountered. Not to account I have to place each helper # that acts as a projectile or move extension to the triggers.makes sense, I will replace CounterCount trigger with MoveCountered.
; KO
KO.time = 0 ;Time to show KO component
KO.offset = 320,240 ;Component for KO display
KO.anim = 100
KO.snd = 2,0 ;Sound to play for KO announcement
KO.sndtime = 0
; KO
KO.time = 0 ;Time to show KO component
KO.offset = 320,240 ;Component for KO display
KO.bg0.anim = 100
KO.bg1.anim = 101
KO.bg2.anim = 102
KO.snd = 2,0 ;Sound to play for KO announcement
KO.sndtime = 0
[Time]
pos = 322,12
bg0.anim = 200
bg1.anim = 201
bg0.inf.anim = 300
bg1.inf.anim = 301
; Time count display
counter.offset = 0,52
counter.font = 2,0, 0
counter.scale = 2,2
; Ticks for each count
framespercount = 60
[TitleBG 1]
type = randomanim
randomizerno = 1
mask = 1
start = 0,0
[Randomizer 1]
block1.start
50,0, 0,0, 3,,AS96D160
50,0, 0,0, 3,,AS128D128
50,0, 0,0, 3,,AS160D96
50,0, 0,0, 3,,AS192D64
50,0, 0,0, 50
50,0, 0,0, 3,,AS192D64
50,0, 0,0, 3,,AS192D64
50,0, 0,0, 3,,AS128D128
50,0, 0,0, 3,,AS96D160
-1,0, 0,0, 30
block1.end
block2.start
50,1, 0,0, 3,,AS96D160
50,1, 0,0, 3,,AS128D128
50,1, 0,0, 3,,AS160D96
50,1, 0,0, 1,,AS192D64
50,1, 0,0, 50
50,1, 0,0, 3,,AS192D64
50,1, 0,0, 3,,AS192D64
50,1, 0,0, 3,,AS128D128
50,1, 0,0, 3,,AS96D160
-1,0, 0,0, 30
block2.end
block3.start
50,2, 0,0, 3,,AS96D160
50,2, 0,0, 3,,AS128D128
50,2, 0,0, 3,,AS160D96
50,2, 0,0, 1,,AS192D64
50,2, 0,0, 50
50,2, 0,0, 3,,AS192D64
50,2, 0,0, 3,,AS192D64
50,2, 0,0, 3,,AS128D128
50,2, 0,0, 3,,AS96D160
-1,0, 0,0, 30
block3.end
Also to make this fully controller controllable (lol) you should incorporate some type of "back" functionality into one of the buttons for menus. Having to press ESC is a drag if you're using a controller. I should be able to press b or whatever button to go back on the menu. Lastly like the Match Restart sctrl you should have a Exit sctrl. That way if someone makes a custom pause menu they can exit the game without pressing ESC. This will make the game feel more authentic rather than a MUGEN game (even though it is). At the end of the day if someone puts a real effort to a full game release they might want to market to people outside of the MUGEN community and having the game feel as authentic as possible would be a good look not only for their game but your engine as well.
We are planing to do this.
A configurable pause button will be act as a ESC while inside a sub menu.
teammenu.itemname.single = Single ;Ikemen feature
teammenu.itemname.tag = ;Tag ;Ikemen feature
teammenu.itemname.simul = ;Simul ;Ikemen feature
teammenu.itemname.turns = ;Turns ;Ikemen feature
teammenu.itemname.ratio = ;Ratio ;Ikemen feature
p1.teammate.pos = 30,30
p1.teammate.spacing = 20,0
p1.teammate.bg.spr = 70,0
p1.teammate.ko.spr = 71,0
p1.teammate.name.font = 1,0
p1.teammate.name.scale = 1,1
p1.teammate.name.offset = 0,0
p1.teammate.name.layerno = 0
p2.teammate.pos = 316,12
p2.teammate.spacing = 20,0
p2.teammate.bg.spr = 70,0
p2.teammate.ko.spr = 71,0
p2.teammate.name.font = 1,0
p2.teammate.name.scale = 1,1
p2.teammate.name.offset = 0,0
p2.teammate.name.layerno = 0
; Perfect
PFT.time = 0 ;Time to show "Perfect" component
PFT.offset = 160, 70
PFT.font = 1,5
PFT.text = Perfect
PFT.displaytime = 60
PFT.snd = 3,0
; Perfect
PFT.time = 0 ;Time to show "Perfect" component
PFT.offset = 160, 70
PFT.anim = 300
PFT.displaytime = 60
PFT.snd = 3,0
[Darken_char]
;0 (lightest) to 256 (darkest). Defaults to 128 if omitted.
intensity = 46
;This is the shadow color given in r,g,b. Valid values for each
;range from 0 (lightest) to 255 (darkest).
;Defaults to 0,0,0 if omitted.
;intensity and color's effects add up to give the final shadow
;result.
color = 0,0,0
menu.itemname.menugameplay.menuteam = ""
Could IKEMEN GO's debug mode be updated to be more in line with MUGEN's? The latter displays a lot more information about the characters and prints out errors that wouldn't cause the engine to close, whereas the former doesn't.you sure about that? ;)
1. The stTag in the Def does not loadit works as intended. Please read the updated wiki article: https://github.com/K4thos/Ikemen_GO/wiki#misc_tag
Outside of KFM you cannot choose the same character (same DEF file) in Tag or the game won't load. I've tested this by duplicating one character and changing the DEF filename and iit loaded.If you're reporting issue please always make sure that it can be reliably reproduced in game and provide detailed steps how to do it. I've spent quite some time trying to reproduce it based on your vague description and didn't menage to do it. Also please use proper topic for reporting bugs: http://mugenguild.com/forum/topics/ikemen-go-bug-reports-and-know-bugs-187803.0.html
Is there a way to skip straight to one mode after leaving names blank like Arcade and the Co-Op modes?no, unless you add such feature in lua files yourself, since it's not implemented currently outside main menu.
Has anyone nailed down a way to do native/ 4 players on this version of ikemen yet? Me and friend were trying it out but no avail at the moment.4 players are not supported
Sorry for my English. In the new version there is no continue screen?yes, all screenpack parameters used for that SFA2 continue screen with counter are still fully usable. You need to add them to screenpack yourself though. Keep in mind that they are not docummented yet (you can find thier names in motif.lua, if you really want to use them now).
some way to put the old continue scren?
you sure about that? ;)
(https://i.imgur.com/LM5bZ7C.png)
Would you consider to add teamates option at the background during ratio and turns modes like the king of fighters. Perhaps animations for lose, win and idle stance during match with scale and position options at the stage.def with those options you can add your teamates to whatever stage you want during match.
My Ikemen Go with code modification to look like kof 2002/2002 UM
[youtube]https://www.youtube.com/watch?v=Doiwx9E6I2M[/youtube]
My Ikemen Go with code modification to look like kof 2002/2002 UM
[youtube]https://www.youtube.com/watch?v=Doiwx9E6I2M[/youtube]
I tried to use the AX2 screenpack with my IKEMEN, and when I try to run it, it just does not open, can someone help me?The solution is simple, you have to import the screenpack:
That is not necessary to open a mugen screenpack, mugen screenpacks should work without doing that, it will only not show Ikemen Go features or options in the Options menu.I tried to use the AX2 screenpack with my IKEMEN, and when I try to run it, it just does not open, can someone help me?The solution is simple, you have to import the screenpack:
Ikemen Go will not open no matter what I do, I even ran it on compatibility mode, and it still won't launch whatsoever. no error message or nothing!!
You don't need the patch as long as your characters don't have their own stcommon/common1.And even when they use their own common1 you only have to modify 2 lines of code inside the charater def file.
Really? In previous versions, screenpacks and lifebars would crash IKEMEN if I tried to use them directly without any messages. So I just gave up after a few tries.Spoiler, click to toggle visibiltyThat is not necessary to open a mugen screenpack, mugen screenpacks should work without doing that, it will only not show Ikemen Go features or options in the Options menu.
What you describe is if someone wants to use Ikemen Go Features in a Mugen screenpack, which is pretty much recommendable since the intention of moving from Mugen to Ikemen GO is using all the features.
Now if OP is talking of Ikemen vanilla, yes, you have to port the screenpack.
The best option is to check Ikemen Go log file. Also, test a clean install to confirm if the PC can run Ikemen Go.
VSync settings is inside the config.json inside the save folder.
To disable it set it to 0 to enable it set it to 1.You don't need the patch as long as your characters don't have their own stcommon/common1.And even when they use their own common1 you only have to modify 2 lines of code inside the charater def file.
Really? In previous versions, screenpacks and lifebars would crash IKEMEN if I tried to use them directly without any messages. So I just gave up after a few tries.Spoiler, click to toggle visibiltyThat is not necessary to open a mugen screenpack, mugen screenpacks should work without doing that, it will only not show Ikemen Go features or options in the Options menu.
What you describe is if someone wants to use Ikemen Go Features in a Mugen screenpack, which is pretty much recommendable since the intention of moving from Mugen to Ikemen GO is using all the features.
Now if OP is talking of Ikemen vanilla, yes, you have to port the screenpack.
The best option is to check Ikemen Go log file. Also, test a clean install to confirm if the PC can run Ikemen Go.
Just curious does the Legacy SP by NoZ run on Ikemen GO ?It runs, but since Legacy uses images for the menus, adapting it to the new features could be troublesome.
As far as the extra modes will there ever be a side scroller beat em up mode like TEKKEN FORCE.
if you are in a 3 person tag team, and you are the first player using the RedirectID = GetPlayerID(Teamside), it directly redirects to you as the first player as well...when they are in other slots it works fine though....not sure whats upI don't understand why you consider it wrong behaviour. Based on your description it matches what RedirectID, GetPlayerID and Teamside does.
As far as the extra modes will there ever be a side scroller beat em up mode like TEKKEN FORCE.I'm not aware about anyone interested in implementing it.
As far as the extra modes will there ever be a side scroller beat em up mode like TEKKEN FORCE.
Hello
Just have a quick development question.
I would like to utilize the entire screen (or with own margins) for the options screen, setting [menu_pos = {0, 33}, --Ikemen feature] in the motif.lua doesn't make the menu go all the way left. So I guess there is an additional offset in place but I can't seem to find it. Any of the developers have any pointer they could give me in regards to this? Any help is much appreciated.
Regards,
X3no
Edit: After some more fiddeling I found out it has to do with the screen resolution, set to 640 x 480 then the options menu is all the way left however setting it to 1280x720 there is an offset in place (or maybe scaling???) So any help is stil much appreciated.
first of all you're not supposed to edit motif.lua directly. It contains DEF file parser and default values that are meant to be overwritten by screenpack DEF file. Lua scripts are often changed between versions without notice which means local adjustments are not forward compatible. Of course if it's a full game project and you're planning to rewrite scripts to your needs without worrying about future changes than do whatever you wish, otherwise stick to DEF file to save yourself frustration.
As for the question - what you're seeing is a default option menu that is rendered using 320x240 localcoord, scaled up to your screenpack localcoord resolution. In order to take full advantage of your actual localcoord (in this case 1280x720) you need to paste menu.item.font parameter to your screenpack DEF file under [Option Info] (and many other parameters since after doing so default positioning implemented for different localcoord in mind won't be correct).
Additions:
Coins: Coins can be earned when winning matches. The amount earned is determined by a few values in system.def, the current AI difficulty, and the size of both teams.
Character Unlocking: When characters are set to hidden 3, a handful of extra values can be added to slots that can make them unlockable in a few ways:
Spending Coins
Beating Arcade Mode with a certain character
Beating Arcade Mode with a certain amount of characters
Toggling the Unlock All option in the options menu (temporary unlock)
Arcade Mode Progress Tracker: The game now keeps track of what characters, and what % of characters, have completed Arcade Mode. The % completed shows on both the main menu and the Arcade character select screen.
New Mode: All Rush Mode is just like Boss Rush, but instead of being only bosses, it's every character on the character list
Mode Locking: Boss Rush and All Rush, as well as Survival mode, can all be locked behind Arcade Mode progress.
Mod Support (sorta?): To make it easier to update Ultimate without having to add in other code afterwards, Ultimate can run code from other Lua files at certain points. These files can do things like add new text to the menus, change character names in the select screens, add new options to the options menu, and more. It even comes with an example mod! They can also easily be reloaded through the options menu.
Im not getting the RemapSprite to work.....I even tried my trigger=1 just to see if it works, am I doing something wrong? I tried putting it in a seperate cns as wellWorks for me. [RemapPreset Super] in your example is meant to be separate CNS section (group) not state declaration. So you're not supposed to use it under [Statedef X] declaration, but alongside rest of groups like [Quotes], [Movement] etc. It also has to be in file that in char DEF is referenced as cns (Constants), not st (States).
Im not getting the RemapSprite to work.....I even tried my trigger=1 just to see if it works, am I doing something wrong? I tried putting it in a seperate cns as wellWorks for me. [RemapPreset Super] in your example is meant to be separate CNS section (group) not state declaration. So you're not supposed to use it under [Statedef X] declaration, but alongside rest of groups like [Quotes], [Movement] etc. It also has to be in file that in char DEF is referenced as cns (Constants), not st (States).
Seeing the Appveyor build is outdated by 2 months, how safe would it be to use updated files from the Githubs?
K4thos is working on a expanded arcade mode that allows branching routes (Based on win coditions), custom battles (Like having a 2vs1 boss single round battle), char unlock and display storyboards between battles (Cutscenes)
(Like having a 2vs1 boss single round battle)can't you already do that with the onlyme and rounds codes in the select?
K4thos is working on a expanded arcade mode that allows branching routes (Based on win coditions), custom battles (Like having a 2vs1 boss single round battle), char unlock and display storyboards between battles (Cutscenes)
I mean in a solo mode run having team up with a partner. So you can switch between single, simul turns and tag between matches.(Like having a 2vs1 boss single round battle)can't you already do that with the onlyme and rounds codes in the select?
everything else sounds super exciting
GLSL 1.50 is not supported. Supported versions are: 1.10, 1.20, 1.30What the...
I mean in a solo mode run having team up with a partner. So you can switch between single, simul turns and tag between matches.
GLSL 1.50 is not supported. Supported versions are: 1.10, 1.20, 1.30
What the...
How you can have GLSL 1.5 and not have 1.1?
That should not happen.
Do the same happens with already compiled binaries?
https://ci.appveyor.com/project/Windblade-GR01/ikemen-go/build/artifacts
if p1NumChars > 1 then
for i = 1, #start.t_p1Selected do
local single = false
if start.f_rivalsMatch('char_ref') and start.f_rivalsMatch('single', 1) then --team conversion assigned as rivals param
enemy_ref = main.t_selChars[start.t_p2Selected[1].ref + 1].rivals[matchNo].char_ref
single = true
elseif main.t_selChars[start.t_p1Selected[i].ref + 1].single == 1 then --team conversion assigned as character param
enemy_ref = start.t_p1Selected[i].ref
single = true
end
if single then
teamMode = start.p1TeamMode
numChars = p1NumChars
start.p1TeamMode = 0
p1NumChars = 1
setTeamMode(1, start.p1TeamMode, p1NumChars)
start.t_p1Selected = {}
start.t_p1Selected[1] = {ref = enemy_ref, pal = start.f_selectPal(enemy_ref)}
restoreTeam = true
break
end
end
end
if p2NumChars > 1 then
for i = 1, #start.t_p2Selected do
local single = false
if start.f_rivalsMatch('char_ref') and start.f_rivalsMatch('single', 1) then --team conversion assigned as rivals param
enemy_ref = main.t_selChars[start.t_p1Selected[1].ref + 1].rivals[matchNo].char_ref
single = true
elseif main.t_selChars[start.t_p2Selected[i].ref + 1].single == 1 then --team conversion assigned as character param
enemy_ref = start.t_p2Selected[i].ref
single = true
end
if single then
teamMode = start.p2TeamMode
numChars = p2NumChars
start.p2TeamMode = 0
p2NumChars = 1
setTeamMode(2, start.p2TeamMode, p2NumChars)
start.t_p2Selected = {}
start.t_p2Selected[1] = {ref = enemy_ref, pal = start.f_selectPal(enemy_ref)}
restoreTeam = true
break
end
end
end
main.t_charparam.single = true
Found the problem. I'm gonna fix it soon.
Thanks for reporting it.
Go-lang logs look bloated, but man they are helpfull.
Been working on a local 4 player mode in Ikemen go. So far everything has been working out OK except for the 4 player comp stomp (4player coop mode). (Screenpack is a basic one I edited to work with this feature)
Main menu
(http://www.xilv3r.nl/images/4pMode.png)
Sub menu (Ikemen feature)
(http://www.xilv3r.nl/images/4pModeSubmenu.png)
2v2 versus (Player 1 & 3 are team 1 and Player 2 & 4 are team 2)
Needed to add cursors for player 3 and 4 since most screenpacks only supply for 1 and 2
(http://www.xilv3r.nl/images/2v2.png)
Ofcourse seeing that this is mainly focussed on local, the options screen also needed modification so player 3 and 4 can edit their buttons.
So the options screen is modified to accomodate that:
Input Options screen
(http://www.xilv3r.nl/images/Inputsettingoptions.png)
Player 3 & 4 settings:
(http://www.xilv3r.nl/images/Inputsettings.png)
At first this feature was made with the comment K4thos made earlier to not modify the base lua files. so I tried extending the lua files (to keep the base lua files in tact) and overriding functions needed to get player 3 and 4 and also assigning them to the right teams. But coming from a Java background myself felt that the lua files needed some tune up themselves, making it more object orientated and having less global variables (to get a clearer view on where variables are being modified from). So if interested the extending version is available that keeps the base lua files in tact (a small modification is needed in main.lua to require an extend.lua file)
Workaround for online play:
So far this feature doesn't work with Ikemen's online functionality. But a workaround would be to use parsec (not sure if I am breaking TOS) your basicly streaming your PC to your friends and they can all play on Ikemen with their controller and such. Only problemen is finding which player is who :D.
Local 4 Player is a great idea. I was hoping someone would make that happen. Is this something that will be integrated into Ikemen Go in the Future, or a personal project? I would like to see Local 4 Player added to the main repo when you get everything working.
Does anything pop-up in Ikemen.txt?
failed to compile #version 150 core
//vertex position
in vec2 vert;
//pass through to fragTexCoord
in vec2 vertTexCoord;
//window res
uniform vec2 resolution;
//pass to frag
out vec2 fragTexCoord;
void main() {
// convert the rectangle from pixels to 0.0 to 1.0
vec2 zeroToOne = vert / resolution;
// convert from 0->1 to 0->2
vec2 zeroToTwo = zeroToOne * 2.0;
// convert from 0->2 to -1->+1 (clipspace)
vec2 clipSpace = zeroToTwo - 1.0;
fragTexCoord = vertTexCoord;
gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);
} : Vertex shader failed to compile with the following errors:
ERROR: 0:1: '' : Version number not supported by GL2
ERROR: 0:1: '' : syntax error #version
ERROR: compilation errors. No code generated.
And now that we are at 0.95.9, I dont know if a possible renaissance is coming worthy of shouting out of the window "1.0 is here!"keep in mind that once version v0.99 is available it doesn't mean the next one will be v1.0. It doesn't work like that.
Created an incredibly simple unlock system modifying luas that reads how many arcade clears you've made from stats.config.next version will support characters, stages and modes unlocking without need to edit scripts. Consider joining discord if you want to be up to date with engine developments.
I don't think main luas are supposed to be edited lol, but maybe that's what the mods folder is for.External modules loading is also planned for next major release. As for editing lua files directly - the only reason why it's not worth it now, is due to amount of changes to lua scripts made on each release. For example in order to support more than 2 players locally, without workarounds, I had to axe and refactor large portion of start.lua code. Porting changes made for earlier iteration of scripts would be a lot of work, so it's recommended only for fullgame makers that don't mind extra work (or don't care about future compatibility with new releases). Of course once the engine stabilize feature wise local changes will be more manageable (especially if implemented via external modules, so that they don't become overwritten just by downloading the new version)
Been working on a local 4 player mode in Ikemen go.This feature will be available in the next major release (your post inspired me to work on it actually)
Also for Arcade Mode, I know I suggested this back then in some way, but we should be able to put chars into teams akin to KOF so members of a team will be present in the same match.this is way to specific to be something available by default with the engine via select.def parameters, imo. But the upcoming story mode/arcade paths feature will make it (and similar ideas) possible without much effort (you will have to write code for it yourself though) https://github.com/K4thos/Ikemen_GO/wiki/wip
Does anything pop-up in Ikemen.txt?
Some of the errors regard "GL2" which implies something to do with OpenGL.
My computer is a bit old, so I don't think OpenGL stuff works all that well on it. Is there a way to turn off those capabilities on this version of IKEMEN like there was in other versions? (Because I dunno if there's a "config.ssz" file in this version)
UPDATE: These are the starting lines of my Ikemen.log:Quotefailed to compile #version 150 core
//vertex position
in vec2 vert;
//pass through to fragTexCoord
in vec2 vertTexCoord;
//window res
uniform vec2 resolution;
//pass to frag
out vec2 fragTexCoord;
void main() {
// convert the rectangle from pixels to 0.0 to 1.0
vec2 zeroToOne = vert / resolution;
// convert from 0->1 to 0->2
vec2 zeroToTwo = zeroToOne * 2.0;
// convert from 0->2 to -1->+1 (clipspace)
vec2 clipSpace = zeroToTwo - 1.0;
fragTexCoord = vertTexCoord;
gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);
} : Vertex shader failed to compile with the following errors:
ERROR: 0:1: '' : Version number not supported by GL2
ERROR: 0:1: '' : syntax error #version
ERROR: compilation errors. No code generated.
The PC I have is a hand-me-down I got from my dad a few years ago, and it's for the most part based in Vista. Am I f**ked if I want the most updated version of IKEMEN GO?
gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);Perhaps vec4 is a float so numbers need to have a decimal point.
Bejeeta that was a test build.
That code should not have been compiled.
Download the newest version again.
------------------------------------------------------------------
So EVILED about the problem you are having with the GPU.
The problem is that the max version of GLSL that it supports is 1.3
And Ikemen GO needs 1.5.
I'll look into switching to GLSL 1.3 without introducing bugs.
.\external\script\start.lua:1402: chars/Ryu/NormalRyu.def:
data/add004/a4b_main.zss
data/add004/a4b_main.zss:4065:
未定義の関数: fnc_varaddoo
stack traceback:
[G]: in function 'game'
.\external\script\start.lua:1402: in function 'f_selectSimple'
external/script/main.lua:2230: in function <external/script/main.lua:2208>
external/script/main.lua:2723: in function 'loop'
external/script/main.lua:2634: in function 'f_checkSubmenu'
external/script/main.lua:2705: in function 'loop'
external/script/main.lua:3352: in main chunk
[G]: ?
It breaks the general rhythm of the experience to be playing comfortable in my seat only to have to hoist myself upwards and lurch forward to my table and hit Esc every time I want to go to a different mode. I'm also still pricing and looking for an arcade cabinet frame to put all my pieces in to make my arcade cabinet. But, it would also be difficult doing this when I would have to open the cabinet door and hit the Esc key every time I wanted to go back in the menu.
It breaks the general rhythm of the experience to be playing comfortable in my seat only to have to hoist myself upwards and lurch forward to my table and hit Esc every time I want to go to a different mode. I'm also still pricing and looking for an arcade cabinet frame to put all my pieces in to make my arcade cabinet. But, it would also be difficult doing this when I would have to open the cabinet door and hit the Esc key every time I wanted to go back in the menu.
If you can't find out how to remap the keyboard escape key to a joystick button using simple external tools, i think you're gonna have a lot of trouble building and setting up an arcade cab (which I have done). Programs like JoyToKey/QJoyPad exist for these reasons, I suggest you really read throughly before building a cab head on. These are one of the first programs you should know about.
Also, I think its time for you to really upgrade, or alteast buy cheap used parts (as long as theyre not hard drives) and have it dedicated to an arcade cab. Bought an old i5 2500k, motherboard,ram, and 750ti gpu for only $200 all together for my dedicated arcade cab. TBH I think its time you upgrade, I mean these parts I'm listing are still pretty old anyway but cheap and support basic opengl and glsl versions used in ikemen go. At some points the devs need to move forwards.
"FontShaderVer": "130 core",To the config file.
I've been curious to ask but I wasn't sure if there was a simple way to set up specific matches for each character's arcade mode, I know that you can make it so it pools characters of a certain order so it can only pick from something like order=1,2, etc. Or the specific rival match where you can do something like 1={kfm[, 2={suavedude}. I just wanted to make it so that in arcade mode it only allows certain characters for specific encounters in groups, so someone like Ryu can only fight Ken/Kyo/Wolverine on a specific round. I don't necessarily want to make teams as someone mentioned on the previous page, I just wanted it so it narrows down each fight to only like 2-3 people possible per stage and then randomly select 1 of those few I add.
I was trying to see if adding multiple rivals with the same number ex. 1={ Ken},1={ Kyo},1={ KFM} but that just prioritizes whoever is further to the right with the value it seems.
OK this is a potentially game breaking idea or a major game changing idea. Has anyone played a coop tag arcade mode and went up against a team of 4 Ai characters well wouldn't it be nice that player 1 has characters 1 and 3 and player 2 has 2 and 4 and they could tag out between those characters I feel it'd add a more of strategic approach to certain modes especially if Boss Rush comes back.not sure if I understand. If you mean 2 human players using tag or simul mode against cpu than that's already implemented (team coop). Mode in which 2 players use tag against each other also already exists (team versus). If you mean more than 2 human players fighting each other in tag or simul than that will be available in next major release (versus coop mode)
Hi. I would like to be able to specify where the cursor goes after selecting a character in any of the team modes, would this be easy to implement?
rivals param will be removed in the next major version. This system will be used instead: https://github.com/K4thos/Ikemen_GO/wiki/wip
It allows to implement stuff you've requested (and what RagingRowen requested here (https://mugenguild.com/forum/msg.2484858), and pretty much whatever you can think of).
The GLSL requirement did not increase.
It has always been version 1.5.
I fell like something is wrong with your drivers.
Still, I made so you can select the GLSL version 1.3 adding this:Code:"FontShaderVer": "130 core",To the config file.
I've been curious to ask but I wasn't sure if there was a simple way to set up specific matches for each character's arcade mode, I know that you can make it so it pools characters of a certain order so it can only pick from something like order=1,2, etc. Or the specific rival match where you can do something like 1={kfm[, 2={suavedude}. I just wanted to make it so that in arcade mode it only allows certain characters for specific encounters in groups, so someone like Ryu can only fight Ken/Kyo/Wolverine on a specific round. I don't necessarily want to make teams as someone mentioned on the previous page, I just wanted it so it narrows down each fight to only like 2-3 people possible per stage and then randomly select 1 of those few I add.
I was trying to see if adding multiple rivals with the same number ex. 1={ Ken},1={ Kyo},1={ KFM} but that just prioritizes whoever is further to the right with the value it seems.
rivals param will be removed in the next major version. This system will be used instead: https://github.com/K4thos/Ikemen_GO/wiki/wip
It allows to implement stuff you've requested (and what RagingRowen requested here (https://mugenguild.com/forum/msg.2484858), and pretty much whatever you can think of).OK this is a potentially game breaking idea or a major game changing idea. Has anyone played a coop tag arcade mode and went up against a team of 4 Ai characters well wouldn't it be nice that player 1 has characters 1 and 3 and player 2 has 2 and 4 and they could tag out between those characters I feel it'd add a more of strategic approach to certain modes especially if Boss Rush comes back.not sure if I understand. If you mean 2 human players using tag or simul mode against cpu than that's already implemented (team coop). Mode in which 2 players use tag against each other also already exists (team versus). If you mean more than 2 human players fighting each other in tag or simul than that will be available in next major release (versus coop mode)
edit: also Boss Rush doesn't have to come back, it never went anywhere. See select.def boss character param description.
are you looking at the possibility of a waiting state as far as the picture and an active state when the character is active?Fauxcry, once again I don't understand what you're suggesting. And the clarification for the first request made it even more confusing to me.
Can portraits be swapped in tag mode?no. They are automatically swapped in tag (only if the tag code uses TagIn/TagOut sctrls), but there is no way to assign different sprite numbers for active and standby characters.
custom Arcade Paths (for e.g. with rival matches, Simul battles mixed alongside Single, hidden bosses, branching paths etc.)
Story Mode Arcs (selectable from main menu as part of Story Mode, e.g. cinematic stories where author decides exactly who the player fights as in each match, against who, with multiple storyboards displayed along the way)
Is that possible?yes. Read the "rounds" parameter description in select.def
You could probably do that yes. But I just wanna do something like this:while this is not possible without editing lua files (and I honestly don't see what's the point in this, are there even commercial games that works like this?) the next major build will have a new toggle in options titled "Team duplicates", which if disabled, prevents selecting the same character more than once to the same team and automatically moves cursor to the next available position (already selected slots are jump over by cursor)
(https://media.discordapp.net/attachments/694932367974072401/749127047158431765/ikemen000.png?width=628&height=471)
After you select Jotaro
(https://media.discordapp.net/attachments/694932367974072401/749127058868928562/ikemen001.png?width=628&height=471)
Your cursor goes back to 0,0 for the next selection.
There is a folder named mods in the external folder.It's a default directory for upcoming feature that will allow to load external Lua modules (scripts). Not used for anything yet.
What is it for?
Ok first post: Say you want to play co-op arcade or co-op survival with the tag feature except you can actually pick 4 characters between the two people playing. Player 1 has Ryu and Chun Li. Player 2 has Goku and Terry Bogard. Player 1 can !Tag! between Ryu and Chun Li via tag and Player 2 can do the same with Goku and Terry Bogard. The CPU Characters will have the same tag ability.I don't think it's a good idea. 2 tag teams controllable by different players, within a single team? Seems weird. Is there a game that works like this?
---[side note: if anybody remembers street fighter alpha 3 dramatic battle with this feature there will definitely be alot of those where your skill with the character will make a difference so is raises the strategic fun in matching up the right characters and the randomness of the cpu characters team cohesion. I don't know if its a rumor or not and haven't went through this thread in it's entirety to find out but if there is going to be an option in the coming future with a 4 player as in 4 xbox remotes one ikemen this tag feature would be a nice addition to whats already there.]SFA3 dramatic battle is pretty much normal mugen simul mode. Arcade co-op mode already works like that for 2 human players. And next version will allow to have more than 2 human players in a simul/tag coop team (each controllable by separate local player, not the way you've suggested)
interesting, so is this more than 2 human players stuff going to also be a thing on the network mode?no
I know this is an old post but I’m replying because I’m trying to get into Ikemen and this is the only thing stopping me.... the lack of screen pack options. I want to use Legacy but it hasn’t been ported. Id use the WarZone screenpack conversion but it only has 120 slots unless someone can show me to extend it to like 4-500Isn't that eve, winmugen?
You seem to be using the same old version if...Well dee2ever,go is now have a mp3 supportIf he compiled the newest exe, you are still using the old one with the same problems. You've been able to use 1.0 screen packs since vanilla Ikemen, same goes for plus. http://mugenguild.com/forum/topics/ikemen-table-contents-please-read-first-175520.0.html
I assume, you mean port as in drag/drop. It's not hard especially with http://mugenguild.com/forum/ikemen-general-discussion-and-help.427
if you refuse to do any work then nope. Local Cord isn't supported so any SP with one will crash in GO.
The exe is custom fork (Of ikemen go not plus) of mine. (The main difrence with the other is fntv2 support and bugfixes)
And the reason because some screenpack crashes is not localcoord (You could open the new mugen 1.1 pack but it will not display properly as show on the post above) it's the lack of support of mugen quirky way of handling them.
Ikemen go support chracters up to 1.1
The screenpack/lifebar support is were it lacks.
Sadly for now i'm not working on implementing support for these screenpacks without edit.
First I have to implement local coord support and fix the mp3 loading.
Sadly for now i'm not working on implementing support for these screenpacks without edit.I have finished localcoord support and fix the mp3 loading time ago.
First I have to implement localcoord support and fix the mp3 loading.
"GameWidth": 1280,
"GameHeight": 720,
logo.storyboard = INTRO.def ;Logo storyboard definition (optional)It does remove the intro but it reduces RAM usage a lot.
So any news on the next update?
https://discord.gg/vN6qUZ3
Animated portraits are ready for the next release.
We just need to get the next release ready and without any regression.
animation is declared via air file, so whatever is possible in air format should work: http://www.elecbyte.com/mugendocs-11b1/air.html
This is very good! Can we add offset, blend, scale and angle on them?
It's possible with select, versus and winner portraits?yes
And the final question, can we add various portraits in the same screen with different times? Thank you very much!I'm not sure what you meant here but the answer most likely is whatever air format allows you to do.
will haptic feedback be optional in the coming futrure?I'm not familiar with this technology (I assume it's not the same thing as rumble) but controller features depends on what's implemented in glfw (https://www.glfw.org/). For example we won't add ForceFeedback (https://mugenguild.com/forum/topics/forcefeedback-sctrl-170133.0.html)sctrl until glfw guys finish implementing it (https://github.com/glfw/glfw/issues/57) there. Once they support ps5 pad features we can think about it (although I wouldn't hold my breath considering how long it takes them to implement basic rumble support)
2. Will tournament mode be implemented?yes, no idea when tho
We need a section that has links to compatible screen packs.
I’m trying to make the move from 1.1 to Ikemen Go but I’m having trouble finding all options for what screenpacks exist for it... still don’t quite understand everything. Or can I use my regular Mugen screen packs? I’m trying to use Noz Warzone or Legacy. I saw a Warzone conversion but I saw it’s for an older Ikemen or will it work for Go too?
Also, been playing around with the tests releases. That link should be on the main page somewhere; I can't find it and didn't even know that existed until you posted it orochi_kyo. Also, I too think forum should be used instead of Discord.
And finally I convert my Blazblue screenpack to Ikemen Go. I really like the engine, works perfect with all the animations and lots of .png images. I use the animated portraits for select screen and works good too. The tittle screen it's much better than in mugen because the submenus. Now I start to work with the continuebg and it seems that works good. I really want to finish it to start playing, what a thrill!Pretty cool!!
And finally I convert my Blazblue screenpack to Ikemen Go. I really like the engine, works perfect with all the animations and lots of .png images. I use the animated portraits for select screen and works good too. The tittle screen it's much better than in mugen because the submenus. Now I start to work with the continuebg and it seems that works good. I really want to finish it to start playing, what a thrill!
(https://i.imgur.com/giYm5eD.png)
I wanna play with a lifebar made with Add004 but it's not showed... I remember that I see a video tutorial in this site to can made it. Somebody knows where is this video? If not, can someone help me to made it work? I see that there are a common1.cns.zss in the data folder that it's th same like the common1.cns that you edit for create the lifebars but if I delete the ikemen file then you can see the lifebars but too much big. Thank you very much.As a friendly advice, it would be better if you stopped using ADD004, most of its features are already possible by default in IKEMEN GO, and you wouldn't have to worry about compatibility, which can be a problem since Shiyo hasn't updated his add-on for a while and IKEGO is constantly being worked on.
I wanna play with a lifebar made with Add004 but it's not showed... I remember that I see a video tutorial in this site to can made it. Somebody knows where is this video? If not, can someone help me to made it work? I see that there are a common1.cns.zss in the data folder that it's th same like the common1.cns that you edit for create the lifebars but if I delete the ikemen file then you can see the lifebars but too much big. Thank you very much.As a friendly advice, it would be better if you stopped using ADD004, most of its features are already possible by default in IKEMEN GO, and you wouldn't have to worry about compatibility, which can be a problem since Shiyo hasn't updated his add-on for a while and IKEGO is constantly being worked on.
Anyway, I'm not sure if there is a tutorial video about add004 for IKEMEN, so I suppose you have to try to follow the steps from Shiyo's read-me.
the new add004 uses zss language,and old common1.cns versions do not work properly on ikemen so you might have to learn how zss language works if you wanna edit the lifebar.
I wonder if the partners waiting their turn in stage like the old KOFs can be done.Woah! is this an actual fullgame? looks sick!
I dreamed with this select screen for so many years... The people behind Ikemen Go are really Santas. Thank you so much!
(https://i.imgur.com/fc0VtDV.gif)
Almost forgot, it seems that individual resizes in cns don't show in select screen.
Reginukem said, 11 days ago
I wonder if the partners waiting their turn in stage like the old KOFs can be done.
I dreamed with this select screen for so many years... The people behind Ikemen Go are really Santas. Thank you so much!
Almost forgot, it seems that individual resizes in cns don't show in select screen.
Woah! is this an actual fullgame? looks sick!
Believe that is the thing that I wanna do and I see that lots of things that have Add004 are implemented in this new beta release in the actual state of Ikemen Go I can't create multi-layer animations for rounds, fight, ko, etc. For this reason I need to install my Add004 lifebar. I know the steps but for some reason the common1.cns it's not showed, for this reason I asked. I wanna start to test chars and more things, for this reason can someone help me? I have tried for hours to be able to do it but since this the forum no? Thank you very much!
(https://i.kym-cdn.com/photos/images/newsfeed/000/973/887/7e0.gif)
So here we go again.
Would It be a capable with ikemen's scope of coding to have the option to have a party system of a sorts. If you were to do survival would it be possible to have character after beating them to have a scene like a continue screen but with you or them asking to join your cause and if you are doing a tag or turns survival they'd join you. the next fight they'd have half health and they'd work from there. this is granted you were doing solo survival and not co-op.
1. What happened with animated portraits (group 0, char idle) ? Has this option been removed?
So Ikemen GO 0.96 "Hey it contains animated portraits." edition is online.
Hey quick question, has anyone here (besides me) tried to get IKEMEN GO running on a Raspberry Pi 4? (Or any Raspberry Pi at all for that matter?)
I've been trying to get the game to compile and run on one for quite a while to no avail (you can read my escapades over on the RetroPie forums: https://retropie.org.uk/forum/topic/28055/i-k-e-m-e-n-go-on-raspberry-pi-4 (https://retropie.org.uk/forum/topic/28055/i-k-e-m-e-n-go-on-raspberry-pi-4)), and I've already mentioned it once in the Discord for IKEMEN GO, but wanted to re-ask here since I imagine this thread is where most people go for updates/info on IKEMEN GO-related stuff. I know it's a rather niche-within-a-niche thing, but I'm curious (and mildly desperate) to see if anyone else has had any success.
So far Android port is on hold because issues with the sound driver.
For Ubuntu you need to use build_cmpt.sh
0.96.1 is not available yet, they are still working on it. However you can build it from source and see what they have added currently.
Hello greetings, could someone tell me how I can change the scale the size of the image of the stage portrait
It is still bad, it is not possible to look at the entire stage, only a small painting comes out
(https://i.postimg.cc/0NfzLsrN/select.png) (https://postimg.cc/mcPZHKYx)
It is still bad, it is not possible to look at the entire stage, only a small painting comes out
(https://i.postimg.cc/0NfzLsrN/select.png) (https://postimg.cc/mcPZHKYx)
this line of code : stage.portrait.scale = 1,1 << is resizing the existing image.
if you want to see the entire stage, you need to make your own image and save it into the stage .sff file, make sure its in group 9000 and index 1
example image below.
(https://i.postimg.cc/LRLt7W2r/ikemen000.gif)
then how is it?
stage.portrait.scale = 1,1Instead of this:
tage.portrait.scale = 1,1Note the "s" at the beginning.
How can I put screenpacks or lifebars on the ikemen go? or as it is recent there are not some?
it's because the character uses state 5600 which is what ikemen uses for tag. you'd have to edit their current 5600 to use something else
hi could you help me put screenpack in config.json i don't know how to change it i'm new
"Motif": "data/system.def",
"Motif": "data/my-cool-screenpack/system.def",
and one last question how do i add 8 turns to my ikemen go?
Can I possible to change the language setting?
I want to use “覇王丸” for display names.
Sometimes I just replacing the files to make my games run in Ikemen, but it always showed a black screen with error, and so i gave up to try.
i really don't know because i think Ikemen so hard to use.
Have ikemen problems with HD PNG or some kinda files?
are there some tutorials teaching how to make your games to be converted to ikemen in video?
There's a pretty nasty bug in IKEMEN v0.96. If any character uses a Projectile state control that has a negative (upward) starting Y velocity, the projectile never appears. Y velocities of 0 and positive (downward) velocities work just fine. I've tested this pretty consistently across multiple characters of mine.
I wanna remove the part stage: of the name of the stage. Where should i go and what should i do? Thank you very much!
stage.text = "Stage %i: %s"
stage.random.text = "Stage: Random"
stage.text = "%s"
stage.random.text = "Random Stage"
There's a pretty nasty bug in IKEMEN v0.96. If any character uses a Projectile state control that has a negative (upward) starting Y velocity, the projectile never appears. Y velocities of 0 and positive (downward) velocities work just fine. I've tested this pretty consistently across multiple characters of mine.
Could someone confirm if this is just me or if this is a legit bug?
projstagebound = 200
projedgebound = 200
projheightbound = -960, 8
I wanna remove the part stage: of the name of the stage. Where should i go and what should i do? Thank you very much!
You'll want to change these two lines in your system.def (or add them, if they're not present; they go in the [Select Info] definitions below params like stage.active.font):Code:stage.text = "Stage %i: %s"
stage.random.text = "Stage: Random"
%i and %s represent a stage's number and name respectively. I'm assuming you're just wanting the stage name by itself, so it would be changed to:Code:stage.text = "%s"
stage.random.text = "Random Stage"
(https://i.imgur.com/qwzieBI.png)
stage.text = "%s"
stage.random.text = "Random"
;Stage select
stage.pos = 7,237
stage.active.font = 3,3,1
stage.active2.font = 3,3,1
stage.done.font = 3,10,1
stage.text = "%s"
stage.random.text = "Stage: Random"
There's a pretty nasty bug in IKEMEN v0.96. If any character uses a Projectile state control that has a negative (upward) starting Y velocity, the projectile never appears. Y velocities of 0 and positive (downward) velocities work just fine. I've tested this pretty consistently across multiple characters of mine.
Could someone confirm if this is just me or if this is a legit bug?
[Info]
name = "The Pit 2"
author = "Taybear"
mugenversion = 1.0
[Camera]
startx = 0
starty = 0
boundleft = -585
boundright = 585
boundhigh = -150
boundlow = 480
verticalfollow = 1
tension = 80
floortension = 90
[PlayerInfo]
p1startx = -80
p1starty = 0
p1startz = 0
p1facing = 1
p2startx = 80
p2starty = 0
p2startz = 0
p2facing = -1
leftbound = -1000
rightbound = 1000
topbound = 0
botbound = 720
[Scaling]
topz = 0
botz = 50
topscale = 1
botscale = 1
[Bound]
screenleft = 35
screenright = 35
[StageInfo]
zoffset = 212
autoturn = 1
resetBG = 1
Mugen 1.1 | (http://network.mugenguild.com/bane84/chase/mugen000.png) |
IKEMEN GO | (http://network.mugenguild.com/bane84/chase/ikemen000.png) |
For now, it's maybe worth pointing that Taybear and I released a version of The Pit 2 that uses AttachedChar and integrates the fatality without any code char-wise.
Spoiler, click to toggle visibilty
Wanted to say I'm loving this progress of Ikemen GO will say pretty soon Mugen on the GO will be possible with the Steam Deck.
I would appreciate if someone could give me the link of an ikemen with about 600 o 800 characters(only the screempack,no chars). (Please do not say the (The_Best_Ikemen_GO_fWin_x64). I have it and it has color and definition problems.
I would appreciate if someone could give me the link of an ikemen with about 600 o 800 characters(only the screempack,no chars). (Please do not say the (The_Best_Ikemen_GO_fWin_x64). I have it and it has color and definition problems.
That's the screen pack I'm using (the 256 slot one)
I'm having issues with a few stages not sure if its Ikemen or the screen pack
Some stages, the camera is higher than the characters and you have to jump to see them
On another 1 (Capoeira Beach by LESSARD), the sprites are all messed up. If anyone can help me out, that'd be great
Thanks for clarifying the doubt SuperFromND? What? I talking at "Stagefit and systemfit" at Issues, not vrsion...
EgyLynx The link of version 0.97 is in the first post.
Spoiler, click to toggle visibilty
Ok, taken note of the bug. We will look into it.
We had been looking how Mugen does take into account stage fit and we are still searching how is exactly done.
So we had been messing with boundLow, I hope we did not break the stage with that.
Wanted to say I'm loving this progress of Ikemen GO will say pretty soon Mugen on the GO will be possible with the Steam Deck.
does ikemen go runs in 1280x720 in fullscreen without black borders?
does ikemen go runs in 1280x720 in fullscreen without black borders?
yeah it does, but you have to make a screenpack that supports that resolution. also, you should get the Discord App, and join the IKEMEN discord for easier access to update and any help you may need to explore the unique features
yeah it does, but you have to make a screenpack that supports that resolution. also, you should get the Discord App, and join the IKEMEN discord for easier access to update and any help you may need to explore the unique features
I am really loving all the features and how it's easier to make, everything very well explained with the lines similar to mugen.
A list of stages would be very useful to test the bugfix.Spoiler, click to toggle visibilty
I think this may be the case. I have a few stages that are broken. One I'm almost positive used to work in older Ikemen versions. But, the others are new so I don't know.
Would if help if I sent screen shots / stage names?
It's not every stage. I think I have about 2 or 3 that are busted. The problem, for me, is it keeps wanting to center the camera too high up for the stage.
You can also look at "system.base.def".Spoiler, click to toggle visibilty
Did you look at the new features? If you download a fresh copy of IKEMEN GO, open up the system.def, there's a ton of new features that say "IKEMEN FEATURE" that mugen does not have. It's very important you do that. You gotta look at the fight.def and system.def to import some new features, and also some new sprites. Look into the fight.sff and system.sff, there's new sprites like the "ratio mode numbers" that does not exist in mugen.
A list of stages would be very useful to test the bugfix.
A list of stages would be very useful to test the bugfix.I've just opened a GitHub entry with a busted stage by MMR.
How does stage transitions in this engine work? do I have to do something in the def file or the select file because I'm a little confused?https://github.com/K4thos/Ikemen_GO/wiki/Stage-features#info_roundxdef
How could i setup to put a stance animation 0 and a big portrait 9000,1 at the same time?AFAIK this was in Two4Teeze's branch, not yet fully implemented into the main.
i only need the code.
-I saw stage transition and for a second I thought that there would be a knock someone to another stage like DBFZ.Give it some time, we're not far from being able to do that.
does ikemen go runs in 1280x720 in fullscreen without black borders?
yeah it does, but you have to make a screenpack that supports that resolution. also, you should get the Discord App, and join the IKEMEN discord for easier access to update and any help you may need to explore the unique features
Does anyone have a link to the IKEMEN discord?
Spoiler, click to toggle visibilty
In order to fight, how to set the boss to appear solo when you're playing with 2 or 3 chars, i don't want the boss appearing repeated 3 times.
IKEMEN | (https://network.mugenguild.com/bane84/chase/ikemen001.png) |
MUGEN | (https://network.mugenguild.com/bane84/chase/mugen001.png) |
I'm running into another difference between the two engines. I have the game resolution set to 1920x1080 for both engines. Note the differences in the same resolution between the two versions:Spoiler, click to toggle visibilty
In MUGEN, the localcoord for everything is 320x240 but it's scaled up to the game resolution (the sides of the screen appear with black bars. I'm fine with this). In IKEMEN, everything is scaled both horizontally and vertically (there are no black bars on the sides). I prefer the way MUGEN does it because in IKEMEN the gameplay appears off due to scaling. Also of note, I'm using the same motif for both engines with little/no changes in any configurations. I want to have the full game behave exactly the same in both engines.
How can I properly configure IKEMEN to reproduce how MUGEN renders the game graphically?
I'm running into another difference between the two engines. I have the game resolution set to 1920x1080 for both engines. Note the differences in the same resolution between the two versions:Spoiler, click to toggle visibilty
In MUGEN, the localcoord for everything is 320x240 but it's scaled up to the game resolution (the sides of the screen appear with black bars. I'm fine with this). In IKEMEN, everything is scaled both horizontally and vertically (there are no black bars on the sides). I prefer the way MUGEN does it because in IKEMEN the gameplay appears off due to scaling. Also of note, I'm using the same motif for both engines with little/no changes in any configurations. I want to have the full game behave exactly the same in both engines.
How can I properly configure IKEMEN to reproduce how MUGEN renders the game graphically?
Wait... these 2 images do not have the same resolution.
The Mugen one is 1920x1440 and the Ikemen Go one is 1920x1080.
set the resolution to a 4:3 format, i use 1280x960 and it should look normalIf you do this you can't use a 16:9 screenpack - the sides of the select screen get cut off.
suggestions the could be an option for the music to still be playing in the background for the musicvictory if we just use a quick sound that would be a good option to have and boss rush mode having it's own rounds to win in the options.
Spoiler, click to toggle visibilty
Actually in the rounds to win would there be a way to set it in the select.def lets say we want to make an unlockable character that is randomly encountered through a playthrough and we want there to be a one round only on this specific character versus the usual two rounds.
Projectile parameters
Platform
TODO: ?
PlatformWidth
TODO: ?
PlatformHeight
TODO: ?
PlatformAngle
TODO: ?
PlatformFence
TODO: ?
ProjAngle
Specifies the angle to rotate the Projectile animation.
So, does it mean those parameters can be actually functional inside the engine's current build? If so, could you give a bit more info on what's required to proper implement it?Platforms aren't in the current stable build of IKEMEN GO (v0.97), but they should be available when 0.98 is released (which is probably why there's no documentation about it yet). I don't have an exact date on when that'll be released though.
Ah that's great, thanks for replying. And by the way, this is the only issue I've found when switching from Mugen, I've been amazed by how well Ikemen Go handles Mugen content (I can only imagine how painful it must have been, especially emulating the way Mugen handles buggy code). Not to mention all the new features which I've only just started to look at. Kudos and thanks for all your hard work.Spoiler, click to toggle visibilty
We still have not finished implementing Mugen's 1.1 stagefit.
So that's why it happens
I promise that I'll center on implement letterboxing soon.
Mugen | (https://network.mugenguild.com/bane84/chase/mugen002.png) |
Ikemen | (https://network.mugenguild.com/bane84/chase/ikemen002.png) |
For some reason, this stage's graphics were implemented by inserting the background elements as tiles piece by piece in a grid like fashion where each tile is in a specific part of the background, then the stage DEF file inserts them all at the same origin point. There's over 1000 tiles in all. Not sure why it was implemented this way.
Any ideas on how I could fix this in Ikemen?
(https://network.mugenguild.com/bane84/chase/ikemen002.png)
Any ideas on how I could fix this in Ikemen?
fixed in upcoming 0.98
fixed in upcoming 0.98
upcoming 0.98 ? hmm...that say at Ikemen_GO_v0.97.0 , are there newier version(s)? v0.97.1 or something??
Locacoord(s) need own Luad?, Today version is 0.98.1...
I try to put 1 in the scale and modify the size with localcoord but the char moves strange. Any ay to solve it?
My last question it's because I see that there are 2 different system files, the one that it's in the data folder or in the mugen1 folder and another that it's in the data folder too but it's named system.base, wich it' s better? I think the secon have more posibilities. Thanks in advance.
Please, I have a problem with the scale of portraits in the 0.98 version. To add portraits in the system I use animations in select, versus and winner screens ( p1.face.anim ), I try with spr and works well. The problem it's with characters that have different value of 1 in the size part of the .cns archive:
[Size]
xscale = 1 ;Horizontal scaling factor.
yscale = 1 ;Vertical scaling factor.
In this case, the scale of the character in the .cns file it's 0.3
I try to put 1 in the scale and modify the size with localcoord but the char moves strange. Any ay to solve it?
My last question it's because I see that there are 2 different system files, the one that it's in the data folder or in the mugen1 folder and another that it's in the data folder too but it's named system.base, wich it' s better? I think the secon have more posibilities. Thanks in advance.
Please, I have a problem with the scale of portraits in the 0.98 version. To add portraits in the system I use animations in select, versus and winner screens ( p1.face.anim ), I try with spr and works well. The problem it's with characters that have different value of 1 in the size part of the .cns archive:
[Size]
xscale = 1 ;Horizontal scaling factor.
yscale = 1 ;Vertical scaling factor.
In this case, the scale of the character in the .cns file it's 0.3
(https://i.imgur.com/brRGjsw.png)
I try to put 1 in the scale and modify the size with localcoord but the char moves strange. Any ay to solve it?
My last question it's because I see that there are 2 different system files, the one that it's in the data folder or in the mugen1 folder and another that it's in the data folder too but it's named system.base, wich it' s better? I think the secon have more posibilities. Thanks in advance.system.base.def does what it says in first few lines of that file (reference of default values and list of all available parameters). It can't be used as is. Other system.def files belong to different Elecbyte screenpacks distributed with engine (same case as in mugen).
Sorry, but youre almost answer it anyway...
EgyLynx, sorry for not responding but I have trouble understanding your questions. Consider writing in your native language and translating it to English with this site: https://translate.google.com/
Man this sync issue really annoys the hell out of me.
Does anyone here use the free sync/G sync crap ? maybe this is causing it.
Ill fiddle around with it some more and do a fresh install of the GPU drivers.
0.98.1 version:
p1.face2.anim = -1
p1.face2.spr =
p1.face2.offset = 0, 0
p1.face2.facing = 1
p1.face2.scale = 1.0, 1.0
p1.face2.window =
p2.face2.anim = -1
p2.face2.spr =
p2.face2.offset = 0, 0
p2.face2.facing = -1
p2.face2.scale = 1.0, 1.0
p2.face2.window =
refer to data/system.base.def
Hello, could anyone share with me the code lines that allows one to have Big Portraits
p1.face.spr = 9000,1
and
p1.face.anim = 0
Both work together.
Like for example the normal Big Port 9000, 1 is in its usual place on screen, but also have the sprite animation anim = 0 showing "infront" of it.
Definitely possible, I've seen it on YT if anyone wants me to link.
Its driving me nuts trying to figure this out. any help is appreciated
Cheers.
;-----------------------------------P1-----portraits
p1.face.num = 1 ;only one char appears
;----------------regular portrait
p1.face2.spr = 9000,1 ;default big portrait
p1.face2.offset = 0, 0 ;position variable by screenpacks
p1.face2.facing = 1 ;portraits face right
p1.face2.scale = 1.0, 1.0 ;portrait size
;p1.face2.window =
;---------------animated stance
p1.face.offset = 55, 210 ;Position to put stance anim
p1.face.scale = 1.0,1.0 ;anim size
p1.face.facing = 1 ;anim face right
p1.face.anim = 19000 ;default 1
p1.face.done.anim = 19001 ;set what anim do you want
p1.select.snd = 100,1 ;confirm sound
I use The Best Ikemen Go screenpack. So with that screenpack do I just replace the ikemen files with the newly released updated Ikemen and it’ll work fine?
I really appreciate your work. Ikemen is already far superior to mugen.
The only thing that bothers me is the lack of screenpacks made for Ikemen..... We seriously need more screenpacks for Ikemen (for YESTERDAY)
I know, I know "but you can use any Mugen screenpack in Ikemen!!"
Yep.... no
Ikemen comes with items that mugen doesn't have. It's not that simple.
This one here looks amazing, but it looks like it will never be released. :/
[youtube]https://www.youtube.com/watch?v=2imMFsYV1e0[/youtube]
Will release it before the end of the year. Just have to adapt it to 0.98.1+.
Just a question.
Does IKEMEN v0.98 have StageFit or something like that to fit lowres stages in 16:9?
Using PortraitScale in the .def of chars and all portraits looks fine now! Thank you very much.Spoiler, click to toggle visibilty
I try the 0.98 version and the only thing that don't work propertly are the title fonts. In the past versions looks well but now except the Exit font looks all together. In the submenus it's the same. I try to change the code in the system but not changes. I don't know if it's a engine problem or it's my fault in some point.Spoiler, click to toggle visibiltySpoiler, click to toggle visibilty
I can't see to use 2 or more portrait anims in select, versus and winner screens. I hope this function it's enabled in future versions. Thank you very much for all your work, I continue testing, see you.
Just a question.
Does IKEMEN v0.98 have StageFit or something like that to fit lowres stages in 16:9?
Not yet.Using PortraitScale in the .def of chars and all portraits looks fine now! Thank you very much.Spoiler, click to toggle visibilty
I try the 0.98 version and the only thing that don't work propertly are the title fonts. In the past versions looks well but now except the Exit font looks all together. In the submenus it's the same. I try to change the code in the system but not changes. I don't know if it's a engine problem or it's my fault in some point.Spoiler, click to toggle visibiltySpoiler, click to toggle visibilty
I can't see to use 2 or more portrait anims in select, versus and winner screens. I hope this function it's enabled in future versions. Thank you very much for all your work, I continue testing, see you.
Understood, I'll check.
The last updatings are awesome...yes, refer to screenpack distributed with engine and system.base.def listing all parameters. Option screen supports the same parameter names as main menu and pause menu (so in this case font parameters prefixed with "menu.item.")
How can change the option font? Is it possible?
yes, if you use tag system that takes advantage of tagin sctrl "leader" parameter (such as default tag distributed with engine or custom ones based on it). Simply copy [Lifebar] content into [Tag Lifebar] (only p1 and p2 parameters assigned)
is it possible put the lifebar for the players 1,2,3 at the same position in tag mode and when you change the character the lifebar shifts every energy for every char?
[Statedef 200]
...
[State 0]
type = Helper
trigger1 = AnimElem = 4
stateno = 6000
ownpal = 1
...
[Statedef 6000]
...
[State 0, PalFX]
type = PalFX
trigger1 = !time
time = -1
mul = r,g,b
[State 0]
type = Explod
trigger1 = !time
anim = 6000
ID = 6000
pos = 0,0
ownpal = 0
...
[State 0, DestroySelf]
type = DestroySelf
trigger1 = time > 0 && !numExplod
removeexplods = 1
[Statedef 200]
...
[State 0]
type = Helper
trigger1 = AnimElem = 4,=-1
stateno = 6000
pos = 0,0
ownpal = 1
...
[Statedef 6000]
...
[State 0, PalFX]
type = PalFX
trigger1 = !time
time = -1
mul = r,g,b
[State 47]
type = Explod
trigger1 = time = 1
anim = 6000
ID = 6000
pos = 0,0
ownpal = 0
...
[State 0, DestroySelf]
type = DestroySelf
trigger1 = time > 0 && !numExplod
removeexplods = 1
team1.text.anim = 810
;team1.text.font = 6,0,1
;team1.text.offset = 50,240 ;Offset of text
team1.text.scale = 1,1
team1.text.layerno = 2
team1.displaytime = 100 ;Time to show text
team1.showspeed = 8 ;Ikemen feature: text showing up speed (1 = instant)
team1.hidespeed = 4 ;Ikemen feature: text hiding speed (the larger value, the faster speed)
[Begin Action 810] ; hit animation
71,0,0,0,10,,
71,1,0,0,10,,
71,2,0,0,10,,
71,1,0,0,10,,
71,3,0,0,10,,
I did put the animation in the fight.def correctly.You did comment out "offset". That's the problem
I would like to know if this feature was removed, because it's not working to me.
I wanna replace the hit name by animations, is there any line incorrect here?Code:team1.text.anim = 810
;team1.text.font = 6,0,1
;team1.text.offset = 50,240 ;Offset of text
team1.text.scale = 1,1
team1.text.layerno = 2
team1.displaytime = 100 ;Time to show text
team1.showspeed = 8 ;Ikemen feature: text showing up speed (1 = instant)
team1.hidespeed = 4 ;Ikemen feature: text hiding speed (the larger value, the faster speed)
[Begin Action 810] ; hit animation
71,0,0,0,10,,
71,1,0,0,10,,
71,2,0,0,10,,
71,1,0,0,10,,
71,3,0,0,10,,
Surely i'm wrong with some code.
I would like to know if this feature was removed, because it's not working to me.
Is the repo accepting PR on adding features in sctrls?yes
Also a bug report.fixed, thanks
The above code works fine in mugen 1.1 but not in IKEMEN. The color of the explod is not changed when time = 0. I need to change it to the following in order to get it work. I guess it is a problem on the execution sequence?
I have some simple question?
1- How could i do the portraits appears on select, versus or winner screen in a sliding movement?
It causes an emotion impact and surprise.
2- How to do for who on the winner screen the character speaks a voice or phrase to celebrate the victory?
3- how to do on lifebar shows the match number or stage? Example: stage 3 or battle 3 or match 3.
;Winner's portrait , name and sounds
p1.offset = 400,-40
p1.spr = 9000,2
p1.facing = 1
p1.scale = 1,1
p1.window = 0,0, 1279,500
p1.name.offset = 40,570
p1.name.font = 3,3,1
p1.voice.snd = 800,0 ( You must add this sound number in every char and I.K.E.M.E.N will read it in a standardized way)
Your characters need to have this sound added in their SND.FILE to work.
;Win quote text
winquote.text = "Winner!" ;Default win quote text to show
winquote.offset = 40,615
winquote.spacing = 0, 0 ;Ikemen feature
winquote.font = 5,0,1
winquote.window = 38,521, 1241,708
winquote.textwrap = w ;Word wrap
winquote.delay = 2 ;Ikemen feature
winquote.time = 0 ;Ikemen feature
In the KOF definitive match mugen game, when you win on the winner screen, the fighter speaks a voice with a celebrating the victory.
I'm researching how this is possible in Mugen, since it is much more limited than I.K.E.M.E.N.
Wouldn't it be possible to add an snd.line for this feature?
Example:
p1.voice.snd = 800,0 ( You must add this sound number in every char and I.K.E.M.E.N will read it in a standardized way)
Your characters need to have this sound added in their SND.FILE to work.
p1.state =allowing you to choose state that character is forced into during those post game screens. Which is the same thing you suggest but more flexible and powerful (since you not only can trigger some sound but control what character does on screen from within cns/zss code)
p2.state =
p1.teammate.state =
p2.teammate.state =
team1.combophrase.font = 8,0,0
team1.combophrase.text = "Amazing"
team1.combophrase.spr = 200,0 ; if you prefer a sprite for that.
team1.combophrase.anim = 199 ; if you prefer an animation for that.
team1.combophrase.offset = 600,320
team1.combophrase.upto = 1-5 ; defines the numbers upto to combo phrase (Good, Great, Fantastic, Awesome, Marvelous...etc)
Example : 1 upto 5 the word Amazing will display, and 6 upto 9 the word fantastic will display it.
team1.combophrase.snd = 5,0 ;( sound speaking Amazing )
team1.combophrase.layerno = 2
team1.combophrase.scale = 1,1
;-------------------------------------------------------------------------
team1.combophrase.font = 8,0,0
team1.combophrase.text = "Fantastic!"
team1.combophrase.spr = 200,1 ; if you prefer a sprite for that.
team1.combophrase.anim = 299 ; if you prefer an animation for that.
team1.combophrase.offset = 600,320
team1.combophrase.snd = 5,1 ; ( sound speaking Fantastic )
team1.combophrase.layerno = 2
team1.combophrase.scale = 1,1
team1.combophrase.upto = 6-9 ; defines the numbers upto to combo phrase (Good, Great, Fantastic, Awesome, Marvelous...etc)
team1.combophrase.displaytime = 90
; Ikemen feature
[Action]
team1.pos = 30,277 ;Coords to show
team1.spacing = 0,9 ;Spacing
team1.start.x = -240 ;Starting x-coords
team1.bg.layerno = 2
team1.bg.offset = 75,0
team1.bg.anim = 400
team1.bg.scale = 1.0,1.0
team1.bg.spr =
team1.front.layerno = 2
team1.front.offset = 75,0
team1.front.scale = 1.0,1.0
team1.text.layerno = 2
team1.text.font = 1,0,1
team1.text.offset = 9,0 ;Offset of text
team1.text.scale = 1,1
team1.displaytime = 60 ;Time to show message
team1.showspeed = 2 ;Message showing up speed (1 = instant)
team1.hidespeed = 8 ;Message hiding speed (the larger value, the faster speed)
team2.pos = 1250,277 ;Coords to show
team2.spacing = 0,9 ;Spacing
team2.start.x = 1520 ;Starting x-coords
team2.bg.layerno = 2
team2.bg.offset = -75,0
team2.bg.anim = 400
team2.bg.scale = 1.0,1.0
team2.bg.spr =
team2.front.layerno = 2
team2.front.offset = -75,0
team2.front.scale = 1.0,1.0
team2.text.layerno = 2
team2.text.font = 1,0,-1
team2.text.offset = 9,0 ;Offset of text
team2.text.scale = 1,1
team2.displaytime = 60 ;Time to show message
team2.showspeed = 2 ;Message showing up speed (1 = instant)
team2.hidespeed = 8 ;Message hiding speed (the larger value, the faster speed)
[Begin Action 400]
400,0, 0,0, -1, ,AS80D128
1- How to do for put more time in the selection screen before the stage select, when I choose the P1, the P2 doesn't get to have time enough to do his pose when chosen and it skips to stage select abruptly.there is no time between character and displaying stage selection at all. It's not its own screen to have dedicated fade or transition times associated with it.
2 - In the member member order select looks like the timer is not being respected, probably I don't put the code in the right section.refer to data/mugen1/system.def, which has working example of it.
Is possible to organize a scheme to appears names when you make hits in lifebar in a standardized code for all characters automatically?
Example:
Hits
2-3 = good
4-6 = great
7-9 = fantastic
10-15 = amazing
16-100 = awesome
And using sprites,fonts or animations for these names, it would be marvelous, I hope you get to make it.
And sounds for each name, obviously added in the fight.snd.
COMBO VARIATIONS WITH EFFECT PHRASES!!again would be redundant since your idea doesn't bring anything new to the table that is not already covered by LifebarAction sctrl (which by default uses dedicated action.zss file, where you can code whatever you wish)
I'm not a coder, it's just a thought about how i could imagine these codes, do you think it's impossible?
it's because i would like to find a way to automatize this kinda feature.
Maybe the code could have the name as COMBOPHRASE OR HITPHRASE....any other.
Example:
if this is what i'm searching, how could i do that?https://github.com/K4thos/Ikemen_GO/wiki/Lifebar-features/#new_action
In tag mode when the team members die, their bodies stay on the floor during the rest of battle, how to remove their bodies to remain only the alive characters?by editing file responsible for tag, using standard cns/zss code (depending what tag system you're using)
In the tag zss. Add this to the -4Code:If !alive && stateno=5150{
Assertspecial{flag:invisible}
}
Is it possible to add sounds to actions of lifebar?
Example : When the name Good! appears on screen the narrator says Good!
I didn't find instructions to add these sounds yet... can you help me please?
Is it possible to add sounds to actions of lifebar?
Example : When the name Good! appears on screen the narrator says Good!
I didn't find instructions to add these sounds yet... can you help me please?
You can add the optional sound parameter (snd: group_no, sound_no) to any LifebarAction in the .zss and the corresponding sound in the lifebar snd file will be played, as described in the link below:
https://github.com/K4thos/Ikemen_GO/wiki/State-controllers#new_lifebaraction
It works fine for me at least. However I would like to be able to activate the actions based on damage dealt (or damage as a fraction of the opponents max life) rather than the combo count, any ideas on how to go about that? I just got into Ikemen the other day and I am feeling happy about finally moving all my old mugen stuff to a new and improved flexible engine.
1- How to do for put more time in the selection screen before the stage select, when I choose the P1, the P2 doesn't get to have time enough to do his pose when chosen and it skips to stage select abruptly.1. Is not skip at all, it was years at like this p1 is ready, stage select is active, that not SKIP p2 to seect own person. Ad if p2 select first at that person, p1 can still choose own...
You can edit action.zss that's what displays the lifebar action.
Someone know when we got "this" for low res stages?Spoiler, click to toggle visibilty
(Instead this):Spoiler, click to toggle visibilty
Its actually not a issue but rather a feature Mugen has.
Where it will make the appropriate screensize to match the stage in the event the stage was made for 4:3.
@Gacel: Hi!
Im having a issue with TargetBind codes not working. only the first Targetbind will work the others will be ignored.
Am I doing something wrong? is there a new way to do it? Its for a command air grab.
How to make P1.face2 use slide.speed and slide.dist ? thanks
P1.face.spr = 9000,3
P1.face.offset = 5,343 ;Position to put big portrait
P1.face.scale = 0.3125,0.3125
P1.face.facing = 1
P1.face.done.spr = 9000,3
P1.face.spacing = 0, -50
P1.member1.face.slide.speed = 8,0
P1.member1.face.slide.dist = 70,0
P1.face2.spr = 9000,1
P1.face2.offset = -14,4 ;Position to put big portrait
P1.face2.scale = 0.3125,0.3125
P1.face2.facing = 1
P1.face2.padding = 1
Where can the code be modified to make "P1.face2" in front of "P1.face", Note: do not modify 9000,1 or 9000,3 Super
Hey man I got a problem with something, I have a character called "SFV Alpha Ken"
I added him in the same slot as my main Ken when I try him it says this:
https://imgur.com/a/oygtdY8
I want to use him that badly but it keeps on saying that he has no shadow.
Hey, been trying to get Ikemen working on Mac and I'm now on the verge of throwing the Mac out the window cos I have no idea what I'm doing. I can't get it working at all. Can anyone help me? Thanks.
This versión support 4k?
This versión support 4k?Yes. I'm using it in 4K.
This versión support 4k?Yes. I'm using it in 4K.
The Wiki is pretty complete about Dialogues.
Just be sure to invoke them in intro/outro character states, and you should be fine.
https://github.com/K4thos/Ikemen_GO/wiki/State-controllers#dialogue
I was looking at the dialogue on the wiki and seeing how state machines work, I also got an example off the internet. I still can't seem to figure out how it works or if its possible to call dialogue if the character is in arcade mode and against an opponent. Is that even possible? If it is how would I go about doing so
How to add [Rank Info] for 0.98.2 ? THANKS!!!!!
in the Action.zss
is possible add more action names for combos after:
lifebarAction{spr: const(MsgCombo25), 0} # gdlk combo
If you have more names for 30,40 or 50 combos as : super,ultimate,awesome
i have just found only 6 ways of combo.
how to add more lines?
if condition_here {With "condition_here" begin a trigger and "sprite_here" begin any sprite... like "9000, 0" or something else.
lifebarAction{spr: = sprite_here}
}
...Will the engine feature SDL_Mixer X? It can support more than .mp3 files! Such as SNES .spc, Genesis .vgm, etc.No plans for it for now.
https://github.com/WohlSoft/SDL-Mixer-X
Hey man I got a problem with something, I have a character called "SFV Alpha Ken"
I added him in the same slot as my main Ken when I try him it says this:
https://imgur.com/a/oygtdY8
I want to use him that badly but it keeps on saying that he has no shadow.
There is a error in the CNS file at line 5130.
It would be posible for you to post the file?Hey, been trying to get Ikemen working on Mac and I'm now on the verge of throwing the Mac out the window cos I have no idea what I'm doing. I can't get it working at all. Can anyone help me? Thanks.
What part of the setup you are stuck at?
So... I tried Ikemen GO on Linux, as in the native Linux executable, and all audio is pitched down. Any reason as to why that might be?
So... I tried Ikemen GO on Linux, as in the native Linux executable, and all audio is pitched down. Any reason as to why that might be?
Oh? Also it? Idk... I try self get my midis wich work mugen and Ikemen go there just at silence, then these strange named ones.. a nd?? Strange...
Is that BUG?
So... I tried Ikemen GO on Linux, as in the native Linux executable, and all audio is pitched down. Any reason as to why that might be?
Well... that's weird.Uh sure, I can't really get a video right now (Linux isn't my main OS) but it happened on both Ubuntu and Pop OS. I'm on Nobara Project right now (essentially just Fedora) so idk if that's still the case. I'll see if I can capture a video soon and either edit this post with the link or send you a PM.
Can you give more info about your OS? (Linux distribution and version)
Also if posible a video showcasing the bug. (Optional)
Is it true that IKEMEN engine damages the PC RAM (Random Access Memory)?
Why did people say that?
So I tried Ikemen GO for the first time on Linux Mint and tried to convert my current Legacy screenpack by Noz everything works fine except one or two things. When I go to watch mode I noticed that when I try to select Single, Smil, or turns the selection doesn't blink/flicker when I select the selected mode when compared to Mugen 1.1b. Second would be that after a character wins there Win screen doesn't show up it just automatically returns to the character select screen. Finally I use an Xbox One controller and it doesn't work when I try to map it in game on Linux but if I use the windows version of Ikemen go through the Wine application the Xbox Controller works analog and everything with it.I see.
Will you guys be adding system and stage fit in the future?
Can Someone tell me how to use Ikemen Dialogue function? please.
Really like how IKEMEN work better than MUGEN.
But, I'm still waiting for stagefit add on it for the next updates.
It's interesting that people would request stagefit, because the first thing I did when I got Mugen 1.1 was disable that.
suggestions the could be an option for the music to still be playing in the background for the musicvictory if we just use a quick sound that would be a good option to have and boss rush mode having it's own rounds to win in the options.
OK, it should be easy to implement.Spoiler, click to toggle visibilty
We still have not finished implementing Mugen's 1.1 stagefit.
So that's why it happens
I promise that I'll center on implement letterboxing soon.
It's interesting that people would request stagefit, because the first thing I did when I got Mugen 1.1 was disable that.
Really like how IKEMEN work better than MUGEN.
But, I'm still waiting for stagefit add on it for the next updates.
Yea, this. Was gonna switch all my assets over to Ikemen for good but the lack of stagefit/systemfit is a deal breaker so holding off until then.
I need help with a code I'm editing a screenpack I made a while ago but I don't remember the code to customize the location of each smallportrait in the selectscreen
Thanks but a friend already helped me now I'll be able to finish editing my ScreenpackI need help with a code I'm editing a screenpack I made a while ago but I don't remember the code to customize the location of each smallportrait in the selectscreen
At system.def ;
Character select definition
[Select Info] and there down and maybe that you ask?