30 #define HANDLE_TO_MATERIAL_MAP(handle) (reinterpret_cast<C4MaterialMap*>(handle))
31 #define HANDLE_TO_TEXTURE_MAP(handle) (reinterpret_cast<C4TextureMap*>(handle))
32 #define HANDLE_TO_GROUP(handle) (reinterpret_cast<C4Group*>(handle))
43 if(node->
Next)
return HasAlgoScript(node->
Next);
83 libmap->
id =
C4ID(std::string(
"Library_Map"));
86 FakeSkeletonLoader loader;
89 fprintf(stderr,
"Failed to load Library_Map script\n");
113 landscape.
MapWdt.
Set(map_width, 0, map_width, map_width);
114 landscape.
MapHgt.
Set(map_height, 0, map_height, map_height);
127 throw std::runtime_error(parse_error);
137 std::unique_ptr<CSurface8> out_ptr_fg, out_ptr_bg;
143 &out_ptr_fg, &out_ptr_bg);
148 throw std::runtime_error(runtime_error);
151 throw std::runtime_error(
"No InitializeMap() function present in the script, or it returns false");
154 handle->
width = out_ptr_fg->Wdt;
155 handle->height = out_ptr_fg->Hgt;
156 handle->rowstride = out_ptr_fg->Wdt;
157 handle->error_message =
nullptr;
158 handle->data = out_ptr_fg->Bits;
159 out_ptr_fg->ReleaseBuffer();
163 catch(
const std::exception& ex)
168 handle->error_message.Copy(ex.what());
169 handle->data =
nullptr;
181 landscape.
MapWdt.
Set(map_width, 0, map_width, map_width);
182 landscape.
MapHgt.
Set(map_height, 0, map_height, map_height);
196 if(!map)
throw std::runtime_error(
"No map definition in source file");
200 if(HasAlgoScript(mapgen.
GetMap(
nullptr)))
208 if(script_path ==
nullptr)
209 throw std::runtime_error(
"For algo=script overlays to work, save the file first at the location of the Script.c file");
211 gchar* dirname = g_path_get_dirname(script_path);
212 gchar* basename = g_path_get_basename(script_path);
215 if(!File.
Open(dirname))
220 throw std::runtime_error(error_msg.
getData());
230 throw std::runtime_error(error_msg.
getData());
240 throw std::runtime_error(parse_error);
250 int32_t out_width, out_height;
251 BYTE* array = mapgen.
RenderBuf(
nullptr, out_width, out_height);
258 throw std::runtime_error(runtime_error);
262 handle->
width = map_width;
263 handle->height = map_height;
264 handle->rowstride = out_width;
265 handle->error_message =
nullptr;
266 handle->data = array;
274 handle->error_message.Copy(err.
Msg);
275 handle->data =
nullptr;
278 catch(
const std::exception& ex)
283 handle->error_message.Copy(ex.what());
284 handle->data =
nullptr;
291 delete[] mapgen->data;
297 return reinterpret_cast<unsigned char*
>(mapgen->data);
302 assert(mapgen->data !=
nullptr);
303 return mapgen->width;
308 assert(mapgen->data !=
nullptr);
309 return mapgen->height;
314 assert(mapgen->data !=
nullptr);
315 return mapgen->rowstride;
320 if(mapgen->data !=
nullptr)
322 return mapgen->error_message.getData();
void InitCoreFunctionMap(C4AulScriptEngine *pEngine)
const DWORD C4D_Load_Script
const int32_t C4D_StaticBack
C4AulScriptEngine ScriptEngine
C4MapScriptHost MapScript
C4GameScriptHost GameScript
StdStrBuf FormatString(const char *szFmt,...)
void Link(C4DefList *rDefs)
bool Load(C4Group &hGroup, StdMeshSkeletonLoader &loader, DWORD dwLoadWhat, const char *szLanguage, class C4SoundSystem *pSoundSystem=nullptr, C4DefGraphicsPtrBackup *gfx_backup=nullptr)
bool Add(C4Def *ndef, bool fOverload)
bool Load(C4Group &, const char *, const char *, C4LangStringTable *) override
bool LoadData(const char *, const char *, C4LangStringTable *) override
bool FindNextEntry(const char *wildcard, StdStrBuf *filename=nullptr, size_t *size=nullptr, bool start_at_filename=false)
void ResetSearch(bool reload_contents=false)
bool Open(const char *group_name, bool do_create=false)
const char * ToString() const
virtual C4MCNodeType Type()
C4MCAlgorithm * GetAlgo(const char *szName)
C4MCAlgorithm * Algorithm
void ParseMemFile(const char *szScript, const char *szFilename)
BYTE * RenderBuf(const char *szMapName, int32_t &sfcWdt, int32_t &sfcHgt)
C4MCMap * GetMap(const char *szMapName)
bool InitializeMap(C4SLandscape *pLandscape, C4TextureMap *pTexMap, C4MaterialMap *pMatMap, uint32_t iPlayerCount, std::unique_ptr< CSurface8 > *pmap_fg_surface, std::unique_ptr< CSurface8 > *pmap_bg_surface)
bool LoadData(const char *, const char *, C4LangStringTable *) override
void InitFunctionMap(C4AulScriptEngine *pEngine)
virtual void SetName(const char *NewName=nullptr)
void Set(int32_t std=0, int32_t rnd=0, int32_t min=0, int32_t max=100)
virtual StdMeshSkeleton * GetSkeletonByDefinition(const char *definition) const =0
const char * getData() const
typedefG_BEGIN_DECLS struct _C4GroupHandle C4GroupHandle
unsigned int c4_log_handle_get_n_log_messages()
const char * c4_log_handle_get_first_log_message()
void c4_log_handle_clear()
typedefG_BEGIN_DECLS struct _C4MapgenHandle C4MapgenHandle
unsigned int c4_mapgen_handle_get_height(C4MapgenHandle *mapgen)
void c4_mapgen_handle_init_script_engine()
const char * c4_mapgen_handle_get_error(C4MapgenHandle *mapgen)
const unsigned char * c4_mapgen_handle_get_map(C4MapgenHandle *mapgen)
#define HANDLE_TO_MATERIAL_MAP(handle)
void c4_mapgen_handle_deinit_script_engine()
C4MapgenHandle * c4_mapgen_handle_new_script(const char *filename, const char *source, C4MaterialMapHandle *material_map, C4TextureMapHandle *texture_map, unsigned int map_width, unsigned int map_height)
unsigned int c4_mapgen_handle_get_width(C4MapgenHandle *mapgen)
void c4_mapgen_handle_free(C4MapgenHandle *mapgen)
StdCopyStrBuf error_message
C4MapgenHandle * c4_mapgen_handle_new(const char *filename, const char *source, const char *script_path, C4MaterialMapHandle *material_map, C4TextureMapHandle *texture_map, unsigned int map_width, unsigned int map_height)
#define HANDLE_TO_GROUP(handle)
#define HANDLE_TO_TEXTURE_MAP(handle)
void c4_mapgen_handle_set_map_library(C4GroupHandle *group_handle)
unsigned int c4_mapgen_handle_get_rowstride(C4MapgenHandle *mapgen)
struct _C4MaterialMapHandle C4MaterialMapHandle
typedefG_BEGIN_DECLS struct _C4TextureMapHandle C4TextureMapHandle