#include "game/paintings.h"

// 0x070122F0 - 0x07012308
static const Lights1 ttm_seg7_lights_070122F0 = gdSPDefLights1(
    0x50, 0x50, 0x50,
    0xff, 0xff, 0xff, 0x32, 0x32, 0x32
);

// 0x07012308 - 0x07012388
static const Vtx ttm_seg7_vertex_07012308[] = {
    {{{     0,      0,      0}, 0, {   -32,    992}, {0x00, 0x00, 0x7f, 0xff}}},
    {{{   614,      0,      0}, 0, {  2012,    992}, {0x00, 0x00, 0x7f, 0xff}}},
    {{{   614,    307,      0}, 0, {  2012,      0}, {0x00, 0x00, 0x7f, 0xff}}},
    {{{     0,    307,      0}, 0, {   -32,      0}, {0x00, 0x00, 0x7f, 0xff}}},
    {{{     0,    307,      0}, 0, {   -32,    992}, {0x00, 0x00, 0x7f, 0xff}}},
    {{{   614,    307,      0}, 0, {  2012,    992}, {0x00, 0x00, 0x7f, 0xff}}},
    {{{   614,    614,      0}, 0, {  2012,    -28}, {0x00, 0x00, 0x7f, 0xff}}},
    {{{     0,    614,      0}, 0, {   -32,    -28}, {0x00, 0x00, 0x7f, 0xff}}},
};

// 0x07012388 - 0x070123A0
const Gfx ttm_seg7_dl_07012388[] = {
    gsSP2Triangles( 0,  1,  2, 0x0,  0,  2,  3, 0x0),
    gsSPEndDisplayList(),
};

// 0x070123A0 - 0x070123B8
const Gfx ttm_seg7_dl_070123A0[] = {
    gsSP2Triangles( 4,  5,  6, 0x0,  4,  6,  7, 0x0),
    gsSPEndDisplayList(),
};

// 0x070123B8 - 0x07012410
const Gfx ttm_seg7_dl_070123B8[] = {
    gsDPPipeSync(),
    gsSPSetGeometryMode(G_LIGHTING | G_SHADING_SMOOTH),
    gsDPSetCombineMode(G_CC_MODULATERGB, G_CC_MODULATERGB),
    gsSPLight(&ttm_seg7_lights_070122F0.l, 1),
    gsSPLight(&ttm_seg7_lights_070122F0.a, 2),
    gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 0, 0, G_TX_LOADTILE, 0, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD, G_TX_WRAP | G_TX_NOMIRROR, G_TX_NOMASK, G_TX_NOLOD),
    gsDPTileSync(),
    gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_CLAMP, 6, G_TX_NOLOD),
    gsDPSetTileSize(0, 0, 0, (64 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC),
    gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_ON),
    gsSPEndDisplayList(),
};

// 0x07012410 - 0x07012430
const Gfx ttm_seg7_dl_07012410[] = {
    gsSPTexture(0xFFFF, 0xFFFF, 0, G_TX_RENDERTILE, G_OFF),
    gsDPPipeSync(),
    gsDPSetCombineMode(G_CC_SHADE, G_CC_SHADE),
    gsSPEndDisplayList(),
};

// 0x07012430 - 0x07012450
static const Gfx ttm_seg7_painting_dl_07012430[] = {
    gsDPTileSync(),
    gsDPSetTile(G_IM_FMT_RGBA, G_IM_SIZ_16b, 16, 0, G_TX_RENDERTILE, 0, G_TX_CLAMP, 5, G_TX_NOLOD, G_TX_CLAMP, 6, G_TX_NOLOD),
    gsDPSetTileSize(0, 0, 0, (64 - 1) << G_TEXTURE_IMAGE_FRAC, (32 - 1) << G_TEXTURE_IMAGE_FRAC),
    gsSPEndDisplayList(),
};

// 0x07012450 - 0x0701296A
static const PaintingData ttm_seg7_painting_texture_map_bottom_07012450[] = {
    85, // num mappings
    // Format:
    // mesh vtx ID, texture X, texture Y
      49, 2016,  889,
      53, 2016,  685,
      55, 1843,  787,
      50, 2016,  992,
      51, 1843,  992,
      52, 1843,  583,
      75, 2016,  513,
      54, 1671,  889,
      59, 1671,  685,
      62, 1502,  787,
      56, 1502,  992,
      57, 1671,  992,
      58, 1502,  583,
      60, 1671,  513,
      61, 1330,  889,
      65, 1330,  685,
      63, 1162,  992,
      64, 1330,  992,
      66, 1162,  583,
      67, 1330,  513,
      69, 1162,  787,
      68,  989,  889,
      70,  821,  992,
      71,  989,  992,
      73,  989,  685,
      72,  821,  583,
      74,  989,  513,
      77, 2016,  308,
      78, 1843,  410,
      76, 1843,  204,
      81, 1502,  410,
      80, 1671,  308,
      47, 1671,  102,
      79, 1502,  204,
      46, 1330,  102,
      82, 1162,  204,
      83, 1330,  308,
      84, 1162,  410,
      86,  989,  308,
      85,  821,  204,
      48,  989,  102,
      25, 1502,    0,
      31, 1162,    0,
      19, 1843,    0,
      37,  821,    0,
     120,  821,  787,
     119,  649,  889,
     122,  481,  992,
     121,  649,  992,
     124,  649,  685,
     125,  481,  583,
     123,  649,  513,
     127,  481,  787,
     126,  308,  889,
     129,  140,  992,
     128,  308,  992,
     132,  308,  513,
     131,  308,  685,
     130,  140,  583,
     134,  140,  787,
     133,  -32,  889,
     135,  -32,  513,
     136,  821,  410,
     116,  649,  102,
     137,  649,  308,
     114,  481,  204,
     138,  481,  410,
     139,  308,  308,
     118,  140,  204,
     115,  308,  102,
     140,  140,  410,
     117,  -32,  102,
      99,  481,    0,
     105,  140,    0,
     143, 2016,  102,
     145, 1330,    0,
     144, 1671,    0,
     142, 2016,    0,
     146,  989,    0,
     155,  -32,  685,
     156,  -32,  992,
     154,  -32,  308,
     151,  308,    0,
     150,  649,    0,
     153,  -32,    0,

    132, // num groups
    // Grouped by 5 + one remainder group,
    // = 15 vertices per group + a few extra triangles
    13,  8,  5,
     0,  1,  2,
     3,  0,  4,
     4,  0,  2,
     5,  2,  1,
     1,  6,  5,
     7,  2,  8,
     5,  8,  2,
     2,  7,  4,
     7,  8,  9,
    10,  7,  9,
    11,  7, 10,
     7, 11,  4,
    12,  9,  8,
     8, 13, 12,
    21, 24, 45,
    14,  9, 15,
    12, 15,  9,
     9, 14, 10,
    16, 14, 20,
    17, 14, 16,
    14, 15, 20,
    14, 17, 10,
    15, 19, 18,
    18, 20, 15,
    19, 15, 12,
    20, 21, 16,
    18, 24, 20,
    21, 20, 24,
    22, 21, 45,
    23, 21, 22,
    21, 23, 16,
    24, 26, 25,
    25, 45, 24,
    26, 24, 18,
     6, 27, 28,
     5,  6, 28,
    29, 28, 27,
    27, 74, 29,
    29, 31, 28,
    13, 28, 31,
    28, 13,  5,
    36, 34, 35,
    12, 13, 30,
    13, 31, 30,
    31, 32, 33,
    32, 31, 29,
    33, 30, 31,
    33, 36, 30,
    30, 19, 12,
    19, 30, 36,
    18, 19, 37,
    19, 36, 37,
    34, 36, 33,
    35, 37, 36,
    37, 26, 18,
    35, 38, 37,
    26, 37, 38,
    25, 26, 62,
    26, 38, 62,
    38, 40, 39,
    39, 62, 38,
    40, 38, 35,
    41, 34, 33,
    33, 32, 41,
    42, 34, 75,
    34, 41, 75,
    35, 34, 42,
    32, 43, 76,
    41, 32, 76,
    43, 32, 29,
    29, 74, 43,
    43, 74, 77,
    46, 49, 52,
    42, 40, 35,
    39, 40, 44,
    40, 42, 78,
    44, 40, 78,
    25, 49, 45,
    45, 46, 22,
    46, 45, 49,
    47, 46, 52,
    48, 46, 47,
    46, 48, 22,
    58, 59, 57,
    49, 51, 50,
    50, 52, 49,
    51, 49, 25,
    50, 57, 52,
    52, 53, 47,
    53, 52, 57,
    53, 55, 47,
    54, 53, 59,
    55, 53, 54,
    53, 57, 59,
    56, 57, 50,
    57, 56, 58,
    58, 79, 59,
    59, 60, 54,
    60, 59, 79,
    60, 80, 54,
    61, 79, 58,
    62, 51, 25,
    39, 64, 62,
    51, 62, 64,
    50, 51, 66,
    51, 64, 66,
    63, 64, 39,
    64, 63, 65,
    65, 66, 64,
    66, 56, 50,
    56, 66, 67,
    65, 67, 66,
    58, 56, 70,
    56, 67, 70,
    67, 69, 68,
    68, 70, 67,
    69, 67, 65,
    70, 61, 58,
    68, 81, 70,
    61, 70, 81,
    71, 73, 84,
    71, 81, 68,
    72, 69, 65,
    65, 63, 72,
    68, 69, 73,
    69, 72, 82,
    73, 69, 82,
    44, 63, 39,
    63, 44, 83,
    72, 63, 83,
    73, 71, 68,
};


// 0x0701296C - 0x07012E84
static const PaintingData ttm_seg7_painting_top_0701296C[] = {
    85, // num mappings
    // Format:
    // mesh vtx ID, texture X, texture Y
       0, 2016,   72,
       1, 2016,    0,
       2, 1843,    0,
       3, 1843,  174,
       4, 2016,  276,
       5, 1671,   72,
       6, 1671,    0,
       8,  989,   72,
       7,  989,    0,
      10,  821,    0,
       9, 1162,    0,
      11,  821,  174,
      12,  989,  276,
      13, 1162,  174,
      14, 1330,   72,
      15, 1502,    0,
      16, 1671,  276,
      17, 1502,  174,
      18, 1330,  276,
      19, 1843,  992,
      20, 2016,  889,
      22, 2016,  685,
      21, 1843,  583,
      23, 1843,  787,
      24, 1671,  889,
      25, 1502,  992,
      26, 1502,  583,
      27, 1671,  685,
      28, 1671,  481,
      30, 1502,  787,
      29, 1330,  889,
      31, 1162,  992,
      32, 1330,  481,
      33, 1162,  583,
      34, 1330,  685,
      35, 1162,  787,
      36,  989,  889,
      37,  821,  992,
      39,  821,  583,
      38,  989,  685,
      40,  989,  481,
      41, 2016,  481,
      42, 1843,  378,
      43, 1502,  378,
      44, 1162,  378,
      45,  821,  378,
      87,  649,   72,
      88,  -32,    0,
      90,  140,    0,
      89,  -32,   72,
      92,  308,   72,
      91,  140,  174,
      94,  481,  174,
      93,  649,  276,
      95,  481,    0,
      96,  308,  276,
      97,  821,  787,
      98,  649,  889,
      99,  481,  992,
     102,  649,  481,
     101,  649,  685,
     100,  481,  583,
     103,  481,  787,
     104,  308,  889,
     105,  140,  992,
     108,  308,  481,
     107,  308,  685,
     106,  140,  583,
     110,  -32,  889,
     109,  140,  787,
     111,  -32,  481,
     112,  481,  378,
     113,  140,  378,
     141, 1330,    0,
     142, 2016,  992,
     144, 1671,  992,
     145, 1330,  992,
     146,  989,  992,
     147,  649,    0,
     148,  -32,  276,
     149,  308,    0,
     150,  649,  992,
     151,  308,  992,
     152,  -32,  685,
     153,  -32,  992,

    132, // num groups
    // Grouped by 5 + one remainder group,
    // = 15 vertices per group + a few extra triangles
    10,  7, 13,
     0,  1,  2,
     3,  0,  2,
     4,  0,  3,
     5,  2,  6,
     2,  5,  3,
     7,  8,  9,
     8,  7, 10,
    11,  7,  9,
    12,  7, 11,
     7, 12, 13,
    13, 14, 10,
    14, 73, 10,
     5,  6, 15,
     5, 16,  3,
    16,  5, 17,
    17,  5, 15,
    14, 15, 73,
    15, 14, 17,
    18, 14, 13,
    14, 18, 17,
    19, 74, 20,
    19, 20, 23,
    28, 27, 22,
    21, 41, 22,
    22, 23, 21,
    20, 21, 23,
    23, 24, 19,
    22, 27, 23,
    24, 23, 27,
    19, 24, 75,
    25, 75, 24,
    25, 24, 29,
    24, 27, 29,
    26, 29, 27,
    27, 28, 26,
    31, 36, 77,
    26, 34, 29,
    29, 30, 25,
    30, 29, 34,
    25, 30, 76,
    31, 76, 30,
    31, 30, 35,
    30, 34, 35,
    32, 34, 26,
    33, 35, 34,
    34, 32, 33,
    35, 36, 31,
    33, 39, 35,
    36, 35, 39,
    37, 36, 56,
    36, 39, 56,
    37, 77, 36,
    28, 16, 43,
    38, 56, 39,
    39, 40, 38,
    40, 39, 33,
    22, 41, 42,
    41,  4, 42,
     3, 42,  4,
    42, 28, 22,
    28, 42, 16,
     3, 16, 42,
    26, 28, 43,
    17, 43, 16,
    43, 32, 26,
    32, 43, 18,
    17, 18, 43,
    33, 32, 44,
    32, 18, 44,
    13, 44, 18,
    13, 12, 44,
    44, 40, 33,
    40, 44, 12,
    38, 40, 45,
    40, 12, 45,
    11, 45, 12,
     9, 46, 11,
    46,  9, 78,
    47, 49, 48,
    48, 49, 51,
    49, 79, 51,
    50, 80, 48,
    51, 50, 48,
    57, 56, 60,
    46, 53, 11,
    52, 46, 54,
    53, 46, 52,
    46, 78, 54,
    54, 50, 52,
    50, 54, 80,
    50, 55, 52,
    55, 50, 51,
    38, 60, 56,
    56, 57, 37,
    58, 57, 62,
    57, 60, 62,
    58, 81, 57,
    37, 57, 81,
    59, 60, 38,
    60, 59, 61,
    61, 62, 60,
    62, 63, 58,
    63, 62, 66,
    61, 66, 62,
    63, 66, 69,
    58, 63, 82,
    64, 82, 63,
    64, 63, 69,
    45, 59, 38,
    65, 66, 61,
    66, 65, 67,
    67, 69, 66,
    68, 69, 83,
    69, 68, 64,
    67, 83, 69,
    64, 68, 84,
    70, 83, 67,
    11, 53, 45,
    59, 45, 53,
    59, 53, 71,
    61, 59, 71,
    52, 71, 53,
    52, 55, 71,
    65, 71, 55,
    71, 65, 61,
    65, 55, 72,
    67, 65, 72,
    51, 72, 55,
    70, 72, 79,
    51, 79, 72,
    72, 70, 67,
};


// 0x07012E88
static const PaintingData *const ttm_seg7_painting_texture_maps_07012E88[] = {
    ttm_seg7_painting_texture_map_bottom_07012450,
    ttm_seg7_painting_top_0701296C,
};

UNUSED static const u64 ttm_unused_0 = 0x0;


// 0x07012E98 - 0x07012EF8
static const Gfx ttm_seg7_painting_dl_07012E98[] = {
    gsSPDisplayList(ttm_seg7_dl_070123B8),
    gsSPVertex(ttm_seg7_vertex_07012308, 8, 0),
    gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, ttm_seg7_texture_07004000),
    gsDPLoadSync(),
    gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)),
    gsSPDisplayList(ttm_seg7_dl_07012388),
    gsDPSetTextureImage(G_IM_FMT_RGBA, G_IM_SIZ_16b, 1, ttm_seg7_texture_07003000),
    gsDPLoadSync(),
    gsDPLoadBlock(G_TX_LOADTILE, 0, 0, 64 * 32 - 1, CALC_DXT(64, G_IM_SIZ_16b_BYTES)),
    gsSPDisplayList(ttm_seg7_dl_070123A0),
    gsSPDisplayList(ttm_seg7_dl_07012410),
    gsSPEndDisplayList(),
};

// 0x07012EF8 - 0x07012F78
ALIGNED8 static const Texture *const ttm_seg7_painting_textures_07012EF8[] = {
    ttm_seg7_texture_07004000, ttm_seg7_texture_07003000,
};

// 0x07012F00 (PaintingData)
struct Painting ttm_slide_painting = {
    /* id */ 0x0000,
    /* Image Count */ 0x02,
    /* Texture Type */ PAINTING_IMAGE,
    /* Floor Status */ 0x00, 0x00, 0x00 /* which of the painting's nearby special floors Mario's on */,
    /* Ripple Status */ 0x00,
    /* Rotation */    0.0f,   90.0f,
    /* Position */ 3072.0f, 921.6f, -819.2f,
    /*                         curr   passive     entry */
    /* Ripple Magnitude */     0.0f,    20.0f,    80.0f,
    /* Ripple Decay */         1.0f,  0.9608f,  0.9524f,
    /* Ripple Rate */          0.0f,    0.24f,    0.14f,
    /* Ripple Dispersion */    0.0f,    40.0f,    30.0f,
    /* Curr Ripple Timer */    0.0f,
    /* Curr Ripple x, y */     0.0f,    0.0f,
    /* Normal DList */ ttm_seg7_painting_dl_07012E98,
    /* Texture Maps */ ttm_seg7_painting_texture_maps_07012E88,
    /* Textures */     ttm_seg7_painting_textures_07012EF8,
    /* Texture w, h */ 64, 32,
    /* Ripple DList */ ttm_seg7_painting_dl_07012430,
    /* Ripple Trigger */ RIPPLE_TRIGGER_PROXIMITY,
    /* Alpha */ 0xFF,
    /* Mario Below */  0x00, 0x00, 0x00, /* Whether or not Mario is below the painting */
    /* Size */  460.8f,
};
