How to FKiss ... by Moni-chan Hello to all. This is my way of doing FKISS animation. I will tell you now that this is only FKiss, not Fkiss2 or 3. Those will come in their own file once I figure them out. I do not promise you that these ways are the most concise, but they are as simple as I could ever make them. This is the non-fancy version; that is, it was written strictly in Notepad. There is no color coding, bold letters for headings and titles, etc. That is the other version, which should be available now or soon. This is really the very most basic Fkiss outline, and it does not contain many of the commands. Probably most of Fkiss, but not really including much of Fkiss2 or 3. The table of contents is shown below. More will be added with time!! I hope that this is clear, I have done it all by examples. I do teach in real life, but if there are any ambiguities, suggestions, improvements, feel free to tell me. If you want more FKiss examples to be added, just e-mail me at dodgeli@aicom.com. There is a kiss set called How to FKiss on the Big Kiss Page, but it is slightly hard to understand. It is very good, however, it took me quite a while to understand everything. *** Table of Contents: I A Basic Sample Code II The Basic Instructions III Blinking ... IV Moving accessories... V Change something by clicking something ... closet appear/disappear hair/lip/eye color change VI Something different in each set (set1: blue eyes; set2: green eyes; etc.) VI A sample code with everything VII Endnotes *** The basic instructions FKISS v0.20 General Specifications is a good thing to read for very exact details. The FKiss part always starts with ;@ Eventhandler() ;@ begin() //This is when the file is opened and the cel table is seen. The doll is partially blocked by the cel table ** Fkiss stuff ** ;@ initialize() //This is when you've clicked the OK button on the cel table and you now are able to view the whole entire doll and clothes. ** More Fkiss stuff ** ;@map() FORMAT: ;@map("cel-name") or ;@map(item number) I.E.: ;@map("hair.cel") or ;@map(#128) //as in cel #128 USES: to make the specified cel appear ;@unmap() FORMAT: ;@unmap("cel-name") or ;@unmap(item number) I.E.: ;@unmap("hair.cel") or ;@unmap(#128) USES: to make the specified cel disappear ;@altmap() FORMAT: ;@altmap("cel-name") or ;@altmap(item number) I.E.: ;@altmap("hair.cel") or ;@altmap(#128) USES: to make the specified cel disappear or reappear (whatever the opposite) ;@press() FORMAT: ;@press("cel-name") or ;@press(item number) I.E.: ;@press("hair.cel") or ;@press(#128) USES: literally: when you press cel-name something has to come after it, because something has to happen when you press the cel ;@timer() FORMAT: ;@timer(number, time) I.E.: ;@timer(1,2000) USES: waits 'time' milliseconds before calling alarm(number) or: waits 2000 milliseconds before calling alarm(1) calling alarm(1) means going directly to alarm(1) ;@alarm() FORMAT: ;@alarm(number) I.E.: ;@alarm(1) USES: something will happen here (map,unmap,altmap,moveto,etc) ;@timer(number,time) will call alarm(number) write your code here and it will happen once this alarm is reached. *** Blinking Let's say that the closed.cel goes right over the normal doll's eyes. //Comments are written like this ;@ EventHandler() ; ;@ begin() ; ;@ unmap("closed.cel") //You don't want the doll's eyes closed at the start ;@ timer(1, 2000) //It will wait 2 sec (2000ms) until it goes to alarm(1) ; ;@ initialize() ;@ alarm(1) //Starts after 2 sec (2000 ms) ;@ map("closed.cel") //The eyes close ;@ timer(2,500) //Eyes are closed for 0.5 sec before alarm(2) is summoned ;@ alarm(2) //Starts 0.5 sec after eyes close ;@ unmap("closed.cel") //Eyes open again ;@ timer(1,2000) //Will go back to alarm(1) after 2 sec i.e. eyes will close again in 2 sec. That wasn't so hard was it? If you want the eyes to half close and then close fully after that, just write your code like below ;@ EventHandler() ; ;@ begin() ; ;@ unmap("closed.cel") ;@ timer(1, 2000) ; ;@ initialize() ;@ alarm(1) ;@ map("half-closed.cel") //Eyes half close ;@ timer(2,50) ;@ alarm(2) ;@ unmap("half-closed.cel") //half-closed.cel is removed, closed.cel comes in ;@ map("closed.cel") //Eyes close fully ;@ timer(3,200) ;@ alarm(3) ;@ unmap("closed.cel") //Eyes reopen ;@ timer(1,2000) *** Moving Accessories This is done in exactly the same way as the Blinking. *** Change something by clicking something ... ** Closet appear/disappear To make a closet appear and disappear by clicking a certain place uses the functions ;@ altmap and ;@ press. Let's say you want the closet to disappear when you click either the name of the doll or the doll itself, and then when you click either one again, the closet(s) will reappear. ;@ EventHandler() ... ;@ initialize() ;@ press("name-of-doll.cel") //Click the name on the cell ;@ altmap("closet1.cel") //The closet on the left ;@ altmap("closet2.cel") //The closet on the right ;@ press("doll.cel") //Click the doll ;@ altmap("closet1.cel") //The closet on the left ;@ altmap("closet2.cel") //The closet on the right ** hair/lip/eye color change This part uses the functions ;@ press and ;@ unmap and ;@ map. Let's say you want the hair to change by clicking on the hairstyle itself. Suppose you have 3 hairstyles. Hair1: red Hair2: black Hair3: browncurly ;@ EventHandler() ... ;@ initialize() ;@ press("hair1.cel") //Press the first hair ;@ unmap("hair1.cel") ;@ map("hair2.cel") ;@ press("hair2.cel") ;@ unmap("hair2.cel") ;@ map("hair3.cel") ;@ press("hair3.cel") ;@ unmap("hair3.cel") ;@ map("hair1.cel") This is fine in most cases. However, it poses a problem. If you have hair1 in set1 and hair2 in set2, then when you press hair1, the hair2 will not change to hair1!!! Most sets do not have different hair types in each set, but it is possible to do (it is explained in the next section) You can solve this problem by doing this: ;@ EventHandler() ... ;@ initialize() ;@ press("hair1.cel") //Press the first hair ;@ unmap("hair1.cel") //Whenever you press hair1, all the ;@ unmap("hair2.cel") //hair types will vanish and then ;@ unmap("hair3.cel") //hair2 will appear. The problem ;@ map("hair2.cel") //is solved! The rest is done in the same fashion. *** Something different in each set Ever noticed that in some sets, there will be red hair in the first set, brown hair in the second set, etc, and when you change the hair in the set2 from brown to curly and you come back to set2 after a while the hair stays the same! Normally, what happens is that when you return, the hair changes back again to curly! It's very annoying. So here's the code if you want to do something about it. ;@EventHandler() ; ;@begin() ;@set(0) ;@ unmap("hair1.cel") //Unmaps all the hair types and hair1 ;@ unmap("hair2.cel") //reappears. ;@ unmap("hair3.cel") ;@ map("hair1.cel") ;@set(1) ;@ unmap("hair1.cel") //Unmaps all the hair types and hair2 ;@ unmap("hair2.cel") //reappears. ;@ unmap("hair3.cel") ;@ map("hair2.cel") ; ;@initialize() You should do this for all nine sets. Now you can have a hairstyle stay the same in a certain set. You won't go back and then wonder what hairstyle you had originally had with the dress, because the hairstyle won't change at all!! This can also be done with eye-shadow, eye color, lip color, etc. *** A sample code This code is taken from my Cancellina doll with just about as much FKiss as you might want in a simple doll. Not all of the cnf file is here, just the parts I want. WHAT HAPPENS IN THE DOLL: - she blinks - click on a color box: eyeshadow changes color - click on a diff color box: lip changes color - click on a diff color box: eye changes color - click on a hair type box: hair changes type - click on the hair: hair changes color (stays same type) Cancy.cel: the cel that states: "Cancellina by Monichan" clicking it will make the wall disappear wall.cel: the purple color that covers up the clothes hairtag1-2: the boxes under "hair" that changes the hair type lip1-2: the boxes of color under "lips" that changes lip color shad1-2: the boxes of color under "eyeshadow" that changes eyeshadow color eyes1-2: the boxes of color under "eyes" that changes eye color hair1-2: hair1 is short hair, 1a is short brown, 1b is short red, etc. e1-2: the different eyes l1-2: the different lips sh1-2: the different eye-shadows. closed: What her eye looks like when it is closed. ; ** Cel entries ** ; #156.100 cancy.cel *0 :0 1 2 3 4 5 6 7 8 9 #157.100 wall.cel *0 :0 1 2 3 4 5 6 7 8 9 #2.100 hairtag1.cel *0 :0 1 2 3 4 5 6 7 8 9 #3.100 hairtag2.cel *0 :0 1 2 3 4 5 6 7 8 9 #8.100 lip1.cel *0 :0 1 2 3 4 5 6 7 8 9 #9.100 lip2.cel *0 :0 1 2 3 4 5 6 7 8 9 #15.100 eye1.cel *0 :0 1 2 3 4 5 6 7 8 9 #16.100 eye2.cel *0 :0 1 2 3 4 5 6 7 8 9 #22.100 shad1.cel *0 :0 1 2 3 4 5 6 7 8 9 #23.100 shad2.cel *0 :0 1 2 3 4 5 6 7 8 9 #55.100 hair2a.cel *0 :0 1 2 3 4 5 6 7 8 9 #56.100 hair2b.cel *0 :0 1 2 3 4 5 6 7 8 9 #57.100 hair2c.cel *0 :0 1 2 3 4 5 6 7 8 9 #58.100 hair1a.cel *0 :0 1 2 3 4 5 6 7 8 9 #59.100 hair1b.cel *0 :0 1 2 3 4 5 6 7 8 9 #60.100 hair1c.cel *0 :0 1 2 3 4 5 6 7 8 9 #27.100 l1.cel *0 :0 1 2 3 4 5 6 7 8 9 #28.100 l2.cel *0 :0 1 2 3 4 5 6 7 8 9 #200.100 closed.cel *0 :0 1 2 3 4 5 6 7 8 9 #33.100 e1.cel *0 :0 1 2 3 4 5 6 7 8 9 #34.100 e2.cel *0 :0 1 2 3 4 5 6 7 8 9 #38.100 sh1.cel *0 :0 1 2 3 4 5 6 7 8 9 #39.100 sh2.cel *0 :0 1 2 3 4 5 6 7 8 9 #0.100 doll.cel *0 :0 1 2 3 4 5 6 7 8 9 ; ** FKiSS stuff ** ; ;@EventHandler() ; ;@begin() ;@set(0) ;@ unmap("l1.cel") ;@ unmap("e1.cel") ;@ unmap("sh1.cel") ;@ unmap("closed.cel") ;@ unmap("hair1b.cel") ;@ unmap("hair1c.cel") ;@ unmap("hair2a.cel") ;@ unmap("hair2b.cel") ;@ unmap("hair2c.cel") ;@ map("l2.cel") ;@ map("e2.cel") ;@ map("sh2.cel") ;@ map("hair1a.cel") ;@set(1) ;@ unmap("l2.cel") ;@ unmap("e2.cel") ;@ unmap("sh2.cel") ;@ unmap("closed.cel") ;@ unmap("hair1a.cel") ;@ unmap("hair1b.cel") ;@ unmap("hair2c.cel") ;@ unmap("hair2b.cel") ;@ unmap("hair2c.cel") ;@ map("l1.cel") ;@ map("e1.cel") ;@ map("sh1.cel") ;@ map("hair2a.cel") ; ;@initialize() ;@press("lip1.cel") ;@ unmap("l1.cel") ;@ unmap("l2.cel") ;@ map("l1.cel") ;@press("eye1.cel") ;@ unmap("e1.cel") ;@ unmap("e2.cel") ;@ map("e1.cel") ;@press("shad1.cel") ;@ unmap("sh1.cel") ;@ unmap("sh2.cel") ;@ map("sh1.cel") ;@press("hair1a.cel") ;@ unmap("hair1a.cel") ;@ map("hair1b.cel") ;@press("hair1b.cel") ;@ unmap("hair1b.cel") ;@ map("hair1c.cel") ;@press("hair1c.cel") ;@ unmap("hair1c.cel") ;@ map("hair1a.cel") ;@press("hairtag1.cel") ;@ unmap("hair1a.cel") ;@ unmap("hair1b.cel") ;@ unmap("hair1c.cel") ;@ unmap("hair2a.cel") ;@ unmap("hair2b.cel") ;@ unmap("hair2c.cel") ;@ map("hair1a.cel") ;@press("hairtag2.cel") ;@ unmap("hair1a.cel") ;@ unmap("hair1b.cel") ;@ unmap("hair1c.cel") ;@ unmap("hair2a.cel") ;@ unmap("hair2b.cel") ;@ unmap("hair2c.cel") ;@ map("hair2a.cel") ;@press("cancy.cel") ;@ altmap("wall.cel") ** Object coordinates come after**