• 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.
Sign in to follow this  
Followers 0
ziomau

Implementation of simple (static) array/strings

3 posts in this topic

Dear all,

I need to run the scripts in a real time environment where there is a limited implementation of the standard C++ library, and particularly a very poor stream class.

This causes a lot of errors when trying to include the add-on implementation of the string factory and class.

 

I have two choices to get out of this problem:

1) Implement a different string factory not using streams

2) Implement a different string native object

 

As for point 1) I know what to do, and for sure this is the quickest and easiest solution, but let me investigate further the second option, that for me is more interesting because it may solve a different category of problems too (see later).

 

The basic question is: how much is complex to add to the language a simple static "C" type array?

In order to have something like:

int foo[20];

char buf[100];

SomeDefinedType[3];

... and possibly ...

double Matrix[3][3];

 

This addition whould automatically solve my string problem too, by using char arrays, and all standard "C" routine strcat, strcpy, strstr, ... by adding them as external calls or even implementing in a script module.

 

Having the "C" array, can solve my other problem too.

Sometimes I have some data structures, that I want to map and exchange between the script enviromìnment and the host interpreter. These structure come from far ago and I cannot easily change them without breaking a lot of code.

some of those structures are defined like:

struct msg {

  int Id;

  int len;

  char data[24];

};

 

As it is, I cannot exchange this data type, other than copying over one type to the other. I cannot even include a common definition file to have it defined into the two environment, because the above structure whould not compile in as.

 

Enough for the description, now the real question:

I am willing to help adding this feature, but I need some help to start.

Where I need to start looking first to add this thing to the compiler?

Any suggestion? Disclamers?

 

Thanks a lot.

Mau.

 

0

Share this post


Link to post
Share on other sites

The biggest obstacle with adding "simple" static arrays in AngelScript is the memory model. In C++ the memory model is totally manual, meaning the programmer is responsible for making sure the array is allocated correctly with the appropriate size, and deciding whether to use on-stack or on-heap memory. Another problem is that in C++ the static arrays are usually passed around as simple pointers, with no information about the actual size of the array.

 

The way that I've in mind to implement support for static arrays in AngelScript is to 'embed' the size of the array in the type information. This means that the array cannot have an undefined size, like it can in C++, but at least I will be able to support passing arrays between AngelScript and C++ as long as the registered interface defines the required size. It should be possible to do an implicit cast to a smaller array type from any starting element, as long as the larger array has enough elements after the starting element to contain the smaller array. The static arrays would obviously have to be defined as value types, i.e. no reference counting and no dynamic creation in the script language.

 

 

 

In response to your other problem:

 

Structures like this

 

struct msg {
  int Id;
  int len;
  char data[24];
};

 

can be registered with AngelScript by using property accessors to expose the member array.

0

Share this post


Link to post
Share on other sites

Thanks a lot for your answer, and thanks for pointing me to the array access function too.

 

The problem with access functions is that expressions using array elements becomes soon unreadable.

Even simple expressions like:

msg m;

int aWord = m.data[0]  | (m.data[1] << 8)

becomes:

msg m;

int aWord = m.get_array(0) | (m.get_array(1) << 8);

But anyway, ... we can live with it.

 

Regards.

Mau.

0

Share this post


Link to post
Share on other sites

If your access methods is declared as 'type get_array(int)' and 'set_array(int, type)', then you'll be able to write the script like this:

 

msg m;
m.array[0] = 42;
int aWord = m.array[0];

 

The compiler will internally translate it to the following, but the writer doesn't need to worry about it:

 

msg m;
m.set_array(0, 42);
int aWord = m.get_array(0);

 

The only drawback with accessors is that you (currently) can't both read and update the value in the same operation, so compound assignment, e.g. += or increment operators ++, won't work.

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0