lucid's Forum Posts

  • That's nifty-- though it would probably be more space and cost effective to just emulate a SNES on your PSP or DS-- I have no doubt though, that if people saw you carrying that thing around you would become supa popular.

    I almost just said

    "this"

    I vowed I'd never do it.....damn you facebook and youtube 'like' buttons......you've ruined me

    but yeah...and ha...supa popular

    <img src="http://s-ak.buzzfed.com/static/imagebuzz/web02/2009/12/23/1/stop-using-win-and-fail-as-complete-sentences-com-31293-1261549830-19.jpg">

    • Post link icon

    This is one of the moments where I regret, that I never got used to C++. I have programming skills, the will to solve problems and a long experience with (oop)BASIC and several script tools. But whenever I try C++, I see all that overhead. VS Express is so bloated. It takes so long to start, there are so many files to create and I always wonder, what that editor expects from me. Compared to something like Real Studio or just Notepad to start Python, it just discourages me.

    I really hope there will be dozens of C++-skilled people interested in further development of 0.x

    I really do

    hey tulamide

    I know there are alot of neighsayers

    ^_^

    , but i happen to love VS. maybe it's not the only one that does this, but it's the main thing I've used since I started in modern languages, and so it's the only one I've used, but some things it does are just so useful.

    If there is a function I wrote somewhere and I see it somewhere, and I need to doublecheck and make sure I didn't screw something up - rightclick - go to definition.

    Maybe it's a function buried somewhere deep in some obscure construct IDE c++ file, instantly opens the file and takes me there.

    Used a variable or function a few times, and now you realized everywhere you used it, you want to add something else? right click - find all references, and it brings up a list of places you can double click on to be transported there.

    Beautiful find/replace that let's you replace all in selected text, currently open document, all open documents, entire project, or entire solution.

    When you get that 80 mile list of errors the first time you try to compile your master piece, double click on each error to be transported to that line of code.

    As you press the :: or . or -> to access the members of a class, or struct, it brings up a handy list of anything valid you can type there, hover your mouse over any of them to see the variable type, or the return type of a function. left some comments on the definition? they'll be there for you to read as well.

    A plugin like 's', or the animator I'm working on now simply wouldn't be possible for me to do alone without the wonders of visual studio.

    Also, I know it's not the only one that does this, but the vs equivalent of persist files is flawless. I can stop working in mid command if need be and shut the program, and it reopens scrolled to the exact line i was working on, and the recovery from unexpected shutdown of the program actually works. there's been a power outage or whatever a few times, and everything is exactly as if I had saved the moment before it happened.

    like I said, I know alot of people hate it. I just haven't figured out why. I tried eclipse, and woohoo opensource free yay, but, I just missed visual studio the whole time.

  • The problem only arose if you were pointing to the highest indexed location of something

    So, to have the problem, you would have to be pointing to an address with at least one numerical index in it that was the highest index for that array. If you did this, it would 'think' it was out of range and read the index as 0

    Like if the array "stackofstuff" had had 5 things in it

    ({"stackofstuff",4}), would be the last thing in it. If you pointed a pointer to that it would would be like putting {("stackofstuff"})

    In any other situation, including numerical indexes less than the highest in the array, it should have worked

  • When working object oriented, you will have an easier life using one of the two object oriented tools: 's'-plugin or python

    In the third post on this page, lucid gives a very fine example of how 's' could help you solve any of your issues.

    yeah, I agree!!!

    the level editor there, if you haven't taken a look is only 4 events. add all your objects to an array, create spatial info array (automatically generates an array with your choice of any combination x,y,z,angle,width,and height of all the objects in the array)

    and then save, your choice of encrypted or not

    at a later time I may add the option to save pv values as well, but that's a simple matter

    create an array to hold the pvs

    for each object in array, add the private variable to the new array. and save after that instead

    loading would just be the reverse. when you load you can tell s to automatically apply the spatial info array, and you'll have all your objects back in their original location, and in the array. and then you can just For Each Object in array, set pv to {"yourpvarray",loopindex}

    in s, it's loopindex, it's just li, but if you don't know that and you plan to use 's', better start them tutorials

  • you rock pyteo

    thanks for this

  • I would say to start with something like a double jump or a wall jump, but try and get as far as you can, even if its just guesses that don't work, expirement and mess up, then post your question thread. Also, a lot of new peopl are afraid to 'annoy' people with a lot of new question threads. Just ask your double jump help question in a new thread so the title can let people know if its an area they'll be able to help you with.

    Edit: I wrote this before the intervening posts, but never hit post, so this isn't to say to ignore minor's blog post

  • Not really. I've never ran into any performance problems until I got to the point where it was several thousand commands running per frame, or several thousand objects.

    Edit:oh yeah, and the tiled background is faster because there's only one of them for a large area. Where as a sprite would take many for the same space. If you're wondering, yes, you can distort the uv of a sprite to make it look like a tiled background, and use it in its place. Tiled background just simplifies the process

  • new additions 9-10-11

    hi guys, big update. For those of you who could just never get the whole moving things with lerp thing, of for those who get sick of typing in the events. Math now has actions to autointerpolate over time. there are two different ways.

    first is to create a value to interpolate, that you can retrieve from expressions.

    The second is to interpolate object positions,rotations,and dimensions automatically over a given time. like being able to order an object to a location. there are also triggered conditions for when interpolation completes, and actions to pause and resume interpolation. using the automated interpolated value actions and expressions, you could automate anything like pv's, opacity, and color.

    also, the interpolation allows you to set a speed curve control point anything from 0 to 1, 0 is ease in, 0.5 is linear, and 1 is ease out.

    hope it comes in handy, have fun!!!

    new additions 9-11-11

    • added the ability to set the current value, of interpolated values, which will create the value if it doesn't exist.
    • you can now access values like this: math.yourvaluename and you have not yet created the value, it will return 0
    • if you do it like this: math.yourvaluename(somedefaultvalue) and you have not yet created the value, it will return your default value
    • added the ability to change the total time for the interpolation on the fly, as well as the time elapsed, and interpolation curve control point

    special thanks to FrenchYann and Somebody for suggestions and testing

    (latest update (9-11-11   10:30am:additional bug fixes)

    this will be an evergrowing plugin of math functions:

    http://dl.dropbox.com/u/1013446/sharinplugs/math/plugins.rar

    AngleLerp(a,b,t)

    is like lerp(a,b,t) for angles

    basically you can lerp two angles, between 0 and 360 (EDIT:no longer has the limitation of having to be angles between 0 and 360), and not have to worry about crossing the 0/360 line just lerp and be happy, knowing that everything is taken care of, and your brainchildren are safe

    the second one is Get T which is simply typed t

    it's for helping with lerp functions, it's the opposite of lerp

    if lerp is x==lerp(a,b,t)

    then t==t(a,b,x)

    in simpler terms, t(a,b,x) will give a value between 0 and 1 that represents how far between a and b x is.

    I'll give more detailed examples later, but this one should suffice for people who already understand lerp and can do this without the t function: say you're looping between 2 and 6 and you want to set create a sprite between point a and b that starts at a and ends at b as you go through the loop evenly spaced in between you would just do

    lerp(a,b,t(2,6,loopindex))

    hidden functions:

    the intersectx, and intersecty expressions

    they aren't on the expression list, but they work

    example cap here:

    http://dl.dropbox.com/u/1013446/New%20folder%20%286%29/New%20folder/intersection.cap

    these give you the point at which two lines intersect

    you can do this 4 ways

    specify 4 xy coordinates:

    ntersectx(x1,y1,x2,y2,x3,y3,x4,y4)

    intersecty(x1,y1,x2,y2,x3,y3,x4,y4)

    specify 3 xy coordinates(the first two form a line, the 3rd is assumed to be on a perpendicular line):

    ntersectx(x1,y1,x2,y2,x3,y3)

    intersecty(x1,y1,x2,y2,x3,y3)

    specify 4 objects

    ntersectx("object1name","object2name","object3name","object4name")

    intersecty("object1name","object2name","object3name","object4name")

    specify 3 objects (the first two form a line, the 3rd is assumed to be on a perpendicular line):

    ntersectx("object1name","object2name","object3name")

    intersecty("object1name","object2name","object3name")

    all 4 methods are available in the example cap, just toggle them on and off

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • howdy yall. I noticed I messed up on the pointer and loop based addressing system in 's'

    oops

    I guess no one was really using those features since no one complained. but here's the new working version

    http://dl.dropbox.com/u/1013446/New%20f ... 6%29/s.rar

    they're both handy features. somewhere in these 12 pages is the explanation of what they do, but I'll do a quick reminder here for anyone interested.

    The Set Pointer action lets you make a pointer

    I'll use an actual example from my current project where I realized they weren't working and fixed them

    I had a bunch of events that looked like this:

    [quote:ymgud9jw]add objectarray "icon" to super {"window",s.sule({"window"}),"entries",s.sule({"window",s.sule({"window"}),"entries"})}

    needless to say that's very ugly, hard to read, and easy to make a mistake with, so with a pointer I could say

    [quote:ymgud9jw]Set Pointer "currententry" to {"window",s.sule({"window"}),"entries",s.sule({"window",s.sule({"window"}),"entries"})}

    then I can do this instead of the original way

    [quote:ymgud9jw]add objectarray "icon" to super {"p","currententry"}

    the "p" at the start of an address tells s the next part of the address is a pointer name, and it will act as if instead of "p","pointername" you typed in all that stuff that you set the pointer to

    you can also use pointers in pointer addresses, which I actually did in the same example like

    [quote:ymgud9jw]Set Pointer "currentwindow" to {"window",s.sule({"window"})}

    and when I needed to use something within that address over and over I did:

    [quote:ymgud9jw]Set Pointer "currententry" to {"p","currentwindow"),"entries",s.sule({"window",s.sule({"window"}),"entries"})}

    you can use them as partial addresses as you see above as well, where I started the address with the pointer and the continued on to go in entries within that pointed to super

    the loop address thing does the same thing

    if you're in a loop(an s loop, not a system loop), say you're looping through some insane address

    [quote:ymgud9jw]{"window",s.sule({"window"}),"entries",s.sule({"window",s.sule({"window"}),"entries"})}

    and your loop is called "myentries"

    anywhere you need to refer to that long address you can just use

    [quote:ymgud9jw]{"l","myentries"}

    and all the same rules as the pointers talked about above work, except you start with "l" for 'loop' instead of "p" for 'pointer'

    it's especially useful as you being looping through an array, and then looping a loop within that one of another array within the first one, etc, etc, and you not only don't have to type in the whole address you're looping through each time you add another nesting loop, or when you need to access the size of an array or something from a very outer loop, you don't have to keep track of any of the addresses

    one last thing about pointers by the way...they can kinda be used as variables, too

    no special commands or anything, but for example, let's say you have two object arrays, one called "air targets", and one called "ground targets"

    you can set a pointer called "current targets"

    then do all your commands on that address, and not care which array it's currently pointing to

    oh yeah, last last thing about pointers. it's meant to be simple, if you Set a Pointer you haven't set yet, it is created, if it has already been set, it will be overwritten with the new address

  • i think it would be simpler to just use numbers

    [quote:3235mgqm]weapon = 0

    you know for yourself, and in your comments which number corresponds to which weapon

    [quote:3235mgqm]on player pressed Change Weapon

    add 1 to player('weapon')

    if player ('weapon') is greater than the highest number you have defined

    player('weapon') = 0

    so it'll loop around to the first weapon...much cleaner and easier to maintain. just two little events that won't change no matter how many weapons you add

    I think just using numbers and comments is fine, you can copy paste a little comment chart or the relevant parts wherever you need it, like here's your comment block for the event that increments:

    remember this is just a comment field that does nothing except let you read it and remember

    [quote:3235mgqm]0=pistol

    1=shotgun

    2=chainsaw

    3=friendship ray

    then on the event where you have

    if player('weapon')==1 or whatever

    you can have a little comment that just says

    [quote:3235mgqm]1=shotgun

    if you're against comments like that for whatever

    make a bunch of global variables

    one called shotgun with the default 1

    one called chainsaw with the default 2

    etc

    and just never change those variables, so they'll be constant

    then your events won't need comments because they'll look like this:

    [quote:3235mgqm]if player('weapon') == global('shotgun')

  • destroy on startup attribute happens before frame 1 of the game.. I could be wrong about that though. if so, it's existence for a moment at the beginning of the first tick of the game without being displayed won't affect performance or anything else. Destroy on Startup is the equivalent of having no instances at startup. unfortunately, because of early choices behind the scenes of construct, it's not possible to create a layout that has object types in it without also having that one instance that destroys itself at least.

  • why not just do on collision with whatever. they don't need to be solid. the solid attribute is so things with behaviors such as platform and stuff, know what they can stand on and go through, etc. if you just want to make something happen when it hits something

    just use the on collision condition

  • does the character need the solid for anything? if not, take it off the character...same with enemies unless they have some reason to use it

  • yeah yeah, I know, that's what this thread is for

    if a bunch of people go there at the same time

    there'll be more than just one

  • no seriously...

    WE HAVE A CHAT ROOM!