• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.


  • Content count

  • Joined

  • Last visited

Community Reputation

291 Neutral

About theoutfield

  • Rank
  1.   I think AngelScript is awesome and it's plenty fast for a lot applications.  I've done some testing versus Python in the past and it was much faster.  I think one of the best things and maybe overlooked feature of AngelScript is how easy it is to integrate into an application.  I've only used a few scripting engines but AngelScript is by far the easiest way to add scripting to a C++ application.   Two thumbs up and thanks for all your hard work!
  2. I use AngelScript as part of a real time control system as well.  I've never heard of Small, but I can say that AngelScript has been very stable and works well in a real time environment.  I have a simulator for the application on CodeProject that you can download  http://www.codeproject.com/Articles/755009/Open-Dyno-Real-Time-Control-System maybe you can see how it compares to your current setup.  I run an entire test cell (large machine) with a code execution time of about 0.2- 0.4ms.  It's easier to measure these values on Linux than Windows though.  I'm not sure what the support is like for Small.  Andreas has been an excellent help over the years and continues to add new features to the language.     
  3. Thanks Andreas!   I'll try this out next week.
  4. The extra comma's were typos.  If you execute the following the AngelScript code:   double[] Speed = {     1000,     2000,     3000,     };   Print("Length of Speed = " + Speed.length() + " Speed[3]= " + Speed[3]);     You will get a length of 4 and a random number for index 3.  This is what I got on my machine.  The value is just a random number.   2014-10-04 4:01:05 PM Length of Speed = 4 Speed[3]= 9.88131e-324   I wish the array would default to a size of 3 and ignore the last value.   This is also valid code and will result in a length of 7.   double[] Speed = {     ,     ,     1000,     ,     2000,     3000,     };   From the AngelScript user guide it indicates this is valid code.  I jwould just like the option for a warning or error for my particular case.  
  5. I actually use AngelScript for a real time engine test cell controller.  One of the users of my application created an array of engine speeds like so   EngineSpeed[] ={   1000, 2000, 3000, 4000, 5000, 6000, }   The test sequence that was written uses the array size function to loop through each speed.  The uninitialized element had a value of  x^219 (thankfully engines can't actually go that fast).  There should have been a check to see that the speed was within limits but the uninitialized value could have been any valid engine speed as well.  I was just looking for a way to issue a warning or error as an additional check to let the user know they made a mistake.
  6. I know it's valid syntax to declare an array like the following   double[] something = { 1.1, 2,2, 2,3, }   Is it possible to generate a warning or error for the uninitialized value after the trailing comma?
  7. Thanks.
  8. Andreas,   Can you elaborate a little bit more about the registration of arrays.  Maybe even give a little example.  Does this change anything with the array addon?  Do you still need to register the addon to use arrays?   Thanks, Tony
  9. ThyReaper,   Those are some pretty good results.  I am going to try this out when a I get a chance.  Are there any things to watch out for, or is it pretty much plug and play?  From the brief docs on Github it seems like its just a matter of registering the JIT compiler with the script engine and then business as usual.  Great job, and thanks for the contribution!   Tony 
  10. The forum must not like direct links.  Are you using the JIT compiler from here .  If so could you post some results or a comparison?  I haven't tried the JIT compiler.  Angelscript has been fast enough for anything I've tried to do.
  11. Are you using the JIT compiler from here
  12. I think Andreas is referring to the Angelscript index operator [].    If you look at the registration for the ScriptArray addon you will find these methods registered that have the opIndex type.  These will call the class functions ScriptArrayAt_xxx().   [source] r = engine->RegisterObjectMethod("array", "T &opIndex(uint)", asFUNCTION(ScriptArrayAt_Generic), asCALL_GENERIC); assert( r >= 0 ); r = engine->RegisterObjectMethod("array", "const T &opIndex(uint) const", asFUNCTION(ScriptArrayAt_Generic), asCALL_GENERIC); assert( r >= 0 ); [/source]   I think you search in the file as_compiler.cpp for the text "opIndex" maybe you could modify the functions to do the direct memory access as Andreas indicated.    Also from the documentation you will find this which might help you out as well. Index operators op opfunc [] opIndex When the expression a[i] is compiled, the compiler will rewrite it as a.opIndex(i) and compile that instead. The index operator can also be formed similarly to property accessors. The get accessor should then be named get_opIndex and have one parameter for the indexing. The set accessor should be named set_opIndex and have two parameters, the first is for the indexing, and the second for the new value. class MyObj { float get_opIndex(int idx) const { return 0; } void set_opIndex(int idx, float value) { } } When the expression a[i] is used to retrieve the value, the compiler will rewrite it as a.get_opIndex(i). When the expression is used to set the value, the compiler will rewrite it as a.set_opIndex(i, expr).   Tony
  13. I'm not sure if this will be of any use to you.  I wanted to deal with some structures that would be defined at runtime.  Below is an example of what I did    A real structure that is defined at compile time like this:   struct foo {     int a;     double b;     int c; };   and used like this in C code:   foo bar; bar.a = 1; bar.b = 1.23; bar.c = 2;     The same structure could be stored in a char array of size 16  = (4 + 8 + 4):   char bar [16];   which like the struct could be used in C code like this:    int* a  = ( (int*)(bar ) ); *a = 1;   double* b= ( (double*)(bar +4 ) ); *b = 1.23;   int* c = ( (int*)(bar +12 ) ); *c = 2;   You can register a value type "foo" with the script engine like this   //Define the type to the script engine r = engine->RegisterObjectType("foo", 16, asOBJ_VALUE | asOBJ_POD); assert( r >= 0 );              <- the 16 is the size of our dynamic structure r = engine->RegisterObjectProperty("foo", "int a", 0); assert( r >= 0 );                                             <- 0 is the offset to a normally this is asoffsetof(foo,a) r = engine->RegisterObjectProperty("foo", "double b", 4); assert( r >= 0 );                                       <- 4 is the offset to b r = engine->RegisterObjectProperty("foo", "int c", 12 ); assert( r >= 0 );                                          <- 12 is the offset to c   //Now I register a global variable in the script and point it to the bar char array r = engine->RegisterGlobalProperty("foo bar", bar); assert( r >= 0 );   This is then used in the script like this   Print("bar.a =" + bar.a + "\n"); Print("bar.b =" + bar.b + "\n"); Print("bar.c =" + bar.c + "\n");   Maybe you could use one property as the index, size and type and then copy the requested indexed value value into the another property in C++ code?  Because it's a char array you can tell AngelScript that it is whatever type you want.  This doesn't work with normal array syntax but it might be faster since it is just offsetting a pointer (it might be slower also I don't know).  There might be some other tricks you can play with this to get it to work.  It is unsafe but it worked for my application of a runtime defined structure.   If this doesn't work there is a project at CERN that is being developed for exactly what you are trying to accomplish.  They have an interactive C++ interpreter that uses the LLVM.  The project is called Cling and can be found here http://root.cern.ch/drupal/content/cling .   Tony
  14. Andreas,   If you have any interest in Beaglebone Black I have a spare one that I can give you.  This might help out with some ARM testing in the future.  I've noticed a few people including myself that are using Angelscript on microcontrollers recently.  I compiled and ran Angelscript on the Udoo board and had some issues with native calling convention.  I haven't had the time to go back and try it again though.   Cheers, Tony