http://www.milovana.com/nyx/
Also, visit another topic: http://www.milovana.com/forum/viewtopic ... 5&start=15
But I warn you - there are a few errors in function syntax there - those functions won't work.
In this topic I’ll talk about some coding tricks that may make your tease much more complicated and interesting. I don’t think there’ll be much info for programmers, I think you’ll see this opportunities yourself. For programmers a quick tip: you can create a lot if you see pages (set and unset ones) as binary data. I mean a set page is 1, or "TRUE", and unset page is 0 or "FALSE". range command provides a very good ability to acess the pages based on the logic of set and unset pages.
But for the rest of you – we shall start.
The thing is, that nyx lacks some functionality now – the author just don’t have time to update it as I see it. That’s he’s right and time, but we want to make interesting teases, right? We have to make pretty complicated pieces of code to do very basic things, but that’s how life is. And I doubt everyone who wants to do something cool just can see how to do it with the features provided.
First of all, I’ll describe some functions that we will work with. The better you understand them, the easyer it will be for you to understand the rest. The ideal result of this topic is that you won’t just copy my code and tweak it a little, but that you’ll be able to make something yourself, because you just understand the features and how they work.
Basic page in nyx
The nyx tease is basically all about script. It consist's of pages, which are the blocks of your tease. I won't describe it too much, though, that's the basic look of a page:
Code: Select all
<page_name>#page(<parameter_1>,<parameter_2>,<parameter_3>);Code: Select all
page1#page('', //this is for text (it should be placed between '' signs, text formatting allowed)pic("*.jpg") //this is for picture);note that picture name is *.jpg? Well, obviously all our pictures in jpg format, so no explaining on this part. * symbol is basically means, that ANYTHING can be placed instead it. If we leave it like this pic("*.jpg") then on this page will be shown a random picture from ALL of the pictures we uploaded.
But there's more to it. Say, we want to show random picture, but we don't want to show girls pussy yet. We want to show a picture from a certain set (where she's still dressed). How do we do it? Easy! First of all, rename your pictures, so all pictures you desire to choose from will have similar mask (and this mask won't be shown anywhere else. For example:
dressed01.jpg
dressed02.jpg
dressed03.jpg
dressed04.jpg
dressed05.jpg
Now for picture operand use this: pic("dressed*.jpg")
That's it! The point is that we tell our script: the picture name MUST start with "dressed" word. But then we place * sign, telling it that the rest part of a name may be random. If you have a file named "dressed3742385dksgkselk_dkhgf342.jpg" - it will also have a chance to pop up.
Other variants:
pic("*dressed.jpg") //must end with dressed
pic("*dressed*.jpg") //must contain dressed in the middle
pic("Ann*dressed*.jpg") //must start with "Ann" and contain "dressed" in the middle.
And anything else you want. This way we may make a tease more random, but at the same time we won't show the sexiest pictures in the very start.
set() and unset()
this funcrions will be used by us a lot in combination with range(). The basic idea is, that set() marks target page(es) as if we already viewed them, even if we didn't. The unset() does the opposite - it marks the pages we already viewed as if we didn't.
What's the point, you ask? The trick is in range() command - it can choose only pages we didn't visit. Normally, it can't choose one and the same page 2 times. But with set() and unset() we can do it. We can view a page several times, or we can exclude certain variants from our randomizer. Say, if you failed the task, we exclude 1 orgasm variant from the list.
The syntax is the same for both of them. Note, that this functions have their own parameters - page names. They are placed inside the breakets, and divided by ",". They can have as many parameters as you want, so 1 set() function can set several pages at a time.
set(1#)
unset(2#)
set(1#, 2#, 3#)
unset(1#, 2#, 3#)
All constraints apply only to range() function. Direct link will work anyway.
Note, that all constraints must be laib BEFORE the page may be shown, that meens BEFORE range() command runs. It's a good idea to make a special page in the very beginning of the tease with no text or picture, delay 0 sec, and all constraints for the whole tease in it.
BUG: Set() and Unset() stack, so if you set the page 2 times, and then unset it 1 time - it still will be set. So is the other way around. Therefore, you should refrain from using those whenever possible, and stick to must() and mustnot(). The tease that can set and unset a single page multiple times will NOT work properly, so try not to count on that. I'v made a couple of those before I realized it, and they are unfixable now (though they still pretty much work, but can freeze from time to time due to the target page remaining set when it shouldn't. Don't make this mistake, and the best of luck to you!
must() and mustnot()
This are very usefull functions too. They are needed for exactly the same thing as set() and unset(), but depending on the situation, you'll choose which is better. This functions work with range() command.
The idea of must() is that a certain page MUST be set (or already viewed) in order for another page to be shown. mustnot() works the opposite way.
This functions must have at least 2 operands. First operand is the page we set constraints on. The following operands are the pages that must be set before our page can be viewed.
must(2#,1#) //page 1 must be set in order for page 2 to be chosen
must(3#,2#,1#) // pages 1 and 2 must be set in order for page 3 to be chosen.
All constraints apply only to range() function. Direct link will work anyway.
Function Placement
This functions may be used inside a page as it's operands (in that case only if we visit this page they will be executed) or in the very beginning of a script right before the start# page.
Code: Select all
unset(1#); // note that as this functions are outside any page ";" sign MUST be placed after themset(2#); start#page('',pic("*.jpg"),set(1#) //this function is an operand of a page, and there's no more operands after it = no ","); page1#page('',unset(2#), //There are another operand after the function - you must place ","pic("*.jpg")); page2#page('',pic("*.jpg"));The functions must be executed BEFORE the pages you wish to influence can be shown. That means that you should place them BEFORE range(). And you should keep a track on them.
Now, the bad news. First of all, you'll have to place them manually in a script view. Second, you'll have to place them when your tease is fully done - all texts, buttons, timers and pictureas are done.
If any changes made in Visual mode it'll remove everything before "start#" page.
So you must write in a notepad all relations you'v made and double-check everything before publishing a tease.
ALSO pages that contain this functions will not be shown in visual mode, giving you the error "Page could not be parsed" - but note, that they will still work ok in preview and in actual final tease.
A secret page
That's a page that will be processed, all functions it contains will be processed, this page will be set as if it's viewed, but it will never actually be shown.
Doing it is simple - create a page with no text and no picture (or you may write some notes just for yourself). Than make a delay with 0 (zero) seconds in it that will link whereever you need. Voila. The page will actually be there, but it will change before your PC will draw it on your screen.
Why it's needed? Different things. For example you have a page with different custom buttons - but you want to link them to some range. What will you do? range doesn't work with custum buttons for some reason. You can link each of them to some invisible page, that will actually link to your range. Or for example to get rid of this "page could not be parsed" thing. You can use all your constraints on some invisible page, and all normal pages will still be visible in visual editor and you can change them as much as you want.
goto() - A secret page #2
Another way to make a page that WILL be processed but will NOT be displayed, is by using goto(page#) function. This is a simple redirect function that, after processing the page, will open a new page, that we want.
range()
This is our randomizer. The thing we will be working a lot with in this topic. That's a great feature to make your teases less linear, and as you will see soon, you can make pretty cool stuff using it.
First of all, range() function is used instead a page name in all buttons and timers. That's the place to use it.
You will need a set of number pages. Yes, the page name should be numbers only, placed in sequence. It may be from 1 to 10, or from 345 to 375 - doesnt matter. What's important is that the name of a page is numeric, and that you have some sequence without empty spaces. You can't make it like 1 2 3 4 7 8 9 - because 4 and 5 are missing. Though using functions above you may make it so certain pages (even in the middle of sequence) can't be picked by randomizer.
the basic syntax:
range(1,5,'page') - this will pick a random page from pages 1 2 3 4 5.
Let's see how it's used. We'll describe it on basic "Continue" button, but as i said it can be placed in all buttons and timers.
The basic continue button looks like this: go(page1#)
now instead of page name, we use range: go(range(1,5,'page'))
Note, that there's no "#" sign. And actually that's one problem with range command. It won't be deleted if you edit something in visual mode, as other functions. But it'll be slightly ruined. The editor will place "#" after it, making our line look like this: go(range(1,5,'page')#)
This way it won't work. If you don't view the page containing range() in visual - all will be ok. It will ruin it only if you view a page. So you can just remember it and avoid viewing it. If it's ruined, simply go to script view and delete "#"
range() placement and a trick over it.
Normally range() can be used with delays, goto() function and "Continue" button and that's it. But if you want to get to the random page from a custom button? Unfortunately direct and obvious way won't work. There's a trick how you may do that. If you want your custom button to link to a random page - create another page (a secret page), and make your button link to it. On that service page use either delay with 0 seconds leading to your random pages, or goto() function leading there.
How it will work: When you press your custom button it leads you to your service page, then instantly to the one from your range. The change is so quick that user will not notice it.






