Rewrite automatic trim placement to use the generalized attributes of the terrain spaces
This commit is contained in:
@@ -761,17 +761,6 @@ bool is_nature(short x, short y, unsigned short ground_t) {
|
||||
return ground_t == univ.scenario.ter_types[ter_type].ground_type;
|
||||
}
|
||||
|
||||
ter_num_t get_ground_from_ter(ter_num_t ter){
|
||||
return get_ter_from_ground(univ.scenario.ter_types[ter].ground_type);
|
||||
}
|
||||
|
||||
ter_num_t get_ter_from_ground(unsigned char ground){
|
||||
for(int i = 0; i < 256; i++)
|
||||
if(univ.scenario.ter_types[i].ground_type == ground)
|
||||
return i;
|
||||
return 0;
|
||||
}
|
||||
|
||||
std::vector<location> forcecage_locs;
|
||||
|
||||
//mode ... if 1, don't place on screen after redoing
|
||||
@@ -904,7 +893,7 @@ void draw_terrain(short mode) {
|
||||
if(trim == eTrimType::WALKWAY){
|
||||
int trim = -1;
|
||||
unsigned short ground_t = univ.scenario.ter_types[spec_terrain].trim_ter;
|
||||
ter_num_t ground_ter = get_ter_from_ground(ground_t);
|
||||
ter_num_t ground_ter = univ.scenario.get_ter_from_ground(ground_t);
|
||||
if(!loc_off_act_area(where_draw)) {
|
||||
if(is_nature(where_draw.x - 1,where_draw.y,ground_t)){ // check left
|
||||
if(is_nature(where_draw.x,where_draw.y - 1,ground_t)){ // check up
|
||||
@@ -941,7 +930,7 @@ void draw_terrain(short mode) {
|
||||
}else if(spec_terrain == 65535) {
|
||||
draw_one_terrain_spot(q,r,-1);
|
||||
}else{
|
||||
current_ground = get_ground_from_ter(spec_terrain);
|
||||
current_ground = univ.scenario.get_ground_from_ter(spec_terrain);
|
||||
draw_one_terrain_spot(q,r,spec_terrain);
|
||||
}
|
||||
}
|
||||
|
@@ -58,9 +58,6 @@ void put_dialog_graphic(short graphic_num,short spec_g,rectangle draw_rect);
|
||||
void draw_startup_stats();
|
||||
void draw_trim(short q,short r,short which_trim,ter_num_t ground_ter);
|
||||
|
||||
ter_num_t get_ground_from_ter(ter_num_t ter);
|
||||
ter_num_t get_ter_from_ground(unsigned char ground);
|
||||
|
||||
void draw_startup_anim(bool advance);
|
||||
|
||||
#endif
|
||||
|
@@ -191,3 +191,27 @@ std::string cScenario::format_ed_version() {
|
||||
std::string cScenario::format_scen_version() {
|
||||
return format_version(format.ver);
|
||||
}
|
||||
|
||||
ter_num_t cScenario::get_ground_from_ter(ter_num_t ter){
|
||||
return get_ter_from_ground(ter_types[ter].ground_type);
|
||||
}
|
||||
|
||||
ter_num_t cScenario::get_ter_from_ground(unsigned short ground){
|
||||
for(int i = 0; i < ter_types.size(); i++)
|
||||
if(ter_types[i].ground_type == ground)
|
||||
return i;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ter_num_t cScenario::get_trim_terrain(unsigned short ground, unsigned short trim_g, eTrimType trim) {
|
||||
for(int i = 0; i < ter_types.size(); i++) {
|
||||
if(ter_types[i].ground_type != ground)
|
||||
continue;
|
||||
if(ter_types[i].trim_ter != trim_g)
|
||||
continue;
|
||||
if(ter_types[i].trim_type != trim)
|
||||
continue;
|
||||
return i;
|
||||
}
|
||||
return 90;
|
||||
}
|
||||
|
@@ -108,6 +108,10 @@ public:
|
||||
std::string format_scen_version();
|
||||
std::string format_ed_version();
|
||||
|
||||
ter_num_t get_ground_from_ter(ter_num_t ter);
|
||||
ter_num_t get_ter_from_ground(unsigned short ground);
|
||||
ter_num_t get_trim_terrain(unsigned short ground, unsigned short trim_g, eTrimType trim);
|
||||
|
||||
cScenario& operator=(cScenario&& other);
|
||||
cScenario(cScenario&) = delete;
|
||||
explicit cScenario(bool init_strings = false);
|
||||
|
@@ -68,22 +68,22 @@ void cTerrain::append(legacy::terrain_type_type& old){
|
||||
0, 0, 0, 0, 0, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,0, 0,
|
||||
2, 3, 4, 5, 6, 7, 8, 9, 10,11, 12,13,0, 0, 2, 3, 4, 5, 6, 7,
|
||||
8, 9, 10,11,12,13,0, 2, 3, 4, 5, 6, 7, 8, 9, 10,11,12,13,0,
|
||||
0, 8, 0, 4, 6, 0, 2, 0, 0, 0, 0, 0, 0, 0, 14,0, 0, 0, 0, 0,
|
||||
0,18, 0,18,18, 0,18, 0, 0, 0, 0, 0, 0, 0, 14,0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 18,18,18, 18,18,6, 4, 2, 8, 18,18,0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 18,18,18, 18,18,18,18,18,18,18,18,0, 0,
|
||||
18,18,15,15,15,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,16,0, 16,16,
|
||||
16,16,16,16,16,16,0, 0, 0, 0, 0, 0, 18,0, 0, 0, 18,18,18,18,
|
||||
2, 4, 6, 8, 18,18,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
18,18,18,18,18,18,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
14,14,14,14,14,17,18,0, 0, 0, 0, 0, 0, 0,
|
||||
};
|
||||
static const short trim_ters[274] = {
|
||||
99,99,99,99,99,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 99,99,
|
||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 99,99,1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 99,1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 99,
|
||||
99,99,99,99,99,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4,
|
||||
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 1, 1, 1, 1, 1, 1, 1, 1,
|
||||
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 99,
|
||||
99,1, 99,1, 1, 99,1, 99,99,99, 99,99,99,99,99,99,99,99,99,99,
|
||||
99,99,99,99,99,99,99,99,99,99, 99,99,99,99,99,99,99,99,99,99,
|
||||
99,99,99,99,99,99,99,99,99,99, 99,99,99,99,99,99,99,99,99,99,
|
||||
@@ -115,7 +115,7 @@ void cTerrain::append(legacy::terrain_type_type& old){
|
||||
trim_type = eTrimType::NONE;
|
||||
trim_ter = 0;
|
||||
}
|
||||
if(trim_ter == 99) trim_ter = 0;
|
||||
if(trim_ter == 99) trim_ter = -1;
|
||||
flag1 = old.flag1;
|
||||
flag2 = old.flag2;
|
||||
switch(old.special){
|
||||
|
@@ -38,7 +38,7 @@ public:
|
||||
unsigned int obj_num = 0; // ditto (formerly res1)
|
||||
unsigned int ground_type; // ditto (formerly res2)
|
||||
eTrimType trim_type; // ditto, mostly (formerly res3)
|
||||
unsigned short trim_ter; // ditto
|
||||
long trim_ter; // ditto
|
||||
unsigned short combat_arena;
|
||||
location obj_pos; // editor use only
|
||||
location obj_size; // editor use only
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -10,29 +10,12 @@ void get_town_info();
|
||||
void get_sign_resource();
|
||||
void set_info_strings();
|
||||
cTown::cItem edit_item(cTown::cItem item);
|
||||
bool is_wall(short i,short j);
|
||||
bool is_correctable_wall(short i,short j);
|
||||
bool is_mountain(short i,short j);
|
||||
bool is_hill(short i,short j);
|
||||
bool is_hill_or_mountain(short i,short j);
|
||||
bool is_water(short i,short j);
|
||||
bool is_correctable_water(short i,short j);
|
||||
void shy_change_circle_terrain(location center,short radius,ter_num_t terrain_type,short probability);
|
||||
void change_circle_terrain(location center,short radius,ter_num_t terrain_type,short probability);
|
||||
void change_rect_terrain(rectangle r,ter_num_t terrain_type,short probability,bool hollow);
|
||||
void frill_up_terrain();
|
||||
void unfrill_terrain();
|
||||
void set_terrain(location l,ter_num_t terrain_type);
|
||||
bool fix_rubble(location l);
|
||||
bool fix_cave(location l);
|
||||
bool fix_mountain(location l);
|
||||
bool fix_hill(location l);
|
||||
bool fix_water(location l);
|
||||
bool out_fix_rubble(location l);
|
||||
bool out_fix_cave(location l);
|
||||
bool out_fix_mountain(location l);
|
||||
bool out_fix_hill(location l);
|
||||
bool out_fix_water(location l);
|
||||
void adjust_space(location l);
|
||||
bool is_lava(short x,short y);
|
||||
ter_num_t coord_to_ter(short x,short y);
|
||||
@@ -51,7 +34,6 @@ void start_string_editing(short mode,short just_redo_text);
|
||||
void start_special_editing(short mode,short just_redo_text);
|
||||
void town_entry(location spot_hit);
|
||||
void start_dialogue_editing(short restoring);
|
||||
bool is_erasable_water(short i,short j);
|
||||
void update_mouse_spot(location the_point);
|
||||
|
||||
bool monst_on_space(location loc,short m_num);
|
||||
|
Reference in New Issue
Block a user