Jump to content
  • Advertisement

All Activity

This stream auto-updates     

  1. Past hour
  2. GoliathForge

    Quaternion to Euler very imprecise

    https://www.andre-gaschler.com/rotationconverter/ What I'm observing from using this online converter, It appears that quaternion is indeed 45° on each axis in the YXZ arrangement. The Euler's you get are partially confirmed but flipped Y and Z. Matching YXZ gives 45° Euler angles across the board. Perhaps that's a clue.
  3. Hi! 👋 Recently was the premiere of my mobile game Blow Them All!😎 I would be very grateful for any feedback! 🧐 I encourage you to check, compete for the highest score in the table and if you like it, do not forget to leave a rating! 5️⃣⭐️👏 Android: https://play.google.com/store/apps/details?id=com.MichalKorek.BreakThemAll iOS: https://itunes.apple.com/us/app/blow-them-all/id1459104949?l=pl&ls=1&mt=8
  4. MrFloat

    Register a templated function?

    I think AngelScript supports template types but not functions. Something similar could maybe be made by using output variable parameters (https://www.angelcode.com/angelscript/sdk/docs/manual/doc_adv_var_type.html)
  5. Today
  6. That SSVDAG algorithm looks impressive, but doesn't look applicable to real-time techniques, as it doesn't look like you could construct an SSVDAG in real time. @spike1 - It won't make it faster, but hardware virtual-texture support could reduce the voxel memory requirements. The idea would be similar to sparse-virtual-shadow-maps, though it's probably not supported on the GTX 750 Ti in hardware. Maybe with a github source repo.. someone might collaborate and improve it, or someone else might find a practical use for the technique even with it's limitations.
  7. Hey, hello there! This is yet another new entry in this truly wonderful weekly update blog! This week was quite big. There is a couple of new stuff so let's get right to it! Pooling First, I want to talk about a subtle upgrade. In the game, I'm using static factories to generate different game objects such as projectiles, props and entities among other things. While this is quite handy (especially since you don't need to drag'n' drop any components at all), it wasn't really optimized. Some object (especially projectiles) could frequently be instantiated and destroyed. For some objects this is fine but for others, it can really affect the FPS. To fix this we need to use pools. These are essentially scalable stacks of the pre-instantiated game objects that are ready to use. Instead of destroying them we simply disable them and store them back into the pool, thus recycle the game object and avoiding a lot of overhead. While on the surface this might seems odd it's actually really useful with short-lived and numerous objects. Pretty simple to integrate into my factories too! It works like a charm! I've partially based my Pool system off this one if you're interested. Spark Effect Next, there's a new particle effect in the game. This one is quite AESTHETIC, so be warned. Basically, it's a Memphis design effect that is supposed to represent some kind of collision. The particles are also coloured accordingly to the colour palette too! Right now these are used on any physical hit. However, I'm still trying to think about a better use case for them... Here's a video showing them off: New Enemy Finally, I'm proud to say that there's now another new enemy in the game: the archer. This enemy uses a bow to attack. It will try to keep its distance and instead try to attack at range. It will also try to trick the enemy to avoid being targeted by them too. They also got a different behaviour that other, in which they will try to circle around their target and keep moving no matter what. When they're near their target and has a clear sight of them, they will draw an arrow, pull their bow and launch it. It's a good idea to strike when they're pulling their bow as it's when they're the most vulnerable. Like their sabre-wielding piers, they will also patrol around their room and be on the lookout for any enemies. They will also flee when weak and can be one-shot too! Here's an encounter with an archer: Minor Updates Big refactor of the GUI. Replace duplicated code with inheritance. Optimized some GUI events. Fixed some oversight in some GUIs. Added a cached state controller that can cache useful data that rarely changes. Added individual limbs target to player characters Right now there isn't any damage multiplier on the player's limbs nor are the enemies try to target some. This might be an idea for later though. Made the active arrow much more flexible Replace the unintuitive layer mask int to a LayerMask instance. It makes it so much better to edit these Made the arrow play the appropriate collision sound when colliding with objects. Big code conventions refactor. Added proper animation masks to my animated models Made most behaviour tree controllers much more flexible Basically the same thing as the active arrow, which is replacing layer mask int to LayerMask instances. Fixed bugs with the hamburgers Fixed some oversights in physic collisions between layers. Next Week I'm still not done with the archer enemy. It still needs a bit of balancing and bug fixing. I also need to perhaps complexify my behaviour tree a tad bit. I'm slowly getting there at each iteration. It's quite interesting and all but working with behaviour tree requires a lot of conception and debugging too! After I'm done with the archer, I'll probably add a gunner too. Afterwards, I'm gonna focus on the bosses. Of all entities these are probably the dumbest and also the buggiest, so that's up next. And then there's the usual suspect (relics, capacities, items, rooms, etc.). I sure hope that with the right type of enemies the game can get better exposure... Only time will tell...
  8. Pursche

    Register a templated function?

    Hi! I am having a hard time figuring out how to register a templated function. I read this page: http://www.angelcode.com/angelscript/sdk/docs/manual/doc_adv_template.html But it only seems to cover how to create a templated type with member functions (object behaviors). I saw this thread that has almost the same problem and usecase as me, in it one of the comments says that the following usage should be possible in AngelScript. Velocity@ vel = entity.getComponent<Velocity>(); But it doesn't go into any details on how to do this. It also suggests this syntax which I would prefer to avoid if possible, and yes I read the part about this having better performance. entity.getVelocity(); My most preferable usecase would be getComponent<Velocity>(entity); with entity.getComponent<Velocity>() as a close second. Is this even possible without a templated type? Could anyone show me a concrete example of registering a templated global function, preferable with specializations as well?
  9. Tom Sloper

    white dragon finger paint

    This did not belong in Game Design (game design is not about programming). It's moved to a more appropriate forum.
  10. im trying to save file as file.x old microsoft style .x files this code writes but it comes out as an error i compiled it with visual c using glut i need to be able to both read and write .x files such as wdf.x <--- here is the code sorry about spaghetti code =========================================== #ifdef WIN32 #include <windows.h> #endif #if defined(__APPLE__) || defined(MACOSX) #include <OpenGL/gl.h> #include <OpenGL/glu.h> #include <GLUT/glut.h> #else #include <GL/gl.h> #include <GL/glu.h> #include <gl/glut.h> #endif #include <stdio.h> #include <stdlib.h> int xt,yt,zt =0.0f; int xtc =1.0; #define MAX_VERTS 900000 float angle = 0; float anglf = 0; float anglg = 0; float n =0.0; GLfloat z= -0.2f; GLfloat hl= 0.0f; GLfloat zm= -0.2f; GLfloat zp= 0.2f; GLuint mousex, mousey, mousez = 0; static GLfloat Scale = 0.0f; static int i= 2; int j= 2.0; static int numVerts = 2; static struct {GLfloat x, y, z;} verts[MAX_VERTS][2]; static GLboolean dragMouse = GL_FALSE; enum {X, Y, Z}; enum {NOLIST, PLANE}; /* display lists */ enum {VERTS}; /* load data structure from file */ enum {WRITE, END}; void reshape(int w, int h) { glViewport(0,0, w,h); glLoadIdentity(); glOrtho(0,w, h,0, -1,1); /* flip y-axis around */ glMatrixMode(GL_MODELVIEW); } // not used jmcd void glRotateAxis(void){ glTranslatef(0.0f,0.0f,0.0f); //glScalef(Scale, Scale, Scale); glRotatef(angle,0.0f,+1.0f,+1.0f); //on center rotation by jmcd glTranslatef(0.0f,0.0f,0.0f); } void glRotateAxisB(void){ glTranslatef(0.0f,0.0f,0.0f); //glScalef(Scale, Scale, Scale); glRotatef(angle,0.0f,-1.0f,-1.0f); //on center rotation by jmcd glTranslatef(0.0f,0.0f,0.0f); } void glScaleIt(void) { glScalef(Scale, Scale, Scale); } void display(void) { glClear(GL_COLOR_BUFFER_BIT); /* clear frame buffer */ //glPointSize(3.0f); glColor3f(2.0, 7.0, 3.0); /* set current color to Pastashio Green */ glMatrixMode(GL_PROJECTION); //glTranslatef(0.0f,0.0f,0.0f); //glRotatef(angle,1.0f,1.0f,0.0f); //on center rotation by jmcd //glTranslatef(0.0f,0.0f,0.0f); //glRotatef(anglf,0.0f,1.0f,0.0f); //glRotatef(anglg,0.0f,0.0f,1.0f); //glRotatef(10-.01,0.0f, 1.0f, 0.0f); glBegin(GL_POINTS); //glBegin(GL_LINES); GL_POINTS if (numVerts > 1) { int i; for (i = 0; i < numVerts; i++) glVertex3d(verts[0].x, verts[0].y, verts[0].z); if(dragMouse) // numVerts++; i++; glVertex3f((GLfloat) verts[1].x=mousex, (GLfloat) verts[1].y=mousey, (GLfloat) verts[1].z=mousez); //glVertex3d(verts[1].x, verts[1].y, verts[1].z); //if(dragMouse == GL_TRUE) glEnd(); } glutPostRedisplay(); glFlush(); /* make sure all GL commands are executed */ } void writer(char *fname) { FILE *fp; GLfloat x, y, z ; int state = WRITE; int jtrig = 0.0; int i= 2.0; fp = fopen(fname, "wb"); if (!fp) { printf("can't open file %s\n", fname); } // glNewList(PLANE, GL_COMPILE); state = WRITE; while(!feof(fp)) { switch(state) { case WRITE: if (n == 0.0) x = verts[0].x; y = verts[0].y; z = verts[0].z; fprintf(fp, " %f %f %f", verts[0].x, verts[0].y, verts[0].z); printf ("xyz : %f.\n",x,y,z); printf ("numverts : %f.\n",numVerts); //printf(fp, " %f %f %f", verts[j][0].x, verts[j][0].y, verts[j][0].z); fprintf (fp, "%f \r\n",0); // j++; if(i == numVerts) state = END; i++; n= 1.0; break; if (n == 1.0) x = verts[1].x; y = verts[1].y; z = verts[1].z; fprintf(fp, " %f %f %f", verts[1].x, verts[1].y, verts[1].z); printf ("xyz : %f.\n",x,y,z); printf ("numverts : %f.\n",numVerts); //printf(fp, " %f %f %f", verts[j][0].x, verts[j][0].y, verts[j][0].z); fprintf (fp, "%f \r\n",0); // j++; if(i == numVerts) state = END; i++; n= 0.0; break; //fclose(fp); if(i < numVerts) state = WRITE; if (x == 0.0) fclose(fp); break; case END: fclose(fp); state = NULL; state = END; break; } } } void loader(char *fname) { FILE *fp; GLfloat x, y, z; int state = END; int read; n = 0; numVerts = 2.0; i = 2.0; fp = fopen(fname, "r"); if (!fp) { printf("can't open file %s\n", fname); exit(1); } // glNewList(PLANE, GL_COMPILE); state = VERTS; while(!feof(fp)) { switch(state) { case END: // read = fscanf(fp, ""); // if(read < 0) /* hit eof */ // break; state = VERTS; // glBegin(GL_LINE_STRIP); break; case VERTS: if( n = 0.0) fscanf(fp, " %f %f %f ", verts[0].x, verts[0].y, verts[0].z); // fscanf(fp, " %f %f %f", &x, &y, &z); printf("xyz : %f./n",verts[0].x,verts[0].y,verts[0].z); ////////////////////////////////////// printf("xyz : %f./n",x,y,z); ///// verts[0].x = x; verts[0].y = y; verts[0].z = z; // watch 148 n = 1.0; i++; // numVerts = i; if( n = 1.0) fscanf(fp, " %f %f %f ", verts[1].x, verts[1].y, verts[1].z); printf("xyz : %f./n",verts[0].x,verts[0].y,verts[0].z); ////////////////////////////////////// printf("xyz : %f./n",x,y,z); ///// verts[1].x = x; verts[1].y = y; verts[1].z = z; // watch 148 n = 0.0; i++; // numVerts = i; @@@@@@@@@@@@@@@@@@@@@JMCD NOW!!@@@@@@@@@@@@@@ if(x = 0.0); state = END; if (x !=0.0) state = VERTS; { // fscanf(fp, ""); //glEnd(); // state = END; } break; } } // glEndList(); fclose(fp); } void keyboard(unsigned char key, int x, int y) { switch (key){ case 'd': hl=zm; z= hl; glutPostRedisplay(); break; case 'f': hl=zp; z= hl; glutPostRedisplay(); break; case 'l': loader("./data/wdf.x"); glutPostRedisplay(); // glFlush(); break; case 'w': writer("./data/wdf.x"); glutPostRedisplay(); // glFlush(); break; case 'u': numVerts--; i--; printf("xyz : %d./n", x,y,z); glutPostRedisplay(); break; case 'c': hl=0.0f; z= hl; glutPostRedisplay(); break; break; case 's': numVerts=2; i=2; glutPostRedisplay(); break; case 'r': numVerts++; i++; printf("xyz: %d./n", x,y,z); glutPostRedisplay(); break; case 'p': Scale = 0.4f; glScaleIt(); break; case 'o': Scale += 0.4f; glScaleIt(); break; case 'a': angle += .001f; printf ("angle : %f.\n", angle); glRotateAxisB(); break; case 'z': angle += .001f; printf ("angle : %f.\n", angle); glRotateAxis(); //this whole thing is right, x below also all correct // glutPostRedisplay(); break; case 'x': angle -= .001f; glRotateAxis(); //glutPostRedisplay(); break; case 'k': angle -= .1; glRotatef(angle,1.0,0.0,0.0); glutPostRedisplay(); break; case 'y': angle += .1; glRotatef(angle,0.0,1.0,0.0); glutPostRedisplay(); break; case 'g': angle -= .1; glRotatef(angle,0.0,-1.0,0.0); glutPostRedisplay(); break; // case 'n': // numVerts--; //glutPostRedisplay(); /* request a redisplay */ // break; /* case 'q': case 'Q': exit(0); break;*/ } } void mouse(int button, int state, int x, int y) { if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN ) if (numVerts < MAX_VERTS) { dragMouse = GL_TRUE; // printf ("Mouse in play routine : %d,%d,%d.\n", x,y,z); //jmcd take out later !!! verts[0].x = x; verts[0].y = y; verts[0].z = hl; // watch 148 printf ("Index I: %d.\n", i); printf ("dragMouse : %d.\n", dragMouse); printf ("numVerts : %d.\n", numVerts); //jmcd jmk 1 printf ("hl : %f.\n", hl); printf ("z : %f.\n", z); if (xtc = 1.0) xt = verts[0].x; yt = verts[0].y; zt = verts[0].z; // fwrite(fp, " %f %f %f",xt,yt,zt); printf("xt : %i./n ", xt); printf("yt : %i./n ", yt); printf("zt : %i./n ", zt); xtc++; numVerts++; i++; glutPostRedisplay(); /* request a redisplay */ } } void mouseMotion(int x, int y) { if (GLUT_UP == TRUE) { dragMouse = GL_TRUE; if(dragMouse) { //dragmouse achieved at 11:40 AM //D //8:32 AM mousex = x; mousey = y; mousez = z; // glMatrixMode(GL_MODELVIEW); glutPostRedisplay(); } printf ("hl : %f.\n", hl); //glVertex3f((GLfloat) verts[0].x, (GLfloat) verts[0].y, (GLfloat) verts[0].z); //i++; } // glutPostRedisplay(); /* request a redisplay */ } #define ESC 27 //void keyboard(unsigned char key, int x, int y) {if (key == ESC) exit(0);} int main(int argc, char *argv[]) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_SINGLE); glutInitWindowSize(500,500); glutInitWindowPosition(10,10); glutCreateWindow("Polyline Editor"); glutDisplayFunc(display); glutReshapeFunc(reshape); glutMouseFunc(mouse); glutPassiveMotionFunc(mouseMotion); glutKeyboardFunc(keyboard); glClearColor(0.0, 0.0, 0.0, 1.0); glutMainLoop(); return 0; } thank you in advance sincerly JakePlow polyed3.c polyed3.dsp polyed3.plg
  11. Hi, I am trying out Vulkan ray tracing extensions and I am at the point where I need to compile shaders. I usually use DXC to compile my shaders to Spir-V but I am having trouble understanding how to create a lib_6_3 shader. This is the shader I am trying to compile: struct Payload { float4 color; }; [shader("miss")] void main(inout Payload payload : SV_RayPayload) { payload.color = float4(0, 0, 0, 1); } I was trying to use the following command to compile it but it simply does not produce any output: dxc.exe -spirv -T lib_6_3 -fspv-target-env=vulkan1.1 miss_rt.hlsl -Fo miss.spv I a clearly missing some key detail here... Well, 3 mins after writing this post, I updated my version of DXC and now it works... False alarm! Cheers!
  12. lawnjelly

    Quaternion to Euler very imprecise

    I apologise as I didn't mean to offend, slightly off topic, but it is quite interesting linguistically this kind of thing, and often comes up with Euler angles: https://english.stackexchange.com/questions/315906/pronunciation-of-the-name-leonhard-euler It has some similarities to a 'borrowed word' from another language. Often the pronounciation will be changed to fit more easily with the language that adopts it .. see pidgin english for example. As well as the phonetic pronounciation being 'yooler' in english, there is a conflict with the word oil, and our existing word oiler, in which case it makes total sense to alter the pronounciation in english, otherwise you are relying on context for meaning. The counterargument of course, which has won in maths, is that as a name it should be preserved as spoken in the original language. But you can see there are valid arguments both ways. And of course languages are dynamic, evolving and subject to change, I believe pronounciation in english has changed greatly in the past few hundred years, compare the difference between american english and british english for example. You say tomato, I say tomato...
  13. RoKabium Games

    ScreenShotSaturday

    Keeping up with the twitter hashtag of screen shots on Saturday!
  14. lawnjelly

    Quaternion to Euler very imprecise

    I tried my euler to quaternion and it gave a different result to yours. I checked and mine follows the convention on wikipedia: https://en.wikipedia.org/wiki/Conversion_between_quaternions_and_Euler_angles#Source_Code which appears to follow heading, attitude, bank convention. The source you linked also claims to follow the same convention: https://www.euclideanspace.com/maths/standards/index.htm Yet the equations you use are different to that on wikipedia. I would include the code here but the code thing on the forum isn't working for me for some reason.
  15. VoxycDev

    First Person Catcher!

    Pony, kitten and bunny hanging out in front of the pink castle
  16. Alundra

    Quaternion to Euler very imprecise

    The problem is the imprecision is not little but very large... Puting a quaternion with 45 degrees on X, Y and Z gives this quaternion: The euler resulting from this quaternion is: Of course we are far from 45 degrees that we started but the visual result is almost the same but the Y angle is far. The "9.735610" on the Y axis should in reality be around 23 degrees. Up is the result of the Quaternion to Euler, Down is the reference 45 degrees on each axis. Used for the editor to show the euler angles to be artist friendly. But I begin to think that it should completely be avoided and do the calculation differently to get the good angles. - When the gizmo is used, instead of add another quaternion for the transform, surely the euler can be modified local and world space and then the quaternion can be created safely from these angles. - When you attach one object to another, the relative angles can surely be calculated safely too to have a good representation of the actual euler angles. It's actually the two cases where I use the quaternion to euler because I do quaternion operation then I set the new quaternion but of course then the eulers is computed by converting the quaternion to euler if you set a quaternion and not euler angles for the new rotation.
  17. fleabay

    Quaternion to Euler very imprecise

    I doubt he (Euler) cares very much.
  18. a light breeze

    Game initialization.

    The main reason for initializing things outside of main is that they are needed for other things that also exist outside of main. This sounds like a circular argument, but consider that every static variable has a lifetime that extends beyond main. If one of your functions has a static variable of type T, and T accesses the logging system in its destructor, then the logging system and its dependencies need to be available outside of main. You can, of course, avoid this whole issue by not using any static variables. However, this requires a lot of discipline, and it has costs both in code complexity and performance.
  19. If you need a music composer/sound designer, I would love to get involved. I'm not sure what style of music you would be looking for but here are links to my portfolio. I specialize mostly in orchestral writing. Video Game Music - https://soundcloud.com/shaun-bellamy/sets/video-game-music Portfolio - https://soundcloud.com/shaun-bellamy Covers- https://www.youtube.com/channel/UCHBtJNK3jaB_ulhd6yaLsIA
  20. Phoenix Games

    [Work In Progress] Don't Give Up

    'Don't Give up' is a game set around a child growing up through school years, each level represents a school year passed. As you play through the game, the levels get darker to reflect the stress and anxiety many students feel towards the later years, obstacles will also begin to appear in the form of school themed dangers like a pencil or books etc..., as well as this the levels will become more twisted and loose their colour for a more dark, bleak and twisted theme.
  21. a light breeze

    Quaternion to Euler very imprecise

    Don't. Just don't. "Euler" isn't some arbitrary sequence of letters, it's the last name of the mathematician Leonhard Euler (pronounced /ˈɔɪlər/), and deliberately mispronouncing somebody's name is just incredibly insulting.
  22. Hello, I am a sound designer and Foley artist who is relatively new but very knowledgable in what I do and I am looking for some experience in the game industry. I am willing to work for almost any project that is needing assistance. Feel free to shoot me a message or reply to this if interested! Thanks
  23. Sounds like you're asking a Law question. Can you say more about what it is you want to find out? What do you think the requirements might be?
  24. Pepsidog

    How to make a hard platformer

    In summary, precision, and no invisible objects. I also learned earlier that letting the player get right back into the action instead of having a long checkpoint span is good.
  25. We are developing Fatal Core as a full-featured trading card game, complete with competitive play, packs to open, and a player market to sell/buy cards. One thing Fatal Core will not have are purchases of any kind. We're hoping to offset some/all of the cost of development through Patreon eventually, with huge incentives for the whole community when certain donation tiers are reached. The game can be played in browser with no download, although it is not yet optimized for mobile. For the interested: Game link: https://fatalcoretcg.com/ Quick tutorial: https://imgur.com/bXtQskX Discord (for easy matchmaking): https://discord.gg/augzm4n Patreon: https://www.patreon.com/user?u=19475742
  26. VoxycDev

    Did I really remake Minecraft?

    I'm looking at the screenshots and it's quite a beautiful and vast world you got. That's a lot of cubes and this technically quite impressive to me. To be less Minecraft-y, you could: Make the cubes flexible / bendable to add curved surfaces to make the world look more realistic (that's the route I took and taking again), but then you may have to change the name since it's no longer cubes technically. Make the cubes even smaller. Like 1/4th of the Minecraft size. It may just fool the eye. Use fewer colors in textures. If you remove the basic primary colors and reduce the overall number of colors you use (stick to maximum 2-3 different distinct colors per scene), it will look more realistic and less Minecraft. Again, your voxel worlds look nearly realistic, and that is very cool. More power to you!
  1. Load more activity
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!