Page 1 of 1 [ 6 posts ] 

beneficii
Veteran
Veteran

User avatar

Joined: 10 May 2005
Age: 42
Gender: Female
Posts: 7,245

07 Aug 2014, 12:53 am

I am daunted by the chores before me from my 3 interests:

Creating a complete SMB2J Disassembly (go to http://sm2.beneficii.net/ for more info), which I've been working on a lot, but it is repetitive. Thankfully, the SMB Disassembly by Doppelganger is very helpful in this disassembly.

Re-creating the SMB3 Map Editor with wxWidgets and make the code much easier to maintain and for someone to edit if they need to. Unfortunately, much of my knowledge has been lost and I have to reread my old code to figure it out.

Creating something that can allow me flexibility in drawing birds-eye view of roads, with all the changes in size (like addition/removal of a lane), with intersections, on and offramps, curving, etc., while maintaining a cross-section.

I am daunted by the amount of work it takes to engage in these activities.


_________________
"You have a responsibility to consider all sides of a problem and a responsibility to make a judgment and a responsibility to care for all involved." --Ian Danskin


beneficii
Veteran
Veteran

User avatar

Joined: 10 May 2005
Age: 42
Gender: Female
Posts: 7,245

07 Aug 2014, 12:59 am

I keep talking to myself negatively, like in my father's voice, about how purposeless these all are. Just hack Super Mario World and have fun with that! Lunar Magic works like perfectly with it.

The road task though now looms large in my mind.


_________________
"You have a responsibility to consider all sides of a problem and a responsibility to make a judgment and a responsibility to care for all involved." --Ian Danskin


beneficii
Veteran
Veteran

User avatar

Joined: 10 May 2005
Age: 42
Gender: Female
Posts: 7,245

07 Aug 2014, 2:37 am

EDIT: Made crucial adjustment.

My brain gets foggy and tired as I work late into the night on my road project. Here, I read SVG paths, with some limitations (z not supported, multiple m's not supported, and arcs not supported):

Code:
void read_svg(wxString path, fill_path& fpaths) {
   bool not_started_flag = true, last_cubic = false, last_quad = false;
   for (std::size_t i = 0; i < path.Length; ++i) {
      switch (static_cast<char>(path[i])) {
      case 'M':
      case 'm':
      case 'V':
      case 'v':
      case 'H':
      case 'h':
      case 'L':
      case 'l':
      case 'q':
      case 'Q':
      case 't':
      case 'T':
      case 'c':
      case 'C':
      case 's':
      case 'S':
      case 'a':
      case 'A':
         path.insert(i + 1, " ");
      }
   }
   wxStringTokenizer tkn(path, ", \t\r\n", wxTOKEN_STRTOK);
   wxPoint2DDouble P0(0.0, 0.0);
   wxPoint2DDouble P1(0.0, 0.0);
   wxPoint2DDouble P2(0.0, 0.0);
   wxPoint2DDouble P3(0.0, 0.0);
   wxPoint2DDouble Q1(0.0, 0.0);
   wxPoint2DDouble Q2(0.0, 0.0);
   while (tkn.HasMoreTokens()) {
      bool rel = false;
      wxString get_tok = tkn.NextToken();
      switch (static_cast<char>(get_tok[0])) {
      case 'Z':  //z not supported
      case 'z':
         return;
      case 'M':
      case 'm':
         if (not_started_flag) {
            not_started_flag = false;
            tkn.NextToken().ToCDouble(&static_cast<double>(P0.m_x));
            tkn.NextToken().ToCDouble(&static_cast<double>(P0.m_y));
         }
         else return;  //multiple m's not supported
         break;
      case 'v':
         rel = true;
      case 'V':
         P3.m_x = P0.m_x;
         tkn.NextToken().ToCDouble(&static_cast<double>(P3.m_y));
         if (rel) {
            P3.m_y += P0.m_y;
         }
         P1 = P0;
         P2 = P3;
         fpaths.insert_line(P0, P3);
         P0 = P3;
         last_cubic = false;
         last_quad = false;
         break;
      case 'h':
         rel = true;
      case 'H':
         tkn.NextToken().ToCDouble(&static_cast<double>(P3.m_x));
         P3.m_y = P0.m_y;
         if (rel) {
            P3.m_x += P0.m_x;
         }
         P1 = P0;
         P2 = P3;
         fpaths.insert_line(P0, P3);
         P0 = P3;
         last_cubic = false;
         last_quad = false;
         break;
      case 'l':
         rel = true;
      case 'L':
         tkn.NextToken().ToCDouble(&static_cast<double>(P3.m_x));
         tkn.NextToken().ToCDouble(&static_cast<double>(P3.m_y));
         if (rel) {
            P3.m_x += P0.m_x;
            P3.m_y += P0.m_y;
         }
         P1 = P0;
         P2 = P3;
         fpaths.insert_line(P0, P3);
         P0 = P3;
         last_cubic = false;
         last_quad = false;
         break;
      case 'q':
         rel = true;
      case 'Q':
         tkn.NextToken().ToCDouble(&static_cast<double>(Q1.m_x));
         tkn.NextToken().ToCDouble(&static_cast<double>(Q1.m_y));
         tkn.NextToken().ToCDouble(&static_cast<double>(Q2.m_x));
         tkn.NextToken().ToCDouble(&static_cast<double>(Q2.m_y));
         if (rel) {
            Q1.m_x += P0.m_x;
            Q1.m_y += P0.m_y;
            Q2.m_x += P0.m_x;
            Q2.m_y += P0.m_y;
         }
         //degree elevation here
         P1.m_x = (P0.m_x + 2.0 * Q1.m_x) / 3.0;
         P1.m_y = (P0.m_y + 2.0 * Q1.m_y) / 3.0;
         P2.m_x = (2.0 * Q1.m_x + Q2.m_x) / 3.0;
         P2.m_y = (2.0 * Q1.m_y + Q2.m_y) / 3.0;
         P3.m_x = Q2.m_x;
         P3.m_y = Q2.m_y;
         fpaths.insert_path(P0, P1, P2, P3);
         P0 = P3;
         last_cubic = false;
         last_quad = true;
         break;
      case 't':
         rel = true;
      case 'T':
         if (!last_quad) return;
          Q1.m_x = 2.0 * Q2.m_x - Q1.m_x;
         Q1.m_y = 2.0 * Q2.m_x - Q1.m_x;
         tkn.NextToken().ToCDouble(&static_cast<double>(Q2.m_x));
         tkn.NextToken().ToCDouble(&static_cast<double>(Q2.m_y));
         if (rel) {
            Q2.m_x += P0.m_x;
            Q2.m_y += P0.m_y;
         }
         //degree elevation here
         P1.m_x = (P0.m_x + 2.0 * Q1.m_x) / 3.0;
         P1.m_y = (P0.m_y + 2.0 * Q1.m_y) / 3.0;
         P2.m_x = (2.0 * Q1.m_x + Q2.m_x) / 3.0;
         P2.m_y = (2.0 * Q1.m_y + Q2.m_y) / 3.0;
         P3.m_x = Q2.m_x;
         P3.m_y = Q2.m_y;
         fpaths.insert_path(P0, P1, P2, P3);
         P0 = P3;
         break;
      case 'c':
         rel = true;
      case 'C':
         tkn.NextToken().ToCDouble(&static_cast<double>(P1.m_x));
         tkn.NextToken().ToCDouble(&static_cast<double>(P1.m_y));
         tkn.NextToken().ToCDouble(&static_cast<double>(P2.m_x));
         tkn.NextToken().ToCDouble(&static_cast<double>(P2.m_y));
         tkn.NextToken().ToCDouble(&static_cast<double>(P3.m_x));
         tkn.NextToken().ToCDouble(&static_cast<double>(P3.m_y));
         if (rel) {
            P1.m_x += P0.m_x;
            P1.m_y += P0.m_y;
            P2.m_x += P0.m_x;
            P2.m_y += P0.m_y;
            P3.m_x += P0.m_x;
            P3.m_y += P0.m_y;
         }
         fpaths.insert_path(P0, P1, P2, P3);
         P0 = P3;
         last_cubic = true;
         last_quad = false;
         break;
      case 's':
         rel = true;
      case 'S':
         if (!last_cubic) return;
         tkn.NextToken().ToCDouble(&static_cast<double>(P2.m_x));
         tkn.NextToken().ToCDouble(&static_cast<double>(P2.m_y));
         tkn.NextToken().ToCDouble(&static_cast<double>(P3.m_x));
         tkn.NextToken().ToCDouble(&static_cast<double>(P3.m_y));
         if (rel) {
            P2.m_x += P0.m_x;
            P2.m_y += P0.m_y;
            P3.m_x += P0.m_x;
            P3.m_y += P0.m_y;
         }
         fpaths.insert_path(P2, P3);
         P0 = P3;
         break;
      default:
         return;  //arcs not supported
      }
   }
}


Whoo!


_________________
"You have a responsibility to consider all sides of a problem and a responsibility to make a judgment and a responsibility to care for all involved." --Ian Danskin


Last edited by beneficii on 07 Aug 2014, 3:27 am, edited 1 time in total.

beneficii
Veteran
Veteran

User avatar

Joined: 10 May 2005
Age: 42
Gender: Female
Posts: 7,245

07 Aug 2014, 3:15 am

This has cost me a lot of spoons and I'm nervous again.


_________________
"You have a responsibility to consider all sides of a problem and a responsibility to make a judgment and a responsibility to care for all involved." --Ian Danskin


beneficii
Veteran
Veteran

User avatar

Joined: 10 May 2005
Age: 42
Gender: Female
Posts: 7,245

07 Aug 2014, 3:31 am

Still looking at it and picking at it. This is how I get dehydrated.


_________________
"You have a responsibility to consider all sides of a problem and a responsibility to make a judgment and a responsibility to care for all involved." --Ian Danskin


beneficii
Veteran
Veteran

User avatar

Joined: 10 May 2005
Age: 42
Gender: Female
Posts: 7,245

07 Aug 2014, 7:40 pm

My code is so error-laden, I don't even know if I can get it to work.


_________________
"You have a responsibility to consider all sides of a problem and a responsibility to make a judgment and a responsibility to care for all involved." --Ian Danskin