• Advertisement

All Activity

This stream auto-updates     

  1. Past hour
  2. C# 10,000 PNG files!

    DotNetZip and Windows Explorer to create the zip files? There must be tons of libraries to handle the zip format.
  3. So you say you transform one object and it affects other object transformation? That means your loop is bugged you could at least post some kind of pseudo code of what are you trying to achieve and what are you doing now
  4. The New Frontiers Open Test has just started! And we invite everyone to join this open test - hurry up to be the first who checks out all the great things Snowforged Team has prepared for you: new NPC faction, Rings system, PvP mode, ships, weapons, mining system, tasks, pirate fleets, detachments, recall system, ship model progression and more - read the full list of changes here. Open up the door to endless adventures and explore all the seven Rings of Starfall Tactics Galaxy! No keys required - the test is open to everyone! To start playing Starfall Tactics follow these instructions: Register on starfalltactics.com Download Starfall Tactics launcher here. Install Launcher - it will download the game client. Remember, that the game is not available for x32 systems during tests. Push the "Play" button and start playing Starfall Tactics! Join in the discussion with other Commanders at our Forum and on Discord Channel New to Starfall Tactics? Check this short guide out! Got troubles or want to report something? Use #help & #bugreport Discord channel, create a topic on the forum or send a letter to support@snowforged.com! So, what's new? What's new? Well, there are a lot of things to check: New PvP mode - Domination Custom games New recipes New tasks New ships - battlecruisers Weapons Party system for the MMO mode Recall system which allows you to warp in additional ships on the Galaxy map The first neutral faction - Mineworkers Ship model progression Rebalance for special modules, shields, armor, weapons, layouts and hull characteristics. Reworked pirate fleets Rings system Equipment quality system Reworked detachments Cool quest rewards Special fleet abilities for the global map (to be announced in the next WIP!) New visual ship customization abilities And various improvements, designed to make your playtime even more enjoyable! And that's not the full list of all the great things we've prepared for you - full patch notes will be available later. See you in Starfall Tactics!
  5. May be you are right here... Bur really, there is too much stuff to tell about. I think I should make another short post telling about genera; features then The New Frontiers Open Test has just started! Hurry up to be the first who checks out all the great things Snowforged Team has prepared for you: new NPC faction, Rings system, PvP mode, ships, weapons, mining system, tasks, pirate fleets, detachments, recall system, ship model progression and more - read the full list of changes here. Open up the door to endless adventures and explore all the seven Rings of Starfall Tactics Galaxy! No keys required - the test is open to everyone! To start playing Starfall Tactics follow these instructions: Register on starfalltactics.com Download Starfall Tactics launcher here. Install Launcher - it will download the game client. Remember, that the game is not available for x32 systems during tests. Push the "Play" button and start playing Starfall Tactics! Join in the discussion with other Commanders at our Forum and on Discord Channel New to Starfall Tactics? Check this short guide out! Got troubles or want to report something? Use #help & #bugreport Discord channel, create a topic on the forum or send a letter to support@snowforged.com! So, what's new? What's new? Well, there are a lot of things to check: New PvP mode - Domination Custom games New recipes New tasks New ships - battlecruisers Weapons Party system for the MMO mode Recall system which allows you to warp in additional ships on the Galaxy map The first neutral faction - Mineworkers Ship model progression Rebalance for special modules, shields, armor, weapons, layouts and hull characteristics. Reworked pirate fleets Rings system Equipment quality system Reworked detachments Cool quest rewards Special fleet abilities for the global map (to be announced in the next WIP!) New visual ship customization abilities And various improvements, designed to make your playtime even more enjoyable! And that's not the full list of all the great things we've prepared for you - full patch notes will be available later. See you in Starfall Tactics!
  6. PC Do YOU play Horror Games; if so WHAT is your favourite and WHY?

    I like the game Amnesia because it's just weird but I had to stop playing it after I had nightmares about being in an empty building. Right now I'm playing Halloween themed Mario hacks because they are scary but fun at the same time. I played this one that was a haunted house that you have to get out of but the twist is that you don't know you are in a house because the house is a cave! Very cool and it's stuff like that which makes me want to play horror games.
  7. Splatoon - Is it good?

    I was thinking about getting a WII U and the game Splatoon because it looks like a paintball shooting game. Is it fun and what do you do in the game? Is it all battles from what I've seen in YouTube videos or there an actual side quest because that's what I'm into. Do you run and jump from platform to platform like in Sonic Adventure? I also heard you can play online with other people. So are there leagues and stuff? So who has played this game? I'd like to hear what you think about it. I'm actually interested in playing the game to learn more about it in order to get ideas for Bluejay's Quest 3D. I was thinking of having the bird gobble up some watery berries and spitting out the pulp at other adversaries. This would take place in mid air, though, but need to play the game in order to learn more and need feedback on whether or not the game is worth playing.
  8. C++ Gameplay in C++

    I wrote my first game in C++. It is called Bluejay's Quest. It is right here: https://sourceforge.net/projects/bluejay-quest/ This game is the first real project that I completed from start to end. I created it in C++ instead of Java or Python because of concerns of speed. At the time C++ was probably the best way to go if you wanted something that wouldn't lag or something like that but I think I was too paranoid. Anyways, the other reason I used C++ in this case was because it was the language that I know best at the time and Java had it's issues with being ported to Linux. I wanted something that was standalone - no need to download runtime which is just a bunch of BBQ sauce. So with scripting I had a plan and that plan became Platformisis. Platformisis is a game maker that I wrote in JavaScript so that it can run in the web browser but the original version, which was never created, was supposed to be done in C++. That is, I was to code the engine, I/O module, editors, and scripting engine in C++. This was to be full independent C++ which would even encapsulate any library I was to use so that it could be ported out to any device. Yep, it was going to be exciting but I chose JavaScript instead. So to continue with the story if I were to have built this thing I would have implemented a scripting language called C-Lesh which would talk to the engine and the I/O via the memory mapper. That can be found here: http://www.codeloader.net/readme.html Well, it's a description and tutorial of the language. Currently, I am creating an interpreter for the C-Lesh language in C++ because C++ is fast and because C++ is a bit too bare for me. The thing about C++ is it's incredible portability. People are always talking about how Java and other stuff is super portable but (this is an important point) I say that's a crock. C++ is probably the most portable language because my different compilers have been written for various architectures and C++ has been strong for a while and it's is nothing but C with added stuff. C is ancient and is better than Basic and Fortran because I said so. But the point is portability potentially allows me to port my interpreter to any device and, thus ditch C++ for gaming. Don't get me wrong, I don't give a bucket of fried chicken or a bottle of BBQ sauce about C++ because I believe it sucks and I maintain that - end of argument but, anyways, it's portability rules and now I will create games in C-Lesh because it is everything that I want in a language. That's my story, anyways. Just in case you're wondering I am programming Bluejay's Quest (again) in C-Lesh and under the game maker Platformisis.
  9. After a lot of hard work, Corona is happy to announce the release of the StartApp plugin! Now, app publishers who use the Corona framework to build their mobile applications will now be able to easily integrate StartApp’s SDK to monetize their Corona apps. StartApp is an insight-driven mobile technology company that enables partners to turn data into fulfilling mobile moments. By creating innovative ways of exploring mobile users’ intents and behaviors, and of being smarter about responding to these factors, we help our partners optimize and better execute their strategies. Corona is excited to now enable its developers to monetize using StartApp SDK, ranked as the 3rd most popular monetization SDK behind only AdMob and Facebook Audience Network, according to SDK analytics firm Mobbo with over 1 Billion MAUs, over 400,000 app partners. Not yet a using StartApp monetization plugin? Start using it now! View the full article
  10. Today
  11. This is how it works for everyone. You're not expected to have job experience immediately out of school. Lots of good advice here already - work on the portfolio, etc. Another point that I don't think has been mentioned yet -> Apply for stuff even if you don't check every box in the "requirements". Lots of those requirements tend to be nice-to-haves rather than real requirements. It's not uncommon for places to exaggerate what they want in a candidate, or to be willing to accept someone below the original requirements, or to be in need of more junior people despite not having an explicit ad out for one. Even if there's no job ad, throw yourself at companies you'd want to work for anyway, since lots of employment needs aren't advertised. Ad says you need x years experience? Doesn't matter, apply anyway. Says you need x level of education but you don't quite have that? Apply anyway. Would require you to travel? Maybe apply anyway. My point being, if you want to work somewhere and have even the slightest feeling that you're mostly/almost/kinda qualified for it, then apply anyway. If it turns out that you're not the right person for the job, then you'll either get filtered out or just not hired, but nothing is lost in trying - otherwise you might stumble into exactly the kind of place that needs what you've got.
  12. New SEGA Genesis Game!

    Retro games are awesome because they have a lot of content in them but some of the new games are cool too.
  13. Problem with sleep

    Unfortunately any kind of sleep problems are almost always physiological and diet related. I suggest try to address diet first.
  14. C-Lesh - My Video Game Programming Language

    And here's code for the parser: Cclsh::Cclsh(int memory_size) : code_table({ { "eq", 1 }, { "ne", 2 }, { "lt", 3 }, { "gt", 4 }, { "le", 5 }, { "ge", 6 }, { "+", 1 }, { "-", 2 }, { "*", 3 }, { "/", 4 }, { "rem", 5 }, { "cat", 6 }, { "rand", 7 }, { "e", 0 }, { "n", 1 }, { "s", 2 }, { "a", 3 }, { "f", 4 }, { "l", 5 }, { "and", 1 }, { "or", 2 } }), parse_table({ { "test", { 1, "<c>" } }, { "move", { 2, "<e>" } }, { "call", { 3, "<e>" } }, { "return", { 4, "" } }, { "stop", { 5, "" } }, { "set", { 6, "<e> to <e>" } }, { "output", { 7, "<e>" } }, { "read", { 8, "<e>" } }, { "load-map", { 9, "<e> from <e>" } }, { "load-image", { 10, "<e> from <e> name <e>" } }, { "load-sound", { 11, "<e> from <e> name <e>" } }, { "keys", { 12, "<s>" } }, { "version", { 13, "" } }, { "log", { 14, "<s>" } }, { "purge", { 15, "<s>" } }, { "report", { 16, "" } } }) { // Initialize blocks. this->memory = new Fblock[memory_size]; this->memory_size = memory_size; // Record size of memory. for (int block_index = 0; block_index < memory_size; block_index++) { Fblock* block = &this->memory[block_index]; block->code = 0; block->value.number = 0; block->value.type = this->code_table["n"]; } // Initialize last token. this->last_token.token = ""; } Cclsh::~Cclsh() { if (this->memory) { delete[] this->memory; } } void Cclsh::Rcompile(std::string name) { // Do some cleanup. this->symtab.clear(); this->tokens.clear(); this->prgm_counter = 0; // Run preprocessor. this->Rpreprocess(); try { // Now compile the source. this->Rparse_tokens(name); // Do command parse. while (this->tokens.size() > 0) { // Now parse the command. this->Rparse_command(); } // Resolve symbol references. this->Rreplace_symbols(); } catch (std::string error) { std::cout << error.c_str() << std::endl; } } void Cclsh::Rparse_tokens(name) { std::vector<std::string> lines = this->Rsplit_file(name); int line_count = lines.size(); for (int line_index = 0; line_index < line_count; line_index++) { std::string line = lines[line_index]; std::vector<std::string> tokens = this->Rsplit_line(line); // Build out the tokens. int tok_count = tokens.size(); for (int tok_index = 0; tok_index < tok_count; tok_index++) { std::string token = tokens[tok_index]; Ftoken tok_obj; tok_obj.token = token; tok_obj.line_no = line_index + 1; tok_obj.line = line; this->tokens.push(tok_obj); } } } std::vector<Foperand> Cclsh::Rparse_expression() { std::vector<Foperand> expression; Foperand operand = this->Rparse_operand(); expression.push_back(operand); while (this->Ris_operator()) { Ftoken oper = this->Rparse_token(); int oper_code = this->code_table[oper.token]; Foperand op; op.code = oper_code; expression.push_back(op); operand = this->Rparse_operand(); expression.push_back(operand); } return expression; } Foperand Cclsh::Rparse_operand() { Foperand operand; operand.string = ""; operand.number = 0; operand.address = 0; operand.index = 0; operand.field = ""; operand.type = this->code_table["n"]; // Now proceed with the parsing. if (this->Ris_number()) { operand.type = this->code_table["n"]; operand.number = this->Rparse_number(); } else if (this->Ris_address()) { operand.type = this->code_table["a"]; operand.address = this->Rparse_address(); } else if (this->Ris_field()) { operand.type = this->code_table["f"]; Ffield field = this->Rparse_field(); operand.address = field.value; operand.field = field.name; } else if (this->Ris_list()) { operand.type = this->code_table["l"]; Flist list = this->Rparse_list(); operand.address = list.address; operand.index = list.index; operand.field = list.field; } else if (this->Ris_string()) { operand.type = this->code_table["s"]; operand.string = this->Rparse_string(); } else if (this->Ris_num_placeholder()) { operand.type = this->code_table["n"]; operand.num_placeholder = this->Rparse_token(); } else if (this->Ris_addr_placeholder()) { operand.type = this->code_table["a"]; operand.addr_placeholder = this->Rparse_addr_placeholder(); } else if (this->Ris_field_placeholder()) { operand.type = this->code_table["f"]; std::vector<std::string> tokens = this->Rparse_field_placeholder(); operand.addr_placeholder = tokens[0]; operand.field = tokens[1]; } else if (this->Ris_list_placeholder()) { operand.type = this.code_table["l"]; std::vector<std::string> tokens = this->Rparse_list_placeholder(); operand.addr_placeholder = tokens[0]; operand.index_placeholder = tokens[1]; operand.field = tokens[2]; } else { this->Rgenerate_error("Operand is invalid. (" + this->Rpeek_token().token + ")"); } return operand; } Fcondition Cclsh::Rparse_condition(Fblock& block) { Fcondition condition; condition.left = 0; condition.right = 0; condition.test = 0; // The expression is stored in the expression list. std::vector<Foperand> left_exp = this->Rparse_expression(); block.expressions.push_back(left_exp); condition.left = block.expressions.size() - 1; // Just point to expression. std::string test = this->Rparse_test(); condition.test = this->code_table[test]; std::vector<Foperand> right_exp = this->Rparse_expression(); block.expressions.push_back(right_exp); condition.right = block.expressions.size() - 1; return condition; } std::string Cclsh::Rparse_test() { Ftoken token = this->Rparse_token(); std::string test = ""; if ((token.token == "eq") || (token.token == "ne") || (token.token == "lt") || (token.token == "gt") || (token.token == "le") || (token.token == "ge")) { test = token.token; } else { this->Rgenerate_error(token.token + " is not a valid test."); } return test; } std::vector<Fcondition> Cclsh::Rparse_conditional(Fblock& block) { std::vector<Fcondition> conditional; Fcondition condition = this->Rparse_condition(block); conditional.push_back(condition); while (this->Ris_logic()) { Ftoken logic = this->Rparse_token(); Fcondition logic_code; logic_code.logic = this->code_table[logic.token]; conditional.push_back(logic_code); condition = this->Rparse_condition(block); conditional.push_back(condition); } return conditional; } void Cclsh::Rparse_command() { if (this->prgm_counter < this->memory_size) { Ftoken code = this->Rparse_token(); if (code.token == "remark") { // Comment // Parse all the way to end. Ftoken end_tok = this->Rpeek_token(); while (end_tok.token != "end") { this->Rparse_token(); // Remove comment token. end_tok = this->Rpeek_token(); } // Remove end command. this->Rparse_token(); } else if (code.token == "define") { // define <name> as <number> Ftoken name = this->Rparse_token(); this->Rparse_keyword("as"); int value = this->Rparse_number(); this->symtab[name.token] = value; } else if (code.token == "label") { // label <name> Ftoken name = this->Rparse_token(); this->symtab[name.token] = this->prgm_counter; // Update with current address. } else if (code.token == "var") { // var <name> Ftoken name = this->Rparse_token(); this->symtab[name.token] = this->prgm_counter++; // Skip one block. } else if (code.token == "list") { // list <name> alloc <blocks> Ftoken name = this->Rparse_token(); this->symtab[name.token] = this->prgm_counter; this->Rparse_keyword("alloc"); int count = this->Rparse_number(); // Allocate free blocks for the list. this->prgm_counter += count; } else { // Possible commands. if (this->parse_table.find(code.token) != this->parse_table.end()) { Fparse_obj command = this->parse_table[code.token]; Fblock block = this->memory[this->prgm_counter++]; // Clear out the block. this->Rclear_block(block); // Assign block code. block.code = command.code; if (command.pattern.length() > 0) { std::vector<std::string> entries = this->Rsplit_line(command.pattern); int entry_count = entries.size(); for (int entry_index = 0; entry_index < entry_count; entry_index++) { std::string entry = entries[entry_index]; if (entry == "<c>") { block.conditional = this->Rparse_conditional(block); } else if (entry == "<e>") { block.expressions.push_back(this->Rparse_expression()); } else if (entry == "<s>") { block.strings.push_back(this->Rparse_string()); } else { // This will be treated as keyword. this->Rparse_keyword(entry); } } } // Record debug info. this.debug_symbols.push_back(code.token); } else { this->Rgenerate_error("Invalid command " + code.token + "."); } } } else { // Should probably not be called. this->Rgenerate_error("Program too big for memory."); } }
  15. C-Lesh - My Video Game Programming Language

    Here is my C-Lesh compiler/interpreter class: namespace codeloader { struct Foperand { std::string string; int number; int address; int index; std::string field; int type; int code; std::string num_placeholder; std::string addr_placeholder; std::string index_placeholder; }; struct Fcondition { int left; int test; int right; int logic; }; struct Fvalue { std::string string; int number; int type; }; struct Fblock { int code; std::vector< std::vector<Foperand> > expressions; std::vector<Fcondition> conditional; std::map<std::string, int> fields; Fvalue value; std::vector<std::string> strings; }; struct Ftoken { std::string token; int line_no; std::string line; }; struct Fparse_obj { int code; std::string pattern; }; struct Ffield { std::string name; int value; std::string vplaceholder; }; struct Flist { int address; int index; std::string field; std::string addr_placeholder; std::string index_placeholder; }; class Cutility { public: std::vector<std::string> Rsplit_file(std::string name); std::vector<std::string> Rsplit_line(std::string line); std::string Rreplace_token(std::string token, std::string replacement, std::string line); std::string Rreplace_all(std::string token, std::string replacement, std::string line); std::vector<std::string> Rsplit_string(std::string token, std::string string); bool Ris_identifier(std::string token); bool Ris_positive_number(std::string token); std::string Rto_string(int number); }; class Cclsh: public Cutility { public: enum clsh_defaults { MAX_CYCLES = 1000000 // To prevent infinite loops. }; std::map<std::string, Fvalue> symtab; Fblock* memory; int memory_size; std::stack<int> stack; int prgm_counter; std::vector<Ftoken> tokens; std::map<std::string, Fparse_obj> parse_table; std::map<std::string, int> code_table; std::vector<std::string> debug_symbols; Ftoken last_token; }; There are lot's of types but this is my representation of the interpreter/compiler. There is no parse tree stored nor is there byte code. C-Lesh's memory is block formatted.
  16. C-Lesh - My Video Game Programming Language

    It will be free and open source. I would love to share it even if no one uses it but me!
  17. +++++++UPDATE++++++++ We're looking for a rigger! Are you a rigger? Is your mother a rigger? We need some friggin' riggin' done. #letsrig
  18. I don't wanna make wild guesses about the transformations, what I really want to do is to boost somehow the translation part very much... When I boost that transformation, every other transformation also gets boosted that way, so I get a uniform scaling to every mesh...
  19. I need to pass 24 vec3, to a shader However glUniform3fv requires an array of GLfloat, Since my vec3 structure looks like: struct vec3{float x; float y; float z;}; Can i just pass that safely, to float parray[24 * 3] using memcpy? Dont bother about GLfloat and float sizes i just gave pseudocode i just need to know if sent array will have first vertex at position 0 second one will be in pos 3, thrid one in 6 and so on, cause im not sure when even float and GLfloat match the sizes i could get some extra bytes anywhere, And another question is how then i define an uniform in shader? uniform vec3 box[24];. ? Cheers
  20. Hi Everyone!!

    Hi, Welcome to gamedev, i just watch the video and it looks really fun.
  21. Multiplayer Pac-man Challenge

    Thanks. It takes time. Good luck with your pacman game! Thanks. You can test mobile with browser when you activate "toggle devide toolbar". Multiplayer works on mobile "vs ai". "player vs player" and "team" modes require keys atm (arrows for Player#1 and WASD for Player#2). The simple fix is to find the closest pacman and apply direction to it. Will update it. I have played Pacmanjs in my mobile phone works fine. But it's not hitting 60fps in mobile phone constantly as in my laptop. I have to speed up things. I forgot to mention that in team game, the game continues as long as there is lives left for any team member. In starting screen you can see pacman-ai playing itself. As I didn't want a static screen with just buttons.
  22. Order of The Jarl

  23. First of all change these -e^5 to 0 cause they are really close to zero then make a translation matrix that will move your building that hundred meters away then compare
  24. So the question is just about why std::map isn't working with your key type? I'd try a much simpler example than your fbx code, such as: FBXVTX a{{1,2,3},{4,5},{6,7,8}}; FBXVTX b = a; ASSERT( (a<b) == false && (b<a) == false );
  25. I don't understand why the mesh is driven by this matrix. There are a couple of building meshes that are all driven by these strange-looking matrices. If not driven by anything, the pivot of all meshes are at 0,0,0 and there are, of course, some offsets from the pivot. However, they are all messed up altogether, if I transform the mesh eventually, everything is still not going to the right place. Say the building is 200m x 200m, when multiplied by it, it just moves up a little bit. In my thoughts, I think the matrix should move the mesh a couple of hundreds meters at least. The original mesh vertex coordinates are small anyways. If I transform the vertexes by this tiny matrix first and scale up a lot? What can I do? Dumping Mesh68 Matrix 0.409432 0.346114 -0.844139 0 2.17292e-005 0.925241 0.379379 0 0.912341 -0.155348 0.378816 0 -6.80175e-006 4.49703e-005 -0.000113301 1
  26. Yeah I would assume that wasted RAM is the only downside (and load times). In my recent test on a game that's already shipped using D3D11 (internal D3D12 port), it took about 5 seconds to create "base" PSOs for each permutation (where "base" is a default raster/blend/depth-stencil, but all other data permuted to cover all possible uses as declared by the game's metadata). That's a long time to block a main thread for initially - you'd probably want to do it separately for your main menu shaders to get into game quickly, and then do the rest afterwards. We actually support creating PSOs on demand (a thread safe hashmap is searched for a PSO when creating a drawable, and failures result in the requested PSO being compiled and added to the map) so all we do is spin up a background thread that starts doing this many-seconds worth of work concurrently. During that time we might get 'cache misses' where a PSO lookup in the hash table fails and one of the main threads has to create it on demand, but after the background thread completes, the cache should be fully warmed up. The other cost is simply managerial - how do you know all your PSOs at load time? We force shader authors to declare which render target formats, MSAA modes, primitive topologies, index buffer formats (for the IB strip cut value) and vertex buffer layouts their shaders are compatible with. This is a pain for shader authors, but does give you a lot of knowledge about PSOS requirements at build time. We also use this data in the other rendering back-ends in development builds (e.g. D3D11) and assert if a shader is used in a way that wasn't declared by its author.
  27. C# 10,000 PNG files!

    Hi Kylotan. I did briefly look around for options, ideally I’d need I) a front-end to allow me to easily load in new PNGs to the archive, and II) hopefully a NuGet package with functions which would allow me to pull the data through at runtime. Brain suggested PhysicsFS which sounded like a good alternative but unfortunately I couldn’t get it to work in VS2015 and the package seems a bit archaic (read C++). I did consider writing the above image packer in VBA but if anyone can think of alternatives I’d love to hear them.
  1. Load more activity
  • Advertisement