haunted_mansion: add collision

This commit is contained in:
Zack Buhman 2025-04-19 17:37:03 -05:00
parent f111ae9005
commit f414171cbf
5 changed files with 1494 additions and 18 deletions

Binary file not shown.

View File

@ -0,0 +1,2 @@
# Blender 4.2.1 LTS MTL File: 'hauntedMansionCollision.blend'
# www.blender.org

View File

@ -0,0 +1,360 @@
# Blender 4.2.1 LTS
# www.blender.org
mtllib hauntedMansionCollision.mtl
o house-coll-display
v 9.468655 18.171686 -0.000001
v 9.468655 -11.468163 -0.000001
v 11.768676 6.959891 -0.000001
v 11.768676 -0.458513 -0.000001
v -1.959310 6.487949 0.000000
v -1.959310 6.959890 0.000000
v -1.959310 0.000950 0.000000
v -1.959310 -0.458513 0.000000
v -0.034380 -7.700261 0.000000
v -1.639923 6.684578 0.000000
v 0.260841 1.695189 -0.000000
v -1.639923 -0.395491 0.000000
v 4.497604 18.171686 -0.000000
v 4.497604 6.487949 -0.000000
v 4.497604 6.959890 -0.000000
v 4.497604 0.000950 -0.000000
v 4.497604 -0.458513 -0.000000
v 4.178310 6.684578 -0.000000
v 2.417353 1.695189 -0.000000
v 9.468655 -5.209778 -0.000001
v -0.034380 -6.403114 0.000000
v 11.768676 -4.928789 -0.000001
v -1.959310 -4.928789 0.000000
v -1.639923 -4.928789 0.000000
v 4.497604 -4.928789 -0.000000
v 4.178310 -4.928789 -0.000000
v -5.530122 18.171686 0.000000
v -5.530122 -11.468163 0.000000
v 0.516239 4.961135 -0.000000
v 2.003563 4.961135 -0.000000
v -5.530122 -5.209778 0.000000
v 0.286729 -11.468163 -0.000000
v 0.286729 -5.209778 -0.000000
v -0.034380 -11.468163 0.000000
v -3.538448 -5.209778 0.000000
v -0.921080 -5.209778 0.000000
v -4.641364 -5.209778 0.000000
v 11.768676 11.356500 -0.000001
v -1.959310 11.356500 0.000000
v -1.639923 11.522879 0.000000
v 4.497604 11.356500 -0.000000
v 4.178310 11.522879 -0.000000
v 0.516239 1.695189 -0.000000
v 0.516239 -4.928789 -0.000000
v 2.003563 -4.928789 -0.000000
v 2.003563 1.695189 -0.000000
v 2.614596 13.142808 -0.000000
v -0.076209 13.142808 0.000000
v -12.607601 2.479054 0.000001
v -12.607601 4.197836 0.000001
v -12.349248 0.000951 0.000001
v -12.352005 6.487949 0.000001
v -12.583817 1.727151 0.000001
v -12.582272 4.799030 0.000001
v -12.174327 7.221593 0.000001
v -12.165005 -0.753008 0.000001
v -7.615463 6.959890 0.000001
v -7.615463 11.356500 0.000001
v -7.615463 0.000951 0.000001
v -7.615463 6.487949 0.000001
v -7.615463 -4.928789 0.000001
v -7.615463 -0.458513 0.000001
v -7.615463 4.197836 0.000001
v -7.615463 2.479054 0.000001
v -1.959310 9.934581 0.000000
v -1.639923 9.934581 0.000000
v 4.497604 9.934581 -0.000000
v 4.178310 9.934581 -0.000000
v -1.639923 -3.482409 0.000000
v -1.959310 -1.987983 0.000000
v 4.497604 -1.987983 -0.000000
v 4.178310 -3.482409 -0.000000
v 4.178310 -1.987983 -0.000000
v -1.959310 -3.482409 0.000000
v 4.497604 -3.482409 -0.000000
v -1.639923 -1.987983 0.000000
v 9.468655 11.693382 -0.000001
v -1.959310 11.693382 0.000000
v 2.614596 4.961135 -0.000000
v 4.497604 11.693382 -0.000000
v -0.076209 4.961135 0.000000
v -5.530122 11.693382 0.000000
v 4.178310 -0.031970 -0.000000
v -0.236704 4.799030 0.000000
v -0.236704 4.197837 0.000000
v -0.236704 2.479054 0.000000
v -0.236704 1.727151 0.000000
v 0.516240 13.142808 -0.000000
v 2.003563 13.142808 -0.000000
v 2.676960 4.561967 -0.000000
v 2.676960 4.197836 -0.000000
v 2.676960 2.479054 -0.000000
v 2.676960 1.891271 -0.000000
v -1.639923 10.952084 0.000000
v 4.178310 10.952084 -0.000000
v 4.497604 10.950237 -0.000000
v -1.959310 10.952084 0.000000
v 12.588175 0.000950 -0.000001
v 12.588175 6.487949 -0.000001
v 14.280035 1.677614 -0.000001
v 14.280035 4.801496 -0.000001
v 0.516239 2.479054 -0.000000
v 0.516239 4.197837 -0.000000
v 2.003563 4.197837 -0.000000
v 2.003563 2.479054 -0.000000
v -6.127061 6.487949 0.000000
v -6.127061 -0.458513 0.000000
v -6.127060 6.959890 0.000000
v -6.127060 0.000951 0.000000
v -3.538448 6.487949 0.000000
v -3.538448 6.959890 0.000000
v -3.538448 -0.458513 0.000000
v -3.538448 0.000951 0.000000
v -3.538448 -4.928789 0.000000
v -3.538448 11.356500 0.000000
v -4.641364 -4.928789 0.000000
v -4.641364 11.356500 0.000000
v 2.003563 -5.209778 -0.000000
v 0.516239 -5.209778 -0.000000
v 7.522186 -5.209778 -0.000001
v 6.182686 -5.209778 -0.000000
v 0.286729 -6.406253 -0.000000
v 0.286729 -7.699028 -0.000000
v 7.522186 -0.458513 -0.000001
v 7.522186 6.487949 -0.000001
v 7.522186 0.000950 -0.000001
v 7.522186 11.693382 -0.000001
v 7.522186 11.356500 -0.000001
v 7.522186 -4.928789 -0.000001
v 7.522186 6.959890 -0.000001
v 6.182686 -0.458513 -0.000000
v 6.182686 -4.928789 -0.000000
v 6.182686 6.487949 -0.000000
v 6.182686 0.000950 -0.000000
v 6.182686 6.959890 -0.000000
v 6.182686 11.693382 -0.000000
v 6.182686 11.356500 -0.000000
v 4.497604 13.394125 -0.000000
v -4.695820 11.693382 0.000000
v -3.505549 11.693382 0.000000
v -1.959310 16.679245 0.000000
v -1.959310 12.984167 0.000000
v 2.003563 18.741804 -0.000000
v 0.516240 18.741804 -0.000000
v -1.577724 21.941124 0.000000
v 5.434333 21.941124 -0.000000
v 2.985128 12.758956 -0.000000
v -0.446740 12.758956 0.000000
v 3.867863 11.844486 -0.000000
v -1.329476 11.844486 0.000000
v -1.959310 12.032170 0.000000
v -1.670803 12.032170 0.000000
v 0.516240 13.474504 -0.000000
v 2.003563 13.474504 -0.000000
v 0.516240 16.687757 -0.000000
v 2.003563 16.687757 -0.000000
v 2.572726 13.474504 -0.000000
v 2.572726 16.687757 -0.000000
v -0.081743 13.474504 0.000000
v -0.081743 16.687757 0.000000
v 0.516240 17.029930 -0.000000
v 0.516240 18.182152 -0.000000
v -0.391281 13.212752 0.000000
v -0.668785 12.984167 0.000000
v -0.391281 17.029930 0.000000
v -1.677333 16.679245 0.000000
v -1.677333 12.984167 0.000000
v 4.154991 12.163081 -0.000000
v 4.497604 12.163081 -0.000000
v 2.985128 13.382598 -0.000000
v 5.434333 18.741804 -0.000000
v -1.577724 18.741804 0.000000
v -0.921202 -4.928789 0.000000
v -0.034380 -4.928789 0.000000
v -8.584578 2.479054 0.000001
v -8.584578 4.197836 0.000001
v -8.584578 7.221593 0.000001
v -8.584578 -0.753008 0.000001
l 9 123
l 120 129
l 20 120
l 2 20
l 32 123
l 38 128
l 38 3
l 13 138
l 1 13
l 153 159
l 159 160
l 77 127
l 9 34
l 35 36
l 28 34
l 31 37
l 28 31
l 37 116
l 35 114
l 36 173
l 21 174
l 16 134
l 49 50
l 49 53
l 52 54
l 50 54
l 51 53
l 176 177
l 55 177
l 52 55
l 106 108
l 78 140
l 78 151
l 99 101
l 92 93
l 90 91
l 14 90
l 16 93
l 99 125
l 25 75
l 25 132
l 44 174
l 60 106
l 18 79
l 30 79
l 26 45
l 26 72
l 17 71
l 17 131
l 15 67
l 15 135
l 72 75
l 71 73
l 19 46
l 19 83
l 59 64
l 59 109
l 30 104
l 40 94
l 47 147
l 47 89
l 10 66
l 8 70
l 8 112
l 124 126
l 83 73
l 69 74
l 70 76
l 84 85
l 11 43
l 7 87
l 5 84
l 86 87
l 29 103
l 48 88
l 48 148
l 29 81
l 10 81
l 18 68
l 43 102
l 46 105
l 91 104
l 92 105
l 86 102
l 85 103
l 42 95
l 41 137
l 41 96
l 95 96
l 67 68
l 39 97
l 39 115
l 94 97
l 65 66
l 107 109
l 112 113
l 62 107
l 62 61
l 60 63
l 23 114
l 23 74
l 5 110
l 6 111
l 6 65
l 58 117
l 7 113
l 61 116
l 110 111
l 98 126
l 98 100
l 100 101
l 32 2
l 44 119
l 45 118
l 118 121
l 33 119
l 33 122
l 21 122
l 22 129
l 3 130
l 4 124
l 57 58
l 57 108
l 4 22
l 163 165
l 127 128
l 136 137
l 125 130
l 133 135
l 14 133
l 131 134
l 121 132
l 82 139
l 141 142
l 115 140
l 117 139
l 144 162
l 146 171
l 143 171
l 154 157
l 157 158
l 156 158
l 42 149
l 40 150
l 150 152
l 148 164
l 27 82
l 142 167
l 151 152
l 88 153
l 89 154
l 155 161
l 143 156
l 163 164
l 166 167
l 161 165
l 141 166
l 27 162
l 80 136
l 80 169
l 1 77
l 168 169
l 149 168
l 147 170
l 138 170
l 145 146
l 145 172
l 144 172
l 155 160
l 12 11
l 12 76
l 24 69
l 24 173
l 63 176
l 64 175
l 51 56
l 56 178
l 175 178

View File

@ -0,0 +1,931 @@
#pragma once
const vertex_position haunted_mansion_collision_position[] = {
{-18.171686f, -0.000001f, -9.468655f},
{11.468163f, -0.000001f, -9.468655f},
{-6.959891f, -0.000001f, -11.768676f},
{0.458513f, -0.000001f, -11.768676f},
{-6.487949f, 0.000000f, 1.959310f},
{-6.959890f, 0.000000f, 1.959310f},
{-0.000950f, 0.000000f, 1.959310f},
{0.458513f, 0.000000f, 1.959310f},
{7.700261f, 0.000000f, 0.034380f},
{-6.684578f, 0.000000f, 1.639923f},
{-1.695189f, -0.000000f, -0.260841f},
{0.395491f, 0.000000f, 1.639923f},
{-18.171686f, -0.000000f, -4.497604f},
{-6.487949f, -0.000000f, -4.497604f},
{-6.959890f, -0.000000f, -4.497604f},
{-0.000950f, -0.000000f, -4.497604f},
{0.458513f, -0.000000f, -4.497604f},
{-6.684578f, -0.000000f, -4.178310f},
{-1.695189f, -0.000000f, -2.417353f},
{5.209778f, -0.000001f, -9.468655f},
{6.403114f, 0.000000f, 0.034380f},
{4.928789f, -0.000001f, -11.768676f},
{4.928789f, 0.000000f, 1.959310f},
{4.928789f, 0.000000f, 1.639923f},
{4.928789f, -0.000000f, -4.497604f},
{4.928789f, -0.000000f, -4.178310f},
{-18.171686f, 0.000000f, 5.530122f},
{11.468163f, 0.000000f, 5.530122f},
{-4.961135f, -0.000000f, -0.516239f},
{-4.961135f, -0.000000f, -2.003563f},
{5.209778f, 0.000000f, 5.530122f},
{11.468163f, -0.000000f, -0.286729f},
{5.209778f, -0.000000f, -0.286729f},
{11.468163f, 0.000000f, 0.034380f},
{5.209778f, 0.000000f, 3.538448f},
{5.209778f, 0.000000f, 0.921080f},
{5.209778f, 0.000000f, 4.641364f},
{-11.356500f, -0.000001f, -11.768676f},
{-11.356500f, 0.000000f, 1.959310f},
{-11.522879f, 0.000000f, 1.639923f},
{-11.356500f, -0.000000f, -4.497604f},
{-11.522879f, -0.000000f, -4.178310f},
{-1.695189f, -0.000000f, -0.516239f},
{4.928789f, -0.000000f, -0.516239f},
{4.928789f, -0.000000f, -2.003563f},
{-1.695189f, -0.000000f, -2.003563f},
{-13.142808f, -0.000000f, -2.614596f},
{-13.142808f, 0.000000f, 0.076209f},
{-2.479054f, 0.000001f, 12.607601f},
{-4.197836f, 0.000001f, 12.607601f},
{-0.000951f, 0.000001f, 12.349248f},
{-6.487949f, 0.000001f, 12.352005f},
{-1.727151f, 0.000001f, 12.583817f},
{-4.799030f, 0.000001f, 12.582272f},
{-7.221593f, 0.000001f, 12.174327f},
{0.753008f, 0.000001f, 12.165005f},
{-6.959890f, 0.000001f, 7.615463f},
{-11.356500f, 0.000001f, 7.615463f},
{-0.000951f, 0.000001f, 7.615463f},
{-6.487949f, 0.000001f, 7.615463f},
{4.928789f, 0.000001f, 7.615463f},
{0.458513f, 0.000001f, 7.615463f},
{-4.197836f, 0.000001f, 7.615463f},
{-2.479054f, 0.000001f, 7.615463f},
{-9.934581f, 0.000000f, 1.959310f},
{-9.934581f, 0.000000f, 1.639923f},
{-9.934581f, -0.000000f, -4.497604f},
{-9.934581f, -0.000000f, -4.178310f},
{3.482409f, 0.000000f, 1.639923f},
{1.987983f, 0.000000f, 1.959310f},
{1.987983f, -0.000000f, -4.497604f},
{3.482409f, -0.000000f, -4.178310f},
{1.987983f, -0.000000f, -4.178310f},
{3.482409f, 0.000000f, 1.959310f},
{3.482409f, -0.000000f, -4.497604f},
{1.987983f, 0.000000f, 1.639923f},
{-11.693382f, -0.000001f, -9.468655f},
{-11.693382f, 0.000000f, 1.959310f},
{-4.961135f, -0.000000f, -2.614596f},
{-11.693382f, -0.000000f, -4.497604f},
{-4.961135f, 0.000000f, 0.076209f},
{-11.693382f, 0.000000f, 5.530122f},
{0.031970f, -0.000000f, -4.178310f},
{-4.799030f, 0.000000f, 0.236704f},
{-4.197837f, 0.000000f, 0.236704f},
{-2.479054f, 0.000000f, 0.236704f},
{-1.727151f, 0.000000f, 0.236704f},
{-13.142808f, -0.000000f, -0.516240f},
{-13.142808f, -0.000000f, -2.003563f},
{-4.561967f, -0.000000f, -2.676960f},
{-4.197836f, -0.000000f, -2.676960f},
{-2.479054f, -0.000000f, -2.676960f},
{-1.891271f, -0.000000f, -2.676960f},
{-10.952084f, 0.000000f, 1.639923f},
{-10.952084f, -0.000000f, -4.178310f},
{-10.950237f, -0.000000f, -4.497604f},
{-10.952084f, 0.000000f, 1.959310f},
{-0.000950f, -0.000001f, -12.588175f},
{-6.487949f, -0.000001f, -12.588175f},
{-1.677614f, -0.000001f, -14.280035f},
{-4.801496f, -0.000001f, -14.280035f},
{-2.479054f, -0.000000f, -0.516239f},
{-4.197837f, -0.000000f, -0.516239f},
{-4.197837f, -0.000000f, -2.003563f},
{-2.479054f, -0.000000f, -2.003563f},
{-6.487949f, 0.000000f, 6.127061f},
{0.458513f, 0.000000f, 6.127061f},
{-6.959890f, 0.000000f, 6.127060f},
{-0.000951f, 0.000000f, 6.127060f},
{-6.487949f, 0.000000f, 3.538448f},
{-6.959890f, 0.000000f, 3.538448f},
{0.458513f, 0.000000f, 3.538448f},
{-0.000951f, 0.000000f, 3.538448f},
{4.928789f, 0.000000f, 3.538448f},
{-11.356500f, 0.000000f, 3.538448f},
{4.928789f, 0.000000f, 4.641364f},
{-11.356500f, 0.000000f, 4.641364f},
{5.209778f, -0.000000f, -2.003563f},
{5.209778f, -0.000000f, -0.516239f},
{5.209778f, -0.000001f, -7.522186f},
{5.209778f, -0.000000f, -6.182686f},
{6.406253f, -0.000000f, -0.286729f},
{7.699028f, -0.000000f, -0.286729f},
{0.458513f, -0.000001f, -7.522186f},
{-6.487949f, -0.000001f, -7.522186f},
{-0.000950f, -0.000001f, -7.522186f},
{-11.693382f, -0.000001f, -7.522186f},
{-11.356500f, -0.000001f, -7.522186f},
{4.928789f, -0.000001f, -7.522186f},
{-6.959890f, -0.000001f, -7.522186f},
{0.458513f, -0.000000f, -6.182686f},
{4.928789f, -0.000000f, -6.182686f},
{-6.487949f, -0.000000f, -6.182686f},
{-0.000950f, -0.000000f, -6.182686f},
{-6.959890f, -0.000000f, -6.182686f},
{-11.693382f, -0.000000f, -6.182686f},
{-11.356500f, -0.000000f, -6.182686f},
{-13.394125f, -0.000000f, -4.497604f},
{-11.693382f, 0.000000f, 4.695820f},
{-11.693382f, 0.000000f, 3.505549f},
{-16.679245f, 0.000000f, 1.959310f},
{-12.984167f, 0.000000f, 1.959310f},
{-18.741804f, -0.000000f, -2.003563f},
{-18.741804f, -0.000000f, -0.516240f},
{-21.941124f, 0.000000f, 1.577724f},
{-21.941124f, -0.000000f, -5.434333f},
{-12.758956f, -0.000000f, -2.985128f},
{-12.758956f, 0.000000f, 0.446740f},
{-11.844486f, -0.000000f, -3.867863f},
{-11.844486f, 0.000000f, 1.329476f},
{-12.032170f, 0.000000f, 1.959310f},
{-12.032170f, 0.000000f, 1.670803f},
{-13.474504f, -0.000000f, -0.516240f},
{-13.474504f, -0.000000f, -2.003563f},
{-16.687757f, -0.000000f, -0.516240f},
{-16.687757f, -0.000000f, -2.003563f},
{-13.474504f, -0.000000f, -2.572726f},
{-16.687757f, -0.000000f, -2.572726f},
{-13.474504f, 0.000000f, 0.081743f},
{-16.687757f, 0.000000f, 0.081743f},
{-17.029930f, -0.000000f, -0.516240f},
{-18.182152f, -0.000000f, -0.516240f},
{-13.212752f, 0.000000f, 0.391281f},
{-12.984167f, 0.000000f, 0.668785f},
{-17.029930f, 0.000000f, 0.391281f},
{-16.679245f, 0.000000f, 1.677333f},
{-12.984167f, 0.000000f, 1.677333f},
{-12.163081f, -0.000000f, -4.154991f},
{-12.163081f, -0.000000f, -4.497604f},
{-13.382598f, -0.000000f, -2.985128f},
{-18.741804f, -0.000000f, -5.434333f},
{-18.741804f, 0.000000f, 1.577724f},
{4.928789f, 0.000000f, 0.921202f},
{4.928789f, 0.000000f, 0.034380f},
{-2.479054f, 0.000001f, 8.584578f},
{-4.197836f, 0.000001f, 8.584578f},
{-7.221593f, 0.000001f, 8.584578f},
{0.753008f, 0.000001f, 8.584578f},
};
const vertex_texture haunted_mansion_collision_texture[] = {
};
const vertex_normal haunted_mansion_collision_normal[] = {
};
const union triangle haunted_mansion_collision_house_coll_display_triangle[] = {
};
const union quadrilateral haunted_mansion_collision_house_coll_display_quadrilateral[] = {
};
const union line haunted_mansion_collision_house_coll_display_line[] = {
{
.a = 8,
.b = 122,
},
{
.a = 119,
.b = 128,
},
{
.a = 19,
.b = 119,
},
{
.a = 1,
.b = 19,
},
{
.a = 31,
.b = 122,
},
{
.a = 37,
.b = 127,
},
{
.a = 37,
.b = 2,
},
{
.a = 12,
.b = 137,
},
{
.a = 0,
.b = 12,
},
{
.a = 152,
.b = 158,
},
{
.a = 158,
.b = 159,
},
{
.a = 76,
.b = 126,
},
{
.a = 8,
.b = 33,
},
{
.a = 34,
.b = 35,
},
{
.a = 27,
.b = 33,
},
{
.a = 30,
.b = 36,
},
{
.a = 27,
.b = 30,
},
{
.a = 36,
.b = 115,
},
{
.a = 34,
.b = 113,
},
{
.a = 35,
.b = 172,
},
{
.a = 20,
.b = 173,
},
{
.a = 15,
.b = 133,
},
{
.a = 48,
.b = 49,
},
{
.a = 48,
.b = 52,
},
{
.a = 51,
.b = 53,
},
{
.a = 49,
.b = 53,
},
{
.a = 50,
.b = 52,
},
{
.a = 175,
.b = 176,
},
{
.a = 54,
.b = 176,
},
{
.a = 51,
.b = 54,
},
{
.a = 105,
.b = 107,
},
{
.a = 77,
.b = 139,
},
{
.a = 77,
.b = 150,
},
{
.a = 98,
.b = 100,
},
{
.a = 91,
.b = 92,
},
{
.a = 89,
.b = 90,
},
{
.a = 13,
.b = 89,
},
{
.a = 15,
.b = 92,
},
{
.a = 98,
.b = 124,
},
{
.a = 24,
.b = 74,
},
{
.a = 24,
.b = 131,
},
{
.a = 43,
.b = 173,
},
{
.a = 59,
.b = 105,
},
{
.a = 17,
.b = 78,
},
{
.a = 29,
.b = 78,
},
{
.a = 25,
.b = 44,
},
{
.a = 25,
.b = 71,
},
{
.a = 16,
.b = 70,
},
{
.a = 16,
.b = 130,
},
{
.a = 14,
.b = 66,
},
{
.a = 14,
.b = 134,
},
{
.a = 71,
.b = 74,
},
{
.a = 70,
.b = 72,
},
{
.a = 18,
.b = 45,
},
{
.a = 18,
.b = 82,
},
{
.a = 58,
.b = 63,
},
{
.a = 58,
.b = 108,
},
{
.a = 29,
.b = 103,
},
{
.a = 39,
.b = 93,
},
{
.a = 46,
.b = 146,
},
{
.a = 46,
.b = 88,
},
{
.a = 9,
.b = 65,
},
{
.a = 7,
.b = 69,
},
{
.a = 7,
.b = 111,
},
{
.a = 123,
.b = 125,
},
{
.a = 82,
.b = 72,
},
{
.a = 68,
.b = 73,
},
{
.a = 69,
.b = 75,
},
{
.a = 83,
.b = 84,
},
{
.a = 10,
.b = 42,
},
{
.a = 6,
.b = 86,
},
{
.a = 4,
.b = 83,
},
{
.a = 85,
.b = 86,
},
{
.a = 28,
.b = 102,
},
{
.a = 47,
.b = 87,
},
{
.a = 47,
.b = 147,
},
{
.a = 28,
.b = 80,
},
{
.a = 9,
.b = 80,
},
{
.a = 17,
.b = 67,
},
{
.a = 42,
.b = 101,
},
{
.a = 45,
.b = 104,
},
{
.a = 90,
.b = 103,
},
{
.a = 91,
.b = 104,
},
{
.a = 85,
.b = 101,
},
{
.a = 84,
.b = 102,
},
{
.a = 41,
.b = 94,
},
{
.a = 40,
.b = 136,
},
{
.a = 40,
.b = 95,
},
{
.a = 94,
.b = 95,
},
{
.a = 66,
.b = 67,
},
{
.a = 38,
.b = 96,
},
{
.a = 38,
.b = 114,
},
{
.a = 93,
.b = 96,
},
{
.a = 64,
.b = 65,
},
{
.a = 106,
.b = 108,
},
{
.a = 111,
.b = 112,
},
{
.a = 61,
.b = 106,
},
{
.a = 61,
.b = 60,
},
{
.a = 59,
.b = 62,
},
{
.a = 22,
.b = 113,
},
{
.a = 22,
.b = 73,
},
{
.a = 4,
.b = 109,
},
{
.a = 5,
.b = 110,
},
{
.a = 5,
.b = 64,
},
{
.a = 57,
.b = 116,
},
{
.a = 6,
.b = 112,
},
{
.a = 60,
.b = 115,
},
{
.a = 109,
.b = 110,
},
{
.a = 97,
.b = 125,
},
{
.a = 97,
.b = 99,
},
{
.a = 99,
.b = 100,
},
{
.a = 31,
.b = 1,
},
{
.a = 43,
.b = 118,
},
{
.a = 44,
.b = 117,
},
{
.a = 117,
.b = 120,
},
{
.a = 32,
.b = 118,
},
{
.a = 32,
.b = 121,
},
{
.a = 20,
.b = 121,
},
{
.a = 21,
.b = 128,
},
{
.a = 2,
.b = 129,
},
{
.a = 3,
.b = 123,
},
{
.a = 56,
.b = 57,
},
{
.a = 56,
.b = 107,
},
{
.a = 3,
.b = 21,
},
{
.a = 162,
.b = 164,
},
{
.a = 126,
.b = 127,
},
{
.a = 135,
.b = 136,
},
{
.a = 124,
.b = 129,
},
{
.a = 132,
.b = 134,
},
{
.a = 13,
.b = 132,
},
{
.a = 130,
.b = 133,
},
{
.a = 120,
.b = 131,
},
{
.a = 81,
.b = 138,
},
{
.a = 140,
.b = 141,
},
{
.a = 114,
.b = 139,
},
{
.a = 116,
.b = 138,
},
{
.a = 143,
.b = 161,
},
{
.a = 145,
.b = 170,
},
{
.a = 142,
.b = 170,
},
{
.a = 153,
.b = 156,
},
{
.a = 156,
.b = 157,
},
{
.a = 155,
.b = 157,
},
{
.a = 41,
.b = 148,
},
{
.a = 39,
.b = 149,
},
{
.a = 149,
.b = 151,
},
{
.a = 147,
.b = 163,
},
{
.a = 26,
.b = 81,
},
{
.a = 141,
.b = 166,
},
{
.a = 150,
.b = 151,
},
{
.a = 87,
.b = 152,
},
{
.a = 88,
.b = 153,
},
{
.a = 154,
.b = 160,
},
{
.a = 142,
.b = 155,
},
{
.a = 162,
.b = 163,
},
{
.a = 165,
.b = 166,
},
{
.a = 160,
.b = 164,
},
{
.a = 140,
.b = 165,
},
{
.a = 26,
.b = 161,
},
{
.a = 79,
.b = 135,
},
{
.a = 79,
.b = 168,
},
{
.a = 0,
.b = 76,
},
{
.a = 167,
.b = 168,
},
{
.a = 148,
.b = 167,
},
{
.a = 146,
.b = 169,
},
{
.a = 137,
.b = 169,
},
{
.a = 144,
.b = 145,
},
{
.a = 144,
.b = 171,
},
{
.a = 143,
.b = 171,
},
{
.a = 154,
.b = 159,
},
{
.a = 11,
.b = 10,
},
{
.a = 11,
.b = 75,
},
{
.a = 23,
.b = 68,
},
{
.a = 23,
.b = 172,
},
{
.a = 62,
.b = 175,
},
{
.a = 63,
.b = 174,
},
{
.a = 50,
.b = 55,
},
{
.a = 55,
.b = 177,
},
{
.a = 174,
.b = 177,
},
};
const struct object haunted_mansion_collision_house_coll_display = {
.triangle = &haunted_mansion_collision_house_coll_display_triangle[0],
.quadrilateral = &haunted_mansion_collision_house_coll_display_quadrilateral[0],
.line = &haunted_mansion_collision_house_coll_display_line[0],
.triangle_count = 0,
.quadrilateral_count = 0,
.line_count = 178,
.material = 0,
};
const struct object * haunted_mansion_collision_object[] = {
&haunted_mansion_collision_house_coll_display,
};
const struct model haunted_mansion_collision_model = {
.position = haunted_mansion_collision_position,
.texture = haunted_mansion_collision_texture,
.normal = haunted_mansion_collision_normal,
.object = haunted_mansion_collision_object,
.object_count = 1
};

View File

@ -48,6 +48,9 @@ using mat4x4 = mat<4, 4, float>;
#include "model/haunted_mansion/model_mansion.h"
#include "model/haunted_mansion/model_cone.h"
#include "model/haunted_mansion/model_cube.h"
#include "model/haunted_mansion/model_collision.h"
#define _fsrra(n) (1.0f / (__builtin_sqrtf(n)))
void vbr100()
{
@ -227,6 +230,33 @@ void do_get_condition()
}
}
void global_polygon_type_0(ta_parameter_writer& writer)
{
const uint32_t parameter_control_word = para_control::para_type::polygon_or_modifier_volume
| para_control::list_type::opaque
| obj_control::col_type::packed_color
;
const uint32_t isp_tsp_instruction_word = isp_tsp_instruction_word::depth_compare_mode::always
| isp_tsp_instruction_word::culling_mode::no_culling;
const uint32_t tsp_instruction_word = tsp_instruction_word::fog_control::no_fog
| tsp_instruction_word::src_alpha_instr::one
| tsp_instruction_word::dst_alpha_instr::zero
;
const uint32_t texture_control_word = 0;
writer.append<ta_global_parameter::polygon_type_0>() =
ta_global_parameter::polygon_type_0(parameter_control_word,
isp_tsp_instruction_word,
tsp_instruction_word,
texture_control_word,
0, // data_size_for_sort_dma
0 // next_address_for_sort_dma
);
}
void global_polygon_type_1(ta_parameter_writer& writer,
uint32_t texture_address,
uint32_t list,
@ -331,12 +361,51 @@ static inline void render_tri(ta_parameter_writer& writer,
ci);
}
static inline void render_line(ta_parameter_writer& writer,
vec3 p1,
vec3 p2,
uint32_t base_color)
{
float dy = p2.y - p1.y;
float dx = p2.x - p1.x;
float d = _fsrra(dx * dx + dy * dy) * 0.7f;
float dy1 = dy * d;
float dx1 = dx * d;
const vec3 v[4] = {
{ p1.x + dy1, p1.y + -dx1, p1.z },
{ p1.x + -dy1, p1.y + dx1, p1.z },
{ p2.x + -dy1, p2.y + dx1, p2.z },
{ p2.x + dy1, p2.y + -dx1, p2.z },
};
writer.append<ta_vertex_parameter::polygon_type_0>() =
ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false),
v[0].x, v[0].y, v[0].z,
base_color);
writer.append<ta_vertex_parameter::polygon_type_0>() =
ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false),
v[1].x, v[1].y, v[1].z,
base_color);
writer.append<ta_vertex_parameter::polygon_type_0>() =
ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(false),
v[3].x, v[3].y, v[3].z,
base_color);
writer.append<ta_vertex_parameter::polygon_type_0>() =
ta_vertex_parameter::polygon_type_0(polygon_vertex_parameter_control_word(true),
v[2].x, v[2].y, v[2].z,
base_color);
}
constexpr inline mat4x4 screen_rotation(float theta, float x, float y)
{
//float zt = -0.7853981633974483 + (0.2);
float zt = -0.7853981633974483 * 0;
float yt = -0.7853981633974483 * theta;
float xt = 0.7853981633974483 * 4;
float yt = -0.7853981633974483 * 0;
float xt = 0.7853981633974483 * 0;
//float xt = 0.7853981633974483 * 3.7;
mat4x4 rx = {
@ -370,8 +439,6 @@ constexpr inline mat4x4 screen_rotation(float theta, float x, float y)
return ry * t * rx * rz;
}
#define _fsrra(n) (1.0f / (__builtin_sqrtf(n)))
static inline float inverse_length(vec3 v)
{
float f = dot(v, v);
@ -678,22 +745,118 @@ void render_cone(ta_parameter_writer& writer, const mat4x4& cone_model)
screen_transform(c));
}
void transfer_scene(ta_parameter_writer& writer, const mat4x4& screen, const mat4x4& cone_model)
vec2 line_intersection(vec2 a1, vec2 a2,
vec2 b1, vec2 b2)
{
float x1 = a1.x;
float y1 = a1.y;
float x2 = a2.x;
float y2 = a2.y;
float x3 = b1.x;
float y3 = b1.y;
float x4 = b2.x;
float y4 = b2.y;
float x1x2 = x1 - x2;
float x1x3 = x1 - x3;
float x3x4 = x3 - x4;
float y1y2 = y1 - y2;
float y1y3 = y1 - y3;
float y3y4 = y3 - y4;
float div = 1.0f / (x1x2 * y3y4 - y1y2 * x3x4);
float t = (x1x3 * y3y4 - y1y3 * x3x4) * div;
float u = -(x1x2 * y1y3 - y1y2 * x1x3) * div;
return {t, u};
}
bool collided[256] = {};
bool line_has_collision(vec3 a1, vec3 a2, const mat4x4& model_trans, const mat4x4& screen)
{
const struct model * model = &haunted_mansion_collision_model;
const struct object * object = &haunted_mansion_collision_house_coll_display;
float tx = screen[0][3];
float ty = screen[2][3];
for (int i = 0; i < object->line_count; i++) {
const union line * line = &object->line[i];
vec3 la = model->position[line->a];
vec3 lb = model->position[line->b];
vec2 b1 = {la.x + tx, la.z + ty};
vec2 b2 = {lb.x + tx, lb.z + ty};
vec2 tu = line_intersection({a1.x, a1.y},
{a2.x, a2.y},
{b1.x, b1.y},
{b2.x, b2.y});
if (tu.x >= 0.0f && tu.x <= 1.0f && tu.y >= 0.0f && tu.y <= 1.0f) {
collided[i] = true;
return true;
}
}
return false;
}
float last_dx = 0;
float last_dy = 0;
void render_collision(ta_parameter_writer& writer, const mat4x4& model_trans, const mat4x4& screen)
{
mat4x4 trans = screen * model_trans;
const uint32_t base_color = 0xffffffff;
const struct model * model = &haunted_mansion_collision_model;
const struct object * object = &haunted_mansion_collision_house_coll_display;
int line_count = object->line_count;
for (int i = 0; i < line_count; i++) {
const union line * line = &object->line[i];
vec3 a = trans * model->position[line->a];
vec3 b = trans * model->position[line->b];
if (a.z < 0 || b.z < 0)
continue;
render_line(writer,
screen_transform(a),
screen_transform(b),
collided[i] ? 0xffff0000 : base_color);
}
vec3 a = {last_dx * -2, last_dy * -2, 1};
vec3 b = {0, 0, 1};
if (a.z > 0) {
render_line(writer,
screen_transform(a),
screen_transform(b),
0xff00ff00);
}
}
void transfer_scene(ta_parameter_writer& writer, const mat4x4& mansion_model_trans, const mat4x4& screen, const mat4x4& cone_model)
{
// opaque
{
global_polygon_type_1(writer, texture_memory_alloc.texture.start,
global_polygon_type_1(writer,
texture_memory_alloc.texture.start,
para_control::list_type::opaque,
isp_tsp_instruction_word::culling_mode::no_culling);
float scale = 1.f;
float translate = 0.f;
const mat4x4 model = {
scale, 0, 0, 0,
0, scale, 0, 0,
0, 0, -scale, translate,
0, 0, 0, 1,
};
render_model(writer, model, screen, &mansion_model);
render_model(writer, mansion_model_trans, screen, &mansion_model);
global_polygon_type_0(writer);
render_collision(writer, mansion_model_trans, screen);
}
// end of opaque list
writer.append<ta_global_parameter::end_of_list>() =
@ -823,7 +986,7 @@ constexpr inline mat4x4 update_cone()
return mry * mrx;
}
constexpr inline mat4x4 update_analog(mat4x4& screen)
constexpr inline mat4x4 update_analog(const mat4x4& model_trans, const mat4x4& screen)
{
const float l_ = static_cast<float>(data[0].analog_coordinate_axis[0]) * (1.f / 255.f);
const float r_ = static_cast<float>(data[0].analog_coordinate_axis[1]) * (1.f / 255.f);
@ -833,6 +996,17 @@ constexpr inline mat4x4 update_analog(mat4x4& screen)
float x = 0.05f * -x_;
float y = 0.05f * y_;
last_dx = x;
last_dy = y;
vec3 a = {last_dx * -2, last_dy * -2, 1.f};
vec3 b = {0, 0, 1.f};
if (line_has_collision(a, b, model_trans, screen)) {
x = 0;
y = 0;
}
mat4x4 t = {
1, 0, 0, x,
0, 1, 0, 0,
@ -926,10 +1100,19 @@ void main()
mat4x4 screen = screen_rotation(0, 0, 0);
float scale = 1.f;
float translate = 0.f;
const mat4x4 mansion_model_trans = {
scale, 0, 0, 0,
0, -scale, 0, 0,
0, 0, scale, translate,
0, 0, 0, 1,
};
while (1) {
maple::dma_wait_complete();
do_get_condition();
screen = update_analog(screen);
screen = update_analog(mansion_model_trans, screen);
mat4x4 cone_model = update_cone();
ta_polygon_converter_init2(texture_memory_alloc.isp_tsp_parameters[ta].start,
@ -941,7 +1124,7 @@ void main()
tile_width,
tile_height);
writer.offset = 0;
transfer_scene(writer, screen, cone_model);
transfer_scene(writer, mansion_model_trans, screen, cone_model);
ta_polygon_converter_writeback(writer.buf, writer.offset);
ta_polygon_converter_transfer(writer.buf, writer.offset);
ta_wait_opaque_modifier_volume_list();