Compare commits
15 Commits
39ec8e54c9
...
f7ea333a90
Author | SHA1 | Date |
---|---|---|
Sara | f7ea333a90 | |
Sara | ff445dad84 | |
Sara | 1adcbd53a0 | |
Sara | 02506acf67 | |
Sara | 02dd1c4b61 | |
Sara | bcb3e0b92f | |
Sara | 046fd8bf9f | |
Sara | 3ec83d397f | |
Sara | eb0024c50e | |
Sara | 16f8597c1b | |
Sara | 810f88ace2 | |
Sara | 674f51fbdd | |
Sara | 5d16bff23d | |
Sara | dd4413e06f | |
Sara | b8e258f24c |
|
@ -24,9 +24,9 @@
|
|||
inkscape:pagecheckerboard="0"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:zoom="0.93240622"
|
||||
inkscape:cx="1521.8689"
|
||||
inkscape:cy="440.25875"
|
||||
inkscape:zoom="1.2579205"
|
||||
inkscape:cx="1779.1267"
|
||||
inkscape:cy="525.47039"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:export-bgcolor="#ffffffff"><inkscape:page
|
||||
|
@ -44,7 +44,12 @@
|
|||
id="page2"
|
||||
margin="0"
|
||||
bleed="0" /></sodipodi:namedview><defs
|
||||
id="defs1"><marker
|
||||
id="defs1"><rect
|
||||
x="335.80286"
|
||||
y="583.50471"
|
||||
width="211.20541"
|
||||
height="99.346172"
|
||||
id="rect2" /><marker
|
||||
style="overflow:visible"
|
||||
id="marker126"
|
||||
refX="0"
|
||||
|
@ -250,51 +255,51 @@
|
|||
style="font-size:16px;line-height:1;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';text-decoration-color:#000000;white-space:pre;shape-inside:url(#rect1);shape-padding:31.8441;display:inline;fill:#1b1b1b;stroke-width:3.00094;stroke-linejoin:round"><tspan
|
||||
x="31.84375"
|
||||
y="44.32375"
|
||||
id="tspan10"><tspan
|
||||
id="tspan5"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan2">Concept</tspan><tspan
|
||||
id="tspan1">Concept</tspan><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan9">
|
||||
id="tspan4">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="60.32375"
|
||||
id="tspan12"><tspan
|
||||
id="tspan7"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan11">3D fixed camera dungeon crawler where the player is placed in a randomly selected sequence of rooms
|
||||
id="tspan6">3D fixed camera dungeon crawler where the player is placed in a randomly selected sequence of rooms
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="76.32375"
|
||||
id="tspan15"><tspan
|
||||
id="tspan12"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan13">and asked to clear as many rooms as possible within a 5min timeframe.
|
||||
id="tspan11">and asked to clear as many rooms as possible within a 5min timeframe.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="92.32375"
|
||||
id="tspan17"><tspan
|
||||
id="tspan15"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan16">
|
||||
id="tspan13">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="108.32375"
|
||||
id="tspan19"><tspan
|
||||
id="tspan17"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan18">The environments are an overgrown forest ruin made using a combination of the Nature pack and Prototype assets.
|
||||
id="tspan16">The environments are an overgrown forest ruin made using a combination of the Nature pack and Prototype assets.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="124.32375"
|
||||
id="tspan21"><tspan
|
||||
id="tspan19"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan20">
|
||||
id="tspan18">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="140.32375"
|
||||
id="tspan25"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan22">The </tspan><tspan
|
||||
id="tspan20">The </tspan><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan23">player</tspan><tspan
|
||||
id="tspan21">player</tspan><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan24"> can move horizontally with the Joystick or WASD. The player has two weapons which
|
||||
id="tspan22"> can move horizontally with the Joystick or WASD. The player has two weapons which
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="156.32375"
|
||||
|
@ -324,7 +329,7 @@
|
|||
y="220.32375"
|
||||
id="tspan35"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan34">
|
||||
id="tspan34">The player can gather score by picking up coins, advancing to the next room, or defeating enemies.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="236.32375"
|
||||
|
@ -346,300 +351,300 @@
|
|||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="284.32375"
|
||||
id="tspan44"><tspan
|
||||
id="tspan46"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan42">"Fodder"</tspan><tspan
|
||||
id="tspan44">"Fodder"</tspan><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan43"> that are slow and die easilly, but if they do end up hitting you they hurt a lot.
|
||||
id="tspan45"> that are slow and die easilly, but if they do end up hitting you they hurt a lot.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="300.32375"
|
||||
id="tspan46"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan45">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="316.32375"
|
||||
id="tspan48"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan47">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="332.32375"
|
||||
y="316.32375"
|
||||
id="tspan50"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan49">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="348.32375"
|
||||
y="332.32375"
|
||||
id="tspan52"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan51">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="364.32375"
|
||||
id="tspan55"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan53">"Tanks"</tspan><tspan
|
||||
y="348.32375"
|
||||
id="tspan56"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan54"> which don't hit very hard but survive for longer.
|
||||
id="tspan55">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="364.32375"
|
||||
id="tspan59"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan57">"Tanks"</tspan><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan58"> which don't hit very hard but survive for longer.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="380.32375"
|
||||
id="tspan57"><tspan
|
||||
id="tspan62"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan56">
|
||||
id="tspan61">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="396.32375"
|
||||
id="tspan59"><tspan
|
||||
id="tspan65"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan58">
|
||||
id="tspan64">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="412.32375"
|
||||
id="tspan61"><tspan
|
||||
id="tspan67"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan60">
|
||||
id="tspan66">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="428.32375"
|
||||
id="tspan64"><tspan
|
||||
id="tspan70"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan62">"Ranged"</tspan><tspan
|
||||
id="tspan68">"Ranged"</tspan><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan63"> which, like fodder have low health, low speed, and like the tank low damage, but can hit from a range.
|
||||
id="tspan69"> which, like fodder have low health, low speed, and like the tank low damage, but can hit from a range.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="444.32375"
|
||||
id="tspan66"><tspan
|
||||
id="tspan72"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan65">
|
||||
id="tspan71">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="460.32375"
|
||||
id="tspan68"><tspan
|
||||
id="tspan74"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan67">
|
||||
id="tspan73">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="476.32375"
|
||||
id="tspan70"><tspan
|
||||
id="tspan76"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan69">
|
||||
id="tspan75">
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="492.32375"
|
||||
id="tspan72"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan71">There is a "Berserk" powerup which will give the player the power to defeat enemies in one hit for a few seconds, but when it ends it </tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="508.32375"
|
||||
id="tspan74"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan73">leaves the player unable to act for a second.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="524.32375"
|
||||
id="tspan76"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan75">Meaning that if the player fails to clear the room in the "berserk" time, they'll take a lot of hits.
|
||||
</tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="540.32375"
|
||||
id="tspan78"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan77">
|
||||
</tspan></tspan><tspan
|
||||
id="tspan77">There is a "Berserk" powerup which will give the player the power to defeat enemies in one hit for a few seconds, but when it ends it </tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="556.32375"
|
||||
y="508.32375"
|
||||
id="tspan80"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan79">There is a "speedup" powerup, which will increase the animation/movement speed for the player but drains health while active (always </tspan></tspan><tspan
|
||||
id="tspan79">leaves the player unable to act for a second. Meaning that if the player fails to clear the room in the "berserk" time, they'll take a lot of </tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="572.32375"
|
||||
y="524.32375"
|
||||
id="tspan84"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan81">leaving a small amount to avoid frustrating deaths).</tspan></tspan></text><text
|
||||
id="tspan81">hits. There is also a "speedup" powerup, which will increase the animation/movement speed for the player but drains health while </tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="540.32375"
|
||||
id="tspan140"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan139">active (always leaving a small amount to avoid frustrating deaths). Finally there's an explosion powerup, which will create a big </tspan></tspan><tspan
|
||||
x="31.84375"
|
||||
y="556.32375"
|
||||
id="tspan142"><tspan
|
||||
style="-inkscape-font-specification:'IBM Plex Sans, Normal'"
|
||||
id="tspan141">explosion around the player, killing a lot of enemies in one swoop. But enemies that are still alive after it will be stronger.</tspan></tspan></text><text
|
||||
xml:space="preserve"
|
||||
transform="matrix(0.26458333,0,0,0.26458333,-5.8858161,-9.7341241)"
|
||||
id="text3"
|
||||
style="font-size:16px;line-height:1;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans, Normal';text-decoration-color:#000000;white-space:pre;shape-inside:url(#rect3);shape-padding:23.7099;display:inline;fill:#1b1b1b;stroke-width:3.00094;stroke-linejoin:round"><tspan
|
||||
x="1205.7305"
|
||||
y="71.800313"
|
||||
id="tspan87"><tspan
|
||||
id="tspan150"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan85">Player:
|
||||
id="tspan143">Player:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="87.800313"
|
||||
id="tspan88">- A warrior with an axe and a sword.
|
||||
id="tspan153">- A warrior with an axe and a sword.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="103.80031"
|
||||
id="tspan89">
|
||||
id="tspan154">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="119.80031"
|
||||
id="tspan91"><tspan
|
||||
id="tspan156"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan90">Objectives:
|
||||
id="tspan155">Objectives:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="135.80031"
|
||||
id="tspan94">- Defeat all enemies.<tspan
|
||||
id="tspan158">- Defeat all enemies.<tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan93">
|
||||
id="tspan157">
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="151.80031"
|
||||
id="tspan95">- Move to the next room.
|
||||
id="tspan159">- Move to the next room.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="167.80031"
|
||||
id="tspan96">
|
||||
id="tspan160">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="183.80031"
|
||||
id="tspan99"><tspan
|
||||
id="tspan162"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan98">Resources:
|
||||
id="tspan161">Resources:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="199.80031"
|
||||
id="tspan100">- Health, depending on what they get hit by, the player can take 4-7 hits
|
||||
id="tspan163">- Health, depending on what they get hit by, the player can take 4-7 hits
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="215.80031"
|
||||
id="tspan101">- Time, 5 minutes
|
||||
id="tspan164">- Time, 5 minutes
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="231.80031"
|
||||
id="tspan102">
|
||||
id="tspan165">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="247.80031"
|
||||
id="tspan104"><tspan
|
||||
id="tspan167"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan103">Mechanics:
|
||||
id="tspan166">Mechanics:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="263.80031"
|
||||
id="tspan105">- Short/light/weak attack with the axe
|
||||
id="tspan168">- Short/light/weak attack with the axe
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="279.80031"
|
||||
id="tspan106">- Long/heavy/strong attack with the sword
|
||||
id="tspan169">- Long/heavy/strong attack with the sword
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="295.80031"
|
||||
id="tspan108">- Berserk powerup that has a long vulnerablility period at the end
|
||||
id="tspan170">- Berserk powerup that has a long vulnerablility period at the end
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="311.80031"
|
||||
id="tspan109">- Speed powerup that saps in the ballpark of 30% of the player's max health
|
||||
id="tspan171">- Speed powerup that saps in the ballpark of 30% of the player's max health
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="327.80031"
|
||||
id="tspan110">- The game timer ticks down to game over
|
||||
id="tspan172">- Explosion Powerup that clears a large number of enemies but powers up those that survive
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="343.80031"
|
||||
id="tspan111">- Rooms will spawn enemies in randomly selected waves.
|
||||
id="tspan173">- The game timer ticks down to game over
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="359.80031"
|
||||
id="tspan112">- Progress requires killing all waves of enemies
|
||||
id="tspan174">- Rooms will spawn enemies in randomly selected waves.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="375.80031"
|
||||
id="tspan113">
|
||||
id="tspan175">- Progress requires killing all waves of enemies
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="391.80031"
|
||||
id="tspan116"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan114">Dynamics:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="407.80031"
|
||||
id="tspan117">- The player has to decide whether to short or long attack based on their windup/recovery durations.
|
||||
id="tspan176">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="407.80031"
|
||||
id="tspan178"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan177">Dynamics:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="423.80031"
|
||||
id="tspan118"> - deciding to use a long when you shouldn't would lead to getting hit during windup (canceling the action) or during winddown.
|
||||
id="tspan179">- The player has to decide whether to short or long attack based on their windup/recovery durations.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="439.80031"
|
||||
id="tspan119"> - But a light attack could fail to eliminate a threat in time.
|
||||
id="tspan180"> - deciding to use a long when you shouldn't would lead to getting hit during windup (canceling the action) or during winddown.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="455.80031"
|
||||
id="tspan120">- The player can make heavy attacks more useful by finding a speedup, but that goes at the cost of health.
|
||||
id="tspan181"> - But a light attack could fail to eliminate a threat in time.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="471.80031"
|
||||
id="tspan121">- The player can make light attacks more useful by finding a berserk powerup, but at the risk of leaving themselves exposed after it fails.
|
||||
id="tspan182">- The player can make heavy attacks more useful by finding a speedup, but that goes at the cost of health.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="487.80031"
|
||||
id="tspan122">
|
||||
id="tspan183">- The player can make light attacks more useful by finding a berserk powerup, but at the risk of leaving themselves exposed after it fails.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="503.80031"
|
||||
id="tspan124"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan123">Conflict:</tspan>
|
||||
id="tspan184">- In a panic the player can use the explosion powerup, but if used carelessly this will make the game harder
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="519.80031"
|
||||
id="tspan125">- The player cannot progress without defeating enemies.
|
||||
id="tspan185">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="535.80031"
|
||||
id="tspan126">- The enemies will attack the player.
|
||||
id="tspan187"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan186">Conflict:</tspan>
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="551.80031"
|
||||
id="tspan127">
|
||||
id="tspan188">- The player cannot progress without defeating enemies.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="567.80031"
|
||||
id="tspan129"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan128">Boundaries:
|
||||
</tspan></tspan><tspan
|
||||
id="tspan189">- The enemies will attack the player.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="583.80031"
|
||||
id="tspan130">- The player cannot leave the room they're in until all enemies are defeated.
|
||||
id="tspan190">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="599.80031"
|
||||
id="tspan131">- The player cannot stop an attack until it's animation is finished.
|
||||
</tspan><tspan
|
||||
id="tspan192"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan191">Boundaries:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="615.80031"
|
||||
id="tspan132">
|
||||
id="tspan193">- The player cannot leave the room they're in until all enemies are defeated.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="631.80031"
|
||||
id="tspan134"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan133">Outcome:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="647.80031"
|
||||
id="tspan136">- The game ends when the player runs out of time or health<tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan135">
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="663.80031"
|
||||
id="tspan137">- The player is scored based on the number of enemies defeated
|
||||
id="tspan194">- The player cannot stop an attack until it's animation is finished.
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="647.80031"
|
||||
id="tspan195">
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="663.80031"
|
||||
id="tspan197"><tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan196">Outcome:
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="679.80031"
|
||||
id="tspan138">- After the game end screen, the game is reset for the next person. </tspan></text><image
|
||||
id="tspan199">- The game ends when the player runs out of time or health<tspan
|
||||
style="font-weight:bold"
|
||||
id="tspan198">
|
||||
</tspan></tspan><tspan
|
||||
x="1205.7305"
|
||||
y="695.80031"
|
||||
id="tspan200">- The player is scored based on the number of enemies defeated
|
||||
</tspan><tspan
|
||||
x="1205.7305"
|
||||
y="711.80031"
|
||||
id="tspan201">- After the game end screen, the game is reset for the next person. </tspan></text><image
|
||||
width="13.64728"
|
||||
height="27.455114"
|
||||
preserveAspectRatio="none"
|
||||
|
@ -880,84 +885,9 @@
|
|||
id="tspan82"
|
||||
style="fill:#000000;stroke:none;stroke-width:0.5"
|
||||
x="506.4968"
|
||||
y="46.607197">Four hits to death</tspan></text></g><rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.484569;stroke-linejoin:round"
|
||||
id="rect82"
|
||||
width="98.574799"
|
||||
height="46.60043"
|
||||
x="499.52936"
|
||||
y="158.54077"
|
||||
ry="2.7184379" /><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round"
|
||||
x="509.06833"
|
||||
y="171.26752"
|
||||
id="text83"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan83"
|
||||
style="fill:#000000;stroke:none;stroke-width:0.5"
|
||||
x="509.06833"
|
||||
y="171.26752">Next room</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round"
|
||||
x="559.08936"
|
||||
y="171.39975"
|
||||
id="text86"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan86"
|
||||
style="stroke-width:0.5"
|
||||
x="559.08936"
|
||||
y="171.39975">Defeat wave of enemies</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round"
|
||||
x="556.18872"
|
||||
y="191.89928"
|
||||
id="text88"><tspan
|
||||
sodipodi:role="line"
|
||||
style="stroke-width:0.5"
|
||||
x="556.18872"
|
||||
y="191.89928"
|
||||
id="tspan97">Door/Gate/Some way to leave</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="stroke-width:0.5"
|
||||
x="556.18872"
|
||||
y="194.72151"
|
||||
id="tspan107">opens</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round"
|
||||
x="510.16174"
|
||||
y="191.89981"
|
||||
id="text92"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan92"
|
||||
style="stroke-width:0.5"
|
||||
x="510.16174"
|
||||
y="191.89981">Walk through</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="stroke-width:0.5"
|
||||
x="510.16174"
|
||||
y="194.72205"
|
||||
id="tspan115">door</tspan></text><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker118)"
|
||||
d="m 524.66566,169.07897 c 0,0 7.73173,-2.57985 17.21261,-2.32077 7.53053,0.20578 14.50393,3.28746 14.50393,3.28746"
|
||||
id="path117"
|
||||
sodipodi:nodetypes="csc" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker120)"
|
||||
d="m 576.49022,175.07408 c 0,0 0.77324,3.09402 0.19344,6.76888 -0.54257,3.43887 -1.74047,5.99511 -1.74047,5.99511"
|
||||
id="path119"
|
||||
sodipodi:nodetypes="csc" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker122)"
|
||||
d="m 553.47697,193.05942 c 0,0 -4.835,1.93389 -13.15088,1.93389 -8.31588,0 -11.21696,-1.93389 -11.21696,-1.93389"
|
||||
id="path121" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker124)"
|
||||
d="m 514.02488,188.61183 c 0,0 -1.5465,-1.93389 -1.73994,-6.57543 -0.19344,-4.64155 1.54651,-8.8962 1.54651,-8.8962"
|
||||
id="path123"
|
||||
sodipodi:nodetypes="csc" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker126)"
|
||||
d="m 571.78836,168.37684 c 0,0 -1.4157,-1.41572 -1.4157,-3.87 0,-2.45428 1.51037,-3.96442 3.87,-4.05883 2.35961,-0.0944 4.43622,1.88779 4.43622,3.87 0,1.98221 -1.41571,3.77558 -1.41571,3.77558"
|
||||
id="path125" /><g
|
||||
y="46.607197">Four hits to death</tspan></text></g><g
|
||||
id="g5"
|
||||
transform="translate(21.068403,-44.544624)"><g
|
||||
transform="translate(-17.002033,-73.99137)"><g
|
||||
id="g151"
|
||||
transform="translate(30.606929,3.6243846)"><g
|
||||
id="g150"
|
||||
|
@ -1065,14 +995,115 @@
|
|||
id="tspan149-4"
|
||||
style="font-weight:bold;fill:#000000;stroke-width:0.5"
|
||||
x="515.86322"
|
||||
y="136.34253">light</tspan></text></g></g><text
|
||||
y="136.34253">light</tspan></text></g></g><g
|
||||
id="g6"
|
||||
transform="translate(-313.65626,-5.4599291)"><rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.484569;stroke-linejoin:round"
|
||||
id="rect82"
|
||||
width="98.574799"
|
||||
height="46.60043"
|
||||
x="501.6362"
|
||||
y="158.34012"
|
||||
ry="2.7184379" /><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round"
|
||||
x="511.17517"
|
||||
y="171.06688"
|
||||
id="text83"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan83"
|
||||
style="fill:#000000;stroke:none;stroke-width:0.5"
|
||||
x="511.17517"
|
||||
y="171.06688">Next room</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round"
|
||||
x="561.19617"
|
||||
y="171.19911"
|
||||
id="text86"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan86"
|
||||
style="stroke-width:0.5"
|
||||
x="561.19617"
|
||||
y="171.19911">Defeat wave of enemies</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round"
|
||||
x="558.29553"
|
||||
y="191.69864"
|
||||
id="text88"><tspan
|
||||
sodipodi:role="line"
|
||||
style="stroke-width:0.5"
|
||||
x="558.29553"
|
||||
y="191.69864"
|
||||
id="tspan97">Door/Gate/Some way to leave</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="stroke-width:0.5"
|
||||
x="558.29553"
|
||||
y="194.52087"
|
||||
id="tspan107">opens</tspan></text><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round"
|
||||
x="512.26855"
|
||||
y="191.69917"
|
||||
id="text92"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan92"
|
||||
style="stroke-width:0.5"
|
||||
x="512.26855"
|
||||
y="191.69917">Walk through</tspan><tspan
|
||||
sodipodi:role="line"
|
||||
style="stroke-width:0.5"
|
||||
x="512.26855"
|
||||
y="194.52141"
|
||||
id="tspan115">door</tspan></text><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.5;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker118)"
|
||||
d="m 526.7725,168.87832 c 0,0 7.73173,-2.57985 17.21261,-2.32077 7.53053,0.20578 14.50393,3.28746 14.50393,3.28746"
|
||||
id="path117"
|
||||
sodipodi:nodetypes="csc" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker120)"
|
||||
d="m 578.59706,174.87343 c 0,0 0.77324,3.09402 0.19344,6.76888 -0.54257,3.43887 -1.74047,5.99511 -1.74047,5.99511"
|
||||
id="path119"
|
||||
sodipodi:nodetypes="csc" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker122)"
|
||||
d="m 555.58381,192.85877 c 0,0 -4.835,1.93389 -13.15088,1.93389 -8.31588,0 -11.21696,-1.93389 -11.21696,-1.93389"
|
||||
id="path121" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker124)"
|
||||
d="m 516.13172,188.41118 c 0,0 -1.5465,-1.93389 -1.73994,-6.57543 -0.19344,-4.64155 1.54651,-8.8962 1.54651,-8.8962"
|
||||
id="path123"
|
||||
sodipodi:nodetypes="csc" /><path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#marker126)"
|
||||
d="m 573.8952,168.17619 c 0,0 -1.4157,-1.41572 -1.4157,-3.87 0,-2.45428 1.51037,-3.96442 3.87,-4.05883 2.35961,-0.0944 4.43622,1.88779 4.43622,3.87 0,1.98221 -1.41571,3.77558 -1.41571,3.77558"
|
||||
id="path125" /><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="503.0347"
|
||||
y="162.0376"
|
||||
id="text152"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan152"
|
||||
style="stroke-width:0.5"
|
||||
x="503.0347"
|
||||
y="162.0376">Secondary Game Loop</tspan></text></g><image
|
||||
width="76.243652"
|
||||
height="50.02211"
|
||||
preserveAspectRatio="none"
|
||||
xlink:href="../../../../Pictures/Screenshots/2024-02-08_12-02-1707392481.png"
|
||||
id="image1"
|
||||
x="10.361387"
|
||||
y="154.08205" /><image
|
||||
width="13.64728"
|
||||
height="26.568644"
|
||||
preserveAspectRatio="none"
|
||||
xlink:href="../../../../Pictures/Screenshots/2024-02-08_12-02-1707392500.png"
|
||||
id="image1-9"
|
||||
x="10.085637"
|
||||
y="38.110359" /><text
|
||||
xml:space="preserve"
|
||||
style="font-size:2.82223px;line-height:1;font-family:Sans;-inkscape-font-specification:'Sans, Normal';text-decoration-color:#000000;white-space:pre;fill:#000000;stroke:none;stroke-width:0.499999;stroke-linejoin:round;stroke-dasharray:none;stroke-opacity:1"
|
||||
x="500.92786"
|
||||
y="162.23825"
|
||||
id="text152"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan152"
|
||||
style="stroke-width:0.5"
|
||||
x="500.92786"
|
||||
y="162.23825">Secondary Game Loop</tspan></text></g></svg>
|
||||
transform="matrix(0.26458333,0,0,0.26458333,0,0.55744479)"
|
||||
id="text2"
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:16px;line-height:1;font-family:'IBM Plex Sans';-inkscape-font-specification:'IBM Plex Sans';text-decoration-color:#000000;white-space:pre;shape-inside:url(#rect2);display:inline;fill:#4d4d4d;stroke:none;stroke-width:0.00000018;stroke-linejoin:round"><tspan
|
||||
x="335.80273"
|
||||
y="595.98391"
|
||||
id="tspan202">Example of asset use and </tspan><tspan
|
||||
x="335.80273"
|
||||
y="611.98391"
|
||||
id="tspan203">camera angle</tspan></text></g></svg>
|
||||
|
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 47 KiB |
|
@ -1 +1 @@
|
|||
Subproject commit 460dc9a1c6bd2b077117db8f8884c36bb9eb9a02
|
||||
Subproject commit d83a007fc547d7000ff4bc96e483322a9693fd1b
|
|
@ -1,4 +1,4 @@
|
|||
[gd_scene load_steps=13 format=3 uid="uid://3qb27d8vkjku"]
|
||||
[gd_scene load_steps=18 format=3 uid="uid://3qb27d8vkjku"]
|
||||
|
||||
[ext_resource type="LightmapGIData" uid="uid://cfli7rodl51qd" path="res://Levels/Light/room001.lmbake" id="1_vp3o5"]
|
||||
[ext_resource type="PackedScene" uid="uid://blod06auxvonj" path="res://Models/Environments/SM_Buildings_Floor_5x5_01.fbx" id="1_yoy7t"]
|
||||
|
@ -9,6 +9,11 @@
|
|||
[ext_resource type="PackedScene" uid="uid://55s1at5inmv3" path="res://Models/Props/SM_Rock_Wall_01.fbx" id="6_m0jjr"]
|
||||
[ext_resource type="PackedScene" uid="uid://up6utdya5pxh" path="res://Models/Props/SM_Prop_StoneWall_01.fbx" id="7_t3wqq"]
|
||||
[ext_resource type="PackedScene" uid="uid://vgxi3xp3ces5" path="res://Models/Sky/MountainSkybox.fbx" id="9_ypm82"]
|
||||
[ext_resource type="PackedScene" uid="uid://hu8pchvhxwxn" path="res://Models/Environments/SM_Buildings_Door_01.fbx" id="10_dh3em"]
|
||||
[ext_resource type="PackedScene" uid="uid://cgajq7ygn3aiy" path="res://Models/Environments/SM_Buildings_DoorFrame_01.fbx" id="11_pbt64"]
|
||||
[ext_resource type="PackedScene" uid="uid://djx1fn3fntb3y" path="res://Models/Characters/Characters.fbx" id="12_0wtqw"]
|
||||
[ext_resource type="PackedScene" uid="uid://c8h5f82tunglj" path="res://Models/Characters/ModularCharacters.fbx" id="13_n80tv"]
|
||||
[ext_resource type="PackedScene" uid="uid://dw8q1vqnc657" path="res://player.tscn" id="14_cnw06"]
|
||||
|
||||
[sub_resource type="PhysicalSkyMaterial" id="PhysicalSkyMaterial_2kikw"]
|
||||
|
||||
|
@ -20,6 +25,7 @@ background_mode = 2
|
|||
sky = SubResource("Sky_g8k5h")
|
||||
ssil_enabled = true
|
||||
volumetric_fog_enabled = true
|
||||
volumetric_fog_density = 0.015
|
||||
|
||||
[node name="Level" type="Level"]
|
||||
|
||||
|
@ -126,3 +132,219 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.629966, 0, 4.02042)
|
|||
|
||||
[node name="Root Scene" parent="WorldEnvironment" instance=ExtResource("9_ypm82")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.568564, -0.711053, -0.05379)
|
||||
|
||||
[node name="Root Scene2" parent="." instance=ExtResource("11_pbt64")]
|
||||
transform = Transform3D(0.866025, 0, 0.5, 0, 1, 0, -0.5, 0, 0.866025, -2.60823, -0.000884213, -3.75164)
|
||||
|
||||
[node name="Root Scene" parent="Root Scene2" instance=ExtResource("10_dh3em")]
|
||||
transform = Transform3D(-0.213729, 0, 0.976893, 0, 1, 0, -0.976893, 0, -0.213729, -1.14452, 4.76837e-07, 0.143641)
|
||||
|
||||
[node name="Root Scene" parent="." instance=ExtResource("12_0wtqw")]
|
||||
transform = Transform3D(0.510393, -0.859941, 0, -3.75892e-08, -2.231e-08, 1, -0.859941, -0.510393, -4.37114e-08, -1.89835, 0.0725416, 0.132563)
|
||||
|
||||
[node name="Skeleton3D" parent="Root Scene/RootNode" index="0"]
|
||||
bones/2/rotation = Quaternion(0.99502, 0.0996789, -1.32247e-15, 7.09436e-17)
|
||||
bones/3/rotation = Quaternion(0.995186, 0.0980028, 5.60143e-16, -5.62927e-16)
|
||||
bones/4/rotation = Quaternion(0.99381, 0.11109, -3.91661e-17, -7.27518e-16)
|
||||
bones/5/rotation = Quaternion(7.05397e-17, -1.30404e-15, -0.0417333, 0.999129)
|
||||
bones/6/rotation = Quaternion(0.458571, 0.53825, -0.458571, 0.53825)
|
||||
bones/9/rotation = Quaternion(0.578548, 0.632486, -0.352513, 0.375471)
|
||||
bones/10/rotation = Quaternion(0.0113281, -0.23686, -0.0338065, 0.970889)
|
||||
bones/12/rotation = Quaternion(-2.41562e-17, 0.0358308, -1.66793e-15, 0.999358)
|
||||
bones/13/rotation = Quaternion(0.0254806, -0.276843, -0.0880396, 0.956534)
|
||||
bones/14/rotation = Quaternion(-0.039942, 0.11784, -0.141636, 0.982068)
|
||||
bones/15/rotation = Quaternion(-0.0364033, 0.152035, 0.229995, 0.960553)
|
||||
bones/16/rotation = Quaternion(0.000280495, -0.0657944, -0.00425393, 0.997824)
|
||||
bones/17/rotation = Quaternion(-0.00115399, 0.0107416, -0.0983299, 0.995095)
|
||||
bones/18/rotation = Quaternion(-0.0069122, 0.0257174, -0.0570024, 0.998019)
|
||||
bones/19/rotation = Quaternion(-0.00451965, 0.0280399, 0.159068, 0.986859)
|
||||
bones/20/rotation = Quaternion(-0.00248643, 0.0438797, -0.0565193, 0.997434)
|
||||
bones/21/rotation = Quaternion(0.00263727, -0.019492, -0.0212693, 0.99958)
|
||||
bones/23/rotation = Quaternion(0.0166464, -0.0965253, 0.16913, 0.980714)
|
||||
bones/24/rotation = Quaternion(0.632486, -0.578548, -0.375471, -0.352513)
|
||||
bones/25/rotation = Quaternion(0.0113281, -0.23686, -0.0338065, 0.970889)
|
||||
bones/27/rotation = Quaternion(-1.00832e-16, 0.0358308, 1.17227e-15, 0.999358)
|
||||
bones/28/rotation = Quaternion(0.0254806, -0.276843, -0.0880396, 0.956534)
|
||||
bones/29/rotation = Quaternion(-0.039942, 0.11784, -0.141636, 0.982068)
|
||||
bones/30/rotation = Quaternion(-0.0364033, 0.152035, 0.229995, 0.960553)
|
||||
bones/31/rotation = Quaternion(0.000280495, -0.0657944, -0.00425393, 0.997824)
|
||||
bones/32/rotation = Quaternion(-0.00115399, 0.0107416, -0.0983299, 0.995095)
|
||||
bones/33/rotation = Quaternion(-0.0069122, 0.0257174, -0.0570024, 0.998019)
|
||||
bones/34/rotation = Quaternion(-0.00451965, 0.0280399, 0.159068, 0.986859)
|
||||
bones/35/rotation = Quaternion(-0.00248643, 0.0438797, -0.0565193, 0.997434)
|
||||
bones/36/rotation = Quaternion(0.00263727, -0.019492, -0.0212693, 0.99958)
|
||||
bones/38/rotation = Quaternion(0.0166464, -0.0965253, 0.16913, 0.980714)
|
||||
bones/39/rotation = Quaternion(-0.0417753, 0.705872, -0.70419, 0.0641594)
|
||||
bones/40/rotation = Quaternion(0.644378, -0.0244627, 0.00473771, 0.764301)
|
||||
bones/41/rotation = Quaternion(0.85767, -0.507213, -0.0397527, -0.0745436)
|
||||
bones/42/rotation = Quaternion(-8.01262e-16, -1.24803e-15, 0.270016, 0.962856)
|
||||
bones/43/rotation = Quaternion(1.88564e-14, 0.707107, -1.88564e-14, 0.707107)
|
||||
bones/44/rotation = Quaternion(-0.705872, -0.0417753, 0.0641594, 0.70419)
|
||||
bones/45/rotation = Quaternion(0.644378, -0.0244627, 0.00473771, 0.764301)
|
||||
bones/46/rotation = Quaternion(0.85767, -0.507213, -0.0397527, -0.0745436)
|
||||
bones/47/rotation = Quaternion(3.53394e-15, -4.89182e-15, 0.270016, 0.962856)
|
||||
bones/48/rotation = Quaternion(-2.73765e-13, 0.707107, 2.73765e-13, 0.707107)
|
||||
|
||||
[node name="Character_Mystic_01" parent="Root Scene/RootNode/Skeleton3D" index="0"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_EvilGod_01" parent="Root Scene/RootNode/Skeleton3D" index="1"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_AncientQueen_01" parent="Root Scene/RootNode/Skeleton3D" index="2"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_Ancient_Warrior_01" parent="Root Scene/RootNode/Skeleton3D" index="3"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_Medusa_01" parent="Root Scene/RootNode/Skeleton3D" index="4"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_SpiritDemon_Glow" parent="Root Scene/RootNode/Skeleton3D" index="5"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_SpiritDemon" parent="Root Scene/RootNode/Skeleton3D" index="6"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_DarkElf_01" parent="Root Scene/RootNode/Skeleton3D" index="7"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_ForestGuardian_01" parent="Root Scene/RootNode/Skeleton3D" index="9"]
|
||||
visible = false
|
||||
|
||||
[node name="Root Scene3" parent="." instance=ExtResource("12_0wtqw")]
|
||||
transform = Transform3D(-0.795653, -0.605752, 0, -2.64783e-08, 3.47791e-08, 1, -0.605752, 0.795653, -4.37114e-08, 0.773338, 0.0725416, -2.02914)
|
||||
|
||||
[node name="Skeleton3D" parent="Root Scene3/RootNode" index="0"]
|
||||
bones/2/rotation = Quaternion(0.99502, 0.0996789, -1.32247e-15, 7.09436e-17)
|
||||
bones/3/rotation = Quaternion(0.995186, 0.0980028, 5.60143e-16, -5.62927e-16)
|
||||
bones/4/rotation = Quaternion(0.99381, 0.11109, -3.91661e-17, -7.27518e-16)
|
||||
bones/5/rotation = Quaternion(7.05397e-17, -1.30404e-15, -0.0417333, 0.999129)
|
||||
bones/6/rotation = Quaternion(0.458571, 0.53825, -0.458571, 0.53825)
|
||||
bones/9/rotation = Quaternion(0.578548, 0.632486, -0.352513, 0.375471)
|
||||
bones/10/rotation = Quaternion(0.0113281, -0.23686, -0.0338065, 0.970889)
|
||||
bones/12/rotation = Quaternion(-2.41562e-17, 0.0358308, -1.66793e-15, 0.999358)
|
||||
bones/13/rotation = Quaternion(0.0254806, -0.276843, -0.0880396, 0.956534)
|
||||
bones/14/rotation = Quaternion(-0.039942, 0.11784, -0.141636, 0.982068)
|
||||
bones/15/rotation = Quaternion(-0.0364033, 0.152035, 0.229995, 0.960553)
|
||||
bones/16/rotation = Quaternion(0.000280495, -0.0657944, -0.00425393, 0.997824)
|
||||
bones/17/rotation = Quaternion(-0.00115399, 0.0107416, -0.0983299, 0.995095)
|
||||
bones/18/rotation = Quaternion(-0.0069122, 0.0257174, -0.0570024, 0.998019)
|
||||
bones/19/rotation = Quaternion(-0.00451965, 0.0280399, 0.159068, 0.986859)
|
||||
bones/20/rotation = Quaternion(-0.00248643, 0.0438797, -0.0565193, 0.997434)
|
||||
bones/21/rotation = Quaternion(0.00263727, -0.019492, -0.0212693, 0.99958)
|
||||
bones/23/rotation = Quaternion(0.0166464, -0.0965253, 0.16913, 0.980714)
|
||||
bones/24/rotation = Quaternion(0.632486, -0.578548, -0.375471, -0.352513)
|
||||
bones/25/rotation = Quaternion(0.0113281, -0.23686, -0.0338065, 0.970889)
|
||||
bones/27/rotation = Quaternion(-1.00832e-16, 0.0358308, 1.17227e-15, 0.999358)
|
||||
bones/28/rotation = Quaternion(0.0254806, -0.276843, -0.0880396, 0.956534)
|
||||
bones/29/rotation = Quaternion(-0.039942, 0.11784, -0.141636, 0.982068)
|
||||
bones/30/rotation = Quaternion(-0.0364033, 0.152035, 0.229995, 0.960553)
|
||||
bones/31/rotation = Quaternion(0.000280495, -0.0657944, -0.00425393, 0.997824)
|
||||
bones/32/rotation = Quaternion(-0.00115399, 0.0107416, -0.0983299, 0.995095)
|
||||
bones/33/rotation = Quaternion(-0.0069122, 0.0257174, -0.0570024, 0.998019)
|
||||
bones/34/rotation = Quaternion(-0.00451965, 0.0280399, 0.159068, 0.986859)
|
||||
bones/35/rotation = Quaternion(-0.00248643, 0.0438797, -0.0565193, 0.997434)
|
||||
bones/36/rotation = Quaternion(0.00263727, -0.019492, -0.0212693, 0.99958)
|
||||
bones/38/rotation = Quaternion(0.0166464, -0.0965253, 0.16913, 0.980714)
|
||||
bones/39/rotation = Quaternion(-0.0417753, 0.705872, -0.70419, 0.0641594)
|
||||
bones/40/rotation = Quaternion(0.644378, -0.0244627, 0.00473771, 0.764301)
|
||||
bones/41/rotation = Quaternion(0.85767, -0.507213, -0.0397527, -0.0745436)
|
||||
bones/42/rotation = Quaternion(-8.01262e-16, -1.24803e-15, 0.270016, 0.962856)
|
||||
bones/43/rotation = Quaternion(1.88564e-14, 0.707107, -1.88564e-14, 0.707107)
|
||||
bones/44/rotation = Quaternion(-0.705872, -0.0417753, 0.0641594, 0.70419)
|
||||
bones/45/rotation = Quaternion(0.644378, -0.0244627, 0.00473771, 0.764301)
|
||||
bones/46/rotation = Quaternion(0.85767, -0.507213, -0.0397527, -0.0745436)
|
||||
bones/47/rotation = Quaternion(3.53394e-15, -4.89182e-15, 0.270016, 0.962856)
|
||||
bones/48/rotation = Quaternion(-2.73765e-13, 0.707107, 2.73765e-13, 0.707107)
|
||||
|
||||
[node name="Character_Mystic_01" parent="Root Scene3/RootNode/Skeleton3D" index="0"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_EvilGod_01" parent="Root Scene3/RootNode/Skeleton3D" index="1"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_AncientQueen_01" parent="Root Scene3/RootNode/Skeleton3D" index="2"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_Ancient_Warrior_01" parent="Root Scene3/RootNode/Skeleton3D" index="3"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_Medusa_01" parent="Root Scene3/RootNode/Skeleton3D" index="4"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_SpiritDemon_Glow" parent="Root Scene3/RootNode/Skeleton3D" index="5"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_SpiritDemon" parent="Root Scene3/RootNode/Skeleton3D" index="6"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_DarkElf_01" parent="Root Scene3/RootNode/Skeleton3D" index="7"]
|
||||
visible = false
|
||||
|
||||
[node name="Character_ForestGuardian_01" parent="Root Scene3/RootNode/Skeleton3D" index="9"]
|
||||
visible = false
|
||||
|
||||
[node name="RootNode" parent="." instance=ExtResource("13_n80tv")]
|
||||
active_customization = {
|
||||
"ArmLowerLeft": 3,
|
||||
"ArmLowerRight": 3,
|
||||
"ArmUpperLeft": 1,
|
||||
"ArmUpperRight": 1,
|
||||
"BackAttachment": -1,
|
||||
"Ear": -1,
|
||||
"ElbowAttachLeft": -1,
|
||||
"ElbowAttachRight": -1,
|
||||
"Eyebrow": 0,
|
||||
"Hair": -1,
|
||||
"HandLeft": 5,
|
||||
"HandRight": 5,
|
||||
"Head": 12,
|
||||
"HeadCoverings": 3,
|
||||
"HelmetAttachment": 0,
|
||||
"Hips": 15,
|
||||
"HipsAttachment": 0,
|
||||
"KneeAttachLeft": 0,
|
||||
"KneeAttachRight": 0,
|
||||
"LegLeft": 2,
|
||||
"LegRight": 2,
|
||||
"ShoulderAttachLeft": 0,
|
||||
"ShoulderAttachRight": 0,
|
||||
"Torso": 12
|
||||
}
|
||||
transform = Transform3D(1, 0, 0, 0, -2.98023e-08, 1, 0, -1, -2.98023e-08, -2.88206, 0.0698627, 2.16467)
|
||||
|
||||
[node name="RootNode2" parent="." instance=ExtResource("13_n80tv")]
|
||||
active_customization = {
|
||||
"ArmLowerLeft": 3,
|
||||
"ArmLowerRight": 3,
|
||||
"ArmUpperLeft": 1,
|
||||
"ArmUpperRight": 1,
|
||||
"BackAttachment": -1,
|
||||
"Ear": -1,
|
||||
"ElbowAttachLeft": -1,
|
||||
"ElbowAttachRight": -1,
|
||||
"Eyebrow": 0,
|
||||
"Hair": -1,
|
||||
"HandLeft": 5,
|
||||
"HandRight": 5,
|
||||
"Head": 12,
|
||||
"HeadCoverings": 3,
|
||||
"HelmetAttachment": 0,
|
||||
"Hips": 15,
|
||||
"HipsAttachment": 0,
|
||||
"KneeAttachLeft": 0,
|
||||
"KneeAttachRight": 0,
|
||||
"LegLeft": 2,
|
||||
"LegRight": 2,
|
||||
"ShoulderAttachLeft": 0,
|
||||
"ShoulderAttachRight": 0,
|
||||
"Torso": 12
|
||||
}
|
||||
transform = Transform3D(-1, -8.74228e-08, 0, -2.6054e-15, 2.98023e-08, 1, -8.74228e-08, 1, -2.98023e-08, 2.14246, 0.0698627, -1.57687)
|
||||
|
||||
[node name="Player" parent="." instance=ExtResource("14_cnw06")]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -1.64545, -0.000884213, -1.4917)
|
||||
|
||||
[editable path="Root Scene"]
|
||||
[editable path="Root Scene3"]
|
||||
|
|
Binary file not shown.
File diff suppressed because it is too large
Load Diff
BIN
godot/Models/Characters/Animations/BasicMotions@Walk01_ClosedHands.fbx (Stored with Git LFS)
Normal file
BIN
godot/Models/Characters/Animations/BasicMotions@Walk01_ClosedHands.fbx (Stored with Git LFS)
Normal file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,77 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://djx1fn3fntb3y"
|
||||
path="res://.godot/imported/Characters.fbx-b78b9b169bf2dbff3564f35677dfeeb2.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Characters/Characters.fbx"
|
||||
dest_files=["res://.godot/imported/Characters.fbx-b78b9b169bf2dbff3564f35677dfeeb2.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"A20": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/A20.tres"
|
||||
},
|
||||
"_Ghost": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/_Ghost.tres"
|
||||
},
|
||||
"lambert10": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/lambert10.tres"
|
||||
},
|
||||
"lambert11": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/lambert11.tres"
|
||||
},
|
||||
"lambert12": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/lambert12.tres"
|
||||
},
|
||||
"lambert13": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/lambert13.tres"
|
||||
},
|
||||
"lambert14": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/lambert14.tres"
|
||||
},
|
||||
"lambert15": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/lambert15.tres"
|
||||
},
|
||||
"lambert2": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/lambert2.tres"
|
||||
},
|
||||
"lambert9": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/lambert9.tres"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
|
@ -0,0 +1,10 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://dpcx2gc84m4mb"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://clhhkyqcf5h8f" path="res://Models/Characters/Textures/FantasyRivals_Texture_01_A.png" id="1_3f30f"]
|
||||
|
||||
[resource]
|
||||
resource_name = "A20"
|
||||
albedo_color = Color(0.906332, 0.906332, 0.906332, 1)
|
||||
albedo_texture = ExtResource("1_3f30f")
|
||||
metallic = 0.2
|
||||
roughness = 0.8
|
|
@ -0,0 +1,8 @@
|
|||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://da1kgssl5if81"]
|
||||
|
||||
[resource]
|
||||
resource_name = "_Ghost"
|
||||
vertex_color_use_as_albedo = true
|
||||
albedo_color = Color(0.906332, 0.906332, 0.906332, 0.496239)
|
||||
metallic = 0.2
|
||||
roughness = 0.8
|
|
@ -0,0 +1,10 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://b43qg3ciwosal"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://clhhkyqcf5h8f" path="res://Models/Characters/Textures/FantasyRivals_Texture_01_A.png" id="1_61ufs"]
|
||||
|
||||
[resource]
|
||||
resource_name = "lambert10"
|
||||
albedo_color = Color(0.906332, 0.906332, 0.906332, 1)
|
||||
albedo_texture = ExtResource("1_61ufs")
|
||||
metallic = 0.2
|
||||
roughness = 0.8
|
|
@ -0,0 +1,10 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://d2ndm87qf7io1"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://clhhkyqcf5h8f" path="res://Models/Characters/Textures/FantasyRivals_Texture_01_A.png" id="1_h11jc"]
|
||||
|
||||
[resource]
|
||||
resource_name = "lambert11"
|
||||
albedo_color = Color(0.906332, 0.906332, 0.906332, 1)
|
||||
albedo_texture = ExtResource("1_h11jc")
|
||||
metallic = 0.2
|
||||
roughness = 0.8
|
|
@ -0,0 +1,10 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://cmk5q4vdc3ek7"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://clhhkyqcf5h8f" path="res://Models/Characters/Textures/FantasyRivals_Texture_01_A.png" id="1_0b1nj"]
|
||||
|
||||
[resource]
|
||||
resource_name = "lambert12"
|
||||
albedo_color = Color(0.906332, 0.906332, 0.906332, 1)
|
||||
albedo_texture = ExtResource("1_0b1nj")
|
||||
metallic = 0.2
|
||||
roughness = 0.8
|
|
@ -0,0 +1,10 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://cn15la56mt8a1"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://clhhkyqcf5h8f" path="res://Models/Characters/Textures/FantasyRivals_Texture_01_A.png" id="1_2jk1b"]
|
||||
|
||||
[resource]
|
||||
resource_name = "lambert13"
|
||||
albedo_color = Color(0.906332, 0.906332, 0.906332, 1)
|
||||
albedo_texture = ExtResource("1_2jk1b")
|
||||
metallic = 0.2
|
||||
roughness = 0.8
|
|
@ -0,0 +1,13 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=3 format=3 uid="uid://b23jx81mk4qe4"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://clhhkyqcf5h8f" path="res://Models/Characters/Textures/FantasyRivals_Texture_01_A.png" id="1_p387y"]
|
||||
[ext_resource type="Texture2D" uid="uid://xsfaqeyhrtcr" path="res://Models/Characters/Textures/FantasyRivals_Texture_01_Emissive.png" id="2_vuvp1"]
|
||||
|
||||
[resource]
|
||||
resource_name = "lambert14"
|
||||
albedo_color = Color(0.906332, 0.906332, 0.906332, 1)
|
||||
albedo_texture = ExtResource("1_p387y")
|
||||
metallic = 0.2
|
||||
roughness = 0.8
|
||||
emission_enabled = true
|
||||
emission_texture = ExtResource("2_vuvp1")
|
|
@ -0,0 +1,7 @@
|
|||
[gd_resource type="StandardMaterial3D" format=3 uid="uid://wk66tnm3k4ct"]
|
||||
|
||||
[resource]
|
||||
resource_name = "lambert15"
|
||||
albedo_color = Color(0.906332, 0.906332, 0.906332, 1)
|
||||
metallic = 0.2
|
||||
roughness = 0.8
|
|
@ -1,13 +1,10 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bycoxdvsaakl"]
|
||||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://dnpkeelcoonfh"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dcjja0gufc40f" path="res://Models/Characters/Textures/PolygonFantasyHero_Texture_01_B.png" id="1_ysskd"]
|
||||
[ext_resource type="Texture2D" uid="uid://clhhkyqcf5h8f" path="res://Models/Characters/Textures/FantasyRivals_Texture_01_A.png" id="1_soi1r"]
|
||||
|
||||
[resource]
|
||||
resource_name = "lambert2"
|
||||
diffuse_mode = 2
|
||||
specular_mode = 2
|
||||
albedo_texture = ExtResource("1_ysskd")
|
||||
rim_tint = 1.0
|
||||
grow_amount = -0.264
|
||||
distance_fade_min_distance = 2.4
|
||||
distance_fade_max_distance = 3.25
|
||||
albedo_color = Color(0.906332, 0.906332, 0.906332, 1)
|
||||
albedo_texture = ExtResource("1_soi1r")
|
||||
metallic = 0.2
|
||||
roughness = 0.8
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://dx4s0pl4bovxd"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://clhhkyqcf5h8f" path="res://Models/Characters/Textures/FantasyRivals_Texture_01_A.png" id="1_5igj4"]
|
||||
|
||||
[resource]
|
||||
resource_name = "lambert9"
|
||||
albedo_color = Color(0.906332, 0.906332, 0.906332, 1)
|
||||
albedo_texture = ExtResource("1_5igj4")
|
||||
metallic = 0.2
|
||||
roughness = 0.8
|
|
@ -0,0 +1,13 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bycoxdvsaakl"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://dcjja0gufc40f" path="res://Models/Characters/Textures/PolygonFantasyHero_Texture_01_B.png" id="1_ysskd"]
|
||||
|
||||
[resource]
|
||||
resource_name = "lambert2"
|
||||
diffuse_mode = 2
|
||||
specular_mode = 2
|
||||
albedo_texture = ExtResource("1_ysskd")
|
||||
rim_tint = 1.0
|
||||
grow_amount = -0.264
|
||||
distance_fade_min_distance = 2.4
|
||||
distance_fade_max_distance = 3.25
|
|
@ -13,7 +13,7 @@ dest_files=["res://.godot/imported/ModularCharacters.fbx-ce6e3e30d0ba5e348821aac
|
|||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_type="CustomizableCharacter"
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
|
@ -33,11 +33,11 @@ _subresources={
|
|||
"materials": {
|
||||
"lambert2": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/lambert2.tres"
|
||||
"use_external/path": "res://Models/Characters/Materials/mod_chars_1.tres"
|
||||
},
|
||||
"lambert3": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Characters/Materials/lambert3.tres"
|
||||
"use_external/path": "res://Models/Characters/Materials/mod_chars_2.tres"
|
||||
}
|
||||
},
|
||||
"nodes": {
|
||||
|
|
BIN
godot/Models/Characters/Textures/FantasyRivals_Texture_01_A.png (Stored with Git LFS)
Normal file
BIN
godot/Models/Characters/Textures/FantasyRivals_Texture_01_A.png (Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://clhhkyqcf5h8f"
|
||||
path.s3tc="res://.godot/imported/FantasyRivals_Texture_01_A.png-6a4ca283a782dfd6da76aad701075de8.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Characters/Textures/FantasyRivals_Texture_01_A.png"
|
||||
dest_files=["res://.godot/imported/FantasyRivals_Texture_01_A.png-6a4ca283a782dfd6da76aad701075de8.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
BIN
godot/Models/Characters/Textures/FantasyRivals_Texture_01_B.png (Stored with Git LFS)
Normal file
BIN
godot/Models/Characters/Textures/FantasyRivals_Texture_01_B.png (Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cosqyeum47ouj"
|
||||
path="res://.godot/imported/FantasyRivals_Texture_01_B.png-6edef5a094a5886017161c3aa99c2331.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Characters/Textures/FantasyRivals_Texture_01_B.png"
|
||||
dest_files=["res://.godot/imported/FantasyRivals_Texture_01_B.png-6edef5a094a5886017161c3aa99c2331.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
BIN
godot/Models/Characters/Textures/FantasyRivals_Texture_01_C.png (Stored with Git LFS)
Normal file
BIN
godot/Models/Characters/Textures/FantasyRivals_Texture_01_C.png (Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://xxjlb6ijc2bv"
|
||||
path="res://.godot/imported/FantasyRivals_Texture_01_C.png-16fd0c3b5e2d10bdae8a83eea1b57e46.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Characters/Textures/FantasyRivals_Texture_01_C.png"
|
||||
dest_files=["res://.godot/imported/FantasyRivals_Texture_01_C.png-16fd0c3b5e2d10bdae8a83eea1b57e46.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
BIN
godot/Models/Characters/Textures/FantasyRivals_Texture_01_D.png (Stored with Git LFS)
Normal file
BIN
godot/Models/Characters/Textures/FantasyRivals_Texture_01_D.png (Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bj7gf6r4kmowb"
|
||||
path="res://.godot/imported/FantasyRivals_Texture_01_D.png-5266503ab6a33574f567b9f5a049ae17.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Characters/Textures/FantasyRivals_Texture_01_D.png"
|
||||
dest_files=["res://.godot/imported/FantasyRivals_Texture_01_D.png-5266503ab6a33574f567b9f5a049ae17.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
BIN
godot/Models/Characters/Textures/FantasyRivals_Texture_01_Emissive.png (Stored with Git LFS)
Normal file
BIN
godot/Models/Characters/Textures/FantasyRivals_Texture_01_Emissive.png (Stored with Git LFS)
Normal file
Binary file not shown.
|
@ -0,0 +1,35 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://xsfaqeyhrtcr"
|
||||
path.s3tc="res://.godot/imported/FantasyRivals_Texture_01_Emissive.png-42108ac76425578a804fdddc8162cf27.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Characters/Textures/FantasyRivals_Texture_01_Emissive.png"
|
||||
dest_files=["res://.godot/imported/FantasyRivals_Texture_01_Emissive.png-42108ac76425578a804fdddc8162cf27.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
|
@ -4,10 +4,9 @@
|
|||
|
||||
[resource]
|
||||
resource_name = "Texture_01"
|
||||
albedo_color = Color(1, 0.819608, 0.219608, 1)
|
||||
albedo_color = Color(0.305882, 0.478431, 0.427451, 1)
|
||||
albedo_texture = ExtResource("1_wwnl0")
|
||||
metallic_specular = 0.0
|
||||
roughness = 0.490532
|
||||
uv1_offset = Vector3(0, 0, 1)
|
||||
uv1_triplanar = true
|
||||
uv1_world_triplanar = true
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://cnatewkictl4q"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://blqvnn1uyx5na" path="res://Models/Environments/Textures/PolygonPrototype_Texture_Grid_01.png" id="1_dqqfe"]
|
||||
|
||||
[resource]
|
||||
resource_name = "Texture_01"
|
||||
albedo_color = Color(0.819608, 0.537255, 0, 1)
|
||||
albedo_texture = ExtResource("1_dqqfe")
|
||||
metallic_specular = 0.0
|
||||
roughness = 0.490532
|
||||
uv1_offset = Vector3(0, 0, 1)
|
||||
uv1_triplanar = true
|
|
@ -0,0 +1,12 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://j71oow54fjat"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://blqvnn1uyx5na" path="res://Models/Environments/Textures/PolygonPrototype_Texture_Grid_01.png" id="1_gfptx"]
|
||||
|
||||
[resource]
|
||||
resource_name = "Texture_01"
|
||||
albedo_color = Color(1, 0.372549, 0.0901961, 1)
|
||||
albedo_texture = ExtResource("1_gfptx")
|
||||
metallic_specular = 0.0
|
||||
roughness = 0.490532
|
||||
uv1_offset = Vector3(0, 0, 1)
|
||||
uv1_triplanar = true
|
Binary file not shown.
|
@ -0,0 +1,41 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://cgajq7ygn3aiy"
|
||||
path="res://.godot/imported/SM_Buildings_DoorFrame_01.fbx-1b856f7aef0165939c5812701ed2ba34.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Environments/SM_Buildings_DoorFrame_01.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Buildings_DoorFrame_01.fbx-1b856f7aef0165939c5812701ed2ba34.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Texture_01": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Environments/Materials/Texture_03.tres"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
|
@ -0,0 +1,41 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://hu8pchvhxwxn"
|
||||
path="res://.godot/imported/SM_Buildings_Door_01.fbx-fe1e1429f39f150abf5a941331e28451.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Environments/SM_Buildings_Door_01.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Buildings_Door_01.fbx-fe1e1429f39f150abf5a941331e28451.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Texture_01": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Environments/Materials/Texture_02.tres"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
|
@ -0,0 +1,34 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bhqja56ajroyf"
|
||||
path="res://.godot/imported/SM_Icon_Coin_01.fbx-8c3d4b7fbbab7005009fa887a67b4b63.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Props/SM_Icon_Coin_01.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Icon_Coin_01.fbx-8c3d4b7fbbab7005009fa887a67b4b63.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
|
@ -3,25 +3,26 @@
|
|||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://daxuhceq1xp8e"
|
||||
path="res://.godot/imported/Skybox_No_Snow_Diff.png-4aac1df060d706f7f84d7e011badea7b.ctex"
|
||||
path.s3tc="res://.godot/imported/Skybox_No_Snow_Diff.png-4aac1df060d706f7f84d7e011badea7b.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Sky/Skybox_No_Snow_Diff.png"
|
||||
dest_files=["res://.godot/imported/Skybox_No_Snow_Diff.png-4aac1df060d706f7f84d7e011badea7b.ctex"]
|
||||
dest_files=["res://.godot/imported/Skybox_No_Snow_Diff.png-4aac1df060d706f7f84d7e011badea7b.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
|
@ -31,4 +32,4 @@ process/normal_map_invert_y=false
|
|||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
detect_3d/compress_to=0
|
||||
|
|
|
@ -3,32 +3,33 @@
|
|||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cbgfiq60qi04y"
|
||||
path="res://.godot/imported/Skybox_Normal.png-0298afdd81d923bbadde428f4cf9fcc0.ctex"
|
||||
path.s3tc="res://.godot/imported/Skybox_Normal.png-0298afdd81d923bbadde428f4cf9fcc0.s3tc.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Sky/Skybox_Normal.png"
|
||||
dest_files=["res://.godot/imported/Skybox_Normal.png-0298afdd81d923bbadde428f4cf9fcc0.ctex"]
|
||||
dest_files=["res://.godot/imported/Skybox_Normal.png-0298afdd81d923bbadde428f4cf9fcc0.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/normal_map=1
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
roughness/mode=1
|
||||
roughness/src_normal="res://Models/Sky/Skybox_Normal.png"
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
detect_3d/compress_to=0
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
[gd_resource type="StandardMaterial3D" load_steps=2 format=3 uid="uid://bmmdcphiyb35f"]
|
||||
[gd_resource type="StandardMaterial3D" load_steps=3 format=3 uid="uid://bmmdcphiyb35f"]
|
||||
|
||||
[ext_resource type="Texture2D" uid="uid://fd8740pp6c65" path="res://Models/Sky/Skybox_Diff.png" id="1_mcq4h"]
|
||||
[ext_resource type="Texture2D" uid="uid://cbgfiq60qi04y" path="res://Models/Sky/Skybox_Normal.png" id="2_5lejb"]
|
||||
|
||||
[resource]
|
||||
transparency = 1
|
||||
albedo_texture = ExtResource("1_mcq4h")
|
||||
normal_enabled = true
|
||||
normal_texture = ExtResource("2_5lejb")
|
||||
|
|
|
@ -14,7 +14,7 @@ dest_files=["res://.godot/imported/SM_Prop_Sword_01.fbx-bcf24ec78f44a339d13c7f93
|
|||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_name="SM_Prop_Sword"
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
|
|
Binary file not shown.
|
@ -0,0 +1,53 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://f7tvhmjaqgp8"
|
||||
path="res://.godot/imported/SM_Wep_Axe_01.fbx-c716aff6544e971172cc054fdf973daa.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://Models/Weapons/SM_Wep_Axe_01.fbx"
|
||||
dest_files=["res://.godot/imported/SM_Wep_Axe_01.fbx-c716aff6544e971172cc054fdf973daa.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"lambert2": {
|
||||
"use_external/enabled": true,
|
||||
"use_external/path": "res://Models/Environments/Materials/Texture_01.tres"
|
||||
}
|
||||
},
|
||||
"meshes": {
|
||||
"Root Scene_SM_Wep_Axe_01": {
|
||||
"generate/lightmap_uv": 0,
|
||||
"generate/lods": 0,
|
||||
"generate/shadow_meshes": 0,
|
||||
"lods/normal_merge_angle": 60.0,
|
||||
"lods/normal_split_angle": 25.0,
|
||||
"save_to_file/enabled": true,
|
||||
"save_to_file/make_streamable": "",
|
||||
"save_to_file/path": "res://Models/Weapons/axe.res"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
Binary file not shown.
|
@ -1,7 +1,9 @@
|
|||
[gd_scene load_steps=10 format=3 uid="uid://dw8q1vqnc657"]
|
||||
[gd_scene load_steps=15 format=3 uid="uid://dw8q1vqnc657"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://c8h5f82tunglj" path="res://Models/Characters/ModularCharacters.fbx" id="1_b4mv3"]
|
||||
[ext_resource type="AnimationLibrary" uid="uid://dpa5kel2sewxo" path="res://Models/Characters/Animations/BasicMotions@Idle01.fbx" id="1_wqiit"]
|
||||
[ext_resource type="AnimationLibrary" uid="uid://du5bljpia3pci" path="res://Models/Characters/Animations/BasicMotions@Run01.fbx" id="2_nqgk0"]
|
||||
[ext_resource type="AnimationLibrary" uid="uid://c6hvlg3lbhfjs" path="res://Models/Characters/Animations/BasicMotions@Walk01_ClosedHands.fbx" id="2_qsv71"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_62nln"]
|
||||
resource_name = "Take 001"
|
||||
|
@ -330,64 +332,64 @@ _data = {
|
|||
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_3b5eb"]
|
||||
animation = &"BasicMotions@Idle01/BasicMotions_Idle01_ClosedHands"
|
||||
|
||||
[sub_resource type="AnimationNodeBlend2" id="AnimationNodeBlend2_5ua7i"]
|
||||
|
||||
[sub_resource type="AnimationNodeAnimation" id="AnimationNodeAnimation_p73e4"]
|
||||
animation = &"BasicMotions@Run01/BasicMotions_Run01 - Forwards"
|
||||
|
||||
[sub_resource type="AnimationNodeBlendTree" id="AnimationNodeBlendTree_idcvn"]
|
||||
graph_offset = Vector2(-154, 108)
|
||||
nodes/Animation/node = SubResource("AnimationNodeAnimation_3b5eb")
|
||||
nodes/Animation/position = Vector2(-320, 140)
|
||||
node_connections = [&"output", 0, &"Animation"]
|
||||
graph_offset = Vector2(-578.579, 250.949)
|
||||
nodes/Idle/node = SubResource("AnimationNodeAnimation_3b5eb")
|
||||
nodes/Idle/position = Vector2(-320, 140)
|
||||
nodes/IdleWalkBlend/node = SubResource("AnimationNodeBlend2_5ua7i")
|
||||
nodes/IdleWalkBlend/position = Vector2(140, 140)
|
||||
nodes/Walk/node = SubResource("AnimationNodeAnimation_p73e4")
|
||||
nodes/Walk/position = Vector2(-300, 260)
|
||||
node_connections = [&"IdleWalkBlend", 0, &"Idle", &"IdleWalkBlend", 1, &"Walk", &"output", 0, &"IdleWalkBlend"]
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachineTransition" id="AnimationNodeStateMachineTransition_5wf40"]
|
||||
advance_mode = 2
|
||||
|
||||
[sub_resource type="AnimationNodeStateMachine" id="AnimationNodeStateMachine_7e1iu"]
|
||||
states/BlendTree/node = SubResource("AnimationNodeBlendTree_idcvn")
|
||||
states/BlendTree/position = Vector2(389, 112)
|
||||
states/Idle/node = SubResource("AnimationNodeBlendTree_idcvn")
|
||||
states/Idle/position = Vector2(389, 112)
|
||||
states/Start/position = Vector2(227, 112)
|
||||
transitions = ["Start", "BlendTree", SubResource("AnimationNodeStateMachineTransition_5wf40")]
|
||||
transitions = ["Start", "Idle", SubResource("AnimationNodeStateMachineTransition_5wf40")]
|
||||
graph_offset = Vector2(-219, -1)
|
||||
|
||||
[sub_resource type="GDScript" id="GDScript_nld2l"]
|
||||
script/source = "extends AnimationTree
|
||||
|
||||
@onready var player: Player = get_node(advance_expression_base_node)
|
||||
var idle_walk_blend = 0.0
|
||||
|
||||
func _process(_delta):
|
||||
if(player.get_is_moving()):
|
||||
idle_walk_blend = move_toward(idle_walk_blend, 1.0, _delta * 5.0)
|
||||
else: idle_walk_blend = move_toward(idle_walk_blend, 0.0, _delta * 5.0)
|
||||
set(\"parameters/Idle/IdleWalkBlend/blend_amount\", idle_walk_blend)
|
||||
"
|
||||
|
||||
[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_hqeid"]
|
||||
radius = 0.548248
|
||||
height = 1.85415
|
||||
|
||||
[node name="Player" type="Player"]
|
||||
active_customization = {
|
||||
"ArmLowerLeft": 2,
|
||||
"ArmLowerRight": 3,
|
||||
"ArmUpperLeft": 1,
|
||||
"ArmUpperRight": 3,
|
||||
"BackAttachment": 1,
|
||||
"Ear": -1,
|
||||
"ElbowAttachLeft": -1,
|
||||
"ElbowAttachRight": -1,
|
||||
"Eyebrow": 0,
|
||||
"Hair": 13,
|
||||
"HandLeft": 0,
|
||||
"HandRight": 4,
|
||||
"Head": 15,
|
||||
"HeadCoverings": -1,
|
||||
"HelmetAttachment": -1,
|
||||
"Hips": 3,
|
||||
"HipsAttachment": 3,
|
||||
"KneeAttachLeft": -1,
|
||||
"KneeAttachRight": -1,
|
||||
"LegLeft": 12,
|
||||
"LegRight": 12,
|
||||
"ShoulderAttachLeft": 16,
|
||||
"ShoulderAttachRight": -1,
|
||||
"Torso": 5
|
||||
}
|
||||
slide_on_ceiling = false
|
||||
|
||||
[node name="AnimationTree" type="AnimationTree" parent="."]
|
||||
root_node = NodePath("../Model")
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_eyw6x"),
|
||||
"BasicMotions@Idle01": ExtResource("1_wqiit")
|
||||
"BasicMotions@Idle01": ExtResource("1_wqiit"),
|
||||
"BasicMotions@Run01": ExtResource("2_nqgk0"),
|
||||
"BasicMotions@Walk01_ClosedHands": ExtResource("2_qsv71")
|
||||
}
|
||||
tree_root = SubResource("AnimationNodeStateMachine_7e1iu")
|
||||
advance_expression_base_node = NodePath("..")
|
||||
anim_player = NodePath("../Model/AnimationPlayer")
|
||||
parameters/Idle/IdleWalkBlend/blend_amount = 0
|
||||
script = SubResource("GDScript_nld2l")
|
||||
|
||||
[node name="CollisionShape3D" type="CollisionShape3D" parent="."]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.925894, 0)
|
||||
|
@ -396,20 +398,46 @@ shape = SubResource("CapsuleShape3D_hqeid")
|
|||
[node name="PlayerInput" type="PlayerInput" parent="."]
|
||||
|
||||
[node name="Model" parent="." instance=ExtResource("1_b4mv3")]
|
||||
active_customization = {
|
||||
"ArmLowerLeft": 5,
|
||||
"ArmLowerRight": 5,
|
||||
"ArmUpperLeft": 1,
|
||||
"ArmUpperRight": 1,
|
||||
"BackAttachment": -1,
|
||||
"Ear": -1,
|
||||
"ElbowAttachLeft": 1,
|
||||
"ElbowAttachRight": 1,
|
||||
"Eyebrow": 1,
|
||||
"Hair": -1,
|
||||
"HandLeft": 1,
|
||||
"HandRight": 1,
|
||||
"Head": 8,
|
||||
"HeadCoverings": -1,
|
||||
"HelmetAttachment": -1,
|
||||
"Hips": 2,
|
||||
"HipsAttachment": 5,
|
||||
"KneeAttachLeft": -1,
|
||||
"KneeAttachRight": -1,
|
||||
"LegLeft": 6,
|
||||
"LegRight": 6,
|
||||
"ShoulderAttachLeft": -1,
|
||||
"ShoulderAttachRight": -1,
|
||||
"Torso": 6
|
||||
}
|
||||
|
||||
[node name="GeneralSkeleton" parent="Model/RootNode" index="0"]
|
||||
bones/0/rotation = Quaternion(-2.98023e-08, 5.55112e-17, 5.55112e-17, 1)
|
||||
bones/1/position = Vector3(0.00799814, 0.822939, -0.0170919)
|
||||
bones/1/rotation = Quaternion(-0.0173024, -0.0769098, 0.00854839, 0.996851)
|
||||
bones/2/rotation = Quaternion(0.00896411, 0.00637054, 0.000265095, 0.99994)
|
||||
bones/3/rotation = Quaternion(0.00882963, 0.00637047, 0.000267564, 0.999941)
|
||||
bones/4/rotation = Quaternion(0.00907812, 0.00637071, 0.000262791, 0.999939)
|
||||
bones/5/rotation = Quaternion(-0.0130848, 0.0288738, -0.00513406, 0.999484)
|
||||
bones/6/rotation = Quaternion(-0.0130942, 0.0288758, -0.00513693, 0.999484)
|
||||
bones/1/position = Vector3(0.0064089, 0.824015, -0.0161932)
|
||||
bones/1/rotation = Quaternion(-0.0186555, -0.0848505, 0.0122633, 0.996144)
|
||||
bones/2/rotation = Quaternion(0.00877745, 0.00637038, 0.000268667, 0.999941)
|
||||
bones/3/rotation = Quaternion(0.00861796, 0.00637028, 0.0002716, 0.999943)
|
||||
bones/4/rotation = Quaternion(0.0088558, 0.00637049, 0.000267043, 0.99994)
|
||||
bones/5/rotation = Quaternion(-0.0139191, 0.0328765, -0.00679956, 0.999339)
|
||||
bones/6/rotation = Quaternion(-0.0139146, 0.0328705, -0.00679594, 0.99934)
|
||||
bones/10/rotation = Quaternion(0.519859, 0.470118, 0.477057, -0.530238)
|
||||
bones/11/rotation = Quaternion(0.24205, 0.842133, -0.4545, -0.160169)
|
||||
bones/12/rotation = Quaternion(-0.0282314, -0.699896, -0.0284688, 0.713119)
|
||||
bones/13/rotation = Quaternion(-0.0439467, 0.565119, -0.143898, 0.811174)
|
||||
bones/11/rotation = Quaternion(0.247455, 0.839095, -0.458569, -0.156207)
|
||||
bones/12/rotation = Quaternion(-0.039877, -0.696571, -0.0402117, 0.715249)
|
||||
bones/13/rotation = Quaternion(-0.0420627, 0.558109, -0.139609, 0.816857)
|
||||
bones/14/rotation = Quaternion(-0.256269, 0.776338, 0.203807, 0.538599)
|
||||
bones/15/rotation = Quaternion(0.14485, 0.51961, 0.145065, 0.829446)
|
||||
bones/16/rotation = Quaternion(0.159353, 0.516644, 0.140377, 0.829446)
|
||||
|
@ -420,9 +448,9 @@ bones/21/rotation = Quaternion(0.494946, 0.0399225, 0.106743, 0.861418)
|
|||
bones/22/rotation = Quaternion(0.554517, 0.0271624, 0.0237916, 0.831389)
|
||||
bones/23/rotation = Quaternion(0.554045, 0.0389721, 0.0175394, 0.831389)
|
||||
bones/27/rotation = Quaternion(0.5168, -0.475173, -0.481158, -0.52499)
|
||||
bones/28/rotation = Quaternion(-0.125884, 0.859315, -0.455472, 0.195646)
|
||||
bones/29/rotation = Quaternion(0.0109876, 0.709589, -0.0110795, 0.704443)
|
||||
bones/30/rotation = Quaternion(0.0112271, -0.589384, 0.0652025, 0.805139)
|
||||
bones/28/rotation = Quaternion(-0.115133, 0.860735, -0.451588, 0.20481)
|
||||
bones/29/rotation = Quaternion(0.0209625, 0.711686, -0.0211379, 0.701867)
|
||||
bones/30/rotation = Quaternion(0.00773145, -0.600065, 0.0707188, 0.796782)
|
||||
bones/31/rotation = Quaternion(-0.256268, -0.776338, -0.203807, 0.538599)
|
||||
bones/32/rotation = Quaternion(0.14485, -0.51961, -0.145065, 0.829446)
|
||||
bones/33/rotation = Quaternion(0.159352, -0.516644, -0.140377, 0.829446)
|
||||
|
@ -432,19 +460,19 @@ bones/36/rotation = Quaternion(0.49701, -0.238709, -0.0692157, 0.831389)
|
|||
bones/38/rotation = Quaternion(0.494946, -0.0399222, -0.106743, 0.861418)
|
||||
bones/39/rotation = Quaternion(0.554517, -0.0271621, -0.0237913, 0.831389)
|
||||
bones/40/rotation = Quaternion(0.554045, -0.0389717, -0.0175393, 0.831389)
|
||||
bones/50/rotation = Quaternion(-0.0911938, 0.0463263, 0.991272, 0.0831711)
|
||||
bones/50/rotation = Quaternion(-0.0826276, 0.0457204, 0.991888, 0.085091)
|
||||
bones/50/scale = Vector3(1.00002, 0.999999, 1)
|
||||
bones/51/rotation = Quaternion(0.00970492, 0.959913, -0.280113, -0.0029922)
|
||||
bones/51/rotation = Quaternion(0.00967221, 0.960188, -0.27917, -0.00298206)
|
||||
bones/51/scale = Vector3(1.00002, 0.999999, 1.00002)
|
||||
bones/52/rotation = Quaternion(0.0792991, 0.536526, -0.839989, -0.0164049)
|
||||
bones/52/rotation = Quaternion(0.0778185, 0.536789, -0.839965, -0.0161634)
|
||||
bones/52/scale = Vector3(0.999948, 0.999973, 1.00001)
|
||||
bones/54/rotation = Quaternion(9.7728e-07, 1, -1.50204e-05, 3.50609e-06)
|
||||
bones/54/scale = Vector3(0.999999, 0.999986, 1.00002)
|
||||
bones/56/rotation = Quaternion(0.179453, 0.139217, 0.970475, -0.0811989)
|
||||
bones/56/rotation = Quaternion(0.188468, 0.132146, 0.969868, -0.079841)
|
||||
bones/56/scale = Vector3(1.00002, 0.999999, 1)
|
||||
bones/57/rotation = Quaternion(-0.0102556, 0.955128, -0.295999, 0.00316205)
|
||||
bones/57/rotation = Quaternion(-0.0100069, 0.957327, -0.288819, 0.00308538)
|
||||
bones/57/scale = Vector3(1.00001, 0.999999, 1.00001)
|
||||
bones/58/rotation = Quaternion(-0.0675913, 0.607901, -0.790822, 0.0220936)
|
||||
bones/58/rotation = Quaternion(-0.069029, 0.610718, -0.78851, 0.0226031)
|
||||
bones/58/scale = Vector3(0.999956, 0.999987, 1.00001)
|
||||
bones/60/rotation = Quaternion(-6.79618e-07, 1, -9.98378e-06, -2.30227e-06)
|
||||
bones/60/scale = Vector3(0.999999, 0.999991, 1.00001)
|
||||
|
@ -572,6 +600,9 @@ visible = false
|
|||
[node name="Chr_Hair_13" parent="Model/RootNode/GeneralSkeleton" index="40"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Hair_14" parent="Model/RootNode/GeneralSkeleton" index="41"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Hair_15" parent="Model/RootNode/GeneralSkeleton" index="42"]
|
||||
visible = false
|
||||
|
||||
|
@ -686,6 +717,9 @@ visible = false
|
|||
[node name="Chr_BackAttachment_01" parent="Model/RootNode/GeneralSkeleton" index="79"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_BackAttachment_02" parent="Model/RootNode/GeneralSkeleton" index="80"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_BackAttachment_03" parent="Model/RootNode/GeneralSkeleton" index="81"]
|
||||
visible = false
|
||||
|
||||
|
@ -836,6 +870,9 @@ visible = false
|
|||
[node name="Chr_ShoulderAttachLeft_16" parent="Model/RootNode/GeneralSkeleton" index="130"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ShoulderAttachLeft_17" parent="Model/RootNode/GeneralSkeleton" index="131"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ShoulderAttachLeft_18" parent="Model/RootNode/GeneralSkeleton" index="132"]
|
||||
visible = false
|
||||
|
||||
|
@ -851,9 +888,6 @@ visible = false
|
|||
[node name="Chr_ElbowAttachRight_01" parent="Model/RootNode/GeneralSkeleton" index="136"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ElbowAttachRight_02" parent="Model/RootNode/GeneralSkeleton" index="137"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ElbowAttachRight_03" parent="Model/RootNode/GeneralSkeleton" index="138"]
|
||||
visible = false
|
||||
|
||||
|
@ -869,9 +903,6 @@ visible = false
|
|||
[node name="Chr_ElbowAttachLeft_01" parent="Model/RootNode/GeneralSkeleton" index="142"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ElbowAttachLeft_02" parent="Model/RootNode/GeneralSkeleton" index="143"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ElbowAttachLeft_03" parent="Model/RootNode/GeneralSkeleton" index="144"]
|
||||
visible = false
|
||||
|
||||
|
@ -893,10 +924,10 @@ visible = false
|
|||
[node name="Chr_HipsAttachment_03" parent="Model/RootNode/GeneralSkeleton" index="150"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_HipsAttachment_05" parent="Model/RootNode/GeneralSkeleton" index="152"]
|
||||
[node name="Chr_HipsAttachment_04" parent="Model/RootNode/GeneralSkeleton" index="151"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_HipsAttachment_06" parent="Model/RootNode/GeneralSkeleton" index="153"]
|
||||
[node name="Chr_HipsAttachment_05" parent="Model/RootNode/GeneralSkeleton" index="152"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_HipsAttachment_07" parent="Model/RootNode/GeneralSkeleton" index="154"]
|
||||
|
@ -1016,9 +1047,6 @@ visible = false
|
|||
[node name="Chr_Head_No_Elements_Female_08" parent="Model/RootNode/GeneralSkeleton" index="192"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Head_No_Elements_Female_09" parent="Model/RootNode/GeneralSkeleton" index="193"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Head_No_Elements_Female_10" parent="Model/RootNode/GeneralSkeleton" index="194"]
|
||||
visible = false
|
||||
|
||||
|
@ -1037,6 +1065,9 @@ visible = false
|
|||
[node name="Chr_Head_Female_01" parent="Model/RootNode/GeneralSkeleton" index="199"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Head_Female_02" parent="Model/RootNode/GeneralSkeleton" index="200"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Head_Female_03" parent="Model/RootNode/GeneralSkeleton" index="201"]
|
||||
visible = false
|
||||
|
||||
|
@ -1097,7 +1128,7 @@ visible = false
|
|||
[node name="Chr_Head_Female_22" parent="Model/RootNode/GeneralSkeleton" index="220"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Eyebrow_Female_02" parent="Model/RootNode/GeneralSkeleton" index="222"]
|
||||
[node name="Chr_Eyebrow_Female_01" parent="Model/RootNode/GeneralSkeleton" index="221"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Eyebrow_Female_03" parent="Model/RootNode/GeneralSkeleton" index="223"]
|
||||
|
@ -1130,7 +1161,7 @@ visible = false
|
|||
[node name="Chr_Torso_Female_04" parent="Model/RootNode/GeneralSkeleton" index="232"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Torso_Female_06" parent="Model/RootNode/GeneralSkeleton" index="234"]
|
||||
[node name="Chr_Torso_Female_05" parent="Model/RootNode/GeneralSkeleton" index="233"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Torso_Female_07" parent="Model/RootNode/GeneralSkeleton" index="235"]
|
||||
|
@ -1202,10 +1233,10 @@ visible = false
|
|||
[node name="Chr_ArmUpperRight_Female_00" parent="Model/RootNode/GeneralSkeleton" index="257"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ArmUpperRight_Female_01" parent="Model/RootNode/GeneralSkeleton" index="258"]
|
||||
[node name="Chr_ArmUpperRight_Female_02" parent="Model/RootNode/GeneralSkeleton" index="259"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ArmUpperRight_Female_02" parent="Model/RootNode/GeneralSkeleton" index="259"]
|
||||
[node name="Chr_ArmUpperRight_Female_03" parent="Model/RootNode/GeneralSkeleton" index="260"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ArmUpperRight_Female_04" parent="Model/RootNode/GeneralSkeleton" index="261"]
|
||||
|
@ -1328,10 +1359,10 @@ visible = false
|
|||
[node name="Chr_ArmLowerRight_Female_02" parent="Model/RootNode/GeneralSkeleton" index="301"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ArmLowerRight_Female_04" parent="Model/RootNode/GeneralSkeleton" index="303"]
|
||||
[node name="Chr_ArmLowerRight_Female_03" parent="Model/RootNode/GeneralSkeleton" index="302"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ArmLowerRight_Female_05" parent="Model/RootNode/GeneralSkeleton" index="304"]
|
||||
[node name="Chr_ArmLowerRight_Female_04" parent="Model/RootNode/GeneralSkeleton" index="303"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ArmLowerRight_Female_06" parent="Model/RootNode/GeneralSkeleton" index="305"]
|
||||
|
@ -1379,15 +1410,15 @@ visible = false
|
|||
[node name="Chr_ArmLowerLeft_Female_01" parent="Model/RootNode/GeneralSkeleton" index="319"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ArmLowerLeft_Female_02" parent="Model/RootNode/GeneralSkeleton" index="320"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ArmLowerLeft_Female_03" parent="Model/RootNode/GeneralSkeleton" index="321"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ArmLowerLeft_Female_04" parent="Model/RootNode/GeneralSkeleton" index="322"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ArmLowerLeft_Female_05" parent="Model/RootNode/GeneralSkeleton" index="323"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_ArmLowerLeft_Female_06" parent="Model/RootNode/GeneralSkeleton" index="324"]
|
||||
visible = false
|
||||
|
||||
|
@ -1430,15 +1461,15 @@ visible = false
|
|||
[node name="Chr_HandRight_Female_00" parent="Model/RootNode/GeneralSkeleton" index="337"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_HandRight_Female_01" parent="Model/RootNode/GeneralSkeleton" index="338"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_HandRight_Female_02" parent="Model/RootNode/GeneralSkeleton" index="339"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_HandRight_Female_03" parent="Model/RootNode/GeneralSkeleton" index="340"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_HandRight_Female_04" parent="Model/RootNode/GeneralSkeleton" index="341"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_HandRight_Female_05" parent="Model/RootNode/GeneralSkeleton" index="342"]
|
||||
visible = false
|
||||
|
||||
|
@ -1478,7 +1509,7 @@ visible = false
|
|||
[node name="Chr_HandRight_Female_17" parent="Model/RootNode/GeneralSkeleton" index="354"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_HandLeft_Female_01" parent="Model/RootNode/GeneralSkeleton" index="356"]
|
||||
[node name="Chr_HandLeft_Female_00" parent="Model/RootNode/GeneralSkeleton" index="355"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_HandLeft_Female_02" parent="Model/RootNode/GeneralSkeleton" index="357"]
|
||||
|
@ -1535,7 +1566,7 @@ visible = false
|
|||
[node name="Chr_Hips_Female_01" parent="Model/RootNode/GeneralSkeleton" index="374"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Hips_Female_02" parent="Model/RootNode/GeneralSkeleton" index="375"]
|
||||
[node name="Chr_Hips_Female_03" parent="Model/RootNode/GeneralSkeleton" index="376"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_Hips_Female_04" parent="Model/RootNode/GeneralSkeleton" index="377"]
|
||||
|
@ -1631,9 +1662,6 @@ visible = false
|
|||
[node name="Chr_LegRight_Female_05" parent="Model/RootNode/GeneralSkeleton" index="407"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_LegRight_Female_06" parent="Model/RootNode/GeneralSkeleton" index="408"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_LegRight_Female_07" parent="Model/RootNode/GeneralSkeleton" index="409"]
|
||||
visible = false
|
||||
|
||||
|
@ -1649,6 +1677,9 @@ visible = false
|
|||
[node name="Chr_LegRight_Female_11" parent="Model/RootNode/GeneralSkeleton" index="413"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_LegRight_Female_12" parent="Model/RootNode/GeneralSkeleton" index="414"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_LegRight_Female_13" parent="Model/RootNode/GeneralSkeleton" index="415"]
|
||||
visible = false
|
||||
|
||||
|
@ -1688,9 +1719,6 @@ visible = false
|
|||
[node name="Chr_LegLeft_Female_05" parent="Model/RootNode/GeneralSkeleton" index="427"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_LegLeft_Female_06" parent="Model/RootNode/GeneralSkeleton" index="428"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_LegLeft_Female_07" parent="Model/RootNode/GeneralSkeleton" index="429"]
|
||||
visible = false
|
||||
|
||||
|
@ -1706,6 +1734,9 @@ visible = false
|
|||
[node name="Chr_LegLeft_Female_11" parent="Model/RootNode/GeneralSkeleton" index="433"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_LegLeft_Female_12" parent="Model/RootNode/GeneralSkeleton" index="434"]
|
||||
visible = false
|
||||
|
||||
[node name="Chr_LegLeft_Female_13" parent="Model/RootNode/GeneralSkeleton" index="435"]
|
||||
visible = false
|
||||
|
||||
|
@ -1730,7 +1761,9 @@ visible = false
|
|||
[node name="AnimationPlayer" parent="Model" index="1"]
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_eyw6x"),
|
||||
"BasicMotions@Idle01": ExtResource("1_wqiit")
|
||||
"BasicMotions@Idle01": ExtResource("1_wqiit"),
|
||||
"BasicMotions@Run01": ExtResource("2_nqgk0"),
|
||||
"BasicMotions@Walk01_ClosedHands": ExtResource("2_qsv71")
|
||||
}
|
||||
|
||||
[editable path="Model"]
|
||||
|
|
|
@ -0,0 +1,115 @@
|
|||
#include "customizable_character.hpp"
|
||||
#include "godot_cpp/variant/utility_functions.hpp"
|
||||
#include "godot_macros.h"
|
||||
|
||||
namespace godot {
|
||||
void CustomizableCharacter::_bind_methods() {
|
||||
#define CLASSNAME CustomizableCharacter
|
||||
GDPROPERTY(active_customization, Variant::DICTIONARY);
|
||||
}
|
||||
|
||||
void CustomizableCharacter::set_customization_active(Node3D *node, bool active) {
|
||||
node->set_visible(active);
|
||||
node->set_process(active);
|
||||
}
|
||||
|
||||
void CustomizableCharacter::_enter_tree() {
|
||||
}
|
||||
|
||||
void CustomizableCharacter::_ready() {
|
||||
this->customization_init();
|
||||
}
|
||||
|
||||
void CustomizableCharacter::select_customization(String category, std::optional<size_t> index) {
|
||||
if (this->customization.find(category) == this->customization.end())
|
||||
return;
|
||||
CustomizationState& pair = this->customization.at(category);
|
||||
// invalid keys are stored as the size of the array
|
||||
if (index.has_value() && index.value() >= pair.options.size())
|
||||
index = std::nullopt;
|
||||
// nothing changes
|
||||
if (index == pair.currentSelected)
|
||||
return;
|
||||
// disable previous chosen option, if any
|
||||
if (pair.currentSelected.has_value())
|
||||
CustomizableCharacter::set_customization_active(pair.options.at(pair.currentSelected.value()), false);
|
||||
// enable chosen option, if any
|
||||
if (index.has_value())
|
||||
CustomizableCharacter::set_customization_active(pair.options.at(index.value()), true);
|
||||
pair.currentSelected = index;
|
||||
}
|
||||
|
||||
Dictionary CustomizableCharacter::get_active_customization() const {
|
||||
Dictionary result{};
|
||||
// translate the map to a dictionary of categories -> indexes
|
||||
for (std::pair<String, CustomizationState> const& pair : this->customization) {
|
||||
result[pair.first] = pair.second.currentSelected.has_value()
|
||||
? pair.second.currentSelected.value()
|
||||
: -1; // an invalid key will always be -1
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void CustomizableCharacter::set_active_customization(Dictionary value) {
|
||||
for (size_t i = 0; i < value.size(); ++i) {
|
||||
String key = value.keys()[i];
|
||||
size_t selection = value[key];
|
||||
// wether or not the a given key exists in the customization map
|
||||
bool exists = this->customization.find(key) != this->customization.end();
|
||||
// if not, it can be added, as long as the customization map has not yet
|
||||
// been initialized by _ready
|
||||
if (!exists && this->customizationParent == nullptr)
|
||||
this->customization.insert({key, {std::optional{selection}, {}}});
|
||||
// if the key does not exist in customization and _ready is already
|
||||
// called, the key is not valid and discarted
|
||||
else if (!exists)
|
||||
return;
|
||||
else
|
||||
this->select_customization(key, selection >= 0
|
||||
? std::optional{selection}
|
||||
: std::nullopt);
|
||||
}
|
||||
}
|
||||
|
||||
void CustomizableCharacter::customization_init() {
|
||||
this->customizationParent =
|
||||
this->get_node<Skeleton3D>("RootNode/GeneralSkeleton");
|
||||
if (this->customizationParent == nullptr)
|
||||
return;
|
||||
for (int i = 0; i < customizationParent->get_child_count(); ++i) {
|
||||
// get the next valid child
|
||||
Node3D* child = Object::cast_to<Node3D>(this->customizationParent->get_child(i));
|
||||
if (child == nullptr)
|
||||
continue;
|
||||
// split it's name into parts based on _
|
||||
// the format for the names will be Chr_<CATEGORY NAME>_<ADDITIONAL IDENTIFIERS>_<NUMBER> numbering IS NOT guaranteed to start at 0 OR 1
|
||||
// the category name will serve as the key to the customization map
|
||||
// additional identifiers are ignored
|
||||
PackedStringArray slices = child->get_name().split("_", false);
|
||||
// create a new customization state if one does not exist for this category
|
||||
if (this->customization.find(slices[1]) == this->customization.end())
|
||||
this->customization.insert({slices[1], {std::optional{0}, {}}});
|
||||
// add the new child to the customization options for this category
|
||||
CustomizationState& state = this->customization.at(slices[1]);
|
||||
state.options.push_back(child);
|
||||
// set invisible if this child is not the current selection
|
||||
CustomizableCharacter::set_customization_active(child, state.currentSelected == state.options.size() - 1);
|
||||
}
|
||||
// collect customization categories that do not contain any options
|
||||
std::vector<String> empty{};
|
||||
for (std::pair<const String, CustomizationState>& pair :
|
||||
this->customization) {
|
||||
if (pair.second.options.size() == 0)
|
||||
empty.push_back(pair.first);
|
||||
if (pair.second.currentSelected.has_value() &&
|
||||
pair.second.currentSelected.value() > pair.second.options.size())
|
||||
pair.second.currentSelected = std::nullopt;
|
||||
UtilityFunctions::print("- ", pair.first);
|
||||
}
|
||||
// remove collected empty categories
|
||||
for (String const& key : empty) {
|
||||
this->customization.erase(key);
|
||||
UtilityFunctions::print("removing ", key);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
#ifndef CUSTOMIZABLE_CHARACTER_HPP
|
||||
#define CUSTOMIZABLE_CHARACTER_HPP
|
||||
|
||||
#include <optional>
|
||||
#include <map>
|
||||
#include "godot_cpp/classes/node3d.hpp"
|
||||
#include "godot_cpp/classes/skeleton3d.hpp"
|
||||
|
||||
namespace godot {
|
||||
class CustomizableCharacter : public Node3D {
|
||||
GDCLASS(CustomizableCharacter, Node3D);
|
||||
static void _bind_methods();
|
||||
|
||||
// the current customization state of a body part/attachment
|
||||
struct CustomizationState {
|
||||
// current selected option
|
||||
std::optional<size_t> currentSelected{std::nullopt};
|
||||
// cache of all options
|
||||
std::vector<Node3D *> options{};
|
||||
};
|
||||
|
||||
static void set_customization_active(Node3D *node, bool active);
|
||||
private:
|
||||
// all customization options categorized according to body part
|
||||
std::map<String, CustomizationState> customization{};
|
||||
// the skeleton of the customizable character model
|
||||
Skeleton3D *customizationParent{nullptr};
|
||||
public:
|
||||
virtual void _enter_tree() override;
|
||||
virtual void _ready() override;
|
||||
// Swap out the currently active customization for this category
|
||||
void select_customization(String category, std::optional<size_t> value);
|
||||
// Construct a dictionary of [String, int] where the key is a category
|
||||
// from the customization map. And the value is the index of the
|
||||
// active element from the category.
|
||||
Dictionary get_active_customization() const;
|
||||
// change active customization as if select_customization was called for
|
||||
// every element in a [String, int] dictionary, where key is the category
|
||||
// to assign to and the value is the index of the element to show.
|
||||
void set_active_customization(Dictionary value);
|
||||
void customization_init();
|
||||
};
|
||||
}
|
||||
|
||||
#endif // !CUSTOMIZABLE_CHARACTER_HPP
|
|
@ -0,0 +1,12 @@
|
|||
#ifndef HITABLE_INTERFACE_HPP
|
||||
#define HITABLE_INTERFACE_HPP
|
||||
|
||||
namespace godot {
|
||||
class Node;
|
||||
|
||||
class HitableInterface {
|
||||
public:
|
||||
virtual void damage(Node *origin, int amount) = 0; };
|
||||
}
|
||||
|
||||
#endif // !HITABLE_INTERFACE_HPP
|
111
src/player.cpp
111
src/player.cpp
|
@ -14,11 +14,9 @@
|
|||
namespace godot {
|
||||
void Player::_bind_methods() {
|
||||
#define CLASSNAME Player
|
||||
#ifndef NDEBUG
|
||||
GDPROPERTY(active_customization, Variant::DICTIONARY);
|
||||
#endif
|
||||
GDFUNCTION_ARGS(on_horizontal, "event", "value");
|
||||
GDFUNCTION_ARGS(on_vertical, "event", "value");
|
||||
GDFUNCTION(get_is_moving);
|
||||
}
|
||||
|
||||
void Player::_enter_tree() {
|
||||
|
@ -29,9 +27,8 @@ void Player::_enter_tree() {
|
|||
}
|
||||
|
||||
void Player::_ready() {
|
||||
this->customization_init();
|
||||
GDGAMEONLY();
|
||||
this->flat_view_init();
|
||||
this->flat_view_update();
|
||||
this->input->listen_to(PlayerInput::Listener("move_left", "move_right", this, "on_horizontal"));
|
||||
this->input->listen_to(PlayerInput::Listener("move_forward", "move_back", this, "on_vertical"));
|
||||
}
|
||||
|
@ -54,73 +51,17 @@ void Player::_physics_process(double deltaTime) {
|
|||
this->move_and_slide();
|
||||
}
|
||||
|
||||
void Player::set_customization_active(Node3D *node, bool active) {
|
||||
node->set_visible(active);
|
||||
node->set_process(active);
|
||||
void Player::damage(Node *origin, int amount) {
|
||||
}
|
||||
|
||||
void Player::on_horizontal(Ref<InputEvent> event, float value) {
|
||||
UtilityFunctions::print("horizontal ", value);
|
||||
this->moveInput.x = value;
|
||||
}
|
||||
|
||||
void Player::on_vertical(Ref<InputEvent> event, float value) {
|
||||
UtilityFunctions::print("vertical ", value);
|
||||
this->moveInput.y = value;
|
||||
}
|
||||
|
||||
void Player::select_customization(String category,
|
||||
std::optional<size_t> index) {
|
||||
if (this->customization.find(category) == this->customization.end())
|
||||
return;
|
||||
CustomizationState& pair = this->customization.at(category);
|
||||
// invalid keys are stored as the size of the array
|
||||
if (index.has_value() && index.value() > pair.options.size())
|
||||
index = std::nullopt;
|
||||
// nothing changesw
|
||||
if (index == pair.currentSelected)
|
||||
return;
|
||||
// disable previous chosen option, if any
|
||||
if (pair.currentSelected.has_value())
|
||||
Player::set_customization_active(pair.options.at(pair.currentSelected.value()), false);
|
||||
// enable chosen option, if any
|
||||
if (index.has_value())
|
||||
Player::set_customization_active(pair.options.at(index.value()), false);
|
||||
pair.currentSelected = index;
|
||||
}
|
||||
|
||||
Dictionary Player::get_active_customization() const {
|
||||
Dictionary result{};
|
||||
// translate the map to a dictionary of keys and indexes
|
||||
for (std::pair<String, CustomizationState> const& pair :
|
||||
this->customization)
|
||||
result[pair.first] = pair.second.currentSelected.has_value()
|
||||
? pair.second.currentSelected.value()
|
||||
: -1; // an invalid key will always be -1
|
||||
return result;
|
||||
}
|
||||
|
||||
void Player::set_active_customization(Dictionary value) {
|
||||
for (size_t i = 0; i < value.size(); ++i) {
|
||||
String key = value.keys()[i];
|
||||
size_t selection = value[key];
|
||||
// wether or not the a given key exists in the customization map
|
||||
bool exists = this->customization.find(key) != this->customization.end();
|
||||
// if not, it can be added, as long as the customization map has not yet
|
||||
// been initialized by _ready
|
||||
if (!exists && !this->is_inside_tree())
|
||||
this->customization.insert({key, {std::optional{selection}, {}}});
|
||||
// if the key does not exist in customization and _ready is already
|
||||
// called, the key is not valid and discarted
|
||||
else if (!exists)
|
||||
return;
|
||||
else
|
||||
this->select_customization(key, selection >= 0
|
||||
? std::optional{selection}
|
||||
: std::nullopt);
|
||||
}
|
||||
}
|
||||
|
||||
Vector3 Player::get_world_move_input() const {
|
||||
Vector2 n = this->moveInput.normalized();
|
||||
return flatViewBasis.get_column(0) * n.x
|
||||
|
@ -138,7 +79,7 @@ void Player::rotate_to_movement() {
|
|||
this->set_global_transform(trans);
|
||||
}
|
||||
|
||||
void Player::flat_view_init() {
|
||||
void Player::flat_view_update() {
|
||||
Basis basis = this->get_viewport()->get_camera_3d()->get_global_transform().get_basis();
|
||||
Vector3 right = basis.get_column(0);
|
||||
right = Vector3{-right.x, 0, -right.z}.normalized();
|
||||
|
@ -147,47 +88,7 @@ void Player::flat_view_init() {
|
|||
this->flatViewBasis = Basis{right, right.cross(forward), forward};
|
||||
}
|
||||
|
||||
void Player::customization_init() {
|
||||
this->customizationParent =
|
||||
this->get_node<Skeleton3D>("Model/RootNode/GeneralSkeleton");
|
||||
if (this->customizationParent == nullptr)
|
||||
return;
|
||||
for (int i = 0; i < customizationParent->get_child_count(); ++i) {
|
||||
// get the next valid child
|
||||
Node3D* child = Object::cast_to<Node3D>(this->customizationParent->get_child(i));
|
||||
if (child == nullptr)
|
||||
continue;
|
||||
// split it's name into parts based on _
|
||||
// the format for the names will be Chr_<CATEGORY NAME>_<ADDITIONAL IDENTIFIERS>_<NUMBER> numbering IS NOT guaranteed to start at 0 OR 1
|
||||
// the category name will serve as the key to the customization map
|
||||
// additional identifiers are ignored
|
||||
PackedStringArray slices = child->get_name().split("_", false);
|
||||
// create a new customization state if one does not exist for this category
|
||||
if (this->customization.find(slices[1]) == this->customization.end())
|
||||
this->customization.insert({slices[1], {std::optional{0}, {}}});
|
||||
// add the new child to the customization options for this category
|
||||
CustomizationState& state = this->customization.at(slices[1]);
|
||||
state.options.push_back(child);
|
||||
// set invisible if this child is not the current selection
|
||||
if (state.currentSelected != state.options.size() - 1) {
|
||||
Player::set_customization_active(child, false);
|
||||
}
|
||||
}
|
||||
// collect customization categories that do not contain any options
|
||||
std::vector<String> empty{};
|
||||
for (std::pair<const String, CustomizationState>& pair :
|
||||
this->customization) {
|
||||
if (pair.second.options.size() == 0)
|
||||
empty.push_back(pair.first);
|
||||
if (pair.second.currentSelected.has_value() &&
|
||||
pair.second.currentSelected.value() > pair.second.options.size())
|
||||
pair.second.currentSelected = std::nullopt;
|
||||
UtilityFunctions::print("- ", pair.first);
|
||||
}
|
||||
// remove collected empty categories
|
||||
for (String const& key : empty) {
|
||||
this->customization.erase(key);
|
||||
UtilityFunctions::print("removing ", key);
|
||||
}
|
||||
bool Player::get_is_moving() const {
|
||||
return this->is_on_floor() && !this->moveInput.is_zero_approx();
|
||||
}
|
||||
} // namespace godot
|
||||
|
|
|
@ -2,36 +2,27 @@
|
|||
#define PLAYER_HPP
|
||||
|
||||
#include <map>
|
||||
#include "constants.hpp"
|
||||
#include "godot_cpp/classes/animation_tree.hpp"
|
||||
#include "godot_cpp/classes/character_body3d.hpp"
|
||||
#include "godot_cpp/classes/input_event.hpp"
|
||||
#include "godot_cpp/classes/skeleton3d.hpp"
|
||||
#include "hitable_interface.hpp"
|
||||
#include "player_input.hpp"
|
||||
#include <optional>
|
||||
|
||||
namespace godot {
|
||||
class Player : public CharacterBody3D {
|
||||
class Player : public CharacterBody3D, public HitableInterface {
|
||||
GDCLASS(Player, CharacterBody3D)
|
||||
static void _bind_methods();
|
||||
// the current customization state of a body part/attachment
|
||||
struct CustomizationState {
|
||||
std::optional<size_t> currentSelected{std::nullopt}; // current selected option
|
||||
std::vector<Node3D *> options{}; // cache of all options
|
||||
};
|
||||
|
||||
protected:
|
||||
// all customization options categorized according to body part
|
||||
std::map<String, CustomizationState> customization{};
|
||||
// the root of the character model
|
||||
Node3D* model{nullptr};
|
||||
// the character animation tree
|
||||
AnimationTree* animTree{nullptr};
|
||||
// the skeleton of the customizable character model
|
||||
Skeleton3D *customizationParent{nullptr};
|
||||
PlayerInput *input{nullptr};
|
||||
Basis flatViewBasis{};
|
||||
Basis flatViewBasis{identity::Basis};
|
||||
|
||||
float walkSpeed{4.f};
|
||||
static float constexpr walkSpeed{4.f};
|
||||
|
||||
Vector2 moveInput{0.f, 0.f};
|
||||
|
||||
|
@ -41,28 +32,18 @@ public:
|
|||
virtual void _process(double deltaTime) override;
|
||||
virtual void _physics_process(double deltaTime) override;
|
||||
|
||||
static void set_customization_active(Node3D *node, bool active);
|
||||
virtual void damage(Node *origin, int amount) override;
|
||||
|
||||
void on_horizontal(Ref<InputEvent> event, float value);
|
||||
void on_vertical(Ref<InputEvent> event, float value);
|
||||
|
||||
// Swap out the currently active customization for this category
|
||||
void select_customization(String category, std::optional<size_t> value);
|
||||
// Construct a dictionary of [String, int] where the key is a category
|
||||
// from the customization map. And the value is the index of the
|
||||
// active element from the category.
|
||||
Dictionary get_active_customization() const;
|
||||
// change active customization as if select_customization was called for
|
||||
// every element in a [String, int] dictionary, where key is the category
|
||||
// to assign to and the value is the index of the element to show.
|
||||
void set_active_customization(Dictionary value);
|
||||
// returns moveInput transformed to world space
|
||||
Vector3 get_world_move_input() const;
|
||||
|
||||
private:
|
||||
void rotate_to_movement();
|
||||
void flat_view_init();
|
||||
void customization_init();
|
||||
void flat_view_update();
|
||||
bool get_is_moving() const;
|
||||
};
|
||||
} // namespace godot
|
||||
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <godot_cpp/core/defs.hpp>
|
||||
#include <godot_cpp/godot.hpp>
|
||||
|
||||
#include "customizable_character.hpp"
|
||||
#include "entrance.hpp"
|
||||
#include "game_mode.hpp"
|
||||
#include "level.hpp"
|
||||
|
@ -21,6 +22,7 @@ void initialize_gdextension_types(ModuleInitializationLevel p_level) {
|
|||
ClassDB::register_class<Entrance>();
|
||||
ClassDB::register_class<GameMode>();
|
||||
ClassDB::register_class<PlayerInput>();
|
||||
ClassDB::register_class<CustomizableCharacter>();
|
||||
}
|
||||
|
||||
extern "C" {
|
||||
|
|
Loading…
Reference in New Issue