diff --git a/.agents/skills/cataloging-home-protector-assets/SKILL.md b/.agents/skills/cataloging-home-protector-assets/SKILL.md new file mode 100644 index 0000000..ea5c9d0 --- /dev/null +++ b/.agents/skills/cataloging-home-protector-assets/SKILL.md @@ -0,0 +1,48 @@ +--- +name: cataloging-home-protector-assets +description: Use when inventorying D:/GameAsset for Home Protector, selecting canonical Unity-ready sprite revisions, or updating the asset import manifest before any art is copied. +--- + +# Cataloging Home Protector Assets + +## Overview + +Make `Docs/Development/asset-import-manifest.json` the auditable boundary between generated art and Unity. Catalog first; never copy or slice assets while using this skill. + +## Workflow + +1. Read the root `AGENTS.md`, the existing manifest, and source revision notes. +2. Run `scripts/New-HomeProtectorAssetManifest.ps1` to inventory relative paths, byte sizes, dimensions, SHA-256 hashes, and importer contracts. Use `-Check` after generation. +3. Group by semantic content, animation, level, and batch. A different hash is not proof of different gameplay content. +4. Select one intentional revision and record why. Mark rejected candidates in the manifest instead of silently forgetting them. +5. Check destination collisions under `Assets/_Project/Art/Runtime/`. +6. Report counts for discovered sheets, imported sheets, excluded revisions, single sprites, and total bytes. + +## Canonical policy + +| Case | Decision | +|---|---| +| `*_Sheet_BNN.png` | Candidate sheet | +| `Frames`, `fullres`, `native`, `QualityRefresh*` | Exclude | +| Per-frame or comparison crops | Exclude | +| Player Walk B05/B06 | Historical; exclude | +| Player Walk B08 | Canonical | +| Bear B20 | Canonical normal Bear role | +| BearHeavy B31 | Canonical elite BearHeavy role | +| CommonSoldier and Monkey | Keep existing project art; no external replacement | +| PorchYardDecor mailbox | Valid environment prop, not the Refrigerator valuable | + +The known source has 103 sheet candidates: import 101 and retain the two historical Walk sheets as excluded manifest records. Also catalog required final single sprites separately; do not inflate the sheet count. + +## Manifest contract + +Each record needs a stable ID, content kind and role, source-relative and destination paths, batch, hash, bytes, selection status/reason, and importer contract. Importer data must state texture mode, cell size/grid, PPU, pivot, direction rows, clip meaning, and loop behavior. Use `null` only when Unity review is explicitly required; never guess PPU. + +## Stop conditions + +- Two included records target one destination. +- One semantic role has multiple unexplained revisions. +- A source file changed hash without a batch/reason update. +- A new item has no runtime role or provenance. + +Resolve these in the manifest before invoking the import skill. diff --git a/.agents/skills/cataloging-home-protector-assets/agents/openai.yaml b/.agents/skills/cataloging-home-protector-assets/agents/openai.yaml new file mode 100644 index 0000000..e9ab8bb --- /dev/null +++ b/.agents/skills/cataloging-home-protector-assets/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Catalog Home Protector Assets" + short_description: "Select canonical Unity-ready game art" + default_prompt: "Use $cataloging-home-protector-assets to update the canonical asset manifest without importing duplicate revisions." diff --git a/.agents/skills/cataloging-home-protector-assets/scripts/New-HomeProtectorAssetManifest.ps1 b/.agents/skills/cataloging-home-protector-assets/scripts/New-HomeProtectorAssetManifest.ps1 new file mode 100644 index 0000000..449c53c --- /dev/null +++ b/.agents/skills/cataloging-home-protector-assets/scripts/New-HomeProtectorAssetManifest.ps1 @@ -0,0 +1,276 @@ +[CmdletBinding()] +param( + [string]$SourceRoot = 'D:\GameAsset\GameAssets\HomeProtector\UnityReadySprites', + [string]$OutputPath, + [switch]$Check +) + +$ErrorActionPreference = 'Stop' +Add-Type -AssemblyName System.Drawing + +$projectRoot = (Resolve-Path (Join-Path $PSScriptRoot '../../../..')).Path +if ([string]::IsNullOrWhiteSpace($OutputPath)) { + $OutputPath = Join-Path $projectRoot 'Docs/Development/asset-import-manifest.json' +} + +$source = (Resolve-Path -LiteralPath $SourceRoot).Path.TrimEnd('\') +$destinationRoot = 'Assets/_Project/Art/Runtime' +$directionRows = @('DownLeft', 'DownRight', 'UpLeft', 'UpRight') + +function Get-RelativeSourcePath([System.IO.FileInfo]$file) { + return $file.FullName.Substring($source.Length).TrimStart('\').Replace('\', '/') +} + +function Get-ImageSize([string]$path) { + $image = [System.Drawing.Image]::FromFile($path) + try { + return [ordered]@{ width = $image.Width; height = $image.Height } + } finally { + $image.Dispose() + } +} + +function Get-ContentKind([string]$relativePath) { + return ($relativePath -split '/')[0] +} + +function Get-Pivot([string]$kind, [string]$relativePath) { + if ($kind -in @('VFX', 'Currency', 'UI')) { + return 'Center' + } + if ($kind -eq 'Enemies' -and $relativePath -match '/(Wasp|AntSwarm|MothPest)/') { + return 'Center' + } + if ($kind -in @('Tiles', 'Overlays', 'Props')) { + if ($relativePath -match '/(GroundTiles|GroundOverlays)/') { + return 'Center' + } + if ($relativePath -match 'Environment_Foundation|OldCabin_Tiles') { + return 'MixedBySlice' + } + } + return 'BottomCenter' +} + +function Get-ClipMeaning([string]$relativePath, [bool]$isSheet) { + if (-not $isSheet) { + return 'Static' + } + foreach ($name in @('Idle', 'Walk', 'Move', 'Attack', 'BuffTower', 'Damage', 'Sleep')) { + if ($relativePath -match "_$name(_|\.|/)" -or $relativePath -match "/$name/") { + return $name + } + } + if ($relativePath -match '/VFX/([^/]+)/') { + return $matches[1] + } + if ($relativePath -match '/Valuables/' -and $relativePath -match '/Damage/') { + return 'DamageStates' + } + return 'Atlas' +} + +function Get-FrameRate([string]$clipMeaning) { + switch ($clipMeaning) { + 'Idle' { return 4 } + 'Sleep' { return 4 } + 'Walk' { return 8 } + 'Move' { return 8 } + 'BuffTower' { return 8 } + 'Damage' { return 8 } + 'DamageStates' { return 8 } + 'Attack' { return 10 } + default { + if ($clipMeaning -in @('Atlas', 'Static')) { return 0 } + return 10 + } + } +} + +function Get-CellSize([string]$kind, [string]$relativePath, [bool]$isSheet, [hashtable]$imageSize) { + if (-not $isSheet) { + return [ordered]@{ width = $imageSize.width; height = $imageSize.height } + } + if ($kind -eq 'Currency') { + return [ordered]@{ width = 64; height = 64 } + } + if ($kind -in @('Player', 'Enemies')) { + return [ordered]@{ width = 96; height = 96 } + } + if ($kind -eq 'VFX') { + $size = if ($relativePath -match 'LevelUpGlow') { 128 } else { 96 } + return [ordered]@{ width = $size; height = $size } + } + return [ordered]@{ width = 128; height = 128 } +} + +function Get-PixelsPerUnit([string]$kind) { + if ($kind -eq 'Player') { + return 32 + } + if ($kind -in @('Tiles', 'Props', 'Overlays')) { + return 128 + } + return 100 +} + +function Get-SelectionReason([string]$relativePath, [string]$status, [string]$assetType) { + if ($status -eq 'excluded') { + return 'Historical Player Walk revision; B08 is canonical.' + } + if ($relativePath -match '^Enemies/Bear/B20/') { + return 'Canonical normal Bear role; intentionally distinct from BearHeavy B31.' + } + if ($relativePath -match '^Enemies/BearHeavy/B31/') { + return 'Canonical elite BearHeavy role; intentionally distinct from Bear B20.' + } + if ($assetType -eq 'singleSprite' -and $relativePath -match '^Towers/') { + return 'Canonical static level sprite for Dryer, BookShelf, or CoolDryer.' + } + if ($assetType -eq 'singleSprite' -and $relativePath -match '^Valuables/') { + return 'Canonical undamaged valuable sprite paired with its damage sheet.' + } + if ($assetType -eq 'singleSprite' -and $relativePath -match '^UI/') { + return 'Canonical runtime UI sprite.' + } + return 'Promoted UnityReady sheet for a distinct runtime role and revision.' +} + +function New-ManifestEntry([System.IO.FileInfo]$file, [string]$assetType, [string]$status) { + $relativePath = Get-RelativeSourcePath $file + $kind = Get-ContentKind $relativePath + $imageSize = Get-ImageSize $file.FullName + $isSheet = $assetType -eq 'spriteSheet' + $cellSize = Get-CellSize $kind $relativePath $isSheet $imageSize + + if (($imageSize.width % $cellSize.width) -ne 0 -or ($imageSize.height % $cellSize.height) -ne 0) { + throw "Image dimensions do not match cell contract: $relativePath" + } + + $columns = [int]($imageSize.width / $cellSize.width) + $rows = [int]($imageSize.height / $cellSize.height) + $clipMeaning = Get-ClipMeaning $relativePath $isSheet + $batch = if ($relativePath -match '(?B\d{2})') { $matches.batch } else { $null } + $id = (($relativePath.ToLowerInvariant() -replace '\.png$', '') -replace '[^a-z0-9]+', '-').Trim('-') + $directions = if ($isSheet -and $rows -eq 4 -and $kind -in @('Player', 'Enemies', 'Towers')) { + $directionRows + } else { + @() + } + $loop = $clipMeaning -in @('Idle', 'Walk', 'Move', 'BuffTower', 'Sleep') + if ($kind -eq 'Towers' -and $clipMeaning -eq 'Attack') { + $loop = $true + } + + return [ordered]@{ + id = $id + assetType = $assetType + contentKind = $kind + runtimeRole = [System.IO.Path]::GetFileNameWithoutExtension($file.Name) + sourceRelativePath = $relativePath + destinationPath = "$destinationRoot/$relativePath" + batch = $batch + sha256 = (Get-FileHash -LiteralPath $file.FullName -Algorithm SHA256).Hash.ToLowerInvariant() + bytes = $file.Length + image = $imageSize + selection = [ordered]@{ + status = $status + reason = Get-SelectionReason $relativePath $status $assetType + } + importer = [ordered]@{ + textureType = 'Sprite' + spriteMode = if ($isSheet) { 'Multiple' } else { 'Single' } + cell = $cellSize + columns = $columns + rows = $rows + pixelsPerUnit = Get-PixelsPerUnit $kind + pivot = Get-Pivot $kind $relativePath + directionRows = @($directions) + clipMeaning = $clipMeaning + frameRate = Get-FrameRate $clipMeaning + loop = [bool]$loop + filterMode = 'Point' + compression = 'Uncompressed' + } + } +} + +$pngFiles = @(Get-ChildItem -LiteralPath $source -Recurse -File -Filter '*.png') +$sheetCandidates = @($pngFiles | Where-Object { $_.Name -match '_Sheet_B\d{2}\.png$' }) + +$singleSprites = @($pngFiles | Where-Object { + $relative = Get-RelativeSourcePath $_ + $relative -match '^Valuables/[^/]+/Normal/B\d{2}/[^/]+\.png$' -or + $relative -match '^Towers/T_HP_Tower_(BookShelf|CoolDryer|Dryer)_Lv0[123]\.png$' -or + $relative -match '^UI/[^/]+\.png$' +}) + +$entries = [System.Collections.Generic.List[object]]::new() +foreach ($file in ($sheetCandidates | Sort-Object FullName)) { + $relative = Get-RelativeSourcePath $file + $status = if ($relative -match '^Player/Walk/B0(5|6)/') { 'excluded' } else { 'included' } + $entries.Add((New-ManifestEntry $file 'spriteSheet' $status)) +} +foreach ($file in ($singleSprites | Sort-Object FullName)) { + $entries.Add((New-ManifestEntry $file 'singleSprite' 'included')) +} + +$included = @($entries | Where-Object { $_.selection.status -eq 'included' }) +$sheetIncluded = @($included | Where-Object { $_.assetType -eq 'spriteSheet' }) +$sheetExcluded = @($entries | Where-Object { + $_.assetType -eq 'spriteSheet' -and $_.selection.status -eq 'excluded' +}) +$singleIncluded = @($included | Where-Object { $_.assetType -eq 'singleSprite' }) + +if ($sheetCandidates.Count -ne 103 -or $sheetIncluded.Count -ne 101 -or + $sheetExcluded.Count -ne 2 -or $singleIncluded.Count -ne 22) { + throw "Unexpected canonical counts: candidates=$($sheetCandidates.Count) includedSheets=$($sheetIncluded.Count) excludedSheets=$($sheetExcluded.Count) singles=$($singleIncluded.Count)" +} + +$duplicateDestinations = @($included | Group-Object { $_.destinationPath } | Where-Object Count -gt 1) +if ($duplicateDestinations.Count -gt 0) { + throw "Destination collision: $($duplicateDestinations[0].Name)" +} + +$duplicateHashes = @($included | Group-Object { $_.sha256 } | Where-Object Count -gt 1) +if ($duplicateHashes.Count -gt 0) { + throw "Duplicate included content hash: $($duplicateHashes[0].Name)" +} + +$manifest = [ordered]@{ + schemaVersion = 1 + sourceRoot = $source.Replace('\', '/') + destinationRoot = $destinationRoot + policy = [ordered]@{ + candidates = 'Promoted *_Sheet_BNN.png plus explicit canonical single-sprite allowlist.' + excludedPatterns = @('Frames', 'fullres', 'native', 'QualityRefresh', 'historical comparison revisions') + retainedExistingProjectContent = @('CommonSoldier', 'Monkey') + intentionalRoleSplit = @('Bear B20', 'BearHeavy B31') + } + summary = [ordered]@{ + sheetCandidates = $sheetCandidates.Count + sheetsIncluded = $sheetIncluded.Count + sheetsExcluded = $sheetExcluded.Count + singleSpritesIncluded = $singleIncluded.Count + totalIncluded = $included.Count + includedBytes = ($included | ForEach-Object { $_.bytes } | Measure-Object -Sum).Sum + } + entries = @($entries) +} + +$json = $manifest | ConvertTo-Json -Depth 12 +if ($Check) { + if (-not (Test-Path -LiteralPath $OutputPath -PathType Leaf)) { + throw "Manifest does not exist: $OutputPath" + } + $existing = Get-Content -LiteralPath $OutputPath -Raw -Encoding UTF8 + if ($existing.Trim() -ne $json.Trim()) { + throw 'Manifest is stale. Regenerate it with this script.' + } +} else { + $directory = Split-Path -Parent $OutputPath + New-Item -ItemType Directory -Path $directory -Force | Out-Null + [System.IO.File]::WriteAllText($OutputPath, $json + [Environment]::NewLine, [System.Text.UTF8Encoding]::new($false)) +} + +Write-Host "PASS asset-manifest sheets=$($sheetIncluded.Count)/$($sheetCandidates.Count) singles=$($singleIncluded.Count) total=$($included.Count)" diff --git a/.agents/skills/importing-unity-sprite-sheets/SKILL.md b/.agents/skills/importing-unity-sprite-sheets/SKILL.md new file mode 100644 index 0000000..6169eb2 --- /dev/null +++ b/.agents/skills/importing-unity-sprite-sheets/SKILL.md @@ -0,0 +1,42 @@ +--- +name: importing-unity-sprite-sheets +description: Use when copying manifest-approved Home Protector art into Unity, configuring TextureImporter and sprite slicing, or generating AnimationClips and controllers from importer contracts. +--- + +# Importing Unity Sprite Sheets + +## Overview + +Turn the audited manifest into Unity assets without duplicating Unity's job. The agent chooses and checks the import contract; a single Unity Editor C# command performs copy, import, slice, naming, clip, and controller mutations. + +## Preconditions + +1. Read the root and `Assets/_Project/AGENTS.md` files. +2. Run the catalog script with **Windows PowerShell 5.1**, not `pwsh 7`: `powershell.exe -NoProfile -ExecutionPolicy Bypass -File -Check`. +3. Require `PASS asset-manifest sheets=101/103 singles=22 total=123`. +4. Require a working Unity license and exclusive Unity-writer ownership. + +If any precondition fails, stop before copying. Report `BLOCKED Unity license unavailable; no import mutation performed` when licensing is the cause. + +## Workflow + +1. Select only records whose `selection.status` is `included`; never infer approval from a filename. +2. Preflight source path, SHA-256, bytes, dimensions, destination uniqueness, and importer texture type, mode, cell/grid, PPU, pivot, direction rows, clip meaning, FPS, loop, filter, and compression. +3. Pass records to the Editor importer under `Assets/_Project/Scripts/Editor/AssetPipeline`. +4. Preserve an existing destination `.meta` and GUID. Make reruns idempotent: update assets rather than adding duplicate sprites, clips, or controllers. +5. Apply manifest cell size, PPU, pivot, direction rows, FPS, loop, filter, and compression exactly. Treat `MixedBySlice` as a required per-slice decision, never a global pivot. +6. Save and refresh through Unity, then run one Unity validation and one repository-hygiene check. Do not reimplement semantic Unity checks in PowerShell or prose. + +## Never do this + +- Import all 103 sheet candidates; Player Walk B05/B06 are historical. +- Omit the 22 canonical single sprites. +- Copy `Frames`, `fullres`, `native`, `QualityRefresh`, comparisons, or raw revisions. +- Split a sheet into per-frame PNG files. +- Hand-author `.meta`, scene/prefab YAML, `.anim`, or `.controller` files. +- Collapse Bear B20 and BearHeavy B31, replace CommonSoldier or Monkey, or confuse the PorchYard mailbox with Refrigerator. +- Generate default Unity metadata while Unity is unavailable. + +## Reporting + +Success is concise: `PASS sprite-import sheets=101 singles=22 total=123`. On failure report `FAIL asset= stage= reason= log=` and inspect the full Unity log only then. diff --git a/.agents/skills/importing-unity-sprite-sheets/agents/openai.yaml b/.agents/skills/importing-unity-sprite-sheets/agents/openai.yaml new file mode 100644 index 0000000..83529f8 --- /dev/null +++ b/.agents/skills/importing-unity-sprite-sheets/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Import Home Protector Sprite Sheets" + short_description: "Import manifest-approved art through Unity" + default_prompt: "Use $importing-unity-sprite-sheets to import only manifest-approved Home Protector art through Unity Editor automation." diff --git a/.agents/skills/reviewing-home-protector-playability/SKILL.md b/.agents/skills/reviewing-home-protector-playability/SKILL.md new file mode 100644 index 0000000..f8a1706 --- /dev/null +++ b/.agents/skills/reviewing-home-protector-playability/SKILL.md @@ -0,0 +1,58 @@ +--- +name: reviewing-home-protector-playability +description: Use when hands-on reviewing a playable Home Protector milestone for game flow, readability, voice activation, feedback, UI, balance, or content exposure. +--- + +# Reviewing Home Protector Playability + +## Overview + +Review what a player sees, understands, and feels. Treat Unity verification and repository hygiene as prerequisites, not work to repeat. + +## Inputs + +- Milestone and commit/build ID, platform or scene, and playable artifact. +- Scoped changes, expected day/wave/theme coverage, and newly exposed content. +- Controls plus microphone and keyboard-fallback setup. +- Concise Unity verification and repository-hygiene summaries with known blockers. +- `Docs/Development/playtest-notes.md` for the current milestone. + +## Review loop + +1. Launch the Unity scene or Windows build as a player. +2. Exercise Loading ¡æ Preparation ¡æ Combat ¡æ Result ¡æ next day or same-day retry ¡æ final completion. +3. Check placement and tower controls plus Refrigerator, Rice, and Bed damage, destruction, and recovery. +4. Check combat readability: teams, targets, projectiles, damage, hit reaction, and death. +5. Try voice activation and keyboard fallback through the same gameplay path, including unavailable-microphone behavior. +6. Judge wave pacing, role variety, enemy introductions, tower choices, and difficulty spikes. +7. Judge attack anticipation, impact VFX/audio, hit feel, and result feedback. +8. Check phase, day, goal, protected health, controls, and result UI clarity. +9. Confirm promised player, enemy, tower, valuable, VFX, and environment/theme content appears in normal play. + +## Boundaries + +- Do not rerun compile, EditMode, PlayMode, reference, serialization, `.meta`, or hygiene checks already summarized by their owners. +- Do not paste successful full logs; request a failure log only when handing an actual blocker to debugging. +- Do not inspect source for root cause or fix issues while reviewing. Route investigation through `systematic-debugging`. +- Automated readiness is not evidence of playability; hands-on observation is required. + +## Findings + +Record a header with milestone, commit/build, platform/scene, date, input setup, scoped coverage, and concise verification references. Each finding needs severity, timestamp/phase, observation, player impact, expected behavior, at most four repro steps, optional screenshot/clip, and owning area. End with coverage gaps and one status: `PLAYABLE`, `PLAYABLE WITH FINDINGS`, or `BLOCKED`. + +## Severity and stopping + +- **P0:** crash, softlock, wrong result/state, both voice and fallback unusable, or core loop cannot complete. Stop blocked coverage and hand off immediately. +- **P1:** a major required path or repeated combat-comprehension failure; continue other reachable coverage. +- **P2:** meaningful pacing, readability, feedback, or UI degradation. +- **P3:** polish only. +- An unavailable microphone alone is a coverage gap when fallback works; both inputs failing is P0. +- If the playable artifact or hands-on access is unavailable, report `BLOCKED` with an untested coverage gap and no runtime severity; reserve P0 for an observed failure. + +## Handoff + +Separate observed defect, tuning concern, and untested coverage. Give the smallest reproducible player path and impact, group findings by owning subsystem, and do not claim root cause. + +## Reporting + +On a clean run, report the status and covered milestone in one line. On findings, link the compact playtest note; never dump raw Unity logs. diff --git a/.agents/skills/reviewing-home-protector-playability/agents/openai.yaml b/.agents/skills/reviewing-home-protector-playability/agents/openai.yaml new file mode 100644 index 0000000..82330d1 --- /dev/null +++ b/.agents/skills/reviewing-home-protector-playability/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Review Home Protector Playability" + short_description: "Evaluate hands-on game feel without duplicate validation" + default_prompt: "Use $reviewing-home-protector-playability to review a Home Protector milestone through hands-on play and concise findings." diff --git a/.agents/skills/wiring-home-protector-content/SKILL.md b/.agents/skills/wiring-home-protector-content/SKILL.md new file mode 100644 index 0000000..ae062f8 --- /dev/null +++ b/.agents/skills/wiring-home-protector-content/SKILL.md @@ -0,0 +1,49 @@ +--- +name: wiring-home-protector-content +description: Use when connecting imported Home Protector art to prefabs, variants, definitions, ContentCatalog entries, waves, or the final Unity scene. +--- + +# Wiring Home Protector Content + +## Overview + +Integrate one gameplay role at a time while preserving working references. A sprite sheet is animation input, not proof that a new prefab is required. + +## Decision order + +1. Identify the runtime role, dependencies, and existing references. +2. **Reuse** an existing prefab when its components and behavior match; preserve its GUID and add art, animation, or definition data. +3. Create a **variant** when behavior is shared but visuals, stats, or role differ. +4. Create a **new base** only when the existing contracts cannot express required behavior. +5. Represent tower levels in `TowerDefinition` data before considering level-specific prefab duplication. + +## Atomic content unit + +Commit the approved sheet, `.meta`, clips, controller, prefab or variant, definition, `ContentCatalog` entry, and related tests together. Include required projectile or VFX dependencies in the same unit. Catalog IDs and prefab references must be unique and non-null. + +## Workflow + +1. Require a successful manifest-driven import and exclusive Unity-writer ownership. +2. Wire prefab, definition, and catalog before touching a scene. +3. Reuse CommonSoldier, Monkey, Cockroach, Bear, existing towers, and other compatible identities rather than recreating them. +4. Keep `Assets/Prefabs/Refrigerator.prefab` GUID `013bf229ebe2b6247b621e48f6137a06` as the canonical protected resource. Preserve the placeholder PostBox's `DraggableResource`, `TargetObject`, and `ResourceObject` behavior while migrating its scene instances to Refrigerator. +5. Retire the placeholder PostBox asset only after Unity confirms all references were migrated. +6. Wire the final scene last through an Editor C# migration; never hand-edit Unity YAML. +7. Resolve the canonical roster from `ContentCatalog`: CommonSoldier, Monkey, Cockroach, Bear, BearHeavy, WildBoar, Snake, Spider, Mouse, Wasp, Fox, Squirrel, AntSwarm, and MothPest. Distribute all 14 across introduction, mixed, and pressure waves; never infer roles from sheet count or put every type in every wave. + +## Project rules + +- Keep CommonSoldier and Monkey. Keep Bear B20 and BearHeavy B31 as distinct normal and elite roles. +- Protected Refrigerator, Rice, and Bed contribute to target/health rules; decorative placeables do not. +- PorchYardDecor's mailbox is an environment prop, not Refrigerator. It may remain draggable with target and total-health flags disabled. +- Only one agent writes `.unity`, `.prefab`, `.asset`, `.controller`, `.anim`, or `.meta` files; review agents stay read-only. + +## Verification + +- Let Unity check catalog IDs, nulls, references, compile state, and representative spawn-to-death or placeable lifecycles. +- Confirm Refrigerator migration, decoration policy, campaign-wide roster exposure, wave role limits, and final-scene missing references. +- Run repository hygiene separately. Do not duplicate Unity semantic checks in shell scripts. + +## Reporting + +Report one-line success by role or batch. On failure name the role, wiring stage, and Unity log path; read the full log only on failure. diff --git a/.agents/skills/wiring-home-protector-content/agents/openai.yaml b/.agents/skills/wiring-home-protector-content/agents/openai.yaml new file mode 100644 index 0000000..f074910 --- /dev/null +++ b/.agents/skills/wiring-home-protector-content/agents/openai.yaml @@ -0,0 +1,4 @@ +interface: + display_name: "Wire Home Protector Content" + short_description: "Connect art, prefabs, definitions, and catalogs" + default_prompt: "Use $wiring-home-protector-content to integrate Home Protector content while preserving GUIDs and scene safety." diff --git a/.github/workflows/unity-repo-hygiene.yml b/.github/workflows/unity-repo-hygiene.yml new file mode 100644 index 0000000..346e1e0 --- /dev/null +++ b/.github/workflows/unity-repo-hygiene.yml @@ -0,0 +1,19 @@ +name: unity-repo-hygiene + +on: + pull_request: + push: + branches: + - main + +permissions: + contents: read + +jobs: + validate: + runs-on: windows-latest + steps: + - uses: actions/checkout@v7 + - name: Validate Unity repository hygiene + shell: pwsh + run: ./Tools/Git/Validate-UnityRepo.ps1 diff --git a/.gitignore b/.gitignore index 0822432..ef7ce8f 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,10 @@ Library/ /[Tt]emp/ /[Oo]bj/ /[Bb]uild/ +/[Bb]uild*/ /[Bb]uilds/ +/[Rr]eleases/ +/새 í�´ë�”/ /[Ll]ogs/ /[Uu]ser[Ss]ettings/ diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..f20894b --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,51 @@ +# Home Protector agent contract + +This repository is a Unity 2022.3.60f1 project completed from the existing `isometric scene` gameplay. Keep changes incremental and preserve working legacy systems while moving ownership to `Assets/_Project`. + +## Required boundaries + +- `HomeProtector.Core.GameSession` is the only source of Preparation, Combat, and Result state. +- Keep `WaveSystem`, `EnemySpawner`, `TowerSpawner`, `TargetManager`, and `ResourceManager` as the combat engine; adapt them through bridges instead of rewriting them. +- Keep CommonSoldier and Monkey. Treat the old PostBox prefab as the refrigerator placeholder and preserve its draggable, target, and resource behavior while migrating it. +- Keep microphone activation and a keyboard fallback on the same activation path. +- Do not add WebGL, GitHub Pages, NAN submission automation, or an in-game AI director. + +## Unity ownership + +- Only one agent may write `.unity`, `.prefab`, `.asset`, `.controller`, `.anim`, or `.meta` files at a time. +- Never hand-edit Unity scene or prefab YAML. Use Unity Editor C# migration/build commands. +- Read-only asset inventory and playability review may run in parallel. +- Preserve GUIDs when moving assets. Commit a runtime asset together with its `.meta`, clips, controller, prefab, and definition. + +## Art intake + +- Import only canonical Unity-ready sprite sheets from `D:/GameAsset` that are listed in `Docs/Development/asset-import-manifest.json`. +- Exclude raw generations, `Frames`, `fullres`, `native`, comparison images, and intermediate QualityRefresh revisions. +- Slice approved sheets in Unity. Do not commit per-frame PNG copies. +- Store imported runtime art under `Assets/_Project/Art/Runtime` and provenance in the manifest. + +## Verification + +- Let Unity own compile, serialization, reference, EditMode, PlayMode, and build verification. +- Use `Tools/Unity/Invoke-HomeProtectorUnity.ps1` for concise summaries. Read full Unity logs only after a failure. +- Use `Tools/Git/Validate-UnityRepo.ps1` for repository hygiene; do not duplicate Unity semantic checks in shell scripts or skills. +- A missing Unity license is an explicit blocked check, never a passing result. + +## Git + +- Work on `codex/*` branches; never push or force-push `main`. +- Stage explicit feature paths. Do not use `git add -A` in this mixed Unity worktree. +- Do not commit `Library`, `Temp`, `Build`, `Builds`, `Releases`, executables, generated DLLs, or raw/full-resolution art. +- Use normal Git for approved sheets. Reconsider LFS only for future source assets such as PSD/WAV or files over 20 MiB. +- Keep code and its tests together. Keep scene wiring in a later, separate commit. + +## Local skills + +Use the smallest applicable skill under `.agents/skills`: + +- `cataloging-home-protector-assets` for canonical asset selection and manifest updates. +- `importing-unity-sprite-sheets` for importer contracts and Editor-driven slicing. +- `wiring-home-protector-content` for prefab, definition, catalog, and scene integration. +- `reviewing-home-protector-playability` for milestone play reviews. + +Use existing `systematic-debugging`, `verification-before-completion`, and GitHub `yeet` instead of creating overlapping project skills. diff --git a/Assets/Prefabs/EnemyBear.prefab b/Assets/Prefabs/EnemyBear.prefab index dd0836d..b2b03b6 100644 --- a/Assets/Prefabs/EnemyBear.prefab +++ b/Assets/Prefabs/EnemyBear.prefab @@ -103,7 +103,7 @@ SpriteRenderer: m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 - m_SortingOrder: 1 + m_SortingOrder: 2 m_Sprite: {fileID: 21300000, guid: 72c692a250175e3408a8627d98e867fc, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 @@ -156,8 +156,8 @@ MonoBehaviour: gold: 30 expValue: 50 targetTagPriority: - - Food - Goods + - Food - Human targetSearchRadius: 10 targetUpdateInterval: 1 diff --git a/Assets/Prefabs/EnemyCockroach.prefab b/Assets/Prefabs/EnemyCockroach.prefab index 8b4219f..f0fa8d7 100644 --- a/Assets/Prefabs/EnemyCockroach.prefab +++ b/Assets/Prefabs/EnemyCockroach.prefab @@ -187,7 +187,7 @@ SpriteRenderer: m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 - m_SortingOrder: 1 + m_SortingOrder: 2 m_Sprite: {fileID: 21300000, guid: 86b0557da12100c4280a2086d2458a01, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 diff --git a/Assets/Prefabs/EnemyCommonSoldier.prefab b/Assets/Prefabs/EnemyCommonSoldier.prefab index 058aa6c..edd5a96 100644 --- a/Assets/Prefabs/EnemyCommonSoldier.prefab +++ b/Assets/Prefabs/EnemyCommonSoldier.prefab @@ -187,7 +187,7 @@ SpriteRenderer: m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 - m_SortingOrder: 1 + m_SortingOrder: 2 m_Sprite: {fileID: -7008412969330441016, guid: 4a7c0da22d195094c996d9182a363b82, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 diff --git a/Assets/Prefabs/EnemyCommonSoldier 1.prefab b/Assets/Prefabs/EnemyMonkey.prefab similarity index 87% rename from Assets/Prefabs/EnemyCommonSoldier 1.prefab rename to Assets/Prefabs/EnemyMonkey.prefab index 2bea492..91ed736 100644 --- a/Assets/Prefabs/EnemyCommonSoldier 1.prefab +++ b/Assets/Prefabs/EnemyMonkey.prefab @@ -103,8 +103,9 @@ GameObject: - component: {fileID: 6203516723759015889} - component: {fileID: -84709492547993232} - component: {fileID: -8553615408204601458} + - component: {fileID: -5499601254261705463} m_Layer: 8 - m_Name: EnemyCommonSoldier 1 + m_Name: EnemyMonkey m_TagString: Enemy m_Icon: {fileID: 0} m_NavMeshLayer: 0 @@ -134,7 +135,7 @@ Animator: m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 8385226143460851807} - m_Enabled: 1 + m_Enabled: 0 m_Avatar: {fileID: 0} m_Controller: {fileID: 9100000, guid: a08fc71a87fe29047b93017ed22c5817, type: 2} m_CullingMode: 0 @@ -187,8 +188,8 @@ SpriteRenderer: m_LightmapParameters: {fileID: 0} m_SortingLayerID: 0 m_SortingLayer: 0 - m_SortingOrder: 1 - m_Sprite: {fileID: -7008412969330441016, guid: 4a7c0da22d195094c996d9182a363b82, type: 3} + m_SortingOrder: 2 + m_Sprite: {fileID: 21300000, guid: 6014ac042f215ee40bd60ebf3c53aa9f, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 @@ -223,7 +224,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 3866747457431c04f8a86561f03ccf31, type: 3} m_Name: m_EditorClassIdentifier: - moveSpeed: 2 + moveSpeed: 16.6 moveDirection: {x: 0, y: 0, z: 0} --- !u!114 &-2238810831190767473 MonoBehaviour: @@ -240,9 +241,9 @@ MonoBehaviour: gold: 10 expValue: 20 targetTagPriority: - - Resource - - PlayerBase - - Tower + - Goods + - Food + - Human targetSearchRadius: 10 targetUpdateInterval: 1 defaultTargetTag: Human @@ -296,7 +297,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 14e868f8837a5e5479846d867a687b91, type: 3} m_Name: m_EditorClassIdentifier: - maxHP: 7 + maxHP: 10 --- !u!195 &6203516723759015889 NavMeshAgent: m_ObjectHideFlags: 0 @@ -306,7 +307,7 @@ NavMeshAgent: m_GameObject: {fileID: 8385226143460851807} m_Enabled: 1 m_AgentTypeID: 0 - m_Radius: 0.3 + m_Radius: 0.1 m_Speed: 3.5 m_Acceleration: 12 avoidancePriority: 10 @@ -315,7 +316,7 @@ NavMeshAgent: m_AutoTraverseOffMeshLink: 1 m_AutoBraking: 0 m_AutoRepath: 1 - m_Height: 1 + m_Height: 0.5 m_BaseOffset: 0 m_WalkableMask: 1 m_ObstacleAvoidanceType: 1 @@ -331,16 +332,16 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 9b4f5468c74ed5c4596ef0af94081a11, type: 3} m_Name: m_EditorClassIdentifier: - attackType: 2 - attackRange: 0.1 + attackType: 1 + attackRange: 10 attackRate: 0.8 attackDamage: 2 targetLayers: serializedVersion: 2 m_Bits: 8 - projectilePrefab: {fileID: 2777279350721899029, guid: 44489083cff375d4aa63a379f35125dd, type: 3} + projectilePrefab: {fileID: 0} attackPoint: {fileID: 3820741013839462605} - attackEffect: {fileID: 0} + attackEffect: {fileID: 1297803425142155509, guid: dde7a72a4de1bdc40a7138e6bd05585f, type: 3} attackSound: {fileID: 0} useIsometricPosition: 1 --- !u!114 &-8553615408204601458 @@ -357,3 +358,47 @@ MonoBehaviour: m_EditorClassIdentifier: flipX: 1 flipY: 0 +--- !u!114 &-5499601254261705463 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8385226143460851807} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 046e5eb2ec9e2f84a827b6ae91eb69ce, type: 3} + m_Name: + m_EditorClassIdentifier: + jumpHeight: 1.5 + jumpDuration: 0.7 + jumpCooldown: 2 + jumpCurve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + - serializedVersion: 3 + time: 1 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 0 + weightedMode: 0 + inWeight: 0 + outWeight: 0 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + randomJumping: 1 + randomJumpChance: 0.1 + jumpOnObstacle: 1 + jumpEffect: {fileID: 0} + jumpSound: {fileID: 0} diff --git a/Assets/Prefabs/EnemyCommonSoldier 1.prefab.meta b/Assets/Prefabs/EnemyMonkey.prefab.meta similarity index 100% rename from Assets/Prefabs/EnemyCommonSoldier 1.prefab.meta rename to Assets/Prefabs/EnemyMonkey.prefab.meta diff --git a/Assets/Prefabs/FollowTower03.prefab b/Assets/Prefabs/FollowTower03.prefab new file mode 100644 index 0000000..86ab59e --- /dev/null +++ b/Assets/Prefabs/FollowTower03.prefab @@ -0,0 +1,99 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5283101220022144376 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 586370364521603436} + - component: {fileID: 2843504925317398706} + - component: {fileID: 9195364417866039883} + m_Layer: 0 + m_Name: FollowTower03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &586370364521603436 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5283101220022144376} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &2843504925317398706 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5283101220022144376} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 2 + m_Sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 0.5} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &9195364417866039883 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5283101220022144376} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 45f67371a075196438240da166445dfb, type: 3} + m_Name: + m_EditorClassIdentifier: diff --git a/Assets/Prefabs/FollowTower03.prefab.meta b/Assets/Prefabs/FollowTower03.prefab.meta new file mode 100644 index 0000000..3bdba30 --- /dev/null +++ b/Assets/Prefabs/FollowTower03.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 33f77d679e7670b45981337fd1c2c8ba +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Last/Monkey Idle 1.png b/Assets/Prefabs/Last/Monkey Idle 1.png new file mode 100644 index 0000000..2148b41 Binary files /dev/null and b/Assets/Prefabs/Last/Monkey Idle 1.png differ diff --git a/Assets/Prefabs/Last/Monkey Idle 1.png.meta b/Assets/Prefabs/Last/Monkey Idle 1.png.meta new file mode 100644 index 0000000..e371c89 --- /dev/null +++ b/Assets/Prefabs/Last/Monkey Idle 1.png.meta @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: 6014ac042f215ee40bd60ebf3c53aa9f +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 0 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 32 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Last/UI/FadeManager.cs b/Assets/Prefabs/Last/UI/FadeManager.cs index 5cca403..6a14af0 100644 --- a/Assets/Prefabs/Last/UI/FadeManager.cs +++ b/Assets/Prefabs/Last/UI/FadeManager.cs @@ -1,47 +1,48 @@ +using System.Collections; using UnityEngine; -using UnityEngine.UI; using UnityEngine.SceneManagement; -using System.Collections; +using UnityEngine.UI; public class FadeManager : MonoBehaviour { - public Image fadeImage; // UI Image (°ËÀº»ö ¹è°æ) + public Image fadeImage; public float fadeSpeed = 1.5f; - // void Start() - // { - // ¾À ½ÃÀÛ ½Ã ÆäÀ̵å ÀÎ È¿°ú Àû¿ë (È­¸éÀÌ Á¡Á¡ ¹à¾ÆÁü) - // StartCoroutine(FadeIn()); - // } + private bool isTransitioning; - public void StartSceneTransition(string morning) + public void StartSceneTransition(string sceneName) { - // ¾À Àüȯ ½ÃÀÛ (ÆäÀÌµå ¾Æ¿ô ÈÄ ¾À À̵¿) - StartCoroutine(FadeOut(morning)); + if (isTransitioning) + { + return; + } + + if (string.IsNullOrWhiteSpace(sceneName)) + { + Debug.LogError("FadeManager cannot load an empty scene name."); + return; + } + + isTransitioning = true; + StartCoroutine(FadeOut(sceneName)); } - // IEnumerator FadeIn() - // { - // float alpha = 1; - // while (alpha > 0) - // { - // alpha -= Time.deltaTime * fadeSpeed; - // fadeImage.color = new Color(0, 0, 0, alpha); - // yield return null; - // } - // } - - IEnumerator FadeOut(string morning) + private IEnumerator FadeOut(string sceneName) { - float alpha = 0; - while (alpha < 1) + if (fadeImage == null || fadeSpeed <= 0f) + { + SceneManager.LoadScene(sceneName); + yield break; + } + + float alpha = 0f; + while (alpha < 1f) { alpha += Time.deltaTime * fadeSpeed; - fadeImage.color = new Color(0, 0, 0, alpha); + fadeImage.color = new Color(0f, 0f, 0f, alpha); yield return null; } - // ¾À Àüȯ - SceneManager.LoadScene(morning); + SceneManager.LoadScene(sceneName); } -} +} \ No newline at end of file diff --git a/Assets/Prefabs/Last/UI/StartGame.cs b/Assets/Prefabs/Last/UI/StartGame.cs index 1773443..87bfd10 100644 --- a/Assets/Prefabs/Last/UI/StartGame.cs +++ b/Assets/Prefabs/Last/UI/StartGame.cs @@ -1,14 +1,65 @@ using UnityEngine; +using UnityEngine.SceneManagement; public class StartGame : MonoBehaviour { - public FadeManager fadeManager; // FadeManager ½ºÅ©¸³Æ® ÂüÁ¶ + private const string DefaultTargetSceneName = "isometric scene"; - void Update() + [SerializeField] private FadeManager fadeManager; + [SerializeField] private string targetSceneName = DefaultTargetSceneName; + [SerializeField] private bool startOnAnyMouseClick = true; + [SerializeField] private bool startOnSubmitKey = true; + + private bool isTransitioning; + + public string TargetSceneName => + string.IsNullOrWhiteSpace(targetSceneName) ? DefaultTargetSceneName : targetSceneName; + + private void Awake() + { + if (fadeManager == null) + { + fadeManager = FindObjectOfType(); + } + } + + private void Update() { - if (Input.GetMouseButtonDown(0)) // È­¸é Ŭ¸¯ ½Ã + if (!ShouldStart()) { - fadeManager.StartSceneTransition("isometric scene"); // ¾À Àüȯ ½ÇÇà + return; } + + StartGameFlow(); + } + + public void StartGameFlow() + { + if (isTransitioning) + { + return; + } + + isTransitioning = true; + + if (fadeManager != null) + { + fadeManager.StartSceneTransition(TargetSceneName); + return; + } + + Debug.LogWarning("StartGame has no FadeManager. Loading target scene immediately."); + SceneManager.LoadScene(TargetSceneName); + } + + private bool ShouldStart() + { + bool mouseRequested = startOnAnyMouseClick && Input.GetMouseButtonDown(0); + bool keyboardRequested = startOnSubmitKey + && (Input.GetKeyDown(KeyCode.Return) + || Input.GetKeyDown(KeyCode.KeypadEnter) + || Input.GetKeyDown(KeyCode.Space)); + + return mouseRequested || keyboardRequested; } -} +} \ No newline at end of file diff --git a/Assets/Prefabs/Materials/ProjectileCoolDryer.prefab b/Assets/Prefabs/Materials/ProjectileCoolDryer.prefab new file mode 100644 index 0000000..b73bced --- /dev/null +++ b/Assets/Prefabs/Materials/ProjectileCoolDryer.prefab @@ -0,0 +1,188 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2777279350721899029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2315529299478935262} + - component: {fileID: 4868053075446110428} + - component: {fileID: 6226941901820838719} + - component: {fileID: 5394799678845828166} + - component: {fileID: 1856268412655041909} + - component: {fileID: 5000556750402004395} + m_Layer: 0 + m_Name: ProjectileCoolDryer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2315529299478935262 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2777279350721899029} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &4868053075446110428 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2777279350721899029} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3866747457431c04f8a86561f03ccf31, type: 3} + m_Name: + m_EditorClassIdentifier: + moveSpeed: 15 + moveDirection: {x: 0, y: 0, z: 0} +--- !u!58 &6226941901820838719 +CircleCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2777279350721899029} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 1 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + serializedVersion: 2 + m_Radius: 0.1 +--- !u!50 &5394799678845828166 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2777279350721899029} + m_BodyType: 1 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 0 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 0 + m_Constraints: 0 +--- !u!212 &1856268412655041909 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2777279350721899029} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 2 + m_Sprite: {fileID: 21300000, guid: 373130f3555d2b345bb1d8098d6a42db, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 0.21, y: 0.35} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &5000556750402004395 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2777279350721899029} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 29186558c7e854840872e40bd3e2a046, type: 3} + m_Name: + m_EditorClassIdentifier: + hitEffect: {fileID: 1297803425142155509, guid: dde7a72a4de1bdc40a7138e6bd05585f, type: 3} + updateZPosition: 1 + effectRadius: 2 + enemyTag: Enemy + moveSpeed: 8 + moveSlowAmount: 1 + moveSlowDuration: 4 + attackSlowAmount: 1 + attackSlowDuration: 3 + debuffEffectPrefab: {fileID: 1297803425142155509, guid: dde7a72a4de1bdc40a7138e6bd05585f, type: 3} diff --git a/Assets/Prefabs/Materials/ProjectileCoolDryer.prefab.meta b/Assets/Prefabs/Materials/ProjectileCoolDryer.prefab.meta new file mode 100644 index 0000000..485746e --- /dev/null +++ b/Assets/Prefabs/Materials/ProjectileCoolDryer.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9f72e4894fe04e84795264cd1b0da82a +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Rice.prefab b/Assets/Prefabs/Rice.prefab index 81ed33e..4bdf146 100644 --- a/Assets/Prefabs/Rice.prefab +++ b/Assets/Prefabs/Rice.prefab @@ -92,7 +92,7 @@ GameObject: - component: {fileID: 1130233737445535661} m_Layer: 3 m_Name: Rice - m_TagString: Goods + m_TagString: Food m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 @@ -178,6 +178,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: targetTag: Food + autoRegister: 1 --- !u!114 &1288222789276926307 MonoBehaviour: m_ObjectHideFlags: 0 @@ -190,7 +191,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 585e1db9aa9f31141a7e3d787e65e025, type: 3} m_Name: m_EditorClassIdentifier: - maxHP: 100 + maxHP: 50 resourceName: Food destroyEffect: {fileID: 0} isInvincible: 0 diff --git a/Assets/Prefabs/Tower03CoolDryer.asset b/Assets/Prefabs/Tower03CoolDryer.asset new file mode 100644 index 0000000..ff702c0 --- /dev/null +++ b/Assets/Prefabs/Tower03CoolDryer.asset @@ -0,0 +1,47 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 724490502a651684da550b41ba71b958, type: 3} + m_Name: Tower03CoolDryer + m_EditorClassIdentifier: + towerPrefab: {fileID: 7937509987669185425, guid: f827b8f1b1e900f4a887ac5530ae3134, type: 3} + weapons: + - sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + damage: 1 + rate: 1 + range: 5 + cost: 7 + sell: 2 + - sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + damage: 1 + rate: 1.3 + range: 7 + cost: 7 + sell: 2 + - sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + damage: 1 + rate: 1.6 + range: 9 + cost: 7 + sell: 2 + - sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + damage: 1.2 + rate: 1.9 + range: 11 + cost: 7 + sell: 2 + - sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + damage: 2 + rate: 2.2 + range: 11 + cost: 7 + sell: 3 + followTowerPrefab: {fileID: 5283101220022144376, guid: 33f77d679e7670b45981337fd1c2c8ba, type: 3} diff --git a/Assets/Prefabs/Tower03CoolDryer.asset.meta b/Assets/Prefabs/Tower03CoolDryer.asset.meta new file mode 100644 index 0000000..006639c --- /dev/null +++ b/Assets/Prefabs/Tower03CoolDryer.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 42202a8d6ff0484419452be243e9d106 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/TowerCoolDryer.prefab b/Assets/Prefabs/TowerCoolDryer.prefab new file mode 100644 index 0000000..5da68d0 --- /dev/null +++ b/Assets/Prefabs/TowerCoolDryer.prefab @@ -0,0 +1,213 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7371461398766480874 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 440144251034166792} + m_Layer: 9 + m_Name: SpawnPoint + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &440144251034166792 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7371461398766480874} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1868021092688681769} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &7937509987669185425 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1868021092688681769} + - component: {fileID: 994000507248595842} + - component: {fileID: -6281782124998012200} + - component: {fileID: -6842561234153425761} + - component: {fileID: 8675374209508277363} + - component: {fileID: 3285590015073188405} + m_Layer: 9 + m_Name: TowerCoolDryer + m_TagString: Tower + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1868021092688681769 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7937509987669185425} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 440144251034166792} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &994000507248595842 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7937509987669185425} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 1 + m_Sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 0.5} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!114 &-6281782124998012200 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7937509987669185425} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 39ee8bc23ad864841a60797d1f81588b, type: 3} + m_Name: + m_EditorClassIdentifier: + projectilePrefab: {fileID: 2777279350721899029, guid: 9f72e4894fe04e84795264cd1b0da82a, type: 3} + spawnPoint: {fileID: 440144251034166792} + attackEnabled: 1 +--- !u!61 &-6842561234153425761 +BoxCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7937509987669185425} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: -0.0152255, y: 0.03214276} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0.5, y: 0.5} + oldSize: {x: 0.64, y: 0.64} + newSize: {x: 1, y: 0.5} + adaptiveTilingThreshold: 0.5 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + serializedVersion: 2 + m_Size: {x: 0.80578893, y: 0.79225516} + m_EdgeRadius: 0 +--- !u!208 &8675374209508277363 +NavMeshObstacle: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7937509987669185425} + m_Enabled: 1 + serializedVersion: 3 + m_Shape: 1 + m_Extents: {x: 0.32000002, y: 0.32000002, z: 0.1} + m_MoveThreshold: 0.1 + m_Carve: 0 + m_CarveOnlyStationary: 1 + m_Center: {x: 0, y: 0, z: 0} + m_TimeToStationary: 0.5 +--- !u!114 &3285590015073188405 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7937509987669185425} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6bd949ebc1b5b6a41b394ef49d3d95f0, type: 3} + m_Name: + m_EditorClassIdentifier: + updateContinuously: 1 + updateOnStart: 1 + includeChildren: 1 diff --git a/Assets/Prefabs/TowerCoolDryer.prefab.meta b/Assets/Prefabs/TowerCoolDryer.prefab.meta new file mode 100644 index 0000000..84b4c40 --- /dev/null +++ b/Assets/Prefabs/TowerCoolDryer.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f827b8f1b1e900f4a887ac5530ae3134 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/TowerDryer.prefab b/Assets/Prefabs/TowerDryer.prefab index c880dd3..efadc07 100644 --- a/Assets/Prefabs/TowerDryer.prefab +++ b/Assets/Prefabs/TowerDryer.prefab @@ -109,7 +109,7 @@ SpriteRenderer: m_SortingLayerID: 0 m_SortingLayer: 0 m_SortingOrder: 1 - m_Sprite: {fileID: 21300000, guid: bf093bf7afa81b542a10689df8d22170, type: 3} + m_Sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} m_Color: {r: 1, g: 1, b: 1, a: 1} m_FlipX: 0 m_FlipY: 0 diff --git "a/Assets/Prefabs/\354\230\244\353\270\214\354\240\235\355\212\270_\355\227\244\354\226\264\353\223\234\353\235\274\354\235\264\354\226\264(\354\240\225\353\251\264).png" "b/Assets/Prefabs/\354\230\244\353\270\214\354\240\235\355\212\270_\355\227\244\354\226\264\353\223\234\353\235\274\354\235\264\354\226\264(\354\240\225\353\251\264).png" new file mode 100644 index 0000000..fcf33bd Binary files /dev/null and "b/Assets/Prefabs/\354\230\244\353\270\214\354\240\235\355\212\270_\355\227\244\354\226\264\353\223\234\353\235\274\354\235\264\354\226\264(\354\240\225\353\251\264).png" differ diff --git "a/Assets/Prefabs/\354\230\244\353\270\214\354\240\235\355\212\270_\355\227\244\354\226\264\353\223\234\353\235\274\354\235\264\354\226\264(\354\240\225\353\251\264).png.meta" "b/Assets/Prefabs/\354\230\244\353\270\214\354\240\235\355\212\270_\355\227\244\354\226\264\353\223\234\353\235\274\354\235\264\354\226\264(\354\240\225\353\251\264).png.meta" new file mode 100644 index 0000000..18f26d5 --- /dev/null +++ "b/Assets/Prefabs/\354\230\244\353\270\214\354\240\235\355\212\270_\355\227\244\354\226\264\353\223\234\353\235\274\354\235\264\354\226\264(\354\240\225\353\251\264).png.meta" @@ -0,0 +1,140 @@ +fileFormatVersion: 2 +guid: c6bc141ec427697498158281f07ba0a9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 13 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/isometric scene.unity b/Assets/Scenes/isometric scene.unity index 42956c1..cca5dd5 100644 --- a/Assets/Scenes/isometric scene.unity +++ b/Assets/Scenes/isometric scene.unity @@ -556,6 +556,7 @@ MonoBehaviour: towerTemplates: - {fileID: 11400000, guid: ba188ac3d4bece146bc102e7763e57e5, type: 2} - {fileID: 11400000, guid: 7d36bbf111c9b2f4d9aa3fbe62191b72, type: 2} + - {fileID: 11400000, guid: 42202a8d6ff0484419452be243e9d106, type: 2} enemySpawner: {fileID: 1147920979} grid: {fileID: 859478659} playerGold: {fileID: 1581344736} @@ -650,6 +651,140 @@ MonoBehaviour: updateContinuously: 1 updateOnStart: 1 includeChildren: 1 +--- !u!1 &185855365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 185855366} + - component: {fileID: 185855369} + - component: {fileID: 185855368} + - component: {fileID: 185855367} + m_Layer: 5 + m_Name: ButtonTower03 + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &185855366 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 185855365} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 740696203} + - {fileID: 1646052604} + m_Father: {fileID: 1867004582} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &185855367 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 185855365} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 185855368} + m_OnClick: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 154468004} + m_TargetAssemblyTypeName: TowerSpawner, Assembly-CSharp + m_MethodName: ReadyToSpawnTower + m_Mode: 1 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 +--- !u!114 &185855368 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 185855365} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.38013974, g: 0.4009434, b: 0.39036527, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &185855369 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 185855365} + m_CullTransparentMesh: 1 --- !u!1 &237603021 GameObject: m_ObjectHideFlags: 0 @@ -44519,6 +44654,140 @@ MonoBehaviour: mediumToHighThreshold: 0.66 playerExperience: {fileID: 1581344737} targetImage: {fileID: 2049949287} +--- !u!1 &740696202 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 740696203} + - component: {fileID: 740696205} + - component: {fileID: 740696204} + m_Layer: 5 + m_Name: Text (TMP) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &740696203 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740696202} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 185855366} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 2.5} + m_SizeDelta: {x: 0, y: -5} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &740696204 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740696202} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: $7 + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4293059309 + m_fontColor: {r: 0.9292453, g: 0.885413, b: 0.885413, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 1024 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &740696205 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 740696202} + m_CullTransparentMesh: 1 --- !u!114 &809933616 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 1229078846868282744, guid: 3dbcabafd138ac343ab3079802a95348, type: 3} @@ -44944,7 +45213,7 @@ MonoBehaviour: minActivationThreshold: 30 maxActivationThreshold: 80 sampleWindow: 128 - scaledVolume: 50 + scaledVolume: 73 pauseGameOnActivation: 1 fatigueToDifficultyMultiplier: serializedVersion: 2 @@ -44957,7 +45226,7 @@ MonoBehaviour: placementIndicatorColor: {r: 0.9371345, g: 0.9481132, b: 0.4740566, a: 0.5} playerActivationEnabled: 1 oneTimeUseOnly: 1 - playerActiveTime: 10 + playerActiveTime: 30 placementInstructionUI: {fileID: 0} debugText: {fileID: 0} showDebugInfo: 1 @@ -45650,11 +45919,15 @@ MonoBehaviour: - enemyPrefab: {fileID: 8385226143460851807, guid: 6ffdc11c948d0284ea7c1945fee301b9, type: 3} count: 5 spawnTime: 2 - spawnPoint: {fileID: 981001447} + spawnPoint: {fileID: 2112826239} - enemyPrefab: {fileID: 3414869680251919639, guid: 5ee286c5b97c2fd4f9a183e2ef82b0f3, type: 3} count: 3 spawnTime: 10 - spawnPoint: {fileID: 2112826239} + spawnPoint: {fileID: 981001447} + - enemyPrefab: {fileID: 8385226143460851807, guid: 8baaacbdeee084d46b28c6a10405ba2c, type: 3} + count: 8 + spawnTime: 10 + spawnPoint: {fileID: 1163419457} delayBeforeNextWave: 0 baseDuration: 20 enemySpawner: {fileID: 1147920979} @@ -45682,12 +45955,16 @@ MonoBehaviour: waves: - waveName: enemyGroups: - - enemyPrefab: {fileID: 0} - count: 0 - spawnTime: 0 - spawnPoint: {fileID: 0} - delayBeforeNextWave: 0 - baseDuration: 0 + - enemyPrefab: {fileID: 8385226143460851807, guid: 459970b3cd6480340ae2f709e3c03d44, type: 3} + count: 8 + spawnTime: 0.5 + spawnPoint: {fileID: 1163419457} + - enemyPrefab: {fileID: 3414869680251919639, guid: 5ee286c5b97c2fd4f9a183e2ef82b0f3, type: 3} + count: 4 + spawnTime: 8 + spawnPoint: {fileID: 981001447} + delayBeforeNextWave: 2 + baseDuration: 15 defaultWaves: [] waveSystem: {fileID: 1147920980} dayCounterSystem: {fileID: 1581344740} @@ -45941,17 +46218,13 @@ PrefabInstance: serializedVersion: 3 m_TransformParent: {fileID: 172438930} m_Modifications: - - target: {fileID: 1288222789276926307, guid: 44ba641023229ea46bb80c519a00bf60, type: 3} - propertyPath: maxHP - value: 50 - objectReference: {fileID: 0} - target: {fileID: 2609580779989615194, guid: 44ba641023229ea46bb80c519a00bf60, type: 3} propertyPath: m_LocalPosition.x - value: 13.62 + value: 10.85 objectReference: {fileID: 0} - target: {fileID: 2609580779989615194, guid: 44ba641023229ea46bb80c519a00bf60, type: 3} propertyPath: m_LocalPosition.y - value: 1.07 + value: 1.09 objectReference: {fileID: 0} - target: {fileID: 2609580779989615194, guid: 44ba641023229ea46bb80c519a00bf60, type: 3} propertyPath: m_LocalPosition.z @@ -45989,10 +46262,6 @@ PrefabInstance: propertyPath: m_Name value: Rice objectReference: {fileID: 0} - - target: {fileID: 7784308354496575444, guid: 44ba641023229ea46bb80c519a00bf60, type: 3} - propertyPath: m_TagString - value: Food - objectReference: {fileID: 0} m_RemovedComponents: [] m_RemovedGameObjects: [] m_AddedGameObjects: [] @@ -55313,11 +55582,11 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 8625425667629719472, guid: 5c40c302b42ba7e49a9792fbdbc9eca1, type: 3} propertyPath: m_LocalPosition.y - value: 0 + value: -1 objectReference: {fileID: 0} - target: {fileID: 8625425667629719472, guid: 5c40c302b42ba7e49a9792fbdbc9eca1, type: 3} propertyPath: m_LocalPosition.z - value: 0 + value: -1 objectReference: {fileID: 0} - target: {fileID: 8625425667629719472, guid: 5c40c302b42ba7e49a9792fbdbc9eca1, type: 3} propertyPath: m_LocalRotation.w @@ -55969,7 +56238,7 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 885a8c24fafb4fc4fad6186d899aeb41, type: 3} m_Name: m_EditorClassIdentifier: - currentGold: 300 + currentGold: 150 maxFatigue: 100 currentFatigue: 0 fatiguePerTower: 10 @@ -56375,6 +56644,81 @@ PrefabInstance: insertIndex: -1 addedObject: {fileID: 68787472} m_SourcePrefab: {fileID: 100100000, guid: b58705ae47db919469a26088aca18287, type: 3} +--- !u!1 &1646052603 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1646052604} + - component: {fileID: 1646052606} + - component: {fileID: 1646052605} + m_Layer: 5 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1646052604 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646052603} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 185855366} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -10} + m_SizeDelta: {x: 88, y: 59} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1646052605 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646052603} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1646052606 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1646052603} + m_CullTransparentMesh: 1 --- !u!114 &1718113225 stripped MonoBehaviour: m_CorrespondingSourceObject: {fileID: 1229078846868282744, guid: 3dbcabafd138ac343ab3079802a95348, type: 3} @@ -56426,6 +56770,7 @@ RectTransform: m_Children: - {fileID: 1691278} - {fileID: 1498566254} + - {fileID: 185855366} m_Father: {fileID: 469968503} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 1, y: 0.5} @@ -56525,6 +56870,7 @@ MonoBehaviour: towerButtons: - {fileID: 1691279} - {fileID: 1498566255} + - {fileID: 185855367} --- !u!1 &1913536161 GameObject: m_ObjectHideFlags: 0 @@ -56731,7 +57077,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4476800047696795335, guid: 580e3cbb4d3d8e5478065d094194784f, type: 3} propertyPath: m_AnchoredPosition.x - value: 34.3 + value: 34.30005 objectReference: {fileID: 0} - target: {fileID: 4476800047696795335, guid: 580e3cbb4d3d8e5478065d094194784f, type: 3} propertyPath: m_AnchoredPosition.y diff --git a/Assets/Scripts/Movement2D.cs b/Assets/Scripts/Movement2D.cs deleted file mode 100644 index 9e9c295..0000000 --- a/Assets/Scripts/Movement2D.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class Movement2D : MonoBehaviour -{ - [SerializeField] - private float moveSpeed = 1.0f; - [SerializeField] - private Vector3 moveDirection = Vector3.zero; - - private float originalMoveSpeed; // ¿ø·¡ À̵¿ ¼Óµµ ÀúÀå¿ë - private bool isSlowed = false; // ÇöÀç °¨¼Ó »óÅÂÀÎÁö - private float slowTimer = 0f; // °¨¼Ó Áö¼Ó ½Ã°£ ŸÀÌ¸Ó - private float currentSlowAmount = 0f; // ÇöÀç Àû¿ëµÈ °¨¼Ó ºñÀ² - - public float MoveSpeed => moveSpeed; - - private void Awake() - { - // Ãʱâ À̵¿ ¼Óµµ ÀúÀå - originalMoveSpeed = moveSpeed; - } - - // Update is called once per frame - void Update() - { - transform.position += moveDirection * moveSpeed * Time.deltaTime; - - // °¨¼Ó È¿°ú°¡ Àû¿ë ÁßÀ̶ó¸é ŸÀÌ¸Ó ¾÷µ¥ÀÌÆ® - if (isSlowed) - { - slowTimer -= Time.deltaTime; - - // ŸÀ̸Ӱ¡ ³¡³ª¸é À̵¿ ¼Óµµ º¹±¸ - if (slowTimer <= 0) - { - ResetMoveSpeed(); - } - } - } - - public void MoveTo(Vector3 direction) - { - moveDirection = direction; - } - - // À̵¿ ¼Óµµ °¨¼Ò È¿°ú Àû¿ë - public void ApplySlow(float slowAmount, float duration) - { - // ÇöÀç Àû¿ëµÈ °¨¼Óº¸´Ù ´õ °­ÇÑ °¨¼ÓÀ̰ųª, °¨¼Ó È¿°ú°¡ °ð ³¡³¯ °æ¿ì¿¡¸¸ Àû¿ë - if (slowAmount > currentSlowAmount || slowTimer < 0.5f) - { - // °¨¼Ó È¿°ú°¡ óÀ½ Àû¿ëµÇ¸é ¿ø·¡ ¼Óµµ ÀúÀå - if (!isSlowed) - { - originalMoveSpeed = moveSpeed; - } - - // »õ·Î¿î °¨¼Ó È¿°ú Àû¿ë - currentSlowAmount = slowAmount; - moveSpeed = originalMoveSpeed * (1 - slowAmount); - slowTimer = duration; - isSlowed = true; - } - } - - // À̵¿ ¼Óµµ ¿ø·¡´ë·Î º¹±¸ - public void ResetMoveSpeed() - { - moveSpeed = originalMoveSpeed; - isSlowed = false; - currentSlowAmount = 0f; - } -} \ No newline at end of file diff --git a/Assets/Scripts/Projectile/ProjectileComboDebuff.cs b/Assets/Scripts/Projectile/ProjectileComboDebuff.cs deleted file mode 100644 index c8edf60..0000000 --- a/Assets/Scripts/Projectile/ProjectileComboDebuff.cs +++ /dev/null @@ -1,112 +0,0 @@ -// À̵¿ ¼Óµµ¿Í °ø°Ý ¼Óµµ¸¦ µ¿½Ã¿¡ °¨¼Ò½ÃŰ´Â ¹ß»çü (º¹ÇÕ µð¹öÇÁ) -using UnityEngine; - -public class ProjectileComboDebuff : ProjectileBase -{ - [SerializeField] private float effectRadius = 2f; - [SerializeField] private string enemyTag = "Enemy"; - [SerializeField] private float moveSpeed = 5f; - - [Header("À̵¿ ¼Óµµ °¨¼Ò È¿°ú")] - [SerializeField] private float moveSlowAmount = 0.3f; // À̵¿ ¼Óµµ °¨¼Ò ºñÀ² (0.3 = 30% °¨¼Ò) - [SerializeField] private float moveSlowDuration = 4.0f; // À̵¿ ¼Óµµ °¨¼Ò Áö¼Ó ½Ã°£ - - [Header("°ø°Ý ¼Óµµ °¨¼Ò È¿°ú")] - [SerializeField] private float attackSlowAmount = 0.25f; // °ø°Ý ¼Óµµ °¨¼Ò ºñÀ² (0.25 = 25% °¨¼Ò) - [SerializeField] private float attackSlowDuration = 3.0f; // °ø°Ý ¼Óµµ °¨¼Ò Áö¼Ó ½Ã°£ - - [Header("È¿°ú ½Ã°¢È­")] - [SerializeField] private GameObject debuffEffectPrefab; // µð¹öÇÁ È¿°ú ½Ã°¢È­ ÇÁ¸®ÆÕ (¼±ÅÃÀû) - - public override void Process() - { - // Ÿ°ÙÀÌ ¾øÀ¸¸é ó¸®ÇÏÁö ¾ÊÀ½ - if (target == null) return; - - // ¹ß»çü°¡ Ÿ°Ù¿¡ µµ´ÞÇß´ÂÁö È®ÀÎ - float distance = Vector3.Distance(transform.position, target.position); - if (distance < 0.1f) - { - // È¿°ú Àû¿ë - ApplyEffectInArea(target.position); - - // Ÿ°Ý È¿°ú »ý¼º - if (hitEffect != null) - { - Instantiate(hitEffect, transform.position, Quaternion.identity); - } - - // ¹ß»çü ÆÄ±« - Destroy(gameObject); - } - else - { - // Ÿ°ÙÀ» ÇâÇØ À̵¿ - MoveToTarget(); - } - } - - private void ApplyEffectInArea(Vector3 centerPosition) - { - // È¿°ú ¹üÀ§ ³»ÀÇ ¸ðµç ÄݶóÀÌ´õ °¨Áö - Collider2D[] colliders = Physics2D.OverlapCircleAll(centerPosition, effectRadius); - - foreach (Collider2D collider in colliders) - { - if (collider.CompareTag(enemyTag)) - { - GameObject enemy = collider.gameObject; - - // ±âº» µ¥¹ÌÁö Àû¿ë - EnemyHP enemyHP = enemy.GetComponent(); - if (enemyHP != null) - { - enemyHP.TakeDamage(damage); - } - - // À̵¿ ¼Óµµ °¨¼Ò È¿°ú Àû¿ë - Movement2D movement = enemy.GetComponent(); - if (movement != null) - { - movement.ApplySlow(moveSlowAmount, moveSlowDuration); - } - - // °ø°Ý ¼Óµµ °¨¼Ò È¿°ú Àû¿ë - EnemyAttack enemyAttack = enemy.GetComponent(); - if (enemyAttack != null) - { - enemyAttack.ApplyAttackSlow(attackSlowAmount, attackSlowDuration); - } - - // µð¹öÇÁ È¿°ú ½Ã°¢È­ (¼±ÅÃÀû) - if (debuffEffectPrefab != null) - { - GameObject effectObj = Instantiate(debuffEffectPrefab, enemy.transform.position, Quaternion.identity); - effectObj.transform.SetParent(enemy.transform); - Destroy(effectObj, Mathf.Max(moveSlowDuration, attackSlowDuration)); - } - } - } - } - - private void MoveToTarget() - { - // Ÿ°Ù ¹æÇâÀ¸·Î À̵¿ - Vector3 direction = (target.position - transform.position).normalized; - transform.position += direction * moveSpeed * Time.deltaTime; - - // ¹ß»çü ȸÀü (¼±ÅÃÀû) - float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; - transform.rotation = Quaternion.Euler(0, 0, angle); - } - - // ¿¡µðÅÍ¿¡¼­ ¹üÀ§ ½Ã°¢È­ - private void OnDrawGizmosSelected() - { - if (target != null) - { - Gizmos.color = Color.yellow; - Gizmos.DrawWireSphere(target.position, effectRadius); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/TowerWeapon.cs b/Assets/Scripts/TowerWeapon.cs deleted file mode 100644 index 76c78a0..0000000 --- a/Assets/Scripts/TowerWeapon.cs +++ /dev/null @@ -1,381 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public enum WeaponState { SearchTarget = 0, AttackToTarget } //°ø°Ý ´ë»ó Ž»ö ¿©ºÎ - -public class TowerWeapon : MonoBehaviour -{ - [SerializeField] - private GameObject projectilePrefab; // ´ÜÀÏ ¹ß»çü ÇÁ¸®ÆÕ - [SerializeField] - private Transform spawnPoint; - - [Header("Time Settings")] - [SerializeField] private bool attackEnabled = true; // °ø°Ý °¡´É ¿©ºÎ - - private TowerTemplate towerTemplate; - private int level = 0; - private WeaponState weaponState = WeaponState.SearchTarget; - private Transform attackTarget = null; - private SpriteRenderer spriteRenderer; - private PlayerGold playerGold; - private EnemySpawner enemySpawner; - private Tile ownerTile; - private IsometricPositionHandler isometricPosition; - - // Á¿ì¹ÝÀü »óÅ °ü·Ã º¯¼ö - private bool isFlipped = false; - private SpriteRenderer[] childRenderers; - - public Sprite TowerSprite => towerTemplate.weapons[level].sprite; - public float Damage => towerTemplate.weapons[level].damage; - public float Rate => towerTemplate.weapons[level].rate; - public float Range => towerTemplate.weapons[level].range; - public int Level => level + 1; - public int MaxLevel => towerTemplate.weapons.Count; - - // Á¿ì¹ÝÀü »óÅ ÇÁ·ÎÆÛƼ - public bool IsFlipped => isFlipped; - - private void Awake() - { - spriteRenderer = GetComponent(); - childRenderers = GetComponentsInChildren(); - isometricPosition = GetComponent(); - - // IsometricPositionHandler°¡ ¾øÀ¸¸é Ãß°¡ - if (isometricPosition == null) - { - isometricPosition = gameObject.AddComponent(); - } - } - - private void SpawnProjectile() - { - // °ø°ÝÀÌ ºñȰ¼ºÈ­µÇ¾î ÀÖÀ¸¸é ¹ß»çü »ý¼º ºÒ°¡ - if (!attackEnabled) return; - - if (projectilePrefab == null) - { - Debug.LogError("No projectile prefab assigned to tower"); - return; - } - - Debug.Log($"Spawning projectile at {spawnPoint.position}"); - - // ¹ß»ç À§Ä¡ÀÇ z À§Ä¡ Á¶Á¤ (ÀÌ¼Ò¸ÞÆ®¸¯ ºä) - Vector3 spawnPos = spawnPoint.position; - spawnPos.z = spawnPos.y; - - GameObject projectileObj = Instantiate(projectilePrefab, spawnPos, Quaternion.identity); - - // ¹ß»çü¿¡ IsometricPositionHandler Ãß°¡ (¾ø´Â °æ¿ì) - IsometricPositionHandler projectileIsometric = projectileObj.GetComponent(); - if (projectileIsometric == null) - { - projectileIsometric = projectileObj.AddComponent(); - } - - // ProjectileBase ÄÄÆ÷³ÍÆ® °¡Á®¿À±â - ProjectileBase projectileScript = projectileObj.GetComponent(); - - if (projectileScript == null) - { - Debug.LogError($"No ProjectileBase component found on prefab: {projectilePrefab.name}"); - Destroy(projectileObj); - return; - } - - // Á¿ì¹ÝÀü »óÅ Àû¿ë - if (isFlipped) - { - SpriteRenderer projRenderer = projectileObj.GetComponent(); - if (projRenderer != null) - { - projRenderer.flipX = true; - } - else - { - // ½ºÇÁ¶óÀÌÆ® ·»´õ·¯°¡ ¾øÀ¸¸é ½ºÄÉÀÏ·Î ¹ÝÀü - Vector3 scale = projectileObj.transform.localScale; - scale.x = -Mathf.Abs(scale.x); - projectileObj.transform.localScale = scale; - } - - // ¹ß»ç ¹æÇâ ¹ÝÀü (ÇÊ¿ä½Ã) - ProjectileStraight straightProjectile = projectileObj.GetComponent(); - if (straightProjectile != null) - { - // SetFlipDirection ¸Þ¼Òµå°¡ ÀÖ´ÂÁö È®ÀÎÇϰí È£Ãâ - System.Reflection.MethodInfo methodInfo = straightProjectile.GetType().GetMethod("SetFlipDirection"); - if (methodInfo != null) - { - methodInfo.Invoke(straightProjectile, new object[] { true }); - } - } - } - - // ¹ß»çü ¼³Á¤ - projectileScript.Setup(attackTarget, towerTemplate.weapons[level].damage); - } - - public void Setup(TowerTemplate template, EnemySpawner enemySpawner, PlayerGold playerGold, Vector3 worldPosition) - { - towerTemplate = template; - Debug.Log("TowerWeapon Setup called!"); - this.enemySpawner = enemySpawner; - this.playerGold = playerGold; - - // ÀÌ¼Ò¸ÞÆ®¸¯ ºä¿¡ ¸Â°Ô z À§Ä¡ Á¶Á¤ - worldPosition.z = worldPosition.y; - transform.position = worldPosition; - - spriteRenderer.sprite = towerTemplate.weapons[level].sprite; - ChangeState(WeaponState.SearchTarget); - } - - // Á¿ì¹ÝÀü ¼³Á¤ ¸Þ¼Òµå (¿ÜºÎ¿¡¼­ È£Ãâ °¡´É) - public void SetFlipped(bool flipped) - { - isFlipped = flipped; - - // ¸ðµç ½ºÇÁ¶óÀÌÆ® ·»´õ·¯ ¹ÝÀü Àû¿ë - UpdateFlipState(); - } - - // Á¿ì¹ÝÀü »óÅ Åä±Û - public void ToggleFlip() - { - isFlipped = !isFlipped; - UpdateFlipState(); - } - - // Á¿ì¹ÝÀü »óÅ ¾÷µ¥ÀÌÆ® - private void UpdateFlipState() - { - // ±âº» ½ºÇÁ¶óÀÌÆ® ·»´õ·¯°¡ ÀÖÀ¸¸é ¹ÝÀü - if (spriteRenderer != null) - { - spriteRenderer.flipX = isFlipped; - } - - // ¸ðµç ÀÚ½Ä ½ºÇÁ¶óÀÌÆ® ·»´õ·¯µµ ¹ÝÀü - foreach (SpriteRenderer renderer in childRenderers) - { - if (renderer != null && renderer != spriteRenderer) // Áߺ¹ ¹æÁö - { - renderer.flipX = isFlipped; - } - } - - // ½ºÇÁ¶óÀÌÆ® ·»´õ·¯°¡ ¾ø°Å³ª Ãß°¡ ¹ÝÀüÀÌ ÇÊ¿äÇÑ °æ¿ì ½ºÄÉÀϵµ Á¶Á¤ - if (spriteRenderer == null || !spriteRenderer.flipX) - { - Vector3 scale = transform.localScale; - scale.x = isFlipped ? -Mathf.Abs(scale.x) : Mathf.Abs(scale.x); - transform.localScale = scale; - } - - // ½ºÆù Æ÷ÀÎÆ® À§Ä¡ Á¶Á¤ (ÇÊ¿ä½Ã) - if (spawnPoint != null) - { - // ½ºÆù Æ÷ÀÎÆ®°¡ ·ÎÄà À§Ä¡¿¡ ÀÖ´Â °æ¿ì, x ¹ÝÀüÀÌ ÇÊ¿äÇÒ ¼ö ÀÖÀ½ - // »óȲ¿¡ µû¶ó ´ÙÀ½ ÄÚµå Ȱ¼ºÈ­ - /* - Vector3 localPos = spawnPoint.localPosition; - localPos.x = isFlipped ? -Mathf.Abs(localPos.x) : Mathf.Abs(localPos.x); - spawnPoint.localPosition = localPos; - */ - } - } - - public void ChangeState(WeaponState newstate) - { - Debug.Log($"Changing state to {newstate}"); - StopCoroutine(weaponState.ToString()); - weaponState = newstate; - StartCoroutine(weaponState.ToString()); - } - - // Update is called once per frame - private void Update() - { - if (attackTarget != null) - { - // RotateToTarget(); // ±âÁ¸ ÄÚµå - FlipToTarget(); // »õ ÄÚµå - ȸÀü ´ë½Å Á¿ì¹ÝÀü - } - - // ÀÌ¼Ò¸ÞÆ®¸¯ ºä¿¡ ¸Â°Ô z À§Ä¡ Á¶Á¤ (¸Å ÇÁ·¹ÀÓ) - Vector3 position = transform.position; - position.z = position.y; - transform.position = position; - } - - // ±âÁ¸ RotateToTarget ¸Þ¼­µå¸¦ FlipToTargetÀ¸·Î ´ëü - private void FlipToTarget() - { - if (attackTarget == null) return; - - // ÀûÀÇ À§Ä¡¿Í Ÿ¿öÀÇ À§Ä¡¸¦ ºñ±³ÇÏ¿© ¹æÇâ °áÁ¤ - float dx = attackTarget.position.x - transform.position.x; - - // dx°¡ À½¼ö¸é ÀûÀÌ ¿ÞÂÊ¿¡ ÀÖ°í, ¾ç¼ö¸é ¿À¸¥ÂÊ¿¡ ÀÖÀ½ - bool shouldFaceLeft = dx < 0; - - // ÇöÀç Ÿ¿ö°¡ ¿ÞÂÊÀ» º¸°í ÀÖ´ÂÁö È®ÀÎ (flipX°¡ true¸é ¿ÞÂÊ) - bool isCurrentlyFacingLeft = false; - - // ½ºÇÁ¶óÀÌÆ® ·»´õ·¯·Î È®ÀÎ - if (spriteRenderer != null) - { - isCurrentlyFacingLeft = spriteRenderer.flipX; - } - else - { - // ½ºÇÁ¶óÀÌÆ® ·»´õ·¯°¡ ¾øÀ» °æ¿ì localScale.x·Î È®ÀÎ - isCurrentlyFacingLeft = transform.localScale.x < 0; - } - - // ¹æÇâÀÌ ´Ù¸£¸é ¹ÝÀü - if (shouldFaceLeft != isCurrentlyFacingLeft) - { - // Á¿ì¹ÝÀü Àû¿ë - if (spriteRenderer != null) - { - spriteRenderer.flipX = shouldFaceLeft; - } - else - { - // ½ºÇÁ¶óÀÌÆ® ·»´õ·¯°¡ ¾ø´Â °æ¿ì ½ºÄÉÀÏ »ç¿ë - Vector3 scale = transform.localScale; - scale.x = shouldFaceLeft ? -Mathf.Abs(scale.x) : Mathf.Abs(scale.x); - transform.localScale = scale; - } - - // ÀÚ½Ä ½ºÇÁ¶óÀÌÆ® ·»´õ·¯µµ ¹ÝÀü - foreach (SpriteRenderer renderer in childRenderers) - { - if (renderer != null && renderer != spriteRenderer) - { - renderer.flipX = shouldFaceLeft; - } - } - - // isFlipped º¯¼ö ¾÷µ¥ÀÌÆ® - isFlipped = shouldFaceLeft; - } - - // ȸÀüÀº ¼öÇàÇÏÁö ¾ÊÀ½ - ±âÁ¸ ÄÚµå Á¦°Å - // transform.rotation = Quaternion.Euler(0, 0, degree); - } - - private IEnumerator SearchTarget() - { - while (true) - { - // °ø°ÝÀÌ ºñȰ¼ºÈ­ µÇ¾î ÀÖÀ¸¸é Ž»ö¸¸ ÇÏ°í °ø°ÝÇÏÁö ¾ÊÀ½ - if (!attackEnabled) - { - yield return new WaitForSeconds(0.5f); - continue; - } - - float closetDistSqr = Mathf.Infinity; - for (int i = 0; i < enemySpawner.EnemyList.Count; i++) //¸ðµç Àû °Ë»ç - { - float distance = Vector3.Distance(enemySpawner.EnemyList[i].transform.position, transform.position); - if (distance <= towerTemplate.weapons[level].range && distance <= closetDistSqr) - { - closetDistSqr = distance; - attackTarget = enemySpawner.EnemyList[i].transform; - } - } - if (attackTarget != null && attackEnabled) - { - Debug.Log($"Target found: {attackTarget.name}"); - ChangeState(WeaponState.AttackToTarget); // ÇØ´ç Ÿ°Ù °ø°Ý - } - - yield return null; - } - } - - private IEnumerator AttackToTarget() - { - while (true) - { - // °ø°ÝÀÌ ºñȰ¼ºÈ­µÇ¾î ÀÖÀ¸¸é Ž»ö »óÅ·Πµ¹¾Æ°¨ - if (!attackEnabled) - { - ChangeState(WeaponState.SearchTarget); - break; - } - - if (attackTarget == null) // target ÀÖ´ÂÁö È®ÀÎ - { - ChangeState(WeaponState.SearchTarget); - break; - } - - float distance = Vector3.Distance(attackTarget.position, transform.position); - if (distance > towerTemplate.weapons[level].range) //targetÀÌ °ø°Ý ¹üÀ§º¸´Ù ¸Ö °æ¿ì »õ·Î¿î Àû Ž»ö - { - attackTarget = null; - ChangeState(WeaponState.SearchTarget); - break; - } - - yield return new WaitForSeconds(towerTemplate.weapons[level].rate); - - SpawnProjectile(); // ¹ß»çü »ý¼º - } - } - - public bool Upgrade() - { - if (level + 1 >= towerTemplate.weapons.Count || playerGold.CurrentGold < towerTemplate.weapons[level + 1].cost) - { - return false; - } - level++; - spriteRenderer.sprite = towerTemplate.weapons[level].sprite; - playerGold.CurrentGold -= towerTemplate.weapons[level].cost; - - // ¾÷±×·¹À̵å ÈÄ Á¿ì¹ÝÀü »óÅ À¯Áö - if (isFlipped) - { - UpdateFlipState(); - } - - return true; - } - - public void Sell() - { - playerGold.CurrentGold += towerTemplate.weapons[level].sell; - - Vector3Int cellposition = FindObjectOfType().WorldToCell(transform.position); - FindObjectOfType().RemoveTower(cellposition); - - Destroy(gameObject); - } - - // °ø°Ý Ȱ¼ºÈ­/ºñȰ¼ºÈ­ ¸Þ¼Òµå - public void SetAttackEnabled(bool enabled) - { - attackEnabled = enabled; - - if (enabled) - { - // °ø°Ý Ȱ¼ºÈ­½Ã Ÿ°Ù Ž»ö ½ÃÀÛ - ChangeState(WeaponState.SearchTarget); - } - else - { - // °ø°Ý ºñȰ¼ºÈ­½Ã ¸ðµç ÄÚ·çÆ¾ ÁßÁö - StopAllCoroutines(); - } - } -} \ No newline at end of file diff --git a/Assets/Scripts/WaveSystem.cs b/Assets/Scripts/WaveSystem.cs deleted file mode 100644 index db9f4cd..0000000 --- a/Assets/Scripts/WaveSystem.cs +++ /dev/null @@ -1,524 +0,0 @@ -using UnityEngine; -using System.Collections; -using System.Collections.Generic; - -[System.Serializable] -public struct EnemyGroup -{ - [Header("±âº» ¼³Á¤")] - [Tooltip("»ý¼ºÇÒ Àû ÇÁ¸®ÆÕ")] - public GameObject enemyPrefab; // Àû ÇÁ¸®ÆÕ - [Tooltip("»ý¼ºÇÒ ÀûÀÇ ¼ö")] - public int count; // »ý¼ºÇÒ ÀûÀÇ ¼ö - [Tooltip("Àû »ý¼º °£°Ý (ÃÊ)")] - public float spawnTime; // Àû »ý¼º °£°Ý - - [Header("À§Ä¡ ¼³Á¤")] - [Tooltip("ƯÁ¤ ½ºÆù À§Ä¡ (¾øÀ¸¸é ±âº» ½ºÆ÷³Ê À§Ä¡ »ç¿ë)")] - public Transform spawnPoint; // ½ºÆù À§Ä¡ (nullÀÌ¸é ±âº» À§Ä¡) -} - -[System.Serializable] -public struct Wave -{ - public string waveName; // ¿þÀ̺ê À̸§ - public EnemyGroup[] enemyGroups; // Àû ±×·ì ¹è¿­ - public float delayBeforeNextWave; // ´ÙÀ½ ¿þÀÌºê ½ÃÀÛ Àü µô·¹ÀÌ - public float baseDuration; // ¿þÀÌºê ±âº» Áö¼Ó ½Ã°£ (ÃÊ) -} - -public class WaveSystem : MonoBehaviour -{ - [SerializeField] - private Wave[] waves; // ¿þÀÌºê ¹è¿­ - - [SerializeField] - private EnemySpawner enemySpawner; // Àû ½ºÆ÷³Ê ÂüÁ¶ - - [SerializeField] - private PlayerGold playerGold; // Ç÷¹ÀÌ¾î °ñµå/ÇǷεµ ÂüÁ¶ - - [SerializeField] - private PlayerExperience playerExperience; // Ç÷¹ÀÌ¾î °æÇèÄ¡ ÂüÁ¶ - - [SerializeField] - private float defaultWaveDuration = 30f; // ±âº» ¿þÀ̺ê Áö¼Ó ½Ã°£ (ÃÊ) - - [SerializeField] - private bool cleanupEnemiesAfterAllWaves = true; // ¸ðµç ¿þÀÌºê ¿Ï·á ÈÄ Àû Á¦°Å ¿©ºÎ - - [SerializeField] - private float finalCleanupDelay = 3f; // ¸ðµç ¿þÀÌºê ¿Ï·á ÈÄ Àû Á¦°Å±îÁö ´ë±â ½Ã°£ (ÃÊ) - - [SerializeField] - private bool showDebugMessages = true; // µð¹ö±× ¸Þ½ÃÁö Ç¥½Ã ¿©ºÎ - - private int currentWaveIndex = -1; // ÇöÀç ¿þÀ̺ê À妽º - private bool isWaveActive = false; // ¿þÀ̺ê Ȱ¼ºÈ­ »óÅ - private float waveTimer = 0f; // ¿þÀ̺ê ŸÀÌ¸Ó - private int enemiesKilledInWave = 0; // ¿þÀ̺ê Áß Ã³Ä¡ÇÑ Àû ¼ö - private bool allWavesCompleted = false; // ¸ðµç ¿þÀÌºê ¿Ï·á ¿©ºÎ - - // ¿þÀ̺ê À̺¥Æ® µ¨¸®°ÔÀÌÆ® - public delegate void WaveEventHandler(int waveNumber, string waveName); - public event WaveEventHandler OnWaveStart; // ¿þÀÌºê ½ÃÀÛ À̺¥Æ® - public event WaveEventHandler OnWaveEnd; // ¿þÀ̺ê Á¾·á À̺¥Æ® - - // ¸ðµç ¿þÀÌºê ¿Ï·á À̺¥Æ® µ¨¸®°ÔÀÌÆ® - public delegate void AllWavesCompletedHandler(); - public event AllWavesCompletedHandler OnAllWavesCompleted; // ¸ðµç ¿þÀÌºê ¿Ï·á À̺¥Æ® - - // ÇöÀç ¿þÀÌºê ¹øÈ£ ÇÁ·ÎÆÛƼ (1ºÎÅÍ ½ÃÀÛ) - public int CurrentWave => currentWaveIndex + 1; - - // ÃÖ´ë ¿þÀÌºê ¼ö ÇÁ·ÎÆÛƼ - public int MaxWave => waves.Length; - - // ÇöÀç ¿þÀ̺ê À̸§ ÇÁ·ÎÆÛƼ - public string CurrentWaveName => currentWaveIndex >= 0 && currentWaveIndex < waves.Length ? - waves[currentWaveIndex].waveName : "None"; - - // ¸ðµç ¿þÀÌºê ¿Ï·á ¿©ºÎ ÇÁ·ÎÆÛƼ - public bool AllWavesCompleted => allWavesCompleted; - - // ÇöÀç ¿þÀ̺ê Áö¼Ó ½Ã°£ ÇÁ·ÎÆÛƼ - public float CurrentWaveDuration - { - get - { - if (currentWaveIndex < 0 || currentWaveIndex >= waves.Length) - return defaultWaveDuration; - - // ¿þÀ̺꿡 ÁöÁ¤µÈ Áö¼Ó ½Ã°£ÀÌ ÀÖÀ¸¸é »ç¿ë, ¾øÀ¸¸é ±âº»°ª »ç¿ë - float baseDuration = waves[currentWaveIndex].baseDuration > 0 ? - waves[currentWaveIndex].baseDuration : defaultWaveDuration; - - // Ç÷¹À̾îÀÇ ÇǷεµ¿¡ µû¸¥ ¿þÀ̺ê Áö¼Ó½Ã°£ °è»ê - if (playerGold != null) - { - return playerGold.GetWaveDuration(baseDuration); - } - - return baseDuration; - } - } - - // ³²Àº ¿þÀÌºê ½Ã°£ ÇÁ·ÎÆÛƼ - public float RemainingWaveTime => Mathf.Max(0, CurrentWaveDuration - waveTimer); - - // ¿þÀ̺ê ÁøÇà·ü ÇÁ·ÎÆÛƼ (0~1) - public float WaveProgress => Mathf.Clamp01(waveTimer / CurrentWaveDuration); - - private void Start() - { - // ÃʱâÈ­ - InitializeReferences(); - - // ÀÚµ¿À¸·Î ù ¿þÀÌºê ½ÃÀÛ (ÇÊ¿ä½Ã ÁÖ¼® ÇØÁ¦) - // StartWave(); - } - - private void InitializeReferences() - { - if (playerGold == null) - { - playerGold = FindObjectOfType(); - if (playerGold == null) - { - Debug.LogWarning("PlayerGold ÂüÁ¶¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù!"); - } - } - - if (playerExperience == null) - { - playerExperience = FindObjectOfType(); - } - - if (enemySpawner == null) - { - enemySpawner = FindObjectOfType(); - if (enemySpawner == null) - { - Debug.LogError("EnemySpawner¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù!"); - } - } - } - - private void Update() - { - if (isWaveActive) - { - // ¿þÀ̺ê ŸÀÌ¸Ó ¾÷µ¥ÀÌÆ® - waveTimer += Time.deltaTime; - - // ¿þÀÌºê ½Ã°£ÀÌ ´Ù µÇ¾ú°Å³ª ÀûÀÌ ¸ðµÎ ó¸®µÈ °æ¿ì - if (waveTimer >= CurrentWaveDuration || - (enemySpawner.EnemyList.Count == 0 && enemySpawner.CurrentEnemyCount <= 0)) - { - EndCurrentWave(); - } - } - } - - // ÇöÀç ¿þÀ̺ê Á¾·á ¸Þ¼Òµå - private void EndCurrentWave() - { - if (!isWaveActive) return; - - isWaveActive = false; - - // ¿þÀ̺ê Á¾·á À̺¥Æ® ¹ß»ý - OnWaveEnd?.Invoke(CurrentWave, CurrentWaveName); - - LogDebug($"¿þÀ̺ê {CurrentWave} Á¾·á! óġÇÑ Àû: {enemiesKilledInWave}¸¶¸®"); - - // °æÇèÄ¡ Á¤»ê - if (playerExperience != null) - { - playerExperience.AddExperienceForWaveCompletion(enemiesKilledInWave); - } - - // ÇǷεµ ¸®¼Â (Ãß°¡µÈ ºÎºÐ) - if (playerGold != null) - { - playerGold.ResetFatigue(); - LogDebug("¿þÀ̺ê Á¾·á ½Ã ÇǷεµ ¸®¼ÂµÊ"); - } - - // Àû óġ ¼ö ÃʱâÈ­ - enemiesKilledInWave = 0; - - // ´ÙÀ½ ¿þÀ̺갡 ÀÖ´ÂÁö È®ÀÎ - if (currentWaveIndex < waves.Length - 1) - { - // ´ÙÀ½ ¿þÀ̺ê Áغñ - float delay = waves[currentWaveIndex].delayBeforeNextWave; - StartCoroutine(StartNextWaveAfterDelay(delay)); - } - else - { - // ¸ðµç ¿þÀÌºê ¿Ï·á - HandleAllWavesCompleted(); - } - } - - // ¸ðµç ¿þÀÌºê ¿Ï·á ó¸® - private void HandleAllWavesCompleted() - { - allWavesCompleted = true; - LogDebug("¸ðµç ¿þÀ̺갡 ¿Ï·áµÇ¾ú½À´Ï´Ù!"); - - // ¸ðµç ¿þÀÌºê ¿Ï·á À̺¥Æ® ¹ß»ý - OnAllWavesCompleted?.Invoke(); - - // ¸ðµç ¿þÀÌºê ¿Ï·á ÈÄ Àû Á¦°Å - if (cleanupEnemiesAfterAllWaves) - { - StartCoroutine(CleanupAllEnemiesAfterDelay()); - } - - // °ÔÀÓ Å¬¸®¾î ó¸® (ÇÊ¿ä½Ã Ãß°¡) - // GameManager.Instance.HandleGameWin(); - } - - // ¸ðµç ¿þÀÌºê ¿Ï·á ÈÄ Àû Á¦°Å ÄÚ·çÆ¾ - private IEnumerator CleanupAllEnemiesAfterDelay() - { - // ÁöÁ¤µÈ Áö¿¬ ½Ã°£ ÈÄ ½ÇÇà - yield return new WaitForSeconds(finalCleanupDelay); - - int enemyCount = enemySpawner.EnemyList.Count; - if (enemyCount > 0) - { - LogDebug($"¸ðµç ¿þÀÌºê ¿Ï·á ÈÄ ³²Àº {enemyCount}¸¶¸®ÀÇ Àû Á¦°Å Áß..."); - - // ¸®½ºÆ®¸¦ º¹»çÇÏ¿© ¼øÈ¸ Áß º¯°æ ¹®Á¦ ¹æÁö - List enemiesToDestroy = new List(enemySpawner.EnemyList); - - foreach (Enemy enemy in enemiesToDestroy) - { - if (enemy != null) - { - // Àû Á¦°Å (Kill ŸÀÔÀ¸·Î - °ñµå/°æÇèÄ¡ ¾øÀ½) - enemy.gold = 0; // °ñµå º¸»ó ¾øÀ½ - enemy.OnDie(EnemyDestroyType.Kill); - - // ¾à°£ÀÇ ½Ã°£Â÷¸¦ µÎ°í Á¦°ÅÇÏ¿© ½Ã°¢Àû È¿°ú °³¼± (¼±ÅÃÀû) - yield return new WaitForSeconds(0.05f); - } - } - - LogDebug($"¸ðµç ¿þÀÌºê ¿Ï·á ÈÄ Àû Á¦°Å ¿Ï·á"); - } - } - - // ¿þÀ̺ê Áß Àû óġ ÃßÀû ¸Þ¼Òµå - public void OnEnemyKilled() - { - enemiesKilledInWave++; - } - - // ´ÙÀ½ ¿þÀÌºê ½ÃÀÛ µô·¹ÀÌ ÄÚ·çÆ¾ - private IEnumerator StartNextWaveAfterDelay(float delay) - { - yield return new WaitForSeconds(delay); - StartWave(); - } - - // ¿þÀÌºê ½ÃÀÛ ¸Þ¼Òµå - public void StartWave() - { - if (!isWaveActive && currentWaveIndex < waves.Length - 1) - { - currentWaveIndex++; - - float waveDuration = CurrentWaveDuration; - LogDebug($"¿þÀ̺ê {CurrentWave} ½ÃÀÛ: {CurrentWaveName}, Áö¼Ó ½Ã°£: {waveDuration}ÃÊ (ÇǷεµ: {playerGold?.FatigueRatio:P0})"); - - // ¿þÀÌºê ½ÃÀÛ À̺¥Æ® ¹ß»ý - OnWaveStart?.Invoke(CurrentWave, CurrentWaveName); - - // Àû ½ºÆù ½ÃÀÛ - enemySpawner.StartWave(waves[currentWaveIndex]); - - // Àû óġ À̺¥Æ® ±¸µ¶ - enemySpawner.OnEnemyDestroyed += OnEnemyDestroyed; - - isWaveActive = true; - waveTimer = 0f; // ŸÀÌ¸Ó ÃʱâÈ­ - } - else if (currentWaveIndex >= waves.Length - 1) - { - LogDebug("´õ ÀÌ»ó ½ÃÀÛÇÒ ¿þÀ̺갡 ¾ø½À´Ï´Ù!"); - } - } - - // Àû óġ À̺¥Æ® Çڵ鷯 - private void OnEnemyDestroyed(Transform enemy) - { - // Àû óġ ½Ã È£Ãâ - if (isWaveActive) - { - OnEnemyKilled(); - } - } - - // °ÔÀÓ Àç½ÃÀÛ ¶Ç´Â ¸®¼Â ½Ã È£Ãâ - public void ResetWaveSystem() - { - StopAllCoroutines(); - currentWaveIndex = -1; - isWaveActive = false; - waveTimer = 0f; - enemiesKilledInWave = 0; - allWavesCompleted = false; - - // ÇǷεµµµ ÃʱâÈ­ - if (playerGold != null) - { - playerGold.ResetFatigue(); - } - - LogDebug("¿þÀÌºê ½Ã½ºÅÛ ¸®¼Â"); - } - - // µð¹ö±× ·Î±× Ãâ·Â ÇïÆÛ ¸Þ¼Òµå - private void LogDebug(string message) - { - if (showDebugMessages) - { - Debug.Log($"[WaveSystem] {message}"); - } - } - - // OnDestroy: À̺¥Æ® ±¸µ¶ ÇØÁ¦ - private void OnDestroy() - { - if (enemySpawner != null) - { - enemySpawner.OnEnemyDestroyed -= OnEnemyDestroyed; - } - } - - // µ¿ÀûÀ¸·Î ¿þÀ̺긦 ¼³Á¤ÇÏ´Â ¸Þ¼Òµå - public void SetWaves(Wave[] newWaves) - { - if (newWaves == null || newWaves.Length == 0) - { - Debug.LogWarning("¼³Á¤ÇÏ·Á´Â ¿þÀ̺갡 ºñ¾îÀÖ½À´Ï´Ù."); - return; - } - - // ÇöÀç ÁøÇà ÁßÀÎ ¿þÀ̺갡 ÀÖ´ÂÁö È®ÀÎ - if (isWaveActive) - { - Debug.LogWarning("¿þÀ̺갡 ÁøÇà ÁßÀÏ ¶§´Â »õ ¿þÀ̺긦 ¼³Á¤ÇÒ ¼ö ¾ø½À´Ï´Ù."); - return; - } - - // ±âÁ¸ ¿þÀ̺ê ÀúÀå - Wave[] oldWaves = waves; - - // »õ ¿þÀÌºê ¼³Á¤ - waves = newWaves; - - // ¿þÀÌºê °ü·Ã »óÅ ÃʱâÈ­ - ResetWaveSystem(); - - Debug.Log($"¿þÀÌºê ¼³Á¤ÀÌ º¯°æµÇ¾ú½À´Ï´Ù. ¿þÀÌºê ¼ö: {waves.Length}°³"); - - // ¿þÀ̺ê Á¤º¸ Ãâ·Â (µð¹ö±×¿ë) - for (int i = 0; i < waves.Length; i++) - { - Debug.Log($"¿þÀ̺ê {i + 1}: {waves[i].waveName}, Àû ±×·ì ¼ö: {waves[i].enemyGroups.Length}°³"); - } - } - - // ¿þÀ̺ê Ãß°¡ ¸Þ¼Òµå - public void AddWaves(Wave[] additionalWaves) - { - if (additionalWaves == null || additionalWaves.Length == 0) - { - Debug.LogWarning("Ãß°¡ÇÏ·Á´Â ¿þÀ̺갡 ºñ¾îÀÖ½À´Ï´Ù."); - return; - } - - // ±âÁ¸ ¿þÀ̺ê¿Í »õ ¿þÀÌºê º´ÇÕ - Wave[] combinedWaves = new Wave[waves.Length + additionalWaves.Length]; - - // ±âÁ¸ ¿þÀÌºê º¹»ç - for (int i = 0; i < waves.Length; i++) - { - combinedWaves[i] = waves[i]; - } - - // »õ ¿þÀ̺ê Ãß°¡ - for (int i = 0; i < additionalWaves.Length; i++) - { - combinedWaves[waves.Length + i] = additionalWaves[i]; - } - - // º´ÇÕµÈ ¿þÀÌºê ¼³Á¤ - waves = combinedWaves; - - Debug.Log($"¿þÀ̺갡 Ãß°¡µÇ¾ú½À´Ï´Ù. ÃÑ ¿þÀÌºê ¼ö: {waves.Length}°³"); - } - - // ƯÁ¤ À妽ºÀÇ ¿þÀÌºê °¡Á®¿À±â - public Wave GetWave(int index) - { - if (index < 0 || index >= waves.Length) - { - Debug.LogWarning($"À¯È¿ÇÏÁö ¾ÊÀº ¿þÀ̺ê À妽º: {index}, ¿þÀÌºê ¼ö: {waves.Length}"); - return default(Wave); - } - - return waves[index]; - } - - // ÇöÀç ¿þÀ̺ê Á¤º¸ º¹Á¦ÇÏ¿© °¡Á®¿À±â - public Wave GetCurrentWaveInfo() - { - if (currentWaveIndex < 0 || currentWaveIndex >= waves.Length) - { - Debug.LogWarning("ÇöÀç Ȱ¼ºÈ­µÈ ¿þÀ̺갡 ¾ø½À´Ï´Ù."); - return default(Wave); - } - - return waves[currentWaveIndex]; - } - - // ·£´ý ¿þÀÌºê »ý¼º (¼±ÅÃÀû) - public Wave GenerateRandomWave(int difficulty = 1) - { - // ºó ¿þÀÌºê »ý¼º - Wave randomWave = new Wave(); - - // ¿þÀ̺ê À̸§ ¼³Á¤ - randomWave.waveName = $"Random Wave (Difficulty {difficulty})"; - - // ±âº» Áö¼Ó ½Ã°£ ¼³Á¤ - randomWave.baseDuration = 60f + (difficulty * 10f); - - // Àû ±×·ì »ý¼º - int groupCount = Mathf.Max(1, Random.Range(1, 3 + difficulty / 2)); - randomWave.enemyGroups = new EnemyGroup[groupCount]; - - // ·£´ý Àû ÇÁ¸®ÆÕ °¡Á®¿À±â (Resources Æú´õ¿¡¼­) - GameObject[] enemyPrefabs = Resources.LoadAll("Prefabs/Enemies"); - - // Àû ÇÁ¸®ÆÕÀÌ ¾øÀ¸¸é ºó ¿þÀÌºê ¹Ýȯ - if (enemyPrefabs == null || enemyPrefabs.Length == 0) - { - Debug.LogWarning("·£´ý ¿þÀÌºê »ý¼ºÀ» À§ÇÑ Àû ÇÁ¸®ÆÕÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù."); - return randomWave; - } - - // °¢ ±×·ì ¼³Á¤ - for (int i = 0; i < groupCount; i++) - { - EnemyGroup group = new EnemyGroup(); - - // ·£´ý Àû ÇÁ¸®ÆÕ ¼±Åà - group.enemyPrefab = enemyPrefabs[Random.Range(0, enemyPrefabs.Length)]; - - // Àû ¼ö·® ¼³Á¤ (³­À̵µ¿¡ µû¶ó) - group.count = Mathf.Max(3, 5 + difficulty * 2 + Random.Range(-2, 3)); - - // ½ºÆù °£°Ý ¼³Á¤ - group.spawnTime = Mathf.Max(0.5f, 2f - (difficulty * 0.1f) + Random.Range(-0.2f, 0.2f)); - - // ±×·ì Ãß°¡ - randomWave.enemyGroups[i] = group; - } - - // ´ÙÀ½ ¿þÀÌºê µô·¹ÀÌ ¼³Á¤ - randomWave.delayBeforeNextWave = 5f + Random.Range(0f, 5f); - - return randomWave; - } - - // ¿þÀ̺êÀÇ Æ¯Á¤ ¼Ó¼º Á¶Á¤ - public void AdjustWaveDifficulty(float difficultyMultiplier) - { - // ¿þÀÌºê ¹è¿­ÀÇ »õ ¹öÀü »ý¼º (¿øº» ¼öÁ¤ ¹æÁö) - Wave[] adjustedWaves = new Wave[waves.Length]; - - for (int i = 0; i < waves.Length; i++) - { - // ¿þÀÌºê º¹»ç - adjustedWaves[i] = waves[i]; - - // ¿þÀ̺ê Áö¼Ó ½Ã°£ Á¶Á¤ - if (adjustedWaves[i].baseDuration > 0) - { - adjustedWaves[i].baseDuration *= Mathf.Max(0.5f, difficultyMultiplier); - } - - // Àû ±×·ì º¹»ç ¹× Á¶Á¤ - EnemyGroup[] adjustedGroups = new EnemyGroup[adjustedWaves[i].enemyGroups.Length]; - - for (int j = 0; j < adjustedWaves[i].enemyGroups.Length; j++) - { - // ±×·ì º¹»ç - adjustedGroups[j] = adjustedWaves[i].enemyGroups[j]; - - // Àû ¼ö·® Á¶Á¤ (±¸Á¶Ã¼´Â Á÷Á¢ ¼öÁ¤ ºÒ°¡ÇϹǷΠ»õ·Î¿î ÀνºÅϽº »ý¼º) - int newCount = Mathf.Max(1, Mathf.RoundToInt(adjustedGroups[j].count * difficultyMultiplier)); - adjustedGroups[j].count = newCount; - - // ½ºÆù ½Ã°£ Á¶Á¤ (¹Ýºñ·Ê) - float newSpawnTime = Mathf.Max(0.2f, adjustedGroups[j].spawnTime / Mathf.Max(0.5f, difficultyMultiplier)); - adjustedGroups[j].spawnTime = newSpawnTime; - } - - // Á¶Á¤µÈ ±×·ì ¼³Á¤ - adjustedWaves[i].enemyGroups = adjustedGroups; - } - - // Á¶Á¤µÈ ¿þÀ̺ê·Î ¾÷µ¥ÀÌÆ® - waves = adjustedWaves; - - Debug.Log($"¿þÀÌºê ³­À̵µ°¡ Á¶Á¤µÇ¾ú½À´Ï´Ù. ¹èÀ²: {difficultyMultiplier}"); - } -} \ No newline at end of file diff --git a/Assets/_Project.meta b/Assets/_Project.meta new file mode 100644 index 0000000..420a39e --- /dev/null +++ b/Assets/_Project.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bf03936f18bd26a429aa8c37578cd53c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/AGENTS.md b/Assets/_Project/AGENTS.md new file mode 100644 index 0000000..ec8abfc --- /dev/null +++ b/Assets/_Project/AGENTS.md @@ -0,0 +1,31 @@ +# Maintained Unity workspace + +`Assets/_Project` is the maintained layer. `Scripts/Legacy` remains compatible with the existing game scene while new core contracts live in `Scripts/Runtime`. + +## Runtime design + +- Put engine-independent phase and content contracts in the `HomeProtector.Core` assembly. +- Put adapters that reference legacy global-namespace components under `Scripts/Legacy/RuntimeIntegration` until legacy dependencies are migrated. +- `GameFlowBridge` is the only component allowed to coordinate `GameSession`, `TimeSystem`, `WaveSystem`, and `WaveResultSystem`. +- Result publication is idempotent per combat. Defeat aborts spawners, timers, delayed waves, and live enemies. +- Preparation restores configured resources. Victory advances the day; defeat retries the same day; final victory exposes completion. + +## Content design + +- `ContentCatalog` is the runtime inventory for all enemies, towers, valuables, VFX, player animation sets, and environment themes. +- `PlaceableResourceDefinition` separates placement from targeting, health totals, instant-defeat behavior, and preparation restoration. +- Decorative placeables remain draggable but are excluded from enemy targeting and total health. +- Prefer prefab variants and data definitions over duplicate scene-only configuration. + +## Tests and Editor tooling + +- Write EditMode tests first for pure state and catalog contracts; write PlayMode tests only for Unity lifecycle/scene behavior. +- Editor tooling owns texture importer settings, slicing, clips, controllers, prefab generation, catalog updates, scene migration, and builds. +- Do not assert Unity serialization by parsing YAML in runtime tests. +- Do not expand successful test logs. Record one-line totals and the result artifact path. + +## Naming and compatibility + +- Use English identifiers and UTF-8 files. Existing Korean inspector labels/comments may remain. +- Retain `DraggableResource` during migration and let it reference the new definition. +- Retain `MicrophoneSystem` only as a temporary facade; all new references target the separated voice components. diff --git a/Assets/_Project/AGENTS.md.meta b/Assets/_Project/AGENTS.md.meta new file mode 100644 index 0000000..250e84c --- /dev/null +++ b/Assets/_Project/AGENTS.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8f2c4a3be4924e239da7f67a1c71a302 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data.meta b/Assets/_Project/Data.meta new file mode 100644 index 0000000..c88564d --- /dev/null +++ b/Assets/_Project/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad79175abe2f7cb44b25b29e8a9593f4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/DayWaveTable.asset b/Assets/_Project/Data/DayWaveTable.asset new file mode 100644 index 0000000..994c5d6 --- /dev/null +++ b/Assets/_Project/Data/DayWaveTable.asset @@ -0,0 +1,50 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 12cd5e587efc45c47875adee9fb020c8, type: 3} + m_Name: DayWaveTable + m_EditorClassIdentifier: + entries: + - label: Day 1 + day: 1 + dayRangeStart: 0 + dayRangeEnd: 0 + waves: + - {fileID: 11400000, guid: f7db1d2a6b054bf4581e99ab56fc42c4, type: 2} + - {fileID: 11400000, guid: 0940134452c71594985b8929357685bb, type: 2} + - label: Day 2 + day: 2 + dayRangeStart: 0 + dayRangeEnd: 0 + waves: + - {fileID: 11400000, guid: 4877d962545b1b34ea02afc4d79eee12, type: 2} + - {fileID: 11400000, guid: 3431dc52baa5b844fa14bf86c7913c78, type: 2} + - label: Day 3 + day: 3 + dayRangeStart: 0 + dayRangeEnd: 0 + waves: + - {fileID: 11400000, guid: 6cc5727a0c4e9584e9ba3dbcc6bccd22, type: 2} + - {fileID: 11400000, guid: 9a34c2fa28ba69c4bbdc771c6c34be61, type: 2} + - label: Day 4 + day: 4 + dayRangeStart: 0 + dayRangeEnd: 0 + waves: + - {fileID: 11400000, guid: 700707d0dcbc41a4dbb0204bc377087f, type: 2} + - {fileID: 11400000, guid: 4892f1dce32fbb0408df3fad2d0ae6c0, type: 2} + - label: Day 5 + day: 5 + dayRangeStart: 0 + dayRangeEnd: 0 + waves: + - {fileID: 11400000, guid: 3e0f22eedb1f774449b48e44e07e0c2a, type: 2} + - {fileID: 11400000, guid: 9d6d1bc65f515004f93960e5d261fcb1, type: 2} diff --git a/Assets/_Project/Data/DayWaveTable.asset.meta b/Assets/_Project/Data/DayWaveTable.asset.meta new file mode 100644 index 0000000..dc0d108 --- /dev/null +++ b/Assets/_Project/Data/DayWaveTable.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d12050ad74539dc489939a82e652bd4a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Enemies.meta b/Assets/_Project/Data/Enemies.meta new file mode 100644 index 0000000..c678bb6 --- /dev/null +++ b/Assets/_Project/Data/Enemies.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 73876adc7a5a34848ab8e5d68bc5ae44 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Enemies/EnemyBearDefinition.asset b/Assets/_Project/Data/Enemies/EnemyBearDefinition.asset new file mode 100644 index 0000000..d427307 --- /dev/null +++ b/Assets/_Project/Data/Enemies/EnemyBearDefinition.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31479fc32602c544f91e0663c653a597, type: 3} + m_Name: EnemyBearDefinition + m_EditorClassIdentifier: + id: enemybear + displayName: EnemyBear + prefab: {fileID: 3414869680251919639, guid: 5ee286c5b97c2fd4f9a183e2ef82b0f3, type: 3} + icon: {fileID: 21300000, guid: 72c692a250175e3408a8627d98e867fc, type: 3} + maxHealth: 60 + goldReward: 30 + experienceReward: 50 + moveSpeedMultiplier: 1 diff --git a/Assets/_Project/Data/Enemies/EnemyBearDefinition.asset.meta b/Assets/_Project/Data/Enemies/EnemyBearDefinition.asset.meta new file mode 100644 index 0000000..59c3e21 --- /dev/null +++ b/Assets/_Project/Data/Enemies/EnemyBearDefinition.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ed5ca0bf155ec44d8dd61b5773bb061 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Enemies/EnemyCockroachDefinition.asset b/Assets/_Project/Data/Enemies/EnemyCockroachDefinition.asset new file mode 100644 index 0000000..dfc1cde --- /dev/null +++ b/Assets/_Project/Data/Enemies/EnemyCockroachDefinition.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31479fc32602c544f91e0663c653a597, type: 3} + m_Name: EnemyCockroachDefinition + m_EditorClassIdentifier: + id: enemycockroach + displayName: EnemyCockroach + prefab: {fileID: 8385226143460851807, guid: 459970b3cd6480340ae2f709e3c03d44, type: 3} + icon: {fileID: 21300000, guid: 86b0557da12100c4280a2086d2458a01, type: 3} + maxHealth: 2 + goldReward: 2 + experienceReward: 20 + moveSpeedMultiplier: 1 diff --git a/Assets/_Project/Data/Enemies/EnemyCockroachDefinition.asset.meta b/Assets/_Project/Data/Enemies/EnemyCockroachDefinition.asset.meta new file mode 100644 index 0000000..ffac34e --- /dev/null +++ b/Assets/_Project/Data/Enemies/EnemyCockroachDefinition.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 498256f643448804ebcb0b63ce841ce8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Enemies/EnemyCommonSoldierDefinition.asset b/Assets/_Project/Data/Enemies/EnemyCommonSoldierDefinition.asset new file mode 100644 index 0000000..799c5a0 --- /dev/null +++ b/Assets/_Project/Data/Enemies/EnemyCommonSoldierDefinition.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31479fc32602c544f91e0663c653a597, type: 3} + m_Name: EnemyCommonSoldierDefinition + m_EditorClassIdentifier: + id: enemycommonsoldier + displayName: EnemyCommonSoldier + prefab: {fileID: 8385226143460851807, guid: 6ffdc11c948d0284ea7c1945fee301b9, type: 3} + icon: {fileID: -7008412969330441016, guid: 4a7c0da22d195094c996d9182a363b82, type: 3} + maxHealth: 12 + goldReward: 10 + experienceReward: 20 + moveSpeedMultiplier: 1 diff --git a/Assets/_Project/Data/Enemies/EnemyCommonSoldierDefinition.asset.meta b/Assets/_Project/Data/Enemies/EnemyCommonSoldierDefinition.asset.meta new file mode 100644 index 0000000..76d0f37 --- /dev/null +++ b/Assets/_Project/Data/Enemies/EnemyCommonSoldierDefinition.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2c64af1cf7b2e4e449c0fba2b359f9f5 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Enemies/EnemyMonkeyDefinition.asset b/Assets/_Project/Data/Enemies/EnemyMonkeyDefinition.asset new file mode 100644 index 0000000..39f54f8 --- /dev/null +++ b/Assets/_Project/Data/Enemies/EnemyMonkeyDefinition.asset @@ -0,0 +1,22 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31479fc32602c544f91e0663c653a597, type: 3} + m_Name: EnemyMonkeyDefinition + m_EditorClassIdentifier: + id: enemymonkey + displayName: EnemyMonkey + prefab: {fileID: 8385226143460851807, guid: 8baaacbdeee084d46b28c6a10405ba2c, type: 3} + icon: {fileID: 21300000, guid: 6014ac042f215ee40bd60ebf3c53aa9f, type: 3} + maxHealth: 10 + goldReward: 10 + experienceReward: 20 + moveSpeedMultiplier: 1 diff --git a/Assets/_Project/Data/Enemies/EnemyMonkeyDefinition.asset.meta b/Assets/_Project/Data/Enemies/EnemyMonkeyDefinition.asset.meta new file mode 100644 index 0000000..ea40c15 --- /dev/null +++ b/Assets/_Project/Data/Enemies/EnemyMonkeyDefinition.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bb46d8b27b2a1f340b06ddfb4d8de86f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Projectiles.meta b/Assets/_Project/Data/Projectiles.meta new file mode 100644 index 0000000..c248afb --- /dev/null +++ b/Assets/_Project/Data/Projectiles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f678f592414103242badc4b3e0e80fa0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Projectiles/ProjectileArrowDefinition.asset b/Assets/_Project/Data/Projectiles/ProjectileArrowDefinition.asset new file mode 100644 index 0000000..bb3c870 --- /dev/null +++ b/Assets/_Project/Data/Projectiles/ProjectileArrowDefinition.asset @@ -0,0 +1,24 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac10458e8db14384983b3b0f5c10c36f, type: 3} + m_Name: ProjectileArrowDefinition + m_EditorClassIdentifier: + id: projectilearrow + displayName: ProjectileArrow + prefab: {fileID: 2777279350721899029, guid: 44489083cff375d4aa63a379f35125dd, type: 3} + icon: {fileID: 21300000, guid: 737145cfdb0a6ee49a544610e9d61888, type: 3} + behaviourType: 0 + baseDamage: 1 + speed: 8 + areaRadius: 0 + debuffDuration: 0 + debuffMultiplier: 1 diff --git a/Assets/_Project/Data/Projectiles/ProjectileArrowDefinition.asset.meta b/Assets/_Project/Data/Projectiles/ProjectileArrowDefinition.asset.meta new file mode 100644 index 0000000..d28956d --- /dev/null +++ b/Assets/_Project/Data/Projectiles/ProjectileArrowDefinition.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e89befbfae1628449edbdcb81a62743 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Projectiles/ProjectileBookDefinition.asset b/Assets/_Project/Data/Projectiles/ProjectileBookDefinition.asset new file mode 100644 index 0000000..f5abceb --- /dev/null +++ b/Assets/_Project/Data/Projectiles/ProjectileBookDefinition.asset @@ -0,0 +1,24 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac10458e8db14384983b3b0f5c10c36f, type: 3} + m_Name: ProjectileBookDefinition + m_EditorClassIdentifier: + id: projectilebook + displayName: ProjectileBook + prefab: {fileID: 2777279350721899029, guid: f030fa4de2061ef418fc6e40e18d6dc8, type: 3} + icon: {fileID: 21300000, guid: 6d107208eb9001b458c1a59cce463cf3, type: 3} + behaviourType: 1 + baseDamage: 1 + speed: 8 + areaRadius: 0 + debuffDuration: 0 + debuffMultiplier: 1 diff --git a/Assets/_Project/Data/Projectiles/ProjectileBookDefinition.asset.meta b/Assets/_Project/Data/Projectiles/ProjectileBookDefinition.asset.meta new file mode 100644 index 0000000..cd96b82 --- /dev/null +++ b/Assets/_Project/Data/Projectiles/ProjectileBookDefinition.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d3ce46485f0a7d941826b61a2164a17a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Projectiles/ProjectileCoolDryerDefinition.asset b/Assets/_Project/Data/Projectiles/ProjectileCoolDryerDefinition.asset new file mode 100644 index 0000000..1a04097 --- /dev/null +++ b/Assets/_Project/Data/Projectiles/ProjectileCoolDryerDefinition.asset @@ -0,0 +1,24 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ac10458e8db14384983b3b0f5c10c36f, type: 3} + m_Name: ProjectileCoolDryerDefinition + m_EditorClassIdentifier: + id: projectilecooldryer + displayName: ProjectileCoolDryer + prefab: {fileID: 2777279350721899029, guid: 9f72e4894fe04e84795264cd1b0da82a, type: 3} + icon: {fileID: 21300000, guid: 373130f3555d2b345bb1d8098d6a42db, type: 3} + behaviourType: 5 + baseDamage: 0 + speed: 8 + areaRadius: 0 + debuffDuration: 0 + debuffMultiplier: 1 diff --git a/Assets/_Project/Data/Projectiles/ProjectileCoolDryerDefinition.asset.meta b/Assets/_Project/Data/Projectiles/ProjectileCoolDryerDefinition.asset.meta new file mode 100644 index 0000000..add17f5 --- /dev/null +++ b/Assets/_Project/Data/Projectiles/ProjectileCoolDryerDefinition.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f790375cb74176443ad6a90e87df9754 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Towers.meta b/Assets/_Project/Data/Towers.meta new file mode 100644 index 0000000..aeb1984 --- /dev/null +++ b/Assets/_Project/Data/Towers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 289c27fac70277f40a5c95f74dbb2428 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Towers/Tower01DryerDefinition.asset b/Assets/_Project/Data/Towers/Tower01DryerDefinition.asset new file mode 100644 index 0000000..f4201e6 --- /dev/null +++ b/Assets/_Project/Data/Towers/Tower01DryerDefinition.asset @@ -0,0 +1,54 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff06f21defe13c142a818363f9d9c232, type: 3} + m_Name: Tower01DryerDefinition + m_EditorClassIdentifier: + id: tower01dryer + displayName: Tower01Dryer + towerPrefab: {fileID: 7937509987669185425, guid: 34a592719307199419a8c6ee4c711e70, type: 3} + previewPrefab: {fileID: 5283101220022144376, guid: 18fe1ba71f76b2345b6ae10a249456c1, type: 3} + levels: + - sprite: {fileID: 21300000, guid: bf093bf7afa81b542a10689df8d22170, type: 3} + projectile: {fileID: 11400000, guid: 5e89befbfae1628449edbdcb81a62743, type: 2} + damage: 1 + fireRate: 1 + range: 5 + cost: 3 + sellValue: 2 + - sprite: {fileID: 21300000, guid: bf093bf7afa81b542a10689df8d22170, type: 3} + projectile: {fileID: 11400000, guid: 5e89befbfae1628449edbdcb81a62743, type: 2} + damage: 1 + fireRate: 1.1 + range: 7 + cost: 3 + sellValue: 2 + - sprite: {fileID: 21300000, guid: bf093bf7afa81b542a10689df8d22170, type: 3} + projectile: {fileID: 11400000, guid: 5e89befbfae1628449edbdcb81a62743, type: 2} + damage: 1 + fireRate: 1.2 + range: 9 + cost: 3 + sellValue: 2 + - sprite: {fileID: 21300000, guid: bf093bf7afa81b542a10689df8d22170, type: 3} + projectile: {fileID: 11400000, guid: 5e89befbfae1628449edbdcb81a62743, type: 2} + damage: 1.2 + fireRate: 1.4 + range: 11 + cost: 3 + sellValue: 2 + - sprite: {fileID: 21300000, guid: bf093bf7afa81b542a10689df8d22170, type: 3} + projectile: {fileID: 11400000, guid: 5e89befbfae1628449edbdcb81a62743, type: 2} + damage: 2 + fireRate: 1.4 + range: 11 + cost: 5 + sellValue: 3 diff --git a/Assets/_Project/Data/Towers/Tower01DryerDefinition.asset.meta b/Assets/_Project/Data/Towers/Tower01DryerDefinition.asset.meta new file mode 100644 index 0000000..d799a69 --- /dev/null +++ b/Assets/_Project/Data/Towers/Tower01DryerDefinition.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aa9effdc78ed32a4c90fa3264d996893 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Towers/Tower02BookShelfDefinition.asset b/Assets/_Project/Data/Towers/Tower02BookShelfDefinition.asset new file mode 100644 index 0000000..bd05d4d --- /dev/null +++ b/Assets/_Project/Data/Towers/Tower02BookShelfDefinition.asset @@ -0,0 +1,54 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff06f21defe13c142a818363f9d9c232, type: 3} + m_Name: Tower02BookShelfDefinition + m_EditorClassIdentifier: + id: tower02bookshelf + displayName: Tower02BookShelf + towerPrefab: {fileID: 7937509987669185425, guid: ec790bab3e937e248ab6d1da37cc94b4, type: 3} + previewPrefab: {fileID: 5283101220022144376, guid: bb9c962ce23478745b1e3b618c281f7a, type: 3} + levels: + - sprite: {fileID: 21300000, guid: a3c3bf9564fb9d642bfe8b04b3945fae, type: 3} + projectile: {fileID: 11400000, guid: d3ce46485f0a7d941826b61a2164a17a, type: 2} + damage: 1 + fireRate: 2 + range: 4 + cost: 5 + sellValue: 3 + - sprite: {fileID: 21300000, guid: a3c3bf9564fb9d642bfe8b04b3945fae, type: 3} + projectile: {fileID: 11400000, guid: d3ce46485f0a7d941826b61a2164a17a, type: 2} + damage: 2 + fireRate: 2 + range: 4 + cost: 5 + sellValue: 3 + - sprite: {fileID: 21300000, guid: a3c3bf9564fb9d642bfe8b04b3945fae, type: 3} + projectile: {fileID: 11400000, guid: d3ce46485f0a7d941826b61a2164a17a, type: 2} + damage: 2 + fireRate: 3 + range: 4 + cost: 5 + sellValue: 3 + - sprite: {fileID: 21300000, guid: a3c3bf9564fb9d642bfe8b04b3945fae, type: 3} + projectile: {fileID: 11400000, guid: d3ce46485f0a7d941826b61a2164a17a, type: 2} + damage: 2 + fireRate: 3.5 + range: 4 + cost: 7 + sellValue: 3 + - sprite: {fileID: 21300000, guid: a3c3bf9564fb9d642bfe8b04b3945fae, type: 3} + projectile: {fileID: 11400000, guid: d3ce46485f0a7d941826b61a2164a17a, type: 2} + damage: 3 + fireRate: 4 + range: 4 + cost: 8 + sellValue: 4 diff --git a/Assets/_Project/Data/Towers/Tower02BookShelfDefinition.asset.meta b/Assets/_Project/Data/Towers/Tower02BookShelfDefinition.asset.meta new file mode 100644 index 0000000..c9de377 --- /dev/null +++ b/Assets/_Project/Data/Towers/Tower02BookShelfDefinition.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa06123b1b8801c41ad5a5d123c0e35f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Towers/Tower03CoolDryerDefinition.asset b/Assets/_Project/Data/Towers/Tower03CoolDryerDefinition.asset new file mode 100644 index 0000000..c81d176 --- /dev/null +++ b/Assets/_Project/Data/Towers/Tower03CoolDryerDefinition.asset @@ -0,0 +1,54 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ff06f21defe13c142a818363f9d9c232, type: 3} + m_Name: Tower03CoolDryerDefinition + m_EditorClassIdentifier: + id: tower03cooldryer + displayName: Tower03CoolDryer + towerPrefab: {fileID: 7937509987669185425, guid: f827b8f1b1e900f4a887ac5530ae3134, type: 3} + previewPrefab: {fileID: 5283101220022144376, guid: 33f77d679e7670b45981337fd1c2c8ba, type: 3} + levels: + - sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + projectile: {fileID: 11400000, guid: f790375cb74176443ad6a90e87df9754, type: 2} + damage: 1 + fireRate: 1 + range: 5 + cost: 7 + sellValue: 2 + - sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + projectile: {fileID: 11400000, guid: f790375cb74176443ad6a90e87df9754, type: 2} + damage: 1 + fireRate: 1.3 + range: 7 + cost: 7 + sellValue: 2 + - sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + projectile: {fileID: 11400000, guid: f790375cb74176443ad6a90e87df9754, type: 2} + damage: 1 + fireRate: 1.6 + range: 9 + cost: 7 + sellValue: 2 + - sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + projectile: {fileID: 11400000, guid: f790375cb74176443ad6a90e87df9754, type: 2} + damage: 1.2 + fireRate: 1.9 + range: 11 + cost: 7 + sellValue: 2 + - sprite: {fileID: 21300000, guid: c6bc141ec427697498158281f07ba0a9, type: 3} + projectile: {fileID: 11400000, guid: f790375cb74176443ad6a90e87df9754, type: 2} + damage: 2 + fireRate: 2.2 + range: 11 + cost: 7 + sellValue: 3 diff --git a/Assets/_Project/Data/Towers/Tower03CoolDryerDefinition.asset.meta b/Assets/_Project/Data/Towers/Tower03CoolDryerDefinition.asset.meta new file mode 100644 index 0000000..6c2c5dc --- /dev/null +++ b/Assets/_Project/Data/Towers/Tower03CoolDryerDefinition.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a26ee914d41f7ca4aa295e767ba23338 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Waves.meta b/Assets/_Project/Data/Waves.meta new file mode 100644 index 0000000..a1b46db --- /dev/null +++ b/Assets/_Project/Data/Waves.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 681501bfcd1e68341ac4a6df150166c9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Waves/Day01_Wave01_CockroachIntro.asset b/Assets/_Project/Data/Waves/Day01_Wave01_CockroachIntro.asset new file mode 100644 index 0000000..d9c7a99 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day01_Wave01_CockroachIntro.asset @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61c5cffba0b9e1d469c3aaa9e53eda49, type: 3} + m_Name: Day01_Wave01_CockroachIntro + m_EditorClassIdentifier: + id: day01_wave01_cockroachintro + displayName: Day 1-1 Cockroach Intro + duration: 20 + rewardGold: 4 + enemyGroups: + - enemy: {fileID: 11400000, guid: 498256f643448804ebcb0b63ce841ce8, type: 2} + count: 4 + spawnInterval: 1.2 + spawnPointOverride: {fileID: 0} diff --git a/Assets/_Project/Data/Waves/Day01_Wave01_CockroachIntro.asset.meta b/Assets/_Project/Data/Waves/Day01_Wave01_CockroachIntro.asset.meta new file mode 100644 index 0000000..c03c856 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day01_Wave01_CockroachIntro.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f7db1d2a6b054bf4581e99ab56fc42c4 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Waves/Day01_Wave02_CockroachPush.asset b/Assets/_Project/Data/Waves/Day01_Wave02_CockroachPush.asset new file mode 100644 index 0000000..58c317a --- /dev/null +++ b/Assets/_Project/Data/Waves/Day01_Wave02_CockroachPush.asset @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61c5cffba0b9e1d469c3aaa9e53eda49, type: 3} + m_Name: Day01_Wave02_CockroachPush + m_EditorClassIdentifier: + id: day01_wave02_cockroachpush + displayName: Day 1-2 Cockroach Push + duration: 25 + rewardGold: 6 + enemyGroups: + - enemy: {fileID: 11400000, guid: 498256f643448804ebcb0b63ce841ce8, type: 2} + count: 6 + spawnInterval: 1 + spawnPointOverride: {fileID: 0} diff --git a/Assets/_Project/Data/Waves/Day01_Wave02_CockroachPush.asset.meta b/Assets/_Project/Data/Waves/Day01_Wave02_CockroachPush.asset.meta new file mode 100644 index 0000000..53a3df4 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day01_Wave02_CockroachPush.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0940134452c71594985b8929357685bb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Waves/Day02_Wave01_CockroachSwarm.asset b/Assets/_Project/Data/Waves/Day02_Wave01_CockroachSwarm.asset new file mode 100644 index 0000000..2926567 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day02_Wave01_CockroachSwarm.asset @@ -0,0 +1,23 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61c5cffba0b9e1d469c3aaa9e53eda49, type: 3} + m_Name: Day02_Wave01_CockroachSwarm + m_EditorClassIdentifier: + id: day02_wave01_cockroachswarm + displayName: Day 2-1 Cockroach Swarm + duration: 28 + rewardGold: 8 + enemyGroups: + - enemy: {fileID: 11400000, guid: 498256f643448804ebcb0b63ce841ce8, type: 2} + count: 8 + spawnInterval: 0.85 + spawnPointOverride: {fileID: 0} diff --git a/Assets/_Project/Data/Waves/Day02_Wave01_CockroachSwarm.asset.meta b/Assets/_Project/Data/Waves/Day02_Wave01_CockroachSwarm.asset.meta new file mode 100644 index 0000000..f524b60 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day02_Wave01_CockroachSwarm.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4877d962545b1b34ea02afc4d79eee12 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Waves/Day02_Wave02_MonkeyIntro.asset b/Assets/_Project/Data/Waves/Day02_Wave02_MonkeyIntro.asset new file mode 100644 index 0000000..ac7857d --- /dev/null +++ b/Assets/_Project/Data/Waves/Day02_Wave02_MonkeyIntro.asset @@ -0,0 +1,27 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61c5cffba0b9e1d469c3aaa9e53eda49, type: 3} + m_Name: Day02_Wave02_MonkeyIntro + m_EditorClassIdentifier: + id: day02_wave02_monkeyintro + displayName: Day 2-2 Monkey Intro + duration: 30 + rewardGold: 10 + enemyGroups: + - enemy: {fileID: 11400000, guid: 498256f643448804ebcb0b63ce841ce8, type: 2} + count: 6 + spawnInterval: 0.9 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: bb46d8b27b2a1f340b06ddfb4d8de86f, type: 2} + count: 2 + spawnInterval: 1.5 + spawnPointOverride: {fileID: 0} diff --git a/Assets/_Project/Data/Waves/Day02_Wave02_MonkeyIntro.asset.meta b/Assets/_Project/Data/Waves/Day02_Wave02_MonkeyIntro.asset.meta new file mode 100644 index 0000000..5ec6cd0 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day02_Wave02_MonkeyIntro.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3431dc52baa5b844fa14bf86c7913c78 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Waves/Day03_Wave01_MixedRaid.asset b/Assets/_Project/Data/Waves/Day03_Wave01_MixedRaid.asset new file mode 100644 index 0000000..e722e3b --- /dev/null +++ b/Assets/_Project/Data/Waves/Day03_Wave01_MixedRaid.asset @@ -0,0 +1,31 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61c5cffba0b9e1d469c3aaa9e53eda49, type: 3} + m_Name: Day03_Wave01_MixedRaid + m_EditorClassIdentifier: + id: day03_wave01_mixedraid + displayName: Day 3-1 Mixed Raid + duration: 35 + rewardGold: 14 + enemyGroups: + - enemy: {fileID: 11400000, guid: 498256f643448804ebcb0b63ce841ce8, type: 2} + count: 8 + spawnInterval: 0.8 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: bb46d8b27b2a1f340b06ddfb4d8de86f, type: 2} + count: 4 + spawnInterval: 1.2 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: 2c64af1cf7b2e4e449c0fba2b359f9f5, type: 2} + count: 2 + spawnInterval: 1.6 + spawnPointOverride: {fileID: 0} diff --git a/Assets/_Project/Data/Waves/Day03_Wave01_MixedRaid.asset.meta b/Assets/_Project/Data/Waves/Day03_Wave01_MixedRaid.asset.meta new file mode 100644 index 0000000..321eb44 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day03_Wave01_MixedRaid.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6cc5727a0c4e9584e9ba3dbcc6bccd22 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Waves/Day03_Wave02_SoldierLine.asset b/Assets/_Project/Data/Waves/Day03_Wave02_SoldierLine.asset new file mode 100644 index 0000000..bbd01f1 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day03_Wave02_SoldierLine.asset @@ -0,0 +1,27 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61c5cffba0b9e1d469c3aaa9e53eda49, type: 3} + m_Name: Day03_Wave02_SoldierLine + m_EditorClassIdentifier: + id: day03_wave02_soldierline + displayName: Day 3-2 Soldier Line + duration: 38 + rewardGold: 18 + enemyGroups: + - enemy: {fileID: 11400000, guid: bb46d8b27b2a1f340b06ddfb4d8de86f, type: 2} + count: 3 + spawnInterval: 1.1 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: 2c64af1cf7b2e4e449c0fba2b359f9f5, type: 2} + count: 5 + spawnInterval: 1.35 + spawnPointOverride: {fileID: 0} diff --git a/Assets/_Project/Data/Waves/Day03_Wave02_SoldierLine.asset.meta b/Assets/_Project/Data/Waves/Day03_Wave02_SoldierLine.asset.meta new file mode 100644 index 0000000..58381b1 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day03_Wave02_SoldierLine.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9a34c2fa28ba69c4bbdc771c6c34be61 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Waves/Day04_Wave01_HeavyPressure.asset b/Assets/_Project/Data/Waves/Day04_Wave01_HeavyPressure.asset new file mode 100644 index 0000000..4a696c1 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day04_Wave01_HeavyPressure.asset @@ -0,0 +1,31 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61c5cffba0b9e1d469c3aaa9e53eda49, type: 3} + m_Name: Day04_Wave01_HeavyPressure + m_EditorClassIdentifier: + id: day04_wave01_heavypressure + displayName: Day 4-1 Heavy Pressure + duration: 42 + rewardGold: 22 + enemyGroups: + - enemy: {fileID: 11400000, guid: 498256f643448804ebcb0b63ce841ce8, type: 2} + count: 10 + spawnInterval: 0.7 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: bb46d8b27b2a1f340b06ddfb4d8de86f, type: 2} + count: 4 + spawnInterval: 1 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: 2c64af1cf7b2e4e449c0fba2b359f9f5, type: 2} + count: 6 + spawnInterval: 1.2 + spawnPointOverride: {fileID: 0} diff --git a/Assets/_Project/Data/Waves/Day04_Wave01_HeavyPressure.asset.meta b/Assets/_Project/Data/Waves/Day04_Wave01_HeavyPressure.asset.meta new file mode 100644 index 0000000..902a350 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day04_Wave01_HeavyPressure.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 700707d0dcbc41a4dbb0204bc377087f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Waves/Day04_Wave02_BearWarning.asset b/Assets/_Project/Data/Waves/Day04_Wave02_BearWarning.asset new file mode 100644 index 0000000..d44795b --- /dev/null +++ b/Assets/_Project/Data/Waves/Day04_Wave02_BearWarning.asset @@ -0,0 +1,27 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61c5cffba0b9e1d469c3aaa9e53eda49, type: 3} + m_Name: Day04_Wave02_BearWarning + m_EditorClassIdentifier: + id: day04_wave02_bearwarning + displayName: Day 4-2 Bear Warning + duration: 45 + rewardGold: 28 + enemyGroups: + - enemy: {fileID: 11400000, guid: 2c64af1cf7b2e4e449c0fba2b359f9f5, type: 2} + count: 6 + spawnInterval: 1.1 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: 0ed5ca0bf155ec44d8dd61b5773bb061, type: 2} + count: 1 + spawnInterval: 2.5 + spawnPointOverride: {fileID: 0} diff --git a/Assets/_Project/Data/Waves/Day04_Wave02_BearWarning.asset.meta b/Assets/_Project/Data/Waves/Day04_Wave02_BearWarning.asset.meta new file mode 100644 index 0000000..7c5551f --- /dev/null +++ b/Assets/_Project/Data/Waves/Day04_Wave02_BearWarning.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4892f1dce32fbb0408df3fad2d0ae6c0 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Waves/Day05_Wave01_BearPush.asset b/Assets/_Project/Data/Waves/Day05_Wave01_BearPush.asset new file mode 100644 index 0000000..4eea1aa --- /dev/null +++ b/Assets/_Project/Data/Waves/Day05_Wave01_BearPush.asset @@ -0,0 +1,31 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61c5cffba0b9e1d469c3aaa9e53eda49, type: 3} + m_Name: Day05_Wave01_BearPush + m_EditorClassIdentifier: + id: day05_wave01_bearpush + displayName: Day 5-1 Bear Push + duration: 48 + rewardGold: 34 + enemyGroups: + - enemy: {fileID: 11400000, guid: bb46d8b27b2a1f340b06ddfb4d8de86f, type: 2} + count: 6 + spawnInterval: 0.9 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: 2c64af1cf7b2e4e449c0fba2b359f9f5, type: 2} + count: 8 + spawnInterval: 1 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: 0ed5ca0bf155ec44d8dd61b5773bb061, type: 2} + count: 2 + spawnInterval: 2.2 + spawnPointOverride: {fileID: 0} diff --git a/Assets/_Project/Data/Waves/Day05_Wave01_BearPush.asset.meta b/Assets/_Project/Data/Waves/Day05_Wave01_BearPush.asset.meta new file mode 100644 index 0000000..51e9bf7 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day05_Wave01_BearPush.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e0f22eedb1f774449b48e44e07e0c2a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Data/Waves/Day05_Wave02_FirstWall.asset b/Assets/_Project/Data/Waves/Day05_Wave02_FirstWall.asset new file mode 100644 index 0000000..887adc7 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day05_Wave02_FirstWall.asset @@ -0,0 +1,35 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 61c5cffba0b9e1d469c3aaa9e53eda49, type: 3} + m_Name: Day05_Wave02_FirstWall + m_EditorClassIdentifier: + id: day05_wave02_firstwall + displayName: Day 5-2 First Wall + duration: 55 + rewardGold: 45 + enemyGroups: + - enemy: {fileID: 11400000, guid: 498256f643448804ebcb0b63ce841ce8, type: 2} + count: 12 + spawnInterval: 0.65 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: bb46d8b27b2a1f340b06ddfb4d8de86f, type: 2} + count: 8 + spawnInterval: 0.85 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: 2c64af1cf7b2e4e449c0fba2b359f9f5, type: 2} + count: 10 + spawnInterval: 0.95 + spawnPointOverride: {fileID: 0} + - enemy: {fileID: 11400000, guid: 0ed5ca0bf155ec44d8dd61b5773bb061, type: 2} + count: 2 + spawnInterval: 2 + spawnPointOverride: {fileID: 0} diff --git a/Assets/_Project/Data/Waves/Day05_Wave02_FirstWall.asset.meta b/Assets/_Project/Data/Waves/Day05_Wave02_FirstWall.asset.meta new file mode 100644 index 0000000..3e4bbd5 --- /dev/null +++ b/Assets/_Project/Data/Waves/Day05_Wave02_FirstWall.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9d6d1bc65f515004f93960e5d261fcb1 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts.meta b/Assets/_Project/Scripts.meta new file mode 100644 index 0000000..0517ce0 --- /dev/null +++ b/Assets/_Project/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aced4bf22960ae242addfc33106ba053 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Editor.meta b/Assets/_Project/Scripts/Editor.meta new file mode 100644 index 0000000..982bfa9 --- /dev/null +++ b/Assets/_Project/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a10b05d50f0c9bf4eb907fa21ddfa1de +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Editor/CleanCoreDataMigrationBootstrapper.cs b/Assets/_Project/Scripts/Editor/CleanCoreDataMigrationBootstrapper.cs new file mode 100644 index 0000000..6d0938c --- /dev/null +++ b/Assets/_Project/Scripts/Editor/CleanCoreDataMigrationBootstrapper.cs @@ -0,0 +1,519 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using HomeProtector.Core; +using UnityEditor; +using UnityEngine; + +namespace HomeProtector.Editor +{ + public static class CleanCoreDataMigrationBootstrapper + { + private const string DataRoot = "Assets/_Project/Data"; + private const string TowerDataRoot = DataRoot + "/Towers"; + private const string EnemyDataRoot = DataRoot + "/Enemies"; + private const string ProjectileDataRoot = DataRoot + "/Projectiles"; + private const string WaveDataRoot = DataRoot + "/Waves"; + private const string DayWaveTablePath = DataRoot + "/DayWaveTable.asset"; + private const string LegacyPrefabRoot = "Assets/Prefabs"; + + [MenuItem("Home Protector/Migrate Legacy Content Data")] + public static void MigrateLegacyContentData() + { + EnsureFolders(); + + Dictionary projectileDefinitions = new(); + int towerCount = MigrateTowerDefinitions(projectileDefinitions); + int enemyCount = MigrateEnemyDefinitions(); + int waveCount = GenerateStarterWaves(); + int dayEntryCount = GenerateStarterDayWaveTable(); + + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + + Debug.Log( + $"Home Protector content data migration complete. Towers: {towerCount}, " + + $"Projectiles: {projectileDefinitions.Count}, Enemies: {enemyCount}, " + + $"Waves: {waveCount}, Day entries: {dayEntryCount}."); + } + + private static void EnsureFolders() + { + EnsureFolder("Assets", "_Project"); + EnsureFolder("Assets/_Project", "Data"); + EnsureFolder(DataRoot, "Towers"); + EnsureFolder(DataRoot, "Enemies"); + EnsureFolder(DataRoot, "Projectiles"); + EnsureFolder(DataRoot, "Waves"); + } + + private static void EnsureFolder(string parent, string child) + { + string path = parent + "/" + child; + if (!AssetDatabase.IsValidFolder(path)) + { + AssetDatabase.CreateFolder(parent, child); + } + } + + private static int MigrateTowerDefinitions(Dictionary projectileDefinitions) + { + string[] towerTemplatePaths = AssetDatabase.FindAssets("t:TowerTemplate", new[] { LegacyPrefabRoot }) + .Select(AssetDatabase.GUIDToAssetPath) + .OrderBy(path => path) + .ToArray(); + + int migratedCount = 0; + foreach (string path in towerTemplatePaths) + { + TowerTemplate legacyTemplate = AssetDatabase.LoadAssetAtPath(path); + if (legacyTemplate == null || legacyTemplate.towerPrefab == null) + { + continue; + } + + GameObject projectilePrefab = GetObjectReference( + FindComponentByTypeName(legacyTemplate.towerPrefab, "TowerWeapon"), + "projectilePrefab"); + ProjectileDefinition projectileDefinition = projectilePrefab != null + ? GetOrCreateProjectileDefinition(projectilePrefab, FirstWeaponDamage(legacyTemplate), projectileDefinitions) + : null; + + string assetName = legacyTemplate.name + "Definition"; + TowerDefinition definition = LoadOrCreateAsset(TowerDataRoot + "/" + assetName + ".asset"); + WriteTowerDefinition(definition, legacyTemplate, projectileDefinition); + migratedCount++; + } + + return migratedCount; + } + + private static int GenerateStarterWaves() + { + EnemyDefinition cockroach = LoadEnemyDefinition("EnemyCockroachDefinition"); + EnemyDefinition monkey = LoadEnemyDefinition("EnemyMonkeyDefinition"); + EnemyDefinition soldier = LoadEnemyDefinition("EnemyCommonSoldierDefinition"); + EnemyDefinition bear = LoadEnemyDefinition("EnemyBearDefinition"); + + StarterWaveSpec[] starterWaves = + { + new("Day01_Wave01_CockroachIntro", "Day 1-1 Cockroach Intro", 20f, 4, + new StarterEnemyGroup(cockroach, 4, 1.2f)), + new("Day01_Wave02_CockroachPush", "Day 1-2 Cockroach Push", 25f, 6, + new StarterEnemyGroup(cockroach, 6, 1.0f)), + new("Day02_Wave01_CockroachSwarm", "Day 2-1 Cockroach Swarm", 28f, 8, + new StarterEnemyGroup(cockroach, 8, 0.85f)), + new("Day02_Wave02_MonkeyIntro", "Day 2-2 Monkey Intro", 30f, 10, + new StarterEnemyGroup(cockroach, 6, 0.9f), + new StarterEnemyGroup(monkey, 2, 1.5f)), + new("Day03_Wave01_MixedRaid", "Day 3-1 Mixed Raid", 35f, 14, + new StarterEnemyGroup(cockroach, 8, 0.8f), + new StarterEnemyGroup(monkey, 4, 1.2f), + new StarterEnemyGroup(soldier, 2, 1.6f)), + new("Day03_Wave02_SoldierLine", "Day 3-2 Soldier Line", 38f, 18, + new StarterEnemyGroup(monkey, 3, 1.1f), + new StarterEnemyGroup(soldier, 5, 1.35f)), + new("Day04_Wave01_HeavyPressure", "Day 4-1 Heavy Pressure", 42f, 22, + new StarterEnemyGroup(cockroach, 10, 0.7f), + new StarterEnemyGroup(monkey, 4, 1.0f), + new StarterEnemyGroup(soldier, 6, 1.2f)), + new("Day04_Wave02_BearWarning", "Day 4-2 Bear Warning", 45f, 28, + new StarterEnemyGroup(soldier, 6, 1.1f), + new StarterEnemyGroup(bear, 1, 2.5f)), + new("Day05_Wave01_BearPush", "Day 5-1 Bear Push", 48f, 34, + new StarterEnemyGroup(monkey, 6, 0.9f), + new StarterEnemyGroup(soldier, 8, 1.0f), + new StarterEnemyGroup(bear, 2, 2.2f)), + new("Day05_Wave02_FirstWall", "Day 5-2 First Wall", 55f, 45, + new StarterEnemyGroup(cockroach, 12, 0.65f), + new StarterEnemyGroup(monkey, 8, 0.85f), + new StarterEnemyGroup(soldier, 10, 0.95f), + new StarterEnemyGroup(bear, 2, 2.0f)), + }; + + foreach (StarterWaveSpec spec in starterWaves) + { + WaveDefinition wave = LoadOrCreateAsset(WaveDataRoot + "/" + spec.AssetName + ".asset"); + WriteWaveDefinition(wave, spec); + } + + return starterWaves.Length; + } + + private static int GenerateStarterDayWaveTable() + { + DayWaveTable table = LoadOrCreateAsset(DayWaveTablePath); + SerializedObject serializedObject = new(table); + SerializedProperty entries = serializedObject.FindProperty("entries"); + entries.arraySize = 5; + + for (int day = 1; day <= 5; day++) + { + SerializedProperty entry = entries.GetArrayElementAtIndex(day - 1); + entry.FindPropertyRelative("label").stringValue = $"Day {day}"; + entry.FindPropertyRelative("day").intValue = day; + entry.FindPropertyRelative("dayRangeStart").intValue = 0; + entry.FindPropertyRelative("dayRangeEnd").intValue = 0; + + SerializedProperty waves = entry.FindPropertyRelative("waves"); + waves.arraySize = 2; + waves.GetArrayElementAtIndex(0).objectReferenceValue = + LoadWaveDefinition($"Day{day:00}_Wave01"); + waves.GetArrayElementAtIndex(1).objectReferenceValue = + LoadWaveDefinition($"Day{day:00}_Wave02"); + } + + serializedObject.ApplyModifiedPropertiesWithoutUndo(); + EditorUtility.SetDirty(table); + return entries.arraySize; + } + + private static int MigrateEnemyDefinitions() + { + string[] prefabPaths = AssetDatabase.FindAssets("t:Prefab", new[] { LegacyPrefabRoot }) + .Select(AssetDatabase.GUIDToAssetPath) + .OrderBy(path => path) + .ToArray(); + + int migratedCount = 0; + foreach (string path in prefabPaths) + { + GameObject prefab = AssetDatabase.LoadAssetAtPath(path); + Component enemy = FindComponentByTypeName(prefab, "Enemy"); + Component enemyHp = FindComponentByTypeName(prefab, "EnemyHP"); + if (prefab == null || enemy == null || enemyHp == null) + { + continue; + } + + string assetName = prefab.name + "Definition"; + EnemyDefinition definition = LoadOrCreateAsset(EnemyDataRoot + "/" + assetName + ".asset"); + WriteEnemyDefinition(definition, prefab, enemy, enemyHp); + migratedCount++; + } + + return migratedCount; + } + + private static ProjectileDefinition GetOrCreateProjectileDefinition( + GameObject prefab, + float baseDamage, + Dictionary projectileDefinitions) + { + if (projectileDefinitions.TryGetValue(prefab, out ProjectileDefinition existing)) + { + return existing; + } + + string assetName = prefab.name + "Definition"; + ProjectileDefinition definition = + LoadOrCreateAsset(ProjectileDataRoot + "/" + assetName + ".asset"); + WriteProjectileDefinition(definition, prefab, baseDamage); + projectileDefinitions[prefab] = definition; + return definition; + } + + private static void WriteTowerDefinition( + TowerDefinition definition, + TowerTemplate legacyTemplate, + ProjectileDefinition projectileDefinition) + { + SerializedObject serializedObject = new(definition); + SetString(serializedObject, "id", ToId(legacyTemplate.name)); + SetString(serializedObject, "displayName", legacyTemplate.name); + SetObject(serializedObject, "towerPrefab", legacyTemplate.towerPrefab); + SetObject(serializedObject, "previewPrefab", legacyTemplate.followTowerPrefab); + + SerializedProperty levels = serializedObject.FindProperty("levels"); + levels.arraySize = legacyTemplate.weapons != null ? legacyTemplate.weapons.Count : 0; + + for (int i = 0; i < levels.arraySize; i++) + { + TowerTemplate.Weapon legacyWeapon = legacyTemplate.weapons[i]; + SerializedProperty level = levels.GetArrayElementAtIndex(i); + level.FindPropertyRelative("sprite").objectReferenceValue = legacyWeapon.sprite; + level.FindPropertyRelative("projectile").objectReferenceValue = projectileDefinition; + level.FindPropertyRelative("damage").floatValue = legacyWeapon.damage; + level.FindPropertyRelative("fireRate").floatValue = legacyWeapon.rate; + level.FindPropertyRelative("range").floatValue = legacyWeapon.range; + level.FindPropertyRelative("cost").intValue = legacyWeapon.cost; + level.FindPropertyRelative("sellValue").intValue = legacyWeapon.sell; + } + + serializedObject.ApplyModifiedPropertiesWithoutUndo(); + EditorUtility.SetDirty(definition); + } + + private static void WriteEnemyDefinition( + EnemyDefinition definition, + GameObject prefab, + Component enemy, + Component enemyHp) + { + SerializedObject serializedObject = new(definition); + SetString(serializedObject, "id", ToId(prefab.name)); + SetString(serializedObject, "displayName", prefab.name); + SetObject(serializedObject, "prefab", prefab); + SetObject(serializedObject, "icon", GetPrefabSprite(prefab)); + SetFloat(serializedObject, "maxHealth", Mathf.Max(1f, GetFloat(enemyHp, "maxHP", 1f))); + SetInt(serializedObject, "goldReward", GetInt(enemy, "gold", 1)); + SetInt(serializedObject, "experienceReward", GetInt(enemy, "expValue", 1)); + SetFloat(serializedObject, "moveSpeedMultiplier", 1f); + serializedObject.ApplyModifiedPropertiesWithoutUndo(); + EditorUtility.SetDirty(definition); + } + + private static void WriteProjectileDefinition(ProjectileDefinition definition, GameObject prefab, float baseDamage) + { + SerializedObject serializedObject = new(definition); + SetString(serializedObject, "id", ToId(prefab.name)); + SetString(serializedObject, "displayName", prefab.name); + SetObject(serializedObject, "prefab", prefab); + SetObject(serializedObject, "icon", GetPrefabSprite(prefab)); + SetEnum(serializedObject, "behaviourType", GuessProjectileBehaviour(prefab)); + SetFloat(serializedObject, "baseDamage", Mathf.Max(0f, baseDamage)); + serializedObject.ApplyModifiedPropertiesWithoutUndo(); + EditorUtility.SetDirty(definition); + } + + private static void WriteWaveDefinition(WaveDefinition definition, StarterWaveSpec spec) + { + SerializedObject serializedObject = new(definition); + SetString(serializedObject, "id", ToId(spec.AssetName)); + SetString(serializedObject, "displayName", spec.DisplayName); + SetFloat(serializedObject, "duration", spec.Duration); + SetInt(serializedObject, "rewardGold", spec.RewardGold); + + SerializedProperty enemyGroups = serializedObject.FindProperty("enemyGroups"); + enemyGroups.arraySize = spec.Groups.Count; + + for (int i = 0; i < spec.Groups.Count; i++) + { + StarterEnemyGroup group = spec.Groups[i]; + SerializedProperty entry = enemyGroups.GetArrayElementAtIndex(i); + entry.FindPropertyRelative("enemy").objectReferenceValue = group.Enemy; + entry.FindPropertyRelative("count").intValue = group.Count; + entry.FindPropertyRelative("spawnInterval").floatValue = group.SpawnInterval; + entry.FindPropertyRelative("spawnPointOverride").objectReferenceValue = null; + } + + serializedObject.ApplyModifiedPropertiesWithoutUndo(); + EditorUtility.SetDirty(definition); + } + + private static T LoadOrCreateAsset(string path) where T : ScriptableObject + { + T asset = AssetDatabase.LoadAssetAtPath(path); + if (asset != null) + { + return asset; + } + + asset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(asset, path); + return asset; + } + + private static Component FindComponentByTypeName(GameObject prefab, string typeName) + { + if (prefab == null) + { + return null; + } + + return prefab.GetComponentsInChildren(true) + .FirstOrDefault(component => component != null && component.GetType().Name == typeName); + } + + private static T GetObjectReference(UnityEngine.Object owner, string propertyName) + where T : UnityEngine.Object + { + if (owner == null) + { + return null; + } + + SerializedProperty property = new SerializedObject(owner).FindProperty(propertyName); + return property != null ? property.objectReferenceValue as T : null; + } + + private static float FirstWeaponDamage(TowerTemplate legacyTemplate) + { + return legacyTemplate.weapons != null && legacyTemplate.weapons.Count > 0 + ? legacyTemplate.weapons[0].damage + : 0f; + } + + private static Sprite GetPrefabSprite(GameObject prefab) + { + SpriteRenderer renderer = prefab.GetComponentInChildren(true); + return renderer != null ? renderer.sprite : null; + } + + private static EnemyDefinition LoadEnemyDefinition(string assetName) + { + EnemyDefinition definition = + AssetDatabase.LoadAssetAtPath(EnemyDataRoot + "/" + assetName + ".asset"); + if (definition == null) + { + throw new InvalidOperationException($"Missing enemy definition: {assetName}"); + } + + return definition; + } + + private static WaveDefinition LoadWaveDefinition(string assetNamePrefix) + { + string[] matches = AssetDatabase.FindAssets(assetNamePrefix + " t:WaveDefinition", new[] { WaveDataRoot }) + .Select(AssetDatabase.GUIDToAssetPath) + .Where(path => System.IO.Path.GetFileNameWithoutExtension(path).StartsWith(assetNamePrefix, StringComparison.Ordinal)) + .OrderBy(path => path) + .ToArray(); + + if (matches.Length == 0) + { + throw new InvalidOperationException($"Missing wave definition matching prefix: {assetNamePrefix}"); + } + + return AssetDatabase.LoadAssetAtPath(matches[0]); + } + + private static ProjectileBehaviourType GuessProjectileBehaviour(GameObject prefab) + { + if (HasComponentNamed(prefab, "ProjectileComboDebuff")) + { + return ProjectileBehaviourType.ComboDebuff; + } + + if (HasComponentNamed(prefab, "ProjectileAttackSpeedDebuff")) + { + return ProjectileBehaviourType.AttackSpeedDebuff; + } + + if (HasComponentNamed(prefab, "ProjectileSlowDebuff")) + { + return ProjectileBehaviourType.SlowDebuff; + } + + if (HasComponentNamed(prefab, "ProjectileAreaDamage")) + { + return ProjectileBehaviourType.Area; + } + + if (HasComponentNamed(prefab, "ProjectileHoming") + || HasComponentNamed(prefab, "ProjectileQuadraticHoming") + || HasComponentNamed(prefab, "ProjectileCubicHoming")) + { + return ProjectileBehaviourType.Homing; + } + + return ProjectileBehaviourType.Straight; + } + + private static bool HasComponentNamed(GameObject prefab, string typeName) + { + return FindComponentByTypeName(prefab, typeName) != null; + } + + private static int GetInt(UnityEngine.Object owner, string propertyName, int fallback) + { + SerializedProperty property = new SerializedObject(owner).FindProperty(propertyName); + return property != null ? property.intValue : fallback; + } + + private static float GetFloat(UnityEngine.Object owner, string propertyName, float fallback) + { + SerializedProperty property = new SerializedObject(owner).FindProperty(propertyName); + return property != null ? property.floatValue : fallback; + } + + private static void SetString(SerializedObject serializedObject, string propertyName, string value) + { + serializedObject.FindProperty(propertyName).stringValue = value; + } + + private static void SetObject(SerializedObject serializedObject, string propertyName, UnityEngine.Object value) + { + serializedObject.FindProperty(propertyName).objectReferenceValue = value; + } + + private static void SetFloat(SerializedObject serializedObject, string propertyName, float value) + { + serializedObject.FindProperty(propertyName).floatValue = value; + } + + private static void SetInt(SerializedObject serializedObject, string propertyName, int value) + { + serializedObject.FindProperty(propertyName).intValue = value; + } + + private static void SetEnum(SerializedObject serializedObject, string propertyName, TEnum value) + where TEnum : Enum + { + serializedObject.FindProperty(propertyName).enumValueIndex = Convert.ToInt32(value); + } + + private static string ToId(string source) + { + if (string.IsNullOrWhiteSpace(source)) + { + return "asset"; + } + + StringBuilder builder = new(); + foreach (char character in source) + { + if (char.IsLetterOrDigit(character)) + { + builder.Append(char.ToLowerInvariant(character)); + continue; + } + + if (builder.Length > 0 && builder[builder.Length - 1] != '_') + { + builder.Append('_'); + } + } + + return builder.ToString().Trim('_'); + } + + private readonly struct StarterWaveSpec + { + public StarterWaveSpec( + string assetName, + string displayName, + float duration, + int rewardGold, + params StarterEnemyGroup[] groups) + { + AssetName = assetName; + DisplayName = displayName; + Duration = duration; + RewardGold = rewardGold; + Groups = groups.Where(group => group.Enemy != null && group.Count > 0).ToArray(); + } + + public string AssetName { get; } + public string DisplayName { get; } + public float Duration { get; } + public int RewardGold { get; } + public IReadOnlyList Groups { get; } + } + + private readonly struct StarterEnemyGroup + { + public StarterEnemyGroup(EnemyDefinition enemy, int count, float spawnInterval) + { + Enemy = enemy; + Count = count; + SpawnInterval = spawnInterval; + } + + public EnemyDefinition Enemy { get; } + public int Count { get; } + public float SpawnInterval { get; } + } + } +} diff --git a/Assets/_Project/Scripts/Editor/CleanCoreDataMigrationBootstrapper.cs.meta b/Assets/_Project/Scripts/Editor/CleanCoreDataMigrationBootstrapper.cs.meta new file mode 100644 index 0000000..435de39 --- /dev/null +++ b/Assets/_Project/Scripts/Editor/CleanCoreDataMigrationBootstrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d663533b7e9404fb9e50d98c45ad3eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Editor/HomeProtectorAutomation.cs b/Assets/_Project/Scripts/Editor/HomeProtectorAutomation.cs new file mode 100644 index 0000000..89d0969 --- /dev/null +++ b/Assets/_Project/Scripts/Editor/HomeProtectorAutomation.cs @@ -0,0 +1,350 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using HomeProtector.Core; +using UnityEditor; +using UnityEditor.Build; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.Tilemaps; + +namespace HomeProtector.Editor.AssetPipeline +{ + public static class HomeProtectorAutomation + { + private const string DataRoot = "Assets/_Project/Data"; + private const string DayWaveTablePath = DataRoot + "/DayWaveTable.asset"; + private const string PlayableScenePath = "Assets/Scenes/isometric scene.unity"; + private const string PlaceholderPostBoxPrefabPath = "Assets/Prefabs/PostBox.prefab"; + private const string ForbiddenTilemapMaterialPath = "Assets/Prefabs/Last/Materials/우체통.mat"; + + public static void ValidateProject() + { + List issues = new(); + + if (EditorUtility.scriptCompilationFailed) + { + issues.Add("Unity reports script compilation errors."); + } + + int sceneCount = ValidateEnabledScenes(issues); + int dataAssetCount = ValidateFoundationData(issues); + + if (issues.Count > 0) + { + foreach (string issue in issues) + { + Debug.LogError("HOME_PROTECTOR_VALIDATE_ERROR " + issue); + } + + throw new BuildFailedException( + $"Home Protector validation failed with {issues.Count} issue(s)."); + } + + Debug.Log( + $"HOME_PROTECTOR_VALIDATE_OK scenes={sceneCount} dataAssets={dataAssetCount}"); + } + + private static int ValidateEnabledScenes(List issues) + { + EditorBuildSettingsScene[] enabledScenes = EditorBuildSettings.scenes + .Where(scene => scene.enabled) + .ToArray(); + + bool playableSceneEnabled = enabledScenes.Any(scene => scene.path == PlayableScenePath); + if (enabledScenes.Length == 0) + { + issues.Add("Build Settings has no enabled scenes."); + } + + if (!playableSceneEnabled) + { + issues.Add($"Build Settings must enable the playable scene: {PlayableScenePath}."); + enabledScenes = enabledScenes + .Concat(new[] { new EditorBuildSettingsScene(PlayableScenePath, true) }) + .ToArray(); + } + + int validatedSceneCount = 0; + foreach (EditorBuildSettingsScene buildScene in enabledScenes) + { + string scenePath = buildScene.path; + if (string.IsNullOrWhiteSpace(scenePath) || + AssetDatabase.LoadAssetAtPath(scenePath) == null) + { + issues.Add($"Enabled scene does not exist: '{scenePath}'."); + continue; + } + + Scene scene = SceneManager.GetSceneByPath(scenePath); + bool openedForValidation = !scene.IsValid() || !scene.isLoaded; + + try + { + if (openedForValidation) + { + scene = EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Additive); + } + + foreach (GameObject root in scene.GetRootGameObjects()) + { + ValidateHierarchy(root, scenePath, issues); + } + + validatedSceneCount++; + } + catch (Exception exception) + { + issues.Add($"Could not validate scene '{scenePath}': {exception.Message}"); + } + finally + { + if (openedForValidation && scene.IsValid() && scene.isLoaded) + { + EditorSceneManager.CloseScene(scene, true); + } + } + } + + return validatedSceneCount; + } + + private static void ValidateHierarchy(GameObject gameObject, string scenePath, List issues) + { + int missingScriptCount = GameObjectUtility.GetMonoBehavioursWithMissingScriptCount(gameObject); + GameObject instanceRoot = PrefabUtility.GetNearestPrefabInstanceRoot(gameObject); + if (instanceRoot == gameObject) + { + GameObject source = PrefabUtility.GetCorrespondingObjectFromSource(gameObject); + if (source != null && + AssetDatabase.GetAssetPath(source) == PlaceholderPostBoxPrefabPath) + { + issues.Add($"{scenePath}: {GetHierarchyPath(gameObject)} uses the temporary PostBox prefab."); + } + } + + TilemapRenderer tilemapRenderer = gameObject.GetComponent(); + if (tilemapRenderer != null && + AssetDatabase.GetAssetPath(tilemapRenderer.sharedMaterial) == ForbiddenTilemapMaterialPath) + { + issues.Add( + $"{scenePath}: {GetHierarchyPath(gameObject)} uses the forbidden PostBox tilemap material."); + } + + if (missingScriptCount > 0) + { + issues.Add( + $"{scenePath}: {GetHierarchyPath(gameObject)} has " + + $"{missingScriptCount} missing script(s)."); + } + + foreach (Component component in gameObject.GetComponents()) + { + if (component != null) + { + try + { + CollectMissingObjectReferences(component, scenePath, gameObject, issues); + } + catch (Exception exception) + { + issues.Add( + $"{scenePath}: {GetHierarchyPath(gameObject)} " + + $"({component.GetType().Name}) reference validation threw " + + $"{exception.GetType().Name}: {exception.Message}"); + } + } + } + + foreach (Transform child in gameObject.transform) + { + ValidateHierarchy(child.gameObject, scenePath, issues); + } + } + + private static void CollectMissingObjectReferences( + Component component, + string scenePath, + GameObject owner, + List issues) + { + SerializedProperty property = new SerializedObject(component).GetIterator(); + while (property.Next(true)) + { + if (property.propertyType != SerializedPropertyType.ObjectReference || + property.objectReferenceValue != null || + property.objectReferenceInstanceIDValue == 0) + { + continue; + } + + issues.Add( + $"{scenePath}: {GetHierarchyPath(owner)} " + + $"({component.GetType().Name}.{property.propertyPath}) has a missing reference."); + } + } + + private static int ValidateFoundationData(List issues) + { + int validatedAssetCount = 0; + DayWaveTable dayWaveTable = AssetDatabase.LoadAssetAtPath(DayWaveTablePath); + if (dayWaveTable == null) + { + issues.Add($"Missing Foundation data asset: {DayWaveTablePath}."); + } + else + { + validatedAssetCount++; + if (!dayWaveTable.IsValid(out string message)) + { + issues.Add($"{DayWaveTablePath}: {message}"); + } + IReadOnlyList entries = dayWaveTable.Entries; + if (entries != null) + { + for (int entryIndex = 0; entryIndex < entries.Count; entryIndex++) + { + DayWaveEntry entry = entries[entryIndex]; + if (entry == null) + { + issues.Add($"{DayWaveTablePath}: entry {entryIndex} is null."); + continue; + } + + IReadOnlyList waves = entry.Waves; + if (waves == null) + { + issues.Add($"{DayWaveTablePath}: entry {entryIndex} waves collection is null."); + continue; + } + + for (int waveIndex = 0; waveIndex < waves.Count; waveIndex++) + { + if (waves[waveIndex] == null) + { + issues.Add( + $"{DayWaveTablePath}: entry {entryIndex} has a missing wave " + + $"at index {waveIndex}."); + } + } + } + } + } + + validatedAssetCount += ValidateDefinitions( + "t:TowerDefinition", + ValidateTowerDefinition, + issues); + validatedAssetCount += ValidateDefinitions( + "t:EnemyDefinition", + ValidateEnemyDefinition, + issues); + validatedAssetCount += ValidateDefinitions( + "t:ProjectileDefinition", + ValidateProjectileDefinition, + issues); + validatedAssetCount += ValidateDefinitions( + "t:WaveDefinition", + ValidateWaveDefinition, + issues); + + return validatedAssetCount; + } + + private static int ValidateDefinitions( + string filter, + Func validate, + List issues) + where T : UnityEngine.Object + { + string[] paths = AssetDatabase.FindAssets(filter, new[] { DataRoot }) + .Select(AssetDatabase.GUIDToAssetPath) + .OrderBy(path => path) + .ToArray(); + + if (paths.Length == 0) + { + issues.Add($"Foundation data contains no assets matching '{filter}'."); + return 0; + } + + foreach (string path in paths) + { + T definition = AssetDatabase.LoadAssetAtPath(path); + if (definition == null) + { + issues.Add($"Could not load Foundation data asset: {path}."); + continue; + } + + try + { + string issue = validate(definition); + if (!string.IsNullOrEmpty(issue)) + { + issues.Add($"{path}: {issue}"); + } + } + catch (Exception exception) + { + issues.Add($"{path}: validation threw {exception.GetType().Name}: {exception.Message}"); + } + } + + return paths.Length; + } + + private static string ValidateTowerDefinition(TowerDefinition definition) + { + if (!definition.IsValid(out string message)) + { + return message; + } + + for (int levelIndex = 0; levelIndex < definition.Levels.Count; levelIndex++) + { + TowerLevelDefinition level = definition.Levels[levelIndex]; + if (level == null) + { + return $"Tower '{definition.Id}' has a null level at index {levelIndex}."; + } + + if (level.Projectile == null) + { + return $"Tower '{definition.Id}' level {levelIndex} has no projectile."; + } + } + + return string.Empty; + } + + private static string ValidateEnemyDefinition(EnemyDefinition definition) + { + return definition.IsValid(out string message) ? string.Empty : message; + } + + private static string ValidateProjectileDefinition(ProjectileDefinition definition) + { + return definition.IsValid(out string message) ? string.Empty : message; + } + + private static string ValidateWaveDefinition(WaveDefinition definition) + { + return definition.IsValid(out string message) ? string.Empty : message; + } + + private static string GetHierarchyPath(GameObject gameObject) + { + Stack names = new(); + Transform current = gameObject.transform; + while (current != null) + { + names.Push(current.name); + current = current.parent; + } + + return string.Join("/", names); + } + } +} diff --git a/Assets/_Project/Scripts/Editor/HomeProtectorAutomation.cs.meta b/Assets/_Project/Scripts/Editor/HomeProtectorAutomation.cs.meta new file mode 100644 index 0000000..b72c5a8 --- /dev/null +++ b/Assets/_Project/Scripts/Editor/HomeProtectorAutomation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a03643efbb6aac94990b36d2e18d54a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts.meta b/Assets/_Project/Scripts/Legacy.meta similarity index 100% rename from Assets/Scripts.meta rename to Assets/_Project/Scripts/Legacy.meta diff --git a/Assets/Scripts/ArrowManager.cs b/Assets/_Project/Scripts/Legacy/ArrowManager.cs similarity index 100% rename from Assets/Scripts/ArrowManager.cs rename to Assets/_Project/Scripts/Legacy/ArrowManager.cs diff --git a/Assets/Scripts/ArrowManager.cs.meta b/Assets/_Project/Scripts/Legacy/ArrowManager.cs.meta similarity index 100% rename from Assets/Scripts/ArrowManager.cs.meta rename to Assets/_Project/Scripts/Legacy/ArrowManager.cs.meta diff --git a/Assets/Scripts/BGMManager.cs b/Assets/_Project/Scripts/Legacy/BGMManager.cs similarity index 100% rename from Assets/Scripts/BGMManager.cs rename to Assets/_Project/Scripts/Legacy/BGMManager.cs diff --git a/Assets/Scripts/BGMManager.cs.meta b/Assets/_Project/Scripts/Legacy/BGMManager.cs.meta similarity index 100% rename from Assets/Scripts/BGMManager.cs.meta rename to Assets/_Project/Scripts/Legacy/BGMManager.cs.meta diff --git a/Assets/Scripts/CameraFollow.cs b/Assets/_Project/Scripts/Legacy/CameraFollow.cs similarity index 100% rename from Assets/Scripts/CameraFollow.cs rename to Assets/_Project/Scripts/Legacy/CameraFollow.cs diff --git a/Assets/Scripts/CameraFollow.cs.meta b/Assets/_Project/Scripts/Legacy/CameraFollow.cs.meta similarity index 100% rename from Assets/Scripts/CameraFollow.cs.meta rename to Assets/_Project/Scripts/Legacy/CameraFollow.cs.meta diff --git a/Assets/Scripts/DayBasedWavePresets.cs b/Assets/_Project/Scripts/Legacy/DayBasedWavePresets.cs similarity index 100% rename from Assets/Scripts/DayBasedWavePresets.cs rename to Assets/_Project/Scripts/Legacy/DayBasedWavePresets.cs diff --git a/Assets/Scripts/DayBasedWavePresets.cs.meta b/Assets/_Project/Scripts/Legacy/DayBasedWavePresets.cs.meta similarity index 100% rename from Assets/Scripts/DayBasedWavePresets.cs.meta rename to Assets/_Project/Scripts/Legacy/DayBasedWavePresets.cs.meta diff --git a/Assets/Scripts/DayBasedWaveSystem.cs b/Assets/_Project/Scripts/Legacy/DayBasedWaveSystem.cs similarity index 100% rename from Assets/Scripts/DayBasedWaveSystem.cs rename to Assets/_Project/Scripts/Legacy/DayBasedWaveSystem.cs diff --git a/Assets/Scripts/DayBasedWaveSystem.cs.meta b/Assets/_Project/Scripts/Legacy/DayBasedWaveSystem.cs.meta similarity index 100% rename from Assets/Scripts/DayBasedWaveSystem.cs.meta rename to Assets/_Project/Scripts/Legacy/DayBasedWaveSystem.cs.meta diff --git a/Assets/Scripts/DayCounterSystem.cs b/Assets/_Project/Scripts/Legacy/DayCounterSystem.cs similarity index 100% rename from Assets/Scripts/DayCounterSystem.cs rename to Assets/_Project/Scripts/Legacy/DayCounterSystem.cs diff --git a/Assets/Scripts/DayCounterSystem.cs.meta b/Assets/_Project/Scripts/Legacy/DayCounterSystem.cs.meta similarity index 100% rename from Assets/Scripts/DayCounterSystem.cs.meta rename to Assets/_Project/Scripts/Legacy/DayCounterSystem.cs.meta diff --git a/Assets/Scripts/DraggableResource.cs b/Assets/_Project/Scripts/Legacy/DraggableResource.cs similarity index 100% rename from Assets/Scripts/DraggableResource.cs rename to Assets/_Project/Scripts/Legacy/DraggableResource.cs diff --git a/Assets/Scripts/DraggableResource.cs.meta b/Assets/_Project/Scripts/Legacy/DraggableResource.cs.meta similarity index 100% rename from Assets/Scripts/DraggableResource.cs.meta rename to Assets/_Project/Scripts/Legacy/DraggableResource.cs.meta diff --git a/Assets/Scripts/Enemy.cs b/Assets/_Project/Scripts/Legacy/Enemy.cs similarity index 58% rename from Assets/Scripts/Enemy.cs rename to Assets/_Project/Scripts/Legacy/Enemy.cs index a43fa0b..03aafba 100644 --- a/Assets/Scripts/Enemy.cs +++ b/Assets/_Project/Scripts/Legacy/Enemy.cs @@ -8,42 +8,42 @@ public enum EnemyDestroyType { Kill = 0, Arrive } public class Enemy : MonoBehaviour { [Header("Basic Settings")] - [SerializeField] public int gold = 10; // Àû »ç¸Á½Ã ȹµæ °ñµå - [SerializeField] public int expValue = 20; // Àû »ç¸Á½Ã ȹµæ °æÇèÄ¡ + [SerializeField] public int gold = 10; // ì � 사ë§�시 íš�ë“� 골드 + [SerializeField] public int expValue = 20; // ì � 사ë§�시 íš�ë“� 경험치 [Header("Target Selection")] - [SerializeField, Tooltip("Ÿ°Ù ÅÂ±× ¿ì¼±¼øÀ§ (¼ø¼­´ë·Î °Ë»ö)")] - public string[] targetTagPriority = { "Goods", "Food", "Human" }; // Ÿ°Ù ÅÂ±× ¿ì¼±¼øÀ§ - [SerializeField, Tooltip("Ÿ°Ù °Ë»ö ¹üÀ§")] - private float targetSearchRadius = 10f; // Ÿ°Ù °Ë»ö ¹üÀ§ - [SerializeField, Tooltip("Ÿ°Ù °»½Å ÁÖ±â (ÃÊ)")] - private float targetUpdateInterval = 1f; // Ÿ°Ù °»½Å ÁÖ±â - [SerializeField, Tooltip("±âº» Ÿ°Ù ű×")] - private string defaultTargetTag = "Target"; // ±âº» Ÿ°Ù ÅÂ±× + [SerializeField, Tooltip("타겟 태그 우선순위 (순서대로 검색)")] + public string[] targetTagPriority = { "Goods", "Food", "Human" }; // 타겟 태그 우선순위 + [SerializeField, Tooltip("타겟 검색 범위")] + private float targetSearchRadius = 30f; // 타겟 검색 범위 + [SerializeField, Tooltip("타겟 갱신 주기 (ì´ˆ)")] + private float targetUpdateInterval = 1f; // 타겟 갱신 주기 + [SerializeField, Tooltip("기본 타겟 태그")] + private string defaultTargetTag = "Target"; // 기본 타겟 태그 [Header("Attack Settings")] - [SerializeField] private bool hasAttack = true; // °ø°Ý ±â´É Ȱ¼ºÈ­ ¿©ºÎ + [SerializeField] private bool hasAttack = true; // 공격 기능 활성화 여부 [Header("Isometric Settings")] - [SerializeField] private bool useIsometricPosition = true; // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ »ç¿ë ¿©ºÎ + [SerializeField] private bool useIsometricPosition = true; // ì�´ì†Œë©”트릭 위치 사용 여부 [Header("Debug")] - [SerializeField] private bool debugMode = false; // µð¹ö±× ¸ðµå + [SerializeField] private bool debugMode = false; // 디버그 모드 - private Transform target; // ÇöÀç Ÿ°Ù + private Transform target; // 현재 타겟 private NavMeshAgent navMeshAgent; private EnemySpawner enemySpawner; private EnemyHP enemyHP; private EnemyAttack enemyAttack; - private EnemyDirectionFlipper directionFlipper; // ¹æÇâ Àüȯ ÄÄÆ÷³ÍÆ® ÂüÁ¶ - private IsometricPositionHandler isometricPosition; // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ Çڵ鷯 + private EnemyDirectionFlipper directionFlipper; // ë°©í–¥ 전환 ì»´í�¬ë„ŒíЏ 참조 + private IsometricPositionHandler isometricPosition; // ì�´ì†Œë©”트릭 위치 핸들러 private Vector3 spawnOffset = Vector3.zero; private Transform customSpawnPoint = null; - private string targetTag = "Target"; // ÇöÀç »ç¿ë ÁßÀΠŸ°Ù ÅÂ±× - private float lastTargetSearchTime; // ¸¶Áö¸· Ÿ°Ù °Ë»ö ½Ã°£ - private bool isSearchingForTarget = false; // Ÿ°Ù °Ë»ö Áß ¿©ºÎ(Áߺ¹ °Ë»ö ¹æÁö) + private string targetTag = "Target"; // 현재 사용 중ì�¸ 타겟 태그 + private float lastTargetSearchTime; // 마지막 타겟 검색 시간 + private bool isSearchingForTarget = false; // 타겟 검색 중 여부(중복 검색 ë°©ì§€) - // ÇöÀç Ÿ°Ù¿¡ ´ëÇÑ Á¢±ÙÀÚ Ãß°¡ + // 현재 타겟ì—� 대한 ì ‘ê·¼ìž� 추가 public Transform CurrentTarget => target; public string TargetTag => targetTag; public int GoldValue => gold; @@ -51,24 +51,24 @@ public class Enemy : MonoBehaviour private void Awake() { - // ÇÊ¿äÇÑ ÄÄÆ÷³ÍÆ® °¡Á®¿À±â + // 필요한 ì»´í�¬ë„ŒíЏ 가져오기 enemyHP = GetComponent(); enemyAttack = GetComponent(); - // °ø°Ý ÄÄÆ÷³ÍÆ®°¡ ¾øÀ¸¸é¼­ °ø°Ý ±â´ÉÀÌ È°¼ºÈ­µÈ °æ¿ì, ÄÄÆ÷³ÍÆ® Ãß°¡ + // 공격 ì»´í�¬ë„ŒíŠ¸ê°€ 없으면서 공격 기능ì�´ 활성화ë�œ 경우, ì»´í�¬ë„ŒíЏ 추가 if (hasAttack && enemyAttack == null) { enemyAttack = gameObject.AddComponent(); } - // ¹æÇâ Àüȯ ÄÄÆ÷³ÍÆ® È®ÀÎ ¹× Ãß°¡ + // ë°©í–¥ 전환 ì»´í�¬ë„ŒíЏ 확ì�¸ ë°� 추가 directionFlipper = GetComponent(); if (directionFlipper == null) { directionFlipper = gameObject.AddComponent(); } - // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ Çڵ鷯 È®ÀÎ ¹× Ãß°¡ + // ì�´ì†Œë©”트릭 위치 핸들러 확ì�¸ ë°� 추가 if (useIsometricPosition) { isometricPosition = GetComponent(); @@ -79,16 +79,16 @@ private void Awake() } } - // Update ¸Þ¼­µå¿¡¼­ ´õ Àû±ØÀûÀ¸·Î Ÿ°ÙÀ» ãµµ·Ï ¼öÁ¤ + // Update 메서드ì—�서 ë�” ì �ê·¹ì �으로 타겟ì�„ ì°¾ë�„ë¡� 수정 private void Update() { - // Ÿ°ÙÀÌ ¾ø°Å³ª À¯È¿ÇÏÁö ¾ÊÀº °æ¿ì »õ Ÿ°Ù ã±â + // 타겟ì�´ 없거나 유효하지 않ì�€ 경우 새 타겟 찾기 if ((target == null || (TargetManager.Instance != null && !TargetManager.Instance.IsTargetValid(target))) && !isSearchingForTarget) { - // Ÿ°ÙÀÌ ¾ø´Â °æ¿ì ´õ ºü¸£°Ô °Ë»ö + // 타겟ì�´ 없는 경우 ë�” 빠르게 검색 float interval = target == null ? targetUpdateInterval * 0.5f : targetUpdateInterval; - // ¸¶Áö¸· °Ë»öÀ¸·ÎºÎÅÍ ÀÏÁ¤ ½Ã°£ÀÌ Áö³µ´ÂÁö È®ÀÎ + // 마지막 검색으로부터 ì�¼ì • 시간ì�´ 지났는지 확ì�¸ if (Time.time - lastTargetSearchTime >= interval) { SearchForNewTarget(); @@ -114,10 +114,10 @@ public void SetTargetTag(string tag) } } - // Ÿ°Ù ÅÂ±× ¿ì¼±¼øÀ§ ¹è¿­ °¡Á®¿À±â + // 타겟 태그 우선순위 ë°°ì—´ 가져오기 public string[] GetTargetTagPriority() { - // ºñ¾îÀÖÀ¸¸é ±âº» ÅÂ±× ¹Ýȯ + // 비어있으면 기본 태그 반환 if (targetTagPriority == null || targetTagPriority.Length == 0) { return new string[] { defaultTargetTag }; @@ -125,26 +125,23 @@ public string[] GetTargetTagPriority() return targetTagPriority; } - // Ÿ°Ù °Ë»ö ¹üÀ§ °¡Á®¿À±â + // 타겟 검색 범위 가져오기 public float GetTargetSearchRadius() { return targetSearchRadius; } - // Ÿ°ÙÀ» º¯°æÇÏ´Â ¸Þ¼­µå + // 타겟ì�„ 변경하는 메서드 public void SetTarget(Transform newTarget) { if (newTarget != null && newTarget != target) { target = newTarget; - // NavMeshAgent °æ·Î Àç¼³Á¤ - if (navMeshAgent != null && navMeshAgent.isActiveAndEnabled) - { - navMeshAgent.SetDestination(target.position); - } + // NavMeshAgent 경로 재설정 + TrySetDestination(target.position); - // ¹æÇâ Àüȯ ÄÄÆ÷³ÍÆ®°¡ ÀÖÀ¸¸é Ÿ°Ù ¹æÇâÀ¸·Î ¼³Á¤ + // ë°©í–¥ 전환 ì»´í�¬ë„ŒíŠ¸ê°€ 있으면 타겟 방향으로 설정 if (directionFlipper != null) { directionFlipper.SetFacingDirection(target.position); @@ -162,7 +159,7 @@ public void Setup(EnemySpawner spawner, Transform target) enemySpawner = spawner; this.target = target; - // NavMeshAgent ¼³Á¤ + // NavMeshAgent 설정 navMeshAgent = GetComponent(); if (navMeshAgent != null) { @@ -174,44 +171,44 @@ public void Setup(EnemySpawner spawner, Transform target) Debug.LogError("NavMeshAgent component not found on enemy!"); } - // ½ºÆù À§Ä¡ ¼³Á¤ + // 스í�° 위치 설정 SetSpawnPosition(); - // TargetManager À̺¥Æ® ±¸µ¶ + // TargetManager ì�´ë²¤íЏ 구ë�… if (TargetManager.Instance != null) { TargetManager.Instance.OnTargetAdded += HandleTargetAdded; TargetManager.Instance.OnTargetRemoved += HandleTargetRemoved; } - // Ãʱâ Ÿ°ÙÀÌ ¾øÀ¸¸é »õ Ÿ°Ù ã±â + // 초기 타겟ì�´ 없으면 새 타겟 찾기 if (target == null) { SearchForNewTarget(); } else { - // Ãʱâ Ÿ°ÙÀÌ ÀÖÀ¸¸é ÇØ´ç ÅÂ±× ÀúÀå + // 초기 타겟ì�´ 있으면 해당 태그 저장 if (target != null) { targetTag = target.tag; } } - // ¹æÇâ Àüȯ ¼³Á¤ (Ãʱ⠹æÇâ ¼³Á¤) + // ë°©í–¥ 전환 설정 (초기 ë°©í–¥ 설정) if (target != null && directionFlipper != null) { directionFlipper.SetFacingDirection(target.position); } - // À̵¿ ÄÚ·çÆ¾ ½ÃÀÛ + // ì�´ë�™ 코루틴 시작 StartCoroutine(OnMoveWithDirectionUpdate()); } - // ½ºÆù À§Ä¡¸¦ ¼³Á¤ + // 스í�° 위치를 설정 private void SetSpawnPosition() { - // ±âº» ½ºÆù À§Ä¡ °¡Á®¿À±â + // 기본 스í�° 위치 가져오기 Vector3 spawnPosition; if (customSpawnPoint != null) { @@ -222,53 +219,60 @@ private void SetSpawnPosition() spawnPosition = enemySpawner.GetSpawnPosition(); } - // °³º° ¿ÀÇÁ¼Â Àû¿ë + // 개별 오프셋 ì �ìš© spawnPosition += spawnOffset; - // NavMesh À§Ä¡·Î Á¶Á¤ (°¡Àå °¡±î¿î NavMesh ÁöÁ¡ ã±â) + // NavMesh 위치로 ì¡°ì • (가장 가까운 NavMesh ì§€ì � 찾기) NavMeshHit hit; if (NavMesh.SamplePosition(spawnPosition, out hit, 5f, NavMesh.AllAreas)) { - // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ Çڵ鷯 »ç¿ë ¿©ºÎ¿¡ µû¶ó ´Ù¸£°Ô ó¸® + Vector3 navMeshPosition = hit.position; + + if (navMeshAgent != null && navMeshAgent.isActiveAndEnabled) + { + navMeshAgent.Warp(navMeshPosition); + } + + // ì�´ì†Œë©”트릭 위치 핸들러 사용 여부ì—� ë”°ë�¼ 다르게 처리 if (isometricPosition != null) { - isometricPosition.SetPosition(hit.position); + isometricPosition.SetPosition(navMeshPosition); } else { - // ¼öµ¿À¸·Î z À§Ä¡ Á¶Á¤ - Vector3 position = hit.position; + // 수ë�™ìœ¼ë¡œ z 위치 ì¡°ì • + Vector3 position = navMeshPosition; position.z = position.y; transform.position = position; } } else { - Debug.LogWarning("NavMesh ÁöÁ¡À» ãÀ» ¼ö ¾ø½À´Ï´Ù. ¿ø·¡ À§Ä¡¿¡ ½ºÆùµË´Ï´Ù."); + Debug.LogWarning("NavMesh ì§€ì �ì�„ ì°¾ì�„ 수 없습니다. ì›�래 위치ì—� 스í�°ë�©ë‹ˆë‹¤."); - // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ Çڵ鷯 »ç¿ë ¿©ºÎ¿¡ µû¶ó ´Ù¸£°Ô ó¸® + // ì�´ì†Œë©”트릭 위치 핸들러 사용 여부ì—� ë”°ë�¼ 다르게 처리 if (isometricPosition != null) { isometricPosition.SetPosition(spawnPosition); } else { - // ¼öµ¿À¸·Î z À§Ä¡ Á¶Á¤ + // 수ë�™ìœ¼ë¡œ z 위치 ì¡°ì • spawnPosition.z = spawnPosition.y; transform.position = spawnPosition; } } } - // Ÿ°ÙÀÌ Ãß°¡µÇ¾úÀ» ¶§ È£ÃâµÇ´Â Çڵ鷯 + // 타겟ì�´ 추가ë�˜ì—ˆì�„ 때 호출ë�˜ëŠ” 핸들러 private void HandleTargetAdded(string tag, Transform newTarget) { - // ÇöÀç Ÿ°ÙÀÌ ¾ø´Â °æ¿ì + // 현재 타겟ì�´ 없는 경우 if (target == null) { SearchForNewTarget(); } - // ÇöÀç Ÿ°ÙÀÌ À¯È¿ÇÏÁö ¾Ê°í, Ãß°¡µÈ Ÿ°ÙÀÇ Å±װ¡ ¿ì¼±¼øÀ§¿¡ ÀÖ´Â °æ¿ì + // 현재 타겟ì�´ 유효하지 않고, 추가ë�œ 타겟ì�˜ 태그가 우선순위ì—� 있는 경우 else if (!TargetManager.Instance.IsTargetValid(target)) { string[] priorities = GetTargetTagPriority(); @@ -276,7 +280,7 @@ private void HandleTargetAdded(string tag, Transform newTarget) { if (priorities[i] == tag) { - // ÇöÀç ű׺¸´Ù ³ôÀº ¿ì¼±¼øÀ§¸é Áï½Ã Ÿ°Ù º¯°æ + // 현재 태그보다 높ì�€ 우선순위면 즉시 타겟 변경 if (i < System.Array.IndexOf(priorities, targetTag)) { SearchForNewTarget(); @@ -287,48 +291,48 @@ private void HandleTargetAdded(string tag, Transform newTarget) } } - // Ÿ°ÙÀÌ Á¦°ÅµÇ¾úÀ» ¶§ È£ÃâµÇ´Â Çڵ鷯 + // 타겟ì�´ 제거ë�˜ì—ˆì�„ 때 호출ë�˜ëŠ” 핸들러 private void HandleTargetRemoved(string tag, Transform removedTarget) { - // ÇöÀç Ÿ°ÙÀÌ Á¦°ÅµÈ Ÿ°ÙÀÎ °æ¿ì »õ Ÿ°Ù ã±â + // 현재 타겟ì�´ 제거ë�œ 타겟ì�¸ 경우 새 타겟 찾기 if (target == removedTarget) { SearchForNewTarget(); } - // ¶Ç´Â ÇöÀç Ÿ°ÙÀÇ ÅÂ±×¿Í °°Àº ű×À̰í, ÇØ´ç ű×ÀÇ ¿ÀºêÁ§Æ®°¡ ´õ ÀÌ»ó ¾ø´Â °æ¿ì + // ë˜�는 현재 타겟ì�˜ 태그와 ê°™ì�€ 태그ì�´ê³ , 해당 태그ì�˜ 오브ì �트가 ë�” ì�´ìƒ� 없는 경우 else if (tag == targetTag && TargetManager.Instance.GetTargetCountForTag(tag) == 0) { - // ´ÙÀ½ ¿ì¼±¼øÀ§ ű׷ΠŸ°Ù ã±â + // 다ì�Œ 우선순위 태그로 타겟 찾기 SearchForNewTarget(); } } - // SearchForNewTarget ¸Þ¼­µå ¼öÁ¤ + // SearchForNewTarget 메서드 수정 private void SearchForNewTarget() { - // Áߺ¹ °Ë»ö ¹æÁö + // 중복 검색 ë°©ì§€ if (isSearchingForTarget) return; isSearchingForTarget = true; - // ¸¶Áö¸· °Ë»ö ½Ã°£ °»½Å + // 마지막 검색 시간 갱신 lastTargetSearchTime = Time.time; Transform newTarget = null; - // ±âº» °Ë»ö ¹üÀ§·Î ½Ãµµ + // 기본 검색 범위로 시ë�„ float searchRadius = targetSearchRadius; - // TargetManager¸¦ ÅëÇØ ¿ì¼±¼øÀ§º°·Î Ÿ°Ù ã±â + // TargetManager를 통해 우선순위별로 타겟 찾기 if (TargetManager.Instance != null) { - // ÇÁ¸®ÆÕÀÇ ¼³Á¤µÈ Ÿ°Ù ÅÂ±× ¿ì¼±¼øÀ§ »ç¿ë + // 프리팹ì�˜ 설정ë�œ 타겟 태그 우선순위 사용 newTarget = TargetManager.Instance.FindTargetByPriority( GetTargetTagPriority(), transform.position, searchRadius ); - // ãÁö ¸øÇß´Ù¸é °Ë»ö ¹üÀ§¸¦ 2¹è·Î ´Ã·Á¼­ Àç½Ãµµ + // 찾지 못했다면 검색 범위를 2배로 늘려서 재시ë�„ if (newTarget == null) { searchRadius *= 2; @@ -339,7 +343,7 @@ private void SearchForNewTarget() ); } - // ±×·¡µµ ãÁö ¸øÇß´Ù¸é Àüü ¾À¿¡¼­ °Ë»ö (Á¦ÇÑ ¾øÀ½) + // 그래ë�„ 찾지 못했다면 ì „ì²´ 씬ì—�서 검색 (제한 ì—†ì�Œ) if (newTarget == null) { newTarget = TargetManager.Instance.FindTargetByPriority( @@ -349,37 +353,37 @@ private void SearchForNewTarget() ); } - // ãÀº Ÿ°ÙÀÇ ÅÂ±× ÀúÀå (³ªÁß¿¡ ÂüÁ¶¿ë) + // ì°¾ì�€ 타겟ì�˜ 태그 저장 (나중ì—� 참조용) if (newTarget != null) { targetTag = newTarget.tag; } - // ¿©ÀüÈ÷ Ÿ°ÙÀ» ãÁö ¸øÇß´Ù¸é, ´ÙÀ½ °Ë»ö ½Ã°£À» ¾Õ´ç±è + // 여전히 타겟ì�„ 찾지 못했다면, 다ì�Œ 검색 시간ì�„ 앞당김 else { lastTargetSearchTime = Time.time - (targetUpdateInterval * 0.8f); } } - // Ÿ°ÙÀ» ã¾ÒÀ¸¸é ¼³Á¤ + // 타겟ì�„ 찾았으면 설정 if (newTarget != null) { SetTarget(newTarget); if (debugMode) { - Debug.Log($"Àû {gameObject.name}ÀÌ(°¡) »õ Ÿ°Ù ãÀ½: {newTarget.name} (ű×: {newTarget.tag})"); + Debug.Log($"ì � {gameObject.name}ì�´(ê°€) 새 타겟 ì°¾ì�Œ: {newTarget.name} (태그: {newTarget.tag})"); } } else if (debugMode) { - Debug.LogWarning($"Àû {gameObject.name}ÀÌ(°¡) Ÿ°ÙÀ» ãÁö ¸øÇß½À´Ï´Ù! ´õ ºü¸£°Ô Àç°Ë»öÇÕ´Ï´Ù."); + Debug.LogWarning($"ì � {gameObject.name}ì�´(ê°€) 타겟ì�„ 찾지 못했습니다! ë�” 빠르게 재검색합니다."); } isSearchingForTarget = false; } private void OnDisable() { - // TargetManager À̺¥Æ® ±¸µ¶ ÇØÁ¦ + // TargetManager ì�´ë²¤íЏ 구ë�… í•´ì œ if (TargetManager.Instance != null) { TargetManager.Instance.OnTargetAdded -= HandleTargetAdded; @@ -387,7 +391,7 @@ private void OnDisable() } } - // Enemy Ŭ·¡½ºÀÇ OnMoveWithDirectionUpdate ÄÚ·çÆ¾ ¼öÁ¤ + // Enemy í�´ëž˜ìФì�˜ OnMoveWithDirectionUpdate 코루틴 수정 private IEnumerator OnMoveWithDirectionUpdate() { int stuckCounter = 0; @@ -395,75 +399,64 @@ private IEnumerator OnMoveWithDirectionUpdate() while (true) { - // Ÿ°ÙÀÌ ¾ø°Å³ª À¯È¿ÇÏÁö ¾ÊÀº °æ¿ì, ´õ Àû±ØÀûÀ¸·Î »õ Ÿ°Ù ã±â + // 타겟ì�´ 없거나 유효하지 않ì�€ 경우, ë�” ì �ê·¹ì �으로 새 타겟 찾기 if (target == null || (TargetManager.Instance != null && !TargetManager.Instance.IsTargetValid(target))) { - // Áï½Ã »õ Ÿ°Ù ã±â ½Ãµµ - SearchForNewTarget(targetSearchRadius * 2); // ´õ ³ÐÀº ¹üÀ§·Î °Ë»ö + // 즉시 새 타겟 찾기 시ë�„ + SearchForNewTarget(targetSearchRadius * 2); // ë�” ë„“ì�€ 범위로 검색 - // ±×·¡µµ Ÿ°ÙÀÌ ¾ø´Ù¸é + // 그래ë�„ 타겟ì�´ 없다면 if (target == null) { - // ¹æÇâÀ» ·£´ýÇÏ°Ô º¯°æÇÏ¿© Á¦ÀÚ¸® ¸Éµ¹±â ¹æÁö + // ë°©í–¥ì�„ ëžœë�¤í•˜ê²Œ 변경하여 ì œìž�리 ë§´ë�Œê¸° ë°©ì§€ Vector2 randomDirection = Random.insideUnitCircle.normalized; Vector3 tempDestination = transform.position + new Vector3(randomDirection.x, randomDirection.y, 0) * 3f; - if (navMeshAgent != null && navMeshAgent.isActiveAndEnabled) - { - NavMeshHit hit; - if (NavMesh.SamplePosition(tempDestination, out hit, 5f, NavMesh.AllAreas)) - { - navMeshAgent.SetDestination(hit.position); - } - } + TrySetDestination(tempDestination); - Debug.Log("Ÿ°ÙÀ» ãÁö ¸øÇØ ·£´ý À̵¿ÇÕ´Ï´Ù."); + Debug.Log("타겟ì�„ 찾지 못해 ëžœë�¤ ì�´ë�™í•©ë‹ˆë‹¤."); yield return new WaitForSeconds(1f); continue; } } - // Ÿ°ÙÀÌ ÀÖÀ¸¸é NavMeshAgent·Î À̵¿ + // 타겟ì�´ 있으면 NavMeshAgent로 ì�´ë�™ if (target != null && navMeshAgent != null && navMeshAgent.isActiveAndEnabled) { - navMeshAgent.SetDestination(target.position); + TrySetDestination(target.position); - // À̵¿ ¹æÇâ¿¡ µû¶ó ½ºÇÁ¶óÀÌÆ® ¹æÇâ Àüȯ + // ì�´ë�™ ë°©í–¥ì—� ë”°ë�¼ 스프ë�¼ì�´íЏ ë°©í–¥ 전환 if (directionFlipper != null) { Vector3 moveDirection = navMeshAgent.velocity; if (moveDirection.sqrMagnitude > 0.01f) { - // À̵¿ ¹æÇâÀ» ±âÁØÀ¸·Î ¹æÇâ Àüȯ + // ì�´ë�™ ë°©í–¥ì�„ 기준으로 ë°©í–¥ 전환 directionFlipper.SetFacingDirection(transform.position + moveDirection); } } - // Á¦ÀÚ¸®¿¡ °¤Çû´ÂÁö È®ÀÎ + // ì œìž�리ì—� 갇혔는지 확ì�¸ if (Vector3.Distance(transform.position, lastPosition) < 0.05f) { stuckCounter++; - // ÀÏÁ¤ ½Ã°£µ¿¾È Á¦ÀÚ¸®¿¡ °¤ÇûÀ¸¸é - if (stuckCounter > 30) // ¾à 1ÃÊ µ¿¾È Á¦ÀÚ¸®¿¡ ÀÖÀ¸¸é + // ì�¼ì • 시간ë�™ì•ˆ ì œìž�리ì—� 갇혔으면 + if (stuckCounter > 30) // 약 1ì´ˆ ë�™ì•ˆ ì œìž�리ì—� 있으면 { stuckCounter = 0; - // »õ Ÿ°Ù °Ë»ö °­Á¦ ½ÇÇà (´õ ³ÐÀº ¹üÀ§) + // 새 타겟 검색 ê°•ì œ 실행 (ë�” ë„“ì�€ 범위) SearchForNewTarget(targetSearchRadius * 3); - // ±×·¡µµ Ÿ°ÙÀÌ ¾øÀ¸¸é ·£´ý À̵¿ + // 그래ë�„ 타겟ì�´ 없으면 ëžœë�¤ ì�´ë�™ if (target == null) { Vector2 randomDirection = Random.insideUnitCircle.normalized; Vector3 tempDestination = transform.position + new Vector3(randomDirection.x, randomDirection.y, 0) * 5f; - NavMeshHit hit; - if (NavMesh.SamplePosition(tempDestination, out hit, 5f, NavMesh.AllAreas)) - { - navMeshAgent.SetDestination(hit.position); - } + TrySetDestination(tempDestination); - Debug.Log("Á¦ÀÚ¸®¿¡ °¤Çô ·£´ýÀ¸·Î À̵¿ÇÕ´Ï´Ù."); + Debug.Log("ì œìž�리ì—� 갇혀 ëžœë�¤ìœ¼ë¡œ ì�´ë�™í•©ë‹ˆë‹¤."); yield return new WaitForSeconds(1f); } } @@ -475,28 +468,30 @@ private IEnumerator OnMoveWithDirectionUpdate() lastPosition = transform.position; - // ¸ñÇ¥¿¡ µµ´ÞÇß´ÂÁö È®ÀÎ + // 목표ì—� ë�„달했는지 확ì�¸ float distanceToTarget = Vector3.Distance(transform.position, target.position); if (distanceToTarget < 0.5f) { - // ResourceObjectÀÎ °æ¿ì + // ResourceObjectì�¸ 경우 ResourceObject resource = target.GetComponent(); if (resource != null) { - // ¸®¼Ò½º ÆÄ±« ÈÄ Áï½Ã ´ÙÀ½ Ÿ°Ù °Ë»ö (´õ ³ÐÀº ¹üÀ§) - yield return new WaitForSeconds(0.5f); // Àá½Ã ´ë±â + // 리소스 파괴 후 즉시 다ì�Œ 타겟 검색 (ë�” ë„“ì�€ 범위) + yield return new WaitForSeconds(0.5f); // 잠시 대기 SearchForNewTarget(targetSearchRadius * 2); continue; } else { - - yield break; + target = null; + SearchForNewTarget(targetSearchRadius * 2); + yield return new WaitForSeconds(0.25f); + continue; } } } - // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ Çڵ鷯°¡ ¾ø´Â °æ¿ì ¼öµ¿À¸·Î Z À§Ä¡ Á¶Á¤ + // ì�´ì†Œë©”트릭 위치 핸들러가 없는 경우 수ë�™ìœ¼ë¡œ Z 위치 ì¡°ì • if (isometricPosition == null && useIsometricPosition) { Vector3 position = transform.position; @@ -508,71 +503,103 @@ private IEnumerator OnMoveWithDirectionUpdate() } } - // ¹üÀ§¸¦ ¸Å°³º¯¼ö·Î ¹Þ´Â »õ Ÿ°Ù ã±â ¸Þ¼­µå + // 범위를 매개변수로 받는 새 타겟 찾기 메서드 private void SearchForNewTarget(float searchRadius = -1) { - // Áߺ¹ °Ë»ö ¹æÁö + // 중복 검색 ë°©ì§€ if (isSearchingForTarget) return; isSearchingForTarget = true; - // ±âº» °Ë»ö ¹üÀ§ »ç¿ë ¿©ºÎ + // 기본 검색 범위 사용 여부 float actualRadius = searchRadius > 0 ? searchRadius : targetSearchRadius; - // ¸¶Áö¸· °Ë»ö ½Ã°£ °»½Å + // 마지막 검색 시간 갱신 lastTargetSearchTime = Time.time; Transform newTarget = null; - // TargetManager¸¦ ÅëÇØ ¿ì¼±¼øÀ§º°·Î Ÿ°Ù ã±â + // TargetManager를 통해 우선순위별로 타겟 찾기 if (TargetManager.Instance != null) { - // ÇÁ¸®ÆÕÀÇ ¼³Á¤µÈ Ÿ°Ù ÅÂ±× ¿ì¼±¼øÀ§ »ç¿ë + // 프리팹ì�˜ 설정ë�œ 타겟 태그 우선순위 사용 newTarget = TargetManager.Instance.FindTargetByPriority( GetTargetTagPriority(), transform.position, actualRadius ); - // ãÀº Ÿ°ÙÀÇ ÅÂ±× ÀúÀå (³ªÁß¿¡ ÂüÁ¶¿ë) + // ì°¾ì�€ 타겟ì�˜ 태그 저장 (나중ì—� 참조용) if (newTarget != null) { targetTag = newTarget.tag; - Debug.Log($"»õ Ÿ°Ù ãÀ½: {newTarget.name} (ű×: {targetTag}, °Å¸®: {Vector3.Distance(transform.position, newTarget.position)})"); + Debug.Log($"새 타겟 ì°¾ì�Œ: {newTarget.name} (태그: {targetTag}, 거리: {Vector3.Distance(transform.position, newTarget.position)})"); } else { - Debug.LogWarning($"Ÿ°ÙÀ» ãÁö ¸øÇß½À´Ï´Ù. °Ë»ö ¹üÀ§: {actualRadius}"); + Debug.LogWarning($"타겟ì�„ 찾지 못했습니다. 검색 범위: {actualRadius}"); } } - // Ÿ°ÙÀ» ã¾ÒÀ¸¸é ¼³Á¤ + // 타겟ì�„ 찾았으면 설정 if (newTarget != null) { SetTarget(newTarget); - // NavMeshAgent ¸®¼Â Ãß°¡ + // NavMeshAgent 리셋 추가 if (navMeshAgent != null && navMeshAgent.isActiveAndEnabled) { - navMeshAgent.ResetPath(); - navMeshAgent.SetDestination(newTarget.position); + TrySetDestination(newTarget.position); } } isSearchingForTarget = false; } + private bool TrySetDestination(Vector3 destination) + { + if (navMeshAgent == null || !navMeshAgent.isActiveAndEnabled) + { + return false; + } + + if (!navMeshAgent.isOnNavMesh) + { + NavMeshHit currentHit; + if (!NavMesh.SamplePosition(transform.position, out currentHit, 5f, NavMesh.AllAreas)) + { + if (debugMode) + { + Debug.LogWarning($"{name}: NavMesh 위ì—� 있지 않아 목ì �지를 설정할 수 없습니다."); + } + return false; + } + + navMeshAgent.Warp(currentHit.position); + } + + NavMeshHit destinationHit; + Vector3 finalDestination = destination; + if (NavMesh.SamplePosition(destination, out destinationHit, 3f, NavMesh.AllAreas)) + { + finalDestination = destinationHit.position; + } + + navMeshAgent.ResetPath(); + return navMeshAgent.SetDestination(finalDestination); + } + public void OnDie(EnemyDestroyType type) { if (enemySpawner == null) { Debug.LogError("EnemySpawner is not assigned! Check the Setup method."); - return; // NullReferenceException ¹æÁö + return; // NullReferenceException ë°©ì§€ } - // Ç÷¹ÀÌ¾î °æÇèÄ¡ ÂüÁ¶ °¡Á®¿À±â + // 플레ì�´ì–´ 경험치 참조 가져오기 PlayerExperience playerExperience = FindObjectOfType(); - // KILLÀÏ °æ¿ì °æÇèÄ¡ ºÎ¿© + // KILLì�¼ 경우 경험치 부여 if (type == EnemyDestroyType.Kill && playerExperience != null) { playerExperience.AddExperienceForEnemy(type, expValue); @@ -580,4 +607,4 @@ public void OnDie(EnemyDestroyType type) enemySpawner.DestroyEnemy(type, this, gold); } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Enemy.cs.meta b/Assets/_Project/Scripts/Legacy/Enemy.cs.meta similarity index 100% rename from Assets/Scripts/Enemy.cs.meta rename to Assets/_Project/Scripts/Legacy/Enemy.cs.meta diff --git a/Assets/Scripts/EnemyAttack.cs b/Assets/_Project/Scripts/Legacy/EnemyAttack.cs similarity index 55% rename from Assets/Scripts/EnemyAttack.cs rename to Assets/_Project/Scripts/Legacy/EnemyAttack.cs index 7a7bdd3..ea380d5 100644 --- a/Assets/Scripts/EnemyAttack.cs +++ b/Assets/_Project/Scripts/Legacy/EnemyAttack.cs @@ -8,89 +8,89 @@ public enum AttackType { None, Melee, Ranged } public class EnemyAttack : MonoBehaviour { [Header("Attack Settings")] - [SerializeField] private AttackType attackType = AttackType.Melee; // °ø°Ý À¯Çü - [SerializeField] private float attackRange = 1.5f; // °ø°Ý ¹üÀ§ - [SerializeField] private float attackRate = 1.0f; // ÃÊ´ç °ø°Ý Ƚ¼ö - [SerializeField] private float attackDamage = 10f; // °ø°Ý µ¥¹ÌÁö - [SerializeField] private LayerMask targetLayers; // ´ë»ó ·¹À̾î + [SerializeField] private AttackType attackType = AttackType.Melee; // 공격 유형 + [SerializeField] private float attackRange = 1.5f; // 공격 범위 + [SerializeField] private float attackRate = 1.0f; // 초당 공격 횟수 + [SerializeField] private float attackDamage = 10f; // 공격 ë�°ë¯¸ì§€ + [SerializeField] private LayerMask targetLayers; // 대ìƒ� ë ˆì�´ì–´ [Header("Ranged Attack Settings")] - [SerializeField] private GameObject projectilePrefab; // ¹ß»çü ÇÁ¸®ÆÕ (¿ø°Å¸® °ø°Ý¿ë) - [SerializeField] private Transform attackPoint; // ¹ß»ç À§Ä¡ + [SerializeField] private GameObject projectilePrefab; // 발사체 프리팹 (ì›�거리 공격용) + [SerializeField] private Transform attackPoint; // 발사 위치 [Header("Effects")] - [SerializeField] private GameObject attackEffect; // °ø°Ý È¿°ú - [SerializeField] private AudioClip attackSound; // °ø°Ý ¼Ò¸® + [SerializeField] private GameObject attackEffect; // 공격 효과 + [SerializeField] private AudioClip attackSound; // 공격 소리 [Header("Isometric Settings")] - [SerializeField] private bool useIsometricPosition = true; // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ »ç¿ë ¿©ºÎ - - // °ø°Ý ¼Óµµ °¨¼Ò È¿°ú °ü·Ã º¯¼ö - private float originalAttackRate; // ¿ø·¡ °ø°Ý ¼Óµµ - private bool isAttackSlowed = false; // °ø°Ý ¼Óµµ °¨¼Ò »óÅ - private float attackSlowTimer = 0f; // °ø°Ý ¼Óµµ °¨¼Ò ŸÀÌ¸Ó - private float currentAttackSlowAmount = 0f; // ÇöÀç Àû¿ëµÈ °ø°Ý ¼Óµµ °¨¼Ò ºñÀ² - - private float attackTimer = 0f; // °ø°Ý ŸÀÌ¸Ó - private Enemy enemy; // Enemy ÄÄÆ÷³ÍÆ® ÂüÁ¶ - private Transform currentTarget; // ÇöÀç °ø°Ý ´ë»ó - private AudioSource audioSource; // ¿Àµð¿À ¼Ò½º - private IsometricPositionHandler isometricPosition; // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ Çڵ鷯 - private bool isInitialized = false; // ÃʱâÈ­ ¿©ºÎ È®Àοë - - // Awake: ÃʱâÈ­ + [SerializeField] private bool useIsometricPosition = true; // ì�´ì†Œë©”트릭 위치 사용 여부 + + // 공격 ì†�ë�„ ê°�소 효과 관련 변수 + private float originalAttackRate; // ì›�래 공격 ì†�ë�„ + private bool isAttackSlowed = false; // 공격 ì†�ë�„ ê°�소 ìƒ�태 + private float attackSlowTimer = 0f; // 공격 ì†�ë�„ ê°�소 타ì�´ë¨¸ + private float currentAttackSlowAmount = 0f; // 현재 ì �ìš©ë�œ 공격 ì†�ë�„ ê°�소 비율 + + private float attackTimer = 0f; // 공격 타ì�´ë¨¸ + private Enemy enemy; // Enemy ì»´í�¬ë„ŒíЏ 참조 + private Transform currentTarget; // 현재 공격 대ìƒ� + private AudioSource audioSource; // 오디오 소스 + private IsometricPositionHandler isometricPosition; // ì�´ì†Œë©”트릭 위치 핸들러 + private bool isInitialized = false; // 초기화 여부 확ì�¸ìš© + + // Awake: 초기화 private void Awake() { enemy = GetComponent(); - // ¿Àµð¿À ¼Ò½º °¡Á®¿À±â ¶Ç´Â ÇÊ¿ä½Ã »ý¼º + // 오디오 소스 가져오기 ë˜�는 필요시 ìƒ�성 audioSource = GetComponent(); if (audioSource == null && attackSound != null) { audioSource = gameObject.AddComponent(); } - originalAttackRate = attackRate; // ¿ø·¡ °ø°Ý ¼Óµµ ÀúÀå + originalAttackRate = attackRate; // ì›�래 공격 ì†�ë�„ 저장 - // °ø°Ý ÁöÁ¡ÀÌ ¾øÀ¸¸é ÀÚ½ÅÀÇ À§Ä¡ »ç¿ë + // 공격 ì§€ì �ì�´ 없으면 ìž�ì‹ ì�˜ 위치 사용 if (attackPoint == null) { attackPoint = transform; } - // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ Çڵ鷯 È®ÀÎ + // ì�´ì†Œë©”트릭 위치 핸들러 확ì�¸ if (useIsometricPosition) { isometricPosition = GetComponent(); } } - // Start: ÃʱâÈ­ ¹× Ÿ°Ù ¼³Á¤ + // Start: 초기화 ë°� 타겟 설정 private void Start() { isInitialized = true; - // Enemy ÄÄÆ÷³ÍÆ®¿¡¼­ ÇöÀç Ÿ°ÙÀ» °¡Á®¿À±â ½Ãµµ + // Enemy ì»´í�¬ë„ŒíЏì—�서 현재 타겟ì�„ 가져오기 시ë�„ if (enemy != null && enemy.CurrentTarget != null) { currentTarget = enemy.CurrentTarget; } } - // Update: °ø°Ý ·ÎÁ÷ ó¸® + // Update: 공격 로ì§� 처리 private void Update() { if (!isInitialized) return; - // Ÿ°Ù È®ÀÎ ¹× °ø°Ý ½Ãµµ + // 타겟 확ì�¸ ë°� 공격 시ë�„ CheckTargetAndAttack(); - // °ø°Ý ¼Óµµ °¨¼Ò È¿°ú ŸÀÌ¸Ó ¾÷µ¥ÀÌÆ® + // 공격 ì†�ë�„ ê°�소 효과 타ì�´ë¨¸ ì—…ë�°ì�´íЏ if (isAttackSlowed) { attackSlowTimer -= Time.deltaTime; - // ŸÀ̸Ӱ¡ ³¡³ª¸é °ø°Ý ¼Óµµ º¹±¸ + // 타ì�´ë¨¸ê°€ ë��나면 공격 ì†�ë�„ 복구 if (attackSlowTimer <= 0) { ResetAttackRate(); @@ -98,41 +98,41 @@ private void Update() } } - // Ÿ°Ù È®ÀÎ ¹× °ø°Ý ½Ãµµ + // 타겟 확ì�¸ ë°� 공격 시ë�„ private void CheckTargetAndAttack() { - // Enemy ½ºÅ©¸³Æ®ÀÇ ÇöÀç Ÿ°Ù »ç¿ë (Ç×»ó Enemy¿¡¼­ Ÿ°ÙÀ» °ü¸®) + // Enemy 스í�¬ë¦½íЏì�˜ 현재 타겟 사용 (í•­ìƒ� Enemyì—�서 타겟ì�„ 관리) if (enemy != null && enemy.CurrentTarget != null) { currentTarget = enemy.CurrentTarget; } - // Ÿ°ÙÀÌ ¾ø°Å³ª À¯È¿ÇÏÁö ¾ÊÀºÁö È®ÀÎ + // 타겟ì�´ 없거나 유효하지 않ì�€ì§€ 확ì�¸ if (currentTarget == null || (TargetManager.Instance != null && !TargetManager.Instance.IsTargetValid(currentTarget))) { - return; // À¯È¿ÇÑ Å¸°ÙÀÌ ¾øÀ¸¸é Á¾·á + return; // 유효한 타겟ì�´ 없으면 종료 } - // Ÿ°Ù°úÀÇ °Å¸® °è»ê + // 타겟과ì�˜ 거리 계산 float distanceToTarget = Vector3.Distance(transform.position, currentTarget.position); - // °ø°Ý ¹üÀ§ ³»¿¡ ÀÖÀ¸¸é °ø°Ý + // 공격 범위 ë‚´ì—� 있으면 공격 if (distanceToTarget <= attackRange) { - // °ø°Ý ŸÀÌ¸Ó ¾÷µ¥ÀÌÆ® + // 공격 타ì�´ë¨¸ ì—…ë�°ì�´íЏ attackTimer += Time.deltaTime; - // °ø°Ý Áֱ⿡ µµ´ÞÇÏ¸é °ø°Ý + // 공격 주기ì—� ë�„달하면 공격 if (attackTimer >= 1f / attackRate) { - // °ø°Ý ½ÇÇà + // 공격 실행 Attack(currentTarget); attackTimer = 0f; } } } - // °ø°Ý ½ÇÇà + // 공격 실행 private void Attack(Transform target) { if (target == null) return; @@ -152,20 +152,20 @@ private void Attack(Transform target) } } - // ±ÙÁ¢ °ø°Ý + // 근접 공격 private void MeleeAttack(Transform target) { if (target == null) return; - // °ø°Ý È¿°ú Àç»ý + // 공격 효과 재ìƒ� if (attackEffect != null) { Vector3 effectPosition = attackPoint.position; - // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ Á¶Á¤ + // ì�´ì†Œë©”트릭 위치 ì¡°ì • if (isometricPosition != null) { - // ÀÌÆåÆ® »ý¼º ½Ã IsometricPositionHandler Ãß°¡ + // ì�´íŽ™íŠ¸ ìƒ�성 시 IsometricPositionHandler 추가 GameObject effect = Instantiate(attackEffect, effectPosition, Quaternion.identity); if (effect.GetComponent() == null) { @@ -174,7 +174,7 @@ private void MeleeAttack(Transform target) } else if (useIsometricPosition) { - // ¼öµ¿À¸·Î z À§Ä¡ Á¶Á¤ + // 수ë�™ìœ¼ë¡œ z 위치 ì¡°ì • effectPosition.z = effectPosition.y; Instantiate(attackEffect, effectPosition, Quaternion.identity); } @@ -184,133 +184,142 @@ private void MeleeAttack(Transform target) } } - // °ø°Ý ¼Ò¸® Àç»ý + // 공격 소리 재ìƒ� if (attackSound != null && audioSource != null) { audioSource.PlayOneShot(attackSound); } - // µ¥¹ÌÁö Àû¿ë ½Ãµµ (´Ù¾çÇÑ Å¸°Ù ´ëÀÀ) + // ë�°ë¯¸ì§€ ì �ìš© 시ë�„ (다양한 타겟 대ì�‘) bool damageApplied = false; - // ResourceObject ÄÄÆ÷³ÍÆ® È®ÀÎ + // ResourceObject ì»´í�¬ë„ŒíЏ 확ì�¸ ResourceObject resource = target.GetComponent(); if (resource != null) { resource.TakeDamage(attackDamage); - Debug.Log($"{gameObject.name}ÀÌ(°¡) {resource.ResourceName}¿¡ {attackDamage}ÀÇ µ¥¹ÌÁö¸¦ ÀÔÈû"); + Debug.Log($"{gameObject.name}ì�´(ê°€) {resource.ResourceName}ì—� {attackDamage}ì�˜ ë�°ë¯¸ì§€ë¥¼ 입힘"); damageApplied = true; } - // EnemyHP ÄÄÆ÷³ÍÆ® È®ÀÎ + // EnemyHP ì»´í�¬ë„ŒíЏ 확ì�¸ if (!damageApplied) { EnemyHP enemyHP = target.GetComponent(); if (enemyHP != null) { enemyHP.TakeDamage(attackDamage); - Debug.Log($"{gameObject.name}ÀÌ(°¡) {target.name}¿¡ {attackDamage}ÀÇ µ¥¹ÌÁö¸¦ ÀÔÈû (EnemyHP)"); + Debug.Log($"{gameObject.name}ì�´(ê°€) {target.name}ì—� {attackDamage}ì�˜ ë�°ë¯¸ì§€ë¥¼ 입힘 (EnemyHP)"); damageApplied = true; } } - // IDamageable ÀÎÅÍÆäÀ̽º È®ÀÎ (´Ù¸¥ ŸÀÔÀÇ ´ë»ó) + // IDamageable ì�¸í„°íŽ˜ì�´ìФ 확ì�¸ (다른 타입ì�˜ 대ìƒ�) if (!damageApplied) { var damageable = target.GetComponent(); if (damageable != null) { damageable.TakeDamage((int)attackDamage); - Debug.Log($"{gameObject.name}ÀÌ(°¡) {target.name}¿¡ {attackDamage}ÀÇ µ¥¹ÌÁö¸¦ ÀÔÈû (IDamageable)"); + Debug.Log($"{gameObject.name}ì�´(ê°€) {target.name}ì—� {attackDamage}ì�˜ ë�°ë¯¸ì§€ë¥¼ 입힘 (IDamageable)"); damageApplied = true; } } if (!damageApplied) { - Debug.LogWarning($"{target.name}¿¡´Â µ¥¹ÌÁö¸¦ ¹ÞÀ» ¼ö ÀÖ´Â ÄÄÆ÷³ÍÆ®°¡ ¾ø½À´Ï´Ù."); + Debug.LogWarning($"{target.name}ì—�는 ë�°ë¯¸ì§€ë¥¼ ë°›ì�„ 수 있는 ì»´í�¬ë„ŒíŠ¸ê°€ 없습니다."); } } - // ¿ø°Å¸® °ø°Ý + // ì›�거리 공격 private void RangedAttack(Transform target) { if (target == null) return; - // ¹ß»çü ÇÁ¸®ÆÕÀÌ ¾øÀ¸¸é ¸®ÅÏ + // 발사체 프리팹ì�´ 없으면 리턴 if (projectilePrefab == null) { - Debug.LogWarning("¹ß»çü ÇÁ¸®ÆÕÀÌ ¼³Á¤µÇÁö ¾Ê¾Ò½À´Ï´Ù."); + Debug.LogWarning("발사체 프리팹ì�´ 설정ë�˜ì§€ 않았습니다."); return; } - // °ø°Ý ¼Ò¸® Àç»ý + // 공격 소리 재ìƒ� if (attackSound != null && audioSource != null) { audioSource.PlayOneShot(attackSound); } - // ¹ß»ç À§Ä¡ °è»ê + // 발사 위치 계산 Vector3 spawnPosition = attackPoint.position; if (useIsometricPosition && isometricPosition == null) { spawnPosition.z = spawnPosition.y; } - // ¹ß»çü »ý¼º + // 발사체 ìƒ�성 GameObject projectile = Instantiate(projectilePrefab, spawnPosition, Quaternion.identity); - // ¹ß»çü°¡ ProjectileBase¸¦ »ó¼Ó¹Þ¾Ò´ÂÁö È®ÀÎ + ProjectileEnemy enemyProjectile = projectile.GetComponent(); + if (enemyProjectile != null) + { + enemyProjectile.Setup(target, attackDamage); + return; + } + ProjectileBase projectileBase = projectile.GetComponent(); if (projectileBase != null) { - // ¹ß»çü ÃʱâÈ­ (´ë»ó, µ¥¹ÌÁö) projectileBase.Setup(target, attackDamage); + return; } - else + + ProjectileBook projectileBook = projectile.GetComponent(); + if (projectileBook != null) { - // ´Ù¸¥ ŸÀÔÀÇ ¹ß»çü ó¸® (ÇÊ¿ä½Ã ±¸Çö) - Debug.LogWarning("¹ß»çü¿¡ ProjectileBase ÄÄÆ÷³ÍÆ®°¡ ¾ø½À´Ï´Ù."); - Destroy(projectile); + projectileBook.Setup(target, attackDamage); + return; } + + Debug.LogWarning($"{projectilePrefab.name}ì—� ì§€ì›�ë�˜ëŠ” projectile Setup ì»´í�¬ë„ŒíŠ¸ê°€ 없습니다."); } - // °ø°Ý ¼Óµµ °¨¼Ò È¿°ú Àû¿ë + // 공격 ì†�ë�„ ê°�소 효과 ì �ìš© public void ApplyAttackSlow(float slowAmount, float duration) { - // ÇöÀç Àû¿ëµÈ °¨¼Óº¸´Ù ´õ °­ÇÑ °¨¼ÓÀ̰ųª, °¨¼Ó È¿°ú°¡ °ð ³¡³¯ °æ¿ì¿¡¸¸ Àû¿ë + // 현재 ì �ìš©ë�œ ê°�ì†�보다 ë�” 강한 ê°�ì†�ì�´ê±°ë‚˜, ê°�ì†� 효과가 ê³§ ë��ë‚  경우ì—�ë§Œ ì �ìš© if (slowAmount > currentAttackSlowAmount || attackSlowTimer < 0.5f) { - // °¨¼Ó È¿°ú°¡ óÀ½ Àû¿ëµÇ¸é ¿ø·¡ ¼Óµµ ÀúÀå + // ê°�ì†� 효과가 처ì�Œ ì �ìš©ë�˜ë©´ ì›�래 ì†�ë�„ 저장 if (!isAttackSlowed) { originalAttackRate = attackRate; } - // »õ·Î¿î °¨¼Ó È¿°ú Àû¿ë (°ø°Ý ¼Óµµ °¨¼Ò = °ø°Ý ÁÖ±â Áõ°¡) + // 새로운 ê°�ì†� 효과 ì �ìš© (공격 ì†�ë�„ ê°�소 = 공격 주기 ì¦�ê°€) currentAttackSlowAmount = slowAmount; attackRate = originalAttackRate * (1 - slowAmount); attackSlowTimer = duration; isAttackSlowed = true; - Debug.Log($"{gameObject.name}ÀÇ °ø°Ý ¼Óµµ {slowAmount * 100}% °¨¼Ò (Áö¼Ó½Ã°£: {duration}ÃÊ)"); + Debug.Log($"{gameObject.name}ì�˜ 공격 ì†�ë�„ {slowAmount * 100}% ê°�소 (ì§€ì†�시간: {duration}ì´ˆ)"); } } - // °ø°Ý ¼Óµµ ¿ø·¡´ë·Î º¹±¸ + // 공격 ì†�ë�„ ì›�래대로 복구 public void ResetAttackRate() { attackRate = originalAttackRate; isAttackSlowed = false; currentAttackSlowAmount = 0f; - Debug.Log($"{gameObject.name}ÀÇ °ø°Ý ¼Óµµ º¹±¸"); + Debug.Log($"{gameObject.name}ì�˜ 공격 ì†�ë�„ 복구"); } - // ¿¡µðÅÍ¿¡¼­ °ø°Ý ¹üÀ§ ½Ã°¢È­ + // ì—�디터ì—�서 공격 범위 시ê°�í™” private void OnDrawGizmosSelected() { Gizmos.color = Color.red; Gizmos.DrawWireSphere(transform.position, attackRange); } -} \ No newline at end of file +} diff --git a/Assets/Scripts/EnemyAttack.cs.meta b/Assets/_Project/Scripts/Legacy/EnemyAttack.cs.meta similarity index 100% rename from Assets/Scripts/EnemyAttack.cs.meta rename to Assets/_Project/Scripts/Legacy/EnemyAttack.cs.meta diff --git a/Assets/Scripts/EnemyDirectionFlipper.cs b/Assets/_Project/Scripts/Legacy/EnemyDirectionFlipper.cs similarity index 100% rename from Assets/Scripts/EnemyDirectionFlipper.cs rename to Assets/_Project/Scripts/Legacy/EnemyDirectionFlipper.cs diff --git a/Assets/Scripts/EnemyDirectionFlipper.cs.meta b/Assets/_Project/Scripts/Legacy/EnemyDirectionFlipper.cs.meta similarity index 100% rename from Assets/Scripts/EnemyDirectionFlipper.cs.meta rename to Assets/_Project/Scripts/Legacy/EnemyDirectionFlipper.cs.meta diff --git a/Assets/Scripts/EnemyHP.cs b/Assets/_Project/Scripts/Legacy/EnemyHP.cs similarity index 100% rename from Assets/Scripts/EnemyHP.cs rename to Assets/_Project/Scripts/Legacy/EnemyHP.cs diff --git a/Assets/Scripts/EnemyHP.cs.meta b/Assets/_Project/Scripts/Legacy/EnemyHP.cs.meta similarity index 100% rename from Assets/Scripts/EnemyHP.cs.meta rename to Assets/_Project/Scripts/Legacy/EnemyHP.cs.meta diff --git a/Assets/Scripts/EnemyHPViewer.cs b/Assets/_Project/Scripts/Legacy/EnemyHPViewer.cs similarity index 100% rename from Assets/Scripts/EnemyHPViewer.cs rename to Assets/_Project/Scripts/Legacy/EnemyHPViewer.cs diff --git a/Assets/Scripts/EnemyHPViewer.cs.meta b/Assets/_Project/Scripts/Legacy/EnemyHPViewer.cs.meta similarity index 100% rename from Assets/Scripts/EnemyHPViewer.cs.meta rename to Assets/_Project/Scripts/Legacy/EnemyHPViewer.cs.meta diff --git a/Assets/_Project/Scripts/Legacy/EnemyJumpController.cs b/Assets/_Project/Scripts/Legacy/EnemyJumpController.cs new file mode 100644 index 0000000..39de349 --- /dev/null +++ b/Assets/_Project/Scripts/Legacy/EnemyJumpController.cs @@ -0,0 +1,240 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.AI; + +public class EnemyJumpController : MonoBehaviour +{ + [Header("Jump Settings")] + [SerializeField] private float jumpHeight = 1.5f; // ì �프 높ì�´ + [SerializeField] private float jumpDuration = 0.7f; // ì �프 ì§€ì†� 시간 + [SerializeField] private float jumpCooldown = 2.0f; // ì �프 쿨다운 + [SerializeField] private AnimationCurve jumpCurve = AnimationCurve.EaseInOut(0, 0, 1, 1); // ì �프 곡선 + + [Header("Jump Triggers")] + [SerializeField] private bool randomJumping = true; // ëžœë�¤ ì �프 활성화 + [SerializeField] private float randomJumpChance = 0.1f; // ëžœë�¤ ì �프 확률(0-1) + [SerializeField] private bool jumpOnObstacle = true; // 장애물ì—� 닿으면 ì �프 여부 + + [Header("Effects")] + [SerializeField] private GameObject jumpEffect; // ì �프 ì�´íŽ™íŠ¸ + [SerializeField] private AudioClip jumpSound; // ì �프 소리 + + // 참조 ì»´í�¬ë„ŒíЏ + private Movement2D movement2D; + private NavMeshAgent navMeshAgent; + private Rigidbody2D rb; + private AudioSource audioSource; + private SpriteRenderer spriteRenderer; + private Enemy enemy; + + // ë‚´ë¶€ 변수 + private float jumpTimer = 0f; + private float cooldownTimer = 0f; + private bool isJumping = false; + private Vector3 jumpStartPosition; + private Vector3 jumpTargetPosition; + private float originalZ; + private Vector3 originalScale; + + private void Awake() + { + // 필요한 ì»´í�¬ë„ŒíЏ 참조 가져오기 + movement2D = GetComponent(); + navMeshAgent = GetComponent(); + rb = GetComponent(); + audioSource = GetComponent(); + spriteRenderer = GetComponent(); + enemy = GetComponent(); + + if (audioSource == null && jumpSound != null) + { + audioSource = gameObject.AddComponent(); + } + + originalScale = transform.localScale; + } + + private void Start() + { + // 쿨다운 타ì�´ë¨¸ 초기화 + cooldownTimer = jumpCooldown; + originalZ = transform.position.z; + } + + private void Update() + { + // 쿨다운 타ì�´ë¨¸ ì—…ë�°ì�´íЏ + if (cooldownTimer > 0) + { + cooldownTimer -= Time.deltaTime; + } + + // ì �프 중ì�´ë©´ ì �프 ì—…ë�°ì�´íЏ + if (isJumping) + { + UpdateJump(); + return; + } + + // 쿨다운ì�´ ë��나면 ì �프 가능 + if (cooldownTimer <= 0) + { + // ëžœë�¤ ì �프가 활성화ë�˜ì—ˆìœ¼ë©´ 확률ì—� ë”°ë�¼ ì �프 + if (randomJumping && Random.value < randomJumpChance * Time.deltaTime) + { + StartJump(); + } + + // 장애물 ê°�ì§€ ë°� ì �프 (ì„ íƒ�ì �으로 구현) + if (jumpOnObstacle && IsObstacleAhead()) + { + StartJump(); + } + } + } + + // 장애물 ê°�ì§€ 메서드 + private bool IsObstacleAhead() + { + if (enemy != null && enemy.CurrentTarget != null) + { + Vector3 direction = (enemy.CurrentTarget.position - transform.position).normalized; + + // ì �ì�˜ ì�´ë�™ 방향으로 ë ˆì�´ìº�스트 + RaycastHit2D hit = Physics2D.Raycast( + transform.position, + direction, + 1.0f, + LayerMask.GetMask("Obstacle") + ); + + return hit.collider != null; + } + + return false; + } + + // ì �프 시작 + public void StartJump() + { + if (isJumping || cooldownTimer > 0) + return; + + isJumping = true; + jumpTimer = 0f; + jumpStartPosition = transform.position; + + // NavMeshAgentê°€ 있으면 ì�¼ì‹œ ì •ì§€ + if (navMeshAgent != null && navMeshAgent.isActiveAndEnabled) + { + navMeshAgent.isStopped = true; + } + + // ì �프 목표 위치 설정 (현재 방향으로 약간 앞으로) + Vector3 direction = Vector3.zero; + + if (enemy != null && enemy.CurrentTarget != null) + { + direction = (enemy.CurrentTarget.position - transform.position).normalized; + } + else + { + // Movement2Dì—�서 ë°©í–¥ì�„ ì–»ì�„ 수 없으므로 NavMeshAgent ë˜�는 현재 ì�´ë�™ ë°©í–¥ 사용 + if (navMeshAgent != null && navMeshAgent.isActiveAndEnabled && navMeshAgent.velocity.sqrMagnitude > 0.1f) + { + direction = navMeshAgent.velocity.normalized; + } + else + { + // ë°©í–¥ì�´ 없으면 앞쪽으로 ì �프 + direction = transform.right; + } + } + + // 목표 위치 설정 (현재 위치ì—�서 ì§„í–‰ 방향으로 약간 ë�” 앞으로) + jumpTargetPosition = transform.position + direction * (jumpHeight * 0.7f); + + // ì�´íŽ™íŠ¸ ë°� 사운드 재ìƒ� + if (jumpEffect != null) + { + Instantiate(jumpEffect, transform.position, Quaternion.identity); + } + + if (jumpSound != null && audioSource != null) + { + audioSource.PlayOneShot(jumpSound); + } + + // ì �프 코루틴 시작 + StartCoroutine(JumpAnimation()); + } + + // ì �프 ì—…ë�°ì�´íЏ + private void UpdateJump() + { + jumpTimer += Time.deltaTime; + + if (jumpTimer >= jumpDuration) + { + // ì �프 종료 + EndJump(); + } + } + + // ì �프 애니메ì�´ì…˜ 코루틴 + private IEnumerator JumpAnimation() + { + float elapsedTime = 0f; + + while (elapsedTime < jumpDuration) + { + float normalizedTime = elapsedTime / jumpDuration; + float curveValue = jumpCurve.Evaluate(normalizedTime); + + // 위치 ë³´ê°„ (가로, 세로 ë°©í–¥ì�€ 선형 ë³´ê°„, 높ì�´ëŠ” 커브를 따름) + Vector3 newPosition = Vector3.Lerp(jumpStartPosition, jumpTargetPosition, normalizedTime); + + // Z 위치 ì¡°ì • (ì �프 높ì�´) + newPosition.z = originalZ + jumpHeight * curveValue; + + // 새 위치 ì �ìš© + transform.position = newPosition; + + // ì �프ì—� 따른 스케ì�¼ 약간 ì¡°ì • (ì„ íƒ�ì �) + transform.localScale = new Vector3( + originalScale.x, + originalScale.y * (1 + 0.1f * curveValue), // Y방향으로 약간 늘어남 + originalScale.z + ); + + elapsedTime += Time.deltaTime; + yield return null; + } + + // 최종 위치 ë°� 스케ì�¼ ì¡°ì • + transform.position = new Vector3( + jumpTargetPosition.x, + jumpTargetPosition.y, + originalZ // ì›�래 z 위치로 복귀 + ); + + transform.localScale = originalScale; + + EndJump(); + } + + // ì �프 종료 + private void EndJump() + { + isJumping = false; + jumpTimer = 0f; + cooldownTimer = jumpCooldown; + + // NavMeshAgent 재개 + if (navMeshAgent != null && navMeshAgent.isActiveAndEnabled) + { + navMeshAgent.isStopped = false; + } + } +} \ No newline at end of file diff --git a/Assets/_Project/Scripts/Legacy/EnemyJumpController.cs.meta b/Assets/_Project/Scripts/Legacy/EnemyJumpController.cs.meta new file mode 100644 index 0000000..9d20e15 --- /dev/null +++ b/Assets/_Project/Scripts/Legacy/EnemyJumpController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 046e5eb2ec9e2f84a827b6ae91eb69ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/EnemySpawner.cs b/Assets/_Project/Scripts/Legacy/EnemySpawner.cs similarity index 55% rename from Assets/Scripts/EnemySpawner.cs rename to Assets/_Project/Scripts/Legacy/EnemySpawner.cs index 4cfeb9f..d250d0c 100644 --- a/Assets/Scripts/EnemySpawner.cs +++ b/Assets/_Project/Scripts/Legacy/EnemySpawner.cs @@ -5,7 +5,7 @@ public class EnemySpawner : MonoBehaviour { - [Header("±âº» ¼³Á¤")] + [Header("기본 설정")] [SerializeField] private Tilemap tilemap; [SerializeField] @@ -13,35 +13,51 @@ public class EnemySpawner : MonoBehaviour [SerializeField] private Transform canvasTransform; [SerializeField] - private string defaultTargetTag = "Resource"; // ±âº» Ÿ°Ù ÅÂ±× + private string defaultTargetTag = "Resource"; // 기본 타겟 태그 - [Header("¸®¼Ò½º ÂüÁ¶")] + [Header("리소스 참조")] [SerializeField] private PlayerGold playerGold; - [Header("µð¹ö±×")] + [Header("디버그")] [SerializeField] private bool debugMode = false; private Wave currentWave; private int currentEnemyCount; private List enemyList; + private Coroutine spawnRoutine; private Vector3 offset = new Vector3(0.5f, 0.5f, 0); private List possibleSpawnPoints = new List(); - // Àû ½ºÆù/Á¦°Å À̺¥Æ® + // ì � 스í�°/제거 ì�´ë²¤íЏ public delegate void EnemyEvent(Transform enemy); public event EnemyEvent OnEnemySpawned; public event EnemyEvent OnEnemyDestroyed; - public List EnemyList => enemyList; - public int CurrentEnemyCount => currentEnemyCount; + public List EnemyList + { + get + { + PruneDestroyedEnemies(); + return enemyList; + } + } + + public int CurrentEnemyCount + { + get + { + PruneDestroyedEnemies(); + return currentEnemyCount; + } + } private void Awake() { enemyList = new List(); - // ŸÀϸÊÀÌ ¼³Á¤µÇ¾î ÀÖÀ¸¸é °¡´ÉÇÑ ½ºÆù À§Ä¡ °è»ê + // 타ì�¼ë§µì�´ 설정ë�˜ì–´ 있으면 가능한 스í�° 위치 계산 if (tilemap != null) { CalculatePossibleSpawnPoints(); @@ -50,10 +66,10 @@ private void Awake() private void Start() { - // TargetManager ÃʱâÈ­ È®ÀÎ + // TargetManager 초기화 확ì�¸ if (TargetManager.Instance == null) { - Debug.LogWarning("TargetManager°¡ ÃʱâÈ­µÇÁö ¾Ê¾Ò½À´Ï´Ù. »ý¼ºÇÕ´Ï´Ù."); + Debug.LogWarning("TargetManagerê°€ 초기화ë�˜ì§€ 않았습니다. ìƒ�성합니다."); GameObject targetManagerObj = new GameObject("TargetManager"); targetManagerObj.AddComponent(); } @@ -83,7 +99,7 @@ private void CalculatePossibleSpawnPoints() if (debugMode) { - Debug.Log($"°¡´ÉÇÑ ½ºÆù Æ÷ÀÎÆ® °è»ê ¿Ï·á: {possibleSpawnPoints.Count}°³"); + Debug.Log($"가능한 스í�° í�¬ì�¸íЏ 계산 완료: {possibleSpawnPoints.Count}ê°œ"); } } @@ -107,38 +123,55 @@ public Vector3 GetSpawnPosition(Transform specificSpawnPoint = null) return transform.position; } - // Àû ±×·ì »ý¼º + // ì � 그룹 ìƒ�성 private IEnumerator SpawnEnemyGroups() { - // ¿þÀ̺êÀÇ °¢ Àû ±×·ì ó¸® + if (currentWave.enemyGroups == null) + { + spawnRoutine = null; + yield break; + } + + // 웨ì�´ë¸Œì�˜ ê°� ì � 그룹 처리 foreach (var enemyGroup in currentWave.enemyGroups) { - // ÀÌ ±×·ìÀÇ Àû »ý¼º ½ÃÀÛ + // ì�´ 그룹ì�˜ ì � ìƒ�성 시작 yield return StartCoroutine(SpawnEnemyGroup(enemyGroup)); } + + spawnRoutine = null; } private IEnumerator SpawnEnemyGroup(EnemyGroup enemyGroup) { - // ½ºÆù À§Ä¡ °áÁ¤ - Vector3 spawnPosition = enemyGroup.spawnPoint != null - ? enemyGroup.spawnPoint.position - : transform.position; + if (enemyGroup.enemyPrefab == null) + { + Debug.LogWarning("EnemySpawner: enemyPrefabì�´ 없는 EnemyGroupì�„ 건너ëœ�니다."); + yield break; + } + + if (enemyGroup.count <= 0) + { + yield break; + } + + // 스í�° 위치 ê²°ì • + Vector3 spawnPosition = GetSpawnPosition(enemyGroup.spawnPoint); for (int i = 0; i < enemyGroup.count; i++) { - // ±âº» À§Ä¡¿¡ Àû »ý¼º - GameObject clone = Instantiate(enemyGroup.enemyPrefab, transform.position, Quaternion.identity, transform); + // 실제 스í�° 위치ì—� ì � ìƒ�성 + GameObject clone = Instantiate(enemyGroup.enemyPrefab, spawnPosition, Quaternion.identity, transform); Enemy enemy = clone.GetComponent(); if (enemy == null) { - Debug.LogError($"ÇÁ¸®ÆÕ {enemyGroup.enemyPrefab.name}¿¡ Enemy ÄÄÆ÷³ÍÆ®°¡ ¾ø½À´Ï´Ù!"); + Debug.LogError($"프리팹 {enemyGroup.enemyPrefab.name}ì—� Enemy ì»´í�¬ë„ŒíŠ¸ê°€ 없습니다!"); Destroy(clone); continue; } - // ·£´ý ¿ÀÇÁ¼Â ¼³Á¤ + // ëžœë�¤ 오프셋 설정 Vector3 randomOffset = new Vector3( Random.Range(-1f, 1f), Random.Range(-1f, 1f), @@ -146,58 +179,60 @@ private IEnumerator SpawnEnemyGroup(EnemyGroup enemyGroup) ); enemy.SetSpawnOffset(randomOffset); - // ½ºÆù Æ÷ÀÎÆ® ¼³Á¤ + // 스í�° í�¬ì�¸íЏ 설정 enemy.SetCustomSpawnPoint(enemyGroup.spawnPoint); - // ÀûÀÇ °íÀ¯ ¼³Á¤À» »ç¿ëÇÏ¿© Ÿ°Ù ã±â + // ì �ì�˜ 고유 설정ì�„ 사용하여 타겟 찾기 Transform target = null; + Vector3 targetSearchOrigin = spawnPosition + randomOffset; - // TargetManager¸¦ ÅëÇØ ÇÁ¸®ÆÕ ÀÚ½ÅÀÇ Å¸°Ù ¿ì¼±¼øÀ§·Î Ÿ°Ù ã±â + // TargetManager를 통해 프리팹 ìž�ì‹ ì�˜ 타겟 우선순위로 타겟 찾기 if (TargetManager.Instance != null) { target = TargetManager.Instance.FindTargetByPriority( enemy.GetTargetTagPriority(), - spawnPosition, + targetSearchOrigin, enemy.GetTargetSearchRadius() ); } - // Ÿ°ÙÀ» ¸ø ãÀ¸¸é °Ç³Ê¶Ù±â + // 타겟ì�„ 못 찾으면 건너뛰기 if (target == null) { - Debug.LogWarning($"Àû {enemy.name}À» À§ÇÑ Å¸°ÙÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù. ½ºÅµÇÕ´Ï´Ù."); + Debug.LogWarning($"ì � {enemy.name}ì�„ 위한 타겟ì�„ ì°¾ì�„ 수 없습니다. 스킵합니다."); Destroy(clone); continue; } - // Àû ÃʱâÈ­ + // ì � 초기화 enemy.Setup(this, target); enemyList.Add(enemy); currentEnemyCount++; - // HP ½½¶óÀÌ´õ »ý¼º + // HP 슬ë�¼ì�´ë�” ìƒ�성 SpawnEnemyHPSlider(clone); - // À̺¥Æ® ¹ß»ý + // ì�´ë²¤íЏ ë°œìƒ� OnEnemySpawned?.Invoke(enemy.transform); yield return new WaitForSeconds(enemyGroup.spawnTime); } } - // ƯÁ¤ Àû¿¡ ´ëÇØ Ÿ°ÙÀ» ÀçÇÒ´çÇÏ´Â ÇÔ¼ö + // 특정 ì �ì—� 대해 타겟ì�„ 재할당하는 함수 public Transform ReassignTargetForEnemy(Enemy enemy, string targetTag = null) { if (enemy == null) return null; + if (TargetManager.Instance == null) return null; - // ÀûÀÇ ÀÚü Ÿ°Ù ¿ì¼±¼øÀ§ »ç¿ë + // ì �ì�˜ ìž�ì²´ 타겟 우선순위 사용 Transform newTarget = TargetManager.Instance.FindTargetByPriority( enemy.GetTargetTagPriority(), enemy.transform.position, enemy.GetTargetSearchRadius() ); - // »õ Ÿ°Ù ¼³Á¤ + // 새 타겟 설정 if (newTarget != null) { enemy.SetTarget(newTarget); @@ -211,9 +246,11 @@ public Transform ReassignTargetForEnemy(Enemy enemy, string targetTag = null) return newTarget; } - // ¸ðµç Àû¿¡ ´ëÇØ Ÿ°ÙÀ» ÀçÇÒ´çÇÏ´Â ÇÔ¼ö + // 모든 ì �ì—� 대해 타겟ì�„ 재할당하는 함수 public void ReassignTargetsForAllEnemies() { + PruneDestroyedEnemies(); + foreach (Enemy enemy in enemyList) { if (enemy != null) @@ -230,44 +267,97 @@ public void ReassignTargetsForAllEnemies() public void DestroyEnemy(EnemyDestroyType type, Enemy enemy, int gold) { + if (enemy == null) + { + return; + } + if (type == EnemyDestroyType.Kill) { - playerGold.CurrentGold += gold; + if (playerGold != null) + { + playerGold.CurrentGold += gold; + } } - currentEnemyCount--; - enemyList.Remove(enemy); + bool wasTracked = enemyList != null && enemyList.Remove(enemy); + if (wasTracked) + { + currentEnemyCount = Mathf.Max(0, currentEnemyCount - 1); + } + else if (debugMode) + { + Debug.LogWarning($"EnemySpawner: ì¶”ì � 중ì�´ 아닌 ì � 제거 요청: {enemy.name}"); + } - // À̺¥Æ® ¹ß»ý - OnEnemyDestroyed?.Invoke(enemy.transform); + // ì�´ë²¤íЏ ë°œìƒ� + Transform enemyTransform = enemy.transform; + OnEnemyDestroyed?.Invoke(enemyTransform); Destroy(enemy.gameObject); } private void SpawnEnemyHPSlider(GameObject enemy) { + if (enemyHPSliderPrefab == null || canvasTransform == null) + { + return; + } + GameObject sliderclone = Instantiate(enemyHPSliderPrefab); sliderclone.transform.SetParent(canvasTransform, false); sliderclone.transform.localScale = Vector3.one; - sliderclone.GetComponent().Setup(enemy.transform); - sliderclone.GetComponent().Setup(enemy.GetComponent()); + + SliderPositionAutoSetter positionAutoSetter = sliderclone.GetComponent(); + if (positionAutoSetter != null) + { + positionAutoSetter.Setup(enemy.transform); + } + + EnemyHPViewer hpViewer = sliderclone.GetComponent(); + EnemyHP enemyHP = enemy.GetComponent(); + if (hpViewer != null && enemyHP != null) + { + hpViewer.Setup(enemyHP); + } } public void StartWave(Wave wave) { currentWave = wave; + PruneDestroyedEnemies(); - // ÀÌ ¿þÀ̺êÀÇ ÃÑ Àû ¼ö °è»ê - currentEnemyCount = 0; - foreach (var enemyGroup in wave.enemyGroups) + if (spawnRoutine != null) { - // À¯È¿¼º °Ë»ç - if (enemyGroup.enemyPrefab != null) - { - currentEnemyCount += enemyGroup.count; - } + StopCoroutine(spawnRoutine); + spawnRoutine = null; } - StartCoroutine("SpawnEnemyGroups"); + spawnRoutine = StartCoroutine(SpawnEnemyGroups()); + } + + private void PruneDestroyedEnemies() + { + if (enemyList == null) + { + enemyList = new List(); + currentEnemyCount = 0; + return; + } + + int removedCount = enemyList.RemoveAll(enemy => enemy == null); + if (removedCount > 0 || currentEnemyCount != enemyList.Count) + { + currentEnemyCount = enemyList.Count; + } + } + + private void OnDisable() + { + if (spawnRoutine != null) + { + StopCoroutine(spawnRoutine); + spawnRoutine = null; + } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/EnemySpawner.cs.meta b/Assets/_Project/Scripts/Legacy/EnemySpawner.cs.meta similarity index 100% rename from Assets/Scripts/EnemySpawner.cs.meta rename to Assets/_Project/Scripts/Legacy/EnemySpawner.cs.meta diff --git a/Assets/Scripts/IDamageable.cs b/Assets/_Project/Scripts/Legacy/IDamageable.cs similarity index 100% rename from Assets/Scripts/IDamageable.cs rename to Assets/_Project/Scripts/Legacy/IDamageable.cs diff --git a/Assets/Scripts/IDamageable.cs.meta b/Assets/_Project/Scripts/Legacy/IDamageable.cs.meta similarity index 100% rename from Assets/Scripts/IDamageable.cs.meta rename to Assets/_Project/Scripts/Legacy/IDamageable.cs.meta diff --git a/Assets/Scripts/IsometricPositionHandler.cs b/Assets/_Project/Scripts/Legacy/IsometricPositionHandler.cs similarity index 100% rename from Assets/Scripts/IsometricPositionHandler.cs rename to Assets/_Project/Scripts/Legacy/IsometricPositionHandler.cs diff --git a/Assets/Scripts/IsometricPositionHandler.cs.meta b/Assets/_Project/Scripts/Legacy/IsometricPositionHandler.cs.meta similarity index 100% rename from Assets/Scripts/IsometricPositionHandler.cs.meta rename to Assets/_Project/Scripts/Legacy/IsometricPositionHandler.cs.meta diff --git a/Assets/Scripts/LevelSpriteChanger.cs b/Assets/_Project/Scripts/Legacy/LevelSpriteChanger.cs similarity index 100% rename from Assets/Scripts/LevelSpriteChanger.cs rename to Assets/_Project/Scripts/Legacy/LevelSpriteChanger.cs diff --git a/Assets/Scripts/LevelSpriteChanger.cs.meta b/Assets/_Project/Scripts/Legacy/LevelSpriteChanger.cs.meta similarity index 100% rename from Assets/Scripts/LevelSpriteChanger.cs.meta rename to Assets/_Project/Scripts/Legacy/LevelSpriteChanger.cs.meta diff --git a/Assets/Scripts/MicrophoneSystem.cs b/Assets/_Project/Scripts/Legacy/MicrophoneSystem.cs similarity index 100% rename from Assets/Scripts/MicrophoneSystem.cs rename to Assets/_Project/Scripts/Legacy/MicrophoneSystem.cs diff --git a/Assets/Scripts/MicrophoneSystem.cs.meta b/Assets/_Project/Scripts/Legacy/MicrophoneSystem.cs.meta similarity index 100% rename from Assets/Scripts/MicrophoneSystem.cs.meta rename to Assets/_Project/Scripts/Legacy/MicrophoneSystem.cs.meta diff --git a/Assets/_Project/Scripts/Legacy/Movement2D.cs b/Assets/_Project/Scripts/Legacy/Movement2D.cs new file mode 100644 index 0000000..eb90b5d --- /dev/null +++ b/Assets/_Project/Scripts/Legacy/Movement2D.cs @@ -0,0 +1,109 @@ +using UnityEngine; +using UnityEngine.AI; + +public class Movement2D : MonoBehaviour +{ + [SerializeField] + private float moveSpeed = 1.0f; + [SerializeField] + private Vector3 moveDirection = Vector3.zero; + + private float originalMoveSpeed; + private bool isSlowed = false; + private float slowTimer = 0f; + private float currentSlowAmount = 0f; + + // NavMeshAgent 참조 추가 + private NavMeshAgent navMeshAgent; + private bool useNavMesh = false; + + public float MoveSpeed => moveSpeed; + + private void Awake() + { + // 초기 ì�´ë�™ ì†�ë�„ 저장 + originalMoveSpeed = moveSpeed; + + // NavMeshAgent 확ì�¸ + navMeshAgent = GetComponent(); + useNavMesh = navMeshAgent != null; + + // NavMeshAgentê°€ 있으면 초기 ì†�ë�„ ë�™ê¸°í™” + if (useNavMesh) + { + originalMoveSpeed = navMeshAgent.speed; + moveSpeed = originalMoveSpeed; + } + } + + void Update() + { + // NavMeshAgentê°€ ì—†ì�„ 경우ì—�ë§Œ ì§�ì ‘ ì�´ë�™ + if (!useNavMesh) + { + transform.position += moveDirection * moveSpeed * Time.deltaTime; + } + + // ê°�ì†� 효과가 ì �ìš© 중ì�´ë�¼ë©´ 타ì�´ë¨¸ ì—…ë�°ì�´íЏ + if (isSlowed) + { + slowTimer -= Time.deltaTime; + // 타ì�´ë¨¸ê°€ ë��나면 ì�´ë�™ ì†�ë�„ 복구 + if (slowTimer <= 0) + { + ResetMoveSpeed(); + } + } + } + + public void MoveTo(Vector3 direction) + { + moveDirection = direction; + } + + // ì�´ë�™ ì†�ë�„ ê°�소 효과 ì �ìš© + public void ApplySlow(float slowAmount, float duration) + { + // 현재 ì �ìš©ë�œ ê°�ì†�보다 ë�” 강한 ê°�ì†�ì�´ê±°ë‚˜, ê°�ì†� 효과가 ê³§ ë��ë‚  경우ì—�ë§Œ ì �ìš© + if (slowAmount > currentSlowAmount || slowTimer < 0.5f) + { + // ê°�ì†� 효과가 처ì�Œ ì �ìš©ë�˜ë©´ ì›�래 ì†�ë�„ 저장 + if (!isSlowed) + { + originalMoveSpeed = useNavMesh ? navMeshAgent.speed : moveSpeed; + } + + // 새로운 ê°�ì†� 효과 ì �ìš© + currentSlowAmount = slowAmount; + moveSpeed = originalMoveSpeed * (1 - slowAmount); + + // NavMeshAgentê°€ 있으면 ì†�ë�„ ì �ìš© + if (useNavMesh && navMeshAgent.isActiveAndEnabled) + { + navMeshAgent.speed = moveSpeed; + } + + slowTimer = duration; + isSlowed = true; + + Debug.Log($"{gameObject.name}ì�˜ ì�´ë�™ ì†�ë�„ {slowAmount * 100}% ê°�소 (ì§€ì†�시간: {duration}ì´ˆ)"); + } + } + + // ì�´ë�™ ì†�ë�„ ì›�래대로 복구 + public void ResetMoveSpeed() + { + moveSpeed = originalMoveSpeed; + + // NavMeshAgentê°€ 있으면 ì†�ë�„ 복구 + if (useNavMesh && navMeshAgent != null && navMeshAgent.isActiveAndEnabled) + { + navMeshAgent.speed = originalMoveSpeed; + } + + isSlowed = false; + currentSlowAmount = 0f; + + Debug.Log($"{gameObject.name}ì�˜ ì�´ë�™ ì†�ë�„ 복구"); + } +} \ No newline at end of file diff --git a/Assets/Scripts/Movement2D.cs.meta b/Assets/_Project/Scripts/Legacy/Movement2D.cs.meta similarity index 100% rename from Assets/Scripts/Movement2D.cs.meta rename to Assets/_Project/Scripts/Legacy/Movement2D.cs.meta diff --git a/Assets/Scripts/ObjectDetector.cs b/Assets/_Project/Scripts/Legacy/ObjectDetector.cs similarity index 100% rename from Assets/Scripts/ObjectDetector.cs rename to Assets/_Project/Scripts/Legacy/ObjectDetector.cs diff --git a/Assets/Scripts/ObjectDetector.cs.meta b/Assets/_Project/Scripts/Legacy/ObjectDetector.cs.meta similarity index 100% rename from Assets/Scripts/ObjectDetector.cs.meta rename to Assets/_Project/Scripts/Legacy/ObjectDetector.cs.meta diff --git a/Assets/Scripts/ObjectFollowMousePosition.cs b/Assets/_Project/Scripts/Legacy/ObjectFollowMousePosition.cs similarity index 100% rename from Assets/Scripts/ObjectFollowMousePosition.cs rename to Assets/_Project/Scripts/Legacy/ObjectFollowMousePosition.cs diff --git a/Assets/Scripts/ObjectFollowMousePosition.cs.meta b/Assets/_Project/Scripts/Legacy/ObjectFollowMousePosition.cs.meta similarity index 100% rename from Assets/Scripts/ObjectFollowMousePosition.cs.meta rename to Assets/_Project/Scripts/Legacy/ObjectFollowMousePosition.cs.meta diff --git a/Assets/Scripts/PanalToggler.cs b/Assets/_Project/Scripts/Legacy/PanalToggler.cs similarity index 100% rename from Assets/Scripts/PanalToggler.cs rename to Assets/_Project/Scripts/Legacy/PanalToggler.cs diff --git a/Assets/Scripts/PanalToggler.cs.meta b/Assets/_Project/Scripts/Legacy/PanalToggler.cs.meta similarity index 100% rename from Assets/Scripts/PanalToggler.cs.meta rename to Assets/_Project/Scripts/Legacy/PanalToggler.cs.meta diff --git a/Assets/Scripts/ParticleAutoDestroyer.cs b/Assets/_Project/Scripts/Legacy/ParticleAutoDestroyer.cs similarity index 100% rename from Assets/Scripts/ParticleAutoDestroyer.cs rename to Assets/_Project/Scripts/Legacy/ParticleAutoDestroyer.cs diff --git a/Assets/Scripts/ParticleAutoDestroyer.cs.meta b/Assets/_Project/Scripts/Legacy/ParticleAutoDestroyer.cs.meta similarity index 100% rename from Assets/Scripts/ParticleAutoDestroyer.cs.meta rename to Assets/_Project/Scripts/Legacy/ParticleAutoDestroyer.cs.meta diff --git a/Assets/Scripts/PlayerExperience.cs b/Assets/_Project/Scripts/Legacy/PlayerExperience.cs similarity index 52% rename from Assets/Scripts/PlayerExperience.cs rename to Assets/_Project/Scripts/Legacy/PlayerExperience.cs index 0d85f16..8f76dfa 100644 --- a/Assets/Scripts/PlayerExperience.cs +++ b/Assets/_Project/Scripts/Legacy/PlayerExperience.cs @@ -3,33 +3,33 @@ public class PlayerExperience : MonoBehaviour { - [SerializeField] private int currentExp = 0; // ÇöÀç °æÇèÄ¡ - [SerializeField] private int[] expRequiredForLevel = { 0, 100, 250, 450, 700, 1000 }; // °¢ ·¹º§¿¡ ÇÊ¿äÇÑ °æÇèÄ¡ (0¹ø À妽º´Â ¾²Áö ¾ÊÀ½) - [SerializeField] private float[] damageMultipliers = { 1.0f, 1.2f, 1.5f, 1.8f, 2.2f, 2.7f }; // °¢ ·¹º§º° °ø°Ý·Â ¹è¼ö (0¹ø À妽º´Â ¾²Áö ¾ÊÀ½) + [SerializeField] private int currentExp = 0; // 현재 경험치 + [SerializeField] private int[] expRequiredForLevel = { 0, 100, 250, 450, 700, 1000 }; // ê°� 레벨ì—� 필요한 경험치 (0번 ì�¸ë�±ìŠ¤ëŠ” ì“°ì§€ 않ì�Œ) + [SerializeField] private float[] damageMultipliers = { 1.0f, 1.2f, 1.5f, 1.8f, 2.2f, 2.7f }; // ê°� 레벨별 공격력 배수 (0번 ì�¸ë�±ìŠ¤ëŠ” ì“°ì§€ 않ì�Œ) - private PlayerGold playerGold; // Ç÷¹ÀÌ¾î °ñµå ÂüÁ¶ - private int level = 1; // ÇöÀç ·¹º§ - private int previousLevel = 1; // ÀÌÀü ·¹º§ ÃßÀû - private const int MAX_LEVEL = 6; // ÃÖ´ë ·¹º§ + private PlayerGold playerGold; // 플레ì�´ì–´ 골드 참조 + private int level = 1; // 현재 레벨 + private int previousLevel = 1; // ì�´ì „ 레벨 ì¶”ì � + private const int MAX_LEVEL = 6; // 최대 레벨 - // ·¹º§¾÷ À̺¥Æ® + // 레벨업 ì�´ë²¤íЏ [System.Serializable] public class LevelUpEvent : UnityEvent { } public LevelUpEvent onLevelUp = new LevelUpEvent(); - // ·¹º§ ÇÁ·ÎÆÛƼ + // 레벨 프로í�¼í‹° public int Level => level; - // ÃÖ´ë ·¹º§ ÇÁ·ÎÆÛƼ + // 최대 레벨 프로í�¼í‹° public int MaxLevel => MAX_LEVEL; - // ÇöÀç °æÇèÄ¡ ÇÁ·ÎÆÛƼ + // 현재 경험치 프로í�¼í‹° public int CurrentExp => currentExp; - // ÇöÀç ·¹º§¿¡¼­ ÇÊ¿äÇÑ °æÇèÄ¡ ÇÁ·ÎÆÛƼ + // 현재 레벨ì—�서 필요한 경험치 프로í�¼í‹° public int ExpRequiredForCurrentLevel => level < MAX_LEVEL ? expRequiredForLevel[level] : 0; - // ÇöÀç °ø°Ý·Â ¹è¼ö ÇÁ·ÎÆÛƼ + // 현재 공격력 배수 프로í�¼í‹° public float CurrentDamageMultiplier => damageMultipliers[level]; private void Awake() @@ -37,41 +37,41 @@ private void Awake() playerGold = GetComponent(); if (playerGold == null) { - Debug.LogError("PlayerGold ÄÄÆ÷³ÍÆ®¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù."); + Debug.LogError("PlayerGold ì»´í�¬ë„ŒíŠ¸ë¥¼ ì°¾ì�„ 수 없습니다."); } - // Ãß°¡ ÃʱâÈ­ + // 추가 초기화 previousLevel = level; } private void Update() { - // ·¹º§ÀÌ º¯°æµÇ¾ú´ÂÁö È®ÀÎ + // 레벨ì�´ 변경ë�˜ì—ˆëŠ”ì§€ 확ì�¸ if (level > previousLevel) { - // ·¹º§¾÷ °¨Áö + // 레벨업 ê°�ì§€ int levelsGained = level - previousLevel; HandleLevelUp(levelsGained); previousLevel = level; } } - // °æÇèÄ¡ ȹµæ ¸Þ¼Òµå + // 경험치 íš�ë“� 메소드 public void AddExperience(int expAmount) { - // ÀÌ¹Ì ÃÖ´ë ·¹º§ÀÌ¸é °æÇèÄ¡¸¦ ´õÇÏÁö ¾ÊÀ½ + // ì�´ë¯¸ 최대 레벨ì�´ë©´ 경험치를 ë�”하지 않ì�Œ if (level >= MAX_LEVEL) return; - // ÇöÀç ·¹º§ ÀúÀå + // 현재 레벨 저장 int oldLevel = level; - // °æÇèÄ¡ Ãß°¡ + // 경험치 추가 currentExp += expAmount; - Debug.Log($"°æÇèÄ¡ ȹµæ: {expAmount}, ÃÑ °æÇèÄ¡: {currentExp}"); + Debug.Log($"경험치 íš�ë“�: {expAmount}, ì´� 경험치: {currentExp}"); - // ·¹º§¾÷ üũ + // 레벨업 ì²´í�¬ CheckLevelUp(); - // ·¹º§¾÷ °¨Áö (¿©·¯ ·¹º§ µ¿½Ã¿¡ ¿À¸¦ °æ¿ì ´ëºñ) + // 레벨업 ê°�ì§€ (여러 레벨 ë�™ì‹œì—� 오를 경우 대비) if (level > oldLevel) { int levelsGained = level - oldLevel; @@ -79,34 +79,34 @@ public void AddExperience(int expAmount) } } - // ¸ó½ºÅÍ Ã³Ä¡ ½Ã °æÇèÄ¡ ȹµæ + // 몬스터 처치 시 경험치 íš�ë“� public void AddExperienceForEnemy(EnemyDestroyType destroyType, int expValue) { - // ¸ó½ºÅͰ¡ ¸ñÀûÁö¿¡ µµ´ÞÇÑ °æ¿ì °æÇèÄ¡ ȹµæ X + // 몬스터가 목ì �ì§€ì—� ë�„달한 경우 경험치 íš�ë“� X if (destroyType == EnemyDestroyType.Arrive) return; - // ÁöÁ¤µÈ °æÇèÄ¡ °ª »ç¿ë + // 지정ë�œ 경험치 ê°’ 사용 int expAmount = expValue; AddExperience(expAmount); } - // ¿þÀ̺ê Á¾·á ÈÄ °æÇèÄ¡ Á¤»ê + // 웨ì�´ë¸Œ 종료 후 경험치 ì •ì‚° public void AddExperienceForWaveCompletion(int enemiesKilled) { - // óġÇÑ ÀûÀÇ ¼ö¿¡ ºñ·ÊÇÏ¿© º¸³Ê½º °æÇèÄ¡ ºÎ¿© - int expAmount = enemiesKilled * 5; // ¿¹: Àû 1¸¶¸®´ç Ãß°¡ 5 °æÇèÄ¡ + // 처치한 ì �ì�˜ 수ì—� 비례하여 보너스 경험치 부여 + int expAmount = enemiesKilled * 5; // 예: ì � 1마리당 추가 5 경험치 AddExperience(expAmount); - Debug.Log($"¿þÀÌºê ¿Ï·á º¸³Ê½º °æÇèÄ¡: {expAmount} (óġÇÑ Àû: {enemiesKilled}¸¶¸®)"); + Debug.Log($"웨ì�´ë¸Œ 완료 보너스 경험치: {expAmount} (처치한 ì �: {enemiesKilled}마리)"); } - // ·¹º§¾÷ üũ ¸Þ¼Òµå + // 레벨업 ì²´í�¬ 메소드 private void CheckLevelUp() { while (level < MAX_LEVEL && currentExp >= expRequiredForLevel[level]) { level++; - Debug.Log($"·¹º§ ¾÷! ÇöÀç ·¹º§: {level}, °ø°Ý·Â ¹è¼ö: {CurrentDamageMultiplier}"); - // ·¹º§¾÷ º¸»ó (¿¹: ¾à°£ÀÇ °ñµå Áö±Þ) + Debug.Log($"레벨 ì—…! 현재 레벨: {level}, 공격력 배수: {CurrentDamageMultiplier}"); + // 레벨업 ë³´ìƒ� (예: 약간ì�˜ 골드 지급) if (playerGold != null) { playerGold.CurrentGold += level * 10; @@ -114,32 +114,32 @@ private void CheckLevelUp() } } - // ·¹º§¾÷ ó¸® + // 레벨업 처리 private void HandleLevelUp(int levelsGained) { - Debug.Log($"·¹º§ ¾÷! ÇöÀç ·¹º§: {level} (+{levelsGained})"); + Debug.Log($"레벨 ì—…! 현재 레벨: {level} (+{levelsGained})"); - // ·¹º§¾÷ À̺¥Æ® ¹ß»ý + // 레벨업 ì�´ë²¤íЏ ë°œìƒ� onLevelUp.Invoke(level); - // ·¹º§¾÷ ¾Ë¸² Ç¥½Ã (UI) + // 레벨업 알림 표시 (UI) ShowLevelUpNotification(); } - // °ø°Ý·Â °è»ê ¸Þ¼Òµå - È­»ì¿¡¼­ È£Ãâ + // 공격력 계산 메소드 - 화살ì—�서 호출 public float CalculateAttackDamage(float baseDamage) { return baseDamage * CurrentDamageMultiplier; } - // ·¹º§¾÷ ¾Ë¸² Ç¥½Ã + // 레벨업 알림 표시 private void ShowLevelUpNotification() { - // ·¹º§¾÷ È¿°ú (¿¹: ÆÄƼŬ, »ç¿îµå µî) + // 레벨업 효과 (예: 파티í�´, 사운드 등) AudioSource audioSource = GetComponent(); if (audioSource != null) { - // ·¹º§¾÷ »ç¿îµå Àç»ý (ÀÖ´Â °æ¿ì) + // 레벨업 사운드 재ìƒ� (있는 경우) AudioClip levelUpSound = Resources.Load("Sounds/LevelUp"); if (levelUpSound != null) { @@ -147,17 +147,11 @@ private void ShowLevelUpNotification() } } - // ·¹º§¾÷ UI ¾Ë¸² - UI ¸Å´ÏÀú°¡ ÀÖ´Ù¸é ¸Þ½ÃÁö Àü´Þ + // 레벨업 UI 알림 - UI 매니저가 있다면 메시지 전달 TimeBasedUIManager uiManager = FindObjectOfType(); if (uiManager != null) { - // UI ¸Å´ÏÀú¿¡ ·¹º§¾÷ ¾Ë¸² ¸Þ¼Òµå ÇÊ¿ä - System.Type type = uiManager.GetType(); - System.Reflection.MethodInfo method = type.GetMethod("ShowLevelUpNotification"); - if (method != null) - { - method.Invoke(uiManager, new object[] { level }); - } + uiManager.ShowLevelUpNotification(level); } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/PlayerExperience.cs.meta b/Assets/_Project/Scripts/Legacy/PlayerExperience.cs.meta similarity index 100% rename from Assets/Scripts/PlayerExperience.cs.meta rename to Assets/_Project/Scripts/Legacy/PlayerExperience.cs.meta diff --git a/Assets/Scripts/PlayerGold.cs b/Assets/_Project/Scripts/Legacy/PlayerGold.cs similarity index 100% rename from Assets/Scripts/PlayerGold.cs rename to Assets/_Project/Scripts/Legacy/PlayerGold.cs diff --git a/Assets/Scripts/PlayerGold.cs.meta b/Assets/_Project/Scripts/Legacy/PlayerGold.cs.meta similarity index 100% rename from Assets/Scripts/PlayerGold.cs.meta rename to Assets/_Project/Scripts/Legacy/PlayerGold.cs.meta diff --git a/Assets/Scripts/PlayerMovement.cs b/Assets/_Project/Scripts/Legacy/PlayerMovement.cs similarity index 100% rename from Assets/Scripts/PlayerMovement.cs rename to Assets/_Project/Scripts/Legacy/PlayerMovement.cs diff --git a/Assets/Scripts/PlayerMovement.cs.meta b/Assets/_Project/Scripts/Legacy/PlayerMovement.cs.meta similarity index 100% rename from Assets/Scripts/PlayerMovement.cs.meta rename to Assets/_Project/Scripts/Legacy/PlayerMovement.cs.meta diff --git a/Assets/Scripts/PlayerSingleton.cs b/Assets/_Project/Scripts/Legacy/PlayerSingleton.cs similarity index 100% rename from Assets/Scripts/PlayerSingleton.cs rename to Assets/_Project/Scripts/Legacy/PlayerSingleton.cs diff --git a/Assets/Scripts/PlayerSingleton.cs.meta b/Assets/_Project/Scripts/Legacy/PlayerSingleton.cs.meta similarity index 100% rename from Assets/Scripts/PlayerSingleton.cs.meta rename to Assets/_Project/Scripts/Legacy/PlayerSingleton.cs.meta diff --git a/Assets/Scripts/Projectile.meta b/Assets/_Project/Scripts/Legacy/Projectile.meta similarity index 100% rename from Assets/Scripts/Projectile.meta rename to Assets/_Project/Scripts/Legacy/Projectile.meta diff --git a/Assets/Scripts/Projectile/ProjectileAreaDamage.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileAreaDamage.cs similarity index 100% rename from Assets/Scripts/Projectile/ProjectileAreaDamage.cs rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileAreaDamage.cs diff --git a/Assets/Scripts/Projectile/ProjectileAreaDamage.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileAreaDamage.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/ProjectileAreaDamage.cs.meta rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileAreaDamage.cs.meta diff --git a/Assets/Scripts/Projectile/ProjectileAttackSpeedDebuff.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileAttackSpeedDebuff.cs similarity index 100% rename from Assets/Scripts/Projectile/ProjectileAttackSpeedDebuff.cs rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileAttackSpeedDebuff.cs diff --git a/Assets/Scripts/Projectile/ProjectileAttackSpeedDebuff.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileAttackSpeedDebuff.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/ProjectileAttackSpeedDebuff.cs.meta rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileAttackSpeedDebuff.cs.meta diff --git a/Assets/Scripts/Projectile/ProjectileBase.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileBase.cs similarity index 100% rename from Assets/Scripts/Projectile/ProjectileBase.cs rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileBase.cs diff --git a/Assets/Scripts/Projectile/ProjectileBase.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileBase.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/ProjectileBase.cs.meta rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileBase.cs.meta diff --git a/Assets/Scripts/Projectile/ProjectileBook.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileBook.cs similarity index 100% rename from Assets/Scripts/Projectile/ProjectileBook.cs rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileBook.cs diff --git a/Assets/Scripts/Projectile/ProjectileBook.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileBook.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/ProjectileBook.cs.meta rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileBook.cs.meta diff --git a/Assets/_Project/Scripts/Legacy/Projectile/ProjectileComboDebuff.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileComboDebuff.cs new file mode 100644 index 0000000..dd0afb6 --- /dev/null +++ b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileComboDebuff.cs @@ -0,0 +1,230 @@ +using UnityEngine; +public class ProjectileComboDebuff : ProjectileBase +{ + [SerializeField] private float effectRadius = 2f; + [SerializeField] private string enemyTag = "Enemy"; + [SerializeField] private float moveSpeed = 5f; + [Header("ì�´ë�™ ì†�ë�„ ê°�소 효과")] + [SerializeField] private float moveSlowAmount = 0.3f; // ì�´ë�™ ì†�ë�„ ê°�소 비율 (0.3 = 30% ê°�소) + [SerializeField] private float moveSlowDuration = 4.0f; // ì�´ë�™ ì†�ë�„ ê°�소 ì§€ì†� 시간 + [Header("공격 ì†�ë�„ ê°�소 효과")] + [SerializeField] private float attackSlowAmount = 0.25f; // 공격 ì†�ë�„ ê°�소 비율 (0.25 = 25% ê°�소) + [SerializeField] private float attackSlowDuration = 3.0f; // 공격 ì†�ë�„ ê°�소 ì§€ì†� 시간 + [Header("효과 시ê°�í™”")] + [SerializeField] private GameObject debuffEffectPrefab; // 디버프 효과 시ê°�í™” 프리팹 (ì„ íƒ�ì �) + [Header("ì¶©ë�Œ ê°�ì§€")] + [SerializeField] private bool useCollisionDetection = true; // ì¶©ë�Œ ê°�ì§€ 사용 여부 + [SerializeField] private LayerMask enemyLayer; // ì � ë ˆì�´ì–´ (ì¶©ë�Œ ê°�지용) + + // ì�´ë�™ ë°©í–¥ 변수 추가 + private Vector3 moveDirection; + // 발사체가 ì�´ë¯¸ ì¶©ë�Œí–ˆëŠ”ì§€ 확ì�¸í•˜ëŠ” 플래그 + private bool hasHit = false; + + public override void Setup(Transform target, float damage, int maxCount = 1, int index = 0) + { + base.Setup(target, damage, maxCount, index); + + // 타겟 방향으로 초기 ì�´ë�™ ë°©í–¥ 설정 + if (target != null) + { + moveDirection = (target.position - transform.position).normalized; + // 초기 ë°©í–¥ì—� 따른 회전 설정 + RotateToMoveDirection(moveDirection); + } + + // ì¶©ë�Œ ê°�지를 위해 콜ë�¼ì�´ë�”ê°€ 없는 경우 추가 + if (useCollisionDetection && GetComponent() == null) + { + CircleCollider2D collider = gameObject.AddComponent(); + collider.isTrigger = true; + collider.radius = 0.3f; // ì �절한 í�¬ê¸°ë¡œ ì¡°ì • + } + } + + public override void Process() + { + // 타겟ì�´ 없거나 ì�´ë¯¸ ì¶©ë�Œí–ˆìœ¼ë©´ 처리하지 않ì�Œ + if (target == null || hasHit) return; + + // 발사체가 타겟ì—� ë�„달했는지 확ì�¸ + float distance = Vector3.Distance(transform.position, target.position); + if (distance < 0.1f) + { + // 효과 ì �ìš© + ApplyEffectInArea(transform.position); + // 발사체 파괴 + DestroyProjectile(); + } + else + { + // ì¶©ë�Œ ê°�지를 사용하는 경우 ì�´ë�™ 중 ì �ê³¼ì�˜ ì¶©ë�Œ 검사 + if (useCollisionDetection) + { + CheckCollisionDuringMovement(); + } + + // 타겟ì�„ 향해 ì�´ë�™ + MoveToTarget(); + } + } + + // ì�´ë�™ 중 ì¶©ë�Œ ì²´í�¬ (ë ˆì�´ìº�스트 사용) + private void CheckCollisionDuringMovement() + { + RaycastHit2D hit = Physics2D.CircleCast( + transform.position, + 0.3f, // ì¶©ë�Œ ì²´í�¬ 반경 + moveDirection, + moveSpeed * Time.deltaTime, + enemyLayer + ); + + if (hit.collider != null) + { + if (hit.collider.CompareTag(enemyTag)) + { + // ì¶©ë�Œ ì§€ì �ì—� 효과 ì �ìš© + ApplyEffectInArea(hit.point); + // 발사체 파괴 + DestroyProjectile(); + } + } + } + + // 트리거 ì¶©ë�Œ ì�´ë²¤íЏ + private void OnTriggerEnter2D(Collider2D other) + { + if (!hasHit && other.CompareTag(enemyTag)) + { + // ì¶©ë�Œ ì§€ì �ì—� 효과 ì �ìš© + ApplyEffectInArea(transform.position); + // 발사체 파괴 + DestroyProjectile(); + } + } + + private void ApplyEffectInArea(Vector3 centerPosition) + { + // 효과 범위 ë‚´ì�˜ 모든 콜ë�¼ì�´ë�” ê°�ì§€ + Collider2D[] colliders = Physics2D.OverlapCircleAll(centerPosition, effectRadius); + foreach (Collider2D collider in colliders) + { + if (collider.CompareTag(enemyTag)) + { + GameObject enemy = collider.gameObject; + // 기본 ë�°ë¯¸ì§€ ì �ìš© + EnemyHP enemyHP = enemy.GetComponent(); + if (enemyHP != null) + { + enemyHP.TakeDamage(damage); + } + // ì�´ë�™ ì†�ë�„ ê°�소 효과 ì �ìš© + Movement2D movement = enemy.GetComponent(); + if (movement != null) + { + movement.ApplySlow(moveSlowAmount, moveSlowDuration); + } + // 공격 ì†�ë�„ ê°�소 효과 ì �ìš© + EnemyAttack enemyAttack = enemy.GetComponent(); + if (enemyAttack != null) + { + enemyAttack.ApplyAttackSlow(attackSlowAmount, attackSlowDuration); + } + // 디버프 효과 시ê°�í™” (ì„ íƒ�ì �) + if (debuffEffectPrefab != null) + { + GameObject effectObj = Instantiate(debuffEffectPrefab, enemy.transform.position, Quaternion.identity); + effectObj.transform.SetParent(enemy.transform); + Destroy(effectObj, Mathf.Max(moveSlowDuration, attackSlowDuration)); + } + } + } + } + + private void MoveToTarget() + { + // 새로운 타겟 ë°©í–¥ 계산 + Vector3 direction = (target.position - transform.position).normalized; + + // ë°©í–¥ì�´ 변경ë�˜ì—ˆë‹¤ë©´ 회전 ì—…ë�°ì�´íЏ + if (Vector3.Dot(direction, moveDirection) < 0.99f) + { + moveDirection = direction; + RotateToMoveDirection(moveDirection); + } + + // 타겟 방향으로 ì�´ë�™ + transform.position += direction * moveSpeed * Time.deltaTime; + } + + // ì�´ë�™ ë°©í–¥ì—� ë”°ë�¼ 스프ë�¼ì�´íЏ 회전 + private void RotateToMoveDirection(Vector3 direction) + { + // ì�´ë�™ ë°©í–¥ 벡터가 유효한지 확ì�¸ + if (direction.sqrMagnitude > 0.001f) + { + float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg; + + // 왼쪽 ë°©í–¥ì�¼ 때 180ë�„ 추가 ë³´ì • + if (direction.x < 0) + { + angle += 180f; + } + + transform.rotation = Quaternion.Euler(0f, 0f, angle); + } + } + + // 발사체 파괴 공통 메서드 + private void DestroyProjectile() + { + // 중복 파괴 방지를 위한 플래그 설정 + hasHit = true; + + // 타격 효과 ìƒ�성 + if (hitEffect != null) + { + Instantiate(hitEffect, transform.position, Quaternion.identity); + } + + // 발사체 파괴 + Destroy(gameObject); + } + + // ì—�디터ì—�서 범위 시ê°�í™” + private void OnDrawGizmosSelected() + { + // 효과 범위 시ê°�í™” + Gizmos.color = Color.yellow; + Gizmos.DrawWireSphere(transform.position, effectRadius); + + // ì¶©ë�Œ ê°�ì§€ 범위 시ê°�í™” + if (useCollisionDetection) + { + Gizmos.color = Color.red; + Gizmos.DrawWireSphere(transform.position, 0.3f); + } + } + + // Update 메소드 오버ë�¼ì�´ë“œ - 부모 í�´ëž˜ìФì�˜ 타겟 null ì²´í�¬ë¥¼ 우회 + protected override void Update() + { + // 발사체가 ì�´ë¯¸ ì �중했으면 ë�” ì�´ìƒ� 처리하지 않ì�Œ + if (hasHit) return; + + // 복합 디버프 발사체는 타겟ì�´ 있ì�„ 때만 처리 + if (target != null) + { + Process(); + } + + // Z 위치 ì—…ë�°ì�´íЏ (ì�´ì†Œë©”트릭 핸들러가 없는 경우) + if (updateZPosition && isometricPosition == null) + { + Vector3 position = transform.position; + position.z = position.y; + transform.position = position; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/Projectile/ProjectileComboDebuff.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileComboDebuff.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/ProjectileComboDebuff.cs.meta rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileComboDebuff.cs.meta diff --git a/Assets/Scripts/Projectile/ProjectileCubicHoming.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileCubicHoming.cs similarity index 100% rename from Assets/Scripts/Projectile/ProjectileCubicHoming.cs rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileCubicHoming.cs diff --git a/Assets/Scripts/Projectile/ProjectileCubicHoming.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileCubicHoming.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/ProjectileCubicHoming.cs.meta rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileCubicHoming.cs.meta diff --git a/Assets/_Project/Scripts/Legacy/Projectile/ProjectileEnemy.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileEnemy.cs new file mode 100644 index 0000000..661a37f --- /dev/null +++ b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileEnemy.cs @@ -0,0 +1,226 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class ProjectileEnemy : MonoBehaviour +{ + [Header("Projectile Settings")] + [SerializeField] private float speed = 10f; // 발사체 ì†�ë�„ + [SerializeField] private float maxLifetime = 5f; // 최대 ì§€ì†� 시간 + [SerializeField] private float rotationSpeed = 10f; // 회전 ì†�ë�„ + [SerializeField] private bool useHoming = true; // 유ë�„ 기능 사용 여부 + [SerializeField] private float homingStrength = 5f; // 유ë�„ ê°•ë�„ + + [Header("Effects")] + [SerializeField] private GameObject hitEffect; // 타격 효과 + [SerializeField] private AudioClip hitSound; // 타격 소리 + [SerializeField] private GameObject trailEffect; // 궤ì � 효과 + + [Header("Isometric Settings")] + [SerializeField] private bool useIsometricPosition = true; // ì�´ì†Œë©”트릭 위치 사용 여부 + + // ë‚´ë¶€ 변수 + private Transform target; // 타겟 + private float damage; // ë�°ë¯¸ì§€ + private Rigidbody rb; // 리지드바디 + private AudioSource audioSource; // 오디오 소스 + private Vector3 lastTargetPosition; // 마지막 타겟 위치 + private IsometricPositionHandler isometricPosition; // ì�´ì†Œë©”트릭 위치 핸들러 + private bool hasHit = false; // 타격 여부 + + // 초기화 + private void Awake() + { + // 리지드바디 확ì�¸ ë˜�는 추가 + rb = GetComponent(); + if (rb == null) + { + rb = gameObject.AddComponent(); + rb.useGravity = false; + rb.drag = 0.5f; + } + + // 오디오 소스 확ì�¸ ë˜�는 추가 + audioSource = GetComponent(); + if (audioSource == null && hitSound != null) + { + audioSource = gameObject.AddComponent(); + } + + // ì�´ì†Œë©”트릭 위치 핸들러 확ì�¸ + if (useIsometricPosition) + { + isometricPosition = GetComponent(); + if (isometricPosition == null) + { + isometricPosition = gameObject.AddComponent(); + } + } + } + + // 발사체 설정 (외부ì—�서 호출ë�¨) + public void Setup(Transform targetTransform, float damageAmount) + { + target = targetTransform; + damage = damageAmount; + + if (target != null) + { + lastTargetPosition = target.position; + + // 초기 ë°©í–¥ì�„ 타겟 쪽으로 설정 + Vector3 direction = (lastTargetPosition - transform.position).normalized; + transform.forward = direction; + + // 초기 ì†�ë�„ ì �ìš© + rb.velocity = direction * speed; + } + + // 궤ì � 효과 활성화 + if (trailEffect != null) + { + GameObject trail = Instantiate(trailEffect, transform.position, Quaternion.identity); + trail.transform.SetParent(transform); + } + + // 최대 ì§€ì†� 시간 후 ìž�ë�™ 파괴 + Destroy(gameObject, maxLifetime); + } + + // 매 프레임 실행 + private void Update() + { + if (hasHit) return; + + // 타겟 ì²´í�¬ ë°� ì¶”ì � + UpdateTargetTracking(); + + // ì�´ì†Œë©”트릭 위치 ì—…ë�°ì�´íЏ + if (useIsometricPosition && isometricPosition == null) + { + // 수ë�™ìœ¼ë¡œ z 위치 ì¡°ì • + Vector3 position = transform.position; + position.z = position.y; + transform.position = position; + } + } + + // 타겟 ì¶”ì � ì—…ë�°ì�´íЏ + private void UpdateTargetTracking() + { + // 타겟ì�´ 유효한지 확ì�¸ + if (target == null || !target.gameObject.activeInHierarchy) + { + // 타겟ì�´ 없거나 비활성화ë�œ 경우 마지막 위치로 ì§„í–‰ + return; + } + + // 현재 타겟 위치 ì—…ë�°ì�´íЏ + lastTargetPosition = target.position; + + // 유ë�„ 기능ì�´ 활성화ë�œ 경우 + if (useHoming) + { + // 타겟 ë°©í–¥ 계산 + Vector3 directionToTarget = (lastTargetPosition - transform.position).normalized; + + // 현재 발사체ì�˜ ì†�ë�„ ë°©í–¥ + Vector3 currentDirection = rb.velocity.normalized; + + // ë‘� ë°©í–¥ì�„ 보간하여 새 ë°©í–¥ 계산 + Vector3 newDirection = Vector3.Slerp(currentDirection, directionToTarget, Time.deltaTime * homingStrength); + + // ì†�ë�„ ì—…ë�°ì�´íЏ + rb.velocity = newDirection * speed; + + // 발사체 ë°©í–¥ 설정 + if (rb.velocity != Vector3.zero) + { + transform.forward = Vector3.Slerp(transform.forward, rb.velocity.normalized, Time.deltaTime * rotationSpeed); + } + } + } + + // ì¶©ë�Œ ê°�ì§€ + private void OnTriggerEnter(Collider other) + { + HandleCollision(other.transform); + } + + private void OnCollisionEnter(Collision collision) + { + HandleCollision(collision.transform); + } + + // ì¶©ë�Œ 처리 + private void HandleCollision(Transform hitTransform) + { + // ì�´ë¯¸ 타격한 경우 무시 + if (hasHit) return; + + // ìž�ì‹ ì�„ 발사한 ì �ê³¼ ì¶©ë�Œí•˜ì§€ 않ë�„ë¡� 확ì�¸ (필요시 구현) + + // 타격 처리 + hasHit = true; + + // ë�°ë¯¸ì§€ ì �ìš© 시ë�„ + bool damageApplied = false; + + // ResourceObject ì»´í�¬ë„ŒíЏ 확ì�¸ + ResourceObject resource = hitTransform.GetComponent(); + if (resource != null) + { + resource.TakeDamage(damage); + Debug.Log($"발사체가 {resource.ResourceName}ì—� {damage}ì�˜ ë�°ë¯¸ì§€ë¥¼ 입힘"); + damageApplied = true; + } + + // EnemyHP ì»´í�¬ë„ŒíЏ 확ì�¸ + if (!damageApplied) + { + EnemyHP enemyHP = hitTransform.GetComponent(); + if (enemyHP != null) + { + enemyHP.TakeDamage(damage); + Debug.Log($"발사체가 {hitTransform.name}ì—� {damage}ì�˜ ë�°ë¯¸ì§€ë¥¼ 입힘 (EnemyHP)"); + damageApplied = true; + } + } + + // IDamageable ì�¸í„°íŽ˜ì�´ìФ 확ì�¸ + if (!damageApplied) + { + var damageable = hitTransform.GetComponent(); + if (damageable != null) + { + damageable.TakeDamage((int)damage); + Debug.Log($"발사체가 {hitTransform.name}ì—� {damage}ì�˜, ë�°ë¯¸ì§€ë¥¼ 입힘 (IDamageable)"); + damageApplied = true; + } + } + + // 타격 효과 ìƒ�성 + if (hitEffect != null) + { + GameObject effect = Instantiate(hitEffect, transform.position, Quaternion.identity); + + // ì�´ì†Œë©”트릭 효과 처리 + if (useIsometricPosition) + { + if (effect.GetComponent() == null) + { + effect.AddComponent(); + } + } + } + + // 타격 소리 재ìƒ� + if (hitSound != null && audioSource != null) + { + AudioSource.PlayClipAtPoint(hitSound, transform.position); + } + + // 발사체 파괴 + Destroy(gameObject); + } +} \ No newline at end of file diff --git a/Assets/_Project/Scripts/Legacy/Projectile/ProjectileEnemy.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileEnemy.cs.meta new file mode 100644 index 0000000..8a0434c --- /dev/null +++ b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileEnemy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d74a7ed3edc3384f90a6bb2215c45ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Projectile/ProjectileHoming.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileHoming.cs similarity index 100% rename from Assets/Scripts/Projectile/ProjectileHoming.cs rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileHoming.cs diff --git a/Assets/Scripts/Projectile/ProjectileHoming.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileHoming.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/ProjectileHoming.cs.meta rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileHoming.cs.meta diff --git a/Assets/Scripts/Projectile/ProjectileQuadraticHoming.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileQuadraticHoming.cs similarity index 100% rename from Assets/Scripts/Projectile/ProjectileQuadraticHoming.cs rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileQuadraticHoming.cs diff --git a/Assets/Scripts/Projectile/ProjectileQuadraticHoming.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileQuadraticHoming.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/ProjectileQuadraticHoming.cs.meta rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileQuadraticHoming.cs.meta diff --git a/Assets/Scripts/Projectile/ProjectileSlowDebuff.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileSlowDebuff.cs similarity index 100% rename from Assets/Scripts/Projectile/ProjectileSlowDebuff.cs rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileSlowDebuff.cs diff --git a/Assets/Scripts/Projectile/ProjectileSlowDebuff.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileSlowDebuff.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/ProjectileSlowDebuff.cs.meta rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileSlowDebuff.cs.meta diff --git a/Assets/Scripts/Projectile/ProjectileSpriteController.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileSpriteController.cs similarity index 100% rename from Assets/Scripts/Projectile/ProjectileSpriteController.cs rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileSpriteController.cs diff --git a/Assets/Scripts/Projectile/ProjectileSpriteController.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileSpriteController.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/ProjectileSpriteController.cs.meta rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileSpriteController.cs.meta diff --git a/Assets/Scripts/Projectile/ProjectileStraight.cs b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileStraight.cs similarity index 60% rename from Assets/Scripts/Projectile/ProjectileStraight.cs rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileStraight.cs index bfa4a01..678b02e 100644 --- a/Assets/Scripts/Projectile/ProjectileStraight.cs +++ b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileStraight.cs @@ -2,36 +2,47 @@ public class ProjectileStraight : ProjectileBase { - [SerializeField] private float moveSpeed = 8f; // ¹ß»çü À̵¿ ¼Óµµ - private Vector3 moveDirection; // ¹ß»çü À̵¿ ¹æÇâ + [SerializeField] private float moveSpeed = 8f; // 발사체 ì�´ë�™ ì†�ë�„ + private Vector3 moveDirection; // 발사체 ì�´ë�™ ë°©í–¥ + private bool flipDirection; public override void Setup(Transform target, float damage, int maxCount = 1, int index = 0) { base.Setup(target, damage, maxCount, index); - // Ÿ°Ù ¹æÇâÀ¸·Î ¹ß»ç + // 타겟 방향으로 발사 if (target != null) { moveDirection = (target.position - transform.position).normalized; } else { - moveDirection = transform.right; // ±âº»ÀûÀ¸·Î ¿À¸¥ÂÊ ¹æÇâ + moveDirection = transform.right; // 기본ì �으로 오른쪽 ë°©í–¥ } - // À̵¿ ¹æÇâ¿¡ µû¶ó ½ºÇÁ¶óÀÌÆ® ȸÀü + if (flipDirection) + { + moveDirection.x *= -1f; + } + + // ì�´ë�™ ë°©í–¥ì—� ë”°ë�¼ 스프ë�¼ì�´íЏ 회전 RotateToMoveDirection(); } - // À̵¿ ¹æÇâ¿¡ µû¶ó ½ºÇÁ¶óÀÌÆ® ȸÀü + public void SetFlipDirection(bool flipped) + { + flipDirection = flipped; + } + + // ì�´ë�™ ë°©í–¥ì—� ë”°ë�¼ 스프ë�¼ì�´íЏ 회전 private void RotateToMoveDirection() { - // À̵¿ ¹æÇâ º¤ÅͰ¡ À¯È¿ÇÑÁö È®ÀÎ + // ì�´ë�™ ë°©í–¥ 벡터가 유효한지 확ì�¸ if (moveDirection.sqrMagnitude > 0.001f) { float angle = Mathf.Atan2(moveDirection.y, moveDirection.x) * Mathf.Rad2Deg; - // ¿ÞÂÊ ¹æÇâÀÏ ¶§ 180µµ Ãß°¡ º¸Á¤ + // 왼쪽 ë°©í–¥ì�¼ 때 180ë�„ 추가 ë³´ì • if (moveDirection.x < 0) { angle += 180f; @@ -43,17 +54,17 @@ private void RotateToMoveDirection() public override void Process() { - // À̵¿ ¹æÇâÀ¸·Î °è¼Ó À̵¿ + // ì�´ë�™ 방향으로 계ì†� ì�´ë�™ transform.position += moveDirection * moveSpeed * Time.deltaTime; } - // Update ¸Þ¼Òµå ¿À¹ö¶óÀ̵å - ºÎ¸ð Ŭ·¡½ºÀÇ Å¸°Ù null üũ¸¦ ¿ìȸ + // Update 메소드 오버ë�¼ì�´ë“œ - 부모 í�´ëž˜ìФì�˜ 타겟 null ì²´í�¬ë¥¼ 우회 protected override void Update() { - // Á÷¼± ¹ß»çü´Â Ÿ°ÙÀÌ ¾ø¾îµµ °è¼Ó À̵¿ÇØ¾ß ÇÔ + // ì§�ì„  발사체는 타겟ì�´ 없어ë�„ 계ì†� ì�´ë�™í•´ì•¼ 함 Process(); - // Z À§Ä¡ ¾÷µ¥ÀÌÆ® (ÀÌ¼Ò¸ÞÆ®¸¯ Çڵ鷯°¡ ¾ø´Â °æ¿ì) + // Z 위치 ì—…ë�°ì�´íЏ (ì�´ì†Œë©”트릭 핸들러가 없는 경우) if (updateZPosition && isometricPosition == null) { Vector3 position = transform.position; @@ -66,10 +77,10 @@ private void OnTriggerEnter2D(Collider2D collision) { if (collision.CompareTag("Enemy")) { - // È÷Æ® ÀÌÆåÆ® »ý¼º + // 히트 ì�´íŽ™íŠ¸ ìƒ�성 CreateHitEffect(transform.position); - // µ¥¹ÌÁö Àû¿ë + // ë�°ë¯¸ì§€ ì �ìš© EnemyHP enemyHP = collision.GetComponent(); if (enemyHP != null) { @@ -79,4 +90,4 @@ private void OnTriggerEnter2D(Collider2D collision) Destroy(gameObject); } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/Projectile/ProjectileStraight.cs.meta b/Assets/_Project/Scripts/Legacy/Projectile/ProjectileStraight.cs.meta similarity index 100% rename from Assets/Scripts/Projectile/ProjectileStraight.cs.meta rename to Assets/_Project/Scripts/Legacy/Projectile/ProjectileStraight.cs.meta diff --git a/Assets/Scripts/ResourceFactory.cs b/Assets/_Project/Scripts/Legacy/ResourceFactory.cs similarity index 100% rename from Assets/Scripts/ResourceFactory.cs rename to Assets/_Project/Scripts/Legacy/ResourceFactory.cs diff --git a/Assets/Scripts/ResourceFactory.cs.meta b/Assets/_Project/Scripts/Legacy/ResourceFactory.cs.meta similarity index 100% rename from Assets/Scripts/ResourceFactory.cs.meta rename to Assets/_Project/Scripts/Legacy/ResourceFactory.cs.meta diff --git a/Assets/Scripts/ResourceManager.cs b/Assets/_Project/Scripts/Legacy/ResourceManager.cs similarity index 55% rename from Assets/Scripts/ResourceManager.cs rename to Assets/_Project/Scripts/Legacy/ResourceManager.cs index eb8c5d3..93ff9ea 100644 --- a/Assets/Scripts/ResourceManager.cs +++ b/Assets/_Project/Scripts/Legacy/ResourceManager.cs @@ -1,23 +1,25 @@ using System.Collections; using System.Collections.Generic; using UnityEngine; +using UnityEngine.Events; public class ResourceManager : MonoBehaviour { private List allResources = new List(); - private List initialResources = new List(); // Ãʱ⠸®¼Ò½º ¸ñ·Ï ÀúÀå - private float initialTotalMaxHP = 0f; // Ãʱâ ÃÖ´ë ü·Â ÇÕ°è + private List initialResources = new List(); // 초기 리소스 목ë¡� 저장 + private readonly Dictionary resourceDestroyedHandlers = new Dictionary(); + private float initialTotalMaxHP = 0f; // 초기 최대 ì²´ë ¥ 합계 - // ÆÄ±«µÈ ¸®¼Ò½º Á¤º¸¸¦ ÀúÀåÇϴ Ŭ·¡½º + // 파괴ë�œ 리소스 정보를 저장하는 í�´ëž˜ìФ [System.Serializable] private class DestroyedResourceData { - public GameObject prefab; // ¸®¼Ò½º ÇÁ¸®ÆÕ - public Vector3 position; // À§Ä¡ - public Quaternion rotation; // ȸÀü - public string resourceName; // ¸®¼Ò½º À̸§ - public float maxHP; // ÃÖ´ë ü·Â - public string objectName; // ¿ÀºêÁ§Æ® À̸§ (ÇÁ¸®ÆÕ À̸§¿¡ Ȱ¿ë) + public GameObject prefab; // 리소스 프리팹 + public Vector3 position; // 위치 + public Quaternion rotation; // 회전 + public string resourceName; // 리소스 ì�´ë¦„ + public float maxHP; // 최대 ì²´ë ¥ + public string objectName; // 오브ì �트 ì�´ë¦„ (프리팹 ì�´ë¦„ì—� 활용) public DestroyedResourceData(GameObject prefab, Vector3 position, Quaternion rotation, string resourceName, float maxHP, string objectName) { @@ -30,24 +32,24 @@ public DestroyedResourceData(GameObject prefab, Vector3 position, Quaternion rot } } - // ÆÄ±«µÈ ¸®¼Ò½º µ¥ÀÌÅÍ ¸ñ·Ï + // 파괴ë�œ 리소스 ë�°ì�´í„° 목ë¡� private List destroyedResources = new List(); - [SerializeField] private bool debugMode = false; // µð¹ö±× ·Î±× Ãâ·Â ¿©ºÎ - [SerializeField] private List resourcePrefabs; // ¸®¼Ò½º ¿ÀºêÁ§Æ® ÇÁ¸®ÆÕ ¸ñ·Ï - [SerializeField] private GameObject defaultResourcePrefab; // ±âº» ¸®¼Ò½º ÇÁ¸®ÆÕ (º¹±¸ ½ÇÆÐ ½Ã »ç¿ë) + [SerializeField] private bool debugMode = false; // 디버그 로그 출력 여부 + [SerializeField] private List resourcePrefabs; // 리소스 오브ì �트 프리팹 목ë¡� + [SerializeField] private GameObject defaultResourcePrefab; // 기본 리소스 프리팹 (복구 실패 시 사용) - // ¸®¼Ò½º Ãʱâ ÀúÀå µ¥ÀÌÅÍ (ÃʱâÈ­ ´Ü°è¿¡¼­ ¼³Á¤) + // 리소스 초기 저장 ë�°ì�´í„° (초기화 단계ì—�서 설정) private Dictionary initialResourceData = new Dictionary(); - // ¸ðµç ÀçÈ­ ¿ÀºêÁ§Æ®ÀÇ ÃÑ Ã¼·Â ´ëºñ ³²Àº ü·Â ºñÀ² (0~1, 1ÀÌ¸é ¸ðµç ¿ÀºêÁ§Æ®°¡ Ǯü·Â) + // 모든 재화 오브ì �트ì�˜ ì´� ì²´ë ¥ 대비 남ì�€ ì²´ë ¥ 비율 (0~1, 1ì�´ë©´ 모든 오브ì �트가 풀체력) public float TotalHealthRatio { get { float totalCurrentHP = 0f; - // ÇöÀç ü·Â¸¸ ½Ç½Ã°£ °è»ê + // 현재 체력만 실시간 계산 foreach (ResourceObject resource in allResources) { if (resource != null) @@ -56,32 +58,32 @@ public float TotalHealthRatio } } - // Ãʱâ ÃÖ´ë ü·ÂÀ¸·Î ³ª´©±â (0À¸·Î ³ª´©±â ¹æÁö) + // 초기 최대 체력으로 나누기 (0으로 나누기 ë°©ì§€) return initialTotalMaxHP > 0 ? totalCurrentHP / initialTotalMaxHP : 1f; } } - // ¼Õ½Çµµ (0~1, 1ÀÌ¸é ¸ðµç ¿ÀºêÁ§Æ®°¡ ÆÄ±«µÊ) + // ì†�실ë�„ (0~1, 1ì�´ë©´ 모든 오브ì �트가 파괴ë�¨) public float DamageRatio => 1f - TotalHealthRatio; private void Awake() { - // ¾ÀÀÇ ¸ðµç ResourceObject ã±â + // 씬ì�˜ 모든 ResourceObject 찾기 RefreshResourceList(); - // Ãʱâ ÃÖ´ë ü·Â °è»ê ¹× Ãʱ⠸®¼Ò½º ¸ñ·Ï ÀúÀå + // 초기 최대 ì²´ë ¥ 계산 ë°� 초기 리소스 목ë¡� 저장 CalculateInitialMaxHP(); - // Ãʱ⠸®¼Ò½º µ¥ÀÌÅÍ º¹»ç (º¹±¸¿ë) + // 초기 리소스 ë�°ì�´í„° 복사 (복구용) CacheInitialResourceData(); } private void Start() { - // ResourceObject¿¡ ÆÄ±« À̺¥Æ® µî·Ï + // ResourceObjectì—� 파괴 ì�´ë²¤íЏ 등ë¡� RegisterResourceEvents(); - // TimeSystem À̺¥Æ® ±¸µ¶ + // TimeSystem ì�´ë²¤íЏ 구ë�… TimeSystem timeSystem = FindObjectOfType(); if (timeSystem != null) { @@ -89,56 +91,58 @@ private void Start() if (debugMode) { - Debug.Log("ResourceManager: TimeSystemÀÇ onMorningStart À̺¥Æ®¿¡ ±¸µ¶µÊ"); + Debug.Log("ResourceManager: TimeSystemì�˜ onMorningStart ì�´ë²¤íЏì—� 구ë�…ë�¨"); } } else if (debugMode) { - Debug.LogWarning("ResourceManager: TimeSystemÀ» ãÀ» ¼ö ¾ø½À´Ï´Ù."); + Debug.LogWarning("ResourceManager: TimeSystemì�„ ì°¾ì�„ 수 없습니다."); } if (debugMode) { - Debug.Log($"ResourceManager: Ãʱâ ÃÖ´ë ü·Â ÇÕ°è = {initialTotalMaxHP}"); - Debug.Log($"ResourceManager: Ãʱ⠸®¼Ò½º °³¼ö = {initialResources.Count}"); - Debug.Log($"ResourceManager: ij½ÃµÈ ¸®¼Ò½º ÇÁ¸®ÆÕ °³¼ö = {initialResourceData.Count}"); + Debug.Log($"ResourceManager: 초기 최대 ì²´ë ¥ 합계 = {initialTotalMaxHP}"); + Debug.Log($"ResourceManager: 초기 리소스 개수 = {initialResources.Count}"); + Debug.Log($"ResourceManager: ìº�시ë�œ 리소스 프리팹 개수 = {initialResourceData.Count}"); } } private void OnDestroy() { - // TimeSystem À̺¥Æ® ±¸µ¶ ÇØÁ¦ + // TimeSystem ì�´ë²¤íЏ 구ë�… í•´ì œ TimeSystem timeSystem = FindObjectOfType(); if (timeSystem != null) { timeSystem.onMorningStart.RemoveListener(OnMorningStart); } + + UnsubscribeAllResourceDestroyedHandlers(); } - // Ãʱ⠸®¼Ò½º µ¥ÀÌÅÍ Ä³½Ì (º¹±¸¿ë) + // 초기 리소스 ë�°ì�´í„° ìº�싱 (복구용) private void CacheInitialResourceData() { initialResourceData.Clear(); - // ¾À¿¡ ÀÖ´Â ¸ðµç ¸®¼Ò½º ¿ÀºêÁ§Æ®ÀÇ ÇÁ¸®ÆÕ Á¤º¸ ÀúÀå + // 씬ì—� 있는 모든 리소스 오브ì �트ì�˜ 프리팹 ì •ë³´ 저장 foreach (ResourceObject resource in initialResources) { if (resource != null) { string objectName = resource.gameObject.name.Replace("(Clone)", "").Trim(); - // ÀÌ¹Ì Á¸ÀçÇÏÁö ¾Ê´Â °æ¿ì¿¡¸¸ Ãß°¡ + // ì�´ë¯¸ 존재하지 않는 경우ì—�ë§Œ 추가 if (!initialResourceData.ContainsKey(resource.ResourceName)) { - // ¸ÕÀú ÇÁ¸®ÆÕ ¸ñ·Ï¿¡¼­ ã±â + // 먼저 프리팹 목ë¡�ì—�서 찾기 GameObject prefab = FindPrefabByName(objectName); - // ãÁö ¸øÇß´Ù¸é ¸®¼Ò½º ¿ÀºêÁ§Æ® ÀÚü¸¦ ÅÛÇø´À¸·Î ÀúÀå + // 찾지 못했다면 리소스 오브ì �트 ìž�체를 템플릿으로 저장 if (prefab == null) { if (debugMode) { - Debug.LogWarning($"ResourceManager: '{objectName}' ÇÁ¸®ÆÕÀ» ãÀ» ¼ö ¾ø¾î ¿ÀºêÁ§Æ® ÀÚü¸¦ ÅÛÇø´À¸·Î »ç¿ëÇÕ´Ï´Ù."); + Debug.LogWarning($"ResourceManager: '{objectName}' 프리팹ì�„ ì°¾ì�„ 수 없어 오브ì �트 ìž�체를 템플릿으로 사용합니다."); } prefab = resource.gameObject; } @@ -147,48 +151,79 @@ private void CacheInitialResourceData() if (debugMode) { - Debug.Log($"ResourceManager: '{resource.ResourceName}' ¸®¼Ò½º µ¥ÀÌÅÍ Ä³½ÌµÊ, ÇÁ¸®ÆÕ: {objectName}"); + Debug.Log($"ResourceManager: '{resource.ResourceName}' 리소스 ë�°ì�´í„° ìº�싱ë�¨, 프리팹: {objectName}"); } } } } } - // ¸®¼Ò½º À̺¥Æ® µî·Ï + // 리소스 ì�´ë²¤íЏ 등ë¡� private void RegisterResourceEvents() { foreach (ResourceObject resource in allResources) { - if (resource != null) + SubscribeToResourceDestroyed(resource); + } + } + + private void SubscribeToResourceDestroyed(ResourceObject resource) + { + if (resource == null || resourceDestroyedHandlers.ContainsKey(resource)) + { + return; + } + + UnityAction handler = () => OnResourceDestroyed(resource); + resourceDestroyedHandlers.Add(resource, handler); + resource.onDestroyed.AddListener(handler); + } + + private void UnsubscribeFromResourceDestroyed(ResourceObject resource) + { + if (resource == null || !resourceDestroyedHandlers.TryGetValue(resource, out UnityAction handler)) + { + return; + } + + resource.onDestroyed.RemoveListener(handler); + resourceDestroyedHandlers.Remove(resource); + } + + private void UnsubscribeAllResourceDestroyedHandlers() + { + foreach (KeyValuePair pair in resourceDestroyedHandlers) + { + if (pair.Key != null) { - // ±âÁ¸ ¸®½º³Ê Á¦°Å ÈÄ ´Ù½Ã µî·Ï (Áߺ¹ ¹æÁö) - resource.onDestroyed.RemoveListener(() => OnResourceDestroyed(resource)); - resource.onDestroyed.AddListener(() => OnResourceDestroyed(resource)); + pair.Key.onDestroyed.RemoveListener(pair.Value); } } + + resourceDestroyedHandlers.Clear(); } - // ¸®¼Ò½º ÆÄ±« À̺¥Æ® Çڵ鷯 + // 리소스 파괴 ì�´ë²¤íЏ 핸들러 private void OnResourceDestroyed(ResourceObject resource) { if (resource == null) return; - // ÆÄ±«µÈ ¸®¼Ò½º Á¤º¸ ÀúÀå + // 파괴ë�œ 리소스 ì •ë³´ 저장 string objectName = resource.gameObject.name.Replace("(Clone)", "").Trim(); GameObject prefab = FindPrefabByName(objectName); - // ÇÁ¸®ÆÕÀ» ãÁö ¸øÇß´Ù¸é Ãʱ⠵¥ÀÌÅÍ¿¡¼­ ã±â + // 프리팹ì�„ 찾지 못했다면 초기 ë�°ì�´í„°ì—�서 찾기 if (prefab == null && initialResourceData.ContainsKey(resource.ResourceName)) { prefab = initialResourceData[resource.ResourceName]; if (debugMode) { - Debug.Log($"ResourceManager: '{objectName}' ÇÁ¸®ÆÕÀ» ãÁö ¸øÇßÁö¸¸ ij½ÃµÈ µ¥ÀÌÅÍ¿¡¼­ ãÀ½: {resource.ResourceName}"); + Debug.Log($"ResourceManager: '{objectName}' 프리팹ì�„ 찾지 못했지만 ìº�시ë�œ ë�°ì�´í„°ì—�서 ì°¾ì�Œ: {resource.ResourceName}"); } } - // Á¤º¸ ÀúÀå + // ì •ë³´ 저장 DestroyedResourceData data = new DestroyedResourceData( prefab, resource.transform.position, @@ -202,46 +237,46 @@ private void OnResourceDestroyed(ResourceObject resource) if (debugMode) { - Debug.Log($"ResourceManager: ¸®¼Ò½º '{resource.ResourceName}' ÆÄ±« Á¤º¸ ÀúÀåµÊ (º¹±¸ ´ë±â ¸®¼Ò½º: {destroyedResources.Count}°³)"); + Debug.Log($"ResourceManager: 리소스 '{resource.ResourceName}' 파괴 ì •ë³´ 저장ë�¨ (복구 대기 리소스: {destroyedResources.Count}ê°œ)"); } - // ¸®½ºÆ®¿¡¼­ ¸®¼Ò½º Á¦°Å + // 리스트ì—�서 리소스 제거 RemoveResource(resource); } - // ¾ÆÄ§ ½ÃÀÛ ½Ã È£ÃâµÇ´Â ¸Þ¼Òµå + // 아침 시작 시 호출ë�˜ëŠ” 메소드 private void OnMorningStart() { if (debugMode) { - Debug.Log("ResourceManager: ¾ÆÄ§ ½ÃÀÛ, ÆÄ±«µÈ ¸®¼Ò½º º¹±¸ ½ÃÀÛ"); + Debug.Log("ResourceManager: 아침 시작, 파괴ë�œ 리소스 복구 시작"); } StartCoroutine(RestoreDestroyedResources()); } - // ÆÄ±«µÈ ¸®¼Ò½º º¹±¸ ÄÚ·çÆ¾ + // 파괴ë�œ 리소스 복구 코루틴 private IEnumerator RestoreDestroyedResources() { - // º¹±¸ÇÒ ¸®¼Ò½º°¡ ¾øÀ¸¸é Á¾·á + // 복구할 리소스가 없으면 종료 if (destroyedResources.Count == 0) { if (debugMode) { - Debug.Log("ResourceManager: º¹±¸ÇÒ ¸®¼Ò½º°¡ ¾ø½À´Ï´Ù."); + Debug.Log("ResourceManager: 복구할 리소스가 없습니다."); } yield break; } if (debugMode) { - Debug.Log($"ResourceManager: {destroyedResources.Count}°³ÀÇ ¸®¼Ò½º º¹±¸ ½ÃÀÛ"); + Debug.Log($"ResourceManager: {destroyedResources.Count}ê°œì�˜ 리소스 복구 시작"); } - // ¾à°£ÀÇ Áö¿¬ ÈÄ º¹±¸ ½ÃÀÛ (´Ù¸¥ ½Ã½ºÅÛÀÌ ÁغñµÉ ½Ã°£) + // 약간ì�˜ 지연 후 복구 시작 (다른 시스템ì�´ 준비ë�  시간) yield return new WaitForSeconds(0.5f); - // ¸ðµç ÆÄ±«µÈ ¸®¼Ò½º º¹±¸ + // 모든 파괴ë�œ 리소스 복구 List resourcesToRestore = new List(destroyedResources); int successCount = 0; @@ -249,7 +284,7 @@ private IEnumerator RestoreDestroyedResources() { GameObject newObject = null; - // ÇÁ¸®ÆÕÀ¸·Î º¹±¸ ½Ãµµ + // 프리팹으로 복구 시ë�„ if (data.prefab != null) { newObject = Instantiate(data.prefab, data.position, data.rotation); @@ -257,15 +292,15 @@ private IEnumerator RestoreDestroyedResources() if (debugMode) { - Debug.Log($"ResourceManager: ¸®¼Ò½º '{data.resourceName}' ¿ø·¡ ÇÁ¸®ÆÕÀ¸·Î º¹±¸µÊ"); + Debug.Log($"ResourceManager: 리소스 '{data.resourceName}' ì›�래 프리팹으로 복구ë�¨"); } } - // ÇÁ¸®ÆÕÀ» ãÁö ¸øÇß´Ù¸é ¸®¼Ò½º ÇÁ¸®ÆÕ ¹è¿­¿¡¼­ À̸§À¸·Î ´Ù½Ã ã±â + // 프리팹ì�„ 찾지 못했다면 리소스 프리팹 ë°°ì—´ì—�서 ì�´ë¦„으로 다시 찾기 else { GameObject matchingPrefab = null; - // ¸®¼Ò½º À̸§À¸·Î ÇÁ¸®ÆÕ ã±â + // 리소스 ì�´ë¦„으로 프리팹 찾기 foreach (GameObject prefab in resourcePrefabs) { if (prefab != null) @@ -279,7 +314,7 @@ private IEnumerator RestoreDestroyedResources() } } - // ãÀº ÇÁ¸®ÆÕÀ¸·Î º¹±¸ + // ì°¾ì�€ 프리팹으로 복구 if (matchingPrefab != null) { newObject = Instantiate(matchingPrefab, data.position, data.rotation); @@ -287,27 +322,19 @@ private IEnumerator RestoreDestroyedResources() if (debugMode) { - Debug.Log($"ResourceManager: ¸®¼Ò½º '{data.resourceName}' À̸§ ÀÏÄ¡ ÇÁ¸®ÆÕÀ¸·Î º¹±¸µÊ"); + Debug.Log($"ResourceManager: 리소스 '{data.resourceName}' ì�´ë¦„ ì�¼ì¹˜ 프리팹으로 복구ë�¨"); } } - // ±âº» ÇÁ¸®ÆÕÀ¸·Î º¹±¸ ½Ãµµ + // 기본 프리팹으로 복구 시ë�„ else if (defaultResourcePrefab != null) { newObject = Instantiate(defaultResourcePrefab, data.position, data.rotation); - // ±âº» Á¤º¸ ¼³Á¤ + // 기본 ì •ë³´ 설정 ResourceObject resourceObj = newObject.GetComponent(); if (resourceObj != null) { - // ÇÁ·ÎÆÛƼ°¡ ÀÖÀ¸¸é ¼³Á¤ - System.Type type = typeof(ResourceObject); - System.Reflection.PropertyInfo propName = type.GetProperty("ResourceName"); - if (propName != null && propName.CanWrite) - { - propName.SetValue(resourceObj, data.resourceName); - } - - // ü·Â ¼³Á¤ ¸Þ¼Òµå È£Ãâ + resourceObj.SetResourceName(data.resourceName); resourceObj.SetMaxHealth(data.maxHP); } @@ -315,19 +342,19 @@ private IEnumerator RestoreDestroyedResources() if (debugMode) { - Debug.Log($"ResourceManager: ¸®¼Ò½º '{data.resourceName}' ±âº» ÇÁ¸®ÆÕÀ¸·Î º¹±¸µÊ"); + Debug.Log($"ResourceManager: 리소스 '{data.resourceName}' 기본 프리팹으로 복구ë�¨"); } } else { if (debugMode) { - Debug.LogWarning($"ResourceManager: ¸®¼Ò½º '{data.resourceName}' º¹±¸ ½ÇÆÐ (ÇÁ¸®ÆÕ ¾øÀ½, ±âº» ÇÁ¸®ÆÕµµ ¾øÀ½)"); + Debug.LogWarning($"ResourceManager: 리소스 '{data.resourceName}' 복구 실패 (프리팹 ì—†ì�Œ, 기본 프리팹ë�„ ì—†ì�Œ)"); } } } - // »ý¼ºµÈ ¿ÀºêÁ§Æ®°¡ ÀÖÀ¸¸é ¸®¼Ò½º µî·Ï + // ìƒ�성ë�œ 오브ì �트가 있으면 리소스 등ë¡� if (newObject != null) { ResourceObject resourceComponent = newObject.GetComponent(); @@ -337,21 +364,21 @@ private IEnumerator RestoreDestroyedResources() } } - // °¢ ¿ÀºêÁ§Æ® »ý¼º »çÀÌ¿¡ ¾à°£ÀÇ Áö¿¬ + // ê°� 오브ì �트 ìƒ�성 사ì�´ì—� 약간ì�˜ 지연 yield return new WaitForSeconds(0.1f); } - // º¹±¸µÈ ¸®¼Ò½º ¸ñ·Ï ºñ¿ì±â + // 복구ë�œ 리소스 목ë¡� 비우기 destroyedResources.Clear(); if (debugMode) { - Debug.Log($"ResourceManager: ¸®¼Ò½º º¹±¸ ¿Ï·á ({successCount}/{resourcesToRestore.Count} ¼º°ø)"); + Debug.Log($"ResourceManager: 리소스 복구 완료 ({successCount}/{resourcesToRestore.Count} 성공)"); LogResourceStatus(); } } - // ¸®¼Ò½º ÇÁ¸®ÆÕ ã±â (À̸§ ±âÁØ) + // 리소스 프리팹 찾기 (ì�´ë¦„ 기준) private GameObject FindPrefabByName(string name) { if (string.IsNullOrEmpty(name)) return null; @@ -367,13 +394,13 @@ private GameObject FindPrefabByName(string name) return null; } - // Ãʱâ ÃÖ´ë ü·Â °è»ê - ¾À ½ÃÀÛ ½Ã ÇÑ ¹ø¸¸ È£Ãâ + // 초기 최대 ì²´ë ¥ 계산 - 씬 시작 시 한 번만 호출 private void CalculateInitialMaxHP() { initialTotalMaxHP = 0f; initialResources.Clear(); - // ¸ðµç ¸®¼Ò½ºÀÇ ÃÖ´ë ü·Â ÇÕ»ê ¹× Ãʱ⠸®¼Ò½º ¸ñ·Ï ÀúÀå + // 모든 리소스ì�˜ 최대 ì²´ë ¥ í•©ì‚° ë°� 초기 리소스 목ë¡� 저장 foreach (ResourceObject resource in allResources) { if (resource != null) @@ -385,38 +412,38 @@ private void CalculateInitialMaxHP() if (debugMode) { - Debug.Log($"ResourceManager: Ãʱâ ÃÖ´ë ü·Â °è»ê ¿Ï·á = {initialTotalMaxHP}"); + Debug.Log($"ResourceManager: 초기 최대 ì²´ë ¥ 계산 완료 = {initialTotalMaxHP}"); } } public void RefreshResourceList() { + UnsubscribeAllResourceDestroyedHandlers(); allResources.Clear(); allResources.AddRange(FindObjectsOfType()); + RegisterResourceEvents(); if (debugMode) { - Debug.Log($"ResourceManager: {allResources.Count}°³ÀÇ ÀçÈ­ ¿ÀºêÁ§Æ® ¹ß°ß"); + Debug.Log($"ResourceManager: {allResources.Count}ê°œì�˜ 재화 오브ì �트 발견"); } } - // »õ ÀÚ¿ø Ãß°¡ + // 새 ìž�ì›� 추가 public void AddResource(ResourceObject resource) { if (resource != null && !allResources.Contains(resource)) { allResources.Add(resource); - // ÆÄ±« À̺¥Æ® µî·Ï - resource.onDestroyed.RemoveListener(() => OnResourceDestroyed(resource)); - resource.onDestroyed.AddListener(() => OnResourceDestroyed(resource)); + SubscribeToResourceDestroyed(resource); if (debugMode) { - Debug.Log($"ResourceManager: ÀçÈ­ ¿ÀºêÁ§Æ® '{resource.ResourceName}' Ãß°¡"); + Debug.Log($"ResourceManager: 재화 오브ì �트 '{resource.ResourceName}' 추가"); } - // ÃʱâÈ­ ÀÌÈÄ¿¡ Ãß°¡µÈ ¸®¼Ò½º´Â Ãʱâ ÃÖ´ë ü·Â¿¡ ¿µÇâÀ» ÁÖÁö ¾ÊÀ½ - // ÇÊ¿ä½Ã ¾Æ·¡ ÄÚµå ÁÖ¼® ÇØÁ¦ÇÏ¿© µ¿ÀûÀ¸·Î Ãʱâ ÃÖ´ë ü·Â ¾÷µ¥ÀÌÆ® °¡´É + // 초기화 ì�´í›„ì—� 추가ë�œ 리소스는 초기 최대 ì²´ë ¥ì—� ì˜�í–¥ì�„ 주지 않ì�Œ + // 필요시 아래 코드 주ì„� 해제하여 ë�™ì �으로 초기 최대 ì²´ë ¥ ì—…ë�°ì�´íЏ 가능 /* if (!initialResources.Contains(resource)) { @@ -425,29 +452,30 @@ public void AddResource(ResourceObject resource) if (debugMode) { - Debug.Log($"ResourceManager: Ãʱâ ÃÖ´ë ü·Â ¾÷µ¥ÀÌÆ® = {initialTotalMaxHP} (+{resource.MaxHP})"); + Debug.Log($"ResourceManager: 초기 최대 ì²´ë ¥ ì—…ë�°ì�´íЏ = {initialTotalMaxHP} (+{resource.MaxHP})"); } } */ } } - // ÀÚ¿ø Á¦°Å + // ìž�ì›� 제거 public void RemoveResource(ResourceObject resource) { if (resource != null && allResources.Contains(resource)) { + UnsubscribeFromResourceDestroyed(resource); allResources.Remove(resource); if (debugMode) { - Debug.Log($"ResourceManager: ÀçÈ­ ¿ÀºêÁ§Æ® '{resource.ResourceName}' Á¦°ÅµÊ, ³²Àº °³¼ö: {allResources.Count}"); - Debug.Log($"ResourceManager: ÇöÀç ü·Â ºñÀ² = {TotalHealthRatio:P2}"); + Debug.Log($"ResourceManager: 재화 오브ì �트 '{resource.ResourceName}' 제거ë�¨, 남ì�€ 개수: {allResources.Count}"); + Debug.Log($"ResourceManager: 현재 ì²´ë ¥ 비율 = {TotalHealthRatio:P2}"); } } } - // Ãʱ⠻óÅ ¸®¼Â (ÇÊ¿ä½Ã È£Ãâ) + // 초기 ìƒ�태 리셋 (필요시 호출) public void ResetInitialState() { RefreshResourceList(); @@ -456,23 +484,23 @@ public void ResetInitialState() if (debugMode) { - Debug.Log("ResourceManager: Ãʱ⠻óÅ ¸®¼ÂµÊ"); + Debug.Log("ResourceManager: 초기 ìƒ�태 리셋ë�¨"); } } - // Àüü ÀçÈ­ ¿ÀºêÁ§Æ® °³¼ö °¡Á®¿À±â + // ì „ì²´ 재화 오브ì �트 개수 가져오기 public int GetTotalResourceCount() { return allResources.Count; } - // Ãʱâ ÀçÈ­ ¿ÀºêÁ§Æ® °³¼ö °¡Á®¿À±â + // 초기 재화 오브ì �트 개수 가져오기 public int GetInitialResourceCount() { return initialResources.Count; } - // ÇöÀç ¼Õ»óµÈ ÀçÈ­ ¿ÀºêÁ§Æ® °³¼ö °¡Á®¿À±â + // 현재 ì†�ìƒ�ë�œ 재화 오브ì �트 개수 가져오기 public int GetDamagedResourceCount() { int count = 0; @@ -486,7 +514,7 @@ public int GetDamagedResourceCount() return count; } - // ÆÄ±«µÈ ÀçÈ­ ¿ÀºêÁ§Æ® °³¼ö °¡Á®¿À±â (¸®½ºÆ®¿¡¼­ Á¦°ÅµÇÁö ¾ÊÀº 0ü·Â ¿ÀºêÁ§Æ®) + // 파괴ë�œ 재화 오브ì �트 개수 가져오기 (리스트ì—�서 제거ë�˜ì§€ 않ì�€ 0ì²´ë ¥ 오브ì �트) public int GetDestroyedResourceCount() { int count = 0; @@ -500,13 +528,13 @@ public int GetDestroyedResourceCount() return count; } - // º¹±¸ ´ë±â ÁßÀÎ ÆÄ±«µÈ ¸®¼Ò½º °³¼ö °¡Á®¿À±â + // 복구 대기 중ì�¸ 파괴ë�œ 리소스 개수 가져오기 public int GetPendingRestoreCount() { return destroyedResources.Count; } - // Ãʱ⠸®¼Ò½º Áß ÆÄ±«µÈ ºñÀ² (0~1) + // 초기 리소스 중 파괴ë�œ 비율 (0~1) public float GetDestroyedRatio() { int initialCount = initialResources.Count; @@ -524,20 +552,20 @@ public float GetDestroyedRatio() return (float)destroyedCount / initialCount; } - // Àüü ÀçÈ­ ¿ÀºêÁ§Æ® »óÅ ·Î±× Ãâ·Â + // ì „ì²´ 재화 오브ì �트 ìƒ�태 로그 출력 public void LogResourceStatus() { - Debug.Log($"=== ÀçÈ­ ¿ÀºêÁ§Æ® »óÅ ==="); - Debug.Log($"Ãʱâ ÃÖ´ë ü·Â: {initialTotalMaxHP}"); - Debug.Log($"Ãʱ⠰³¼ö: {initialResources.Count}"); - Debug.Log($"ÇöÀç °³¼ö: {allResources.Count}"); - Debug.Log($"º¹±¸ ´ë±â ÁßÀÎ °³¼ö: {destroyedResources.Count}"); - Debug.Log($"ÃÑ Ã¼·Â ºñÀ²: {TotalHealthRatio:P2}"); - Debug.Log($"¼Õ½Çµµ: {DamageRatio:P2}"); - Debug.Log($"¼Õ»óµÈ °³¼ö: {GetDamagedResourceCount()}"); - Debug.Log($"ÆÄ±«µÈ °³¼ö: {GetDestroyedResourceCount()}"); - - Debug.Log($"--- ÇöÀç ¸®¼Ò½º »óÅ ---"); + Debug.Log($"=== 재화 오브ì �트 ìƒ�태 ==="); + Debug.Log($"초기 최대 ì²´ë ¥: {initialTotalMaxHP}"); + Debug.Log($"초기 개수: {initialResources.Count}"); + Debug.Log($"현재 개수: {allResources.Count}"); + Debug.Log($"복구 대기 중ì�¸ 개수: {destroyedResources.Count}"); + Debug.Log($"ì´� ì²´ë ¥ 비율: {TotalHealthRatio:P2}"); + Debug.Log($"ì†�실ë�„: {DamageRatio:P2}"); + Debug.Log($"ì†�ìƒ�ë�œ 개수: {GetDamagedResourceCount()}"); + Debug.Log($"파괴ë�œ 개수: {GetDestroyedResourceCount()}"); + + Debug.Log($"--- 현재 리소스 ìƒ�태 ---"); foreach (ResourceObject resource in allResources) { if (resource != null) @@ -546,4 +574,4 @@ public void LogResourceStatus() } } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/ResourceManager.cs.meta b/Assets/_Project/Scripts/Legacy/ResourceManager.cs.meta similarity index 100% rename from Assets/Scripts/ResourceManager.cs.meta rename to Assets/_Project/Scripts/Legacy/ResourceManager.cs.meta diff --git a/Assets/Scripts/ResourceManagerUpdater.cs b/Assets/_Project/Scripts/Legacy/ResourceManagerUpdater.cs similarity index 100% rename from Assets/Scripts/ResourceManagerUpdater.cs rename to Assets/_Project/Scripts/Legacy/ResourceManagerUpdater.cs diff --git a/Assets/Scripts/ResourceManagerUpdater.cs.meta b/Assets/_Project/Scripts/Legacy/ResourceManagerUpdater.cs.meta similarity index 100% rename from Assets/Scripts/ResourceManagerUpdater.cs.meta rename to Assets/_Project/Scripts/Legacy/ResourceManagerUpdater.cs.meta diff --git a/Assets/Scripts/ResourceObject.cs b/Assets/_Project/Scripts/Legacy/ResourceObject.cs similarity index 52% rename from Assets/Scripts/ResourceObject.cs rename to Assets/_Project/Scripts/Legacy/ResourceObject.cs index 51e37c5..e4a89d2 100644 --- a/Assets/Scripts/ResourceObject.cs +++ b/Assets/_Project/Scripts/Legacy/ResourceObject.cs @@ -5,46 +5,51 @@ public class ResourceObject : MonoBehaviour { - [SerializeField] private float maxHP = 100f; // ÃÖ´ë ü·Â - [SerializeField] private string resourceName = "Goods"; // ÀçÈ­ ¿ÀºêÁ§Æ® À̸§ - [SerializeField] private GameObject destroyEffect; // ÆÄ±« ½Ã ÀÌÆåÆ® - [SerializeField] private bool isInvincible = false; // ¹«Àû ¿©ºÎ (¼±ÅÃÀû) + [SerializeField] private float maxHP = 100f; // 최대 ì²´ë ¥ + [SerializeField] private string resourceName = "Goods"; // 재화 오브ì �트 ì�´ë¦„ + [SerializeField] private GameObject destroyEffect; // 파괴 시 ì�´íŽ™íŠ¸ + [SerializeField] private bool isInvincible = false; // 무ì � 여부 (ì„ íƒ�ì �) [Header("Isometric Settings")] - [SerializeField] private bool updateZPosition = true; // ÀÌ¼Ò¸ÞÆ®¸¯ Z À§Ä¡ ¾÷µ¥ÀÌÆ® ¿©ºÎ + [SerializeField] private bool updateZPosition = true; // ì�´ì†Œë©”트릭 Z 위치 ì—…ë�°ì�´íЏ 여부 [Header("Events")] - public UnityEvent onDamaged; // µ¥¹ÌÁö ¹ÞÀ» ¶§ À̺¥Æ® - public UnityEvent onDestroyed; // ÆÄ±«µÉ ¶§ À̺¥Æ® + public UnityEvent onDamaged; // ë�°ë¯¸ì§€ ë°›ì�„ 때 ì�´ë²¤íЏ + public UnityEvent onDestroyed; // 파괴ë�  때 ì�´ë²¤íЏ - private float currentHP; // ÇöÀç ü·Â - private SpriteRenderer spriteRenderer; // ½ºÇÁ¶óÀÌÆ® ·»´õ·¯ - private PlayerGold playerGold; // Ç÷¹ÀÌ¾î °ñµå ÂüÁ¶ - private IsometricPositionHandler isometricPosition; // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ Çڵ鷯 + private float currentHP; // 현재 ì²´ë ¥ + private SpriteRenderer spriteRenderer; // 스프ë�¼ì�´íЏ ë Œë�”러 + private PlayerGold playerGold; // 플레ì�´ì–´ 골드 참조 + private IsometricPositionHandler isometricPosition; // ì�´ì†Œë©”트릭 위치 핸들러 - // ÃÖ´ë ü·Â ÇÁ·ÎÆÛƼ + // 최대 ì²´ë ¥ 프로í�¼í‹° public float MaxHP => maxHP; - // ÇöÀç ü·Â ÇÁ·ÎÆÛƼ + // 현재 ì²´ë ¥ 프로í�¼í‹° public float CurrentHP => currentHP; - // ü·Â ºñÀ² ÇÁ·ÎÆÛƼ (0~1) + // ì²´ë ¥ 비율 프로í�¼í‹° (0~1) public float HealthRatio => currentHP / maxHP; - // À̸§ ÇÁ·ÎÆÛƼ + // ì�´ë¦„ 프로í�¼í‹° public string ResourceName => resourceName; - // Awake: ÃʱâÈ­ + public void SetResourceName(string newResourceName) + { + resourceName = string.IsNullOrWhiteSpace(newResourceName) ? "Goods" : newResourceName; + } + + // Awake: 초기화 private void Awake() { currentHP = maxHP; spriteRenderer = GetComponent(); - // Ç÷¹ÀÌ¾î °ñµå ¹× HP ÂüÁ¶ ã±â + // 플레ì�´ì–´ 골드 ë°� HP 참조 찾기 playerGold = FindObjectOfType(); - // ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ Çڵ鷯 °¡Á®¿À°Å³ª »ý¼º + // ì�´ì†Œë©”트릭 위치 핸들러 가져오거나 ìƒ�성 isometricPosition = GetComponent(); if (isometricPosition == null && updateZPosition) { @@ -52,28 +57,28 @@ private void Awake() } } - // Start: Ãß°¡ ÃʱâÈ­ + // Start: 추가 초기화 private void Start() { - // »óÅ ǥ½Ã UI ÃʱâÈ­ µî ÇÊ¿ä½Ã ¿©±â¿¡ Ãß°¡ + // ìƒ�태 표시 UI 초기화 등 필요시 여기ì—� 추가 if (updateZPosition && isometricPosition == null) { - // Z À§Ä¡ ¼öµ¿ Á¶Á¤ + // Z 위치 수ë�™ ì¡°ì • UpdateZPosition(); } } - // Update: Z À§Ä¡ ¾÷µ¥ÀÌÆ® + // Update: Z 위치 ì—…ë�°ì�´íЏ private void Update() { if (updateZPosition && isometricPosition == null) { - // Z À§Ä¡ ¼öµ¿ Á¶Á¤ + // Z 위치 수ë�™ ì¡°ì • UpdateZPosition(); } } - // Z À§Ä¡ ¼öµ¿ ¾÷µ¥ÀÌÆ® (ÀÌ¼Ò¸ÞÆ®¸¯ ºä) + // Z 위치 수ë�™ ì—…ë�°ì�´íЏ (ì�´ì†Œë©”트릭 ë·°) private void UpdateZPosition() { Vector3 position = transform.position; @@ -81,100 +86,100 @@ private void UpdateZPosition() transform.position = position; } - // µ¥¹ÌÁö ó¸® ¸Þ¼Òµå + // ë�°ë¯¸ì§€ 처리 메소드 public void TakeDamage(float damage) { - // ¹«Àû »óÅÂ¸é µ¥¹ÌÁö ¹«½Ã + // 무ì � ìƒ�태면 ë�°ë¯¸ì§€ 무시 if (isInvincible) return; - // µ¥¹ÌÁö Àû¿ë + // ë�°ë¯¸ì§€ ì �ìš© currentHP = Mathf.Max(0, currentHP - damage); - // µ¥¹ÌÁö ¹Þ¾ÒÀ» ¶§ À̺¥Æ® ¹ß»ý + // ë�°ë¯¸ì§€ 받았ì�„ 때 ì�´ë²¤íЏ ë°œìƒ� onDamaged?.Invoke(); - // µ¥¹ÌÁö È¿°ú Ç¥½Ã + // ë�°ë¯¸ì§€ 효과 표시 StartCoroutine(DamageEffect()); - Debug.Log($"{resourceName}ÀÌ(°¡) {damage}ÀÇ µ¥¹ÌÁö¸¦ ¹ÞÀ½. ³²Àº ü·Â: {currentHP}/{maxHP}"); + Debug.Log($"{resourceName}ì�´(ê°€) {damage}ì�˜ ë�°ë¯¸ì§€ë¥¼ ë°›ì�Œ. 남ì�€ ì²´ë ¥: {currentHP}/{maxHP}"); - // ü·ÂÀÌ 0ÀÌ µÇ¸é ÆÄ±« + // ì²´ë ¥ì�´ 0ì�´ ë�˜ë©´ 파괴 if (currentHP <= 0) { DestroyResource(); } } - // µ¥¹ÌÁö È¿°ú ÄÚ·çÆ¾ (±ôºýÀÓ È¿°ú) + // ë�°ë¯¸ì§€ 효과 코루틴 (깜빡임 효과) private IEnumerator DamageEffect() { if (spriteRenderer == null) yield break; - // ¿ø·¡ »ö»ó ÀúÀå + // ì›�래 색ìƒ� 저장 Color originalColor = spriteRenderer.color; - // »¡°£»öÀ¸·Î º¯°æ + // 빨간색으로 변경 spriteRenderer.color = Color.red; - // Àá½Ã ´ë±â + // 잠시 대기 yield return new WaitForSeconds(0.1f); - // ¿ø·¡ »ö»óÀ¸·Î º¹±¸ + // ì›�래 색ìƒ�으로 복구 spriteRenderer.color = originalColor; } - // ÀçÈ­ ¿ÀºêÁ§Æ® ÆÄ±« ¸Þ¼Òµå + // 재화 오브ì �트 파괴 메소드 private void DestroyResource() { - // ÆÄ±« À̺¥Æ® ¹ß»ý + // 파괴 ì�´ë²¤íЏ ë°œìƒ� onDestroyed?.Invoke(); - // ÆÄ±« ÀÌÆåÆ® »ý¼º + // 파괴 ì�´íŽ™íŠ¸ ìƒ�성 if (destroyEffect != null) { - // ÀÌÆåÆ® »ý¼º ½Ã Z À§Ä¡ Á¶Á¤ + // ì�´íŽ™íŠ¸ ìƒ�성 시 Z 위치 ì¡°ì • Vector3 effectPosition = transform.position; GameObject effect = Instantiate(destroyEffect, effectPosition, Quaternion.identity); - // ÀÌÆåÆ®¿¡ ÀÌ¼Ò¸ÞÆ®¸¯ À§Ä¡ Çڵ鷯 Ãß°¡ + // ì�´íŽ™íŠ¸ì—� ì�´ì†Œë©”트릭 위치 핸들러 추가 if (effect.GetComponent() == null) { effect.AddComponent(); } } - // ¿ÀºêÁ§Æ® ÆÄ±« + // 오브ì �트 파괴 Destroy(gameObject); } - // Ä¡·á ¸Þ¼Òµå (ÇÊ¿ä½Ã) + // 치료 메소드 (필요시) public void Heal(float amount) { currentHP = Mathf.Min(maxHP, currentHP + amount); - Debug.Log($"{resourceName}ÀÌ(°¡) {amount}¸¸Å­ ȸº¹µÊ. ÇöÀç ü·Â: {currentHP}/{maxHP}"); + Debug.Log($"{resourceName}ì�´(ê°€) {amount}ë§Œí�¼ 회복ë�¨. 현재 ì²´ë ¥: {currentHP}/{maxHP}"); } - // ü·Â ¼³Á¤ ¸Þ¼Òµå + // ì²´ë ¥ 설정 메소드 public void SetHealth(float health) { currentHP = Mathf.Clamp(health, 0, maxHP); - // ü·ÂÀÌ 0ÀÌ¸é ÆÄ±« + // ì²´ë ¥ì�´ 0ì�´ë©´ 파괴 if (currentHP <= 0) { DestroyResource(); } } - // ÃÖ´ë ü·Â ¼³Á¤ ¸Þ¼Òµå + // 최대 ì²´ë ¥ 설정 메소드 public void SetMaxHealth(float newMaxHP) { - float ratio = currentHP / maxHP; // ÇöÀç ü·Â ºñÀ² À¯Áö + float ratio = currentHP / maxHP; // 현재 ì²´ë ¥ 비율 유지 maxHP = newMaxHP; currentHP = maxHP * ratio; } - // À§Ä¡ ¼³Á¤ ¸Þ¼Òµå (ÀÌ¼Ò¸ÞÆ®¸¯ Z ÀÚµ¿ Á¶Á¤) + // 위치 설정 메소드 (ì�´ì†Œë©”트릭 Z ìž�ë�™ ì¡°ì •) public void SetPosition(Vector3 newPosition) { if (isometricPosition != null) @@ -187,4 +192,4 @@ public void SetPosition(Vector3 newPosition) transform.position = newPosition; } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/ResourceObject.cs.meta b/Assets/_Project/Scripts/Legacy/ResourceObject.cs.meta similarity index 100% rename from Assets/Scripts/ResourceObject.cs.meta rename to Assets/_Project/Scripts/Legacy/ResourceObject.cs.meta diff --git a/Assets/Scripts/ResourceObjectEditor.cs b/Assets/_Project/Scripts/Legacy/ResourceObjectEditor.cs similarity index 100% rename from Assets/Scripts/ResourceObjectEditor.cs rename to Assets/_Project/Scripts/Legacy/ResourceObjectEditor.cs diff --git a/Assets/Scripts/ResourceObjectEditor.cs.meta b/Assets/_Project/Scripts/Legacy/ResourceObjectEditor.cs.meta similarity index 100% rename from Assets/Scripts/ResourceObjectEditor.cs.meta rename to Assets/_Project/Scripts/Legacy/ResourceObjectEditor.cs.meta diff --git a/Assets/Scripts/SliderPositionAutoSetter.cs b/Assets/_Project/Scripts/Legacy/SliderPositionAutoSetter.cs similarity index 100% rename from Assets/Scripts/SliderPositionAutoSetter.cs rename to Assets/_Project/Scripts/Legacy/SliderPositionAutoSetter.cs diff --git a/Assets/Scripts/SliderPositionAutoSetter.cs.meta b/Assets/_Project/Scripts/Legacy/SliderPositionAutoSetter.cs.meta similarity index 100% rename from Assets/Scripts/SliderPositionAutoSetter.cs.meta rename to Assets/_Project/Scripts/Legacy/SliderPositionAutoSetter.cs.meta diff --git a/Assets/Scripts/SpriteSwitcher.cs b/Assets/_Project/Scripts/Legacy/SpriteSwitcher.cs similarity index 100% rename from Assets/Scripts/SpriteSwitcher.cs rename to Assets/_Project/Scripts/Legacy/SpriteSwitcher.cs diff --git a/Assets/Scripts/SpriteSwitcher.cs.meta b/Assets/_Project/Scripts/Legacy/SpriteSwitcher.cs.meta similarity index 100% rename from Assets/Scripts/SpriteSwitcher.cs.meta rename to Assets/_Project/Scripts/Legacy/SpriteSwitcher.cs.meta diff --git a/Assets/Scripts/SystemTextViewer.cs b/Assets/_Project/Scripts/Legacy/SystemTextViewer.cs similarity index 100% rename from Assets/Scripts/SystemTextViewer.cs rename to Assets/_Project/Scripts/Legacy/SystemTextViewer.cs diff --git a/Assets/Scripts/SystemTextViewer.cs.meta b/Assets/_Project/Scripts/Legacy/SystemTextViewer.cs.meta similarity index 100% rename from Assets/Scripts/SystemTextViewer.cs.meta rename to Assets/_Project/Scripts/Legacy/SystemTextViewer.cs.meta diff --git a/Assets/Scripts/TMPAlpha.cs b/Assets/_Project/Scripts/Legacy/TMPAlpha.cs similarity index 100% rename from Assets/Scripts/TMPAlpha.cs rename to Assets/_Project/Scripts/Legacy/TMPAlpha.cs diff --git a/Assets/Scripts/TMPAlpha.cs.meta b/Assets/_Project/Scripts/Legacy/TMPAlpha.cs.meta similarity index 100% rename from Assets/Scripts/TMPAlpha.cs.meta rename to Assets/_Project/Scripts/Legacy/TMPAlpha.cs.meta diff --git a/Assets/Scripts/TargetManager.cs b/Assets/_Project/Scripts/Legacy/TargetManager.cs similarity index 100% rename from Assets/Scripts/TargetManager.cs rename to Assets/_Project/Scripts/Legacy/TargetManager.cs diff --git a/Assets/Scripts/TargetManager.cs.meta b/Assets/_Project/Scripts/Legacy/TargetManager.cs.meta similarity index 100% rename from Assets/Scripts/TargetManager.cs.meta rename to Assets/_Project/Scripts/Legacy/TargetManager.cs.meta diff --git a/Assets/Scripts/TargetObject.cs b/Assets/_Project/Scripts/Legacy/TargetObject.cs similarity index 100% rename from Assets/Scripts/TargetObject.cs rename to Assets/_Project/Scripts/Legacy/TargetObject.cs diff --git a/Assets/Scripts/TargetObject.cs.meta b/Assets/_Project/Scripts/Legacy/TargetObject.cs.meta similarity index 100% rename from Assets/Scripts/TargetObject.cs.meta rename to Assets/_Project/Scripts/Legacy/TargetObject.cs.meta diff --git a/Assets/Scripts/TextTMPViewer.cs b/Assets/_Project/Scripts/Legacy/TextTMPViewer.cs similarity index 100% rename from Assets/Scripts/TextTMPViewer.cs rename to Assets/_Project/Scripts/Legacy/TextTMPViewer.cs diff --git a/Assets/Scripts/TextTMPViewer.cs.meta b/Assets/_Project/Scripts/Legacy/TextTMPViewer.cs.meta similarity index 100% rename from Assets/Scripts/TextTMPViewer.cs.meta rename to Assets/_Project/Scripts/Legacy/TextTMPViewer.cs.meta diff --git a/Assets/Scripts/Tile.cs b/Assets/_Project/Scripts/Legacy/Tile.cs similarity index 100% rename from Assets/Scripts/Tile.cs rename to Assets/_Project/Scripts/Legacy/Tile.cs diff --git a/Assets/Scripts/Tile.cs.meta b/Assets/_Project/Scripts/Legacy/Tile.cs.meta similarity index 100% rename from Assets/Scripts/Tile.cs.meta rename to Assets/_Project/Scripts/Legacy/Tile.cs.meta diff --git a/Assets/Scripts/TimeBasedUIManager.cs b/Assets/_Project/Scripts/Legacy/TimeBasedUIManager.cs similarity index 100% rename from Assets/Scripts/TimeBasedUIManager.cs rename to Assets/_Project/Scripts/Legacy/TimeBasedUIManager.cs diff --git a/Assets/Scripts/TimeBasedUIManager.cs.meta b/Assets/_Project/Scripts/Legacy/TimeBasedUIManager.cs.meta similarity index 100% rename from Assets/Scripts/TimeBasedUIManager.cs.meta rename to Assets/_Project/Scripts/Legacy/TimeBasedUIManager.cs.meta diff --git a/Assets/Scripts/TimeSystem.cs b/Assets/_Project/Scripts/Legacy/TimeSystem.cs similarity index 62% rename from Assets/Scripts/TimeSystem.cs rename to Assets/_Project/Scripts/Legacy/TimeSystem.cs index 6a5d4da..2b4f154 100644 --- a/Assets/Scripts/TimeSystem.cs +++ b/Assets/_Project/Scripts/Legacy/TimeSystem.cs @@ -11,65 +11,65 @@ public class TimeSystem : MonoBehaviour { [Header("Time Settings")] [SerializeField] private TimeOfDay currentTimeOfDay = TimeOfDay.Morning; - [SerializeField] private float morningTransitionDuration = 1.5f; // ¾ÆÄ§ Àüȯ È¿°ú Áö¼Ó½Ã°£ - [SerializeField] private float eveningTransitionDuration = 1.5f; // Àú³á Àüȯ È¿°ú Áö¼Ó½Ã°£ + [SerializeField] private float morningTransitionDuration = 1.5f; // 아침 전환 효과 ì§€ì†�시간 + [SerializeField] private float eveningTransitionDuration = 1.5f; // ì €ë…� 전환 효과 ì§€ì†�시간 [Header("Visual Effects")] - [SerializeField] private GameObject morningVisualEffect; // ¾ÆÄ§ Àüȯ ½Ã°¢È¿°ú - [SerializeField] private GameObject eveningVisualEffect; // Àú³á Àüȯ ½Ã°¢È¿°ú + [SerializeField] private GameObject morningVisualEffect; // 아침 전환 시ê°�효과 + [SerializeField] private GameObject eveningVisualEffect; // ì €ë…� 전환 시ê°�효과 [Header("Color Settings")] - [SerializeField] private bool useColorTransition = true; // »ö»ó Àüȯ »ç¿ë ¿©ºÎ - [SerializeField] private Color morningBackgroundColor = Color.cyan; // ¾ÆÄ§ ¹è°æ»ö - [SerializeField] private Color eveningBackgroundColor = Color.black; // Àú³á ¹è°æ»ö - [SerializeField] private Color morningTilemapColor = Color.white; // ¾ÆÄ§ ŸÀÏ¸Ê »ö»ó - [SerializeField] private Color eveningTilemapColor = new Color(0.5f, 0.5f, 0.5f, 1f); // Àú³á ŸÀÏ¸Ê »ö»ó - [SerializeField] private List tilemaps = new List(); // »ö»óÀ» º¯°æÇÒ Å¸ÀÏ¸Ê ¸®½ºÆ® - [SerializeField] private float colorTransitionSpeed = 1.0f; // »ö»ó Àüȯ ¼Óµµ + [SerializeField] private bool useColorTransition = true; // 색ìƒ� 전환 사용 여부 + [SerializeField] private Color morningBackgroundColor = Color.cyan; // 아침 배경색 + [SerializeField] private Color eveningBackgroundColor = Color.black; // ì €ë…� 배경색 + [SerializeField] private Color morningTilemapColor = Color.white; // 아침 타ì�¼ë§µ 색ìƒ� + [SerializeField] private Color eveningTilemapColor = new Color(0.5f, 0.5f, 0.5f, 1f); // ì €ë…� 타ì�¼ë§µ 색ìƒ� + [SerializeField] private List tilemaps = new List(); // 색ìƒ�ì�„ 변경할 타ì�¼ë§µ 리스트 + [SerializeField] private float colorTransitionSpeed = 1.0f; // 색ìƒ� 전환 ì†�ë�„ [Header("UI References")] - [SerializeField] private GameObject morningOnlyUI; // ¾ÆÄ§¿¡¸¸ Ç¥½ÃµÇ´Â UI - [SerializeField] private GameObject eveningOnlyUI; // Àú³á¿¡¸¸ Ç¥½ÃµÇ´Â UI - [SerializeField] private GameObject panelStage; // ¿þÀ̺ê Á¾·á ÈÄ Ç¥½ÃµÉ ½ºÅ×ÀÌÁö ÆÐ³Î + [SerializeField] private GameObject morningOnlyUI; // 아침ì—�ë§Œ 표시ë�˜ëŠ” UI + [SerializeField] private GameObject eveningOnlyUI; // ì €ë…�ì—�ë§Œ 표시ë�˜ëŠ” UI + [SerializeField] private GameObject panelStage; // 웨ì�´ë¸Œ 종료 후 표시ë�  스테ì�´ì§€ 패ë„� [Header("System References")] - [SerializeField] private WaveSystem waveSystem; // ¿þÀÌºê ½Ã½ºÅÛ ÂüÁ¶ - [SerializeField] private PlayerGold playerGold; // Ç÷¹ÀÌ¾î °ñµå ÂüÁ¶ - [SerializeField] private PlayerExperience playerExperience; // Ç÷¹ÀÌ¾î °æÇèÄ¡ ÂüÁ¶ - [SerializeField] private MicrophoneSystem microphoneSystem; // ÅëÇÕµÈ ¸¶ÀÌÅ© ½Ã½ºÅÛ - [SerializeField] private DayCounterSystem dayCounterSystem; // Àϼö °ü¸® ½Ã½ºÅÛ ÂüÁ¶ - [SerializeField] private WaveResultSystem waveResultSystem; // ¿þÀÌºê °á°ú ½Ã½ºÅÛ ÂüÁ¶ + [SerializeField] private WaveSystem waveSystem; // 웨ì�´ë¸Œ 시스템 참조 + [SerializeField] private PlayerGold playerGold; // 플레ì�´ì–´ 골드 참조 + [SerializeField] private PlayerExperience playerExperience; // 플레ì�´ì–´ 경험치 참조 + [SerializeField] private MicrophoneSystem microphoneSystem; // 통합ë�œ 마ì�´í�¬ 시스템 + [SerializeField] private DayCounterSystem dayCounterSystem; // ì�¼ìˆ˜ 관리 시스템 참조 + [SerializeField] private WaveResultSystem waveResultSystem; // 웨ì�´ë¸Œ ê²°ê³¼ 시스템 참조 [Header("Layer Settings")] - [SerializeField] private bool useLayerBasedActivation = true; // ·¹ÀÌ¾î ±â¹Ý Ȱ¼ºÈ­/ºñȰ¼ºÈ­ »ç¿ë ¿©ºÎ - [SerializeField] private string morningOnlyLayerName = "MorningOnly"; // ¾ÆÄ§ Àü¿ë ·¹À̾î À̸§ - [SerializeField] private string eveningOnlyLayerName = "EveningOnly"; // Àú³á Àü¿ë ·¹À̾î À̸§ - [SerializeField] private string resourceLayerName = "Resource"; // ÀÚ¿ø ·¹À̾î À̸§ - [SerializeField] private string towerLayerName = "Tower"; // Ÿ¿ö ·¹À̾î À̸§ + [SerializeField] private bool useLayerBasedActivation = true; // ë ˆì�´ì–´ 기반 활성화/비활성화 사용 여부 + [SerializeField] private string morningOnlyLayerName = "MorningOnly"; // 아침 ì „ìš© ë ˆì�´ì–´ ì�´ë¦„ + [SerializeField] private string eveningOnlyLayerName = "EveningOnly"; // ì €ë…� ì „ìš© ë ˆì�´ì–´ ì�´ë¦„ + [SerializeField] private string resourceLayerName = "Resource"; // ìž�ì›� ë ˆì�´ì–´ ì�´ë¦„ + [SerializeField] private string towerLayerName = "Tower"; // 타워 ë ˆì�´ì–´ ì�´ë¦„ // Events public UnityEvent onMorningStart; public UnityEvent onEveningStart; - // ÇöÀç ½Ã°£ ÇÁ·ÎÆÛƼ + // 현재 시간 프로í�¼í‹° public TimeOfDay CurrentTime => currentTimeOfDay; - // ½Ã°£ Àüȯ ÁßÀÎÁö ¿©ºÎ + // 시간 전환 중ì�¸ì§€ 여부 private bool isTransitioning = false; - // ·¹À̾î À妽º ij½Ì + // ë ˆì�´ì–´ ì�¸ë�±ìФ ìº�싱 private int morningLayer; private int eveningLayer; private int resourceLayer; private int towerLayer; - // »ö»ó Àüȯ ÄÚ·çÆ¾ ÂüÁ¶ + // 색ìƒ� 전환 코루틴 참조 private Coroutine colorTransitionCoroutine; private Camera mainCameraCache; private void Awake() { - // ½Ã½ºÅÛ ÄÄÆ÷³ÍÆ® ã±â + // 시스템 ì»´í�¬ë„ŒíЏ 찾기 if (waveSystem == null) waveSystem = FindObjectOfType(); if (playerGold == null) playerGold = FindObjectOfType(); if (playerExperience == null) playerExperience = FindObjectOfType(); @@ -77,43 +77,43 @@ private void Awake() if (dayCounterSystem == null) dayCounterSystem = FindObjectOfType(); if (waveResultSystem == null) waveResultSystem = FindObjectOfType(); - // ¸ÞÀÎ Ä«¸Þ¶ó ij½Ì + // ë©”ì�¸ ì¹´ë©”ë�¼ ìº�싱 mainCameraCache = Camera.main; - // ŸÀÏ¸Ê ÀÚµ¿ ã±â (¸®½ºÆ®°¡ ºñ¾îÀÖ´Â °æ¿ì) + // 타ì�¼ë§µ ìž�ë�™ 찾기 (리스트가 비어있는 경우) if (tilemaps.Count == 0) { Tilemap[] foundTilemaps = FindObjectsOfType(); if (foundTilemaps.Length > 0) { tilemaps.AddRange(foundTilemaps); - Debug.Log($"{foundTilemaps.Length}°³ÀÇ Å¸ÀϸÊÀ» ÀÚµ¿À¸·Î ã¾Ò½À´Ï´Ù."); + Debug.Log($"{foundTilemaps.Length}ê°œì�˜ 타ì�¼ë§µì�„ ìž�ë�™ìœ¼ë¡œ 찾았습니다."); } } - // ·¹À̾î À妽º ij½Ì + // ë ˆì�´ì–´ ì�¸ë�±ìФ ìº�싱 morningLayer = LayerMask.NameToLayer(morningOnlyLayerName); eveningLayer = LayerMask.NameToLayer(eveningOnlyLayerName); resourceLayer = LayerMask.NameToLayer(resourceLayerName); towerLayer = LayerMask.NameToLayer(towerLayerName); - // ·¹À̾ Á¸ÀçÇÏ´ÂÁö È®ÀÎ + // ë ˆì�´ì–´ê°€ 존재하는지 확ì�¸ if (morningLayer == -1) - Debug.LogError($"{morningOnlyLayerName} ·¹À̾ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. Unity¿¡¼­ ·¹À̾ »ý¼ºÇØÁÖ¼¼¿ä."); + Debug.LogError($"{morningOnlyLayerName} ë ˆì�´ì–´ê°€ 존재하지 않습니다. Unityì—�서 ë ˆì�´ì–´ë¥¼ ìƒ�성해주세요."); if (eveningLayer == -1) - Debug.LogError($"{eveningOnlyLayerName} ·¹À̾ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. Unity¿¡¼­ ·¹À̾ »ý¼ºÇØÁÖ¼¼¿ä."); + Debug.LogError($"{eveningOnlyLayerName} ë ˆì�´ì–´ê°€ 존재하지 않습니다. Unityì—�서 ë ˆì�´ì–´ë¥¼ ìƒ�성해주세요."); if (resourceLayer == -1) - Debug.LogError($"{resourceLayerName} ·¹À̾ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. Unity¿¡¼­ ·¹À̾ »ý¼ºÇØÁÖ¼¼¿ä."); + Debug.LogError($"{resourceLayerName} ë ˆì�´ì–´ê°€ 존재하지 않습니다. Unityì—�서 ë ˆì�´ì–´ë¥¼ ìƒ�성해주세요."); if (towerLayer == -1) - Debug.LogError($"{towerLayerName} ·¹À̾ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù. Unity¿¡¼­ ·¹À̾ »ý¼ºÇØÁÖ¼¼¿ä."); + Debug.LogError($"{towerLayerName} ë ˆì�´ì–´ê°€ 존재하지 않습니다. Unityì—�서 ë ˆì�´ì–´ë¥¼ ìƒ�성해주세요."); - // Ãʱ⠽𣠼³Á¤¿¡ µû¸¥ UI ¼³Á¤ + // 초기 시간 설정ì—� 따른 UI 설정 UpdateUIBasedOnTime(currentTimeOfDay); - // Ãʱ⠻ö»ó ¼³Á¤ + // 초기 색ìƒ� 설정 if (useColorTransition) { ApplyTimeBasedColors(currentTimeOfDay); @@ -122,7 +122,7 @@ private void Awake() private void Start() { - // ¿þÀÌºê ½Ã½ºÅÛ À̺¥Æ® ±¸µ¶ + // 웨ì�´ë¸Œ 시스템 ì�´ë²¤íЏ 구ë�… if (waveSystem != null) { waveSystem.OnWaveStart += HandleWaveStart; @@ -130,7 +130,7 @@ private void Start() waveSystem.OnAllWavesCompleted += HandleAllWavesCompleted; } - // Ãʱ⠽ð£ÀÌ Àú³áÀÌ¸é °ÔÀÓ ½ÃÀÛ ½Ã Àú³á ¸ðµå·Î ¼³Á¤ + // 초기 시간ì�´ ì €ë…�ì�´ë©´ 게임 시작 시 ì €ë…� 모드로 설정 if (currentTimeOfDay == TimeOfDay.Evening) { SetEveningMode(false); @@ -143,7 +143,7 @@ private void Start() private void OnDestroy() { - // À̺¥Æ® ±¸µ¶ ÇØÁ¦ + // ì�´ë²¤íЏ 구ë�… í•´ì œ if (waveSystem != null) { waveSystem.OnWaveStart -= HandleWaveStart; @@ -151,213 +151,213 @@ private void OnDestroy() waveSystem.OnAllWavesCompleted -= HandleAllWavesCompleted; } - // ÄÚ·çÆ¾ ÁßÁö + // 코루틴 중지 if (colorTransitionCoroutine != null) { StopCoroutine(colorTransitionCoroutine); } } - #region ¿þÀ̺ê À̺¥Æ® Çڵ鷯 + #region 웨ì�´ë¸Œ ì�´ë²¤íЏ 핸들러 - // ¿þÀÌºê ½ÃÀÛ Ã³¸® + // 웨ì�´ë¸Œ 시작 처리 private void HandleWaveStart(int waveNumber, string waveName) { - // Àú³áÀ¸·Î Àüȯ + // ì €ë…�으로 전환 StartCoroutine(TransitionToEvening()); } - // ¿þÀ̺ê Á¾·á ó¸® + // 웨ì�´ë¸Œ 종료 처리 private void HandleWaveEnd(int waveNumber, string waveName) { - // ¾ÆÄ§À¸·Î Àüȯ + // 아침으로 전환 StartCoroutine(TransitionToMorning()); - // ¿þÀ̺ê Á¾·á ÆÐ³Î Ç¥½Ã + // 웨ì�´ë¸Œ 종료 패ë„� 표시 if (panelStage != null) { panelStage.SetActive(true); } - // ¿þÀÌºê ½Â¸®/ÆÐ¹è È®ÀÎ ÈÄ Àϼö Áõ°¡ ó¸® + // 웨ì�´ë¸Œ 승리/패배 확ì�¸ 후 ì�¼ìˆ˜ ì¦�ê°€ 처리 StartCoroutine(HandleDayCounterAfterWaveResult()); } - // ¿þÀÌºê °á°ú È®ÀÎ ÈÄ Àϼö Áõ°¡ ó¸® ÄÚ·çÆ¾ + // 웨ì�´ë¸Œ ê²°ê³¼ 확ì�¸ 후 ì�¼ìˆ˜ ì¦�ê°€ 처리 코루틴 private IEnumerator HandleDayCounterAfterWaveResult() { - // ¿þÀÌºê °á°ú ó¸® ´ë±â (½Â¸®/ÆÐ¹è ÆÇÁ¤¿¡ ½Ã°£ÀÌ ÇÊ¿äÇÒ ¼ö ÀÖÀ½) + // 웨ì�´ë¸Œ ê²°ê³¼ 처리 대기 (승리/패배 íŒ�ì •ì—� 시간ì�´ 필요할 수 있ì�Œ) yield return new WaitForSeconds(1f); - // Àϼö Áõ°¡ ó¸® (ù ¹øÂ° ¿þÀ̺갡 ¾Æ´Ñ °æ¿ì) + // ì�¼ìˆ˜ ì¦�ê°€ 처리 (첫 번째 웨ì�´ë¸Œê°€ 아닌 경우) if (waveSystem != null && waveSystem.CurrentWave > 1 && dayCounterSystem != null) { - // Àϼö Áõ°¡ + // ì�¼ìˆ˜ ì¦�ê°€ dayCounterSystem.IncrementDay(); } } - // ¸ðµç ¿þÀÌºê ¿Ï·á ó¸® + // 모든 웨ì�´ë¸Œ 완료 처리 private void HandleAllWavesCompleted() { - // ¸ðµç ¿þÀÌºê ¿Ï·á ½Ã Æ¯º° ó¸® - // ex) °ÔÀÓ Å¬¸®¾î È­¸é ¶Ç´Â ´ÙÀ½ ½ºÅ×ÀÌÁö µî - Debug.Log("¸ðµç ¿þÀÌºê ¿Ï·áµÊ! °ÔÀÓ Å¬¸®¾î ¶Ç´Â ´ÙÀ½ ½ºÅ×ÀÌÁö·Î ÁøÇà"); + // 모든 웨ì�´ë¸Œ 완료 시 특별 처리 + // ex) 게임 í�´ë¦¬ì–´ 화면 ë˜�는 다ì�Œ 스테ì�´ì§€ 등 + Debug.Log("모든 웨ì�´ë¸Œ 완료ë�¨! 게임 í�´ë¦¬ì–´ ë˜�는 다ì�Œ 스테ì�´ì§€ë¡œ ì§„í–‰"); } #endregion - #region ½Ã°£ Àüȯ °ü¸® + #region 시간 전환 관리 - // Àú³áÀ¸·Î ÀüȯÇÏ´Â ÄÚ·çÆ¾ + // ì €ë…�으로 전환하는 코루틴 public IEnumerator TransitionToEvening() { if (isTransitioning || currentTimeOfDay == TimeOfDay.Evening) yield break; isTransitioning = true; - // Àüȯ È¿°ú Ç¥½Ã + // 전환 효과 표시 if (eveningVisualEffect != null) { eveningVisualEffect.SetActive(true); } - // »ö»ó Àüȯ ½ÃÀÛ (¹è°æ»ö°ú ŸÀÏ¸Ê »ö»ó) + // 색ìƒ� 전환 시작 (배경색과 타ì�¼ë§µ 색ìƒ�) if (useColorTransition) { StartColorTransition(TimeOfDay.Evening); } - // Àüȯ Áö¿¬ + // 전환 지연 yield return new WaitForSeconds(eveningTransitionDuration); - // Àüȯ È¿°ú Á¾·á + // 전환 효과 종료 if (eveningVisualEffect != null) { eveningVisualEffect.SetActive(false); } - // Àú³á ¸ðµå ¼³Á¤ + // ì €ë…� 모드 설정 SetEveningMode(); isTransitioning = false; } - // ¾ÆÄ§À¸·Î ÀüȯÇÏ´Â ÄÚ·çÆ¾ + // 아침으로 전환하는 코루틴 public IEnumerator TransitionToMorning() { if (isTransitioning || currentTimeOfDay == TimeOfDay.Morning) yield break; isTransitioning = true; - // Àüȯ È¿°ú Ç¥½Ã + // 전환 효과 표시 if (morningVisualEffect != null) { morningVisualEffect.SetActive(true); } - // »ö»ó Àüȯ ½ÃÀÛ (¹è°æ»ö°ú ŸÀÏ¸Ê »ö»ó) + // 색ìƒ� 전환 시작 (배경색과 타ì�¼ë§µ 색ìƒ�) if (useColorTransition) { StartColorTransition(TimeOfDay.Morning); } - // Àüȯ Áö¿¬ + // 전환 지연 yield return new WaitForSeconds(morningTransitionDuration); - // Àüȯ È¿°ú Á¾·á + // 전환 효과 종료 if (morningVisualEffect != null) { morningVisualEffect.SetActive(false); } - // ¾ÆÄ§ ¸ðµå ¼³Á¤ + // 아침 모드 설정 SetMorningMode(); isTransitioning = false; } - // Àú³á ¸ðµå ¼³Á¤ + // ì €ë…� 모드 설정 public void SetEveningMode(bool withEvents = true) { currentTimeOfDay = TimeOfDay.Evening; - // UI ¾÷µ¥ÀÌÆ® + // UI ì—…ë�°ì�´íЏ UpdateUIBasedOnTime(TimeOfDay.Evening); - // ·¹ÀÌ¾î ±â¹Ý Ȱ¼ºÈ­/ºñȰ¼ºÈ­ ¾÷µ¥ÀÌÆ® + // ë ˆì�´ì–´ 기반 활성화/비활성화 ì—…ë�°ì�´íЏ if (useLayerBasedActivation) { UpdateLayersBasedOnTime(TimeOfDay.Evening); } - // °ÔÀÓÇ÷¹ÀÌ ¿ä¼Ò ¾÷µ¥ÀÌÆ® + // 게임플레ì�´ 요소 ì—…ë�°ì�´íЏ UpdateGameplayForEvening(); - // ¾Ö´Ï¸ÞÀÌ¼Ç ¾øÀÌ ¹Ù·Î »ö»ó Àû¿ë + // 애니메ì�´ì…˜ ì—†ì�´ 바로 색ìƒ� ì �ìš© if (useColorTransition && !isTransitioning) { ApplyTimeBasedColors(TimeOfDay.Evening); } - // À̺¥Æ® ¹ß»ý + // ì�´ë²¤íЏ ë°œìƒ� if (withEvents) { onEveningStart?.Invoke(); } - Debug.Log("Àú³áÀ¸·Î ÀüȯµÊ: ÀüÅõ ½ÃÀÛ"); + Debug.Log("ì €ë…�으로 전환ë�¨: 전투 시작"); } - // ¾ÆÄ§ ¸ðµå ¼³Á¤ + // 아침 모드 설정 public void SetMorningMode(bool withEvents = true) { currentTimeOfDay = TimeOfDay.Morning; - // UI ¾÷µ¥ÀÌÆ® + // UI ì—…ë�°ì�´íЏ UpdateUIBasedOnTime(TimeOfDay.Morning); - // ·¹ÀÌ¾î ±â¹Ý Ȱ¼ºÈ­/ºñȰ¼ºÈ­ ¾÷µ¥ÀÌÆ® + // ë ˆì�´ì–´ 기반 활성화/비활성화 ì—…ë�°ì�´íЏ if (useLayerBasedActivation) { UpdateLayersBasedOnTime(TimeOfDay.Morning); } - // °ÔÀÓÇ÷¹ÀÌ ¿ä¼Ò ¾÷µ¥ÀÌÆ® + // 게임플레ì�´ 요소 ì—…ë�°ì�´íЏ UpdateGameplayForMorning(); - // ¾Ö´Ï¸ÞÀÌ¼Ç ¾øÀÌ ¹Ù·Î »ö»ó Àû¿ë + // 애니메ì�´ì…˜ ì—†ì�´ 바로 색ìƒ� ì �ìš© if (useColorTransition && !isTransitioning) { ApplyTimeBasedColors(TimeOfDay.Morning); } - // À̺¥Æ® ¹ß»ý + // ì�´ë²¤íЏ ë°œìƒ� if (withEvents) { onMorningStart?.Invoke(); } - Debug.Log("¾ÆÄ§À¸·Î ÀüȯµÊ: Áغñ ´Ü°è"); + Debug.Log("아침으로 전환ë�¨: 준비 단계"); } #endregion - #region »ö»ó Àüȯ °ü¸® + #region 색ìƒ� 전환 관리 - // »ö»ó Àüȯ ½ÃÀÛ + // 색ìƒ� 전환 시작 private void StartColorTransition(TimeOfDay targetTime) { if (mainCameraCache == null) mainCameraCache = Camera.main; if (mainCameraCache == null) return; - // ±âÁ¸ ÄÚ·çÆ¾ ÁßÁö + // 기존 코루틴 중지 if (colorTransitionCoroutine != null) { StopCoroutine(colorTransitionCoroutine); } - // »õ ÄÚ·çÆ¾ ½ÃÀÛ + // 새 코루틴 시작 colorTransitionCoroutine = StartCoroutine( SwapColor( targetTime == TimeOfDay.Morning ? eveningBackgroundColor : morningBackgroundColor, @@ -368,7 +368,7 @@ private void StartColorTransition(TimeOfDay targetTime) ); } - // »ö»ó Àüȯ ÄÚ·çÆ¾ (¹è°æ ¹× ŸÀϸÊ) + // 색ìƒ� 전환 코루틴 (ë°°ê²½ ë°� 타ì�¼ë§µ) private IEnumerator SwapColor(Color startBg, Color endBg, Color startTile, Color endTile) { float t = 0; @@ -378,13 +378,13 @@ private IEnumerator SwapColor(Color startBg, Color endBg, Color startTile, Color { t += Time.deltaTime / (duration * colorTransitionSpeed); - // ¹è°æ»ö º¯°æ + // 배경색 변경 if (mainCameraCache != null) { mainCameraCache.backgroundColor = Color.Lerp(startBg, endBg, t); } - // ¸ðµç ŸÀϸÊÀÇ »ö»ó º¯°æ + // 모든 타ì�¼ë§µì�˜ 색ìƒ� 변경 foreach (var tilemap in tilemaps) { if (tilemap != null) @@ -396,7 +396,7 @@ private IEnumerator SwapColor(Color startBg, Color endBg, Color startTile, Color yield return null; } - // ÃÖÁ¾ »ö»ó Àû¿ë + // 최종 색ìƒ� ì �ìš© if (mainCameraCache != null) { mainCameraCache.backgroundColor = endBg; @@ -413,19 +413,19 @@ private IEnumerator SwapColor(Color startBg, Color endBg, Color startTile, Color colorTransitionCoroutine = null; } - // ½Ã°£¿¡ µû¸¥ »ö»ó Áï½Ã Àû¿ë (¾Ö´Ï¸ÞÀÌ¼Ç ¾øÀÌ) + // 시간ì—� 따른 색ìƒ� 즉시 ì �ìš© (애니메ì�´ì…˜ ì—†ì�´) private void ApplyTimeBasedColors(TimeOfDay time) { if (mainCameraCache == null) mainCameraCache = Camera.main; if (mainCameraCache == null) return; - // ¹è°æ»ö ¼³Á¤ + // 배경색 설정 if (mainCameraCache != null) { mainCameraCache.backgroundColor = time == TimeOfDay.Morning ? morningBackgroundColor : eveningBackgroundColor; } - // ŸÀÏ¸Ê »ö»ó ¼³Á¤ + // 타ì�¼ë§µ 색ìƒ� 설정 Color tileColor = time == TimeOfDay.Morning ? morningTilemapColor : eveningTilemapColor; foreach (var tilemap in tilemaps) { @@ -438,12 +438,12 @@ private void ApplyTimeBasedColors(TimeOfDay time) #endregion - #region UI ¹× °ÔÀÓÇ÷¹ÀÌ ¾÷µ¥ÀÌÆ® + #region UI ë°� 게임플레ì�´ ì—…ë�°ì�´íЏ - // ½Ã°£¿¡ µû¸¥ UI ¾÷µ¥ÀÌÆ® + // 시간ì—� 따른 UI ì—…ë�°ì�´íЏ private void UpdateUIBasedOnTime(TimeOfDay time) { - // ½Ã°£¿¡ µû¸¥ UI Ç¥½Ã/¼û±è + // 시간ì—� 따른 UI 표시/숨김 if (morningOnlyUI != null) { morningOnlyUI.SetActive(time == TimeOfDay.Morning); @@ -455,12 +455,12 @@ private void UpdateUIBasedOnTime(TimeOfDay time) } } - // ·¹ÀÌ¾î ±â¹Ý ¿ÀºêÁ§Æ® Ȱ¼ºÈ­/ºñȰ¼ºÈ­ ¾÷µ¥ÀÌÆ® + // ë ˆì�´ì–´ 기반 오브ì �트 활성화/비활성화 ì—…ë�°ì�´íЏ private void UpdateLayersBasedOnTime(TimeOfDay time) { if (morningLayer < 0 || eveningLayer < 0) { - Debug.LogWarning("MorningOnly ¶Ç´Â EveningOnly ·¹À̾ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù."); + Debug.LogWarning("MorningOnly ë˜�는 EveningOnly ë ˆì�´ì–´ê°€ 존재하지 않습니다."); return; } @@ -476,87 +476,87 @@ private void UpdateLayersBasedOnTime(TimeOfDay time) } } - // ¾ÆÄ§ ¸ðµåÀÇ °ÔÀÓÇ÷¹ÀÌ ¾÷µ¥ÀÌÆ® + // 아침 모드ì�˜ 게임플레ì�´ ì—…ë�°ì�´íЏ private void UpdateGameplayForMorning() { - // ·¹ÀÌ¾î ±â¹Ý ÀÚ¿ø ¿ÀºêÁ§Æ® µå·¡±× ¹× ȸÀü Ȱ¼ºÈ­ + // ë ˆì�´ì–´ 기반 ìž�ì›� 오브ì �트 드래그 ë°� 회전 활성화 SetResourceObjectsByLayerDraggable(true); - // ·¹ÀÌ¾î ±â¹Ý Ÿ¿ö °ø°Ý ºñȰ¼ºÈ­ + // ë ˆì�´ì–´ 기반 타워 공격 비활성화 SetTowerAttackEnabledByLayer(false); - // Ÿ¿ö ±¸¸Å/ÆÇ¸Å ±â´É Ȱ¼ºÈ­ + // 타워 구매/íŒ�매 기능 활성화 SetTowerTradeEnabled(true); - // Ÿ¿ö ¾÷±×·¹À̵å Ȱ¼ºÈ­ + // 타워 업그레ì�´ë“œ 활성화 SetTowerUpgradeEnabledByLayer(true); - // Ç÷¹ÀÌ¾î °ü·Ã ¼³Á¤ (MicrophoneSystem »ç¿ë) + // 플레ì�´ì–´ 관련 설정 (MicrophoneSystem 사용) HandlePlayerSettings(true, false); - // ¸¶ÀÌÅ© ½Ã½ºÅÛ È°¼ºÈ­ »óÅ ¼³Á¤ + // 마ì�´í�¬ 시스템 활성화 ìƒ�태 설정 if (microphoneSystem != null) { - // ¸¶ÀÌÅ© ½Ã½ºÅÛ ÀÚü´Â À̺¥Æ®¸¦ ÅëÇØ ó¸®µÊ (OnMorningStart¿¡¼­) + // 마ì�´í�¬ 시스템 ìž�체는 ì�´ë²¤íŠ¸ë¥¼ 통해 처리ë�¨ (OnMorningStartì—�서) microphoneSystem.SetPlayerActivationEnabled(false); } - // ÇǷεµ ¸®¼Â (¿þÀ̺ê Á¾·á ÈÄ) + // 피로ë�„ 리셋 (웨ì�´ë¸Œ 종료 후) if (playerGold != null) { playerGold.ResetFatigue(); } } - // Àú³á ¸ðµåÀÇ °ÔÀÓÇ÷¹ÀÌ ¾÷µ¥ÀÌÆ® + // ì €ë…� 모드ì�˜ 게임플레ì�´ ì—…ë�°ì�´íЏ private void UpdateGameplayForEvening() { - // ·¹ÀÌ¾î ±â¹Ý ÀÚ¿ø ¿ÀºêÁ§Æ® µå·¡±× ¹× ȸÀü ºñȰ¼ºÈ­ + // ë ˆì�´ì–´ 기반 ìž�ì›� 오브ì �트 드래그 ë°� 회전 비활성화 SetResourceObjectsByLayerDraggable(false); - // ·¹ÀÌ¾î ±â¹Ý Ÿ¿ö °ø°Ý Ȱ¼ºÈ­ + // ë ˆì�´ì–´ 기반 타워 공격 활성화 SetTowerAttackEnabledByLayer(true); - // Ÿ¿ö ±¸¸Å/ÆÇ¸Å ±â´É ºñȰ¼ºÈ­ + // 타워 구매/íŒ�매 기능 비활성화 SetTowerTradeEnabled(false); - // Ÿ¿ö ¾÷±×·¹À̵å Ȱ¼ºÈ­ + // 타워 업그레ì�´ë“œ 활성화 SetTowerUpgradeEnabledByLayer(true); - // Ç÷¹ÀÌ¾î °ü·Ã ¼³Á¤ (MicrophoneSystem »ç¿ë) + // 플레ì�´ì–´ 관련 설정 (MicrophoneSystem 사용) HandlePlayerSettings(false, true); - // ¸¶ÀÌÅ© ½Ã½ºÅÛ È°¼ºÈ­ »óÅ ¼³Á¤ + // 마ì�´í�¬ 시스템 활성화 ìƒ�태 설정 if (microphoneSystem != null) { - // ¸¶ÀÌÅ© ½Ã½ºÅÛ ÀÚü´Â À̺¥Æ®¸¦ ÅëÇØ ó¸®µÊ (OnEveningStart¿¡¼­) + // 마ì�´í�¬ 시스템 ìž�체는 ì�´ë²¤íŠ¸ë¥¼ 통해 처리ë�¨ (OnEveningStartì—�서) microphoneSystem.SetPlayerActivationEnabled(true); } } #endregion - #region °ÔÀÓ ¿ÀºêÁ§Æ® ¹× ÄÄÆ÷³ÍÆ® °ü¸® + #region 게임 오브ì �트 ë°� ì»´í�¬ë„ŒíЏ 관리 - // ½Ã°£¿¡ µû¸¥ ·¹ÀÌ¾î ±â¹Ý ¿ÀºêÁ§Æ® Ȱ¼ºÈ­/ºñȰ¼ºÈ­ + // 시간ì—� 따른 ë ˆì�´ì–´ 기반 오브ì �트 활성화/비활성화 private void ActivateLayerObjects(int layerToActivate, int layerToDeactivate) { if (!useLayerBasedActivation) return; - // ã±â Àü¿¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎ + // 찾기 ì „ì—� 존재하는지 확ì�¸ if (layerToActivate < 0 || layerToDeactivate < 0) { - Debug.LogWarning("ÁöÁ¤µÈ ·¹À̾î Áß Çϳª ÀÌ»óÀÌ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù."); + Debug.LogWarning("지정ë�œ ë ˆì�´ì–´ 중 하나 ì�´ìƒ�ì�´ 존재하지 않습니다."); return; } - // Ȱ¼ºÈ­ÇÒ ·¹À̾îÀÇ ¿ÀºêÁ§Æ® ã±â + // 활성화할 ë ˆì�´ì–´ì�˜ 오브ì �트 찾기 GameObject[] objectsToActivate = FindObjectsOfType().Where(obj => obj.layer == layerToActivate).ToArray(); - // ºñȰ¼ºÈ­ÇÒ ·¹À̾îÀÇ ¿ÀºêÁ§Æ® ã±â + // 비활성화할 ë ˆì�´ì–´ì�˜ 오브ì �트 찾기 GameObject[] objectsToDeactivate = FindObjectsOfType().Where(obj => obj.layer == layerToDeactivate).ToArray(); - // Ȱ¼ºÈ­/ºñȰ¼ºÈ­ ó¸® + // 활성화/비활성화 처리 foreach (GameObject obj in objectsToActivate) { obj.SetActive(true); @@ -567,47 +567,47 @@ private void ActivateLayerObjects(int layerToActivate, int layerToDeactivate) obj.SetActive(false); } - Debug.Log($"·¹À̾î {LayerMask.LayerToName(layerToActivate)} Ȱ¼ºÈ­, ·¹À̾î {LayerMask.LayerToName(layerToDeactivate)} ºñȰ¼ºÈ­ ¿Ï·á"); + Debug.Log($"ë ˆì�´ì–´ {LayerMask.LayerToName(layerToActivate)} 활성화, ë ˆì�´ì–´ {LayerMask.LayerToName(layerToDeactivate)} 비활성화 완료"); } - // Ä«¸Þ¶ó ¼³Á¤ ¾÷µ¥ÀÌÆ® + // ì¹´ë©”ë�¼ 설정 ì—…ë�°ì�´íЏ private void UpdateCameraSettings(TimeOfDay timeOfDay) { Camera mainCamera = Camera.main; if (mainCamera == null) return; - // ±âº» Äøµ ¸¶½ºÅ© (¸ðµç ·¹À̾î) + // 기본 컬ë§� 마스í�¬ (모든 ë ˆì�´ì–´) int defaultCullingMask = -1; if (morningLayer < 0 || eveningLayer < 0) return; - // ½Ã°£¿¡ µû¶ó ÀûÀýÇÑ ·¹ÀÌ¾î ¼³Á¤ + // 시간ì—� ë”°ë�¼ ì �절한 ë ˆì�´ì–´ 설정 if (timeOfDay == TimeOfDay.Morning) { - // ¾ÆÄ§: MorningOnly ·¹À̾î´Â Ç¥½Ã, EveningOnly ·¹À̾î´Â ¼û±è + // 아침: MorningOnly ë ˆì�´ì–´ëŠ” 표시, EveningOnly ë ˆì�´ì–´ëŠ” 숨김 mainCamera.cullingMask = defaultCullingMask; mainCamera.cullingMask |= (1 << morningLayer); mainCamera.cullingMask &= ~(1 << eveningLayer); } else { - // Àú³á: EveningOnly ·¹À̾î´Â Ç¥½Ã, MorningOnly ·¹À̾î´Â ¼û±è + // ì €ë…�: EveningOnly ë ˆì�´ì–´ëŠ” 표시, MorningOnly ë ˆì�´ì–´ëŠ” 숨김 mainCamera.cullingMask = defaultCullingMask; mainCamera.cullingMask |= (1 << eveningLayer); mainCamera.cullingMask &= ~(1 << morningLayer); } } - // ·¹ÀÌ¾î ±â¹Ý ÀÚ¿ø ¿ÀºêÁ§Æ® µå·¡±× °¡´É ¿©ºÎ ¼³Á¤ + // ë ˆì�´ì–´ 기반 ìž�ì›� 오브ì �트 드래그 가능 여부 설정 private void SetResourceObjectsByLayerDraggable(bool draggable) { if (resourceLayer < 0) { - Debug.LogWarning($"{resourceLayerName} ·¹À̾ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù."); + Debug.LogWarning($"{resourceLayerName} ë ˆì�´ì–´ê°€ 존재하지 않습니다."); return; } - // Resource ·¹À̾ ÀÖ´Â ¿ÀºêÁ§Æ® ã±â + // Resource ë ˆì�´ì–´ì—� 있는 오브ì �트 찾기 GameObject[] resourceObjects = FindObjectsOfType().Where(obj => obj.layer == resourceLayer).ToArray(); int count = 0; @@ -621,25 +621,25 @@ private void SetResourceObjectsByLayerDraggable(bool draggable) } } - Debug.Log($"·¹À̾î '{resourceLayerName}'¿¡ ÀÖ´Â µå·¡±× °¡´É ¿ÀºêÁ§Æ® {count}°³¸¦ {(draggable ? "Ȱ¼ºÈ­" : "ºñȰ¼ºÈ­")}Çß½À´Ï´Ù."); + Debug.Log($"ë ˆì�´ì–´ '{resourceLayerName}'ì—� 있는 드래그 가능 오브ì �트 {count}개를 {(draggable ? "활성화" : "비활성화")}했습니다."); } - // ·¹ÀÌ¾î ±â¹Ý Ÿ¿ö °ø°Ý Ȱ¼ºÈ­/ºñȰ¼ºÈ­ + // ë ˆì�´ì–´ 기반 타워 공격 활성화/비활성화 private void SetTowerAttackEnabledByLayer(bool enabled) { if (towerLayer < 0) { - Debug.LogWarning($"{towerLayerName} ·¹À̾ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù."); + Debug.LogWarning($"{towerLayerName} ë ˆì�´ì–´ê°€ 존재하지 않습니다."); return; } - // Tower ·¹À̾ ÀÖ´Â ¿ÀºêÁ§Æ® ã±â + // Tower ë ˆì�´ì–´ì—� 있는 오브ì �트 찾기 GameObject[] towerObjects = FindObjectsOfType().Where(obj => obj.layer == towerLayer).ToArray(); int count = 0; if (enabled) { - // Ȱ¼ºÈ­´Â SearchTarget »óÅ·ΠÀüȯÇϴ Ưº° ·ÎÁ÷ÀÌ ÇÊ¿äÇϹǷΠÁ÷Á¢ ó¸® + // 활성화는 SearchTarget ìƒ�태로 전환하는 특별 로ì§�ì�´ 필요하므로 ì§�ì ‘ 처리 foreach (GameObject obj in towerObjects) { TowerWeapon tower = obj.GetComponent(); @@ -652,7 +652,7 @@ private void SetTowerAttackEnabledByLayer(bool enabled) } else { - // ºñȰ¼ºÈ­´Â ÄÚ·çÆ¾ ÁßÁö·Î ó¸® + // 비활성화는 코루틴 중지로 처리 foreach (GameObject obj in towerObjects) { TowerWeapon tower = obj.GetComponent(); @@ -664,19 +664,19 @@ private void SetTowerAttackEnabledByLayer(bool enabled) } } - Debug.Log($"·¹À̾î '{towerLayerName}'¿¡ Àִ Ÿ¿ö °ø°Ý ±â´É {count}°³¸¦ {(enabled ? "Ȱ¼ºÈ­" : "ºñȰ¼ºÈ­")}Çß½À´Ï´Ù."); + Debug.Log($"ë ˆì�´ì–´ '{towerLayerName}'ì—� 있는 타워 공격 기능 {count}개를 {(enabled ? "활성화" : "비활성화")}했습니다."); } - // ·¹ÀÌ¾î ±â¹Ý Ÿ¿ö ¾÷±×·¹ÀÌµå ±â´É Ȱ¼ºÈ­/ºñȰ¼ºÈ­ + // ë ˆì�´ì–´ 기반 타워 업그레ì�´ë“œ 기능 활성화/비활성화 private void SetTowerUpgradeEnabledByLayer(bool enabled) { if (towerLayer < 0) { - Debug.LogWarning($"{towerLayerName} ·¹À̾ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù."); + Debug.LogWarning($"{towerLayerName} ë ˆì�´ì–´ê°€ 존재하지 않습니다."); return; } - // Tower ·¹À̾ ÀÖ´Â ¿ÀºêÁ§Æ® ã±â + // Tower ë ˆì�´ì–´ì—� 있는 오브ì �트 찾기 GameObject[] towerObjects = FindObjectsOfType().Where(obj => obj.layer == towerLayer).ToArray(); int count = 0; @@ -690,19 +690,19 @@ private void SetTowerUpgradeEnabledByLayer(bool enabled) } } - Debug.Log($"·¹À̾î '{towerLayerName}'¿¡ Àִ Ÿ¿ö ¾÷±×·¹ÀÌµå ±â´É {count}°³¸¦ {(enabled ? "Ȱ¼ºÈ­" : "ºñȰ¼ºÈ­")}Çß½À´Ï´Ù."); + Debug.Log($"ë ˆì�´ì–´ '{towerLayerName}'ì—� 있는 타워 업그레ì�´ë“œ 기능 {count}개를 {(enabled ? "활성화" : "비활성화")}했습니다."); } - // ·¹ÀÌ¾î ±â¹Ý ÄÄÆ÷³ÍÆ® Ȱ¼ºÈ­/ºñȰ¼ºÈ­ + // ë ˆì�´ì–´ 기반 ì»´í�¬ë„ŒíЏ 활성화/비활성화 private void SetComponentsEnabledByLayer(int layer, bool enabled) where T : MonoBehaviour { if (layer < 0) { - Debug.LogWarning($"ÁöÁ¤µÈ ·¹À̾ Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù."); + Debug.LogWarning($"지정ë�œ ë ˆì�´ì–´ê°€ 존재하지 않습니다."); return; } - // ƯÁ¤ ·¹À̾ ÀÖ´Â ¸ðµç °ÔÀÓ ¿ÀºêÁ§Æ® ã±â + // 특정 ë ˆì�´ì–´ì—� 있는 모든 게임 오브ì �트 찾기 GameObject[] layerObjects = FindObjectsOfType().Where(obj => obj.layer == layer).ToArray(); int count = 0; @@ -716,56 +716,56 @@ private void SetComponentsEnabledByLayer(int layer, bool enabled) where T : M } } - Debug.Log($"·¹À̾î '{LayerMask.LayerToName(layer)}'¿¡ ÀÖ´Â {typeof(T).Name} ÄÄÆ÷³ÍÆ® {count}°³¸¦ {(enabled ? "Ȱ¼ºÈ­" : "ºñȰ¼ºÈ­")}Çß½À´Ï´Ù."); + Debug.Log($"ë ˆì�´ì–´ '{LayerMask.LayerToName(layer)}'ì—� 있는 {typeof(T).Name} ì»´í�¬ë„ŒíЏ {count}개를 {(enabled ? "활성화" : "비활성화")}했습니다."); } - // Ÿ¿ö ±¸¸Å/ÆÇ¸Å ±â´É Ȱ¼ºÈ­/ºñȰ¼ºÈ­ + // 타워 구매/íŒ�매 기능 활성화/비활성화 private void SetTowerTradeEnabled(bool enabled) { TowerSpawner[] towerSpawners = FindObjectsOfType(); foreach (TowerSpawner spawner in towerSpawners) { - // TowerSpawner¿¡ SetTradeEnabled ¸Þ¼­µå°¡ ÀÖ´Â °æ¿ì + // TowerSpawnerì—� SetTradeEnabled 메서드가 있는 경우 try { - // ¸®Ç÷º¼ÇÀ̳ª public ¸Þ¼­µå¸¦ ÅëÇØ È£ÃâÇÒ ¼ö ÀÖÀ½ + // 리플렉션ì�´ë‚˜ public 메서드를 통해 호출할 수 있ì�Œ spawner.SetTradeEnabled(enabled); } catch { - // ¸Þ¼­µå°¡ ¾ø´Ù¸é Ȱ¼ºÈ­/ºñȰ¼ºÈ­·Î ó¸® + // 메서드가 없다면 활성화/비활성화로 처리 spawner.enabled = enabled; } } - // ¿ÀºêÁ§Æ® µðÅØÅÍ(Ÿ¿ö Ŭ¸¯ ó¸®) Ȱ¼ºÈ­/ºñȰ¼ºÈ­ + // 오브ì �트 ë””í…�í„°(타워 í�´ë¦­ 처리) 활성화/비활성화 ObjectDetector[] detectors = FindObjectsOfType(); foreach (ObjectDetector detector in detectors) { detector.enabled = enabled; } - Debug.Log($"Ÿ¿ö °Å·¡ ±â´ÉÀÌ {(enabled ? "Ȱ¼ºÈ­" : "ºñȰ¼ºÈ­")}µÇ¾ú½À´Ï´Ù."); + Debug.Log($"타워 거래 기능ì�´ {(enabled ? "활성화" : "비활성화")}ë�˜ì—ˆìŠµë‹ˆë‹¤."); } - // Ç÷¹ÀÌ¾î ¼³Á¤ ó¸® (MicrophoneSystem »ç¿ë) + // 플레ì�´ì–´ 설정 처리 (MicrophoneSystem 사용) private void HandlePlayerSettings(bool activatePlayer, bool enableAttack) { - // ¸¶ÀÌÅ© ½Ã½ºÅÛÀÌ ÀÖÀ¸¸é ±×°ÍÀ» »ç¿ëÇÏ¿© Ç÷¹ÀÌ¾î °ü¸® + // 마ì�´í�¬ 시스템ì�´ 있으면 그것ì�„ 사용하여 플레ì�´ì–´ 관리 if (microphoneSystem != null) { if (activatePlayer) { - // ¾ÆÄ§ ¸ðµå: ±âº» À§Ä¡ (0,0,0)¿¡ Ç÷¹À̾î Ȱ¼ºÈ­ + // 아침 모드: 기본 위치 (0,0,0)ì—� 플레ì�´ì–´ 활성화 microphoneSystem.ActivatePlayer(Vector3.zero); } else { - // Àú³á ¸ðµå: Ç÷¹ÀÌ¾î ºñȰ¼ºÈ­ (¸¶ÀÌÅ© ÀÔ·ÂÀ¸·Î Ȱ¼ºÈ­ ´ë±â) + // ì €ë…� 모드: 플레ì�´ì–´ 비활성화 (마ì�´í�¬ 입력으로 활성화 대기) microphoneSystem.DeactivatePlayer(); } - // Ç÷¹ÀÌ¾î °ø°Ý ±â´É ¼³Á¤ + // 플레ì�´ì–´ 공격 기능 설정 if (microphoneSystem.PlayerObject != null) { PlayerMovement playerMovement = microphoneSystem.PlayerObject.GetComponent(); @@ -775,87 +775,40 @@ private void HandlePlayerSettings(bool activatePlayer, bool enableAttack) } } - Debug.Log($"¸¶ÀÌÅ© ½Ã½ºÅÛÀ» ÅëÇØ Ç÷¹À̾î {(activatePlayer ? "Ȱ¼ºÈ­" : "ºñȰ¼ºÈ­")}, °ø°Ý {(enableAttack ? "Ȱ¼ºÈ­" : "ºñȰ¼ºÈ­")}"); + Debug.Log($"마ì�´í�¬ 시스템ì�„ 통해 플레ì�´ì–´ {(activatePlayer ? "활성화" : "비활성화")}, 공격 {(enableAttack ? "활성화" : "비활성화")}"); return; } - // ÀÌÇÏ´Â ¸¶ÀÌÅ© ½Ã½ºÅÛÀÌ ¾ø´Â °æ¿ì ±âÁ¸ ¹æ½Ä »ç¿ë (ÇÏÀ§ ȣȯ¼º À¯Áö) + // ì�´í•˜ëŠ” 마ì�´í�¬ 시스템ì�´ 없는 경우 기존 ë°©ì‹� 사용 (하위 호환성 유지) - // PlayerSingleton Ŭ·¡½º°¡ Á¸ÀçÇÏ´ÂÁö È®ÀÎ - System.Type playerSingletonType = System.Type.GetType("PlayerSingleton"); - bool playerSingletonExists = false; - object playerSingletonInstance = null; - - // Ç÷¹ÀÌ¾î ½Ì±ÛÅÏ Á¸Àç ¿©ºÎ È®ÀÎ (¸®Ç÷º¼Ç »ç¿ë) - if (playerSingletonType != null) + // 싱글턴 존재 시 처리 + if (PlayerSingleton.Exists && PlayerSingleton.Instance != null) { - // Exists Á¤Àû ¼Ó¼º È®ÀÎ - System.Reflection.PropertyInfo existsProperty = playerSingletonType.GetProperty("Exists", - System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); - - if (existsProperty != null) - { - playerSingletonExists = (bool)existsProperty.GetValue(null); - - // Instance Á¤Àû ¼Ó¼º È®ÀÎ - if (playerSingletonExists) - { - System.Reflection.PropertyInfo instanceProperty = playerSingletonType.GetProperty("Instance", - System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static); - - if (instanceProperty != null) - { - playerSingletonInstance = instanceProperty.GetValue(null); - } - } - } - } - - // ½Ì±ÛÅÏ Á¸Àç ½Ã Ã³¸® - if (playerSingletonExists && playerSingletonInstance != null) - { - // Ç÷¹À̾î Ȱ¼ºÈ­/ºñȰ¼ºÈ­ - MonoBehaviour playerComponent = playerSingletonInstance as MonoBehaviour; - if (playerComponent != null) - { - playerComponent.gameObject.SetActive(activatePlayer); - - // SetAttackEnabled ¸Þ¼­µå È£Ã⠽õµ - System.Reflection.MethodInfo setAttackEnabledMethod = playerSingletonType.GetMethod("SetAttackEnabled"); - if (setAttackEnabledMethod != null) - { - setAttackEnabledMethod.Invoke(playerSingletonInstance, new object[] { enableAttack }); - } - - System.Reflection.MethodInfo setPlayerActiveMethod = playerSingletonType.GetMethod("SetPlayerActive"); - if (setPlayerActiveMethod != null) - { - setPlayerActiveMethod.Invoke(playerSingletonInstance, new object[] { activatePlayer }); - } - } + PlayerSingleton.Instance.SetAttackEnabled(enableAttack); + PlayerSingleton.Instance.SetPlayerActive(activatePlayer); - Debug.Log($"½Ì±ÛÅÏ Ç÷¹À̾î {(activatePlayer ? "Ȱ¼ºÈ­" : "ºñȰ¼ºÈ­")}, °ø°Ý {(enableAttack ? "Ȱ¼ºÈ­" : "ºñȰ¼ºÈ­")}"); + Debug.Log($"싱글턴 플레ì�´ì–´ {(activatePlayer ? "활성화" : "비활성화")}, 공격 {(enableAttack ? "활성화" : "비활성화")}"); return; } - // ½Ì±ÛÅÏÀÌ ¾ø´Â °æ¿ì ±âÁ¸ ¹æ½ÄÀ¸·Î ó¸® + // 싱글턴ì�´ 없는 경우 기존 ë°©ì‹�으로 처리 PlayerMovement[] players = FindObjectsOfType(); foreach (PlayerMovement player in players) { - // Ç÷¹À̾î Ȱ¼ºÈ­/ºñȰ¼ºÈ­ + // 플레ì�´ì–´ 활성화/비활성화 player.gameObject.SetActive(activatePlayer); - // Ç÷¹ÀÌ¾î °ø°Ý Ȱ¼ºÈ­/ºñȰ¼ºÈ­ + // 플레ì�´ì–´ 공격 활성화/비활성화 player.SetAttackEnabled(enableAttack); } - Debug.Log($"Ç÷¹À̾î {(activatePlayer ? "Ȱ¼ºÈ­" : "ºñȰ¼ºÈ­")}, °ø°Ý {(enableAttack ? "Ȱ¼ºÈ­" : "ºñȰ¼ºÈ­")}"); + Debug.Log($"플레ì�´ì–´ {(activatePlayer ? "활성화" : "비활성화")}, 공격 {(enableAttack ? "활성화" : "비활성화")}"); } #endregion - #region Ãß°¡µÈ »ö»ó °ü·Ã ¸Þ¼­µå + #region 추가ë�œ 색ìƒ� 관련 메서드 - // Ä«¸Þ¶ó ¹è°æ»ö Á÷Á¢ ¼³Á¤ + // ì¹´ë©”ë�¼ 배경색 ì§�ì ‘ 설정 public void SetBackgroundColor(Color color) { if (mainCameraCache == null) mainCameraCache = Camera.main; @@ -865,7 +818,7 @@ public void SetBackgroundColor(Color color) } } - // ŸÀÏ¸Ê »ö»ó Á÷Á¢ ¼³Á¤ + // 타ì�¼ë§µ 색ìƒ� ì§�ì ‘ 설정 public void SetTilemapColor(Color color) { foreach (var tilemap in tilemaps) @@ -877,13 +830,13 @@ public void SetTilemapColor(Color color) } } - // ¾ÆÄ§/Àú³á ¹è°æ»ö ¼³Á¤ + // 아침/ì €ë…� 배경색 설정 public void SetDayColors(Color dayBackground, Color nightBackground) { morningBackgroundColor = dayBackground; eveningBackgroundColor = nightBackground; - // ÇöÀç ½Ã°£¿¡ ¸Â°Ô »ö»ó Àû¿ë + // 현재 시간ì—� 맞게 색ìƒ� ì �ìš© if (currentTimeOfDay == TimeOfDay.Morning) { SetBackgroundColor(morningBackgroundColor); @@ -894,13 +847,13 @@ public void SetDayColors(Color dayBackground, Color nightBackground) } } - // ¾ÆÄ§/Àú³á ŸÀÏ¸Ê »ö»ó ¼³Á¤ + // 아침/ì €ë…� 타ì�¼ë§µ 색ìƒ� 설정 public void SetTilemapColors(Color dayTileColor, Color nightTileColor) { morningTilemapColor = dayTileColor; eveningTilemapColor = nightTileColor; - // ÇöÀç ½Ã°£¿¡ ¸Â°Ô »ö»ó Àû¿ë + // 현재 시간ì—� 맞게 색ìƒ� ì �ìš© if (currentTimeOfDay == TimeOfDay.Morning) { SetTilemapColor(morningTilemapColor); @@ -911,40 +864,40 @@ public void SetTilemapColors(Color dayTileColor, Color nightTileColor) } } - // ŸÀÏ¸Ê Ãß°¡ + // 타ì�¼ë§µ 추가 public void AddTilemap(Tilemap tilemap) { if (tilemap != null && !tilemaps.Contains(tilemap)) { tilemaps.Add(tilemap); - // ÇöÀç ½Ã°£¿¡ ¸Â´Â »ö»ó Àû¿ë + // 현재 시간ì—� 맞는 색ìƒ� ì �ìš© tilemap.color = currentTimeOfDay == TimeOfDay.Morning ? morningTilemapColor : eveningTilemapColor; - Debug.Log($"ŸÀÏ¸Ê '{tilemap.name}'ÀÌ(°¡) »ö»ó º¯°æ ¸ñ·Ï¿¡ Ãß°¡µÇ¾ú½À´Ï´Ù."); + Debug.Log($"타ì�¼ë§µ '{tilemap.name}'ì�´(ê°€) 색ìƒ� 변경 목ë¡�ì—� 추가ë�˜ì—ˆìŠµë‹ˆë‹¤."); } } - // ŸÀÏ¸Ê Á¦°Å + // 타ì�¼ë§µ 제거 public void RemoveTilemap(Tilemap tilemap) { if (tilemap != null && tilemaps.Contains(tilemap)) { tilemaps.Remove(tilemap); - // ¿ø·¡ »ö»óÀ¸·Î º¹¿ø + // ì›�래 색ìƒ�으로 ë³µì›� tilemap.color = Color.white; - Debug.Log($"ŸÀÏ¸Ê '{tilemap.name}'ÀÌ(°¡) »ö»ó º¯°æ ¸ñ·Ï¿¡¼­ Á¦°ÅµÇ¾ú½À´Ï´Ù."); + Debug.Log($"타ì�¼ë§µ '{tilemap.name}'ì�´(ê°€) 색ìƒ� 변경 목ë¡�ì—�서 제거ë�˜ì—ˆìŠµë‹ˆë‹¤."); } } - // »ö»ó Àüȯ »ç¿ë ¿©ºÎ ¼³Á¤ + // 색ìƒ� 전환 사용 여부 설정 public void SetColorTransitionEnabled(bool enabled) { useColorTransition = enabled; - // »ö»ó ÀüȯÀÌ ºñȰ¼ºÈ­µÇ¸é ¸ðµç »ö»óÀ» ±âº»°ªÀ¸·Î ¸®¼Â + // 색ìƒ� 전환ì�´ 비활성화ë�˜ë©´ 모든 색ìƒ�ì�„ 기본값으로 리셋 if (!enabled) { if (mainCameraCache == null) mainCameraCache = Camera.main; @@ -961,19 +914,19 @@ public void SetColorTransitionEnabled(bool enabled) } } - Debug.Log("»ö»ó Àüȯ ±â´ÉÀÌ ºñȰ¼ºÈ­µÇ¾ú½À´Ï´Ù. ¸ðµç »ö»óÀÌ ±âº»°ªÀ¸·Î ¸®¼ÂµÇ¾ú½À´Ï´Ù."); + Debug.Log("색ìƒ� 전환 기능ì�´ 비활성화ë�˜ì—ˆìŠµë‹ˆë‹¤. 모든 색ìƒ�ì�´ 기본값으로 리셋ë�˜ì—ˆìŠµë‹ˆë‹¤."); } else { - // »ö»ó ÀüȯÀÌ È°¼ºÈ­µÇ¸é ÇöÀç ½Ã°£¿¡ ¸Â´Â »ö»ó Àû¿ë + // 색ìƒ� 전환ì�´ 활성화ë�˜ë©´ 현재 시간ì—� 맞는 색ìƒ� ì �ìš© ApplyTimeBasedColors(currentTimeOfDay); - Debug.Log("»ö»ó Àüȯ ±â´ÉÀÌ È°¼ºÈ­µÇ¾ú½À´Ï´Ù. ÇöÀç ½Ã°£¿¡ ¸Â´Â »ö»óÀÌ Àû¿ëµÇ¾ú½À´Ï´Ù."); + Debug.Log("색ìƒ� 전환 기능ì�´ 활성화ë�˜ì—ˆìŠµë‹ˆë‹¤. 현재 시간ì—� 맞는 색ìƒ�ì�´ ì �ìš©ë�˜ì—ˆìŠµë‹ˆë‹¤."); } } #endregion - // µð¹ö±×¿ë ½Ã°£ Àüȯ ¸Þ¼­µå + // 디버그용 시간 전환 메서드 public void ToggleTimeOfDay() { if (currentTimeOfDay == TimeOfDay.Morning) @@ -985,4 +938,4 @@ public void ToggleTimeOfDay() StartCoroutine(TransitionToMorning()); } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/TimeSystem.cs.meta b/Assets/_Project/Scripts/Legacy/TimeSystem.cs.meta similarity index 100% rename from Assets/Scripts/TimeSystem.cs.meta rename to Assets/_Project/Scripts/Legacy/TimeSystem.cs.meta diff --git a/Assets/Scripts/TowerDataViewer.cs b/Assets/_Project/Scripts/Legacy/TowerDataViewer.cs similarity index 100% rename from Assets/Scripts/TowerDataViewer.cs rename to Assets/_Project/Scripts/Legacy/TowerDataViewer.cs diff --git a/Assets/Scripts/TowerDataViewer.cs.meta b/Assets/_Project/Scripts/Legacy/TowerDataViewer.cs.meta similarity index 100% rename from Assets/Scripts/TowerDataViewer.cs.meta rename to Assets/_Project/Scripts/Legacy/TowerDataViewer.cs.meta diff --git a/Assets/Scripts/TowerDragRotate.cs b/Assets/_Project/Scripts/Legacy/TowerDragRotate.cs similarity index 100% rename from Assets/Scripts/TowerDragRotate.cs rename to Assets/_Project/Scripts/Legacy/TowerDragRotate.cs diff --git a/Assets/Scripts/TowerDragRotate.cs.meta b/Assets/_Project/Scripts/Legacy/TowerDragRotate.cs.meta similarity index 100% rename from Assets/Scripts/TowerDragRotate.cs.meta rename to Assets/_Project/Scripts/Legacy/TowerDragRotate.cs.meta diff --git a/Assets/Scripts/TowerMovementFatigue.cs b/Assets/_Project/Scripts/Legacy/TowerMovementFatigue.cs similarity index 100% rename from Assets/Scripts/TowerMovementFatigue.cs rename to Assets/_Project/Scripts/Legacy/TowerMovementFatigue.cs diff --git a/Assets/Scripts/TowerMovementFatigue.cs.meta b/Assets/_Project/Scripts/Legacy/TowerMovementFatigue.cs.meta similarity index 100% rename from Assets/Scripts/TowerMovementFatigue.cs.meta rename to Assets/_Project/Scripts/Legacy/TowerMovementFatigue.cs.meta diff --git a/Assets/Scripts/TowerSelectionUI.cs b/Assets/_Project/Scripts/Legacy/TowerSelectionUI.cs similarity index 100% rename from Assets/Scripts/TowerSelectionUI.cs rename to Assets/_Project/Scripts/Legacy/TowerSelectionUI.cs diff --git a/Assets/Scripts/TowerSelectionUI.cs.meta b/Assets/_Project/Scripts/Legacy/TowerSelectionUI.cs.meta similarity index 100% rename from Assets/Scripts/TowerSelectionUI.cs.meta rename to Assets/_Project/Scripts/Legacy/TowerSelectionUI.cs.meta diff --git a/Assets/Scripts/TowerSpawner.cs b/Assets/_Project/Scripts/Legacy/TowerSpawner.cs similarity index 62% rename from Assets/Scripts/TowerSpawner.cs rename to Assets/_Project/Scripts/Legacy/TowerSpawner.cs index 0b5acb4..b273f99 100644 --- a/Assets/Scripts/TowerSpawner.cs +++ b/Assets/_Project/Scripts/Legacy/TowerSpawner.cs @@ -6,60 +6,60 @@ public class TowerSpawner : MonoBehaviour { [SerializeField] - private List towerTemplates;// ¿©·¯ Á¾·ùÀÇ Å¸¿ö ÅÛÇø´ + private List towerTemplates;// 여러 종류ì�˜ 타워 템플릿 [SerializeField] - private EnemySpawner enemySpawner; // ÇöÀç ¸Ê¿¡ Á¸ÀçÇÏ´Â Àû ¸®½ºÆ® Á¤º¸ + private EnemySpawner enemySpawner; // 현재 ë§µì—� 존재하는 ì � 리스트 ì •ë³´ [SerializeField] - private Grid grid; // ŸÀϸÊÀÌ ¼ÓÇÑ Grid ÄÄÆ÷³ÍÆ® + private Grid grid; // 타ì�¼ë§µì�´ ì†�한 Grid ì»´í�¬ë„ŒíЏ [SerializeField] - private PlayerGold playerGold; // Ç÷¹ÀÌ¾î °ñµå/ÇǷεµ ÂüÁ¶ + private PlayerGold playerGold; // 플레ì�´ì–´ 골드/피로ë�„ 참조 [SerializeField] - private SystemTextViewer systemTextViewer; // ½Ã½ºÅÛ ¸Þ½ÃÁö ºä¾î + private SystemTextViewer systemTextViewer; // 시스템 메시지 ë·°ì–´ [SerializeField] - private Tilemap tilemap; // Ÿ¿ö ¹èÄ¡ °¡´ÉÇÑ Å¸ÀÏ¸Ê + private Tilemap tilemap; // 타워 배치 가능한 타ì�¼ë§µ [Header("Tower Placement Settings")] [SerializeField] - private float fatiguePerTower = 10f; // Ÿ¿ö ´ç Áõ°¡ÇÏ´Â ÇǷεµ + private float fatiguePerTower = 10f; // 타워 당 ì¦�가하는 피로ë�„ [SerializeField] - private KeyCode flipKey = KeyCode.Q; // Á¿ì¹ÝÀü Ű + private KeyCode flipKey = KeyCode.Q; // 좌우반전 키 [SerializeField] - private float flipAnimationDuration = 0.2f; // Á¿ì¹ÝÀü ¾Ö´Ï¸ÞÀÌ¼Ç ½Ã°£ + private float flipAnimationDuration = 0.2f; // 좌우반전 애니메ì�´ì…˜ 시간 [SerializeField] - private AudioClip flipSound; // Á¿ì¹ÝÀü È¿°úÀ½ + private AudioClip flipSound; // 좌우반전 효과ì�Œ [Header("Tower Movement Settings")] - [SerializeField] private float fatiguePerTowerMovement = 2f; // Ÿ¿ö À̵¿ ½Ã Áõ°¡ÇÏ´Â ÇǷεµ (±âº»°ª) + [SerializeField] private float fatiguePerTowerMovement = 2f; // 타워 ì�´ë�™ 시 ì¦�가하는 피로ë�„ (기본값) [Header("Time Settings")] - [SerializeField] private bool tradeEnabled = true; // Ÿ¿ö °Å·¡(±¸¸Å/ÆÇ¸Å) °¡´É ¿©ºÎ + [SerializeField] private bool tradeEnabled = true; // 타워 거래(구매/íŒ�매) 가능 여부 - // ¹èÄ¡µÈ Ÿ¿öµéÀ» ¿ùµå ÁÂÇ¥(¼¿ ÁÂÇ¥) ±âÁØÀ¸·Î °ü¸® + // 배치ë�œ 타워들ì�„ 월드 좌표(ì…€ 좌표) 기준으로 관리 private Dictionary placedTowers = new Dictionary(); - // ÇöÀç ¼±ÅÃµÈ Å¸¿ö Á¾·ù À妽º (Ÿ¿ö ÅÛÇø´ ¸®½ºÆ® ³»ÀÇ À妽º) + // 현재 ì„ íƒ�ë�œ 타워 종류 ì�¸ë�±ìФ (타워 템플릿 리스트 ë‚´ì�˜ ì�¸ë�±ìФ) private int selectedTowerIndex = 0; - // Ÿ¿ö ¹èÄ¡ ¸ðµå Ȱ¼ºÈ­ ¿©ºÎ + // 타워 배치 모드 활성화 여부 private bool isOnTowerButton = false; private GameObject followTowerClone = null; - // Á¿ì¹ÝÀü »óÅ + // 좌우반전 ìƒ�태 private bool isFlipped = false; private bool isFlipping = false; private AudioSource audioSource; - // ŸÀÏ¸Ê °¡Á®¿À±â + // 타ì�¼ë§µ 가져오기 public Tilemap GetTilemap() => tilemap; private void Awake() { - // ¿Àµð¿À ¼Ò½º ÄÄÆ÷³ÍÆ® °¡Á®¿À±â/Ãß°¡ + // 오디오 소스 ì»´í�¬ë„ŒíЏ 가져오기/추가 audioSource = GetComponent(); if (audioSource == null && flipSound != null) { @@ -69,24 +69,27 @@ private void Awake() private void Start() { - // PlayerGold ÂüÁ¶ È®ÀÎ + // PlayerGold 참조 확ì�¸ if (playerGold == null) { playerGold = FindObjectOfType(); if (playerGold == null) { - Debug.LogError("PlayerGold ÄÄÆ÷³ÍÆ®¸¦ ãÀ» ¼ö ¾ø½À´Ï´Ù."); + Debug.LogError("PlayerGold ì»´í�¬ë„ŒíŠ¸ë¥¼ ì°¾ì�„ 수 없습니다."); } } } - // ¼±ÅÃÇÑ Å¸¿ö Á¾·ù¸¦ ¼³Á¤ÇÏ°í ¹èÄ¡ ¸ðµå¿¡ µé¾î°¨ + // ì„ íƒ�한 타워 종류를 설정하고 배치 모드ì—� 들어ê°� public void SelectAndReadyTower(int index) { - // °Å·¡°¡ ºñȰ¼ºÈ­µÇ¾î ÀÖÀ¸¸é Ÿ¿ö ¼±Åà ºÒ°¡ + Debug.Log($"SelectAndReadyTower called with index: {index}"); + + // 거래가 비활성화ë�˜ì–´ 있으면 타워 ì„ íƒ� 불가 if (!tradeEnabled) { - // ½Ã½ºÅÛ ¸Þ½ÃÁö Ãâ·Â + + // 시스템 메시지 출력 if (systemTextViewer != null) { systemTextViewer.PrintText(SystemType.Build); @@ -96,29 +99,29 @@ public void SelectAndReadyTower(int index) if (index < 0 || index >= towerTemplates.Count) { - Debug.LogError("À߸øµÈ Ÿ¿ö À妽º"); + Debug.LogError("잘못ë�œ 타워 ì�¸ë�±ìФ"); return; } selectedTowerIndex = index; - // ¹èÄ¡ ¸ðµå ÁøÀÔ Àü¿¡ °ñµå üũ + // 배치 모드 ì§„ìž… ì „ì—� 골드 ì²´í�¬ if (towerTemplates[selectedTowerIndex].weapons[0].cost > playerGold.CurrentGold) { systemTextViewer.PrintText(SystemType.Money); return; } - // ±âÁ¸ ¹Ì¸®º¸±â Ÿ¿ö Á¤¸® + // 기존 미리보기 타워 정리 ClearFollowTower(); isOnTowerButton = true; - isFlipped = false; // Á¿ì¹ÝÀü »óÅ ÃʱâÈ­ + isFlipped = false; // 좌우반전 ìƒ�태 초기화 - // ¼±ÅÃÇÑ Å¸¿öÀÇ followTowerPrefabÀ» »ý¼ºÇÏ¿© ¹Ì¸® ¹èÄ¡ ¹Ì¸®º¸±â ¿ªÇÒ + // ì„ íƒ�한 타워ì�˜ followTowerPrefabì�„ ìƒ�성하여 미리 배치 미리보기 ì—­í•  followTowerClone = Instantiate(towerTemplates[selectedTowerIndex].followTowerPrefab); - // ÇÊ¿äÇÏ´Ù¸é followTowerCloneÀÇ À§Ä¡ ¹× ±âŸ ¼¼ÆÃÀ» ¿©±â¼­ ÁøÇà + // 필요하다면 followTowerCloneì�˜ 위치 ë°� 기타 세팅ì�„ 여기서 ì§„í–‰ StartCoroutine(OnTowerCancelSystem()); } @@ -128,23 +131,23 @@ public void ReadyToSpawnTower() { return; } - // ÁÖ¼® ó¸®µÈ ÄÚµå... + // 주ì„� 처리ë�œ 코드... } void Update() { if (isOnTowerButton && followTowerClone != null) { - // ¸¶¿ì½º À§Ä¡ °¡Á®¿À±â + // 마우스 위치 가져오기 Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); followTowerClone.transform.position = new Vector3(mousePosition.x, mousePosition.y, 0); - // ÀÌ¼Ò¸ÞÆ®¸¯ ºä Áö¿ø + // ì�´ì†Œë©”트릭 ë·° ì§€ì›� Vector3 position = followTowerClone.transform.position; position.z = position.y; followTowerClone.transform.position = position; - // QŰ ÀÔ·Â °Ë»ç (Á¿ì¹ÝÀü) + // Q키 ìž…ë ¥ 검사 (좌우반전) if (Input.GetKeyDown(flipKey) && !isFlipping) { StartCoroutine(FlipPreviewTower()); @@ -152,51 +155,51 @@ void Update() } } - // Á¿ì¹ÝÀü ÄÚ·çÆ¾ + // 좌우반전 코루틴 private IEnumerator FlipPreviewTower() { if (followTowerClone == null) yield break; isFlipping = true; - // È¿°úÀ½ Àç»ý + // 효과ì�Œ 재ìƒ� if (flipSound != null && audioSource != null) { audioSource.PlayOneShot(flipSound); } - // ÇöÀç x ½ºÄÉÀÏ °ª + // 현재 x 스케ì�¼ ê°’ float startScaleX = followTowerClone.transform.localScale.x; - float targetScaleX = -startScaleX; // ºÎÈ£ ¹ÝÀü + float targetScaleX = -startScaleX; // 부호 반전 float elapsedTime = 0f; - // ¹ÝÀü ¾Ö´Ï¸ÞÀÌ¼Ç + // 반전 애니메ì�´ì…˜ while (elapsedTime < flipAnimationDuration) { elapsedTime += Time.deltaTime; float progress = elapsedTime / flipAnimationDuration; - // ½ºÄÉÀÏ º¸°£ + // 스케ì�¼ ë³´ê°„ float currentScaleX = Mathf.Lerp(startScaleX, targetScaleX, progress); followTowerClone.transform.localScale = new Vector3(currentScaleX, followTowerClone.transform.localScale.y, followTowerClone.transform.localScale.z); yield return null; } - // ÃÖÁ¾ ½ºÄÉÀÏ ¼³Á¤ + // 최종 스케ì�¼ 설정 followTowerClone.transform.localScale = new Vector3(targetScaleX, followTowerClone.transform.localScale.y, followTowerClone.transform.localScale.z); - // ¹ÝÀü »óÅ Åä±Û + // 반전 ìƒ�태 토글 isFlipped = !isFlipped; isFlipping = false; } public void SpawnTower(Vector3Int cellPosition) { - // °Å·¡°¡ ºñȰ¼ºÈ­µÇ¾î ÀÖÀ¸¸é Ÿ¿ö »ý¼º ºÒ°¡ + // 거래가 비활성화ë�˜ì–´ 있으면 타워 ìƒ�성 불가 if (!tradeEnabled) { - // ½Ã½ºÅÛ ¸Þ½ÃÁö Ãâ·Â + // 시스템 메시지 출력 if (systemTextViewer != null) { systemTextViewer.PrintText(SystemType.Build); @@ -208,7 +211,7 @@ public void SpawnTower(Vector3Int cellPosition) { return; } - if (IsTileOccupied(cellPosition)) return; // ÀÌ¹Ì Å¸¿ö°¡ Á¸ÀçÇÏ¸é ½ÇÇà X + if (IsTileOccupied(cellPosition)) return; // ì�´ë¯¸ 타워가 존재하면 실행 X TowerTemplate selectedTower = towerTemplates[selectedTowerIndex]; @@ -218,24 +221,24 @@ public void SpawnTower(Vector3Int cellPosition) return; } - Vector3 towerPosition = tilemap.GetCellCenterWorld(cellPosition); // ŸÀÏ Áß½ÉÀÇ ¿ùµå ÁÂÇ¥ + Vector3 towerPosition = tilemap.GetCellCenterWorld(cellPosition); // 타ì�¼ 중심ì�˜ 월드 좌표 - // Isometric ºä¸¦ À§ÇÑ z À§Ä¡ Á¶Á¤ (y¿Í µ¿ÀÏÇϰÔ) + // Isometric 뷰를 위한 z 위치 ì¡°ì • (y와 ë�™ì�¼í•˜ê²Œ) towerPosition.z = towerPosition.y; - GameObject newTower = Instantiate(selectedTower.towerPrefab, towerPosition, Quaternion.identity); // Ÿ¿ö »ý¼º + GameObject newTower = Instantiate(selectedTower.towerPrefab, towerPosition, Quaternion.identity); // 타워 ìƒ�성 - // Á¿ì¹ÝÀü »óÅ Àû¿ë + // 좌우반전 ìƒ�태 ì �ìš© if (isFlipped) { - // ½ºÇÁ¶óÀÌÆ® ·»´õ·¯ °¡Á®¿Í¼­ Á¿ì¹ÝÀü Àû¿ë + // 스프ë�¼ì�´íЏ ë Œë�”러 가져와서 좌우반전 ì �ìš© SpriteRenderer[] renderers = newTower.GetComponentsInChildren(); foreach (SpriteRenderer renderer in renderers) { renderer.flipX = true; } - // ¶Ç´Â ½ºÄÉÀÏÀ» »ç¿ëÇÏ¿© ¹ÝÀü + // ë˜�는 스케ì�¼ì�„ 사용하여 반전 Vector3 scale = newTower.transform.localScale; scale.x = -Mathf.Abs(scale.x); newTower.transform.localScale = scale; @@ -245,36 +248,35 @@ public void SpawnTower(Vector3Int cellPosition) if (towerWeapon != null) { - towerWeapon.Setup(selectedTower, enemySpawner, playerGold, towerPosition); // Setup È£Ãâ + towerWeapon.Setup(selectedTower, enemySpawner, playerGold, this, towerPosition); // Setup 호출 - // Á¿ì¹ÝÀü »óÅ Àü´Þ (TowerWeapon¿¡ °ü·Ã ±â´ÉÀÌ ÀÖ´Â °æ¿ì) - if (isFlipped && towerWeapon.GetType().GetMethod("SetFlipped") != null) + if (isFlipped) { - towerWeapon.GetType().GetMethod("SetFlipped").Invoke(towerWeapon, new object[] { true }); + towerWeapon.SetFlipped(true); } } isOnTowerButton = false; - placedTowers[cellPosition] = newTower; // ¼¿ ÁÂÇ¥¿Í Ÿ¿ö ¿¬°á - playerGold.CurrentGold -= selectedTower.weapons[0].cost; // °ñµå °¨¼Ò + placedTowers[cellPosition] = newTower; // ì…€ 좌표와 타워 ì—°ê²° + playerGold.CurrentGold -= selectedTower.weapons[0].cost; // 골드 ê°�소 - // Ÿ¿ö ¹èÄ¡¿¡ µû¸¥ ÇǷεµ Áõ°¡ - playerGold.IncreaseFatigue(); // ÇǷεµ Áõ°¡ ¸Þ¼­µå È£Ãâ + // 타워 배치ì—� 따른 피로ë�„ ì¦�ê°€ + playerGold.IncreaseFatigue(); // 피로ë�„ ì¦�ê°€ 메서드 호출 - // ¹èÄ¡ ¸ðµå Á¾·á ¹× ¸®¼Ò½º Á¤¸® + // 배치 모드 종료 ë°� 리소스 정리 EndPlacementMode(); Debug.Log($"Tower placed at {cellPosition}"); } - // Ÿ¿ö ¹èÄ¡ ¸ðµå Á¾·á + // 타워 배치 모드 종료 private void EndPlacementMode() { StopCoroutine("OnTowerCancelSystem"); ClearFollowTower(); } - // ¹Ì¸®º¸±â Ÿ¿ö Á¤¸® + // 미리보기 타워 정리 private void ClearFollowTower() { if (followTowerClone != null) @@ -286,10 +288,10 @@ private void ClearFollowTower() public void RemoveTower(Vector3Int cellPosition) { - // °Å·¡°¡ ºñȰ¼ºÈ­µÇ¾î ÀÖÀ¸¸é Ÿ¿ö ÆÇ¸Å ºÒ°¡ + // 거래가 비활성화ë�˜ì–´ 있으면 타워 íŒ�매 불가 if (!tradeEnabled) { - // ½Ã½ºÅÛ ¸Þ½ÃÁö Ãâ·Â + // 시스템 메시지 출력 if (systemTextViewer != null) { systemTextViewer.PrintText(SystemType.Build); @@ -297,10 +299,10 @@ public void RemoveTower(Vector3Int cellPosition) return; } - if (placedTowers.TryGetValue(cellPosition, out GameObject tower)) // Ÿ¿ö ã±â + if (placedTowers.TryGetValue(cellPosition, out GameObject tower)) // 타워 찾기 { - Destroy(tower); // Ÿ¿ö ¿ÀºêÁ§Æ® Á¦°Å - placedTowers.Remove(cellPosition); // °ü¸® ¸ñ·Ï¿¡¼­ Á¦°Å + Destroy(tower); // 타워 오브ì �트 제거 + placedTowers.Remove(cellPosition); // 관리 목ë¡�ì—�서 제거 Debug.Log($"Tower removed from {cellPosition}"); } @@ -329,12 +331,12 @@ public bool IsTileOccupied(Vector3Int cellPosition) return placedTowers.ContainsKey(cellPosition); } - // Ÿ¿ö °Å·¡ Ȱ¼ºÈ­/ºñȰ¼ºÈ­ ¸Þ¼Òµå + // 타워 거래 활성화/비활성화 메소드 public void SetTradeEnabled(bool enabled) { tradeEnabled = enabled; - // °Å·¡ ºñȰ¼ºÈ­ ½Ã Ÿ¿ö ¹èÄ¡ ¸ðµå Á¾·á + // 거래 비활성화 시 타워 배치 모드 종료 if (!enabled) { isOnTowerButton = false; @@ -343,44 +345,44 @@ public void SetTradeEnabled(bool enabled) } } - // Ÿ¿ö¸¦ ÆÄ±«ÇÏÁö ¾Ê°í Dictionary¿¡¼­¸¸ Á¦°ÅÇÏ´Â ¸Þ¼Òµå + // 타워를 파괴하지 않고 Dictionaryì—�서만 제거하는 메소드 public void RemoveTowerWithoutDestroy(Vector3Int cellPosition) { if (placedTowers.TryGetValue(cellPosition, out GameObject tower)) { placedTowers.Remove(cellPosition); - Debug.Log($"Ÿ¿ö¸¦ Dictionary¿¡¼­ Á¦°Å: {cellPosition}"); + Debug.Log($"타워를 Dictionaryì—�서 제거: {cellPosition}"); } else { - Debug.Log($"ÁöÁ¤µÈ À§Ä¡ {cellPosition}¿¡ Ÿ¿ö°¡ ¾ø½À´Ï´Ù."); + Debug.Log($"지정ë�œ 위치 {cellPosition}ì—� 타워가 없습니다."); } } - // ±âÁ¸ Ÿ¿ö¸¦ Dictionary¿¡ µî·ÏÇÏ´Â ¸Þ¼Òµå + // 기존 타워를 Dictionaryì—� 등ë¡�하는 메소드 public void RegisterExistingTower(Vector3Int cellPosition, GameObject tower) { if (IsTileOccupied(cellPosition)) { - Debug.LogWarning($"ÀÌ¹Ì Å¸¿ö°¡ ÀÖ´Â À§Ä¡ {cellPosition}¿¡ Ÿ¿ö¸¦ µî·ÏÇÒ ¼ö ¾ø½À´Ï´Ù."); + Debug.LogWarning($"ì�´ë¯¸ 타워가 있는 위치 {cellPosition}ì—� 타워를 등ë¡�í•  수 없습니다."); return; } - // Dictionary¿¡ µî·Ï + // Dictionaryì—� 등ë¡� placedTowers[cellPosition] = tower; - Debug.Log($"±âÁ¸ Ÿ¿ö¸¦ »õ À§Ä¡ {cellPosition}¿¡ µî·Ï"); + Debug.Log($"기존 타워를 새 위치 {cellPosition}ì—� 등ë¡�"); } - // Ÿ¿ö ¹èÄ¡ ½Ã ±âº» ÇǷεµ °ª °¡Á®¿À±â + // 타워 배치 시 기본 피로ë�„ ê°’ 가져오기 public float GetBaseFatiguePerTower() { return fatiguePerTower; } - // Ÿ¿ö À̵¿¿¡ ´ëÇÑ ÇǷεµ °ª °¡Á®¿À±â + // 타워 ì�´ë�™ì—� 대한 피로ë�„ ê°’ 가져오기 public float GetMovementFatiguePerTower() { return fatiguePerTowerMovement; } -} \ No newline at end of file +} diff --git a/Assets/Scripts/TowerSpawner.cs.meta b/Assets/_Project/Scripts/Legacy/TowerSpawner.cs.meta similarity index 100% rename from Assets/Scripts/TowerSpawner.cs.meta rename to Assets/_Project/Scripts/Legacy/TowerSpawner.cs.meta diff --git a/Assets/Scripts/TowerTemplate.cs b/Assets/_Project/Scripts/Legacy/TowerTemplate.cs similarity index 100% rename from Assets/Scripts/TowerTemplate.cs rename to Assets/_Project/Scripts/Legacy/TowerTemplate.cs diff --git a/Assets/Scripts/TowerTemplate.cs.meta b/Assets/_Project/Scripts/Legacy/TowerTemplate.cs.meta similarity index 100% rename from Assets/Scripts/TowerTemplate.cs.meta rename to Assets/_Project/Scripts/Legacy/TowerTemplate.cs.meta diff --git a/Assets/_Project/Scripts/Legacy/TowerWeapon.cs b/Assets/_Project/Scripts/Legacy/TowerWeapon.cs new file mode 100644 index 0000000..e516854 --- /dev/null +++ b/Assets/_Project/Scripts/Legacy/TowerWeapon.cs @@ -0,0 +1,488 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public enum WeaponState { SearchTarget = 0, AttackToTarget } //공격 대ìƒ� íƒ�색 여부 + +public class TowerWeapon : MonoBehaviour +{ + [SerializeField] + private GameObject projectilePrefab; // 단ì�¼ 발사체 프리팹 + [SerializeField] + private Transform spawnPoint; + + [Header("Time Settings")] + [SerializeField] private bool attackEnabled = true; // 공격 가능 여부 + + private TowerTemplate towerTemplate; + private int level = 0; + private WeaponState weaponState = WeaponState.SearchTarget; + private Transform attackTarget = null; + private SpriteRenderer spriteRenderer; + private PlayerGold playerGold; + private EnemySpawner enemySpawner; + private TowerSpawner towerSpawner; + private Tile ownerTile; + private IsometricPositionHandler isometricPosition; + private Coroutine stateRoutine; + + // 좌우반전 ìƒ�태 관련 변수 + private bool isFlipped = false; + private SpriteRenderer[] childRenderers; + + public Sprite TowerSprite => HasValidWeaponData() ? towerTemplate.weapons[level].sprite : null; + public float Damage => HasValidWeaponData() ? towerTemplate.weapons[level].damage : 0f; + public float Rate => HasValidWeaponData() ? towerTemplate.weapons[level].rate : 0f; + public float Range => HasValidWeaponData() ? towerTemplate.weapons[level].range : 0f; + public int Level => level + 1; + public int MaxLevel => towerTemplate != null && towerTemplate.weapons != null ? towerTemplate.weapons.Count : 0; + + // 좌우반전 ìƒ�태 프로í�¼í‹° + public bool IsFlipped => isFlipped; + + private void Awake() + { + spriteRenderer = GetComponent(); + childRenderers = GetComponentsInChildren(); + isometricPosition = GetComponent(); + + // IsometricPositionHandlerê°€ 없으면 추가 + if (isometricPosition == null) + { + isometricPosition = gameObject.AddComponent(); + } + } + + private void SpawnProjectile() + { + // 공격ì�´ 비활성화ë�˜ì–´ 있으면 발사체 ìƒ�성 불가 + if (!attackEnabled) return; + if (!HasValidWeaponData()) return; + if (!IsTargetAttackable()) + { + attackTarget = null; + return; + } + + if (projectilePrefab == null) + { + Debug.LogError("No projectile prefab assigned to tower"); + return; + } + + if (spawnPoint == null) + { + Debug.LogError($"TowerWeapon: {name}ì—� spawnPointê°€ 설정ë�˜ì§€ 않았습니다."); + return; + } + + Debug.Log($"Spawning projectile at {spawnPoint.position}"); + + // 발사 위치ì�˜ z 위치 ì¡°ì • (ì�´ì†Œë©”트릭 ë·°) + Vector3 spawnPos = spawnPoint.position; + spawnPos.z = spawnPos.y; + + GameObject projectileObj = Instantiate(projectilePrefab, spawnPos, Quaternion.identity); + + // 발사체ì—� IsometricPositionHandler 추가 (없는 경우) + IsometricPositionHandler projectileIsometric = projectileObj.GetComponent(); + if (projectileIsometric == null) + { + projectileIsometric = projectileObj.AddComponent(); + } + + // ProjectileBase ì»´í�¬ë„ŒíЏ 가져오기 + ProjectileBase projectileScript = projectileObj.GetComponent(); + + if (projectileScript == null) + { + Debug.LogError($"No ProjectileBase component found on prefab: {projectilePrefab.name}"); + Destroy(projectileObj); + return; + } + + // 좌우반전 ìƒ�태 ì �ìš© + if (isFlipped) + { + SpriteRenderer projRenderer = projectileObj.GetComponent(); + if (projRenderer != null) + { + projRenderer.flipX = true; + } + else + { + // 스프ë�¼ì�´íЏ ë Œë�”러가 없으면 스케ì�¼ë¡œ 반전 + Vector3 scale = projectileObj.transform.localScale; + scale.x = -Mathf.Abs(scale.x); + projectileObj.transform.localScale = scale; + } + + // 발사 ë°©í–¥ 반전 (필요시) + ProjectileStraight straightProjectile = projectileObj.GetComponent(); + if (straightProjectile != null) + { + straightProjectile.SetFlipDirection(isFlipped); + } + } + + // 발사체 설정 + projectileScript.Setup(attackTarget, towerTemplate.weapons[level].damage); + } + + public void Setup(TowerTemplate template, EnemySpawner enemySpawner, PlayerGold playerGold, TowerSpawner towerSpawner, Vector3 worldPosition) + { + towerTemplate = template; + Debug.Log("TowerWeapon Setup called!"); + this.enemySpawner = enemySpawner; + this.playerGold = playerGold; + this.towerSpawner = towerSpawner; + + if (!HasValidWeaponData()) + { + Debug.LogError($"TowerWeapon: {name}ì—� 유효한 TowerTemplate/Weapon ë�°ì�´í„°ê°€ 없습니다."); + return; + } + + // ì�´ì†Œë©”트릭 ë·°ì—� 맞게 z 위치 ì¡°ì • + worldPosition.z = worldPosition.y; + transform.position = worldPosition; + + if (spriteRenderer != null) + { + spriteRenderer.sprite = towerTemplate.weapons[level].sprite; + } + + ChangeState(WeaponState.SearchTarget); + } + + public void Setup(TowerTemplate template, EnemySpawner enemySpawner, PlayerGold playerGold, Vector3 worldPosition) + { + Setup(template, enemySpawner, playerGold, null, worldPosition); + } + + // 좌우반전 설정 메소드 (외부ì—�서 호출 가능) + public void SetFlipped(bool flipped) + { + isFlipped = flipped; + + // 모든 스프ë�¼ì�´íЏ ë Œë�”러 반전 ì �ìš© + UpdateFlipState(); + } + + // 좌우반전 ìƒ�태 토글 + public void ToggleFlip() + { + isFlipped = !isFlipped; + UpdateFlipState(); + } + + // 좌우반전 ìƒ�태 ì—…ë�°ì�´íЏ + private void UpdateFlipState() + { + // 기본 스프ë�¼ì�´íЏ ë Œë�”러가 있으면 반전 + if (spriteRenderer != null) + { + spriteRenderer.flipX = isFlipped; + } + + // 모든 ìž�ì‹� 스프ë�¼ì�´íЏ ë Œë�”러ë�„ 반전 + foreach (SpriteRenderer renderer in childRenderers) + { + if (renderer != null && renderer != spriteRenderer) // 중복 ë°©ì§€ + { + renderer.flipX = isFlipped; + } + } + + // 스프ë�¼ì�´íЏ ë Œë�”러가 없거나 추가 반전ì�´ 필요한 경우 스케ì�¼ë�„ ì¡°ì • + if (spriteRenderer == null || !spriteRenderer.flipX) + { + Vector3 scale = transform.localScale; + scale.x = isFlipped ? -Mathf.Abs(scale.x) : Mathf.Abs(scale.x); + transform.localScale = scale; + } + + // 스í�° í�¬ì�¸íЏ 위치 ì¡°ì • (필요시) + if (spawnPoint != null) + { + // 스í�° í�¬ì�¸íŠ¸ê°€ 로컬 위치ì—� 있는 경우, x 반전ì�´ 필요할 수 있ì�Œ + // ìƒ�황ì—� ë”°ë�¼ 다ì�Œ 코드 활성화 + /* + Vector3 localPos = spawnPoint.localPosition; + localPos.x = isFlipped ? -Mathf.Abs(localPos.x) : Mathf.Abs(localPos.x); + spawnPoint.localPosition = localPos; + */ + } + } + + public void ChangeState(WeaponState newstate) + { + Debug.Log($"Changing state to {newstate}"); + StopStateRoutine(); + weaponState = newstate; + + if (!isActiveAndEnabled) + { + return; + } + + switch (weaponState) + { + case WeaponState.SearchTarget: + stateRoutine = StartCoroutine(SearchTarget()); + break; + case WeaponState.AttackToTarget: + stateRoutine = StartCoroutine(AttackToTarget()); + break; + } + } + + // Update is called once per frame + private void Update() + { + if (attackTarget != null) + { + // RotateToTarget(); // 기존 코드 + FlipToTarget(); // 새 코드 - 회전 대신 좌우반전 + } + + // ì�´ì†Œë©”트릭 ë·°ì—� 맞게 z 위치 ì¡°ì • (매 프레임) + Vector3 position = transform.position; + position.z = position.y; + transform.position = position; + } + + // 기존 RotateToTarget 메서드를 FlipToTarget으로 대체 + private void FlipToTarget() + { + if (attackTarget == null) return; + + // ì �ì�˜ 위치와 타워ì�˜ 위치를 비êµ�하여 ë°©í–¥ ê²°ì • + float dx = attackTarget.position.x - transform.position.x; + + // dxê°€ ì�Œìˆ˜ë©´ ì �ì�´ 왼쪽ì—� 있고, 양수면 오른쪽ì—� 있ì�Œ + bool shouldFaceLeft = dx < 0; + + // 현재 타워가 왼쪽ì�„ ë³´ê³  있는지 확ì�¸ (flipXê°€ trueë©´ 왼쪽) + bool isCurrentlyFacingLeft = false; + + // 스프ë�¼ì�´íЏ ë Œë�”러로 확ì�¸ + if (spriteRenderer != null) + { + isCurrentlyFacingLeft = spriteRenderer.flipX; + } + else + { + // 스프ë�¼ì�´íЏ ë Œë�”러가 ì—†ì�„ 경우 localScale.x로 확ì�¸ + isCurrentlyFacingLeft = transform.localScale.x < 0; + } + + // ë°©í–¥ì�´ 다르면 반전 + if (shouldFaceLeft != isCurrentlyFacingLeft) + { + // 좌우반전 ì �ìš© + if (spriteRenderer != null) + { + spriteRenderer.flipX = shouldFaceLeft; + } + else + { + // 스프ë�¼ì�´íЏ ë Œë�”러가 없는 경우 스케ì�¼ 사용 + Vector3 scale = transform.localScale; + scale.x = shouldFaceLeft ? -Mathf.Abs(scale.x) : Mathf.Abs(scale.x); + transform.localScale = scale; + } + + // ìž�ì‹� 스프ë�¼ì�´íЏ ë Œë�”러ë�„ 반전 + foreach (SpriteRenderer renderer in childRenderers) + { + if (renderer != null && renderer != spriteRenderer) + { + renderer.flipX = shouldFaceLeft; + } + } + + // isFlipped 변수 ì—…ë�°ì�´íЏ + isFlipped = shouldFaceLeft; + } + + // 회전ì�€ 수행하지 않ì�Œ - 기존 코드 제거 + // transform.rotation = Quaternion.Euler(0, 0, degree); + } + + private IEnumerator SearchTarget() + { + while (true) + { + // 공격ì�´ 비활성화 ë�˜ì–´ 있으면 íƒ�색만 하고 공격하지 않ì�Œ + if (!attackEnabled) + { + yield return new WaitForSeconds(0.5f); + continue; + } + + if (!HasValidWeaponData() || enemySpawner == null) + { + attackTarget = null; + yield return new WaitForSeconds(0.25f); + continue; + } + + attackTarget = null; + float closestDistSqr = Mathf.Infinity; + float range = towerTemplate.weapons[level].range; + float rangeSqr = range * range; + List enemies = enemySpawner.EnemyList; + + for (int i = 0; i < enemies.Count; i++) //모든 ì � 검사 + { + Enemy enemy = enemies[i]; + if (enemy == null) + { + continue; + } + + float distanceSqr = (enemy.transform.position - transform.position).sqrMagnitude; + if (distanceSqr <= rangeSqr && distanceSqr <= closestDistSqr) + { + closestDistSqr = distanceSqr; + attackTarget = enemy.transform; + } + } + + if (attackTarget != null && attackEnabled) + { + Debug.Log($"Target found: {attackTarget.name}"); + ChangeState(WeaponState.AttackToTarget); // 해당 타겟 공격 + } + + yield return null; + } + } + + private IEnumerator AttackToTarget() + { + while (true) + { + // 공격ì�´ 비활성화ë�˜ì–´ 있으면 íƒ�색 ìƒ�태로 ë�Œì•„ê°� + if (!attackEnabled) + { + ChangeState(WeaponState.SearchTarget); + break; + } + + if (!HasValidWeaponData() || !IsTargetAttackable()) // target 있는지 확ì�¸ + { + attackTarget = null; + ChangeState(WeaponState.SearchTarget); + break; + } + + yield return new WaitForSeconds(Mathf.Max(0.05f, towerTemplate.weapons[level].rate)); + + if (!attackEnabled || !IsTargetAttackable()) + { + attackTarget = null; + ChangeState(WeaponState.SearchTarget); + break; + } + + SpawnProjectile(); // 발사체 ìƒ�성 + } + } + + public bool Upgrade() + { + if (towerTemplate == null || towerTemplate.weapons == null || + level + 1 >= towerTemplate.weapons.Count || + playerGold == null || + playerGold.CurrentGold < towerTemplate.weapons[level + 1].cost) + { + return false; + } + level++; + if (spriteRenderer != null) + { + spriteRenderer.sprite = towerTemplate.weapons[level].sprite; + } + playerGold.CurrentGold -= towerTemplate.weapons[level].cost; + + // 업그레ì�´ë“œ 후 좌우반전 ìƒ�태 유지 + if (isFlipped) + { + UpdateFlipState(); + } + + return true; + } + + public void Sell() + { + if (playerGold != null && HasValidWeaponData()) + { + playerGold.CurrentGold += towerTemplate.weapons[level].sell; + } + + if (towerSpawner != null && towerSpawner.GetTilemap() != null) + { + Vector3Int cellposition = towerSpawner.GetTilemap().WorldToCell(transform.position); + towerSpawner.RemoveTower(cellposition); + return; + } + + Debug.LogWarning("TowerWeapon: TowerSpawner 참조가 없어 타워 오브ì �트만 제거합니다."); + Destroy(gameObject); + } + + // 공격 활성화/비활성화 메소드 + public void SetAttackEnabled(bool enabled) + { + attackEnabled = enabled; + + if (enabled) + { + // 공격 활성화시 타겟 íƒ�색 시작 + ChangeState(WeaponState.SearchTarget); + } + else + { + attackTarget = null; + StopStateRoutine(); + } + } + + private bool HasValidWeaponData() + { + return towerTemplate != null && + towerTemplate.weapons != null && + level >= 0 && + level < towerTemplate.weapons.Count; + } + + private bool IsTargetAttackable() + { + if (attackTarget == null || !HasValidWeaponData()) + { + return false; + } + + float range = towerTemplate.weapons[level].range; + return (attackTarget.position - transform.position).sqrMagnitude <= range * range; + } + + private void StopStateRoutine() + { + if (stateRoutine == null) + { + return; + } + + StopCoroutine(stateRoutine); + stateRoutine = null; + } + + private void OnDisable() + { + StopStateRoutine(); + } +} diff --git a/Assets/Scripts/TowerWeapon.cs.meta b/Assets/_Project/Scripts/Legacy/TowerWeapon.cs.meta similarity index 100% rename from Assets/Scripts/TowerWeapon.cs.meta rename to Assets/_Project/Scripts/Legacy/TowerWeapon.cs.meta diff --git a/Assets/Scripts/WaveResultSystem.cs b/Assets/_Project/Scripts/Legacy/WaveResultSystem.cs similarity index 56% rename from Assets/Scripts/WaveResultSystem.cs rename to Assets/_Project/Scripts/Legacy/WaveResultSystem.cs index 92a5e7b..61aae60 100644 --- a/Assets/Scripts/WaveResultSystem.cs +++ b/Assets/_Project/Scripts/Legacy/WaveResultSystem.cs @@ -4,28 +4,30 @@ using UnityEngine.Events; using TMPro; -// ¿þÀÌºê ½Â¸®/ÆÐ¹è Á¶°Ç ¹× °á°ú ó¸® ½Ã½ºÅÛ +// 웨ì�´ë¸Œ 승리/패배 ì¡°ê±´ ë°� ê²°ê³¼ 처리 시스템 public class WaveResultSystem : MonoBehaviour { + private readonly Dictionary humanDestroyedHandlers = new Dictionary(); + [Header("Victory/Defeat Settings")] - [SerializeField] private float healthRatioDefeatThreshold = 0.4f; // ÆÐ¹è Á¶°Ç: ü·Â ºñÀ² ÀÓ°è°ª (±âº» 40%) - [SerializeField] private float victoryRewardMultiplier = 1.5f; // ½Â¸® ½Ã º¸»ó ¹èÀ² + [SerializeField] private float healthRatioDefeatThreshold = 0.4f; // 패배 ì¡°ê±´: ì²´ë ¥ 비율 임계값 (기본 40%) + [SerializeField] private float victoryRewardMultiplier = 1.5f; // 승리 시 ë³´ìƒ� 배율 [Header("UI Elements")] - [SerializeField] private GameObject resultPanel; // °á°ú ÆÐ³Î - [SerializeField] private TextMeshProUGUI resultTitle; // °á°ú Á¦¸ñ (½Â¸®/ÆÐ¹è) - [SerializeField] private TextMeshProUGUI resultDescription; // °á°ú ¼³¸í - [SerializeField] private TextMeshProUGUI rewardText; // º¸»ó Á¤º¸ ÅØ½ºÆ® + [SerializeField] private GameObject resultPanel; // ê²°ê³¼ 패ë„� + [SerializeField] private TextMeshProUGUI resultTitle; // ê²°ê³¼ 제목 (승리/패배) + [SerializeField] private TextMeshProUGUI resultDescription; // ê²°ê³¼ 설명 + [SerializeField] private TextMeshProUGUI rewardText; // ë³´ìƒ� ì •ë³´ í…�스트 [Header("Sound Effects")] - [SerializeField] private AudioClip victorySound; // ½Â¸® È¿°úÀ½ - [SerializeField] private AudioClip defeatSound; // ÆÐ¹è È¿°úÀ½ + [SerializeField] private AudioClip victorySound; // 승리 효과ì�Œ + [SerializeField] private AudioClip defeatSound; // 패배 효과ì�Œ - // °á°ú À̺¥Æ® + // ê²°ê³¼ ì�´ë²¤íЏ public UnityEvent onVictory = new UnityEvent(); public UnityEvent onDefeat = new UnityEvent(); - // ½Ã½ºÅÛ ÂüÁ¶ + // 시스템 참조 private TimeSystem timeSystem; private WaveSystem waveSystem; private ResourceManager resourceManager; @@ -33,33 +35,33 @@ public class WaveResultSystem : MonoBehaviour private PlayerExperience playerExperience; private AudioSource audioSource; - // ¿þÀÌºê »óÅ ÃßÀû + // 웨ì�´ë¸Œ ìƒ�태 ì¶”ì � private bool isWaveActive = false; private bool isWaveCompleted = false; private bool isHumanDestroyed = false; private bool isHealthBelowThreshold = false; - // º¸»ó Á¤º¸ ÀúÀå + // ë³´ìƒ� ì •ë³´ 저장 private int baseGoldReward = 0; private int baseExpReward = 0; private void Awake() { - // ½Ã½ºÅÛ ÄÄÆ÷³ÍÆ® ã±â + // 시스템 ì»´í�¬ë„ŒíЏ 찾기 timeSystem = FindObjectOfType(); waveSystem = FindObjectOfType(); resourceManager = FindObjectOfType(); playerGold = FindObjectOfType(); playerExperience = FindObjectOfType(); - // ¿Àµð¿À ¼Ò½º ÄÄÆ÷³ÍÆ® °¡Á®¿À±â/Ãß°¡ + // 오디오 소스 ì»´í�¬ë„ŒíЏ 가져오기/추가 audioSource = GetComponent(); if (audioSource == null && (victorySound != null || defeatSound != null)) { audioSource = gameObject.AddComponent(); } - // UI ÃʱâÈ­ + // UI 초기화 if (resultPanel != null) { resultPanel.SetActive(false); @@ -68,7 +70,7 @@ private void Awake() private void Start() { - // À̺¥Æ® ±¸µ¶ + // ì�´ë²¤íЏ 구ë�… if (timeSystem != null) { timeSystem.onEveningStart.AddListener(OnEveningStart); @@ -81,13 +83,13 @@ private void Start() waveSystem.OnWaveEnd += HandleWaveEnd; } - // ÀçÈ­ ¿ÀºêÁ§Æ® ÆÄ±« À̺¥Æ® ±¸µ¶ + // 재화 오브ì �트 파괴 ì�´ë²¤íЏ 구ë�… StartCoroutine(SubscribeToResourceObjects()); } private void OnDestroy() { - // À̺¥Æ® ±¸µ¶ ÇØÁ¦ + // ì�´ë²¤íЏ 구ë�… í•´ì œ if (timeSystem != null) { timeSystem.onEveningStart.RemoveListener(OnEveningStart); @@ -99,56 +101,81 @@ private void OnDestroy() waveSystem.OnWaveStart -= HandleWaveStart; waveSystem.OnWaveEnd -= HandleWaveEnd; } + + UnsubscribeFromHumanResources(); } - // Update: Áö¼ÓÀûÀ¸·Î ÆÐ¹è Á¶°Ç üũ + // Update: ì§€ì†�ì �으로 패배 ì¡°ê±´ ì²´í�¬ private void Update() { if (isWaveActive && !isWaveCompleted) { - // ÆÐ¹è Á¶°Ç 1: ÀçÈ­ ¿ÀºêÁ§Æ® ü·Â ºñÀ²ÀÌ ÀÓ°è°ª ¹Ì¸¸ + // 패배 ì¡°ê±´ 1: 재화 오브ì �트 ì²´ë ¥ 비율ì�´ 임계값 미만 if (resourceManager != null && resourceManager.TotalHealthRatio < healthRatioDefeatThreshold) { isHealthBelowThreshold = true; - HandleDefeat("ÀçÈ­ ¿ÀºêÁ§Æ® ¼Õ»ó ½É°¢"); + HandleDefeat("재화 오브ì �트 ì†�ìƒ� 심ê°�"); } - // ÆÐ¹è Á¶°Ç 2: ÀÌ¹Ì Ã¼Å©µÊ (Human ÅÂ±× ¿ÀºêÁ§Æ® ÆÄ±« À̺¥Æ®¿¡¼­) + // 패배 ì¡°ê±´ 2: ì�´ë¯¸ ì²´í�¬ë�¨ (Human 태그 오브ì �트 파괴 ì�´ë²¤íЏì—�서) } } - // ÀçÈ­ ¿ÀºêÁ§Æ® À̺¥Æ® ±¸µ¶ (Á¶±Ý Áö¿¬ÇÏ¿© ¸ðµç ¿ÀºêÁ§Æ®°¡ ·ÎµåµÈ ÈÄ ½ÇÇà) + // 재화 오브ì �트 ì�´ë²¤íЏ 구ë�… (조금 지연하여 모든 오브ì �트가 로드ë�œ 후 실행) private IEnumerator SubscribeToResourceObjects() { yield return new WaitForSeconds(0.5f); - // ¾ÀÀÇ ¸ðµç ResourceObject ã±â + // 씬ì�˜ 모든 ResourceObject 찾기 ResourceObject[] resourceObjects = FindObjectsOfType(); foreach (ResourceObject resource in resourceObjects) { - // Human ű׸¦ °¡Áø ¸®¼Ò½º È®ÀÎ if (resource.gameObject.CompareTag("Human")) { - // Human ¸®¼Ò½º ÆÄ±« À̺¥Æ® ±¸µ¶ - resource.onDestroyed.AddListener(() => OnHumanResourceDestroyed(resource)); + SubscribeToHumanResource(resource); + } + } + + Debug.Log($"재화 오브ì �트 ì�´ë²¤íЏ 구ë�… 완료: {resourceObjects.Length}ê°œ"); + } + + private void SubscribeToHumanResource(ResourceObject resource) + { + if (resource == null || humanDestroyedHandlers.ContainsKey(resource)) + { + return; + } + + UnityAction handler = () => OnHumanResourceDestroyed(resource); + humanDestroyedHandlers.Add(resource, handler); + resource.onDestroyed.AddListener(handler); + } + + private void UnsubscribeFromHumanResources() + { + foreach (KeyValuePair pair in humanDestroyedHandlers) + { + if (pair.Key != null) + { + pair.Key.onDestroyed.RemoveListener(pair.Value); } } - Debug.Log($"ÀçÈ­ ¿ÀºêÁ§Æ® À̺¥Æ® ±¸µ¶ ¿Ï·á: {resourceObjects.Length}°³"); + humanDestroyedHandlers.Clear(); } - // Human ÅÂ±× ÀçÈ­ ÆÄ±« ½Ã È£Ãâ + // Human 태그 재화 파괴 시 호출 private void OnHumanResourceDestroyed(ResourceObject resource) { if (isWaveActive && !isWaveCompleted) { isHumanDestroyed = true; - HandleDefeat($"Áß¿ä ÀÚ¿ø '{resource.ResourceName}' ÆÄ±«µÊ"); + HandleDefeat($"중요 ìž�ì›� '{resource.ResourceName}' 파괴ë�¨"); } } - // Àú³á ¸ðµå ½ÃÀÛ ½Ã È£Ãâ + // ì €ë…� 모드 시작 시 호출 private void OnEveningStart() { isWaveActive = true; @@ -156,154 +183,154 @@ private void OnEveningStart() isHumanDestroyed = false; isHealthBelowThreshold = false; - // ±âº» º¸»ó ±Ý¾× °è»ê (¿þÀÌºê ½ÃÀÛ ½ÃÁ¡) + // 기본 ë³´ìƒ� 금액 계산 (웨ì�´ë¸Œ 시작 시ì �) CalculateBaseRewards(); - Debug.Log("ÀüÅõ ½ÃÀÛ: ¿þÀÌºê °á°ú ¸ð´ÏÅ͸µ ½ÃÀÛ"); + Debug.Log("전투 시작: 웨ì�´ë¸Œ ê²°ê³¼ 모니터ë§� 시작"); } - // ¾ÆÄ§ ¸ðµå ½ÃÀÛ ½Ã È£Ãâ + // 아침 모드 시작 시 호출 private void OnMorningStart() { isWaveActive = false; } - // ¿þÀÌºê ½ÃÀÛ ½Ã È£Ãâ + // 웨ì�´ë¸Œ 시작 시 호출 private void HandleWaveStart(int waveNumber, string waveName) { - // ¿þÀÌºê ½ÃÀÛ ½Ã »óÅ ¸®¼Â + // 웨ì�´ë¸Œ 시작 시 ìƒ�태 리셋 isWaveCompleted = false; isHumanDestroyed = false; isHealthBelowThreshold = false; } - // ¿þÀ̺ê Á¾·á ½Ã È£Ãâ + // 웨ì�´ë¸Œ 종료 시 호출 private void HandleWaveEnd(int waveNumber, string waveName) { isWaveCompleted = true; - // ½ÂÆÐ È®ÀÎ + // 승패 확ì�¸ if (!isHumanDestroyed && !isHealthBelowThreshold) { - // ¸ðµç ÆÐ¹è Á¶°ÇÀ» ÃæÁ·ÇÏÁö ¾Ê¾ÒÀ¸¹Ç·Î ½Â¸® + // 모든 패배 ì¡°ê±´ì�„ 충족하지 않았으므로 승리 HandleVictory(); } - // ÆÐ¹è´Â ÀÌ¹Ì ¾÷µ¥ÀÌÆ®¿¡¼­ ó¸®µÊ + // 패배는 ì�´ë¯¸ ì—…ë�°ì�´íЏì—�서 처리ë�¨ } - // ½Â¸® ó¸® + // 승리 처리 private void HandleVictory() { - Debug.Log("¿þÀÌºê ½Â¸®!"); + Debug.Log("웨ì�´ë¸Œ 승리!"); - // º¸»ó Áö±Þ + // ë³´ìƒ� 지급 int goldReward = Mathf.RoundToInt(baseGoldReward * victoryRewardMultiplier); int expReward = Mathf.RoundToInt(baseExpReward * victoryRewardMultiplier); - // °ñµå Áö±Þ + // 골드 지급 if (playerGold != null) { playerGold.CurrentGold += goldReward; } - // °æÇèÄ¡ Áö±Þ (±âº» °æÇèÄ¡´Â WaveSystem¿¡¼­ ó¸®) + // 경험치 지급 (기본 경험치는 WaveSystemì—�서 처리) if (playerExperience != null) { - // Ãß°¡ °æÇèÄ¡ º¸³Ê½º (±âº»ÀÇ 0.5¹è) + // 추가 경험치 보너스 (기본ì�˜ 0.5ë°°) int bonusExp = Mathf.RoundToInt(baseExpReward * (victoryRewardMultiplier - 1.0f)); playerExperience.AddExperience(bonusExp); } - // ½Â¸® È¿°úÀ½ Àç»ý + // 승리 효과ì�Œ 재ìƒ� if (audioSource != null && victorySound != null) { audioSource.PlayOneShot(victorySound); } - // ½Â¸® UI Ç¥½Ã - ShowResultUI(true, "¿þÀÌºê ½Â¸®!", - $"¸ðµç Áß¿ä ÀÚ¿øÀ» ÁöÄѳ½À´Ï´Ù.\nÇöÀç ÀÚ¿ø »óÅÂ: {Mathf.RoundToInt(resourceManager.TotalHealthRatio * 100)}%", - $"º¸»ó: {goldReward} °ñµå (+{Mathf.RoundToInt(baseGoldReward * (victoryRewardMultiplier - 1.0f))} º¸³Ê½º)\n°æÇèÄ¡: {expReward} (+{Mathf.RoundToInt(baseExpReward * (victoryRewardMultiplier - 1.0f))} º¸³Ê½º)"); + // 승리 UI 표시 + ShowResultUI(true, "웨ì�´ë¸Œ 승리!", + $"모든 중요 ìž�ì›�ì�„ 지켜냈습니다.\n현재 ìž�ì›� ìƒ�태: {Mathf.RoundToInt(resourceManager.TotalHealthRatio * 100)}%", + $"ë³´ìƒ�: {goldReward} 골드 (+{Mathf.RoundToInt(baseGoldReward * (victoryRewardMultiplier - 1.0f))} 보너스)\n경험치: {expReward} (+{Mathf.RoundToInt(baseExpReward * (victoryRewardMultiplier - 1.0f))} 보너스)"); - // ½Â¸® À̺¥Æ® ¹ß»ý + // 승리 ì�´ë²¤íЏ ë°œìƒ� onVictory.Invoke(); } - // ÆÐ¹è ó¸® + // 패배 처리 private void HandleDefeat(string reason) { - // ÀÌ¹Ì Ã³¸®µÈ °æ¿ì Áߺ¹ ½ÇÇà ¹æÁö + // ì�´ë¯¸ 처리ë�œ 경우 중복 실행 ë°©ì§€ if (isWaveCompleted) return; - Debug.Log($"¿þÀÌºê ÆÐ¹è: {reason}"); + Debug.Log($"웨ì�´ë¸Œ 패배: {reason}"); isWaveCompleted = true; - // ±âº» º¸»ó¸¸ Áö±Þ (¹èÀ² ¾øÀ½) + // 기본 ë³´ìƒ�ë§Œ 지급 (배율 ì—†ì�Œ) int goldReward = baseGoldReward; int expReward = baseExpReward; - // °ñµå Áö±Þ + // 골드 지급 if (playerGold != null) { playerGold.CurrentGold += goldReward; } - // °æÇèÄ¡´Â WaveSystem¿¡¼­ ó¸® + // 경험치는 WaveSystemì—�서 처리 - // ÆÐ¹è È¿°úÀ½ Àç»ý + // 패배 효과ì�Œ 재ìƒ� if (audioSource != null && defeatSound != null) { audioSource.PlayOneShot(defeatSound); } - // ÆÐ¹è UI Ç¥½Ã - ShowResultUI(false, "¿þÀÌºê ÆÐ¹è!", - $"ÆÐ¹è ¿øÀÎ: {reason}\nÇöÀç ÀÚ¿ø »óÅÂ: {Mathf.RoundToInt(resourceManager.TotalHealthRatio * 100)}%", - $"º¸»ó: {goldReward} °ñµå\n°æÇèÄ¡: {expReward}"); + // 패배 UI 표시 + ShowResultUI(false, "웨ì�´ë¸Œ 패배!", + $"패배 ì›�ì�¸: {reason}\n현재 ìž�ì›� ìƒ�태: {Mathf.RoundToInt(resourceManager.TotalHealthRatio * 100)}%", + $"ë³´ìƒ�: {goldReward} 골드\n경험치: {expReward}"); - // ÆÐ¹è À̺¥Æ® ¹ß»ý + // 패배 ì�´ë²¤íЏ ë°œìƒ� onDefeat.Invoke(); - // ¿þÀÌºê °­Á¦ Á¾·á (ÇÊ¿ä½Ã) + // 웨ì�´ë¸Œ ê°•ì œ 종료 (필요시) if (waveSystem != null && !isWaveCompleted) { - // ¿©±â¿¡ ¿þÀÌºê °­Á¦ Á¾·á ·ÎÁ÷ Ãß°¡ (WaveSystem¿¡ ¸Þ¼Òµå ÇÊ¿ä) + // 여기ì—� 웨ì�´ë¸Œ ê°•ì œ 종료 로ì§� 추가 (WaveSystemì—� 메소드 í•„ìš”) } } - // ±âº» º¸»ó °è»ê + // 기본 ë³´ìƒ� 계산 private void CalculateBaseRewards() { - // ±âº» °ñµå º¸»ó = ÇöÀç ¿þÀ̺ê * 10 + 50 + // 기본 골드 ë³´ìƒ� = 현재 웨ì�´ë¸Œ * 10 + 50 if (waveSystem != null) { baseGoldReward = waveSystem.CurrentWave * 10 + 50; } else { - baseGoldReward = 50; // ±âº»°ª + baseGoldReward = 50; // 기본값 } - // ±âº» °æÇèÄ¡ º¸»ó = ÇöÀç ¿þÀ̺ê * 15 + 30 + // 기본 경험치 ë³´ìƒ� = 현재 웨ì�´ë¸Œ * 15 + 30 if (waveSystem != null) { baseExpReward = waveSystem.CurrentWave * 15 + 30; } else { - baseExpReward = 30; // ±âº»°ª + baseExpReward = 30; // 기본값 } } - // °á°ú UI Ç¥½Ã + // ê²°ê³¼ UI 표시 private void ShowResultUI(bool isVictory, string title, string description, string rewardInfo) { if (resultPanel == null) return; - // ÆÐ³Î Ȱ¼ºÈ­ + // 패ë„� 활성화 resultPanel.SetActive(true); - // ÅØ½ºÆ® ¼³Á¤ + // í…�스트 설정 if (resultTitle != null) { resultTitle.text = title; @@ -320,11 +347,11 @@ private void ShowResultUI(bool isVictory, string title, string description, stri rewardText.text = rewardInfo; } - // ½Ã°£ Áö¿¬ ÈÄ ÆÐ³Î ¼û±â±â + // 시간 지연 후 패ë„� 숨기기 StartCoroutine(HideResultPanel(5f)); } - // °á°ú ÆÐ³Î ¼û±â±â + // ê²°ê³¼ 패ë„� 숨기기 private IEnumerator HideResultPanel(float delay) { yield return new WaitForSeconds(delay); @@ -334,4 +361,4 @@ private IEnumerator HideResultPanel(float delay) resultPanel.SetActive(false); } } -} \ No newline at end of file +} diff --git a/Assets/Scripts/WaveResultSystem.cs.meta b/Assets/_Project/Scripts/Legacy/WaveResultSystem.cs.meta similarity index 100% rename from Assets/Scripts/WaveResultSystem.cs.meta rename to Assets/_Project/Scripts/Legacy/WaveResultSystem.cs.meta diff --git a/Assets/Scripts/WaveStarterInteractable.cs b/Assets/_Project/Scripts/Legacy/WaveStarterInteractable.cs similarity index 100% rename from Assets/Scripts/WaveStarterInteractable.cs rename to Assets/_Project/Scripts/Legacy/WaveStarterInteractable.cs diff --git a/Assets/Scripts/WaveStarterInteractable.cs.meta b/Assets/_Project/Scripts/Legacy/WaveStarterInteractable.cs.meta similarity index 100% rename from Assets/Scripts/WaveStarterInteractable.cs.meta rename to Assets/_Project/Scripts/Legacy/WaveStarterInteractable.cs.meta diff --git a/Assets/_Project/Scripts/Legacy/WaveSystem.cs b/Assets/_Project/Scripts/Legacy/WaveSystem.cs new file mode 100644 index 0000000..08a2184 --- /dev/null +++ b/Assets/_Project/Scripts/Legacy/WaveSystem.cs @@ -0,0 +1,585 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +[System.Serializable] +public struct EnemyGroup +{ + [Header("기본 설정")] + [Tooltip("ìƒ�성할 ì � 프리팹")] + public GameObject enemyPrefab; // ì � 프리팹 + [Tooltip("ìƒ�성할 ì �ì�˜ 수")] + public int count; // ìƒ�성할 ì �ì�˜ 수 + [Tooltip("ì � ìƒ�성 간격 (ì´ˆ)")] + public float spawnTime; // ì � ìƒ�성 간격 + + [Header("위치 설정")] + [Tooltip("특정 스í�° 위치 (없으면 기본 스í�¬ë„ˆ 위치 사용)")] + public Transform spawnPoint; // 스í�° 위치 (nullì�´ë©´ 기본 위치) +} + +[System.Serializable] +public struct Wave +{ + public string waveName; // 웨ì�´ë¸Œ ì�´ë¦„ + public EnemyGroup[] enemyGroups; // ì � 그룹 ë°°ì—´ + public float delayBeforeNextWave; // 다ì�Œ 웨ì�´ë¸Œ 시작 ì „ 딜레ì�´ + public float baseDuration; // 웨ì�´ë¸Œ 기본 ì§€ì†� 시간 (ì´ˆ) +} + +public class WaveSystem : MonoBehaviour +{ + [SerializeField] + private Wave[] waves; // 웨ì�´ë¸Œ ë°°ì—´ + + [SerializeField] + private EnemySpawner enemySpawner; // ì � 스í�¬ë„ˆ 참조 + + [SerializeField] + private PlayerGold playerGold; // 플레ì�´ì–´ 골드/피로ë�„ 참조 + + [SerializeField] + private PlayerExperience playerExperience; // 플레ì�´ì–´ 경험치 참조 + + [SerializeField] + private float defaultWaveDuration = 30f; // 기본 웨ì�´ë¸Œ ì§€ì†� 시간 (ì´ˆ) + + [SerializeField] + private bool cleanupEnemiesAfterAllWaves = true; // 모든 웨ì�´ë¸Œ 완료 후 ì � 제거 여부 + + [SerializeField] + private float finalCleanupDelay = 3f; // 모든 웨ì�´ë¸Œ 완료 후 ì � 제거까지 대기 시간 (ì´ˆ) + + [SerializeField] + private bool showDebugMessages = true; // 디버그 메시지 표시 여부 + + private int currentWaveIndex = -1; // 현재 웨ì�´ë¸Œ ì�¸ë�±ìФ + private bool isWaveActive = false; // 웨ì�´ë¸Œ 활성화 ìƒ�태 + private float waveTimer = 0f; // 웨ì�´ë¸Œ 타ì�´ë¨¸ + private int enemiesKilledInWave = 0; // 웨ì�´ë¸Œ 중 처치한 ì � 수 + private bool allWavesCompleted = false; // 모든 웨ì�´ë¸Œ 완료 여부 + private bool isSubscribedToEnemySpawner = false; + + // 웨ì�´ë¸Œ ì�´ë²¤íЏ ë�¸ë¦¬ê²Œì�´íЏ + public delegate void WaveEventHandler(int waveNumber, string waveName); + public event WaveEventHandler OnWaveStart; // 웨ì�´ë¸Œ 시작 ì�´ë²¤íЏ + public event WaveEventHandler OnWaveEnd; // 웨ì�´ë¸Œ 종료 ì�´ë²¤íЏ + + // 모든 웨ì�´ë¸Œ 완료 ì�´ë²¤íЏ ë�¸ë¦¬ê²Œì�´íЏ + public delegate void AllWavesCompletedHandler(); + public event AllWavesCompletedHandler OnAllWavesCompleted; // 모든 웨ì�´ë¸Œ 완료 ì�´ë²¤íЏ + + // 현재 웨ì�´ë¸Œ 번호 프로í�¼í‹° (1부터 시작) + public int CurrentWave => currentWaveIndex + 1; + + // 최대 웨ì�´ë¸Œ 수 프로í�¼í‹° + public int MaxWave => waves != null ? waves.Length : 0; + + // 현재 웨ì�´ë¸Œ ì�´ë¦„ 프로í�¼í‹° + public string CurrentWaveName => currentWaveIndex >= 0 && currentWaveIndex < waves.Length ? + waves[currentWaveIndex].waveName : "None"; + + // 모든 웨ì�´ë¸Œ 완료 여부 프로í�¼í‹° + public bool AllWavesCompleted => allWavesCompleted; + + // 현재 웨ì�´ë¸Œ ì§€ì†� 시간 프로í�¼í‹° + public float CurrentWaveDuration + { + get + { + if (currentWaveIndex < 0 || currentWaveIndex >= waves.Length) + return defaultWaveDuration; + + // 웨ì�´ë¸Œì—� 지정ë�œ ì§€ì†� 시간ì�´ 있으면 사용, 없으면 기본값 사용 + float baseDuration = waves[currentWaveIndex].baseDuration > 0 ? + waves[currentWaveIndex].baseDuration : defaultWaveDuration; + + // 플레ì�´ì–´ì�˜ 피로ë�„ì—� 따른 웨ì�´ë¸Œ ì§€ì†�시간 계산 + if (playerGold != null) + { + return playerGold.GetWaveDuration(baseDuration); + } + + return baseDuration; + } + } + + // 남ì�€ 웨ì�´ë¸Œ 시간 프로í�¼í‹° + public float RemainingWaveTime => Mathf.Max(0, CurrentWaveDuration - waveTimer); + + // 웨ì�´ë¸Œ 진행률 프로í�¼í‹° (0~1) + public float WaveProgress => Mathf.Clamp01(waveTimer / CurrentWaveDuration); + + private void OnEnable() + { + SubscribeEnemySpawnerEvents(); + } + + private void Start() + { + // 초기화 + InitializeReferences(); + SubscribeEnemySpawnerEvents(); + + // ìž�ë�™ìœ¼ë¡œ 첫 웨ì�´ë¸Œ 시작 (필요시 주ì„� í•´ì œ) + // StartWave(); + } + + private void InitializeReferences() + { + if (playerGold == null) + { + playerGold = FindObjectOfType(); + if (playerGold == null) + { + Debug.LogWarning("PlayerGold 참조를 ì°¾ì�„ 수 없습니다!"); + } + } + + if (playerExperience == null) + { + playerExperience = FindObjectOfType(); + } + + if (enemySpawner == null) + { + enemySpawner = FindObjectOfType(); + if (enemySpawner == null) + { + Debug.LogError("EnemySpawner를 ì°¾ì�„ 수 없습니다!"); + } + } + } + + private void Update() + { + if (isWaveActive) + { + if (enemySpawner == null) + { + Debug.LogError("WaveSystem: EnemySpawner 참조가 없어 웨ì�´ë¸Œë¥¼ 종료합니다."); + EndCurrentWave(); + return; + } + + // 웨ì�´ë¸Œ 타ì�´ë¨¸ ì—…ë�°ì�´íЏ + waveTimer += Time.deltaTime; + + // 웨ì�´ë¸Œ 시간ì�´ 다 ë�˜ì—ˆê±°ë‚˜ ì �ì�´ 모ë‘� 처리ë�œ 경우 + if (waveTimer >= CurrentWaveDuration || + NoActiveEnemies()) + { + EndCurrentWave(); + } + } + } + + // 현재 웨ì�´ë¸Œ 종료 메소드 + private void EndCurrentWave() + { + if (!isWaveActive) return; + + isWaveActive = false; + + // 웨ì�´ë¸Œ 종료 ì�´ë²¤íЏ ë°œìƒ� + OnWaveEnd?.Invoke(CurrentWave, CurrentWaveName); + + LogDebug($"웨ì�´ë¸Œ {CurrentWave} 종료! 처치한 ì �: {enemiesKilledInWave}마리"); + + // 경험치 ì •ì‚° + if (playerExperience != null) + { + playerExperience.AddExperienceForWaveCompletion(enemiesKilledInWave); + } + + // 피로ë�„ 리셋 (추가ë�œ 부분) + if (playerGold != null) + { + playerGold.ResetFatigue(); + LogDebug("웨ì�´ë¸Œ 종료 시 피로ë�„ 리셋ë�¨"); + } + + // ì � 처치 수 초기화 + enemiesKilledInWave = 0; + + // 다ì�Œ 웨ì�´ë¸Œê°€ 있는지 확ì�¸ + if (currentWaveIndex < waves.Length - 1) + { + // 다ì�Œ 웨ì�´ë¸Œ 준비 + float delay = waves[currentWaveIndex].delayBeforeNextWave; + StartCoroutine(StartNextWaveAfterDelay(delay)); + } + else + { + // 모든 웨ì�´ë¸Œ 완료 + HandleAllWavesCompleted(); + } + } + + // 모든 웨ì�´ë¸Œ 완료 처리 + private void HandleAllWavesCompleted() + { + allWavesCompleted = true; + LogDebug("모든 웨ì�´ë¸Œê°€ 완료ë�˜ì—ˆìŠµë‹ˆë‹¤!"); + + // 모든 웨ì�´ë¸Œ 완료 ì�´ë²¤íЏ ë°œìƒ� + OnAllWavesCompleted?.Invoke(); + + // 모든 웨ì�´ë¸Œ 완료 후 ì � 제거 + if (cleanupEnemiesAfterAllWaves) + { + StartCoroutine(CleanupAllEnemiesAfterDelay()); + } + + // 게임 í�´ë¦¬ì–´ 처리 (필요시 추가) + // GameManager.Instance.HandleGameWin(); + } + + // 모든 웨ì�´ë¸Œ 완료 후 ì � 제거 코루틴 + private IEnumerator CleanupAllEnemiesAfterDelay() + { + // 지정ë�œ 지연 시간 후 실행 + yield return new WaitForSeconds(finalCleanupDelay); + + int enemyCount = enemySpawner.EnemyList.Count; + if (enemyCount > 0) + { + LogDebug($"모든 웨ì�´ë¸Œ 완료 후 남ì�€ {enemyCount}마리ì�˜ ì � 제거 중..."); + + // 리스트를 복사하여 순회 중 변경 문제 ë°©ì§€ + List enemiesToDestroy = new List(enemySpawner.EnemyList); + + foreach (Enemy enemy in enemiesToDestroy) + { + if (enemy != null) + { + // ì � 제거 (Kill 타입으로 - 골드/경험치 ì—†ì�Œ) + enemy.gold = 0; // 골드 ë³´ìƒ� ì—†ì�Œ + enemy.OnDie(EnemyDestroyType.Kill); + + // 약간ì�˜ 시간차를 ë‘�ê³  제거하여 시ê°�ì � 효과 개선 (ì„ íƒ�ì �) + yield return new WaitForSeconds(0.05f); + } + } + + LogDebug($"모든 웨ì�´ë¸Œ 완료 후 ì � 제거 완료"); + } + } + + // 웨ì�´ë¸Œ 중 ì � 처치 ì¶”ì � 메소드 + public void OnEnemyKilled() + { + enemiesKilledInWave++; + } + + // 다ì�Œ 웨ì�´ë¸Œ 시작 딜레ì�´ 코루틴 + private IEnumerator StartNextWaveAfterDelay(float delay) + { + yield return new WaitForSeconds(delay); + StartWave(); + } + + // 웨ì�´ë¸Œ 시작 메소드 + public void StartWave() + { + if (waves == null || waves.Length == 0) + { + LogDebug("시작할 웨ì�´ë¸Œê°€ 없습니다."); + return; + } + + if (enemySpawner == null) + { + InitializeReferences(); + } + + if (enemySpawner == null) + { + Debug.LogError("WaveSystem: EnemySpawnerê°€ 없어 웨ì�´ë¸Œë¥¼ 시작할 수 없습니다."); + return; + } + + SubscribeEnemySpawnerEvents(); + + if (!isWaveActive && currentWaveIndex < waves.Length - 1) + { + currentWaveIndex++; + + float waveDuration = CurrentWaveDuration; + LogDebug($"웨ì�´ë¸Œ {CurrentWave} 시작: {CurrentWaveName}, ì§€ì†� 시간: {waveDuration}ì´ˆ (피로ë�„: {playerGold?.FatigueRatio:P0})"); + + // 웨ì�´ë¸Œ 시작 ì�´ë²¤íЏ ë°œìƒ� + OnWaveStart?.Invoke(CurrentWave, CurrentWaveName); + + // ì � 스í�° 시작 + enemySpawner.StartWave(waves[currentWaveIndex]); + + isWaveActive = true; + waveTimer = 0f; // 타ì�´ë¨¸ 초기화 + } + else if (currentWaveIndex >= waves.Length - 1) + { + LogDebug("ë�” ì�´ìƒ� 시작할 웨ì�´ë¸Œê°€ 없습니다!"); + } + } + + // ì � 처치 ì�´ë²¤íЏ 핸들러 + private void OnEnemyDestroyed(Transform enemy) + { + // ì � 처치 시 호출 + if (isWaveActive) + { + OnEnemyKilled(); + } + } + + // 게임 재시작 ë˜�는 리셋 시 호출 + public void ResetWaveSystem() + { + StopAllCoroutines(); + currentWaveIndex = -1; + isWaveActive = false; + waveTimer = 0f; + enemiesKilledInWave = 0; + allWavesCompleted = false; + + // 피로ë�„ë�„ 초기화 + if (playerGold != null) + { + playerGold.ResetFatigue(); + } + + LogDebug("웨ì�´ë¸Œ 시스템 리셋"); + } + + private bool NoActiveEnemies() + { + return enemySpawner != null && + enemySpawner.EnemyList.Count == 0 && + enemySpawner.CurrentEnemyCount <= 0; + } + + private void SubscribeEnemySpawnerEvents() + { + if (enemySpawner == null || isSubscribedToEnemySpawner) + { + return; + } + + enemySpawner.OnEnemyDestroyed += OnEnemyDestroyed; + isSubscribedToEnemySpawner = true; + } + + private void UnsubscribeEnemySpawnerEvents() + { + if (enemySpawner == null || !isSubscribedToEnemySpawner) + { + return; + } + + enemySpawner.OnEnemyDestroyed -= OnEnemyDestroyed; + isSubscribedToEnemySpawner = false; + } + + // 디버그 로그 출력 í—¬í�¼ 메소드 + private void LogDebug(string message) + { + if (showDebugMessages) + { + Debug.Log($"[WaveSystem] {message}"); + } + } + + private void OnDisable() + { + UnsubscribeEnemySpawnerEvents(); + } + + // OnDestroy: ì�´ë²¤íЏ 구ë�… í•´ì œ + private void OnDestroy() + { + UnsubscribeEnemySpawnerEvents(); + } + + // ë�™ì �으로 웨ì�´ë¸Œë¥¼ 설정하는 메소드 + public void SetWaves(Wave[] newWaves) + { + if (newWaves == null || newWaves.Length == 0) + { + Debug.LogWarning("설정하려는 웨ì�´ë¸Œê°€ 비어있습니다."); + return; + } + + // 현재 ì§„í–‰ 중ì�¸ 웨ì�´ë¸Œê°€ 있는지 확ì�¸ + if (isWaveActive) + { + Debug.LogWarning("웨ì�´ë¸Œê°€ ì§„í–‰ 중ì�¼ 때는 새 웨ì�´ë¸Œë¥¼ 설정할 수 없습니다."); + return; + } + + // 기존 웨ì�´ë¸Œ 저장 + Wave[] oldWaves = waves; + + // 새 웨ì�´ë¸Œ 설정 + waves = newWaves; + + // 웨ì�´ë¸Œ 관련 ìƒ�태 초기화 + ResetWaveSystem(); + + Debug.Log($"웨ì�´ë¸Œ 설정ì�´ 변경ë�˜ì—ˆìŠµë‹ˆë‹¤. 웨ì�´ë¸Œ 수: {waves.Length}ê°œ"); + + // 웨ì�´ë¸Œ ì •ë³´ 출력 (디버그용) + for (int i = 0; i < waves.Length; i++) + { + Debug.Log($"웨ì�´ë¸Œ {i + 1}: {waves[i].waveName}, ì � 그룹 수: {waves[i].enemyGroups.Length}ê°œ"); + } + } + + // 웨ì�´ë¸Œ 추가 메소드 + public void AddWaves(Wave[] additionalWaves) + { + if (additionalWaves == null || additionalWaves.Length == 0) + { + Debug.LogWarning("추가하려는 웨ì�´ë¸Œê°€ 비어있습니다."); + return; + } + + // 기존 웨ì�´ë¸Œì™€ 새 웨ì�´ë¸Œ 병합 + Wave[] combinedWaves = new Wave[waves.Length + additionalWaves.Length]; + + // 기존 웨ì�´ë¸Œ 복사 + for (int i = 0; i < waves.Length; i++) + { + combinedWaves[i] = waves[i]; + } + + // 새 웨ì�´ë¸Œ 추가 + for (int i = 0; i < additionalWaves.Length; i++) + { + combinedWaves[waves.Length + i] = additionalWaves[i]; + } + + // 병합ë�œ 웨ì�´ë¸Œ 설정 + waves = combinedWaves; + + Debug.Log($"웨ì�´ë¸Œê°€ 추가ë�˜ì—ˆìŠµë‹ˆë‹¤. ì´� 웨ì�´ë¸Œ 수: {waves.Length}ê°œ"); + } + + // 특정 ì�¸ë�±ìФì�˜ 웨ì�´ë¸Œ 가져오기 + public Wave GetWave(int index) + { + if (index < 0 || index >= waves.Length) + { + Debug.LogWarning($"유효하지 않ì�€ 웨ì�´ë¸Œ ì�¸ë�±ìФ: {index}, 웨ì�´ë¸Œ 수: {waves.Length}"); + return default(Wave); + } + + return waves[index]; + } + + // 현재 웨ì�´ë¸Œ ì •ë³´ 복제하여 가져오기 + public Wave GetCurrentWaveInfo() + { + if (currentWaveIndex < 0 || currentWaveIndex >= waves.Length) + { + Debug.LogWarning("현재 활성화ë�œ 웨ì�´ë¸Œê°€ 없습니다."); + return default(Wave); + } + + return waves[currentWaveIndex]; + } + + // ëžœë�¤ 웨ì�´ë¸Œ ìƒ�성 (ì„ íƒ�ì �) + public Wave GenerateRandomWave(int difficulty = 1) + { + // 빈 웨ì�´ë¸Œ ìƒ�성 + Wave randomWave = new Wave(); + + // 웨ì�´ë¸Œ ì�´ë¦„ 설정 + randomWave.waveName = $"Random Wave (Difficulty {difficulty})"; + + // 기본 ì§€ì†� 시간 설정 + randomWave.baseDuration = 60f + (difficulty * 10f); + + // ì � 그룹 ìƒ�성 + int groupCount = Mathf.Max(1, Random.Range(1, 3 + difficulty / 2)); + randomWave.enemyGroups = new EnemyGroup[groupCount]; + + // ëžœë�¤ ì � 프리팹 가져오기 (Resources í�´ë�”ì—�서) + GameObject[] enemyPrefabs = Resources.LoadAll("Prefabs/Enemies"); + + // ì � 프리팹ì�´ 없으면 빈 웨ì�´ë¸Œ 반환 + if (enemyPrefabs == null || enemyPrefabs.Length == 0) + { + Debug.LogWarning("ëžœë�¤ 웨ì�´ë¸Œ ìƒ�성ì�„ 위한 ì � 프리팹ì�„ ì°¾ì�„ 수 없습니다."); + return randomWave; + } + + // ê°� 그룹 설정 + for (int i = 0; i < groupCount; i++) + { + EnemyGroup group = new EnemyGroup(); + + // ëžœë�¤ ì � 프리팹 ì„ íƒ� + group.enemyPrefab = enemyPrefabs[Random.Range(0, enemyPrefabs.Length)]; + + // ì � 수량 설정 (난ì�´ë�„ì—� ë”°ë�¼) + group.count = Mathf.Max(3, 5 + difficulty * 2 + Random.Range(-2, 3)); + + // 스í�° 간격 설정 + group.spawnTime = Mathf.Max(0.5f, 2f - (difficulty * 0.1f) + Random.Range(-0.2f, 0.2f)); + + // 그룹 추가 + randomWave.enemyGroups[i] = group; + } + + // 다ì�Œ 웨ì�´ë¸Œ 딜레ì�´ 설정 + randomWave.delayBeforeNextWave = 5f + Random.Range(0f, 5f); + + return randomWave; + } + + // 웨ì�´ë¸Œì�˜ 특정 ì†�성 ì¡°ì • + public void AdjustWaveDifficulty(float difficultyMultiplier) + { + // 웨ì�´ë¸Œ ë°°ì—´ì�˜ 새 버전 ìƒ�성 (ì›�본 수정 ë°©ì§€) + Wave[] adjustedWaves = new Wave[waves.Length]; + + for (int i = 0; i < waves.Length; i++) + { + // 웨ì�´ë¸Œ 복사 + adjustedWaves[i] = waves[i]; + + // 웨ì�´ë¸Œ ì§€ì†� 시간 ì¡°ì • + if (adjustedWaves[i].baseDuration > 0) + { + adjustedWaves[i].baseDuration *= Mathf.Max(0.5f, difficultyMultiplier); + } + + // ì � 그룹 복사 ë°� ì¡°ì • + EnemyGroup[] adjustedGroups = new EnemyGroup[adjustedWaves[i].enemyGroups.Length]; + + for (int j = 0; j < adjustedWaves[i].enemyGroups.Length; j++) + { + // 그룹 복사 + adjustedGroups[j] = adjustedWaves[i].enemyGroups[j]; + + // ì � 수량 ì¡°ì • (구조체는 ì§�ì ‘ 수정 불가하므로 새로운 ì�¸ìŠ¤í„´ìŠ¤ ìƒ�성) + int newCount = Mathf.Max(1, Mathf.RoundToInt(adjustedGroups[j].count * difficultyMultiplier)); + adjustedGroups[j].count = newCount; + + // 스í�° 시간 ì¡°ì • (반비례) + float newSpawnTime = Mathf.Max(0.2f, adjustedGroups[j].spawnTime / Mathf.Max(0.5f, difficultyMultiplier)); + adjustedGroups[j].spawnTime = newSpawnTime; + } + + // ì¡°ì •ë�œ 그룹 설정 + adjustedWaves[i].enemyGroups = adjustedGroups; + } + + // ì¡°ì •ë�œ 웨ì�´ë¸Œë¡œ ì—…ë�°ì�´íЏ + waves = adjustedWaves; + + Debug.Log($"웨ì�´ë¸Œ 난ì�´ë�„ê°€ ì¡°ì •ë�˜ì—ˆìŠµë‹ˆë‹¤. 배율: {difficultyMultiplier}"); + } +} diff --git a/Assets/Scripts/WaveSystem.cs.meta b/Assets/_Project/Scripts/Legacy/WaveSystem.cs.meta similarity index 100% rename from Assets/Scripts/WaveSystem.cs.meta rename to Assets/_Project/Scripts/Legacy/WaveSystem.cs.meta diff --git a/Assets/Scripts/unused.meta b/Assets/_Project/Scripts/Legacy/unused.meta similarity index 100% rename from Assets/Scripts/unused.meta rename to Assets/_Project/Scripts/Legacy/unused.meta diff --git a/Assets/Scripts/unused/MicroPhoneVolumeTest.cs b/Assets/_Project/Scripts/Legacy/unused/MicroPhoneVolumeTest.cs similarity index 100% rename from Assets/Scripts/unused/MicroPhoneVolumeTest.cs rename to Assets/_Project/Scripts/Legacy/unused/MicroPhoneVolumeTest.cs diff --git a/Assets/Scripts/unused/MicroPhoneVolumeTest.cs.meta b/Assets/_Project/Scripts/Legacy/unused/MicroPhoneVolumeTest.cs.meta similarity index 100% rename from Assets/Scripts/unused/MicroPhoneVolumeTest.cs.meta rename to Assets/_Project/Scripts/Legacy/unused/MicroPhoneVolumeTest.cs.meta diff --git a/Assets/Scripts/unused/MoveVertical.cs b/Assets/_Project/Scripts/Legacy/unused/MoveVertical.cs similarity index 100% rename from Assets/Scripts/unused/MoveVertical.cs rename to Assets/_Project/Scripts/Legacy/unused/MoveVertical.cs diff --git a/Assets/Scripts/unused/MoveVertical.cs.meta b/Assets/_Project/Scripts/Legacy/unused/MoveVertical.cs.meta similarity index 100% rename from Assets/Scripts/unused/MoveVertical.cs.meta rename to Assets/_Project/Scripts/Legacy/unused/MoveVertical.cs.meta diff --git a/Assets/Scripts/unused/MovementRigidbody2D.cs b/Assets/_Project/Scripts/Legacy/unused/MovementRigidbody2D.cs similarity index 100% rename from Assets/Scripts/unused/MovementRigidbody2D.cs rename to Assets/_Project/Scripts/Legacy/unused/MovementRigidbody2D.cs diff --git a/Assets/Scripts/unused/MovementRigidbody2D.cs.meta b/Assets/_Project/Scripts/Legacy/unused/MovementRigidbody2D.cs.meta similarity index 100% rename from Assets/Scripts/unused/MovementRigidbody2D.cs.meta rename to Assets/_Project/Scripts/Legacy/unused/MovementRigidbody2D.cs.meta diff --git a/Assets/Scripts/unused/Path.meta b/Assets/_Project/Scripts/Legacy/unused/Path.meta similarity index 100% rename from Assets/Scripts/unused/Path.meta rename to Assets/_Project/Scripts/Legacy/unused/Path.meta diff --git a/Assets/Scripts/unused/Path/GameManager.cs b/Assets/_Project/Scripts/Legacy/unused/Path/GameManager.cs similarity index 100% rename from Assets/Scripts/unused/Path/GameManager.cs rename to Assets/_Project/Scripts/Legacy/unused/Path/GameManager.cs diff --git a/Assets/Scripts/unused/Path/GameManager.cs.meta b/Assets/_Project/Scripts/Legacy/unused/Path/GameManager.cs.meta similarity index 100% rename from Assets/Scripts/unused/Path/GameManager.cs.meta rename to Assets/_Project/Scripts/Legacy/unused/Path/GameManager.cs.meta diff --git a/Assets/Scripts/unused/Path/PathFindingManager.cs b/Assets/_Project/Scripts/Legacy/unused/Path/PathFindingManager.cs similarity index 100% rename from Assets/Scripts/unused/Path/PathFindingManager.cs rename to Assets/_Project/Scripts/Legacy/unused/Path/PathFindingManager.cs diff --git a/Assets/Scripts/unused/Path/PathFindingManager.cs.meta b/Assets/_Project/Scripts/Legacy/unused/Path/PathFindingManager.cs.meta similarity index 100% rename from Assets/Scripts/unused/Path/PathFindingManager.cs.meta rename to Assets/_Project/Scripts/Legacy/unused/Path/PathFindingManager.cs.meta diff --git a/Assets/Scripts/unused/Pathfinding.cs b/Assets/_Project/Scripts/Legacy/unused/Pathfinding.cs similarity index 100% rename from Assets/Scripts/unused/Pathfinding.cs rename to Assets/_Project/Scripts/Legacy/unused/Pathfinding.cs diff --git a/Assets/Scripts/unused/Pathfinding.cs.meta b/Assets/_Project/Scripts/Legacy/unused/Pathfinding.cs.meta similarity index 100% rename from Assets/Scripts/unused/Pathfinding.cs.meta rename to Assets/_Project/Scripts/Legacy/unused/Pathfinding.cs.meta diff --git a/Assets/Scripts/unused/Projectile.cs b/Assets/_Project/Scripts/Legacy/unused/Projectile.cs similarity index 100% rename from Assets/Scripts/unused/Projectile.cs rename to Assets/_Project/Scripts/Legacy/unused/Projectile.cs diff --git a/Assets/Scripts/unused/Projectile.cs.meta b/Assets/_Project/Scripts/Legacy/unused/Projectile.cs.meta similarity index 100% rename from Assets/Scripts/unused/Projectile.cs.meta rename to Assets/_Project/Scripts/Legacy/unused/Projectile.cs.meta diff --git a/Assets/Scripts/unused/SkillEmission.cs b/Assets/_Project/Scripts/Legacy/unused/SkillEmission.cs similarity index 100% rename from Assets/Scripts/unused/SkillEmission.cs rename to Assets/_Project/Scripts/Legacy/unused/SkillEmission.cs diff --git a/Assets/Scripts/unused/SkillEmission.cs.meta b/Assets/_Project/Scripts/Legacy/unused/SkillEmission.cs.meta similarity index 100% rename from Assets/Scripts/unused/SkillEmission.cs.meta rename to Assets/_Project/Scripts/Legacy/unused/SkillEmission.cs.meta diff --git a/Assets/Scripts/unused/Utils.cs b/Assets/_Project/Scripts/Legacy/unused/Utils.cs similarity index 100% rename from Assets/Scripts/unused/Utils.cs rename to Assets/_Project/Scripts/Legacy/unused/Utils.cs diff --git a/Assets/Scripts/unused/Utils.cs.meta b/Assets/_Project/Scripts/Legacy/unused/Utils.cs.meta similarity index 100% rename from Assets/Scripts/unused/Utils.cs.meta rename to Assets/_Project/Scripts/Legacy/unused/Utils.cs.meta diff --git a/Assets/_Project/Scripts/Runtime.meta b/Assets/_Project/Scripts/Runtime.meta new file mode 100644 index 0000000..6a814ed --- /dev/null +++ b/Assets/_Project/Scripts/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e83741c02a3d2945ba9e49f63e55db6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Runtime/Core.meta b/Assets/_Project/Scripts/Runtime/Core.meta new file mode 100644 index 0000000..9aa6c51 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 391cf30528b154d489c7a043bb36c0dd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Runtime/Core/GameEvents.cs b/Assets/_Project/Scripts/Runtime/Core/GameEvents.cs new file mode 100644 index 0000000..89455a8 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Core/GameEvents.cs @@ -0,0 +1,95 @@ +using UnityEngine; + +namespace HomeProtector.Core +{ + public enum GamePhase + { + Preparation, + Combat, + Result + } + + public enum TimeOfDay + { + Morning, + Evening + } + + public enum TowerChangeType + { + Placed, + Removed, + Upgraded, + Moved + } + + public struct PhaseChangedEvent + { + public PhaseChangedEvent(GamePhase previousPhase, GamePhase newPhase, int day) + { + PreviousPhase = previousPhase; + NewPhase = newPhase; + Day = day; + } + + public GamePhase PreviousPhase { get; } + public GamePhase NewPhase { get; } + public int Day { get; } + } + + public struct DayChangedEvent + { + public DayChangedEvent(int previousDay, int newDay) + { + PreviousDay = previousDay; + NewDay = newDay; + } + + public int PreviousDay { get; } + public int NewDay { get; } + } + + public struct WaveChangedEvent + { + public WaveChangedEvent(int day, int waveIndex, WaveDefinition wave) + { + Day = day; + WaveIndex = waveIndex; + Wave = wave; + } + + public int Day { get; } + public int WaveIndex { get; } + public WaveDefinition Wave { get; } + } + + public struct ResourceChangedEvent + { + public ResourceChangedEvent(GameObject resource, string resourceId, Vector3 position) + { + Resource = resource; + ResourceId = resourceId; + Position = position; + } + + public GameObject Resource { get; } + public string ResourceId { get; } + public Vector3 Position { get; } + } + + public struct TowerChangedEvent + { + public TowerChangedEvent(TowerChangeType changeType, TowerDefinition definition, GameObject instance, Vector3Int cell) + { + ChangeType = changeType; + Definition = definition; + Instance = instance; + Cell = cell; + } + + public TowerChangeType ChangeType { get; } + public TowerDefinition Definition { get; } + public GameObject Instance { get; } + public Vector3Int Cell { get; } + } +} diff --git a/Assets/_Project/Scripts/Runtime/Core/GameEvents.cs.meta b/Assets/_Project/Scripts/Runtime/Core/GameEvents.cs.meta new file mode 100644 index 0000000..81e71d5 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Core/GameEvents.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 67356d3c1054d294fadeb44ebcd5221d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Runtime/Core/GameSession.cs b/Assets/_Project/Scripts/Runtime/Core/GameSession.cs new file mode 100644 index 0000000..ae8e534 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Core/GameSession.cs @@ -0,0 +1,106 @@ +using System; +using UnityEngine; + +namespace HomeProtector.Core +{ + public sealed class GameSession : MonoBehaviour + { + [SerializeField] private int startingDay = 1; + [SerializeField] private GamePhase initialPhase = GamePhase.Preparation; + [SerializeField] private bool publishInitialStateOnStart = true; + + public event Action PhaseChanged; + public event Action DayChanged; + + public int CurrentDay { get; private set; } = 1; + public GamePhase CurrentPhase { get; private set; } + public bool LastCombatWon { get; private set; } + + private void Awake() + { + CurrentDay = Mathf.Max(1, startingDay); + CurrentPhase = initialPhase; + } + + private void Start() + { + if (!publishInitialStateOnStart) + { + return; + } + + DayChanged?.Invoke(new DayChangedEvent(CurrentDay, CurrentDay)); + PhaseChanged?.Invoke(new PhaseChangedEvent(CurrentPhase, CurrentPhase, CurrentDay)); + } + + public void BeginPreparation() + { + if (CurrentPhase != GamePhase.Result || LastCombatWon) + { + return; + } + + SetPhase(GamePhase.Preparation); + } + + public void BeginCombat() + { + if (CurrentPhase != GamePhase.Preparation) + { + return; + } + + SetPhase(GamePhase.Combat); + } + + public void CompleteCombat(bool victory) + { + if (CurrentPhase != GamePhase.Combat) + { + return; + } + + LastCombatWon = victory; + SetPhase(GamePhase.Result); + } + + public void AdvanceDay() + { + if (CurrentPhase != GamePhase.Result || !LastCombatWon) + { + return; + } + + int previousDay = CurrentDay; + CurrentDay++; + DayChanged?.Invoke(new DayChangedEvent(previousDay, CurrentDay)); + SetPhase(GamePhase.Preparation); + } + + public void ResetSession(int day = 1) + { + int previousDay = CurrentDay; + CurrentDay = Mathf.Max(1, day); + LastCombatWon = false; + DayChanged?.Invoke(new DayChangedEvent(previousDay, CurrentDay)); + SetPhase(GamePhase.Preparation, true); + } + + public void SetPhase(GamePhase nextPhase) + { + SetPhase(nextPhase, false); + } + + private void SetPhase(GamePhase nextPhase, bool forcePublish) + { + GamePhase previousPhase = CurrentPhase; + if (!forcePublish && previousPhase == nextPhase) + { + return; + } + + CurrentPhase = nextPhase; + PhaseChanged?.Invoke(new PhaseChangedEvent(previousPhase, nextPhase, CurrentDay)); + } + } +} diff --git a/Assets/_Project/Scripts/Runtime/Core/GameSession.cs.meta b/Assets/_Project/Scripts/Runtime/Core/GameSession.cs.meta new file mode 100644 index 0000000..ba7cb3f --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Core/GameSession.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a052c76b0373948459faa54cd32aa1e1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Runtime/Data.meta b/Assets/_Project/Scripts/Runtime/Data.meta new file mode 100644 index 0000000..a324ad9 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa8189ff68377c348a0ed9054c81ca26 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Runtime/Data/DayWaveTable.cs b/Assets/_Project/Scripts/Runtime/Data/DayWaveTable.cs new file mode 100644 index 0000000..3409c24 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Data/DayWaveTable.cs @@ -0,0 +1,79 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace HomeProtector.Core +{ + [System.Serializable] + public sealed class DayWaveEntry + { + [SerializeField] private string label = "Day"; + [SerializeField] private int day = 1; + [SerializeField] private int dayRangeStart = 0; + [SerializeField] private int dayRangeEnd = 0; + [SerializeField] private List waves = new List(); + + public string Label => label; + public int Day => day; + public int DayRangeStart => dayRangeStart; + public int DayRangeEnd => dayRangeEnd; + public IReadOnlyList Waves => waves; + + public bool Matches(int currentDay) + { + if (day > 0 && currentDay == day) + { + return true; + } + + return dayRangeStart > 0 && dayRangeEnd >= dayRangeStart && currentDay >= dayRangeStart && currentDay <= dayRangeEnd; + } + } + + [CreateAssetMenu(fileName = "DayWaveTable", menuName = "Home Protector/Day Wave Table")] + public sealed class DayWaveTable : ScriptableObject + { + [SerializeField] private List entries = new List(); + + public IReadOnlyList Entries => entries; + + public IReadOnlyList GetWavesForDay(int day) + { + DayWaveEntry exactMatch = null; + DayWaveEntry rangeMatch = null; + + foreach (DayWaveEntry entry in entries) + { + if (entry == null) + { + continue; + } + + if (entry.Day == day) + { + exactMatch = entry; + break; + } + + if (rangeMatch == null && entry.Matches(day)) + { + rangeMatch = entry; + } + } + + DayWaveEntry selected = exactMatch ?? rangeMatch; + return selected != null ? selected.Waves : System.Array.Empty(); + } + + public bool IsValid(out string message) + { + if (entries == null || entries.Count == 0) + { + message = "Day wave table has no entries."; + return false; + } + + message = string.Empty; + return true; + } + } +} diff --git a/Assets/_Project/Scripts/Runtime/Data/DayWaveTable.cs.meta b/Assets/_Project/Scripts/Runtime/Data/DayWaveTable.cs.meta new file mode 100644 index 0000000..01c35ac --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Data/DayWaveTable.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12cd5e587efc45c47875adee9fb020c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Runtime/Data/EnemyDefinition.cs b/Assets/_Project/Scripts/Runtime/Data/EnemyDefinition.cs new file mode 100644 index 0000000..b88c326 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Data/EnemyDefinition.cs @@ -0,0 +1,50 @@ +using UnityEngine; + +namespace HomeProtector.Core +{ + [CreateAssetMenu(fileName = "EnemyDefinition", menuName = "Home Protector/Enemy Definition")] + public sealed class EnemyDefinition : ScriptableObject + { + [SerializeField] private string id = "enemy"; + [SerializeField] private string displayName = "Enemy"; + [SerializeField] private GameObject prefab; + [SerializeField] private Sprite icon; + [SerializeField] private float maxHealth = 1f; + [SerializeField] private int goldReward = 1; + [SerializeField] private int experienceReward = 1; + [SerializeField] private float moveSpeedMultiplier = 1f; + + public string Id => id; + public string DisplayName => displayName; + public GameObject Prefab => prefab; + public Sprite Icon => icon; + public float MaxHealth => maxHealth; + public int GoldReward => goldReward; + public int ExperienceReward => experienceReward; + public float MoveSpeedMultiplier => moveSpeedMultiplier; + + public bool IsValid(out string message) + { + if (string.IsNullOrWhiteSpace(id)) + { + message = "Enemy id is empty."; + return false; + } + + if (prefab == null) + { + message = $"Enemy '{id}' has no prefab."; + return false; + } + + if (maxHealth <= 0f) + { + message = $"Enemy '{id}' must have positive health."; + return false; + } + + message = string.Empty; + return true; + } + } +} diff --git a/Assets/_Project/Scripts/Runtime/Data/EnemyDefinition.cs.meta b/Assets/_Project/Scripts/Runtime/Data/EnemyDefinition.cs.meta new file mode 100644 index 0000000..b30ff1e --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Data/EnemyDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31479fc32602c544f91e0663c653a597 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Runtime/Data/ProjectileDefinition.cs b/Assets/_Project/Scripts/Runtime/Data/ProjectileDefinition.cs new file mode 100644 index 0000000..57b860b --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Data/ProjectileDefinition.cs @@ -0,0 +1,64 @@ +using UnityEngine; + +namespace HomeProtector.Core +{ + public enum ProjectileBehaviourType + { + Straight, + Homing, + Area, + SlowDebuff, + AttackSpeedDebuff, + ComboDebuff + } + + [CreateAssetMenu(fileName = "ProjectileDefinition", menuName = "Home Protector/Projectile Definition")] + public sealed class ProjectileDefinition : ScriptableObject + { + [SerializeField] private string id = "projectile"; + [SerializeField] private string displayName = "Projectile"; + [SerializeField] private GameObject prefab; + [SerializeField] private Sprite icon; + [SerializeField] private ProjectileBehaviourType behaviourType = ProjectileBehaviourType.Straight; + [SerializeField] private float baseDamage = 1f; + [SerializeField] private float speed = 8f; + [SerializeField] private float areaRadius = 0f; + [SerializeField] private float debuffDuration = 0f; + [SerializeField] private float debuffMultiplier = 1f; + + public string Id => id; + public string DisplayName => displayName; + public GameObject Prefab => prefab; + public Sprite Icon => icon; + public ProjectileBehaviourType BehaviourType => behaviourType; + public float BaseDamage => baseDamage; + public float Speed => speed; + public float AreaRadius => areaRadius; + public float DebuffDuration => debuffDuration; + public float DebuffMultiplier => debuffMultiplier; + + public bool IsValid(out string message) + { + if (string.IsNullOrWhiteSpace(id)) + { + message = "Projectile id is empty."; + return false; + } + + if (prefab == null) + { + message = $"Projectile '{id}' has no prefab."; + return false; + } + + if (baseDamage < 0f) + { + message = $"Projectile '{id}' has negative damage."; + return false; + } + + message = string.Empty; + return true; + } + } +} diff --git a/Assets/_Project/Scripts/Runtime/Data/ProjectileDefinition.cs.meta b/Assets/_Project/Scripts/Runtime/Data/ProjectileDefinition.cs.meta new file mode 100644 index 0000000..97f98e4 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Data/ProjectileDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac10458e8db14384983b3b0f5c10c36f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Runtime/Data/TowerDefinition.cs b/Assets/_Project/Scripts/Runtime/Data/TowerDefinition.cs new file mode 100644 index 0000000..651dd11 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Data/TowerDefinition.cs @@ -0,0 +1,75 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace HomeProtector.Core +{ + [System.Serializable] + public sealed class TowerLevelDefinition + { + [SerializeField] private Sprite sprite; + [SerializeField] private ProjectileDefinition projectile; + [SerializeField] private float damage = 1f; + [SerializeField] private float fireRate = 1f; + [SerializeField] private float range = 4f; + [SerializeField] private int cost = 1; + [SerializeField] private int sellValue = 1; + + public Sprite Sprite => sprite; + public ProjectileDefinition Projectile => projectile; + public float Damage => damage; + public float FireRate => fireRate; + public float Range => range; + public int Cost => cost; + public int SellValue => sellValue; + } + + [CreateAssetMenu(fileName = "TowerDefinition", menuName = "Home Protector/Tower Definition")] + public sealed class TowerDefinition : ScriptableObject + { + [SerializeField] private string id = "tower"; + [SerializeField] private string displayName = "Tower"; + [SerializeField] private GameObject towerPrefab; + [SerializeField] private GameObject previewPrefab; + [SerializeField] private List levels = new List(); + + public string Id => id; + public string DisplayName => displayName; + public GameObject TowerPrefab => towerPrefab; + public GameObject PreviewPrefab => previewPrefab != null ? previewPrefab : towerPrefab; + public IReadOnlyList Levels => levels; + + public TowerLevelDefinition GetLevel(int zeroBasedLevel) + { + if (levels == null || levels.Count == 0) + { + return null; + } + + return levels[Mathf.Clamp(zeroBasedLevel, 0, levels.Count - 1)]; + } + + public bool IsValid(out string message) + { + if (string.IsNullOrWhiteSpace(id)) + { + message = "Tower id is empty."; + return false; + } + + if (towerPrefab == null) + { + message = $"Tower '{id}' has no prefab."; + return false; + } + + if (levels == null || levels.Count == 0) + { + message = $"Tower '{id}' has no level data."; + return false; + } + + message = string.Empty; + return true; + } + } +} diff --git a/Assets/_Project/Scripts/Runtime/Data/TowerDefinition.cs.meta b/Assets/_Project/Scripts/Runtime/Data/TowerDefinition.cs.meta new file mode 100644 index 0000000..49189c3 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Data/TowerDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff06f21defe13c142a818363f9d9c232 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Runtime/Data/WaveDefinition.cs b/Assets/_Project/Scripts/Runtime/Data/WaveDefinition.cs new file mode 100644 index 0000000..da63ad6 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Data/WaveDefinition.cs @@ -0,0 +1,62 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace HomeProtector.Core +{ + [System.Serializable] + public sealed class EnemyWaveEntry + { + [SerializeField] private EnemyDefinition enemy; + [SerializeField] private int count = 1; + [SerializeField] private float spawnInterval = 1f; + [SerializeField] private Transform spawnPointOverride; + + public EnemyDefinition Enemy => enemy; + public int Count => Mathf.Max(0, count); + public float SpawnInterval => Mathf.Max(0f, spawnInterval); + public Transform SpawnPointOverride => spawnPointOverride; + } + + [CreateAssetMenu(fileName = "WaveDefinition", menuName = "Home Protector/Wave Definition")] + public sealed class WaveDefinition : ScriptableObject + { + [SerializeField] private string id = "wave"; + [SerializeField] private string displayName = "Wave"; + [SerializeField] private float duration = 30f; + [SerializeField] private int rewardGold = 0; + [SerializeField] private List enemyGroups = new List(); + + public string Id => id; + public string DisplayName => displayName; + public float Duration => Mathf.Max(0f, duration); + public int RewardGold => rewardGold; + public IReadOnlyList EnemyGroups => enemyGroups; + + public bool IsValid(out string message) + { + if (string.IsNullOrWhiteSpace(id)) + { + message = "Wave id is empty."; + return false; + } + + if (enemyGroups == null || enemyGroups.Count == 0) + { + message = $"Wave '{id}' has no enemy groups."; + return false; + } + + for (int i = 0; i < enemyGroups.Count; i++) + { + if (enemyGroups[i].Enemy == null) + { + message = $"Wave '{id}' has an empty enemy slot at index {i}."; + return false; + } + } + + message = string.Empty; + return true; + } + } +} diff --git a/Assets/_Project/Scripts/Runtime/Data/WaveDefinition.cs.meta b/Assets/_Project/Scripts/Runtime/Data/WaveDefinition.cs.meta new file mode 100644 index 0000000..5ba78ba --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/Data/WaveDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61c5cffba0b9e1d469c3aaa9e53eda49 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Scripts/Runtime/HomeProtector.Core.asmdef b/Assets/_Project/Scripts/Runtime/HomeProtector.Core.asmdef new file mode 100644 index 0000000..7769750 --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/HomeProtector.Core.asmdef @@ -0,0 +1,14 @@ +{ + "name": "HomeProtector.Core", + "rootNamespace": "HomeProtector.Core", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} diff --git a/Assets/_Project/Scripts/Runtime/HomeProtector.Core.asmdef.meta b/Assets/_Project/Scripts/Runtime/HomeProtector.Core.asmdef.meta new file mode 100644 index 0000000..bf7533c --- /dev/null +++ b/Assets/_Project/Scripts/Runtime/HomeProtector.Core.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f3bea34307754494b8720ff0fff6e7e2 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests.meta b/Assets/_Project/Tests.meta new file mode 100644 index 0000000..030ef69 --- /dev/null +++ b/Assets/_Project/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a4e20a2b2de569b4fb94320481aa314b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/EditMode.meta b/Assets/_Project/Tests/EditMode.meta new file mode 100644 index 0000000..9ef6572 --- /dev/null +++ b/Assets/_Project/Tests/EditMode.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 82bac0289fd969541af5e7292f8af3de +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/EditMode/CleanCoreDataTests.cs b/Assets/_Project/Tests/EditMode/CleanCoreDataTests.cs new file mode 100644 index 0000000..dcf54af --- /dev/null +++ b/Assets/_Project/Tests/EditMode/CleanCoreDataTests.cs @@ -0,0 +1,249 @@ +using System.Linq; +using HomeProtector.Core; +using NUnit.Framework; +using UnityEditor; +using UnityEngine; + +namespace HomeProtector.Tests.EditMode +{ + public sealed class CleanCoreDataTests + { + [Test] + public void EmptyDayWaveTableReturnsNoWaves() + { + DayWaveTable table = ScriptableObject.CreateInstance(); + + Assert.That(table.GetWavesForDay(1), Is.Empty); + UnityEngine.Object.DestroyImmediate(table); + } + + [Test] + public void GameSessionPublishesPhaseChanges() + { + GameObject gameObject = new GameObject("GameSession Test"); + GameSession session = gameObject.AddComponent(); + PhaseChangedEvent received = default; + bool eventRaised = false; + + session.PhaseChanged += evt => + { + received = evt; + eventRaised = true; + }; + + session.BeginCombat(); + + Assert.That(eventRaised, Is.True); + Assert.That(received.NewPhase, Is.EqualTo(GamePhase.Combat)); + UnityEngine.Object.DestroyImmediate(gameObject); + } + + [Test] + public void CompleteCombatOutsideCombatIsIgnored() + { + GameObject gameObject = new GameObject("GameSession Test"); + GameSession session = gameObject.AddComponent(); + int phaseEvents = 0; + session.PhaseChanged += _ => phaseEvents++; + + session.CompleteCombat(true); + + Assert.That(session.CurrentPhase, Is.EqualTo(GamePhase.Preparation)); + Assert.That(session.LastCombatWon, Is.False); + Assert.That(phaseEvents, Is.Zero); + UnityEngine.Object.DestroyImmediate(gameObject); + } + + [Test] + public void RepeatedCombatCompletionKeepsFirstOutcomeAndPublishesOnce() + { + GameObject gameObject = new GameObject("GameSession Test"); + GameSession session = gameObject.AddComponent(); + int resultEvents = 0; + session.PhaseChanged += evt => + { + if (evt.NewPhase == GamePhase.Result) + { + resultEvents++; + } + }; + + session.BeginCombat(); + session.CompleteCombat(true); + session.CompleteCombat(false); + + Assert.That(session.CurrentPhase, Is.EqualTo(GamePhase.Result)); + Assert.That(session.LastCombatWon, Is.True); + Assert.That(resultEvents, Is.EqualTo(1)); + UnityEngine.Object.DestroyImmediate(gameObject); + } + + [Test] + public void BeginCombatOutsidePreparationIsIgnored() + { + GameObject gameObject = new GameObject("GameSession Test"); + GameSession session = gameObject.AddComponent(); + + session.BeginCombat(); + session.CompleteCombat(true); + session.BeginCombat(); + + Assert.That(session.CurrentPhase, Is.EqualTo(GamePhase.Result)); + Assert.That(session.LastCombatWon, Is.True); + UnityEngine.Object.DestroyImmediate(gameObject); + } + + [Test] + public void AdvanceDayOutsideWinningResultIsIgnored() + { + GameObject gameObject = new GameObject("GameSession Test"); + GameSession session = gameObject.AddComponent(); + + session.AdvanceDay(); + + Assert.That(session.CurrentDay, Is.EqualTo(1)); + Assert.That(session.CurrentPhase, Is.EqualTo(GamePhase.Preparation)); + UnityEngine.Object.DestroyImmediate(gameObject); + } + + [Test] + public void AdvanceDayAfterDefeatIsIgnored() + { + GameObject gameObject = new GameObject("GameSession Test"); + GameSession session = gameObject.AddComponent(); + + session.BeginCombat(); + session.CompleteCombat(false); + session.AdvanceDay(); + + Assert.That(session.CurrentDay, Is.EqualTo(1)); + Assert.That(session.CurrentPhase, Is.EqualTo(GamePhase.Result)); + UnityEngine.Object.DestroyImmediate(gameObject); + } + + [Test] + public void WinningResultAdvancesDayAndBeginsPreparation() + { + GameObject gameObject = new GameObject("GameSession Test"); + GameSession session = gameObject.AddComponent(); + + session.BeginCombat(); + session.CompleteCombat(true); + session.AdvanceDay(); + + Assert.That(session.CurrentDay, Is.EqualTo(2)); + Assert.That(session.CurrentPhase, Is.EqualTo(GamePhase.Preparation)); + UnityEngine.Object.DestroyImmediate(gameObject); + } + + [Test] + public void DefeatCanReturnToPreparationWithoutAdvancingDay() + { + GameObject gameObject = new GameObject("GameSession Test"); + GameSession session = gameObject.AddComponent(); + + session.BeginCombat(); + session.CompleteCombat(false); + session.BeginPreparation(); + + Assert.That(session.CurrentDay, Is.EqualTo(1)); + Assert.That(session.CurrentPhase, Is.EqualTo(GamePhase.Preparation)); + Assert.That(session.LastCombatWon, Is.False); + UnityEngine.Object.DestroyImmediate(gameObject); + } + + [Test] + public void GeneratedTowerDefinitionsAreValid() + { + string[] paths = FindAssetPaths("t:TowerDefinition", "Assets/_Project/Data/Towers"); + Assert.That(paths, Is.Not.Empty); + + foreach (string path in paths) + { + TowerDefinition definition = AssetDatabase.LoadAssetAtPath(path); + Assert.That(definition, Is.Not.Null, path); + Assert.That(definition.IsValid(out string message), Is.True, $"{path}: {message}"); + for (int levelIndex = 0; levelIndex < definition.Levels.Count; levelIndex++) + { + TowerLevelDefinition level = definition.Levels[levelIndex]; + Assert.That(level, Is.Not.Null, $"{path}: tower level {levelIndex + 1} must not be null."); + Assert.That( + level.Projectile, + Is.Not.Null, + $"{path}: tower level {levelIndex + 1} must reference a projectile definition."); + Assert.That( + level.Damage, + Is.GreaterThan(0f), + $"{path}: tower level {levelIndex + 1} must have Damage greater than 0."); + } + } + } + + [Test] + public void GeneratedEnemyDefinitionsAreValid() + { + string[] paths = FindAssetPaths("t:EnemyDefinition", "Assets/_Project/Data/Enemies"); + Assert.That(paths, Is.Not.Empty); + + foreach (string path in paths) + { + EnemyDefinition definition = AssetDatabase.LoadAssetAtPath(path); + Assert.That(definition, Is.Not.Null, path); + Assert.That(definition.IsValid(out string message), Is.True, $"{path}: {message}"); + } + } + + [Test] + public void GeneratedProjectileDefinitionsAreValid() + { + string[] paths = FindAssetPaths("t:ProjectileDefinition", "Assets/_Project/Data/Projectiles"); + Assert.That(paths, Is.Not.Empty); + + foreach (string path in paths) + { + ProjectileDefinition definition = AssetDatabase.LoadAssetAtPath(path); + Assert.That(definition, Is.Not.Null, path); + Assert.That(definition.IsValid(out string message), Is.True, $"{path}: {message}"); + } + } + + [Test] + public void GeneratedWaveDefinitionsAreValid() + { + string[] paths = FindAssetPaths("t:WaveDefinition", "Assets/_Project/Data/Waves"); + Assert.That(paths, Has.Length.EqualTo(10)); + + foreach (string path in paths) + { + WaveDefinition definition = AssetDatabase.LoadAssetAtPath(path); + Assert.That(definition, Is.Not.Null, path); + Assert.That(definition.IsValid(out string message), Is.True, $"{path}: {message}"); + Assert.That(definition.Duration, Is.GreaterThan(0f), path); + Assert.That(definition.EnemyGroups.All(group => group.Count > 0), Is.True, path); + } + } + + [Test] + public void StarterDayWaveTableCoversFirstFiveDays() + { + DayWaveTable table = + AssetDatabase.LoadAssetAtPath("Assets/_Project/Data/DayWaveTable.asset"); + Assert.That(table, Is.Not.Null); + Assert.That(table.IsValid(out string message), Is.True, message); + Assert.That(table.Entries, Has.Count.EqualTo(5)); + + for (int day = 1; day <= 5; day++) + { + Assert.That(table.GetWavesForDay(day), Has.Count.EqualTo(2), $"Day {day}"); + } + } + + private static string[] FindAssetPaths(string filter, string folder) + { + return AssetDatabase.FindAssets(filter, new[] { folder }) + .Select(AssetDatabase.GUIDToAssetPath) + .OrderBy(path => path) + .ToArray(); + } + } +} diff --git a/Assets/_Project/Tests/EditMode/CleanCoreDataTests.cs.meta b/Assets/_Project/Tests/EditMode/CleanCoreDataTests.cs.meta new file mode 100644 index 0000000..cb986e2 --- /dev/null +++ b/Assets/_Project/Tests/EditMode/CleanCoreDataTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 69f4b585a6690eb40acbea0d0a2106f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/EditMode/HomeProtector.Tests.EditMode.asmdef b/Assets/_Project/Tests/EditMode/HomeProtector.Tests.EditMode.asmdef new file mode 100644 index 0000000..dda1f44 --- /dev/null +++ b/Assets/_Project/Tests/EditMode/HomeProtector.Tests.EditMode.asmdef @@ -0,0 +1,21 @@ +{ + "name": "HomeProtector.Tests.EditMode", + "rootNamespace": "HomeProtector.Tests.EditMode", + "references": [ + "HomeProtector.Core" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "noEngineReferences": false +} diff --git a/Assets/_Project/Tests/EditMode/HomeProtector.Tests.EditMode.asmdef.meta b/Assets/_Project/Tests/EditMode/HomeProtector.Tests.EditMode.asmdef.meta new file mode 100644 index 0000000..317ad15 --- /dev/null +++ b/Assets/_Project/Tests/EditMode/HomeProtector.Tests.EditMode.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5af7eea0ededae841bd703b588107552 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/LegacyEditMode.meta b/Assets/_Project/Tests/LegacyEditMode.meta new file mode 100644 index 0000000..e5cf7f4 --- /dev/null +++ b/Assets/_Project/Tests/LegacyEditMode.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f9aef346edbb4a80a6d14f4abf068bf8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/LegacyEditMode/Editor.meta b/Assets/_Project/Tests/LegacyEditMode/Editor.meta new file mode 100644 index 0000000..f00473a --- /dev/null +++ b/Assets/_Project/Tests/LegacyEditMode/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4fec86e239da4b16aa6c1470d208dfbb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/LegacyEditMode/Editor/CombatStabilityLegacyTests.cs b/Assets/_Project/Tests/LegacyEditMode/Editor/CombatStabilityLegacyTests.cs new file mode 100644 index 0000000..7281e56 --- /dev/null +++ b/Assets/_Project/Tests/LegacyEditMode/Editor/CombatStabilityLegacyTests.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using NUnit.Framework; +using UnityEngine; + +namespace HomeProtector.Tests.LegacyEditMode +{ + public sealed class CombatStabilityLegacyTests + { + private readonly List createdObjects = new(); + + [TearDown] + public void TearDown() + { + for (int i = createdObjects.Count - 1; i >= 0; i--) + { + if (createdObjects[i] != null) + { + UnityEngine.Object.DestroyImmediate(createdObjects[i]); + } + } + + createdObjects.Clear(); + } + + [Test] + public void EnemySpawnerPrunesDestroyedEnemiesFromLiveCount() + { + EnemySpawner spawner = CreateGameObject("EnemySpawner").AddComponent(); + Enemy enemy = CreateGameObject("Enemy").AddComponent(); + List enemies = new() { enemy }; + + SetPrivateField(spawner, "enemyList", enemies); + SetPrivateField(spawner, "currentEnemyCount", 1); + + UnityEngine.Object.DestroyImmediate(enemy.gameObject); + + Assert.That(spawner.EnemyList, Is.Empty); + Assert.That(spawner.CurrentEnemyCount, Is.EqualTo(0)); + } + + [Test] + public void WaveSystemSubscribesToEnemyDestroyedOnlyOnce() + { + EnemySpawner spawner = CreateGameObject("EnemySpawner").AddComponent(); + WaveSystem waveSystem = CreateGameObject("WaveSystem").AddComponent(); + + SetPrivateField(waveSystem, "enemySpawner", spawner); + + InvokePrivateMethod(waveSystem, "SubscribeEnemySpawnerEvents"); + InvokePrivateMethod(waveSystem, "SubscribeEnemySpawnerEvents"); + + Assert.That(GetEventHandlerCount(spawner, "OnEnemyDestroyed"), Is.EqualTo(1)); + + InvokePrivateMethod(waveSystem, "UnsubscribeEnemySpawnerEvents"); + + Assert.That(GetEventHandlerCount(spawner, "OnEnemyDestroyed"), Is.EqualTo(0)); + } + + private GameObject CreateGameObject(string name) + { + GameObject gameObject = new(name); + createdObjects.Add(gameObject); + return gameObject; + } + + private static void SetPrivateField(object target, string fieldName, object value) + { + FieldInfo field = target.GetType().GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(field, Is.Not.Null, $"Missing private field: {fieldName}"); + field.SetValue(target, value); + } + + private static void InvokePrivateMethod(object target, string methodName) + { + MethodInfo method = target.GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(method, Is.Not.Null, $"Missing private method: {methodName}"); + method.Invoke(target, null); + } + + private static int GetEventHandlerCount(object target, string eventFieldName) + { + FieldInfo eventField = target.GetType().GetField(eventFieldName, BindingFlags.Instance | BindingFlags.NonPublic); + Assert.That(eventField, Is.Not.Null, $"Missing event backing field: {eventFieldName}"); + + MulticastDelegate handlers = eventField.GetValue(target) as MulticastDelegate; + return handlers?.GetInvocationList().Length ?? 0; + } + } +} diff --git a/Assets/_Project/Tests/LegacyEditMode/Editor/CombatStabilityLegacyTests.cs.meta b/Assets/_Project/Tests/LegacyEditMode/Editor/CombatStabilityLegacyTests.cs.meta new file mode 100644 index 0000000..f3729fd --- /dev/null +++ b/Assets/_Project/Tests/LegacyEditMode/Editor/CombatStabilityLegacyTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 173f0a5c8b2e4af9bb2bb1f5eea3c7f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/LegacyEditMode/Editor/ProjectAssetValidationTests.cs b/Assets/_Project/Tests/LegacyEditMode/Editor/ProjectAssetValidationTests.cs new file mode 100644 index 0000000..feb8003 --- /dev/null +++ b/Assets/_Project/Tests/LegacyEditMode/Editor/ProjectAssetValidationTests.cs @@ -0,0 +1,139 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using UnityEditor; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.SceneManagement; + +namespace HomeProtector.Tests.LegacyEditMode +{ + public sealed class ProjectAssetValidationTests + { + private const string LoadingScenePath = "Assets/Scenes/StartGame_Loading.unity"; + private const string PlayableScenePath = "Assets/Scenes/isometric scene.unity"; + private const string PlayableSceneName = "isometric scene"; + + private static readonly string[] PrefabSearchRoots = + { + "Assets/_Project", + "Assets/Prefabs" + }; + + [Test] + public void EnabledBuildSettingsScenesHaveNoMissingScripts() + { + List issues = new(); + string originalScenePath = SceneManager.GetActiveScene().path; + + try + { + foreach (EditorBuildSettingsScene buildScene in EditorBuildSettings.scenes.Where(scene => scene.enabled)) + { + Scene scene = EditorSceneManager.OpenScene(buildScene.path, OpenSceneMode.Single); + foreach (GameObject root in scene.GetRootGameObjects()) + { + CollectMissingScripts(root, buildScene.path, issues); + } + } + } + finally + { + if (!string.IsNullOrEmpty(originalScenePath)) + { + EditorSceneManager.OpenScene(originalScenePath, OpenSceneMode.Single); + } + } + + Assert.That(issues, Is.Empty, string.Join(Environment.NewLine, issues)); + } + + [Test] + public void LoadingSceneStartGameTargetsPlayableScene() + { + string originalScenePath = SceneManager.GetActiveScene().path; + + try + { + EditorSceneManager.OpenScene(LoadingScenePath, OpenSceneMode.Single); + + StartGame startGame = UnityEngine.Object.FindObjectOfType(); + Assert.That(startGame, Is.Not.Null, "StartGame_Loading scene must contain StartGame."); + Assert.That(startGame.TargetSceneName, Is.EqualTo(PlayableSceneName)); + + SerializedObject serializedStartGame = new(startGame); + SerializedProperty fadeManager = serializedStartGame.FindProperty("fadeManager"); + Assert.That(fadeManager, Is.Not.Null, "StartGame must serialize fadeManager."); + Assert.That(fadeManager.objectReferenceValue, Is.Not.Null, "StartGame.fadeManager must be assigned."); + + string[] enabledScenePaths = EditorBuildSettings.scenes + .Where(scene => scene.enabled) + .Select(scene => scene.path) + .ToArray(); + Assert.That(enabledScenePaths, Does.Contain(LoadingScenePath)); + Assert.That(enabledScenePaths, Does.Contain(PlayableScenePath)); + } + finally + { + if (!string.IsNullOrEmpty(originalScenePath)) + { + EditorSceneManager.OpenScene(originalScenePath, OpenSceneMode.Single); + } + } + } + + [Test] + public void MaintainedPrefabsHaveNoMissingScripts() + { + List issues = new(); + string[] prefabPaths = AssetDatabase.FindAssets("t:Prefab", PrefabSearchRoots) + .Select(AssetDatabase.GUIDToAssetPath) + .Distinct() + .OrderBy(path => path) + .ToArray(); + + foreach (string prefabPath in prefabPaths) + { + GameObject prefabRoot = PrefabUtility.LoadPrefabContents(prefabPath); + try + { + CollectMissingScripts(prefabRoot, prefabPath, issues); + } + finally + { + PrefabUtility.UnloadPrefabContents(prefabRoot); + } + } + + Assert.That(issues, Is.Empty, string.Join(Environment.NewLine, issues)); + } + + private static void CollectMissingScripts(GameObject root, string assetPath, List issues) + { + int missingCount = GameObjectUtility.GetMonoBehavioursWithMissingScriptCount(root); + if (missingCount > 0) + { + issues.Add($"{assetPath}: {GetHierarchyPath(root)} has {missingCount} missing script(s)"); + } + + foreach (Transform child in root.transform) + { + CollectMissingScripts(child.gameObject, assetPath, issues); + } + } + + private static string GetHierarchyPath(GameObject gameObject) + { + Stack names = new(); + Transform current = gameObject.transform; + while (current != null) + { + names.Push(current.name); + current = current.parent; + } + + return string.Join("/", names); + } + } +} diff --git a/Assets/_Project/Tests/LegacyEditMode/Editor/ProjectAssetValidationTests.cs.meta b/Assets/_Project/Tests/LegacyEditMode/Editor/ProjectAssetValidationTests.cs.meta new file mode 100644 index 0000000..329d77c --- /dev/null +++ b/Assets/_Project/Tests/LegacyEditMode/Editor/ProjectAssetValidationTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a5938e3180d4ba8a5bcd541086391b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/PlayMode.meta b/Assets/_Project/Tests/PlayMode.meta new file mode 100644 index 0000000..9767c63 --- /dev/null +++ b/Assets/_Project/Tests/PlayMode.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c04fa32be866461989c4d4b7de2b31c4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/PlayMode/HomeProtector.Tests.PlayMode.asmdef b/Assets/_Project/Tests/PlayMode/HomeProtector.Tests.PlayMode.asmdef new file mode 100644 index 0000000..5eaa057 --- /dev/null +++ b/Assets/_Project/Tests/PlayMode/HomeProtector.Tests.PlayMode.asmdef @@ -0,0 +1,19 @@ +{ + "name": "HomeProtector.Tests.PlayMode", + "rootNamespace": "HomeProtector.Tests.PlayMode", + "references": [ + "HomeProtector.Core" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "noEngineReferences": false +} diff --git a/Assets/_Project/Tests/PlayMode/HomeProtector.Tests.PlayMode.asmdef.meta b/Assets/_Project/Tests/PlayMode/HomeProtector.Tests.PlayMode.asmdef.meta new file mode 100644 index 0000000..c05b85f --- /dev/null +++ b/Assets/_Project/Tests/PlayMode/HomeProtector.Tests.PlayMode.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 96a9e2138e934db2a7588da1276b44cb +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/PlayMode/LegacyCombatPlayModeTests.cs b/Assets/_Project/Tests/PlayMode/LegacyCombatPlayModeTests.cs new file mode 100644 index 0000000..e7f8d05 --- /dev/null +++ b/Assets/_Project/Tests/PlayMode/LegacyCombatPlayModeTests.cs @@ -0,0 +1,126 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.AI; +using UnityEngine.TestTools; + +namespace HomeProtector.Tests.PlayMode +{ + public sealed class LegacyCombatPlayModeTests + { + private readonly List createdObjects = new(); + + [TearDown] + public void TearDown() + { + for (int i = createdObjects.Count - 1; i >= 0; i--) + { + if (createdObjects[i] != null) + { + UnityEngine.Object.DestroyImmediate(createdObjects[i]); + } + } + + createdObjects.Clear(); + } + + [UnityTest] + public IEnumerator EnemySpawnerSpawnsEnemyAndTracksLiveCount() + { + Type targetManagerType = FindRequiredType("TargetManager"); + Type enemySpawnerType = FindRequiredType("EnemySpawner"); + Type enemyType = FindRequiredType("Enemy"); + Type enemyGroupType = FindRequiredType("EnemyGroup"); + Type waveType = FindRequiredType("Wave"); + + Component targetManager = CreateGameObject("TargetManager").AddComponent(targetManagerType); + GameObject target = CreateGameObject("Registered Goods Target"); + InvokePublicMethod(targetManager, "RegisterTarget", "Goods", target.transform); + + Component spawner = CreateGameObject("EnemySpawner").AddComponent(enemySpawnerType); + GameObject enemyPrefab = CreateGameObject("Runtime Enemy Prefab"); + enemyPrefab.AddComponent(); + enemyPrefab.AddComponent(); + enemyPrefab.AddComponent(enemyType); + + object enemyGroup = Activator.CreateInstance(enemyGroupType); + SetPublicField(enemyGroup, "enemyPrefab", enemyPrefab); + SetPublicField(enemyGroup, "count", 1); + SetPublicField(enemyGroup, "spawnTime", 0f); + SetPublicField(enemyGroup, "spawnPoint", null); + + Array enemyGroups = Array.CreateInstance(enemyGroupType, 1); + enemyGroups.SetValue(enemyGroup, 0); + + object wave = Activator.CreateInstance(waveType); + SetPublicField(wave, "waveName", "Runtime Smoke Wave"); + SetPublicField(wave, "enemyGroups", enemyGroups); + SetPublicField(wave, "delayBeforeNextWave", 0f); + SetPublicField(wave, "baseDuration", 1f); + + InvokePublicMethod(spawner, "StartWave", wave); + yield return null; + + Assert.That(GetIntProperty(spawner, "CurrentEnemyCount"), Is.EqualTo(1)); + + IList enemyList = (IList)GetProperty(spawner, "EnemyList"); + Assert.That(enemyList.Count, Is.EqualTo(1)); + + Component spawnedEnemy = enemyList[0] as Component; + Assert.That(spawnedEnemy, Is.Not.Null); + + UnityEngine.Object.Destroy(spawnedEnemy.gameObject); + yield return null; + + Assert.That(GetIntProperty(spawner, "CurrentEnemyCount"), Is.EqualTo(0)); + } + + private GameObject CreateGameObject(string name) + { + GameObject gameObject = new(name); + createdObjects.Add(gameObject); + return gameObject; + } + + private static Type FindRequiredType(string typeName) + { + Type type = AppDomain.CurrentDomain + .GetAssemblies() + .Select(assembly => assembly.GetType(typeName)) + .FirstOrDefault(candidate => candidate != null); + + Assert.That(type, Is.Not.Null, $"Could not find type {typeName}"); + return type; + } + + private static void SetPublicField(object target, string fieldName, object value) + { + FieldInfo field = target.GetType().GetField(fieldName, BindingFlags.Instance | BindingFlags.Public); + Assert.That(field, Is.Not.Null, $"Missing public field: {fieldName}"); + field.SetValue(target, value); + } + + private static object GetProperty(object target, string propertyName) + { + PropertyInfo property = target.GetType().GetProperty(propertyName, BindingFlags.Instance | BindingFlags.Public); + Assert.That(property, Is.Not.Null, $"Missing public property: {propertyName}"); + return property.GetValue(target); + } + + private static int GetIntProperty(object target, string propertyName) + { + return (int)GetProperty(target, propertyName); + } + + private static object InvokePublicMethod(object target, string methodName, params object[] args) + { + MethodInfo method = target.GetType().GetMethod(methodName, BindingFlags.Instance | BindingFlags.Public); + Assert.That(method, Is.Not.Null, $"Missing public method: {methodName}"); + return method.Invoke(target, args); + } + } +} diff --git a/Assets/_Project/Tests/PlayMode/LegacyCombatPlayModeTests.cs.meta b/Assets/_Project/Tests/PlayMode/LegacyCombatPlayModeTests.cs.meta new file mode 100644 index 0000000..14e22a5 --- /dev/null +++ b/Assets/_Project/Tests/PlayMode/LegacyCombatPlayModeTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a97d064af00d40b5972ee9ca89f5eeb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/_Project/Tests/PlayMode/SceneSmokeTests.cs b/Assets/_Project/Tests/PlayMode/SceneSmokeTests.cs new file mode 100644 index 0000000..7c1b436 --- /dev/null +++ b/Assets/_Project/Tests/PlayMode/SceneSmokeTests.cs @@ -0,0 +1,79 @@ +using System.Collections; +using System.Linq; +using System.Reflection; +using NUnit.Framework; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestTools; + +namespace HomeProtector.Tests.PlayMode +{ + public sealed class SceneSmokeTests + { + [UnityTest] + public IEnumerator StartGameLoadingSceneTransitionsToPlayableScene() + { + yield return LoadScene("StartGame_Loading"); + + MonoBehaviour startGame = Object.FindObjectsOfType() + .FirstOrDefault(component => component.GetType().Name == "StartGame"); + Assert.That(startGame, Is.Not.Null); + + MethodInfo startMethod = startGame.GetType().GetMethod( + "StartGameFlow", + BindingFlags.Instance | BindingFlags.Public); + Assert.That(startMethod, Is.Not.Null); + + startMethod.Invoke(startGame, null); + + float timeoutAt = Time.realtimeSinceStartup + 5f; + while (SceneManager.GetActiveScene().name != "isometric scene" && Time.realtimeSinceStartup < timeoutAt) + { + yield return null; + } + + Assert.That(SceneManager.GetActiveScene().name, Is.EqualTo("isometric scene")); + } + + [UnityTest] + public IEnumerator PlayableSceneLoadsCombatEngine() + { + yield return LoadScene("isometric scene"); + + Scene activeScene = SceneManager.GetActiveScene(); + Assert.That(activeScene.name, Is.EqualTo("isometric scene")); + + string[] requiredComponentNames = + { + "WaveSystem", + "EnemySpawner", + "TowerSpawner", + "TargetManager", + "ResourceManager", + }; + MonoBehaviour[] runtimeComponents = Object.FindObjectsOfType(true); + + foreach (string componentName in requiredComponentNames) + { + Assert.That( + runtimeComponents.Any(component => component.GetType().Name == componentName), + Is.True, + $"Playable scene is missing required combat component {componentName}."); + } + } + + private static IEnumerator LoadScene(string sceneName) + { + AsyncOperation loadOperation = SceneManager.LoadSceneAsync(sceneName, LoadSceneMode.Single); + Assert.That(loadOperation, Is.Not.Null); + + while (!loadOperation.isDone) + { + yield return null; + } + + yield return null; + } + + } +} diff --git a/Assets/_Project/Tests/PlayMode/SceneSmokeTests.cs.meta b/Assets/_Project/Tests/PlayMode/SceneSmokeTests.cs.meta new file mode 100644 index 0000000..c4e8345 --- /dev/null +++ b/Assets/_Project/Tests/PlayMode/SceneSmokeTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a4fdf9e1851445a8ad99346b49b84a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Docs/Development/asset-import-manifest.json b/Docs/Development/asset-import-manifest.json new file mode 100644 index 0000000..0f49bad --- /dev/null +++ b/Docs/Development/asset-import-manifest.json @@ -0,0 +1,5082 @@ +{ + "schemaVersion": 1, + "sourceRoot": "D:/GameAsset/GameAssets/HomeProtector/UnityReadySprites", + "destinationRoot": "Assets/_Project/Art/Runtime", + "policy": { + "candidates": "Promoted *_Sheet_BNN.png plus explicit canonical single-sprite allowlist.", + "excludedPatterns": [ + "Frames", + "fullres", + "native", + "QualityRefresh", + "historical comparison revisions" + ], + "retainedExistingProjectContent": [ + "CommonSoldier", + "Monkey" + ], + "intentionalRoleSplit": [ + "Bear B20", + "BearHeavy B31" + ] + }, + "summary": { + "sheetCandidates": 103, + "sheetsIncluded": 101, + "sheetsExcluded": 2, + "singleSpritesIncluded": 22, + "totalIncluded": 123, + "includedBytes": 4983984 + }, + "entries": [ + { + "id": "currency-b18-t-hp-currency-foundation-sheet-b18", + "assetType": "spriteSheet", + "contentKind": "Currency", + "runtimeRole": "T_HP_Currency_Foundation_Sheet_B18", + "sourceRelativePath": "Currency/B18/T_HP_Currency_Foundation_Sheet_B18.png", + "destinationPath": "Assets/_Project/Art/Runtime/Currency/B18/T_HP_Currency_Foundation_Sheet_B18.png", + "batch": "B18", + "sha256": "c9dc9a0a75049874784320cb3abcd0cb3d4634f457507225dc473944e933d8fe", + "bytes": 5068, + "image": { + "width": 256, + "height": 64 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 64, + "height": 64 + }, + "columns": 4, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-antswarm-b42-attack-t-hp-enemy-antswarm-attack-isodiagonal-sheet-b42", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_AntSwarm_Attack_IsoDiagonal_Sheet_B42", + "sourceRelativePath": "Enemies/AntSwarm/B42/Attack/T_HP_Enemy_AntSwarm_Attack_IsoDiagonal_Sheet_B42.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/AntSwarm/B42/Attack/T_HP_Enemy_AntSwarm_Attack_IsoDiagonal_Sheet_B42.png", + "batch": "B42", + "sha256": "9122367a54130b77d3d70431bc4766d3fec60db4e0d5fcba43e6af0e8615dda2", + "bytes": 25892, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-antswarm-b42-damage-t-hp-enemy-antswarm-damage-isodiagonal-sheet-b42", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_AntSwarm_Damage_IsoDiagonal_Sheet_B42", + "sourceRelativePath": "Enemies/AntSwarm/B42/Damage/T_HP_Enemy_AntSwarm_Damage_IsoDiagonal_Sheet_B42.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/AntSwarm/B42/Damage/T_HP_Enemy_AntSwarm_Damage_IsoDiagonal_Sheet_B42.png", + "batch": "B42", + "sha256": "230dac95fc0e46684435afc1c832cdf9390a0bb313246f8bddd505bf4a0fdf66", + "bytes": 21979, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-antswarm-b42-move-t-hp-enemy-antswarm-move-isodiagonal-sheet-b42", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_AntSwarm_Move_IsoDiagonal_Sheet_B42", + "sourceRelativePath": "Enemies/AntSwarm/B42/Move/T_HP_Enemy_AntSwarm_Move_IsoDiagonal_Sheet_B42.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/AntSwarm/B42/Move/T_HP_Enemy_AntSwarm_Move_IsoDiagonal_Sheet_B42.png", + "batch": "B42", + "sha256": "529da6b3c7e0b35e2726e57afb63ef69b9b9f95147bb4547525c191c2c6251f3", + "bytes": 60211, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-bear-b20-attack-t-hp-enemy-bear-attack-isodiagonal-sheet-b20", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Bear_Attack_IsoDiagonal_Sheet_B20", + "sourceRelativePath": "Enemies/Bear/B20/Attack/T_HP_Enemy_Bear_Attack_IsoDiagonal_Sheet_B20.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Bear/B20/Attack/T_HP_Enemy_Bear_Attack_IsoDiagonal_Sheet_B20.png", + "batch": "B20", + "sha256": "53f5780121d07225bc67b0d40fe698b488e06509aa1aa3c2f8cf73e6c3e2d998", + "bytes": 89492, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Canonical normal Bear role; intentionally distinct from BearHeavy B31." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-bear-b20-damage-t-hp-enemy-bear-damage-isodiagonal-sheet-b20", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Bear_Damage_IsoDiagonal_Sheet_B20", + "sourceRelativePath": "Enemies/Bear/B20/Damage/T_HP_Enemy_Bear_Damage_IsoDiagonal_Sheet_B20.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Bear/B20/Damage/T_HP_Enemy_Bear_Damage_IsoDiagonal_Sheet_B20.png", + "batch": "B20", + "sha256": "72fe7c14c26404c5e423f343f579edadf105ef2c154845f733606325f58792b5", + "bytes": 66205, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Canonical normal Bear role; intentionally distinct from BearHeavy B31." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-bear-b20-move-t-hp-enemy-bear-move-isodiagonal-sheet-b20", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Bear_Move_IsoDiagonal_Sheet_B20", + "sourceRelativePath": "Enemies/Bear/B20/Move/T_HP_Enemy_Bear_Move_IsoDiagonal_Sheet_B20.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Bear/B20/Move/T_HP_Enemy_Bear_Move_IsoDiagonal_Sheet_B20.png", + "batch": "B20", + "sha256": "bb912e2920885b803e5a5057364ef322d90e8a51fa08f32cb36cbd756e2539b7", + "bytes": 90430, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Canonical normal Bear role; intentionally distinct from BearHeavy B31." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-bearheavy-b31-attack-t-hp-enemy-bearheavy-attack-isodiagonal-sheet-b31", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_BearHeavy_Attack_IsoDiagonal_Sheet_B31", + "sourceRelativePath": "Enemies/BearHeavy/B31/Attack/T_HP_Enemy_BearHeavy_Attack_IsoDiagonal_Sheet_B31.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/BearHeavy/B31/Attack/T_HP_Enemy_BearHeavy_Attack_IsoDiagonal_Sheet_B31.png", + "batch": "B31", + "sha256": "c2196c95845ffffee177fb4504c6ec88404d482a590c3485f418f6898e06140a", + "bytes": 53451, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Canonical elite BearHeavy role; intentionally distinct from Bear B20." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-bearheavy-b31-damage-t-hp-enemy-bearheavy-damage-isodiagonal-sheet-b31", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_BearHeavy_Damage_IsoDiagonal_Sheet_B31", + "sourceRelativePath": "Enemies/BearHeavy/B31/Damage/T_HP_Enemy_BearHeavy_Damage_IsoDiagonal_Sheet_B31.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/BearHeavy/B31/Damage/T_HP_Enemy_BearHeavy_Damage_IsoDiagonal_Sheet_B31.png", + "batch": "B31", + "sha256": "1bdec09b278fe971fe85f294cda5f8d54c76c32fcaa0c1bcde8d9525d4113d2a", + "bytes": 33616, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Canonical elite BearHeavy role; intentionally distinct from Bear B20." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-bearheavy-b31-move-t-hp-enemy-bearheavy-move-isodiagonal-sheet-b31", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_BearHeavy_Move_IsoDiagonal_Sheet_B31", + "sourceRelativePath": "Enemies/BearHeavy/B31/Move/T_HP_Enemy_BearHeavy_Move_IsoDiagonal_Sheet_B31.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/BearHeavy/B31/Move/T_HP_Enemy_BearHeavy_Move_IsoDiagonal_Sheet_B31.png", + "batch": "B31", + "sha256": "1f52371215a39e0fa793bd6ee2ca3ec632e818685ce54db360459371c97c760b", + "bytes": 50334, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Canonical elite BearHeavy role; intentionally distinct from Bear B20." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-cockroach-b17-attack-t-hp-enemy-cockroach-attack-isodiagonal-sheet-b17", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Cockroach_Attack_IsoDiagonal_Sheet_B17", + "sourceRelativePath": "Enemies/Cockroach/B17/Attack/T_HP_Enemy_Cockroach_Attack_IsoDiagonal_Sheet_B17.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Cockroach/B17/Attack/T_HP_Enemy_Cockroach_Attack_IsoDiagonal_Sheet_B17.png", + "batch": "B17", + "sha256": "8316a3afe10b8324c315494ef462a7d146205b9385d85aaba6588014750f2a41", + "bytes": 59933, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-cockroach-b17-damage-t-hp-enemy-cockroach-damage-isodiagonal-sheet-b17", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Cockroach_Damage_IsoDiagonal_Sheet_B17", + "sourceRelativePath": "Enemies/Cockroach/B17/Damage/T_HP_Enemy_Cockroach_Damage_IsoDiagonal_Sheet_B17.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Cockroach/B17/Damage/T_HP_Enemy_Cockroach_Damage_IsoDiagonal_Sheet_B17.png", + "batch": "B17", + "sha256": "24d9a1070ff164c0052f93f75b4f1ce8aca7c927caef37bb24924a5888a0f2cb", + "bytes": 38848, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-cockroach-b17-move-t-hp-enemy-cockroach-move-isodiagonal-sheet-b17", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Cockroach_Move_IsoDiagonal_Sheet_B17", + "sourceRelativePath": "Enemies/Cockroach/B17/Move/T_HP_Enemy_Cockroach_Move_IsoDiagonal_Sheet_B17.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Cockroach/B17/Move/T_HP_Enemy_Cockroach_Move_IsoDiagonal_Sheet_B17.png", + "batch": "B17", + "sha256": "4a55008e4a26366c6ae09ea9508f5f9287aaca1738826d61dd4bb26585ad7c60", + "bytes": 56171, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-fox-b40-attack-t-hp-enemy-fox-attack-isodiagonal-sheet-b40", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Fox_Attack_IsoDiagonal_Sheet_B40", + "sourceRelativePath": "Enemies/Fox/B40/Attack/T_HP_Enemy_Fox_Attack_IsoDiagonal_Sheet_B40.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Fox/B40/Attack/T_HP_Enemy_Fox_Attack_IsoDiagonal_Sheet_B40.png", + "batch": "B40", + "sha256": "55a54ef105e1146f7cf6a804dade697d111ae1b294b678a2774bcd02e466ce62", + "bytes": 36132, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-fox-b40-damage-t-hp-enemy-fox-damage-isodiagonal-sheet-b40", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Fox_Damage_IsoDiagonal_Sheet_B40", + "sourceRelativePath": "Enemies/Fox/B40/Damage/T_HP_Enemy_Fox_Damage_IsoDiagonal_Sheet_B40.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Fox/B40/Damage/T_HP_Enemy_Fox_Damage_IsoDiagonal_Sheet_B40.png", + "batch": "B40", + "sha256": "b16739f9dd31aa9c5adee0c25ebf6c0694c099524f8c07054fb68e8961aa66bc", + "bytes": 36104, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-fox-b40-move-t-hp-enemy-fox-move-isodiagonal-sheet-b40", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Fox_Move_IsoDiagonal_Sheet_B40", + "sourceRelativePath": "Enemies/Fox/B40/Move/T_HP_Enemy_Fox_Move_IsoDiagonal_Sheet_B40.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Fox/B40/Move/T_HP_Enemy_Fox_Move_IsoDiagonal_Sheet_B40.png", + "batch": "B40", + "sha256": "d8da06d905e6b3480bdaa7c866c1b304cea7fb3cd121e7699bb8a3f043fa9ac5", + "bytes": 42548, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-mothpest-b43-attack-t-hp-enemy-mothpest-attack-isodiagonal-sheet-b43", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_MothPest_Attack_IsoDiagonal_Sheet_B43", + "sourceRelativePath": "Enemies/MothPest/B43/Attack/T_HP_Enemy_MothPest_Attack_IsoDiagonal_Sheet_B43.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/MothPest/B43/Attack/T_HP_Enemy_MothPest_Attack_IsoDiagonal_Sheet_B43.png", + "batch": "B43", + "sha256": "979839a551d28ab4d35f90e51572b750f776e8b4fdf464f4d59c59369beea2fe", + "bytes": 29249, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-mothpest-b43-damage-t-hp-enemy-mothpest-damage-isodiagonal-sheet-b43", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_MothPest_Damage_IsoDiagonal_Sheet_B43", + "sourceRelativePath": "Enemies/MothPest/B43/Damage/T_HP_Enemy_MothPest_Damage_IsoDiagonal_Sheet_B43.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/MothPest/B43/Damage/T_HP_Enemy_MothPest_Damage_IsoDiagonal_Sheet_B43.png", + "batch": "B43", + "sha256": "c38ba2f669ad5b8e0bff676713b1accd86294668042a2f7d802992ed4370bffa", + "bytes": 35254, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-mothpest-b43-move-t-hp-enemy-mothpest-move-isodiagonal-sheet-b43", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_MothPest_Move_IsoDiagonal_Sheet_B43", + "sourceRelativePath": "Enemies/MothPest/B43/Move/T_HP_Enemy_MothPest_Move_IsoDiagonal_Sheet_B43.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/MothPest/B43/Move/T_HP_Enemy_MothPest_Move_IsoDiagonal_Sheet_B43.png", + "batch": "B43", + "sha256": "217a3ea14daf5cb2f2d4e72576c2fb6304a68ba1485f74cb6fa081ee0001c094", + "bytes": 58000, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-mouse-b38-attack-t-hp-enemy-mouse-attack-isodiagonal-sheet-b38", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Mouse_Attack_IsoDiagonal_Sheet_B38", + "sourceRelativePath": "Enemies/Mouse/B38/Attack/T_HP_Enemy_Mouse_Attack_IsoDiagonal_Sheet_B38.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Mouse/B38/Attack/T_HP_Enemy_Mouse_Attack_IsoDiagonal_Sheet_B38.png", + "batch": "B38", + "sha256": "6cb51312a62efff744c72f1708507deb8d36aae824616838f1657af8d8e6ba18", + "bytes": 27065, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-mouse-b38-damage-t-hp-enemy-mouse-damage-isodiagonal-sheet-b38", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Mouse_Damage_IsoDiagonal_Sheet_B38", + "sourceRelativePath": "Enemies/Mouse/B38/Damage/T_HP_Enemy_Mouse_Damage_IsoDiagonal_Sheet_B38.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Mouse/B38/Damage/T_HP_Enemy_Mouse_Damage_IsoDiagonal_Sheet_B38.png", + "batch": "B38", + "sha256": "848c94a0653592a8d8b81b4b53ec2e3565dc8f46fb2fd8c7267abad6337ebd8e", + "bytes": 26741, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-mouse-b38-move-t-hp-enemy-mouse-move-isodiagonal-sheet-b38", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Mouse_Move_IsoDiagonal_Sheet_B38", + "sourceRelativePath": "Enemies/Mouse/B38/Move/T_HP_Enemy_Mouse_Move_IsoDiagonal_Sheet_B38.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Mouse/B38/Move/T_HP_Enemy_Mouse_Move_IsoDiagonal_Sheet_B38.png", + "batch": "B38", + "sha256": "24efdfb3693938a33aa9d926f92a0003477ede987bb12f2e0e1f5788787ec401", + "bytes": 32154, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-snake-b26-attack-t-hp-enemy-snake-attack-isodiagonal-sheet-b26", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Snake_Attack_IsoDiagonal_Sheet_B26", + "sourceRelativePath": "Enemies/Snake/B26/Attack/T_HP_Enemy_Snake_Attack_IsoDiagonal_Sheet_B26.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Snake/B26/Attack/T_HP_Enemy_Snake_Attack_IsoDiagonal_Sheet_B26.png", + "batch": "B26", + "sha256": "9235101eb2700f23efef2401d2bac5aeaa8523d29530cf109b165cefb7ade99f", + "bytes": 45391, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-snake-b26-damage-t-hp-enemy-snake-damage-isodiagonal-sheet-b26", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Snake_Damage_IsoDiagonal_Sheet_B26", + "sourceRelativePath": "Enemies/Snake/B26/Damage/T_HP_Enemy_Snake_Damage_IsoDiagonal_Sheet_B26.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Snake/B26/Damage/T_HP_Enemy_Snake_Damage_IsoDiagonal_Sheet_B26.png", + "batch": "B26", + "sha256": "ad52dc3a08629ceb811c02cd9a832c158e29c8d51bc2bd3c0312e1c55891364c", + "bytes": 23092, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-snake-b26-move-t-hp-enemy-snake-move-isodiagonal-sheet-b26", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Snake_Move_IsoDiagonal_Sheet_B26", + "sourceRelativePath": "Enemies/Snake/B26/Move/T_HP_Enemy_Snake_Move_IsoDiagonal_Sheet_B26.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Snake/B26/Move/T_HP_Enemy_Snake_Move_IsoDiagonal_Sheet_B26.png", + "batch": "B26", + "sha256": "ef3b94e8d5e2e05fc0e16364aeca258e5e8bf9832b1afda354a20294ad1e171c", + "bytes": 43162, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-spider-b27-attack-t-hp-enemy-spider-attack-isodiagonal-sheet-b27", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Spider_Attack_IsoDiagonal_Sheet_B27", + "sourceRelativePath": "Enemies/Spider/B27/Attack/T_HP_Enemy_Spider_Attack_IsoDiagonal_Sheet_B27.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Spider/B27/Attack/T_HP_Enemy_Spider_Attack_IsoDiagonal_Sheet_B27.png", + "batch": "B27", + "sha256": "e81d04cc5976c3f40b93fcc0861976b3082df229039a19d1236850599fb83de8", + "bytes": 83150, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-spider-b27-damage-t-hp-enemy-spider-damage-isodiagonal-sheet-b27", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Spider_Damage_IsoDiagonal_Sheet_B27", + "sourceRelativePath": "Enemies/Spider/B27/Damage/T_HP_Enemy_Spider_Damage_IsoDiagonal_Sheet_B27.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Spider/B27/Damage/T_HP_Enemy_Spider_Damage_IsoDiagonal_Sheet_B27.png", + "batch": "B27", + "sha256": "85de774f77bb2e2ae031fb603e953dabdbb19e9539bf2c986c92196f6fc0a74c", + "bytes": 45075, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-spider-b27-move-t-hp-enemy-spider-move-isodiagonal-sheet-b27", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Spider_Move_IsoDiagonal_Sheet_B27", + "sourceRelativePath": "Enemies/Spider/B27/Move/T_HP_Enemy_Spider_Move_IsoDiagonal_Sheet_B27.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Spider/B27/Move/T_HP_Enemy_Spider_Move_IsoDiagonal_Sheet_B27.png", + "batch": "B27", + "sha256": "5820ca32b15867136fe44395aacf0847ba0107b96d4fcccedbe352cc71d3aeb1", + "bytes": 83122, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-squirrel-b41-attack-t-hp-enemy-squirrel-attack-isodiagonal-sheet-b41", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Squirrel_Attack_IsoDiagonal_Sheet_B41", + "sourceRelativePath": "Enemies/Squirrel/B41/Attack/T_HP_Enemy_Squirrel_Attack_IsoDiagonal_Sheet_B41.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Squirrel/B41/Attack/T_HP_Enemy_Squirrel_Attack_IsoDiagonal_Sheet_B41.png", + "batch": "B41", + "sha256": "15a93734db822be8833e3ea46836617d13d69a5c7cb7fa153215fabdaaaaf60f", + "bytes": 40112, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-squirrel-b41-damage-t-hp-enemy-squirrel-damage-isodiagonal-sheet-b41", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Squirrel_Damage_IsoDiagonal_Sheet_B41", + "sourceRelativePath": "Enemies/Squirrel/B41/Damage/T_HP_Enemy_Squirrel_Damage_IsoDiagonal_Sheet_B41.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Squirrel/B41/Damage/T_HP_Enemy_Squirrel_Damage_IsoDiagonal_Sheet_B41.png", + "batch": "B41", + "sha256": "e847560e9c5b99baf35e65cc93f5e12f1bff45e5085bee6367046786ef72936a", + "bytes": 25824, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-squirrel-b41-move-t-hp-enemy-squirrel-move-isodiagonal-sheet-b41", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Squirrel_Move_IsoDiagonal_Sheet_B41", + "sourceRelativePath": "Enemies/Squirrel/B41/Move/T_HP_Enemy_Squirrel_Move_IsoDiagonal_Sheet_B41.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Squirrel/B41/Move/T_HP_Enemy_Squirrel_Move_IsoDiagonal_Sheet_B41.png", + "batch": "B41", + "sha256": "412de66be3ec3d48b69a2f5be92e3017efb1a6959e30bd147b0856aee8cde69d", + "bytes": 36780, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-wasp-b39-attack-t-hp-enemy-wasp-attack-isodiagonal-sheet-b39", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Wasp_Attack_IsoDiagonal_Sheet_B39", + "sourceRelativePath": "Enemies/Wasp/B39/Attack/T_HP_Enemy_Wasp_Attack_IsoDiagonal_Sheet_B39.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Wasp/B39/Attack/T_HP_Enemy_Wasp_Attack_IsoDiagonal_Sheet_B39.png", + "batch": "B39", + "sha256": "6cbbdbc6bb058867801f19fbc022f7134cc6453b016755b4d16f1396328da55e", + "bytes": 47880, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-wasp-b39-damage-t-hp-enemy-wasp-damage-isodiagonal-sheet-b39", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Wasp_Damage_IsoDiagonal_Sheet_B39", + "sourceRelativePath": "Enemies/Wasp/B39/Damage/T_HP_Enemy_Wasp_Damage_IsoDiagonal_Sheet_B39.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Wasp/B39/Damage/T_HP_Enemy_Wasp_Damage_IsoDiagonal_Sheet_B39.png", + "batch": "B39", + "sha256": "7fe59eb1c613316df61caadbcb8c8fb9fbfc3a3f42cb863a8140fea69ed41ecf", + "bytes": 27626, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-wasp-b39-move-t-hp-enemy-wasp-move-isodiagonal-sheet-b39", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_Wasp_Move_IsoDiagonal_Sheet_B39", + "sourceRelativePath": "Enemies/Wasp/B39/Move/T_HP_Enemy_Wasp_Move_IsoDiagonal_Sheet_B39.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/Wasp/B39/Move/T_HP_Enemy_Wasp_Move_IsoDiagonal_Sheet_B39.png", + "batch": "B39", + "sha256": "1a2def9050da89492ebade1f2f461972fcade29656a536395b432a7da36c66b8", + "bytes": 28826, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-wildboar-b25-attack-t-hp-enemy-wildboar-attack-isodiagonal-sheet-b25", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_WildBoar_Attack_IsoDiagonal_Sheet_B25", + "sourceRelativePath": "Enemies/WildBoar/B25/Attack/T_HP_Enemy_WildBoar_Attack_IsoDiagonal_Sheet_B25.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/WildBoar/B25/Attack/T_HP_Enemy_WildBoar_Attack_IsoDiagonal_Sheet_B25.png", + "batch": "B25", + "sha256": "82c55a8335646cdcab37f58cac0c71c3fed15b09e995eec0eed779d8cb0f19cb", + "bytes": 93979, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-wildboar-b25-damage-t-hp-enemy-wildboar-damage-isodiagonal-sheet-b25", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_WildBoar_Damage_IsoDiagonal_Sheet_B25", + "sourceRelativePath": "Enemies/WildBoar/B25/Damage/T_HP_Enemy_WildBoar_Damage_IsoDiagonal_Sheet_B25.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/WildBoar/B25/Damage/T_HP_Enemy_WildBoar_Damage_IsoDiagonal_Sheet_B25.png", + "batch": "B25", + "sha256": "db782c938e472dcee15bf7b87091734d43a9f390b0f90587d65b079d439c1b46", + "bytes": 63006, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "enemies-wildboar-b25-move-t-hp-enemy-wildboar-move-isodiagonal-sheet-b25", + "assetType": "spriteSheet", + "contentKind": "Enemies", + "runtimeRole": "T_HP_Enemy_WildBoar_Move_IsoDiagonal_Sheet_B25", + "sourceRelativePath": "Enemies/WildBoar/B25/Move/T_HP_Enemy_WildBoar_Move_IsoDiagonal_Sheet_B25.png", + "destinationPath": "Assets/_Project/Art/Runtime/Enemies/WildBoar/B25/Move/T_HP_Enemy_WildBoar_Move_IsoDiagonal_Sheet_B25.png", + "batch": "B25", + "sha256": "e9001c01ec683c5ff954d7d0f162025c340246960ec9caed3878c95c0f051af0", + "bytes": 96428, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Move", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "overlays-seasonal-autumn-b45-groundoverlays-t-hp-overlay-season-autumn-groundoverlays-sheet-b45", + "assetType": "spriteSheet", + "contentKind": "Overlays", + "runtimeRole": "T_HP_Overlay_Season_Autumn_GroundOverlays_Sheet_B45", + "sourceRelativePath": "Overlays/Seasonal/Autumn/B45/GroundOverlays/T_HP_Overlay_Season_Autumn_GroundOverlays_Sheet_B45.png", + "destinationPath": "Assets/_Project/Art/Runtime/Overlays/Seasonal/Autumn/B45/GroundOverlays/T_HP_Overlay_Season_Autumn_GroundOverlays_Sheet_B45.png", + "batch": "B45", + "sha256": "fbef19d032b8f9e49c08be3d328f5eb17a2a92d20d69f538831edd17afe5af7c", + "bytes": 32100, + "image": { + "width": 512, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "overlays-seasonal-autumn-b45-houseoverlays-t-hp-overlay-season-autumn-houseoverlays-sheet-b45", + "assetType": "spriteSheet", + "contentKind": "Overlays", + "runtimeRole": "T_HP_Overlay_Season_Autumn_HouseOverlays_Sheet_B45", + "sourceRelativePath": "Overlays/Seasonal/Autumn/B45/HouseOverlays/T_HP_Overlay_Season_Autumn_HouseOverlays_Sheet_B45.png", + "destinationPath": "Assets/_Project/Art/Runtime/Overlays/Seasonal/Autumn/B45/HouseOverlays/T_HP_Overlay_Season_Autumn_HouseOverlays_Sheet_B45.png", + "batch": "B45", + "sha256": "fae1d2bde6cf5fccbf08ccffca95bb99e9469013a849657a33c894c8d6fbed91", + "bytes": 27218, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "overlays-seasonal-spring-b44-groundoverlays-t-hp-overlay-season-spring-groundoverlays-sheet-b44", + "assetType": "spriteSheet", + "contentKind": "Overlays", + "runtimeRole": "T_HP_Overlay_Season_Spring_GroundOverlays_Sheet_B44", + "sourceRelativePath": "Overlays/Seasonal/Spring/B44/GroundOverlays/T_HP_Overlay_Season_Spring_GroundOverlays_Sheet_B44.png", + "destinationPath": "Assets/_Project/Art/Runtime/Overlays/Seasonal/Spring/B44/GroundOverlays/T_HP_Overlay_Season_Spring_GroundOverlays_Sheet_B44.png", + "batch": "B44", + "sha256": "1be2d2ccff957a479199ef8cfe021c6b4e66ba45726c4c5fdb3517fecdbb91d5", + "bytes": 28928, + "image": { + "width": 512, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "overlays-seasonal-spring-b44-houseoverlays-t-hp-overlay-season-spring-houseoverlays-sheet-b44", + "assetType": "spriteSheet", + "contentKind": "Overlays", + "runtimeRole": "T_HP_Overlay_Season_Spring_HouseOverlays_Sheet_B44", + "sourceRelativePath": "Overlays/Seasonal/Spring/B44/HouseOverlays/T_HP_Overlay_Season_Spring_HouseOverlays_Sheet_B44.png", + "destinationPath": "Assets/_Project/Art/Runtime/Overlays/Seasonal/Spring/B44/HouseOverlays/T_HP_Overlay_Season_Spring_HouseOverlays_Sheet_B44.png", + "batch": "B44", + "sha256": "4813833bed08f36840f4a8973aa8d10755aef629bcfdbdb76fd8f82220caeb7d", + "bytes": 28564, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "overlays-seasonal-summer-b47-groundoverlays-t-hp-overlay-season-summer-groundoverlays-sheet-b47", + "assetType": "spriteSheet", + "contentKind": "Overlays", + "runtimeRole": "T_HP_Overlay_Season_Summer_GroundOverlays_Sheet_B47", + "sourceRelativePath": "Overlays/Seasonal/Summer/B47/GroundOverlays/T_HP_Overlay_Season_Summer_GroundOverlays_Sheet_B47.png", + "destinationPath": "Assets/_Project/Art/Runtime/Overlays/Seasonal/Summer/B47/GroundOverlays/T_HP_Overlay_Season_Summer_GroundOverlays_Sheet_B47.png", + "batch": "B47", + "sha256": "316163f0cfa6933ad80bb1ebfe308499ece91e0f96ec5b1409f9a58c9237231f", + "bytes": 37691, + "image": { + "width": 512, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "overlays-seasonal-summer-b47-houseoverlays-t-hp-overlay-season-summer-houseoverlays-sheet-b47", + "assetType": "spriteSheet", + "contentKind": "Overlays", + "runtimeRole": "T_HP_Overlay_Season_Summer_HouseOverlays_Sheet_B47", + "sourceRelativePath": "Overlays/Seasonal/Summer/B47/HouseOverlays/T_HP_Overlay_Season_Summer_HouseOverlays_Sheet_B47.png", + "destinationPath": "Assets/_Project/Art/Runtime/Overlays/Seasonal/Summer/B47/HouseOverlays/T_HP_Overlay_Season_Summer_HouseOverlays_Sheet_B47.png", + "batch": "B47", + "sha256": "11a0cb20f9a7648b387043c3955871bd79c520c1b18873fee33788226f02559e", + "bytes": 25734, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "overlays-seasonal-winter-b46-groundoverlays-t-hp-overlay-season-winter-groundoverlays-sheet-b46", + "assetType": "spriteSheet", + "contentKind": "Overlays", + "runtimeRole": "T_HP_Overlay_Season_Winter_GroundOverlays_Sheet_B46", + "sourceRelativePath": "Overlays/Seasonal/Winter/B46/GroundOverlays/T_HP_Overlay_Season_Winter_GroundOverlays_Sheet_B46.png", + "destinationPath": "Assets/_Project/Art/Runtime/Overlays/Seasonal/Winter/B46/GroundOverlays/T_HP_Overlay_Season_Winter_GroundOverlays_Sheet_B46.png", + "batch": "B46", + "sha256": "8b13d95689cc55adb3476882767eb016f501e797e2e748ec0b04f97a207e1ad6", + "bytes": 27844, + "image": { + "width": 512, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "overlays-seasonal-winter-b46-houseoverlays-t-hp-overlay-season-winter-houseoverlays-sheet-b46", + "assetType": "spriteSheet", + "contentKind": "Overlays", + "runtimeRole": "T_HP_Overlay_Season_Winter_HouseOverlays_Sheet_B46", + "sourceRelativePath": "Overlays/Seasonal/Winter/B46/HouseOverlays/T_HP_Overlay_Season_Winter_HouseOverlays_Sheet_B46.png", + "destinationPath": "Assets/_Project/Art/Runtime/Overlays/Seasonal/Winter/B46/HouseOverlays/T_HP_Overlay_Season_Winter_HouseOverlays_Sheet_B46.png", + "batch": "B46", + "sha256": "4dda920828d436c8e43878fcb195a3b9d1023c3bf80b55c572e928698d0f9676", + "bytes": 27099, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "player-attack-b10-t-hp-player-attack-isodiagonal-sheet-b10", + "assetType": "spriteSheet", + "contentKind": "Player", + "runtimeRole": "T_HP_Player_Attack_IsoDiagonal_Sheet_B10", + "sourceRelativePath": "Player/Attack/B10/T_HP_Player_Attack_IsoDiagonal_Sheet_B10.png", + "destinationPath": "Assets/_Project/Art/Runtime/Player/Attack/B10/T_HP_Player_Attack_IsoDiagonal_Sheet_B10.png", + "batch": "B10", + "sha256": "93395118708fcbf2c2235dc2d130d294bbee373c7d8cbfb8708b66f93a1feb08", + "bytes": 35882, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 32, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "player-bufftower-b12-t-hp-player-bufftower-repair-isodiagonal-sheet-b12", + "assetType": "spriteSheet", + "contentKind": "Player", + "runtimeRole": "T_HP_Player_BuffTower_Repair_IsoDiagonal_Sheet_B12", + "sourceRelativePath": "Player/BuffTower/B12/T_HP_Player_BuffTower_Repair_IsoDiagonal_Sheet_B12.png", + "destinationPath": "Assets/_Project/Art/Runtime/Player/BuffTower/B12/T_HP_Player_BuffTower_Repair_IsoDiagonal_Sheet_B12.png", + "batch": "B12", + "sha256": "ad88cf0200e11bb6a4cc65432622e7a5ee436f033f63fd5a503ce9aea5579803", + "bytes": 70196, + "image": { + "width": 768, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 8, + "rows": 4, + "pixelsPerUnit": 32, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "BuffTower", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "player-damage-b14-t-hp-player-damage-isodiagonal-sheet-b14", + "assetType": "spriteSheet", + "contentKind": "Player", + "runtimeRole": "T_HP_Player_Damage_IsoDiagonal_Sheet_B14", + "sourceRelativePath": "Player/Damage/B14/T_HP_Player_Damage_IsoDiagonal_Sheet_B14.png", + "destinationPath": "Assets/_Project/Art/Runtime/Player/Damage/B14/T_HP_Player_Damage_IsoDiagonal_Sheet_B14.png", + "batch": "B14", + "sha256": "70974a0a183c16144a5ceac03514a723b162f9953e7e72a7baccf3daadfe0837", + "bytes": 24787, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 32, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "player-idle-b09-t-hp-player-idle-isodiagonal-sheet-b09", + "assetType": "spriteSheet", + "contentKind": "Player", + "runtimeRole": "T_HP_Player_Idle_IsoDiagonal_Sheet_B09", + "sourceRelativePath": "Player/Idle/B09/T_HP_Player_Idle_IsoDiagonal_Sheet_B09.png", + "destinationPath": "Assets/_Project/Art/Runtime/Player/Idle/B09/T_HP_Player_Idle_IsoDiagonal_Sheet_B09.png", + "batch": "B09", + "sha256": "0b0f355b6abb276c00798898e5f36d196472b955d2c3c8fa13fd8f44333ff5fe", + "bytes": 22070, + "image": { + "width": 384, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 4, + "rows": 4, + "pixelsPerUnit": 32, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Idle", + "frameRate": 4, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "player-sleep-b11-t-hp-player-sleep-sheet-b11", + "assetType": "spriteSheet", + "contentKind": "Player", + "runtimeRole": "T_HP_Player_Sleep_Sheet_B11", + "sourceRelativePath": "Player/Sleep/B11/T_HP_Player_Sleep_Sheet_B11.png", + "destinationPath": "Assets/_Project/Art/Runtime/Player/Sleep/B11/T_HP_Player_Sleep_Sheet_B11.png", + "batch": "B11", + "sha256": "4cdbe81fb332ee4efc66daf9ac864d06e9ca9cb0e479db85b5de0c6c7624b190", + "bytes": 12032, + "image": { + "width": 576, + "height": 96 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 1, + "pixelsPerUnit": 32, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Sleep", + "frameRate": 4, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "player-walk-b05-t-hp-player-walk-sheet-b05", + "assetType": "spriteSheet", + "contentKind": "Player", + "runtimeRole": "T_HP_Player_Walk_Sheet_B05", + "sourceRelativePath": "Player/Walk/B05/T_HP_Player_Walk_Sheet_B05.png", + "destinationPath": "Assets/_Project/Art/Runtime/Player/Walk/B05/T_HP_Player_Walk_Sheet_B05.png", + "batch": "B05", + "sha256": "ea318812495724617e8441a73f3a0588a8cc402200e621b198687900487680e3", + "bytes": 155832, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "excluded", + "reason": "Historical Player Walk revision; B08 is canonical." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 32, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Walk", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "player-walk-b06-t-hp-player-walk-sheet-b06", + "assetType": "spriteSheet", + "contentKind": "Player", + "runtimeRole": "T_HP_Player_Walk_Sheet_B06", + "sourceRelativePath": "Player/Walk/B06/T_HP_Player_Walk_Sheet_B06.png", + "destinationPath": "Assets/_Project/Art/Runtime/Player/Walk/B06/T_HP_Player_Walk_Sheet_B06.png", + "batch": "B06", + "sha256": "3345f2cf167a8926c3800d921174f70b437baacd5d32923dddec3e296e16ae8b", + "bytes": 32028, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "excluded", + "reason": "Historical Player Walk revision; B08 is canonical." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 32, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Walk", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "player-walk-b08-t-hp-player-walk-isodiagonal-sheet-b08", + "assetType": "spriteSheet", + "contentKind": "Player", + "runtimeRole": "T_HP_Player_Walk_IsoDiagonal_Sheet_B08", + "sourceRelativePath": "Player/Walk/B08/T_HP_Player_Walk_IsoDiagonal_Sheet_B08.png", + "destinationPath": "Assets/_Project/Art/Runtime/Player/Walk/B08/T_HP_Player_Walk_IsoDiagonal_Sheet_B08.png", + "batch": "B08", + "sha256": "74da4532c992c07664ef552a63bfed2b9bd4301bf624d3f2f873561afdf5be23", + "bytes": 29611, + "image": { + "width": 576, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 32, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Walk", + "frameRate": 8, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "props-environment-detachedhouse-b32-porchyarddecor-t-hp-prop-detachedhouse-porchyarddecor-sheet-b32", + "assetType": "spriteSheet", + "contentKind": "Props", + "runtimeRole": "T_HP_Prop_DetachedHouse_PorchYardDecor_Sheet_B32", + "sourceRelativePath": "Props/Environment/DetachedHouse/B32/PorchYardDecor/T_HP_Prop_DetachedHouse_PorchYardDecor_Sheet_B32.png", + "destinationPath": "Assets/_Project/Art/Runtime/Props/Environment/DetachedHouse/B32/PorchYardDecor/T_HP_Prop_DetachedHouse_PorchYardDecor_Sheet_B32.png", + "batch": "B32", + "sha256": "5e19e12ef60eaf57782798f001ed6eeff8e435f7120ec342177ae4a1f1ca3217", + "bytes": 45104, + "image": { + "width": 512, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "props-environment-detachedhouse-b33-windowwalldecor-t-hp-prop-detachedhouse-windowwalldecor-sheet-b33", + "assetType": "spriteSheet", + "contentKind": "Props", + "runtimeRole": "T_HP_Prop_DetachedHouse_WindowWallDecor_Sheet_B33", + "sourceRelativePath": "Props/Environment/DetachedHouse/B33/WindowWallDecor/T_HP_Prop_DetachedHouse_WindowWallDecor_Sheet_B33.png", + "destinationPath": "Assets/_Project/Art/Runtime/Props/Environment/DetachedHouse/B33/WindowWallDecor/T_HP_Prop_DetachedHouse_WindowWallDecor_Sheet_B33.png", + "batch": "B33", + "sha256": "c84063f9c44aff0590230974077da110aa4d4e7c6ca174a925dbed80a83dfda7", + "bytes": 44847, + "image": { + "width": 512, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "props-environment-detachedhouse-b34-cafeoutdoorcharm-t-hp-prop-detachedhouse-cafeoutdoorcharm-sheet-b34", + "assetType": "spriteSheet", + "contentKind": "Props", + "runtimeRole": "T_HP_Prop_DetachedHouse_CafeOutdoorCharm_Sheet_B34", + "sourceRelativePath": "Props/Environment/DetachedHouse/B34/CafeOutdoorCharm/T_HP_Prop_DetachedHouse_CafeOutdoorCharm_Sheet_B34.png", + "destinationPath": "Assets/_Project/Art/Runtime/Props/Environment/DetachedHouse/B34/CafeOutdoorCharm/T_HP_Prop_DetachedHouse_CafeOutdoorCharm_Sheet_B34.png", + "batch": "B34", + "sha256": "ed1ef613928abd8bb246b4921a7c28a4538749bf6c9e66f9cc819a6b9e0b8695", + "bytes": 43063, + "image": { + "width": 512, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "props-environment-oldcabin-b24-t-hp-prop-oldcabin-expansion-sheet-b24", + "assetType": "spriteSheet", + "contentKind": "Props", + "runtimeRole": "T_HP_Prop_OldCabin_Expansion_Sheet_B24", + "sourceRelativePath": "Props/Environment/OldCabin/B24/T_HP_Prop_OldCabin_Expansion_Sheet_B24.png", + "destinationPath": "Assets/_Project/Art/Runtime/Props/Environment/OldCabin/B24/T_HP_Prop_OldCabin_Expansion_Sheet_B24.png", + "batch": "B24", + "sha256": "51c14773902eb1bb40cbbb35b141853220ca62d0b38b5bfd7f09026c0c0daca5", + "bytes": 61001, + "image": { + "width": 512, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "props-environment-seasonal-autumn-b45-outdoorprops-t-hp-prop-season-autumn-outdoorprops-sheet-b45", + "assetType": "spriteSheet", + "contentKind": "Props", + "runtimeRole": "T_HP_Prop_Season_Autumn_OutdoorProps_Sheet_B45", + "sourceRelativePath": "Props/Environment/Seasonal/Autumn/B45/OutdoorProps/T_HP_Prop_Season_Autumn_OutdoorProps_Sheet_B45.png", + "destinationPath": "Assets/_Project/Art/Runtime/Props/Environment/Seasonal/Autumn/B45/OutdoorProps/T_HP_Prop_Season_Autumn_OutdoorProps_Sheet_B45.png", + "batch": "B45", + "sha256": "0b8f217f42c9513a6867b48701df64cbe209c149bbd10fd126134e15a82dffa8", + "bytes": 38177, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "props-environment-seasonal-spring-b44-outdoorprops-t-hp-prop-season-spring-outdoorprops-sheet-b44", + "assetType": "spriteSheet", + "contentKind": "Props", + "runtimeRole": "T_HP_Prop_Season_Spring_OutdoorProps_Sheet_B44", + "sourceRelativePath": "Props/Environment/Seasonal/Spring/B44/OutdoorProps/T_HP_Prop_Season_Spring_OutdoorProps_Sheet_B44.png", + "destinationPath": "Assets/_Project/Art/Runtime/Props/Environment/Seasonal/Spring/B44/OutdoorProps/T_HP_Prop_Season_Spring_OutdoorProps_Sheet_B44.png", + "batch": "B44", + "sha256": "398deb1ba86e6708ec14f92e96c9ce183eb523b29513e3ad62b9aead11487738", + "bytes": 37009, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "props-environment-seasonal-summer-b47-outdoorprops-t-hp-prop-season-summer-outdoorprops-sheet-b47", + "assetType": "spriteSheet", + "contentKind": "Props", + "runtimeRole": "T_HP_Prop_Season_Summer_OutdoorProps_Sheet_B47", + "sourceRelativePath": "Props/Environment/Seasonal/Summer/B47/OutdoorProps/T_HP_Prop_Season_Summer_OutdoorProps_Sheet_B47.png", + "destinationPath": "Assets/_Project/Art/Runtime/Props/Environment/Seasonal/Summer/B47/OutdoorProps/T_HP_Prop_Season_Summer_OutdoorProps_Sheet_B47.png", + "batch": "B47", + "sha256": "7961bd0147bb41b48e55fa0e9b429c69aaf650c1fa276c215a1f32934e211151", + "bytes": 41668, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "props-environment-seasonal-winter-b46-outdoorprops-t-hp-prop-season-winter-outdoorprops-sheet-b46", + "assetType": "spriteSheet", + "contentKind": "Props", + "runtimeRole": "T_HP_Prop_Season_Winter_OutdoorProps_Sheet_B46", + "sourceRelativePath": "Props/Environment/Seasonal/Winter/B46/OutdoorProps/T_HP_Prop_Season_Winter_OutdoorProps_Sheet_B46.png", + "destinationPath": "Assets/_Project/Art/Runtime/Props/Environment/Seasonal/Winter/B46/OutdoorProps/T_HP_Prop_Season_Winter_OutdoorProps_Sheet_B46.png", + "batch": "B46", + "sha256": "94f4cec2b8eab3d3955e760d0b30deeeea58816737d4d9b0f5cb810764ab91b4", + "bytes": 35550, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "tiles-environment-b18-t-hp-tile-environment-foundation-sheet-b18", + "assetType": "spriteSheet", + "contentKind": "Tiles", + "runtimeRole": "T_HP_Tile_Environment_Foundation_Sheet_B18", + "sourceRelativePath": "Tiles/Environment/B18/T_HP_Tile_Environment_Foundation_Sheet_B18.png", + "destinationPath": "Assets/_Project/Art/Runtime/Tiles/Environment/B18/T_HP_Tile_Environment_Foundation_Sheet_B18.png", + "batch": "B18", + "sha256": "c29681198a7c80d727f5d05035515448ec49c3790c113e7895774772645a1492", + "bytes": 48643, + "image": { + "width": 512, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 3, + "pixelsPerUnit": 128, + "pivot": "MixedBySlice", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "tiles-environment-detachedhouse-b29-roofmodules-t-hp-tile-detachedhouse-roofmodules-sheet-b29", + "assetType": "spriteSheet", + "contentKind": "Tiles", + "runtimeRole": "T_HP_Tile_DetachedHouse_RoofModules_Sheet_B29", + "sourceRelativePath": "Tiles/Environment/DetachedHouse/B29/RoofModules/T_HP_Tile_DetachedHouse_RoofModules_Sheet_B29.png", + "destinationPath": "Assets/_Project/Art/Runtime/Tiles/Environment/DetachedHouse/B29/RoofModules/T_HP_Tile_DetachedHouse_RoofModules_Sheet_B29.png", + "batch": "B29", + "sha256": "485b9a6b72afe384ce03639987924c25d1a83825341a2156ff3ca5480df42c33", + "bytes": 24113, + "image": { + "width": 512, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "tiles-environment-detachedhouse-b29-wallexterior-t-hp-tile-detachedhouse-wallexterior-sheet-b29", + "assetType": "spriteSheet", + "contentKind": "Tiles", + "runtimeRole": "T_HP_Tile_DetachedHouse_WallExterior_Sheet_B29", + "sourceRelativePath": "Tiles/Environment/DetachedHouse/B29/WallExterior/T_HP_Tile_DetachedHouse_WallExterior_Sheet_B29.png", + "destinationPath": "Assets/_Project/Art/Runtime/Tiles/Environment/DetachedHouse/B29/WallExterior/T_HP_Tile_DetachedHouse_WallExterior_Sheet_B29.png", + "batch": "B29", + "sha256": "40bfd8b040f2e6a83ba027d21fcc69448809fc05c06eb3f2f4b29b002a8f2f6f", + "bytes": 39901, + "image": { + "width": 512, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 3, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "tiles-environment-oldcabin-b24-t-hp-tile-oldcabin-expansion-sheet-b24", + "assetType": "spriteSheet", + "contentKind": "Tiles", + "runtimeRole": "T_HP_Tile_OldCabin_Expansion_Sheet_B24", + "sourceRelativePath": "Tiles/Environment/OldCabin/B24/T_HP_Tile_OldCabin_Expansion_Sheet_B24.png", + "destinationPath": "Assets/_Project/Art/Runtime/Tiles/Environment/OldCabin/B24/T_HP_Tile_OldCabin_Expansion_Sheet_B24.png", + "batch": "B24", + "sha256": "3b7e56f2d7e83fcec4a9170df39843597783947348b87ad18c50ef18afa8994d", + "bytes": 78517, + "image": { + "width": 512, + "height": 384 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 3, + "pixelsPerUnit": 128, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "tiles-environment-seasonal-autumn-b45-groundtiles-t-hp-tile-season-autumn-groundtiles-sheet-b45", + "assetType": "spriteSheet", + "contentKind": "Tiles", + "runtimeRole": "T_HP_Tile_Season_Autumn_GroundTiles_Sheet_B45", + "sourceRelativePath": "Tiles/Environment/Seasonal/Autumn/B45/GroundTiles/T_HP_Tile_Season_Autumn_GroundTiles_Sheet_B45.png", + "destinationPath": "Assets/_Project/Art/Runtime/Tiles/Environment/Seasonal/Autumn/B45/GroundTiles/T_HP_Tile_Season_Autumn_GroundTiles_Sheet_B45.png", + "batch": "B45", + "sha256": "8c5ba46a77451c7d0e6a6763230dfa9c9f1333c548ab2c318d7bb6215cae9a1f", + "bytes": 35271, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "tiles-environment-seasonal-spring-b44-groundtiles-t-hp-tile-season-spring-groundtiles-sheet-b44", + "assetType": "spriteSheet", + "contentKind": "Tiles", + "runtimeRole": "T_HP_Tile_Season_Spring_GroundTiles_Sheet_B44", + "sourceRelativePath": "Tiles/Environment/Seasonal/Spring/B44/GroundTiles/T_HP_Tile_Season_Spring_GroundTiles_Sheet_B44.png", + "destinationPath": "Assets/_Project/Art/Runtime/Tiles/Environment/Seasonal/Spring/B44/GroundTiles/T_HP_Tile_Season_Spring_GroundTiles_Sheet_B44.png", + "batch": "B44", + "sha256": "a67081a809f6f26a3c88c8a56bc42440aef500f013d2dccc857b1933ee8a8e32", + "bytes": 35235, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "tiles-environment-seasonal-summer-b47-groundtiles-t-hp-tile-season-summer-groundtiles-sheet-b47", + "assetType": "spriteSheet", + "contentKind": "Tiles", + "runtimeRole": "T_HP_Tile_Season_Summer_GroundTiles_Sheet_B47", + "sourceRelativePath": "Tiles/Environment/Seasonal/Summer/B47/GroundTiles/T_HP_Tile_Season_Summer_GroundTiles_Sheet_B47.png", + "destinationPath": "Assets/_Project/Art/Runtime/Tiles/Environment/Seasonal/Summer/B47/GroundTiles/T_HP_Tile_Season_Summer_GroundTiles_Sheet_B47.png", + "batch": "B47", + "sha256": "9cc7da8522811a0e6b8c4753a8ba7bccb03c5253b3641d97db7252a8f0a48019", + "bytes": 36244, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "tiles-environment-seasonal-winter-b46-groundtiles-t-hp-tile-season-winter-groundtiles-sheet-b46", + "assetType": "spriteSheet", + "contentKind": "Tiles", + "runtimeRole": "T_HP_Tile_Season_Winter_GroundTiles_Sheet_B46", + "sourceRelativePath": "Tiles/Environment/Seasonal/Winter/B46/GroundTiles/T_HP_Tile_Season_Winter_GroundTiles_Sheet_B46.png", + "destinationPath": "Assets/_Project/Art/Runtime/Tiles/Environment/Seasonal/Winter/B46/GroundTiles/T_HP_Tile_Season_Winter_GroundTiles_Sheet_B46.png", + "batch": "B46", + "sha256": "ab406465145b6c69f428e6aa113eb6279a763f5760e1222f7db6c16c2a007e6b", + "bytes": 35561, + "image": { + "width": 384, + "height": 256 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 2, + "pixelsPerUnit": 128, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-bookshelf-attack-b21-t-hp-tower-bookshelf-lv01-attack-isodiagonal-sheet-b21", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_BookShelf_Lv01_Attack_IsoDiagonal_Sheet_B21", + "sourceRelativePath": "Towers/BookShelf/Attack/B21/T_HP_Tower_BookShelf_Lv01_Attack_IsoDiagonal_Sheet_B21.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/BookShelf/Attack/B21/T_HP_Tower_BookShelf_Lv01_Attack_IsoDiagonal_Sheet_B21.png", + "batch": "B21", + "sha256": "1c2ada6408bc6d60838e5e1ea03fd5b7d54576e56a43d7f68bc0ce7366009ffa", + "bytes": 152938, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-bookshelf-attack-b48-t-hp-tower-bookshelf-lv02-attack-isodiagonal-sheet-b48", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_BookShelf_Lv02_Attack_IsoDiagonal_Sheet_B48", + "sourceRelativePath": "Towers/BookShelf/Attack/B48/T_HP_Tower_BookShelf_Lv02_Attack_IsoDiagonal_Sheet_B48.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/BookShelf/Attack/B48/T_HP_Tower_BookShelf_Lv02_Attack_IsoDiagonal_Sheet_B48.png", + "batch": "B48", + "sha256": "5584f735b28ffa18db2776c149c27ae05268dc54b24abcb002eabcc3e14088e1", + "bytes": 155201, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-bookshelf-attack-b48-t-hp-tower-bookshelf-lv03-attack-isodiagonal-sheet-b48", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_BookShelf_Lv03_Attack_IsoDiagonal_Sheet_B48", + "sourceRelativePath": "Towers/BookShelf/Attack/B48/T_HP_Tower_BookShelf_Lv03_Attack_IsoDiagonal_Sheet_B48.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/BookShelf/Attack/B48/T_HP_Tower_BookShelf_Lv03_Attack_IsoDiagonal_Sheet_B48.png", + "batch": "B48", + "sha256": "fe46fb5c142f5eeb0a6f7ba6afaca93644cf4bfc77523223288ab29ab054dbc8", + "bytes": 155522, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-cooldryer-attack-b22-t-hp-tower-cooldryer-lv01-attack-isodiagonal-sheet-b22", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_CoolDryer_Lv01_Attack_IsoDiagonal_Sheet_B22", + "sourceRelativePath": "Towers/CoolDryer/Attack/B22/T_HP_Tower_CoolDryer_Lv01_Attack_IsoDiagonal_Sheet_B22.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/CoolDryer/Attack/B22/T_HP_Tower_CoolDryer_Lv01_Attack_IsoDiagonal_Sheet_B22.png", + "batch": "B22", + "sha256": "b34c839ab95e471824420216341251c2c8a561b1158e76fb1d35cba5607a9a67", + "bytes": 171261, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-cooldryer-attack-b48-t-hp-tower-cooldryer-lv02-attack-isodiagonal-sheet-b48", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_CoolDryer_Lv02_Attack_IsoDiagonal_Sheet_B48", + "sourceRelativePath": "Towers/CoolDryer/Attack/B48/T_HP_Tower_CoolDryer_Lv02_Attack_IsoDiagonal_Sheet_B48.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/CoolDryer/Attack/B48/T_HP_Tower_CoolDryer_Lv02_Attack_IsoDiagonal_Sheet_B48.png", + "batch": "B48", + "sha256": "ed8a85c9da148ecf979c3e2e9b7c3f8af3229dbf8b0f45a20756dff82f92a9ce", + "bytes": 157248, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-cooldryer-attack-b48-t-hp-tower-cooldryer-lv03-attack-isodiagonal-sheet-b48", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_CoolDryer_Lv03_Attack_IsoDiagonal_Sheet_B48", + "sourceRelativePath": "Towers/CoolDryer/Attack/B48/T_HP_Tower_CoolDryer_Lv03_Attack_IsoDiagonal_Sheet_B48.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/CoolDryer/Attack/B48/T_HP_Tower_CoolDryer_Lv03_Attack_IsoDiagonal_Sheet_B48.png", + "batch": "B48", + "sha256": "5d49ffe9b3288fbfa841d04c4d2fa169a73036874d8c38fb6617aefb605ef7d0", + "bytes": 152545, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-dryer-attack-b16-t-hp-tower-dryer-lv01-attack-isodiagonal-sheet-b16", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_Dryer_Lv01_Attack_IsoDiagonal_Sheet_B16", + "sourceRelativePath": "Towers/Dryer/Attack/B16/T_HP_Tower_Dryer_Lv01_Attack_IsoDiagonal_Sheet_B16.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/Dryer/Attack/B16/T_HP_Tower_Dryer_Lv01_Attack_IsoDiagonal_Sheet_B16.png", + "batch": "B16", + "sha256": "c313d90239ee08ef4723b1499a5beead23678a2f6a96b26b6b662ed6be142932", + "bytes": 81436, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-dryer-attack-b30-t-hp-tower-dryer-lv02-attack-isodiagonal-sheet-b30", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_Dryer_Lv02_Attack_IsoDiagonal_Sheet_B30", + "sourceRelativePath": "Towers/Dryer/Attack/B30/T_HP_Tower_Dryer_Lv02_Attack_IsoDiagonal_Sheet_B30.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/Dryer/Attack/B30/T_HP_Tower_Dryer_Lv02_Attack_IsoDiagonal_Sheet_B30.png", + "batch": "B30", + "sha256": "25b16acafc870371c2682c2abf49bd154b66a231b15b3862fa51b92d16bf617b", + "bytes": 79023, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-dryer-attack-b30-t-hp-tower-dryer-lv03-attack-isodiagonal-sheet-b30", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_Dryer_Lv03_Attack_IsoDiagonal_Sheet_B30", + "sourceRelativePath": "Towers/Dryer/Attack/B30/T_HP_Tower_Dryer_Lv03_Attack_IsoDiagonal_Sheet_B30.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/Dryer/Attack/B30/T_HP_Tower_Dryer_Lv03_Attack_IsoDiagonal_Sheet_B30.png", + "batch": "B30", + "sha256": "3f2af46e8e8305856113eff9bdeb2864f9234198222583229f6c8b9e6299042c", + "bytes": 83022, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-microwavetower-attack-b28-t-hp-tower-microwavetower-lv01-attack-isodiagonal-sheet-b28", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_MicrowaveTower_Lv01_Attack_IsoDiagonal_Sheet_B28", + "sourceRelativePath": "Towers/MicrowaveTower/Attack/B28/T_HP_Tower_MicrowaveTower_Lv01_Attack_IsoDiagonal_Sheet_B28.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/MicrowaveTower/Attack/B28/T_HP_Tower_MicrowaveTower_Lv01_Attack_IsoDiagonal_Sheet_B28.png", + "batch": "B28", + "sha256": "2de914ed865f6e43ab32d51a2cb30f7530393b0432322e86f686b7b43d7885ca", + "bytes": 71513, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-microwavetower-attack-b49-t-hp-tower-microwavetower-lv02-attack-isodiagonal-sheet-b49", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_MicrowaveTower_Lv02_Attack_IsoDiagonal_Sheet_B49", + "sourceRelativePath": "Towers/MicrowaveTower/Attack/B49/T_HP_Tower_MicrowaveTower_Lv02_Attack_IsoDiagonal_Sheet_B49.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/MicrowaveTower/Attack/B49/T_HP_Tower_MicrowaveTower_Lv02_Attack_IsoDiagonal_Sheet_B49.png", + "batch": "B49", + "sha256": "2e47d3e2f3d37cd089516b6bc34ce8f06755e7fa58e8b5c99d32ea3625d7dbd1", + "bytes": 91413, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-microwavetower-attack-b49-t-hp-tower-microwavetower-lv03-attack-isodiagonal-sheet-b49", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_MicrowaveTower_Lv03_Attack_IsoDiagonal_Sheet_B49", + "sourceRelativePath": "Towers/MicrowaveTower/Attack/B49/T_HP_Tower_MicrowaveTower_Lv03_Attack_IsoDiagonal_Sheet_B49.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/MicrowaveTower/Attack/B49/T_HP_Tower_MicrowaveTower_Lv03_Attack_IsoDiagonal_Sheet_B49.png", + "batch": "B49", + "sha256": "42370be4414444ec19511bfe9c2e5d331752ef51e3f01d21af37442fd4cf9ebb", + "bytes": 94415, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-microwavetower-b28-static-t-hp-tower-microwavetower-levels-sheet-b28", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_MicrowaveTower_Levels_Sheet_B28", + "sourceRelativePath": "Towers/MicrowaveTower/B28/Static/T_HP_Tower_MicrowaveTower_Levels_Sheet_B28.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/MicrowaveTower/B28/Static/T_HP_Tower_MicrowaveTower_Levels_Sheet_B28.png", + "batch": "B28", + "sha256": "d0d266ee70fc6f6bc534a3ccf9d621e97caea9a66ac6c04175e0ae104e88d825", + "bytes": 8426, + "image": { + "width": 384, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-vacuumcleanertower-attack-b28-t-hp-tower-vacuumcleanertower-lv01-attack-isodiagonal-sheet-b28", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_VacuumCleanerTower_Lv01_Attack_IsoDiagonal_Sheet_B28", + "sourceRelativePath": "Towers/VacuumCleanerTower/Attack/B28/T_HP_Tower_VacuumCleanerTower_Lv01_Attack_IsoDiagonal_Sheet_B28.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/VacuumCleanerTower/Attack/B28/T_HP_Tower_VacuumCleanerTower_Lv01_Attack_IsoDiagonal_Sheet_B28.png", + "batch": "B28", + "sha256": "b6f6eb43b72bb079b8619c423778e939cef5a5696bce88bbb8c3dadaec638aec", + "bytes": 73789, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-vacuumcleanertower-attack-b49-t-hp-tower-vacuumcleanertower-lv02-attack-isodiagonal-sheet-b49", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_VacuumCleanerTower_Lv02_Attack_IsoDiagonal_Sheet_B49", + "sourceRelativePath": "Towers/VacuumCleanerTower/Attack/B49/T_HP_Tower_VacuumCleanerTower_Lv02_Attack_IsoDiagonal_Sheet_B49.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/VacuumCleanerTower/Attack/B49/T_HP_Tower_VacuumCleanerTower_Lv02_Attack_IsoDiagonal_Sheet_B49.png", + "batch": "B49", + "sha256": "e0bfe600df9e77b9d2fc9d4505de5cc0ad5457dbc25e4c4013ff594649fc35fc", + "bytes": 94492, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-vacuumcleanertower-attack-b49-t-hp-tower-vacuumcleanertower-lv03-attack-isodiagonal-sheet-b49", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_VacuumCleanerTower_Lv03_Attack_IsoDiagonal_Sheet_B49", + "sourceRelativePath": "Towers/VacuumCleanerTower/Attack/B49/T_HP_Tower_VacuumCleanerTower_Lv03_Attack_IsoDiagonal_Sheet_B49.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/VacuumCleanerTower/Attack/B49/T_HP_Tower_VacuumCleanerTower_Lv03_Attack_IsoDiagonal_Sheet_B49.png", + "batch": "B49", + "sha256": "380307f040e104de970d306d64ac90010a6421609ebae70bdbc2d99e3ea1a025", + "bytes": 95955, + "image": { + "width": 768, + "height": 512 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 6, + "rows": 4, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + "DownLeft", + "DownRight", + "UpLeft", + "UpRight" + ], + "clipMeaning": "Attack", + "frameRate": 10, + "loop": true, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-vacuumcleanertower-b28-static-t-hp-tower-vacuumcleanertower-levels-sheet-b28", + "assetType": "spriteSheet", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_VacuumCleanerTower_Levels_Sheet_B28", + "sourceRelativePath": "Towers/VacuumCleanerTower/B28/Static/T_HP_Tower_VacuumCleanerTower_Levels_Sheet_B28.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/VacuumCleanerTower/B28/Static/T_HP_Tower_VacuumCleanerTower_Levels_Sheet_B28.png", + "batch": "B28", + "sha256": "7a3c92da3d9a64284ea458226776bd78e5344d20ecfa218dd0cca8578f283093", + "bytes": 10779, + "image": { + "width": 384, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 3, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-bedoccupied-damage-b19-t-hp-valuable-bedoccupied-damage-sheet-b19", + "assetType": "spriteSheet", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_BedOccupied_Damage_Sheet_B19", + "sourceRelativePath": "Valuables/BedOccupied/Damage/B19/T_HP_Valuable_BedOccupied_Damage_Sheet_B19.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/BedOccupied/Damage/B19/T_HP_Valuable_BedOccupied_Damage_Sheet_B19.png", + "batch": "B19", + "sha256": "ca3cac8969a7c9a38bfbf73644ebd2a7361f3e427f2ede529d16f4a73e67bf46", + "bytes": 21717, + "image": { + "width": 512, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-foodcrate-damage-b35-t-hp-valuable-foodcrate-damage-sheet-b35", + "assetType": "spriteSheet", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_FoodCrate_Damage_Sheet_B35", + "sourceRelativePath": "Valuables/FoodCrate/Damage/B35/T_HP_Valuable_FoodCrate_Damage_Sheet_B35.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/FoodCrate/Damage/B35/T_HP_Valuable_FoodCrate_Damage_Sheet_B35.png", + "batch": "B35", + "sha256": "5cd41a33739383d693f2d08666a7a0f5bf6fb6b08dbe866a0e43580847bea69b", + "bytes": 21403, + "image": { + "width": 512, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-jangdokdae-damage-b35-t-hp-valuable-jangdokdae-damage-sheet-b35", + "assetType": "spriteSheet", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_Jangdokdae_Damage_Sheet_B35", + "sourceRelativePath": "Valuables/Jangdokdae/Damage/B35/T_HP_Valuable_Jangdokdae_Damage_Sheet_B35.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/Jangdokdae/Damage/B35/T_HP_Valuable_Jangdokdae_Damage_Sheet_B35.png", + "batch": "B35", + "sha256": "90f5beba1bf0a96fe5b55a59b7652e0615c3bc31f4704fb421e5680cc217d585", + "bytes": 28017, + "image": { + "width": 512, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-refrigerator-damage-b19-t-hp-valuable-refrigerator-damage-sheet-b19", + "assetType": "spriteSheet", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_Refrigerator_Damage_Sheet_B19", + "sourceRelativePath": "Valuables/Refrigerator/Damage/B19/T_HP_Valuable_Refrigerator_Damage_Sheet_B19.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/Refrigerator/Damage/B19/T_HP_Valuable_Refrigerator_Damage_Sheet_B19.png", + "batch": "B19", + "sha256": "464c40fa244942e53c04711b0f164d389abf64543f4ae4f9f44ddf74536a7455", + "bytes": 18268, + "image": { + "width": 512, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-ricesack-damage-b19-t-hp-valuable-ricesack-damage-sheet-b19", + "assetType": "spriteSheet", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_RiceSack_Damage_Sheet_B19", + "sourceRelativePath": "Valuables/RiceSack/Damage/B19/T_HP_Valuable_RiceSack_Damage_Sheet_B19.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/RiceSack/Damage/B19/T_HP_Valuable_RiceSack_Damage_Sheet_B19.png", + "batch": "B19", + "sha256": "5ac6bcb1d1393371eec84356b1204a46102d3f428956840c3cd2811065cddbb4", + "bytes": 25385, + "image": { + "width": 512, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-storagechest-damage-b36-t-hp-valuable-storagechest-damage-sheet-b36", + "assetType": "spriteSheet", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_StorageChest_Damage_Sheet_B36", + "sourceRelativePath": "Valuables/StorageChest/Damage/B36/T_HP_Valuable_StorageChest_Damage_Sheet_B36.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/StorageChest/Damage/B36/T_HP_Valuable_StorageChest_Damage_Sheet_B36.png", + "batch": "B36", + "sha256": "e58b20a4b763ab5990c8d71bc7b99f60bade058fa99906f6ee47b381babde3c9", + "bytes": 26862, + "image": { + "width": 512, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-tvappliance-damage-b37-t-hp-valuable-tvappliance-damage-sheet-b37", + "assetType": "spriteSheet", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_TVAppliance_Damage_Sheet_B37", + "sourceRelativePath": "Valuables/TVAppliance/Damage/B37/T_HP_Valuable_TVAppliance_Damage_Sheet_B37.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/TVAppliance/Damage/B37/T_HP_Valuable_TVAppliance_Damage_Sheet_B37.png", + "batch": "B37", + "sha256": "b53412af949516d190b9b59d1a0ab3e6b9b0ec445620e6b75ce245bcaf7d892d", + "bytes": 25254, + "image": { + "width": 512, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-wardrobe-damage-b37-t-hp-valuable-wardrobe-damage-sheet-b37", + "assetType": "spriteSheet", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_Wardrobe_Damage_Sheet_B37", + "sourceRelativePath": "Valuables/Wardrobe/Damage/B37/T_HP_Valuable_Wardrobe_Damage_Sheet_B37.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/Wardrobe/Damage/B37/T_HP_Valuable_Wardrobe_Damage_Sheet_B37.png", + "batch": "B37", + "sha256": "ebd9c334643c724d222dc3c033f3fc3109d5a4bdd65cc07b044a742fae59deff", + "bytes": 20274, + "image": { + "width": 512, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-waterjug-damage-b36-t-hp-valuable-waterjug-damage-sheet-b36", + "assetType": "spriteSheet", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_WaterJug_Damage_Sheet_B36", + "sourceRelativePath": "Valuables/WaterJug/Damage/B36/T_HP_Valuable_WaterJug_Damage_Sheet_B36.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/WaterJug/Damage/B36/T_HP_Valuable_WaterJug_Damage_Sheet_B36.png", + "batch": "B36", + "sha256": "4e140bccd38be0c187e51e9c28d056657b287b06756cf47bbdad8a2daf541330", + "bytes": 26867, + "image": { + "width": 512, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 4, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Damage", + "frameRate": 8, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "vfx-bookprojectile-b21-t-hp-vfx-bookprojectile-sheet-b21", + "assetType": "spriteSheet", + "contentKind": "VFX", + "runtimeRole": "T_HP_VFX_BookProjectile_Sheet_B21", + "sourceRelativePath": "VFX/BookProjectile/B21/T_HP_VFX_BookProjectile_Sheet_B21.png", + "destinationPath": "Assets/_Project/Art/Runtime/VFX/BookProjectile/B21/T_HP_VFX_BookProjectile_Sheet_B21.png", + "batch": "B21", + "sha256": "70282ceee98a49ee8fb2a53b6d732e5a0f3bc1559d06a158d9bb9fcbee279740", + "bytes": 22136, + "image": { + "width": 768, + "height": 96 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 8, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "vfx-coolair-b22-t-hp-vfx-coolair-sheet-b22", + "assetType": "spriteSheet", + "contentKind": "VFX", + "runtimeRole": "T_HP_VFX_CoolAir_Sheet_B22", + "sourceRelativePath": "VFX/CoolAir/B22/T_HP_VFX_CoolAir_Sheet_B22.png", + "destinationPath": "Assets/_Project/Art/Runtime/VFX/CoolAir/B22/T_HP_VFX_CoolAir_Sheet_B22.png", + "batch": "B22", + "sha256": "9fd56b06258d022bfdfba8fec211d358f14257f6f1233dccd39bd0aafb4bc62c", + "bytes": 17259, + "image": { + "width": 768, + "height": 96 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 8, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "vfx-dryerwind-b16-t-hp-vfx-dryerwind-sheet-b16", + "assetType": "spriteSheet", + "contentKind": "VFX", + "runtimeRole": "T_HP_VFX_DryerWind_Sheet_B16", + "sourceRelativePath": "VFX/DryerWind/B16/T_HP_VFX_DryerWind_Sheet_B16.png", + "destinationPath": "Assets/_Project/Art/Runtime/VFX/DryerWind/B16/T_HP_VFX_DryerWind_Sheet_B16.png", + "batch": "B16", + "sha256": "ad415962f15dcfec0b08d2591dbc9b8690e751062b9fc873ac3306151de22b03", + "bytes": 7159, + "image": { + "width": 768, + "height": 96 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 8, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "vfx-heatpop-b28-t-hp-vfx-heatpop-sheet-b28", + "assetType": "spriteSheet", + "contentKind": "VFX", + "runtimeRole": "T_HP_VFX_HeatPop_Sheet_B28", + "sourceRelativePath": "VFX/HeatPop/B28/T_HP_VFX_HeatPop_Sheet_B28.png", + "destinationPath": "Assets/_Project/Art/Runtime/VFX/HeatPop/B28/T_HP_VFX_HeatPop_Sheet_B28.png", + "batch": "B28", + "sha256": "99f61399a8358fcdf6aea2ac857ba224b5f0a045fee775f2fedde1a35dfc4659", + "bytes": 5439, + "image": { + "width": 768, + "height": 96 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 8, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "vfx-hitimpact-b23-t-hp-vfx-hitimpact-sheet-b23", + "assetType": "spriteSheet", + "contentKind": "VFX", + "runtimeRole": "T_HP_VFX_HitImpact_Sheet_B23", + "sourceRelativePath": "VFX/HitImpact/B23/T_HP_VFX_HitImpact_Sheet_B23.png", + "destinationPath": "Assets/_Project/Art/Runtime/VFX/HitImpact/B23/T_HP_VFX_HitImpact_Sheet_B23.png", + "batch": "B23", + "sha256": "373ed068d3edf3ef5e05159c5b68b2b33e40741a162901fe450dcbf2e4a767ef", + "bytes": 16932, + "image": { + "width": 768, + "height": 96 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 8, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "vfx-levelupglow-b23-t-hp-vfx-levelupglow-sheet-b23", + "assetType": "spriteSheet", + "contentKind": "VFX", + "runtimeRole": "T_HP_VFX_LevelUpGlow_Sheet_B23", + "sourceRelativePath": "VFX/LevelUpGlow/B23/T_HP_VFX_LevelUpGlow_Sheet_B23.png", + "destinationPath": "Assets/_Project/Art/Runtime/VFX/LevelUpGlow/B23/T_HP_VFX_LevelUpGlow_Sheet_B23.png", + "batch": "B23", + "sha256": "6e81524127d12a9764ab58f8e834fa67d4534bc3875dd380ca841aa5096e710c", + "bytes": 40723, + "image": { + "width": 1024, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 8, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "vfx-playerspawn-b15-t-hp-vfx-playerspawn-sheet-b15", + "assetType": "spriteSheet", + "contentKind": "VFX", + "runtimeRole": "T_HP_VFX_PlayerSpawn_Sheet_B15", + "sourceRelativePath": "VFX/PlayerSpawn/B15/T_HP_VFX_PlayerSpawn_Sheet_B15.png", + "destinationPath": "Assets/_Project/Art/Runtime/VFX/PlayerSpawn/B15/T_HP_VFX_PlayerSpawn_Sheet_B15.png", + "batch": "B15", + "sha256": "23e96e7f4d45b0caa8de7304de8a59e393ab32b1a770f73584d8c4b092c3becc", + "bytes": 10183, + "image": { + "width": 768, + "height": 96 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 8, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "vfx-suctiondust-b28-t-hp-vfx-suctiondust-sheet-b28", + "assetType": "spriteSheet", + "contentKind": "VFX", + "runtimeRole": "T_HP_VFX_SuctionDust_Sheet_B28", + "sourceRelativePath": "VFX/SuctionDust/B28/T_HP_VFX_SuctionDust_Sheet_B28.png", + "destinationPath": "Assets/_Project/Art/Runtime/VFX/SuctionDust/B28/T_HP_VFX_SuctionDust_Sheet_B28.png", + "batch": "B28", + "sha256": "ac8f8b021b8fb4f2e065c4124c7811e3cb9bc7369a066475e0a64c443c6bb54f", + "bytes": 6781, + "image": { + "width": 768, + "height": 96 + }, + "selection": { + "status": "included", + "reason": "Promoted UnityReady sheet for a distinct runtime role and revision." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Multiple", + "cell": { + "width": 96, + "height": 96 + }, + "columns": 8, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Atlas", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-t-hp-tower-bookshelf-lv01", + "assetType": "singleSprite", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_BookShelf_Lv01", + "sourceRelativePath": "Towers/T_HP_Tower_BookShelf_Lv01.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/T_HP_Tower_BookShelf_Lv01.png", + "batch": null, + "sha256": "ef6fa58cd763ba92410b1a32056699bbc698d8b94043bea913dceb88563aef54", + "bytes": 933, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical static level sprite for Dryer, BookShelf, or CoolDryer." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-t-hp-tower-bookshelf-lv02", + "assetType": "singleSprite", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_BookShelf_Lv02", + "sourceRelativePath": "Towers/T_HP_Tower_BookShelf_Lv02.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/T_HP_Tower_BookShelf_Lv02.png", + "batch": null, + "sha256": "74ae044799f560428db528870f63073ddef17783b2cee3faf89610fe7cf32165", + "bytes": 969, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical static level sprite for Dryer, BookShelf, or CoolDryer." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-t-hp-tower-bookshelf-lv03", + "assetType": "singleSprite", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_BookShelf_Lv03", + "sourceRelativePath": "Towers/T_HP_Tower_BookShelf_Lv03.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/T_HP_Tower_BookShelf_Lv03.png", + "batch": null, + "sha256": "fe2ff4f04fc940e63d62a3a7f237d2f2a336e9c876b5de3cd0974c78b3ad229d", + "bytes": 1023, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical static level sprite for Dryer, BookShelf, or CoolDryer." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-t-hp-tower-cooldryer-lv01", + "assetType": "singleSprite", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_CoolDryer_Lv01", + "sourceRelativePath": "Towers/T_HP_Tower_CoolDryer_Lv01.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/T_HP_Tower_CoolDryer_Lv01.png", + "batch": null, + "sha256": "29365388e3a693026c92dd1624b57d8f8f66b8c942ed6f9e88af2e33b5595f4e", + "bytes": 584, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical static level sprite for Dryer, BookShelf, or CoolDryer." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-t-hp-tower-cooldryer-lv02", + "assetType": "singleSprite", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_CoolDryer_Lv02", + "sourceRelativePath": "Towers/T_HP_Tower_CoolDryer_Lv02.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/T_HP_Tower_CoolDryer_Lv02.png", + "batch": null, + "sha256": "d5ed6ec2dd409281aceb45d3ef59b31c527c9f4b42fb4f12d855c5abd4229cf9", + "bytes": 624, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical static level sprite for Dryer, BookShelf, or CoolDryer." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-t-hp-tower-cooldryer-lv03", + "assetType": "singleSprite", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_CoolDryer_Lv03", + "sourceRelativePath": "Towers/T_HP_Tower_CoolDryer_Lv03.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/T_HP_Tower_CoolDryer_Lv03.png", + "batch": null, + "sha256": "a0337f2f627618190ad3629a7cb88f396a4bbc875ca0516885ae1ab4757b2c99", + "bytes": 695, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical static level sprite for Dryer, BookShelf, or CoolDryer." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-t-hp-tower-dryer-lv01", + "assetType": "singleSprite", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_Dryer_Lv01", + "sourceRelativePath": "Towers/T_HP_Tower_Dryer_Lv01.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/T_HP_Tower_Dryer_Lv01.png", + "batch": null, + "sha256": "352884de9eb2fd6502199d36a6ccb02705f284b1aa349537c3937f0bf2bb6840", + "bytes": 633, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical static level sprite for Dryer, BookShelf, or CoolDryer." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-t-hp-tower-dryer-lv02", + "assetType": "singleSprite", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_Dryer_Lv02", + "sourceRelativePath": "Towers/T_HP_Tower_Dryer_Lv02.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/T_HP_Tower_Dryer_Lv02.png", + "batch": null, + "sha256": "9d34d7cfc6af821bfdc7b6b504a11250418e8dad93b48cd077e1963d99e784e3", + "bytes": 684, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical static level sprite for Dryer, BookShelf, or CoolDryer." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "towers-t-hp-tower-dryer-lv03", + "assetType": "singleSprite", + "contentKind": "Towers", + "runtimeRole": "T_HP_Tower_Dryer_Lv03", + "sourceRelativePath": "Towers/T_HP_Tower_Dryer_Lv03.png", + "destinationPath": "Assets/_Project/Art/Runtime/Towers/T_HP_Tower_Dryer_Lv03.png", + "batch": null, + "sha256": "d4214f6ba45d3864eb5f8802e9143c40a1c8b30b65ba77a65b6dcfa0f212bec0", + "bytes": 734, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical static level sprite for Dryer, BookShelf, or CoolDryer." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "ui-t-hp-ui-attackrange", + "assetType": "singleSprite", + "contentKind": "UI", + "runtimeRole": "T_HP_UI_AttackRange", + "sourceRelativePath": "UI/T_HP_UI_AttackRange.png", + "destinationPath": "Assets/_Project/Art/Runtime/UI/T_HP_UI_AttackRange.png", + "batch": null, + "sha256": "c3e679676d6d88f583c189d18dbb2213ba6ecc066fb1cc2725fbe9d23b91ba9e", + "bytes": 960, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical runtime UI sprite." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "ui-t-hp-ui-enemy", + "assetType": "singleSprite", + "contentKind": "UI", + "runtimeRole": "T_HP_UI_Enemy", + "sourceRelativePath": "UI/T_HP_UI_Enemy.png", + "destinationPath": "Assets/_Project/Art/Runtime/UI/T_HP_UI_Enemy.png", + "batch": null, + "sha256": "3429037c832dd1b7038e1148e757413f94917406add6ba0613341528453d3f6b", + "bytes": 310, + "image": { + "width": 32, + "height": 32 + }, + "selection": { + "status": "included", + "reason": "Canonical runtime UI sprite." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 32, + "height": 32 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "ui-t-hp-ui-gold", + "assetType": "singleSprite", + "contentKind": "UI", + "runtimeRole": "T_HP_UI_Gold", + "sourceRelativePath": "UI/T_HP_UI_Gold.png", + "destinationPath": "Assets/_Project/Art/Runtime/UI/T_HP_UI_Gold.png", + "batch": null, + "sha256": "f368ec1fd8d723c7956a69686d5e48df03951de2124d015f87226066bf3e3dfa", + "bytes": 308, + "image": { + "width": 32, + "height": 32 + }, + "selection": { + "status": "included", + "reason": "Canonical runtime UI sprite." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 32, + "height": 32 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "ui-t-hp-ui-life", + "assetType": "singleSprite", + "contentKind": "UI", + "runtimeRole": "T_HP_UI_Life", + "sourceRelativePath": "UI/T_HP_UI_Life.png", + "destinationPath": "Assets/_Project/Art/Runtime/UI/T_HP_UI_Life.png", + "batch": null, + "sha256": "40deb21b12b0f4b779104afa17d59c2ea172054c72b5b14b2531b0bd2305cf05", + "bytes": 316, + "image": { + "width": 32, + "height": 32 + }, + "selection": { + "status": "included", + "reason": "Canonical runtime UI sprite." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 32, + "height": 32 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "ui-t-hp-ui-panelbackground", + "assetType": "singleSprite", + "contentKind": "UI", + "runtimeRole": "T_HP_UI_PanelBackground", + "sourceRelativePath": "UI/T_HP_UI_PanelBackground.png", + "destinationPath": "Assets/_Project/Art/Runtime/UI/T_HP_UI_PanelBackground.png", + "batch": null, + "sha256": "5456331b64cf2abcd94e8c059fa6c08cde9b455f82560edb435bc854de358780", + "bytes": 1376, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical runtime UI sprite." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "ui-t-hp-ui-play", + "assetType": "singleSprite", + "contentKind": "UI", + "runtimeRole": "T_HP_UI_Play", + "sourceRelativePath": "UI/T_HP_UI_Play.png", + "destinationPath": "Assets/_Project/Art/Runtime/UI/T_HP_UI_Play.png", + "batch": null, + "sha256": "79e660da10f17bf5f5111eb15c3419c855f7e73df982d1c48bbf74f6fcf15222", + "bytes": 329, + "image": { + "width": 32, + "height": 32 + }, + "selection": { + "status": "included", + "reason": "Canonical runtime UI sprite." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 32, + "height": 32 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "ui-t-hp-ui-wave", + "assetType": "singleSprite", + "contentKind": "UI", + "runtimeRole": "T_HP_UI_Wave", + "sourceRelativePath": "UI/T_HP_UI_Wave.png", + "destinationPath": "Assets/_Project/Art/Runtime/UI/T_HP_UI_Wave.png", + "batch": null, + "sha256": "430a9f2d293eb5075f55caa66131dc4a66f06faf38a9e2f3d49807ab7f284c31", + "bytes": 336, + "image": { + "width": 32, + "height": 32 + }, + "selection": { + "status": "included", + "reason": "Canonical runtime UI sprite." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 32, + "height": 32 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "Center", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-foodcrate-normal-b35-t-hp-valuable-foodcrate-normal-b35", + "assetType": "singleSprite", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_FoodCrate_Normal_B35", + "sourceRelativePath": "Valuables/FoodCrate/Normal/B35/T_HP_Valuable_FoodCrate_Normal_B35.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/FoodCrate/Normal/B35/T_HP_Valuable_FoodCrate_Normal_B35.png", + "batch": "B35", + "sha256": "76f2cd2719560b4f82e7474f36344655ff79ad46c2ac97b35dc741cd129e615d", + "bytes": 4925, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical undamaged valuable sprite paired with its damage sheet." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-jangdokdae-normal-b35-t-hp-valuable-jangdokdae-normal-b35", + "assetType": "singleSprite", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_Jangdokdae_Normal_B35", + "sourceRelativePath": "Valuables/Jangdokdae/Normal/B35/T_HP_Valuable_Jangdokdae_Normal_B35.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/Jangdokdae/Normal/B35/T_HP_Valuable_Jangdokdae_Normal_B35.png", + "batch": "B35", + "sha256": "9df8cb6e5235adcd068c90de44c9d73c8d7116902fc3fca125ea189169328ff7", + "bytes": 6887, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical undamaged valuable sprite paired with its damage sheet." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-storagechest-normal-b36-t-hp-valuable-storagechest-normal-b36", + "assetType": "singleSprite", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_StorageChest_Normal_B36", + "sourceRelativePath": "Valuables/StorageChest/Normal/B36/T_HP_Valuable_StorageChest_Normal_B36.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/StorageChest/Normal/B36/T_HP_Valuable_StorageChest_Normal_B36.png", + "batch": "B36", + "sha256": "9ec1ade6385ba9304edcc694e048326723f85dbe666fca60d23c53f91aae7ca2", + "bytes": 6462, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical undamaged valuable sprite paired with its damage sheet." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-tvappliance-normal-b37-t-hp-valuable-tvappliance-normal-b37", + "assetType": "singleSprite", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_TVAppliance_Normal_B37", + "sourceRelativePath": "Valuables/TVAppliance/Normal/B37/T_HP_Valuable_TVAppliance_Normal_B37.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/TVAppliance/Normal/B37/T_HP_Valuable_TVAppliance_Normal_B37.png", + "batch": "B37", + "sha256": "6d7b9173289b6025b2f994e90f5814175c68715cbb4286a8b4806039b02cff44", + "bytes": 6222, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical undamaged valuable sprite paired with its damage sheet." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-wardrobe-normal-b37-t-hp-valuable-wardrobe-normal-b37", + "assetType": "singleSprite", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_Wardrobe_Normal_B37", + "sourceRelativePath": "Valuables/Wardrobe/Normal/B37/T_HP_Valuable_Wardrobe_Normal_B37.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/Wardrobe/Normal/B37/T_HP_Valuable_Wardrobe_Normal_B37.png", + "batch": "B37", + "sha256": "1f4738d5898b870a4e692a7171ae3ae45feba39b861989a2aab75d61082ba9f7", + "bytes": 4772, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical undamaged valuable sprite paired with its damage sheet." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + }, + { + "id": "valuables-waterjug-normal-b36-t-hp-valuable-waterjug-normal-b36", + "assetType": "singleSprite", + "contentKind": "Valuables", + "runtimeRole": "T_HP_Valuable_WaterJug_Normal_B36", + "sourceRelativePath": "Valuables/WaterJug/Normal/B36/T_HP_Valuable_WaterJug_Normal_B36.png", + "destinationPath": "Assets/_Project/Art/Runtime/Valuables/WaterJug/Normal/B36/T_HP_Valuable_WaterJug_Normal_B36.png", + "batch": "B36", + "sha256": "7b1a0438ea7149647476664e1e1b090ff82715d3d12cf2c6553a2b6f28a5acde", + "bytes": 6275, + "image": { + "width": 128, + "height": 128 + }, + "selection": { + "status": "included", + "reason": "Canonical undamaged valuable sprite paired with its damage sheet." + }, + "importer": { + "textureType": "Sprite", + "spriteMode": "Single", + "cell": { + "width": 128, + "height": 128 + }, + "columns": 1, + "rows": 1, + "pixelsPerUnit": 100, + "pivot": "BottomCenter", + "directionRows": [ + + ], + "clipMeaning": "Static", + "frameRate": 0, + "loop": false, + "filterMode": "Point", + "compression": "Uncompressed" + } + } + ] +} diff --git a/Docs/Development/content-integration-status.md b/Docs/Development/content-integration-status.md new file mode 100644 index 0000000..3bdca3c --- /dev/null +++ b/Docs/Development/content-integration-status.md @@ -0,0 +1,41 @@ +# Home Protector Content Integration Status + +Last updated: 2026-08-16 + +## Status keys + +- **Cataloged:** canonical source and runtime role are recorded. +- **Imported:** Unity created or updated texture metadata, slices, clips, and controllers. +- **Wired:** prefab, definition, catalog, dependencies, and scene/campaign exposure are connected. +- **Playtested:** the expected role appeared and worked in a milestone hands-on run. +- **Blocked:** the next mutation requires an active Unity license. + +## Asset baseline + +- Manifest: 103 sheet candidates, 101 included sheets, 2 excluded historical Player Walk sheets, and 22 included single sprites. +- Existing project identities retained: CommonSoldier and Monkey. +- Intentional role split: Bear B20 and BearHeavy B31. +- Import source: `D:/GameAsset/GameAssets/HomeProtector/UnityReadySprites`. +- Runtime destination: `Assets/_Project/Art/Runtime`. +- Current import blocker: expired Unity entitlement; no art has been copied by the harness. + +## Integration matrix + +| Area | Cataloged | Imported | Wired | Playtested | Current note | +|---|---:|---:|---:|---:|---| +| Player (Idle, Walk, Attack, Damage, Sleep, Buff/Repair, Spawn VFX) | Yes | Blocked | Partial legacy | No | Preserve existing voice-tuned player behavior while replacing visual set. | +| Protected resources (Refrigerator, Rice, Bed) | Yes | Blocked | Partial legacy | No | Refrigerator GUID `013bf229ebe2b6247b621e48f6137a06` is canonical; PostBox migration pending. | +| Other valuables/placeables (6 roles) | Yes | Blocked | No | No | Decorative definitions must disable enemy target and total-health contribution. | +| Enemies (14 canonical roles) | Yes | Blocked | Partial legacy | No | Existing CommonSoldier, Monkey, Cockroach, and Bear identities are reused; roster waves pending. | +| Towers (Dryer, BookShelf, CoolDryer, Microwave, Vacuum) | Yes | Blocked | 3 partial, 2 pending | No | Prefer TowerDefinition level data over level-prefab duplication. | +| Projectiles and shared VFX (8 families) | Yes | Blocked | Partial legacy | No | Wire with the owning tower/player content unit. | +| Environment tiles, props, overlays, and themes | Yes | Blocked | No | No | PorchYard mailbox remains a separate environment prop. | +| Runtime game flow | N/A | N/A | Prototype only | No | Final isometric scene still needs GameSession bridge migration. | +| Voice plus keyboard fallback | N/A | N/A | Legacy combined | No | Split source/profile/controller/router while preserving existing log-scale tuning. | + +## Next mutation gate + +1. Activate a Unity Personal license in Unity Hub. +2. Run EditMode tests to obtain a real RED result before runtime production changes. +3. Import only manifest-included records through Unity Editor automation. +4. Wire content in atomic role units, then migrate the final scene last. diff --git a/Docs/Development/playtest-notes.md b/Docs/Development/playtest-notes.md new file mode 100644 index 0000000..a6e3bd9 --- /dev/null +++ b/Docs/Development/playtest-notes.md @@ -0,0 +1,52 @@ +# Home Protector Playtest Notes + +Create one dated section per milestone. Keep Unity and repository verification as concise references; do not paste successful raw logs. + +## Milestone template + +- Milestone: +- Commit/build: +- Date: +- Platform/scene: +- Reviewer: +- Input setup: + - Microphone: + - Keyboard fallback: +- Scoped changes: +- Expected day/wave/theme/content coverage: +- Unity verification summary: +- Repository hygiene summary: +- Known blockers: + +### Hands-on coverage + +| Path | Result | Evidence or note | +|---|---|---| +| Loading ¡æ Preparation | Not run | | +| Placement and tower controls | Not run | | +| Refrigerator, Rice, and Bed behavior | Not run | | +| Combat readability | Not run | | +| Voice activation | Not run | | +| Keyboard fallback / unavailable microphone | Not run | | +| Result ¡æ next day | Not run | | +| Defeat ¡æ same-day retry | Not run | | +| Final completion | Not run | | +| Enemy and tower role variety | Not run | | +| Hit VFX, audio, reactions, and death | Not run | | +| UI clarity | Not run | | +| Environment/theme and promised content exposure | Not run | | + +### Findings + +| Severity | Time/phase | Observation | Player impact | Expected | Reproduction (¡Â4 steps) | Evidence | Owner | +|---|---|---|---|---|---|---|---| + +### Coverage gaps + +- None recorded. + +### Status + +`BLOCKED` + +Use exactly one status: `PLAYABLE`, `PLAYABLE WITH FINDINGS`, or `BLOCKED`. Missing artifact/access is a blocked coverage gap without runtime severity; reserve P0 for an observed core-loop failure. diff --git a/Packages/manifest.json b/Packages/manifest.json index 00d2430..c4edd52 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,12 +1,12 @@ { "dependencies": { "com.unity.ai.navigation": "1.1.5", - "com.unity.collab-proxy": "2.5.2", + "com.unity.collab-proxy": "2.7.1", "com.unity.feature.2d": "2.0.1", - "com.unity.ide.rider": "3.0.28", + "com.unity.ide.rider": "3.0.34", "com.unity.ide.visualstudio": "2.0.22", "com.unity.test-framework": "1.1.33", - "com.unity.textmeshpro": "3.0.6", + "com.unity.textmeshpro": "3.0.7", "com.unity.timeline": "1.7.6", "com.unity.ugui": "1.0.0", "com.unity.visualscripting": "1.9.4", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index bb6e88d..877c77b 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -1,11 +1,11 @@ { "dependencies": { "com.unity.2d.animation": { - "version": "9.1.1", + "version": "9.1.3", "depth": 1, "source": "registry", "dependencies": { - "com.unity.2d.common": "8.0.2", + "com.unity.2d.common": "8.0.4", "com.unity.2d.sprite": "1.0.0", "com.unity.collections": "1.1.0", "com.unity.modules.animation": "1.0.0", @@ -14,7 +14,7 @@ "url": "https://packages.unity.com" }, "com.unity.2d.aseprite": { - "version": "1.1.4", + "version": "1.1.8", "depth": 1, "source": "registry", "dependencies": { @@ -26,7 +26,7 @@ "url": "https://packages.unity.com" }, "com.unity.2d.common": { - "version": "8.0.2", + "version": "8.0.4", "depth": 2, "source": "registry", "dependencies": { @@ -63,11 +63,11 @@ "dependencies": {} }, "com.unity.2d.spriteshape": { - "version": "9.0.3", + "version": "9.0.5", "depth": 1, "source": "registry", "dependencies": { - "com.unity.2d.common": "8.0.2", + "com.unity.2d.common": "8.0.4", "com.unity.mathematics": "1.1.0", "com.unity.modules.physics2d": "1.0.0" }, @@ -83,7 +83,7 @@ } }, "com.unity.2d.tilemap.extras": { - "version": "3.1.2", + "version": "3.1.3", "depth": 1, "source": "registry", "dependencies": { @@ -104,7 +104,7 @@ "url": "https://packages.unity.com" }, "com.unity.burst": { - "version": "1.8.16", + "version": "1.8.19", "depth": 3, "source": "registry", "dependencies": { @@ -114,7 +114,7 @@ "url": "https://packages.unity.com" }, "com.unity.collab-proxy": { - "version": "2.5.2", + "version": "2.7.1", "depth": 0, "source": "registry", "dependencies": {}, @@ -142,18 +142,18 @@ "depth": 0, "source": "builtin", "dependencies": { - "com.unity.2d.animation": "9.1.1", + "com.unity.2d.animation": "9.1.3", "com.unity.2d.pixel-perfect": "5.0.3", "com.unity.2d.psdimporter": "8.0.5", "com.unity.2d.sprite": "1.0.0", - "com.unity.2d.spriteshape": "9.0.3", + "com.unity.2d.spriteshape": "9.0.5", "com.unity.2d.tilemap": "1.0.0", - "com.unity.2d.tilemap.extras": "3.1.2", - "com.unity.2d.aseprite": "1.1.4" + "com.unity.2d.tilemap.extras": "3.1.3", + "com.unity.2d.aseprite": "1.1.8" } }, "com.unity.ide.rider": { - "version": "3.0.28", + "version": "3.0.34", "depth": 0, "source": "registry", "dependencies": { @@ -189,7 +189,7 @@ "url": "https://packages.unity.com" }, "com.unity.textmeshpro": { - "version": "3.0.6", + "version": "3.0.7", "depth": 0, "source": "registry", "dependencies": { diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 976b86c..9483ed8 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -84,6 +84,7 @@ PlayerSettings: muteOtherAudioSources: 0 Prepare IOS For Recording: 0 Force IOS Speakers When Recording: 0 + audioSpatialExperience: 0 deferSystemGesturesMode: 0 hideHomeButton: 0 submitAnalytics: 1 @@ -185,8 +186,10 @@ PlayerSettings: strictShaderVariantMatching: 0 VertexChannelCompressionMask: 4054 iPhoneSdkVersion: 988 + iOSSimulatorArchitecture: 0 iOSTargetOSVersionString: 12.0 tvOSSdkVersion: 0 + tvOSSimulatorArchitecture: 0 tvOSRequireExtendedGameController: 0 tvOSTargetOSVersionString: 12.0 VisionOSSdkVersion: 0 @@ -678,6 +681,7 @@ PlayerSettings: switchSocketBufferEfficiency: 4 switchSocketInitializeEnabled: 1 switchNetworkInterfaceManagerInitializeEnabled: 1 + switchDisableHTCSPlayerConnection: 0 switchUseNewStyleFilepaths: 0 switchUseLegacyFmodPriorities: 0 switchUseMicroSleepForYield: 1 diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index b12da39..75f9809 100644 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 2022.3.37f1 -m_EditorVersionWithRevision: 2022.3.37f1 (340ba89e4c23) +m_EditorVersion: 2022.3.60f1 +m_EditorVersionWithRevision: 2022.3.60f1 (5f63fdee6d95) diff --git a/Tools/Git/Validate-UnityRepo.ps1 b/Tools/Git/Validate-UnityRepo.ps1 new file mode 100644 index 0000000..f803e71 --- /dev/null +++ b/Tools/Git/Validate-UnityRepo.ps1 @@ -0,0 +1,112 @@ +[CmdletBinding()] +param( + [string]$ProjectRoot, + [string]$ManifestPath = "Docs/Development/asset-import-manifest.json" +) + +$ErrorActionPreference = "Stop" +$failures = [System.Collections.Generic.List[string]]::new() +if ([string]::IsNullOrWhiteSpace($ProjectRoot)) { + $ProjectRoot = (Resolve-Path (Join-Path $PSScriptRoot "../..")).Path +} + +$root = (Resolve-Path -LiteralPath $ProjectRoot).Path +$rootForGit = $root.Replace('\', '/') +$legacyLargeFiles = @( + 'Assets/TextMesh Pro/Fonts/Maplestory Bold SDF.asset', + 'Assets/TextMesh Pro/Fonts/Maplestory Light SDF.asset', + 'Assets/TextMesh Pro/Fonts/NotoSansKR-Light SDF.asset' +) + +function Add-Failure([string]$message) { + $script:failures.Add($message) +} + +$versionFile = Join-Path $root "ProjectSettings/ProjectVersion.txt" +if (-not (Test-Path -LiteralPath $versionFile -PathType Leaf)) { + Add-Failure "Missing ProjectSettings/ProjectVersion.txt" +} else { + $versionText = Get-Content -LiteralPath $versionFile -Raw -Encoding UTF8 + if ($versionText -notmatch '(?m)^m_EditorVersion:\s*2022\.3\.60f1\s*$') { + Add-Failure "Unity version must be 2022.3.60f1" + } +} + +$repoFiles = @(& git -c "safe.directory=$rootForGit" -c core.quotePath=false -C $root ls-files --cached --others --exclude-standard) +if ($LASTEXITCODE -ne 0) { + throw "git ls-files failed with exit code $LASTEXITCODE" +} + +foreach ($relativePath in $repoFiles) { + $path = $relativePath.Replace('\', '/') + + if ($path -match '(^|/)(Library|Temp|Obj|Build|Builds|Releases)(/|$)') { + Add-Failure "Generated Unity output is not allowed: $path" + } + + if ($path -match '(^|/)(Frames|QualityRefresh)(/|$)' -or + $path -match '(?i)(fullres|native)') { + Add-Failure "Raw or intermediate art is not allowed: $path" + } + + $extension = [System.IO.Path]::GetExtension($path) + if ($extension -ieq '.exe' -or + ($extension -ieq '.dll' -and $path -notmatch '(?i)^Assets/Plugins/')) { + Add-Failure "Generated executable or assembly is not allowed: $path" + } + + $absolutePath = Join-Path $root $relativePath + if (Test-Path -LiteralPath $absolutePath -PathType Leaf) { + $length = (Get-Item -LiteralPath $absolutePath).Length + if ($length -gt 20MB -and $legacyLargeFiles -notcontains $path) { + Add-Failure "File exceeds 20 MiB: $path ($length bytes)" + } + } +} + +$assetsRoot = Join-Path $root "Assets" +$assetFiles = @() +if (Test-Path -LiteralPath $assetsRoot -PathType Container) { + $assetFiles = @(Get-ChildItem -LiteralPath $assetsRoot -Recurse -File -Force) + foreach ($file in $assetFiles) { + if ($file.Name.EndsWith('.meta', [StringComparison]::OrdinalIgnoreCase)) { + $target = $file.FullName.Substring(0, $file.FullName.Length - 5) + if (-not (Test-Path -LiteralPath $target)) { + Add-Failure "Orphan meta file: $($file.FullName.Substring($root.Length + 1))" + } + continue + } + + if (-not (Test-Path -LiteralPath ($file.FullName + '.meta') -PathType Leaf)) { + Add-Failure "Missing meta file: $($file.FullName.Substring($root.Length + 1))" + } + } +} + +$manifestAbsolutePath = Join-Path $root $ManifestPath +$manifestCount = 0 +if (-not (Test-Path -LiteralPath $manifestAbsolutePath -PathType Leaf)) { + Add-Failure "Missing asset import manifest: $ManifestPath" +} else { + try { + $manifest = Get-Content -LiteralPath $manifestAbsolutePath -Raw -Encoding UTF8 | ConvertFrom-Json + if ($manifest.schemaVersion -ne 1) { + Add-Failure "Manifest schemaVersion must be 1" + } + if ($null -eq $manifest.entries) { + Add-Failure "Manifest must contain an entries array" + } else { + $manifestCount = @($manifest.entries).Count + } + } catch { + Add-Failure "Manifest JSON is invalid: $($_.Exception.Message)" + } +} + +if ($failures.Count -gt 0) { + Write-Host "FAIL unity-repo-hygiene failures=$($failures.Count)" + $failures | Sort-Object -Unique | ForEach-Object { Write-Host " - $_" } + exit 1 +} + +Write-Host "PASS unity-repo-hygiene files=$($repoFiles.Count) assets=$($assetFiles.Count) manifest=$manifestCount" diff --git a/Tools/Unity/Invoke-HomeProtectorUnity.ps1 b/Tools/Unity/Invoke-HomeProtectorUnity.ps1 new file mode 100644 index 0000000..4f31bff --- /dev/null +++ b/Tools/Unity/Invoke-HomeProtectorUnity.ps1 @@ -0,0 +1,131 @@ +[CmdletBinding()] +param( + [ValidateSet('EditMode', 'PlayMode', 'Validate')] + [string]$Mode = 'EditMode', + [string]$ProjectRoot, + [string]$UnityPath = $env:UNITY_EDITOR_PATH +) + +$ErrorActionPreference = 'Stop' +if ([string]::IsNullOrWhiteSpace($ProjectRoot)) { + $ProjectRoot = (Resolve-Path (Join-Path $PSScriptRoot "../..")).Path +} + +$root = (Resolve-Path -LiteralPath $ProjectRoot).Path + +if ([string]::IsNullOrWhiteSpace($UnityPath)) { + $candidates = @( + 'E:\tools\2022.3.60f1\Editor\Unity.exe', + 'C:\Program Files\Unity\Hub\Editor\2022.3.60f1\Editor\Unity.exe' + ) + $UnityPath = $candidates | Where-Object { Test-Path -LiteralPath $_ -PathType Leaf } | Select-Object -First 1 +} + +if ([string]::IsNullOrWhiteSpace($UnityPath) -or -not (Test-Path -LiteralPath $UnityPath -PathType Leaf)) { + throw 'Unity 2022.3.60f1 was not found. Set UNITY_EDITOR_PATH or pass -UnityPath.' +} + +$resultDirectory = Join-Path $root 'Logs/HomeProtectorAutomation' +New-Item -ItemType Directory -Path $resultDirectory -Force | Out-Null +$modeSlug = $Mode.ToLowerInvariant() +$logPath = Join-Path $resultDirectory "$modeSlug.log" +$resultPath = Join-Path $resultDirectory "$modeSlug-results.xml" + +if ($Mode -in @('EditMode', 'PlayMode') -and (Test-Path -LiteralPath $resultPath -PathType Leaf)) { + Remove-Item -LiteralPath $resultPath -Force +} + +$arguments = @( + '-batchmode', + '-nographics', + '-projectPath', $root, + '-logFile', $logPath +) + +if ($Mode -eq 'Validate') { + $arguments += '-quit' +} + +switch ($Mode) { + 'EditMode' { + $arguments += @('-runTests', '-testPlatform', 'EditMode', '-testResults', $resultPath) + } + 'PlayMode' { + $arguments += @('-runTests', '-testPlatform', 'PlayMode', '-testResults', $resultPath) + } + 'Validate' { + $arguments += @('-executeMethod', 'HomeProtector.Editor.AssetPipeline.HomeProtectorAutomation.ValidateProject') + } +} + +$processArguments = @($arguments | ForEach-Object { + $value = [string]$_ + if ($value -match '[\s"]') { + return '"' + $value.Replace('"', '\"') + '"' + } + return $value +}) +$unityProcess = Start-Process -FilePath $UnityPath ` + -ArgumentList $processArguments ` + -PassThru ` + -WindowStyle Hidden +$unityProcess.WaitForExit() +$exitCode = $unityProcess.ExitCode +$logText = if (Test-Path -LiteralPath $logPath) { + Get-Content -LiteralPath $logPath -Raw -Encoding UTF8 +} else { + '' +} + +if ($logText -match 'No valid Unity Editor license found|LICENSE SYSTEM.*No valid license') { + Write-Host "BLOCKED unity-$modeSlug reason=missing-license log=$logPath" + exit 3 +} + +if ($Mode -in @('EditMode', 'PlayMode')) { + if (Test-Path -LiteralPath $resultPath -PathType Leaf) { + [xml]$results = Get-Content -LiteralPath $resultPath -Raw -Encoding UTF8 + $run = $results.'test-run' + if ($null -eq $run) { + Write-Host "FAIL unity-$modeSlug reason=invalid-results result=$resultPath log=$logPath" + exit 2 + } + + $total = [int]$run.total + $passed = [int]$run.passed + $failed = [int]$run.failed + if ($total -le 0) { + Write-Host "FAIL unity-$modeSlug reason=no-tests result=$resultPath log=$logPath" + exit 2 + } + + + if ($failed -gt 0) { + Write-Host "FAIL unity-$modeSlug total=$total passed=$passed failed=$failed result=$resultPath log=$logPath" + exit 1 + } + + if ($exitCode -ne 0) { + Write-Host "FAIL unity-$modeSlug exit=$exitCode total=$total passed=$passed failed=$failed result=$resultPath log=$logPath" + exit $exitCode + } + + Write-Host "PASS unity-$modeSlug total=$total passed=$passed failed=$failed result=$resultPath" + exit 0 + } + + if ($exitCode -ne 0) { + Write-Host "FAIL unity-$modeSlug exit=$exitCode log=$logPath" + exit $exitCode + } + + Write-Host "FAIL unity-$modeSlug reason=missing-results log=$logPath" + exit 2 +} + +if ($exitCode -ne 0) { + Write-Host "FAIL unity-$modeSlug exit=$exitCode log=$logPath" + exit $exitCode +} + +Write-Host "PASS unity-$modeSlug log=$logPath" diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector.exe" "b/\354\203\210 \355\217\264\353\215\224/Home Protector.exe" deleted file mode 100644 index 0cd2e53..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector.exe" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_BurstDebugInformation_DoNotShip/Data/Plugins/x86_64/lib_burst_generated.txt" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_BurstDebugInformation_DoNotShip/Data/Plugins/x86_64/lib_burst_generated.txt" deleted file mode 100644 index fe86762..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/Home Protector_BurstDebugInformation_DoNotShip/Data/Plugins/x86_64/lib_burst_generated.txt" +++ /dev/null @@ -1,96 +0,0 @@ -Library: C:\Unity github\Home Protector\Temp\BurstOutput\Data\Plugins\x86_64\lib_burst_generated ---platform=Windows ---backend=burst-llvm-16 ---target=X64_SSE2 ---global-safety-checks-setting=Off ---meta-data-generation=False ---dump=Function ---float-precision=Standard ---target-framework=NetFramework ---linker-options=PdbAltPath="Home Protector_Data/Plugins/x86_64/lib_burst_generated.pdb" ---generate-link-xml=Temp\burst.link.xml ---temp-folder=C:\Unity github\Home Protector\Temp\Burst ---key-folder=C:/Program Files/Unity/Hub/Editor/2022.3.37f1/Editor/Data/PlaybackEngines/WindowsStandaloneSupport ---decode-folder=C:\Unity github\Home Protector\Library\Burst ---output=C:\Unity github\Home Protector\Temp\BurstOutput\Data\Plugins\x86_64\lib_burst_generated ---pdb-search-paths=Temp/ManagedSymbols/ - ---method=Unity.Burst.BurstCompiler+BurstCompilerHelper, Unity.Burst, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::IsBurstEnabled()--8c2be93e18276203cbd918daa2748a10 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeHashMapDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeHashMapDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--82b0ba09e7cb740f2e20482d3814830b ---method=Unity.Collections.xxHash3, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Hash64Long(System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--93df17b7366cd622dfa5ea2d3c75cf0b ---method=UnityEngine.U2D.SpriteShapeGenerator, Unity.2D.SpriteShape.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::UTessellator(UnityEngine.U2D.SpriteShapeSegment&, UnityEngine.SpriteShapeModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Mathematics.float2*, Unity.Mathematics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.UInt16*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Int32&, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Int32&, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Collections.Allocator, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)--061acaf8bf970e2528896e65f9c91f2c ---method=Unity.Jobs.IJobParallelForExtensions+ParallelForJobStruct`1[[UnityEngine.U2D.Animation.CopySpriteRendererBuffersJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.CopySpriteRendererBuffersJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--2b06055de97035295dc032db19a3a735 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.NativeListDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.NativeListDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--4a1dc7df3f09b836e86a41d0d8fb4229 ---method=UnityEngine.Jobs.IJobParallelForTransformExtensions+TransformParallelForLoopStruct`1[[UnityEngine.U2D.Animation.WorldToLocalTransformAccessJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.WorldToLocalTransformAccessJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--b0197e8b2118e6410ef3f798b24a1e6e ---method=UnityEngine.U2D.Animation.BurstedSpriteSkinUtilities, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::ValidateBoneWeights(UnityEngine.U2D.Animation.NativeCustomSlice`1[[UnityEngine.BoneWeight, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--9425db96a9fb33479746c6501570455e ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.NativeReferenceDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.NativeReferenceDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--baf840f8150b604b0fd300ceb19dd50e ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[UnityEngine.U2D.Animation.PrepareDeformJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.PrepareDeformJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--a10c29fb1a626a4dab6bf90980926746 ---method=Unity.Burst.Intrinsics.X86, Unity.Burst, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::DoSetCSRTrampoline(System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--da352d92cabf024fc9986011d52a4537 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeStream+ConstructJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeStream+ConstructJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--164a9957f2c75e5d4b481d1ceff90393 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.NativeQueueDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.NativeQueueDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--68a8ea65a4f1ea752d1138be3be73a9a ---method=Unity.Collections.xxHash3, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Hash128Long(System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Mathematics.uint4&, Unity.Mathematics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null)--f7daf29273ab2f86d86c27c3a1d6eeb5 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeStream+ConstructJobList, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeStream+ConstructJobList&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--428d454056b9288c93f4435d6e6f7fda ---method=Unity.Collections.RewindableAllocator, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Try(System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Collections.AllocatorManager+Block&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)--cf20d690c33ab495d44c548cd6a31428 ---method=Unity.Collections.AllocatorManager+SlabAllocator, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Try(System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Collections.AllocatorManager+Block&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)--2434a4c10d01dbab5e7438b2b580d1d1 ---method=Unity.Collections.AllocatorManager+StackAllocator, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Try(System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Collections.AllocatorManager+Block&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)--478bf3abafa12cba2083fb45bca79b9c ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeHashMapDataDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeHashMapDataDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--2ef0a503423574beae197ba4b01ed0be ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[UnityEngine.U2D.Animation.FillPerSkinJobSingleThread, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.FillPerSkinJobSingleThread&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--7194d9a68a20c1c6a01d3a365d4f21b9 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.NativeStream+ConstructJobList, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.NativeStream+ConstructJobList&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--959783104064e8c81fba5d33d94ead01 ---method=UnityEngine.Jobs.IJobParallelForTransformExtensions+TransformParallelForLoopStruct`1[[UnityEngine.U2D.Animation.LocalToWorldTransformAccessJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.LocalToWorldTransformAccessJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--f9554e48e09171c93d417c182c09c36b ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[UnityEngine.U2D.SpriteShapeGenerator, Unity.2D.SpriteShape.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.SpriteShapeGenerator&, Unity.2D.SpriteShape.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--a185c62eba2497c95197140e5282b27a ---method=Unity.Jobs.IJobParallelForExtensions+ParallelForJobStruct`1[[UnityEngine.U2D.Animation.BoneDeformBatchedJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.BoneDeformBatchedJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--6d933222c5b0c0c915d062861958d408 ---method=Unity.Jobs.IJobParallelForExtensions+ParallelForJobStruct`1[[UnityEngine.U2D.Animation.CalculateSpriteSkinAABBJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.CalculateSpriteSkinAABBJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--122fae680333e8e2ba58f80110a0a78c ---method=Unity.Jobs.IJobParallelForExtensions+ParallelForJobStruct`1[[UnityEngine.U2D.Animation.SkinDeformBatchedJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.SkinDeformBatchedJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--aece0ca012db7ae9f82cc8b3c490870a ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeStream+DisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeStream+DisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--ca60ab232d19a9f4380a530fa0d222cf ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--276b96e48754d7f5ba865bd7f5b37c11 ---method=Unity.Jobs.IJobParallelForExtensions+ParallelForJobStruct`1[[UnityEngine.U2D.Animation.UpdateBoundJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.UpdateBoundJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--381a3a85c237f2f5ef34ba69d4bda072 ---method=Unity.Burst.Intrinsics.X86, Unity.Burst, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::DoGetCSRTrampoline()--89425a97f3f500fa810ad03f0c382542 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.NativeStream+ConstructJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.NativeStream+ConstructJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--b78f808503c8b5fe97a83e833bd5871d ---platform=Windows ---backend=burst-llvm-16 ---target=AVX2 ---global-safety-checks-setting=Off ---meta-data-generation=False ---dump=Function ---float-precision=Standard ---target-framework=NetFramework ---linker-options=PdbAltPath="Home Protector_Data/Plugins/x86_64/lib_burst_generated.pdb" ---generate-link-xml=Temp\burst.link.xml ---temp-folder=C:\Unity github\Home Protector\Temp\Burst ---key-folder=C:/Program Files/Unity/Hub/Editor/2022.3.37f1/Editor/Data/PlaybackEngines/WindowsStandaloneSupport ---decode-folder=C:\Unity github\Home Protector\Library\Burst ---output=C:\Unity github\Home Protector\Temp\BurstOutput\Data\Plugins\x86_64\lib_burst_generated ---pdb-search-paths=Temp/ManagedSymbols/ - ---method=Unity.Burst.BurstCompiler+BurstCompilerHelper, Unity.Burst, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::IsBurstEnabled()--8c2be93e18276203cbd918daa2748a10 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeHashMapDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeHashMapDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--82b0ba09e7cb740f2e20482d3814830b ---method=Unity.Collections.xxHash3, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Hash64Long(System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--93df17b7366cd622dfa5ea2d3c75cf0b ---method=UnityEngine.U2D.SpriteShapeGenerator, Unity.2D.SpriteShape.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::UTessellator(UnityEngine.U2D.SpriteShapeSegment&, UnityEngine.SpriteShapeModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Mathematics.float2*, Unity.Mathematics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.UInt16*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Int32&, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Int32&, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Collections.Allocator, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)--061acaf8bf970e2528896e65f9c91f2c ---method=Unity.Jobs.IJobParallelForExtensions+ParallelForJobStruct`1[[UnityEngine.U2D.Animation.CopySpriteRendererBuffersJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.CopySpriteRendererBuffersJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--2b06055de97035295dc032db19a3a735 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.NativeListDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.NativeListDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--4a1dc7df3f09b836e86a41d0d8fb4229 ---method=UnityEngine.Jobs.IJobParallelForTransformExtensions+TransformParallelForLoopStruct`1[[UnityEngine.U2D.Animation.WorldToLocalTransformAccessJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.WorldToLocalTransformAccessJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--b0197e8b2118e6410ef3f798b24a1e6e ---method=UnityEngine.U2D.Animation.BurstedSpriteSkinUtilities, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::ValidateBoneWeights(UnityEngine.U2D.Animation.NativeCustomSlice`1[[UnityEngine.BoneWeight, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]]&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--9425db96a9fb33479746c6501570455e ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.NativeReferenceDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.NativeReferenceDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--baf840f8150b604b0fd300ceb19dd50e ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[UnityEngine.U2D.Animation.PrepareDeformJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.PrepareDeformJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--a10c29fb1a626a4dab6bf90980926746 ---method=Unity.Burst.Intrinsics.X86, Unity.Burst, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::DoSetCSRTrampoline(System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--da352d92cabf024fc9986011d52a4537 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeStream+ConstructJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeStream+ConstructJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--164a9957f2c75e5d4b481d1ceff90393 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.NativeQueueDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.NativeQueueDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--68a8ea65a4f1ea752d1138be3be73a9a ---method=Unity.Collections.xxHash3, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Hash128Long(System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Int64, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.Byte*, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Mathematics.uint4&, Unity.Mathematics, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null)--f7daf29273ab2f86d86c27c3a1d6eeb5 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeStream+ConstructJobList, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeStream+ConstructJobList&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--428d454056b9288c93f4435d6e6f7fda ---method=Unity.Collections.RewindableAllocator, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Try(System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Collections.AllocatorManager+Block&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)--cf20d690c33ab495d44c548cd6a31428 ---method=Unity.Collections.AllocatorManager+SlabAllocator, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Try(System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Collections.AllocatorManager+Block&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)--2434a4c10d01dbab5e7438b2b580d1d1 ---method=Unity.Collections.AllocatorManager+StackAllocator, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Try(System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Collections.AllocatorManager+Block&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)--478bf3abafa12cba2083fb45bca79b9c ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeHashMapDataDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeHashMapDataDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--2ef0a503423574beae197ba4b01ed0be ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[UnityEngine.U2D.Animation.FillPerSkinJobSingleThread, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.FillPerSkinJobSingleThread&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--7194d9a68a20c1c6a01d3a365d4f21b9 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.NativeStream+ConstructJobList, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.NativeStream+ConstructJobList&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--959783104064e8c81fba5d33d94ead01 ---method=UnityEngine.Jobs.IJobParallelForTransformExtensions+TransformParallelForLoopStruct`1[[UnityEngine.U2D.Animation.LocalToWorldTransformAccessJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.LocalToWorldTransformAccessJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--f9554e48e09171c93d417c182c09c36b ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[UnityEngine.U2D.SpriteShapeGenerator, Unity.2D.SpriteShape.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.SpriteShapeGenerator&, Unity.2D.SpriteShape.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--a185c62eba2497c95197140e5282b27a ---method=Unity.Jobs.IJobParallelForExtensions+ParallelForJobStruct`1[[UnityEngine.U2D.Animation.BoneDeformBatchedJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.BoneDeformBatchedJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--6d933222c5b0c0c915d062861958d408 ---method=Unity.Jobs.IJobParallelForExtensions+ParallelForJobStruct`1[[UnityEngine.U2D.Animation.CalculateSpriteSkinAABBJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.CalculateSpriteSkinAABBJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--122fae680333e8e2ba58f80110a0a78c ---method=Unity.Jobs.IJobParallelForExtensions+ParallelForJobStruct`1[[UnityEngine.U2D.Animation.SkinDeformBatchedJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.SkinDeformBatchedJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--aece0ca012db7ae9f82cc8b3c490870a ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeStream+DisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeStream+DisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--ca60ab232d19a9f4380a530fa0d222cf ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.LowLevel.Unsafe.UnsafeDisposeJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.LowLevel.Unsafe.UnsafeDisposeJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--276b96e48754d7f5ba865bd7f5b37c11 ---method=Unity.Jobs.IJobParallelForExtensions+ParallelForJobStruct`1[[UnityEngine.U2D.Animation.UpdateBoundJob, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(UnityEngine.U2D.Animation.UpdateBoundJob&, Unity.2D.Animation.Runtime, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--381a3a85c237f2f5ef34ba69d4bda072 ---method=Unity.Burst.Intrinsics.X86, Unity.Burst, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::DoGetCSRTrampoline()--89425a97f3f500fa810ad03f0c382542 ---method=Unity.Jobs.IJobExtensions+JobStruct`1[[Unity.Collections.NativeStream+ConstructJob, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null]], UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null::Execute(Unity.Collections.NativeStream+ConstructJob&, Unity.Collections, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|System.IntPtr, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089|Unity.Jobs.LowLevel.Unsafe.JobRanges&, UnityEngine.CoreModule, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null|System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)--b78f808503c8b5fe97a83e833bd5871d - diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Assembly-CSharp.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Assembly-CSharp.dll" deleted file mode 100644 index f5c525a..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Assembly-CSharp.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/LiteDB.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/LiteDB.dll" deleted file mode 100644 index eded373..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/LiteDB.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Mono.Security.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Mono.Security.dll" deleted file mode 100644 index 59bff7b..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Mono.Security.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Collections.Concurrent.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Collections.Concurrent.dll" deleted file mode 100644 index bcb9a5e..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Collections.Concurrent.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Collections.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Collections.dll" deleted file mode 100644 index 51a515a..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Collections.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.ComponentModel.Composition.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.ComponentModel.Composition.dll" deleted file mode 100644 index d3678ac..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.ComponentModel.Composition.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Configuration.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Configuration.dll" deleted file mode 100644 index 7984438..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Configuration.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Core.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Core.dll" deleted file mode 100644 index e2cc691..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Core.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Data.DataSetExtensions.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Data.DataSetExtensions.dll" deleted file mode 100644 index 373e0d2..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Data.DataSetExtensions.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Data.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Data.dll" deleted file mode 100644 index 4c7750c..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Data.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Diagnostics.Debug.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Diagnostics.Debug.dll" deleted file mode 100644 index dcf1ebc..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Diagnostics.Debug.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Drawing.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Drawing.dll" deleted file mode 100644 index 6649770..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Drawing.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.EnterpriseServices.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.EnterpriseServices.dll" deleted file mode 100644 index f6c4979..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.EnterpriseServices.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Globalization.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Globalization.dll" deleted file mode 100644 index 7599003..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Globalization.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.Compression.FileSystem.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.Compression.FileSystem.dll" deleted file mode 100644 index 42dc20f..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.Compression.FileSystem.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.Compression.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.Compression.dll" deleted file mode 100644 index e741db0..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.Compression.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.FileSystem.Primitives.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.FileSystem.Primitives.dll" deleted file mode 100644 index 5ad17b2..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.FileSystem.Primitives.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.FileSystem.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.FileSystem.dll" deleted file mode 100644 index b259fc2..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.FileSystem.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.dll" deleted file mode 100644 index 8dcb896..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.IO.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Linq.Expressions.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Linq.Expressions.dll" deleted file mode 100644 index ff9e76d..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Linq.Expressions.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Linq.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Linq.dll" deleted file mode 100644 index 16a4414..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Linq.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Net.Http.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Net.Http.dll" deleted file mode 100644 index 9ce971c..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Net.Http.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Numerics.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Numerics.dll" deleted file mode 100644 index ea84d45..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Numerics.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Reflection.Extensions.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Reflection.Extensions.dll" deleted file mode 100644 index d7dc48d..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Reflection.Extensions.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Reflection.TypeExtensions.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Reflection.TypeExtensions.dll" deleted file mode 100644 index 862e2de..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Reflection.TypeExtensions.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Reflection.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Reflection.dll" deleted file mode 100644 index d1fe470..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Reflection.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Resources.ResourceManager.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Resources.ResourceManager.dll" deleted file mode 100644 index 40e2095..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Resources.ResourceManager.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.Extensions.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.Extensions.dll" deleted file mode 100644 index a87c47d..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.Extensions.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.InteropServices.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.InteropServices.dll" deleted file mode 100644 index 3735b02..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.InteropServices.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.Serialization.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.Serialization.dll" deleted file mode 100644 index 98cfc6d..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.Serialization.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.dll" deleted file mode 100644 index fcb17d5..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Runtime.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Security.Cryptography.Algorithms.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Security.Cryptography.Algorithms.dll" deleted file mode 100644 index 638a4cf..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Security.Cryptography.Algorithms.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Security.Cryptography.Primitives.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Security.Cryptography.Primitives.dll" deleted file mode 100644 index 2a3a180..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Security.Cryptography.Primitives.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Security.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Security.dll" deleted file mode 100644 index 66303d6..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Security.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.ServiceModel.Internals.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.ServiceModel.Internals.dll" deleted file mode 100644 index 0b059ea..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.ServiceModel.Internals.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Text.Encoding.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Text.Encoding.dll" deleted file mode 100644 index 5bdf543..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Text.Encoding.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Text.RegularExpressions.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Text.RegularExpressions.dll" deleted file mode 100644 index ce93271..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Text.RegularExpressions.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Threading.Tasks.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Threading.Tasks.dll" deleted file mode 100644 index ca68dd4..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Threading.Tasks.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Threading.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Threading.dll" deleted file mode 100644 index c7823d3..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Threading.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Transactions.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Transactions.dll" deleted file mode 100644 index ec8ceaf..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Transactions.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Xml.Linq.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Xml.Linq.dll" deleted file mode 100644 index a909757..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Xml.Linq.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Xml.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Xml.dll" deleted file mode 100644 index 6705e80..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.Xml.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.dll" deleted file mode 100644 index b7a54aa..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/System.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.Animation.Runtime.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.Animation.Runtime.dll" deleted file mode 100644 index 99cb060..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.Animation.Runtime.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.Common.Runtime.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.Common.Runtime.dll" deleted file mode 100644 index 2c35e9c..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.Common.Runtime.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.IK.Runtime.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.IK.Runtime.dll" deleted file mode 100644 index aa8ed82..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.IK.Runtime.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.PixelPerfect.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.PixelPerfect.dll" deleted file mode 100644 index 9ca1fab..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.PixelPerfect.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.SpriteShape.Runtime.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.SpriteShape.Runtime.dll" deleted file mode 100644 index 68eae7a..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.SpriteShape.Runtime.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.Tilemap.Extras.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.Tilemap.Extras.dll" deleted file mode 100644 index ef17930..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.2D.Tilemap.Extras.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Burst.Unsafe.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Burst.Unsafe.dll" deleted file mode 100644 index ac36cfa..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Burst.Unsafe.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Burst.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Burst.dll" deleted file mode 100644 index 13df60f..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Burst.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Collections.LowLevel.ILSupport.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Collections.LowLevel.ILSupport.dll" deleted file mode 100644 index a0248a9..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Collections.LowLevel.ILSupport.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Collections.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Collections.dll" deleted file mode 100644 index 6b81757..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Collections.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.InternalAPIEngineBridge.001.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.InternalAPIEngineBridge.001.dll" deleted file mode 100644 index 45e41a7..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.InternalAPIEngineBridge.001.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Mathematics.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Mathematics.dll" deleted file mode 100644 index e67f12a..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Mathematics.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.RenderPipelines.Core.Runtime.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.RenderPipelines.Core.Runtime.dll" deleted file mode 100644 index b939f20..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.RenderPipelines.Core.Runtime.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.RenderPipelines.Core.ShaderLibrary.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.RenderPipelines.Core.ShaderLibrary.dll" deleted file mode 100644 index c94bd31..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.RenderPipelines.Core.ShaderLibrary.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.dll" deleted file mode 100644 index 62ba237..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.TextMeshPro.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.TextMeshPro.dll" deleted file mode 100644 index a68872b..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.TextMeshPro.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Timeline.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Timeline.dll" deleted file mode 100644 index 3d74383..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.Timeline.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.Antlr3.Runtime.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.Antlr3.Runtime.dll" deleted file mode 100644 index d7de8d6..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.Antlr3.Runtime.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.Core.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.Core.dll" deleted file mode 100644 index 0d42f0e..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.Core.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.Flow.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.Flow.dll" deleted file mode 100644 index 7f809cf..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.Flow.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.State.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.State.dll" deleted file mode 100644 index adb32af..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/Unity.VisualScripting.State.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AIModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AIModule.dll" deleted file mode 100644 index 2ad673c..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AIModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ARModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ARModule.dll" deleted file mode 100644 index a6e3f1d..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ARModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AccessibilityModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AccessibilityModule.dll" deleted file mode 100644 index 3a52272..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AccessibilityModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AndroidJNIModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AndroidJNIModule.dll" deleted file mode 100644 index 8dcdfd8..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AndroidJNIModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AnimationModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AnimationModule.dll" deleted file mode 100644 index 2d36639..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AnimationModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AssetBundleModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AssetBundleModule.dll" deleted file mode 100644 index dd8090d..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AssetBundleModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AudioModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AudioModule.dll" deleted file mode 100644 index 2d20938..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.AudioModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ClothModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ClothModule.dll" deleted file mode 100644 index d91cbad..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ClothModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ClusterInputModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ClusterInputModule.dll" deleted file mode 100644 index 5f6d85e..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ClusterInputModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ClusterRendererModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ClusterRendererModule.dll" deleted file mode 100644 index eadbfd6..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ClusterRendererModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ContentLoadModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ContentLoadModule.dll" deleted file mode 100644 index 9417c92..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ContentLoadModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.CoreModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.CoreModule.dll" deleted file mode 100644 index bc6b0a4..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.CoreModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.CrashReportingModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.CrashReportingModule.dll" deleted file mode 100644 index 0b772be..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.CrashReportingModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.DSPGraphModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.DSPGraphModule.dll" deleted file mode 100644 index 0bafe06..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.DSPGraphModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.DirectorModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.DirectorModule.dll" deleted file mode 100644 index f69c8ec..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.DirectorModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.GIModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.GIModule.dll" deleted file mode 100644 index 67254d9..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.GIModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.GameCenterModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.GameCenterModule.dll" deleted file mode 100644 index bc0cd5d..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.GameCenterModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.GridModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.GridModule.dll" deleted file mode 100644 index e02fe3f..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.GridModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.HotReloadModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.HotReloadModule.dll" deleted file mode 100644 index b9c8e27..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.HotReloadModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.IMGUIModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.IMGUIModule.dll" deleted file mode 100644 index 655a95e..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.IMGUIModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ImageConversionModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ImageConversionModule.dll" deleted file mode 100644 index 4a9aff2..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ImageConversionModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.InputLegacyModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.InputLegacyModule.dll" deleted file mode 100644 index e879d63..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.InputLegacyModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.InputModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.InputModule.dll" deleted file mode 100644 index 7d980ed..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.InputModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.JSONSerializeModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.JSONSerializeModule.dll" deleted file mode 100644 index 4437bc6..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.JSONSerializeModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.LocalizationModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.LocalizationModule.dll" deleted file mode 100644 index 30b3fc4..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.LocalizationModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.NVIDIAModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.NVIDIAModule.dll" deleted file mode 100644 index d01d9c8..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.NVIDIAModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ParticleSystemModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ParticleSystemModule.dll" deleted file mode 100644 index e8f822a..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ParticleSystemModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.PerformanceReportingModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.PerformanceReportingModule.dll" deleted file mode 100644 index 3ed7459..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.PerformanceReportingModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.Physics2DModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.Physics2DModule.dll" deleted file mode 100644 index 6d4665a..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.Physics2DModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.PhysicsModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.PhysicsModule.dll" deleted file mode 100644 index 45183a2..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.PhysicsModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ProfilerModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ProfilerModule.dll" deleted file mode 100644 index de77222..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ProfilerModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.PropertiesModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.PropertiesModule.dll" deleted file mode 100644 index ab467e7..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.PropertiesModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll" deleted file mode 100644 index 7ea5d8e..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ScreenCaptureModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ScreenCaptureModule.dll" deleted file mode 100644 index e028ed6..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.ScreenCaptureModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SharedInternalsModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SharedInternalsModule.dll" deleted file mode 100644 index 577c966..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SharedInternalsModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SpriteMaskModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SpriteMaskModule.dll" deleted file mode 100644 index 373f2a2..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SpriteMaskModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SpriteShapeModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SpriteShapeModule.dll" deleted file mode 100644 index 49866b7..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SpriteShapeModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.StreamingModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.StreamingModule.dll" deleted file mode 100644 index 10c3c00..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.StreamingModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SubstanceModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SubstanceModule.dll" deleted file mode 100644 index 7b9fc65..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SubstanceModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SubsystemsModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SubsystemsModule.dll" deleted file mode 100644 index 2302fdd..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.SubsystemsModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TLSModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TLSModule.dll" deleted file mode 100644 index d4b76dc..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TLSModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TerrainModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TerrainModule.dll" deleted file mode 100644 index 048dea3..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TerrainModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TerrainPhysicsModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TerrainPhysicsModule.dll" deleted file mode 100644 index ecc1460..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TerrainPhysicsModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TextCoreFontEngineModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TextCoreFontEngineModule.dll" deleted file mode 100644 index c0110c5..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TextCoreFontEngineModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TextCoreTextEngineModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TextCoreTextEngineModule.dll" deleted file mode 100644 index 4a782cc..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TextCoreTextEngineModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TextRenderingModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TextRenderingModule.dll" deleted file mode 100644 index 22d77ae..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TextRenderingModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TilemapModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TilemapModule.dll" deleted file mode 100644 index 1ba2da3..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.TilemapModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UI.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UI.dll" deleted file mode 100644 index 37fcdea..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UI.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UIElementsModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UIElementsModule.dll" deleted file mode 100644 index 65d9640..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UIElementsModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UIModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UIModule.dll" deleted file mode 100644 index 2e328bf..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UIModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UmbraModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UmbraModule.dll" deleted file mode 100644 index 3eaf4f1..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UmbraModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityAnalyticsCommonModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityAnalyticsCommonModule.dll" deleted file mode 100644 index 770fa8d..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityAnalyticsCommonModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityAnalyticsModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityAnalyticsModule.dll" deleted file mode 100644 index 92f1465..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityAnalyticsModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityConnectModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityConnectModule.dll" deleted file mode 100644 index 0b3b4ef..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityConnectModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityCurlModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityCurlModule.dll" deleted file mode 100644 index acd9055..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityCurlModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityTestProtocolModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityTestProtocolModule.dll" deleted file mode 100644 index 225535a..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityTestProtocolModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll" deleted file mode 100644 index a3a997d..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestAssetBundleModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestAudioModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestAudioModule.dll" deleted file mode 100644 index 3160011..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestAudioModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestModule.dll" deleted file mode 100644 index 990d229..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestTextureModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestTextureModule.dll" deleted file mode 100644 index 7f476bd..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestTextureModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestWWWModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestWWWModule.dll" deleted file mode 100644 index add1eb4..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.UnityWebRequestWWWModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VFXModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VFXModule.dll" deleted file mode 100644 index 09af1d7..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VFXModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VRModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VRModule.dll" deleted file mode 100644 index 33152d3..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VRModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VehiclesModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VehiclesModule.dll" deleted file mode 100644 index 2ba0393..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VehiclesModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VideoModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VideoModule.dll" deleted file mode 100644 index b34cf2a..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VideoModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VirtualTexturingModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VirtualTexturingModule.dll" deleted file mode 100644 index 3db7f9e..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.VirtualTexturingModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.WindModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.WindModule.dll" deleted file mode 100644 index f3b39f2..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.WindModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.XRModule.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.XRModule.dll" deleted file mode 100644 index 1209704..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.XRModule.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.dll" deleted file mode 100644 index a37f06d..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/UnityEngine.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/mscorlib.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/mscorlib.dll" deleted file mode 100644 index 0b8d4ad..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/mscorlib.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/netstandard.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/netstandard.dll" deleted file mode 100644 index 12f381a..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Managed/netstandard.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Plugins/x86_64/AppUIMuseNativePlugin.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Plugins/x86_64/AppUIMuseNativePlugin.dll" deleted file mode 100644 index fe90f92..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Plugins/x86_64/AppUIMuseNativePlugin.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Plugins/x86_64/lib_burst_generated.dll" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Plugins/x86_64/lib_burst_generated.dll" deleted file mode 100644 index 4745921..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Plugins/x86_64/lib_burst_generated.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Resources/unity default resources" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Resources/unity default resources" deleted file mode 100644 index 3155a99..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Resources/unity default resources" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Resources/unity_builtin_extra" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Resources/unity_builtin_extra" deleted file mode 100644 index d88d85e..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/Resources/unity_builtin_extra" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/RuntimeInitializeOnLoads.json" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/RuntimeInitializeOnLoads.json" deleted file mode 100644 index 8c5cd04..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/RuntimeInitializeOnLoads.json" +++ /dev/null @@ -1 +0,0 @@ -{"root":[{"assemblyName":"Unity.2D.Animation.Runtime","nameSpace":"","className":"$BurstDirectCallInitializer","methodName":"Initialize","loadTypes":2,"isUnityClass":true},{"assemblyName":"Unity.2D.SpriteShape.Runtime","nameSpace":"","className":"$BurstDirectCallInitializer","methodName":"Initialize","loadTypes":2,"isUnityClass":true},{"assemblyName":"Unity.Collections","nameSpace":"","className":"$BurstDirectCallInitializer","methodName":"Initialize","loadTypes":2,"isUnityClass":true},{"assemblyName":"Unity.RenderPipelines.Core.Runtime","nameSpace":"UnityEngine.Experimental.Rendering","className":"XRSystem","methodName":"XRSystemInit","loadTypes":3,"isUnityClass":true},{"assemblyName":"Unity.RenderPipelines.Core.Runtime","nameSpace":"UnityEngine.Rendering","className":"DebugUpdater","methodName":"RuntimeInit","loadTypes":0,"isUnityClass":true},{"assemblyName":"Unity.VisualScripting.Core","nameSpace":"Unity.VisualScripting","className":"RuntimeVSUsageUtility","methodName":"RuntimeInitializeOnLoadBeforeSceneLoad","loadTypes":1,"isUnityClass":true}]} diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/ScriptingAssemblies.json" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/ScriptingAssemblies.json" deleted file mode 100644 index 210abd0..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/ScriptingAssemblies.json" +++ /dev/null @@ -1 +0,0 @@ -{"names":["UnityEngine.dll","UnityEngine.AIModule.dll","UnityEngine.ARModule.dll","UnityEngine.AccessibilityModule.dll","UnityEngine.AndroidJNIModule.dll","UnityEngine.AnimationModule.dll","UnityEngine.AssetBundleModule.dll","UnityEngine.AudioModule.dll","UnityEngine.ClothModule.dll","UnityEngine.ClusterInputModule.dll","UnityEngine.ClusterRendererModule.dll","UnityEngine.ContentLoadModule.dll","UnityEngine.CoreModule.dll","UnityEngine.CrashReportingModule.dll","UnityEngine.DSPGraphModule.dll","UnityEngine.DirectorModule.dll","UnityEngine.GIModule.dll","UnityEngine.GameCenterModule.dll","UnityEngine.GridModule.dll","UnityEngine.HotReloadModule.dll","UnityEngine.IMGUIModule.dll","UnityEngine.ImageConversionModule.dll","UnityEngine.InputModule.dll","UnityEngine.InputLegacyModule.dll","UnityEngine.JSONSerializeModule.dll","UnityEngine.LocalizationModule.dll","UnityEngine.NVIDIAModule.dll","UnityEngine.ParticleSystemModule.dll","UnityEngine.PerformanceReportingModule.dll","UnityEngine.PhysicsModule.dll","UnityEngine.Physics2DModule.dll","UnityEngine.ProfilerModule.dll","UnityEngine.PropertiesModule.dll","UnityEngine.RuntimeInitializeOnLoadManagerInitializerModule.dll","UnityEngine.ScreenCaptureModule.dll","UnityEngine.SharedInternalsModule.dll","UnityEngine.SpriteMaskModule.dll","UnityEngine.SpriteShapeModule.dll","UnityEngine.StreamingModule.dll","UnityEngine.SubstanceModule.dll","UnityEngine.SubsystemsModule.dll","UnityEngine.TLSModule.dll","UnityEngine.TerrainModule.dll","UnityEngine.TerrainPhysicsModule.dll","UnityEngine.TextCoreFontEngineModule.dll","UnityEngine.TextCoreTextEngineModule.dll","UnityEngine.TextRenderingModule.dll","UnityEngine.TilemapModule.dll","UnityEngine.UIModule.dll","UnityEngine.UIElementsModule.dll","UnityEngine.UmbraModule.dll","UnityEngine.UnityAnalyticsModule.dll","UnityEngine.UnityAnalyticsCommonModule.dll","UnityEngine.UnityConnectModule.dll","UnityEngine.UnityCurlModule.dll","UnityEngine.UnityTestProtocolModule.dll","UnityEngine.UnityWebRequestModule.dll","UnityEngine.UnityWebRequestAssetBundleModule.dll","UnityEngine.UnityWebRequestAudioModule.dll","UnityEngine.UnityWebRequestTextureModule.dll","UnityEngine.UnityWebRequestWWWModule.dll","UnityEngine.VFXModule.dll","UnityEngine.VRModule.dll","UnityEngine.VehiclesModule.dll","UnityEngine.VideoModule.dll","UnityEngine.VirtualTexturingModule.dll","UnityEngine.WindModule.dll","UnityEngine.XRModule.dll","Assembly-CSharp.dll","Unity.2D.IK.Runtime.dll","Unity.RenderPipelines.Core.Runtime.dll","Unity.VisualScripting.Flow.dll","Unity.RenderPipelines.Core.ShaderLibrary.dll","Unity.Collections.dll","Unity.2D.SpriteShape.Runtime.dll","Unity.2D.PixelPerfect.dll","Unity.TextMeshPro.dll","Unity.RenderPipelines.ShaderGraph.ShaderGraphLibrary.dll","Unity.Burst.dll","Unity.VisualScripting.Core.dll","Unity.2D.Animation.Runtime.dll","Unity.2D.Tilemap.Extras.dll","UnityEngine.UI.dll","Unity.InternalAPIEngineBridge.001.dll","Unity.2D.Common.Runtime.dll","Unity.Timeline.dll","Unity.Mathematics.dll","Unity.VisualScripting.State.dll","LiteDB.dll","Unity.Collections.LowLevel.ILSupport.dll","Unity.VisualScripting.Antlr3.Runtime.dll","Unity.Burst.Unsafe.dll"],"types":[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16]} \ No newline at end of file diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/app.info" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/app.info" deleted file mode 100644 index bb6e745..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/app.info" +++ /dev/null @@ -1,2 +0,0 @@ -DefaultCompany -Home Protector \ No newline at end of file diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/boot.config" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/boot.config" deleted file mode 100644 index 569db36..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/boot.config" +++ /dev/null @@ -1,4 +0,0 @@ -wait-for-native-debugger=0 -hdr-display-enabled=0 -gc-max-time-slice=3 -build-guid=f08c0aa646334283b8d1e45b4125f874 diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/globalgamemanagers" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/globalgamemanagers" deleted file mode 100644 index 64ac4b5..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/globalgamemanagers" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/globalgamemanagers.assets" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/globalgamemanagers.assets" deleted file mode 100644 index f510066..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/globalgamemanagers.assets" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/globalgamemanagers.assets.resS" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/globalgamemanagers.assets.resS" deleted file mode 100644 index 719fe0b..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/globalgamemanagers.assets.resS" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/level0" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/level0" deleted file mode 100644 index ab11072..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/level0" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/resources.assets" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/resources.assets" deleted file mode 100644 index 8321e75..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/resources.assets" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/resources.assets.resS" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/resources.assets.resS" deleted file mode 100644 index a3ade34..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/resources.assets.resS" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/sharedassets0.assets" "b/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/sharedassets0.assets" deleted file mode 100644 index 7fa70b3..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/Home Protector_Data/sharedassets0.assets" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/EmbedRuntime/MonoPosixHelper.dll" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/EmbedRuntime/MonoPosixHelper.dll" deleted file mode 100644 index fc08200..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/EmbedRuntime/MonoPosixHelper.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll" deleted file mode 100644 index 4511026..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/EmbedRuntime/mono-2.0-bdwgc.dll" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/Browsers/Compat.browser" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/Browsers/Compat.browser" deleted file mode 100644 index dcedf7f..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/Browsers/Compat.browser" +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx" deleted file mode 100644 index f4d74bf..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx" +++ /dev/null @@ -1,1901 +0,0 @@ -<%-- -// -// DefaultWsdlHelpGenerator.aspx: -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// (C) 2003 Ximian, Inc. http://www.ximian.com -// ---%> - -<%@ Import Namespace="System.Collections" %> -<%@ Import Namespace="System.Collections.Generic" %> -<%@ Import Namespace="System.IO" %> -<%@ Import Namespace="System.Xml.Serialization" %> -<%@ Import Namespace="System.Xml" %> -<%@ Import Namespace="System.Xml.Schema" %> -<%@ Import Namespace="System.Web.Services" %> -<%@ Import Namespace="System.Web.Services.Description" %> -<%@ Import Namespace="System.Web.Services.Configuration" %> -<%@ Import Namespace="System.Web.Configuration" %> -<%@ Import Namespace="System" %> -<%@ Import Namespace="System.Net" %> -<%@ Import Namespace="System.Globalization" %> -<%@ Import Namespace="System.Resources" %> -<%@ Import Namespace="System.Diagnostics" %> -<%@ Import Namespace="System.CodeDom" %> -<%@ Import Namespace="System.CodeDom.Compiler" %> -<%@ Import Namespace="Microsoft.CSharp" %> -<%@ Import Namespace="Microsoft.VisualBasic" %> -<%@ Import Namespace="System.Text" %> -<%@ Import Namespace="System.Text.RegularExpressions" %> -<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> -<%@ Assembly name="System.Web.Services" %> -<%@ Page debug="true" %> - - - - - - <% - Response.Write (""); - %> - <%=WebServiceName%> Web Service - - - - - - - -
-Web Service
-<%=WebServiceName%> -
- - - - - - - - -
-
-Overview
-
-Service Description -
-Client proxy -

- - - <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> - - - op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> -
-
-
-
-
-
- -
- -<% if (CurrentPage == "main") {%> - - - -

Web Service Overview

- <%=WebServiceDescription%> -

- <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> -

Basic Profile Conformance

- This web service does not conform to WS-I Basic Profile v1.1 - <% - Response.Write ("
    "); - foreach (BasicProfileViolation vio in ProfileViolations) { - Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); - Response.Write ("
      "); - foreach (string ele in vio.Elements) - Response.Write ("
    • " + ele + "
    • "); - Response.Write ("
    "); - Response.Write ("
  • "); - } - Response.Write ("
"); - }%> - -<%} if (DefaultBinding == null) {%> -This service does not contain any public web method. -<%} else if (CurrentPage == "op") {%> - - - - <%=CurrentOperationName%> -

- <% WriteTabs (); %> -


- - <% if (CurrentTab == "main") { %> - Input Parameters -
- <% if (InParams.Count == 0) { %> - No input parameters
- <% } else { %> - - - - - - - - - -
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
- <% } %> -
- - <% if (OutParams.Count > 0) { %> - Output Parameters -
- - - - - - - - - -
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
-
- <% } %> - - Remarks -
- <%=OperationDocumentation%> -

- Technical information -
- Format: <%=CurrentOperationFormat%> -
Supported protocols: <%=CurrentOperationProtocols%> - <% } %> - - - - <% if (CurrentTab == "test") { - if (CurrentOperationSupportsTest) {%> - Enter values for the parameters and click the 'Invoke' button to test this method:

-
- - - - - - - - - - - - - - - -
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
-
-
"> - The web service returned the following result:

-
-
- -
- <% } else {%> - The test form is not available for this operation because it has parameters with a complex structure. - <% } %> - <% } %> - - - - <% if (CurrentTab == "msg") { %> - - The following are sample SOAP requests and responses for each protocol supported by this method: -

- - <% if (IsOperationSupported ("Soap")) { %> - Soap -

-
<%=GenerateOperationMessages ("Soap", true)%>
-
-
<%=GenerateOperationMessages ("Soap", false)%>
-
- <% } %> - <% if (IsOperationSupported ("HttpGet")) { %> - HTTP Get -

-
<%=GenerateOperationMessages ("HttpGet", true)%>
-
-
<%=GenerateOperationMessages ("HttpGet", false)%>
-
- <% } %> - <% if (IsOperationSupported ("HttpPost")) { %> - HTTP Post -

-
<%=GenerateOperationMessages ("HttpPost", true)%>
-
-
<%=GenerateOperationMessages ("HttpPost", false)%>
-
- <% } %> - - <% } %> -<%} else if (CurrentPage == "proxy") {%> - -
- Select the language for which you want to generate a proxy -   - -    -
-
- <%=CurrentProxytName%>    - Download -

-
-
<%=GetProxyCode ()%>
-
-<%} else if (CurrentPage == "wsdl") {%> - - <% if (descriptions.Count > 1 || schemas.Count > 1) {%> - The description of this web service is composed by several documents. Click on the document you want to see: - - - - <%} else {%> - <%}%> -
- <%=CurrentDocumentName%>    - Download -

-
-
<%=GenerateDocument ()%>
-
- -<%}%> - -














-
- - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/machine.config" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/machine.config" deleted file mode 100644 index 2577c81..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/machine.config" +++ /dev/null @@ -1,280 +0,0 @@ - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- -
- - -
-
-
- -
- -
-
-
- -
- -
-
-
-
-
-
-
-
- - -
-
- -
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/settings.map" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/settings.map" deleted file mode 100644 index 9a52ccc..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/settings.map" +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/web.config" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/web.config" deleted file mode 100644 index a5190c3..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/2.0/web.config" +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/Browsers/Compat.browser" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/Browsers/Compat.browser" deleted file mode 100644 index dcedf7f..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/Browsers/Compat.browser" +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx" deleted file mode 100644 index f4d74bf..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx" +++ /dev/null @@ -1,1901 +0,0 @@ -<%-- -// -// DefaultWsdlHelpGenerator.aspx: -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// (C) 2003 Ximian, Inc. http://www.ximian.com -// ---%> - -<%@ Import Namespace="System.Collections" %> -<%@ Import Namespace="System.Collections.Generic" %> -<%@ Import Namespace="System.IO" %> -<%@ Import Namespace="System.Xml.Serialization" %> -<%@ Import Namespace="System.Xml" %> -<%@ Import Namespace="System.Xml.Schema" %> -<%@ Import Namespace="System.Web.Services" %> -<%@ Import Namespace="System.Web.Services.Description" %> -<%@ Import Namespace="System.Web.Services.Configuration" %> -<%@ Import Namespace="System.Web.Configuration" %> -<%@ Import Namespace="System" %> -<%@ Import Namespace="System.Net" %> -<%@ Import Namespace="System.Globalization" %> -<%@ Import Namespace="System.Resources" %> -<%@ Import Namespace="System.Diagnostics" %> -<%@ Import Namespace="System.CodeDom" %> -<%@ Import Namespace="System.CodeDom.Compiler" %> -<%@ Import Namespace="Microsoft.CSharp" %> -<%@ Import Namespace="Microsoft.VisualBasic" %> -<%@ Import Namespace="System.Text" %> -<%@ Import Namespace="System.Text.RegularExpressions" %> -<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> -<%@ Assembly name="System.Web.Services" %> -<%@ Page debug="true" %> - - - - - - <% - Response.Write (""); - %> - <%=WebServiceName%> Web Service - - - - - - - -
-Web Service
-<%=WebServiceName%> -
- - - - - - - - -
-
-Overview
-
-Service Description -
-Client proxy -

- - - <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> - - - op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> -
-
-
-
-
-
- -
- -<% if (CurrentPage == "main") {%> - - - -

Web Service Overview

- <%=WebServiceDescription%> -

- <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> -

Basic Profile Conformance

- This web service does not conform to WS-I Basic Profile v1.1 - <% - Response.Write ("
    "); - foreach (BasicProfileViolation vio in ProfileViolations) { - Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); - Response.Write ("
      "); - foreach (string ele in vio.Elements) - Response.Write ("
    • " + ele + "
    • "); - Response.Write ("
    "); - Response.Write ("
  • "); - } - Response.Write ("
"); - }%> - -<%} if (DefaultBinding == null) {%> -This service does not contain any public web method. -<%} else if (CurrentPage == "op") {%> - - - - <%=CurrentOperationName%> -

- <% WriteTabs (); %> -


- - <% if (CurrentTab == "main") { %> - Input Parameters -
- <% if (InParams.Count == 0) { %> - No input parameters
- <% } else { %> - - - - - - - - - -
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
- <% } %> -
- - <% if (OutParams.Count > 0) { %> - Output Parameters -
- - - - - - - - - -
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
-
- <% } %> - - Remarks -
- <%=OperationDocumentation%> -

- Technical information -
- Format: <%=CurrentOperationFormat%> -
Supported protocols: <%=CurrentOperationProtocols%> - <% } %> - - - - <% if (CurrentTab == "test") { - if (CurrentOperationSupportsTest) {%> - Enter values for the parameters and click the 'Invoke' button to test this method:

-
- - - - - - - - - - - - - - - -
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
-
-
"> - The web service returned the following result:

-
-
- -
- <% } else {%> - The test form is not available for this operation because it has parameters with a complex structure. - <% } %> - <% } %> - - - - <% if (CurrentTab == "msg") { %> - - The following are sample SOAP requests and responses for each protocol supported by this method: -

- - <% if (IsOperationSupported ("Soap")) { %> - Soap -

-
<%=GenerateOperationMessages ("Soap", true)%>
-
-
<%=GenerateOperationMessages ("Soap", false)%>
-
- <% } %> - <% if (IsOperationSupported ("HttpGet")) { %> - HTTP Get -

-
<%=GenerateOperationMessages ("HttpGet", true)%>
-
-
<%=GenerateOperationMessages ("HttpGet", false)%>
-
- <% } %> - <% if (IsOperationSupported ("HttpPost")) { %> - HTTP Post -

-
<%=GenerateOperationMessages ("HttpPost", true)%>
-
-
<%=GenerateOperationMessages ("HttpPost", false)%>
-
- <% } %> - - <% } %> -<%} else if (CurrentPage == "proxy") {%> - -
- Select the language for which you want to generate a proxy -   - -    -
-
- <%=CurrentProxytName%>    - Download -

-
-
<%=GetProxyCode ()%>
-
-<%} else if (CurrentPage == "wsdl") {%> - - <% if (descriptions.Count > 1 || schemas.Count > 1) {%> - The description of this web service is composed by several documents. Click on the document you want to see: - - - - <%} else {%> - <%}%> -
- <%=CurrentDocumentName%>    - Download -

-
-
<%=GenerateDocument ()%>
-
- -<%}%> - -














-
- - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/machine.config" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/machine.config" deleted file mode 100644 index f3b71c4..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/machine.config" +++ /dev/null @@ -1,307 +0,0 @@ - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- -
- - - -
- -
-
-
-
- - - - -
-
-
- -
- -
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- - -
-
- -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/settings.map" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/settings.map" deleted file mode 100644 index 4c53aca..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/settings.map" +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/web.config" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/web.config" deleted file mode 100644 index 44cbe18..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.0/web.config" +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/Browsers/Compat.browser" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/Browsers/Compat.browser" deleted file mode 100644 index dcedf7f..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/Browsers/Compat.browser" +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx" deleted file mode 100644 index f4d74bf..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx" +++ /dev/null @@ -1,1901 +0,0 @@ -<%-- -// -// DefaultWsdlHelpGenerator.aspx: -// -// Author: -// Lluis Sanchez Gual (lluis@ximian.com) -// -// (C) 2003 Ximian, Inc. http://www.ximian.com -// ---%> - -<%@ Import Namespace="System.Collections" %> -<%@ Import Namespace="System.Collections.Generic" %> -<%@ Import Namespace="System.IO" %> -<%@ Import Namespace="System.Xml.Serialization" %> -<%@ Import Namespace="System.Xml" %> -<%@ Import Namespace="System.Xml.Schema" %> -<%@ Import Namespace="System.Web.Services" %> -<%@ Import Namespace="System.Web.Services.Description" %> -<%@ Import Namespace="System.Web.Services.Configuration" %> -<%@ Import Namespace="System.Web.Configuration" %> -<%@ Import Namespace="System" %> -<%@ Import Namespace="System.Net" %> -<%@ Import Namespace="System.Globalization" %> -<%@ Import Namespace="System.Resources" %> -<%@ Import Namespace="System.Diagnostics" %> -<%@ Import Namespace="System.CodeDom" %> -<%@ Import Namespace="System.CodeDom.Compiler" %> -<%@ Import Namespace="Microsoft.CSharp" %> -<%@ Import Namespace="Microsoft.VisualBasic" %> -<%@ Import Namespace="System.Text" %> -<%@ Import Namespace="System.Text.RegularExpressions" %> -<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> -<%@ Assembly name="System.Web.Services" %> -<%@ Page debug="true" %> - - - - - - <% - Response.Write (""); - %> - <%=WebServiceName%> Web Service - - - - - - - -
-Web Service
-<%=WebServiceName%> -
- - - - - - - - -
-
-Overview
-
-Service Description -
-Client proxy -

- - - <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> - - - op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> -
-
-
-
-
-
- -
- -<% if (CurrentPage == "main") {%> - - - -

Web Service Overview

- <%=WebServiceDescription%> -

- <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> -

Basic Profile Conformance

- This web service does not conform to WS-I Basic Profile v1.1 - <% - Response.Write ("
    "); - foreach (BasicProfileViolation vio in ProfileViolations) { - Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); - Response.Write ("
      "); - foreach (string ele in vio.Elements) - Response.Write ("
    • " + ele + "
    • "); - Response.Write ("
    "); - Response.Write ("
  • "); - } - Response.Write ("
"); - }%> - -<%} if (DefaultBinding == null) {%> -This service does not contain any public web method. -<%} else if (CurrentPage == "op") {%> - - - - <%=CurrentOperationName%> -

- <% WriteTabs (); %> -


- - <% if (CurrentTab == "main") { %> - Input Parameters -
- <% if (InParams.Count == 0) { %> - No input parameters
- <% } else { %> - - - - - - - - - -
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
- <% } %> -
- - <% if (OutParams.Count > 0) { %> - Output Parameters -
- - - - - - - - - -
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
-
- <% } %> - - Remarks -
- <%=OperationDocumentation%> -

- Technical information -
- Format: <%=CurrentOperationFormat%> -
Supported protocols: <%=CurrentOperationProtocols%> - <% } %> - - - - <% if (CurrentTab == "test") { - if (CurrentOperationSupportsTest) {%> - Enter values for the parameters and click the 'Invoke' button to test this method:

-
- - - - - - - - - - - - - - - -
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
-
-
"> - The web service returned the following result:

-
-
- -
- <% } else {%> - The test form is not available for this operation because it has parameters with a complex structure. - <% } %> - <% } %> - - - - <% if (CurrentTab == "msg") { %> - - The following are sample SOAP requests and responses for each protocol supported by this method: -

- - <% if (IsOperationSupported ("Soap")) { %> - Soap -

-
<%=GenerateOperationMessages ("Soap", true)%>
-
-
<%=GenerateOperationMessages ("Soap", false)%>
-
- <% } %> - <% if (IsOperationSupported ("HttpGet")) { %> - HTTP Get -

-
<%=GenerateOperationMessages ("HttpGet", true)%>
-
-
<%=GenerateOperationMessages ("HttpGet", false)%>
-
- <% } %> - <% if (IsOperationSupported ("HttpPost")) { %> - HTTP Post -

-
<%=GenerateOperationMessages ("HttpPost", true)%>
-
-
<%=GenerateOperationMessages ("HttpPost", false)%>
-
- <% } %> - - <% } %> -<%} else if (CurrentPage == "proxy") {%> - -
- Select the language for which you want to generate a proxy -   - -    -
-
- <%=CurrentProxytName%>    - Download -

-
-
<%=GetProxyCode ()%>
-
-<%} else if (CurrentPage == "wsdl") {%> - - <% if (descriptions.Count > 1 || schemas.Count > 1) {%> - The description of this web service is composed by several documents. Click on the document you want to see: - - - - <%} else {%> - <%}%> -
- <%=CurrentDocumentName%>    - Download -

-
-
<%=GenerateDocument ()%>
-
- -<%}%> - -














-
- - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/machine.config" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/machine.config" deleted file mode 100644 index 4557095..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/machine.config" +++ /dev/null @@ -1,310 +0,0 @@ - - - - - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
- - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
- -
- - - -
- -
-
-
-
- - - - -
-
-
- -
- -
-
-
- -
- -
-
-
-
-
-
-
-
-
-
-
- - -
-
- -
-
- -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/settings.map" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/settings.map" deleted file mode 100644 index 4c53aca..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/settings.map" +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/web.config" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/web.config" deleted file mode 100644 index 30524c1..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/4.5/web.config" +++ /dev/null @@ -1,252 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/browscap.ini" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/browscap.ini" deleted file mode 100644 index 1267e1d..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/browscap.ini" +++ /dev/null @@ -1,16979 +0,0 @@ -;;; Provided courtesy of http://browsers.garykeith.com -;;; Created on Wednesday, June 17, 2009 at 6:30 AM GMT - -[GJK_Browscap_Version] -Version=4476 -Released=Wed, 17 Jun 2009 06:30:21 -0000 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DefaultProperties - -[DefaultProperties] -Browser=DefaultProperties -Version=0 -MajorVer=0 -MinorVer=0 -Platform=unknown -Alpha=false -Beta=false -Win16=false -Win32=false -Win64=false -Frames=false -IFrames=false -Tables=false -Cookies=false -BackgroundSounds=false -CDF=false -VBScript=false -JavaApplets=false -JavaScript=false -ActiveXControls=false -isBanned=false -isMobileDevice=false -isSyndicationReader=false -Crawler=false -CssVersion=0 -supportsCSS=false -AOL=false -aolVersion=0 -ECMAScriptVersion=0.0 -W3CDOMVersion=0.0 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ask - -[Ask] -Parent=DefaultProperties -Browser=Ask -Frames=true -Tables=true -Crawler=true - -[Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)] -Parent=Ask -Browser=Teoma - -[Mozilla/2.0 (compatible; Ask Jeeves)] -Parent=Ask -Browser=AskJeeves - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baidu - -[Baidu] -Parent=DefaultProperties -Browser=Baidu -Frames=true -Tables=true -Crawler=true - -[BaiduImageSpider*] -Parent=Baidu -Browser=BaiduImageSpider - -[Baiduspider*] -Parent=Baidu -Browser=BaiDu - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google - -[Google] -Parent=DefaultProperties -Browser=Google -Frames=true -IFrames=true -Tables=true -JavaScript=true -Crawler=true - -[* (compatible; Googlebot-Mobile/2.1; *http://www.google.com/bot.html)] -Parent=Google -Browser=Googlebot-Mobile -Frames=false -IFrames=false -Tables=false - -[*Google Wireless Transcoder*] -Parent=Google -Browser=Google Wireless Transcoder - -[AdsBot-Google (?http://www.google.com/adsbot.html)] -Parent=Google -Browser=AdsBot-Google - -[Feedfetcher-Google-iGoogleGadgets;*] -Parent=Google -Browser=iGoogleGadgets -isBanned=true -isSyndicationReader=true - -[Feedfetcher-Google;*] -Parent=Google -Browser=Feedfetcher-Google -isBanned=true -isSyndicationReader=true - -[Google OpenSocial agent (http://www.google.com/feedfetcher.html)] -Parent=Google -Browser=Google OpenSocial - -[Google-Site-Verification/1.0] -Parent=Google -Browser=Google-Site-Verification - -[Google-Sitemaps/*] -Parent=Google -Browser=Google-Sitemaps - -[Googlebot-Image/*] -Parent=Google -Browser=Googlebot-Image -CDF=true - -[googlebot-urlconsole] -Parent=Google -Browser=googlebot-urlconsole - -[Googlebot-Video/1.0] -Parent=Google -Browser=Google-Video - -[Googlebot/2.1 (?http://www.google.com/bot.html)] -Parent=Google -Browser=Googlebot - -[Googlebot/2.1 (?http://www.googlebot.com/bot.html)] -Parent=Google -Browser=Googlebot - -[Googlebot/Test*] -Parent=Google -Browser=Googlebot/Test - -[gsa-crawler*] -Parent=Google -Browser=Google Search Appliance -isBanned=true - -[Mediapartners-Google*] -Parent=Google -Browser=Mediapartners-Google - -[Mozilla/4.0 (compatible; Google Desktop)] -Parent=Google -Browser=Google Desktop - -[Mozilla/4.0 (compatible; GoogleToolbar*)] -Parent=Google -Browser=Google Toolbar -isBanned=true - -[Mozilla/5.0 (compatible; Google Keyword Tool;*)] -Parent=Google -Browser=Google Keyword Tool - -[Mozilla/5.0 (compatible; Googlebot/2.1; ?http://www.google.com/bot.html)] -Parent=Google -Browser=Google Webmaster Tools - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Inktomi - -[Inktomi] -Parent=DefaultProperties -Browser=Inktomi -Frames=true -Tables=true -Crawler=true - -[* (compatible;YahooSeeker/M1A1-R2D2; *)] -Parent=Inktomi -Browser=YahooSeeker-Mobile -Frames=false -Tables=false - -[Mozilla/4.0] -Parent=Inktomi - -[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)] -Parent=Inktomi -Win32=true - -[Mozilla/4.0 (compatible; Yahoo Japan; for robot study; kasugiya)] -Parent=Inktomi -Browser=Yahoo! RobotStudy -isBanned=true - -[Mozilla/5.0 (compatible; BMC/1.0 (Y!J-AGENT))] -Parent=Inktomi -Browser=Y!J-AGENT/BMC - -[Mozilla/5.0 (compatible; BMF/1.0 (Y!J-AGENT))] -Parent=Inktomi -Browser=Y!J-AGENT/BMF - -[Mozilla/5.0 (compatible; BMI/1.0 (Y!J-AGENT; 1.0))] -Parent=Inktomi -Browser=Y!J-AGENT/BMI - -[Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] -Parent=Inktomi -Browser=Yahoo! Directory Engine - -[Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)] -Parent=Inktomi -Browser=Yahoo! Slurp China - -[Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)] -Parent=Inktomi -Browser=Yahoo! Slurp -Version=3.0 -MajorVer=3 -MinorVer=0 - -[Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] -Parent=Inktomi -Browser=Yahoo! Slurp - -[Mozilla/5.0 (compatible; Yahoo! Verifier/1.1)] -Parent=Inktomi -Browser=Yahoo! Verifier -Version=1.1 -MajorVer=1 -MinorVer=1 - -[Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] -Parent=Inktomi -Browser=Slurp/cat - -[Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] -Parent=Inktomi - -[Mozilla/5.0 (Yahoo-MMCrawler/4.0; mailto:vertical-crawl-support@yahoo-inc.com)] -Parent=Inktomi -Browser=Yahoo-MMCrawler -Version=4.0 -MajorVer=4 -MinorVer=0 - -[Scooter/*] -Parent=Inktomi -Browser=Scooter - -[Scooter/3.3Y!CrawlX] -Parent=Inktomi -Browser=Scooter/3.3Y!CrawlX -Version=3.3 -MajorVer=3 -MinorVer=3 - -[slurp] -Parent=Inktomi -Browser=slurp - -[Y!J-BSC/1.0*] -Parent=Inktomi -Browser=Y!J-BSC -Version=1.0 -MajorVer=1 -MinorVer=0 -isBanned=true - -[Y!J-SRD/1.0] -Parent=Inktomi -Browser=Y!J-SRD -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Yahoo Mindset] -Parent=Inktomi -Browser=Yahoo Mindset - -[Yahoo Pipes*] -Parent=Inktomi -Browser=Yahoo Pipes - -[Yahoo! Mindset] -Parent=Inktomi -Browser=Yahoo! Mindset - -[Yahoo! Slurp/Site Explorer] -Parent=Inktomi -Browser=Yahoo! Site Explorer - -[Yahoo-Blogs/*] -Parent=Inktomi -Browser=Yahoo-Blogs - -[Yahoo-MMAudVid*] -Parent=Inktomi -Browser=Yahoo-MMAudVid - -[Yahoo-MMCrawler*] -Parent=Inktomi -Browser=Yahoo-MMCrawler -isBanned=true - -[YahooFeedSeeker*] -Parent=Inktomi -Browser=YahooFeedSeeker -isSyndicationReader=true -Crawler=false - -[YahooSeeker/*] -Parent=Inktomi -Browser=YahooSeeker -isMobileDevice=true - -[YahooSeeker/CafeKelsa (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] -Parent=Inktomi -Browser=YahooSeeker/CafeKelsa - -[YahooSeeker/CafeKelsa-dev (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] -Parent=Inktomi - -[YahooVideoSearch*] -Parent=Inktomi -Browser=YahooVideoSearch - -[YahooYSMcm*] -Parent=Inktomi -Browser=YahooYSMcm - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN - -[MSN] -Parent=DefaultProperties -Browser=MSN -Frames=true -Tables=true -Crawler=true - -[adidxbot/1.1 (?http://search.msn.com/msnbot.htm)] -Parent=MSN -Browser=adidxbot - -[librabot/1.0 (*)] -Parent=MSN -Browser=librabot - -[llssbot/1.0] -Parent=MSN -Browser=llssbot -Version=1.0 -MajorVer=1 -MinorVer=0 - -[MSMOBOT/1.1*] -Parent=MSN -Browser=msnbot-mobile -Version=1.1 -MajorVer=1 -MinorVer=1 - -[MSNBot-Academic/1.0*] -Parent=MSN -Browser=MSNBot-Academic -Version=1.0 -MajorVer=1 -MinorVer=0 - -[msnbot-media/1.0*] -Parent=MSN -Browser=msnbot-media -Version=1.0 -MajorVer=1 -MinorVer=0 - -[msnbot-media/1.1*] -Parent=MSN -Browser=msnbot-media -Version=1.1 -MajorVer=1 -MinorVer=1 - -[MSNBot-News/1.0*] -Parent=MSN -Browser=MSNBot-News -Version=1.0 -MajorVer=1 -MinorVer=0 - -[MSNBot-NewsBlogs/1.0*] -Parent=MSN -Browser=MSNBot-NewsBlogs -Version=1 -MajorVer=1 -MinorVer=0 - -[msnbot-products] -Parent=MSN -Browser=msnbot-products - -[msnbot-webmaster/1.0 (*http://search.msn.com/msnbot.htm)] -Parent=MSN -Browser=msnbot-webmaster tools - -[msnbot/1.0*] -Parent=MSN -Browser=msnbot -Version=1.0 -MajorVer=1 -MinorVer=0 - -[msnbot/1.1*] -Parent=MSN -Browser=msnbot -Version=1.1 -MajorVer=1 -MinorVer=1 - -[msnbot/2.0b*] -Parent=MSN -Version=2.0 -MajorVer=2 -MinorVer=0 -Beta=true - -[MSR-ISRCCrawler] -Parent=MSN -Browser=MSR-ISRCCrawler - -[renlifangbot/1.0 (?http://search.msn.com/msnbot.htm)] -Parent=MSN -Browser=renlifangbot - -[T-Mobile Dash Mozilla/4.0 (*) MSNBOT-MOBILE/1.1 (*)] -Parent=MSN -Browser=msnbot-mobile - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yahoo - -[Yahoo] -Parent=DefaultProperties -Browser=Yahoo -Frames=true -Tables=true -Crawler=true - -[Mozilla/4.0 (compatible; Y!J; for robot study*)] -Parent=Yahoo -Browser=Y!J - -[Mozilla/5.0 (Yahoo-Test/4.0*)] -Parent=Yahoo -Browser=Yahoo-Test -Version=4.0 -MajorVer=4 -MinorVer=0 - -[mp3Spider cn-search-devel at yahoo-inc dot com] -Parent=Yahoo -Browser=Yahoo! Media -isBanned=true - -[My Browser] -Parent=Yahoo -Browser=Yahoo! My Browser - -[Y!OASIS/*] -Parent=Yahoo -Browser=Y!OASIS -isBanned=true - -[YahooYSMcm/2.0.0] -Parent=Yahoo -Browser=YahooYSMcm -Version=2.0 -MajorVer=2 -MinorVer=0 -isBanned=true - -[YRL_ODP_CRAWLER] -Parent=Yahoo -Browser=YRL_ODP_CRAWLER -isBanned=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yandex - -[Yandex] -Parent=DefaultProperties -Browser=Yandex -Frames=true -IFrames=true -Tables=true -Cookies=true -Crawler=true - -[Mozilla/4.0 (compatible; MSIE 5.0; YANDEX)] -Parent=Yandex - -[Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9) Gecko VisualParser/3.0] -Parent=Yandex -Browser=VisualParser -isBanned=true - -[YaDirectBot/*] -Parent=Yandex -Browser=YaDirectBot - -[Yandex/*] -Parent=Yandex - -[YandexBlog/*] -Parent=Yandex -Browser=YandexBlog -isSyndicationReader=true - -[YandexSomething/*] -Parent=Yandex -Browser=YandexSomething -isSyndicationReader=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Best of the Web - -[Best of the Web] -Parent=DefaultProperties -Browser=Best of the Web -Frames=true -Tables=true - -[Mozilla/4.0 (compatible; BOTW Feed Grabber; *http://botw.org)] -Parent=Best of the Web -Browser=BOTW Feed Grabber -isSyndicationReader=true -Crawler=false - -[Mozilla/4.0 (compatible; BOTW Spider; *http://botw.org)] -Parent=Best of the Web -Browser=BOTW Spider -isBanned=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Boitho - -[Boitho] -Parent=DefaultProperties -Browser=Boitho -Frames=true -Tables=true -Crawler=true - -[boitho.com-dc/*] -Parent=Boitho -Browser=boitho.com-dc - -[boitho.com-robot/*] -Parent=Boitho -Browser=boitho.com-robot - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Convera - -[Convera] -Parent=DefaultProperties -Browser=Convera -Frames=true -Tables=true -Crawler=true - -[ConveraCrawler/*] -Parent=Convera -Browser=ConveraCrawler - -[ConveraMultiMediaCrawler/0.1*] -Parent=Convera -Browser=ConveraMultiMediaCrawler -Version=0.1 -MajorVer=0 -MinorVer=1 - -[CrawlConvera*] -Parent=Convera -Browser=CrawlConvera - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DotBot - -[DotBot] -Parent=DefaultProperties -Browser=DotBot -Frames=true -Tables=true -isBanned=true -Crawler=true - -[DotBot/* (http://www.dotnetdotcom.org/*)] -Parent=DotBot - -[Mozilla/5.0 (compatible; DotBot/*; http://www.dotnetdotcom.org/*)] -Parent=DotBot - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Entireweb - -[Entireweb] -Parent=DefaultProperties -Browser=Entireweb -Frames=true -IFrames=true -Tables=true -isBanned=true -Crawler=true - -[Mozilla/4.0 (compatible; SpeedySpider; www.entireweb.com)] -Parent=Entireweb - -[Speedy Spider (*Beta/*)] -Parent=Entireweb - -[Speedy?Spider?(http://www.entireweb.com*)] -Parent=Entireweb - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Envolk - -[Envolk] -Parent=DefaultProperties -Browser=Envolk -Frames=true -IFrames=true -Tables=true -isBanned=true -Crawler=true - -[envolk/* (?http://www.envolk.com/envolk*)] -Parent=Envolk - -[envolk?ITS?spider/* (?http://www.envolk.com/envolk*)] -Parent=Envolk - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Exalead - -[Exalead] -Parent=DefaultProperties -Browser=Exalead -Frames=true -Tables=true -isBanned=true -Crawler=true - -[Exabot-Images/1.0] -Parent=Exalead -Browser=Exabot-Images -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Exabot-Test/*] -Parent=Exalead -Browser=Exabot-Test - -[Exabot/2.0] -Parent=Exalead -Browser=Exabot - -[Exabot/3.0] -Parent=Exalead -Browser=Exabot -Version=3.0 -MajorVer=3 -MinorVer=0 -Platform=Liberate - -[Exalead NG/*] -Parent=Exalead -Browser=Exalead NG -isBanned=true - -[Mozilla/5.0 (compatible; Exabot-Images/3.0;*)] -Parent=Exalead -Browser=Exabot-Images - -[Mozilla/5.0 (compatible; Exabot/3.0 (BiggerBetter/tests);*)] -Parent=Exalead -Browser=Exabot/BiggerBetter/tests - -[Mozilla/5.0 (compatible; Exabot/3.0;*)] -Parent=Exalead -Browser=Exabot -isBanned=false - -[Mozilla/5.0 (compatible; NGBot/*)] -Parent=Exalead - -[ng/*] -Parent=Exalead -Browser=Exalead Previewer -Version=1.0 -MajorVer=1 -MinorVer=0 -isBanned=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fast/AllTheWeb - -[Fast/AllTheWeb] -Parent=DefaultProperties -Browser=Fast/AllTheWeb -Alpha=true -Beta=true -Win16=true -Win32=true -Win64=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -isBanned=true -isMobileDevice=true -isSyndicationReader=true -Crawler=true - -[*FAST Enterprise Crawler*] -Parent=Fast/AllTheWeb -Browser=FAST Enterprise Crawler - -[FAST Data Search Document Retriever/4.0*] -Parent=Fast/AllTheWeb -Browser=FAST Data Search Document Retriever - -[FAST MetaWeb Crawler (helpdesk at fastsearch dot com)] -Parent=Fast/AllTheWeb -Browser=FAST MetaWeb Crawler - -[Fast PartnerSite Crawler*] -Parent=Fast/AllTheWeb -Browser=FAST PartnerSite - -[FAST-WebCrawler/*] -Parent=Fast/AllTheWeb -Browser=FAST-WebCrawler - -[FAST-WebCrawler/*/FirstPage*] -Parent=Fast/AllTheWeb -Browser=FAST-WebCrawler/FirstPage - -[FAST-WebCrawler/*/Fresh*] -Parent=Fast/AllTheWeb -Browser=FAST-WebCrawler/Fresh - -[FAST-WebCrawler/*/PartnerSite*] -Parent=Fast/AllTheWeb -Browser=FAST PartnerSite - -[FAST-WebCrawler/*?Multimedia*] -Parent=Fast/AllTheWeb -Browser=FAST-WebCrawler/Multimedia - -[FastSearch Web Crawler for*] -Parent=Fast/AllTheWeb -Browser=FastSearch Web Crawler - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Gigabot - -[Gigabot] -Parent=DefaultProperties -Browser=Gigabot -Frames=true -IFrames=true -Tables=true -Crawler=true - -[Gigabot*] -Parent=Gigabot - -[GigabotSiteSearch/*] -Parent=Gigabot -Browser=GigabotSiteSearch - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ilse - -[Ilse] -Parent=DefaultProperties -Browser=Ilse -Frames=true -Tables=true -Crawler=true - -[IlseBot/*] -Parent=Ilse - -[INGRID/?.0*] -Parent=Ilse -Browser=Ilse - -[Mozilla/3.0 (INGRID/*] -Parent=Ilse -Browser=Ilse - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iVia Project - -[iVia Project] -Parent=DefaultProperties -Browser=iVia Project -Frames=true -IFrames=true -Tables=true -Crawler=true - -[DataFountains/DMOZ Downloader*] -Parent=iVia Project -Browser=DataFountains/DMOZ Downloader -isBanned=true - -[DataFountains/DMOZ Feature Vector Corpus Creator*] -Parent=iVia Project -Browser=DataFountains/DMOZ Feature Vector Corpus - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Jayde Online - -[Jayde Online] -Parent=DefaultProperties -Browser=Jayde Online -Frames=true -Tables=true -Crawler=true - -[ExactSeek Crawler/*] -Parent=Jayde Online -Browser=ExactSeek Crawler - -[exactseek-pagereaper-* (crawler@exactseek.com)] -Parent=Jayde Online -Browser=exactseek-pagereaper -isBanned=true - -[exactseek.com] -Parent=Jayde Online -Browser=exactseek.com - -[Jayde Crawler*] -Parent=Jayde Online -Browser=Jayde Crawler - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycos - -[Lycos] -Parent=DefaultProperties -Browser=Lycos -Frames=true -Tables=true -Crawler=true - -[Lycos*] -Parent=Lycos -Browser=Lycos - -[Lycos-Proxy] -Parent=Lycos -Browser=Lycos-Proxy - -[Lycos-Spider_(modspider)] -Parent=Lycos -Browser=Lycos-Spider_(modspider) - -[Lycos-Spider_(T-Rex)] -Parent=Lycos -Browser=Lycos-Spider_(T-Rex) - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Naver - -[Naver] -Parent=DefaultProperties -Browser=Naver -isBanned=true -Crawler=true - -[Cowbot-* (NHN Corp*naver.com)] -Parent=Naver -Browser=Naver Cowbot - -[Mozilla/4.0 (compatible; NaverBot/*; *)] -Parent=Naver - -[Mozilla/4.0 (compatible; NaverBot/*; nhnbot@naver.com)] -Parent=Naver -Browser=Naver NaverBot - -[NaverBot-* (NHN Corp*naver.com)] -Parent=Naver -Browser=Naver NHN Corp - -[Yeti/*] -Parent=Naver -Browser=Yeti - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Snap - -[Snap] -Parent=DefaultProperties -Browser=Snap -isBanned=true -Crawler=true - -[Mozilla/5.0 (SnapPreviewBot) Gecko/* Firefox/*] -Parent=Snap - -[Snapbot/*] -Parent=Snap - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sogou - -[Sogou] -Parent=DefaultProperties -Browser=Sogou -Frames=true -Tables=true -isBanned=true -Crawler=true - -[shaboyi spider] -Parent=Sogou -Browser=Sogou/Shaboyi Spider - -[Sogou develop spider/*] -Parent=Sogou -Browser=Sogou Develop Spider - -[Sogou head spider*] -Parent=Sogou -Browser=Sogou/HEAD Spider - -[sogou js robot(*)] -Parent=Sogou - -[Sogou Orion spider/*] -Parent=Sogou -Browser=Sogou Orion spider - -[Sogou Pic Agent] -Parent=Sogou -Browser=Sogou/Image Crawler - -[Sogou Pic Spider] -Parent=Sogou -Browser=Sogou Pic Spider - -[Sogou Push Spider/*] -Parent=Sogou -Browser=Sogou Push Spider - -[sogou spider] -Parent=Sogou -Browser=Sogou/Spider - -[sogou web spider*] -Parent=Sogou -Browser=sogou web spider - -[Sogou-Test-Spider/*] -Parent=Sogou -Browser=Sogou-Test-Spider - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; YodaoBot - -[YodaoBot] -Parent=DefaultProperties -Browser=YodaoBot -Frames=true -IFrames=true -Tables=true -isBanned=true -Crawler=true - -[Mozilla/5.0 (compatible; YodaoBot/1.*)] -Parent=YodaoBot - -[Mozilla/5.0 (compatible;YodaoBot-Image/1.*)] -Parent=YodaoBot -Browser=YodaoBot-Image - -[WAP_Browser/5.0 (compatible; YodaoBot/1.*)] -Parent=YodaoBot - -[YodaoBot/1.* (*)] -Parent=YodaoBot - -[Best Whois (http://www.bestwhois.net/)] -Parent=DNS Tools -Browser=Best Whois - -[DNSGroup/*] -Parent=DNS Tools -Browser=DNS Group Crawler - -[NG-Search/*] -Parent=Exalead -Browser=NG-SearchBot - -[TouchStone] -Parent=Feeds Syndicators -Browser=TouchStone -isSyndicationReader=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General Crawlers - -[General Crawlers] -Parent=DefaultProperties -Browser=General Crawlers -Crawler=true - -[A .NET Web Crawler] -Parent=General Crawlers -isBanned=true - -[BabalooSpider/1.*] -Parent=General Crawlers -Browser=BabalooSpider - -[BilgiBot/*] -Parent=General Crawlers -Browser=BilgiBot -isBanned=true - -[bot/* (bot; *bot@bot.bot)] -Parent=General Crawlers -Browser=bot -isBanned=true - -[CyberPatrol*] -Parent=General Crawlers -Browser=CyberPatrol -isBanned=true - -[Cynthia 1.0] -Parent=General Crawlers -Browser=Cynthia -Version=1.0 -MajorVer=1 -MinorVer=0 - -[ddetailsbot (http://www.displaydetails.com)] -Parent=General Crawlers -Browser=ddetailsbot - -[DomainCrawler/1.0 (info@domaincrawler.com; http://www.domaincrawler.com/domains/view/*)] -Parent=General Crawlers -Browser=DomainCrawler - -[DomainsBotBot/1.*] -Parent=General Crawlers -Browser=DomainsBotBot -isBanned=true - -[DomainsDB.net MetaCrawler*] -Parent=General Crawlers -Browser=DomainsDB - -[Drupal (*)] -Parent=General Crawlers -Browser=Drupal - -[Dumbot (version *)*] -Parent=General Crawlers -Browser=Dumbfind - -[EuripBot/*] -Parent=General Crawlers -Browser=Europe Internet Portal - -[eventax/*] -Parent=General Crawlers -Browser=eventax - -[FANGCrawl/*] -Parent=General Crawlers -Browser=Safe-t.net Web Filtering Service -isBanned=true - -[favorstarbot/*] -Parent=General Crawlers -Browser=favorstarbot -isBanned=true - -[FollowSite.com (*)] -Parent=General Crawlers -Browser=FollowSite -isBanned=true - -[Gaisbot*] -Parent=General Crawlers -Browser=Gaisbot - -[Healthbot/Health_and_Longevity_Project_(HealthHaven.com) ] -Parent=General Crawlers -Browser=Healthbot -isBanned=true - -[hitcrawler_0.*] -Parent=General Crawlers -Browser=hitcrawler -isBanned=true - -[htdig/*] -Parent=General Crawlers -Browser=ht://Dig - -[http://hilfe.acont.de/bot.html ACONTBOT] -Parent=General Crawlers -Browser=ACONTBOT -isBanned=true - -[JetBrains*] -Parent=General Crawlers -Browser=Omea Pro - -[KakleBot - www.kakle.com/0.1] -Parent=General Crawlers -Browser=KakleBot - -[KBeeBot/0.*] -Parent=General Crawlers -Browser=KBeeBot -isBanned=true - -[Keyword Density/*] -Parent=General Crawlers -Browser=Keyword Density - -[LetsCrawl.com/1.0*] -Parent=General Crawlers -Browser=LetsCrawl.com -isBanned=true - -[Lincoln State Web Browser] -Parent=General Crawlers -Browser=Lincoln State Web Browser -isBanned=true - -[Links4US-Crawler,*] -Parent=General Crawlers -Browser=Links4US-Crawler -isBanned=true - -[Lorkyll *.* -- lorkyll@444.net] -Parent=General Crawlers -Browser=Lorkyll -isBanned=true - -[Lsearch/sondeur] -Parent=General Crawlers -Browser=Lsearch/sondeur -isBanned=true - -[LucidMedia ClickSense/4.?] -Parent=General Crawlers -Browser=LucidMedia-ClickSense -isBanned=true - -[MapoftheInternet.com?(?http://MapoftheInternet.com)] -Parent=General Crawlers -Browser=MapoftheInternet -isBanned=true - -[Marvin v0.3] -Parent=General Crawlers -Browser=MedHunt -Version=0.3 -MajorVer=0 -MinorVer=3 - -[masidani_bot_v0.6*] -Parent=General Crawlers -Browser=masidani_bot - -[Metaspinner/0.01 (Metaspinner; http://www.meta-spinner.de/; support@meta-spinner.de/)] -Parent=General Crawlers -Browser=Metaspinner/0.01 -Version=0.01 -MajorVer=0 -MinorVer=01 - -[metatagsdir/*] -Parent=General Crawlers -Browser=metatagsdir -isBanned=true - -[Microsoft Windows Network Diagnostics] -Parent=General Crawlers -Browser=Microsoft Windows Network Diagnostics -isBanned=true - -[Miva (AlgoFeedback@miva.com)] -Parent=General Crawlers -Browser=Miva - -[moget/*] -Parent=General Crawlers -Browser=Goo - -[Mozdex/0.7.2*] -Parent=General Crawlers -Browser=Mozdex - -[Mozilla Compatible (MS IE 3.01 WinNT)] -Parent=General Crawlers -isBanned=true - -[Mozilla/* (compatible; WebCapture*)] -Parent=General Crawlers -Browser=WebCapture - -[Mozilla/4.0 (compatible; DepSpid/*)] -Parent=General Crawlers -Browser=DepSpid - -[Mozilla/4.0 (compatible; MSIE *; Windows NT *; SV1)] -Parent=General Crawlers -Browser=AVG - -[Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)] -Parent=General Crawlers -Browser=Vonna.com -isBanned=true - -[Mozilla/4.0 (compatible; MSIE 4.01; Windows95)] -Parent=General Crawlers -Win32=true - -[Mozilla/4.0 (compatible; MSIE 4.5; Windows 98; )] -Parent=General Crawlers -Win32=true - -[Mozilla/4.0 (compatible; MyFamilyBot/*)] -Parent=General Crawlers -Browser=MyFamilyBot - -[Mozilla/4.0 (compatible; N-Stealth)] -Parent=General Crawlers -Browser=N-Stealth - -[Mozilla/4.0 (compatible; Scumbot/*; Linux/*)] -Parent=General Crawlers -isBanned=true - -[Mozilla/4.0 (compatible; Spider; Linux)] -Parent=General Crawlers -isBanned=true - -[Mozilla/4.0 (compatible; Win32)] -Parent=General Crawlers -Browser=Unknown Crawler -isBanned=true - -[Mozilla/4.1] -Parent=General Crawlers -isBanned=true - -[Mozilla/4.5] -Parent=General Crawlers -isBanned=true - -[Mozilla/5.0 (*http://gnomit.com/) Gecko/* Gnomit/1.0] -Parent=General Crawlers -Browser=Gnomit -isBanned=true - -[Mozilla/5.0 (compatible; AboutUsBot/*)] -Parent=General Crawlers -Browser=AboutUsBot -isBanned=true - -[Mozilla/5.0 (compatible; BuzzRankingBot/*)] -Parent=General Crawlers -Browser=BuzzRankingBot -isBanned=true - -[Mozilla/5.0 (compatible; Diffbot/0.1; http://www.diffbot.com)] -Parent=General Crawlers -Browser=Diffbot - -[Mozilla/5.0 (compatible; FirstSearchBot/1.0; *)] -Parent=General Crawlers -Browser=FirstSearchBot - -[mozilla/5.0 (compatible; genevabot http://www.healthdash.com)] -Parent=General Crawlers -Browser=Healthdash - -[Mozilla/5.0 (compatible; JadynAveBot; *http://www.jadynave.com/robot*] -Parent=General Crawlers -Browser=JadynAveBot -isBanned=true - -[Mozilla/5.0 (compatible; Kyluka crawl; http://www.kyluka.com/crawl.html; crawl@kyluka.com)] -Parent=General Crawlers -Browser=Kyluka - -[Mozilla/5.0 (compatible; MJ12bot/v1.2.*; http://www.majestic12.co.uk/bot.php*)] -Parent=General Crawlers -Browser=MJ12bot -Version=1.2 -MajorVer=1 -MinorVer=2 - -[Mozilla/5.0 (compatible; MSIE 7.0 ?http://www.europarchive.org)] -Parent=General Crawlers -Browser=Europe Web Archive - -[Mozilla/5.0 (compatible; Seznam screenshot-generator 2.0;*)] -Parent=General Crawlers -Browser=Seznam screenshot-generator -isBanned=true - -[Mozilla/5.0 (compatible; Twingly Recon; http://www.twingly.com/)] -Parent=General Crawlers -Browser=Twingly Recon - -[Mozilla/5.0 (compatible; unwrapbot/2.*; http://www.unwrap.jp*)] -Parent=General Crawlers -Browser=UnWrap - -[Mozilla/5.0 (compatible; Vermut*)] -Parent=General Crawlers -Browser=Vermut - -[Mozilla/5.0 (compatible; Webbot/*)] -Parent=General Crawlers -Browser=Webbot.ru -isBanned=true - -[n4p_bot*] -Parent=General Crawlers -Browser=n4p_bot - -[nabot*] -Parent=General Crawlers -Browser=Nabot - -[NetCarta_WebMapper/*] -Parent=General Crawlers -Browser=NetCarta_WebMapper -isBanned=true - -[NetID.com Bot*] -Parent=General Crawlers -Browser=NetID.com Bot -isBanned=true - -[neTVision AG andreas.heidoetting@thomson-webcast.net] -Parent=General Crawlers -Browser=neTVision - -[NextopiaBOT*] -Parent=General Crawlers -Browser=NextopiaBOT - -[nicebot] -Parent=General Crawlers -Browser=nicebot -isBanned=true - -[niXXieBot?Foster*] -Parent=General Crawlers -Browser=niXXiebot-Foster - -[Nozilla/P.N (Just for IDS woring)] -Parent=General Crawlers -Browser=Nozilla/P.N -isBanned=true - -[Nudelsalat/*] -Parent=General Crawlers -Browser=Nudelsalat -isBanned=true - -[NV32ts] -Parent=General Crawlers -Browser=NV32ts -isBanned=true - -[Ocelli/*] -Parent=General Crawlers -Browser=Ocelli - -[OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm)] -Parent=General Crawlers -Browser=OpenTaggerBot - -[Oracle Enterprise Search] -Parent=General Crawlers -Browser=Oracle Enterprise Search -isBanned=true - -[Oracle Ultra Search] -Parent=General Crawlers -Browser=Oracle Ultra Search - -[Pajaczek/*] -Parent=General Crawlers -Browser=Pajaczek -isBanned=true - -[panscient.com] -Parent=General Crawlers -Browser=panscient.com -isBanned=true - -[Patwebbot (http://www.herz-power.de/technik.html)] -Parent=General Crawlers -Browser=Patwebbot - -[PDFBot (crawler@pdfind.com)] -Parent=General Crawlers -Browser=PDFBot - -[Pete-Spider/1.*] -Parent=General Crawlers -Browser=Pete-Spider -isBanned=true - -[PhpDig/*] -Parent=General Crawlers -Browser=PhpDig - -[PlantyNet_WebRobot*] -Parent=General Crawlers -Browser=PlantyNet -isBanned=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PluckIt - -[PluckItCrawler/1.0 (*)] -Parent=General Crawlers -isMobileDevice=true - -[PMAFind] -Parent=General Crawlers -Browser=PMAFind -isBanned=true - -[Poodle_predictor_1.0] -Parent=General Crawlers -Browser=Poodle Predictor - -[QuickFinder Crawler] -Parent=General Crawlers -Browser=QuickFinder -isBanned=true - -[Radiation Retriever*] -Parent=General Crawlers -Browser=Radiation Retriever -isBanned=true - -[RedCarpet/*] -Parent=General Crawlers -Browser=RedCarpet -isBanned=true - -[RixBot (http://babelserver.org/rix)] -Parent=General Crawlers -Browser=RixBot - -[Rome Client (http://tinyurl.com/64t5n) Ver: 0.*] -Parent=General Crawlers -Browser=TinyURL - -[SBIder/*] -Parent=General Crawlers -Browser=SiteSell - -[ScollSpider/2.*] -Parent=General Crawlers -Browser=ScollSpider -isBanned=true - -[Search Fst] -Parent=General Crawlers -Browser=Search Fst - -[searchbot admin@google.com] -Parent=General Crawlers -Browser=searchbot -isBanned=true - -[Seeker.lookseek.com] -Parent=General Crawlers -Browser=LookSeek -isBanned=true - -[semanticdiscovery/*] -Parent=General Crawlers -Browser=Semantic Discovery - -[SeznamBot/*] -Parent=General Crawlers -Browser=SeznamBot -isBanned=true - -[Shelob (shelob@gmx.net)] -Parent=General Crawlers -Browser=Shelob -isBanned=true - -[shelob v1.*] -Parent=General Crawlers -Browser=shelob -isBanned=true - -[ShopWiki/1.0*] -Parent=General Crawlers -Browser=ShopWiki -Version=1.0 -MajorVer=1 -MinorVer=0 - -[ShowXML/1.0 libwww/5.4.0] -Parent=General Crawlers -Browser=ShowXML -isBanned=true - -[sitecheck.internetseer.com*] -Parent=General Crawlers -Browser=Internetseer - -[SMBot/*] -Parent=General Crawlers -Browser=SMBot - -[sohu*] -Parent=General Crawlers -Browser=sohu-search -isBanned=true - -[SpankBot*] -Parent=General Crawlers -Browser=SpankBot -isBanned=true - -[spider (tspyyp@tom.com)] -Parent=General Crawlers -Browser=spider (tspyyp@tom.com) -isBanned=true - -[Sunrise/0.*] -Parent=General Crawlers -Browser=Sunrise -isBanned=true - -[Superpages URL Verification Engine] -Parent=General Crawlers -Browser=Superpages - -[Surf Knight] -Parent=General Crawlers -Browser=Surf Knight -isBanned=true - -[SurveyBot/*] -Parent=General Crawlers -Browser=SurveyBot -isBanned=true - -[SynapticSearch/AI Crawler 1.?] -Parent=General Crawlers -Browser=SynapticSearch -isBanned=true - -[SyncMgr] -Parent=General Crawlers -Browser=SyncMgr - -[Tagyu Agent/1.0] -Parent=General Crawlers -Browser=Tagyu - -[Talkro Web-Shot/*] -Parent=General Crawlers -Browser=Talkro Web-Shot -isBanned=true - -[Tecomi Bot (http://www.tecomi.com/bot.htm)] -Parent=General Crawlers -Browser=Tecomi - -[TheInformant*] -Parent=General Crawlers -Browser=TheInformant -isBanned=true - -[Toata dragostea*] -Parent=General Crawlers -Browser=Toata dragostea -isBanned=true - -[Tutorial Crawler*] -Parent=General Crawlers -isBanned=true - -[UbiCrawler/*] -Parent=General Crawlers -Browser=UbiCrawler - -[UCmore] -Parent=General Crawlers -Browser=UCmore - -[User*Agent:*] -Parent=General Crawlers -isBanned=true - -[USER_AGENT] -Parent=General Crawlers -Browser=USER_AGENT -isBanned=true - -[VadixBot] -Parent=General Crawlers -Browser=VadixBot - -[VengaBot/*] -Parent=General Crawlers -Browser=VengaBot -isBanned=true - -[Visicom Toolbar] -Parent=General Crawlers -Browser=Visicom Toolbar - -[W3C-WebCon/*] -Parent=General Crawlers -Browser=W3C-WebCon - -[Webclipping.com] -Parent=General Crawlers -Browser=Webclipping.com -isBanned=true - -[webcollage/*] -Parent=General Crawlers -Browser=WebCollage -isBanned=true - -[WebCrawler_1.*] -Parent=General Crawlers -Browser=WebCrawler - -[WebFilter Robot*] -Parent=General Crawlers -Browser=WebFilter Robot - -[WeBoX/*] -Parent=General Crawlers -Browser=WeBoX - -[WebTrends/*] -Parent=General Crawlers -Browser=WebTrends - -[West Wind Internet Protocols*] -Parent=General Crawlers -Browser=Versatel -isBanned=true - -[WhizBang] -Parent=General Crawlers -Browser=WhizBang - -[Willow Internet Crawler by Twotrees V*] -Parent=General Crawlers -Browser=Willow Internet Crawler - -[WIRE/* (Linux; i686; Bot,Robot,Spider,Crawler)] -Parent=General Crawlers -Browser=WIRE -isBanned=true - -[www.fi crawler, contact crawler@www.fi] -Parent=General Crawlers -Browser=www.fi crawler - -[Xerka WebBot v1.*] -Parent=General Crawlers -Browser=Xerka -isBanned=true - -[XML Sitemaps Generator*] -Parent=General Crawlers -Browser=XML Sitemaps Generator - -[XSpider*] -Parent=General Crawlers -Browser=XSpider -isBanned=true - -[YooW!/* (?http://www.yoow.eu)] -Parent=General Crawlers -Browser=YooW! -isBanned=true - -[HiddenMarket-*] -Parent=General RSS -Browser=HiddenMarket -isBanned=true - -[FOTOCHECKER] -Parent=Image Crawlers -Browser=FOTOCHECKER -isBanned=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Search Engines - -[Search Engines] -Parent=DefaultProperties -Browser=Search Engines -Crawler=true - -[*FDSE robot*] -Parent=Search Engines -Browser=FDSE Robot - -[*Fluffy the spider*] -Parent=Search Engines -Browser=SearchHippo - -[Abacho*] -Parent=Search Engines -Browser=Abacho - -[ah-ha.com crawler (crawler@ah-ha.com)] -Parent=Search Engines -Browser=Ah-Ha - -[AIBOT/*] -Parent=Search Engines -Browser=21Seek.Com - -[ALeadSoftbot/*] -Parent=Search Engines -Browser=ALeadSoftbot - -[Amfibibot/*] -Parent=Search Engines -Browser=Amfibi - -[AnswerBus (http://www.answerbus.com/)] -Parent=Search Engines - -[antibot-V*] -Parent=Search Engines -Browser=antibot - -[appie*(www.walhello.com)] -Parent=Search Engines -Browser=Walhello - -[ASPSeek/*] -Parent=Search Engines -Browser=ASPSeek - -[BigCliqueBOT/*] -Parent=Search Engines -Browser=BigClique.com/BigClic.com - -[Blaiz-Bee/*] -Parent=Search Engines -Browser=RawGrunt - -[btbot/*] -Parent=Search Engines -Browser=Bit Torrent Search Engine - -[Busiversebot/v1.0 (http://www.busiverse.com/bot.php)] -Parent=Search Engines -Browser=Busiversebot -isBanned=true - -[CatchBot/*; http://www.catchbot.com] -Parent=Search Engines -Browser=CatchBot -Version=1.0 -MajorVer=1 -MinorVer=0 - -[CipinetBot (http://www.cipinet.com/bot.html)] -Parent=Search Engines -Browser=CipinetBot - -[Cogentbot/1.?*] -Parent=Search Engines -Browser=Cogentbot - -[compatible; Mozilla 4.0; MSIE 5.5; (SqwidgeBot v1.01 - http://www.sqwidge.com/bot/)] -Parent=Search Engines -Browser=SqwidgeBot - -[cosmos*] -Parent=Search Engines -Browser=Xyleme - -[Deepindex] -Parent=Search Engines -Browser=Deepindex - -[DiamondBot] -Parent=Search Engines -Browser=DiamondBot - -[Dumbot*] -Parent=Search Engines -Browser=Dumbot -Version=0.2 -MajorVer=0 -MinorVer=2 -Beta=true - -[Eule?Robot*] -Parent=Search Engines -Browser=Eule-Robot - -[Faxobot/*] -Parent=Search Engines -Browser=Faxo - -[Filangy/*] -Parent=Search Engines -Browser=Filangy - -[flatlandbot/*] -Parent=Search Engines -Browser=Flatland - -[Fooky.com/ScorpionBot/ScoutOut;*] -Parent=Search Engines -Browser=ScorpionBot -isBanned=true - -[FyberSpider*] -Parent=Search Engines -Browser=FyberSpider -isBanned=true - -[Gaisbot/*] -Parent=Search Engines -Browser=Gaisbot - -[gazz/*(gazz@nttr.co.jp)] -Parent=Search Engines -Browser=gazz - -[geniebot*] -Parent=Search Engines -Browser=GenieKnows - -[GOFORITBOT (?http://www.goforit.com/about/?)] -Parent=Search Engines -Browser=GoForIt - -[GoGuidesBot/*] -Parent=Search Engines -Browser=GoGuidesBot - -[GroschoBot/*] -Parent=Search Engines -Browser=GroschoBot - -[GurujiBot/1.*] -Parent=Search Engines -Browser=GurujiBot -isBanned=true - -[HenryTheMiragoRobot*] -Parent=Search Engines -Browser=Mirago - -[HolmesBot (http://holmes.ge)] -Parent=Search Engines -Browser=HolmesBot - -[Hotzonu/*] -Parent=Search Engines -Browser=Hotzonu - -[HyperEstraier/*] -Parent=Search Engines -Browser=HyperEstraier -isBanned=true - -[i1searchbot/*] -Parent=Search Engines -Browser=i1searchbot - -[IIITBOT/1.*] -Parent=Search Engines -Browser=Indian Language Web Search Engine - -[Iltrovatore-?etaccio/*] -Parent=Search Engines -Browser=Iltrovatore-Setaccio - -[InfociousBot (?http://corp.infocious.com/tech_crawler.php)] -Parent=Search Engines -Browser=InfociousBot -isBanned=true - -[Infoseek SideWinder/*] -Parent=Search Engines -Browser=Infoseek - -[iSEEKbot/*] -Parent=Search Engines -Browser=iSEEKbot - -[Knight/0.? (Zook Knight; http://knight.zook.in/; knight@zook.in)] -Parent=Search Engines -Browser=Knight - -[Kolinka Forum Search (www.kolinka.com)] -Parent=Search Engines -Browser=Kolinka Forum Search -isBanned=true - -[KRetrieve/] -Parent=Search Engines -Browser=KRetrieve -isBanned=true - -[LapozzBot/*] -Parent=Search Engines -Browser=LapozzBot - -[Linknzbot*] -Parent=Search Engines -Browser=Linknzbot - -[LocalcomBot/*] -Parent=Search Engines -Browser=LocalcomBot - -[Mail.Ru/1.0] -Parent=Search Engines -Browser=Mail.Ru - -[MaSagool/*] -Parent=Search Engines -Browser=Sagoo -Version=1.0 -MajorVer=1 -MinorVer=0 - -[miniRank/*] -Parent=Search Engines -Browser=miniRank - -[Mnogosearch*] -Parent=Search Engines -Browser=Mnogosearch - -[Mozilla/0.9* no dos :) (Linux)] -Parent=Search Engines -Browser=goliat -isBanned=true - -[Mozilla/4.0 (compatible; Arachmo)] -Parent=Search Engines -Browser=Arachmo - -[Mozilla/4.0 (compatible; http://search.thunderstone.com/texis/websearch/about.html)] -Parent=Search Engines -Browser=ThunderStone -isBanned=true - -[Mozilla/4.0 (compatible; MSIE *; Windows NT; Girafabot; girafabot at girafa dot com; http://www.girafa.com)] -Parent=Search Engines -Browser=Girafabot -Win32=true - -[Mozilla/4.0 (compatible; Vagabondo/*; webcrawler at wise-guys dot nl; *)] -Parent=Search Engines -Browser=Vagabondo - -[Mozilla/4.0(?compatible; MSIE 6.0; Qihoo *)] -Parent=Search Engines -Browser=Qihoo - -[Mozilla/4.7 (compatible; WhizBang; http://www.whizbang.com/crawler)] -Parent=Search Engines -Browser=Inxight Software - -[Mozilla/5.0 (*) VoilaBot*] -Parent=Search Engines -Browser=VoilaBot -isBanned=true - -[Mozilla/5.0 (compatible; ActiveTouristBot*; http://www.activetourist.com)] -Parent=Search Engines -Browser=ActiveTouristBot - -[Mozilla/5.0 (compatible; Butterfly/1.0; *)*] -Parent=Search Engines -Browser=Butterfly - -[Mozilla/5.0 (compatible; Charlotte/*; *)] -Parent=Search Engines -Browser=Charlotte -Beta=true -isBanned=true - -[Mozilla/5.0 (compatible; CXL-FatAssANT*)] -Parent=Search Engines -Browser=FatAssANT - -[Mozilla/5.0 (compatible; DBLBot/1.0; ?http://www.dontbuylists.com/)] -Parent=Search Engines -Browser=DBLBot -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Mozilla/5.0 (compatible; EARTHCOM.info/*)] -Parent=Search Engines -Browser=EARTHCOM - -[Mozilla/5.0 (compatible; Lipperhey Spider; http://www.lipperhey.com/)] -Parent=Search Engines -Browser=Lipperhey Spider - -[Mozilla/5.0 (compatible; MojeekBot/*; http://www.mojeek.com/bot.html)] -Parent=Search Engines -Browser=MojeekBot - -[Mozilla/5.0 (compatible; NLCrawler/*] -Parent=Search Engines -Browser=Northern Light Web Search - -[Mozilla/5.0 (compatible; OsO;*] -Parent=Search Engines -Browser=Octopodus -isBanned=true - -[Mozilla/5.0 (compatible; Pogodak.*)] -Parent=Search Engines -Browser=Pogodak - -[Mozilla/5.0 (compatible; Quantcastbot/1.*)] -Parent=Search Engines -Browser=Quantcastbot - -[Mozilla/5.0 (compatible; ScoutJet; *http://www.scoutjet.com/)] -Parent=Search Engines -Browser=ScoutJet - -[Mozilla/5.0 (compatible; Scrubby/*; http://www.scrubtheweb.com/abs/meta-check.html)] -Parent=Search Engines -Browser=Scrubby -isBanned=true - -[Mozilla/5.0 (compatible; YoudaoBot/1.*; http://www.youdao.com/help/webmaster/spider/*)] -Parent=Search Engines -Browser=YoudaoBot -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Mozilla/5.0 (Twiceler*)] -Parent=Search Engines -Browser=Twiceler -isBanned=true - -[Mozilla/5.0 CostaCider Search*] -Parent=Search Engines -Browser=CostaCider Search - -[Mozilla/5.0 GurujiBot/1.0 (*)] -Parent=Search Engines -Browser=GurujiBot - -[NavissoBot] -Parent=Search Engines -Browser=NavissoBot - -[NextGenSearchBot*(for information visit *)] -Parent=Search Engines -Browser=ZoomInfo -isBanned=true - -[Norbert the Spider(Burf.com)] -Parent=Search Engines -Browser=Norbert the Spider - -[NuSearch Spider*] -Parent=Search Engines -Browser=nuSearch - -[ObjectsSearch/*] -Parent=Search Engines -Browser=ObjectsSearch - -[OpenISearch/1.*] -Parent=Search Engines -Browser=OpenISearch (Amazon) - -[Pagebull http://www.pagebull.com/] -Parent=Search Engines -Browser=Pagebull - -[PEERbot*] -Parent=Search Engines -Browser=PEERbot - -[Pompos/*] -Parent=Search Engines -Browser=Pompos - -[Popdexter/*] -Parent=Search Engines -Browser=Popdex - -[Qweery*] -Parent=Search Engines -Browser=QweeryBot - -[RedCell/* (*)] -Parent=Search Engines -Browser=RedCell - -[Scrubby/*] -Parent=Search Engines -Browser=Scrub The Web - -[Search-10/*] -Parent=Search Engines -Browser=Search-10 - -[search.ch*] -Parent=Search Engines -Browser=Swiss Search Engine - -[Searchmee! Spider*] -Parent=Search Engines -Browser=Searchmee! - -[Seekbot/*] -Parent=Search Engines -Browser=Seekbot - -[SiteSpider (http://www.SiteSpider.com/)] -Parent=Search Engines -Browser=SiteSpider - -[Spinne/*] -Parent=Search Engines -Browser=Spinne - -[sproose/*] -Parent=Search Engines -Browser=Sproose - -[Sqeobot/0.*] -Parent=Search Engines -Browser=Branzel -isBanned=true - -[SquigglebotBot/*] -Parent=Search Engines -Browser=SquigglebotBot -isBanned=true - -[StackRambler/*] -Parent=Search Engines -Browser=StackRambler - -[SygolBot*] -Parent=Search Engines -Browser=SygolBot - -[SynoBot] -Parent=Search Engines -Browser=SynoBot - -[Szukacz/*] -Parent=Search Engines -Browser=Szukacz - -[Tarantula/*] -Parent=Search Engines -Browser=Tarantula -isBanned=true - -[TerrawizBot/*] -Parent=Search Engines -Browser=TerrawizBot -isBanned=true - -[Tkensaku/*] -Parent=Search Engines -Browser=Tkensaku - -[TMCrawler] -Parent=Search Engines -Browser=TMCrawler -isBanned=true - -[Twingly Recon] -Parent=Search Engines -Browser=Twingly Recon -isBanned=true - -[updated/*] -Parent=Search Engines -Browser=Updated! - -[URL Spider Pro/*] -Parent=Search Engines -Browser=URL Spider Pro - -[URL Spider SQL*] -Parent=Search Engines -Browser=Innerprise Enterprise Search - -[VMBot/*] -Parent=Search Engines -Browser=VMBot - -[voyager/2.0 (http://www.kosmix.com/html/crawler.html)] -Parent=Search Engines -Browser=Voyager - -[wadaino.jp-crawler*] -Parent=Search Engines -Browser=wadaino.jp -isBanned=true - -[WebAlta Crawler/*] -Parent=Search Engines -Browser=WebAlta Crawler -isBanned=true - -[WebCorp/*] -Parent=Search Engines -Browser=WebCorp -isBanned=true - -[webcrawl.net] -Parent=Search Engines -Browser=webcrawl.net - -[WISEbot/*] -Parent=Search Engines -Browser=WISEbot -isBanned=true - -[Wotbox/*] -Parent=Search Engines -Browser=Wotbox - -[www.zatka.com] -Parent=Search Engines -Browser=Zatka - -[WWWeasel Robot v*] -Parent=Search Engines -Browser=World Wide Weasel - -[YadowsCrawler*] -Parent=Search Engines -Browser=YadowsCrawler - -[YodaoBot/*] -Parent=Search Engines -Browser=YodaoBot -isBanned=true - -[ZeBot_www.ze.bz*] -Parent=Search Engines -Browser=ZE.bz - -[zibber-v*] -Parent=Search Engines -Browser=Zibb - -[ZipppBot/*] -Parent=Search Engines -Browser=ZipppBot - -[ATA-Translation-Service] -Parent=Translators -Browser=ATA-Translation-Service - -[GJK_Browser_Check] -Parent=Version Checkers -Browser=GJK_Browser_Check - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hatena - -[Hatena] -Parent=DefaultProperties -Browser=Hatena -isBanned=true -Crawler=true - -[Feed::Find/*] -Parent=Hatena -Browser=Feed Find -isSyndicationReader=true - -[Hatena Antenna/*] -Parent=Hatena -Browser=Hatena Antenna - -[Hatena Bookmark/*] -Parent=Hatena -Browser=Hatena Bookmark - -[Hatena RSS/*] -Parent=Hatena -Browser=Hatena RSS -isSyndicationReader=true - -[Hatena::Crawler/*] -Parent=Hatena -Browser=Hatena Crawler - -[HatenaScreenshot*] -Parent=Hatena -Browser=HatenaScreenshot - -[URI::Fetch/*] -Parent=Hatena -Browser=URI::Fetch - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Internet Archive - -[Internet Archive] -Parent=DefaultProperties -Browser=Internet Archive -Frames=true -IFrames=true -Tables=true -isBanned=true -Crawler=true - -[*heritrix*] -Parent=Internet Archive -Browser=Heritrix -isBanned=true - -[ia_archiver*] -Parent=Internet Archive -Browser=Internet Archive - -[InternetArchive/*] -Parent=Internet Archive -Browser=InternetArchive - -[Mozilla/5.0 (compatible; archive.org_bot/1.*)] -Parent=Internet Archive - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nutch - -[Nutch] -Parent=DefaultProperties -Browser=Nutch -isBanned=true -Crawler=true - -[*Nutch*] -Parent=Nutch -isBanned=true - -[CazoodleBot/*] -Parent=Nutch -Browser=CazoodleBot - -[LOOQ/0.1*] -Parent=Nutch -Browser=LOOQ - -[Nutch/0.? (OpenX Spider)] -Parent=Nutch - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Webaroo - -[Webaroo] -Parent=DefaultProperties -Browser=Webaroo - -[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Webaroo/*)] -Parent=Webaroo -Browser=Webaroo - -[Mozilla/5.0 (Windows; U; Windows *; *; rv:*) Gecko/* Firefox/* webaroo/*] -Parent=Webaroo -Browser=Webaroo - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Word Press - -[Word Press] -Parent=DefaultProperties -Browser=Word Press -Alpha=true -Beta=true -Win16=true -Win32=true -Win64=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -isBanned=true -isMobileDevice=true -isSyndicationReader=true -Crawler=true - -[WordPress-B-/2.*] -Parent=Word Press -Browser=WordPress-B - -[WordPress-Do-P-/2.*] -Parent=Word Press -Browser=WordPress-Do-P - -[BlueCoat ProxySG] -Parent=Blue Coat Systems -Browser=BlueCoat ProxySG - -[CerberianDrtrs/*] -Parent=Blue Coat Systems -Browser=Cerberian - -[Inne: Mozilla/4.0 (compatible; Cerberian Drtrs*)] -Parent=Blue Coat Systems -Browser=Cerberian - -[Mozilla/4.0 (compatible; Cerberian Drtrs*)] -Parent=Blue Coat Systems -Browser=Cerberian - -[Mozilla/4.0 (compatible; MSIE 6.0; Bluecoat DRTR)] -Parent=Blue Coat Systems -Browser=Bluecoat - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Copyright/Plagiarism - -[Copyright/Plagiarism] -Parent=DefaultProperties -Browser=Copyright/Plagiarism -isBanned=true -Crawler=true - -[BDFetch] -Parent=Copyright/Plagiarism -Browser=BDFetch - -[copyright sheriff (*)] -Parent=Copyright/Plagiarism -Browser=copyright sheriff - -[CopyRightCheck*] -Parent=Copyright/Plagiarism -Browser=CopyRightCheck - -[FairAd Client*] -Parent=Copyright/Plagiarism -Browser=FairAd Client - -[iCopyright Conductor*] -Parent=Copyright/Plagiarism -Browser=iCopyright Conductor - -[IPiumBot laurion(dot)com] -Parent=Copyright/Plagiarism -Browser=IPiumBot - -[IWAgent/*] -Parent=Copyright/Plagiarism -Browser=Brand Protect - -[Mozilla/5.0 (compatible; DKIMRepBot/*)] -Parent=Copyright/Plagiarism -Browser=DKIMRepBot - -[oBot] -Parent=Copyright/Plagiarism -Browser=oBot - -[SlySearch/*] -Parent=Copyright/Plagiarism -Browser=SlySearch - -[TurnitinBot/*] -Parent=Copyright/Plagiarism -Browser=TurnitinBot - -[TutorGigBot/*] -Parent=Copyright/Plagiarism -Browser=TutorGig - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DNS Tools - -[DNS Tools] -Parent=DefaultProperties -Browser=DNS Tools -Crawler=true - -[Domain Dossier utility*] -Parent=DNS Tools -Browser=Domain Dossier - -[Mozilla/5.0 (compatible; DNS-Digger/*)] -Parent=DNS Tools -Browser=DNS-Digger - -[OpenDNS Domain Crawler noc@opendns.com] -Parent=DNS Tools -Browser=OpenDNS Domain Crawler - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Download Managers - -[Download Managers] -Parent=DefaultProperties -Browser=Download Managers -Frames=true -IFrames=true -Tables=true -isBanned=true -Crawler=true - -[AndroidDownloadManager] -Parent=Download Managers -Browser=Android Download Manager - -[AutoMate5] -Parent=Download Managers -Browser=AutoMate5 - -[Beamer*] -Parent=Download Managers -Browser=Beamer - -[BitBeamer/*] -Parent=Download Managers -Browser=BitBeamer - -[BitTorrent/*] -Parent=Download Managers -Browser=BitTorrent - -[DA *] -Parent=Download Managers -Browser=Download Accelerator - -[Download Demon*] -Parent=Download Managers -Browser=Download Demon - -[Download Express*] -Parent=Download Managers -Browser=Download Express - -[Download Master*] -Parent=Download Managers -Browser=Download Master - -[Download Ninja*] -Parent=Download Managers -Browser=Download Ninja - -[Download Wonder*] -Parent=Download Managers -Browser=Download Wonder - -[DownloadSession*] -Parent=Download Managers -Browser=DownloadSession - -[EasyDL/*] -Parent=Download Managers -Browser=EasyDL - -[FDM 1.x] -Parent=Download Managers -Browser=Free Download Manager - -[FlashGet] -Parent=Download Managers -Browser=FlashGet - -[FreshDownload/*] -Parent=Download Managers -Browser=FreshDownload - -[GetRight/*] -Parent=Download Managers -Browser=GetRight - -[GetRightPro/*] -Parent=Download Managers -Browser=GetRightPro - -[GetSmart/*] -Parent=Download Managers -Browser=GetSmart - -[Go!Zilla*] -Parent=Download Managers -Browser=GoZilla - -[Gozilla/*] -Parent=Download Managers -Browser=Gozilla - -[Internet Ninja*] -Parent=Download Managers -Browser=Internet Ninja - -[Kontiki Client*] -Parent=Download Managers -Browser=Kontiki Client - -[lftp/3.2.1] -Parent=Download Managers -Browser=lftp - -[LightningDownload/*] -Parent=Download Managers -Browser=LightningDownload - -[LMQueueBot/*] -Parent=Download Managers -Browser=LMQueueBot - -[MetaProducts Download Express/*] -Parent=Download Managers -Browser=Download Express - -[Mozilla/4.0 (compatible; Getleft*)] -Parent=Download Managers -Browser=Getleft - -[Myzilla] -Parent=Download Managers -Browser=Myzilla - -[Net Vampire/*] -Parent=Download Managers -Browser=Net Vampire - -[Net_Vampire*] -Parent=Download Managers -Browser=Net_Vampire - -[NetAnts*] -Parent=Download Managers -Browser=NetAnts - -[NetPumper*] -Parent=Download Managers -Browser=NetPumper - -[NetSucker*] -Parent=Download Managers -Browser=NetSucker - -[NetZip Downloader*] -Parent=Download Managers -Browser=NetZip Downloader - -[NexTools WebAgent*] -Parent=Download Managers -Browser=NexTools WebAgent - -[Offline Downloader*] -Parent=Download Managers -Browser=Offline Downloader - -[P3P Client] -Parent=Download Managers -Browser=P3P Client - -[PageDown*] -Parent=Download Managers -Browser=PageDown - -[PicaLoader*] -Parent=Download Managers -Browser=PicaLoader - -[Prozilla*] -Parent=Download Managers -Browser=Prozilla - -[RealDownload/*] -Parent=Download Managers -Browser=RealDownload - -[sEasyDL/*] -Parent=Download Managers -Browser=EasyDL - -[shareaza*] -Parent=Download Managers -Browser=shareaza - -[SmartDownload/*] -Parent=Download Managers -Browser=SmartDownload - -[SpeedDownload/*] -Parent=Download Managers -Browser=Speed Download - -[Star*Downloader/*] -Parent=Download Managers -Browser=StarDownloader - -[STEROID Download] -Parent=Download Managers -Browser=STEROID Download - -[SuperBot/*] -Parent=Download Managers -Browser=SuperBot - -[Vegas95/*] -Parent=Download Managers -Browser=Vegas95 - -[WebZIP*] -Parent=Download Managers -Browser=WebZIP - -[Wget*] -Parent=Download Managers -Browser=Wget - -[WinTools] -Parent=Download Managers -Browser=WinTools - -[Xaldon WebSpider*] -Parent=Download Managers -Browser=Xaldon WebSpider - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; E-Mail Harvesters - -[E-Mail Harvesters] -Parent=DefaultProperties -Browser=E-Mail Harvesters -Frames=true -IFrames=true -Tables=true -isBanned=true -Crawler=true - -[*E-Mail Address Extractor*] -Parent=E-Mail Harvesters -Browser=E-Mail Address Extractor - -[*Larbin*] -Parent=E-Mail Harvesters -Browser=Larbin - -[*www4mail/*] -Parent=E-Mail Harvesters -Browser=www4mail - -[8484 Boston Project*] -Parent=E-Mail Harvesters -Browser=8484 Boston Project - -[CherryPicker*/*] -Parent=E-Mail Harvesters -Browser=CherryPickerElite - -[Chilkat/*] -Parent=E-Mail Harvesters -Browser=Chilkat - -[ContactBot/*] -Parent=E-Mail Harvesters -Browser=ContactBot - -[eCatch*] -Parent=E-Mail Harvesters -Browser=eCatch - -[EmailCollector*] -Parent=E-Mail Harvesters -Browser=E-Mail Collector - -[EMAILsearcher] -Parent=E-Mail Harvesters -Browser=EMAILsearcher - -[EmailSiphon*] -Parent=E-Mail Harvesters -Browser=E-Mail Siphon - -[EmailWolf*] -Parent=E-Mail Harvesters -Browser=EMailWolf - -[Epsilon SoftWorks' MailMunky] -Parent=E-Mail Harvesters -Browser=MailMunky - -[ExtractorPro*] -Parent=E-Mail Harvesters -Browser=ExtractorPro - -[Franklin Locator*] -Parent=E-Mail Harvesters -Browser=Franklin Locator - -[Missigua Locator*] -Parent=E-Mail Harvesters -Browser=Missigua Locator - -[Mozilla/4.0 (compatible; Advanced Email Extractor*)] -Parent=E-Mail Harvesters -Browser=Advanced Email Extractor - -[Netprospector*] -Parent=E-Mail Harvesters -Browser=Netprospector - -[ProWebWalker*] -Parent=E-Mail Harvesters -Browser=ProWebWalker - -[sna-0.0.*] -Parent=E-Mail Harvesters -Browser=Mike Elliott's E-Mail Harvester - -[WebEnhancer*] -Parent=E-Mail Harvesters -Browser=WebEnhancer - -[WebMiner*] -Parent=E-Mail Harvesters -Browser=WebMiner - -[ZIBB Crawler (email address / WWW address)] -Parent=E-Mail Harvesters -Browser=ZIBB Crawler - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Blogs - -[Feeds Blogs] -Parent=DefaultProperties -Browser=Feeds Blogs -isSyndicationReader=true -Crawler=true - -[Bloglines Title Fetch/*] -Parent=Feeds Blogs -Browser=Bloglines Title Fetch - -[Bloglines/* (http://www.bloglines.com*)] -Parent=Feeds Blogs -Browser=BlogLines Web - -[BlogPulseLive (support@blogpulse.com)] -Parent=Feeds Blogs -Browser=BlogPulseLive - -[blogsearchbot-pumpkin-2] -Parent=Feeds Blogs -Browser=blogsearchbot-pumpkin -isSyndicationReader=false - -[Irish Blogs Aggregator/*1.0*] -Parent=Feeds Blogs -Browser=Irish Blogs Aggregator -Version=1.0 -MajorVer=1 -MinorVer=0 - -[kinjabot (http://www.kinja.com; *)] -Parent=Feeds Blogs -Browser=kinjabot - -[Net::Trackback/*] -Parent=Feeds Blogs -Browser=Net::Trackback - -[Reblog*] -Parent=Feeds Blogs -Browser=Reblog - -[WordPress/*] -Parent=Feeds Blogs -Browser=WordPress - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Syndicators - -[Feeds Syndicators] -Parent=DefaultProperties -Browser=Feeds Syndicators -isSyndicationReader=true - -[*LinkLint*] -Parent=Feeds Syndicators -Browser=LinkLint - -[*NetNewsWire/*] -Parent=Feeds Syndicators - -[*NetVisualize*] -Parent=Feeds Syndicators -Browser=NetVisualize - -[AideRSS 2.* (postrank.com)] -Parent=Feeds Syndicators -Browser=AideRSS - -[AideRSS/2.0 (aiderss.com)] -Parent=Feeds Syndicators -Browser=AideRSS -isBanned=true - -[Akregator/*] -Parent=Feeds Syndicators -Browser=Akregator - -[AppleSyndication/*] -Parent=Feeds Syndicators -Browser=Safari RSS -Platform=MacOSX - -[Cocoal.icio.us/* (*)*] -Parent=Feeds Syndicators -Browser=Cocoal.icio.us -isBanned=true - -[Feed43 Proxy/* (*)] -Parent=Feeds Syndicators -Browser=Feed For Free - -[FeedBurner/*] -Parent=Feeds Syndicators -Browser=FeedBurner - -[FeedDemon/* (*)] -Parent=Feeds Syndicators -Browser=FeedDemon -Platform=Win32 - -[FeedDigest/* (*)] -Parent=Feeds Syndicators -Browser=FeedDigest - -[FeedGhost/1.*] -Parent=Feeds Syndicators -Browser=FeedGhost -Version=1.0 -MajorVer=1 -MinorVer=0 - -[FeedOnFeeds/0.1.* ( http://minutillo.com/steve/feedonfeeds/)] -Parent=Feeds Syndicators -Browser=FeedOnFeeds -Version=0.1 -MajorVer=0 -MinorVer=1 - -[Feedreader * (Powered by Newsbrain)] -Parent=Feeds Syndicators -Browser=Newsbrain - -[Feedshow/* (*)] -Parent=Feeds Syndicators -Browser=Feedshow - -[Feedster Crawler/?.0; Feedster, Inc.] -Parent=Feeds Syndicators -Browser=Feedster - -[GreatNews/1.0] -Parent=Feeds Syndicators -Browser=GreatNews -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Gregarius/*] -Parent=Feeds Syndicators -Browser=Gregarius - -[intraVnews/*] -Parent=Feeds Syndicators -Browser=intraVnews - -[JetBrains Omea Reader*] -Parent=Feeds Syndicators -Browser=Omea Reader -isBanned=true - -[Liferea/1.5* (Linux; *; http://liferea.sf.net/)] -Parent=Feeds Syndicators -Browser=Liferea -isBanned=true - -[livedoor FeedFetcher/0.0* (http://reader.livedoor.com/;*)] -Parent=Feeds Syndicators -Browser=FeedFetcher -Version=0.0 -MajorVer=0 -MinorVer=0 - -[MagpieRSS/* (*)] -Parent=Feeds Syndicators -Browser=MagpieRSS - -[Mobitype * (compatible; Mozilla/*; MSIE *.*; Windows *)] -Parent=Feeds Syndicators -Browser=Mobitype -Platform=Win32 - -[Mozilla/5.0 (*; Rojo *; http://www.rojo.com/corporate/help/agg; *)*] -Parent=Feeds Syndicators -Browser=Rojo - -[Mozilla/5.0 (*aggregator:TailRank; http://tailrank.com/robot)*] -Parent=Feeds Syndicators -Browser=TailRank - -[Mozilla/5.0 (compatible; MSIE 6.0; Podtech Network; crawler_admin@podtech.net)] -Parent=Feeds Syndicators -Browser=Podtech Network - -[Mozilla/5.0 (compatible; Newz Crawler *; http://www.newzcrawler.com/?)] -Parent=Feeds Syndicators -Browser=Newz Crawler - -[Mozilla/5.0 (compatible; RSSMicro.com RSS/Atom Feed Robot)] -Parent=Feeds Syndicators -Browser=RSSMicro - -[Mozilla/5.0 (compatible;*newstin.com;*)] -Parent=Feeds Syndicators -Browser=NewsTin - -[Mozilla/5.0 (RSS Reader Panel)] -Parent=Feeds Syndicators -Browser=RSS Reader Panel - -[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:FeedParser; *) Gecko/*] -Parent=Feeds Syndicators -Browser=FeedParser - -[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:NewsMonster; *) Gecko/*] -Parent=Feeds Syndicators -Browser=NewsMonster - -[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:Rojo; *) Gecko/*] -Parent=Feeds Syndicators -Browser=Rojo - -[Netvibes (*)] -Parent=Feeds Syndicators -Browser=Netvibes - -[NewsAlloy/* (*)] -Parent=Feeds Syndicators -Browser=NewsAlloy - -[Omnipelagos*] -Parent=Feeds Syndicators -Browser=Omnipelagos - -[Particls] -Parent=Feeds Syndicators -Browser=Particls - -[Protopage/* (*)] -Parent=Feeds Syndicators -Browser=Protopage - -[PubSub-RSS-Reader/* (*)] -Parent=Feeds Syndicators -Browser=PubSub-RSS-Reader - -[RSS Menu/*] -Parent=Feeds Syndicators -Browser=RSS Menu - -[RssBandit/*] -Parent=Feeds Syndicators -Browser=RssBandit - -[RssBar/1.2*] -Parent=Feeds Syndicators -Browser=RssBar -Version=1.2 -MajorVer=1 -MinorVer=2 - -[SharpReader/*] -Parent=Feeds Syndicators -Browser=SharpReader - -[SimplePie/*] -Parent=Feeds Syndicators -Browser=SimplePie - -[Strategic Board Bot (?http://www.strategicboard.com)] -Parent=Feeds Syndicators -Browser=Strategic Board Bot -isBanned=true - -[TargetYourNews.com bot] -Parent=Feeds Syndicators -Browser=TargetYourNews - -[Technoratibot/*] -Parent=Feeds Syndicators -Browser=Technoratibot - -[Tumblr/* RSS syndication ( http://www.tumblr.com/) (support@tumblr.com)] -Parent=Feeds Syndicators -Browser=Tumblr RSS syndication - -[Windows-RSS-Platform/1.0*] -Parent=Feeds Syndicators -Browser=Windows-RSS-Platform -Version=1.0 -MajorVer=1 -MinorVer=0 -Win32=true - -[Wizz RSS News Reader] -Parent=Feeds Syndicators -Browser=Wizz - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General RSS - -[General RSS] -Parent=DefaultProperties -Browser=General RSS -isSyndicationReader=true - -[AideRSS/1.0 (aiderss.com); * subscribers] -Parent=General RSS -Browser=AideRSS -Version=1.0 -MajorVer=1 -MinorVer=0 - -[CC Metadata Scaper http://wiki.creativecommons.org/Metadata_Scraper] -Parent=General RSS -Browser=CC Metadata Scaper - -[Mozilla/5.0 (compatible) GM RSS Panel] -Parent=General RSS -Browser=RSS Panel - -[Mozilla/5.0 http://www.inclue.com; graeme@inclue.com] -Parent=General RSS -Browser=Inclue - -[Runnk online rss reader : http://www.runnk.com/ : RSS favorites : RSS ranking : RSS aggregator*] -Parent=General RSS -Browser=Ruunk - -[Windows-RSS-Platform/2.0 (MSIE 8.0; Windows NT 6.0)] -Parent=General RSS -Browser=Windows-RSS-Platform -Platform=WinVista - -[Mozilla/5.0 (X11; ?; Linux; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) Arora/0.4] -Parent=Google Code -Browser=Arora -Version=0.4 -MajorVer=0 -MinorVer=4 -Platform=Linux -CssVersion=2 -supportsCSS=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Validation Checkers - -[HTML Validators] -Parent=DefaultProperties -Browser=HTML Validators -Frames=true -IFrames=true -Tables=true -Crawler=true - -[(HTML Validator http://www.searchengineworld.com/validator/)] -Parent=HTML Validators -Browser=Search Engine World HTML Validator - -[FeedValidator/1.3] -Parent=HTML Validators -Browser=FeedValidator -Version=1.3 -MajorVer=1 -MinorVer=3 - -[Jigsaw/* W3C_CSS_Validator_JFouffa/*] -Parent=HTML Validators -Browser=Jigsaw CSS Validator - -[Search Engine World Robots.txt Validator*] -Parent=HTML Validators -Browser=Search Engine World Robots.txt Validator - -[W3C_Validator/*] -Parent=HTML Validators -Browser=W3C Validator - -[W3CLineMode/*] -Parent=HTML Validators -Browser=W3C Line Mode - -[Weblide/2.? beta*] -Parent=HTML Validators -Browser=Weblide -Version=2.0 -MajorVer=2 -MinorVer=0 -Beta=true - -[WebmasterWorld StickyMail Server Header Checker*] -Parent=HTML Validators -Browser=WebmasterWorld Server Header Checker - -[WWWC/*] -Parent=HTML Validators - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Image Crawlers - -[Image Crawlers] -Parent=DefaultProperties -Browser=Image Crawlers -Frames=true -IFrames=true -Tables=true -isBanned=true -Crawler=true - -[*CFNetwork*] -Parent=Image Crawlers -Browser=CFNetwork - -[*PhotoStickies/*] -Parent=Image Crawlers -Browser=PhotoStickies - -[Camcrawler*] -Parent=Image Crawlers -Browser=Camcrawler - -[CydralSpider/*] -Parent=Image Crawlers -Browser=Cydral Web Image Search -isBanned=true - -[Der gro\xdfe BilderSauger*] -Parent=Image Crawlers -Browser=Gallery Grabber - -[Extreme Picture Finder] -Parent=Image Crawlers -Browser=Extreme Picture Finder - -[FLATARTS_FAVICO] -Parent=Image Crawlers -Browser=FlatArts Favorites Icon Tool - -[HTML2JPG Blackbox, http://www.html2jpg.com] -Parent=Image Crawlers -Browser=HTML2JPG - -[IconSurf/2.*] -Parent=Image Crawlers -Browser=IconSurf - -[kalooga/KaloogaBot*] -Parent=Image Crawlers -Browser=KaloogaBot - -[Mister PIX*] -Parent=Image Crawlers -Browser=Mister PIX - -[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/* (*) Pandora/2.*] -Parent=Image Crawlers -Browser=Pandora - -[naoFavicon4IE*] -Parent=Image Crawlers -Browser=naoFavicon4IE - -[pixfinder/*] -Parent=Image Crawlers -Browser=pixfinder - -[rssImagesBot/0.1 (*http://herbert.groot.jebbink.nl/?app=rssImages)] -Parent=Image Crawlers -Browser=rssImagesBot - -[Web Image Collector*] -Parent=Image Crawlers -Browser=Web Image Collector - -[WebImages * (?http://herbert.groot.jebbink.nl/?app=WebImages?)] -Parent=Image Crawlers -Browser=WebImages - -[WebPix*] -Parent=Image Crawlers -Browser=Custo - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Link Checkers - -[Link Checkers] -Parent=DefaultProperties -Browser=Link Checkers -Frames=true -IFrames=true -Tables=true -Crawler=true - -[!Susie (http://www.sync2it.com/susie)] -Parent=Link Checkers -Browser=!Susie - -[*AgentName/*] -Parent=Link Checkers -Browser=AgentName - -[*Linkman*] -Parent=Link Checkers -Browser=Linkman - -[*LinksManager.com*] -Parent=Link Checkers -Browser=LinksManager - -[*Powermarks/*] -Parent=Link Checkers -Browser=Powermarks - -[*W3C-checklink/*] -Parent=Link Checkers -Browser=W3C Link Checker - -[*Web Link Validator*] -Parent=Link Checkers -Browser=Web Link Validator - -[*Zeus*] -Parent=Link Checkers -Browser=Zeus -isBanned=true - -[ActiveBookmark *] -Parent=Link Checkers -Browser=ActiveBookmark - -[Bookdog/*] -Parent=Link Checkers -Browser=Bookdog - -[Bookmark Buddy*] -Parent=Link Checkers -Browser=Bookmark Buddy - -[Bookmark Renewal Check Agent*] -Parent=Link Checkers -Browser=Bookmark Renewal Check Agent - -[Bookmark search tool*] -Parent=Link Checkers -Browser=Bookmark search tool - -[Bookmark-Manager] -Parent=Link Checkers -Browser=Bookmark-Manager - -[Checkbot*] -Parent=Link Checkers -Browser=Checkbot - -[CheckLinks/*] -Parent=Link Checkers -Browser=CheckLinks - -[CyberSpyder Link Test/*] -Parent=Link Checkers -Browser=CyberSpyder Link Test - -[DLC/*] -Parent=Link Checkers -Browser=DLC - -[DocWeb Link Crawler (http://doc.php.net)] -Parent=Link Checkers -Browser=DocWeb Link Crawler - -[FavOrg] -Parent=Link Checkers -Browser=FavOrg - -[Favorites Sweeper v.3.*] -Parent=Link Checkers -Browser=Favorites Sweeper - -[FindLinks/*] -Parent=Link Checkers -Browser=FindLinks - -[Funnel Web Profiler*] -Parent=Link Checkers -Browser=Funnel Web Profiler - -[Html Link Validator (www.lithopssoft.com)] -Parent=Link Checkers -Browser=HTML Link Validator - -[IECheck] -Parent=Link Checkers -Browser=IECheck - -[JCheckLinks/*] -Parent=Link Checkers -Browser=JCheckLinks - -[JRTwine Software Check Favorites Utility] -Parent=Link Checkers -Browser=JRTwine - -[Link Valet Online*] -Parent=Link Checkers -Browser=Link Valet -isBanned=true - -[LinkAlarm/*] -Parent=Link Checkers -Browser=LinkAlarm - -[Linkbot*] -Parent=Link Checkers -Browser=Linkbot - -[LinkChecker/*] -Parent=Link Checkers -Browser=LinkChecker - -[LinkextractorPro*] -Parent=Link Checkers -Browser=LinkextractorPro -isBanned=true - -[LinkLint-checkonly/*] -Parent=Link Checkers -Browser=LinkLint - -[LinkScan/*] -Parent=Link Checkers -Browser=LinkScan - -[LinkSweeper/*] -Parent=Link Checkers -Browser=LinkSweeper - -[LinkWalker*] -Parent=Link Checkers -Browser=LinkWalker - -[MetaGer-LinkChecker] -Parent=Link Checkers -Browser=MetaGer-LinkChecker - -[Mozilla/* (compatible; linktiger/*; *http://www.linktiger.com*)] -Parent=Link Checkers -Browser=LinkTiger -isBanned=true - -[Mozilla/4.0 (Compatible); URLBase*] -Parent=Link Checkers -Browser=URLBase - -[Mozilla/4.0 (compatible; Link Utility; http://net-promoter.com)] -Parent=Link Checkers -Browser=NetPromoter Link Utility - -[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator*] -Parent=Link Checkers -Browser=Web Link Validator -Win32=true - -[Mozilla/4.0 (compatible; MSIE 7.0; Win32) Link Commander 3.0] -Parent=Link Checkers -Browser=Link Commander -Version=3.0 -MajorVer=3 -MinorVer=0 -Platform=Win32 - -[Mozilla/4.0 (compatible; smartBot/1.*; checking links; *)] -Parent=Link Checkers -Browser=smartBot - -[Mozilla/4.0 (compatible; SuperCleaner*;*)] -Parent=Link Checkers -Browser=SuperCleaner - -[Mozilla/5.0 gURLChecker/*] -Parent=Link Checkers -Browser=gURLChecker -isBanned=true - -[Newsgroupreporter LinkCheck] -Parent=Link Checkers -Browser=Newsgroupreporter LinkCheck - -[onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de] -Parent=Link Checkers -Browser=onCHECK Linkchecker - -[online link validator (http://www.dead-links.com/)] -Parent=Link Checkers -Browser=Dead-Links.com -isBanned=true - -[REL Link Checker*] -Parent=Link Checkers -Browser=REL Link Checker - -[RLinkCheker*] -Parent=Link Checkers -Browser=RLinkCheker - -[Robozilla/*] -Parent=Link Checkers -Browser=Robozilla - -[RPT-HTTPClient/*] -Parent=Link Checkers -Browser=RPT-HTTPClient -isBanned=true - -[SafariBookmarkChecker*(?http://www.coriolis.ch/)] -Parent=Link Checkers -Browser=SafariBookmarkChecker -Platform=MacOSX -CssVersion=2 -supportsCSS=true - -[Simpy/* (Simpy; http://www.simpy.com/?ref=bot; feedback at simpy dot com)] -Parent=Link Checkers -Browser=Simpy - -[SiteBar/*] -Parent=Link Checkers -Browser=SiteBar - -[Susie (http://www.sync2it.com/bms/susie.php] -Parent=Link Checkers -Browser=Susie - -[URLBase/6.*] -Parent=Link Checkers - -[VSE/*] -Parent=Link Checkers -Browser=VSE Link Tester - -[WebTrends Link Analyzer] -Parent=Link Checkers -Browser=WebTrends Link Analyzer - -[WorQmada/*] -Parent=Link Checkers -Browser=WorQmada - -[Xenu* Link Sleuth*] -Parent=Link Checkers -Browser=Xenu's Link Sleuth -isBanned=true - -[Z-Add Link Checker*] -Parent=Link Checkers -Browser=Z-Add Link Checker - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Microsoft - -[Microsoft] -Parent=DefaultProperties -Browser=Microsoft -isBanned=true - -[Live (http://www.live.com/)] -Parent=Microsoft -Browser=Microsoft Live -isBanned=false -isSyndicationReader=true - -[MFC Foundation Class Library*] -Parent=Microsoft -Browser=MFC Foundation Class Library - -[MFHttpScan] -Parent=Microsoft -Browser=MFHttpScan - -[Microsoft BITS/*] -Parent=Microsoft -Browser=BITS - -[Microsoft Data Access Internet Publishing Provider Cache Manager] -Parent=Microsoft -Browser=MS IPP - -[Microsoft Data Access Internet Publishing Provider DAV*] -Parent=Microsoft -Browser=MS IPP DAV - -[Microsoft Data Access Internet Publishing Provider Protocol Discovery] -Parent=Microsoft -Browser=MS IPPPD - -[Microsoft Internet Explorer] -Parent=Microsoft -Browser=Fake IE - -[Microsoft Office Existence Discovery] -Parent=Microsoft -Browser=Microsoft Office Existence Discovery - -[Microsoft Office Protocol Discovery] -Parent=Microsoft -Browser=MS OPD - -[Microsoft Office/* (*Picture Manager*)] -Parent=Microsoft -Browser=Microsoft Office Picture Manager - -[Microsoft URL Control*] -Parent=Microsoft -Browser=Microsoft URL Control - -[Microsoft Visio MSIE] -Parent=Microsoft -Browser=Microsoft Visio - -[Microsoft-WebDAV-MiniRedir/*] -Parent=Microsoft -Browser=Microsoft-WebDAV - -[Mozilla/5.0 (Macintosh; Intel Mac OS X) Excel/12.*] -Parent=Microsoft -Browser=Microsoft Excel -Version=12.0 -MajorVer=12 -MinorVer=0 -Platform=MacOSX - -[MSN Feed Manager] -Parent=Microsoft -Browser=MSN Feed Manager -isBanned=false -isSyndicationReader=true - -[MSProxy/*] -Parent=Microsoft -Browser=MS Proxy - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Browsers - -[Miscellaneous Browsers] -Parent=DefaultProperties -Browser=Miscellaneous Browsers -Frames=true -Tables=true -Cookies=true - -[*Amiga*] -Parent=Miscellaneous Browsers -Browser=Amiga -Platform=Amiga - -[*avantbrowser*] -Parent=Miscellaneous Browsers -Browser=Avant Browser - -[12345] -Parent=Miscellaneous Browsers -Browser=12345 -isBanned=true - -[Ace Explorer] -Parent=Miscellaneous Browsers -Browser=Ace Explorer - -[Enigma Browser*] -Parent=Miscellaneous Browsers -Browser=Enigma Browser - -[EVE-minibrowser/*] -Parent=Miscellaneous Browsers -Browser=EVE-minibrowser -IFrames=false -Tables=false -BackgroundSounds=false -VBScript=false -JavaApplets=false -JavaScript=false -ActiveXControls=false -isBanned=false -Crawler=false - -[Godzilla/* (Basic*; *; Commodore C=64; *; rv:1.*)*] -Parent=Miscellaneous Browsers -Browser=Godzilla - -[GreenBrowser] -Parent=Miscellaneous Browsers -Browser=GreenBrowser -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=2 -supportsCSS=true - -[Kopiczek/* (WyderOS*; *)] -Parent=Miscellaneous Browsers -Browser=Kopiczek -Platform=WyderOS -IFrames=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/* (*) - BrowseX (*)] -Parent=Miscellaneous Browsers -Browser=BrowseX - -[Mozilla/* (Win32;*Escape?*; ?)] -Parent=Miscellaneous Browsers -Browser=Escape -Platform=Win32 - -[Mozilla/4.0 (compatible; ibisBrowser)] -Parent=Miscellaneous Browsers -Browser=ibisBrowser - -[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) AppleWebKit/* (*) HistoryHound/*] -Parent=Miscellaneous Browsers -Browser=HistoryHound - -[NetRecorder*] -Parent=Miscellaneous Browsers -Browser=NetRecorder - -[NetSurfer*] -Parent=Miscellaneous Browsers -Browser=NetSurfer - -[ogeb browser , Version 1.1.0] -Parent=Miscellaneous Browsers -Browser=ogeb browser -Version=1.1 -MajorVer=1 -MinorVer=1 - -[SCEJ PSP BROWSER 0102pspNavigator] -Parent=Miscellaneous Browsers -Browser=Wipeout Pure - -[SlimBrowser] -Parent=Miscellaneous Browsers -Browser=SlimBrowser - -[WWW_Browser/*] -Parent=Miscellaneous Browsers -Browser=WWW Browser -Version=1.69 -MajorVer=1 -MinorVer=69 -Platform=Win16 -CssVersion=3 -supportsCSS=true - -[*Netcraft Webserver Survey*] -Parent=Netcraft -Browser=Netcraft Webserver Survey -isBanned=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Offline Browsers - -[Offline Browsers] -Parent=DefaultProperties -Browser=Offline Browsers -Frames=true -Tables=true -Cookies=true -isBanned=true -Crawler=true - -[*Check&Get*] -Parent=Offline Browsers -Browser=Check&Get - -[*HTTrack*] -Parent=Offline Browsers -Browser=HTTrack - -[*MSIECrawler*] -Parent=Offline Browsers -Browser=IE Offline Browser - -[*TweakMASTER*] -Parent=Offline Browsers -Browser=TweakMASTER - -[BackStreet Browser *] -Parent=Offline Browsers -Browser=BackStreet Browser - -[Go-Ahead-Got-It*] -Parent=Offline Browsers -Browser=Go Ahead Got-It - -[iGetter/*] -Parent=Offline Browsers -Browser=iGetter - -[Teleport*] -Parent=Offline Browsers -Browser=Teleport - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Online Scanners - -[Online Scanners] -Parent=DefaultProperties -Browser=Online Scanners -isBanned=true - -[JoeDog/* (X11; I; Siege *)] -Parent=Online Scanners -Browser=JoeDog -isBanned=false - -[Morfeus Fucking Scanner] -Parent=Online Scanners -Browser=Morfeus Fucking Scanner - -[Mozilla/4.0 (compatible; Trend Micro tmdr 1.*] -Parent=Online Scanners -Browser=Trend Micro - -[Titanium 2005 (4.02.01)] -Parent=Online Scanners -Browser=Panda Antivirus Titanium - -[virus_detector*] -Parent=Online Scanners -Browser=Secure Computing Corporation - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Proxy Servers - -[Proxy Servers] -Parent=DefaultProperties -Browser=Proxy Servers -isBanned=true - -[*squid*] -Parent=Proxy Servers -Browser=Squid - -[Anonymisiert*] -Parent=Proxy Servers -Browser=Anonymizied - -[Anonymizer/*] -Parent=Proxy Servers -Browser=Anonymizer - -[Anonymizied*] -Parent=Proxy Servers -Browser=Anonymizied - -[Anonymous*] -Parent=Proxy Servers -Browser=Anonymous - -[Anonymous/*] -Parent=Proxy Servers -Browser=Anonymous - -[CE-Preload] -Parent=Proxy Servers -Browser=CE-Preload - -[http://Anonymouse.org/*] -Parent=Proxy Servers -Browser=Anonymouse - -[IE/6.01 (CP/M; 8-bit*)] -Parent=Proxy Servers -Browser=Squid - -[Mozilla/* (TuringOS; Turing Machine; 0.0)] -Parent=Proxy Servers -Browser=Anonymizer - -[Mozilla/4.0 (compatible; MSIE ?.0; SaferSurf*)] -Parent=Proxy Servers -Browser=SaferSurf - -[Mozilla/5.0 (compatible; del.icio.us-thumbnails/*; *) KHTML/* (like Gecko)] -Parent=Proxy Servers -Browser=Yahoo! -isBanned=true -Crawler=true - -[Nutscrape] -Parent=Proxy Servers -Browser=Squid - -[Nutscrape/* (CP/M; 8-bit*)] -Parent=Proxy Servers -Browser=Squid - -[Privoxy/*] -Parent=Proxy Servers -Browser=Privoxy - -[ProxyTester*] -Parent=Proxy Servers -Browser=ProxyTester -isBanned=true -Crawler=true - -[SilentSurf*] -Parent=Proxy Servers -Browser=SilentSurf - -[SmallProxy*] -Parent=Proxy Servers -Browser=SmallProxy - -[Space*Bison/*] -Parent=Proxy Servers -Browser=Proxomitron - -[Sqworm/*] -Parent=Proxy Servers -Browser=Websense - -[SurfControl] -Parent=Proxy Servers -Browser=SurfControl - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Research Projects - -[Research Projects] -Parent=DefaultProperties -Browser=Research Projects -isBanned=true -Crawler=true - -[*research*] -Parent=Research Projects - -[AcadiaUniversityWebCensusClient] -Parent=Research Projects -Browser=AcadiaUniversityWebCensusClient - -[Amico Alpha * (*) Gecko/* AmicoAlpha/*] -Parent=Research Projects -Browser=Amico Alpha - -[annotate_google; http://ponderer.org/*] -Parent=Research Projects -Browser=Annotate Google - -[CMS crawler (?http://buytaert.net/crawler/)] -Parent=Research Projects - -[e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)] -Parent=Research Projects -Browser=e-SocietyRobot - -[Forschungsportal/*] -Parent=Research Projects -Browser=Forschungsportal - -[Gulper Web *] -Parent=Research Projects -Browser=Gulper Web Bot - -[HooWWWer/*] -Parent=Research Projects -Browser=HooWWWer - -[http://buytaert.net/crawler] -Parent=Research Projects - -[inetbot/* (?http://www.inetbot.com/bot.html)] -Parent=Research Projects -Browser=inetbot - -[IRLbot/*] -Parent=Research Projects -Browser=IRLbot - -[Lachesis] -Parent=Research Projects -Browser=Lachesis - -[Mozilla/5.0 (compatible; nextthing.org/*)] -Parent=Research Projects -Browser=nextthing.org -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Mozilla/5.0 (compatible; Theophrastus/*)] -Parent=Research Projects -Browser=Theophrastus - -[Mozilla/5.0 (compatible; Webscan v0.*; http://otc.dyndns.org/webscan/)] -Parent=Research Projects -Browser=Webscan - -[MQbot*] -Parent=Research Projects -Browser=MQbot - -[OutfoxBot/*] -Parent=Research Projects -Browser=OutfoxBot - -[polybot?*] -Parent=Research Projects -Browser=Polybot - -[Shim?Crawler*] -Parent=Research Projects -Browser=Shim Crawler - -[Steeler/*] -Parent=Research Projects -Browser=Steeler - -[Taiga web spider] -Parent=Research Projects -Browser=Taiga - -[Theme Spider*] -Parent=Research Projects -Browser=Theme Spider - -[UofTDB_experiment* (leehyun@cs.toronto.edu)] -Parent=Research Projects -Browser=UofTDB Experiment - -[USyd-NLP-Spider*] -Parent=Research Projects -Browser=USyd-NLP-Spider - -[woriobot*] -Parent=Research Projects -Browser=woriobot - -[wwwster/* (Beta, mailto:gue@cis.uni-muenchen.de)] -Parent=Research Projects -Browser=wwwster -Beta=true - -[Zao-Crawler] -Parent=Research Projects -Browser=Zao-Crawler - -[Zao/*] -Parent=Research Projects -Browser=Zao - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Rippers - -[Rippers] -Parent=DefaultProperties -Browser=Rippers -Frames=true -IFrames=true -Tables=true -isBanned=true -Crawler=true - -[*grub*] -Parent=Rippers -Browser=grub - -[*ickHTTP*] -Parent=Rippers -Browser=IP*Works - -[*java*] -Parent=Rippers - -[*libwww-perl*] -Parent=Rippers -Browser=libwww-perl - -[*WebGrabber*] -Parent=Rippers - -[*WinHttpRequest*] -Parent=Rippers -Browser=WinHttp - -[3D-FTP/*] -Parent=Rippers -Browser=3D-FTP - -[3wGet/*] -Parent=Rippers -Browser=3wGet - -[ActiveRefresh*] -Parent=Rippers -Browser=ActiveRefresh - -[Artera (Version *)] -Parent=Rippers -Browser=Artera - -[AutoHotkey] -Parent=Rippers -Browser=AutoHotkey - -[b2w/*] -Parent=Rippers -Browser=b2w - -[BasicHTTP/*] -Parent=Rippers -Browser=BasicHTTP - -[BlockNote.Net] -Parent=Rippers -Browser=BlockNote.Net - -[CAST] -Parent=Rippers -Browser=CAST - -[CFNetwork/*] -Parent=Rippers -Browser=CFNetwork - -[CFSCHEDULE*] -Parent=Rippers -Browser=ColdFusion Task Scheduler - -[CobWeb/*] -Parent=Rippers -Browser=CobWeb - -[ColdFusion*] -Parent=Rippers -Browser=ColdFusion - -[Crawl_Application] -Parent=Rippers -Browser=Crawl_Application - -[curl/*] -Parent=Rippers -Browser=cURL - -[Custo*] -Parent=Rippers -Browser=Custo - -[DataCha0s/*] -Parent=Rippers -Browser=DataCha0s - -[DeepIndexer*] -Parent=Rippers -Browser=DeepIndexer - -[DISCo Pump *] -Parent=Rippers -Browser=DISCo Pump - -[eStyleSearch * (compatible; MSIE 6.0; Windows NT 5.0)] -Parent=Rippers -Browser=eStyleSearch -Win32=true - -[ezic.com http agent *] -Parent=Rippers -Browser=Ezic.com - -[fetch libfetch/*] -Parent=Rippers - -[FGet*] -Parent=Rippers -Browser=FGet - -[Flaming AttackBot*] -Parent=Rippers -Browser=Flaming AttackBot - -[Foobot*] -Parent=Rippers -Browser=Foobot - -[GameSpyHTTP/*] -Parent=Rippers -Browser=GameSpyHTTP - -[gnome-vfs/*] -Parent=Rippers -Browser=gnome-vfs - -[Harvest/*] -Parent=Rippers -Browser=Harvest - -[hcat/*] -Parent=Rippers -Browser=hcat - -[HLoader] -Parent=Rippers -Browser=HLoader - -[Holmes/*] -Parent=Rippers -Browser=Holmes - -[HTMLParser/*] -Parent=Rippers -Browser=HTMLParser - -[http generic] -Parent=Rippers -Browser=http generic - -[httpclient*] -Parent=Rippers - -[httperf/*] -Parent=Rippers -Browser=httperf - -[HTTPFetch/*] -Parent=Rippers -Browser=HTTPFetch - -[HTTPGrab] -Parent=Rippers -Browser=HTTPGrab - -[HttpSession] -Parent=Rippers -Browser=HttpSession - -[httpunit/*] -Parent=Rippers -Browser=HttpUnit - -[ICE_GetFile] -Parent=Rippers -Browser=ICE_GetFile - -[iexplore.exe] -Parent=Rippers - -[Inet - Eureka App] -Parent=Rippers -Browser=Inet - Eureka App - -[INetURL/*] -Parent=Rippers -Browser=INetURL - -[InetURL:/*] -Parent=Rippers -Browser=InetURL - -[Internet Exploiter/*] -Parent=Rippers - -[Internet Explore *] -Parent=Rippers -Browser=Fake IE - -[Internet Explorer *] -Parent=Rippers -Browser=Fake IE - -[IP*Works!*/*] -Parent=Rippers -Browser=IP*Works! - -[IrssiUrlLog/*] -Parent=Rippers -Browser=IrssiUrlLog - -[JPluck/*] -Parent=Rippers -Browser=JPluck - -[Kapere (http://www.kapere.com)] -Parent=Rippers -Browser=Kapere - -[LeechFTP] -Parent=Rippers -Browser=LeechFTP - -[LeechGet*] -Parent=Rippers -Browser=LeechGet - -[libcurl-agent/*] -Parent=Rippers -Browser=libcurl - -[libWeb/clsHTTP*] -Parent=Rippers -Browser=libWeb/clsHTTP - -[lwp*] -Parent=Rippers - -[MFC_Tear_Sample] -Parent=Rippers -Browser=MFC_Tear_Sample - -[Moozilla] -Parent=Rippers -Browser=Moozilla - -[MovableType/*] -Parent=Rippers -Browser=MovableType Web Log - -[Mozilla/2.0 (compatible; NEWT ActiveX; Win32)] -Parent=Rippers -Browser=NEWT ActiveX -Platform=Win32 - -[Mozilla/3.0 (compatible)] -Parent=Rippers - -[Mozilla/3.0 (compatible; Indy Library)] -Parent=Rippers -Cookies=true - -[Mozilla/3.01 (compatible;)] -Parent=Rippers - -[Mozilla/4.0 (compatible; BorderManager*)] -Parent=Rippers -Browser=Novell BorderManager - -[Mozilla/4.0 (compatible;)] -Parent=Rippers - -[Mozilla/5.0 (compatible; IPCheck Server Monitor*)] -Parent=Rippers -Browser=IPCheck Server Monitor - -[OCN-SOC/*] -Parent=Rippers -Browser=OCN-SOC - -[Offline Explorer*] -Parent=Rippers -Browser=Offline Explorer - -[Open Web Analytics Bot*] -Parent=Rippers -Browser=Open Web Analytics Bot - -[OSSProxy*] -Parent=Rippers -Browser=OSSProxy - -[Pageload*] -Parent=Rippers -Browser=PageLoad - -[PageNest/*] -Parent=Rippers -Browser=PageNest - -[pavuk/*] -Parent=Rippers -Browser=Pavuk - -[PEAR HTTP_Request*] -Parent=Rippers -Browser=PEAR-PHP - -[PHP*] -Parent=Rippers -Browser=PHP - -[PigBlock (Windows NT 5.1; U)*] -Parent=Rippers -Browser=PigBlock -Win32=true - -[Pockey*] -Parent=Rippers -Browser=Pockey-GetHTML - -[POE-Component-Client-HTTP/*] -Parent=Rippers -Browser=POE-Component-Client-HTTP - -[PycURL/*] -Parent=Rippers -Browser=PycURL - -[Python*] -Parent=Rippers -Browser=Python - -[RepoMonkey*] -Parent=Rippers -Browser=RepoMonkey - -[SBL-BOT*] -Parent=Rippers -Browser=BlackWidow - -[ScoutAbout*] -Parent=Rippers -Browser=ScoutAbout - -[sherlock/*] -Parent=Rippers -Browser=Sherlock - -[SiteParser/*] -Parent=Rippers -Browser=SiteParser - -[SiteSnagger*] -Parent=Rippers -Browser=SiteSnagger - -[SiteSucker/*] -Parent=Rippers -Browser=SiteSucker - -[SiteWinder*] -Parent=Rippers -Browser=SiteWinder - -[Snoopy*] -Parent=Rippers -Browser=Snoopy - -[SOFTWING_TEAR_AGENT*] -Parent=Rippers -Browser=AspTear - -[SuperHTTP/*] -Parent=Rippers -Browser=SuperHTTP - -[Tcl http client package*] -Parent=Rippers -Browser=Tcl http client package - -[Twisted PageGetter] -Parent=Rippers -Browser=Twisted PageGetter - -[URL2File/*] -Parent=Rippers -Browser=URL2File - -[UtilMind HTTPGet] -Parent=Rippers -Browser=UtilMind HTTPGet - -[VCI WebViewer*] -Parent=Rippers -Browser=VCI WebViewer - -[W3CRobot/*] -Parent=Rippers -Browser=W3CRobot - -[Web Downloader*] -Parent=Rippers -Browser=Web Downloader - -[Web Downloader/*] -Parent=Rippers -Browser=Web Downloader - -[Web Magnet*] -Parent=Rippers -Browser=Web Magnet - -[WebAuto/*] -Parent=Rippers - -[webbandit/*] -Parent=Rippers -Browser=webbandit - -[WebCopier*] -Parent=Rippers -Browser=WebCopier - -[WebDownloader*] -Parent=Rippers -Browser=WebDownloader - -[WebFetch] -Parent=Rippers -Browser=WebFetch - -[webfetch/*] -Parent=Rippers -Browser=WebFetch - -[WebGatherer*] -Parent=Rippers -Browser=WebGatherer - -[WebGet] -Parent=Rippers -Browser=WebGet - -[WebReaper*] -Parent=Rippers -Browser=WebReaper - -[WebRipper] -Parent=Rippers -Browser=WebRipper - -[WebSauger*] -Parent=Rippers -Browser=WebSauger - -[Website Downloader*] -Parent=Rippers -Browser=Website Downloader - -[Website eXtractor*] -Parent=Rippers -Browser=Website eXtractor - -[Website Quester] -Parent=Rippers -Browser=Website Quester - -[WebsiteExtractor*] -Parent=Rippers -Browser=Website eXtractor - -[WebSnatcher*] -Parent=Rippers -Browser=WebSnatcher - -[Webster Pro*] -Parent=Rippers -Browser=Webster Pro - -[WebStripper*] -Parent=Rippers -Browser=WebStripper - -[WebWhacker*] -Parent=Rippers -Browser=WebWhacker - -[WinScripter iNet Tools] -Parent=Rippers -Browser=WinScripter iNet Tools - -[WWW-Mechanize/*] -Parent=Rippers -Browser=WWW-Mechanize - -[Zend_Http_Client] -Parent=Rippers -Browser=Zend_Http_Client - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Site Monitors - -[Site Monitors] -Parent=DefaultProperties -Browser=Site Monitors -Cookies=true -isBanned=true -Crawler=true - -[*EasyRider*] -Parent=Site Monitors -Browser=EasyRider - -[*maxamine.com--robot*] -Parent=Site Monitors -Browser=maxamine.com--robot -isBanned=true - -[*WebMon ?.*] -Parent=Site Monitors -Browser=WebMon - -[Kenjin Spider*] -Parent=Site Monitors -Browser=Kenjin Spider - -[Kevin http://*] -Parent=Site Monitors -Browser=Kevin -isBanned=true - -[Mozilla/4.0 (compatible; ChangeDetection/*] -Parent=Site Monitors -Browser=ChangeDetection - -[Myst Monitor Service v*] -Parent=Site Monitors -Browser=Myst Monitor Service - -[Net Probe] -Parent=Site Monitors -Browser=Net Probe - -[NetMechanic*] -Parent=Site Monitors -Browser=NetMechanic - -[NetReality*] -Parent=Site Monitors -Browser=NetReality - -[Pingdom GIGRIB*] -Parent=Site Monitors -Browser=Pingdom - -[Site Valet Online*] -Parent=Site Monitors -Browser=Site Valet -isBanned=true - -[SITECHECKER] -Parent=Site Monitors -Browser=SITECHECKER - -[sitemonitor@dnsvr.com/*] -Parent=Site Monitors -Browser=ZoneEdit Failover Monitor -isBanned=false - -[UpTime Checker*] -Parent=Site Monitors -Browser=UpTime Checker - -[URL Control*] -Parent=Site Monitors -Browser=URL Control - -[URL_Access/*] -Parent=Site Monitors - -[URLCHECK] -Parent=Site Monitors -Browser=URLCHECK - -[URLy Warning*] -Parent=Site Monitors -Browser=URLy Warning - -[Webcheck *] -Parent=Site Monitors -Browser=Webcheck -Version=1.0 -MajorVer=1 -MinorVer=0 - -[WebPatrol/*] -Parent=Site Monitors -Browser=WebPatrol - -[websitepulse checker/*] -Parent=Site Monitors -Browser=websitepulse checker - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Social Bookmarkers - -[Social Bookmarkers] -Parent=DefaultProperties -Browser=Social Bookmarkers -Frames=true -Tables=true -Cookies=true -JavaScript=true - -[BookmarkBase(2/;http://bookmarkbase.com)] -Parent=Social Bookmarkers -Browser=BookmarkBase - -[Cocoal.icio.us/1.0 (v43) (Mac OS X; http://www.scifihifi.com/cocoalicious)] -Parent=Social Bookmarkers -Browser=Cocoalicious - -[Mozilla/5.0 (compatible; FriendFeedBot/0.*; Http://friendfeed.com/about/bot)] -Parent=Social Bookmarkers -Browser=FriendFeedBot - -[Twitturly*] -Parent=Social Bookmarkers -Browser=Twitturly - -[WinkBot/*] -Parent=Social Bookmarkers -Browser=WinkBot - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Translators - -[Translators] -Parent=DefaultProperties -Browser=Translators -Frames=true -Tables=true -Cookies=true - -[Seram Server] -Parent=Translators -Browser=Seram Server - -[TeragramWebcrawler/*] -Parent=Translators -Browser=TeragramWebcrawler -Version=1.0 -MajorVer=1 -MinorVer=0 - -[WebIndexer/* (Web Indexer; *)] -Parent=Translators -Browser=WorldLingo - -[WebTrans] -Parent=Translators -Browser=WebTrans - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Version Checkers - -[Version Checkers] -Parent=DefaultProperties -Browser=Version Checkers -Crawler=true - -[Automated Browscap.ini Updater. To report issues contact us at http://www.skycomp.ca] -Parent=Version Checkers -Browser=Automated Browscap.ini Updater - -[BMC Link Validator (http://www.briansmodelcars.com/links/)] -Parent=Version Checkers -Browser=BMC Link Validator -MajorVer=1 -MinorVer=0 -Platform=Win2000 - -[Browscap updater] -Parent=Version Checkers -Browser=Browscap updater - -[BrowscapUpdater1.0] -Parent=Version Checkers - -[Browser Capabilities Project (http://browsers.garykeith.com; http://browsers.garykeith.com/sitemail/contact-me.asp)] -Parent=Version Checkers -Browser=Gary Keith's Version Checker - -[Browser Capabilities Project AutoDownloader] -Parent=Version Checkers -Browser=TKC AutoDownloader - -[browsers.garykeith.com browscap.ini bot BETA] -Parent=Version Checkers - -[Code Sample Web Client] -Parent=Version Checkers -Browser=Code Sample Web Client - -[Desktop Sidebar*] -Parent=Version Checkers -Browser=Desktop Sidebar -isBanned=true - -[Mono Browser Capabilities Updater*] -Parent=Version Checkers -Browser=Mono Browser Capabilities Updater -isBanned=true - -[Rewmi/*] -Parent=Version Checkers -isBanned=true - -[Subtext Version 1.9* - http://subtextproject.com/ (Microsoft Windows NT 5.2.*)] -Parent=Version Checkers -Browser=Subtext - -[TherapeuticResearch] -Parent=Version Checkers -Browser=TherapeuticResearch - -[UpdateBrowscap*] -Parent=Version Checkers -Browser=UpdateBrowscap - -[www.garykeith.com browscap.ini bot*] -Parent=Version Checkers -Browser=clarkson.edu - -[www.substancia.com AutoHTTPAgent (ver *)] -Parent=Version Checkers -Browser=Substância - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Become - -[Become] -Parent=DefaultProperties -Browser=Become -Frames=true -Tables=true -isSyndicationReader=true -Crawler=true - -[*BecomeBot/*] -Parent=Become -Browser=BecomeBot - -[*BecomeBot@exava.com*] -Parent=Become -Browser=BecomeBot - -[*Exabot@exava.com*] -Parent=Become -Browser=Exabot - -[MonkeyCrawl/*] -Parent=Become -Browser=MonkeyCrawl - -[Mozilla/5.0 (compatible; BecomeJPBot/2.3; *)] -Parent=Become -Browser=BecomeJPBot - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Blue Coat Systems - -[Blue Coat Systems] -Parent=DefaultProperties -Browser=Blue Coat Systems -isBanned=true -Crawler=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Browscap Abusers - -[Browscap Abusers] -Parent=DefaultProperties -Browser=Browscap Abusers -isBanned=true - -[Apple-PubSub/*] -Parent=Browscap Abusers -Browser=Apple-PubSub - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FeedHub - -[FeedHub] -Parent=DefaultProperties -Browser=FeedHub -isSyndicationReader=true - -[FeedHub FeedDiscovery/1.0 (http://www.feedhub.com)] -Parent=FeedHub -Browser=FeedHub FeedDiscovery -Version=1.0 -MajorVer=1 -MinorVer=0 - -[FeedHub FeedFetcher/1.0 (http://www.feedhub.com)] -Parent=FeedHub -Browser=FeedHub FeedFetcher -Version=1.0 -MajorVer=1 -MinorVer=0 - -[FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)] -Parent=FeedHub -Browser=FeedHub MetaDataFetcher -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Internet Content Rating Association] -Parent=DefaultProperties -Browser= -Frames=true -IFrames=true -Tables=true -Cookies=true -Crawler=true - -[ICRA_label_generator/1.?] -Parent=Internet Content Rating Association -Browser=ICRA_label_generator - -[ICRA_Semantic_spider/0.?] -Parent=Internet Content Rating Association -Browser=ICRA_Semantic_spider - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NameProtect - -[NameProtect] -Parent=DefaultProperties -Browser=NameProtect -isBanned=true -Crawler=true - -[abot/*] -Parent=NameProtect -Browser=NameProtect - -[NP/*] -Parent=NameProtect -Browser=NameProtect - -[NPBot*] -Parent=NameProtect -Browser=NameProtect - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netcraft - -[Netcraft] -Parent=DefaultProperties -Browser=Netcraft -isBanned=true -Crawler=true - -[*Netcraft Web Server Survey*] -Parent=Netcraft -Browser=Netcraft Webserver Survey -isBanned=true - -[Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; info@netcraft.com)] -Parent=Netcraft -Browser=NetcraftSurveyAgent - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NewsGator - -[NewsGator] -Parent=DefaultProperties -Browser=NewsGator -isSyndicationReader=true - -[MarsEdit*] -Parent=NewsGator -Browser=MarsEdit - -[NetNewsWire*/*] -Parent=NewsGator -Browser=NetNewsWire -Platform=MacOSX - -[NewsFire/*] -Parent=NewsGator -Browser=NewsFire - -[NewsGator FetchLinks extension/*] -Parent=NewsGator -Browser=NewsGator FetchLinks - -[NewsGator/*] -Parent=NewsGator -Browser=NewsGator -isBanned=true - -[NewsGatorOnline/*] -Parent=NewsGator -Browser=NewsGatorOnline - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.2 - -[Chrome 0.2] -Parent=DefaultProperties -Browser=Chrome -Version=0.2 -MinorVer=2 -Beta=true -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] -Parent=Chrome 0.2 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] -Parent=Chrome 0.2 -Platform=Win2003 - -[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] -Parent=Chrome 0.2 -Platform=WinVista - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.3 - -[Chrome 0.3] -Parent=DefaultProperties -Browser=Chrome -Version=0.3 -MinorVer=3 -Beta=true -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] -Parent=Chrome 0.3 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] -Parent=Chrome 0.3 -Platform=Win2003 - -[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] -Parent=Chrome 0.3 -Platform=WinVista - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.4 - -[Chrome 0.4] -Parent=DefaultProperties -Browser=Chrome -Version=0.4 -MinorVer=4 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] -Parent=Chrome 0.4 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] -Parent=Chrome 0.4 -Platform=Win2003 - -[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] -Parent=Chrome 0.4 -Platform=WinVista - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.5 - -[Chrome 0.5] -Parent=DefaultProperties -Browser=Chrome -Version=0.5 -MinorVer=5 -Beta=true -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] -Parent=Chrome 0.5 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] -Parent=Chrome 0.5 -Platform=Win2003 - -[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] -Parent=Chrome 0.5 -Platform=WinVista - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 1.0 - -[Chrome 1.0] -Parent=DefaultProperties -Browser=Chrome -Version=1.0 -MajorVer=1 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] -Parent=Chrome 1.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] -Parent=Chrome 1.0 -Platform=Win2003 - -[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] -Parent=Chrome 1.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] -Parent=Chrome 1.0 -Platform=Win7 - -[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] -Parent=Chrome 1.0 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 2.0 - -[Chrome 2.0] -Parent=DefaultProperties -Browser=Chrome -Version=2.0 -MajorVer=2 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] -Parent=Chrome 2.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] -Parent=Chrome 2.0 -Platform=Win2003 - -[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] -Parent=Chrome 2.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] -Parent=Chrome 2.0 -Platform=Win7 - -[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] -Parent=Chrome 2.0 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 3.0 - -[Chrome 3.0] -Parent=DefaultProperties -Browser=Chrome -Version=3.0 -MajorVer=3 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] -Parent=Chrome 3.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] -Parent=Chrome 3.0 -Platform=Win2003 - -[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] -Parent=Chrome 3.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] -Parent=Chrome 3.0 -Platform=Win7 - -[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] -Parent=Chrome 3.0 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Code - -[Google Code] -Parent=DefaultProperties -Browser=Google Code -Tables=true -Cookies=true -JavaApplets=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.2 - -[Iron 0.2] -Parent=DefaultProperties -Browser=Iron -Version=0.2 -MinorVer=2 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] -Parent=Iron 0.2 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] -Parent=Iron 0.2 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] -Parent=Iron 0.2 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.3 - -[Iron 0.3] -Parent=DefaultProperties -Browser=Iron -Version=0.3 -MinorVer=3 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] -Parent=Iron 0.3 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] -Parent=Iron 0.3 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] -Parent=Iron 0.3 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.4 - -[Iron 0.4] -Parent=DefaultProperties -Browser=Iron -Version=0.4 -MinorVer=4 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] -Parent=Iron 0.4 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] -Parent=Iron 0.4 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] -Parent=Iron 0.4 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPod - -[iPod] -Parent=DefaultProperties -Browser=iPod -Platform=iPhone OSX -isMobileDevice=true - -[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/3.0 Mobile/* Safari/*] -Parent=iPod -Version=3.0 -MajorVer=3 -MinorVer=0 -Platform=MacOSX - -[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/* (KHTML, like Gecko) Mobile/*] -Parent=iPod - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iTunes - -[iTunes] -Parent=DefaultProperties -Browser=iTunes -Platform=iPhone OSX - -[iTunes/* (Windows; ?)] -Parent=iTunes -Browser=iTunes -Platform=Win32 -Win32=true - -[MOT-* iTunes/* MIB/* Profile/MIDP-* Configuration/CLDC-* UP.Link/*] -Parent=iTunes - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Media Players - -[Media Players] -Parent=DefaultProperties -Browser=Media Players -Cookies=true - -[Microsoft NetShow(TM) Player with RealVideo(R)] -Parent=Media Players -Browser=Microsoft NetShow - -[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* RealPlayer] -Parent=Media Players -Browser=RealPlayer -Platform=MacOSX - -[MPlayer 0.9*] -Parent=Media Players -Browser=MPlayer -Version=0.9 -MajorVer=0 -MinorVer=9 - -[MPlayer 1.*] -Parent=Media Players -Browser=MPlayer -Version=1.0 -MajorVer=1 -MinorVer=0 - -[MPlayer HEAD CVS] -Parent=Media Players -Browser=MPlayer - -[RealPlayer*] -Parent=Media Players -Browser=RealPlayer - -[RMA/*] -Parent=Media Players -Browser=RMA - -[VLC media player*] -Parent=Media Players -Browser=VLC - -[vobsub] -Parent=Media Players -Browser=vobsub -isBanned=true - -[WinampMPEG/*] -Parent=Media Players -Browser=WinAmp - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nintendo - -[Nintendo Wii] -Parent=DefaultProperties -Browser= -isMobileDevice=true - -[Opera/* (Nintendo DSi; Opera/*; *; *)] -Parent=Nintendo Wii -Browser=DSi - -[Opera/* (Nintendo Wii; U; *)] -Parent=Nintendo Wii -Browser=Wii - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Windows Media Player - -[Windows Media Player] -Parent=DefaultProperties -Browser=Windows Media Player -Cookies=true - -[NSPlayer/10.*] -Parent=Windows Media Player -Version=10.0 -MajorVer=10 -MinorVer=0 - -[NSPlayer/11.*] -Parent=Windows Media Player -Browser=Windows Media Player -Version=11.0 -MajorVer=11 -MinorVer=0 - -[NSPlayer/4.*] -Parent=Windows Media Player -Browser=Windows Media Player -Version=4.0 -MajorVer=4 -MinorVer=0 - -[NSPlayer/7.*] -Parent=Windows Media Player -Browser=Windows Media Player -Version=7.0 -MajorVer=7 -MinorVer=0 - -[NSPlayer/8.*] -Parent=Windows Media Player -Browser=Windows Media Player -Version=8.0 -MajorVer=8 -MinorVer=0 - -[NSPlayer/9.*] -Parent=Windows Media Player -Browser=Windows Media Player -Version=9.0 -MajorVer=9 -MinorVer=0 - -[Windows-Media-Player/10.*] -Parent=Windows Media Player -Browser=Windows-Media-Player -Version=10.0 -MajorVer=10 -MinorVer=0 -Win32=true - -[Windows-Media-Player/11.*] -Parent=Windows Media Player -Version=11.0 -MajorVer=11 -MinorVer=0 -Win32=true - -[Windows-Media-Player/7.*] -Parent=Windows Media Player -Browser=Windows Media Player -Version=7.0 -MajorVer=7 -MinorVer=0 -Win32=true - -[Windows-Media-Player/8.*] -Parent=Windows Media Player -Browser=Windows Media Player -Version=8.0 -MajorVer=8 -MinorVer=0 -Win32=true - -[Windows-Media-Player/9.*] -Parent=Windows Media Player -Version=9.0 -MajorVer=9 -MinorVer=0 -Win32=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Zune - -[Zune] -Parent=DefaultProperties -Browser=Zune -Cookies=true - -[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.0*)*] -Parent=Zune -Version=2.0 -MajorVer=2 -MinorVer=0 - -[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.5*)*] -Parent=Zune -Version=2.5 -MajorVer=2 -MinorVer=5 - -[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 3.0*)*] -Parent=Zune -Version=3.0 -MajorVer=3 -MinorVer=0 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.0 - -[QuickTime 7.0] -Parent=DefaultProperties -Browser=QuickTime -Version=7.0 -MajorVer=7 -Cookies=true - -[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 10.*)] -Parent=QuickTime 7.0 -Platform=MacOSX - -[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 9.*)] -Parent=QuickTime 7.0 -Platform=MacPPC - -[QuickTime (qtver=7.0*;os=Windows 95*)] -Parent=QuickTime 7.0 -Platform=Win95 -Win32=true - -[QuickTime (qtver=7.0*;os=Windows 98*)] -Parent=QuickTime 7.0 -Platform=Win98 -Win32=true - -[QuickTime (qtver=7.0*;os=Windows Me*)] -Parent=QuickTime 7.0 -Platform=WinME -Win32=true - -[QuickTime (qtver=7.0*;os=Windows NT 4.0*)] -Parent=QuickTime 7.0 -Platform=WinNT -Win32=true - -[QuickTime (qtver=7.0*;os=Windows NT 5.0*)] -Parent=QuickTime 7.0 -Platform=Win2000 -Win32=true - -[QuickTime (qtver=7.0*;os=Windows NT 5.1*)] -Parent=QuickTime 7.0 -Platform=WinXP -Win32=true - -[QuickTime (qtver=7.0*;os=Windows NT 5.2*)] -Parent=QuickTime 7.0 -Platform=Win2003 -Win32=true - -[QuickTime/7.0.* (qtver=7.0.*;*;os=Mac 10.*)*] -Parent=QuickTime 7.0 -Platform=MacOSX - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.1 - -[QuickTime 7.1] -Parent=DefaultProperties -Browser=QuickTime -Version=7.1 -MajorVer=7 -MinorVer=1 -Cookies=true - -[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 10.*)] -Parent=QuickTime 7.1 -Platform=MacOSX - -[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 9.*)] -Parent=QuickTime 7.1 -Platform=MacPPC - -[QuickTime (qtver=7.1*;os=Windows 98*)] -Parent=QuickTime 7.1 -Platform=Win98 -Win32=true - -[QuickTime (qtver=7.1*;os=Windows NT 4.0*)] -Parent=QuickTime 7.1 -Platform=WinNT -Win32=true - -[QuickTime (qtver=7.1*;os=Windows NT 5.0*)] -Parent=QuickTime 7.1 -Platform=Win2000 -Win32=true - -[QuickTime (qtver=7.1*;os=Windows NT 5.1*)] -Parent=QuickTime 7.1 -Platform=WinXP -Win32=true - -[QuickTime (qtver=7.1*;os=Windows NT 5.2*)] -Parent=QuickTime 7.1 -Platform=Win2003 -Win32=true - -[QuickTime/7.1.* (qtver=7.1.*;*;os=Mac 10.*)*] -Parent=QuickTime 7.1 -Platform=MacOSX - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.2 - -[QuickTime 7.2] -Parent=DefaultProperties -Browser=QuickTime -Version=7.2 -MajorVer=7 -MinorVer=2 -Platform=MacOSX -Cookies=true - -[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 10.*)] -Parent=QuickTime 7.2 -Platform=MacOSX - -[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 9.*)] -Parent=QuickTime 7.2 -Platform=MacPPC - -[QuickTime (qtver=7.2*;os=Windows 98*)] -Parent=QuickTime 7.2 -Platform=Win98 -Win32=true - -[QuickTime (qtver=7.2*;os=Windows NT 4.0*)] -Parent=QuickTime 7.2 -Platform=WinNT -Win32=true - -[QuickTime (qtver=7.2*;os=Windows NT 5.0*)] -Parent=QuickTime 7.2 -Platform=Win2000 -Win32=true - -[QuickTime (qtver=7.2*;os=Windows NT 5.1*)] -Parent=QuickTime 7.2 -Platform=WinXP -Win32=true - -[QuickTime (qtver=7.2*;os=Windows NT 5.2*)] -Parent=QuickTime 7.2 -Platform=Win2003 -Win32=true - -[QuickTime/7.2.* (qtver=7.2.*;*;os=Mac 10.*)*] -Parent=QuickTime 7.2 -Platform=MacOSX - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.3 - -[QuickTime 7.3] -Parent=DefaultProperties -Browser=QuickTime -Version=7.3 -MajorVer=7 -MinorVer=3 -Platform=MacOSX -Cookies=true - -[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 10.*)] -Parent=QuickTime 7.3 -Platform=MacOSX - -[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 9.*)] -Parent=QuickTime 7.3 -Platform=MacPPC - -[QuickTime (qtver=7.3*;os=Windows 98*)] -Parent=QuickTime 7.3 -Platform=Win98 -Win32=true - -[QuickTime (qtver=7.3*;os=Windows NT 4.0*)] -Parent=QuickTime 7.3 -Platform=WinNT -Win32=true - -[QuickTime (qtver=7.3*;os=Windows NT 5.0*)] -Parent=QuickTime 7.3 -Platform=Win2000 -Win32=true - -[QuickTime (qtver=7.3*;os=Windows NT 5.1*)] -Parent=QuickTime 7.3 -Platform=WinXP -Win32=true - -[QuickTime (qtver=7.3*;os=Windows NT 5.2*)] -Parent=QuickTime 7.3 -Platform=Win2003 -Win32=true - -[QuickTime/7.3.* (qtver=7.3.*;*;os=Mac 10.*)*] -Parent=QuickTime 7.3 -Platform=MacOSX - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.4 - -[QuickTime 7.4] -Parent=DefaultProperties -Browser=QuickTime -Version=7.4 -MajorVer=7 -MinorVer=4 -Platform=MacOSX -Cookies=true - -[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 10.*)] -Parent=QuickTime 7.4 -Platform=MacOSX - -[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 9.*)] -Parent=QuickTime 7.4 -Platform=MacPPC - -[QuickTime (qtver=7.4*;os=Windows 98*)] -Parent=QuickTime 7.4 -Platform=Win98 -Win32=true - -[QuickTime (qtver=7.4*;os=Windows NT 4.0*)] -Parent=QuickTime 7.4 -Platform=WinNT -Win32=true - -[QuickTime (qtver=7.4*;os=Windows NT 5.0*)] -Parent=QuickTime 7.4 -Platform=Win2000 -Win32=true - -[QuickTime (qtver=7.4*;os=Windows NT 5.1*)] -Parent=QuickTime 7.4 -Platform=WinXP -Win32=true - -[QuickTime (qtver=7.4*;os=Windows NT 5.2*)] -Parent=QuickTime 7.4 -Platform=Win2003 -Win32=true - -[QuickTime/7.4.* (qtver=7.4.*;*;os=Mac 10.*)*] -Parent=QuickTime 7.4 -Platform=MacOSX - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Android - -[Android] -Parent=DefaultProperties -Browser=Android -Frames=true -Tables=true -Cookies=true -JavaScript=true -isMobileDevice=true - -[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] -Parent=Android -Browser=Android -Platform=Linux -isMobileDevice=true - -[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0.* Mobile Safari/*] -Parent=Android -Browser=Android -Platform=Linux -isMobileDevice=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BlackBerry - -[BlackBerry] -Parent=DefaultProperties -Browser=BlackBerry -Frames=true -Tables=true -Cookies=true -JavaScript=true -isMobileDevice=true - -[*BlackBerry*] -Parent=BlackBerry - -[*BlackBerrySimulator/*] -Parent=BlackBerry - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Handspring Blazer - -[Blazer] -Parent=DefaultProperties -Browser=Handspring Blazer -Platform=Palm -Frames=true -Tables=true -Cookies=true -isMobileDevice=true - -[Mozilla/4.0 (compatible; MSIE 6.0; Windows 95; PalmSource; Blazer 3.0) 16;160x160] -Parent=Blazer -Version=3.0 -MajorVer=3 -MinorVer=0 - -[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.0) 16;320x448] -Parent=Blazer -Version=4.0 -MajorVer=4 -MinorVer=0 - -[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.1) 16;320x320] -Parent=Blazer -Version=4.1 -MajorVer=4 -MinorVer=1 - -[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.2) 16;320x320] -Parent=Blazer -Version=4.2 -MajorVer=4 -MinorVer=2 - -[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.4) 16;320x320] -Parent=Blazer -Version=4.4 -MajorVer=4 -MinorVer=4 - -[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.5) 16;320x320] -Parent=Blazer -Version=4.5 -MajorVer=4 -MinorVer=5 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DoCoMo - -[DoCoMo] -Parent=DefaultProperties -Browser=DoCoMo -Frames=true -Tables=true -Cookies=true -JavaScript=true -isMobileDevice=true - -[DoCoMo/1.0*] -Parent=DoCoMo -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=WAP - -[DoCoMo/2.0*] -Parent=DoCoMo -Version=2.0 -MajorVer=2 -MinorVer=0 -Platform=WAP - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IEMobile - -[IEMobile] -Parent=DefaultProperties -Browser=IEMobile -Platform=WinCE -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -VBScript=true -JavaScript=true -ActiveXControls=true -isMobileDevice=true -CssVersion=2 -supportsCSS=true - -[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.*)*] -Parent=IEMobile -Version=6.0 -MajorVer=6 -MinorVer=0 - -[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.*)*] -Parent=IEMobile -Version=7.0 -MajorVer=7 -MinorVer=0 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPhone - -[iPhone] -Parent=DefaultProperties -Browser=iPhone -Platform=iPhone OSX -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -isMobileDevice=true -CssVersion=3 -supportsCSS=true - -[Mozilla/4.0 (iPhone; *)] -Parent=iPhone - -[Mozilla/4.0 (iPhone; U; CPU like Mac OS X; *)] -Parent=iPhone - -[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] -Parent=iPhone -Browser=iPhone Simulator -Version=3.1 -MajorVer=3 -MinorVer=1 - -[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_0_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] -Parent=iPhone -Browser=iPhone Simulator -Version=3.1 -MajorVer=3 -MinorVer=1 - -[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] -Parent=iPhone -Browser=iPhone Simulator -Version=3.1 -MajorVer=3 -MinorVer=1 - -[Mozilla/5.0 (iPhone)] -Parent=iPhone - -[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] -Parent=iPhone -Version=3.1 -MajorVer=3 -MinorVer=1 - -[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] -Parent=iPhone -Version=3.1 -MajorVer=3 -MinorVer=1 - -[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] -Parent=iPhone -Version=3.1 -MajorVer=3 -MinorVer=1 - -[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_2 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] -Parent=iPhone - -[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; *)*] -Parent=iPhone - -[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; *)] -Parent=iPhone - -[Mozilla/5.0 (iPhone; U; CPU like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0 Mobile/* Safari/*] -Parent=iPhone -Version=3.0 -MajorVer=3 -MinorVer=0 - -[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/* Mobile/*] -Parent=iPhone -Browser=iTouch - -[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2* like Mac OS X; *)*] -Parent=iPhone -Browser=iTouch -Version=2.2 -MajorVer=2 -MinorVer=2 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KDDI - -[KDDI] -Parent=DefaultProperties -Browser=KDDI -Frames=true -Tables=true -Cookies=true -BackgroundSounds=true -VBScript=true -JavaScript=true -ActiveXControls=true -isMobileDevice=true -CssVersion=1 -supportsCSS=true - -[KDDI-* UP.Browser/* (GUI) MMP/*] -Parent=KDDI - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Mobile - -[Miscellaneous Mobile] -Parent=DefaultProperties -Browser= -IFrames=true -Tables=true -Cookies=true -JavaScript=true -isMobileDevice=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (X11; *; CentOS; *) AppleWebKit/* (KHTML, like Gecko) Bolt/0.* Version/3.0 Safari/*] -Parent=Miscellaneous Mobile -Browser=Bolt - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Motorola Internet Browser - -[Motorola Internet Browser] -Parent=DefaultProperties -Browser=Motorola Internet Browser -Frames=true -Tables=true -Cookies=true -isMobileDevice=true - -[MOT-*/*] -Parent=Motorola Internet Browser - -[MOT-1*/* UP.Browser/*] -Parent=Motorola Internet Browser - -[MOT-8700_/* UP.Browser/*] -Parent=Motorola Internet Browser - -[MOT-A-0A/* UP.Browser/*] -Parent=Motorola Internet Browser - -[MOT-A-2B/* UP.Browser/*] -Parent=Motorola Internet Browser - -[MOT-A-88/* UP.Browser/*] -Parent=Motorola Internet Browser - -[MOT-C???/* MIB/*] -Parent=Motorola Internet Browser - -[MOT-GATW_/* UP.Browser/*] -Parent=Motorola Internet Browser - -[MOT-L6/* MIB/*] -Parent=Motorola Internet Browser - -[MOT-L7/* MIB/*] -Parent=Motorola Internet Browser - -[MOT-M*/* UP.Browser/*] -Parent=Motorola Internet Browser - -[MOT-MP*/* Mozilla/* (compatible; MSIE *; Windows CE; *)] -Parent=Motorola Internet Browser -Win32=true - -[MOT-MP*/* Mozilla/4.0 (compatible; MSIE *; Windows CE; *)] -Parent=Motorola Internet Browser -Win32=true - -[MOT-SAP4_/* UP.Browser/*] -Parent=Motorola Internet Browser - -[MOT-T*/*] -Parent=Motorola Internet Browser - -[MOT-T7*/* MIB/*] -Parent=Motorola Internet Browser - -[MOT-T721*] -Parent=Motorola Internet Browser - -[MOT-TA02/* MIB/*] -Parent=Motorola Internet Browser - -[MOT-V*/*] -Parent=Motorola Internet Browser - -[MOT-V*/* MIB/*] -Parent=Motorola Internet Browser - -[MOT-V*/* UP.Browser/*] -Parent=Motorola Internet Browser - -[MOT-V3/* MIB/*] -Parent=Motorola Internet Browser - -[MOT-V4*/* MIB/*] -Parent=Motorola Internet Browser - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN Mobile Proxy - -[MSN Mobile Proxy] -Parent=DefaultProperties -Browser=MSN Mobile Proxy -Win32=true -Frames=true -Tables=true -Cookies=true -JavaScript=true -ActiveXControls=true -isMobileDevice=true - -[Mozilla/* (compatible; MSIE *; Windows*; MSN Mobile Proxy)] -Parent=MSN Mobile Proxy - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetFront - -[NetFront] -Parent=DefaultProperties -Browser=NetFront -Frames=true -Tables=true -Cookies=true -JavaScript=true -isMobileDevice=true - -[*NetFront/*] -Parent=NetFront - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nokia - -[Nokia] -Parent=DefaultProperties -Browser=Nokia -Tables=true -Cookies=true -isMobileDevice=true - -[*Nokia*/*] -Parent=Nokia - -[Mozilla/* (SymbianOS/*; ?; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] -Parent=Nokia -Platform=SymbianOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Openwave Mobile Browser - -[Openwave Mobile Browser] -Parent=DefaultProperties -Browser=Openwave Mobile Browser -Alpha=true -Win32=true -Win64=true -Frames=true -Tables=true -Cookies=true -isMobileDevice=true - -[*UP.Browser/*] -Parent=Openwave Mobile Browser - -[*UP.Link/*] -Parent=Openwave Mobile Browser - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mini - -[Opera Mini] -Parent=DefaultProperties -Browser=Opera Mini -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaScript=true -isMobileDevice=true - -[Opera/* (J2ME/MIDP; Opera Mini/1.0*)*] -Parent=Opera Mini -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Opera/* (J2ME/MIDP; Opera Mini/1.1*)*] -Parent=Opera Mini -Version=1.1 -MajorVer=1 -MinorVer=1 - -[Opera/* (J2ME/MIDP; Opera Mini/1.2*)*] -Parent=Opera Mini -Version=1.2 -MajorVer=1 -MinorVer=2 - -[Opera/* (J2ME/MIDP; Opera Mini/2.0*)*] -Parent=Opera Mini -Version=2.0 -MajorVer=2 -MinorVer=0 - -[Opera/* (J2ME/MIDP; Opera Mini/3.0*)*] -Parent=Opera Mini -Version=3.0 -MajorVer=3 -MinorVer=0 - -[Opera/* (J2ME/MIDP; Opera Mini/3.1*)*] -Parent=Opera Mini -Version=3.1 -MajorVer=3 -MinorVer=1 - -[Opera/* (J2ME/MIDP; Opera Mini/4.0*)*] -Parent=Opera Mini -Version=4.0 -MajorVer=4 -MinorVer=0 - -[Opera/* (J2ME/MIDP; Opera Mini/4.1*)*] -Parent=Opera Mini -Version=4.1 -MajorVer=4 -MinorVer=1 - -[Opera/* (J2ME/MIDP; Opera Mini/4.2*)*] -Parent=Opera Mini -Version=4.2 -MajorVer=4 -MinorVer=2 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mobile - -[Opera Mobile] -Parent=DefaultProperties -Browser=Opera Mobi -Frames=true -Tables=true -Cookies=true -isMobileDevice=true - -[Opera/9.5 (Microsoft Windows; PPC; *Opera Mobile/*)] -Parent=Opera Mobile -Version=9.5 -MajorVer=9 -MinorVer=5 - -[Opera/9.5 (Microsoft Windows; PPC; Opera Mobi/*)] -Parent=Opera Mobile -Version=9.5 -MajorVer=9 -MinorVer=5 - -[Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/*)*] -Parent=Opera Mobile -Version=9.51 -MajorVer=9 -MinorVer=51 -Beta=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Playstation - -[Playstation] -Parent=DefaultProperties -Browser=Playstation -Platform=WAP -Frames=true -Tables=true -Cookies=true -isMobileDevice=true - -[Mozilla/* (PLAYSTATION *; *)] -Parent=Playstation -Browser=PlayStation 3 -Frames=false - -[Mozilla/* (PSP (PlayStation Portable); *)] -Parent=Playstation - -[Sony PS2 (Linux)] -Parent=Playstation -Browser=Sony PS2 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Pocket PC - -[Pocket PC] -Parent=DefaultProperties -Browser=Pocket PC -Platform=WinCE -Win32=true -Frames=true -Tables=true -Cookies=true -JavaScript=true -ActiveXControls=true -isMobileDevice=true -CssVersion=1 -supportsCSS=true - -[*(compatible; MSIE *.*; Windows CE; PPC; *)] -Parent=Pocket PC - -[HTC-*/* Mozilla/* (compatible; MSIE *.*; Windows CE*)*] -Parent=Pocket PC -Win32=true - -[Mozilla/* (compatible; MSPIE *.*; *Windows CE*)*] -Parent=Pocket PC -Win32=true - -[T-Mobile* Mozilla/* (compatible; MSIE *.*; Windows CE; *)] -Parent=Pocket PC - -[Vodafone* Mozilla/* (compatible; MSIE *.*; Windows CE; *)*] -Parent=Pocket PC - -[Windows CE (Pocket PC) - Version *.*] -Parent=Pocket PC -Win32=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SEMC Browser - -[SEMC Browser] -Parent=DefaultProperties -Browser=SEMC Browser -Platform=JAVA -Tables=true -isMobileDevice=true -CssVersion=1 -supportsCSS=true - -[*SEMC-Browser/*] -Parent=SEMC Browser - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SonyEricsson - -[SonyEricsson] -Parent=DefaultProperties -Browser=SonyEricsson -Frames=true -Tables=true -Cookies=true -JavaScript=true -isMobileDevice=true -CssVersion=1 -supportsCSS=true - -[*Ericsson*] -Parent=SonyEricsson - -[*SonyEricsson*] -Parent=SonyEricsson - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netbox - -[Netbox] -Parent=DefaultProperties -Browser=Netbox -Frames=true -Tables=true -Cookies=true -JavaScript=true -CssVersion=1 -supportsCSS=true - -[Mozilla/3.01 (compatible; Netbox/*; Linux*)] -Parent=Netbox -Browser=Netbox -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PowerTV - -[PowerTV] -Parent=DefaultProperties -Browser=PowerTV -Platform=PowerTV -Frames=true -Tables=true -Cookies=true -JavaScript=true - -[Mozilla/4.0 PowerTV/1.5 (Compatible; Spyglass DM 3.2.1, EXPLORER)] -Parent=PowerTV -Version=1.5 -MajorVer=1 -MinorVer=5 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WebTV/MSNTV - -[WebTV] -Parent=DefaultProperties -Browser=WebTV/MSNTV -Platform=WebTV -Frames=true -Tables=true -Cookies=true -JavaScript=true - -[Mozilla/3.0 WebTV/1.*(compatible; MSIE 2.0)] -Parent=WebTV -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Mozilla/4.0 WebTV/2.0*(compatible; MSIE 3.0)] -Parent=WebTV -Version=2.0 -MajorVer=2 -MinorVer=0 - -[Mozilla/4.0 WebTV/2.1*(compatible; MSIE 3.0)] -Parent=WebTV -Version=2.1 -MajorVer=2 -MinorVer=1 - -[Mozilla/4.0 WebTV/2.2*(compatible; MSIE 3.0)] -Parent=WebTV -Version=2.2 -MajorVer=2 -MinorVer=2 - -[Mozilla/4.0 WebTV/2.3*(compatible; MSIE 3.0)] -Parent=WebTV -Version=2.3 -MajorVer=2 -MinorVer=3 - -[Mozilla/4.0 WebTV/2.4*(compatible; MSIE 3.0)] -Parent=WebTV -Version=2.4 -MajorVer=2 -MinorVer=4 - -[Mozilla/4.0 WebTV/2.5*(compatible; MSIE 4.0)] -Parent=WebTV -Version=2.5 -MajorVer=2 -MinorVer=5 -CssVersion=1 -supportsCSS=true - -[Mozilla/4.0 WebTV/2.6*(compatible; MSIE 4.0)] -Parent=WebTV -Version=2.6 -MajorVer=2 -MinorVer=6 -CssVersion=1 -supportsCSS=true - -[Mozilla/4.0 WebTV/2.7*(compatible; MSIE 4.0)] -Parent=WebTV -Version=2.7 -MajorVer=2 -MinorVer=7 -CssVersion=1 -supportsCSS=true - -[Mozilla/4.0 WebTV/2.8*(compatible; MSIE 4.0)] -Parent=WebTV -Version=2.8 -MajorVer=2 -MinorVer=8 -JavaApplets=true -CssVersion=1 -supportsCSS=true - -[Mozilla/4.0 WebTV/2.9*(compatible; MSIE 4.0)] -Parent=WebTV -Version=2.9 -MajorVer=2 -MinorVer=9 -JavaApplets=true -CssVersion=1 -supportsCSS=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Amaya - -[Amaya] -Parent=DefaultProperties -Browser=Amaya -Tables=true -Cookies=true - -[amaya/7.*] -Parent=Amaya -Version=7.0 -MajorVer=7 -MinorVer=0 - -[amaya/8.0*] -Parent=Amaya -Version=8.0 -MajorVer=8 -MinorVer=0 -CssVersion=2 -supportsCSS=true - -[amaya/8.1*] -Parent=Amaya -Version=8.1 -MajorVer=8 -MinorVer=1 -CssVersion=2 -supportsCSS=true - -[amaya/8.2*] -Parent=Amaya -Version=8.2 -MajorVer=8 -MinorVer=2 -CssVersion=2 -supportsCSS=true - -[amaya/8.3*] -Parent=Amaya -Version=8.3 -MajorVer=8 -MinorVer=3 -CssVersion=2 -supportsCSS=true - -[amaya/8.4*] -Parent=Amaya -Version=8.4 -MajorVer=8 -MinorVer=4 -CssVersion=2 -supportsCSS=true - -[amaya/8.5*] -Parent=Amaya -Version=8.5 -MajorVer=8 -MinorVer=5 -CssVersion=2 -supportsCSS=true - -[amaya/8.6*] -Parent=Amaya -Version=8.6 -MajorVer=8 -MinorVer=6 -CssVersion=2 -supportsCSS=true - -[amaya/8.7*] -Parent=Amaya -Version=8.7 -MajorVer=8 -MinorVer=7 -CssVersion=2 -supportsCSS=true - -[amaya/8.8*] -Parent=Amaya -Version=8.8 -MajorVer=8 -MinorVer=8 -CssVersion=2 -supportsCSS=true - -[amaya/8.9*] -Parent=Amaya -Version=8.9 -MajorVer=8 -MinorVer=9 -CssVersion=2 -supportsCSS=true - -[amaya/9.0*] -Parent=Amaya -Version=9.0 -MajorVer=8 -MinorVer=0 -CssVersion=2 -supportsCSS=true - -[amaya/9.1*] -Parent=Amaya -Version=9.1 -MajorVer=9 -MinorVer=1 -CssVersion=2 -supportsCSS=true - -[amaya/9.2*] -Parent=Amaya -Version=9.2 -MajorVer=9 -MinorVer=2 -CssVersion=2 -supportsCSS=true - -[amaya/9.3*] -Parent=Amaya -Version=9.3 -MajorVer=9 -MinorVer=3 - -[amaya/9.4*] -Parent=Amaya -Version=9.4 -MajorVer=9 -MinorVer=4 - -[amaya/9.5*] -Parent=Amaya -Version=9.5 -MajorVer=9 -MinorVer=5 - -[Emacs-w3m/*] -Parent=Emacs/W3 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Links - -[Links] -Parent=DefaultProperties -Browser=Links -Frames=true -Tables=true - -[Links (0.9*; CYGWIN_NT-5.1*)] -Parent=Links -Browser=Links -Version=0.9 -MajorVer=0 -MinorVer=9 -Platform=WinXP - -[Links (0.9*; Darwin*)] -Parent=Links -Version=0.9 -MajorVer=0 -MinorVer=9 -Platform=MacPPC - -[Links (0.9*; FreeBSD*)] -Parent=Links -Browser=Links -Version=0.9 -MajorVer=0 -MinorVer=9 -Platform=FreeBSD - -[Links (0.9*; Linux*)] -Parent=Links -Browser=Links -Version=0.9 -MajorVer=0 -MinorVer=9 -Platform=Linux - -[Links (0.9*; OS/2*)] -Parent=Links -Browser=Links -Version=0.9 -MajorVer=0 -MinorVer=9 -Platform=OS/2 - -[Links (0.9*; Unix*)] -Parent=Links -Browser=Links -Version=0.9 -MajorVer=0 -MinorVer=9 -Platform=Unix - -[Links (0.9*; Win32*)] -Parent=Links -Browser=Links -Version=0.9 -MajorVer=0 -MinorVer=9 -Platform=Win32 -Win32=true - -[Links (1.0*; CYGWIN_NT-5.1*)] -Parent=Links -Browser=Links -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=WinXP - -[Links (1.0*; FreeBSD*)] -Parent=Links -Browser=Links -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=FreeBSD - -[Links (1.0*; Linux*)] -Parent=Links -Browser=Links -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Linux - -[Links (1.0*; OS/2*)] -Parent=Links -Browser=Links -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=OS/2 - -[Links (1.0*; Unix*)] -Parent=Links -Browser=Links -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Unix - -[Links (1.0*; Win32*)] -Parent=Links -Browser=Links -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win32 -Win32=true - -[Links (2.0*; Linux*)] -Parent=Links -Browser=Links -Version=2.0 -MajorVer=2 -MinorVer=0 -Platform=Linux - -[Links (2.1*; FreeBSD*)] -Parent=Links -Browser=Links -Version=2.1 -MajorVer=2 -MinorVer=1 -Platform=FreeBSD - -[Links (2.1*; Linux *)] -Parent=Links -Browser=Links -Version=2.1 -MajorVer=2 -MinorVer=1 -Platform=Linux - -[Links (2.1*; OpenBSD*)] -Parent=Links -Browser=Links -Version=2.1 -MajorVer=2 -MinorVer=1 -Platform=OpenBSD - -[Links (2.2*; FreeBSD*)] -Parent=Links -Version=2.2 -MajorVer=2 -MinorVer=2 -Platform=FreeBSD - -[Links (2.2*; Linux *)] -Parent=Links -Version=2.2 -MajorVer=2 -MinorVer=2 -Platform=Linux - -[Links (2.2*; OpenBSD*)] -Parent=Links -Version=2.2 -MajorVer=2 -MinorVer=2 -Platform=OpenBSD - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lynx - -[Lynx] -Parent=DefaultProperties -Browser=Lynx -Frames=true -Tables=true - -[Lynx *] -Parent=Lynx -Browser=Lynx - -[Lynx/2.3*] -Parent=Lynx -Browser=Lynx -Version=2.3 -MajorVer=2 -MinorVer=3 - -[Lynx/2.4*] -Parent=Lynx -Browser=Lynx -Version=2.4 -MajorVer=2 -MinorVer=4 - -[Lynx/2.5*] -Parent=Lynx -Browser=Lynx -Version=2.5 -MajorVer=2 -MinorVer=5 - -[Lynx/2.6*] -Parent=Lynx -Browser=Lynx -Version=2.6 -MajorVer=2 -MinorVer=6 - -[Lynx/2.7*] -Parent=Lynx -Browser=Lynx -Version=2.7 -MajorVer=2 -MinorVer=7 - -[Lynx/2.8*] -Parent=Lynx -Browser=Lynx -Version=2.8 -MajorVer=2 -MinorVer=8 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NCSA Mosaic - -[Mosaic] -Parent=DefaultProperties -Browser=Mosaic - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; w3m - -[w3m] -Parent=DefaultProperties -Browser=w3m -Frames=true -Tables=true - -[w3m/0.1*] -Parent=w3m -Browser=w3m -Version=0.1 -MajorVer=0 -MinorVer=1 - -[w3m/0.2*] -Parent=w3m -Browser=w3m -Version=0.2 -MajorVer=0 -MinorVer=2 - -[w3m/0.3*] -Parent=w3m -Browser=w3m -Version=0.3 -MajorVer=0 -MinorVer=3 - -[w3m/0.4*] -Parent=w3m -Browser=w3m -Version=0.4 -MajorVer=0 -MinorVer=4 -Cookies=true - -[w3m/0.5*] -Parent=w3m -Browser=w3m -Version=0.5 -MajorVer=0 -MinorVer=5 -Cookies=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.10 - -[ELinks 0.10] -Parent=DefaultProperties -Browser=ELinks -Version=0.10 -MinorVer=10 -Frames=true -Tables=true - -[ELinks (0.10*; *AIX*)] -Parent=ELinks 0.10 -Platform=AIX - -[ELinks (0.10*; *BeOS*)] -Parent=ELinks 0.10 -Platform=BeOS - -[ELinks (0.10*; *CygWin*)] -Parent=ELinks 0.10 -Platform=CygWin - -[ELinks (0.10*; *Darwin*)] -Parent=ELinks 0.10 -Platform=Darwin - -[ELinks (0.10*; *Digital Unix*)] -Parent=ELinks 0.10 -Platform=Digital Unix - -[ELinks (0.10*; *FreeBSD*)] -Parent=ELinks 0.10 -Platform=FreeBSD - -[ELinks (0.10*; *HPUX*)] -Parent=ELinks 0.10 -Platform=HP-UX - -[ELinks (0.10*; *IRIX*)] -Parent=ELinks 0.10 -Platform=IRIX - -[ELinks (0.10*; *Linux*)] -Parent=ELinks 0.10 -Platform=Linux - -[ELinks (0.10*; *NetBSD*)] -Parent=ELinks 0.10 -Platform=NetBSD - -[ELinks (0.10*; *OpenBSD*)] -Parent=ELinks 0.10 -Platform=OpenBSD - -[ELinks (0.10*; *OS/2*)] -Parent=ELinks 0.10 -Platform=OS/2 - -[ELinks (0.10*; *RISC*)] -Parent=ELinks 0.10 -Platform=RISC OS - -[ELinks (0.10*; *Solaris*)] -Parent=ELinks 0.10 -Platform=Solaris - -[ELinks (0.10*; *Unix*)] -Parent=ELinks 0.10 -Platform=Unix - -[ELinks/0.10* (*AIX*)] -Parent=ELinks 0.10 -Platform=AIX - -[ELinks/0.10* (*BeOS*)] -Parent=ELinks 0.10 -Platform=BeOS - -[ELinks/0.10* (*CygWin*)] -Parent=ELinks 0.10 -Platform=CygWin - -[ELinks/0.10* (*Darwin*)] -Parent=ELinks 0.10 -Platform=Darwin - -[ELinks/0.10* (*Digital Unix*)] -Parent=ELinks 0.10 -Platform=Digital Unix - -[ELinks/0.10* (*FreeBSD*)] -Parent=ELinks 0.10 -Platform=FreeBSD - -[ELinks/0.10* (*HPUX*)] -Parent=ELinks 0.10 -Platform=HP-UX - -[ELinks/0.10* (*IRIX*)] -Parent=ELinks 0.10 -Platform=IRIX - -[ELinks/0.10* (*Linux*)] -Parent=ELinks 0.10 -Platform=Linux - -[ELinks/0.10* (*NetBSD*)] -Parent=ELinks 0.10 -Platform=NetBSD - -[ELinks/0.10* (*OpenBSD*)] -Parent=ELinks 0.10 -Platform=OpenBSD - -[ELinks/0.10* (*OS/2*)] -Parent=ELinks 0.10 -Platform=OS/2 - -[ELinks/0.10* (*RISC*)] -Parent=ELinks 0.10 -Platform=RISC OS - -[ELinks/0.10* (*Solaris*)] -Parent=ELinks 0.10 -Platform=Solaris - -[ELinks/0.10* (*Unix*)] -Parent=ELinks 0.10 -Platform=Unix - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.11 - -[ELinks 0.11] -Parent=DefaultProperties -Browser=ELinks -Version=0.11 -MinorVer=11 -Frames=true -Tables=true - -[ELinks (0.11*; *AIX*)] -Parent=ELinks 0.11 -Platform=AIX - -[ELinks (0.11*; *BeOS*)] -Parent=ELinks 0.11 -Platform=BeOS - -[ELinks (0.11*; *CygWin*)] -Parent=ELinks 0.11 -Platform=CygWin - -[ELinks (0.11*; *Darwin*)] -Parent=ELinks 0.11 -Platform=Darwin - -[ELinks (0.11*; *Digital Unix*)] -Parent=ELinks 0.11 -Platform=Digital Unix - -[ELinks (0.11*; *FreeBSD*)] -Parent=ELinks 0.11 -Platform=FreeBSD - -[ELinks (0.11*; *HPUX*)] -Parent=ELinks 0.11 -Platform=HP-UX - -[ELinks (0.11*; *IRIX*)] -Parent=ELinks 0.11 -Platform=IRIX - -[ELinks (0.11*; *Linux*)] -Parent=ELinks 0.11 -Platform=Linux - -[ELinks (0.11*; *NetBSD*)] -Parent=ELinks 0.11 -Platform=NetBSD - -[ELinks (0.11*; *OpenBSD*)] -Parent=ELinks 0.11 -Platform=OpenBSD - -[ELinks (0.11*; *OS/2*)] -Parent=ELinks 0.11 -Platform=OS/2 - -[ELinks (0.11*; *RISC*)] -Parent=ELinks 0.11 -Platform=RISC OS - -[ELinks (0.11*; *Solaris*)] -Parent=ELinks 0.11 -Platform=Solaris - -[ELinks (0.11*; *Unix*)] -Parent=ELinks 0.11 -Platform=Unix - -[ELinks/0.11* (*AIX*)] -Parent=ELinks 0.11 -Platform=AIX - -[ELinks/0.11* (*BeOS*)] -Parent=ELinks 0.11 -Platform=BeOS - -[ELinks/0.11* (*CygWin*)] -Parent=ELinks 0.11 -Platform=CygWin - -[ELinks/0.11* (*Darwin*)] -Parent=ELinks 0.11 -Platform=Darwin - -[ELinks/0.11* (*Digital Unix*)] -Parent=ELinks 0.11 -Platform=Digital Unix - -[ELinks/0.11* (*FreeBSD*)] -Parent=ELinks 0.11 -Platform=FreeBSD - -[ELinks/0.11* (*HPUX*)] -Parent=ELinks 0.11 -Platform=HP-UX - -[ELinks/0.11* (*IRIX*)] -Parent=ELinks 0.11 -Platform=IRIX - -[ELinks/0.11* (*Linux*)] -Parent=ELinks 0.11 -Platform=Linux - -[ELinks/0.11* (*NetBSD*)] -Parent=ELinks 0.11 -Platform=NetBSD - -[ELinks/0.11* (*OpenBSD*)] -Parent=ELinks 0.11 -Platform=OpenBSD - -[ELinks/0.11* (*OS/2*)] -Parent=ELinks 0.11 -Platform=OS/2 - -[ELinks/0.11* (*RISC*)] -Parent=ELinks 0.11 -Platform=RISC OS - -[ELinks/0.11* (*Solaris*)] -Parent=ELinks 0.11 -Platform=Solaris - -[ELinks/0.11* (*Unix*)] -Parent=ELinks 0.11 -Platform=Unix - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.12 - -[ELinks 0.12] -Parent=DefaultProperties -Browser=ELinks -Version=0.12 -MinorVer=12 -Frames=true -Tables=true - -[ELinks (0.12*; *AIX*)] -Parent=ELinks 0.12 -Platform=AIX - -[ELinks (0.12*; *BeOS*)] -Parent=ELinks 0.12 -Platform=BeOS - -[ELinks (0.12*; *CygWin*)] -Parent=ELinks 0.12 -Platform=CygWin - -[ELinks (0.12*; *Darwin*)] -Parent=ELinks 0.12 -Platform=Darwin - -[ELinks (0.12*; *Digital Unix*)] -Parent=ELinks 0.12 -Platform=Digital Unix - -[ELinks (0.12*; *FreeBSD*)] -Parent=ELinks 0.12 -Platform=FreeBSD - -[ELinks (0.12*; *HPUX*)] -Parent=ELinks 0.12 -Platform=HP-UX - -[ELinks (0.12*; *IRIX*)] -Parent=ELinks 0.12 -Platform=IRIX - -[ELinks (0.12*; *Linux*)] -Parent=ELinks 0.12 -Platform=Linux - -[ELinks (0.12*; *NetBSD*)] -Parent=ELinks 0.12 -Platform=NetBSD - -[ELinks (0.12*; *OpenBSD*)] -Parent=ELinks 0.12 -Platform=OpenBSD - -[ELinks (0.12*; *OS/2*)] -Parent=ELinks 0.12 -Platform=OS/2 - -[ELinks (0.12*; *RISC*)] -Parent=ELinks 0.12 -Platform=RISC OS - -[ELinks (0.12*; *Solaris*)] -Parent=ELinks 0.12 -Platform=Solaris - -[ELinks (0.12*; *Unix*)] -Parent=ELinks 0.12 -Platform=Unix - -[ELinks/0.12* (*AIX*)] -Parent=ELinks 0.12 -Platform=AIX - -[ELinks/0.12* (*BeOS*)] -Parent=ELinks 0.12 -Platform=BeOS - -[ELinks/0.12* (*CygWin*)] -Parent=ELinks 0.12 -Platform=CygWin - -[ELinks/0.12* (*Darwin*)] -Parent=ELinks 0.12 -Platform=Darwin - -[ELinks/0.12* (*Digital Unix*)] -Parent=ELinks 0.12 -Platform=Digital Unix - -[ELinks/0.12* (*FreeBSD*)] -Parent=ELinks 0.12 -Platform=FreeBSD - -[ELinks/0.12* (*HPUX*)] -Parent=ELinks 0.12 -Platform=HP-UX - -[ELinks/0.12* (*IRIX*)] -Parent=ELinks 0.12 -Platform=IRIX - -[ELinks/0.12* (*Linux*)] -Parent=ELinks 0.12 -Platform=Linux - -[ELinks/0.12* (*NetBSD*)] -Parent=ELinks 0.12 -Platform=NetBSD - -[ELinks/0.12* (*OpenBSD*)] -Parent=ELinks 0.12 -Platform=OpenBSD - -[ELinks/0.12* (*OS/2*)] -Parent=ELinks 0.12 -Platform=OS/2 - -[ELinks/0.12* (*RISC*)] -Parent=ELinks 0.12 -Platform=RISC OS - -[ELinks/0.12* (*Solaris*)] -Parent=ELinks 0.12 -Platform=Solaris - -[ELinks/0.12* (*Unix*)] -Parent=ELinks 0.12 -Platform=Unix - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.9 - -[ELinks 0.9] -Parent=DefaultProperties -Browser=ELinks -Version=0.9 -MinorVer=9 -Frames=true -Tables=true - -[ELinks (0.9*; *AIX*)] -Parent=ELinks 0.9 -Platform=AIX - -[ELinks (0.9*; *BeOS*)] -Parent=ELinks 0.9 -Platform=BeOS - -[ELinks (0.9*; *CygWin*)] -Parent=ELinks 0.9 -Platform=CygWin - -[ELinks (0.9*; *Darwin*)] -Parent=ELinks 0.9 -Platform=Darwin - -[ELinks (0.9*; *Digital Unix*)] -Parent=ELinks 0.9 -Platform=Digital Unix - -[ELinks (0.9*; *FreeBSD*)] -Parent=ELinks 0.9 -Platform=FreeBSD - -[ELinks (0.9*; *HPUX*)] -Parent=ELinks 0.9 -Platform=HP-UX - -[ELinks (0.9*; *IRIX*)] -Parent=ELinks 0.9 -Platform=IRIX - -[ELinks (0.9*; *Linux*)] -Parent=ELinks 0.9 -Platform=Linux - -[ELinks (0.9*; *NetBSD*)] -Parent=ELinks 0.9 -Platform=NetBSD - -[ELinks (0.9*; *OpenBSD*)] -Parent=ELinks 0.9 -Platform=OpenBSD - -[ELinks (0.9*; *OS/2*)] -Parent=ELinks 0.9 -Platform=OS/2 - -[ELinks (0.9*; *RISC*)] -Parent=ELinks 0.9 -Platform=RISC OS - -[ELinks (0.9*; *Solaris*)] -Parent=ELinks 0.9 -Platform=Solaris - -[ELinks (0.9*; *Unix*)] -Parent=ELinks 0.9 -Platform=Unix - -[ELinks/0.9* (*AIX*)] -Parent=ELinks 0.9 -Platform=AIX - -[ELinks/0.9* (*BeOS*)] -Parent=ELinks 0.9 -Platform=BeOS - -[ELinks/0.9* (*CygWin*)] -Parent=ELinks 0.9 -Platform=CygWin - -[ELinks/0.9* (*Darwin*)] -Parent=ELinks 0.9 -Platform=Darwin - -[ELinks/0.9* (*Digital Unix*)] -Parent=ELinks 0.9 -Platform=Digital Unix - -[ELinks/0.9* (*FreeBSD*)] -Parent=ELinks 0.9 -Platform=FreeBSD - -[ELinks/0.9* (*HPUX*)] -Parent=ELinks 0.9 -Platform=HP-UX - -[ELinks/0.9* (*IRIX*)] -Parent=ELinks 0.9 -Platform=IRIX - -[ELinks/0.9* (*Linux*)] -Parent=ELinks 0.9 -Platform=Linux - -[ELinks/0.9* (*NetBSD*)] -Parent=ELinks 0.9 -Platform=NetBSD - -[ELinks/0.9* (*OpenBSD*)] -Parent=ELinks 0.9 -Platform=OpenBSD - -[ELinks/0.9* (*OS/2*)] -Parent=ELinks 0.9 -Platform=OS/2 - -[ELinks/0.9* (*RISC*)] -Parent=ELinks 0.9 -Platform=RISC OS - -[ELinks/0.9* (*Solaris*)] -Parent=ELinks 0.9 -Platform=Solaris - -[ELinks/0.9* (*Unix*)] -Parent=ELinks 0.9 -Platform=Unix - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AppleWebKit - -[AppleWebKit] -Parent=DefaultProperties -Browser=AppleWebKit -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (KHTML, like Gecko)] -Parent=AppleWebKit - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Camino - -[Camino] -Parent=DefaultProperties -Browser=Camino -Platform=MacOSX -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.7*] -Parent=Camino -Version=0.7 -MajorVer=0 -MinorVer=7 -Beta=true - -[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.8*] -Parent=Camino -Version=0.8 -MajorVer=0 -MinorVer=8 -Beta=true - -[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.9*] -Parent=Camino -Version=0.9 -MajorVer=0 -MinorVer=9 -Beta=true - -[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.0*] -Parent=Camino -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.2*] -Parent=Camino -Version=1.2 -MajorVer=1 -MinorVer=2 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.3*] -Parent=Camino -Version=1.3 -MajorVer=1 -MinorVer=3 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.4*] -Parent=Camino -Version=1.4 -MajorVer=1 -MinorVer=4 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.5*] -Parent=Camino -Version=1.5 -MajorVer=1 -MinorVer=5 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.6*] -Parent=Camino -Version=1.6 -MajorVer=1 -MinorVer=6 -Platform=MacOSX - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chimera - -[Chimera] -Parent=DefaultProperties -Browser=Chimera -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true - -[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Chimera/*] -Parent=Chimera -Platform=MacOSX - -[Mozilla/5.0 Gecko/* Chimera/*] -Parent=Chimera - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Dillo - -[Dillo] -Parent=DefaultProperties -Browser=Dillo -Platform=Linux -Frames=true -IFrames=true -Tables=true -Cookies=true -CssVersion=2 -supportsCSS=true - -[Dillo/0.6*] -Parent=Dillo -Version=0.6 -MajorVer=0 -MinorVer=6 - -[Dillo/0.7*] -Parent=Dillo -Version=0.7 -MajorVer=0 -MinorVer=7 - -[Dillo/0.8*] -Parent=Dillo -Version=0.8 -MajorVer=0 -MinorVer=8 - -[Dillo/2.0] -Parent=Dillo -Version=2.0 -MajorVer=2 -MinorVer=0 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Emacs/W3 - -[Emacs/W3] -Parent=DefaultProperties -Browser=Emacs/W3 -Frames=true -Tables=true -Cookies=true - -[Emacs/W3/2.* (Unix*] -Parent=Emacs/W3 -Version=2.0 -MajorVer=2 -MinorVer=0 -Platform=Unix - -[Emacs/W3/2.* (X11*] -Parent=Emacs/W3 -Version=2.0 -MajorVer=2 -MinorVer=0 -Platform=Linux - -[Emacs/W3/3.* (Unix*] -Parent=Emacs/W3 -Version=3.0 -MajorVer=3 -MinorVer=0 -Platform=Unix - -[Emacs/W3/3.* (X11*] -Parent=Emacs/W3 -Version=3.0 -MajorVer=3 -MinorVer=0 -Platform=Linux - -[Emacs/W3/4.* (Unix*] -Parent=Emacs/W3 -Version=4.0 -MajorVer=4 -MinorVer=0 -Platform=Unix - -[Emacs/W3/4.* (X11*] -Parent=Emacs/W3 -Version=4.0 -MajorVer=4 -MinorVer=0 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fantomas - -[fantomas] -Parent=DefaultProperties -Browser=fantomas -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaScript=true - -[Mozilla/4.0 (cloakBrowser)] -Parent=fantomas -Browser=fantomas cloakBrowser - -[Mozilla/4.0 (fantomas shadowMaker Browser)] -Parent=fantomas -Browser=fantomas shadowMaker Browser - -[Mozilla/4.0 (fantomBrowser)] -Parent=fantomas -Browser=fantomas fantomBrowser - -[Mozilla/4.0 (fantomCrew Browser)] -Parent=fantomas -Browser=fantomas fantomCrew Browser - -[Mozilla/4.0 (stealthBrowser)] -Parent=fantomas -Browser=fantomas stealthBrowser - -[multiBlocker browser*] -Parent=fantomas -Browser=fantomas multiBlocker browser - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FrontPage - -[FrontPage] -Parent=DefaultProperties -Browser=FrontPage -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaScript=true - -[Mozilla/?* (compatible; MS FrontPage*)] -Parent=FrontPage - -[MSFrontPage/*] -Parent=FrontPage - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Galeon - -[Galeon] -Parent=DefaultProperties -Browser=Galeon -Platform=Linux -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.*] -Parent=Galeon -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/2.*] -Parent=Galeon -Version=2.0 -MajorVer=2 -MinorVer=0 - -[Mozilla/5.0 Galeon/1.* (X11; Linux*)*] -Parent=Galeon -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Mozilla/5.0 Galeon/2.* (X11; Linux*)*] -Parent=Galeon -Version=2.0 -MajorVer=2 -MinorVer=0 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HP Secure Web Browser - -[HP Secure Web Browser] -Parent=DefaultProperties -Browser=HP Secure Web Browser -Platform=OpenVMS -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.0*) Gecko/*] -Parent=HP Secure Web Browser -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.1*) Gecko/*] -Parent=HP Secure Web Browser -Version=1.1 -MajorVer=1 -MinorVer=1 - -[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.2*) Gecko/*] -Parent=HP Secure Web Browser -Version=1.2 -MajorVer=1 -MinorVer=2 - -[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.3*) Gecko/*] -Parent=HP Secure Web Browser -Version=1.3 -MajorVer=1 -MinorVer=3 - -[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.4*) Gecko/*] -Parent=HP Secure Web Browser -Version=1.4 -MajorVer=1 -MinorVer=4 - -[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.5*) Gecko/*] -Parent=HP Secure Web Browser -Version=1.5 -MajorVer=1 -MinorVer=5 - -[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.6*) Gecko/*] -Parent=HP Secure Web Browser -Version=1.6 -MajorVer=1 -MinorVer=6 - -[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.7*) Gecko/*] -Parent=HP Secure Web Browser -Version=1.7 -MajorVer=1 -MinorVer=7 - -[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.8*) Gecko/*] -Parent=HP Secure Web Browser -Version=1.8 -MajorVer=1 -MinorVer=8 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IBrowse - -[IBrowse] -Parent=DefaultProperties -Browser=IBrowse -Platform=Amiga -Frames=true -Tables=true -Cookies=true -JavaScript=true - -[Arexx (compatible; MSIE 6.0; AmigaOS5.0) IBrowse 4.0] -Parent=IBrowse -Version=4.0 -MajorVer=4 -MinorVer=0 - -[IBrowse/1.22 (AmigaOS *)] -Parent=IBrowse -Version=1.22 -MajorVer=1 -MinorVer=22 - -[IBrowse/2.1 (AmigaOS *)] -Parent=IBrowse -Version=2.1 -MajorVer=2 -MinorVer=1 - -[IBrowse/2.2 (AmigaOS *)] -Parent=IBrowse -Version=2.2 -MajorVer=2 -MinorVer=2 - -[IBrowse/2.3 (AmigaOS *)] -Parent=IBrowse -Version=2.2 -MajorVer=2 -MinorVer=3 - -[Mozilla/* (Win98; I) IBrowse/2.1 (AmigaOS 3.1)] -Parent=IBrowse -Version=2.1 -MajorVer=2 -MinorVer=1 - -[Mozilla/* (Win98; I) IBrowse/2.2 (AmigaOS 3.1)] -Parent=IBrowse -Version=2.2 -MajorVer=2 -MinorVer=2 - -[Mozilla/* (Win98; I) IBrowse/2.3 (AmigaOS 3.1)] -Parent=IBrowse -Version=2.3 -MajorVer=2 -MinorVer=3 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iCab - -[iCab] -Parent=DefaultProperties -Browser=iCab -Frames=true -Tables=true -Cookies=true -JavaScript=true -CssVersion=1 -supportsCSS=true - -[iCab/2.7* (Macintosh; ?; 68K*)] -Parent=iCab -Version=2.7 -MajorVer=2 -MinorVer=7 -Platform=Mac68K - -[iCab/2.7* (Macintosh; ?; PPC*)] -Parent=iCab -Version=2.7 -MajorVer=2 -MinorVer=7 -Platform=MacPPC - -[iCab/2.8* (Macintosh; ?; *Mac OS X*)] -Parent=iCab -Version=2.8 -MajorVer=2 -MinorVer=8 -Platform=MacOSX - -[iCab/2.8* (Macintosh; ?; 68K*)] -Parent=iCab -Version=2.8 -MajorVer=2 -MinorVer=8 -Platform=Mac68K - -[iCab/2.8* (Macintosh; ?; PPC)] -Parent=iCab -Version=2.8 -MajorVer=2 -MinorVer=8 -Platform=MacPPC - -[iCab/2.9* (Macintosh; ?; *Mac OS X*)] -Parent=iCab -Version=2.9 -MajorVer=2 -MinorVer=9 -Platform=MacOSX - -[iCab/2.9* (Macintosh; ?; 68K*)] -Parent=iCab -Version=2.9 -MajorVer=2 -MinorVer=9 -Platform=Mac68K - -[iCab/2.9* (Macintosh; ?; PPC*)] -Parent=iCab -Version=2.9 -MajorVer=2 -MinorVer=9 -Platform=MacPPC - -[iCab/3.0* (Macintosh; ?; *Mac OS X*)] -Parent=iCab -Version=3.0 -MajorVer=3 -MinorVer=0 -Platform=MacOSX -CssVersion=2 -supportsCSS=true - -[iCab/3.0* (Macintosh; ?; PPC*)] -Parent=iCab -Version=3.0 -MajorVer=3 -MinorVer=0 -Platform=MacPPC -CssVersion=2 -supportsCSS=true - -[iCab/4.0 (Macintosh; U; *Mac OS X)] -Parent=iCab -Version=4.0 -MajorVer=4 -MinorVer=0 -Platform=MacOSX - -[Mozilla/* (compatible; iCab 3.0*; Macintosh; *Mac OS X*)] -Parent=iCab -Version=3.0 -MajorVer=3 -MinorVer=0 -Platform=MacOSX -CssVersion=2 -supportsCSS=true - -[Mozilla/* (compatible; iCab 3.0*; Macintosh; ?; PPC*)] -Parent=iCab -Version=3.0 -MajorVer=3 -MinorVer=0 -Platform=MacPPC -CssVersion=2 -supportsCSS=true - -[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; 68K*)] -Parent=iCab -Version=2.7 -MajorVer=2 -MinorVer=7 -Platform=Mac68K - -[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; PPC*)] -Parent=iCab -Version=2.7 -MajorVer=2 -MinorVer=7 -Platform=MacPPC - -[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; *Mac OS X*)] -Parent=iCab -Version=2.8 -MajorVer=2 -MinorVer=8 -Platform=MacOSX - -[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; PPC*)] -Parent=iCab -Version=2.8 -MajorVer=2 -MinorVer=8 -Platform=MacPPC - -[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; *Mac OS X*)] -Parent=iCab -Version=2.9 -MajorVer=2 -MinorVer=9 -Platform=MacOSX - -[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; ?; PPC*)] -Parent=iCab -Version=2.9 -MajorVer=2 -MinorVer=9 -Platform=MacPPC - -[Mozilla/4.5 (compatible; iCab 4.2*; Macintosh; *Mac OS X*)] -Parent=iCab -Version=4.2 -MajorVer=4 -MinorVer=2 -Platform=MacOSX - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iSiloX - -[iSiloX] -Parent=DefaultProperties -Browser=iSiloX -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaScript=true -Crawler=true -CssVersion=2 -supportsCSS=true - -[iSiloX/4.0* MacOS] -Parent=iSiloX -Version=4.0 -MajorVer=4 -MinorVer=0 -Platform=MacPPC - -[iSiloX/4.0* Windows/32] -Parent=iSiloX -Version=4.0 -MajorVer=4 -MinorVer=0 -Platform=Win32 -Win32=true - -[iSiloX/4.1* MacOS] -Parent=iSiloX -Version=4.1 -MajorVer=4 -MinorVer=1 -Platform=MacPPC - -[iSiloX/4.1* Windows/32] -Parent=iSiloX -Version=4.1 -MajorVer=4 -MinorVer=1 -Platform=Win32 -Win32=true - -[iSiloX/4.2* MacOS] -Parent=iSiloX -Version=4.2 -MajorVer=4 -MinorVer=2 -Platform=MacPPC - -[iSiloX/4.2* Windows/32] -Parent=iSiloX -Version=4.2 -MajorVer=4 -MinorVer=2 -Platform=Win32 -Win32=true - -[iSiloX/4.3* MacOS] -Parent=iSiloX -Version=4.3 -MajorVer=4 -MinorVer=4 -Platform=MacOSX - -[iSiloX/4.3* Windows/32] -Parent=iSiloX -Version=4.3 -MajorVer=4 -MinorVer=3 -Platform=Win32 -Win32=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycoris Desktop/LX - -[Lycoris Desktop/LX] -Parent=DefaultProperties -Browser=Lycoris Desktop/LX -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -Crawler=true - -[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*: Desktop/LX Amethyst) Gecko/*] -Parent=Lycoris Desktop/LX -Version=1.1 -MajorVer=1 -MinorVer=1 -Platform=Linux - -[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*; Desktop/LX Amethyst) Gecko/*] -Parent=Lycoris Desktop/LX -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mosaic - -[Mosaic] -Parent=DefaultProperties -Browser=Mosaic -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true - -[Mozilla/4.0 (VMS_Mosaic)] -Parent=Mosaic -Platform=OpenVMS - -[VMS_Mosaic/3.7*] -Parent=Mosaic -Version=3.7 -MajorVer=3 -MinorVer=7 -Platform=OpenVMS - -[VMS_Mosaic/3.8*] -Parent=Mosaic -Version=3.8 -MajorVer=3 -MinorVer=8 -Platform=OpenVMS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetPositive - -[NetPositive] -Parent=DefaultProperties -Browser=NetPositive -Platform=BeOS -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true - -[*NetPositive/2.2*] -Parent=NetPositive -Version=2.2 -MajorVer=2 -MinorVer=2 - -[*NetPositive/2.2*BeOS*] -Parent=NetPositive -Version=2.2 -MajorVer=2 -MinorVer=2 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OmniWeb - -[OmniWeb] -Parent=DefaultProperties -Browser=OmniWeb -Platform=MacOSX -Frames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -isMobileDevice=true -CssVersion=2 -supportsCSS=true - -[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v4*] -Parent=OmniWeb -Version=4.5 -MajorVer=4 -MinorVer=5 -Platform=MacOSX - -[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v5*] -Parent=OmniWeb -Version=5. -MajorVer=5 -MinorVer=0 -Platform=MacOSX - -[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v6*] -Parent=OmniWeb -Version=6.0 -MajorVer=6 -MinorVer=0 -Platform=MacOSX - -[Mozilla/* (Macintosh; ?; PPC) OmniWeb/4*] -Parent=OmniWeb -Version=4.0 -MajorVer=4 -MinorVer=0 -Platform=MacPPC - -[Mozilla/* (Macintosh; ?; PPC) OmniWeb/5*] -Parent=OmniWeb -Version=5.0 -MajorVer=5 -MinorVer=0 -Platform=MacOSX - -[Mozilla/* (Macintosh; ?; PPC) OmniWeb/6*] -Parent=OmniWeb -Version=6.0 -MajorVer=6 -MinorVer=0 -Platform=MacPPC - -[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] -Parent=OmniWeb -Version=5.1 -MajorVer=5 -MinorVer=1 - -[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] -Parent=OmniWeb -Version=5.1 -MajorVer=5 -MinorVer=1 - -[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] -Parent=OmniWeb -Version=5.5 -MajorVer=5 -MinorVer=5 - -[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] -Parent=OmniWeb -Version=5.5 -MajorVer=5 -MinorVer=5 - -[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] -Parent=OmniWeb -Version=5.6 -MajorVer=5 -MinorVer=6 - -[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] -Parent=OmniWeb -Version=5.6 -MajorVer=5 -MinorVer=6 - -[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v496] -Parent=OmniWeb -Version=4.5 -MajorVer=4 -MinorVer=5 - -[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.36 ] -Parent=OmniWeb -Version=5.0 -MajorVer=5 -MinorVer=0 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Shiira - -[Shiira] -Parent=DefaultProperties -Browser=Shiira -Platform=MacOSX -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/0.9*] -Parent=Shiira -Version=0.9 -MajorVer=0 -MinorVer=9 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.0*] -Parent=Shiira -Version=1.0 -MajorVer=1 -MinorVer=0 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.1*] -Parent=Shiira -Version=1.1 -MajorVer=1 -MinorVer=1 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.2*] -Parent=Shiira -Version=1.2 -MajorVer=1 -MinorVer=2 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.1*] -Parent=Shiira -Version=2.1 -MajorVer=2 -MinorVer=1 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.2*] -Parent=Shiira -Version=2.2 -MajorVer=2 -MinorVer=2 - -[Windows Maker] -Parent=DefaultProperties -Browser=WMaker -Platform=Linux -Frames=true -IFrames=true -Tables=true -Cookies=true -VBScript=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[WMaker*] -Parent=Windows Maker - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.0 - -[K-Meleon 1.0] -Parent=DefaultProperties -Browser=K-Meleon -Version=1.0 -MajorVer=1 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.0*] -Parent=K-Meleon 1.0 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.0*] -Parent=K-Meleon 1.0 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.0*] -Parent=K-Meleon 1.0 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.0*] -Parent=K-Meleon 1.0 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.0*] -Parent=K-Meleon 1.0 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.0*] -Parent=K-Meleon 1.0 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=WinNT -Win32=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.1 - -[K-Meleon 1.1] -Parent=DefaultProperties -Browser=K-Meleon -Version=1.1 -MajorVer=1 -MinorVer=1 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.1*] -Parent=K-Meleon 1.1 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.1*] -Parent=K-Meleon 1.1 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.1*] -Parent=K-Meleon 1.1 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.1*] -Parent=K-Meleon 1.1 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.1*] -Parent=K-Meleon 1.1 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.1*] -Parent=K-Meleon 1.1 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=WinNT -Win32=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.5 - -[K-Meleon 1.5] -Parent=DefaultProperties -Browser=K-Meleon -Version=1.5 -MajorVer=1 -MinorVer=5 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.5*] -Parent=K-Meleon 1.5 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.5*] -Parent=K-Meleon 1.5 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.5*] -Parent=K-Meleon 1.5 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] -Parent=K-Meleon 1.5 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.5*] -Parent=K-Meleon 1.5 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] -Parent=K-Meleon 1.5 -Platform=WinVista - -[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] -Parent=K-Meleon 1.5 -Platform=Win7 - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] -Parent=K-Meleon 1.5 -Version=1.0 -MajorVer=1 -MinorVer=0 -Platform=WinNT -Win32=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 3.0 - -[Konqueror 3.0] -Parent=DefaultProperties -Browser=Konqueror -Platform=Linux -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[*Konqueror/3.0*] -Parent=Konqueror 3.0 -Version=3.0 -MajorVer=3 -MinorVer=0 -IFrames=false - -[*Konqueror/3.0*FreeBSD*] -Parent=Konqueror 3.0 -Version=3.0 -MajorVer=3 -MinorVer=0 -Platform=FreeBSD -IFrames=false - -[*Konqueror/3.0*Linux*] -Parent=Konqueror 3.0 -Version=3.0 -MajorVer=3 -MinorVer=0 -Platform=Linux -IFrames=false - -[*Konqueror/3.1*] -Parent=Konqueror 3.0 -Version=3.1 -MajorVer=3 -MinorVer=1 - -[*Konqueror/3.1*FreeBSD*] -Parent=Konqueror 3.0 -Version=3.1 -MajorVer=3 -MinorVer=1 -Platform=FreeBSD - -[*Konqueror/3.1*Linux*] -Parent=Konqueror 3.0 -Version=3.1 -MajorVer=3 -MinorVer=1 - -[*Konqueror/3.2*] -Parent=Konqueror 3.0 -Version=3.2 -MajorVer=3 -MinorVer=2 - -[*Konqueror/3.2*FreeBSD*] -Parent=Konqueror 3.0 -Version=3.2 -MajorVer=3 -MinorVer=2 -Platform=FreeBSD - -[*Konqueror/3.2*Linux*] -Parent=Konqueror 3.0 -Version=3.2 -MajorVer=3 -MinorVer=2 -Platform=Linux - -[*Konqueror/3.3*] -Parent=Konqueror 3.0 -Version=3.3 -MajorVer=3 -MinorVer=3 - -[*Konqueror/3.3*FreeBSD*] -Parent=Konqueror 3.0 -Version=3.3 -MajorVer=3 -MinorVer=3 -Platform=FreeBSD - -[*Konqueror/3.3*Linux*] -Parent=Konqueror 3.0 -Version=3.3 -MajorVer=3 -MinorVer=3 -Platform=Linux - -[*Konqueror/3.3*OpenBSD*] -Parent=Konqueror 3.0 -Version=3.3 -MajorVer=3 -MinorVer=3 -Platform=OpenBSD - -[*Konqueror/3.4*] -Parent=Konqueror 3.0 -Version=3.4 -MajorVer=3 -MinorVer=4 - -[*Konqueror/3.4*FreeBSD*] -Parent=Konqueror 3.0 -Version=3.4 -MajorVer=3 -MinorVer=4 -Platform=FreeBSD - -[*Konqueror/3.4*Linux*] -Parent=Konqueror 3.0 -Version=3.4 -MajorVer=3 -MinorVer=4 -Platform=Linux - -[*Konqueror/3.4*OpenBSD*] -Parent=Konqueror 3.0 -Version=3.4 -MajorVer=3 -MinorVer=4 -Platform=OpenBSD - -[*Konqueror/3.5*] -Parent=Konqueror 3.0 -Version=3.5 -MajorVer=3 -MinorVer=5 - -[*Konqueror/3.5*FreeBSD*] -Parent=Konqueror 3.0 -Version=3.5 -MajorVer=3 -MinorVer=5 -Platform=FreeBSD - -[*Konqueror/3.5*Linux*] -Parent=Konqueror 3.0 -Version=3.5 -MajorVer=3 -MinorVer=5 -Platform=Linux - -[*Konqueror/3.5*OpenBSD*] -Parent=Konqueror 3.0 -Version=3.5 -MajorVer=3 -MinorVer=5 -Platform=OpenBSD - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.0 - -[Konqueror 4.0] -Parent=DefaultProperties -Browser=Konqueror -Version=4.0 -MajorVer=4 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (compatible; Konqueror/4.0*; Debian) KHTML/4.* (like Gecko)] -Parent=Konqueror 4.0 -Platform=Debian - -[Mozilla/5.0 (compatible; Konqueror/4.0.*; *Linux) KHTML/4.* (like Gecko)] -Parent=Konqueror 4.0 -Platform=Linux - -[Mozilla/5.0 (compatible; Konqueror/4.0.*; FreeBSD) KHTML/4.* (like Gecko)] -Parent=Konqueror 4.0 -Platform=FreeBSD - -[Mozilla/5.0 (compatible; Konqueror/4.0.*; NetBSD) KHTML/4.* (like Gecko)] -Parent=Konqueror 4.0 -Platform=NetBSD - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.1 - -[Konqueror 4.1] -Parent=DefaultProperties -Browser=Konqueror -Version=4.1 -MajorVer=4 -MinorVer=1 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (compatible; Konqueror/4.1*; *Linux*) KHTML/4.* (like Gecko)*] -Parent=Konqueror 4.1 -Platform=Linux - -[Mozilla/5.0 (compatible; Konqueror/4.1*; Debian) KHTML/4.* (like Gecko)*] -Parent=Konqueror 4.1 -Platform=Debian - -[Mozilla/5.0 (compatible; Konqueror/4.1*; FreeBSD) KHTML/4.* (like Gecko)*] -Parent=Konqueror 4.1 -Platform=FreeBSD - -[Mozilla/5.0 (compatible; Konqueror/4.1*; NetBSD) KHTML/4.* (like Gecko)*] -Parent=Konqueror 4.1 -Platform=NetBSD - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.2 - -[Konqueror 4.2] -Parent=DefaultProperties -Browser=Konqueror -Version=4.2 -MajorVer=4 -MinorVer=2 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (compatible; Konqueror/4.2*; *Linux*) KHTML/4.* (like Gecko)*] -Parent=Konqueror 4.2 -Platform=Linux - -[Mozilla/5.0 (compatible; Konqueror/4.2*; Debian) KHTML/4.* (like Gecko)*] -Parent=Konqueror 4.2 -Platform=Debian - -[Mozilla/5.0 (compatible; Konqueror/4.2*; FreeBSD) KHTML/4.* (like Gecko)*] -Parent=Konqueror 4.2 -Platform=FreeBSD - -[Mozilla/5.0 (compatible; Konqueror/4.2*; NetBSD) KHTML/4.* (like Gecko)*] -Parent=Konqueror 4.2 -Platform=NetBSD - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari - -[Safari] -Parent=DefaultProperties -Browser=Safari -Platform=MacOSX -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.3 -w3cdomversion=1.0 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/100*] -Parent=Safari -Version=1.1 -MajorVer=1 -MinorVer=1 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/125*] -Parent=Safari -Version=1.2 -MajorVer=1 -MinorVer=2 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/312*] -Parent=Safari -Version=1.3 -MajorVer=1 -MinorVer=3 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/412*] -Parent=Safari -Version=2.0 -MajorVer=2 -MinorVer=0 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/416*] -Parent=Safari -Version=2.0 -MajorVer=2 -MinorVer=0 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/417*] -Parent=Safari -Version=2.0 -MajorVer=2 -MinorVer=0 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/418*] -Parent=Safari -Version=2.0 -MajorVer=2 -MinorVer=0 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/419*] -Parent=Safari -Version=2.0 -MajorVer=2 -MinorVer=0 - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/52*] -Parent=Safari -Beta=true - -[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/85*] -Parent=Safari -Version=1.0 -MajorVer=1 -MinorVer=0 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.0 - -[Safari 3.0] -Parent=DefaultProperties -Browser=Safari -Version=3.0 -MajorVer=3 -Platform=MacOSX -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.0* Safari/*] -Parent=Safari 3.0 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] -Parent=Safari 3.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.0* Safari/*] -Parent=Safari 3.0 -Platform=Win2003 - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.0* Safari/*] -Parent=Safari 3.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] -Parent=Safari 3.0 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.1 - -[Safari 3.1] -Parent=DefaultProperties -Browser=Safari -Version=3.1 -MajorVer=3 -MinorVer=1 -Platform=MacOSX -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.1* Safari/*] -Parent=Safari 3.1 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] -Parent=Safari 3.1 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.1* Safari/*] -Parent=Safari 3.1 -Platform=Win2003 - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.1* Safari/*] -Parent=Safari 3.1 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] -Parent=Safari 3.1 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.2 - -[Safari 3.2] -Parent=DefaultProperties -Browser=Safari -Version=3.2 -MajorVer=3 -MinorVer=2 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.2* Safari/*] -Parent=Safari 3.2 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] -Parent=Safari 3.2 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.2* Safari/*] -Parent=Safari 3.2 -Platform=Win2003 - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.2* Safari/*] -Parent=Safari 3.2 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] -Parent=Safari 3.2 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 4.0 - -[Safari 4.0] -Parent=DefaultProperties -Browser=Safari -Version=4.0 -MajorVer=4 -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4.0* Safari/*] -Parent=Safari 4.0 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4 Public Beta Safari/*] -Parent=Safari 4.0 - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] -Parent=Safari 4.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] -Parent=Safari 4.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] -Parent=Safari 4.0 -Platform=Win2003 - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4.0* Safari/*] -Parent=Safari 4.0 -Platform=Win2003 - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] -Parent=Safari 4.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] -Parent=Safari 4.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] -Parent=Safari 4.0 -Platform=Win7 - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] -Parent=Safari 4.0 -Platform=Win7 - -[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] -Parent=Safari 4.0 -Platform=Win7 - -[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] -Parent=Safari 4.0 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 10.0 - -[Opera 10.0] -Parent=DefaultProperties -Browser=Opera -Version=10.0 -MajorVer=10 -Alpha=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/* (compatible; MSIE*; Linux*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 10.0*] -Parent=Opera 10.0 -Platform=MacOSX - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 10.0*] -Parent=Opera 10.0 -Platform=MacPPC - -[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win95 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win98 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 10.0*] -Parent=Opera 10.0 -Platform=WinCE -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 10.0*] -Parent=Opera 10.0 -Platform=WinME -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 10.0*] -Parent=Opera 10.0 -Platform=WinNT -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 10.0*] -Parent=Opera 10.0 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win2003 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 10.0*] -Parent=Opera 10.0 -Platform=WinVista -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win7 - -[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 10.0*] -Parent=Opera 10.0 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 10.0*] -Parent=Opera 10.0 -Platform=FreeBSD - -[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 10.0*] -Parent=Opera 10.0 -Platform=SunOS - -[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 10.0*] -Parent=Opera 10.0 -Platform=MacOSX - -[Mozilla/* (Windows 2000;*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows 95;*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win95 -Win32=true - -[Mozilla/* (Windows 98;*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win98 -Win32=true - -[Mozilla/* (Windows ME;*) Opera 10.0*] -Parent=Opera 10.0 -Platform=WinME -Win32=true - -[Mozilla/* (Windows NT 4.0;*) Opera 10.0*] -Parent=Opera 10.0 -Platform=WinNT -Win32=true - -[Mozilla/* (Windows NT 5.0;*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows NT 5.1;*) Opera 10.0*] -Parent=Opera 10.0 -Platform=WinXP -Win32=true - -[Mozilla/* (Windows NT 5.2;*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win2003 -Win32=true - -[Mozilla/* (Windows NT 6.0;*) Opera 10.0*] -Parent=Opera 10.0 -Platform=WinVista - -[Mozilla/* (Windows NT 6.1;*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Win7 - -[Mozilla/* (X11; Linux*) Opera 10.0*] -Parent=Opera 10.0 -Platform=Linux - -[Opera/10.0* (Linux*)*] -Parent=Opera 10.0 -Platform=Linux - -[Opera/10.0* (Macintosh; *Mac OS X;*)*] -Parent=Opera 10.0 -Platform=MacOSX - -[Opera/10.0* (Windows 95*)*] -Parent=Opera 10.0 -Platform=Win95 -Win32=true - -[Opera/10.0* (Windows 98*)*] -Parent=Opera 10.0 -Platform=Win98 -Win32=true - -[Opera/10.0* (Windows CE*)*] -Parent=Opera 10.0 -Platform=WinCE -Win32=true - -[Opera/10.0* (Windows ME*)*] -Parent=Opera 10.0 -Platform=WinME -Win32=true - -[Opera/10.0* (Windows NT 4.0*)*] -Parent=Opera 10.0 -Platform=WinNT -Win32=true - -[Opera/10.0* (Windows NT 5.0*)*] -Parent=Opera 10.0 -Platform=Win2000 -Win32=true - -[Opera/10.0* (Windows NT 5.1*)*] -Parent=Opera 10.0 -Platform=WinXP -Win32=true - -[Opera/10.0* (Windows NT 5.2*)*] -Parent=Opera 10.0 -Platform=Win2003 -Win32=true - -[Opera/10.0* (Windows NT 6.0*)*] -Parent=Opera 10.0 -Platform=WinVista -Win32=true - -[Opera/10.0* (Windows NT 6.1*)*] -Parent=Opera 10.0 -Platform=Win7 - -[Opera/10.0* (Windows XP*)*] -Parent=Opera 10.0 -Platform=WinXP -Win32=true - -[Opera/10.0* (X11; FreeBSD*)*] -Parent=Opera 10.0 -Platform=FreeBSD - -[Opera/10.0* (X11; Linux*)*] -Parent=Opera 10.0 -Platform=Linux - -[Opera/10.0* (X11; SunOS*)*] -Parent=Opera 10.0 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.0 - -[Opera 7.0] -Parent=DefaultProperties -Browser=Opera -Version=7.0 -MajorVer=7 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/3.0 (Windows 2000; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win2000 -Win32=true - -[Mozilla/3.0 (Windows 95; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win95 -Win32=true - -[Mozilla/3.0 (Windows 98; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win98 -Win32=true - -[Mozilla/3.0 (Windows ME; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinME -Win32=true - -[Mozilla/3.0 (Windows NT 4.0; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinNT -Win32=true - -[Mozilla/3.0 (Windows XP; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinXP -Win32=true - -[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win2000 -Win32=true - -[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 95) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win95 -Win32=true - -[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 98) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win98 -Win32=true - -[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinME -Win32=true - -[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinNT -Win32=true - -[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win2000 -Win32=true - -[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinXP -Win32=true - -[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows XP) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinXP -Win32=true - -[Mozilla/4.78 (Windows 2000; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win2000 -Win32=true - -[Mozilla/4.78 (Windows 95; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win95 -Win32=true - -[Mozilla/4.78 (Windows 98; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win98 -Win32=true - -[Mozilla/4.78 (Windows ME; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinME -Win32=true - -[Mozilla/4.78 (Windows NT 4.0; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinNT -Win32=true - -[Mozilla/4.78 (Windows NT 5.1; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinXP -Win32=true - -[Mozilla/4.78 (Windows Windows NT 5.0; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win2000 -Win32=true - -[Mozilla/4.78 (Windows XP; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows 2000; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows 95; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows 98; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows ME; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows NT 4.0; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows NT 5.1; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows XP; ?) Opera 7.0*] -Parent=Opera 7.0 -Platform=WinXP -Win32=true - -[Opera/7.0* (Windows 2000; ?)*] -Parent=Opera 7.0 -Platform=Win2000 -Win32=true - -[Opera/7.0* (Windows 95; ?)*] -Parent=Opera 7.0 -Platform=Win95 -Win32=true - -[Opera/7.0* (Windows 98; ?)*] -Parent=Opera 7.0 -Platform=Win98 -Win32=true - -[Opera/7.0* (Windows ME; ?)*] -Parent=Opera 7.0 -Platform=WinME -Win32=true - -[Opera/7.0* (Windows NT 4.0; ?)*] -Parent=Opera 7.0 -Platform=WinNT -Win32=true - -[Opera/7.0* (Windows NT 5.0; ?)*] -Parent=Opera 7.0 -Platform=Win2000 -Win32=true - -[Opera/7.0* (Windows NT 5.1; ?)*] -Parent=Opera 7.0 -Platform=WinXP -Win32=true - -[Opera/7.0* (Windows XP; ?)*] -Parent=Opera 7.0 -Platform=WinXP -Win32=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.1 - -[Opera 7.1] -Parent=DefaultProperties -Browser=Opera -Version=7.1 -MajorVer=7 -MinorVer=1 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.1*] -Parent=Opera 7.1 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.1*] -Parent=Opera 7.1 -Platform=Win95 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.1*] -Parent=Opera 7.1 -Platform=Win98 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.1*] -Parent=Opera 7.1 -Platform=WinME -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.1*] -Parent=Opera 7.1 -Platform=WinNT -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.1*] -Parent=Opera 7.1 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.1*] -Parent=Opera 7.1 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.1*] -Parent=Opera 7.1 -Platform=WinXP -Win32=true - -[Mozilla/?.* (Windows 2000; ?) Opera 7.1*] -Parent=Opera 7.1 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows 95; ?) Opera 7.1*] -Parent=Opera 7.1 -Platform=Win95 -Win32=true - -[Mozilla/?.* (Windows 98; ?) Opera 7.1*] -Parent=Opera 7.1 -Platform=Win98 -Win32=true - -[Mozilla/?.* (Windows ME; ?) Opera 7.1*] -Parent=Opera 7.1 -Platform=WinME -Win32=true - -[Mozilla/?.* (Windows NT 4.0; U) Opera 7.1*] -Parent=Opera 7.1 -Platform=WinNT -Win32=true - -[Mozilla/?.* (Windows NT 5.0; U) Opera 7.1*] -Parent=Opera 7.1 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.1*] -Parent=Opera 7.1 -Platform=WinXP -Win32=true - -[Opera/7.1* (Linux*; ?)*] -Parent=Opera 7.1 -Platform=Linux - -[Opera/7.1* (Windows 95; ?)*] -Parent=Opera 7.1 -Platform=Win95 -Win32=true - -[Opera/7.1* (Windows 98; ?)*] -Parent=Opera 7.1 -Platform=Win98 -Win32=true - -[Opera/7.1* (Windows ME; ?)*] -Parent=Opera 7.1 -Platform=WinME -Win32=true - -[Opera/7.1* (Windows NT 4.0; ?)*] -Parent=Opera 7.1 -Platform=WinNT -Win32=true - -[Opera/7.1* (Windows NT 5.0; ?)*] -Parent=Opera 7.1 -Platform=Win2000 -Win32=true - -[Opera/7.1* (Windows NT 5.1; ?)*] -Parent=Opera 7.1 -Platform=WinXP -Win32=true - -[Opera/7.1* (Windows XP; ?)*] -Parent=Opera 7.1 -Platform=WinXP -Win32=true - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.2 - -[Opera 7.2] -Parent=DefaultProperties -Browser=Opera -Version=7.2 -MajorVer=7 -MinorVer=2 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.2*] -Parent=Opera 7.2 -Platform=Linux - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.2*] -Parent=Opera 7.2 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.2*] -Parent=Opera 7.2 -Platform=Win95 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.2*] -Parent=Opera 7.2 -Platform=Win98 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.2*] -Parent=Opera 7.2 -Platform=WinME -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.2*] -Parent=Opera 7.2 -Platform=WinNT -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.2*] -Parent=Opera 7.2 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.2*] -Parent=Opera 7.2 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.2*] -Parent=Opera 7.2 -Platform=Win2003 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.2*] -Parent=Opera 7.2 -Platform=WinXP -Win32=true - -[Mozilla/?.* (Windows 2000; ?) Opera 7.2*] -Parent=Opera 7.2 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows 95; ?) Opera 7.2*] -Parent=Opera 7.2 -Platform=Win95 -Win32=true - -[Mozilla/?.* (Windows 98; ?) Opera 7.2*] -Parent=Opera 7.2 -Platform=Win98 -Win32=true - -[Mozilla/?.* (Windows ME; ?) Opera 7.2*] -Parent=Opera 7.2 -Platform=WinME -Win32=true - -[Mozilla/?.* (Windows NT 4.0; U) Opera 7.2*] -Parent=Opera 7.2 -Platform=WinNT -Win32=true - -[Mozilla/?.* (Windows NT 5.0; U) Opera 7.2*] -Parent=Opera 7.2 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.2*] -Parent=Opera 7.2 -Platform=WinXP -Win32=true - -[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.2*] -Parent=Opera 7.2 -Platform=Win2003 -Win32=true - -[Opera/7.2* (Linux*; ?)*] -Parent=Opera 7.2 -Platform=Linux - -[Opera/7.2* (Windows 95; ?)*] -Parent=Opera 7.2 -Platform=Win95 -Win32=true - -[Opera/7.2* (Windows 98; ?)*] -Parent=Opera 7.2 -Platform=Win98 -Win32=true - -[Opera/7.2* (Windows ME; ?)*] -Parent=Opera 7.2 -Platform=WinME -Win32=true - -[Opera/7.2* (Windows NT 4.0; ?)*] -Parent=Opera 7.2 -Platform=WinNT -Win32=true - -[Opera/7.2* (Windows NT 5.0; ?)*] -Parent=Opera 7.2 -Platform=Win2000 -Win32=true - -[Opera/7.2* (Windows NT 5.1; ?)*] -Parent=Opera 7.2 -Platform=WinXP -Win32=true - -[Opera/7.2* (Windows NT 5.2; ?)*] -Parent=Opera 7.2 -Platform=Win2003 -Win32=true - -[Opera/7.2* (Windows XP; ?)*] -Parent=Opera 7.2 -Platform=WinXP -Win32=true - -[Opera/7.2* (X11; FreeBSD*; ?)*] -Parent=Opera 7.2 -Platform=FreeBSD - -[Opera/7.2* (X11; Linux*; ?)*] -Parent=Opera 7.2 -Platform=Linux - -[Opera/7.2* (X11; SunOS*)*] -Parent=Opera 7.2 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.5 - -[Opera 7.5] -Parent=DefaultProperties -Browser=Opera -Version=7.5 -MajorVer=7 -MinorVer=5 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.5*] -Parent=Opera 7.5 -Platform=Linux - -[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.5*] -Parent=Opera 7.5 -Platform=MacPPC - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.5*] -Parent=Opera 7.5 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.5*] -Parent=Opera 7.5 -Platform=Win95 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.5*] -Parent=Opera 7.5 -Platform=Win98 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.5*] -Parent=Opera 7.5 -Platform=WinME -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.5*] -Parent=Opera 7.5 -Platform=WinNT -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.5*] -Parent=Opera 7.5 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.5*] -Parent=Opera 7.5 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.5*] -Parent=Opera 7.5 -Platform=Win2003 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.5*] -Parent=Opera 7.5 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.5*] -Parent=Opera 7.5 -Platform=Linux - -[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.5*] -Parent=Opera 7.5 -Platform=MacOSX - -[Mozilla/?.* (Windows 2000; ?) Opera 7.5*] -Parent=Opera 7.5 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows 95; ?) Opera 7.5*] -Parent=Opera 7.5 -Platform=Win95 -Win32=true - -[Mozilla/?.* (Windows 98; ?) Opera 7.5*] -Parent=Opera 7.5 -Platform=Win98 -Win32=true - -[Mozilla/?.* (Windows ME; ?) Opera 7.5*] -Parent=Opera 7.5 -Platform=WinME -Win32=true - -[Mozilla/?.* (Windows NT 4.0; U) Opera 7.5*] -Parent=Opera 7.5 -Platform=WinNT -Win32=true - -[Mozilla/?.* (Windows NT 5.0; U) Opera 7.5*] -Parent=Opera 7.5 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.5*] -Parent=Opera 7.5 -Platform=WinXP -Win32=true - -[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.5*] -Parent=Opera 7.5 -Platform=Win2003 -Win32=true - -[Mozilla/?.* (X11; Linux*; ?) Opera 7.5*] -Parent=Opera 7.5 -Platform=Linux - -[Opera/7.5* (Linux*; ?)*] -Parent=Opera 7.5 -Platform=Linux - -[Opera/7.5* (Macintosh; *Mac OS X; ?)*] -Parent=Opera 7.5 -Platform=MacOSX - -[Opera/7.5* (Windows 95; ?)*] -Parent=Opera 7.5 -Platform=Win95 -Win32=true - -[Opera/7.5* (Windows 98; ?)*] -Parent=Opera 7.5 -Platform=Win98 -Win32=true - -[Opera/7.5* (Windows ME; ?)*] -Parent=Opera 7.5 -Platform=WinME -Win32=true - -[Opera/7.5* (Windows NT 4.0; ?)*] -Parent=Opera 7.5 -Platform=WinNT -Win32=true - -[Opera/7.5* (Windows NT 5.0; ?)*] -Parent=Opera 7.5 -Platform=Win2000 -Win32=true - -[Opera/7.5* (Windows NT 5.1; ?)*] -Parent=Opera 7.5 -Platform=WinXP -Win32=true - -[Opera/7.5* (Windows NT 5.2; ?)*] -Parent=Opera 7.5 -Platform=Win2003 -Win32=true - -[Opera/7.5* (Windows XP; ?)*] -Parent=Opera 7.5 -Platform=WinXP -Win32=true - -[Opera/7.5* (X11; FreeBSD*; ?)*] -Parent=Opera 7.5 -Platform=FreeBSD - -[Opera/7.5* (X11; Linux*; ?)*] -Parent=Opera 7.5 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.6 - -[Opera 7.6] -Parent=DefaultProperties -Browser=Opera -Version=7.6 -MajorVer=7 -MinorVer=6 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.6*] -Parent=Opera 7.6 -Platform=Linux - -[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.6*] -Parent=Opera 7.6 -Platform=MacPPC - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.6*] -Parent=Opera 7.6 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.6*] -Parent=Opera 7.6 -Platform=Win95 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.6*] -Parent=Opera 7.6 -Platform=Win98 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.6*] -Parent=Opera 7.6 -Platform=WinME -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.6*] -Parent=Opera 7.6 -Platform=WinNT -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.6*] -Parent=Opera 7.6 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.6*] -Parent=Opera 7.6 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.6*] -Parent=Opera 7.6 -Platform=Win2003 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.6*] -Parent=Opera 7.6 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.6*] -Parent=Opera 7.6 -Platform=Linux - -[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.6*] -Parent=Opera 7.6 -Platform=MacOSX - -[Mozilla/?.* (Windows 2000; ?) Opera 7.6*] -Parent=Opera 7.6 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows 95; ?) Opera 7.6*] -Parent=Opera 7.6 -Platform=Win95 -Win32=true - -[Mozilla/?.* (Windows 98; ?) Opera 7.6*] -Parent=Opera 7.6 -Platform=Win98 -Win32=true - -[Mozilla/?.* (Windows ME; ?) Opera 7.6*] -Parent=Opera 7.6 -Platform=WinME -Win32=true - -[Mozilla/?.* (Windows NT 4.0; U) Opera 7.6*] -Parent=Opera 7.6 -Platform=WinNT -Win32=true - -[Mozilla/?.* (Windows NT 5.0; U) Opera 7.6*] -Parent=Opera 7.6 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.6*] -Parent=Opera 7.6 -Platform=WinXP -Win32=true - -[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.6*] -Parent=Opera 7.6 -Platform=Win2003 -Win32=true - -[Mozilla/?.* (X11; Linux*; ?) Opera 7.6*] -Parent=Opera 7.6 -Platform=Linux - -[Opera/7.6* (Linux*)*] -Parent=Opera 7.6 -Platform=Linux - -[Opera/7.6* (Macintosh; *Mac OS X; ?)*] -Parent=Opera 7.6 -Platform=MacOSX - -[Opera/7.6* (Windows 95*)*] -Parent=Opera 7.6 -Platform=Win95 -Win32=true - -[Opera/7.6* (Windows 98*)*] -Parent=Opera 7.6 -Platform=Win98 -Win32=true - -[Opera/7.6* (Windows ME*)*] -Parent=Opera 7.6 -Platform=WinME -Win32=true - -[Opera/7.6* (Windows NT 4.0*)*] -Parent=Opera 7.6 -Platform=WinNT -Win32=true - -[Opera/7.6* (Windows NT 5.0*)*] -Parent=Opera 7.6 -Platform=Win2000 -Win32=true - -[Opera/7.6* (Windows NT 5.1*)*] -Parent=Opera 7.6 -Platform=WinXP -Win32=true - -[Opera/7.6* (Windows NT 5.2*)*] -Parent=Opera 7.6 -Platform=Win2003 -Win32=true - -[Opera/7.6* (Windows XP*)*] -Parent=Opera 7.6 -Platform=WinXP -Win32=true - -[Opera/7.6* (X11; FreeBSD*)*] -Parent=Opera 7.6 -Platform=FreeBSD - -[Opera/7.6* (X11; Linux*)*] -Parent=Opera 7.6 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.0 - -[Opera 8.0] -Parent=DefaultProperties -Browser=Opera -Version=8.0 -MajorVer=8 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.0*] -Parent=Opera 8.0 -Platform=Linux - -[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X; *) Opera 8.0*] -Parent=Opera 8.0 -Platform=MacOSX - -[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.0*] -Parent=Opera 8.0 -Platform=MacPPC - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.0*] -Parent=Opera 8.0 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.0*] -Parent=Opera 8.0 -Platform=Win95 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.0*] -Parent=Opera 8.0 -Platform=Win98 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.0*] -Parent=Opera 8.0 -Platform=WinCE -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.0*] -Parent=Opera 8.0 -Platform=WinME -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.0*] -Parent=Opera 8.0 -Platform=WinNT -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.0*] -Parent=Opera 8.0 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.0*] -Parent=Opera 8.0 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.0*] -Parent=Opera 8.0 -Platform=Win2003 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.0*] -Parent=Opera 8.0 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.0*] -Parent=Opera 8.0 -Platform=FreeBSD - -[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.0*] -Parent=Opera 8.0 -Platform=Linux - -[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.0*] -Parent=Opera 8.0 -Platform=MacOSX - -[Mozilla/?.* (Windows 2000; *) Opera 8.0*] -Parent=Opera 8.0 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows 95; *) Opera 8.0*] -Parent=Opera 8.0 -Platform=Win95 -Win32=true - -[Mozilla/?.* (Windows 98; *) Opera 8.0*] -Parent=Opera 8.0 -Platform=Win98 -Win32=true - -[Mozilla/?.* (Windows ME; *) Opera 8.0*] -Parent=Opera 8.0 -Platform=WinME -Win32=true - -[Mozilla/?.* (Windows NT 4.0; *) Opera 8.0*] -Parent=Opera 8.0 -Platform=WinNT -Win32=true - -[Mozilla/?.* (Windows NT 5.0; *) Opera 8.0*] -Parent=Opera 8.0 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows NT 5.1; *) Opera 8.0*] -Parent=Opera 8.0 -Platform=WinXP -Win32=true - -[Mozilla/?.* (Windows NT 5.2; *) Opera 8.0*] -Parent=Opera 8.0 -Platform=Win2003 -Win32=true - -[Mozilla/?.* (X11; Linux*; *) Opera 8.0*] -Parent=Opera 8.0 -Platform=Linux - -[Opera/8.0* (Linux*)*] -Parent=Opera 8.0 -Platform=Linux - -[Opera/8.0* (Macintosh; *Mac OS X; *)*] -Parent=Opera 8.0 -Platform=MacOSX - -[Opera/8.0* (Windows 95*)*] -Parent=Opera 8.0 -Platform=Win95 -Win32=true - -[Opera/8.0* (Windows 98*)*] -Parent=Opera 8.0 -Platform=Win98 -Win32=true - -[Opera/8.0* (Windows CE*)*] -Parent=Opera 8.0 -Platform=WinCE -Win32=true - -[Opera/8.0* (Windows ME*)*] -Parent=Opera 8.0 -Platform=WinME -Win32=true - -[Opera/8.0* (Windows NT 4.0*)*] -Parent=Opera 8.0 -Platform=WinNT -Win32=true - -[Opera/8.0* (Windows NT 5.0*)*] -Parent=Opera 8.0 -Platform=Win2000 -Win32=true - -[Opera/8.0* (Windows NT 5.1*)*] -Parent=Opera 8.0 -Platform=WinXP -Win32=true - -[Opera/8.0* (Windows NT 5.2*)*] -Parent=Opera 8.0 -Platform=Win2003 -Win32=true - -[Opera/8.0* (Windows XP*)*] -Parent=Opera 8.0 -Platform=WinXP -Win32=true - -[Opera/8.0* (X11; FreeBSD*)*] -Parent=Opera 8.0 -Platform=FreeBSD - -[Opera/8.0* (X11; Linux*)*] -Parent=Opera 8.0 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.1 - -[Opera 8.1] -Parent=DefaultProperties -Browser=Opera -Version=8.1 -MajorVer=8 -MinorVer=1 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.1*] -Parent=Opera 8.1 -Platform=Linux - -[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.1*] -Parent=Opera 8.1 -Platform=MacPPC - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.1*] -Parent=Opera 8.1 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.1*] -Parent=Opera 8.1 -Platform=Win95 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.1*] -Parent=Opera 8.1 -Platform=Win98 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.1*] -Parent=Opera 8.1 -Platform=WinCE -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.1*] -Parent=Opera 8.1 -Platform=WinME -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.1*] -Parent=Opera 8.1 -Platform=WinNT -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.1*] -Parent=Opera 8.1 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.1*] -Parent=Opera 8.1 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.1*] -Parent=Opera 8.1 -Platform=Win2003 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.1*] -Parent=Opera 8.1 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.1*] -Parent=Opera 8.1 -Platform=FreeBSD - -[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.1*] -Parent=Opera 8.1 -Platform=Linux - -[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.1*] -Parent=Opera 8.1 -Platform=MacOSX - -[Mozilla/?.* (Windows 2000; *) Opera 8.1*] -Parent=Opera 8.1 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows 95; *) Opera 8.1*] -Parent=Opera 8.1 -Platform=Win95 -Win32=true - -[Mozilla/?.* (Windows 98; *) Opera 8.1*] -Parent=Opera 8.1 -Platform=Win98 -Win32=true - -[Mozilla/?.* (Windows ME; *) Opera 8.1*] -Parent=Opera 8.1 -Platform=WinME -Win32=true - -[Mozilla/?.* (Windows NT 4.0; *) Opera 8.1*] -Parent=Opera 8.1 -Platform=WinNT -Win32=true - -[Mozilla/?.* (Windows NT 5.0; *) Opera 8.1*] -Parent=Opera 8.1 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows NT 5.1; *) Opera 8.1*] -Parent=Opera 8.1 -Platform=WinXP -Win32=true - -[Mozilla/?.* (Windows NT 5.2; *) Opera 8.1*] -Parent=Opera 8.1 -Platform=Win2003 -Win32=true - -[Mozilla/?.* (X11; Linux*; *) Opera 8.1*] -Parent=Opera 8.1 -Platform=Linux - -[Opera/8.1* (Linux*)*] -Parent=Opera 8.1 -Platform=Linux - -[Opera/8.1* (Macintosh; *Mac OS X; *)*] -Parent=Opera 8.1 -Platform=MacOSX - -[Opera/8.1* (Windows 95*)*] -Parent=Opera 8.1 -Platform=Win95 -Win32=true - -[Opera/8.1* (Windows 98*)*] -Parent=Opera 8.1 -Platform=Win98 -Win32=true - -[Opera/8.1* (Windows CE*)*] -Parent=Opera 8.1 -Platform=WinCE -Win32=true - -[Opera/8.1* (Windows ME*)*] -Parent=Opera 8.1 -Platform=WinME -Win32=true - -[Opera/8.1* (Windows NT 4.0*)*] -Parent=Opera 8.1 -Platform=WinNT -Win32=true - -[Opera/8.1* (Windows NT 5.0*)*] -Parent=Opera 8.1 -Platform=Win2000 -Win32=true - -[Opera/8.1* (Windows NT 5.1*)*] -Parent=Opera 8.1 -Platform=WinXP -Win32=true - -[Opera/8.1* (Windows NT 5.2*)*] -Parent=Opera 8.1 -Platform=Win2003 -Win32=true - -[Opera/8.1* (Windows XP*)*] -Parent=Opera 8.1 -Platform=WinXP -Win32=true - -[Opera/8.1* (X11; FreeBSD*)*] -Parent=Opera 8.1 -Platform=FreeBSD - -[Opera/8.1* (X11; Linux*)*] -Parent=Opera 8.1 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.5 - -[Opera 8.5] -Parent=DefaultProperties -Browser=Opera -Version=8.5 -MajorVer=8 -MinorVer=5 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.3 -w3cdomversion=1.0 - -[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.5*] -Parent=Opera 8.5 -Platform=Linux - -[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X;*) Opera 8.5*] -Parent=Opera 8.5 -Platform=MacOSX - -[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.5*] -Parent=Opera 8.5 -Platform=MacPPC - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.5*] -Parent=Opera 8.5 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.5*] -Parent=Opera 8.5 -Platform=Win95 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.5*] -Parent=Opera 8.5 -Platform=Win98 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.5*] -Parent=Opera 8.5 -Platform=WinCE -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.5*] -Parent=Opera 8.5 -Platform=WinME -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.5*] -Parent=Opera 8.5 -Platform=WinNT -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.5*] -Parent=Opera 8.5 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.5*] -Parent=Opera 8.5 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.5*] -Parent=Opera 8.5 -Platform=Win2003 -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.5*] -Parent=Opera 8.5 -Platform=WinXP -Win32=true - -[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.5*] -Parent=Opera 8.5 -Platform=FreeBSD - -[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.5*] -Parent=Opera 8.5 -Platform=Linux - -[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.5*] -Parent=Opera 8.5 -Platform=MacOSX - -[Mozilla/?.* (Macintosh; PPC Mac OS X;*) Opera 8.5*] -Parent=Opera 8.5 -Platform=MacOSX - -[Mozilla/?.* (Windows 2000; *) Opera 8.5*] -Parent=Opera 8.5 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows 95; *) Opera 8.5*] -Parent=Opera 8.5 -Platform=Win95 -Win32=true - -[Mozilla/?.* (Windows 98; *) Opera 8.5*] -Parent=Opera 8.5 -Platform=Win98 -Win32=true - -[Mozilla/?.* (Windows ME; *) Opera 8.5*] -Parent=Opera 8.5 -Platform=WinME -Win32=true - -[Mozilla/?.* (Windows NT 4.0; *) Opera 8.5*] -Parent=Opera 8.5 -Platform=WinNT -Win32=true - -[Mozilla/?.* (Windows NT 5.0; *) Opera 8.5*] -Parent=Opera 8.5 -Platform=Win2000 -Win32=true - -[Mozilla/?.* (Windows NT 5.1; *) Opera 8.5*] -Parent=Opera 8.5 -Platform=WinXP -Win32=true - -[Mozilla/?.* (Windows NT 5.2; *) Opera 8.5*] -Parent=Opera 8.5 -Platform=Win2003 -Win32=true - -[Mozilla/?.* (X11; Linux*; *) Opera 8.5*] -Parent=Opera 8.5 -Platform=Linux - -[Opera/8.5* (Linux*)*] -Parent=Opera 8.5 -Platform=Linux - -[Opera/8.5* (Macintosh; *Mac OS X; *)*] -Parent=Opera 8.5 -Platform=MacOSX - -[Opera/8.5* (Windows 95*)*] -Parent=Opera 8.5 -Platform=Win95 -Win32=true - -[Opera/8.5* (Windows 98*)*] -Parent=Opera 8.5 -Platform=Win98 -Win32=true - -[Opera/8.5* (Windows CE*)*] -Parent=Opera 8.5 -Platform=WinCE -Win32=true - -[Opera/8.5* (Windows ME*)*] -Parent=Opera 8.5 -Platform=WinME -Win32=true - -[Opera/8.5* (Windows NT 4.0*)*] -Parent=Opera 8.5 -Platform=WinNT -Win32=true - -[Opera/8.5* (Windows NT 5.0*)*] -Parent=Opera 8.5 -Platform=Win2000 -Win32=true - -[Opera/8.5* (Windows NT 5.1*)*] -Parent=Opera 8.5 -Platform=WinXP -Win32=true - -[Opera/8.5* (Windows NT 5.2*)*] -Parent=Opera 8.5 -Platform=Win2003 -Win32=true - -[Opera/8.5* (Windows XP*)*] -Parent=Opera 8.5 -Platform=WinXP -Win32=true - -[Opera/8.5* (X11; FreeBSD*)*] -Parent=Opera 8.5 -Platform=FreeBSD - -[Opera/8.5* (X11; Linux*)*] -Parent=Opera 8.5 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.0 - -[Opera 9.0] -Parent=DefaultProperties -Browser=Opera -Version=9.0 -MajorVer=9 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.5 -w3cdomversion=1.0 - -[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.0*] -Parent=Opera 9.0 -Platform=MacOSX - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.0*] -Parent=Opera 9.0 -Platform=MacPPC - -[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Win95 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Win98 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.0*] -Parent=Opera 9.0 -Platform=WinCE -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.0*] -Parent=Opera 9.0 -Platform=WinME -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.0*] -Parent=Opera 9.0 -Platform=WinNT -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.0*] -Parent=Opera 9.0 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Win2003 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.0*] -Parent=Opera 9.0 -Platform=WinVista -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.0*] -Parent=Opera 9.0 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.0*] -Parent=Opera 9.0 -Platform=FreeBSD - -[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.0*] -Parent=Opera 9.0 -Platform=SunOS - -[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.0*] -Parent=Opera 9.0 -Platform=MacOSX - -[Mozilla/* (Windows 2000;*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows 95;*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Win95 -Win32=true - -[Mozilla/* (Windows 98;*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Win98 -Win32=true - -[Mozilla/* (Windows ME;*) Opera 9.0*] -Parent=Opera 9.0 -Platform=WinME -Win32=true - -[Mozilla/* (Windows NT 4.0;*) Opera 9.0*] -Parent=Opera 9.0 -Platform=WinNT -Win32=true - -[Mozilla/* (Windows NT 5.0;*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows NT 5.1;*) Opera 9.0*] -Parent=Opera 9.0 -Platform=WinXP -Win32=true - -[Mozilla/* (Windows NT 5.2;*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Win2003 -Win32=true - -[Mozilla/* (X11; Linux*) Opera 9.0*] -Parent=Opera 9.0 -Platform=Linux - -[Opera/9.0* (Linux*)*] -Parent=Opera 9.0 -Platform=Linux - -[Opera/9.0* (Macintosh; *Mac OS X;*)*] -Parent=Opera 9.0 -Platform=MacOSX - -[Opera/9.0* (Windows 95*)*] -Parent=Opera 9.0 -Platform=Win95 -Win32=true - -[Opera/9.0* (Windows 98*)*] -Parent=Opera 9.0 -Platform=Win98 -Win32=true - -[Opera/9.0* (Windows CE*)*] -Parent=Opera 9.0 -Platform=WinCE -Win32=true - -[Opera/9.0* (Windows ME*)*] -Parent=Opera 9.0 -Platform=WinME -Win32=true - -[Opera/9.0* (Windows NT 4.0*)*] -Parent=Opera 9.0 -Platform=WinNT -Win32=true - -[Opera/9.0* (Windows NT 5.0*)*] -Parent=Opera 9.0 -Platform=Win2000 -Win32=true - -[Opera/9.0* (Windows NT 5.1*)*] -Parent=Opera 9.0 -Platform=WinXP -Win32=true - -[Opera/9.0* (Windows NT 5.2*)*] -Parent=Opera 9.0 -Platform=Win2003 -Win32=true - -[Opera/9.0* (Windows NT 6.0*)*] -Parent=Opera 9.0 -Platform=WinVista -Win32=true - -[Opera/9.0* (Windows XP*)*] -Parent=Opera 9.0 -Platform=WinXP -Win32=true - -[Opera/9.0* (X11; FreeBSD*)*] -Parent=Opera 9.0 -Platform=FreeBSD - -[Opera/9.0* (X11; Linux*)*] -Parent=Opera 9.0 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.1 - -[Opera 9.1] -Parent=DefaultProperties -Browser=Opera -Version=9.1 -MajorVer=9 -MinorVer=1 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.1*] -Parent=Opera 9.1 -Platform=MacOSX - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC;*) Opera 9.1*] -Parent=Opera 9.1 -Platform=MacPPC - -[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Win95 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Win98 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.1*] -Parent=Opera 9.1 -Platform=WinCE -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.1*] -Parent=Opera 9.1 -Platform=WinME -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.1*] -Parent=Opera 9.1 -Platform=WinNT -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.1*] -Parent=Opera 9.1 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Win2003 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.1*] -Parent=Opera 9.1 -Platform=WinVista -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.1*] -Parent=Opera 9.1 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.1*] -Parent=Opera 9.1 -Platform=FreeBSD - -[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.1*] -Parent=Opera 9.1 -Platform=SunOS - -[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.1*] -Parent=Opera 9.1 -Platform=MacOSX - -[Mozilla/* (Windows 2000;*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows 95;*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Win95 -Win32=true - -[Mozilla/* (Windows 98;*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Win98 -Win32=true - -[Mozilla/* (Windows ME;*) Opera 9.1*] -Parent=Opera 9.1 -Platform=WinME -Win32=true - -[Mozilla/* (Windows NT 4.0;*) Opera 9.1*] -Parent=Opera 9.1 -Platform=WinNT -Win32=true - -[Mozilla/* (Windows NT 5.0;*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows NT 5.1;*) Opera 9.1*] -Parent=Opera 9.1 -Platform=WinXP -Win32=true - -[Mozilla/* (Windows NT 5.2;*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Win2003 -Win32=true - -[Mozilla/* (X11; Linux*) Opera 9.1*] -Parent=Opera 9.1 -Platform=Linux - -[Opera/9.1* (Linux*)*] -Parent=Opera 9.1 -Platform=Linux - -[Opera/9.1* (Macintosh; *Mac OS X;*)*] -Parent=Opera 9.1 -Platform=MacOSX - -[Opera/9.1* (Windows 95*)*] -Parent=Opera 9.1 -Platform=Win95 -Win32=true - -[Opera/9.1* (Windows 98*)*] -Parent=Opera 9.1 -Platform=Win98 -Win32=true - -[Opera/9.1* (Windows CE*)*] -Parent=Opera 9.1 -Platform=WinCE -Win32=true - -[Opera/9.1* (Windows ME*)*] -Parent=Opera 9.1 -Platform=WinME -Win32=true - -[Opera/9.1* (Windows NT 4.0*)*] -Parent=Opera 9.1 -Platform=WinNT -Win32=true - -[Opera/9.1* (Windows NT 5.0*)*] -Parent=Opera 9.1 -Platform=Win2000 -Win32=true - -[Opera/9.1* (Windows NT 5.1*)*] -Parent=Opera 9.1 -Platform=WinXP -Win32=true - -[Opera/9.1* (Windows NT 5.2*)*] -Parent=Opera 9.1 -Platform=Win2003 -Win32=true - -[Opera/9.1* (Windows NT 6.0*)*] -Parent=Opera 9.1 -Platform=WinVista -Win32=true - -[Opera/9.1* (Windows XP*)*] -Parent=Opera 9.1 -Platform=WinXP -Win32=true - -[Opera/9.1* (X11; FreeBSD*)*] -Parent=Opera 9.1 -Platform=FreeBSD - -[Opera/9.1* (X11; Linux*)*] -Parent=Opera 9.1 -Platform=Linux - -[Opera/9.1* (X11; SunOS*)*] -Parent=Opera 9.1 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.2 - -[Opera 9.2] -Parent=DefaultProperties -Browser=Opera -Version=9.2 -MajorVer=9 -MinorVer=2 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.2*] -Parent=Opera 9.2 -Platform=MacOSX - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.2*] -Parent=Opera 9.2 -Platform=MacPPC - -[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win95 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win98 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.2*] -Parent=Opera 9.2 -Platform=WinCE -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.2*] -Parent=Opera 9.2 -Platform=WinME -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.2*] -Parent=Opera 9.2 -Platform=WinNT -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.2*] -Parent=Opera 9.2 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win2003 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.2*] -Parent=Opera 9.2 -Platform=WinVista -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win7 - -[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.2*] -Parent=Opera 9.2 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.2*] -Parent=Opera 9.2 -Platform=FreeBSD - -[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.2*] -Parent=Opera 9.2 -Platform=SunOS - -[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.2*] -Parent=Opera 9.2 -Platform=MacOSX - -[Mozilla/* (Windows 2000;*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows 95;*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win95 -Win32=true - -[Mozilla/* (Windows 98;*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win98 -Win32=true - -[Mozilla/* (Windows ME;*) Opera 9.2*] -Parent=Opera 9.2 -Platform=WinME -Win32=true - -[Mozilla/* (Windows NT 4.0;*) Opera 9.2*] -Parent=Opera 9.2 -Platform=WinNT -Win32=true - -[Mozilla/* (Windows NT 5.0;*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows NT 5.1;*) Opera 9.2*] -Parent=Opera 9.2 -Platform=WinXP -Win32=true - -[Mozilla/* (Windows NT 5.2;*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win2003 -Win32=true - -[Mozilla/* (Windows NT 6.0;*) Opera 9.2*] -Parent=Opera 9.2 -Platform=WinVista - -[Mozilla/* (Windows NT 6.1;*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Win7 - -[Mozilla/* (X11; Linux*) Opera 9.2*] -Parent=Opera 9.2 -Platform=Linux - -[Opera/9.2* (Linux*)*] -Parent=Opera 9.2 -Platform=Linux - -[Opera/9.2* (Macintosh; *Mac OS X;*)*] -Parent=Opera 9.2 -Platform=MacOSX - -[Opera/9.2* (Windows 95*)*] -Parent=Opera 9.2 -Platform=Win95 -Win32=true - -[Opera/9.2* (Windows 98*)*] -Parent=Opera 9.2 -Platform=Win98 -Win32=true - -[Opera/9.2* (Windows CE*)*] -Parent=Opera 9.2 -Platform=WinCE -Win32=true - -[Opera/9.2* (Windows ME*)*] -Parent=Opera 9.2 -Platform=WinME -Win32=true - -[Opera/9.2* (Windows NT 4.0*)*] -Parent=Opera 9.2 -Platform=WinNT -Win32=true - -[Opera/9.2* (Windows NT 5.0*)*] -Parent=Opera 9.2 -Platform=Win2000 -Win32=true - -[Opera/9.2* (Windows NT 5.1*)*] -Parent=Opera 9.2 -Platform=WinXP -Win32=true - -[Opera/9.2* (Windows NT 5.2*)*] -Parent=Opera 9.2 -Platform=Win2003 -Win32=true - -[Opera/9.2* (Windows NT 6.0*)*] -Parent=Opera 9.2 -Platform=WinVista -Win32=true - -[Opera/9.2* (Windows NT 6.1*)*] -Parent=Opera 9.2 -Platform=Win7 - -[Opera/9.2* (Windows XP*)*] -Parent=Opera 9.2 -Platform=WinXP -Win32=true - -[Opera/9.2* (X11; FreeBSD*)*] -Parent=Opera 9.2 -Platform=FreeBSD - -[Opera/9.2* (X11; Linux*)*] -Parent=Opera 9.2 -Platform=Linux - -[Opera/9.2* (X11; SunOS*)*] -Parent=Opera 9.2 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.3 - -[Opera 9.3] -Parent=DefaultProperties -Browser=Opera -Version=9.3 -MajorVer=9 -MinorVer=3 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.3*] -Parent=Opera 9.3 -Platform=MacOSX - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.3*] -Parent=Opera 9.3 -Platform=MacPPC - -[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win95 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win98 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.3*] -Parent=Opera 9.3 -Platform=WinCE -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.3*] -Parent=Opera 9.3 -Platform=WinME -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.3*] -Parent=Opera 9.3 -Platform=WinNT -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.3*] -Parent=Opera 9.3 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win2003 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.3*] -Parent=Opera 9.3 -Platform=WinVista -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win7 - -[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.3*] -Parent=Opera 9.3 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.3*] -Parent=Opera 9.3 -Platform=FreeBSD - -[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.3*] -Parent=Opera 9.3 -Platform=SunOS - -[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.3*] -Parent=Opera 9.3 -Platform=MacOSX - -[Mozilla/* (Windows 2000;*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows 95;*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win95 -Win32=true - -[Mozilla/* (Windows 98;*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win98 -Win32=true - -[Mozilla/* (Windows ME;*) Opera 9.3*] -Parent=Opera 9.3 -Platform=WinME -Win32=true - -[Mozilla/* (Windows NT 4.0;*) Opera 9.3*] -Parent=Opera 9.3 -Platform=WinNT -Win32=true - -[Mozilla/* (Windows NT 5.0;*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows NT 5.1;*) Opera 9.3*] -Parent=Opera 9.3 -Platform=WinXP -Win32=true - -[Mozilla/* (Windows NT 5.2;*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win2003 -Win32=true - -[Mozilla/* (Windows NT 6.0;*) Opera 9.3*] -Parent=Opera 9.3 -Platform=WinVista - -[Mozilla/* (Windows NT 6.1;*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Win7 - -[Mozilla/* (X11; Linux*) Opera 9.3*] -Parent=Opera 9.3 -Platform=Linux - -[Opera/9.3* (Linux*)*] -Parent=Opera 9.3 -Platform=Linux - -[Opera/9.3* (Macintosh; *Mac OS X;*)*] -Parent=Opera 9.3 -Platform=MacOSX - -[Opera/9.3* (Windows 95*)*] -Parent=Opera 9.3 -Platform=Win95 -Win32=true - -[Opera/9.3* (Windows 98*)*] -Parent=Opera 9.3 -Platform=Win98 -Win32=true - -[Opera/9.3* (Windows CE*)*] -Parent=Opera 9.3 -Platform=WinCE -Win32=true - -[Opera/9.3* (Windows ME*)*] -Parent=Opera 9.3 -Platform=WinME -Win32=true - -[Opera/9.3* (Windows NT 4.0*)*] -Parent=Opera 9.3 -Platform=WinNT -Win32=true - -[Opera/9.3* (Windows NT 5.0*)*] -Parent=Opera 9.3 -Platform=Win2000 -Win32=true - -[Opera/9.3* (Windows NT 5.1*)*] -Parent=Opera 9.3 -Platform=WinXP -Win32=true - -[Opera/9.3* (Windows NT 5.2*)*] -Parent=Opera 9.3 -Platform=Win2003 -Win32=true - -[Opera/9.3* (Windows NT 6.0*)*] -Parent=Opera 9.3 -Platform=WinVista -Win32=true - -[Opera/9.3* (Windows NT 6.1*)*] -Parent=Opera 9.3 -Platform=Win7 - -[Opera/9.3* (Windows XP*)*] -Parent=Opera 9.3 -Platform=WinXP -Win32=true - -[Opera/9.3* (X11; FreeBSD*)*] -Parent=Opera 9.3 -Platform=FreeBSD - -[Opera/9.3* (X11; Linux*)*] -Parent=Opera 9.3 -Platform=Linux - -[Opera/9.3* (X11; SunOS*)*] -Parent=Opera 9.3 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.4 - -[Opera 9.4] -Parent=DefaultProperties -Browser=Opera -Version=9.4 -MajorVer=9 -MinorVer=4 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.4*] -Parent=Opera 9.4 -Platform=MacOSX - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.4*] -Parent=Opera 9.4 -Platform=MacPPC - -[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win95 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win98 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.4*] -Parent=Opera 9.4 -Platform=WinCE -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.4*] -Parent=Opera 9.4 -Platform=WinME -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.4*] -Parent=Opera 9.4 -Platform=WinNT -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.4*] -Parent=Opera 9.4 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win2003 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.4*] -Parent=Opera 9.4 -Platform=WinVista -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win7 - -[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.4*] -Parent=Opera 9.4 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.4*] -Parent=Opera 9.4 -Platform=FreeBSD - -[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.4*] -Parent=Opera 9.4 -Platform=SunOS - -[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.4*] -Parent=Opera 9.4 -Platform=MacOSX - -[Mozilla/* (Windows 2000;*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows 95;*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win95 -Win32=true - -[Mozilla/* (Windows 98;*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win98 -Win32=true - -[Mozilla/* (Windows ME;*) Opera 9.4*] -Parent=Opera 9.4 -Platform=WinME -Win32=true - -[Mozilla/* (Windows NT 4.0;*) Opera 9.4*] -Parent=Opera 9.4 -Platform=WinNT -Win32=true - -[Mozilla/* (Windows NT 5.0;*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows NT 5.1;*) Opera 9.4*] -Parent=Opera 9.4 -Platform=WinXP -Win32=true - -[Mozilla/* (Windows NT 5.2;*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win2003 -Win32=true - -[Mozilla/* (Windows NT 6.0;*) Opera 9.4*] -Parent=Opera 9.4 -Platform=WinVista - -[Mozilla/* (Windows NT 6.1;*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Win7 - -[Mozilla/* (X11; Linux*) Opera 9.4*] -Parent=Opera 9.4 -Platform=Linux - -[Opera/9.4* (Linux*)*] -Parent=Opera 9.4 -Platform=Linux - -[Opera/9.4* (Macintosh; *Mac OS X;*)*] -Parent=Opera 9.4 -Platform=MacOSX - -[Opera/9.4* (Windows 95*)*] -Parent=Opera 9.4 -Platform=Win95 -Win32=true - -[Opera/9.4* (Windows 98*)*] -Parent=Opera 9.4 -Platform=Win98 -Win32=true - -[Opera/9.4* (Windows CE*)*] -Parent=Opera 9.4 -Platform=WinCE -Win32=true - -[Opera/9.4* (Windows ME*)*] -Parent=Opera 9.4 -Platform=WinME -Win32=true - -[Opera/9.4* (Windows NT 4.0*)*] -Parent=Opera 9.4 -Platform=WinNT -Win32=true - -[Opera/9.4* (Windows NT 5.0*)*] -Parent=Opera 9.4 -Platform=Win2000 -Win32=true - -[Opera/9.4* (Windows NT 5.1*)*] -Parent=Opera 9.4 -Platform=WinXP -Win32=true - -[Opera/9.4* (Windows NT 5.2*)*] -Parent=Opera 9.4 -Platform=Win2003 -Win32=true - -[Opera/9.4* (Windows NT 6.0*)*] -Parent=Opera 9.4 -Platform=WinVista -Win32=true - -[Opera/9.4* (Windows NT 6.1*)*] -Parent=Opera 9.4 -Platform=Win7 - -[Opera/9.4* (Windows XP*)*] -Parent=Opera 9.4 -Platform=WinXP -Win32=true - -[Opera/9.4* (X11; FreeBSD*)*] -Parent=Opera 9.4 -Platform=FreeBSD - -[Opera/9.4* (X11; Linux*)*] -Parent=Opera 9.4 -Platform=Linux - -[Opera/9.4* (X11; SunOS*)*] -Parent=Opera 9.4 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.5 - -[Opera 9.5] -Parent=DefaultProperties -Browser=Opera -Version=9.5 -MajorVer=9 -MinorVer=5 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.5*] -Parent=Opera 9.5 -Platform=MacOSX - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.5*] -Parent=Opera 9.5 -Platform=MacPPC - -[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win95 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win98 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.5*] -Parent=Opera 9.5 -Platform=WinCE -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.5*] -Parent=Opera 9.5 -Platform=WinME -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.5*] -Parent=Opera 9.5 -Platform=WinNT -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.5*] -Parent=Opera 9.5 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win2003 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.5*] -Parent=Opera 9.5 -Platform=WinVista -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win7 - -[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.5*] -Parent=Opera 9.5 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.5*] -Parent=Opera 9.5 -Platform=FreeBSD - -[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.5*] -Parent=Opera 9.5 -Platform=SunOS - -[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.5*] -Parent=Opera 9.5 -Platform=MacOSX - -[Mozilla/* (Windows 2000;*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows 95;*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win95 -Win32=true - -[Mozilla/* (Windows 98;*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win98 -Win32=true - -[Mozilla/* (Windows ME;*) Opera 9.5*] -Parent=Opera 9.5 -Platform=WinME -Win32=true - -[Mozilla/* (Windows NT 4.0;*) Opera 9.5*] -Parent=Opera 9.5 -Platform=WinNT -Win32=true - -[Mozilla/* (Windows NT 5.0;*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows NT 5.1;*) Opera 9.5*] -Parent=Opera 9.5 -Platform=WinXP -Win32=true - -[Mozilla/* (Windows NT 5.2;*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win2003 -Win32=true - -[Mozilla/* (Windows NT 6.0;*) Opera 9.5*] -Parent=Opera 9.5 -Platform=WinVista - -[Mozilla/* (Windows NT 6.1;*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Win7 - -[Mozilla/* (X11; Linux*) Opera 9.5*] -Parent=Opera 9.5 -Platform=Linux - -[Opera/9.5* (Linux*)*] -Parent=Opera 9.5 -Platform=Linux - -[Opera/9.5* (Macintosh; *Mac OS X;*)*] -Parent=Opera 9.5 -Platform=MacOSX - -[Opera/9.5* (Windows 95*)*] -Parent=Opera 9.5 -Platform=Win95 -Win32=true - -[Opera/9.5* (Windows 98*)*] -Parent=Opera 9.5 -Platform=Win98 -Win32=true - -[Opera/9.5* (Windows CE*)*] -Parent=Opera 9.5 -Platform=WinCE -Win32=true - -[Opera/9.5* (Windows ME*)*] -Parent=Opera 9.5 -Platform=WinME -Win32=true - -[Opera/9.5* (Windows NT 4.0*)*] -Parent=Opera 9.5 -Platform=WinNT -Win32=true - -[Opera/9.5* (Windows NT 5.0*)*] -Parent=Opera 9.5 -Platform=Win2000 -Win32=true - -[Opera/9.5* (Windows NT 5.1*)*] -Parent=Opera 9.5 -Platform=WinXP -Win32=true - -[Opera/9.5* (Windows NT 5.2*)*] -Parent=Opera 9.5 -Platform=Win2003 -Win32=true - -[Opera/9.5* (Windows NT 6.0*)*] -Parent=Opera 9.5 -Platform=WinVista -Win32=true - -[Opera/9.5* (Windows NT 6.1*)*] -Parent=Opera 9.5 -Platform=Win7 - -[Opera/9.5* (Windows XP*)*] -Parent=Opera 9.5 -Platform=WinXP -Win32=true - -[Opera/9.5* (X11; FreeBSD*)*] -Parent=Opera 9.5 -Platform=FreeBSD - -[Opera/9.5* (X11; Linux*)*] -Parent=Opera 9.5 -Platform=Linux - -[Opera/9.5* (X11; SunOS*)*] -Parent=Opera 9.5 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.6 - -[Opera 9.6] -Parent=DefaultProperties -Browser=Opera -Version=9.6 -MajorVer=9 -MinorVer=6 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.6*] -Parent=Opera 9.6 -Platform=MacOSX - -[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.6*] -Parent=Opera 9.6 -Platform=MacPPC - -[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win95 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win98 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.6*] -Parent=Opera 9.6 -Platform=WinCE -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.6*] -Parent=Opera 9.6 -Platform=WinME -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.6*] -Parent=Opera 9.6 -Platform=WinNT -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win2000 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.6*] -Parent=Opera 9.6 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win2003 -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.6*] -Parent=Opera 9.6 -Platform=WinVista -Win32=true - -[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win7 - -[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.6*] -Parent=Opera 9.6 -Platform=WinXP -Win32=true - -[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.6*] -Parent=Opera 9.6 -Platform=FreeBSD - -[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Linux - -[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.6*] -Parent=Opera 9.6 -Platform=SunOS - -[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.6*] -Parent=Opera 9.6 -Platform=MacOSX - -[Mozilla/* (Windows 2000;*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows 95;*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win95 -Win32=true - -[Mozilla/* (Windows 98;*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win98 -Win32=true - -[Mozilla/* (Windows ME;*) Opera 9.6*] -Parent=Opera 9.6 -Platform=WinME -Win32=true - -[Mozilla/* (Windows NT 4.0;*) Opera 9.6*] -Parent=Opera 9.6 -Platform=WinNT -Win32=true - -[Mozilla/* (Windows NT 5.0;*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win2000 -Win32=true - -[Mozilla/* (Windows NT 5.1;*) Opera 9.6*] -Parent=Opera 9.6 -Platform=WinXP -Win32=true - -[Mozilla/* (Windows NT 5.2;*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win2003 -Win32=true - -[Mozilla/* (Windows NT 6.0;*) Opera 9.6*] -Parent=Opera 9.6 -Platform=WinVista - -[Mozilla/* (Windows NT 6.1;*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Win7 - -[Mozilla/* (X11; Linux*) Opera 9.6*] -Parent=Opera 9.6 -Platform=Linux - -[Opera/9.6* (Linux*)*] -Parent=Opera 9.6 -Platform=Linux - -[Opera/9.6* (Macintosh; *Mac OS X;*)*] -Parent=Opera 9.6 -Platform=MacOSX - -[Opera/9.6* (Windows 95*)*] -Parent=Opera 9.6 -Platform=Win95 -Win32=true - -[Opera/9.6* (Windows 98*)*] -Parent=Opera 9.6 -Platform=Win98 -Win32=true - -[Opera/9.6* (Windows CE*)*] -Parent=Opera 9.6 -Platform=WinCE -Win32=true - -[Opera/9.6* (Windows ME*)*] -Parent=Opera 9.6 -Platform=WinME -Win32=true - -[Opera/9.6* (Windows NT 4.0*)*] -Parent=Opera 9.6 -Platform=WinNT -Win32=true - -[Opera/9.6* (Windows NT 5.0*)*] -Parent=Opera 9.6 -Platform=Win2000 -Win32=true - -[Opera/9.6* (Windows NT 5.1*)*] -Parent=Opera 9.6 -Platform=WinXP -Win32=true - -[Opera/9.6* (Windows NT 5.2*)*] -Parent=Opera 9.6 -Platform=Win2003 -Win32=true - -[Opera/9.6* (Windows NT 6.0*)*] -Parent=Opera 9.6 -Platform=WinVista -Win32=true - -[Opera/9.6* (Windows NT 6.1*)*] -Parent=Opera 9.6 -Platform=Win7 - -[Opera/9.6* (Windows XP*)*] -Parent=Opera 9.6 -Platform=WinXP -Win32=true - -[Opera/9.6* (X11; FreeBSD*)*] -Parent=Opera 9.6 -Platform=FreeBSD - -[Opera/9.6* (X11; Linux*)*] -Parent=Opera 9.6 -Platform=Linux - -[Opera/9.6* (X11; SunOS*)*] -Parent=Opera 9.6 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.0 - -[Netscape 4.0] -Parent=DefaultProperties -Browser=Netscape -Version=4.0 -MajorVer=4 -Frames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=1 -supportsCSS=true - -[Mozilla/4.0*(Macintosh*] -Parent=Netscape 4.0 -Version=4.03 -MinorVer=03 -Platform=MacPPC - -[Mozilla/4.0*(Win95;*] -Parent=Netscape 4.0 -Platform=Win95 - -[Mozilla/4.0*(Win98;*] -Parent=Netscape 4.0 -Version=4.03 -MinorVer=03 -Platform=Win98 - -[Mozilla/4.0*(WinNT*] -Parent=Netscape 4.0 -Version=4.03 -MinorVer=03 -Platform=WinNT - -[Mozilla/4.0*(X11;*)] -Parent=Netscape 4.0 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.5 - -[Netscape 4.5] -Parent=DefaultProperties -Browser=Netscape -Version=4.5 -MajorVer=4 -MinorVer=5 -Frames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=1 -supportsCSS=true - -[Mozilla/4.5*(Macintosh; ?; PPC)] -Parent=Netscape 4.5 -Platform=MacPPC - -[Mozilla/4.5*(Win2000; ?)] -Parent=Netscape 4.5 -Platform=Win2000 - -[Mozilla/4.5*(Win95; ?)] -Parent=Netscape 4.5 -Platform=Win95 - -[Mozilla/4.5*(Win98; ?)] -Parent=Netscape 4.5 -Platform=Win98 - -[Mozilla/4.5*(WinME; ?)] -Parent=Netscape 4.5 -Platform=WinME - -[Mozilla/4.5*(WinNT; ?)] -Parent=Netscape 4.5 -Platform=WinNT - -[Mozilla/4.5*(WinXP; ?)] -Parent=Netscape 4.5 -Platform=WinXP - -[Mozilla/4.5*(X11*)] -Parent=Netscape 4.5 -Platform=Linux - -[Mozilla/4.51*(Macintosh; ?; PPC)] -Parent=Netscape 4.5 -Version=4.51 -MinorVer=51 - -[Mozilla/4.51*(Win2000; ?)] -Parent=Netscape 4.5 -Version=4.51 -MinorVer=51 -Platform=Win2000 - -[Mozilla/4.51*(Win95; ?)] -Parent=Netscape 4.5 -Version=4.51 -MinorVer=51 -Platform=Win95 - -[Mozilla/4.51*(Win98; ?)] -Parent=Netscape 4.5 -Version=4.51 -MinorVer=51 -Platform=Win98 - -[Mozilla/4.51*(WinME; ?)] -Parent=Netscape 4.5 -Version=4.51 -MinorVer=51 -Platform=WinME - -[Mozilla/4.51*(WinNT; ?)] -Parent=Netscape 4.5 -Version=4.51 -MinorVer=51 -Platform=WinNT - -[Mozilla/4.51*(WinXP; ?)] -Parent=Netscape 4.5 -Version=4.51 -MinorVer=51 -Platform=WinXP - -[Mozilla/4.51*(X11*)] -Parent=Netscape 4.5 -Version=4.51 -MinorVer=51 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.6 - -[Netscape 4.6] -Parent=DefaultProperties -Browser=Netscape -Version=4.6 -MajorVer=4 -MinorVer=6 -Frames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=1 -supportsCSS=true - -[Mozilla/4.6 * (OS/2; ?)] -Parent=Netscape 4.6 -Platform=OS/2 - -[Mozilla/4.6*(Macintosh; ?; PPC)] -Parent=Netscape 4.6 -Platform=MacPPC - -[Mozilla/4.6*(Win95; ?)] -Parent=Netscape 4.6 -Platform=Win95 - -[Mozilla/4.6*(Win98; ?)] -Parent=Netscape 4.6 -Platform=Win98 - -[Mozilla/4.6*(WinNT; ?)] -Parent=Netscape 4.6 -Platform=WinNT - -[Mozilla/4.61*(Macintosh; ?; PPC)] -Parent=Netscape 4.6 -Version=4.61 -MajorVer=4 -MinorVer=61 -Platform=MacPPC - -[Mozilla/4.61*(OS/2; ?)] -Parent=Netscape 4.6 -Version=4.61 -MajorVer=4 -MinorVer=61 -Platform=OS/2 - -[Mozilla/4.61*(Win95; ?)] -Parent=Netscape 4.6 -Version=4.61 -MajorVer=4 -MinorVer=61 -Platform=Win95 - -[Mozilla/4.61*(Win98; ?)] -Parent=Netscape 4.6 -Version=4.61 -Platform=Win98 - -[Mozilla/4.61*(WinNT; ?)] -Parent=Netscape 4.6 -Version=4.61 -MajorVer=4 -MinorVer=61 -Platform=WinNT - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.7 - -[Netscape 4.7] -Parent=DefaultProperties -Browser=Netscape -Version=4.7 -MajorVer=4 -MinorVer=7 -Frames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=1 -supportsCSS=true - -[Mozilla/4.7 * (Win2000; ?)] -Parent=Netscape 4.7 -Platform=Win2000 - -[Mozilla/4.7*(Macintosh; ?; PPC)*] -Parent=Netscape 4.7 -MinorVer=7 -Platform=MacPPC - -[Mozilla/4.7*(Win95; ?)*] -Parent=Netscape 4.7 -MinorVer=7 -Platform=Win95 - -[Mozilla/4.7*(Win98; ?)*] -Parent=Netscape 4.7 -MinorVer=7 -Platform=Win98 - -[Mozilla/4.7*(Windows NT 4.0; ?)*] -Parent=Netscape 4.7 -MinorVer=7 -Platform=WinNT -Win32=true - -[Mozilla/4.7*(Windows NT 5.0; ?)*] -Parent=Netscape 4.7 -MinorVer=7 -Platform=Win2000 -Win32=true - -[Mozilla/4.7*(Windows NT 5.1; ?)*] -Parent=Netscape 4.7 -MinorVer=7 -Platform=WinXP -Win32=true - -[Mozilla/4.7*(WinNT; ?)*] -Parent=Netscape 4.7 -Platform=WinNT - -[Mozilla/4.7*(X11*)*] -Parent=Netscape 4.7 -Platform=Linux - -[Mozilla/4.7*(X11; ?; SunOS*)*] -Parent=Netscape 4.7 -Platform=SunOS - -[Mozilla/4.71*(Macintosh; ?; PPC)*] -Parent=Netscape 4.7 -Version=4.71 -MinorVer=71 -Platform=MacPPC - -[Mozilla/4.71*(Win95; ?)*] -Parent=Netscape 4.7 -Version=4.71 -MinorVer=71 -Platform=Win95 - -[Mozilla/4.71*(Win98; ?)*] -Parent=Netscape 4.7 -Version=4.71 -MinorVer=71 -Platform=Win98 - -[Mozilla/4.71*(Windows NT 4.0; ?)*] -Parent=Netscape 4.7 -Version=4.71 -MinorVer=71 -Platform=WinNT -Win32=true - -[Mozilla/4.71*(Windows NT 5.0; ?)*] -Parent=Netscape 4.7 -Version=4.71 -MinorVer=71 -Platform=Win2000 -Win32=true - -[Mozilla/4.71*(Windows NT 5.1; ?)*] -Parent=Netscape 4.7 -Version=4.71 -MinorVer=71 -Platform=WinXP -Win32=true - -[Mozilla/4.71*(WinNT; ?)*] -Parent=Netscape 4.7 -Version=4.71 -MinorVer=71 -Platform=WinNT - -[Mozilla/4.71*(X11*)*] -Parent=Netscape 4.7 -Version=4.71 -MinorVer=71 -Platform=Linux - -[Mozilla/4.71*(X11; ?; SunOS*)*] -Parent=Netscape 4.7 -Version=4.71 -MinorVer=71 -Platform=SunOS - -[Mozilla/4.72*(Macintosh; ?; PPC)*] -Parent=Netscape 4.7 -MinorVer=72 -Platform=MacPPC - -[Mozilla/4.72*(Win95; ?)*] -Parent=Netscape 4.7 -MinorVer=72 -Platform=Win95 - -[Mozilla/4.72*(Win98; ?)*] -Parent=Netscape 4.7 -MinorVer=72 -Platform=Win98 - -[Mozilla/4.72*(Windows NT 4.0; ?)*] -Parent=Netscape 4.7 -MinorVer=72 -Platform=WinNT -Win32=true - -[Mozilla/4.72*(Windows NT 5.0; ?)*] -Parent=Netscape 4.7 -MinorVer=72 -Platform=Win2000 -Win32=true - -[Mozilla/4.72*(Windows NT 5.1; ?)*] -Parent=Netscape 4.7 -MinorVer=72 -Platform=WinXP -Win32=true - -[Mozilla/4.72*(WinNT; ?)*] -Parent=Netscape 4.7 -MinorVer=72 -Platform=WinNT - -[Mozilla/4.72*(X11*)*] -Parent=Netscape 4.7 -MinorVer=72 -Platform=Linux - -[Mozilla/4.72*(X11; ?; SunOS*)*] -Parent=Netscape 4.7 -MinorVer=72 -Platform=SunOS - -[Mozilla/4.73*(Macintosh; ?; PPC)*] -Parent=Netscape 4.7 -MinorVer=73 -Platform=MacPPC - -[Mozilla/4.73*(Win95; ?)*] -Parent=Netscape 4.7 -MinorVer=73 -Platform=Win95 - -[Mozilla/4.73*(Win98; ?)*] -Parent=Netscape 4.7 -MinorVer=73 -Platform=Win98 - -[Mozilla/4.73*(Windows NT 4.0; ?)*] -Parent=Netscape 4.7 -MinorVer=73 -Platform=WinNT -Win32=true - -[Mozilla/4.73*(Windows NT 5.0; ?)*] -Parent=Netscape 4.7 -MinorVer=73 -Platform=Win2000 -Win32=true - -[Mozilla/4.73*(Windows NT 5.1; ?)*] -Parent=Netscape 4.7 -MinorVer=73 -Platform=WinXP -Win32=true - -[Mozilla/4.73*(WinNT; ?)*] -Parent=Netscape 4.7 -MinorVer=73 -Platform=WinNT - -[Mozilla/4.73*(X11*)*] -Parent=Netscape 4.7 -MinorVer=73 -Platform=Linux - -[Mozilla/4.73*(X11; ?; SunOS*)*] -Parent=Netscape 4.7 -MinorVer=73 -Platform=SunOS - -[Mozilla/4.74*(Macintosh; ?; PPC)*] -Parent=Netscape 4.7 -MinorVer=74 -Platform=MacPPC - -[Mozilla/4.74*(Win95; ?)*] -Parent=Netscape 4.7 -MinorVer=74 -Platform=Win95 - -[Mozilla/4.74*(Win98; ?)*] -Parent=Netscape 4.7 -MinorVer=74 -Platform=Win98 - -[Mozilla/4.74*(Windows NT 4.0; ?)*] -Parent=Netscape 4.7 -MinorVer=74 -Platform=WinNT -Win32=true - -[Mozilla/4.74*(Windows NT 5.0; ?)*] -Parent=Netscape 4.7 -MinorVer=74 -Platform=Win2000 -Win32=true - -[Mozilla/4.74*(Windows NT 5.1; ?)*] -Parent=Netscape 4.7 -MinorVer=74 -Platform=WinXP -Win32=true - -[Mozilla/4.74*(WinNT; ?)*] -Parent=Netscape 4.7 -MinorVer=74 -Platform=WinNT - -[Mozilla/4.74*(X11*)*] -Parent=Netscape 4.7 -MinorVer=74 -Platform=Linux - -[Mozilla/4.74*(X11; ?; SunOS*)*] -Parent=Netscape 4.7 -MinorVer=74 -Platform=SunOS - -[Mozilla/4.75*(Macintosh; ?; PPC)*] -Parent=Netscape 4.7 -MinorVer=75 -Platform=MacPPC - -[Mozilla/4.75*(Win95; ?)*] -Parent=Netscape 4.7 -MinorVer=75 -Platform=Win95 - -[Mozilla/4.75*(Win98; ?)*] -Parent=Netscape 4.7 -MinorVer=75 -Platform=Win98 - -[Mozilla/4.75*(Windows NT 4.0; ?)*] -Parent=Netscape 4.7 -MinorVer=75 -Platform=WinNT -Win32=true - -[Mozilla/4.75*(Windows NT 5.0; ?)*] -Parent=Netscape 4.7 -MinorVer=75 -Platform=Win2000 -Win32=true - -[Mozilla/4.75*(Windows NT 5.1; ?)*] -Parent=Netscape 4.7 -MinorVer=75 -Platform=WinXP -Win32=true - -[Mozilla/4.75*(WinNT; ?)*] -Parent=Netscape 4.7 -MinorVer=75 -Platform=WinNT - -[Mozilla/4.75*(X11*)*] -Parent=Netscape 4.7 -MinorVer=75 -Platform=Linux - -[Mozilla/4.75*(X11; ?; SunOS*)*] -Parent=Netscape 4.7 -MinorVer=75 -Platform=SunOS - -[Mozilla/4.76*(Macintosh; ?; PPC)*] -Parent=Netscape 4.7 -MinorVer=76 -Platform=MacPPC - -[Mozilla/4.76*(Win95; ?)*] -Parent=Netscape 4.7 -MinorVer=76 -Platform=Win95 - -[Mozilla/4.76*(Win98; ?)*] -Parent=Netscape 4.7 -MinorVer=76 -Platform=Win98 - -[Mozilla/4.76*(Windows NT 4.0; ?)*] -Parent=Netscape 4.7 -MinorVer=76 -Platform=WinNT -Win32=true - -[Mozilla/4.76*(Windows NT 5.0; ?)*] -Parent=Netscape 4.7 -MinorVer=76 -Platform=Win2000 -Win32=true - -[Mozilla/4.76*(Windows NT 5.1; ?)*] -Parent=Netscape 4.7 -MinorVer=76 -Platform=WinXP -Win32=true - -[Mozilla/4.76*(WinNT; ?)*] -Parent=Netscape 4.7 -MinorVer=76 -Platform=WinNT - -[Mozilla/4.76*(X11*)*] -Parent=Netscape 4.7 -MinorVer=76 -Platform=Linux - -[Mozilla/4.76*(X11; ?; SunOS*)*] -Parent=Netscape 4.7 -MinorVer=76 -Platform=SunOS - -[Mozilla/4.77*(Macintosh; ?; PPC)*] -Parent=Netscape 4.7 -MinorVer=77 -Platform=MacPPC - -[Mozilla/4.77*(Win95; ?)*] -Parent=Netscape 4.7 -MinorVer=77 -Platform=Win95 - -[Mozilla/4.77*(Win98; ?)*] -Parent=Netscape 4.7 -MinorVer=77 -Platform=Win98 - -[Mozilla/4.77*(Windows NT 4.0; ?)*] -Parent=Netscape 4.7 -MinorVer=77 -Platform=WinNT -Win32=true - -[Mozilla/4.77*(Windows NT 5.0; ?)*] -Parent=Netscape 4.7 -MinorVer=77 -Platform=Win2000 -Win32=true - -[Mozilla/4.77*(Windows NT 5.1; ?)*] -Parent=Netscape 4.7 -MinorVer=77 -Platform=WinXP -Win32=true - -[Mozilla/4.77*(WinNT; ?)*] -Parent=Netscape 4.7 -MinorVer=77 -Platform=WinNT - -[Mozilla/4.77*(X11*)*] -Parent=Netscape 4.7 -MinorVer=77 -Platform=Linux - -[Mozilla/4.77*(X11; ?; SunOS*)*] -Parent=Netscape 4.7 -MinorVer=77 -Platform=SunOS - -[Mozilla/4.78*(Macintosh; ?; PPC)*] -Parent=Netscape 4.7 -MinorVer=78 -Platform=MacPPC - -[Mozilla/4.78*(Win95; ?)*] -Parent=Netscape 4.7 -MinorVer=78 -Platform=Win95 - -[Mozilla/4.78*(Win98; ?)*] -Parent=Netscape 4.7 -MinorVer=78 -Platform=Win98 - -[Mozilla/4.78*(Windows NT 4.0; ?)*] -Parent=Netscape 4.7 -MinorVer=78 -Platform=WinNT -Win32=true - -[Mozilla/4.78*(Windows NT 5.0; ?)*] -Parent=Netscape 4.7 -MinorVer=78 -Platform=Win2000 -Win32=true - -[Mozilla/4.78*(Windows NT 5.1; ?)*] -Parent=Netscape 4.7 -MinorVer=78 -Platform=WinXP -Win32=true - -[Mozilla/4.78*(WinNT; ?)*] -Parent=Netscape 4.7 -MinorVer=78 -Platform=WinNT - -[Mozilla/4.78*(X11*)*] -Parent=Netscape 4.7 -MinorVer=78 -Platform=Linux - -[Mozilla/4.78*(X11; ?; SunOS*)*] -Parent=Netscape 4.7 -MinorVer=78 -Platform=SunOS - -[Mozilla/4.79*(Macintosh; ?; PPC)*] -Parent=Netscape 4.7 -Version=4.79 -MinorVer=79 -Platform=MacPPC - -[Mozilla/4.79*(Win95; ?)*] -Parent=Netscape 4.7 -Version=4.79 -MinorVer=79 -Platform=Win95 - -[Mozilla/4.79*(Win98; ?)*] -Parent=Netscape 4.7 -Version=4.79 -MinorVer=79 -Platform=Win98 - -[Mozilla/4.79*(Windows NT 4.0; ?)*] -Parent=Netscape 4.7 -Version=4.79 -MinorVer=79 -Platform=WinNT -Win32=true - -[Mozilla/4.79*(Windows NT 5.0; ?)*] -Parent=Netscape 4.7 -Version=4.79 -MinorVer=79 -Platform=Win2000 -Win32=true - -[Mozilla/4.79*(Windows NT 5.1; ?)*] -Parent=Netscape 4.7 -Version=4.79 -MinorVer=79 -Platform=WinXP -Win32=true - -[Mozilla/4.79*(WinNT; ?)*] -Parent=Netscape 4.7 -Version=4.79 -MinorVer=79 -Platform=WinNT - -[Mozilla/4.79*(X11*)*] -Parent=Netscape 4.7 -Version=4.79 -MinorVer=79 -Platform=Linux - -[Mozilla/4.79*(X11; ?; SunOS*)*] -Parent=Netscape 4.7 -Version=4.79 -MinorVer=79 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.8 - -[Netscape 4.8] -Parent=DefaultProperties -Browser=Netscape -Version=4.8 -MajorVer=4 -MinorVer=8 -Frames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=1 -supportsCSS=true - -[Mozilla/4.8*(Macintosh; ?; MacPPC)*] -Parent=Netscape 4.8 -Platform=MacPPC - -[Mozilla/4.8*(Macintosh; ?; PPC Mac OS X*] -Parent=Netscape 4.8 -Platform=MacOSX - -[Mozilla/4.8*(Macintosh; ?; PPC)*] -Parent=Netscape 4.8 -Platform=MacPPC - -[Mozilla/4.8*(Win95; *)*] -Parent=Netscape 4.8 - -[Mozilla/4.8*(Win98; *)*] -Parent=Netscape 4.8 -Platform=Win98 - -[Mozilla/4.8*(Windows NT 4.0; *)*] -Parent=Netscape 4.8 -Platform=WinNT -Win32=true - -[Mozilla/4.8*(Windows NT 5.0; *)*] -Parent=Netscape 4.8 -Platform=Win2000 -Win32=true - -[Mozilla/4.8*(Windows NT 5.1; *)*] -Parent=Netscape 4.8 -Platform=WinXP -Win32=true - -[Mozilla/4.8*(WinNT; *)*] -Parent=Netscape 4.8 -Platform=WinNT - -[Mozilla/4.8*(X11; *)*] -Parent=Netscape 4.8 -Platform=Linux - -[Mozilla/4.8*(X11; *SunOS*)*] -Parent=Netscape 4.8 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.0 - -[Netscape 6.0] -Parent=DefaultProperties -Browser=Netscape -Version=6.0 -MajorVer=6 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=MacPPC - -[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=Win7 - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=Win7 - -[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.0*] -Parent=Netscape 6.0 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.1 - -[Netscape 6.1] -Parent=DefaultProperties -Browser=Netscape -Version=6.1 -MajorVer=6 -MinorVer=1 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=MacPPC - -[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=Win7 - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=Win7 - -[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.1*] -Parent=Netscape 6.1 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.2 - -[Netscape 6.2] -Parent=DefaultProperties -Browser=Netscape -Version=6.2 -MajorVer=6 -MinorVer=2 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X*) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=MacPPC - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=Win7 - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=Win7 - -[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.2*] -Parent=Netscape 6.2 -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.0 - -[Netscape 7.0] -Parent=DefaultProperties -Browser=Netscape -Version=7.0 -MajorVer=7 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=MacPPC - -[Mozilla/5.0 (Windows; ?; Win*9x 4.90; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=Win7 - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=Win7 - -[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=Linux - -[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.0*] -Parent=Netscape 7.0 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.1 - -[Netscape 7.1] -Parent=DefaultProperties -Browser=Netscape -Version=7.1 -MajorVer=7 -MinorVer=1 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.1] -Parent=Netscape 7.1 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=MacPPC - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=Win7 - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=Win7 - -[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=Linux - -[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.1*] -Parent=Netscape 7.1 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.2 - -[Netscape 7.2] -Parent=DefaultProperties -Browser=Netscape -Version=7.2 -MajorVer=7 -MinorVer=2 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=MacPPC - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=Win7 - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=Win7 - -[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=Linux - -[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.2*] -Parent=Netscape 7.2 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.0 - -[Netscape 8.0] -Parent=DefaultProperties -Browser=Netscape -Version=8.0 -MajorVer=8 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=MacPPC - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=Win7 - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=Win7 - -[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=Linux - -[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.0*] -Parent=Netscape 8.0 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.1 - -[Netscape 8.1] -Parent=DefaultProperties -Browser=Netscape -Version=8.1 -MajorVer=8 -MinorVer=1 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=MacPPC - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=WinVista -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=Win7 - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=WinVista -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=Win7 - -[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=Linux - -[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.1*] -Parent=Netscape 8.1 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.0 - -[SeaMonkey 1.0] -Parent=DefaultProperties -Browser=SeaMonkey -Version=1.0 -MajorVer=1 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] -Parent=SeaMonkey 1.0 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] -Parent=SeaMonkey 1.0 -Platform=WinME - -[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] -Parent=SeaMonkey 1.0 -Platform=Win98 - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] -Parent=SeaMonkey 1.0 -Platform=Win2000 - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] -Parent=SeaMonkey 1.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] -Parent=SeaMonkey 1.0 -Platform=Win2003 - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] -Parent=SeaMonkey 1.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] -Parent=SeaMonkey 1.0 -Platform=Win7 - -[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] -Parent=SeaMonkey 1.0 -Platform=FreeBSD - -[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.0*] -Parent=SeaMonkey 1.0 -Platform=Linux - -[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] -Parent=SeaMonkey 1.0 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.1 - -[SeaMonkey 1.1] -Parent=DefaultProperties -Browser=SeaMonkey -Version=1.1 -MajorVer=1 -MinorVer=1 -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] -Parent=SeaMonkey 1.1 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] -Parent=SeaMonkey 1.1 -Platform=WinME - -[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] -Parent=SeaMonkey 1.1 -Platform=Win98 - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] -Parent=SeaMonkey 1.1 -Platform=Win2000 - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] -Parent=SeaMonkey 1.1 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] -Parent=SeaMonkey 1.1 -Platform=Win2003 - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] -Parent=SeaMonkey 1.1 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] -Parent=SeaMonkey 1.1 -Platform=Win7 - -[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] -Parent=SeaMonkey 1.1 -Platform=FreeBSD - -[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.1*] -Parent=SeaMonkey 1.1 -Platform=Linux - -[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] -Parent=SeaMonkey 1.1 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 2.0 - -[SeaMonkey 2.0] -Parent=DefaultProperties -Browser=SeaMonkey -Version=2.0 -MajorVer=2 -Alpha=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] -Parent=SeaMonkey 2.0 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] -Parent=SeaMonkey 2.0 -Platform=WinME - -[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] -Parent=SeaMonkey 2.0 -Platform=Win98 - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] -Parent=SeaMonkey 2.0 -Platform=Win2000 - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] -Parent=SeaMonkey 2.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] -Parent=SeaMonkey 2.0 -Platform=Win2003 - -[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] -Parent=SeaMonkey 2.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] -Parent=SeaMonkey 2.0 -Platform=Win7 - -[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] -Parent=SeaMonkey 2.0 -Platform=FreeBSD - -[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.9*) Gecko/20060221 SeaMonkey/2.0*] -Parent=SeaMonkey 2.0 -Platform=Linux - -[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] -Parent=SeaMonkey 2.0 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 1.0 - -[Flock 1.0] -Parent=DefaultProperties -Browser=Flock -Version=1.0 -MajorVer=1 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] -Parent=Flock 1.0 -Platform=MacOSX - -[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] -Parent=Flock 1.0 -Platform=WinME - -[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] -Parent=Flock 1.0 -Platform=Win2000 - -[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] -Parent=Flock 1.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] -Parent=Flock 1.0 -Platform=Win2003 - -[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] -Parent=Flock 1.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] -Parent=Flock 1.0 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 2.0 - -[Flock 2.0] -Parent=DefaultProperties -Browser=Flock -Version=2.0 -MajorVer=2 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] -Parent=Flock 2.0 -Platform=MacOSX - -[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] -Parent=Flock 2.0 -Platform=WinME - -[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] -Parent=Flock 2.0 -Platform=Win2000 - -[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] -Parent=Flock 2.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] -Parent=Flock 2.0 -Platform=Win2003 - -[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] -Parent=Flock 2.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] -Parent=Flock 2.0 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sleipnir 2.0 - -[Sleipnir] -Parent=DefaultProperties -Browser=Sleipnir -Version=2.0 -MajorVer=2 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.0*) Sleipnir/2.*] -Parent=Sleipnir -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.1*) Sleipnir/2.*] -Parent=Sleipnir -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.2*) Sleipnir/2.*] -Parent=Sleipnir -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.0*) Sleipnir/2.*] -Parent=Sleipnir -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.1*) Sleipnir/2.*] -Parent=Sleipnir -Platform=Win7 - -[Sleipnir*] -Parent=Sleipnir - -[Sleipnir/2.*] -Parent=Sleipnir - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fennec 1.0 - -[Fennec 1.0] -Parent=DefaultProperties -Browser=Firefox Mobile -Version=1.0 -MajorVer=1 -Alpha=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Fennec/1.0*] -Parent=Fennec 1.0 -Platform=WinXP - -[Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Fennec/1.0*] -Parent=Fennec 1.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Fennec/1.0*] -Parent=Fennec 1.0 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firebird - -[Firebird] -Parent=DefaultProperties -Browser=Firebird -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Linux; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] -Parent=Firebird - -[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird - -[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] -Parent=Firebird - -[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird - -[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird Browser/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.?; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.*; *; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] -Parent=Firebird -Win32=true - -[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird - -[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] -Parent=Firebird - -[Mozilla/5.0 (X11; *; IRIX*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] -Parent=Firebird - -[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird - -[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] -Parent=Firebird - -[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firebird/0.*] -Parent=Firebird - -[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] -Parent=Firebird - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox - -[Firefox] -Parent=DefaultProperties -Browser=Firefox -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.3 -w3cdomversion=1.0 - -[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=MacOSX - -[Mozilla/5.0 (Macintosh; *; *Mac OS X*; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox - -[Mozilla/5.0 (OS/2; *; Warp*; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox - -[Mozilla/5.0 (Windows NT 5.?; ?; rv:1.*) Gecko/* Firefox] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; *; Win 9x 4.90; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; *; Win95; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.*; *; rv:1.*) Gecko/* Deer Park/Alpha*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firefox/10.5] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.0; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=WinVista -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.0*; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; *; WinNT4.0; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Win32=true - -[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=FreeBSD - -[Mozilla/5.0 (X11; *; FreeBSD*; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox - -[Mozilla/5.0 (X11; *; HP-UX*; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=HP-UX - -[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=IRIX64 - -[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox - -[Mozilla/5.0 (X11; *; Linux*; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox - -[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=OpenBSD - -[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/0.*] -Parent=Firefox -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.0 - -[Firefox 1.0] -Parent=DefaultProperties -Browser=Firefox -Version=1.0 -MajorVer=1 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.3 -w3cdomversion=1.0 - -[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=MacPPC - -[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=MacOSX - -[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=OS/2 - -[Mozilla/5.0 (Windows; *; Win 9x 4.90*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=WinVista -Win32=true - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=Linux - -[Mozilla/5.0 (X11; *; *Linux*; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=Linux - -[Mozilla/5.0 (X11; *; DragonFly*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 - -[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=HP-UX - -[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=IRIX64 - -[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.0*] -Parent=Firefox 1.0 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.4 - -[Firefox 1.4] -Parent=DefaultProperties -Browser=Firefox -Version=1.4 -MajorVer=1 -MinorVer=4 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.3 -w3cdomversion=1.0 - -[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=Linux - -[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=MacOSX - -[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=OS/2 - -[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; *; Win95*; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=WinVista -Win32=true - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=Linux - -[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=HP-UX - -[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=IRIX64 - -[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.4*] -Parent=Firefox 1.4 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.5 - -[Firefox 1.5] -Parent=DefaultProperties -Browser=Firefox -Version=1.5 -MajorVer=1 -MinorVer=5 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.5 -w3cdomversion=1.0 - -[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=Linux - -[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=MacOSX - -[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=OS/2 - -[Mozilla/5.0 (rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 - -[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2 x64; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=WinVista -Win32=true - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=Linux - -[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=HP-UX - -[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=IRIX64 - -[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.5*] -Parent=Firefox 1.5 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 2.0 - -[Firefox 2.0] -Parent=DefaultProperties -Browser=Firefox -Version=2.0 -MajorVer=2 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.5 -w3cdomversion=1.0 - -[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=Linux - -[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=MacOSX - -[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=OS/2 - -[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; *; Win95; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=WinVista -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=Win7 - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=Linux - -[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=HP-UX - -[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=IRIX64 - -[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.8*) Gecko/* Firefox/2.0*] -Parent=Firefox 2.0 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.0 - -[Firefox 3.0] -Parent=DefaultProperties -Browser=Firefox -Version=3.0 -MajorVer=3 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true -ecmascriptversion=1.5 -w3cdomversion=1.0 - -[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=MacOSX - -[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=Win2000 - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=WinVista -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=Win7 - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=WinXP -Win32=false -Win64=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=Win2003 -Win32=false -Win64=true - -[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=Win7 - -[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=Linux - -[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=HP-UX - -[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=IRIX64 - -[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.0*] -Parent=Firefox 3.0 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.1 - -[Firefox 3.1] -Parent=DefaultProperties -Browser=Firefox -Version=3.1 -MajorVer=3 -MinorVer=1 -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=MacOSX - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=WinVista -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=Win7 - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=WinXP -Win32=false -Win64=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=Win2003 -Win32=false -Win64=true - -[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=Win7 - -[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=Linux - -[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=HP-UX - -[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=IRIX64 - -[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.1*] -Parent=Firefox 3.1 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.5 - -[Firefox 3.5] -Parent=DefaultProperties -Browser=Firefox -Version=3.5 -MajorVer=3 -MinorVer=5 -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=3 -supportsCSS=true - -[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=MacOSX - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=WinVista -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=Win7 - -[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=WinXP -Win32=false -Win64=true - -[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=Win2003 -Win32=false -Win64=true - -[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=WinVista - -[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=Win7 - -[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=Linux - -[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=HP-UX - -[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=IRIX64 - -[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] -Parent=Firefox 3.5 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Phoenix - -[Phoenix] -Parent=DefaultProperties -Browser=Phoenix -Version=0.5 -MinorVer=5 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.4*) Gecko/* Phoenix/0.5*] -Parent=Phoenix -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; *; Win98; *; rv:1.4*) Gecko/* Phoenix/0.5*] -Parent=Phoenix -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.0*; *; rv:1.4*) Gecko/* Phoenix/0.5*] -Parent=Phoenix -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.4*) Gecko/* Phoenix/0.5*] -Parent=Phoenix -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; *; Windows NT 5.2*; *; rv:1.4*) Gecko/* Phoenix/0.5*] -Parent=Phoenix -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (X11; *; Linux*; *; rv:1.4*) Gecko/* Phoenix/0.5*] -Parent=Phoenix -Platform=Linux - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iceweasel - -[Iceweasel] -Parent=DefaultProperties -Browser=Iceweasel -Platform=Linux -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (X11; U; Linux*; *; rv:1.8*) Gecko/* Iceweasel/2.0* (Debian-*)] -Parent=Iceweasel -Version=2.0 -MajorVer=2 -MinorVer=0 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.0 - -[Mozilla 1.0] -Parent=DefaultProperties -Browser=Mozilla -Version=1.0 -MajorVer=1 -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (*rv:1.0.*) Gecko/*] -Parent=Mozilla 1.0 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.1 - -[Mozilla 1.1] -Parent=DefaultProperties -Browser=Mozilla -Version=1.1 -MajorVer=1 -MinorVer=1 -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (*rv:1.1.*) Gecko/*] -Parent=Mozilla 1.1 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.2 - -[Mozilla 1.2] -Parent=DefaultProperties -Browser=Mozilla -Version=1.2 -MajorVer=1 -MinorVer=2 -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (*rv:1.2.*) Gecko/*] -Parent=Mozilla 1.2 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.3 - -[Mozilla 1.3] -Parent=DefaultProperties -Browser=Mozilla -Version=1.3 -MajorVer=1 -MinorVer=3 -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (*rv:1.3.*) Gecko/*] -Parent=Mozilla 1.3 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.4 - -[Mozilla 1.4] -Parent=DefaultProperties -Browser=Mozilla -Version=1.4 -MajorVer=1 -MinorVer=4 -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (*rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=Win31 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=Win31 -Win16=true -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *Linux*; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=Linux - -[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *SunOS*; *rv:1.4*) Gecko/*] -Parent=Mozilla 1.4 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.5 - -[Mozilla 1.5] -Parent=DefaultProperties -Browser=Mozilla -Version=1.5 -MajorVer=1 -MinorVer=5 -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (*rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=Win31 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=Win31 -Win16=true -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *Linux*; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=Linux - -[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *SunOS*; *rv:1.5*) Gecko/*] -Parent=Mozilla 1.5 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.6 - -[Mozilla 1.6] -Parent=DefaultProperties -Browser=Mozilla -Version=1.6 -MajorVer=1 -MinorVer=6 -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (*rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=Win31 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=Win31 -Win16=true -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *Linux*; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=Linux - -[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *SunOS*; *rv:1.6*) Gecko/*] -Parent=Mozilla 1.6 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.7 - -[Mozilla 1.7] -Parent=DefaultProperties -Browser=Mozilla -Version=1.7 -MajorVer=1 -MinorVer=7 -Beta=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.5 -w3cdomversion=1.0 - -[Mozilla/5.0 (*rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=Win31 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=Win31 -Win16=true -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *Linux*; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=Linux - -[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *SunOS*; *rv:1.7*) Gecko/*] -Parent=Mozilla 1.7 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.8 - -[Mozilla 1.8] -Parent=DefaultProperties -Browser=Mozilla -Version=1.8 -MajorVer=1 -MinorVer=8 -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.5 -w3cdomversion=1.0 - -[Mozilla/5.0 (*rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=Win31 -Win16=true -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *Linux*; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=Linux - -[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *SunOS*; *rv:1.8*) Gecko/*] -Parent=Mozilla 1.8 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.9 - -[Mozilla 1.9] -Parent=DefaultProperties -Browser=Mozilla -Version=1.9 -MajorVer=1 -MinorVer=9 -Alpha=true -Frames=true -IFrames=true -Tables=true -Cookies=true -JavaApplets=true -JavaScript=true -CssVersion=2 -supportsCSS=true - -[Mozilla/5.0 (*rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 - -[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=MacOSX - -[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=WinME -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=Win31 -Win16=true -Win32=true - -[Mozilla/5.0 (Windows; ?; Win95; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=Win95 -Win32=true - -[Mozilla/5.0 (Windows; ?; Win98; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=Win98 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=Win2000 -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=WinXP -Win32=true - -[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=Win2003 -Win32=true - -[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=WinNT -Win32=true - -[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=FreeBSD - -[Mozilla/5.0 (X11; *Linux*; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=Linux - -[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=OpenBSD - -[Mozilla/5.0 (X11; *SunOS*; *rv:1.9*) Gecko/*] -Parent=Mozilla 1.9 -Platform=SunOS - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE Mac - -[IE Mac] -Parent=DefaultProperties -Browser=IE -Platform=MacPPC -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -JavaApplets=true -JavaScript=true -CssVersion=1 -supportsCSS=true - -[Mozilla/?.? (compatible; MSIE 4.0*; *Mac_PowerPC*] -Parent=IE Mac -Version=4.0 -MajorVer=4 -MinorVer=0 - -[Mozilla/?.? (compatible; MSIE 4.5*; *Mac_PowerPC*] -Parent=IE Mac -Version=4.5 -MajorVer=4 -MinorVer=5 - -[Mozilla/?.? (compatible; MSIE 5.0*; *Mac_PowerPC*] -Parent=IE Mac -Version=5.0 -MajorVer=5 -MinorVer=0 - -[Mozilla/?.? (compatible; MSIE 5.1*; *Mac_PowerPC*] -Parent=IE Mac -Version=5.1 -MajorVer=5 -MinorVer=1 - -[Mozilla/?.? (compatible; MSIE 5.2*; *Mac_PowerPC*] -Parent=IE Mac -Version=5.2 -MajorVer=5 -MinorVer=2 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 5.5 - -[AOL 9.0/IE 5.5] -Parent=DefaultProperties -Browser=AOL -Version=5.5 -MajorVer=5 -MinorVer=5 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=2 -supportsCSS=true -AOL=true -aolVersion=9.0 -ecmascriptversion=1.3 -w3cdomversion=1.0 - -[Mozilla/?.* (?compatible; *MSIE 5.5; *AOL 9.0*)*] -Parent=AOL 9.0/IE 5.5 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Win 9x 4.90*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 95*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win95 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win98 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -CssVersion=2 -supportsCSS=true - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 4.0*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinNT - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 5.5 -Platform=WinVista - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 6.0 - -[AOL 9.0/IE 6.0] -Parent=DefaultProperties -Browser=AOL -Version=6.0 -MajorVer=6 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=2 -supportsCSS=true -AOL=true -aolVersion=9.0 -ecmascriptversion=1.3 -w3cdomversion=1.0 - -[Mozilla/?.* (?compatible; *MSIE 6.0; *AOL 9.0*)*] -Parent=AOL 9.0/IE 6.0 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Win 9x 4.90*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 95*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win95 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win98 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -CssVersion=2 -supportsCSS=true - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 4.0*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinNT - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 6.0 -Platform=WinVista - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 7.0 - -[AOL 9.0/IE 7.0] -Parent=DefaultProperties -Browser=AOL -Version=7.0 -MajorVer=7 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=2 -supportsCSS=true -AOL=true -aolVersion=9.0 - -[Mozilla/?.* (?compatible; *MSIE 7.0; *AOL 9.0*)*] -Parent=AOL 9.0/IE 7.0 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Win 9x 4.90*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 95*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win95 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win98 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -CssVersion=2 -supportsCSS=true - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 4.0*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinNT - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] -Parent=AOL 9.0/IE 7.0 -Platform=WinVista - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Avant Browser - -[Avant Browser] -Parent=DefaultProperties -Browser=Avant Browser -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=2 -supportsCSS=true - -[Advanced Browser (http://www.avantbrowser.com)] -Parent=Avant Browser - -[Avant Browser*] -Parent=Avant Browser - -[Avant Browser/*] -Parent=Avant Browser - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 4.01 - -[IE 4.01] -Parent=DefaultProperties -Browser=IE -Version=4.01 -MajorVer=4 -MinorVer=01 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=2 -supportsCSS=true - -[Mozilla/?.* (?compatible; *MSIE 4.01*)*] -Parent=IE 4.01 - -[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 95*)*] -Parent=IE 4.01 -Platform=Win95 - -[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98*)*] -Parent=IE 4.01 -Platform=Win98 - -[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98; Win 9x 4.90;*)*] -Parent=IE 4.01 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 4.0*)*] -Parent=IE 4.01 -Platform=WinNT - -[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.0*)*] -Parent=IE 4.01 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.01*)*] -Parent=IE 4.01 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)] -Parent=IE 4.01 -Platform=WinNT - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.0 - -[IE 5.0] -Parent=DefaultProperties -Browser=IE -Version=5.0 -MajorVer=5 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=2 -supportsCSS=true - -[Mozilla/?.* (?compatible; *MSIE 5.0*)*] -Parent=IE 5.0 - -[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 95*)*] -Parent=IE 5.0 -Platform=Win95 - -[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98*)*] -Parent=IE 5.0 -Platform=Win98 - -[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*)*] -Parent=IE 5.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 4.0*)*] -Parent=IE 5.0 -Platform=WinNT - -[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.0*)*] -Parent=IE 5.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.01*)*] -Parent=IE 5.0 -Platform=Win2000 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.01 - -[IE 5.01] -Parent=DefaultProperties -Browser=IE -Version=5.01 -MajorVer=5 -MinorVer=01 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=2 -supportsCSS=true - -[Mozilla/?.* (?compatible; *MSIE 5.01*)*] -Parent=IE 5.01 - -[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 95*)*] -Parent=IE 5.01 -Platform=Win95 - -[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98*)*] -Parent=IE 5.01 -Platform=Win98 - -[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98; Win 9x 4.90;*)*] -Parent=IE 5.01 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 4.0*)*] -Parent=IE 5.01 -Platform=WinNT - -[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.0*)*] -Parent=IE 5.01 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.01*)*] -Parent=IE 5.01 -Platform=Win2000 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.5 - -[IE 5.5] -Parent=DefaultProperties -Browser=IE -Version=5.5 -MajorVer=5 -MinorVer=5 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.2 -w3cdomversion=1.0 - -[Mozilla/?.* (?compatible; *MSIE 5.5*)*] -Parent=IE 5.5 - -[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 95*)*] -Parent=IE 5.5 -Platform=Win95 - -[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98*)*] -Parent=IE 5.5 -Platform=Win98 - -[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90*)*] -Parent=IE 5.5 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0*)*] -Parent=IE 5.5 -Platform=WinNT - -[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0*)*] -Parent=IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01*)*] -Parent=IE 5.5 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1*)*] -Parent=IE 5.5 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2*)*] -Parent=IE 5.5 -Platform=Win2003 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 6.0 - -[IE 6.0] -Parent=DefaultProperties -Browser=IE -Version=6.0 -MajorVer=6 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.2 -w3cdomversion=1.0 -msdomversion=6.0 - -[Mozilla/?.* (?compatible; *MSIE 6.0*)*] -Parent=IE 6.0 - -[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 95*)*] -Parent=IE 6.0 -Platform=Win95 - -[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98*)*] -Parent=IE 6.0 -Platform=Win98 - -[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90*)*] -Parent=IE 6.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0*)*] -Parent=IE 6.0 -Platform=WinNT - -[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0*)*] -Parent=IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01*)*] -Parent=IE 6.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1*)*] -Parent=IE 6.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2*)*] -Parent=IE 6.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*)*] -Parent=IE 6.0 -Platform=WinXP -Win32=false -Win64=true - -[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*)*] -Parent=IE 6.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0*)*] -Parent=IE 6.0 -Platform=WinVista - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 7.0 - -[IE 7.0] -Parent=DefaultProperties -Browser=IE -Version=7.0 -MajorVer=7 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=2 -supportsCSS=true -ecmascriptversion=1.2 -msdomversion=7.0 -w3cdomversion=1.0 - -[Mozilla/?.* (?compatible; *MSIE 7.0*)*] -Parent=IE 7.0 - -[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98*)*] -Parent=IE 7.0 -Platform=Win98 - -[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*)*] -Parent=IE 7.0 -Platform=WinME - -[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0*)*] -Parent=IE 7.0 -Platform=WinNT - -[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0*)*] -Parent=IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01*)*] -Parent=IE 7.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1*)*] -Parent=IE 7.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2*)*] -Parent=IE 7.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*)*] -Parent=IE 7.0 -Platform=WinXP -Win32=false -Win64=true - -[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*)*] -Parent=IE 7.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0*)*] -Parent=IE 7.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.1*)*] -Parent=IE 7.0 -Platform=Win7 - -[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; *)*] -Parent=IE 7.0 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 8.0 - -[IE 8.0] -Parent=DefaultProperties -Browser=IE -Version=8.0 -MajorVer=8 -Win32=true -Frames=true -IFrames=true -Tables=true -Cookies=true -BackgroundSounds=true -CDF=true -VBScript=true -JavaApplets=true -JavaScript=true -ActiveXControls=true -CssVersion=3 -supportsCSS=true -ecmascriptversion=1.2 -msdomversion=8.0 -w3cdomversion=1.0 - -[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0*)*] -Parent=IE 8.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 8.0; Win32*)*] -Parent=IE 8.0 -Platform=Win32 - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0*)*] -Parent=IE 8.0 -Platform=Win2000 - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1*)*] -Parent=IE 8.0 -Platform=WinXP - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2*)*] -Parent=IE 8.0 -Platform=Win2003 - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0*)*] -Parent=IE 8.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0*)*] -Parent=IE 8.0 -Platform=WinVista - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0*)*] -Parent=IE 8.0 -Platform=WinVista -Win32=false -Win64=true - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0*)*] -Parent=IE 8.0 -Platform=WinVista -Win64=false - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1*)*] -Parent=IE 8.0 -Platform=Win7 - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0*)*] -Parent=IE 8.0 -Platform=Win7 - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0*)*] -Parent=IE 8.0 -Platform=Win7 -Win32=false -Win64=true - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0*)*] -Parent=IE 8.0 -Platform=Win7 -Win64=false - -[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 7.0; Trident/4.0*)*] -Parent=IE 8.0 -Platform=Win7 - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Default Browser - -[*] -Browser=Default Browser -Version=0 -MajorVer=0 -MinorVer=0 -Platform=unknown -Alpha=false -Beta=false -Win16=false -Win32=false -Win64=false -Frames=true -IFrames=false -Tables=true -Cookies=false -BackgroundSounds=false -CDF=false -VBScript=false -JavaApplets=false -JavaScript=false -ActiveXControls=false -Stripper=false -isBanned=false -isMobileDevice=false -isSyndicationReader=false -Crawler=false -CssVersion=0 -supportsCSS=false -AOL=false -aolVersion=0 -AuthenticodeUpdate=0 -CSS=0 -WAP=false -netCLR=false -ClrVersion=0 -ECMAScriptVersion=0.0 -W3CDOMVersion=0.0 diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/config" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/config" deleted file mode 100644 index e005c5b..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/config" +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/mconfig/config.xml" "b/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/mconfig/config.xml" deleted file mode 100644 index a3df3b5..0000000 --- "a/\354\203\210 \355\217\264\353\215\224/MonoBleedingEdge/etc/mono/mconfig/config.xml" +++ /dev/null @@ -1,616 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
-
-
-
- - - - -]]> - - - - - - -
-
-
- - - - - -
- -
-
-
-
- - - -]]> - - - - - -
-
-
-
-
-
-
- - - - - -]]> - - - - - -
-
-
-
-
-
-
- - - - - - - - -]]> - - - - - -
-
-
-
-
- - - - - - - -]]> - - - - - -
-
-
-
-
- - - - -]]> - - - - - -
-
-
-
-
- - - - - - - - - - - - -]]> - - - - - -
-
-
- - - - - - - - - - - - - -]]> - - - - - -
-
-
- - - - - - - - - - - - - - - - - -]]> - - - - - - - -
-
-
- - - - - -
- -
-
-
- - - - ]]> - - - - - -
-
-
-
-
-
-
- - - - -]]> - - - - - -
-
-
-
-
-
-
- - - - -]]> - - - - - -
-
-
-
-
- - - - - - - -]]> - - - - - -
-
-
-
-
- - - - -]]> - - - - - -
-
-
- - - - - - - - - - - - - - - -]]> - - - - - -
-
-
- - - - - - - - - - - - - -]]> - - - - - - -
-
-
-
-
-
-
- - - - -]]> - - - - - -
-
-
-
-
-
-
- - - - - - - - - - - -]]> - - - - - -
-
-
-
-
- - - - -]]> - - - - - - - - ]]> - - - - - - ]]> - - - - - - ]]> - - - - - -]]> - - - - - -]]> - - - - - -]]> - - - - - -]]> - - - - - -]]> - - - - - -]]> - - - - - -]]> - - - - - -]]> - - - - -]]> - - - - - -]]> - - - - - -]]> - - - - - -]]> - - - - -
-
-
-
-
-
- - diff --git "a/\354\203\210 \355\217\264\353\215\224/UnityCrashHandler64.exe" "b/\354\203\210 \355\217\264\353\215\224/UnityCrashHandler64.exe" deleted file mode 100644 index c0bb48b..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/UnityCrashHandler64.exe" and /dev/null differ diff --git "a/\354\203\210 \355\217\264\353\215\224/UnityPlayer.dll" "b/\354\203\210 \355\217\264\353\215\224/UnityPlayer.dll" deleted file mode 100644 index 4cc8882..0000000 Binary files "a/\354\203\210 \355\217\264\353\215\224/UnityPlayer.dll" and /dev/null differ