diff --git a/.gitignore b/.gitignore index e69de29..e7dd979 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,242 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +[Xx]64/ +[Xx]86/ +[Bb]uild/ +bld/ +[Bb]in/ +[Oo]bj/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml + +# TODO: Un-comment the next line if you do not want to checkin +# your web deploy settings because they may include unencrypted +# passwords +#*.pubxml +*.publishproj + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directory +AppPackages/ +BundleArtifacts/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# LightSwitch generated files +GeneratedArtifacts/ +ModelManifest.xml + +# Paket dependency manager +.paket/paket.exe + +# FAKE - F# Make +.fake/ diff --git a/AssemblyInfo.cs b/AssemblyInfo.cs new file mode 100644 index 0000000..f8fc83b --- /dev/null +++ b/AssemblyInfo.cs @@ -0,0 +1,41 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Resources; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Speedy Blupi")] +[assembly: AssemblyProduct("Speedy Blupi")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyCompany("Dada Games")] +[assembly: AssemblyCopyright("Copyright © 2013")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] +[assembly: NeutralResourcesLanguage("en-US")] + +// Configuration +[assembly: AssemblyConfiguration("")] +[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] +[assembly: CompilationRelaxations(8)] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("4b6c546f-6967-447a-8eda-c3236043dcf7")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Revision and Build Numbers +// by using the '*' as shown below: +[assembly: AssemblyVersion("1.0.0.5")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Decor.cs b/Decor.cs new file mode 100644 index 0000000..c93665b --- /dev/null +++ b/Decor.cs @@ -0,0 +1,10597 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Decor +using System; +using System.Collections.Generic; +using Microsoft.Xna.Framework.Media; +using WindowsPhoneSpeedyBlupi; +using static System.Net.Mime.MediaTypeNames; + + +namespace WindowsPhoneSpeedyBlupi +{ + public class Decor + { + private struct Cellule + { + public int icon; + } + + private struct MoveObject + { + public int type; + + public int stepAdvance; + + public int stepRecede; + + public int timeStopStart; + + public int timeStopEnd; + + public TinyPoint posStart; + + public TinyPoint posEnd; + + public TinyPoint posCurrent; + + public int step; + + public int time; + + public int phase; + + public int channel; + + public int icon; + } + + private class ByeByeObject + { + public int channel; + + public int icon; + + public double posX; + + public double posY; + + public double rotation; + + public double phase; + + public double animationSpeed; + + public double rotationSpeed; + + public double speedX; + } + + private static readonly int MAXMOVEOBJECT = 200; + + private static readonly int MAXQUART = 441; + + private static readonly int SCROLL_SPEED = 8; + + private static readonly int SCROLL_MARGX = 80; + + private static readonly int SCROLL_MARGY = 40; + + private static readonly int BLUPIFLOOR = 2; + + private static readonly int BLUPIOFFY = 4 + BLUPIFLOOR; + + private static readonly int BLUPISURF = 12; + + private static readonly int BLUPISUSPEND = 12; + + private static readonly int OVERHEIGHT = 80; + + private Sound m_sound; + + private Pixmap m_pixmap; + + private GameData m_gameData; + + private Cellule[,] m_decor = new Cellule[100, 100]; + + private Cellule[,] m_bigDecor = new Cellule[100, 100]; + + private int[] m_balleTraj = new int[1300]; + + private int[] m_moveTraj = new int[1300]; + + private MoveObject[] m_moveObject = new MoveObject[MAXMOVEOBJECT]; + + private int m_keyPress; + + private int m_lastKeyPress; + + private TinyPoint m_posDecor; + + private TinyPoint m_dimDecor; + + private int m_term; + + private int m_music; + + private int m_region; + + private int m_time; + + private bool m_bPause; + + private TinyRect m_drawBounds; + + private int m_nbRankCaisse; + + private int[] m_rankCaisse = new int[MAXMOVEOBJECT]; + + private int m_nbLinkCaisse; + + private int[] m_linkCaisse = new int[MAXMOVEOBJECT]; + + private TinyPoint m_blupiPos; + + private TinyPoint m_blupiLastPos; + + private TinyPoint m_blupiValidPos; + + private int m_blupiAction; + + private int m_blupiDir; + + private int m_blupiPhase; + + private double m_blupiVitesseX; + + private double m_blupiVitesseY; + + private int m_blupiIcon; + + private int m_blupiSec; + + private int m_blupiChannel; + + private TinyPoint m_blupiVector; + + private int m_blupiTransport; + + private bool m_blupiFocus; + + private bool m_blupiAir; + + private bool m_blupiHelico; + + private bool m_blupiOver; + + private bool m_blupiJeep; + + private bool m_blupiTank; + + private bool m_blupiSkate; + + private bool m_blupiNage; + + private bool m_blupiSurf; + + private bool m_blupiVent; + + private bool m_blupiSuspend; + + private bool m_blupiJumpAie; + + private bool m_blupiShield; + + private bool m_blupiPower; + + private bool m_blupiCloud; + + private bool m_blupiHide; + + private bool m_blupiInvert; + + private bool m_blupiBalloon; + + private bool m_blupiEcrase; + + private bool m_blupiMotorHigh; + + private int m_blupiMotorSound; + + private TinyPoint m_blupiPosHelico; + + private TinyPoint m_blupiPosMagic; + + private bool m_blupiRestart; + + private bool m_blupiFront; + + private int m_blupiBullet; + + private int m_blupiCle; + + private int m_blupiPerso; + + private int m_blupiDynamite; + + private int m_blupiNoBarre; + + private int m_blupiTimeShield; + + private int m_blupiTimeFire; + + private int m_blupiTimeNoAsc; + + private int m_blupiTimeMockery; + + private int m_blupiTimeOuf; + + private int m_blupiActionOuf; + + private int m_blupiFifoNb; + + private TinyPoint[] m_blupiFifoPos = new TinyPoint[10]; + + private TinyPoint m_blupiStartPos; + + private int m_blupiStartDir; + + private double m_blupiSpeedX; + + private double m_blupiSpeedY; + + private double m_blupiLastSpeedX; + + private double m_blupiLastSpeedY; + + private Jauge[] m_jauges = new Jauge[2]; + + private int m_blupiLevel; + + private bool m_bFoundCle; + + private bool m_bPrivate; + + private bool m_bCheatDoors; + + private bool m_bSuperBlupi; + + private bool m_bDrawSecret; + + private bool m_buildOfficialMissions; + + private int m_mission; + + private int[] m_doors = new int[200]; + + private int m_nbVies; + + private int m_nbTresor; + + private int m_totalTresor; + + private int m_goalPhase; + + private int m_detectIcon; + + private TinyPoint m_sucettePos; + + private int m_sucetteType; + + private int m_blupiLogicRotation; + + private int m_blupiRealRotation; + + private int m_blupiOffsetY; + + private TinyPoint m_scrollPoint; + + private TinyPoint m_scrollAdd; + + private int m_voyageIcon; + + private int m_voyageChannel; + + private int m_voyagePhase; + + private int m_voyageTotal; + + private TinyPoint m_voyageStart; + + private TinyPoint m_voyageEnd; + + private int m_decorAction; + + private int m_decorPhase; + + private int[] m_lastDecorIcon = new int[200]; + + private double m_hotSpotFinalZoom; + + private double m_hotSpotFinalX; + + private double m_hotSpotFinalY; + + private double m_hotSpotCurrentZoom; + + private double m_hotSpotCurrentX; + + private double m_hotSpotCurrentY; + + private double m_hotSpotStepZoom; + + private double m_hotSpotStepX; + + private double m_hotSpotStepY; + + private double m_hotSpotOutLag; + + private Random m_random; + + private List byeByeObjects; + + public TinyRect DrawBounds + { + get + { + return m_drawBounds; + } + set + { + m_drawBounds = value; + } + } + + public Def.ButtonGlygh ButtonPressed { get; set; } + + private static void MoveObjectCopy(ref MoveObject dst, MoveObject src) + { + dst.type = src.type; + dst.stepAdvance = src.stepAdvance; + dst.stepRecede = src.stepRecede; + dst.timeStopStart = src.timeStopStart; + dst.timeStopEnd = src.timeStopEnd; + dst.posStart = src.posStart; + dst.posEnd = src.posEnd; + dst.posCurrent = src.posCurrent; + dst.step = src.step; + dst.time = src.time; + dst.phase = src.phase; + dst.channel = src.channel; + dst.icon = src.icon; + } + + public Decor() + { + for (int i = 0; i < 200; i++) + { + m_lastDecorIcon[i] = 0; + } + m_drawBounds.Left = 0; + m_drawBounds.Right = 640; + m_drawBounds.Top = 0; + m_drawBounds.Bottom = 480; + m_time = 0; + m_bCheatDoors = false; + m_bSuperBlupi = false; + m_bDrawSecret = false; + m_buildOfficialMissions = false; + m_hotSpotFinalZoom = 1.0; + m_hotSpotFinalX = 320.0; + m_hotSpotFinalY = 240.0; + m_hotSpotCurrentZoom = 1.0; + m_hotSpotCurrentX = 320.0; + m_hotSpotCurrentY = 240.0; + m_random = new Random(); + byeByeObjects = new List(); + } + + public void Create(Sound sound, Pixmap pixmap, GameData gameData) + { + m_sound = sound; + m_pixmap = pixmap; + m_gameData = gameData; + m_keyPress = 0; + m_lastKeyPress = 0; + m_blupiMotorSound = 0; + InitDecor(); + TinyPoint pos = default(TinyPoint); + pos.X = 90; + pos.Y = 450; + m_jauges[0] = new Jauge(); + m_jauges[0].Create(m_pixmap, m_sound, pos, 1, false); + m_jauges[0].SetHide(true); + pos.X = 90; + pos.Y = 428; + m_jauges[1] = new Jauge(); + m_jauges[1].Create(m_pixmap, m_sound, pos, 3, false); + m_jauges[1].SetHide(true); + } + + public bool LoadImages() + { + string name = string.Format("decor{0}", m_region.ToString("d3")); + m_pixmap.BackgroundCache(name); + return true; + } + + private void InitDecor() + { + m_posDecor.X = 0; + m_posDecor.Y = 0; + m_dimDecor.X = 100; + m_dimDecor.Y = 100; + m_music = 1; + m_region = 2; + m_decorAction = 0; + for (int i = 0; i < 100; i++) + { + for (int j = 0; j < 100; j++) + { + m_decor[i, j].icon = -1; + m_bigDecor[i, j].icon = -1; + } + } + m_decor[1, 4].icon = 40; + m_decor[2, 4].icon = 38; + m_decor[3, 4].icon = 38; + m_decor[4, 4].icon = 38; + m_decor[5, 4].icon = 38; + m_decor[6, 4].icon = 38; + m_decor[7, 4].icon = 39; + for (int k = 0; k < MAXMOVEOBJECT; k++) + { + m_moveObject[k].type = 0; + } + FlushBalleTraj(); + FlushMoveTraj(); + m_moveObject[0].type = 5; + m_moveObject[0].stepAdvance = 1; + m_moveObject[0].stepRecede = 1; + m_moveObject[0].timeStopStart = 0; + m_moveObject[0].timeStopEnd = 0; + m_moveObject[0].posStart.X = 258; + m_moveObject[0].posStart.Y = 196; + m_moveObject[0].posEnd = m_moveObject[0].posStart; + m_moveObject[0].posCurrent = m_moveObject[0].posStart; + m_moveObject[0].phase = 0; + m_moveObject[0].step = 1; + m_moveObject[0].time = 0; + m_moveObject[0].channel = 10; + m_moveObject[0].icon = 0; + m_moveObject[1].type = 7; + m_moveObject[1].stepAdvance = 1; + m_moveObject[1].stepRecede = 1; + m_moveObject[1].timeStopStart = 0; + m_moveObject[1].timeStopEnd = 0; + m_moveObject[1].posStart.X = 450; + m_moveObject[1].posStart.Y = 196; + m_moveObject[1].posEnd = m_moveObject[1].posStart; + m_moveObject[1].posCurrent = m_moveObject[1].posStart; + m_moveObject[1].phase = 0; + m_moveObject[1].step = 1; + m_moveObject[1].time = 0; + m_moveObject[1].channel = 10; + m_moveObject[1].icon = 29; + m_blupiStartPos.X = 66; + m_blupiStartPos.Y = 192 + BLUPIOFFY; + m_blupiStartDir = 2; + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiIcon = 0; + m_blupiChannel = 2; + m_blupiFocus = true; + m_blupiAir = false; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiSuspend = false; + m_blupiJumpAie = false; + m_blupiShield = false; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiInvert = false; + m_blupiBalloon = false; + m_blupiEcrase = false; + m_blupiMotorHigh = false; + m_blupiPosHelico.X = -1; + m_blupiActionOuf = 0; + m_blupiTimeNoAsc = 0; + m_blupiTimeMockery = 0; + m_blupiVitesseX = 0.0; + m_blupiVitesseY = 0.0; + m_blupiValidPos = m_blupiStartPos; + m_blupiFront = false; + m_blupiBullet = 0; + m_blupiCle = 0; + m_blupiPerso = 0; + m_blupiDynamite = 0; + m_nbTresor = 0; + m_totalTresor = 1; + m_goalPhase = 0; + m_scrollPoint = m_blupiStartPos; + m_scrollAdd.X = 0; + m_scrollAdd.Y = 0; + m_term = 0; + byeByeObjects.Clear(); + } + + public void PlayPrepare(bool bTest) + { + if (bTest) + { + m_nbVies = 3; + } + m_blupiPos = m_blupiStartPos; + m_blupiDir = m_blupiStartDir; + if (m_blupiDir == 1) + { + m_blupiIcon = 4; + } + else + { + m_blupiIcon = 0; + } + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + m_blupiAir = false; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiSuspend = false; + m_blupiJumpAie = false; + m_blupiShield = false; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiInvert = false; + m_blupiBalloon = false; + m_blupiEcrase = false; + m_blupiMotorHigh = false; + m_blupiActionOuf = 0; + m_blupiTimeNoAsc = 0; + m_blupiTimeMockery = 0; + m_blupiValidPos = m_blupiPos; + m_blupiBullet = 0; + m_blupiCle = 0; + m_blupiPerso = 0; + m_blupiDynamite = 0; + m_nbTresor = 0; + m_totalTresor = 0; + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 5) + { + m_totalTresor++; + } + m_moveObject[i].posCurrent = m_moveObject[i].posStart; + m_moveObject[i].step = 1; + m_moveObject[i].phase = 0; + m_moveObject[i].time = 0; + if (m_moveObject[i].type == 5 || m_moveObject[i].type == 6 || m_moveObject[i].type == 25 || m_moveObject[i].type == 26 || m_moveObject[i].type == 40 || m_moveObject[i].type == 2 || m_moveObject[i].type == 3 || m_moveObject[i].type == 96 || m_moveObject[i].type == 97) + { + m_moveObject[i].phase = m_random.Next(23); + } + if (m_moveObject[i].type == 23) + { + m_moveObject[i].type = 0; + } + } + m_goalPhase = 0; + MoveObjectSort(); + m_scrollPoint = m_blupiPos; + m_scrollAdd.X = 0; + m_scrollAdd.Y = 0; + m_blupiPosHelico.X = -1; + m_blupiMotorSound = 0; + m_blupiFront = false; + m_blupiNoBarre = 0; + m_blupiValidPos = m_blupiPos; + m_blupiFifoNb = 0; + m_blupiTimeFire = 0; + m_voyageIcon = -1; + m_jauges[0].SetHide(true); + m_jauges[1].SetHide(true); + m_bFoundCle = false; + m_term = 0; + m_time = 0; + m_bPause = false; + MoveStep(); + m_scrollPoint.X = m_blupiPos.X + 30 + m_scrollAdd.X; + m_scrollPoint.Y = m_blupiPos.Y + 30 + m_scrollAdd.Y; + } + + private void BuildPrepare() + { + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + m_moveObject[i].posCurrent = m_moveObject[i].posStart; + m_moveObject[i].step = 1; + m_moveObject[i].time = 0; + m_moveObject[i].phase = 0; + if (m_moveObject[i].type == 23) + { + m_moveObject[i].type = 0; + } + } + m_voyageIcon = -1; + m_time = 0; + m_bPause = false; + } + + public int IsTerminated() + { + return m_term; + } + + public void MoveStep() + { + try + { + MoveObjectStep(); + ByeByeStep(); + BlupiStep(); + MoveHotSpot(); + AdaptMotorVehicleSound(); + } + catch + { + } + } + + private void ResetHotSpot() + { + m_pixmap.SetHotSpot(1.0, DrawBounds.Width / 2, DrawBounds.Height / 2); + } + + private void MoveHotSpot() + { + bool flag = false; + if (m_blupiSpeedX != 0.0) + { + flag = true; + } + if (!m_blupiFocus) + { + flag = false; + } + if (m_blupiHelico || m_blupiPower) + { + flag = false; + } + if (!m_gameData.AutoZoom) + { + flag = false; + } + if (flag) + { + m_hotSpotOutLag = 30.0; + } + else if (m_hotSpotOutLag > 0.0) + { + if (!m_blupiFocus || m_blupiSpeedY != 0.0) + { + m_hotSpotOutLag = 0.0; + } + else + { + m_hotSpotOutLag -= 1.0; + } + if (m_hotSpotOutLag > 0.0) + { + flag = true; + } + } + if (flag) + { + m_hotSpotFinalZoom = 1.3; + m_hotSpotFinalX = m_blupiPos.X + 30 - m_posDecor.X; + m_hotSpotFinalY = m_blupiPos.Y + 30 - m_posDecor.Y; + } + else + { + m_hotSpotFinalZoom = 1.0; + m_hotSpotFinalX = DrawBounds.Width / 2; + m_hotSpotFinalY = DrawBounds.Height / 2; + } + m_hotSpotStepZoom = 1.0 / 30.0; + m_hotSpotStepX = 10.0; + m_hotSpotStepY = 10.0; + if (m_hotSpotCurrentZoom < m_hotSpotFinalZoom) + { + m_hotSpotCurrentZoom = Math.Min(m_hotSpotCurrentZoom + m_hotSpotStepZoom, m_hotSpotFinalZoom); + } + if (m_hotSpotCurrentZoom > m_hotSpotFinalZoom) + { + m_hotSpotCurrentZoom = Math.Max(m_hotSpotCurrentZoom - m_hotSpotStepZoom, m_hotSpotFinalZoom); + } + if (m_hotSpotCurrentX < m_hotSpotFinalX) + { + m_hotSpotCurrentX = Math.Min(m_hotSpotCurrentX + m_hotSpotStepX, m_hotSpotFinalX); + } + if (m_hotSpotCurrentX > m_hotSpotFinalX) + { + m_hotSpotCurrentX = Math.Max(m_hotSpotCurrentX - m_hotSpotStepX, m_hotSpotFinalX); + } + m_pixmap.SetHotSpot(m_hotSpotCurrentZoom, m_hotSpotCurrentX, m_hotSpotCurrentY); + } + + private bool BlitzActif(int celx, int cely) + { + TinyPoint pos = default(TinyPoint); + pos.X = celx * 64; + pos.Y = cely * 64; + int num = m_time % 100; + if (m_decor[celx, cely - 1].icon == 304 && (num == 0 || num == 7 || num == 18 || num == 25 || num == 33 || num == 44) && cely > 0) + { + PlaySound(69, pos); + } + if (num % 2 == 0) + { + return num < 50; + } + return false; + } + + public void Build() + { + TinyPoint posDecor = DecorNextAction(); + TinyPoint pos = default(TinyPoint); + pos.X = posDecor.X * 2 / 3; + pos.Y = posDecor.Y * 2 / 3; + int num = 1; + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = m_drawBounds.Left; + TinyRect rect = default(TinyRect); + rect.Left = pos.X % 640; + rect.Right = 640; + for (int i = 0; i < 3; i++) + { + tinyPoint.Y = m_drawBounds.Top; + rect.Top = pos.Y % 480; + rect.Bottom = 480; + for (int j = 0; j < 2; j++) + { + m_pixmap.DrawPart(3, tinyPoint, rect); + tinyPoint.Y += rect.Height - num; + rect.Top = 0; + rect.Bottom = 480; + } + tinyPoint.X += rect.Width - num; + rect.Left = 0; + rect.Right = 640; + if (tinyPoint.X > m_drawBounds.Right) + { + break; + } + } + tinyPoint.X = m_drawBounds.Left - posDecor.X % 64 - 64; + for (int i = posDecor.X / 64 - 1; i < posDecor.X / 64 + m_drawBounds.Width / 64 + 3; i++) + { + tinyPoint.Y = m_drawBounds.Top - posDecor.Y % 64 + 2 - 64; + for (int j = posDecor.Y / 64 - 1; j < posDecor.Y / 64 + m_drawBounds.Height / 64 + 2; j++) + { + if (i >= 0 && i < 100 && j >= 0 && j < 100) + { + int num2 = m_bigDecor[i, j].icon; + int channel = 9; + if (num2 != -1) + { + pos.X = tinyPoint.X; + pos.Y = tinyPoint.Y; + if (num2 == 203) + { + num2 = Tables.table_marine[m_time / 3 % 11]; + channel = 1; + } + if (num2 >= 66 && num2 <= 68) + { + pos.Y -= 13; + } + if (num2 >= 87 && num2 <= 89) + { + pos.Y -= 2; + } + m_pixmap.QuickIcon(channel, num2, pos); + } + } + tinyPoint.Y += 64; + } + tinyPoint.X += 64; + } + tinyPoint.X = m_drawBounds.Left - posDecor.X % 64; + for (int i = posDecor.X / 64; i < posDecor.X / 64 + m_drawBounds.Width / 64 + 2; i++) + { + tinyPoint.Y = m_drawBounds.Top - posDecor.Y % 64; + for (int j = posDecor.Y / 64; j < posDecor.Y / 64 + m_drawBounds.Height / 64 + 2; j++) + { + if (i >= 0 && i < 100 && j >= 0 && j < 100 && m_decor[i, j].icon != -1) + { + int num2 = m_decor[i, j].icon; + if (num2 == 384 || num2 == 385) + { + m_pixmap.QuickIcon(1, num2, tinyPoint); + } + } + tinyPoint.Y += 64; + } + tinyPoint.X += 64; + } + m_blupiSec = 0; + if (!m_blupiFront) + { + double rotation = 0.0; + if (m_blupiNage || m_blupiSurf || m_blupiHelico || m_blupiJeep) + { + rotation = m_blupiRealRotation; + } + tinyPoint.X = m_drawBounds.Left + m_blupiPos.X - posDecor.X; + tinyPoint.Y = m_drawBounds.Top + m_blupiPos.Y - posDecor.Y; + if (m_blupiJeep) + { + tinyPoint.Y += m_blupiOffsetY; + } + if (m_blupiShield) + { + m_blupiSec = 1; + if (m_blupiTimeShield > 25 || m_time % 4 < 2) + { + int num2 = Tables.table_shield_blupi[m_time / 2 % 16]; + tinyPoint.Y -= 2; + m_pixmap.QuickIcon(10, num2, tinyPoint); + tinyPoint.Y += 2; + num2 = Tables.table_shieldloop[m_time / 2 % 5]; + m_pixmap.QuickIcon(10, num2, tinyPoint); + } + m_pixmap.QuickIcon(m_blupiChannel, m_blupiIcon, tinyPoint, 1.0, rotation); + } + else if (m_blupiPower) + { + m_blupiSec = 2; + if (m_blupiTimeShield > 25 || m_time % 4 < 2) + { + int num2 = Tables.table_magicloop[m_time / 2 % 5]; + m_pixmap.QuickIcon(10, num2, tinyPoint); + } + m_pixmap.QuickIcon(m_blupiChannel, m_blupiIcon, tinyPoint, 1.0, rotation); + } + else if (m_blupiCloud) + { + m_blupiSec = 3; + if (m_blupiTimeShield > 25 || m_time % 4 < 2) + { + for (int k = 0; k < 3; k++) + { + int num2 = 48 + (m_time + k) / 1 % 6; + pos.X = tinyPoint.X - 34; + pos.Y = tinyPoint.Y - 34; + m_pixmap.QuickIcon(9, num2, pos); + } + } + m_pixmap.QuickIcon(m_blupiChannel, m_blupiIcon, tinyPoint, 1.0, rotation); + } + else if (m_blupiHide) + { + m_blupiSec = 4; + if (m_blupiTimeShield > 25 || m_time % 4 < 2) + { + m_pixmap.QuickIcon(m_blupiChannel, m_blupiIcon, tinyPoint, 0.3, rotation); + } + else + { + m_pixmap.QuickIcon(m_blupiChannel, m_blupiIcon, tinyPoint, 1.0, rotation); + } + } + else + { + m_pixmap.QuickIcon(m_blupiChannel, m_blupiIcon, tinyPoint, 1.0, rotation); + } + } + for (int num3 = MAXMOVEOBJECT - 1; num3 >= 0; num3--) + { + if (m_moveObject[num3].type != 0 && m_moveObject[num3].posCurrent.X >= posDecor.X - 64 && m_moveObject[num3].posCurrent.Y >= posDecor.Y - 64 && m_moveObject[num3].posCurrent.X <= posDecor.X + m_drawBounds.Width && m_moveObject[num3].posCurrent.Y <= posDecor.Y + m_drawBounds.Height && (m_moveObject[num3].type < 8 || m_moveObject[num3].type > 11) && (m_moveObject[num3].type < 90 || m_moveObject[num3].type > 95) && (m_moveObject[num3].type < 98 || m_moveObject[num3].type > 100) && m_moveObject[num3].type != 53 && m_moveObject[num3].type != 1 && m_moveObject[num3].type != 47 && m_moveObject[num3].type != 48) + { + tinyPoint.X = m_drawBounds.Left + m_moveObject[num3].posCurrent.X - posDecor.X; + tinyPoint.Y = m_drawBounds.Top + m_moveObject[num3].posCurrent.Y - posDecor.Y; + if (m_moveObject[num3].type == 4 || m_moveObject[num3].type == 32 || m_moveObject[num3].type == 33) + { + tinyPoint.X += 2; + tinyPoint.Y += BLUPIOFFY; + } + if (m_moveObject[num3].type == 54) + { + tinyPoint.Y += BLUPIOFFY; + } + double opacity = 1.0; + if (m_moveObject[num3].type == 58) + { + opacity = (double)(20 - m_moveObject[num3].phase) * 0.3 / 20.0; + } + m_pixmap.QuickIcon(m_moveObject[num3].channel, m_moveObject[num3].icon, tinyPoint, opacity, 0.0); + if (m_moveObject[num3].type == 30) + { + for (int l = 0; l < Tables.table_drinkoffset.Length; l++) + { + int num4 = (m_time + Tables.table_drinkoffset[l]) % 50; + int rank = Tables.table_drinkeffect[num4 % 5]; + TinyPoint tinyPoint2 = default(TinyPoint); + tinyPoint2.X = tinyPoint.X + 2; + tinyPoint2.Y = tinyPoint.Y - num4 * 3; + TinyPoint pos2 = tinyPoint2; + double opacity2 = (50.0 - (double)num4) / 50.0; + m_pixmap.QuickIcon(10, rank, pos2, opacity2, 0.0); + } + } + if (m_bDrawSecret && m_moveObject[num3].type == 12 && m_moveObject[num3].icon != 32 && m_moveObject[num3].icon != 33 && m_moveObject[num3].icon != 34) + { + m_pixmap.QuickIcon(1, 214, tinyPoint); + } + } + } + tinyPoint.X = m_drawBounds.Left - posDecor.X % 64; + for (int i = posDecor.X / 64; i < posDecor.X / 64 + m_drawBounds.Width / 64 + 2; i++) + { + tinyPoint.Y = m_drawBounds.Top - posDecor.Y % 64; + for (int j = posDecor.Y / 64; j < posDecor.Y / 64 + m_drawBounds.Height / 64 + 2; j++) + { + if (i >= 0 && i < 100 && j >= 0 && j < 100 && m_decor[i, j].icon != -1) + { + int num2 = m_decor[i, j].icon; + pos.X = tinyPoint.X; + pos.Y = tinyPoint.Y; + if ((num2 >= 107 && num2 <= 109) || num2 == 157) + { + pos.Y -= 7; + } + if (num2 == 211) + { + num2 = Tables.table_ressort[(m_time / 2 + i * 7) % 8]; + } + if (num2 == 214 && !m_bDrawSecret) + { + num2 = -1; + } + if (num2 == 364) + { + pos.Y -= 2; + } + switch (num2) + { + default: + m_pixmap.QuickIcon(1, num2, pos); + break; + case 68: + case 91: + case 92: + case 110: + case 111: + case 112: + case 113: + case 114: + case 115: + case 116: + case 117: + case 118: + case 119: + case 120: + case 121: + case 122: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 305: + case 317: + case 324: + case 373: + case 378: + case 384: + case 385: + case 404: + case 410: + break; + } + } + tinyPoint.Y += 64; + } + tinyPoint.X += 64; + } + for (int num3 = 0; num3 < MAXMOVEOBJECT; num3++) + { + if ((m_moveObject[num3].type == 1 || m_moveObject[num3].type == 47 || m_moveObject[num3].type == 48) && m_moveObject[num3].posCurrent.X >= posDecor.X - 64 && m_moveObject[num3].posCurrent.Y >= posDecor.Y - 64 && m_moveObject[num3].posCurrent.X <= posDecor.X + m_drawBounds.Width && m_moveObject[num3].posCurrent.Y <= posDecor.Y + m_drawBounds.Height) + { + tinyPoint.X = m_drawBounds.Left + m_moveObject[num3].posCurrent.X - posDecor.X; + tinyPoint.Y = m_drawBounds.Top + m_moveObject[num3].posCurrent.Y - posDecor.Y; + m_pixmap.QuickIcon(m_moveObject[num3].channel, m_moveObject[num3].icon, tinyPoint); + } + } + tinyPoint.X = m_drawBounds.Left - posDecor.X % 64; + for (int i = posDecor.X / 64; i < posDecor.X / 64 + m_drawBounds.Width / 64 + 2; i++) + { + tinyPoint.Y = m_drawBounds.Top - posDecor.Y % 64; + for (int j = posDecor.Y / 64; j < posDecor.Y / 64 + m_drawBounds.Height / 64 + 2; j++) + { + if (i >= 0 && i < 100 && j >= 0 && j < 100 && m_decor[i, j].icon != -1) + { + int num2 = m_decor[i, j].icon; + pos = tinyPoint; + if (num2 == 68) + { + num2 = Tables.table_decor_lave[(i * 13 + j * 7 + m_time / 2) % 8]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 373) + { + num2 = ((!m_blupiFocus) ? Tables.table_decor_piege2[(i * 13 + j * 7 + m_time / 2) % 4] : Tables.table_decor_piege1[(i * 13 + j * 7 + m_time / 4) % 16]); + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 404 || num2 == 410) + { + num2 = Tables.table_decor_goutte[(i * 13 + j * 7 + m_time / 2) % 48]; + pos.Y -= 9; + m_pixmap.QuickIcon(1, num2, pos); + if (num2 >= 404 && num2 <= 407) + { + m_decor[i, j].icon = 404; + } + else + { + m_decor[i, j].icon = 410; + } + } + if (num2 == 317) + { + num2 = Tables.table_decor_ecraseur[m_time / 3 % 10]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 378) + { + num2 = Tables.table_decor_scie[(i * 13 + j * 7 + m_time / 1) % 6]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 324) + { + num2 = Tables.table_decor_temp[m_time / 4 % 20]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 92) + { + num2 = Tables.table_decor_eau1[(i * 13 + j * 7 + m_time / 3) % 6]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 91) + { + int num5 = 3 + (i * 17 + j * 13) % 3; + num2 = Tables.table_decor_eau2[(i * 11 + j * 7 + m_time / num5) % 6]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 305 && BlitzActif(i, j)) + { + num2 = m_random.Next(305, 308); + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 110) + { + num2 = Tables.table_decor_ventg[m_time / 1 % 4]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 114) + { + num2 = Tables.table_decor_ventd[m_time / 1 % 4]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 118) + { + num2 = Tables.table_decor_venth[m_time / 1 % 4]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 122) + { + num2 = Tables.table_decor_ventb[m_time / 1 % 4]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 126) + { + num2 = Tables.table_decor_ventillog[m_time / 2 % 3]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 129) + { + num2 = Tables.table_decor_ventillod[m_time / 2 % 3]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 132) + { + num2 = Tables.table_decor_ventilloh[m_time / 2 % 3]; + m_pixmap.QuickIcon(1, num2, pos); + } + if (num2 == 135) + { + num2 = Tables.table_decor_ventillob[m_time / 2 % 3]; + m_pixmap.QuickIcon(1, num2, pos); + } + } + tinyPoint.Y += 64; + } + tinyPoint.X += 64; + } + ByeByeDraw(posDecor); + for (int num3 = 0; num3 < MAXMOVEOBJECT; num3++) + { + if (m_moveObject[num3].type != 0 && m_moveObject[num3].posCurrent.X >= posDecor.X - 64 && m_moveObject[num3].posCurrent.Y >= posDecor.Y - 64 && m_moveObject[num3].posCurrent.X <= posDecor.X + m_drawBounds.Width && m_moveObject[num3].posCurrent.Y <= posDecor.Y + m_drawBounds.Height && ((m_moveObject[num3].type >= 8 && m_moveObject[num3].type <= 11) || (m_moveObject[num3].type >= 90 && m_moveObject[num3].type <= 95) || (m_moveObject[num3].type >= 98 && m_moveObject[num3].type <= 100) || m_moveObject[num3].type == 53)) + { + tinyPoint.X = m_drawBounds.Left + m_moveObject[num3].posCurrent.X - posDecor.X; + tinyPoint.Y = m_drawBounds.Top + m_moveObject[num3].posCurrent.Y - posDecor.Y; + m_pixmap.QuickIcon(m_moveObject[num3].channel, m_moveObject[num3].icon, tinyPoint); + } + } + if (m_blupiFront) + { + tinyPoint.X = m_drawBounds.Left + m_blupiPos.X - posDecor.X; + tinyPoint.Y = m_drawBounds.Top + m_blupiPos.Y - posDecor.Y; + m_pixmap.QuickIcon(m_blupiChannel, m_blupiIcon, tinyPoint); + } + DrawInfo(); + VoyageDraw(); + m_time++; + } + + private void DrawInfo() + { + TinyPoint pos = default(TinyPoint); + pos.X = 210; + pos.Y = 417; + for (int i = 0; i < m_nbVies; i++) + { + m_pixmap.HudIcon(2, 48, pos); + pos.X += 16; + } + pos.X = 570; + pos.Y = 442; + for (int i = 0; i < m_blupiBullet; i++) + { + m_pixmap.HudIcon(10, 176, pos); + pos.X += 4; + } + if (m_blupiPerso > 0) + { + pos.X = 0; + pos.Y = 438; + m_pixmap.HudIcon(4, 108, pos); + string text = string.Format("= {0}", m_blupiPerso.ToString()); + pos.X = 32; + pos.Y = 452; + Text.DrawText(m_pixmap, pos, text, 0.7); + } + if (m_blupiDynamite > 0) + { + pos.X = 505; + pos.Y = 414; + m_pixmap.HudIcon(10, 252, pos); + } + if (((uint)m_blupiCle & (true ? 1u : 0u)) != 0) + { + pos.X = 520; + pos.Y = 418; + m_pixmap.HudIcon(10, 215, pos); + } + if (((uint)m_blupiCle & 2u) != 0) + { + pos.X = 530; + pos.Y = 418; + m_pixmap.HudIcon(10, 222, pos); + } + if (((uint)m_blupiCle & 4u) != 0) + { + pos.X = 540; + pos.Y = 418; + m_pixmap.HudIcon(10, 229, pos); + } + if ((m_mission != 1 && m_mission % 10 != 0) || m_bPrivate) + { + TinyRect tinyRect = default(TinyRect); + tinyRect.Left = 410 + m_pixmap.Origin.X; + tinyRect.Right = 510 + m_pixmap.Origin.X; + tinyRect.Top = 445; + tinyRect.Bottom = 480; + TinyRect rect = tinyRect; + m_pixmap.DrawIcon(14, 15, rect, 0.6, false); + string text = string.Format("{0}/{1}", m_nbTresor.ToString(), m_totalTresor.ToString()); + pos.X = 460; + pos.Y = 450; + Text.DrawTextCenter(m_pixmap, pos, text, 1.0); + } + for (int i = 0; i < 2; i++) + { + if (!m_jauges[i].GetHide()) + { + m_jauges[i].Draw(); + } + } + int[] array = null; + if (m_mission == 11) + { + array = Tables.table_training1; + } + if (m_mission == 12) + { + array = Tables.table_training2; + } + if (m_mission == 13) + { + array = Tables.table_training3; + } + if (m_mission == 14) + { + array = Tables.table_training4; + } + if (array == null || m_bPrivate) + { + return; + } + int num = (m_blupiPos.X + 30) / 64; + int num2 = (m_blupiPos.Y + 30) / 64; + for (int i = 0; array[i] != -1; i += 6) + { + if (num >= array[i] && num <= array[i + 1] && num2 >= array[i + 2] && num2 <= array[i + 3] && IsDisplayInfo(array[i + 4])) + { + int num3 = 0; + if (m_gameData.AccelActive) + { + num3 = 10000; + } + string text = MyResource.LoadString(array[i + 5] + num3); + if (!string.IsNullOrEmpty(text)) + { + TinyRect drawBounds = m_pixmap.DrawBounds; + TinyRect tinyRect2 = default(TinyRect); + tinyRect2.Left = 0; + tinyRect2.Right = drawBounds.Width; + tinyRect2.Top = 0; + tinyRect2.Bottom = 40; + TinyRect rect2 = tinyRect2; + m_pixmap.DrawIcon(14, 15, rect2, 1.0, false); + double num4 = Text.GetTextWidth(text, 1.0); + double num5 = Math.Min(640.0 / num4, 1.0); + pos.X = 320; + pos.Y = 5 + (int)((1.0 - num5) * 35.0 * 0.6); + Text.DrawTextCenter(m_pixmap, pos, text, num5); + } + break; + } + } + } + + private bool IsDisplayInfo(int tableTresor) + { + if (tableTresor >= 0) + { + return m_nbTresor == tableTresor; + } + switch (tableTresor) + { + case -2: + if (!m_blupiHelico && !m_blupiSkate && !m_blupiTank) + { + return !m_blupiJeep; + } + return false; + case -3: + if (!m_blupiHelico && !m_blupiSkate && !m_blupiTank) + { + return m_blupiJeep; + } + return true; + case -4: + return m_blupiDynamite == 0; + case -5: + return m_blupiDynamite > 0; + default: + return true; + } + } + + private TinyPoint DecorNextAction() + { + int i = 0; + if (m_decorAction == 0 || m_bPause) + { + return m_posDecor; + } + TinyPoint posDecor = m_posDecor; + for (; Tables.table_decor_action[i] != 0; i += 2 + Tables.table_decor_action[i + 1] * 2) + { + if (m_decorAction != Tables.table_decor_action[i]) + { + continue; + } + if (m_decorPhase < Tables.table_decor_action[i + 1]) + { + posDecor.X += 3 * Tables.table_decor_action[i + 2 + m_decorPhase * 2]; + posDecor.Y += 3 * Tables.table_decor_action[i + 2 + m_decorPhase * 2 + 1]; + int num = ((m_dimDecor.X != 0) ? (6400 - m_drawBounds.Width) : 0); + if (posDecor.X < 0) + { + posDecor.X = 0; + } + if (posDecor.X > num) + { + posDecor.X = num; + } + num = ((m_dimDecor.Y != 0) ? (6400 - m_drawBounds.Height) : 0); + if (posDecor.Y < 0) + { + posDecor.Y = 0; + } + if (posDecor.Y > num) + { + posDecor.Y = num; + } + m_decorPhase++; + } + else + { + m_decorAction = 0; + } + break; + } + return posDecor; + } + + public void SetSpeedX(double speed) + { + if (m_blupiInvert) + { + speed = 0.0 - speed; + } + m_blupiSpeedX = speed; + } + + public void SetSpeedY(double speed) + { + m_blupiSpeedY = speed; + } + + public void KeyChange(int keyPress) + { + m_keyPress = keyPress; + } + + private void GetBlupiInfo(out bool bHelico, out bool bJeep, out bool bSkate, out bool bNage) + { + bHelico = m_blupiHelico; + bJeep = m_blupiJeep | m_blupiTank; + bSkate = m_blupiSkate; + bNage = m_blupiNage | m_blupiSurf; + } + + private int SoundEnviron(int sound, int obstacle) + { + if ((obstacle >= 32 && obstacle <= 34) || (obstacle >= 41 && obstacle <= 47) || (obstacle >= 139 && obstacle <= 143)) + { + switch (sound) + { + case 4: + return 79; + case 3: + return 78; + } + } + if ((obstacle >= 1 && obstacle <= 28) || (obstacle >= 78 && obstacle <= 90) || (obstacle >= 250 && obstacle <= 260) || (obstacle >= 311 && obstacle <= 316) || (obstacle >= 324 && obstacle <= 329)) + { + switch (sound) + { + case 4: + return 81; + case 3: + return 80; + } + } + if ((obstacle >= 284 && obstacle <= 303) || obstacle == 338) + { + switch (sound) + { + case 4: + return 83; + case 3: + return 82; + } + } + if (obstacle >= 341 && obstacle <= 363) + { + switch (sound) + { + case 4: + return 85; + case 3: + return 84; + } + } + if (obstacle >= 215 && obstacle <= 234) + { + switch (sound) + { + case 4: + return 87; + case 3: + return 86; + } + } + if (obstacle >= 246 && obstacle <= 249) + { + switch (sound) + { + case 4: + return 89; + case 3: + return 88; + } + } + if (obstacle >= 107 && obstacle <= 109) + { + switch (sound) + { + case 4: + return 91; + case 3: + return 90; + } + } + return sound; + } + + private void PlaySound(int sound, TinyPoint pos) + { + if (!m_blupiHide || (sound != 1 && sound != 2 && sound != 3 && sound != 4 && sound != 5 && sound != 6 && sound != 7 && sound != 20 && sound != 21 && sound != 22 && sound != 23 && sound != 24 && sound != 25 && sound != 27 && sound != 32 && sound != 34 && sound != 35 && sound != 36 && sound != 37 && sound != 38 && sound != 39 && sound != 40 && sound != 46 && sound != 47 && sound != 48 && sound != 49 && sound != 64 && sound != 65 && sound != 78 && sound != 79 && sound != 80 && sound != 81 && sound != 82 && sound != 83 && sound != 84 && sound != 85 && sound != 86 && sound != 87 && sound != 88 && sound != 89 && sound != 90 && sound != 91)) + { + pos.X -= m_posDecor.X; + pos.Y -= m_posDecor.Y; + m_sound.PlayImage(sound, pos); + } + } + + public void StopSound() + { + m_blupiMotorSound = 0; + m_sound.StopAll(); + } + + public void StartSound() + { + AdaptMotorVehicleSound(); + } + + private void StopSound(int sound) + { + m_sound.Stop(sound); + } + + private void AdaptMotorVehicleSound() + { + int num = 0; + int channel = 0; + int channel2 = 0; + if (m_blupiHelico) + { + num = (m_blupiMotorHigh ? 16 : 18); + channel = 15; + channel2 = 17; + } + else if (m_blupiJeep || m_blupiOver || m_blupiTank) + { + num = (m_blupiMotorHigh ? 29 : 31); + channel = 28; + channel2 = 30; + } + if (m_blupiMotorSound != num) + { + TinyPoint blupiPos = m_blupiPos; + blupiPos.X -= m_posDecor.X; + blupiPos.Y -= m_posDecor.Y; + if (m_blupiMotorSound == 0 && num != 0) + { + m_sound.PlayImage(channel, blupiPos); + } + if (m_blupiMotorSound != 0 && num == 0) + { + m_sound.PlayImage(channel2, blupiPos); + } + if (m_blupiMotorSound != 0) + { + m_sound.Stop(m_blupiMotorSound); + } + m_blupiMotorSound = num; + if (m_blupiMotorSound != 0) + { + m_sound.PlayImage(m_blupiMotorSound, blupiPos, -1, true); + } + } + } + + private void PosSound(TinyPoint pos) + { + if (m_blupiMotorSound != 0) + { + pos.X -= m_posDecor.X; + pos.Y -= m_posDecor.Y; + m_sound.PosImage(m_blupiMotorSound, pos); + } + } + + private int GetRegion() + { + return m_region; + } + + private void SetRegion(int region) + { + m_region = region; + } + + private int GetMusic() + { + return m_music; + } + + private void SetMusic(int music) + { + m_music = music; + } + + public TinyPoint GetDim() + { + return m_dimDecor; + } + + public void SetDim(TinyPoint dim) + { + m_dimDecor = dim; + } + + public int GetMission() + { + return m_mission; + } + + public void SetMission(int mission) + { + m_mission = mission; + } + + public int GetNbVies() + { + return m_nbVies; + } + + public void SetNbVies(int nbVies) + { + m_nbVies = nbVies; + } + + public void InitializeDoors(GameData gameData) + { + gameData.GetDoors(m_doors); + } + + public void MemorizeDoors(GameData gameData) + { + gameData.SetDoors(m_doors); + } + + public static string GetCheatTinyText(Def.ButtonGlygh glyph) + { + switch (glyph) + { + case Def.ButtonGlygh.Cheat1: + return "D"; + case Def.ButtonGlygh.Cheat2: + return "B"; + case Def.ButtonGlygh.Cheat3: + return "S"; + case Def.ButtonGlygh.Cheat4: + return "E"; + case Def.ButtonGlygh.Cheat5: + return "R"; + case Def.ButtonGlygh.Cheat6: + return "T"; + case Def.ButtonGlygh.Cheat7: + return "C"; + case Def.ButtonGlygh.Cheat8: + return "T"; + case Def.ButtonGlygh.Cheat9: + return "G"; + default: + return ""; + } + } + + public void CheatAction(Tables.CheatCodes cheat) + { + if (cheat == Tables.CheatCodes.OpenDoors) + { + m_bCheatDoors = !m_bCheatDoors; + AdaptDoors(m_bPrivate); + } + if (cheat == Tables.CheatCodes.ShowSecret) + { + m_bDrawSecret = !m_bDrawSecret; + } + if (cheat == Tables.CheatCodes.SuperBlupi) + { + m_bSuperBlupi = !m_bSuperBlupi; + } + if (cheat == Tables.CheatCodes.LayEgg) + { + m_nbVies = 9; + } + if (cheat == Tables.CheatCodes.CleanAll) + { + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 2 || m_moveObject[i].type == 3 || m_moveObject[i].type == 96 || m_moveObject[i].type == 97 || m_moveObject[i].type == 4 || m_moveObject[i].type == 16 || m_moveObject[i].type == 17 || m_moveObject[i].type == 20 || m_moveObject[i].type == 44 || m_moveObject[i].type == 54 || m_moveObject[i].type == 32 || m_moveObject[i].type == 33) + { + m_decorAction = 1; + m_decorPhase = 0; + m_moveObject[i].type = 8; + m_moveObject[i].phase = 0; + m_moveObject[i].posCurrent.X -= 34; + m_moveObject[i].posCurrent.Y -= 34; + m_moveObject[i].posStart = m_moveObject[i].posCurrent; + m_moveObject[i].posEnd = m_moveObject[i].posCurrent; + MoveObjectStepIcon(i); + PlaySound(10, m_moveObject[i].posCurrent); + } + } + } + if (cheat == Tables.CheatCodes.Skate) + { + m_blupiAir = false; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = true; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiVent = false; + m_blupiSuspend = false; + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + } + if (cheat == Tables.CheatCodes.Copter) + { + m_blupiAir = false; + m_blupiHelico = true; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiVent = false; + m_blupiSuspend = false; + } + if (cheat == Tables.CheatCodes.Jeep) + { + m_blupiAir = false; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = true; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiVent = false; + m_blupiSuspend = false; + m_blupiCloud = false; + m_blupiHide = false; + } + if (cheat == Tables.CheatCodes.AllTreasure) + { + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 5) + { + m_moveObject[i].type = 0; + m_nbTresor++; + OpenDoorsTresor(); + PlaySound(11, m_moveObject[i].posCurrent); + } + } + } + if (cheat == Tables.CheatCodes.EndGoal) + { + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type != 7 && m_moveObject[i].type != 21) + { + continue; + } + m_blupiPos = m_moveObject[i].posCurrent; + if (m_nbTresor >= m_totalTresor) + { + if (m_moveObject[i].type == 21) + { + m_bFoundCle = true; + } + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(14, m_moveObject[i].posCurrent); + m_blupiAction = 13; + m_blupiPhase = 0; + m_blupiFocus = false; + m_blupiFront = true; + m_blupiAir = false; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiVent = false; + m_blupiSuspend = false; + m_blupiShield = false; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiInvert = false; + m_blupiBalloon = false; + m_blupiEcrase = false; + } + else + { + PlaySound(13, m_moveObject[i].posCurrent); + } + m_goalPhase = 50; + } + } + if (cheat == Tables.CheatCodes.RoundShield) + { + PlaySound(42, m_blupiPos); + m_blupiShield = true; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiTimeShield = 100; + m_blupiPosMagic = m_blupiPos; + m_jauges[1].SetHide(false); + } + if (cheat == Tables.CheatCodes.Lollipop) + { + m_blupiAction = 49; + m_blupiPhase = 0; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiShield = false; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiFocus = false; + PlaySound(50, m_blupiPos); + } + if (cheat == Tables.CheatCodes.Bombs) + { + m_blupiPerso = 10; + PlaySound(60, m_blupiPos); + } + if (cheat == Tables.CheatCodes.BirdLime) + { + m_blupiBullet = 10; + } + if (cheat == Tables.CheatCodes.Tank) + { + m_blupiAir = false; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = true; + m_blupiSkate = false; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiVent = false; + m_blupiSuspend = false; + m_blupiCloud = false; + m_blupiHide = false; + } + if (cheat == Tables.CheatCodes.PowerCharge) + { + m_blupiAction = 56; + m_blupiPhase = 0; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiShield = false; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiJumpAie = false; + m_blupiFocus = false; + PlaySound(58, m_blupiPos); + } + if (cheat == Tables.CheatCodes.Drink) + { + m_blupiAction = 55; + m_blupiPhase = 0; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiShield = false; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiJumpAie = false; + m_blupiFocus = false; + PlaySound(57, m_blupiPos); + } + if (cheat == Tables.CheatCodes.Overcraft) + { + m_blupiAir = false; + m_blupiHelico = false; + m_blupiOver = true; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiVent = false; + m_blupiSuspend = false; + } + if (cheat == Tables.CheatCodes.Dynamite) + { + m_blupiDynamite = 1; + PlaySound(60, m_blupiPos); + } + if (cheat == Tables.CheatCodes.WeelKeys) + { + m_blupiCle |= 7; + } + if (!m_blupiShield && !m_blupiHide && !m_blupiCloud && !m_blupiPower) + { + m_jauges[1].SetHide(true); + } + if (!m_blupiHelico && !m_blupiOver) + { + StopSound(16); + StopSound(18); + } + if (!m_blupiJeep && !m_blupiTank) + { + StopSound(29); + StopSound(31); + } + } + + private void SetBuildOfficialMissions(bool bMode) + { + m_buildOfficialMissions = bMode; + } + + private void BlupiSearchIcon() + { + int i = 0; + int num = 2; + int num2 = m_blupiAction; + if (m_blupiVent && !m_blupiHelico && !m_blupiOver) + { + if (num2 == 1) + { + num2 = 8; + } + if (num2 == 2) + { + num2 = 14; + } + } + if (m_blupiHelico) + { + if (num2 == 1) + { + num2 = 15; + } + if (num2 == 2) + { + num2 = 16; + } + if (num2 == 3) + { + num2 = 17; + } + if (num2 == 10) + { + num2 = 15; + } + if (num2 == 9) + { + num2 = 15; + } + m_blupiRealRotation = (int)(m_blupiVitesseX * 2.0); + } + if (m_blupiOver) + { + if (num2 == 1) + { + num2 = 67; + } + if (num2 == 2) + { + num2 = 68; + } + if (num2 == 3) + { + num2 = 69; + } + if (num2 == 10) + { + num2 = 67; + } + if (num2 == 9) + { + num2 = 67; + } + } + if (m_blupiJeep) + { + if (num2 == 1) + { + num2 = 25; + } + if (num2 == 2) + { + num2 = 26; + } + if (num2 == 10) + { + num2 = 26; + } + if (num2 == 3) + { + num2 = 27; + } + } + if (m_blupiTank) + { + if (num2 == 1) + { + num2 = 50; + } + if (num2 == 2) + { + num2 = 51; + } + if (num2 == 10) + { + num2 = 51; + } + if (num2 == 3) + { + num2 = 52; + } + } + if (m_blupiSkate) + { + if (num2 == 1) + { + num2 = 37; + } + if (num2 == 2) + { + num2 = 38; + } + if (num2 == 10) + { + num2 = 38; + } + if (num2 == 3) + { + num2 = 39; + } + if (num2 == 59) + { + num2 = 39; + } + if (num2 == 4) + { + num2 = 40; + } + if (num2 == 5) + { + num2 = 41; + } + if (num2 == 38 && m_blupiSpeedX == 0.0 && Math.Abs(m_blupiVitesseX) > 5.0) + { + num2 = 85; + } + } + if (m_blupiNage) + { + if (num2 == 1) + { + num2 = 18; + } + if (num2 == 2) + { + num2 = 19; + } + if (num2 == 3) + { + num2 = 20; + } + int num3 = 0; + int num4 = 0; + if (m_blupiPos.X > m_blupiLastPos.X) + { + num3 = 1; + } + if (m_blupiPos.X < m_blupiLastPos.X) + { + num3 = -1; + } + if (m_blupiPos.Y > m_blupiLastPos.Y) + { + num4 = 1; + } + if (m_blupiPos.Y < m_blupiLastPos.Y) + { + num4 = -1; + } + int num5 = ((num4 >= 0 || num3 != 0) ? ((num4 < 0 && num3 != 0) ? 45 : ((num4 == 0 && num3 != 0) ? 90 : ((num4 > 0 && num3 != 0) ? 135 : ((num4 > 0 && num3 == 0) ? 180 : 0)))) : 0); + num5 += 15; + if (num2 == 20) + { + num5 = 90; + } + m_blupiLogicRotation = Misc.Approch(m_blupiLogicRotation, num5, 10); + if (m_blupiDir == 2) + { + m_blupiRealRotation = m_blupiLogicRotation - 90; + } + else + { + m_blupiRealRotation = 90 - m_blupiLogicRotation; + } + m_blupiRealRotation += (int)(Math.Sin((double)m_time / 6.0) * 20.0); + } + if (m_blupiSurf) + { + if (num2 == 1) + { + num2 = 21; + } + if (num2 == 2) + { + num2 = 22; + } + if (num2 == 3) + { + num2 = 23; + } + m_blupiLogicRotation = Misc.Approch(m_blupiLogicRotation, 0, 10); + m_blupiRealRotation = m_blupiLogicRotation; + m_blupiRealRotation += (int)(Math.Sin((double)m_time / 10.0) * 10.0); + } + if (m_blupiSuspend) + { + if (num2 == 1) + { + num2 = 31; + } + if (num2 == 2) + { + num2 = 32; + } + if (num2 == 3) + { + num2 = 33; + } + if (num2 == 4) + { + num2 = 34; + } + } + if (m_blupiBalloon) + { + num2 = 66; + } + if (m_blupiEcrase) + { + if (num2 == 1) + { + num2 = 72; + } + if (num2 == 2) + { + num2 = 73; + } + if (num2 == 3) + { + num2 = 73; + } + } + if (num2 == 1 && (m_blupiPhase % 330 == 125 || m_blupiPhase % 330 == 129 || m_blupiPhase % 330 == 135 || m_blupiPhase % 330 == 139 || m_blupiPhase % 330 == 215 || m_blupiPhase % 330 == 219 || m_blupiPhase % 330 == 225 || m_blupiPhase % 330 == 229 || m_blupiPhase % 330 == 235 || m_blupiPhase % 330 == 239 || m_blupiPhase % 330 == 245 || m_blupiPhase % 330 == 249 || m_blupiPhase % 330 == 255 || m_blupiPhase % 330 == 259 || m_blupiPhase % 330 == 265 || m_blupiPhase % 330 == 269)) + { + PlaySound(37, m_blupiPos); + } + if (num2 == 31 && (m_blupiPhase % 328 == 118 || m_blupiPhase % 328 == 230 || m_blupiPhase % 328 == 278)) + { + PlaySound(36, m_blupiPos); + } + if ((num2 == 21 || num2 == 22) && m_blupiPhase % 12 == 0 && m_blupiSurf) + { + MoveObjectTiplouf(m_blupiPos); + } + int num6 = m_blupiPhase; + if (!m_blupiHelico && ((m_blupiSpeedX > 0.1 && m_blupiSpeedX < 0.75) || (m_blupiSpeedX < -0.1 && m_blupiSpeedX > -0.75))) + { + num6 /= 2; + } + for (; Tables.table_blupi[i] != 0; i += Tables.table_blupi[i + 1] + 3) + { + if (num2 == Tables.table_blupi[i]) + { + int num7 = ((Tables.table_blupi[i + 2] == 0 || num6 <= Tables.table_blupi[i + 2]) ? (num6 % Tables.table_blupi[i + 1]) : Tables.table_blupi[i + 2]); + num = Tables.table_blupi[i + 3 + num7]; + break; + } + } + if (num2 == 11 || num2 == 75 || num2 == 76 || num2 == 54 || (num2 == 57 && num < 266)) + { + m_blupiChannel = 10; + } + else + { + m_blupiChannel = 2; + } + int num8 = m_blupiDir; + if (m_blupiInvert) + { + if (m_blupiDir == 2) + { + num8 = 1; + } + if (m_blupiDir == 1) + { + num8 = 2; + } + } + if (num8 == 1 && m_blupiChannel == 2) + { + if (num2 == 31) + { + if (num == 144) + { + num = 158; + } + if (num == 143) + { + num = 145; + } + if (num == 151) + { + num = 146; + } + } + if (num >= 0 && num < 335) + { + num = Tables.table_mirror[num]; + } + } + if (num8 == 1 && m_blupiChannel == 10 && num >= 168 && num <= 171) + { + num += 4; + } + m_blupiIcon = num; + m_blupiPhase++; + } + + private bool BlupiIsGround() + { + if (m_blupiTransport == -1) + { + TinyRect rect = BlupiRect(m_blupiPos); + rect.Top = m_blupiPos.Y + 60 - 2; + rect.Bottom = m_blupiPos.Y + 60 - 1; + return DecorDetect(rect); + } + return false; + } + + private TinyRect BlupiRect(TinyPoint pos) + { + TinyRect result = default(TinyRect); + if (m_blupiNage || m_blupiSurf) + { + result.Left = pos.X + 12; + result.Right = pos.X + 60 - 12; + if (m_blupiAction == 1) + { + result.Top = pos.Y + 5; + result.Bottom = pos.Y + 60 - 10; + } + else + { + result.Top = pos.Y + 15; + result.Bottom = pos.Y + 60 - 10; + } + } + else if (m_blupiJeep) + { + result.Left = pos.X + 2; + result.Right = pos.X + 60 - 2; + result.Top = pos.Y + 10; + result.Bottom = pos.Y + 60 - 2; + } + else if (m_blupiTank) + { + result.Left = pos.X + 2; + result.Right = pos.X + 60 - 2; + result.Top = pos.Y + 10; + result.Bottom = pos.Y + 60 - 2; + } + else if (m_blupiOver) + { + result.Left = pos.X + 2; + result.Right = pos.X + 60 - 2; + result.Top = pos.Y + 2; + result.Bottom = pos.Y + 60 - 2; + } + else if (m_blupiBalloon) + { + result.Left = pos.X + 10; + result.Right = pos.X + 60 - 10; + result.Top = pos.Y + 5; + result.Bottom = pos.Y + 60 - 2; + } + else if (m_blupiEcrase) + { + result.Left = pos.X + 5; + result.Right = pos.X + 60 - 5; + result.Top = pos.Y + 39; + result.Bottom = pos.Y + 60 - 2; + } + else + { + result.Left = pos.X + 12; + result.Right = pos.X + 60 - 12; + result.Top = pos.Y + 11; + result.Bottom = pos.Y + 60 - 2; + } + return result; + } + + private void BlupiAdjust() + { + TinyRect tinyRect = BlupiRect(m_blupiPos); + if (!DecorDetect(tinyRect)) + { + return; + } + for (int i = 0; i < 50; i++) + { + TinyRect rect = tinyRect; + rect.Bottom = rect.Top + 2; + rect.Left = m_blupiPos.X + 12; + rect.Right = m_blupiPos.X + 60 - 12; + if (!DecorDetect(rect)) + { + break; + } + tinyRect.Top += 2; + tinyRect.Bottom += 2; + m_blupiPos.Y += 2; + } + for (int i = 0; i < 50; i++) + { + TinyRect rect = tinyRect; + rect.Right = rect.Left + 2; + rect.Top = m_blupiPos.Y + 11; + rect.Bottom = m_blupiPos.Y + 60 - 2; + if (!DecorDetect(rect)) + { + break; + } + tinyRect.Left += 2; + tinyRect.Right += 2; + m_blupiPos.X += 2; + } + for (int i = 0; i < 50; i++) + { + TinyRect rect = tinyRect; + rect.Left = rect.Right - 2; + rect.Top = m_blupiPos.Y + 11; + rect.Bottom = m_blupiPos.Y + 60 - 2; + if (!DecorDetect(rect)) + { + break; + } + tinyRect.Left -= 2; + tinyRect.Right -= 2; + m_blupiPos.X -= 2; + } + for (int i = 0; i < 50; i++) + { + TinyRect rect = tinyRect; + rect.Right = rect.Left + 2; + if (!DecorDetect(rect)) + { + break; + } + tinyRect.Left += 2; + tinyRect.Right += 2; + m_blupiPos.X += 2; + } + for (int i = 0; i < 50; i++) + { + TinyRect rect = tinyRect; + rect.Left = rect.Right - 2; + if (!DecorDetect(rect)) + { + break; + } + tinyRect.Left -= 2; + tinyRect.Right -= 2; + m_blupiPos.X -= 2; + } + } + + private bool BlupiBloque(TinyPoint pos, int dir) + { + TinyRect rect = BlupiRect(pos); + rect.Top = rect.Bottom - 20; + rect.Bottom -= 2; + if (dir > 0) + { + rect.Left = rect.Right - 2; + } + if (dir < 0) + { + rect.Right = rect.Left + 2; + } + return DecorDetect(rect); + } + + private void BlupiStep() + { + TinyPoint celSwitch = default(TinyPoint); + TinyPoint celBridge = default(TinyPoint); + BlupiAdjust(); + m_blupiLastPos = m_blupiPos; + TinyPoint end = m_blupiPos; + bool flag = m_blupiAir; + int blupiAction = m_blupiAction; + bool bVertigoLeft = false; + bool bVertigoRight = false; + end.X += m_blupiVector.X; + end.Y += m_blupiVector.Y; + if (m_blupiFocus && (end.Y + 30) / 64 >= 99) + { + BlupiDead(75, -1); + m_blupiRestart = true; + m_blupiAir = true; + m_blupiPos.Y = m_blupiPos.Y / 64 * 64 + BLUPIOFFY; + PlaySound(8, m_blupiPos); + return; + } + TinyRect rect = default(TinyRect); + if (m_blupiVector.X != 0 || m_blupiVector.Y != 0) + { + rect = BlupiRect(m_blupiPos); + rect.Top = m_blupiPos.Y + 11; + rect.Bottom = m_blupiPos.Y + 60 - 2; + TestPath(rect, m_blupiPos, ref end); + } + m_blupiVent = false; + int icon; + if (m_blupiTransport == -1 && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && m_blupiFocus) + { + icon = m_decor[(end.X + 30) / 64, (end.Y + 30) / 64].icon; + if (icon == 110) + { + end.X -= 9; + } + if (icon == 114) + { + end.X += 9; + } + if (icon == 118) + { + end.Y -= 20; + } + if (icon == 122) + { + end.Y += 20; + } + if (icon >= 110 && icon <= 125) + { + m_blupiVent = true; + rect.Left = m_blupiPos.X + 12; + rect.Right = m_blupiPos.X + 60 - 12; + rect.Top = m_blupiPos.Y + 11; + rect.Bottom = m_blupiPos.Y + 60 - 2; + TestPath(rect, m_blupiPos, ref end); + } + } + bool flag2; + if (m_blupiTransport == -1) + { + rect = BlupiRect(end); + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60 - 1; + flag2 = !DecorDetect(rect); + } + else + { + flag2 = false; + } + rect = BlupiRect(end); + rect.Top = end.Y + 10; + rect.Bottom = end.Y + 20; + bool flag3 = DecorDetect(rect); + int detectIcon = m_detectIcon; + if (!m_blupiAir && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && flag2 && m_blupiFocus) + { + if (m_blupiFocus) + { + m_blupiAction = 5; + m_blupiPhase = 0; + } + m_blupiVitesseY = 1.0; + m_blupiAir = true; + flag = true; + } + if (!m_blupiNage && !m_blupiSurf && !m_blupiSuspend && !m_blupiAir && IsRessort(end)) + { + if ((m_blupiHelico || m_blupiOver) && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + m_blupiHelico = false; + m_blupiOver = false; + celSwitch.X = end.X - 34; + celSwitch.Y = end.Y - 34; + ObjectStart(celSwitch, 9, 0); + m_decorAction = 1; + m_decorPhase = 0; + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(10, m_blupiPos); + } + if (m_blupiJeep && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + m_blupiJeep = false; + celSwitch.X = end.X - 34; + celSwitch.Y = end.Y - 34; + ObjectStart(celSwitch, 9, 0); + m_decorAction = 1; + m_decorPhase = 0; + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(10, m_blupiPos); + } + if (m_blupiTank && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + m_blupiTank = false; + celSwitch.X = end.X - 34; + celSwitch.Y = end.Y - 34; + ObjectStart(celSwitch, 9, 0); + m_decorAction = 1; + m_decorPhase = 0; + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(10, m_blupiPos); + } + if (m_blupiSkate && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + m_blupiSkate = false; + celSwitch.X = end.X - 34; + celSwitch.Y = end.Y - 34; + ObjectStart(celSwitch, 9, 0); + m_decorAction = 1; + m_decorPhase = 0; + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(10, m_blupiPos); + } + if (m_blupiFocus && m_blupiAction != 11 && m_blupiAction != 75 && m_blupiAction != 76 && m_blupiAction != 77 && m_blupiAction != 78 && m_blupiAction != 79 && m_blupiAction != 80 && m_blupiAction != 81) + { + m_blupiAction = 5; + m_blupiPhase = 0; + } + if (((uint)m_keyPress & (true ? 1u : 0u)) != 0 && m_blupiFocus) + { + m_blupiVitesseY = (m_blupiPower ? (-25) : (-19)); + } + else + { + m_blupiVitesseY = (m_blupiPower ? (-16) : (-10)); + } + m_blupiAir = true; + flag = true; + PlaySound(41, end); + } + if (((uint)m_keyPress & (true ? 1u : 0u)) != 0 && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + if (m_blupiAction != 4 && m_blupiAction != 3 && !m_blupiAir) + { + m_blupiAction = 4; + m_blupiPhase = 0; + } + if (m_blupiAction == 4 && m_blupiPhase == 3) + { + m_blupiAction = 5; + m_blupiPhase = 0; + if (m_blupiSkate) + { + PlaySound(1, end); + m_blupiVitesseY = (m_blupiPower ? (-17) : (-13)); + } + else + { + PlaySound(1, end); + if (IsNormalJump(end)) + { + m_blupiVitesseY = (m_blupiPower ? (-26) : (-16)); + } + else + { + m_blupiVitesseY = (m_blupiPower ? (-16) : (-12)); + } + } + m_blupiAir = true; + flag = true; + } + } + if (m_blupiAir) + { + if (flag3 && m_blupiVitesseY < 0.0) + { + if (m_blupiVitesseY < -14.0 && m_blupiAction != 11 && m_blupiAction != 75 && m_blupiAction != 76 && m_blupiAction != 77 && m_blupiAction != 78 && m_blupiAction != 79 && m_blupiAction != 80 && m_blupiAction != 81 && !m_blupiSkate) + { + m_blupiJumpAie = true; + PlaySound(40, end); + } + else + { + PlaySound(SoundEnviron(4, detectIcon), end); + } + m_blupiVitesseY = 1.0; + } + end.Y += (int)(m_blupiVitesseY * 2.0); + if (m_blupiVitesseY < 20.0) + { + m_blupiVitesseY += 2.0; + } + rect = BlupiRect(end); + rect.Top = end.Y + 60 - 30; + rect.Bottom = end.Y + 60 - 1; + if (m_blupiVitesseY >= 0.0 && DecorDetect(rect)) + { + end.Y = end.Y / 32 * 32 + BLUPIOFFY; + if (!IsRessort(end)) + { + PlaySound(SoundEnviron(3, m_detectIcon), end); + } + if (m_blupiFocus) + { + if (m_blupiVitesseY > 20.0) + { + m_blupiAction = 61; + } + else + { + m_blupiAction = 61; + } + m_blupiPhase = 0; + } + m_blupiAir = false; + if (m_blupiJumpAie) + { + m_blupiJumpAie = false; + m_blupiAction = 36; + m_blupiPhase = 0; + } + } + rect.Left = end.X + 20; + rect.Right = end.X + 60 - 20; + rect.Top = end.Y + 60 - 33; + rect.Bottom = end.Y + 60 - 1; + icon = AscenseurDetect(rect, m_blupiPos, end); + if (m_blupiVitesseY >= 0.0 && icon != -1) + { + m_blupiTransport = icon; + flag2 = false; + PlaySound(3, end); + end.Y = m_moveObject[icon].posCurrent.Y - 64 + BLUPIOFFY; + if (m_blupiFocus) + { + if (m_blupiVitesseY > 20.0) + { + m_blupiAction = 61; + } + else + { + m_blupiAction = 61; + } + m_blupiPhase = 0; + } + m_blupiAir = false; + if (m_blupiJumpAie) + { + m_blupiJumpAie = false; + m_blupiAction = 36; + m_blupiPhase = 0; + } + } + } + if (m_blupiAction == 36 && m_blupiPhase == 30) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + if (m_blupiAction == 56 && m_blupiPhase == 64) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + m_blupiCloud = true; + m_blupiTimeShield = 100; + m_jauges[1].SetHide(false); + PlaySound(55, end); + } + if (m_blupiAction == 58) + { + if (m_blupiPhase == 8) + { + celSwitch.X = m_blupiPos.X; + celSwitch.Y = m_blupiPos.Y + 40; + if (m_blupiVitesseY > 0.0) + { + celSwitch.Y += (int)(m_blupiVitesseY * 4.0); + } + m_blupiVitesseY -= 10.0; + if (ObjectStart(celSwitch, 23, 55) != -1) + { + PlaySound(52, m_blupiPos); + m_blupiTimeFire = 10; + m_blupiBullet--; + } + } + if (m_blupiPhase == 14) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + } + if ((m_blupiAction == 44 || m_blupiAction == 45) && m_blupiPhase == 29) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + if (m_blupiAction == 46 && m_blupiPhase == 32) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + if (m_blupiAction == 47 && m_blupiPhase == 34) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + bool bNear; + if (m_blupiAction == 48 && m_blupiPhase == 40) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + icon = MoveObjectDetect(end, out bNear); + if (icon != -1 && !bNear && end.Y - BLUPIFLOOR == m_moveObject[icon].posCurrent.Y) + { + if (m_blupiDir == 2 && end.X < m_moveObject[icon].posCurrent.X) + { + celSwitch.X = end.X - 16; + celSwitch.Y = end.Y; + int num = MoveObjectDetect(celSwitch, out bNear); + if (num == -1) + { + m_blupiAction = 9; + m_blupiPhase = 0; + } + } + if (m_blupiDir == 1 && end.X > m_moveObject[icon].posCurrent.X) + { + celSwitch.X = end.X + 16; + celSwitch.Y = end.Y; + int num = MoveObjectDetect(celSwitch, out bNear); + if (num == -1) + { + m_blupiAction = 9; + m_blupiPhase = 0; + } + } + } + } + if (m_blupiAction == 65) + { + if (m_blupiPhase == 4) + { + PlaySound(47, m_blupiPos); + } + if (m_blupiPhase == 44) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + } + if (m_blupiAction == 63) + { + if (m_blupiPhase == 1) + { + PlaySound(65, m_blupiPos); + m_blupiTimeMockery = 300; + } + if (m_blupiPhase == 92) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + } + if (m_blupiAction == 64) + { + if (m_blupiPhase == 6) + { + PlaySound(65, m_blupiPos); + m_blupiTimeMockery = 300; + } + if (m_blupiPhase == 104) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + } + if (m_blupiAction == 83) + { + if (m_blupiPhase == 4) + { + PlaySound(47, m_blupiPos); + } + if (m_blupiPhase == 60) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + } + if (m_blupiAction == 84 && m_blupiPhase == 18) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + if (m_blupiAction == 60 && m_blupiPhase == 3) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiAction == 61 && m_blupiPhase == 5) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiAction == 62 && m_blupiPhase == 2) + { + m_blupiAction = 5; + m_blupiPhase = 0; + m_blupiVitesseY = -12.0; + m_blupiAir = true; + flag = true; + } + if (m_blupiAction == 49 && m_blupiPhase == 32) + { + ObjectStart(m_sucettePos, m_sucetteType, 0); + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + m_blupiPower = true; + m_blupiTimeShield = 100; + m_blupiPosMagic = m_blupiPos; + m_jauges[1].SetHide(false); + PlaySound(44, end); + } + if (m_blupiAction == 55 && m_blupiPhase == 36) + { + ObjectStart(m_sucettePos, m_sucetteType, 0); + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + m_blupiHide = true; + m_blupiTimeShield = 100; + m_blupiPosMagic = m_blupiPos; + m_jauges[1].SetHide(false); + PlaySound(62, end); + } + if (m_blupiSpeedY < 0.0 && m_blupiLastSpeedY == 0.0 && m_blupiAction != 3 && m_blupiAction != 4 && m_blupiAction != 5 && m_blupiAction != 8 && m_blupiAction != 10 && m_blupiAction != 9 && !m_blupiAir && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + m_blupiAction = 7; + m_blupiPhase = 0; + } + if (m_blupiSpeedY == 0.0 && m_blupiLastSpeedY < 0.0 && m_blupiAction != 3 && m_blupiAction != 4 && m_blupiAction != 5 && m_blupiAction != 8 && m_blupiAction != 10 && m_blupiAction != 9 && !m_blupiAir && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiSpeedY > 0.0 && m_blupiLastSpeedY == 0.0 && m_blupiAction != 3 && m_blupiAction != 4 && m_blupiAction != 5 && m_blupiAction != 6 && m_blupiAction != 28 && m_blupiAction != 8 && m_blupiAction != 10 && m_blupiAction != 9 && !m_blupiAir && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + m_blupiAction = 6; + m_blupiPhase = 0; + } + if (m_blupiSpeedY > 0.0 && m_blupiSpeedX == 0.0 && (m_keyPress & 1) == 0 && m_blupiAction != 3 && m_blupiAction != 4 && m_blupiAction != 5 && m_blupiAction != 6 && m_blupiAction != 28 && m_blupiAction != 8 && m_blupiAction != 10 && m_blupiAction != 9 && !m_blupiAir && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + m_blupiAction = 6; + m_blupiPhase = 0; + } + if (m_blupiSpeedY == 0.0 && m_blupiLastSpeedY > 0.0 && m_blupiAction != 3 && m_blupiAction != 4 && m_blupiAction != 5 && m_blupiAction != 8 && m_blupiAction != 10 && m_blupiAction != 9 && !m_blupiAir && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiAction == 7 && m_blupiPhase == 4) + { + m_scrollAdd.Y = -150; + PlaySound(21, end); + } + if (m_blupiAction == 6 && m_blupiPhase == 4) + { + m_scrollAdd.Y = 150; + PlaySound(7, end); + } + if (!m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + if (m_blupiSpeedY > 0.0 && m_blupiSpeedX == 0.0 && (m_keyPress & 1) == 0 && m_blupiAction != 28 && m_blupiDir == 1 && (icon = CaisseInFront()) != -1) + { + end.X = m_moveObject[icon].posCurrent.X + 64 - 5; + m_blupiAction = 28; + m_blupiPhase = 0; + m_scrollAdd.Y = 0; + PlaySound(39, end); + } + if (m_blupiSpeedY > 0.0 && m_blupiSpeedX > 0.0 && (m_keyPress & 1) == 0 && m_blupiAction != 29 && m_blupiDir == 1 && (icon = CaisseInFront()) != -1) + { + m_blupiAction = 29; + m_blupiPhase = 0; + m_scrollAdd.Y = 0; + PlaySound(39, end); + } + if (m_blupiSpeedY > 0.0 && m_blupiSpeedX == 0.0 && (m_keyPress & 1) == 0 && m_blupiAction != 28 && m_blupiDir == 2 && (icon = CaisseInFront()) != -1) + { + end.X = m_moveObject[icon].posCurrent.X - 60 + 5; + m_blupiAction = 28; + m_blupiPhase = 0; + m_scrollAdd.Y = 0; + PlaySound(39, end); + } + if (m_blupiSpeedY > 0.0 && m_blupiSpeedX < 0.0 && (m_keyPress & 1) == 0 && m_blupiAction != 29 && m_blupiDir == 2 && (icon = CaisseInFront()) != -1) + { + m_blupiAction = 29; + m_blupiPhase = 0; + m_scrollAdd.Y = 0; + PlaySound(39, end); + } + if (m_blupiAction == 29 && m_blupiActionOuf != 47) + { + m_blupiActionOuf = 47; + m_blupiTimeOuf = 0; + } + } + if (m_blupiAction != 28 && m_blupiAction != 29 && m_blupiFocus) + { + if (m_blupiSpeedX < 0.0 && m_blupiLastSpeedX == 0.0 && !m_blupiAir && m_blupiSpeedY != 0.0) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiSpeedX == 0.0 && m_blupiLastSpeedX < 0.0 && m_blupiSpeedY != 0.0) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiSpeedX > 0.0 && m_blupiLastSpeedX == 0.0 && !m_blupiAir && m_blupiSpeedY != 0.0) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiSpeedX == 0.0 && m_blupiLastSpeedX > 0.0 && m_blupiSpeedY != 0.0) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + } + int num2; + int num3; + if (m_blupiSpeedX < 0.0 && m_blupiFocus) + { + if (m_blupiDir == 2 && m_blupiAction != 3 && m_blupiAction != 59 && m_blupiAction != 7 && m_blupiAction != 6 && m_blupiAction != 29 && ((!m_blupiJeep && !m_blupiTank && !m_blupiSkate) || Math.Abs(m_blupiVitesseX) <= 8.0)) + { + if (m_blupiAir) + { + PlaySound(5, end); + m_blupiAction = 59; + m_blupiPhase = 0; + m_blupiDir = 1; + } + else + { + PlaySound(5, end); + m_blupiAction = 3; + m_blupiPhase = 0; + } + } + if (m_blupiDir == 1 && m_blupiAction != 2 && m_blupiAction != 14 && m_blupiAction != 4 && m_blupiAction != 7 && m_blupiAction != 6 && m_blupiAction != 29 && !m_blupiAir) + { + m_blupiAction = 2; + m_blupiPhase = 0; + } + if (m_blupiDir == 1 && m_blupiAction != 3 && m_blupiAction != 4 && m_blupiAction != 7 && m_blupiAction != 6 && m_blupiAction != 29 && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend) + { + if (m_blupiAction == 14) + { + end.X -= CaisseGetMove(5); + } + else + { + num2 = m_blupiPhase; + if (num2 > 3 || m_blupiAir) + { + num2 = 3; + } + num3 = Tables.table_vitesse_march[num2]; + if (m_blupiPower) + { + num3 *= 3; + num3 /= 2; + } + end.X += Misc.Speed(m_blupiSpeedX, num3); + } + } + if (m_blupiDir == 2 && m_blupiAction == 29) + { + end.X -= CaisseGetMove(3); + } + } + if (m_blupiSpeedX > 0.0 && m_blupiFocus) + { + if (m_blupiDir == 1 && m_blupiAction != 3 && m_blupiAction != 59 && m_blupiAction != 7 && m_blupiAction != 6 && m_blupiAction != 29 && ((!m_blupiJeep && !m_blupiTank && !m_blupiSkate) || Math.Abs(m_blupiVitesseX) <= 8.0)) + { + if (m_blupiAir) + { + PlaySound(5, end); + m_blupiAction = 59; + m_blupiPhase = 0; + m_blupiDir = 2; + } + else + { + PlaySound(5, end); + m_blupiAction = 3; + m_blupiPhase = 0; + } + } + if (m_blupiDir == 2 && m_blupiAction != 2 && m_blupiAction != 14 && m_blupiAction != 4 && m_blupiAction != 7 && m_blupiAction != 6 && m_blupiAction != 29 && !m_blupiAir) + { + m_blupiAction = 2; + m_blupiPhase = 0; + } + if (m_blupiDir == 2 && m_blupiAction != 3 && m_blupiAction != 4 && m_blupiAction != 7 && m_blupiAction != 6 && m_blupiAction != 29 && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend) + { + if (m_blupiAction == 14) + { + end.X += CaisseGetMove(5); + } + else + { + num2 = m_blupiPhase; + if (num2 > 3 || m_blupiAir) + { + num2 = 3; + } + num3 = Tables.table_vitesse_march[num2]; + if (m_blupiPower) + { + num3 *= 3; + num3 /= 2; + } + end.X += Misc.Speed(m_blupiSpeedX, num3); + } + } + if (m_blupiDir == 1 && m_blupiAction == 29) + { + end.X += CaisseGetMove(3); + } + } + if (m_blupiHelico) + { + if (m_blupiAction == 3 && m_blupiPhase == 10) + { + m_blupiAction = 2; + if (m_blupiDir == 1) + { + m_blupiDir = 2; + } + else + { + m_blupiDir = 1; + } + } + } + else if (m_blupiOver) + { + if (m_blupiAction == 3 && m_blupiPhase == 7) + { + m_blupiAction = 2; + if (m_blupiDir == 1) + { + m_blupiDir = 2; + } + else + { + m_blupiDir = 1; + } + } + } + else if (m_blupiJeep) + { + if (m_blupiAction == 3 && m_blupiPhase == 7) + { + m_blupiAction = 1; + m_blupiPhase = 0; + if (m_blupiDir == 1) + { + m_blupiDir = 2; + } + else + { + m_blupiDir = 1; + } + } + } + else if (m_blupiTank) + { + if (m_blupiAction == 3 && m_blupiPhase == 12) + { + m_blupiAction = 1; + m_blupiPhase = 0; + if (m_blupiDir == 1) + { + m_blupiDir = 2; + } + else + { + m_blupiDir = 1; + } + } + } + else if (m_blupiSkate) + { + if (m_blupiAction == 3 && m_blupiPhase == 14) + { + m_blupiAction = 1; + m_blupiPhase = 0; + if (m_blupiDir == 1) + { + m_blupiDir = 2; + } + else + { + m_blupiDir = 1; + } + } + } + else if (m_blupiNage || m_blupiSurf) + { + if (m_blupiAction == 3 && m_blupiPhase == 10) + { + m_blupiAction = 2; + if (m_blupiDir == 1) + { + m_blupiDir = 2; + } + else + { + m_blupiDir = 1; + } + } + } + else if (m_blupiSuspend) + { + if (m_blupiAction == 3 && m_blupiPhase == 10) + { + m_blupiAction = 1; + m_blupiPhase = 0; + if (m_blupiDir == 1) + { + m_blupiDir = 2; + } + else + { + m_blupiDir = 1; + } + } + } + else + { + if (m_blupiAction == 3 && m_blupiPhase == 6) + { + m_blupiAction = 1; + m_blupiPhase = 0; + if (m_blupiDir == 1) + { + m_blupiDir = 2; + } + else + { + m_blupiDir = 1; + } + } + if (m_blupiAction == 59 && m_blupiPhase == 6) + { + m_blupiAction = 5; + m_blupiPhase = 0; + } + } + if (!m_blupiSuspend && m_blupiAction == 4 && m_blupiPhase == 3) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiSpeedX == 0.0 && m_blupiSpeedY == 0.0 && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && m_blupiFocus) + { + if (m_blupiAction == 14 || m_blupiAction == 7) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiAction == 2) + { + if (m_blupiSuspend || m_blupiPhase < 10) + { + m_blupiAction = 1; + } + else + { + m_blupiAction = 60; + } + m_blupiPhase = 0; + } + if (m_blupiAction == 6) + { + m_blupiAction = 1; + m_blupiPhase = 0; + PlaySound(20, end); + } + m_scrollAdd.Y = 0; + if (blupiAction == 14) + { + StopSound(38); + } + if (blupiAction == 29 || blupiAction == 28) + { + StopSound(39); + } + } + if (!m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && m_blupiFocus) + { + if (m_blupiAction == 9 && m_blupiDir == 1) + { + end.X += 4; + } + if (m_blupiAction == 9 && m_blupiDir == 2) + { + end.X -= 4; + } + if (m_blupiAction == 10 && m_blupiDir == 1) + { + end.X -= 4; + } + if (m_blupiAction == 10 && m_blupiDir == 2) + { + end.X += 4; + } + } + if ((m_keyPress & -3) == 0 && m_blupiSpeedX == 0.0 && m_blupiSpeedY == 0.0 && (m_blupiJeep || m_blupiTank || m_blupiSkate) && m_blupiFocus) + { + if (m_blupiAction == 10 && m_blupiDir == 1) + { + end.X -= 5; + } + if (m_blupiAction == 10 && m_blupiDir == 2) + { + end.X += 5; + } + } + if ((m_keyPress & -3) == 0 && m_blupiSpeedX == 0.0 && m_blupiSpeedY == 0.0 && m_blupiNage && m_blupiFocus && m_blupiAction == 2) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if ((m_keyPress & -3) == 0 && m_blupiSpeedX == 0.0 && m_blupiSpeedY == 0.0 && m_blupiSurf && m_blupiFocus && m_blupiAction == 2) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiHelico && (m_blupiFocus || m_blupiAction == 58)) + { + if (((uint)m_keyPress & 2u) != 0 && m_blupiTimeFire == 0 && m_blupiAction != 3 && m_blupiAction != 58 && flag2) + { + if (m_blupiBullet == 0) + { + PlaySound(53, m_blupiPos); + } + else + { + m_blupiAction = 58; + m_blupiPhase = 0; + m_blupiFocus = false; + } + } + m_blupiMotorHigh = flag2; + if (m_blupiAction != 3 && m_blupiAction != 58) + { + if (flag2) + { + m_blupiAction = 2; + } + else + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiVitesseY = 0.0; + } + } + if (Def.EasyMove) + { + if (m_blupiSpeedY <= -1.0 || ((uint)m_keyPress & (true ? 1u : 0u)) != 0) + { + if (m_blupiVitesseY > -7.0) + { + m_blupiVitesseY -= 0.5; + } + if (m_blupiVitesseY == -0.5) + { + m_blupiVitesseY = -1.0; + } + } + else if (m_blupiSpeedY >= 1.0) + { + if (m_blupiVitesseY < 8.0) + { + m_blupiVitesseY += 0.5; + } + } + else + { + if (m_blupiVitesseY > 1.0) + { + m_blupiVitesseY -= 1.0; + } + if (m_blupiVitesseY < 1.0) + { + m_blupiVitesseY += 1.0; + } + } + end.Y += (int)m_blupiVitesseY; + } + else + { + if (m_blupiSpeedY <= -1.0 || ((uint)m_keyPress & (true ? 1u : 0u)) != 0) + { + if (m_blupiVitesseY > -10.0) + { + m_blupiVitesseY -= 0.5; + } + } + else if (m_blupiSpeedY >= 1.0) + { + if (m_blupiVitesseY < 12.0) + { + m_blupiVitesseY += 0.5; + } + } + else + { + if (m_blupiVitesseY > 1.0) + { + m_blupiVitesseY -= 1.0; + } + if (m_blupiVitesseY < 1.0) + { + m_blupiVitesseY += 1.0; + } + } + end.Y += (int)m_blupiVitesseY; + } + if (Def.EasyMove) + { + if (m_blupiSpeedX <= -1.0) + { + int num4 = (int)(m_blupiSpeedX * 12.0); + if (m_blupiVitesseX > (double)num4) + { + m_blupiVitesseX -= 0.5; + } + celSwitch.X = end.X + (int)m_blupiVitesseX; + celSwitch.Y = end.Y; + if (BlupiBloque(celSwitch, -1)) + { + m_blupiVitesseX = 0.0; + } + } + else if (m_blupiSpeedX >= 1.0) + { + int num5 = (int)(m_blupiSpeedX * 12.0); + if (m_blupiVitesseX < (double)num5) + { + m_blupiVitesseX += 0.5; + } + celSwitch.X = end.X + (int)m_blupiVitesseX; + celSwitch.Y = end.Y; + if (BlupiBloque(celSwitch, 1)) + { + m_blupiVitesseX = 0.0; + } + } + else + { + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX -= 2.0; + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX = 0.0; + } + } + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX += 2.0; + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX = 0.0; + } + } + } + end.X += (int)m_blupiVitesseX; + } + else + { + if (m_blupiSpeedX <= -1.0) + { + int num6 = (int)(m_blupiSpeedX * 16.0); + if (m_blupiVitesseX > (double)num6) + { + m_blupiVitesseX -= 1.0; + } + celSwitch.X = end.X + (int)m_blupiVitesseX; + celSwitch.Y = end.Y; + if (BlupiBloque(celSwitch, -1)) + { + m_blupiVitesseX = 0.0; + } + } + else if (m_blupiSpeedX >= 1.0) + { + int num7 = (int)(m_blupiSpeedX * 16.0); + if (m_blupiVitesseX < (double)num7) + { + m_blupiVitesseX += 1.0; + } + celSwitch.X = end.X + (int)m_blupiVitesseX; + celSwitch.Y = end.Y; + if (BlupiBloque(celSwitch, 1)) + { + m_blupiVitesseX = 0.0; + } + } + else + { + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX -= 2.0; + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX = 0.0; + } + } + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX += 2.0; + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX = 0.0; + } + } + } + end.X += (int)m_blupiVitesseX; + } + MoveObjectPollution(); + if (ButtonPressed == Def.ButtonGlygh.PlayAction && !flag2 && m_blupiTransport == -1) + { + ButtonPressed = Def.ButtonGlygh.None; + rect.Left = m_blupiPos.X + 20; + rect.Right = m_blupiPos.X + 22; + rect.Top = m_blupiPos.Y + 60 - 2; + rect.Bottom = m_blupiPos.Y + 60; + bVertigoLeft = !DecorDetect(rect); + rect.Left = m_blupiPos.X + 60 - 22; + rect.Right = m_blupiPos.X + 60 - 20; + rect.Top = m_blupiPos.Y + 60 - 2; + rect.Bottom = m_blupiPos.Y + 60; + bVertigoRight = !DecorDetect(rect); + if (!bVertigoLeft && !bVertigoRight) + { + celSwitch.X = m_blupiPos.X; + celSwitch.Y = m_blupiPos.Y - BLUPIFLOOR; + ObjectStart(celSwitch, 13, 0); + m_blupiHelico = false; + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiPosHelico = m_blupiPos; + m_blupiFocus = true; + StopSound(16); + StopSound(18); + PlaySound(17, m_blupiPos); + } + } + } + if (m_blupiOver && (m_blupiFocus || m_blupiAction == 58)) + { + m_blupiMotorHigh = flag2; + if (m_blupiAction != 3) + { + if (flag2) + { + m_blupiAction = 2; + } + else + { + if (m_blupiAction != 1) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + m_blupiVitesseY = 0.0; + } + } + rect = BlupiRect(end); + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60 + OVERHEIGHT - 1; + bool flag4 = !DecorDetect(rect); + icon = MoveAscenseurDetect(m_blupiPos, OVERHEIGHT); + if (icon != -1) + { + flag4 = false; + } + if ((m_blupiSpeedY < 0.0 || ((uint)m_keyPress & (true ? 1u : 0u)) != 0) && !flag4) + { + if (m_blupiVitesseY == 0.0 && icon != -1) + { + m_blupiVitesseY = -5.0; + } + else if (m_blupiVitesseY > -5.0) + { + m_blupiVitesseY -= 1.0; + } + } + else if (m_blupiSpeedY > 0.0) + { + if (m_blupiVitesseY < 12.0) + { + m_blupiVitesseY += 5.0; + } + } + else if (m_blupiVitesseY < 12.0 && m_time % 2 == 0) + { + m_blupiVitesseY += 1.0; + } + end.Y += (int)m_blupiVitesseY; + if (m_blupiSpeedX < 0.0 && flag2) + { + int num8 = (int)(m_blupiSpeedX * 12.0); + if (m_blupiVitesseX > (double)num8) + { + m_blupiVitesseX -= 1.0; + } + celSwitch.X = end.X + (int)m_blupiVitesseX; + celSwitch.Y = end.Y; + if (BlupiBloque(celSwitch, -1)) + { + m_blupiVitesseX = 0.0; + } + } + else if (m_blupiSpeedX > 0.0 && flag2) + { + int num9 = (int)(m_blupiSpeedX * 12.0); + if (m_blupiVitesseX < (double)num9) + { + m_blupiVitesseX += 1.0; + } + celSwitch.X = end.X + (int)m_blupiVitesseX; + celSwitch.Y = end.Y; + if (BlupiBloque(celSwitch, 1)) + { + m_blupiVitesseX = 0.0; + } + } + else + { + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX -= 1.0; + } + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX += 1.0; + } + } + end.X += (int)m_blupiVitesseX; + MoveObjectPollution(); + if (ButtonPressed == Def.ButtonGlygh.PlayAction && !flag2 && m_blupiTransport == -1) + { + ButtonPressed = Def.ButtonGlygh.None; + rect.Left = m_blupiPos.X + 20; + rect.Right = m_blupiPos.X + 22; + rect.Top = m_blupiPos.Y + 60 - 2; + rect.Bottom = m_blupiPos.Y + 60; + bVertigoLeft = !DecorDetect(rect); + rect.Left = m_blupiPos.X + 60 - 22; + rect.Right = m_blupiPos.X + 60 - 20; + rect.Top = m_blupiPos.Y + 60 - 2; + rect.Bottom = m_blupiPos.Y + 60; + bVertigoRight = !DecorDetect(rect); + if (!bVertigoLeft && !bVertigoRight) + { + celSwitch.X = m_blupiPos.X; + celSwitch.Y = m_blupiPos.Y - BLUPIFLOOR; + ObjectStart(celSwitch, 46, 0); + m_blupiOver = false; + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiPosHelico = m_blupiPos; + m_blupiFocus = true; + StopSound(16); + StopSound(18); + PlaySound(17, m_blupiPos); + } + } + } + if (m_blupiBalloon && m_blupiFocus) + { + if (m_blupiSpeedY < 0.0 || ((uint)m_keyPress & (true ? 1u : 0u)) != 0) + { + if (m_blupiVitesseY > -5.0 && m_time % 6 == 0) + { + m_blupiVitesseY -= 1.0; + } + } + else if (m_blupiSpeedY > 0.0) + { + if (m_blupiVitesseY < 0.0 && m_time % 6 == 0) + { + m_blupiVitesseY += 1.0; + } + } + else if (m_blupiVitesseY > -3.0 && m_time % 6 == 0) + { + m_blupiVitesseY -= 1.0; + } + end.Y += (int)m_blupiVitesseY; + if (m_blupiSpeedX < 0.0) + { + int num10 = (int)(m_blupiSpeedX * 10.0); + if (m_blupiVitesseX > (double)num10) + { + m_blupiVitesseX -= 1.0; + } + celSwitch.X = end.X + (int)m_blupiVitesseX; + celSwitch.Y = end.Y; + if (BlupiBloque(celSwitch, -1)) + { + m_blupiVitesseX = 0.0; + } + } + else if (m_blupiSpeedX > 0.0) + { + int num11 = (int)(m_blupiSpeedX * 10.0); + if (m_blupiVitesseX < (double)num11) + { + m_blupiVitesseX += 1.0; + } + celSwitch.X = end.X + (int)m_blupiVitesseX; + celSwitch.Y = end.Y; + if (BlupiBloque(celSwitch, 1)) + { + m_blupiVitesseX = 0.0; + } + } + else + { + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX -= 2.0; + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX = 0.0; + } + } + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX += 2.0; + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX = 0.0; + } + } + } + end.X += (int)m_blupiVitesseX; + } + if (m_blupiEcrase && m_blupiFocus) + { + if (flag2) + { + if (m_blupiVitesseY < 2.0) + { + m_blupiVitesseY += 1.0; + } + } + else + { + m_blupiVitesseY = 0.0; + } + end.Y += (int)m_blupiVitesseY; + num2 = ((!flag2) ? 4 : 7); + num2 = (int)((double)num2 * m_blupiSpeedX); + if (m_blupiSpeedX < 0.0) + { + if (m_blupiVitesseX > (double)num2) + { + m_blupiVitesseX -= 1.0; + } + celSwitch.X = end.X + (int)m_blupiVitesseX; + celSwitch.Y = end.Y; + if (BlupiBloque(celSwitch, -1)) + { + m_blupiVitesseX = 0.0; + } + } + else if (m_blupiSpeedX > 0.0) + { + if (m_blupiVitesseX < (double)num2) + { + m_blupiVitesseX += 1.0; + } + celSwitch.X = end.X + (int)m_blupiVitesseX; + celSwitch.Y = end.Y; + if (BlupiBloque(celSwitch, 1)) + { + m_blupiVitesseX = 0.0; + } + } + else + { + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX -= 2.0; + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX = 0.0; + } + } + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX += 2.0; + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX = 0.0; + } + } + } + if (m_blupiVitesseX == 0.0 && !flag2) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + end.X += (int)m_blupiVitesseX; + } + if (m_blupiJeep && m_blupiFocus) + { + if (m_blupiVitesseX == 0.0 && m_blupiAction == 2) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + m_blupiMotorHigh = m_blupiAction != 1; + rect = BlupiRect(end); + rect.Right -= 40; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60 - 1; + bool flag5 = !DecorDetect(rect); + rect.Left += 40; + rect.Right += 40; + bool flag6 = !DecorDetect(rect); + if (flag2) + { + if (m_blupiVitesseY < 50.0) + { + m_blupiVitesseY += 5.0; + } + } + else + { + if (m_blupiVitesseY != 0.0) + { + PlaySound(3, m_blupiPos); + } + m_blupiVitesseY = 0.0; + } + end.Y += (int)m_blupiVitesseY; + if (m_blupiTransport == -1) + { + rect.Left = end.X + 20; + rect.Right = end.X + 60 - 20; + rect.Top = end.Y + 60 - 35; + rect.Bottom = end.Y + 60 - 1; + icon = AscenseurDetect(rect, m_blupiPos, end); + if (m_blupiVitesseY >= 0.0 && icon != -1) + { + m_blupiTransport = icon; + flag2 = false; + PlaySound(3, end); + end.Y = m_moveObject[icon].posCurrent.Y - 64 + BLUPIOFFY; + } + } + if (flag5 && !flag6) + { + int num12 = -20; + if (m_blupiVitesseX > (double)num12) + { + m_blupiVitesseX -= 1.0; + } + } + else if (!flag5 && flag6) + { + int num13 = 20; + if (m_blupiVitesseX < (double)num13) + { + m_blupiVitesseX += 1.0; + } + } + else if (m_blupiSpeedX < 0.0) + { + int num14 = (int)(m_blupiSpeedX * 20.0); + if (m_blupiVitesseX > (double)num14) + { + m_blupiVitesseX -= 1.0; + } + } + else if (m_blupiSpeedX > 0.0) + { + int num15 = (int)(m_blupiSpeedX * 20.0); + if (m_blupiVitesseX < (double)num15) + { + m_blupiVitesseX += 1.0; + } + } + else + { + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX -= 2.0; + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX = 0.0; + } + } + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX += 2.0; + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX = 0.0; + } + } + } + if (m_blupiAction == 3) + { + m_blupiVitesseX = 0.0; + } + end.X += (int)m_blupiVitesseX; + if (flag5 && !flag6) + { + m_blupiRealRotation = Misc.Approch(m_blupiRealRotation, -45, 5); + } + else if (!flag5 && flag6) + { + m_blupiRealRotation = Misc.Approch(m_blupiRealRotation, 45, 5); + } + else if (!flag2) + { + m_blupiRealRotation = 0; + } + m_blupiOffsetY = Math.Abs(m_blupiRealRotation / 2); + MoveObjectPollution(); + if (ButtonPressed == Def.ButtonGlygh.PlayAction && !flag2 && m_blupiTransport == -1) + { + ButtonPressed = Def.ButtonGlygh.None; + celSwitch.X = m_blupiPos.X; + celSwitch.Y = m_blupiPos.Y - BLUPIFLOOR; + ObjectStart(celSwitch, 19, 0); + m_blupiJeep = false; + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiPosHelico = m_blupiPos; + StopSound(29); + StopSound(31); + PlaySound(30, m_blupiPos); + } + } + if (m_blupiTank && m_blupiFocus) + { + if (m_blupiAction == 53 && m_blupiPhase == 6) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (((uint)m_keyPress & 2u) != 0 && m_blupiTimeFire == 0 && m_blupiAction != 3) + { + if (m_blupiBullet == 0) + { + PlaySound(53, m_blupiPos); + } + else + { + if (m_blupiDir == 1) + { + celSwitch.X = m_blupiPos.X - 35; + celSwitch.Y = m_blupiPos.Y; + num3 = -5; + m_blupiVitesseX += 12.0; + } + else + { + celSwitch.X = m_blupiPos.X + 35; + celSwitch.Y = m_blupiPos.Y; + num3 = 5; + m_blupiVitesseX -= 12.0; + } + if (ObjectStart(celSwitch, 23, num3) != -1) + { + m_blupiAction = 53; + m_blupiPhase = 0; + PlaySound(52, m_blupiPos); + m_blupiTimeFire = 10; + m_blupiBullet--; + } + } + } + if (m_blupiVitesseX == 0.0 && m_blupiAction == 2) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + m_blupiMotorHigh = m_blupiAction != 1; + if (flag2) + { + if (m_blupiVitesseY < 50.0) + { + m_blupiVitesseY += 5.0; + } + } + else + { + if (m_blupiVitesseY != 0.0) + { + PlaySound(3, m_blupiPos); + } + m_blupiVitesseY = 0.0; + } + end.Y += (int)m_blupiVitesseY; + if (m_blupiTransport == -1) + { + rect.Left = end.X + 20; + rect.Right = end.X + 60 - 20; + rect.Top = end.Y + 60 - 35; + rect.Bottom = end.Y + 60 - 1; + icon = AscenseurDetect(rect, m_blupiPos, end); + if (m_blupiVitesseY >= 0.0 && icon != -1) + { + m_blupiTransport = icon; + flag2 = false; + PlaySound(3, end); + end.Y = m_moveObject[icon].posCurrent.Y - 64 + BLUPIOFFY; + } + } + if (m_blupiSpeedX < 0.0) + { + int num16 = (int)(m_blupiSpeedX * 12.0); + if (m_blupiVitesseX > (double)num16) + { + m_blupiVitesseX -= 1.0; + } + } + else if (m_blupiSpeedX > 0.0) + { + int num17 = (int)(m_blupiSpeedX * 12.0); + if (m_blupiVitesseX < (double)num17) + { + m_blupiVitesseX += 1.0; + } + } + else + { + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX -= 3.0; + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX = 0.0; + } + } + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX += 3.0; + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX = 0.0; + } + } + } + if (m_blupiAction == 3) + { + m_blupiVitesseX = 0.0; + } + end.X += (int)m_blupiVitesseX; + MoveObjectPollution(); + if (ButtonPressed == Def.ButtonGlygh.PlayAction && !flag2 && m_blupiTransport == -1) + { + ButtonPressed = Def.ButtonGlygh.None; + celSwitch.X = m_blupiPos.X; + celSwitch.Y = m_blupiPos.Y; + ObjectStart(celSwitch, 28, 0); + m_blupiTank = false; + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiPosHelico = m_blupiPos; + StopSound(29); + StopSound(31); + PlaySound(30, m_blupiPos); + } + } + if (m_blupiSkate && m_blupiFocus) + { + if (m_blupiVitesseX == 0.0 && m_blupiAction == 2) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiSpeedX < 0.0) + { + int num18 = (int)(m_blupiSpeedX * 15.0); + if (m_blupiVitesseX > (double)num18) + { + m_blupiVitesseX -= 1.0; + } + } + else if (m_blupiSpeedX > 0.0) + { + int num19 = (int)(m_blupiSpeedX * 15.0); + if (m_blupiVitesseX < (double)num19) + { + m_blupiVitesseX += 1.0; + } + } + else + { + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX -= 1.0; + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX = 0.0; + } + } + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX += 1.0; + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX = 0.0; + } + } + } + if (m_blupiAction == 3) + { + m_blupiVitesseX = 0.0; + } + end.X += (int)m_blupiVitesseX; + if (ButtonPressed == Def.ButtonGlygh.PlayAction && !flag2 && !m_blupiAir && m_blupiTransport == -1 && m_blupiVitesseX < 8.0) + { + ButtonPressed = Def.ButtonGlygh.None; + m_blupiSkate = false; + m_blupiAction = 43; + m_blupiPhase = 0; + m_blupiFocus = false; + m_blupiPosHelico = m_blupiPos; + } + } + if (m_blupiAction == 42) + { + if (m_blupiPhase == 8) + { + icon = MoveObjectDetect(m_blupiPos, out bNear); + if (icon != -1) + { + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + } + } + if (m_blupiPhase == 20) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + } + if (m_blupiAction == 43) + { + if (m_blupiPhase == 12) + { + celSwitch.X = m_blupiPos.X; + celSwitch.Y = m_blupiPos.Y - BLUPIFLOOR + 1; + ObjectStart(celSwitch, 24, 0); + } + if (m_blupiPhase == 20) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + } + if (m_blupiNage && m_blupiFocus) + { + if (m_blupiTransport == -1) + { + if (m_blupiSpeedY < 0.0 || ((uint)m_keyPress & (true ? 1u : 0u)) != 0) + { + if (m_blupiVitesseY > -5.0) + { + m_blupiVitesseY -= 1.0; + } + } + else if (m_blupiSpeedY > 0.0) + { + if (m_blupiVitesseY < 5.0) + { + m_blupiVitesseY += 1.0; + } + } + else + { + num2 = ((m_blupiAction == 1) ? (-1) : 0); + if (m_blupiVitesseY > (double)num2) + { + m_blupiVitesseY -= 1.0; + } + if (m_blupiVitesseY < (double)num2) + { + m_blupiVitesseY += 1.0; + } + } + end.Y += (int)m_blupiVitesseY; + } + if (m_blupiSpeedX < 0.0) + { + int num20 = (int)(m_blupiSpeedX * 8.0); + if (m_blupiVitesseX > (double)num20) + { + m_blupiVitesseX -= 1.0; + } + } + else if (m_blupiSpeedX > 0.0) + { + int num21 = (int)(m_blupiSpeedX * 8.0); + if (m_blupiVitesseX < (double)num21) + { + m_blupiVitesseX += 1.0; + } + } + else + { + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX -= 2.0; + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX = 0.0; + } + } + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX += 2.0; + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX = 0.0; + } + } + } + icon = Tables.table_vitesse_nage[m_blupiPhase % 14 / 2]; + end.X += (int)(m_blupiVitesseX * (double)icon / 7.0); + if (m_time % 70 == 0 || m_time % 70 == 28) + { + MoveObjectBlup(end); + } + if (m_time % 5 == 0) + { + if (!m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + m_blupiLevel--; + } + if (m_blupiLevel == 25) + { + m_jauges[0].SetMode(1); + } + m_jauges[0].SetLevel(m_blupiLevel); + if (m_blupiLevel == 0) + { + m_blupiAction = 24; + m_blupiPhase = 0; + m_blupiFocus = false; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiSuspend = false; + m_blupiJumpAie = false; + m_blupiShield = false; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiInvert = false; + m_blupiBalloon = false; + m_blupiEcrase = false; + m_blupiAir = false; + m_blupiRestart = true; + m_blupiActionOuf = 0; + m_jauges[0].SetHide(true); + m_jauges[1].SetHide(true); + PlaySound(26, end); + } + } + } + if (m_blupiSurf && m_blupiFocus) + { + if (m_blupiTransport == -1) + { + if (m_blupiSpeedY < 0.0 || ((uint)m_keyPress & (true ? 1u : 0u)) != 0) + { + if (m_blupiVitesseY > -5.0) + { + m_blupiVitesseY -= 1.0; + } + } + else if (m_blupiSpeedY > 0.0) + { + if (m_blupiVitesseY < 5.0) + { + m_blupiVitesseY += 1.0; + } + } + else + { + if (m_blupiVitesseY > -2.0) + { + m_blupiVitesseY -= 1.0; + } + if (m_blupiVitesseY < -2.0) + { + m_blupiVitesseY += 1.0; + } + } + end.Y += (int)m_blupiVitesseY; + end.Y += BLUPISURF; + if (end.Y % 64 > 30) + { + end.Y += 64 - end.Y % 64; + } + end.Y -= BLUPISURF; + } + if (m_blupiSpeedX < 0.0) + { + int num22 = (int)(m_blupiSpeedX * 8.0); + if (m_blupiVitesseX > (double)num22) + { + m_blupiVitesseX -= 1.0; + } + } + else if (m_blupiSpeedX > 0.0) + { + int num23 = (int)(m_blupiSpeedX * 8.0); + if (m_blupiVitesseX < (double)num23) + { + m_blupiVitesseX += 1.0; + } + } + else + { + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX -= 2.0; + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX = 0.0; + } + } + if (m_blupiVitesseX < 0.0) + { + m_blupiVitesseX += 2.0; + if (m_blupiVitesseX > 0.0) + { + m_blupiVitesseX = 0.0; + } + } + } + icon = Tables.table_vitesse_surf[m_blupiPhase % 12 / 2]; + end.X += (int)(m_blupiVitesseX * (double)icon / 10.0); + } + TinyPoint tinyPoint = default(TinyPoint); + if (m_blupiSuspend && m_blupiFocus) + { + if (m_blupiSpeedX < 0.0 && m_blupiAction == 2) + { + int num24 = (int)(m_blupiSpeedX * 5.0); + end.X += num24; + } + if (m_blupiSpeedX > 0.0 && m_blupiAction == 2) + { + int num25 = (int)(m_blupiSpeedX * 5.0); + end.X += num25; + } + icon = GetTypeBarre(end); + if (icon == 2) + { + tinyPoint.X = end.X; + tinyPoint.Y = end.Y / 64 * 64 + BLUPIOFFY; + rect = BlupiRect(tinyPoint); + if (!DecorDetect(rect, true)) + { + m_blupiSuspend = false; + m_blupiAction = 1; + m_blupiPhase = 0; + end = (m_blupiPos = tinyPoint); + } + } + if ((m_blupiSpeedY > 0.0 && m_blupiPhase > 5) || icon == 0) + { + m_blupiSuspend = false; + m_blupiAir = true; + m_blupiAction = 5; + end.Y = end.Y; + m_blupiVitesseY = 0.0; + m_blupiNoBarre = 5; + m_blupiActionOuf = 65; + m_blupiTimeOuf = 0; + } + if ((((uint)m_keyPress & (true ? 1u : 0u)) != 0 || m_blupiSpeedY < 0.0) && m_blupiAction != 4 && m_blupiAction != 3) + { + m_blupiAction = 4; + m_blupiPhase = 0; + } + if ((m_keyPress & 1) == 0 && m_blupiSpeedY == 0.0 && m_blupiAction == 4) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + if (m_blupiAction == 4 && m_blupiPhase == 10) + { + m_blupiSuspend = false; + m_blupiAir = true; + m_blupiAction = 5; + m_blupiPhase = 0; + end.Y -= 2; + m_blupiVitesseY = -11.0; + m_blupiNoBarre = 5; + PlaySound(35, end); + } + } + if (ButtonPressed == Def.ButtonGlygh.PlayAction && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiTank && !m_blupiJeep && !m_blupiSkate && !flag2 && m_blupiTransport == -1 && m_blupiFocus) + { + if (m_blupiDynamite > 0) + { + ButtonPressed = Def.ButtonGlygh.None; + rect.Left = end.X + 18; + rect.Right = end.X + 20; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoLeft = !DecorDetect(rect); + rect.Left = end.X + 60 - 20; + rect.Right = end.X + 60 - 18; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoRight = !DecorDetect(rect); + if (!bVertigoLeft && !bVertigoRight && ObjectStart(end, 56, 0) != -1) + { + m_blupiAction = 87; + m_blupiPhase = 0; + m_blupiFocus = false; + PlaySound(61, end); + m_blupiDynamite--; + } + } + else if (m_blupiPerso > 0) + { + ButtonPressed = Def.ButtonGlygh.None; + icon = MoveObjectDetect(end, out bNear); + if (icon == -1 || m_moveObject[icon].type != 200) + { + rect.Left = end.X + 18; + rect.Right = end.X + 20; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoLeft = !DecorDetect(rect); + rect.Left = end.X + 60 - 20; + rect.Right = end.X + 60 - 18; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoRight = !DecorDetect(rect); + icon = MoveChargeDetect(end); + if (icon == -1 && !bVertigoLeft && !bVertigoRight && ObjectStart(end, 200, 0) != -1) + { + m_blupiAction = 46; + m_blupiPhase = 0; + m_blupiFocus = false; + PlaySound(61, end); + m_blupiPerso--; + } + } + if (m_blupiFocus) + { + m_blupiAction = 47; + m_blupiPhase = 0; + PlaySound(27, end); + } + } + } + rect = BlupiRect(m_blupiPos); + tinyPoint = end; + TestPath(rect, m_blupiPos, ref end); + if (flag && m_blupiPos.X == end.X && m_blupiPos.X != tinyPoint.X) + { + end.Y = tinyPoint.Y; + TestPath(rect, m_blupiPos, ref end); + } + if (m_blupiVent && m_blupiPos.Y == end.Y && m_blupiPos.Y != tinyPoint.Y) + { + end.X = tinyPoint.X; + TestPath(rect, m_blupiPos, ref end); + } + if (m_blupiTransport != -1 && m_blupiPos.X == end.X && m_blupiPos.X != tinyPoint.X) + { + end.Y = tinyPoint.Y; + TestPath(rect, m_blupiPos, ref end); + } + if (m_blupiHelico || m_blupiOver || m_blupiBalloon || m_blupiEcrase || m_blupiJeep || m_blupiTank || m_blupiSkate || m_blupiNage) + { + if (m_blupiPos.X == end.X && m_blupiPos.X != tinyPoint.X) + { + end.Y = tinyPoint.Y; + TestPath(rect, m_blupiPos, ref end); + } + else if (m_blupiPos.Y == end.Y && m_blupiPos.Y != tinyPoint.Y) + { + end.X = tinyPoint.X; + TestPath(rect, m_blupiPos, ref end); + } + } + TinyPoint blupiPos = m_blupiPos; + m_blupiPos = end; + if ((m_blupiAction == 1 || m_blupiAction == 60 || m_blupiAction == 7 || m_blupiAction == 6) && !m_blupiAir && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + if (m_blupiTransport != -1) + { + AscenseurVertigo(m_blupiTransport, out bVertigoLeft, out bVertigoRight); + } + else + { + rect.Left = end.X + 24; + rect.Right = end.X + 26; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoLeft = !DecorDetect(rect); + rect.Left = end.X + 60 - 26; + rect.Right = end.X + 60 - 24; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoRight = !DecorDetect(rect); + } + if (m_blupiDir == 1 && bVertigoLeft && !bVertigoRight) + { + if (m_blupiHelico || m_blupiOver || AscenseurShift(m_blupiTransport)) + { + m_blupiAction = 9; + m_blupiPhase = 0; + } + else + { + PlaySound(6, end); + m_blupiAction = 8; + m_blupiPhase = 0; + } + } + if (m_blupiDir == 2 && !bVertigoLeft && bVertigoRight) + { + if (m_blupiHelico || m_blupiOver || AscenseurShift(m_blupiTransport)) + { + m_blupiAction = 9; + m_blupiPhase = 0; + } + else + { + PlaySound(6, end); + m_blupiAction = 8; + m_blupiPhase = 0; + } + } + if (m_blupiAction != 8 && m_blupiAction != 10 && m_blupiAction != 9 && (bVertigoLeft || bVertigoRight)) + { + if (!m_blupiHelico && !m_blupiOver) + { + PlaySound(6, end); + } + m_blupiAction = 10; + m_blupiPhase = 0; + } + } + if (m_blupiAction == 1 && m_blupiJeep && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + if (m_blupiTransport != -1) + { + AscenseurVertigo(m_blupiTransport, out bVertigoLeft, out bVertigoRight); + } + else + { + rect.Left = end.X + 2; + rect.Right = end.X + 18; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoLeft = !DecorDetect(rect); + rect.Left = end.X + 60 - 18; + rect.Right = end.X + 60 - 2; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoRight = !DecorDetect(rect); + } + if (bVertigoLeft && !bVertigoRight) + { + m_blupiAction = 10; + m_blupiPhase = 0; + } + if (bVertigoRight && !bVertigoLeft) + { + m_blupiAction = 10; + m_blupiPhase = 0; + } + } + if (m_blupiAction == 1 && m_blupiTank && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + if (m_blupiTransport != -1) + { + AscenseurVertigo(m_blupiTransport, out bVertigoLeft, out bVertigoRight); + } + else + { + rect.Left = end.X + 2; + rect.Right = end.X + 18; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoLeft = !DecorDetect(rect); + rect.Left = end.X + 60 - 18; + rect.Right = end.X + 60 - 2; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoRight = !DecorDetect(rect); + } + if (bVertigoLeft && !bVertigoRight) + { + m_blupiAction = 10; + m_blupiPhase = 0; + } + if (bVertigoRight && !bVertigoLeft) + { + m_blupiAction = 10; + m_blupiPhase = 0; + } + } + if (m_blupiAction == 1 && m_blupiSkate && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + if (m_blupiTransport != -1) + { + AscenseurVertigo(m_blupiTransport, out bVertigoLeft, out bVertigoRight); + } + else + { + rect.Left = end.X + 12; + rect.Right = end.X + 19; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoLeft = !DecorDetect(rect); + rect.Left = end.X + 60 - 19; + rect.Right = end.X + 60 - 12; + rect.Top = end.Y + 60 - 2; + rect.Bottom = end.Y + 60; + bVertigoRight = !DecorDetect(rect); + } + if (bVertigoLeft && !bVertigoRight) + { + m_blupiAction = 10; + m_blupiPhase = 0; + } + if (bVertigoRight && !bVertigoLeft) + { + m_blupiAction = 10; + m_blupiPhase = 0; + } + } + if (m_blupiFocus) + { + if (m_blupiAction == 8 && m_blupiPhase == 16) + { + m_blupiAction = 9; + m_blupiPhase = 0; + } + if (m_blupiAction == 9 && m_blupiPhase == 3) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiActionOuf = 0; + } + num2 = 5; + if (m_blupiJeep) + { + num2 = 10; + } + if (m_blupiTank) + { + num2 = 10; + } + if (m_blupiSkate) + { + num2 = 10; + } + if (m_blupiAction == 10 && m_blupiPhase == num2) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + } + BlupiSearchIcon(); + if (m_blupiShield) + { + if (m_blupiTimeShield == 10) + { + PlaySound(43, m_blupiPos); + } + if (m_blupiTimeShield == 0) + { + m_blupiShield = false; + m_jauges[1].SetHide(true); + } + else if (m_time % 5 == 0) + { + m_blupiTimeShield--; + m_jauges[1].SetLevel(m_blupiTimeShield); + } + } + if (m_blupiPower) + { + if (m_blupiTimeShield == 20) + { + PlaySound(45, m_blupiPos); + } + if (m_blupiTimeShield == 0) + { + m_blupiPower = false; + m_jauges[1].SetHide(true); + } + else if (m_time % 3 == 0) + { + m_blupiTimeShield--; + m_jauges[1].SetLevel(m_blupiTimeShield); + } + } + if (m_blupiCloud) + { + if (m_blupiTimeShield == 25) + { + PlaySound(56, m_blupiPos); + } + if (m_blupiTimeShield == 0) + { + m_blupiCloud = false; + m_jauges[1].SetHide(true); + } + else if (m_time % 4 == 0) + { + m_blupiTimeShield--; + m_jauges[1].SetLevel(m_blupiTimeShield); + } + } + if (m_blupiHide) + { + if (m_blupiTimeShield == 20) + { + PlaySound(63, m_blupiPos); + } + if (m_blupiTimeShield == 0) + { + m_blupiHide = false; + m_jauges[1].SetHide(true); + } + else if (m_time % 4 == 0) + { + m_blupiTimeShield--; + m_jauges[1].SetLevel(m_blupiTimeShield); + } + } + if (m_blupiInvert) + { + if (m_blupiTimeShield == 0) + { + m_blupiInvert = false; + m_jauges[1].SetHide(true); + celSwitch.X = m_blupiPos.X; + celSwitch.Y = m_blupiPos.Y + 100; + ObjectStart(celSwitch, 42, -60); + celSwitch.X = m_blupiPos.X; + celSwitch.Y = m_blupiPos.Y - 100; + ObjectStart(celSwitch, 42, 60); + celSwitch.X = m_blupiPos.X - 100; + celSwitch.Y = m_blupiPos.Y; + ObjectStart(celSwitch, 42, 10); + celSwitch.X = m_blupiPos.X + 100; + celSwitch.Y = m_blupiPos.Y; + ObjectStart(celSwitch, 42, -10); + PlaySound(67, end); + } + else if (m_time % 3 == 0) + { + m_blupiTimeShield--; + m_jauges[1].SetLevel(m_blupiTimeShield); + } + } + if (m_blupiBalloon) + { + if (m_blupiTimeShield == 0) + { + m_blupiBalloon = false; + m_jauges[1].SetHide(true); + celSwitch.X = m_blupiPos.X - 34; + celSwitch.Y = m_blupiPos.Y - 34; + ObjectStart(celSwitch, 91, 0); + PlaySound(41, m_blupiPos); + } + else if (m_time % 2 == 0) + { + m_blupiTimeShield--; + m_jauges[1].SetLevel(m_blupiTimeShield); + } + } + if (m_blupiEcrase) + { + if (m_blupiTimeShield == 0) + { + m_blupiEcrase = false; + m_blupiAir = true; + m_jauges[1].SetHide(true); + ObjectStart(m_blupiPos, 41, -60); + ObjectStart(m_blupiPos, 41, 60); + ObjectStart(m_blupiPos, 41, 10); + ObjectStart(m_blupiPos, 41, -10); + celSwitch.X = m_blupiPos.X - 34; + celSwitch.Y = m_blupiPos.Y - 34; + ObjectStart(celSwitch, 90, 0); + PlaySound(41, m_blupiPos); + } + else if (m_time % 2 == 0) + { + m_blupiTimeShield--; + m_jauges[1].SetLevel(m_blupiTimeShield); + } + } + if (m_blupiPower && Math.Abs(m_blupiPos.X - m_blupiPosMagic.X) + Math.Abs(m_blupiPos.Y - m_blupiPosMagic.Y) >= 40) + { + icon = MoveObjectFree(); + if (icon != -1) + { + m_moveObject[icon].type = 27; + m_moveObject[icon].phase = 0; + m_moveObject[icon].posCurrent = m_blupiPos; + m_moveObject[icon].posStart = m_moveObject[icon].posCurrent; + m_moveObject[icon].posEnd = m_moveObject[icon].posCurrent; + m_moveObject[icon].step = 1; + m_moveObject[icon].time = 0; + MoveObjectStepIcon(icon); + m_blupiPosMagic = m_blupiPos; + } + } + if (m_blupiShield && Math.Abs(m_blupiPos.X - m_blupiPosMagic.X) + Math.Abs(m_blupiPos.Y - m_blupiPosMagic.Y) >= 40) + { + icon = MoveObjectFree(); + if (icon != -1) + { + m_moveObject[icon].type = 57; + m_moveObject[icon].phase = 0; + m_moveObject[icon].posCurrent = m_blupiPos; + m_moveObject[icon].posStart = m_moveObject[icon].posCurrent; + m_moveObject[icon].posEnd = m_moveObject[icon].posCurrent; + m_moveObject[icon].step = 1; + m_moveObject[icon].time = 0; + MoveObjectStepIcon(icon); + m_blupiPosMagic = m_blupiPos; + } + } + if (m_blupiHide && Math.Abs(m_blupiPos.X - m_blupiPosMagic.X) + Math.Abs(m_blupiPos.Y - m_blupiPosMagic.Y) >= 10) + { + icon = MoveObjectFree(); + if (icon != -1) + { + m_moveObject[icon].type = 58; + m_moveObject[icon].icon = m_blupiIcon; + m_moveObject[icon].channel = 2; + m_moveObject[icon].phase = 0; + m_moveObject[icon].posCurrent = m_blupiPos; + m_moveObject[icon].posStart = m_moveObject[icon].posCurrent; + m_moveObject[icon].posEnd = m_moveObject[icon].posCurrent; + m_moveObject[icon].step = 1; + m_moveObject[icon].time = 0; + MoveObjectStepIcon(icon); + m_blupiPosMagic = m_blupiPos; + } + } + if (m_blupiTimeNoAsc > 0) + { + m_blupiTimeNoAsc--; + } + if (m_blupiHelico && m_blupiPos.Y > 2 && m_blupiFocus && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + rect = BlupiRect(end); + rect.Top = end.Y + 4; + rect.Bottom = end.Y + 20; + if (DecorDetect(rect)) + { + ByeByeHelico(); + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiHelico = false; + celSwitch.X = m_blupiPos.X - 34; + celSwitch.Y = m_blupiPos.Y - 34; + ObjectStart(celSwitch, 9, 0); + m_decorAction = 1; + m_decorPhase = 0; + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(10, m_blupiPos); + } + } + if (!m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && m_blupiFocus) + { + if (!m_blupiNage && !m_blupiSurf && IsSurfWater(m_blupiPos)) + { + m_scrollAdd.X = 0; + m_scrollAdd.Y = 0; + m_blupiAir = false; + m_blupiNage = false; + m_blupiSurf = true; + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiVitesseX = 0.0; + m_blupiVitesseY = 0.0; + MoveObjectPlouf(m_blupiPos); + if (m_blupiTransport != -1) + { + m_blupiPos.Y -= 10; + m_blupiTransport = -1; + } + if (m_blupiCloud) + { + m_blupiCloud = false; + m_jauges[1].SetHide(true); + } + } + if (!m_blupiNage && !IsSurfWater(m_blupiPos) && IsDeepWater(m_blupiPos)) + { + if (!m_blupiSurf) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiVitesseX = 0.0; + m_blupiVitesseY = 0.0; + MoveObjectPlouf(m_blupiPos); + } + m_blupiAir = false; + m_blupiSurf = false; + m_blupiNage = true; + m_blupiLevel = 100; + m_jauges[0].SetLevel(m_blupiLevel); + m_jauges[0].SetMode(2); + m_jauges[0].SetHide(false); + } + if (m_blupiNage && IsSurfWater(m_blupiPos)) + { + m_blupiAir = false; + m_blupiNage = false; + m_blupiSurf = true; + PlaySound(25, m_blupiPos); + m_jauges[0].SetHide(true); + } + tinyPoint.X = m_blupiPos.X; + tinyPoint.Y = m_blupiPos.Y - 60; + if ((m_blupiSurf || m_blupiNage) && (m_blupiPos.Y % 64 == 64 - BLUPISURF || m_blupiPos.Y % 64 == 32) && IsOutWater(tinyPoint) && ((uint)m_keyPress & (true ? 1u : 0u)) != 0) + { + m_blupiNage = false; + m_blupiSurf = false; + m_blupiAir = true; + m_blupiAction = 5; + m_blupiPhase = 0; + m_blupiVitesseX = 0.0; + if (m_blupiPower) + { + m_blupiVitesseY = -16.0; + } + else + { + m_blupiVitesseY = -12.0; + } + MoveObjectTiplouf(m_blupiPos); + PlaySound(22, m_blupiPos); + m_jauges[0].SetHide(true); + } + if ((m_blupiSurf || m_blupiNage) && IsOutWater(m_blupiPos)) + { + if (m_blupiVitesseY < 0.0) + { + if (m_blupiTransport == -1) + { + m_blupiPos = blupiPos; + } + else + { + m_blupiTransport = -1; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiAir = true; + m_blupiAction = 5; + m_blupiPhase = 0; + m_blupiPos.Y -= 10; + m_blupiVitesseX = 0.0; + m_blupiVitesseY = -10.0; + PlaySound(22, m_blupiPos); + m_jauges[0].SetHide(true); + } + } + else if (m_blupiVitesseY > 0.0) + { + m_blupiNage = false; + m_blupiSurf = false; + m_blupiAir = false; + m_blupiAction = 5; + m_blupiPhase = 0; + m_blupiPos.Y += 30; + m_blupiVitesseX = 0.0; + m_blupiVitesseY = 0.0; + PlaySound(22, m_blupiPos); + m_jauges[0].SetHide(true); + } + else + { + m_blupiNage = false; + m_blupiSurf = false; + m_blupiAir = false; + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiPos.Y -= 10; + m_blupiVitesseX = 0.0; + m_blupiVitesseY = 0.0; + PlaySound(22, m_blupiPos); + m_jauges[0].SetHide(true); + } + } + if ((m_blupiSurf || m_blupiNage) && m_blupiActionOuf != 44) + { + m_blupiActionOuf = 44; + m_blupiTimeOuf = 0; + } + } + if ((m_blupiHelico || m_blupiOver || m_blupiJeep || m_blupiTank || m_blupiSkate) && m_blupiFocus && (IsSurfWater(m_blupiPos) || IsDeepWater(m_blupiPos))) + { + ByeByeHelico(); + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + celSwitch.X = m_blupiPos.X - 34; + celSwitch.Y = m_blupiPos.Y - 34; + ObjectStart(celSwitch, 9, 0); + m_decorAction = 1; + m_decorPhase = 0; + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(10, m_blupiPos); + } + if (m_blupiFocus && !m_blupiSuspend && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && m_blupiNoBarre == 0 && GetTypeBarre(m_blupiPos) == 1) + { + tinyPoint.X = m_blupiPos.X; + tinyPoint.Y = (m_blupiPos.Y + 22) / 64 * 64 + BLUPISUSPEND; + rect = BlupiRect(tinyPoint); + if (!DecorDetect(rect, true)) + { + m_blupiPos = tinyPoint; + m_blupiSuspend = true; + m_blupiAir = false; + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiActionOuf = 0; + PlaySound(34, m_blupiPos); + } + } + if (m_blupiNoBarre > 0) + { + m_blupiNoBarre--; + } + if (IsVentillo(m_blupiPos)) + { + if (m_blupiFocus && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + BlupiDead(11, 75); + } + celSwitch.X = m_blupiPos.X - 34; + celSwitch.Y = m_blupiPos.Y - 34; + ObjectStart(celSwitch, 11, 0); + m_decorAction = 2; + m_decorPhase = 0; + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(10, m_blupiPos); + } + if (m_blupiAction != 30 && m_blupiFocus) + { + icon = IsWorld(m_blupiPos); + if (icon != -1) + { + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(32, m_blupiPos); + m_blupiAction = 30; + m_blupiPhase = 0; + m_blupiFocus = false; + m_blupiFront = true; + } + } + int num26 = MoveObjectDetect(m_blupiPos, out bNear); + TinyPoint tinyPoint2 = default(TinyPoint); + if (m_blupiAction != 11 && m_blupiAction != 75 && m_blupiAction != 76 && m_blupiAction != 77 && m_blupiAction != 78 && m_blupiAction != 79 && m_blupiAction != 80 && m_blupiAction != 81) + { + if (IsLave(m_blupiPos) && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + BlupiDead(76, -1); + m_blupiRestart = true; + m_blupiPos.Y = m_blupiPos.Y / 64 * 64 + BLUPIOFFY; + PlaySound(8, m_blupiPos); + } + if (IsPiege(m_blupiPos) && !m_blupiOver && !m_blupiJeep && !m_blupiTank && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi && m_blupiFocus) + { + BlupiDead(54, -1); + m_blupiRestart = true; + m_blupiAir = true; + ObjectStart(m_blupiPos, 53, 0); + PlaySound(51, m_blupiPos); + } + if (IsGoutte(m_blupiPos, false) && !m_blupiOver && !m_blupiJeep && !m_blupiTank && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi && m_blupiFocus) + { + BlupiDead(54, -1); + m_blupiRestart = true; + m_blupiAir = true; + PlaySound(51, m_blupiPos); + } + if (IsScie(m_blupiPos) && !m_blupiOver && !m_blupiJeep && !m_blupiTank && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi && m_blupiFocus) + { + BlupiDead(77, -1); + m_blupiFront = true; + m_blupiRestart = true; + m_blupiAir = true; + } + if (ButtonPressed == Def.ButtonGlygh.PlayAction && (num26 == -1 || !bNear) && IsSwitch(m_blupiPos, ref celSwitch) && !m_blupiOver && !m_blupiBalloon && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi && m_blupiFocus) + { + ButtonPressed = Def.ButtonGlygh.None; + ActiveSwitch(m_decor[celSwitch.X, celSwitch.Y].icon == 385, celSwitch); + m_blupiAction = 82; + m_blupiPhase = 0; + m_blupiFocus = false; + m_blupiVitesseX = 0.0; + m_blupiVitesseY = 0.0; + } + if (IsBlitz(m_blupiPos, false) && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + BlupiDead(11, -1); + m_blupiRestart = true; + m_blupiAir = true; + m_blupiPos.Y = m_blupiPos.Y / 64 * 64 + BLUPIOFFY; + PlaySound(8, m_blupiPos); + } + if (IsEcraseur(m_blupiPos) && !m_blupiEcrase && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi && m_blupiFocus) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiVitesseX = 0.0; + m_blupiVitesseY = 0.0; + m_blupiEcrase = true; + m_blupiBalloon = false; + m_blupiAir = false; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiSuspend = false; + m_blupiJumpAie = false; + m_blupiShield = false; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiTimeShield = 100; + m_blupiPosMagic = m_blupiPos; + m_jauges[1].SetHide(false); + if (!m_blupiJeep && !m_blupiTank) + { + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + } + PlaySound(70, m_blupiPos); + ObjectStart(m_blupiPos, 41, -60); + ObjectStart(m_blupiPos, 41, 60); + ObjectStart(m_blupiPos, 41, 10); + ObjectStart(m_blupiPos, 41, -10); + celSwitch.X = m_blupiPos.X - 34; + celSwitch.Y = m_blupiPos.Y - 34; + ObjectStart(celSwitch, 90, 0); + m_decorAction = 2; + m_decorPhase = 0; + } + if (IsTeleporte(m_blupiPos) != -1 && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiAir && m_blupiFocus && m_blupiPosHelico.X == -1) + { + m_blupiAction = 74; + m_blupiPhase = 0; + m_blupiVitesseX = 0.0; + m_blupiVitesseY = 0.0; + m_blupiFocus = false; + m_blupiPos.X = m_blupiPos.X / 64 * 64; + PlaySound(71, m_blupiPos); + celSwitch.X = m_blupiPos.X; + celSwitch.Y = m_blupiPos.Y - 5; + ObjectStart(celSwitch, 92, 0); + } + if (IsBridge(m_blupiPos, ref celBridge) && m_blupiFocus) + { + celBridge.X *= 64; + celBridge.Y *= 64; + ObjectStart(celBridge, 52, 0); + } + int num = IsDoor(m_blupiPos, ref celBridge); + if (num != -1 && (m_blupiCle & (1 << num - 334)) != 0) + { + OpenDoor(celBridge); + m_blupiCle &= ~(1 << num - 334); + celSwitch.X = 520; + celSwitch.Y = 418; + tinyPoint2.X = celBridge.X * 64 - m_posDecor.X; + tinyPoint2.Y = celBridge.Y * 64 - m_posDecor.Y; + VoyageInit(celSwitch, m_pixmap.HotSpotToHud(tinyPoint2), 214 + (num - 334) * 7, 10); + } + } + if (!m_blupiHelico && !m_blupiSuspend && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiSkate && !m_blupiJeep && !m_blupiTank && !m_blupiJeep && m_blupiFocus) + { + icon = MockeryDetect(m_blupiPos); + if (icon != 0) + { + m_blupiActionOuf = icon; + m_blupiTimeOuf = 0; + } + } + MoveObjectFollow(m_blupiPos); + icon = num26; + if (icon != -1 && !bNear && m_moveObject[icon].type == 2 && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && !m_blupiShield && !m_bSuperBlupi && m_blupiFocus) + { + m_blupiActionOuf = 48; + m_blupiTimeOuf = 0; + } + if (icon != -1 && bNear) + { + if (m_moveObject[icon].type == 13 && (ButtonPressed == Def.ButtonGlygh.PlayAction || IsFloatingObject(icon)) && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + ButtonPressed = Def.ButtonGlygh.None; + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + m_scrollAdd.X = 0; + m_scrollAdd.Y = 0; + m_blupiAir = false; + m_blupiHelico = true; + m_blupiRealRotation = 0; + m_blupiVitesseX = 0.0; + if (m_blupiCloud || m_blupiHide) + { + m_blupiCloud = false; + m_blupiHide = false; + m_jauges[1].SetHide(true); + } + } + if (ButtonPressed == Def.ButtonGlygh.PlayAction && m_moveObject[icon].type == 46 && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + ButtonPressed = Def.ButtonGlygh.None; + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + m_scrollAdd.X = 0; + m_scrollAdd.Y = 0; + m_blupiAir = false; + m_blupiOver = true; + m_blupiVitesseX = 0.0; + if (m_blupiCloud || m_blupiHide) + { + m_blupiCloud = false; + m_blupiHide = false; + m_jauges[1].SetHide(true); + } + } + if (ButtonPressed == Def.ButtonGlygh.PlayAction && m_moveObject[icon].type == 19 && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + ButtonPressed = Def.ButtonGlygh.None; + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + m_scrollAdd.X = 0; + m_scrollAdd.Y = 0; + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiAir = false; + m_blupiJeep = true; + m_blupiVitesseX = 0.0; + if (m_blupiCloud || m_blupiHide) + { + m_blupiCloud = false; + m_blupiHide = false; + m_jauges[1].SetHide(true); + } + } + if (ButtonPressed == Def.ButtonGlygh.PlayAction && m_moveObject[icon].type == 28 && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + ButtonPressed = Def.ButtonGlygh.None; + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + m_scrollAdd.X = 0; + m_scrollAdd.Y = 0; + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiAir = false; + m_blupiTank = true; + m_blupiVitesseX = 0.0; + if (m_blupiCloud || m_blupiHide) + { + m_blupiCloud = false; + m_blupiHide = false; + m_jauges[1].SetHide(true); + } + } + if (m_moveObject[icon].type == 29 && m_blupiFocus && m_blupiBullet < 10) + { + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + celSwitch.X = m_moveObject[icon].posCurrent.X - m_posDecor.X; + celSwitch.Y = m_moveObject[icon].posCurrent.Y - m_posDecor.Y; + tinyPoint2.X = 570; + tinyPoint2.Y = 430; + VoyageInit(m_pixmap.HotSpotToHud(celSwitch), tinyPoint2, 177, 10); + m_blupiBullet += 10; + if (m_blupiBullet > 10) + { + m_blupiBullet = 10; + } + } + if (ButtonPressed == Def.ButtonGlygh.PlayAction && m_moveObject[icon].type == 24 && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus) + { + ButtonPressed = Def.ButtonGlygh.None; + m_scrollAdd.X = 0; + m_scrollAdd.Y = 0; + m_blupiAction = 42; + m_blupiPhase = 0; + m_blupiPos.Y = m_moveObject[icon].posCurrent.Y / 64 * 64 + BLUPIOFFY; + m_blupiFocus = false; + m_blupiAir = false; + m_blupiSkate = true; + m_blupiVitesseX = 0.0; + if (m_blupiCloud || m_blupiHide) + { + m_blupiCloud = false; + m_blupiHide = false; + m_jauges[1].SetHide(true); + } + } + if ((m_moveObject[icon].type == 3 || m_moveObject[icon].type == 16 || m_moveObject[icon].type == 96 || m_moveObject[icon].type == 97) && m_blupiBalloon && m_blupiPosHelico.X == -1) + { + m_blupiBalloon = false; + m_blupiAir = true; + m_blupiTimeShield = 0; + m_jauges[1].SetHide(true); + m_decorAction = 0; + celSwitch.X = m_blupiPos.X - 34; + celSwitch.Y = m_blupiPos.Y - 34; + ObjectStart(celSwitch, 91, 0); + PlaySound(41, m_blupiPos); + m_blupiPos.Y += 4; + m_blupiVitesseY = 0.0; + m_blupiPosHelico = m_blupiPos; + } + else if ((m_moveObject[icon].type == 2 || m_moveObject[icon].type == 3 || m_moveObject[icon].type == 96 || m_moveObject[icon].type == 97 || m_moveObject[icon].type == 16 || m_moveObject[icon].type == 4 || m_moveObject[icon].type == 17 || m_moveObject[icon].type == 20) && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi && m_blupiPosHelico.X == -1) + { + if (!m_blupiJeep && !m_blupiTank && !m_blupiSkate && (m_blupiFocus || m_blupiAction == 5 || m_blupiAction == 36)) + { + if (m_blupiHelico || m_blupiOver || m_blupiBalloon || m_blupiEcrase) + { + m_blupiAir = true; + } + BlupiDead(11, 75); + } + if (m_moveObject[icon].type == 17 || m_moveObject[icon].type == 20) + { + celSwitch = m_moveObject[icon].posCurrent; + ObjectDelete(celSwitch, m_moveObject[icon].type); + celSwitch.X -= 34; + celSwitch.Y -= 34; + ObjectStart(celSwitch, 10, 0); + m_decorAction = 2; + m_decorPhase = 0; + } + else + { + celSwitch = m_moveObject[icon].posCurrent; + ObjectDelete(celSwitch, m_moveObject[icon].type); + celSwitch.X -= 34; + celSwitch.Y -= 34; + ObjectStart(celSwitch, 8, 0); + m_decorAction = 1; + m_decorPhase = 0; + } + if (!m_blupiJeep && !m_blupiTank) + { + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + } + PlaySound(10, m_moveObject[icon].posCurrent); + } + if (m_moveObject[icon].type == 44 && m_blupiFocus && !m_blupiBalloon && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + ByeByeHelico(); + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiVitesseX = 0.0; + m_blupiVitesseY = 0.0; + m_blupiBalloon = true; + m_blupiEcrase = false; + m_blupiAir = false; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiSuspend = false; + m_blupiJumpAie = false; + m_blupiShield = false; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiTimeShield = 100; + m_blupiPosMagic = m_blupiPos; + m_jauges[1].SetHide(false); + if (!m_blupiJeep && !m_blupiTank) + { + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + } + PlaySound(40, m_moveObject[icon].posCurrent); + celSwitch.X = m_blupiPos.X - 34; + celSwitch.Y = m_blupiPos.Y - 34; + ObjectStart(celSwitch, 90, 0); + m_decorAction = 5; + m_decorPhase = 0; + } + if (m_moveObject[icon].type == 54 && m_moveObject[icon].step != 2 && m_moveObject[icon].step != 4 && m_blupiFocus && !m_blupiBalloon && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + ByeByeHelico(); + celSwitch.X = m_blupiPos.X; + celSwitch.Y = (m_blupiPos.Y + 64 - 10) / 64 * 64 + 4; + ObjectStart(celSwitch, 53, 0); + m_blupiAction = 54; + m_blupiPhase = 0; + m_blupiSuspend = false; + m_blupiJumpAie = false; + m_blupiFocus = false; + m_blupiRestart = true; + if (flag2) + { + m_blupiAir = true; + } + if (m_blupiHelico || m_blupiOver || m_blupiBalloon || m_blupiEcrase || m_blupiJeep || m_blupiTank || m_blupiSkate) + { + m_blupiHelico = false; + m_blupiOver = false; + m_blupiBalloon = false; + m_blupiEcrase = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + celSwitch = m_moveObject[icon].posCurrent; + celSwitch.X -= 34; + celSwitch.Y -= 34; + ObjectStart(celSwitch, 10, 0); + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(10, m_moveObject[icon].posCurrent); + m_decorAction = 1; + m_decorPhase = 0; + } + else + { + PlaySound(51, m_moveObject[icon].posCurrent); + } + m_blupiCloud = false; + m_blupiHide = false; + m_jauges[1].SetHide(true); + } + if (m_moveObject[icon].type == 23 && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi && m_blupiAction != 13 && m_blupiAction != 30 && m_blupiAction != 11 && m_blupiAction != 75 && m_blupiAction != 76 && m_blupiAction != 77 && m_blupiAction != 78 && m_blupiAction != 79 && m_blupiAction != 80 && m_blupiAction != 81 && m_blupiAction != 54 && m_blupiAction != 57 && m_blupiAction != 35) + { + ByeByeHelico(); + celSwitch = m_moveObject[icon].posCurrent; + ObjectDelete(celSwitch, m_moveObject[icon].type); + m_blupiAction = 54; + m_blupiPhase = 0; + m_blupiSuspend = false; + m_blupiJumpAie = false; + m_blupiFocus = false; + m_blupiRestart = true; + if (flag2) + { + m_blupiAir = true; + } + if (m_blupiHelico || m_blupiOver || m_blupiBalloon || m_blupiEcrase || m_blupiJeep || m_blupiTank || m_blupiSkate) + { + m_blupiHelico = false; + m_blupiOver = false; + m_blupiBalloon = false; + m_blupiEcrase = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + } + StartSploutchGlu(m_moveObject[icon].posCurrent); + m_blupiCloud = false; + m_blupiHide = false; + m_jauges[1].SetHide(true); + } + if (m_moveObject[icon].type == 5) + { + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + celSwitch.X = m_moveObject[icon].posCurrent.X - m_posDecor.X; + celSwitch.Y = m_moveObject[icon].posCurrent.Y - m_posDecor.Y; + TinyPoint end2 = default(TinyPoint); + end2.X = 430; + end2.Y = 430; + VoyageInit(m_pixmap.HotSpotToHud(celSwitch), end2, 6, 10); + ObjectStart(m_moveObject[icon].posCurrent, 39, -60); + ObjectStart(m_moveObject[icon].posCurrent, 39, 60); + ObjectStart(m_moveObject[icon].posCurrent, 39, 10); + ObjectStart(m_moveObject[icon].posCurrent, 39, -10); + } + if (m_moveObject[icon].type == 49 && (m_voyageIcon != 215 || m_voyageChannel != 10) && (m_blupiCle & 1) == 0) + { + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + celSwitch.X = m_moveObject[icon].posCurrent.X - m_posDecor.X; + celSwitch.Y = m_moveObject[icon].posCurrent.Y - m_posDecor.Y; + TinyPoint end3 = default(TinyPoint); + end3.X = 520; + end3.Y = 418; + VoyageInit(m_pixmap.HotSpotToHud(celSwitch), end3, 215, 10); + ObjectStart(m_moveObject[icon].posCurrent, 39, -60); + ObjectStart(m_moveObject[icon].posCurrent, 39, 60); + ObjectStart(m_moveObject[icon].posCurrent, 39, 10); + ObjectStart(m_moveObject[icon].posCurrent, 39, -10); + } + if (m_moveObject[icon].type == 50 && (m_voyageIcon != 222 || m_voyageChannel != 10) && (m_blupiCle & 2) == 0) + { + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + celSwitch.X = m_moveObject[icon].posCurrent.X - m_posDecor.X; + celSwitch.Y = m_moveObject[icon].posCurrent.Y - m_posDecor.Y; + TinyPoint end4 = default(TinyPoint); + end4.X = 530; + end4.Y = 418; + VoyageInit(m_pixmap.HotSpotToHud(celSwitch), end4, 222, 10); + ObjectStart(m_moveObject[icon].posCurrent, 39, -60); + ObjectStart(m_moveObject[icon].posCurrent, 39, 60); + ObjectStart(m_moveObject[icon].posCurrent, 39, 10); + ObjectStart(m_moveObject[icon].posCurrent, 39, -10); + } + if (m_moveObject[icon].type == 51 && (m_voyageIcon != 229 || m_voyageChannel != 10) && (m_blupiCle & 4) == 0) + { + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + celSwitch.X = m_moveObject[icon].posCurrent.X - m_posDecor.X; + celSwitch.Y = m_moveObject[icon].posCurrent.Y - m_posDecor.Y; + TinyPoint end5 = default(TinyPoint); + end5.X = 540; + end5.Y = 418; + VoyageInit(m_pixmap.HotSpotToHud(celSwitch), end5, 229, 10); + ObjectStart(m_moveObject[icon].posCurrent, 39, -60); + ObjectStart(m_moveObject[icon].posCurrent, 39, 60); + ObjectStart(m_moveObject[icon].posCurrent, 39, 10); + ObjectStart(m_moveObject[icon].posCurrent, 39, -10); + } + if (m_moveObject[icon].type == 6 && m_nbVies < 10 && m_blupiFocus) + { + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + celSwitch.X = m_moveObject[icon].posCurrent.X - m_posDecor.X; + celSwitch.Y = m_moveObject[icon].posCurrent.Y - m_posDecor.Y; + VoyageInit(m_pixmap.HotSpotToHud(celSwitch), VoyageGetPosVie(m_nbVies + 1), 21, 10); + } + if (m_moveObject[icon].type == 25 && !m_blupiShield && !m_blupiHide && !m_blupiPower && m_blupiFocus) + { + PlaySound(42, m_moveObject[icon].posCurrent); + m_blupiShield = true; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiTimeShield = 100; + m_blupiPosMagic = m_blupiPos; + m_jauges[1].SetHide(false); + } + if (ButtonPressed == Def.ButtonGlygh.PlayAction && m_moveObject[icon].type == 26 && !m_blupiShield && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && m_blupiFocus) + { + ButtonPressed = Def.ButtonGlygh.None; + m_sucettePos = m_moveObject[icon].posCurrent; + m_sucetteType = m_moveObject[icon].type; + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + m_blupiAction = 49; + m_blupiPhase = 0; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiFocus = false; + PlaySound(50, end); + } + if (m_moveObject[icon].type == 40 && !m_blupiHide && m_blupiFocus) + { + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + m_blupiInvert = true; + m_blupiTimeShield = 100; + m_blupiPosMagic = m_blupiPos; + m_jauges[1].SetHide(false); + PlaySound(66, end); + ObjectStart(m_blupiPos, 41, -60); + ObjectStart(m_blupiPos, 41, 60); + ObjectStart(m_blupiPos, 41, 10); + ObjectStart(m_blupiPos, 41, -10); + } + if (ButtonPressed == Def.ButtonGlygh.PlayAction && m_moveObject[icon].type == 30 && !m_blupiShield && !m_blupiCloud && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && m_blupiFocus) + { + ButtonPressed = Def.ButtonGlygh.None; + m_sucettePos = m_moveObject[icon].posCurrent; + m_sucetteType = m_moveObject[icon].type; + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + m_blupiAction = 55; + m_blupiPhase = 0; + m_blupiShield = false; + m_blupiPower = false; + m_blupiJumpAie = false; + m_blupiFocus = false; + PlaySound(57, end); + } + if (m_moveObject[icon].type == 31 && !m_blupiShield && !m_blupiHide && !m_blupiPower && !m_blupiCloud && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && m_blupiFocus) + { + m_blupiAction = 56; + m_blupiPhase = 0; + m_blupiShield = false; + m_blupiPower = false; + m_blupiJumpAie = false; + m_blupiFocus = false; + m_blupiCloud = true; + m_blupiTimeShield = 100; + PlaySound(58, end); + if (m_blupiHide) + { + m_blupiHide = false; + m_jauges[1].SetHide(true); + } + } + if (m_moveObject[icon].type >= 200 && m_moveObject[icon].type <= 203 && m_blupiFocus) + { + if (m_moveObject[icon].type == 200) + { + if (m_blupiPerso < 5 && ButtonPressed == Def.ButtonGlygh.PlayAction) + { + ButtonPressed = Def.ButtonGlygh.None; + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + celSwitch.X = m_moveObject[icon].posCurrent.X - m_posDecor.X; + celSwitch.Y = m_moveObject[icon].posCurrent.Y - m_posDecor.Y; + tinyPoint2.X = 0; + tinyPoint2.Y = 438; + VoyageInit(m_pixmap.HotSpotToHud(celSwitch), tinyPoint2, 108, 4); + } + } + else if (!m_blupiShield && !m_blupiHide && !m_bSuperBlupi) + { + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + BlupiDead(11, 75); + celSwitch = m_moveObject[icon].posCurrent; + celSwitch.X -= 34; + celSwitch.Y -= 34; + ObjectStart(celSwitch, 10, 0); + PlaySound(10, m_moveObject[icon].posCurrent); + m_decorAction = 1; + m_decorPhase = 0; + } + } + if (m_moveObject[icon].type == 55 && m_blupiFocus && m_blupiDynamite == 0 && (m_voyageIcon != 252 || m_voyageChannel != 10) && ButtonPressed == Def.ButtonGlygh.PlayAction) + { + ButtonPressed = Def.ButtonGlygh.None; + ObjectDelete(m_moveObject[icon].posCurrent, m_moveObject[icon].type); + celSwitch.X = m_moveObject[icon].posCurrent.X - m_posDecor.X; + celSwitch.Y = m_moveObject[icon].posCurrent.Y - m_posDecor.Y; + tinyPoint2.X = 505; + tinyPoint2.Y = 414; + VoyageInit(m_pixmap.HotSpotToHud(celSwitch), tinyPoint2, 252, 10); + m_blupiAction = 86; + m_blupiPhase = 0; + m_blupiFocus = false; + } + if (m_moveObject[icon].type == 12 && !m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && !m_blupiSuspend && m_blupiFocus && m_blupiAction == 2) + { + end = m_moveObject[icon].posCurrent; + if (m_blupiDir == 1 && m_blupiPos.X > end.X) + { + end.X = m_blupiPos.X - 59; + PlaySound(38, end); + m_blupiActionOuf = 45; + m_blupiTimeOuf = 0; + m_blupiAction = 14; + m_blupiPhase = 0; + } + if (m_blupiDir == 2 && m_blupiPos.X < end.X) + { + end.X = m_blupiPos.X + 55; + PlaySound(38, end); + m_blupiActionOuf = 45; + m_blupiTimeOuf = 0; + m_blupiAction = 14; + m_blupiPhase = 0; + } + if (!TestPushCaisse(icon, end, false)) + { + m_blupiPos.X = blupiPos.X; + } + } + if ((m_moveObject[icon].type == 7 || m_moveObject[icon].type == 21) && m_blupiFocus) + { + if (m_goalPhase == 0) + { + if (m_nbTresor >= m_totalTresor) + { + if (m_moveObject[icon].type == 21) + { + m_bFoundCle = true; + } + ByeByeHelico(); + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(14, m_moveObject[icon].posCurrent); + m_blupiAction = 13; + m_blupiPhase = 0; + m_blupiFocus = false; + m_blupiFront = true; + m_blupiPos.Y = m_moveObject[icon].posCurrent.Y; + } + else + { + PlaySound(13, m_moveObject[icon].posCurrent); + } + m_goalPhase = 50; + } + else + { + m_goalPhase--; + } + } + else + { + m_goalPhase = 0; + } + } + else + { + m_goalPhase = 0; + } + if (m_blupiAction == 14 && m_blupiFocus) + { + icon = CaisseInFront(); + if (icon != -1) + { + end = m_moveObject[icon].posCurrent; + if (m_blupiDir == 1) + { + end.X = m_blupiPos.X - 59; + } + else + { + end.X = m_blupiPos.X + 55; + } + if (!TestPushCaisse(icon, end, false)) + { + m_blupiPos.X = blupiPos.X; + } + } + else + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + } + if (m_blupiAction == 29 && m_blupiFocus) + { + icon = CaisseInFront(); + if (icon != -1) + { + end = m_moveObject[icon].posCurrent; + if (m_blupiDir == 1) + { + end.X = m_blupiPos.X - 59; + } + else + { + end.X = m_blupiPos.X + 55; + } + if (!TestPushCaisse(icon, end, true)) + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + } + else + { + m_blupiAction = 1; + m_blupiPhase = 0; + } + } + if (!m_blupiHelico && !m_blupiOver && !m_blupiBalloon && !m_blupiEcrase && !m_blupiJeep && !m_blupiTank && !m_blupiSkate && !m_blupiNage && !m_blupiSurf && m_blupiFocus) + { + if (m_blupiActionOuf == 44 && m_blupiAction == 1) + { + if (m_blupiTimeOuf > 50) + { + m_blupiAction = m_blupiActionOuf; + m_blupiPhase = 0; + PlaySound(46, m_blupiPos); + } + m_blupiActionOuf = 0; + } + if (m_blupiActionOuf == 45 && m_blupiAction == 1) + { + if (m_blupiTimeOuf > 50) + { + m_blupiAction = m_blupiActionOuf; + m_blupiPhase = 0; + } + m_blupiActionOuf = 0; + } + if (m_blupiAction == 45 && m_blupiPhase == 4) + { + PlaySound(46, m_blupiPos); + } + if (m_blupiActionOuf == 65 && m_blupiAction == 1) + { + if (m_blupiTimeOuf > 10 && m_blupiTimeOuf < 50) + { + m_blupiAction = m_blupiActionOuf; + m_blupiPhase = 0; + } + m_blupiActionOuf = 0; + } + if (m_blupiActionOuf == 47 && m_blupiAction == 1) + { + if (m_blupiTimeOuf > 60) + { + m_blupiAction = m_blupiActionOuf; + m_blupiPhase = 0; + PlaySound(48, m_blupiPos); + } + m_blupiActionOuf = 0; + } + if (m_blupiActionOuf == 48 && m_blupiAction == 1) + { + if (m_blupiTimeOuf < 10) + { + m_blupiAction = m_blupiActionOuf; + m_blupiPhase = 0; + PlaySound(49, m_blupiPos); + } + m_blupiActionOuf = 0; + } + if ((m_blupiActionOuf == 63 || m_blupiActionOuf == 64 || m_blupiActionOuf == 83) && m_blupiAction == 1) + { + if (m_blupiTimeOuf < 20) + { + m_blupiAction = m_blupiActionOuf; + m_blupiPhase = 0; + } + m_blupiActionOuf = 0; + } + } + if (m_blupiAction == 2 && m_blupiActionOuf != 63 && m_blupiActionOuf != 64 && m_blupiActionOuf != 83 && !m_blupiSurf && !m_blupiNage) + { + m_blupiActionOuf = 0; + } + if (m_blupiActionOuf != 0) + { + m_blupiTimeOuf++; + } + if (m_blupiTimeMockery > 0) + { + m_blupiTimeMockery--; + } + if (m_blupiAction == 86 && m_blupiPhase == 18) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + if (m_blupiAction == 87 && m_blupiPhase == 26) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + if (m_blupiPos.X - 30 > m_blupiPosHelico.X || m_blupiPos.X + 30 < m_blupiPosHelico.X || m_blupiPos.Y - 30 > m_blupiPosHelico.Y || m_blupiPos.Y + 30 < m_blupiPosHelico.Y) + { + m_blupiPosHelico.X = -1; + } + if (m_blupiTimeFire > 0) + { + m_blupiTimeFire--; + } + if (m_blupiAction == 74 && m_blupiPhase == 128) + { + TinyPoint newpos = default(TinyPoint); + if (SearchTeleporte(m_blupiPos, ref newpos)) + { + m_blupiPos = newpos; + ObjectStart(m_blupiPos, 27, 20); + ObjectStart(m_blupiPos, 27, -20); + } + m_blupiFocus = true; + m_blupiPosHelico = m_blupiPos; + } + if (m_blupiAction == 82 && m_blupiPhase == 10) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + if (ButtonPressed == Def.ButtonGlygh.PlayAction && m_blupiAction == 1) + { + m_blupiAction = 84; + m_blupiPhase = 0; + PlaySound(27, m_blupiPos); + } + if ((m_blupiAction == 11 && m_blupiPhase == 70) || (m_blupiAction == 75 && m_blupiPhase == 100) || (m_blupiAction == 76 && m_blupiPhase == 70) || (m_blupiAction == 77 && m_blupiPhase == 110) || (m_blupiAction == 78 && m_blupiPhase == 90) || (m_blupiAction == 79 && m_blupiPhase == 90) || (m_blupiAction == 80 && m_blupiPhase == 90) || (m_blupiAction == 81 && m_blupiPhase == 90) || (m_blupiAction == 24 && m_blupiPhase == 90) || (m_blupiAction == 54 && m_blupiPhase == 100) || (m_blupiAction == 57 && m_blupiPhase == 90)) + { + if (m_nbVies > 0) + { + m_blupiAction = 35; + m_blupiIcon = -1; + m_blupiPhase = 0; + if (m_blupiRestart) + { + m_blupiPos = m_blupiValidPos; + } + TinyPoint posDecor = GetPosDecor(m_blupiPos); + celSwitch.X = m_blupiPos.X - posDecor.X - 30; + celSwitch.Y = m_blupiPos.Y - posDecor.Y; + VoyageInit(VoyageGetPosVie(m_nbVies), m_pixmap.HotSpotToHud(celSwitch), 48, 2); + } + else + { + m_nbVies = -1; + m_term = -1; + DoorsLost(); + } + m_blupiFront = false; + } + num2 = ((m_dimDecor.Y != 0) ? 6400 : 480); + if (m_blupiPos.Y >= num2 + 1 && m_blupiPos.Y <= num2 + 40) + { + PlaySound(8, m_blupiPos); + } + if (m_blupiPos.Y > num2 + 1000) + { + m_term = -1; + DoorsLost(); + } + if (m_blupiAction == 13 && m_blupiPhase == 40) + { + if (m_bPrivate) + { + m_term = 1; + } + else if (m_mission == 1) + { + m_term = 199; + } + else if (m_mission == 199) + { + m_term = -2; + } + else if (m_bFoundCle) + { + OpenGoldsWin(); + m_term = 1; + } + else + { + OpenDoorsWin(); + m_term = m_mission / 10 * 10; + } + } + if (m_blupiAction == 30 && m_blupiPhase == 30) + { + icon = IsWorld(m_blupiPos); + if (icon != -1) + { + if (m_mission == 1) + { + m_term = icon * 10; + } + else if (icon == 199) + { + m_term = 1; + } + else + { + m_term = m_mission / 10 * 10 + icon; + } + } + } + if (blupiAction == 63 && m_blupiAction != 63) + { + StopSound(65); + } + if (blupiAction == 64 && m_blupiAction != 64) + { + StopSound(65); + } + if (blupiAction == 83 && m_blupiAction != 83) + { + StopSound(47); + } + if (m_blupiFocus && !m_blupiAir && (!m_blupiHelico || BlupiIsGround()) && (!m_blupiOver || BlupiIsGround()) && !m_blupiBalloon && !m_blupiEcrase && !m_blupiShield && !m_blupiHide && !bVertigoLeft && !bVertigoRight && m_blupiTransport == -1 && !IsLave(m_blupiPos) && !IsPiege(m_blupiPos) && !IsGoutte(m_blupiPos, true) && !IsScie(m_blupiPos) && !IsBridge(m_blupiPos, ref celSwitch) && IsTeleporte(m_blupiPos) == -1 && !IsBlitz(m_blupiPos, true) && !IsTemp(m_blupiPos) && !IsBalleTraj(m_blupiPos) && !IsMoveTraj(m_blupiPos)) + { + if (m_blupiFifoNb > 0) + { + m_blupiValidPos = m_blupiFifoPos[0]; + } + BlupiAddFifo(m_blupiPos); + } + end.X = m_blupiPos.X + 30 + m_scrollAdd.X; + end.Y = m_blupiPos.Y + 30 + m_scrollAdd.Y; + int num27 = Math.Abs(m_scrollPoint.X - end.X); + int num28 = Math.Abs(m_scrollPoint.Y - end.Y); + num3 = SCROLL_SPEED; + if (num27 > SCROLL_MARGX * 2) + { + num3 += (num27 - SCROLL_MARGX * 2) / 4; + } + if (num28 > SCROLL_MARGY * 2) + { + num3 += (num28 - SCROLL_MARGY * 2) / 4; + } + if (m_scrollPoint.X < end.X) + { + m_scrollPoint.X += num3; + if (m_scrollPoint.X >= end.X) + { + m_scrollPoint.X = end.X; + } + } + if (m_scrollPoint.X > end.X) + { + m_scrollPoint.X -= num3; + if (m_scrollPoint.X <= end.X) + { + m_scrollPoint.X = end.X; + } + } + if (m_scrollPoint.Y < end.Y) + { + m_scrollPoint.Y += num3; + if (m_scrollPoint.Y >= end.Y) + { + m_scrollPoint.Y = end.Y; + } + } + if (m_scrollPoint.Y > end.Y) + { + m_scrollPoint.Y -= num3; + if (m_scrollPoint.Y <= end.Y) + { + m_scrollPoint.Y = end.Y; + } + } + if (m_blupiAction != 75 && m_blupiAction != 76) + { + m_posDecor = GetPosDecor(m_scrollPoint); + } + if (m_time % 4 == 0) + { + PosSound(m_blupiPos); + } + VoyageStep(); + m_blupiLastSpeedX = m_blupiSpeedX; + m_blupiLastSpeedY = m_blupiSpeedY; + m_lastKeyPress = m_keyPress; + } + + private void BlupiDead(int action1, int action2) + { + ByeByeHelico(); + if (action2 == -1) + { + m_blupiAction = action1; + } + else + { + m_blupiAction = ((m_random.Next() % 2 == 0) ? action1 : action2); + } + m_blupiPhase = 0; + m_blupiFocus = false; + m_blupiHelico = false; + m_blupiOver = false; + m_blupiJeep = false; + m_blupiTank = false; + m_blupiSkate = false; + m_blupiNage = false; + m_blupiSurf = false; + m_blupiSuspend = false; + m_blupiJumpAie = false; + m_blupiShield = false; + m_blupiPower = false; + m_blupiCloud = false; + m_blupiHide = false; + m_blupiInvert = false; + m_blupiBalloon = false; + m_blupiEcrase = false; + m_blupiRestart = false; + m_blupiActionOuf = 0; + m_jauges[0].SetHide(true); + m_jauges[1].SetHide(true); + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + TinyPoint pos = default(TinyPoint); + TinyPoint pos2 = default(TinyPoint); + if (m_blupiAction == 75) + { + pos.X = m_blupiPos.X - m_posDecor.X; + pos.Y = m_blupiPos.Y - m_posDecor.Y; + pos2.X = m_blupiPos.X - m_posDecor.X; + pos2.Y = m_blupiPos.Y - m_posDecor.Y - 300; + VoyageInit(m_pixmap.HotSpotToHud(pos), m_pixmap.HotSpotToHud(pos2), 230, 10); + PlaySound(74, m_blupiPos); + } + if (m_blupiAction == 76) + { + pos.X = m_blupiPos.X - m_posDecor.X; + pos.Y = m_blupiPos.Y - m_posDecor.Y; + pos2.X = m_blupiPos.X - m_posDecor.X; + pos2.Y = m_blupiPos.Y - m_posDecor.Y - 2000; + VoyageInit(m_pixmap.HotSpotToHud(pos), m_pixmap.HotSpotToHud(pos2), 40, 10); + PlaySound(74, m_blupiPos); + } + if (m_blupiAction == 77) + { + ObjectStart(m_blupiPos, 41, -70); + ObjectStart(m_blupiPos, 41, 20); + ObjectStart(m_blupiPos, 41, -20); + PlaySound(75, m_blupiPos); + } + } + + private TinyPoint GetPosDecor(TinyPoint pos) + { + TinyPoint result = default(TinyPoint); + if (m_dimDecor.X == 0) + { + result.X = 0; + } + else + { + result.X = pos.X - m_drawBounds.Width / 2; + result.X = Math.Max(result.X, 0); + result.X = Math.Min(result.X, 6400 - m_drawBounds.Width); + } + if (m_dimDecor.Y == 0) + { + result.Y = 0; + } + else + { + result.Y = pos.Y - m_drawBounds.Height / 2; + result.Y = Math.Max(result.Y, 0); + result.Y = Math.Min(result.Y, 6400 - m_drawBounds.Height); + } + return result; + } + + private void BlupiAddFifo(TinyPoint pos) + { + if (m_blupiFifoNb < 10) + { + if (m_blupiFifoNb <= 0 || pos.X != m_blupiFifoPos[m_blupiFifoNb - 1].X || pos.Y != m_blupiFifoPos[m_blupiFifoNb - 1].Y) + { + m_blupiFifoPos[m_blupiFifoNb] = pos; + m_blupiFifoNb++; + } + } + else if (pos.X != m_blupiFifoPos[9].X || pos.Y != m_blupiFifoPos[9].Y) + { + for (int i = 0; i < 9; i++) + { + m_blupiFifoPos[i] = m_blupiFifoPos[i + 1]; + } + m_blupiFifoPos[9] = pos; + } + } + + private bool DecorDetect(TinyRect rect) + { + return DecorDetect(rect, true); + } + + private bool DecorDetect(TinyRect rect, bool bCaisse) + { + m_detectIcon = -1; + if (rect.Left < 0 || rect.Top < 0) + { + return true; + } + int num = ((m_dimDecor.X != 0) ? 6400 : 640); + if (rect.Right > num) + { + return true; + } + if (m_blupiHelico || m_blupiOver || m_blupiBalloon || m_blupiEcrase || m_blupiNage || m_blupiSurf) + { + num = ((m_dimDecor.Y != 0) ? 6400 : 480); + if (rect.Bottom > num) + { + return true; + } + } + int num2 = rect.Left / 16; + int num3 = (rect.Right + 16 - 1) / 16; + int num4 = rect.Top / 16; + int num5 = (rect.Bottom + 16 - 1) / 16; + TinyRect src = default(TinyRect); + TinyRect dst; + for (int i = num4; i <= num5; i++) + { + for (int j = num2; j <= num3; j++) + { + int num6 = j / 4; + int num7 = i / 4; + if (num6 < 0 || num6 >= 100 || num7 < 0 || num7 >= 100) + { + continue; + } + int icon = m_decor[num6, num7].icon; + if (icon < 0 || icon >= MAXQUART || (m_blupiHelico && icon == 214) || (m_blupiOver && icon == 214) || (icon == 324 && m_time / 4 % 20 >= 18)) + { + continue; + } + num6 = j % 4; + num7 = i % 4; + if (Tables.table_decor_quart[icon * 16 + num7 * 4 + num6] != 0) + { + src.Left = j * 16; + src.Right = src.Left + 16; + src.Top = i * 16; + src.Bottom = src.Top + 16; + if (Misc.IntersectRect(out dst, src, rect)) + { + m_detectIcon = icon; + return true; + } + } + } + } + if (!bCaisse) + { + return false; + } + for (int k = 0; k < m_nbRankCaisse; k++) + { + int num8 = m_rankCaisse[k]; + src.Left = m_moveObject[num8].posCurrent.X; + src.Right = m_moveObject[num8].posCurrent.X + 64; + src.Top = m_moveObject[num8].posCurrent.Y; + src.Bottom = m_moveObject[num8].posCurrent.Y + 64; + if (Misc.IntersectRect(out dst, src, rect)) + { + m_detectIcon = m_moveObject[num8].icon; + return true; + } + } + return false; + } + + private bool TestPath(TinyRect rect, TinyPoint start, ref TinyPoint end) + { + int num = Math.Abs(end.X - start.X); + int num2 = Math.Abs(end.Y - start.Y); + TinyPoint tinyPoint = start; + TinyRect rect2 = default(TinyRect); + if (num > num2) + { + if (end.X > start.X) + { + for (int i = 0; i <= num; i++) + { + int num3 = i * (end.Y - start.Y) / num; + rect2.Left = rect.Left + i; + rect2.Right = rect.Right + i; + rect2.Top = rect.Top + num3; + rect2.Bottom = rect.Bottom + num3; + if (DecorDetect(rect2)) + { + end = tinyPoint; + return false; + } + tinyPoint.X = start.X + i; + tinyPoint.Y = start.Y + num3; + } + } + if (end.X < start.X) + { + for (int i = 0; i >= -num; i--) + { + int num3 = i * (start.Y - end.Y) / num; + rect2.Left = rect.Left + i; + rect2.Right = rect.Right + i; + rect2.Top = rect.Top + num3; + rect2.Bottom = rect.Bottom + num3; + if (DecorDetect(rect2)) + { + end = tinyPoint; + return false; + } + tinyPoint.X = start.X + i; + tinyPoint.Y = start.Y + num3; + } + } + } + else + { + if (end.Y > start.Y) + { + for (int num3 = 0; num3 <= num2; num3++) + { + int i = num3 * (end.X - start.X) / num2; + rect2.Left = rect.Left + i; + rect2.Right = rect.Right + i; + rect2.Top = rect.Top + num3; + rect2.Bottom = rect.Bottom + num3; + if (DecorDetect(rect2)) + { + end = tinyPoint; + return false; + } + tinyPoint.X = start.X + i; + tinyPoint.Y = start.Y + num3; + } + } + if (end.Y < start.Y) + { + for (int num3 = 0; num3 >= -num2; num3--) + { + int i = num3 * (start.X - end.X) / num2; + rect2.Left = rect.Left + i; + rect2.Right = rect.Right + i; + rect2.Top = rect.Top + num3; + rect2.Bottom = rect.Bottom + num3; + if (DecorDetect(rect2)) + { + end = tinyPoint; + return false; + } + tinyPoint.X = start.X + i; + tinyPoint.Y = start.Y + num3; + } + } + } + return true; + } + + private void MoveObjectPollution() + { + bool flag = false; + TinyPoint blupiPos = m_blupiPos; + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = 0; + tinyPoint.Y = 0; + int num = 20; + if (m_blupiAction == 3) + { + return; + } + if (m_blupiHelico) + { + if (m_blupiVitesseY < -5.0) + { + if (m_time % 20 != 0 && m_time % 20 != 2 && m_time % 20 != 5 && m_time % 20 != 8 && m_time % 20 != 10 && m_time % 20 != 11 && m_time % 20 != 16 && m_time % 20 != 18) + { + return; + } + } + else if (m_blupiVitesseX == 0.0) + { + if (m_time % 50 != 0 && m_time % 50 != 12 && m_time % 50 != 30) + { + return; + } + } + else if (m_time % 20 != 0 && m_time % 20 != 3 && m_time % 20 != 5 && m_time % 20 != 11 && m_time % 20 != 15) + { + return; + } + tinyPoint.X = 22; + flag = true; + } + if (m_blupiOver) + { + if (m_blupiSpeedY < 0.0 || ((uint)m_keyPress & (true ? 1u : 0u)) != 0) + { + if (m_time % 20 != 0 && m_time % 20 != 2 && m_time % 20 != 5 && m_time % 20 != 8 && m_time % 20 != 11 && m_time % 20 != 13 && m_time % 20 != 14 && m_time % 20 != 18) + { + return; + } + num = 58; + tinyPoint.X = m_random.Next(-10, 10); + tinyPoint.Y = 22; + } + else + { + if (m_time % 50 != 0 && m_time % 50 != 12 && m_time % 50 != 30) + { + return; + } + num = 20; + tinyPoint.X = 30; + } + flag = true; + } + if (m_blupiJeep) + { + if (m_blupiVitesseX == 0.0) + { + if (m_blupiPhase % 50 != 0 && m_blupiPhase % 50 != 12 && m_blupiPhase % 50 != 20 && m_blupiPhase % 50 != 35) + { + return; + } + } + else if (m_blupiPhase % 20 != 0 && m_blupiPhase % 20 != 3 && m_blupiPhase % 20 != 5 && m_blupiPhase % 20 != 11 && m_blupiPhase % 20 != 15) + { + return; + } + tinyPoint.X = 32; + flag = true; + } + if (m_blupiTank) + { + if (m_blupiVitesseX == 0.0) + { + if (m_blupiPhase % 50 != 0 && m_blupiPhase % 50 != 15 && m_blupiPhase % 50 != 28) + { + return; + } + } + else if (m_blupiPhase % 20 != 0 && m_blupiPhase % 20 != 4 && m_blupiPhase % 20 != 12) + { + return; + } + tinyPoint.X = 35; + flag = true; + } + if (!flag) + { + return; + } + if (m_blupiDir == 2) + { + blupiPos.X -= tinyPoint.X - 5; + if (num < 50) + { + num = -num; + } + } + else + { + blupiPos.X += tinyPoint.X; + } + blupiPos.Y += tinyPoint.Y; + ObjectStart(blupiPos, 36, num); + } + + private void MoveObjectPlouf(TinyPoint pos) + { + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 14) + { + return; + } + } + pos.Y -= 45; + PlaySound(23, pos); + ObjectStart(pos, 14, 0); + } + + private void MoveObjectTiplouf(TinyPoint pos) + { + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 35) + { + return; + } + } + if (m_blupiDir == 2) + { + pos.X += 5; + } + else + { + pos.X -= 5; + } + pos.Y -= 45; + PlaySound(64, pos); + ObjectStart(pos, 35, 0); + } + + private void MoveObjectBlup(TinyPoint pos) + { + PlaySound(24, pos); + pos.Y -= 20; + int num = 0; + TinyPoint tinyPoint = pos; + while (tinyPoint.Y > 0) + { + int icon = m_decor[(tinyPoint.X + 16) / 64, tinyPoint.Y / 64].icon; + if (icon != 91 && icon != 92) + { + break; + } + num++; + tinyPoint.Y -= 64; + } + num--; + if (num > 0) + { + int num2 = MoveObjectFree(); + if (num2 != -1) + { + m_moveObject[num2].type = 15; + m_moveObject[num2].phase = 0; + m_moveObject[num2].posCurrent.X = pos.X; + m_moveObject[num2].posCurrent.Y = pos.Y; + m_moveObject[num2].posStart = m_moveObject[num2].posCurrent; + m_moveObject[num2].posEnd.X = pos.X; + m_moveObject[num2].posEnd.Y = pos.Y - num * 64; + m_moveObject[num2].timeStopStart = 0; + m_moveObject[num2].stepAdvance = num * 10; + m_moveObject[num2].step = 2; + m_moveObject[num2].time = 0; + MoveObjectStepIcon(num2); + } + } + } + + private int IsWorld(TinyPoint pos) + { + pos.X += 30; + pos.Y += 30; + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return -1; + } + int icon = m_decor[pos.X / 64, pos.Y / 64].icon; + if (icon >= 158 && icon <= 165) + { + return icon - 158 + 1; + } + if (icon >= 166 && icon <= 173) + { + return icon - 166 + 1; + } + switch (icon) + { + case 309: + case 310: + return 9; + case 411: + case 412: + case 413: + case 414: + case 415: + return icon - 411 + 10; + default: + if (icon >= 416 && icon <= 420) + { + return icon - 416 + 10; + } + if (icon >= 174 && icon <= 181) + { + return icon - 174 + 1; + } + if (icon == 184) + { + return 199; + } + return -1; + } + } + + private void ActiveSwitch(bool bState, TinyPoint cel) + { + TinyPoint pos = default(TinyPoint); + pos.X = cel.X * 64; + pos.Y = cel.Y * 64; + ModifDecor(pos, bState ? 384 : 385); + PlaySound(bState ? 77 : 76, pos); + cel.X -= 20; + for (int i = 0; i < 41; i++) + { + if (cel.X >= 0 && cel.X < 100 && m_decor[cel.X, cel.Y].icon == (bState ? 379 : 378)) + { + pos.X = cel.X * 64; + pos.Y = cel.Y * 64; + ModifDecor(pos, bState ? 378 : 379); + } + cel.X++; + } + } + + private int GetTypeBarre(TinyPoint pos) + { + TinyPoint pos2 = pos; + pos.X += 30; + pos.Y += 22; + if (pos.Y % 64 > 44) + { + return 0; + } + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return 0; + } + int icon = m_decor[pos.X / 64, pos.Y / 64].icon; + if (icon != 138 && icon != 202) + { + return 0; + } + if (pos.Y >= 6336) + { + return 1; + } + icon = m_decor[pos.X / 64, pos.Y / 64 + 1].icon; + if (!IsPassIcon(icon)) + { + return 2; + } + TinyRect rect = BlupiRect(pos2); + rect.Top = pos2.Y + 60 - 2; + rect.Bottom = pos2.Y + 60 - 1; + if (DecorDetect(rect, true)) + { + return 2; + } + return 1; + } + + private bool IsLave(TinyPoint pos) + { + pos.X += 30; + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return false; + } + return m_decor[pos.X / 64, pos.Y / 64].icon == 68; + } + + private bool IsPiege(TinyPoint pos) + { + pos.X += 30; + pos.Y += 60; + if (pos.X % 64 < 15 || pos.X % 64 > 49) + { + return false; + } + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return false; + } + return m_decor[pos.X / 64, pos.Y / 64].icon == 373; + } + + private bool IsGoutte(TinyPoint pos, bool bAlways) + { + pos.X += 30; + if (pos.X % 64 < 15 || pos.X % 64 > 49) + { + return false; + } + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return false; + } + int icon = m_decor[pos.X / 64, pos.Y / 64].icon; + if (bAlways) + { + if (icon != 404) + { + return icon == 410; + } + return true; + } + return icon == 404; + } + + private bool IsScie(TinyPoint pos) + { + pos.X += 30; + if (pos.X % 64 < 4 || pos.X % 64 > 60) + { + return false; + } + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return false; + } + return m_decor[pos.X / 64, pos.Y / 64].icon == 378; + } + + private bool IsSwitch(TinyPoint pos, ref TinyPoint celSwitch) + { + pos.X += 30; + if (pos.X % 64 < 4 || pos.X % 64 > 60) + { + return false; + } + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return false; + } + celSwitch.X = pos.X / 64; + celSwitch.Y = pos.Y / 64; + if (m_decor[pos.X / 64, pos.Y / 64].icon != 384) + { + return m_decor[pos.X / 64, pos.Y / 64].icon == 385; + } + return true; + } + + private bool IsEcraseur(TinyPoint pos) + { + if (m_time / 3 % 10 > 2) + { + return false; + } + pos.X += 30; + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return false; + } + return m_decor[pos.X / 64, pos.Y / 64].icon == 317; + } + + private bool IsBlitz(TinyPoint pos, bool bAlways) + { + pos.X += 30; + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return false; + } + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = pos.X / 64; + tinyPoint.Y = pos.Y / 64; + if (m_decor[tinyPoint.X, tinyPoint.Y].icon != 305) + { + return false; + } + if (bAlways) + { + return true; + } + return BlitzActif(tinyPoint.X, tinyPoint.Y); + } + + private bool IsRessort(TinyPoint pos) + { + pos.X += 30; + pos.Y += 60; + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return false; + } + return m_decor[pos.X / 64, pos.Y / 64].icon == 211; + } + + private bool IsTemp(TinyPoint pos) + { + pos.X += 30; + pos.Y += 60; + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return false; + } + return m_decor[pos.X / 64, pos.Y / 64].icon == 324; + } + + private bool IsBridge(TinyPoint pos, ref TinyPoint celBridge) + { + pos.X += 30; + pos.Y += 60; + if (pos.X >= 0 && pos.X < 6400 && pos.Y >= 0 && pos.Y < 6400 && m_decor[pos.X / 64, pos.Y / 64].icon == 364) + { + celBridge.X = pos.X / 64; + celBridge.Y = pos.Y / 64; + return true; + } + pos.Y -= 60; + if (pos.X >= 0 && pos.X < 6400 && pos.Y >= 0 && pos.Y < 6400 && m_decor[pos.X / 64, pos.Y / 64].icon == 364) + { + celBridge.X = pos.X / 64; + celBridge.Y = pos.Y / 64; + return true; + } + return false; + } + + private int IsDoor(TinyPoint pos, ref TinyPoint celPorte) + { + int num = ((m_blupiDir != 1) ? 60 : (-60)); + pos.X += 30; + for (int i = 0; i < 2; i++) + { + if (pos.X >= 0 && pos.X < 6400 && pos.Y >= 0 && pos.Y < 6400 && m_decor[pos.X / 64, pos.Y / 64].icon >= 334 && m_decor[pos.X / 64, pos.Y / 64].icon <= 336) + { + celPorte.X = pos.X / 64; + celPorte.Y = pos.Y / 64; + return m_decor[pos.X / 64, pos.Y / 64].icon; + } + pos.X += num; + } + return -1; + } + + private int IsTeleporte(TinyPoint pos) + { + if (pos.X % 64 > 6) + { + return -1; + } + pos.X += 30; + pos.Y -= 60; + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return -1; + } + if (m_decor[pos.X / 64, pos.Y / 64].icon >= 330 && m_decor[pos.X / 64, pos.Y / 64].icon <= 333) + { + return m_decor[pos.X / 64, pos.Y / 64].icon; + } + return -1; + } + + private bool SearchTeleporte(TinyPoint pos, ref TinyPoint newpos) + { + int num = IsTeleporte(pos); + if (num == -1) + { + return false; + } + for (int i = 0; i < 100; i++) + { + for (int j = 0; j < 100; j++) + { + if (num == m_decor[i, j].icon) + { + newpos.X = i * 64; + newpos.Y = j * 64 + 60; + if (newpos.X < pos.X - 40 || newpos.X > pos.X + 40 || newpos.Y < pos.Y - 40 || newpos.Y > pos.Y + 40) + { + return true; + } + } + } + } + return false; + } + + private bool IsNormalJump(TinyPoint pos) + { + pos.X += 32; + pos.Y -= 32; + if (m_blupiDir == 1) + { + pos.X -= 15; + } + else + { + pos.X += 15; + } + for (int i = 0; i < 2; i++) + { + int num = pos.X / 64; + int num2 = pos.Y / 64; + if (num2 < 0) + { + return false; + } + int icon = m_decor[num, num2].icon; + if (!IsPassIcon(icon)) + { + return false; + } + pos.Y -= 64; + } + return true; + } + + private bool IsSurfWater(TinyPoint pos) + { + if (pos.Y % 64 < 64 - BLUPISURF) + { + return false; + } + int icon = m_decor[(pos.X + 30) / 64, pos.Y / 64].icon; + int icon2 = m_decor[(pos.X + 30) / 64, (pos.Y + BLUPISURF) / 64].icon; + if (icon != 92 && icon2 == 92) + { + return true; + } + return false; + } + + private bool IsDeepWater(TinyPoint pos) + { + int num = (pos.X + 30) / 64; + int num2 = pos.Y / 64; + if (num < 0 || num >= 100 || num2 < 0 || num2 >= 100) + { + return false; + } + int icon = m_decor[num, num2].icon; + if (icon != 91) + { + return icon == 92; + } + return true; + } + + private bool IsOutWater(TinyPoint pos) + { + int icon = m_decor[(pos.X + 30) / 64, (pos.Y + 30) / 64].icon; + if (icon == 91 || icon == 92) + { + return false; + } + return IsPassIcon(icon); + } + + private bool IsPassIcon(int icon) + { + if (icon == 324 && m_time / 4 % 20 >= 18) + { + return true; + } + if (icon >= 0 && icon < MAXQUART) + { + for (int i = 0; i < 16; i++) + { + if (Tables.table_decor_quart[icon * 16 + i] != 0) + { + return false; + } + } + } + return true; + } + + private bool IsBlocIcon(int icon) + { + if (icon < 0 || icon >= MAXQUART) + { + return false; + } + if (icon == 324 && m_time / 4 % 20 < 18) + { + return true; + } + for (int i = 0; i < 16; i++) + { + if (Tables.table_decor_quart[icon * 16 + i] == 0) + { + return false; + } + } + return true; + } + + private void FlushBalleTraj() + { + for (int i = 0; i < 1300; i++) + { + m_balleTraj[i] = 0; + } + } + + private void SetBalleTraj(TinyPoint pos) + { + if (pos.X >= 0 && pos.X < 100 && pos.Y >= 0 && pos.Y < 100) + { + int num = pos.Y * 13; + num += pos.X / 8; + int num2 = pos.X & 7; + m_balleTraj[num] |= 1 << num2; + } + } + + private bool IsBalleTraj(TinyPoint pos) + { + pos.X = (pos.X + 32) / 64; + pos.Y = (pos.Y + 32) / 64; + if (pos.X < 0 || pos.X >= 100 || pos.Y < 0 || pos.Y >= 100) + { + return false; + } + int num = pos.Y * 13; + num += pos.X / 8; + int num2 = pos.X & 7; + return (m_balleTraj[num] & (1 << num2)) != 0; + } + + private void FlushMoveTraj() + { + for (int i = 0; i < 1300; i++) + { + m_moveTraj[i] = 0; + } + } + + private void SetMoveTraj(TinyPoint pos) + { + if (pos.X >= 0 && pos.X < 100 && pos.Y >= 0 && pos.Y < 100) + { + int num = pos.Y * 13; + num += pos.X / 8; + int num2 = pos.X & 7; + m_moveTraj[num] |= 1 << num2; + } + } + + private bool IsMoveTraj(TinyPoint pos) + { + pos.X = (pos.X + 32) / 64; + pos.Y = (pos.Y + 32) / 64; + if (pos.X < 0 || pos.X >= 100 || pos.Y < 0 || pos.Y >= 100) + { + return false; + } + int num = pos.Y * 13; + num += pos.X / 8; + int num2 = pos.X & 7; + return (m_moveTraj[num] & (1 << num2)) != 0; + } + + private int SearchDistRight(TinyPoint pos, TinyPoint dir, int type) + { + int num = 0; + if (type == 36 || type == 39 || type == 41 || type == 42 || type == 93) + { + return 500; + } + pos.X = (pos.X + 32) / 64; + pos.Y = (pos.Y + 32) / 64; + while (pos.X >= 0 && pos.X < 100 && pos.Y >= 0 && pos.Y < 100 && !IsBlocIcon(m_decor[pos.X, pos.Y].icon)) + { + if (type == 23) + { + SetBalleTraj(pos); + } + num += 64; + pos.X += dir.X; + pos.Y += dir.Y; + } + if ((type == 34 || type == 38) && num >= 64) + { + num -= 64; + } + if (type == 23 && num >= 10) + { + num -= 10; + } + return num; + } + + private bool IsVentillo(TinyPoint pos) + { + int num = 0; + bool flag = false; + TinyPoint tinyPoint = default(TinyPoint); + pos.X += 30; + pos.Y += 30; + if (pos.X < 0 || pos.X >= 6400 || pos.Y < 0 || pos.Y >= 6400) + { + return false; + } + int icon = m_decor[pos.X / 64, pos.Y / 64].icon; + switch (icon) + { + default: + return false; + case 126: + if (pos.X % 64 <= 16) + { + flag = true; + } + tinyPoint.X = -64; + tinyPoint.Y = 0; + num = 110; + break; + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + break; + } + if (icon == 129) + { + if (pos.X % 64 >= 48) + { + flag = true; + } + tinyPoint.X = 64; + tinyPoint.Y = 0; + num = 114; + } + if (icon == 132) + { + if (pos.Y % 64 <= 32) + { + flag = true; + } + tinyPoint.X = 0; + tinyPoint.Y = -64; + num = 118; + } + if (icon == 135) + { + if (pos.Y % 64 >= 48) + { + flag = true; + } + tinyPoint.X = 0; + tinyPoint.Y = 64; + num = 122; + } + if (!flag) + { + return false; + } + ModifDecor(pos, -1); + do + { + pos.X += tinyPoint.X; + pos.Y += tinyPoint.Y; + if (num != m_decor[pos.X / 64, pos.Y / 64].icon) + { + break; + } + ModifDecor(pos, -1); + } + while (pos.X >= 0 && pos.X < 6400 && pos.Y >= 0 && pos.Y < 6400); + return true; + } + + private void NetStopCloud(int rank) + { + } + + private void StartSploutchGlu(TinyPoint pos) + { + TinyPoint pos2 = default(TinyPoint); + pos2.X = pos.X; + pos2.Y = pos.Y; + ObjectStart(pos2, 98, 0); + pos2.X = pos.X + 15; + pos2.Y = pos.Y + 20; + ObjectStart(pos2, 99, 0); + pos2.X = pos.X - 20; + pos2.Y = pos.Y + 18; + ObjectStart(pos2, 99, 0); + pos2.X = pos.X + 23; + pos2.Y = pos.Y - 18; + ObjectStart(pos2, 99, 0); + pos2.X = pos.X - 15; + pos2.Y = pos.Y - 18; + ObjectStart(pos2, 99, 0); + pos2.X = pos.X + 32; + pos2.Y = pos.Y + 10; + ObjectStart(pos2, 100, 0); + pos2.X = pos.X - 28; + pos2.Y = pos.Y + 15; + ObjectStart(pos2, 100, 0); + StopSound(16); + StopSound(18); + StopSound(29); + StopSound(31); + PlaySound(51, pos); + } + + private int ObjectStart(TinyPoint pos, int type, int speed) + { + int num = MoveObjectFree(); + if (num == -1) + { + return -1; + } + m_moveObject[num].type = type; + m_moveObject[num].phase = 0; + m_moveObject[num].posCurrent = pos; + m_moveObject[num].posStart = pos; + m_moveObject[num].posEnd = pos; + MoveObjectStepIcon(num); + if (speed != 0) + { + TinyPoint tinyPoint = pos; + int num2 = speed; + int num3 = 0; + TinyPoint dir = default(TinyPoint); + if (num2 > 50) + { + num2 -= 50; + dir.X = 0; + dir.Y = 1; + num3 = SearchDistRight(tinyPoint, dir, type); + tinyPoint.Y += num3; + } + else if (num2 < -50) + { + num2 += 50; + dir.X = 0; + dir.Y = -1; + num3 = SearchDistRight(tinyPoint, dir, type); + tinyPoint.Y -= num3; + } + else if (num2 > 0) + { + dir.X = 1; + dir.Y = 0; + num3 = SearchDistRight(tinyPoint, dir, type); + tinyPoint.X += num3; + } + else if (num2 < 0) + { + dir.X = -1; + dir.Y = 0; + num3 = SearchDistRight(tinyPoint, dir, type); + tinyPoint.X -= num3; + } + if (num3 == 0) + { + if (type == 23) + { + m_moveObject[num].type = 0; + return num; + } + } + else + { + m_moveObject[num].posEnd = tinyPoint; + m_moveObject[num].timeStopStart = 0; + m_moveObject[num].stepAdvance = Math.Abs(num2 * num3 / 64); + m_moveObject[num].step = 2; + m_moveObject[num].time = 0; + } + } + MoveObjectPriority(num); + return num; + } + + private bool ObjectDelete(TinyPoint pos, int type) + { + int num = MoveObjectSearch(pos, type); + if (num == -1) + { + return false; + } + if (m_moveObject[num].type == 4 || m_moveObject[num].type == 12 || m_moveObject[num].type == 16 || m_moveObject[num].type == 17 || m_moveObject[num].type == 20 || m_moveObject[num].type == 40 || m_moveObject[num].type == 96 || m_moveObject[num].type == 97) + { + int num2 = 17; + double animationSpeed = 1.0; + if (m_moveObject[num].type == 4) + { + num2 = 7; + } + if (m_moveObject[num].type == 17 || m_moveObject[num].type == 20) + { + num2 = 33; + } + if (m_moveObject[num].type == 40) + { + animationSpeed = 0.5; + } + ByeByeAdd(m_moveObject[num].channel, m_moveObject[num].icon, m_moveObject[num].posCurrent, num2, animationSpeed); + } + m_moveObject[num].type = 0; + return true; + } + + private void ModifDecor(TinyPoint pos, int icon) + { + int icon2 = m_decor[pos.X / 64, pos.Y / 64].icon; + if (icon == -1 && icon2 >= 126 && icon2 <= 137) + { + ByeByeAdd(1, icon2, pos, 17.0, 1.0); + } + m_decor[pos.X / 64, pos.Y / 64].icon = icon; + } + + private void MoveObjectStep() + { + m_blupiVector.X = 0; + m_blupiVector.Y = 0; + m_blupiTransport = -1; + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 0) + { + continue; + } + MoveObjectStepLine(i); + MoveObjectStepIcon(i); + if (m_moveObject[i].type == 4 || m_moveObject[i].type == 33 || m_moveObject[i].type == 32) + { + int num = MovePersoDetect(m_moveObject[i].posCurrent); + if (num != -1) + { + TinyPoint posCurrent = m_moveObject[i].posCurrent; + posCurrent.X -= 34; + posCurrent.Y -= 34; + ObjectStart(posCurrent, 8, 0); + PlaySound(10, m_moveObject[i].posCurrent); + m_decorAction = 1; + m_decorPhase = 0; + posCurrent = m_moveObject[i].posCurrent; + posCurrent.X += 2; + posCurrent.Y += BLUPIOFFY; + ObjectDelete(m_moveObject[i].posCurrent, m_moveObject[i].type); + ObjectStart(posCurrent, 37, 0); + ObjectDelete(m_moveObject[num].posCurrent, m_moveObject[num].type); + } + if (BlupiElectro(m_moveObject[i].posCurrent)) + { + TinyPoint posCurrent = m_moveObject[i].posCurrent; + posCurrent.X += 2; + posCurrent.Y += BLUPIOFFY; + ObjectDelete(m_moveObject[i].posCurrent, m_moveObject[i].type); + ObjectStart(posCurrent, 38, 55); + PlaySound(59, posCurrent); + } + } + } + } + + private void MoveObjectStepLine(int i) + { + TinyPoint tinyPoint = default(TinyPoint); + bool flag = false; + TinyRect tinyRect = default(TinyRect); + if ((m_moveObject[i].type == 1 || m_moveObject[i].type == 47 || m_moveObject[i].type == 48) && !m_blupiSuspend) + { + TinyRect src = default(TinyRect); + src.Left = m_blupiPos.X + 20; + src.Right = m_blupiPos.X + 60 - 20; + src.Top = m_blupiPos.Y + 60 - 2; + src.Bottom = m_blupiPos.Y + 60 - 1; + tinyRect.Left = m_moveObject[i].posCurrent.X; + tinyRect.Right = m_moveObject[i].posCurrent.X + 64; + tinyRect.Top = m_moveObject[i].posCurrent.Y; + tinyRect.Bottom = m_moveObject[i].posCurrent.Y + 16; + TinyRect dst; + flag = Misc.IntersectRect(out dst, tinyRect, src); + tinyPoint = m_moveObject[i].posCurrent; + } + TinyPoint end; + if (m_blupiFocus && !m_blupiHide && m_moveObject[i].type == 97) + { + end = m_moveObject[i].posCurrent; + if (end.X < m_blupiPos.X) + { + end.X++; + } + if (end.X > m_blupiPos.X) + { + end.X--; + } + if (end.Y < m_blupiPos.Y) + { + end.Y++; + } + if (end.Y > m_blupiPos.Y) + { + end.Y--; + } + tinyRect.Left = end.X + 10; + tinyRect.Right = end.X + 60 - 10; + tinyRect.Top = end.Y + 10; + tinyRect.Bottom = end.Y + 60 - 10; + if (TestPath(tinyRect, m_moveObject[i].posCurrent, ref end)) + { + m_moveObject[i].posCurrent = end; + m_moveObject[i].posStart = end; + m_moveObject[i].posEnd = end; + } + else + { + ObjectDelete(m_moveObject[i].posCurrent, m_moveObject[i].type); + end.X -= 34; + end.Y -= 34; + ObjectStart(end, 9, 0); + PlaySound(10, end); + m_decorAction = 1; + m_decorPhase = 0; + } + } + if (m_moveObject[i].posStart.X != m_moveObject[i].posEnd.X || m_moveObject[i].posStart.Y != m_moveObject[i].posEnd.Y) + { + if (m_moveObject[i].step == 1) + { + if (m_moveObject[i].time < m_moveObject[i].timeStopStart) + { + m_moveObject[i].time++; + } + else + { + m_moveObject[i].step = 2; + m_moveObject[i].time = 0; + } + } + else if (m_moveObject[i].step == 2) + { + if (m_moveObject[i].posCurrent.X != m_moveObject[i].posEnd.X || m_moveObject[i].posCurrent.Y != m_moveObject[i].posEnd.Y) + { + m_moveObject[i].time++; + if (m_moveObject[i].stepAdvance != 0) + { + m_moveObject[i].posCurrent.X = (m_moveObject[i].posEnd.X - m_moveObject[i].posStart.X) * m_moveObject[i].time / m_moveObject[i].stepAdvance + m_moveObject[i].posStart.X; + m_moveObject[i].posCurrent.Y = (m_moveObject[i].posEnd.Y - m_moveObject[i].posStart.Y) * m_moveObject[i].time / m_moveObject[i].stepAdvance + m_moveObject[i].posStart.Y; + } + } + else if (m_moveObject[i].type == 15 || m_moveObject[i].type == 23) + { + m_moveObject[i].type = 0; + } + else if (m_moveObject[i].type == 34) + { + m_moveObject[i].posStart = m_moveObject[i].posCurrent; + m_moveObject[i].posEnd = m_moveObject[i].posCurrent; + m_moveObject[i].step = 3; + m_moveObject[i].time = 0; + } + else + { + m_moveObject[i].step = 3; + m_moveObject[i].time = 0; + } + } + else if (m_moveObject[i].step == 3) + { + if (m_moveObject[i].time < m_moveObject[i].timeStopEnd) + { + m_moveObject[i].time++; + } + else + { + m_moveObject[i].step = 4; + m_moveObject[i].time = 0; + } + } + else if (m_moveObject[i].step == 4) + { + if (m_moveObject[i].posCurrent.X != m_moveObject[i].posStart.X || m_moveObject[i].posCurrent.Y != m_moveObject[i].posStart.Y) + { + m_moveObject[i].time++; + if (m_moveObject[i].stepRecede != 0) + { + m_moveObject[i].posCurrent.X = (m_moveObject[i].posStart.X - m_moveObject[i].posEnd.X) * m_moveObject[i].time / m_moveObject[i].stepRecede + m_moveObject[i].posEnd.X; + m_moveObject[i].posCurrent.Y = (m_moveObject[i].posStart.Y - m_moveObject[i].posEnd.Y) * m_moveObject[i].time / m_moveObject[i].stepRecede + m_moveObject[i].posEnd.Y; + } + } + else + { + m_moveObject[i].step = 1; + m_moveObject[i].time = 0; + } + } + } + if (m_moveObject[i].type == 22 && m_moveObject[i].step == 3) + { + m_moveObject[i].type = 0; + } + end = m_moveObject[i].posCurrent; + if (m_moveObject[i].type == 1 || m_moveObject[i].type == 47 || m_moveObject[i].type == 48) + { + end.Y -= 64; + } + end.X = (end.X + 32) / 64; + end.Y = (end.Y + 32) / 64; + SetMoveTraj(end); + if (flag) + { + m_blupiVector.X = m_moveObject[i].posCurrent.X - tinyPoint.X; + m_blupiVector.Y = m_moveObject[i].posCurrent.Y - (m_blupiPos.Y + 60 - BLUPIFLOOR); + if (m_moveObject[i].type == 47) + { + m_blupiVector.X += 2; + } + if (m_moveObject[i].type == 48) + { + m_blupiVector.X -= 2; + } + if (m_blupiTimeNoAsc == 0) + { + m_blupiTransport = i; + } + } + } + + private void MoveObjectStepIcon(int i) + { + if (m_moveObject[i].type == 47) + { + m_moveObject[i].icon = Tables.table_chenille[m_moveObject[i].phase / 1 % 6]; + } + if (m_moveObject[i].type == 48) + { + m_moveObject[i].icon = Tables.table_chenillei[m_moveObject[i].phase / 1 % 6]; + } + if (m_moveObject[i].type == 2) + { + m_moveObject[i].icon = 12 + m_moveObject[i].phase / 2 % 9; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 3) + { + m_moveObject[i].icon = 48 + m_moveObject[i].phase / 2 % 9; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 16) + { + m_moveObject[i].icon = 69 + m_moveObject[i].phase / 1 % 9; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 96) + { + m_moveObject[i].icon = Tables.table_follow1[m_moveObject[i].phase / 1 % 26]; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 97) + { + m_moveObject[i].icon = Tables.table_follow2[m_moveObject[i].phase / 1 % 5]; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 200) + { + m_moveObject[i].icon = 257 + m_moveObject[i].phase / 1 % 6; + m_moveObject[i].channel = 2; + } + if (m_moveObject[i].type == 201) + { + m_moveObject[i].icon = 257 + m_moveObject[i].phase / 1 % 6; + m_moveObject[i].channel = 11; + } + if (m_moveObject[i].type == 202) + { + m_moveObject[i].icon = 257 + m_moveObject[i].phase / 1 % 6; + m_moveObject[i].channel = 12; + } + if (m_moveObject[i].type == 203) + { + m_moveObject[i].icon = 257 + m_moveObject[i].phase / 1 % 6; + m_moveObject[i].channel = 13; + } + if (m_moveObject[i].type == 55) + { + m_moveObject[i].icon = 252; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 56) + { + m_moveObject[i].icon = Tables.table_dynamitef[m_moveObject[i].phase / 1 % 100]; + m_moveObject[i].channel = 10; + if (m_moveObject[i].phase == 50) + { + DynamiteStart(i, 0, 0); + } + if (m_moveObject[i].phase == 53) + { + DynamiteStart(i, -100, 8); + } + if (m_moveObject[i].phase == 55) + { + DynamiteStart(i, 80, 10); + } + if (m_moveObject[i].phase == 56) + { + DynamiteStart(i, -15, -100); + } + if (m_moveObject[i].phase == 59) + { + DynamiteStart(i, 20, 70); + } + if (m_moveObject[i].phase == 62) + { + DynamiteStart(i, 30, -50); + } + if (m_moveObject[i].phase == 64) + { + DynamiteStart(i, -40, 30); + } + if (m_moveObject[i].phase == 67) + { + DynamiteStart(i, -180, 10); + } + if (m_moveObject[i].phase == 69) + { + DynamiteStart(i, 200, -10); + } + if (m_moveObject[i].phase >= 70) + { + m_moveObject[i].type = 0; + } + } + if (m_moveObject[i].type == 5) + { + if (m_moveObject[i].phase / 3 % 22 < 11) + { + m_moveObject[i].icon = m_moveObject[i].phase / 3 % 11; + } + else + { + m_moveObject[i].icon = 11 - m_moveObject[i].phase / 3 % 11; + } + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 6) + { + m_moveObject[i].icon = 21 + m_moveObject[i].phase / 4 % 8; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 7) + { + m_moveObject[i].icon = 29 + m_moveObject[i].phase / 3 % 8; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 21) + { + m_moveObject[i].icon = Tables.table_cle[m_moveObject[i].phase / 3 % 12]; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 49) + { + m_moveObject[i].icon = Tables.table_cle1[m_moveObject[i].phase / 3 % 12]; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 50) + { + m_moveObject[i].icon = Tables.table_cle2[m_moveObject[i].phase / 3 % 12]; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 51) + { + m_moveObject[i].icon = Tables.table_cle3[m_moveObject[i].phase / 3 % 12]; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 24) + { + m_moveObject[i].icon = Tables.table_skate[m_moveObject[i].phase / 1 % 34]; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 25) + { + m_moveObject[i].icon = Tables.table_shield[m_moveObject[i].phase / 2 % 16]; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 26) + { + m_moveObject[i].icon = Tables.table_power[m_moveObject[i].phase / 2 % 8]; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 40) + { + m_moveObject[i].icon = Tables.table_invert[m_moveObject[i].phase / 2 % 20]; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 31) + { + m_moveObject[i].icon = Tables.table_charge[m_moveObject[i].phase / 2 % 6]; + m_moveObject[i].channel = 1; + } + if (m_moveObject[i].type == 27) + { + m_moveObject[i].icon = Tables.table_magictrack[m_moveObject[i].phase / 1 % 24]; + m_moveObject[i].channel = 10; + if (m_moveObject[i].phase >= 24) + { + m_moveObject[i].type = 0; + } + } + if (m_moveObject[i].type == 57) + { + m_moveObject[i].icon = Tables.table_shieldtrack[m_moveObject[i].phase / 1 % 20]; + m_moveObject[i].channel = 10; + if (m_moveObject[i].phase >= 20) + { + m_moveObject[i].type = 0; + } + } + if (m_moveObject[i].type == 39) + { + m_moveObject[i].icon = Tables.table_tresortrack[m_moveObject[i].phase / 1 % 11]; + m_moveObject[i].channel = 10; + if (m_moveObject[i].phase >= 11) + { + m_moveObject[i].type = 0; + } + } + if (m_moveObject[i].type == 58 && m_moveObject[i].phase >= 20) + { + m_moveObject[i].type = 0; + } + if (m_moveObject[i].type == 8) + { + if (m_moveObject[i].phase >= Tables.table_explo1.Length) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_explo1[m_moveObject[i].phase]; + m_moveObject[i].channel = 9; + } + } + if (m_moveObject[i].type == 9) + { + if (m_moveObject[i].phase >= 20) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_explo2[m_moveObject[i].phase % 20]; + m_moveObject[i].channel = 9; + } + } + if (m_moveObject[i].type == 10) + { + if (m_moveObject[i].phase >= 20) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_explo3[m_moveObject[i].phase / 1 % 20]; + m_moveObject[i].channel = 9; + } + } + if (m_moveObject[i].type == 11) + { + if (m_moveObject[i].phase >= 9) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_explo4[m_moveObject[i].phase / 1 % 9]; + m_moveObject[i].channel = 9; + } + } + if (m_moveObject[i].type == 90) + { + if (m_moveObject[i].phase >= 12) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_explo5[m_moveObject[i].phase / 1 % 12]; + m_moveObject[i].channel = 9; + } + } + if (m_moveObject[i].type == 91) + { + if (m_moveObject[i].phase >= 6) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_explo6[m_moveObject[i].phase / 1 % 6]; + m_moveObject[i].channel = 9; + } + } + if (m_moveObject[i].type == 92) + { + if (m_moveObject[i].phase >= 128) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_explo7[m_moveObject[i].phase / 1 % 128]; + m_moveObject[i].channel = 9; + } + } + if (m_moveObject[i].type == 93) + { + if (m_moveObject[i].phase >= 5) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_explo8[m_moveObject[i].phase / 1 % 5]; + m_moveObject[i].channel = 9; + } + } + if (m_moveObject[i].type == 98) + { + if (m_moveObject[i].phase >= 10) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_sploutch1[m_moveObject[i].phase / 1 % 10]; + m_moveObject[i].channel = 9; + } + } + if (m_moveObject[i].type == 99) + { + if (m_moveObject[i].phase >= 13) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_sploutch2[m_moveObject[i].phase / 1 % 13]; + m_moveObject[i].channel = 9; + } + } + if (m_moveObject[i].type == 100) + { + if (m_moveObject[i].phase >= 18) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_sploutch3[m_moveObject[i].phase / 1 % 18]; + m_moveObject[i].channel = 9; + } + } + if (m_moveObject[i].type == 53) + { + if (m_moveObject[i].phase >= 90) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_tentacule[m_moveObject[i].phase / 2 % 45]; + m_moveObject[i].channel = 9; + } + } + TinyPoint pos = default(TinyPoint); + if (m_moveObject[i].type == 52) + { + if (m_moveObject[i].phase == 0) + { + PlaySound(72, m_moveObject[i].posStart); + } + if (m_moveObject[i].phase == 137) + { + PlaySound(73, m_moveObject[i].posStart); + } + if (m_moveObject[i].phase >= 157) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_bridge[m_moveObject[i].phase / 1 % 157]; + m_moveObject[i].channel = 1; + pos.X = m_moveObject[i].posStart.X / 64; + pos.Y = m_moveObject[i].posStart.Y / 64; + m_decor[pos.X, pos.Y].icon = m_moveObject[i].icon; + } + } + if (m_moveObject[i].type == 36) + { + if (m_moveObject[i].phase >= 16) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_pollution[m_moveObject[i].phase / 2 % 8]; + m_moveObject[i].channel = 10; + } + } + if (m_moveObject[i].type == 41) + { + if (m_moveObject[i].phase >= 16) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_invertstart[m_moveObject[i].phase / 2 % 8]; + m_moveObject[i].channel = 10; + } + } + if (m_moveObject[i].type == 42) + { + if (m_moveObject[i].phase >= 16) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_invertstop[m_moveObject[i].phase / 2 % 8]; + m_moveObject[i].channel = 10; + } + } + if (m_moveObject[i].type == 14) + { + if (m_moveObject[i].phase >= 14) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_plouf[m_moveObject[i].phase / 2 % 7]; + m_moveObject[i].channel = 1; + } + } + if (m_moveObject[i].type == 35) + { + if (m_moveObject[i].phase >= 6) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_tiplouf[m_moveObject[i].phase / 2 % 7]; + m_moveObject[i].channel = 1; + } + } + if (m_moveObject[i].type == 15) + { + m_moveObject[i].icon = Tables.table_blup[m_moveObject[i].phase / 2 % 20]; + m_moveObject[i].channel = 1; + } + if (m_moveObject[i].type == 4) + { + if (m_moveObject[i].posStart.X > m_moveObject[i].posEnd.X) + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_bulldozer_turn2l[m_moveObject[i].time % 22]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_bulldozer_turn2r[m_moveObject[i].time % 22]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_bulldozer_left[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_bulldozer_right[m_moveObject[i].time % 8]; + } + } + else + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_bulldozer_turn2r[m_moveObject[i].time % 22]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_bulldozer_turn2l[m_moveObject[i].time % 22]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_bulldozer_right[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_bulldozer_left[m_moveObject[i].time % 8]; + } + } + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 17) + { + if (m_moveObject[i].posStart.X > m_moveObject[i].posEnd.X) + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_poisson_turn2l[m_moveObject[i].time % 48]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_poisson_turn2r[m_moveObject[i].time % 48]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_poisson_left[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_poisson_right[m_moveObject[i].time % 8]; + } + } + else + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_poisson_turn2r[m_moveObject[i].time % 48]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_poisson_turn2l[m_moveObject[i].time % 48]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_poisson_right[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_poisson_left[m_moveObject[i].time % 8]; + } + } + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 20) + { + if (m_moveObject[i].posStart.X > m_moveObject[i].posEnd.X) + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_oiseau_turn2l[m_moveObject[i].time % 10]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_oiseau_turn2r[m_moveObject[i].time % 10]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_oiseau_left[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_oiseau_right[m_moveObject[i].time % 8]; + } + } + else + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_oiseau_turn2r[m_moveObject[i].time % 10]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_oiseau_turn2l[m_moveObject[i].time % 10]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_oiseau_right[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_oiseau_left[m_moveObject[i].time % 8]; + } + } + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 44) + { + if (m_moveObject[i].posStart.X > m_moveObject[i].posEnd.X) + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_guepe_turn2l[m_moveObject[i].time % 5]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_guepe_turn2r[m_moveObject[i].time % 5]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_guepe_left[m_moveObject[i].time % 6]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_guepe_right[m_moveObject[i].time % 6]; + } + } + else + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_guepe_turn2r[m_moveObject[i].time % 5]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_guepe_turn2l[m_moveObject[i].time % 5]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_guepe_right[m_moveObject[i].time % 6]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_guepe_left[m_moveObject[i].time % 6]; + } + } + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 54) + { + if (m_moveObject[i].posStart.X > m_moveObject[i].posEnd.X) + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_creature_turn2[m_moveObject[i].time % 152]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_creature_turn2[m_moveObject[i].time % 152]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_creature_left[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_creature_right[m_moveObject[i].time % 8]; + } + } + else + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_creature_turn2[m_moveObject[i].time % 152]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_creature_turn2[m_moveObject[i].time % 152]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_creature_right[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_creature_left[m_moveObject[i].time % 8]; + } + } + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 32) + { + if (m_moveObject[i].posStart.X > m_moveObject[i].posEnd.X) + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_blupih_turn2l[m_moveObject[i].time % 26]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_blupih_turn2r[m_moveObject[i].time % 26]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_blupih_left[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_blupih_right[m_moveObject[i].time % 8]; + } + } + else + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_blupih_turn2r[m_moveObject[i].time % 26]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_blupih_turn2l[m_moveObject[i].time % 26]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_blupih_right[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_blupih_left[m_moveObject[i].time % 8]; + } + } + if ((m_moveObject[i].step == 1 || m_moveObject[i].step == 3) && m_moveObject[i].time == 21) + { + pos.X = m_moveObject[i].posCurrent.X; + pos.Y = m_moveObject[i].posCurrent.Y + 40; + if (ObjectStart(pos, 23, 55) != -1) + { + PlaySound(52, pos); + } + } + } + if (m_moveObject[i].type == 33) + { + if (m_moveObject[i].posStart.X > m_moveObject[i].posEnd.X) + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_blupit_turn2l[m_moveObject[i].time % 24]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_blupit_turn2r[m_moveObject[i].time % 24]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_blupit_left[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_blupit_right[m_moveObject[i].time % 8]; + } + } + else + { + if (m_moveObject[i].step == 1) + { + m_moveObject[i].icon = Tables.table_blupit_turn2r[m_moveObject[i].time % 24]; + } + if (m_moveObject[i].step == 3) + { + m_moveObject[i].icon = Tables.table_blupit_turn2l[m_moveObject[i].time % 24]; + } + if (m_moveObject[i].step == 2) + { + m_moveObject[i].icon = Tables.table_blupit_right[m_moveObject[i].time % 8]; + } + if (m_moveObject[i].step == 4) + { + m_moveObject[i].icon = Tables.table_blupit_left[m_moveObject[i].time % 8]; + } + } + if ((m_moveObject[i].step == 1 || m_moveObject[i].step == 3) && m_moveObject[i].time == 3) + { + int speed; + if ((m_moveObject[i].posStart.X < m_moveObject[i].posEnd.X && m_moveObject[i].step == 1) || (m_moveObject[i].posStart.X > m_moveObject[i].posEnd.X && m_moveObject[i].step == 3)) + { + pos.X = m_moveObject[i].posCurrent.X - 30; + pos.Y = m_moveObject[i].posCurrent.Y + BLUPIOFFY; + speed = -5; + } + else + { + pos.X = m_moveObject[i].posCurrent.X + 30; + pos.Y = m_moveObject[i].posCurrent.Y + BLUPIOFFY; + speed = 5; + } + if (ObjectStart(pos, 23, speed) != -1) + { + PlaySound(52, pos); + } + } + if ((m_moveObject[i].step == 1 || m_moveObject[i].step == 3) && m_moveObject[i].time == 21) + { + int speed; + if ((m_moveObject[i].posStart.X < m_moveObject[i].posEnd.X && m_moveObject[i].step == 1) || (m_moveObject[i].posStart.X > m_moveObject[i].posEnd.X && m_moveObject[i].step == 3)) + { + pos.X = m_moveObject[i].posCurrent.X + 30; + pos.Y = m_moveObject[i].posCurrent.Y + BLUPIOFFY; + speed = 5; + } + else + { + pos.X = m_moveObject[i].posCurrent.X - 30; + pos.Y = m_moveObject[i].posCurrent.Y + BLUPIOFFY; + speed = -5; + } + if (ObjectStart(pos, 23, speed) != -1) + { + PlaySound(52, pos); + } + } + } + if (m_moveObject[i].type == 34) + { + m_moveObject[i].icon = Tables.table_glu[m_moveObject[i].phase / 1 % 25]; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 37) + { + if (m_moveObject[i].phase >= 70) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_clear[m_moveObject[i].phase / 1 % 70]; + m_moveObject[i].channel = 10; + } + } + if (m_moveObject[i].type == 38) + { + if (m_moveObject[i].phase >= 90) + { + m_moveObject[i].type = 0; + } + else + { + m_moveObject[i].icon = Tables.table_electro[m_moveObject[i].phase / 1 % 90]; + if (m_moveObject[i].phase < 30) + { + m_moveObject[i].channel = 12; + } + else + { + m_moveObject[i].channel = 10; + } + } + } + if (m_moveObject[i].type == 13) + { + m_moveObject[i].icon = 68; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 46) + { + m_moveObject[i].icon = 208; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 19) + { + m_moveObject[i].icon = 89; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 28) + { + m_moveObject[i].icon = 167; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 23) + { + m_moveObject[i].icon = 176; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 29) + { + m_moveObject[i].icon = 177; + m_moveObject[i].channel = 10; + } + if (m_moveObject[i].type == 30) + { + m_moveObject[i].icon = 178; + m_moveObject[i].channel = 10; + } + m_moveObject[i].phase++; + if (m_moveObject[i].phase > 32700) + { + m_moveObject[i].phase = 0; + } + } + + private void DynamiteStart(int i, int dx, int dy) + { + TinyPoint posStart = m_moveObject[i].posStart; + posStart.X -= 34; + posStart.Y -= 34; + posStart.X += dx; + posStart.Y -= dy; + ObjectStart(posStart, 8, 0); + if (dx == 0 && dy == 0) + { + PlaySound(10, posStart); + m_decorAction = 1; + m_decorPhase = 0; + } + TinyRect src = default(TinyRect); + src.Left = posStart.X; + src.Right = posStart.X + 128; + src.Top = posStart.Y; + src.Bottom = posStart.Y + 128; + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.Y = posStart.Y / 64; + TinyPoint pos = default(TinyPoint); + for (int j = 0; j < 2; j++) + { + tinyPoint.X = posStart.X / 64; + for (int k = 0; k < 2; k++) + { + if (tinyPoint.X >= 0 && tinyPoint.X < 100 && tinyPoint.Y >= 0 && tinyPoint.Y < 100) + { + int icon = m_decor[tinyPoint.X, tinyPoint.Y].icon; + if (icon == 378 || icon == 379 || icon == 404 || icon == 410) + { + pos.X = tinyPoint.X * 64; + pos.Y = tinyPoint.Y * 64; + ModifDecor(pos, -1); + } + } + tinyPoint.X++; + } + tinyPoint.Y++; + } + TinyRect src2 = default(TinyRect); + for (i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 2 || m_moveObject[i].type == 3 || m_moveObject[i].type == 96 || m_moveObject[i].type == 97 || m_moveObject[i].type == 4 || m_moveObject[i].type == 6 || m_moveObject[i].type == 12 || m_moveObject[i].type == 13 || m_moveObject[i].type == 16 || m_moveObject[i].type == 17 || m_moveObject[i].type == 18 || m_moveObject[i].type == 19 || m_moveObject[i].type == 20 || m_moveObject[i].type == 24 || m_moveObject[i].type == 25 || m_moveObject[i].type == 26 || m_moveObject[i].type == 28 || m_moveObject[i].type == 30 || m_moveObject[i].type == 32 || m_moveObject[i].type == 33 || m_moveObject[i].type == 34 || m_moveObject[i].type == 40 || m_moveObject[i].type == 44 || m_moveObject[i].type == 46 || m_moveObject[i].type == 52 || m_moveObject[i].type == 54 || m_moveObject[i].type == 200 || m_moveObject[i].type == 201 || m_moveObject[i].type == 202 || m_moveObject[i].type == 203) + { + src2.Left = m_moveObject[i].posCurrent.X; + src2.Right = m_moveObject[i].posCurrent.X + 60; + src2.Top = m_moveObject[i].posCurrent.Y; + src2.Bottom = m_moveObject[i].posCurrent.Y + 60; + TinyRect dst; + if (Misc.IntersectRect(out dst, src2, src)) + { + if (m_moveObject[i].type == 12) + { + SearchLinkCaisse(i, true); + for (int l = 0; l < m_nbLinkCaisse; l++) + { + int channel = m_moveObject[m_linkCaisse[l]].channel; + int icon2 = m_moveObject[m_linkCaisse[l]].icon; + TinyPoint posCurrent = m_moveObject[m_linkCaisse[l]].posCurrent; + double num = m_random.Next(7, 23); + if (m_random.Next(0, 100) % 2 == 0) + { + num = 0.0 - num; + } + ByeByeAdd(channel, icon2, posCurrent, num, 1.0); + m_moveObject[m_linkCaisse[l]].type = 0; + } + ObjectDelete(m_moveObject[i].posCurrent, m_moveObject[i].type); + UpdateCaisse(); + } + else + { + ObjectDelete(m_moveObject[i].posCurrent, m_moveObject[i].type); + } + } + } + } + if (m_blupiFocus && !m_blupiShield && !m_blupiHide && !m_bSuperBlupi && m_blupiPos.X > posStart.X - 30 && m_blupiPos.X < posStart.X + 30 + 64 && m_blupiPos.Y > posStart.Y - 30 && m_blupiPos.Y < posStart.Y + 30 + 64) + { + BlupiDead(11, -1); + m_blupiAir = true; + } + } + + private int AscenseurDetect(TinyRect rect, TinyPoint oldpos, TinyPoint newpos) + { + if (m_blupiTimeNoAsc != 0) + { + return -1; + } + int num = newpos.Y - oldpos.Y; + int num2 = ((num >= 0) ? 30 : (-30)); + num = Math.Abs(num); + TinyRect src = default(TinyRect); + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type != 1 && m_moveObject[i].type != 47 && m_moveObject[i].type != 48) + { + continue; + } + src.Left = m_moveObject[i].posCurrent.X; + src.Right = m_moveObject[i].posCurrent.X + 64; + src.Top = m_moveObject[i].posCurrent.Y; + src.Bottom = m_moveObject[i].posCurrent.Y + 16; + TinyRect dst; + if (num < 30) + { + if (Misc.IntersectRect(out dst, src, rect)) + { + return i; + } + continue; + } + TinyRect src2 = rect; + src2.Top -= num / 30 * num2; + src2.Bottom -= num / 30 * num2; + for (int j = 0; j <= num / 30; j++) + { + if (Misc.IntersectRect(out dst, src, src2)) + { + return i; + } + src2.Top += num2; + src2.Bottom += num2; + } + } + return -1; + } + + private void AscenseurVertigo(int i, out bool bVertigoLeft, out bool bVertigoRight) + { + bVertigoLeft = false; + bVertigoRight = false; + if (m_blupiPos.X + 20 + 4 < m_moveObject[i].posCurrent.X) + { + bVertigoLeft = true; + } + if (m_blupiPos.X + 60 - 20 - 4 > m_moveObject[i].posCurrent.X + 64) + { + bVertigoRight = true; + } + if (AscenseurShift(i)) + { + if (bVertigoLeft) + { + bVertigoLeft = false; + bVertigoRight = true; + m_blupiTimeNoAsc = 10; + } + else if (bVertigoRight) + { + bVertigoRight = false; + bVertigoLeft = true; + m_blupiTimeNoAsc = 10; + } + } + } + + private bool AscenseurShift(int i) + { + if (i == -1) + { + return false; + } + if (m_moveObject[i].icon >= 311) + { + return m_moveObject[i].icon <= 316; + } + return false; + } + + private void AscenseurSynchro(int i) + { + for (i = 0; i < MAXMOVEOBJECT; i++) + { + m_moveObject[i].posCurrent = m_moveObject[i].posStart; + m_moveObject[i].step = 1; + m_moveObject[i].time = 0; + m_moveObject[i].phase = 0; + } + } + + private void UpdateCaisse() + { + m_nbRankCaisse = 0; + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 12) + { + m_rankCaisse[m_nbRankCaisse++] = i; + } + } + } + + private bool TestPushCaisse(int i, TinyPoint pos, bool bPop) + { + TinyPoint move = default(TinyPoint); + move.X = pos.X - m_moveObject[i].posCurrent.X; + move.Y = 0; + SearchLinkCaisse(i, bPop); + int y = m_moveObject[i].posCurrent.Y; + for (int j = 0; j < m_nbLinkCaisse; j++) + { + i = m_linkCaisse[j]; + if (!TestPushOneCaisse(i, move, y)) + { + return false; + } + } + for (int j = 0; j < m_nbLinkCaisse; j++) + { + i = m_linkCaisse[j]; + m_moveObject[i].posCurrent.X += move.X; + m_moveObject[i].posStart.X += move.X; + m_moveObject[i].posEnd.X += move.X; + } + return true; + } + + private bool TestPushOneCaisse(int i, TinyPoint move, int b) + { + TinyRect rect = default(TinyRect); + int num = (rect.Left = m_moveObject[i].posCurrent.X + move.X); + rect.Right = num + 64; + rect.Top = m_moveObject[i].posCurrent.Y; + rect.Bottom = m_moveObject[i].posCurrent.Y + 64; + if (DecorDetect(rect, false)) + { + return false; + } + if (m_moveObject[i].posCurrent.Y != b) + { + return true; + } + rect.Left = num; + rect.Right = num + 20; + rect.Top = m_moveObject[i].posCurrent.Y + 64; + rect.Bottom = m_moveObject[i].posCurrent.Y + 64 + 2; + if (!DecorDetect(rect)) + { + return false; + } + rect.Left = num + 64 - 20; + rect.Right = num + 64; + rect.Top = m_moveObject[i].posCurrent.Y + 64; + rect.Bottom = m_moveObject[i].posCurrent.Y + 64 + 2; + if (!DecorDetect(rect)) + { + return false; + } + return true; + } + + private void SearchLinkCaisse(int rank, bool bPop) + { + m_nbLinkCaisse = 0; + AddLinkCaisse(rank); + TinyPoint posCurrent = m_moveObject[rank].posCurrent; + bool flag; + TinyRect src = default(TinyRect); + TinyRect src2 = default(TinyRect); + do + { + flag = false; + for (int i = 0; i < m_nbLinkCaisse; i++) + { + int num = m_linkCaisse[i]; + if (m_moveObject[num].posCurrent.Y > posCurrent.Y || (bPop && (m_moveObject[num].posCurrent.X < posCurrent.X - 32 || m_moveObject[num].posCurrent.X > posCurrent.X + 32))) + { + continue; + } + src.Left = m_moveObject[num].posCurrent.X - 1; + src.Top = m_moveObject[num].posCurrent.Y - 1; + src.Right = src.Left + 64 + 1; + src.Bottom = src.Top + 64 + 1; + for (int j = 0; j < m_nbRankCaisse; j++) + { + int num2 = m_rankCaisse[j]; + if (num2 != num && m_moveObject[num2].posCurrent.Y <= posCurrent.Y && (!bPop || (m_moveObject[num2].posCurrent.X >= posCurrent.X - 32 && m_moveObject[num2].posCurrent.X <= posCurrent.X + 32))) + { + src2.Left = m_moveObject[num2].posCurrent.X - 1; + src2.Top = m_moveObject[num2].posCurrent.Y - 1; + src2.Right = src2.Left + 64 + 1; + src2.Bottom = src2.Top + 64 + 1; + TinyRect dst; + if (Misc.IntersectRect(out dst, src2, src) && AddLinkCaisse(num2)) + { + flag = true; + } + } + } + } + } + while (flag); + } + + private bool AddLinkCaisse(int rank) + { + for (int i = 0; i < m_nbLinkCaisse; i++) + { + if (m_linkCaisse[i] == rank) + { + return false; + } + } + m_linkCaisse[m_nbLinkCaisse] = rank; + m_nbLinkCaisse++; + return true; + } + + private int CaisseInFront() + { + TinyPoint tinyPoint = default(TinyPoint); + if (m_blupiDir == 1) + { + tinyPoint.X = m_blupiPos.X + 16 - 32; + tinyPoint.Y = m_blupiPos.Y; + } + else + { + tinyPoint.X = m_blupiPos.X + 60 - 16 + 32; + tinyPoint.Y = m_blupiPos.Y; + } + for (int i = 0; i < m_nbRankCaisse; i++) + { + int num = m_rankCaisse[i]; + if (tinyPoint.X > m_moveObject[num].posCurrent.X && tinyPoint.X < m_moveObject[num].posCurrent.X + 64 && tinyPoint.Y > m_moveObject[num].posCurrent.Y && tinyPoint.Y < m_moveObject[num].posCurrent.Y + 64) + { + return num; + } + } + return -1; + } + + private int CaisseGetMove(int max) + { + max -= (m_nbLinkCaisse - 1) / 2; + if (max < 1) + { + max = 1; + } + if (m_blupiPower) + { + max *= 2; + } + if (m_blupiPhase < 20) + { + max = max * m_blupiPhase / 20; + if (max == 0) + { + max++; + } + } + return max; + } + + private int MockeryDetect(TinyPoint pos) + { + if (m_blupiTimeMockery > 0) + { + return 0; + } + if (m_blupiAir) + { + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = pos.X + 30; + tinyPoint.Y = pos.Y + 30 + 64; + if (tinyPoint.X >= 0 && tinyPoint.X < 6400 && tinyPoint.Y >= 0 && tinyPoint.Y < 6400) + { + int icon = m_decor[tinyPoint.X / 64, tinyPoint.Y / 64].icon; + if (icon == 68 || icon == 317) + { + return 64; + } + } + tinyPoint.Y += 64; + if (tinyPoint.X >= 0 && tinyPoint.X < 6400 && tinyPoint.Y >= 0 && tinyPoint.Y < 6400) + { + int icon = m_decor[tinyPoint.X / 64, tinyPoint.Y / 64].icon; + if (icon == 68 || icon == 317) + { + return 64; + } + } + } + TinyRect src = default(TinyRect); + src.Left = pos.X; + src.Right = pos.X + 60; + src.Top = pos.Y + 11; + src.Bottom = pos.Y + 60; + if (m_blupiAir) + { + src.Bottom += 90; + } + TinyRect src2 = default(TinyRect); + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type != 2 && m_moveObject[i].type != 16 && m_moveObject[i].type != 96 && m_moveObject[i].type != 97 && m_moveObject[i].type != 4 && m_moveObject[i].type != 20 && m_moveObject[i].type != 44 && m_moveObject[i].type != 54 && m_moveObject[i].type != 23 && m_moveObject[i].type != 32 && m_moveObject[i].type != 33) + { + continue; + } + src2.Left = m_moveObject[i].posCurrent.X; + src2.Right = m_moveObject[i].posCurrent.X + 60; + src2.Top = m_moveObject[i].posCurrent.Y + 36; + src2.Bottom = m_moveObject[i].posCurrent.Y + 60; + TinyRect dst; + if (!Misc.IntersectRect(out dst, src2, src)) + { + continue; + } + if (m_moveObject[i].type == 54) + { + return 83; + } + if (m_blupiDir == 2) + { + if (pos.X < src2.Left) + { + if (m_moveObject[i].type == 2) + { + return 0; + } + return 63; + } + return 64; + } + if (pos.X < src2.Left) + { + return 64; + } + if (m_moveObject[i].type == 2) + { + return 0; + } + return 63; + } + return 0; + } + + private bool BlupiElectro(TinyPoint pos) + { + if (!m_blupiCloud) + { + return false; + } + TinyRect src = default(TinyRect); + src.Left = pos.X + 16; + src.Right = pos.X + 60 - 16; + src.Top = pos.Y + 11; + src.Bottom = pos.Y + 60 - 2; + TinyRect src2 = default(TinyRect); + src2.Left = m_blupiPos.X - 16 - 40; + src2.Right = m_blupiPos.X + 60 + 16 + 40; + src2.Top = m_blupiPos.Y + 11 - 40; + src2.Bottom = m_blupiPos.Y + 60 - 2 + 40; + TinyRect dst; + if (Misc.IntersectRect(out dst, src, src2)) + { + return true; + } + return false; + } + + private void MoveObjectFollow(TinyPoint pos) + { + if (m_blupiHide) + { + return; + } + TinyRect src = BlupiRect(pos); + src.Left = pos.X + 16; + src.Right = pos.X + 60 - 16; + TinyRect src2 = default(TinyRect); + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 96) + { + src2.Left = m_moveObject[i].posCurrent.X - 100; + src2.Right = m_moveObject[i].posCurrent.X + 60 + 100; + src2.Top = m_moveObject[i].posCurrent.Y - 100; + src2.Bottom = m_moveObject[i].posCurrent.Y + 60 + 100; + TinyRect dst; + if (Misc.IntersectRect(out dst, src2, src)) + { + m_moveObject[i].type = 97; + PlaySound(92, m_moveObject[i].posCurrent); + } + } + } + } + + private int MoveObjectDetect(TinyPoint pos, out bool bNear) + { + TinyRect src = BlupiRect(pos); + src.Left = pos.X + 16; + src.Right = pos.X + 60 - 16; + TinyRect src2 = default(TinyRect); + src2.Left = src.Left - 20; + src2.Right = src.Right + 20; + src2.Top = src.Top - 40; + src2.Bottom = src.Bottom + 30; + TinyRect src3 = default(TinyRect); + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 0 || m_moveObject[i].type == 27 || m_moveObject[i].type == 57 || m_moveObject[i].type == 39 || m_moveObject[i].type == 58 || m_moveObject[i].type == 34 || m_moveObject[i].type == 37 || m_moveObject[i].type == 38 || ((m_blupiAction == 14 || m_blupiAction == 29) && m_moveObject[i].type == 12)) + { + continue; + } + src3.Left = m_moveObject[i].posCurrent.X + 16; + src3.Right = m_moveObject[i].posCurrent.X + 60 - 16; + src3.Top = m_moveObject[i].posCurrent.Y + 36; + src3.Bottom = m_moveObject[i].posCurrent.Y + 60; + if (m_moveObject[i].type == 3) + { + if (m_blupiAction == 6) + { + continue; + } + src3.Top = m_moveObject[i].posCurrent.Y; + src3.Bottom = m_moveObject[i].posCurrent.Y + 60 - 36; + } + if (m_moveObject[i].type == 12) + { + src3.Left = m_moveObject[i].posCurrent.X - 16; + src3.Right = m_moveObject[i].posCurrent.X + 64 + 16; + src3.Top = m_moveObject[i].posCurrent.Y; + src3.Bottom = m_moveObject[i].posCurrent.Y + 64; + if (m_blupiDir == 1) + { + src3.Left += 20; + } + else + { + src3.Right -= 20; + } + } + if (m_moveObject[i].type == 17 || m_moveObject[i].type == 20 || m_moveObject[i].type == 44 || m_moveObject[i].type == 54) + { + src3.Top = m_moveObject[i].posCurrent.Y + 16; + src3.Bottom = m_moveObject[i].posCurrent.Y + 60 - 16; + } + if (m_moveObject[i].type == 23) + { + src3.Left = m_moveObject[i].posCurrent.X + 24; + src3.Right = m_moveObject[i].posCurrent.X + 64 - 24; + src3.Top = m_moveObject[i].posCurrent.Y + 10; + src3.Bottom = m_moveObject[i].posCurrent.Y + 60 - 32; + } + TinyRect dst; + if (Misc.IntersectRect(out dst, src3, src)) + { + bNear = true; + return i; + } + if (m_moveObject[i].type == 2 && Misc.IntersectRect(out dst, src3, src2)) + { + bNear = false; + return i; + } + } + bNear = false; + return -1; + } + + private int MoveAscenseurDetect(TinyPoint pos, int height) + { + if (m_blupiTimeNoAsc != 0) + { + return -1; + } + TinyRect src = default(TinyRect); + src.Left = pos.X + 12; + src.Right = pos.X + 60 - 12; + src.Top = pos.Y + 60 - 2; + src.Bottom = pos.Y + 60 + height - 1; + TinyRect src2 = default(TinyRect); + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 1 || m_moveObject[i].type == 47 || m_moveObject[i].type == 48) + { + src2.Left = m_moveObject[i].posCurrent.X; + src2.Right = m_moveObject[i].posCurrent.X + 64; + src2.Top = m_moveObject[i].posCurrent.Y; + src2.Bottom = m_moveObject[i].posCurrent.Y + 16; + TinyRect dst; + if (Misc.IntersectRect(out dst, src2, src)) + { + return i; + } + } + } + return -1; + } + + private int MoveChargeDetect(TinyPoint pos) + { + TinyRect src = default(TinyRect); + src.Left = pos.X + 16; + src.Right = pos.X + 60 - 16; + src.Top = pos.Y + 11; + src.Bottom = pos.Y + 60 - 2; + TinyRect src2 = default(TinyRect); + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 31) + { + src2.Left = m_moveObject[i].posCurrent.X - 10; + src2.Right = m_moveObject[i].posCurrent.X + 60 + 10; + src2.Top = m_moveObject[i].posCurrent.Y + 36; + src2.Bottom = m_moveObject[i].posCurrent.Y + 60; + TinyRect dst; + if (Misc.IntersectRect(out dst, src2, src)) + { + return i; + } + } + } + return -1; + } + + private int MovePersoDetect(TinyPoint pos) + { + TinyRect src = default(TinyRect); + src.Left = pos.X + 16; + src.Right = pos.X + 60 - 16; + src.Top = pos.Y + 11; + src.Bottom = pos.Y + 60 - 2; + TinyRect src2 = default(TinyRect); + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type >= 200 && m_moveObject[i].type <= 203) + { + src2.Left = m_moveObject[i].posCurrent.X + 16; + src2.Right = m_moveObject[i].posCurrent.X + 60 - 16; + src2.Top = m_moveObject[i].posCurrent.Y + 36; + src2.Bottom = m_moveObject[i].posCurrent.Y + 60; + TinyRect dst; + if (Misc.IntersectRect(out dst, src2, src)) + { + return i; + } + } + } + return -1; + } + + private int MoveObjectDelete(TinyPoint cel) + { + int result = -1; + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type != 0) + { + if (cel.X == m_moveObject[i].posStart.X / 64 && cel.Y == m_moveObject[i].posStart.Y / 64) + { + result = m_moveObject[i].type; + m_moveObject[i].type = 0; + } + else if (cel.X == m_moveObject[i].posEnd.X / 64 && cel.Y == m_moveObject[i].posEnd.Y / 64) + { + result = m_moveObject[i].type; + m_moveObject[i].type = 0; + } + } + } + return result; + } + + private int MoveObjectFree() + { + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 0) + { + m_moveObject[i].type = 0; + return i; + } + } + return -1; + } + + private int SortGetType(int type) + { + switch (type) + { + case 2: + case 3: + case 96: + case 97: + return 1; + case 12: + return 2; + default: + return 3; + } + } + + private void MoveObjectSort() + { + MoveObject dst = default(MoveObject); + int num = 0; + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type != 0) + { + MoveObjectCopy(ref m_moveObject[num++], m_moveObject[i]); + } + } + for (int i = num; i < MAXMOVEOBJECT; i++) + { + m_moveObject[i].type = 0; + } + if (num <= 1) + { + return; + } + bool flag; + do + { + flag = false; + for (int i = 0; i < num - 1; i++) + { + if (SortGetType(m_moveObject[i].type) > SortGetType(m_moveObject[i + 1].type)) + { + MoveObjectCopy(ref dst, m_moveObject[i]); + MoveObjectCopy(ref m_moveObject[i], m_moveObject[i + 1]); + MoveObjectCopy(ref m_moveObject[i + 1], dst); + flag = true; + } + } + } + while (flag); + UpdateCaisse(); + m_nbLinkCaisse = 0; + } + + private void MoveObjectPriority(int i) + { + MoveObject dst = default(MoveObject); + if (i == 0 || m_moveObject[i].type != 23) + { + return; + } + for (int j = 0; j < MAXMOVEOBJECT; j++) + { + if (m_moveObject[j].type == 23) + { + continue; + } + if (j <= i) + { + MoveObjectCopy(ref dst, m_moveObject[i]); + MoveObjectCopy(ref m_moveObject[i], m_moveObject[j]); + MoveObjectCopy(ref m_moveObject[j], dst); + if (m_moveObject[i].type == 12 || m_moveObject[j].type == 12) + { + UpdateCaisse(); + } + } + break; + } + } + + private int MoveObjectSearch(TinyPoint pos) + { + return MoveObjectSearch(pos, -1); + } + + private int MoveObjectSearch(TinyPoint pos, int type) + { + for (int i = 0; i < MAXMOVEOBJECT; i++) + { + if (m_moveObject[i].type == 0 || (type != -1 && m_moveObject[i].type != type)) + { + continue; + } + if (m_moveObject[i].type == 23 && m_moveObject[i].posStart.X != m_moveObject[i].posEnd.X) + { + if (m_moveObject[i].posCurrent.X >= pos.X - 100 && m_moveObject[i].posCurrent.X <= pos.X + 100 && m_moveObject[i].posCurrent.Y == pos.Y) + { + return i; + } + } + else if (m_moveObject[i].type == 23 && m_moveObject[i].posStart.Y != m_moveObject[i].posEnd.Y) + { + if (m_moveObject[i].posCurrent.Y >= pos.Y - 100 && m_moveObject[i].posCurrent.Y <= pos.Y + 100 && m_moveObject[i].posCurrent.X == pos.X) + { + return i; + } + } + else if (m_moveObject[i].posCurrent.X == pos.X && m_moveObject[i].posCurrent.Y == pos.Y) + { + return i; + } + } + return -1; + } + + private void ByeByeHelico() + { + if (m_blupiHelico) + { + ByeByeAdd(10, 68, m_blupiPos, 7.0, 0.5); + } + } + + private void ByeByeAdd(int channel, int icon, TinyPoint pos, double rotationSpeed, double animationSpeed) + { + ByeByeObject byeByeObject = new ByeByeObject(); + byeByeObject.channel = channel; + byeByeObject.icon = icon; + byeByeObject.posX = pos.X; + byeByeObject.posY = pos.Y; + byeByeObject.rotation = 0.0; + byeByeObject.phase = 0.0; + byeByeObject.rotationSpeed = rotationSpeed; + byeByeObject.animationSpeed = animationSpeed; + ByeByeObject byeByeObject2 = byeByeObject; + int num = m_random.Next(0, 10); + if (m_random.Next(0, 1000) % 2 == 0) + { + byeByeObject2.speedX = num + 10; + } + else + { + byeByeObject2.speedX = -(num + 10); + } + byeByeObjects.Add(byeByeObject2); + } + + private void ByeByeStep() + { + int num = 0; + while (num < byeByeObjects.Count) + { + ByeByeObject byeByeObject = byeByeObjects[num]; + double num2 = 10.0 - byeByeObject.phase; + if (num2 > 0.0) + { + byeByeObject.posY -= Math.Pow(num2, 1.5) * byeByeObject.animationSpeed; + } + if (num2 < 0.0) + { + byeByeObject.posY += Math.Pow(0.0 - num2, 1.5) * byeByeObject.animationSpeed; + } + byeByeObject.posX += byeByeObject.speedX * byeByeObject.animationSpeed; + if (byeByeObject.speedX > 0.0) + { + byeByeObject.speedX -= byeByeObject.animationSpeed; + } + if (byeByeObject.speedX < 0.0) + { + byeByeObject.speedX += byeByeObject.animationSpeed; + } + byeByeObject.rotation += byeByeObject.rotationSpeed; + byeByeObject.phase += byeByeObject.animationSpeed; + if (byeByeObject.channel == 10 && byeByeObject.icon >= 187 && byeByeObject.icon <= 194) + { + byeByeObject.icon = Tables.table_invert[(int)byeByeObject.phase / 2 % 20]; + } + if (byeByeObject.phase > 30.0) + { + byeByeObjects.RemoveAt(num); + } + else + { + num++; + } + } + } + + private void ByeByeDraw(TinyPoint posDecor) + { + foreach (ByeByeObject byeByeObject in byeByeObjects) + { + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = m_drawBounds.Left + (int)byeByeObject.posX - posDecor.X; + tinyPoint.Y = m_drawBounds.Top + (int)byeByeObject.posY - posDecor.Y; + TinyPoint pos = tinyPoint; + m_pixmap.QuickIcon(byeByeObject.channel, byeByeObject.icon, pos, 1.0, byeByeObject.rotation); + } + } + + private TinyPoint VoyageGetPosVie(int nbVies) + { + TinyPoint result = default(TinyPoint); + result.X = 210 + 16 * nbVies; + result.Y = 417; + return result; + } + + private void VoyageInit(TinyPoint start, TinyPoint end, int icon, int channel) + { + if (m_voyageIcon != -1) + { + m_voyagePhase = m_voyageTotal; + VoyageStep(); + } + m_voyageStart = start; + m_voyageEnd = end; + m_voyageIcon = icon; + m_voyageChannel = channel; + int num = Math.Abs(end.X - start.X); + int num2 = Math.Abs(end.Y - start.Y); + m_voyagePhase = 0; + m_voyageTotal = (num + num2) / 10; + if (m_voyageIcon == 48 && m_voyageChannel == 2) + { + m_voyageTotal = 40; + m_nbVies--; + m_sound.PlayImage(9, end, -1, false); + } + if (m_voyageIcon == 21 && m_voyageChannel == 10) + { + m_sound.PlayImage(12, start, -1, false); + } + if (m_voyageIcon == 6 && m_voyageChannel == 10) + { + if (m_nbTresor == m_totalTresor - 1) + { + m_sound.PlayImage(19, start, -1, false); + } + else + { + m_sound.PlayImage(11, start, -1, false); + } + } + if (m_voyageIcon == 215 && m_voyageChannel == 10) + { + m_sound.PlayImage(11, start, -1, false); + } + if (m_voyageIcon == 222 && m_voyageChannel == 10) + { + m_sound.PlayImage(11, start, -1, false); + } + if (m_voyageIcon == 229 && m_voyageChannel == 10) + { + m_sound.PlayImage(11, start, -1, false); + } + if (m_voyageIcon == 108 && m_voyageChannel == 4) + { + m_sound.PlayImage(60, start, -1, false); + } + if (m_voyageIcon == 252 && m_voyageChannel == 10) + { + m_sound.PlayImage(60, start, -1, false); + } + if (m_voyageIcon == 177 && m_voyageChannel == 10) + { + m_sound.PlayImage(54, start, -1, false); + } + if (m_voyageIcon == 230 && m_voyageChannel == 10) + { + m_voyageTotal = 100; + } + if (m_voyageIcon == 40 && m_voyageChannel == 10) + { + m_voyageTotal = 50; + } + } + + private void VoyageStep() + { + if (m_voyageIcon == -1) + { + return; + } + if (m_voyagePhase < m_voyageTotal) + { + if (m_time % 2 == 0 && m_voyageIcon >= 230 && m_voyageIcon <= 241 && m_voyageChannel == 10) + { + m_voyageIcon++; + if (m_voyageIcon > 241) + { + m_voyageIcon = 230; + } + } + } + else + { + if (m_voyageIcon == 48 && m_voyageChannel == 2) + { + m_blupiAction = 1; + m_blupiPhase = 0; + m_blupiFocus = true; + } + if (m_voyageIcon == 21 && m_voyageChannel == 10) + { + if (m_nbVies < 10) + { + m_nbVies++; + } + m_sound.PlayImage(3, m_voyageEnd, -1, false); + } + if (m_voyageIcon == 6 && m_voyageChannel == 10) + { + m_nbTresor++; + OpenDoorsTresor(); + m_sound.PlayImage(3, m_voyageEnd, -1, false); + } + if (m_voyageIcon == 215 && m_voyageChannel == 10) + { + m_blupiCle |= 1; + m_sound.PlayImage(3, m_voyageEnd, -1, false); + } + if (m_voyageIcon == 222 && m_voyageChannel == 10) + { + m_blupiCle |= 2; + m_sound.PlayImage(3, m_voyageEnd, -1, false); + } + if (m_voyageIcon == 229 && m_voyageChannel == 10) + { + m_blupiCle |= 4; + m_sound.PlayImage(3, m_voyageEnd, -1, false); + } + if (m_voyageIcon == 108 && m_voyageChannel == 4) + { + m_blupiPerso++; + m_sound.PlayImage(3, m_voyageEnd, -1, false); + } + if (m_voyageIcon == 252 && m_voyageChannel == 10) + { + m_blupiDynamite++; + m_sound.PlayImage(3, m_voyageEnd, -1, false); + } + if (m_voyageIcon == 177 && m_voyageChannel == 10) + { + m_sound.PlayImage(3, m_voyageEnd, -1, false); + } + m_voyageIcon = -1; + } + m_voyagePhase++; + } + + private void VoyageDraw() + { + if (m_voyageIcon == -1 || m_voyageTotal == 0) + { + return; + } + int num = m_voyagePhase; + if (m_voyageIcon == 40 && m_voyageChannel == 10) + { + num -= 30; + if (num < 0) + { + num = 0; + } + } + TinyPoint pos = default(TinyPoint); + pos.X = m_voyageStart.X + (m_voyageEnd.X - m_voyageStart.X) * num / m_voyageTotal; + pos.Y = m_voyageStart.Y + (m_voyageEnd.Y - m_voyageStart.Y) * num / m_voyageTotal; + if (m_voyageIcon != 40 || m_voyageChannel != 10 || num != 0) + { + m_pixmap.HudIcon(m_voyageChannel, m_voyageIcon, pos); + } + if (m_voyageIcon == 40 && m_voyageChannel == 10) + { + int[] array = new int[7] { -8, -6, -4, 0, 4, 6, 8 }; + pos.X -= 34; + pos.X += m_posDecor.X; + pos.Y += m_posDecor.Y; + int num2 = array[m_random.Next(0, 6)]; + int num3 = m_random.Next(-10, 10); + if (num == 0) + { + num2 /= 2; + num3 *= 4; + } + pos.Y += num3; + ObjectStart(pos, 93, num2); + } + } + + private bool IsFloatingObject(int i) + { + TinyPoint posCurrent = m_moveObject[i].posCurrent; + int num = (posCurrent.X + 32) / 64; + int num2 = posCurrent.Y / 64 + 1; + int icon = m_decor[num, num2].icon; + return IsPassIcon(icon); + } + + private bool IsRightBorder(int x, int y, int dx, int dy) + { + int num = ((m_dimDecor.X != 0) ? 100 : 10); + int num2 = ((m_dimDecor.Y != 0) ? 100 : 8); + if (x < 0 || x >= num || y < 0 || y >= num2) + { + return true; + } + int icon = m_decor[x + dx, y + dy].icon; + if (icon < 386 || icon > 397) + { + switch (icon) + { + case 245: + case 400: + break; + case 250: + case 251: + case 252: + case 253: + case 254: + case 255: + case 256: + case 257: + case 258: + case 259: + case 260: + icon = m_decor[x, y].icon; + if (icon >= 250) + { + return icon <= 260; + } + return false; + default: + icon = m_decor[x, y].icon; + switch (icon) + { + case -1: + return false; + case 32: + case 33: + case 34: + return false; + case 68: + case 92: + if (dy == -1) + { + return false; + } + return true; + case 317: + if (dy == 1) + { + return false; + } + return true; + case 19: + case 21: + case 25: + case 26: + case 28: + if (dy == 1) + { + return false; + } + return true; + case 27: + if (dx != 0) + { + return false; + } + return true; + case 45: + case 46: + case 47: + if (dy == 1) + { + return false; + } + return true; + default: + switch (icon) + { + case 15: + case 16: + case 75: + case 89: + case 90: + case 155: + if (dx == -1 || dy == 1) + { + return false; + } + return true; + case 17: + case 18: + case 74: + case 87: + case 88: + case 154: + if (dx == 1 || dy == 1) + { + return false; + } + return true; + case 76: + case 77: + case 199: + case 200: + if (dx != 0) + { + return false; + } + return true; + case 110: + case 111: + case 112: + case 113: + case 114: + case 115: + case 116: + case 117: + case 118: + case 119: + case 120: + case 121: + case 122: + case 123: + case 124: + case 125: + return false; + default: + switch (icon) + { + case 126: + if (dx == 1) + { + return true; + } + return false; + case 129: + if (dx == -1) + { + return true; + } + return false; + case 132: + if (dy == 1) + { + return true; + } + return false; + case 135: + if (dy == -1) + { + return true; + } + return false; + case 139: + case 140: + case 141: + case 142: + case 143: + return false; + default: + switch (icon) + { + case 138: + if (dy == -1) + { + return true; + } + return false; + case 202: + return false; + case 107: + case 108: + case 109: + case 157: + if (dx != 0) + { + return true; + } + return false; + default: + switch (icon) + { + case 309: + case 310: + case 410: + case 411: + case 412: + case 413: + case 414: + case 415: + case 416: + case 417: + case 418: + case 419: + case 420: + break; + default: + switch (icon) + { + case 182: + case 183: + if (dy != 0) + { + return true; + } + return false; + case 334: + case 335: + case 336: + if (dy != 0) + { + return true; + } + return false; + default: + if (icon >= 250 && icon <= 260) + { + return false; + } + if (icon >= 264 && icon <= 282) + { + return false; + } + switch (icon) + { + case 378: + return false; + case 404: + case 410: + return false; + case 421: + case 422: + case 423: + case 424: + case 425: + case 426: + case 427: + case 428: + case 429: + case 430: + case 431: + case 432: + case 433: + case 434: + case 435: + case 436: + case 437: + case 438: + case 439: + case 440: + if (dy != 0) + { + return true; + } + return false; + default: + return true; + } + } + } + break; + case 158: + case 159: + case 160: + case 161: + case 162: + case 163: + case 164: + case 165: + case 166: + case 167: + case 168: + case 169: + case 170: + case 171: + case 172: + case 173: + case 174: + case 175: + case 176: + case 177: + case 178: + case 179: + case 180: + case 181: + break; + } + if (dy == 1) + { + return true; + } + return false; + } + } + } + } + } + icon = m_decor[x, y].icon; + if ((icon < 386 || icon > 397) && icon != 400) + { + return icon == 245; + } + return true; + } + + private bool IsFromage(int x, int y) + { + if (x < 0 || x >= 100 || y < 0 || y >= 100) + { + return false; + } + int icon = m_decor[x, y].icon; + if (icon >= 246 && icon <= 249) + { + return true; + } + if (icon == 339) + { + return true; + } + return false; + } + + private bool IsGrotte(int x, int y) + { + if (x < 0 || x >= 100 || y < 0 || y >= 100) + { + return false; + } + switch (m_decor[x, y].icon) + { + case 284: + case 301: + return true; + case 337: + return true; + default: + return false; + } + } + + private void AdaptMidBorder(int x, int y) + { + if (x < 0 || x >= 100 || y < 0 || y >= 100) + { + return; + } + int num = 15; + if (!IsRightBorder(x, y + 1, 0, -1)) + { + num &= -2; + } + if (!IsRightBorder(x, y - 1, 0, 1)) + { + num &= -3; + } + if (!IsRightBorder(x + 1, y, -1, 0)) + { + num &= -5; + } + if (!IsRightBorder(x - 1, y, 1, 0)) + { + num &= -9; + } + int num2 = m_decor[x, y].icon; + if (num2 == 156) + { + num2 = 35; + } + if (num2 == 252 || num2 == 253) + { + num2 = 251; + } + if (num2 == 255) + { + num2 = 254; + } + if (num2 == 362) + { + num2 = 347; + } + if (num2 == 363) + { + num2 = 348; + } + if (num2 >= 341 && num2 <= 346) + { + num2 = 341; + } + for (int i = 0; i < 144; i++) + { + if (num2 == Tables.table_adapt_decor[i]) + { + num2 = Tables.table_adapt_decor[i / 16 * 16 + num]; + if (num2 == 35 && m_random.Next() % 2 == 0) + { + num2 = 156; + } + if (num2 == 251) + { + num2 = m_random.Next(251, 253); + } + if (num2 == 254 && m_random.Next() % 2 == 0) + { + num2 = 255; + } + if (num2 == 347 && m_random.Next() % 2 == 0) + { + num2 = 362; + } + if (num2 == 348 && m_random.Next() % 2 == 0) + { + num2 = 363; + } + if (num2 == 341) + { + num2 = m_random.Next(341, 346); + } + m_decor[x, y].icon = num2; + return; + } + } + switch (m_decor[x, y].icon) + { + case -1: + case 264: + case 265: + case 266: + case 267: + case 268: + case 269: + case 270: + case 271: + case 272: + case 273: + case 274: + case 275: + case 276: + case 277: + case 278: + case 279: + case 280: + case 281: + case 282: + num = 15; + if (!IsFromage(x, y + 1)) + { + num &= -2; + } + if (!IsFromage(x, y - 1)) + { + num &= -3; + } + if (!IsFromage(x + 1, y)) + { + num &= -5; + } + if (!IsFromage(x - 1, y)) + { + num &= -9; + } + num2 = Tables.table_adapt_fromage[num]; + if (num2 == 268 && m_random.Next() % 2 == 0) + { + num2 = 279; + } + if (num2 == 269 && m_random.Next() % 2 == 0) + { + num2 = 280; + } + if (num2 == 264 && m_random.Next() % 2 == 0) + { + num2 = 281; + } + if (num2 == 265 && m_random.Next() % 2 == 0) + { + num2 = 282; + } + m_decor[x, y].icon = num2; + break; + } + switch (m_decor[x, y].icon) + { + case -1: + case 285: + case 286: + case 287: + case 288: + case 289: + case 290: + case 291: + case 292: + case 293: + case 294: + case 295: + case 296: + case 297: + case 298: + case 299: + case 300: + case 302: + case 303: + num = 15; + if (!IsGrotte(x, y + 1)) + { + num &= -2; + } + if (!IsGrotte(x, y - 1)) + { + num &= -3; + } + if (!IsGrotte(x + 1, y)) + { + num &= -5; + } + if (!IsGrotte(x - 1, y)) + { + num &= -9; + } + num2 = Tables.table_adapt_fromage[num + 16]; + if (num2 == 289 && m_random.Next() % 2 == 0) + { + num2 = 300; + } + if (num2 == 285 && m_random.Next() % 2 == 0) + { + num2 = 302; + } + if (num2 == 286 && m_random.Next() % 2 == 0) + { + num2 = 303; + } + m_decor[x, y].icon = num2; + break; + } + } + + private void AdaptBorder(TinyPoint cel) + { + AdaptMidBorder(cel.X, cel.Y); + AdaptMidBorder(cel.X + 1, cel.Y); + AdaptMidBorder(cel.X - 1, cel.Y); + AdaptMidBorder(cel.X, cel.Y + 1); + AdaptMidBorder(cel.X, cel.Y - 1); + int icon = m_decor[cel.X, cel.Y].icon; + if (icon != -1 && !IsPassIcon(icon)) + { + MoveObjectDelete(cel); + } + icon = m_decor[cel.X, cel.Y].icon; + if (icon == 304) + { + for (int i = 0; i < 4; i++) + { + cel.Y++; + if (cel.Y >= 100) + { + break; + } + icon = m_decor[cel.X, cel.Y].icon; + if (icon != -1) + { + break; + } + m_decor[cel.X, cel.Y].icon = 305; + } + } + if (icon != -1) + { + return; + } + for (int i = 0; i < 4; i++) + { + cel.Y++; + if (cel.Y >= 100) + { + break; + } + icon = m_decor[cel.X, cel.Y].icon; + if (icon != 305) + { + break; + } + m_decor[cel.X, cel.Y].icon = -1; + } + } + + public void CurrentDelete() + { + Worlds.DeleteCurrentGame(); + } + + public bool CurrentWrite() + { + Worlds.WriteClear(); + Worlds.WriteSection("DescFile"); + Worlds.WriteIntField("_version_", 1); + Worlds.WritePointField("_posDecor_", m_posDecor); + Worlds.WritePointField("_dimDecor_", m_dimDecor); + Worlds.WriteIntField("_term_", m_term); + Worlds.WriteIntField("_music_", m_music); + Worlds.WriteIntField("_region_", m_region); + Worlds.WriteIntField("_time_", m_time); + Worlds.WritePointField("_blupiPos_", m_blupiPos); + Worlds.WritePointField("_blupiValidPos_", m_blupiValidPos); + Worlds.WriteIntField("_blupiAction_", m_blupiAction); + Worlds.WriteIntField("_blupiDir_", m_blupiDir); + Worlds.WriteIntField("_blupiPhase_", m_blupiPhase); + Worlds.WriteDoubleField("_blupiVitesseX_", m_blupiVitesseX); + Worlds.WriteDoubleField("_blupiVitesseY_", m_blupiVitesseY); + Worlds.WriteIntField("_blupiIcon_", m_blupiIcon); + Worlds.WriteIntField("_blupiSec_", m_blupiSec); + Worlds.WriteIntField("_blupiChannel_", m_blupiChannel); + Worlds.WritePointField("_blupiVector_", m_blupiVector); + Worlds.WriteIntField("_blupiTransport_", m_blupiTransport); + Worlds.WriteBoolField("_blupiFocus_", m_blupiFocus); + Worlds.WriteBoolField("_blupiAir_", m_blupiAir); + Worlds.WriteBoolField("_blupiHelico_", m_blupiHelico); + Worlds.WriteBoolField("_blupiOver_", m_blupiOver); + Worlds.WriteBoolField("_blupiJeep_", m_blupiJeep); + Worlds.WriteBoolField("_blupiTank_", m_blupiTank); + Worlds.WriteBoolField("_blupiSkate_", m_blupiSkate); + Worlds.WriteBoolField("_blupiNage_", m_blupiNage); + Worlds.WriteBoolField("_blupiSurf_", m_blupiSurf); + Worlds.WriteBoolField("_blupiVent_", m_blupiVent); + Worlds.WriteBoolField("_blupiSuspend_", m_blupiSuspend); + Worlds.WriteBoolField("_blupiJumpAie_", m_blupiJumpAie); + Worlds.WriteBoolField("_blupiShield_", m_blupiShield); + Worlds.WriteBoolField("_blupiPower_", m_blupiPower); + Worlds.WriteBoolField("_blupiCloud_", m_blupiCloud); + Worlds.WriteBoolField("_blupiHide_", m_blupiHide); + Worlds.WriteBoolField("_blupiInvert_", m_blupiInvert); + Worlds.WriteBoolField("_blupiBalloon_", m_blupiBalloon); + Worlds.WriteBoolField("_blupiEcrase_", m_blupiEcrase); + Worlds.WriteBoolField("_blupiMotorHigh_", m_blupiMotorHigh); + Worlds.WritePointField("_blupiPosHelico_", m_blupiPosHelico); + Worlds.WritePointField("_blupiPosMagic_", m_blupiPosMagic); + Worlds.WriteBoolField("_blupiRestart_", m_blupiRestart); + Worlds.WriteBoolField("_blupiFront_", m_blupiFront); + Worlds.WriteIntField("_blupiBullet_", m_blupiBullet); + Worlds.WriteIntField("_blupiCle_", m_blupiCle); + Worlds.WriteIntField("_blupiPerso_", m_blupiPerso); + Worlds.WriteIntField("_blupiDynamite_", m_blupiDynamite); + Worlds.WriteIntField("_blupiNoBarre_", m_blupiNoBarre); + Worlds.WriteIntField("_blupiTimeShield_", m_blupiTimeShield); + Worlds.WriteIntField("_blupiTimeFire_", m_blupiTimeFire); + Worlds.WriteIntField("_blupiTimeNoAsc_", m_blupiTimeNoAsc); + Worlds.WriteIntField("_blupiTimeOuf_", m_blupiTimeOuf); + Worlds.WriteIntField("_blupiActionOuf_", m_blupiActionOuf); + Worlds.WriteIntField("_blupiFifoNb_", m_blupiFifoNb); + Worlds.WritePointField("_blupiStartPos_", m_blupiStartPos); + Worlds.WriteIntField("_blupiStartDir_", m_blupiStartDir); + Worlds.WriteIntField("_blupiLevel_", m_blupiLevel); + Worlds.WriteBoolField("_bFoundCle_", m_bFoundCle); + Worlds.WriteBoolField("_bPrivate_", m_bPrivate); + Worlds.WriteBoolField("_bCheatDoors_", m_bCheatDoors); + Worlds.WriteBoolField("_bSuperBlupi_", m_bSuperBlupi); + Worlds.WriteBoolField("_bDrawSecret_", m_bDrawSecret); + Worlds.WriteIntField("_mission_", m_mission); + Worlds.WriteIntField("_nbVies_", m_nbVies); + Worlds.WriteIntField("_nbTresor_", m_nbTresor); + Worlds.WriteIntField("_totalTresor_", m_totalTresor); + Worlds.WriteIntField("_goalPhase_", m_goalPhase); + Worlds.WritePointField("_scrollPoint_", m_scrollPoint); + Worlds.WritePointField("_scrollAdd_", m_scrollAdd); + Worlds.WriteIntField("_voyageIcon_", m_voyageIcon); + Worlds.WriteIntField("_voyageChannel_", m_voyageChannel); + Worlds.WriteIntField("_voyagePhase_", m_voyagePhase); + Worlds.WriteIntField("_voyageTotal_", m_voyageTotal); + Worlds.WritePointField("_voyageStart_", m_voyageStart); + Worlds.WritePointField("_voyageEnd_", m_voyageEnd); + Worlds.WriteIntField("_decorAction_", m_decorAction); + Worlds.WriteIntField("_decorPhase_", m_decorPhase); + Worlds.WriteIntField("_nbRankCaisse_", m_nbRankCaisse); + Worlds.WriteIntField("_nbLinkCaisse_", m_nbLinkCaisse); + Worlds.WritePointField("_sucettePos_", m_sucettePos); + Worlds.WriteIntField("_sucetteType_", m_sucetteType); + Worlds.WriteIntArrayField("_RankCaisse_", m_rankCaisse); + Worlds.WriteIntArrayField("_LinkCaisse_", m_linkCaisse); + Worlds.WriteIntArrayField("_BalleTraj_", m_balleTraj); + Worlds.WriteIntArrayField("_MoveTraj_", m_moveTraj); + Worlds.WriteIntArrayField("_Doors_", m_doors); + Worlds.WriteEndSection(); + Worlds.WriteSection("Decor"); + Worlds.WriteEndSection(); + for (int i = 0; i < 100; i++) + { + int[] array = new int[100]; + for (int j = 0; j < 100; j++) + { + array[j] = m_decor[i, j].icon; + } + Worlds.WriteDecorField(array); + } + Worlds.WriteSection("BigDecor"); + Worlds.WriteEndSection(); + for (int k = 0; k < 100; k++) + { + int[] array2 = new int[100]; + for (int l = 0; l < 100; l++) + { + array2[l] = m_bigDecor[k, l].icon; + } + Worlds.WriteDecorField(array2); + } + for (int m = 0; m < MAXMOVEOBJECT; m++) + { + if (m_moveObject[m].type != 0) + { + Worlds.WriteSection("MoveObject"); + Worlds.WriteIntField("index", m); + Worlds.WriteIntField("type", m_moveObject[m].type); + Worlds.WriteIntField("stepAdvance", m_moveObject[m].stepAdvance); + Worlds.WriteIntField("stepRecede", m_moveObject[m].stepRecede); + Worlds.WriteIntField("timeStopStart", m_moveObject[m].timeStopStart); + Worlds.WriteIntField("timeStopEnd", m_moveObject[m].timeStopEnd); + Worlds.WritePointField("posStart", m_moveObject[m].posStart); + Worlds.WritePointField("posEnd", m_moveObject[m].posEnd); + Worlds.WritePointField("posCurrent", m_moveObject[m].posCurrent); + Worlds.WriteIntField("step", m_moveObject[m].step); + Worlds.WriteIntField("time", m_moveObject[m].time); + Worlds.WriteIntField("phase", m_moveObject[m].phase); + Worlds.WriteIntField("channel", m_moveObject[m].channel); + Worlds.WriteIntField("icon", m_moveObject[m].icon); + Worlds.WriteEndSection(); + } + } + for (int n = 0; n < 2; n++) + { + Worlds.WriteSection("Jauge"); + Worlds.WriteBoolField("hide", m_jauges[n].GetHide()); + Worlds.WriteIntField("mode", m_jauges[n].GetMode()); + Worlds.WriteIntField("level", m_jauges[n].GetLevel()); + Worlds.WriteEndSection(); + } + Worlds.WriteCurrentGame(Worlds.GetWriteString()); + return true; + } + + public bool CurrentRead() + { + string text = Worlds.ReadCurrentGame(); + if (string.IsNullOrEmpty(text)) + { + return false; + } + InitDecor(); + string[] lines = text.Split('\n'); + Worlds.GetIntField(lines, "DescFile", 0, "_version_"); + m_posDecor = Worlds.GetPointField(lines, "DescFile", 0, "_posDecor_"); + m_dimDecor = Worlds.GetPointField(lines, "DescFile", 0, "_dimDecor_"); + m_term = Worlds.GetIntField(lines, "DescFile", 0, "_term_"); + m_music = Worlds.GetIntField(lines, "DescFile", 0, "_music_"); + m_region = Worlds.GetIntField(lines, "DescFile", 0, "_region_"); + m_time = Worlds.GetIntField(lines, "DescFile", 0, "_time_"); + m_blupiPos = Worlds.GetPointField(lines, "DescFile", 0, "_blupiPos_"); + m_blupiValidPos = Worlds.GetPointField(lines, "DescFile", 0, "_blupiValidPos_"); + m_blupiAction = Worlds.GetIntField(lines, "DescFile", 0, "_blupiAction_"); + m_blupiDir = Worlds.GetIntField(lines, "DescFile", 0, "_blupiDir_"); + m_blupiPhase = Worlds.GetIntField(lines, "DescFile", 0, "_blupiPhase_"); + m_blupiVitesseX = Worlds.GetDoubleField(lines, "DescFile", 0, "_blupiVitesseX_"); + m_blupiVitesseY = Worlds.GetDoubleField(lines, "DescFile", 0, "_blupiVitesseY_"); + m_blupiIcon = Worlds.GetIntField(lines, "DescFile", 0, "_blupiIcon_"); + m_blupiSec = Worlds.GetIntField(lines, "DescFile", 0, "_blupiSec_"); + m_blupiChannel = Worlds.GetIntField(lines, "DescFile", 0, "_blupiChannel_"); + m_blupiVector = Worlds.GetPointField(lines, "DescFile", 0, "_blupiVector_"); + m_blupiTransport = Worlds.GetIntField(lines, "DescFile", 0, "_blupiTransport_"); + m_blupiFocus = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiFocus_"); + m_blupiAir = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiAir_"); + m_blupiHelico = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiHelico_"); + m_blupiOver = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiOver_"); + m_blupiJeep = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiJeep_"); + m_blupiTank = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiTank_"); + m_blupiSkate = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiSkate_"); + m_blupiNage = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiNage_"); + m_blupiSurf = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiSurf_"); + m_blupiVent = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiVent_"); + m_blupiSuspend = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiSuspend_"); + m_blupiJumpAie = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiJumpAie_"); + m_blupiShield = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiShield_"); + m_blupiPower = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiPower_"); + m_blupiCloud = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiCloud_"); + m_blupiHide = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiHide_"); + m_blupiInvert = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiInvert_"); + m_blupiBalloon = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiBalloon_"); + m_blupiEcrase = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiEcrase_"); + m_blupiMotorHigh = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiMotorHigh_"); + m_blupiPosHelico = Worlds.GetPointField(lines, "DescFile", 0, "_blupiPosHelico_"); + m_blupiPosMagic = Worlds.GetPointField(lines, "DescFile", 0, "_blupiPosMagic_"); + m_blupiRestart = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiRestart_"); + m_blupiFront = Worlds.GetBoolField(lines, "DescFile", 0, "_blupiFront_"); + m_blupiBullet = Worlds.GetIntField(lines, "DescFile", 0, "_blupiBullet_"); + m_blupiCle = Worlds.GetIntField(lines, "DescFile", 0, "_blupiCle_"); + m_blupiPerso = Worlds.GetIntField(lines, "DescFile", 0, "_blupiPerso_"); + m_blupiDynamite = Worlds.GetIntField(lines, "DescFile", 0, "_blupiDynamite_"); + m_blupiNoBarre = Worlds.GetIntField(lines, "DescFile", 0, "_blupiNoBarre_"); + m_blupiTimeShield = Worlds.GetIntField(lines, "DescFile", 0, "_blupiTimeShield_"); + m_blupiTimeFire = Worlds.GetIntField(lines, "DescFile", 0, "_blupiTimeFire_"); + m_blupiTimeNoAsc = Worlds.GetIntField(lines, "DescFile", 0, "_blupiTimeNoAsc_"); + m_blupiTimeOuf = Worlds.GetIntField(lines, "DescFile", 0, "_blupiTimeOuf_"); + m_blupiActionOuf = Worlds.GetIntField(lines, "DescFile", 0, "_blupiActionOuf_"); + m_blupiFifoNb = Worlds.GetIntField(lines, "DescFile", 0, "_blupiFifoNb_"); + m_blupiStartPos = Worlds.GetPointField(lines, "DescFile", 0, "_blupiStartPos_"); + m_blupiStartDir = Worlds.GetIntField(lines, "DescFile", 0, "_blupiStartDir_"); + m_blupiLevel = Worlds.GetIntField(lines, "DescFile", 0, "_blupiLevel_"); + m_bFoundCle = Worlds.GetBoolField(lines, "DescFile", 0, "_bFoundCle_"); + m_bPrivate = Worlds.GetBoolField(lines, "DescFile", 0, "_bPrivate_"); + m_bCheatDoors = Worlds.GetBoolField(lines, "DescFile", 0, "_bCheatDoors_"); + m_bSuperBlupi = Worlds.GetBoolField(lines, "DescFile", 0, "_bSuperBlupi_"); + m_bDrawSecret = Worlds.GetBoolField(lines, "DescFile", 0, "_bDrawSecret_"); + m_mission = Worlds.GetIntField(lines, "DescFile", 0, "_mission_"); + m_nbVies = Worlds.GetIntField(lines, "DescFile", 0, "_nbVies_"); + m_nbTresor = Worlds.GetIntField(lines, "DescFile", 0, "_nbTresor_"); + m_totalTresor = Worlds.GetIntField(lines, "DescFile", 0, "_totalTresor_"); + m_goalPhase = Worlds.GetIntField(lines, "DescFile", 0, "_goalPhase_"); + m_scrollPoint = Worlds.GetPointField(lines, "DescFile", 0, "_scrollPoint_"); + m_scrollAdd = Worlds.GetPointField(lines, "DescFile", 0, "_scrollAdd_"); + m_voyageIcon = Worlds.GetIntField(lines, "DescFile", 0, "_voyageIcon_"); + m_voyageChannel = Worlds.GetIntField(lines, "DescFile", 0, "_voyageChannel_"); + m_voyagePhase = Worlds.GetIntField(lines, "DescFile", 0, "_voyagePhase_"); + m_voyageTotal = Worlds.GetIntField(lines, "DescFile", 0, "_voyageTotal_"); + m_voyageStart = Worlds.GetPointField(lines, "DescFile", 0, "_voyageStart_"); + m_voyageEnd = Worlds.GetPointField(lines, "DescFile", 0, "_voyageEnd_"); + m_decorAction = Worlds.GetIntField(lines, "DescFile", 0, "_decorAction_"); + m_decorPhase = Worlds.GetIntField(lines, "DescFile", 0, "_decorPhase_"); + m_nbRankCaisse = Worlds.GetIntField(lines, "DescFile", 0, "_nbRankCaisse_"); + m_nbLinkCaisse = Worlds.GetIntField(lines, "DescFile", 0, "_nbLinkCaisse_"); + m_sucettePos = Worlds.GetPointField(lines, "DescFile", 0, "_sucettePos_"); + m_sucetteType = Worlds.GetIntField(lines, "DescFile", 0, "_sucetteType_"); + Worlds.GetIntArrayField(lines, "DescFile", 0, "_RankCaisse_", m_rankCaisse); + Worlds.GetIntArrayField(lines, "DescFile", 0, "_LinkCaisse_", m_linkCaisse); + Worlds.GetIntArrayField(lines, "DescFile", 0, "_BalleTraj_", m_balleTraj); + Worlds.GetIntArrayField(lines, "DescFile", 0, "_MoveTraj_", m_moveTraj); + Worlds.GetIntArrayField(lines, "DescFile", 0, "_Doors_", m_doors); + for (int i = 0; i < 100; i++) + { + for (int j = 0; j < 100; j++) + { + m_decor[j, i].icon = Worlds.GetDecorField(lines, "Decor", j, i) ?? (-1); + } + } + for (int k = 0; k < 100; k++) + { + for (int l = 0; l < 100; l++) + { + m_bigDecor[l, k].icon = Worlds.GetDecorField(lines, "BigDecor", l, k) ?? (-1); + } + } + for (int m = 0; m < MAXMOVEOBJECT; m++) + { + m_moveObject[m].type = 0; + } + for (int n = 0; n < MAXMOVEOBJECT; n++) + { + int intField = Worlds.GetIntField(lines, "MoveObject", n, "type"); + if (intField == 0) + { + break; + } + int intField2 = Worlds.GetIntField(lines, "MoveObject", n, "index"); + m_moveObject[intField2].type = intField; + m_moveObject[intField2].stepAdvance = Worlds.GetIntField(lines, "MoveObject", n, "stepAdvance"); + m_moveObject[intField2].stepRecede = Worlds.GetIntField(lines, "MoveObject", n, "stepRecede"); + m_moveObject[intField2].timeStopStart = Worlds.GetIntField(lines, "MoveObject", n, "timeStopStart"); + m_moveObject[intField2].timeStopEnd = Worlds.GetIntField(lines, "MoveObject", n, "timeStopEnd"); + m_moveObject[intField2].posStart = Worlds.GetPointField(lines, "MoveObject", n, "posStart"); + m_moveObject[intField2].posEnd = Worlds.GetPointField(lines, "MoveObject", n, "posEnd"); + m_moveObject[intField2].posCurrent = Worlds.GetPointField(lines, "MoveObject", n, "posCurrent"); + m_moveObject[intField2].step = Worlds.GetIntField(lines, "MoveObject", n, "step"); + m_moveObject[intField2].time = Worlds.GetIntField(lines, "MoveObject", n, "time"); + m_moveObject[intField2].phase = Worlds.GetIntField(lines, "MoveObject", n, "phase"); + m_moveObject[intField2].channel = Worlds.GetIntField(lines, "MoveObject", n, "channel"); + m_moveObject[intField2].icon = Worlds.GetIntField(lines, "MoveObject", n, "icon"); + } + for (int num = 0; num < 2; num++) + { + m_jauges[num].SetHide(Worlds.GetBoolField(lines, "Jauge", num, "hide")); + m_jauges[num].SetMode(Worlds.GetIntField(lines, "Jauge", num, "mode")); + m_jauges[num].SetLevel(Worlds.GetIntField(lines, "Jauge", num, "level")); + } + return true; + } + + public bool Read(int gamer, int rank, bool bUser) + { + InitDecor(); + string[] array = Worlds.ReadWorld(gamer, rank); + if (array == null) + { + return false; + } + m_posDecor = Worlds.GetPointField(array, "DescFile", 0, "posDecor"); + m_dimDecor = Worlds.GetPointField(array, "DescFile", 0, "dimDecor"); + m_music = Worlds.GetIntField(array, "DescFile", 0, "music"); + m_region = Worlds.GetIntField(array, "DescFile", 0, "region"); + m_blupiStartPos = Worlds.GetPointField(array, "DescFile", 0, "blupiPos"); + m_blupiStartDir = Worlds.GetIntField(array, "DescFile", 0, "blupiDir"); + for (int i = 0; i < 100; i++) + { + for (int j = 0; j < 100; j++) + { + m_decor[j, i].icon = Worlds.GetDecorField(array, "Decor", j, i) ?? (-1); + } + } + for (int k = 0; k < 100; k++) + { + for (int l = 0; l < 100; l++) + { + m_bigDecor[l, k].icon = Worlds.GetDecorField(array, "BigDecor", l, k) ?? (-1); + } + } + for (int m = 0; m < MAXMOVEOBJECT; m++) + { + m_moveObject[m].type = 0; + } + for (int n = 0; n < MAXMOVEOBJECT; n++) + { + int intField = Worlds.GetIntField(array, "MoveObject", n, "type"); + if (intField == 0) + { + break; + } + m_moveObject[n].type = intField; + m_moveObject[n].stepAdvance = Worlds.GetIntField(array, "MoveObject", n, "stepAdvance"); + m_moveObject[n].stepRecede = Worlds.GetIntField(array, "MoveObject", n, "stepRecede"); + m_moveObject[n].timeStopStart = Worlds.GetIntField(array, "MoveObject", n, "timeStopStart"); + m_moveObject[n].timeStopEnd = Worlds.GetIntField(array, "MoveObject", n, "timeStopEnd"); + m_moveObject[n].posStart = Worlds.GetPointField(array, "MoveObject", n, "posStart"); + m_moveObject[n].posEnd = Worlds.GetPointField(array, "MoveObject", n, "posEnd"); + m_moveObject[n].posCurrent = Worlds.GetPointField(array, "MoveObject", n, "posCurrent"); + m_moveObject[n].step = Worlds.GetIntField(array, "MoveObject", n, "step"); + m_moveObject[n].time = Worlds.GetIntField(array, "MoveObject", n, "time"); + m_moveObject[n].phase = Worlds.GetIntField(array, "MoveObject", n, "phase"); + m_moveObject[n].channel = Worlds.GetIntField(array, "MoveObject", n, "channel"); + m_moveObject[n].icon = Worlds.GetIntField(array, "MoveObject", n, "icon"); + if (m_moveObject[n].type == 54) + { + m_moveObject[n].timeStopStart = 152; + m_moveObject[n].timeStopEnd = 152; + } + } + return true; + } + + private bool Delete(int gamer, int rank, bool bUser) + { + return true; + } + + private bool FileExist(int gamer, int rank, bool bUser) + { + return false; + } + + private bool SearchWorld(int world, ref TinyPoint blupi, ref int dir) + { + if (world < 0 || world > 12) + { + return false; + } + int num = Tables.world_terminal[world * 2]; + int num2 = Tables.world_terminal[world * 2 + 1]; + for (int i = 0; i < 100; i++) + { + for (int j = 0; j < 100; j++) + { + int icon = m_decor[i, j].icon; + if (icon == num || icon == num2) + { + if (IsPassIcon(m_decor[i - 1, j].icon)) + { + blupi.X = (i - 1) * 64 + 2; + blupi.Y = j * 64 + BLUPIOFFY; + dir = 2; + return true; + } + if (IsPassIcon(m_decor[i + 1, j].icon)) + { + blupi.X = (i + 1) * 64 + 2; + blupi.Y = j * 64 + BLUPIOFFY; + dir = 1; + return true; + } + } + } + } + return false; + } + + private bool SearchDoor(int n, ref TinyPoint cel, ref TinyPoint blupi) + { + for (int i = 0; i < 100; i++) + { + for (int j = 0; j < 100; j++) + { + int icon = m_decor[i, j].icon; + if (icon >= 174 && icon <= 181 && icon - 174 + 1 == n) + { + if (i > 0 && m_decor[i - 1, j].icon == 182) + { + cel.X = i - 1; + cel.Y = j; + blupi.X = (i - 2) * 64 + 2; + blupi.Y = j * 64 + BLUPIOFFY; + return true; + } + if (i > 1 && m_decor[i - 2, j].icon == 182) + { + cel.X = i - 2; + cel.Y = j; + blupi.X = (i - 3) * 64 + 2; + blupi.Y = j * 64 + BLUPIOFFY; + return true; + } + if (i < 99 && m_decor[i + 1, j].icon == 182) + { + cel.X = i + 1; + cel.Y = j; + blupi.X = (i + 2) * 64 + 2; + blupi.Y = j * 64 + BLUPIOFFY; + return true; + } + if (i < 98 && m_decor[i + 2, j].icon == 182) + { + cel.X = i + 2; + cel.Y = j; + blupi.X = (i + 3) * 64 + 2; + blupi.Y = j * 64 + BLUPIOFFY; + return true; + } + } + } + } + return false; + } + + private bool SearchGold(int n, ref TinyPoint cel) + { + for (int num = 99; num >= 0; num--) + { + for (int num2 = 99; num2 >= 0; num2--) + { + if (m_decor[num2, num].icon == 183) + { + cel.X = num2; + cel.Y = num; + return true; + } + } + } + return false; + } + + public void MainSwitchInitialize(int lastWorld) + { + if (m_mission == 1) + { + TinyPoint blupi = default(TinyPoint); + int dir = 0; + if (SearchWorld(lastWorld, ref blupi, ref dir)) + { + m_blupiStartPos = blupi; + m_blupiStartDir = dir; + } + } + } + + public void AdaptDoors(bool bPrivate) + { + TinyPoint cel = default(TinyPoint); + TinyPoint blupi = default(TinyPoint); + m_bPrivate = bPrivate; + if (m_bPrivate) + { + return; + } + if (m_mission == 1) + { + for (int i = 0; i < 20; i++) + { + if (SearchGold(i, ref cel) && (m_doors[180 + i] == 1 || m_bCheatDoors)) + { + m_decor[cel.X, cel.Y].icon = -1; + int num = MoveObjectFree(); + m_moveObject[num].type = 22; + m_moveObject[num].stepAdvance = 50; + m_moveObject[num].stepRecede = 1; + m_moveObject[num].timeStopStart = 0; + m_moveObject[num].timeStopEnd = 0; + m_moveObject[num].posStart.X = 64 * cel.X; + m_moveObject[num].posStart.Y = 64 * cel.Y; + m_moveObject[num].posEnd.X = 64 * cel.X; + m_moveObject[num].posEnd.Y = 64 * (cel.Y - 1); + m_moveObject[num].posCurrent = m_moveObject[num].posStart; + m_moveObject[num].step = 1; + m_moveObject[num].time = 0; + m_moveObject[num].phase = 0; + m_moveObject[num].channel = 1; + m_moveObject[num].icon = 183; + PlaySound(33, m_moveObject[num].posStart); + } + } + for (int j = 0; j < 100; j++) + { + for (int k = 0; k < 100; k++) + { + int icon = m_decor[j, k].icon; + if (icon >= 158 && icon <= 165 && (m_doors[180 + icon - 158 + 1] == 1 || m_bCheatDoors)) + { + m_decor[j, k].icon += 8; + } + if (icon == 309 && (m_doors[189] == 1 || m_bCheatDoors)) + { + m_decor[j, k].icon = 310; + } + if (icon >= 410 && icon <= 415 && (m_doors[180 + icon - 410 + 9] == 1 || m_bCheatDoors)) + { + m_decor[j, k].icon += 5; + } + } + } + } + else + { + if (m_mission % 10 != 0) + { + return; + } + for (int i = 0; i < 10; i++) + { + if (SearchDoor(i, ref cel, ref blupi) && (m_doors[m_mission + i] == 1 || m_bCheatDoors)) + { + OpenDoor(cel); + m_blupiStartPos = blupi; + if (blupi.X < cel.X * 64) + { + m_blupiStartDir = 2; + } + else + { + m_blupiStartDir = 1; + } + } + } + } + } + + private void OpenDoorsTresor() + { + TinyPoint cel = default(TinyPoint); + for (int i = 0; i < 100; i++) + { + for (int j = 0; j < 100; j++) + { + int icon = m_decor[i, j].icon; + if (icon >= 421 && icon <= 421 + m_nbTresor - 1) + { + cel.X = i; + cel.Y = j; + OpenDoor(cel); + } + } + } + } + + private void OpenDoor(TinyPoint cel) + { + int icon = m_decor[cel.X, cel.Y].icon; + m_decor[cel.X, cel.Y].icon = -1; + int num = MoveObjectFree(); + m_moveObject[num].type = 22; + m_moveObject[num].stepAdvance = 50; + m_moveObject[num].stepRecede = 1; + m_moveObject[num].timeStopStart = 0; + m_moveObject[num].timeStopEnd = 0; + m_moveObject[num].posStart.X = 64 * cel.X; + m_moveObject[num].posStart.Y = 64 * cel.Y; + m_moveObject[num].posEnd.X = 64 * cel.X; + m_moveObject[num].posEnd.Y = 64 * (cel.Y - 1); + m_moveObject[num].posCurrent = m_moveObject[num].posStart; + m_moveObject[num].step = 1; + m_moveObject[num].time = 0; + m_moveObject[num].phase = 0; + m_moveObject[num].channel = 1; + m_moveObject[num].icon = icon; + PlaySound(33, m_moveObject[num].posStart); + } + + private void OpenDoorsWin() + { + m_doors[m_mission + 1] = 1; + } + + private void OpenGoldsWin() + { + m_doors[180 + m_mission / 10] = 1; + } + + private void DoorsLost() + { + m_nbVies = 3; + } + } + +} \ No newline at end of file diff --git a/Def.cs b/Def.cs new file mode 100644 index 0000000..db874fc --- /dev/null +++ b/Def.cs @@ -0,0 +1,700 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Def + + +namespace WindowsPhoneSpeedyBlupi +{ + + public static class Def + { + public enum Phase + { + None, + First, + Wait, + Init, + Play, + Pause, + Lost, + Win, + Trial, + MainSetup, + PlaySetup, + Resume, + Ranking + } + + public enum ButtonGlygh + { + None, + InitGamerA, + InitGamerB, + InitGamerC, + InitSetup, + InitPlay, + InitBuy, + InitRanking, + WinLostReturn, + TrialBuy, + TrialCancel, + SetupSounds, + SetupJump, + SetupZoom, + SetupAccel, + SetupReset, + SetupReturn, + PauseMenu, + PauseBack, + PauseSetup, + PauseRestart, + PauseContinue, + PlayPause, + PlayJump, + PlayAction, + PlayDown, + ResumeMenu, + ResumeContinue, + RankingContinue, + Cheat11, + Cheat12, + Cheat21, + Cheat22, + Cheat31, + Cheat32, + Cheat1, + Cheat2, + Cheat3, + Cheat4, + Cheat5, + Cheat6, + Cheat7, + Cheat8, + Cheat9 + } + + public const int LXIMAGE = 640; + + public const int LYIMAGE = 480; + + public const int MAXCELX = 100; + + public const int MAXCELY = 100; + + public const int DIMOBJX = 64; + + public const int DIMOBJY = 64; + + public const int DIMBLUPIX = 60; + + public const int DIMBLUPIY = 60; + + public const int DIMEXPLOX = 128; + + public const int DIMEXPLOY = 128; + + public const int DIMBUTTONX = 40; + + public const int DIMBUTTONY = 40; + + public const int DIMJAUGEX = 124; + + public const int DIMJAUGEY = 22; + + public const int POSSTATX = 12; + + public const int POSSTATY = 220; + + public const int DIMSTATX = 60; + + public const int DIMSTATY = 30; + + public const int DIMTEXTX = 32; + + public const int DIMTEXTY = 32; + + public const int CHOBJECT = 1; + + public const int CHBLUPI = 2; + + public const int CHDECOR = 3; + + public const int CHBUTTON = 4; + + public const int CHJAUGE = 5; + + public const int CHTEXT = 6; + + public const int CHEXPLO = 9; + + public const int CHELEMENT = 10; + + public const int CHBLUPI1 = 11; + + public const int CHBLUPI2 = 12; + + public const int CHBLUPI3 = 13; + + public const int CHPAD = 14; + + public const int CHSPEEDYBLUPI = 15; + + public const int CHBLUPIYOUPIE = 16; + + public const int CHGEAR = 17; + + public const int ACTION_STOP = 1; + + public const int ACTION_MARCH = 2; + + public const int ACTION_TURN = 3; + + public const int ACTION_JUMP = 4; + + public const int ACTION_AIR = 5; + + public const int ACTION_DOWN = 6; + + public const int ACTION_UP = 7; + + public const int ACTION_VERTIGO = 8; + + public const int ACTION_RECEDE = 9; + + public const int ACTION_ADVANCE = 10; + + public const int ACTION_CLEAR1 = 11; + + public const int ACTION_SET = 12; + + public const int ACTION_WIN = 13; + + public const int ACTION_PUSH = 14; + + public const int ACTION_STOPHELICO = 15; + + public const int ACTION_MARCHHELICO = 16; + + public const int ACTION_TURNHELICO = 17; + + public const int ACTION_STOPNAGE = 18; + + public const int ACTION_MARCHNAGE = 19; + + public const int ACTION_TURNNAGE = 20; + + public const int ACTION_STOPSURF = 21; + + public const int ACTION_MARCHSURF = 22; + + public const int ACTION_TURNSURF = 23; + + public const int ACTION_DROWN = 24; + + public const int ACTION_STOPJEEP = 25; + + public const int ACTION_MARCHJEEP = 26; + + public const int ACTION_TURNJEEP = 27; + + public const int ACTION_STOPPOP = 28; + + public const int ACTION_POP = 29; + + public const int ACTION_BYE = 30; + + public const int ACTION_STOPSUSPEND = 31; + + public const int ACTION_MARCHSUSPEND = 32; + + public const int ACTION_TURNSUSPEND = 33; + + public const int ACTION_JUMPSUSPEND = 34; + + public const int ACTION_HIDE = 35; + + public const int ACTION_JUMPAIE = 36; + + public const int ACTION_STOPSKATE = 37; + + public const int ACTION_MARCHSKATE = 38; + + public const int ACTION_TURNSKATE = 39; + + public const int ACTION_JUMPSKATE = 40; + + public const int ACTION_AIRSKATE = 41; + + public const int ACTION_TAKESKATE = 42; + + public const int ACTION_DEPOSESKATE = 43; + + public const int ACTION_OUF1a = 44; + + public const int ACTION_OUF1b = 45; + + public const int ACTION_OUF2 = 46; + + public const int ACTION_OUF3 = 47; + + public const int ACTION_OUF4 = 48; + + public const int ACTION_SUCETTE = 49; + + public const int ACTION_STOPTANK = 50; + + public const int ACTION_MARCHTANK = 51; + + public const int ACTION_TURNTANK = 52; + + public const int ACTION_FIRETANK = 53; + + public const int ACTION_GLU = 54; + + public const int ACTION_DRINK = 55; + + public const int ACTION_CHARGE = 56; + + public const int ACTION_ELECTRO = 57; + + public const int ACTION_HELICOGLU = 58; + + public const int ACTION_TURNAIR = 59; + + public const int ACTION_STOPMARCH = 60; + + public const int ACTION_STOPJUMP = 61; + + public const int ACTION_STOPJUMPh = 62; + + public const int ACTION_MOCKERY = 63; + + public const int ACTION_MOCKERYi = 64; + + public const int ACTION_OUF5 = 65; + + public const int ACTION_BALLOON = 66; + + public const int ACTION_STOPOVER = 67; + + public const int ACTION_MARCHOVER = 68; + + public const int ACTION_TURNOVER = 69; + + public const int ACTION_RECEDEq = 70; + + public const int ACTION_ADVANCEq = 71; + + public const int ACTION_STOPECRASE = 72; + + public const int ACTION_MARCHECRASE = 73; + + public const int ACTION_TELEPORTE = 74; + + public const int ACTION_CLEAR2 = 75; + + public const int ACTION_CLEAR3 = 76; + + public const int ACTION_CLEAR4 = 77; + + public const int ACTION_CLEAR5 = 78; + + public const int ACTION_CLEAR6 = 79; + + public const int ACTION_CLEAR7 = 80; + + public const int ACTION_CLEAR8 = 81; + + public const int ACTION_SWITCH = 82; + + public const int ACTION_MOCKERYp = 83; + + public const int ACTION_NON = 84; + + public const int ACTION_SLOWDOWNSKATE = 85; + + public const int ACTION_TAKEDYNAMITE = 86; + + public const int ACTION_PUTDYNAMITE = 87; + + public const int DIR_LEFT = 1; + + public const int DIR_RIGHT = 2; + + public const int SEC_SHIELD = 1; + + public const int SEC_POWER = 2; + + public const int SEC_CLOUD = 3; + + public const int SEC_HIDE = 4; + + public const int TYPE_ASCENSEUR = 1; + + public const int TYPE_BOMBEDOWN = 2; + + public const int TYPE_BOMBEUP = 3; + + public const int TYPE_BULLDOZER = 4; + + public const int TYPE_TRESOR = 5; + + public const int TYPE_EGG = 6; + + public const int TYPE_GOAL = 7; + + public const int TYPE_EXPLO1 = 8; + + public const int TYPE_EXPLO2 = 9; + + public const int TYPE_EXPLO3 = 10; + + public const int TYPE_EXPLO4 = 11; + + public const int TYPE_CAISSE = 12; + + public const int TYPE_HELICO = 13; + + public const int TYPE_PLOUF = 14; + + public const int TYPE_BLUP = 15; + + public const int TYPE_BOMBEMOVE = 16; + + public const int TYPE_POISSON = 17; + + public const int TYPE_TOMATES = 18; + + public const int TYPE_JEEP = 19; + + public const int TYPE_OISEAU = 20; + + public const int TYPE_CLE = 21; + + public const int TYPE_DOOR = 22; + + public const int TYPE_BALLE = 23; + + public const int TYPE_SKATE = 24; + + public const int TYPE_SHIELD = 25; + + public const int TYPE_POWER = 26; + + public const int TYPE_MAGICTRACK = 27; + + public const int TYPE_TANK = 28; + + public const int TYPE_BULLET = 29; + + public const int TYPE_DRINK = 30; + + public const int TYPE_CHARGE = 31; + + public const int TYPE_BLUPIHELICO = 32; + + public const int TYPE_BLUPITANK = 33; + + public const int TYPE_GLU = 34; + + public const int TYPE_TIPLOUF = 35; + + public const int TYPE_POLLUTION = 36; + + public const int TYPE_CLEAR = 37; + + public const int TYPE_ELECTRO = 38; + + public const int TYPE_TRESORTRACK = 39; + + public const int TYPE_INVERT = 40; + + public const int TYPE_INVERTSTART = 41; + + public const int TYPE_INVERTSTOP = 42; + + public const int TYPE_GUEPE = 44; + + public const int TYPE_OVER = 46; + + public const int TYPE_ASCENSEURs = 47; + + public const int TYPE_ASCENSEURsi = 48; + + public const int TYPE_CLE1 = 49; + + public const int TYPE_CLE2 = 50; + + public const int TYPE_CLE3 = 51; + + public const int TYPE_BRIDGE = 52; + + public const int TYPE_TENTACULE = 53; + + public const int TYPE_CREATURE = 54; + + public const int TYPE_DYNAMITE = 55; + + public const int TYPE_DYNAMITEf = 56; + + public const int TYPE_SHIELDTRACK = 57; + + public const int TYPE_HIDETRACK = 58; + + public const int TYPE_EXPLO5 = 90; + + public const int TYPE_EXPLO6 = 91; + + public const int TYPE_EXPLO7 = 92; + + public const int TYPE_EXPLO8 = 93; + + public const int TYPE_EXPLO9 = 94; + + public const int TYPE_EXPLO10 = 95; + + public const int TYPE_BOMBEFOLLOW1 = 96; + + public const int TYPE_BOMBEFOLLOW2 = 97; + + public const int TYPE_SPLOUTCH1 = 98; + + public const int TYPE_SPLOUTCH2 = 99; + + public const int TYPE_SPLOUTCH3 = 100; + + public const int TYPE_BOMBEPERSO1 = 200; + + public const int TYPE_BOMBEPERSO2 = 201; + + public const int TYPE_BOMBEPERSO3 = 202; + + public const int TYPE_BOMBEPERSO4 = 203; + + public const int STEP_STOPSTART = 1; + + public const int STEP_ADVANCE = 2; + + public const int STEP_STOPEND = 3; + + public const int STEP_RECEDE = 4; + + public const int DECOR_EXPLO1 = 1; + + public const int DECOR_EXPLO2 = 2; + + public const int DECOR_EXPLO3 = 3; + + public const int DECOR_EXPLO4 = 4; + + public const int DECOR_BALLOON = 5; + + public const int SOUND_CLICK = 0; + + public const int SOUND_JUMP1 = 1; + + public const int SOUND_JUMP2 = 2; + + public const int SOUND_JUMPEND = 3; + + public const int SOUND_JUMPTOC = 4; + + public const int SOUND_TURN = 5; + + public const int SOUND_VERTIGO = 6; + + public const int SOUND_DOWN = 7; + + public const int SOUND_FALL = 8; + + public const int SOUND_NEW = 9; + + public const int SOUND_BOUM = 10; + + public const int SOUND_TRESOR = 11; + + public const int SOUND_EGG = 12; + + public const int SOUND_ENDKO = 13; + + public const int SOUND_ENDOK = 14; + + public const int SOUND_HELICOSTART = 15; + + public const int SOUND_HELICOHIGH = 16; + + public const int SOUND_HELICOSTOP = 17; + + public const int SOUND_HELICOLOW = 18; + + public const int SOUND_LASTTRESOR = 19; + + public const int SOUND_UP = 20; + + public const int SOUND_LOOKUP = 21; + + public const int SOUND_JUMP0 = 22; + + public const int SOUND_PLOUF = 23; + + public const int SOUND_BLUP = 24; + + public const int SOUND_SURF = 25; + + public const int SOUND_DROWN = 26; + + public const int SOUND_ERROR = 27; + + public const int SOUND_JEEPSTART = 28; + + public const int SOUND_JEEPHIGH = 29; + + public const int SOUND_JEEPSTOP = 30; + + public const int SOUND_JEEPLOW = 31; + + public const int SOUND_BYE = 32; + + public const int SOUND_DOOR = 33; + + public const int SOUND_SUSPENDTOC = 34; + + public const int SOUND_SUSPENDJUMP = 35; + + public const int SOUND_SINGE = 36; + + public const int SOUND_PATIENT = 37; + + public const int SOUND_PUSH = 38; + + public const int SOUND_POP = 39; + + public const int SOUND_JUMPAIE = 40; + + public const int SOUND_RESSORT = 41; + + public const int SOUND_STARTSHIELD = 42; + + public const int SOUND_STOPSHIELD = 43; + + public const int SOUND_STARTPOWER = 44; + + public const int SOUND_STOPPOWER = 45; + + public const int SOUND_OUF1 = 46; + + public const int SOUND_OUF2 = 47; + + public const int SOUND_OUF3 = 48; + + public const int SOUND_OUF4 = 49; + + public const int SOUND_SUCETTE = 50; + + public const int SOUND_GLU = 51; + + public const int SOUND_FIREOK = 52; + + public const int SOUND_FIREKO = 53; + + public const int SOUND_TAKEGLU = 54; + + public const int SOUND_STARTCLOUD = 55; + + public const int SOUND_STOPCLOUD = 56; + + public const int SOUND_DRINK = 57; + + public const int SOUND_CHARGE = 58; + + public const int SOUND_ELECTRO = 59; + + public const int SOUND_PERSOTAKE = 60; + + public const int SOUND_PERSOPOSE = 61; + + public const int SOUND_STARTHIDE = 62; + + public const int SOUND_STOPHIDE = 63; + + public const int SOUND_TIPLOUF = 64; + + public const int SOUND_MOCKERY = 65; + + public const int SOUND_INVERTSTART = 66; + + public const int SOUND_INVERTSTOP = 67; + + public const int SOUND_OVERSTOP = 68; + + public const int SOUND_BLITZ = 69; + + public const int SOUND_ECRASE = 70; + + public const int SOUND_TELEPORTE = 71; + + public const int SOUND_BRIDGE1 = 72; + + public const int SOUND_BRIDGE2 = 73; + + public const int SOUND_ANGEL = 74; + + public const int SOUND_SCIE = 75; + + public const int SOUND_SWITCHOFF = 76; + + public const int SOUND_SWITCHON = 77; + + public const int SOUND_JUMPENDb = 78; + + public const int SOUND_JUMPTOCb = 79; + + public const int SOUND_JUMPENDm = 80; + + public const int SOUND_JUMPTOCm = 81; + + public const int SOUND_JUMPENDg = 82; + + public const int SOUND_JUMPTOCg = 83; + + public const int SOUND_JUMPENDo = 84; + + public const int SOUND_JUMPTOCo = 85; + + public const int SOUND_JUMPENDk = 86; + + public const int SOUND_JUMPTOCk = 87; + + public const int SOUND_JUMPENDf = 88; + + public const int SOUND_JUMPTOCf = 89; + + public const int SOUND_JUMPENDh = 90; + + public const int SOUND_JUMPTOCh = 91; + + public const int SOUND_FOLLOW = 92; + + public const int KEY_JUMP = 1; + + public const int KEY_FIRE = 2; + + public const int KEY_DOWN = 4; + + public static bool HasSound + { + get + { + return true; + } + } + + public static bool EasyMove + { + get + { + return true; + } + } + } + +} \ No newline at end of file diff --git a/Game1.cs b/Game1.cs new file mode 100644 index 0000000..b3e3624 --- /dev/null +++ b/Game1.cs @@ -0,0 +1,967 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Game1 +using System; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.GamerServices; +using Microsoft.Xna.Framework.Input; +using Microsoft.Xna.Framework.Media; +using WindowsPhoneSpeedyBlupi; +using static System.Net.Mime.MediaTypeNames; + +namespace WindowsPhoneSpeedyBlupi +{ + public class Game1 : Game + { + private static readonly double[] waitTable = new double[24] + { + 0.1, 7.0, 0.2, 20.0, 0.25, 22.0, 0.45, 50.0, 0.6, 53.0, + 0.65, 58.0, 0.68, 60.0, 0.8, 70.0, 0.84, 75.0, 0.9, 84.0, + 0.94, 91.0, 1.0, 100.0 + }; + + private static readonly Def.ButtonGlygh[] cheatGeste = new Def.ButtonGlygh[10] + { + Def.ButtonGlygh.Cheat12, + Def.ButtonGlygh.Cheat22, + Def.ButtonGlygh.Cheat32, + Def.ButtonGlygh.Cheat12, + Def.ButtonGlygh.Cheat11, + Def.ButtonGlygh.Cheat21, + Def.ButtonGlygh.Cheat22, + Def.ButtonGlygh.Cheat21, + Def.ButtonGlygh.Cheat31, + Def.ButtonGlygh.Cheat32 + }; + + private readonly GraphicsDeviceManager graphics; + + private readonly Pixmap pixmap; + + private readonly Sound sound; + + private readonly Decor decor; + + private readonly InputPad inputPad; + + private readonly GameData gameData; + + private Def.Phase phase; + + private TimeSpan startTime; + + private int missionToStart1; + + private int missionToStart2; + + private int mission; + + private int cheatGesteIndex; + + private int continueMission; + + private Jauge waitJauge; + + private double waitProgress; + + private bool isTrialMode; + + private bool simulateTrialMode; + + private bool playSetup; + + private int phaseTime; + + private Def.Phase fadeOutPhase; + + private int fadeOutMission; + + public bool IsRankingMode + { + get + { + return false; + } + } + + public bool IsTrialMode + { + get + { + if (!simulateTrialMode) + { + return isTrialMode; + } + return true; + } + } + + public Game1() + { + graphics = new GraphicsDeviceManager(this); + graphics.IsFullScreen = true; + base.Content.RootDirectory = "Content"; + base.TargetElapsedTime = TimeSpan.FromTicks(500000L); + base.InactiveSleepTime = TimeSpan.FromSeconds(1.0); + missionToStart1 = -1; + missionToStart2 = -1; + gameData = new GameData(); + pixmap = new Pixmap(this, graphics); + sound = new Sound(this, gameData); + decor = new Decor(); + decor.Create(sound, pixmap, gameData); + TinyPoint pos = new TinyPoint + { + X = 196, + Y = 426 + }; + waitJauge = new Jauge(); + waitJauge.Create(pixmap, sound, pos, 3, false); + waitJauge.SetHide(false); + waitJauge.Zoom = 2.0; + phase = Def.Phase.None; + fadeOutPhase = Def.Phase.None; + inputPad = new InputPad(this, decor, pixmap, sound, gameData); + SetPhase(Def.Phase.First); + } + + protected override void Initialize() + { + base.Initialize(); + } + + protected override void LoadContent() + { + pixmap.BackgroundCache("wait"); + } + + protected override void UnloadContent() + { + } + + protected override void OnDeactivated(object sender, EventArgs args) + { + if (phase == Def.Phase.Play) + { + decor.CurrentWrite(); + } + else + { + decor.CurrentDelete(); + } + base.OnDeactivated(sender, args); + } + + protected override void OnActivated(object sender, EventArgs args) + { + continueMission = 1; + base.OnActivated(sender, args); + } + + protected override void OnExiting(object sender, EventArgs args) + { + decor.CurrentDelete(); + base.OnExiting(sender, args); + } + + protected override void Update(GameTime gameTime) + { + if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed) + { + if (phase == Def.Phase.Play) + { + SetPhase(Def.Phase.Pause); + } + else if (phase == Def.Phase.PlaySetup) + { + SetPhase(Def.Phase.Play, -1); + } + else if (phase != Def.Phase.Init) + { + SetPhase(Def.Phase.Init); + } + else + { + Exit(); + } + return; + } + phaseTime++; + if (fadeOutPhase != 0) + { + if (phaseTime >= 20) + { + SetPhase(fadeOutPhase); + } + return; + } + if (missionToStart2 != -1) + { + SetPhase(Def.Phase.Play, missionToStart2); + return; + } + if (phase == Def.Phase.First) + { + startTime = gameTime.TotalGameTime; + pixmap.LoadContent(); + sound.LoadContent(); + gameData.Read(); + inputPad.PixmapOrigin = pixmap.Origin; + SetPhase(Def.Phase.Wait); + return; + } + if (phase == Def.Phase.Wait) + { + if (continueMission == 2) + { + continueMission = 0; + if (decor.CurrentRead()) + { + SetPhase(Def.Phase.Resume); + return; + } + } + long num = gameTime.TotalGameTime.Ticks - startTime.Ticks; + waitProgress = (double)num / 50000000.0; + if (waitProgress > 1.0) + { + SetPhase(Def.Phase.Init); + } + return; + } + inputPad.Update(); + Def.ButtonGlygh buttonPressed = inputPad.ButtonPressed; + if (buttonPressed >= Def.ButtonGlygh.InitGamerA && buttonPressed <= Def.ButtonGlygh.InitGamerC) + { + SetGamer((int)(buttonPressed - 1)); + return; + } + switch (buttonPressed) + { + case Def.ButtonGlygh.InitSetup: + SetPhase(Def.Phase.MainSetup); + return; + case Def.ButtonGlygh.PauseSetup: + SetPhase(Def.Phase.PlaySetup); + return; + case Def.ButtonGlygh.SetupSounds: + gameData.Sounds = !gameData.Sounds; + gameData.Write(); + return; + case Def.ButtonGlygh.SetupJump: + gameData.JumpRight = !gameData.JumpRight; + gameData.Write(); + return; + case Def.ButtonGlygh.SetupZoom: + gameData.AutoZoom = !gameData.AutoZoom; + gameData.Write(); + return; + case Def.ButtonGlygh.SetupAccel: + gameData.AccelActive = !gameData.AccelActive; + gameData.Write(); + return; + case Def.ButtonGlygh.SetupReset: + gameData.Reset(); + gameData.Write(); + return; + case Def.ButtonGlygh.SetupReturn: + if (playSetup) + { + SetPhase(Def.Phase.Play, -1); + } + else + { + SetPhase(Def.Phase.Init); + } + return; + case Def.ButtonGlygh.InitPlay: + SetPhase(Def.Phase.Play, 1); + return; + case Def.ButtonGlygh.PlayPause: + SetPhase(Def.Phase.Pause); + return; + case Def.ButtonGlygh.WinLostReturn: + case Def.ButtonGlygh.PauseMenu: + case Def.ButtonGlygh.ResumeMenu: + SetPhase(Def.Phase.Init); + break; + } + switch (buttonPressed) + { + case Def.ButtonGlygh.ResumeContinue: + ContinueMission(); + return; + case Def.ButtonGlygh.InitBuy: + case Def.ButtonGlygh.TrialBuy: + Guide.ShowMarketplace(PlayerIndex.One); + SetPhase(Def.Phase.Init); + return; + case Def.ButtonGlygh.InitRanking: + SetPhase(Def.Phase.Ranking); + return; + case Def.ButtonGlygh.TrialCancel: + case Def.ButtonGlygh.RankingContinue: + SetPhase(Def.Phase.Init); + return; + case Def.ButtonGlygh.PauseBack: + MissionBack(); + return; + case Def.ButtonGlygh.PauseRestart: + SetPhase(Def.Phase.Play, mission); + return; + case Def.ButtonGlygh.PauseContinue: + SetPhase(Def.Phase.Play, -1); + return; + case Def.ButtonGlygh.Cheat11: + case Def.ButtonGlygh.Cheat12: + case Def.ButtonGlygh.Cheat21: + case Def.ButtonGlygh.Cheat22: + case Def.ButtonGlygh.Cheat31: + case Def.ButtonGlygh.Cheat32: + if (buttonPressed == cheatGeste[cheatGesteIndex]) + { + cheatGesteIndex++; + if (cheatGesteIndex == cheatGeste.Length) + { + cheatGesteIndex = 0; + inputPad.ShowCheatMenu = true; + } + } + else + { + cheatGesteIndex = 0; + } + break; + default: + if (buttonPressed != 0) + { + cheatGesteIndex = 0; + } + break; + } + if (buttonPressed >= Def.ButtonGlygh.Cheat1 && buttonPressed <= Def.ButtonGlygh.Cheat9) + { + CheatAction(buttonPressed); + } + if (phase == Def.Phase.Play) + { + decor.ButtonPressed = buttonPressed; + decor.MoveStep(); + int num2 = decor.IsTerminated(); + if (num2 == -1) + { + MemorizeGamerProgress(); + SetPhase(Def.Phase.Lost); + } + else if (num2 == -2) + { + MemorizeGamerProgress(); + SetPhase(Def.Phase.Win); + } + else if (num2 >= 1) + { + MemorizeGamerProgress(); + StartMission(num2); + } + } + base.Update(gameTime); + } + + private void MissionBack() + { + int num = mission; + if (num == 1) + { + SetPhase(Def.Phase.Init); + return; + } + num = ((num % 10 == 0) ? 1 : (num / 10 * 10)); + SetPhase(Def.Phase.Play, num); + } + + private void StartMission(int mission) + { + if (mission > 20 && mission % 10 > 1 && IsTrialMode) + { + SetPhase(Def.Phase.Trial); + return; + } + this.mission = mission; + if (this.mission != 1) + { + gameData.LastWorld = this.mission / 10; + } + decor.Read(0, this.mission, false); + decor.LoadImages(); + decor.SetMission(this.mission); + decor.SetNbVies(gameData.NbVies); + decor.InitializeDoors(gameData); + decor.AdaptDoors(false); + decor.MainSwitchInitialize(gameData.LastWorld); + decor.PlayPrepare(false); + decor.StartSound(); + inputPad.StartMission(this.mission); + } + + private void ContinueMission() + { + SetPhase(Def.Phase.Play, -2); + mission = decor.GetMission(); + if (mission != 1) + { + gameData.LastWorld = mission / 10; + } + decor.LoadImages(); + decor.StartSound(); + inputPad.StartMission(mission); + } + + private void CheatAction(Def.ButtonGlygh glyph) + { + switch (glyph) + { + case Def.ButtonGlygh.Cheat1: + decor.CheatAction(Tables.CheatCodes.OpenDoors); + break; + case Def.ButtonGlygh.Cheat2: + decor.CheatAction(Tables.CheatCodes.SuperBlupi); + break; + case Def.ButtonGlygh.Cheat3: + decor.CheatAction(Tables.CheatCodes.ShowSecret); + break; + case Def.ButtonGlygh.Cheat4: + decor.CheatAction(Tables.CheatCodes.LayEgg); + break; + case Def.ButtonGlygh.Cheat5: + gameData.Reset(); + break; + case Def.ButtonGlygh.Cheat6: + simulateTrialMode = !simulateTrialMode; + break; + case Def.ButtonGlygh.Cheat7: + decor.CheatAction(Tables.CheatCodes.CleanAll); + break; + case Def.ButtonGlygh.Cheat8: + decor.CheatAction(Tables.CheatCodes.AllTreasure); + break; + case Def.ButtonGlygh.Cheat9: + decor.CheatAction(Tables.CheatCodes.EndGoal); + break; + } + } + + protected override void Draw(GameTime gameTime) + { + if (continueMission == 1) + { + continueMission = 2; + } + if (phase == Def.Phase.Wait || phase == Def.Phase.Init || phase == Def.Phase.Pause || phase == Def.Phase.Resume || phase == Def.Phase.Lost || phase == Def.Phase.Win || phase == Def.Phase.MainSetup || phase == Def.Phase.PlaySetup || phase == Def.Phase.Trial || phase == Def.Phase.Ranking) + { + pixmap.DrawBackground(); + if (fadeOutPhase == Def.Phase.None && missionToStart1 != -1) + { + missionToStart2 = missionToStart1; + missionToStart1 = -1; + } + else + { + DrawBackgroundFade(); + if (fadeOutPhase == Def.Phase.None) + { + DrawButtonsBackground(); + inputPad.Draw(); + DrawButtonsText(); + } + } + } + else if (phase == Def.Phase.Play) + { + decor.Build(); + inputPad.Draw(); + } + if (phase == Def.Phase.Wait) + { + DrawWaitProgress(); + } + base.Draw(gameTime); + } + + private void DrawBackgroundFade() + { + if (phase == Def.Phase.Init) + { + double num = Math.Min((double)phaseTime / 20.0, 1.0); + TinyRect rect; + double opacity; + if (fadeOutPhase == Def.Phase.MainSetup) + { + num = (1.0 - num) * (1.0 - num); + TinyRect tinyRect = default(TinyRect); + tinyRect.Left = (int)(720.0 - 640.0 * num); + tinyRect.Right = (int)(1360.0 - 640.0 * num); + tinyRect.Top = 0; + tinyRect.Bottom = 160; + rect = tinyRect; + opacity = num * num; + } + else + { + num = ((fadeOutPhase != 0) ? (1.0 - num * 2.0) : (1.0 - (1.0 - num) * (1.0 - num))); + TinyRect tinyRect2 = default(TinyRect); + tinyRect2.Left = 80; + tinyRect2.Right = 720; + tinyRect2.Top = (int)(-160.0 + num * 160.0); + tinyRect2.Bottom = (int)(0.0 + num * 160.0); + rect = tinyRect2; + opacity = 1.0; + } + pixmap.DrawIcon(15, 0, rect, opacity, false); + } + if (phase == Def.Phase.Init) + { + double num = Math.Min((double)phaseTime / 20.0, 1.0); + double opacity; + if (fadeOutPhase == Def.Phase.MainSetup) + { + opacity = (1.0 - num) * (1.0 - num); + num = 1.0; + } + else if (fadeOutPhase == Def.Phase.None) + { + num = 0.5 + num / 2.0; + opacity = Math.Min(num * num, 1.0); + } + else + { + opacity = 1.0 - num; + num = 1.0 + num * 10.0; + } + TinyRect tinyRect3 = default(TinyRect); + tinyRect3.Left = (int)(468.0 - 205.0 * num); + tinyRect3.Right = (int)(468.0 + 205.0 * num); + tinyRect3.Top = (int)(280.0 - 190.0 * num); + tinyRect3.Bottom = (int)(280.0 + 190.0 * num); + TinyRect rect = tinyRect3; + pixmap.DrawIcon(16, 0, rect, opacity, 0.0, false); + } + if (phase == Def.Phase.Pause || phase == Def.Phase.Resume) + { + if (fadeOutPhase == Def.Phase.Play) + { + double num = Math.Min((double)phaseTime / 20.0, 1.0); + double opacity = 1.0 - num; + num = 1.0 + num * 10.0; + TinyRect tinyRect4 = default(TinyRect); + tinyRect4.Left = (int)(418.0 - 205.0 * num); + tinyRect4.Right = (int)(418.0 + 205.0 * num); + tinyRect4.Top = (int)(190.0 - 190.0 * num); + tinyRect4.Bottom = (int)(190.0 + 190.0 * num); + TinyRect rect = tinyRect4; + pixmap.DrawIcon(16, 0, rect, opacity, 0.0, false); + } + else if (fadeOutPhase == Def.Phase.PlaySetup) + { + double num = Math.Min((double)phaseTime / 20.0, 1.0); + num *= num; + TinyRect tinyRect5 = default(TinyRect); + tinyRect5.Left = (int)(213.0 + 800.0 * num); + tinyRect5.Right = (int)(623.0 + 800.0 * num); + tinyRect5.Top = 0; + tinyRect5.Bottom = 0; + TinyRect rect = tinyRect5; + pixmap.DrawIcon(16, 0, rect, 1.0, 0.0, false); + } + else + { + double num; + if (fadeOutPhase == Def.Phase.None) + { + num = Math.Min((double)phaseTime / 15.0, 1.0); + } + else + { + num = Math.Min((double)phaseTime / 15.0, 1.0); + num = 1.0 - num; + } + TinyRect tinyRect6 = default(TinyRect); + tinyRect6.Left = (int)(418.0 - 205.0 * num); + tinyRect6.Right = (int)(418.0 + 205.0 * num); + tinyRect6.Top = (int)(190.0 - 190.0 * num); + tinyRect6.Bottom = (int)(190.0 + 190.0 * num); + TinyRect rect = tinyRect6; + double rotation = 0.0; + if (num < 1.0) + { + rotation = (1.0 - num) * (1.0 - num) * 360.0 * 1.0; + } + if (rect.Width > 0 && rect.Height > 0) + { + pixmap.DrawIcon(16, 0, rect, 1.0, rotation, false); + } + } + } + if (phase == Def.Phase.MainSetup || phase == Def.Phase.PlaySetup) + { + double num = Math.Min((double)phaseTime / 20.0, 1.0); + num = 1.0 - (1.0 - num) * (1.0 - num); + double num2; + if (phaseTime < 20) + { + num2 = (double)phaseTime / 20.0; + num2 = 1.0 - (1.0 - num2) * (1.0 - num2); + } + else + { + num2 = 1.0 + ((double)phaseTime - 20.0) / 400.0; + } + if (fadeOutPhase != 0) + { + num = 1.0 - num; + num2 = 1.0 - num2; + } + TinyRect tinyRect7 = default(TinyRect); + tinyRect7.Left = (int)(720.0 - 640.0 * num); + tinyRect7.Right = (int)(1360.0 - 640.0 * num); + tinyRect7.Top = 0; + tinyRect7.Bottom = 160; + TinyRect rect = tinyRect7; + pixmap.DrawIcon(15, 0, rect, num * num, false); + TinyRect tinyRect8 = default(TinyRect); + tinyRect8.Left = 487; + tinyRect8.Right = 713; + tinyRect8.Top = 148; + tinyRect8.Bottom = 374; + TinyRect rect2 = tinyRect8; + TinyRect tinyRect9 = default(TinyRect); + tinyRect9.Left = 118; + tinyRect9.Right = 570; + tinyRect9.Top = 268; + tinyRect9.Bottom = 720; + TinyRect rect3 = tinyRect9; + double opacity = 0.5 - num * 0.4; + double rotation = (0.0 - num2) * 100.0 * 2.5; + pixmap.DrawIcon(17, 0, rect2, opacity, rotation, false); + pixmap.DrawIcon(17, 0, rect3, opacity, (0.0 - rotation) * 0.5, false); + } + if (phase == Def.Phase.Lost) + { + double num = Math.Min((double)phaseTime / 100.0, 1.0); + TinyRect tinyRect10 = default(TinyRect); + tinyRect10.Left = (int)(418.0 - 205.0 * num); + tinyRect10.Right = (int)(418.0 + 205.0 * num); + tinyRect10.Top = (int)(238.0 - 190.0 * num); + tinyRect10.Bottom = (int)(238.0 + 190.0 * num); + TinyRect rect = tinyRect10; + double rotation = 0.0; + if (num < 1.0) + { + rotation = (1.0 - num) * (1.0 - num) * 360.0 * 6.0; + } + if (rect.Width > 0 && rect.Height > 0) + { + pixmap.DrawIcon(16, 0, rect, 1.0, rotation, false); + } + } + if (phase == Def.Phase.Win) + { + double num = Math.Sin((double)phaseTime / 3.0) / 2.0 + 1.0; + TinyRect tinyRect11 = default(TinyRect); + tinyRect11.Left = (int)(418.0 - 205.0 * num); + tinyRect11.Right = (int)(418.0 + 205.0 * num); + tinyRect11.Top = (int)(238.0 - 190.0 * num); + tinyRect11.Bottom = (int)(238.0 + 190.0 * num); + TinyRect rect = tinyRect11; + pixmap.DrawIcon(16, 0, rect, 1.0, 0.0, false); + } + } + + private void DrawButtonsBackground() + { + if (phase == Def.Phase.Init) + { + TinyRect drawBounds = pixmap.DrawBounds; + int width = drawBounds.Width; + int height = drawBounds.Height; + TinyRect tinyRect = default(TinyRect); + tinyRect.Left = 10; + tinyRect.Right = 260; + tinyRect.Top = height - 325; + tinyRect.Bottom = height - 10; + TinyRect rect = tinyRect; + pixmap.DrawIcon(14, 15, rect, 0.3, false); + TinyRect tinyRect2 = default(TinyRect); + tinyRect2.Left = width - 170; + tinyRect2.Right = width - 10; + tinyRect2.Top = height - ((IsTrialMode || IsRankingMode) ? 325 : 195); + tinyRect2.Bottom = height - 10; + rect = tinyRect2; + pixmap.DrawIcon(14, 15, rect, 0.3, false); + } + } + + private void DrawButtonsText() + { + if (phase == Def.Phase.Init) + { + DrawButtonGamerText(Def.ButtonGlygh.InitGamerA, 0); + DrawButtonGamerText(Def.ButtonGlygh.InitGamerB, 1); + DrawButtonGamerText(Def.ButtonGlygh.InitGamerC, 2); + DrawTextUnderButton(Def.ButtonGlygh.InitPlay, MyResource.TX_BUTTON_PLAY); + DrawTextRightButton(Def.ButtonGlygh.InitSetup, MyResource.TX_BUTTON_SETUP); + if (IsTrialMode) + { + DrawTextUnderButton(Def.ButtonGlygh.InitBuy, MyResource.TX_BUTTON_BUY); + } + if (IsRankingMode) + { + DrawTextUnderButton(Def.ButtonGlygh.InitRanking, MyResource.TX_BUTTON_RANKING); + } + } + if (phase == Def.Phase.Pause) + { + DrawTextUnderButton(Def.ButtonGlygh.PauseMenu, MyResource.TX_BUTTON_MENU); + if (mission != 1) + { + DrawTextUnderButton(Def.ButtonGlygh.PauseBack, MyResource.TX_BUTTON_BACK); + } + DrawTextUnderButton(Def.ButtonGlygh.PauseSetup, MyResource.TX_BUTTON_SETUP); + if (mission != 1 && mission % 10 != 0) + { + DrawTextUnderButton(Def.ButtonGlygh.PauseRestart, MyResource.TX_BUTTON_RESTART); + } + DrawTextUnderButton(Def.ButtonGlygh.PauseContinue, MyResource.TX_BUTTON_CONTINUE); + } + if (phase == Def.Phase.Resume) + { + DrawTextUnderButton(Def.ButtonGlygh.ResumeMenu, MyResource.TX_BUTTON_MENU); + DrawTextUnderButton(Def.ButtonGlygh.ResumeContinue, MyResource.TX_BUTTON_CONTINUE); + } + if (phase == Def.Phase.MainSetup || phase == Def.Phase.PlaySetup) + { + DrawTextRightButton(Def.ButtonGlygh.SetupSounds, MyResource.TX_BUTTON_SETUP_SOUNDS); + DrawTextRightButton(Def.ButtonGlygh.SetupJump, MyResource.TX_BUTTON_SETUP_JUMP); + DrawTextRightButton(Def.ButtonGlygh.SetupZoom, MyResource.TX_BUTTON_SETUP_ZOOM); + DrawTextRightButton(Def.ButtonGlygh.SetupAccel, MyResource.TX_BUTTON_SETUP_ACCEL); + if (phase == Def.Phase.MainSetup) + { + string text = string.Format(MyResource.LoadString(MyResource.TX_BUTTON_SETUP_RESET), new string((char)(65 + gameData.SelectedGamer), 1)); + DrawTextRightButton(Def.ButtonGlygh.SetupReset, text); + } + } + if (phase == Def.Phase.Trial) + { + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = 360; + tinyPoint.Y = 50; + TinyPoint pos = tinyPoint; + Text.DrawText(pixmap, pos, MyResource.LoadString(MyResource.TX_TRIAL1), 0.9); + pos.Y += 40; + Text.DrawText(pixmap, pos, MyResource.LoadString(MyResource.TX_TRIAL2), 0.7); + pos.Y += 25; + Text.DrawText(pixmap, pos, MyResource.LoadString(MyResource.TX_TRIAL3), 0.7); + pos.Y += 25; + Text.DrawText(pixmap, pos, MyResource.LoadString(MyResource.TX_TRIAL4), 0.7); + pos.Y += 25; + Text.DrawText(pixmap, pos, MyResource.LoadString(MyResource.TX_TRIAL5), 0.7); + pos.Y += 25; + Text.DrawText(pixmap, pos, MyResource.LoadString(MyResource.TX_TRIAL6), 0.7); + DrawTextUnderButton(Def.ButtonGlygh.TrialBuy, MyResource.TX_BUTTON_BUY); + DrawTextUnderButton(Def.ButtonGlygh.TrialCancel, MyResource.TX_BUTTON_BACK); + } + if (phase == Def.Phase.Ranking) + { + DrawTextUnderButton(Def.ButtonGlygh.RankingContinue, MyResource.TX_BUTTON_BACK); + } + } + + private void DrawButtonGamerText(Def.ButtonGlygh glyph, int gamer) + { + TinyRect buttonRect = inputPad.GetButtonRect(glyph); + int nbVies; + int mainDoors; + int secondaryDoors; + gameData.GetGamerInfo(gamer, out nbVies, out mainDoors, out secondaryDoors); + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = buttonRect.Right + 5 - pixmap.Origin.X; + tinyPoint.Y = buttonRect.Top + 3 - pixmap.Origin.Y; + TinyPoint pos = tinyPoint; + string text = string.Format(MyResource.LoadString(MyResource.TX_GAMER_TITLE), new string((char)(65 + gamer), 1)); + Text.DrawText(pixmap, pos, text, 0.7); + TinyPoint tinyPoint2 = default(TinyPoint); + tinyPoint2.X = buttonRect.Right + 5 - pixmap.Origin.X; + tinyPoint2.Y = buttonRect.Top + 25 - pixmap.Origin.Y; + pos = tinyPoint2; + text = string.Format(MyResource.LoadString(MyResource.TX_GAMER_MDOORS), mainDoors); + Text.DrawText(pixmap, pos, text, 0.45); + TinyPoint tinyPoint3 = default(TinyPoint); + tinyPoint3.X = buttonRect.Right + 5 - pixmap.Origin.X; + tinyPoint3.Y = buttonRect.Top + 39 - pixmap.Origin.Y; + pos = tinyPoint3; + text = string.Format(MyResource.LoadString(MyResource.TX_GAMER_SDOORS), secondaryDoors); + Text.DrawText(pixmap, pos, text, 0.45); + TinyPoint tinyPoint4 = default(TinyPoint); + tinyPoint4.X = buttonRect.Right + 5 - pixmap.Origin.X; + tinyPoint4.Y = buttonRect.Top + 53 - pixmap.Origin.Y; + pos = tinyPoint4; + text = string.Format(MyResource.LoadString(MyResource.TX_GAMER_LIFES), nbVies); + Text.DrawText(pixmap, pos, text, 0.45); + } + + private void DrawTextRightButton(Def.ButtonGlygh glyph, int res) + { + DrawTextRightButton(glyph, MyResource.LoadString(res)); + } + + private void DrawTextRightButton(Def.ButtonGlygh glyph, string text) + { + TinyRect buttonRect = inputPad.GetButtonRect(glyph); + string[] array = text.Split('\n'); + if (array.Length == 2) + { + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = buttonRect.Right + 10 - pixmap.Origin.X; + tinyPoint.Y = (buttonRect.Top + buttonRect.Bottom) / 2 - 20 - pixmap.Origin.Y; + TinyPoint pos = tinyPoint; + Text.DrawText(pixmap, pos, array[0], 0.7); + pos.Y += 24; + Text.DrawText(pixmap, pos, array[1], 0.7); + } + else + { + TinyPoint tinyPoint2 = default(TinyPoint); + tinyPoint2.X = buttonRect.Right + 10 - pixmap.Origin.X; + tinyPoint2.Y = (buttonRect.Top + buttonRect.Bottom) / 2 - 8 - pixmap.Origin.Y; + TinyPoint pos2 = tinyPoint2; + Text.DrawText(pixmap, pos2, text, 0.7); + } + } + + private void DrawTextUnderButton(Def.ButtonGlygh glyph, int res) + { + TinyRect buttonRect = inputPad.GetButtonRect(glyph); + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = (buttonRect.Left + buttonRect.Right) / 2 - pixmap.Origin.X; + tinyPoint.Y = buttonRect.Bottom + 2 - pixmap.Origin.Y; + TinyPoint pos = tinyPoint; + string text = MyResource.LoadString(res); + Text.DrawTextCenter(pixmap, pos, text, 0.7); + } + + private void DrawWaitProgress() + { + if (continueMission != 0) + { + return; + } + for (int i = 0; i < waitTable.Length; i++) + { + if (waitProgress <= waitTable[i * 2]) + { + waitJauge.SetLevel((int)waitTable[i * 2 + 1]); + break; + } + } + waitJauge.Draw(); + } + + private void DrawDebug() + { + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = 10; + tinyPoint.Y = 20; + TinyPoint pos = tinyPoint; + Text.DrawText(pixmap, pos, inputPad.TotalTouch.ToString(), 1.0); + } + + private void SetGamer(int gamer) + { + gameData.SelectedGamer = gamer; + gameData.Write(); + } + + private void SetPhase(Def.Phase phase) + { + SetPhase(phase, 0); + } + + private void SetPhase(Def.Phase phase, int mission) + { + if (mission != -2) + { + if (missionToStart2 == -1) + { + if ((this.phase == Def.Phase.Init || this.phase == Def.Phase.MainSetup || this.phase == Def.Phase.PlaySetup || this.phase == Def.Phase.Pause || this.phase == Def.Phase.Resume) && fadeOutPhase == Def.Phase.None) + { + fadeOutPhase = phase; + fadeOutMission = mission; + phaseTime = 0; + return; + } + if (phase == Def.Phase.Play) + { + fadeOutPhase = Def.Phase.None; + if (fadeOutMission != -1) + { + missionToStart1 = fadeOutMission; + return; + } + mission = fadeOutMission; + decor.LoadImages(); + } + } + else + { + mission = missionToStart2; + } + } + this.phase = phase; + fadeOutPhase = Def.Phase.None; + inputPad.Phase = this.phase; + playSetup = this.phase == Def.Phase.PlaySetup; + isTrialMode = Guide.IsTrialMode; + phaseTime = 0; + missionToStart2 = -1; + decor.StopSound(); + switch (this.phase) + { + case Def.Phase.Init: + pixmap.BackgroundCache("init"); + break; + case Def.Phase.Pause: + case Def.Phase.Resume: + pixmap.BackgroundCache("pause"); + break; + case Def.Phase.Lost: + pixmap.BackgroundCache("lost"); + break; + case Def.Phase.Win: + pixmap.BackgroundCache("win"); + break; + case Def.Phase.MainSetup: + case Def.Phase.PlaySetup: + pixmap.BackgroundCache("setup"); + break; + case Def.Phase.Trial: + pixmap.BackgroundCache("trial"); + break; + case Def.Phase.Ranking: + pixmap.BackgroundCache("pause"); + break; + case Def.Phase.Play: + decor.DrawBounds = pixmap.DrawBounds; + break; + } + if (this.phase == Def.Phase.Play && mission > 0) + { + StartMission(mission); + } + } + + private void MemorizeGamerProgress() + { + gameData.NbVies = decor.GetNbVies(); + decor.MemorizeDoors(gameData); + gameData.Write(); + } + } +} \ No newline at end of file diff --git a/GameData.cs b/GameData.cs new file mode 100644 index 0000000..2ee0dd2 --- /dev/null +++ b/GameData.cs @@ -0,0 +1,220 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.GameData +using System; +using WindowsPhoneSpeedyBlupi; + +namespace WindowsPhoneSpeedyBlupi +{ + + public class GameData + { + private static readonly int HeaderLength = 10; + + private static readonly int DoorsLength = 200; + + private static readonly int GamerLength = 10 + DoorsLength; + + private static readonly int MaxGamer = 3; + + private static readonly int TotalLength = HeaderLength + GamerLength * MaxGamer; + + private readonly byte[] data; + + public int SelectedGamer + { + get + { + return data[2]; + } + set + { + data[2] = (byte)value; + } + } + + public bool Sounds + { + get + { + return data[3] == 1; + } + set + { + data[3] = (byte)(value ? 1u : 0u); + } + } + + public bool JumpRight + { + get + { + return data[4] == 1; + } + set + { + data[4] = (byte)(value ? 1u : 0u); + } + } + + public bool AutoZoom + { + get + { + return data[5] == 1; + } + set + { + data[5] = (byte)(value ? 1u : 0u); + } + } + + public bool AccelActive + { + get + { + return data[6] == 1; + } + set + { + data[6] = (byte)(value ? 1u : 0u); + } + } + + public double AccelSensitivity + { + get + { + return (double)(int)data[7] / 100.0; + } + set + { + value = Math.Max(value, 0.0); + value = Math.Min(value, 1.0); + data[7] = (byte)(value * 100.0); + } + } + + public int NbVies + { + get + { + return data[GamerOffset]; + } + set + { + data[GamerOffset] = (byte)value; + } + } + + public int LastWorld + { + get + { + return data[GamerOffset + 1]; + } + set + { + data[GamerOffset + 1] = (byte)value; + } + } + + private int GamerOffset + { + get + { + return GetGamerOffset(SelectedGamer); + } + } + + public GameData() + { + data = new byte[TotalLength]; + Initialize(); + } + + public void Read() + { + Worlds.ReadGameData(data); + } + + public void Write() + { + Worlds.WriteGameData(data); + } + + public void Reset() + { + Initialize(SelectedGamer); + } + + public void GetDoors(int[] doors) + { + for (int i = 0; i < DoorsLength; i++) + { + doors[i] = data[GamerOffset + 10 + i]; + } + } + + public void SetDoors(int[] doors) + { + for (int i = 0; i < DoorsLength; i++) + { + data[GamerOffset + 10 + i] = (byte)doors[i]; + } + } + + public void GetGamerInfo(int gamer, out int nbVies, out int mainDoors, out int secondaryDoors) + { + nbVies = data[GetGamerOffset(gamer)]; + secondaryDoors = 0; + for (int i = 0; i < 180; i++) + { + if (data[GetGamerOffset(gamer) + 10 + i] == 1) + { + secondaryDoors++; + } + } + mainDoors = 0; + for (int j = 180; j < 200; j++) + { + if (data[GetGamerOffset(gamer) + 10 + j] == 1) + { + mainDoors++; + } + } + } + + private void Initialize() + { + data[0] = 1; + data[1] = 1; + data[2] = 0; + data[3] = 1; + data[4] = 1; + data[5] = 1; + data[6] = 0; + data[7] = 50; + SelectedGamer = 0; + for (int i = 0; i < MaxGamer; i++) + { + Initialize(i); + } + } + + private void Initialize(int gamer) + { + data[GetGamerOffset(gamer)] = 3; + data[GetGamerOffset(gamer) + 1] = 1; + for (int i = 0; i < DoorsLength; i++) + { + data[GetGamerOffset(gamer) + 10 + i] = 0; + } + } + + private int GetGamerOffset(int gamer) + { + return HeaderLength + GamerLength * gamer; + } + } + +} \ No newline at end of file diff --git a/InputPad.cs b/InputPad.cs new file mode 100644 index 0000000..c1aefe2 --- /dev/null +++ b/InputPad.cs @@ -0,0 +1,873 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.InputPad +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Devices.Sensors; +using Microsoft.Xna.Framework.Input.Touch; +using WindowsPhoneSpeedyBlupi; + +namespace WindowsPhoneSpeedyBlupi +{ + public class InputPad + { + private static readonly int padSize = 140; + + private readonly Game1 game1; + + private readonly Decor decor; + + private readonly Pixmap pixmap; + + private readonly Sound sound; + + private readonly GameData gameData; + + private readonly List pressedGlyphs; + + private readonly Accelerometer accelSensor; + + private readonly Slider accelSlider; + + private bool padPressed; + + private bool showCheatMenu; + + private TinyPoint padTouchPos; + + private Def.ButtonGlygh lastButtonDown; + + private Def.ButtonGlygh buttonPressed; + + private int totalTouch; + + private bool accelStarted; + + private bool accelActive; + + private double accelSpeedX; + + private bool accelLastState; + + private bool accelWaitZero; + + private int mission; + + public Def.Phase Phase { get; set; } + + public int SelectedGamer { get; set; } + + public TinyPoint PixmapOrigin { get; set; } + + public int TotalTouch + { + get + { + return totalTouch; + } + } + + public Def.ButtonGlygh ButtonPressed + { + get + { + Def.ButtonGlygh result = buttonPressed; + buttonPressed = Def.ButtonGlygh.None; + return result; + } + } + + public bool ShowCheatMenu + { + get + { + return showCheatMenu; + } + set + { + showCheatMenu = value; + } + } + + private IEnumerable ButtonGlyphs + { + get + { + switch (Phase) + { + case Def.Phase.Init: + yield return Def.ButtonGlygh.InitGamerA; + yield return Def.ButtonGlygh.InitGamerB; + yield return Def.ButtonGlygh.InitGamerC; + yield return Def.ButtonGlygh.InitSetup; + yield return Def.ButtonGlygh.InitPlay; + if (game1.IsTrialMode) + { + yield return Def.ButtonGlygh.InitBuy; + } + if (game1.IsRankingMode) + { + yield return Def.ButtonGlygh.InitRanking; + } + break; + case Def.Phase.Play: + yield return Def.ButtonGlygh.PlayPause; + yield return Def.ButtonGlygh.PlayAction; + yield return Def.ButtonGlygh.PlayJump; + if (accelStarted) + { + yield return Def.ButtonGlygh.PlayDown; + } + yield return Def.ButtonGlygh.Cheat11; + yield return Def.ButtonGlygh.Cheat12; + yield return Def.ButtonGlygh.Cheat21; + yield return Def.ButtonGlygh.Cheat22; + yield return Def.ButtonGlygh.Cheat31; + yield return Def.ButtonGlygh.Cheat32; + break; + case Def.Phase.Pause: + yield return Def.ButtonGlygh.PauseMenu; + if (mission != 1) + { + yield return Def.ButtonGlygh.PauseBack; + } + yield return Def.ButtonGlygh.PauseSetup; + if (mission != 1 && mission % 10 != 0) + { + yield return Def.ButtonGlygh.PauseRestart; + } + yield return Def.ButtonGlygh.PauseContinue; + break; + case Def.Phase.Resume: + yield return Def.ButtonGlygh.ResumeMenu; + yield return Def.ButtonGlygh.ResumeContinue; + break; + case Def.Phase.Lost: + case Def.Phase.Win: + yield return Def.ButtonGlygh.WinLostReturn; + break; + case Def.Phase.Trial: + yield return Def.ButtonGlygh.TrialBuy; + yield return Def.ButtonGlygh.TrialCancel; + break; + case Def.Phase.MainSetup: + yield return Def.ButtonGlygh.SetupSounds; + yield return Def.ButtonGlygh.SetupJump; + yield return Def.ButtonGlygh.SetupZoom; + yield return Def.ButtonGlygh.SetupAccel; + yield return Def.ButtonGlygh.SetupReset; + yield return Def.ButtonGlygh.SetupReturn; + break; + case Def.Phase.PlaySetup: + yield return Def.ButtonGlygh.SetupSounds; + yield return Def.ButtonGlygh.SetupJump; + yield return Def.ButtonGlygh.SetupZoom; + yield return Def.ButtonGlygh.SetupAccel; + yield return Def.ButtonGlygh.SetupReturn; + break; + case Def.Phase.Ranking: + yield return Def.ButtonGlygh.RankingContinue; + break; + } + if (showCheatMenu) + { + yield return Def.ButtonGlygh.Cheat1; + yield return Def.ButtonGlygh.Cheat2; + yield return Def.ButtonGlygh.Cheat3; + yield return Def.ButtonGlygh.Cheat4; + yield return Def.ButtonGlygh.Cheat5; + yield return Def.ButtonGlygh.Cheat6; + yield return Def.ButtonGlygh.Cheat7; + yield return Def.ButtonGlygh.Cheat8; + yield return Def.ButtonGlygh.Cheat9; + } + } + } + + private TinyPoint PadCenter + { + get + { + TinyRect drawBounds = pixmap.DrawBounds; + if (gameData.JumpRight) + { + TinyPoint result = default(TinyPoint); + result.X = 100; + result.Y = drawBounds.Height - 100; + return result; + } + TinyPoint result2 = default(TinyPoint); + result2.X = drawBounds.Width - 100; + result2.Y = drawBounds.Height - 100; + return result2; + } + } + + public InputPad(Game1 game1, Decor decor, Pixmap pixmap, Sound sound, GameData gameData) + { + //IL_0037: Unknown result type (might be due to invalid IL or missing references) + //IL_0041: Expected O, but got Unknown + this.game1 = game1; + this.decor = decor; + this.pixmap = pixmap; + this.sound = sound; + this.gameData = gameData; + pressedGlyphs = new List(); + accelSensor = new Accelerometer(); + ((SensorBase)(object)accelSensor).CurrentValueChanged += HandleAccelSensorCurrentValueChanged; + accelSlider = new Slider + { + TopLeftCorner = new TinyPoint + { + X = 320, + Y = 400 + }, + Value = this.gameData.AccelSensitivity + }; + lastButtonDown = Def.ButtonGlygh.None; + buttonPressed = Def.ButtonGlygh.None; + } + + public void StartMission(int mission) + { + this.mission = mission; + accelWaitZero = true; + } + + public void Update() + { + pressedGlyphs.Clear(); + if (accelActive != gameData.AccelActive) + { + accelActive = gameData.AccelActive; + if (accelActive) + { + StartAccel(); + } + else + { + StopAccel(); + } + } + double num = 0.0; + double num2 = 0.0; + int num3 = 0; + padPressed = false; + Def.ButtonGlygh buttonGlygh = Def.ButtonGlygh.None; + TouchCollection state = TouchPanel.GetState(); + totalTouch = state.Count; + foreach (TouchLocation item in state) + { + if (item.State == TouchLocationState.Pressed || item.State == TouchLocationState.Moved) + { + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = (int)item.Position.X; + tinyPoint.Y = (int)item.Position.Y; + TinyPoint tinyPoint2 = tinyPoint; + if (!accelStarted && Misc.IsInside(GetPadBounds(PadCenter, padSize), tinyPoint2)) + { + padPressed = true; + padTouchPos = tinyPoint2; + } + Def.ButtonGlygh buttonGlygh2 = ButtonDetect(tinyPoint2); + if (buttonGlygh2 != 0) + { + pressedGlyphs.Add(buttonGlygh2); + } + if ((Phase == Def.Phase.MainSetup || Phase == Def.Phase.PlaySetup) && accelSlider.Move(tinyPoint2)) + { + gameData.AccelSensitivity = accelSlider.Value; + } + switch (buttonGlygh2) + { + case Def.ButtonGlygh.PlayJump: + accelWaitZero = false; + num3 |= 1; + break; + case Def.ButtonGlygh.PlayDown: + accelWaitZero = false; + num3 |= 4; + break; + case Def.ButtonGlygh.InitGamerA: + case Def.ButtonGlygh.InitGamerB: + case Def.ButtonGlygh.InitGamerC: + case Def.ButtonGlygh.InitSetup: + case Def.ButtonGlygh.InitPlay: + case Def.ButtonGlygh.InitBuy: + case Def.ButtonGlygh.InitRanking: + case Def.ButtonGlygh.WinLostReturn: + case Def.ButtonGlygh.TrialBuy: + case Def.ButtonGlygh.TrialCancel: + case Def.ButtonGlygh.SetupSounds: + case Def.ButtonGlygh.SetupJump: + case Def.ButtonGlygh.SetupZoom: + case Def.ButtonGlygh.SetupAccel: + case Def.ButtonGlygh.SetupReset: + case Def.ButtonGlygh.SetupReturn: + case Def.ButtonGlygh.PauseMenu: + case Def.ButtonGlygh.PauseBack: + case Def.ButtonGlygh.PauseSetup: + case Def.ButtonGlygh.PauseRestart: + case Def.ButtonGlygh.PauseContinue: + case Def.ButtonGlygh.PlayPause: + case Def.ButtonGlygh.PlayAction: + case Def.ButtonGlygh.ResumeMenu: + case Def.ButtonGlygh.ResumeContinue: + case Def.ButtonGlygh.RankingContinue: + case Def.ButtonGlygh.Cheat11: + case Def.ButtonGlygh.Cheat12: + case Def.ButtonGlygh.Cheat21: + case Def.ButtonGlygh.Cheat22: + case Def.ButtonGlygh.Cheat31: + case Def.ButtonGlygh.Cheat32: + case Def.ButtonGlygh.Cheat1: + case Def.ButtonGlygh.Cheat2: + case Def.ButtonGlygh.Cheat3: + case Def.ButtonGlygh.Cheat4: + case Def.ButtonGlygh.Cheat5: + case Def.ButtonGlygh.Cheat6: + case Def.ButtonGlygh.Cheat7: + case Def.ButtonGlygh.Cheat8: + case Def.ButtonGlygh.Cheat9: + accelWaitZero = false; + buttonGlygh = buttonGlygh2; + showCheatMenu = false; + break; + } + } + } + if (buttonGlygh != 0 && buttonGlygh != Def.ButtonGlygh.PlayAction && buttonGlygh != Def.ButtonGlygh.Cheat11 && buttonGlygh != Def.ButtonGlygh.Cheat12 && buttonGlygh != Def.ButtonGlygh.Cheat21 && buttonGlygh != Def.ButtonGlygh.Cheat22 && buttonGlygh != Def.ButtonGlygh.Cheat31 && buttonGlygh != Def.ButtonGlygh.Cheat32 && lastButtonDown == Def.ButtonGlygh.None) + { + TinyPoint tinyPoint3 = default(TinyPoint); + tinyPoint3.X = 320; + tinyPoint3.Y = 240; + TinyPoint pos = tinyPoint3; + sound.PlayImage(0, pos); + } + if (buttonGlygh == Def.ButtonGlygh.None && lastButtonDown != 0) + { + buttonPressed = lastButtonDown; + } + lastButtonDown = buttonGlygh; + if (padPressed) + { + double num4 = padTouchPos.X - PadCenter.X; + double num5 = padTouchPos.Y - PadCenter.Y; + if (num4 > 20.0) + { + num += 1.0; + } + if (num4 < -20.0) + { + num -= 1.0; + } + if (num5 > 20.0) + { + num2 += 1.0; + } + if (num5 < -20.0) + { + num2 -= 1.0; + } + } + if (accelStarted) + { + num = accelSpeedX; + num2 = 0.0; + if (((uint)num3 & 4u) != 0) + { + num2 = 1.0; + } + } + decor.SetSpeedX(num); + decor.SetSpeedY(num2); + decor.KeyChange(num3); + } + + private Def.ButtonGlygh ButtonDetect(TinyPoint pos) + { + foreach (Def.ButtonGlygh item in ButtonGlyphs.Reverse()) + { + int value = 0; + if (item == Def.ButtonGlygh.PlayJump || item == Def.ButtonGlygh.PlayAction || item == Def.ButtonGlygh.PlayDown || item == Def.ButtonGlygh.PlayPause) + { + value = 20; + } + TinyRect rect = Misc.Inflate(GetButtonRect(item), value); + if (Misc.IsInside(rect, pos)) + { + return item; + } + } + return Def.ButtonGlygh.None; + } + + public void Draw() + { + if (!accelStarted && Phase == Def.Phase.Play) + { + pixmap.DrawIcon(14, 0, GetPadBounds(PadCenter, padSize / 2), 1.0, false); + TinyPoint center = (padPressed ? padTouchPos : PadCenter); + pixmap.DrawIcon(14, 1, GetPadBounds(center, padSize / 2), 1.0, false); + } + foreach (Def.ButtonGlygh buttonGlyph in ButtonGlyphs) + { + bool pressed = pressedGlyphs.Contains(buttonGlyph); + bool selected = false; + if (buttonGlyph >= Def.ButtonGlygh.InitGamerA && buttonGlyph <= Def.ButtonGlygh.InitGamerC) + { + int num = (int)(buttonGlyph - 1); + selected = num == gameData.SelectedGamer; + } + if (buttonGlyph == Def.ButtonGlygh.SetupSounds) + { + selected = gameData.Sounds; + } + if (buttonGlyph == Def.ButtonGlygh.SetupJump) + { + selected = gameData.JumpRight; + } + if (buttonGlyph == Def.ButtonGlygh.SetupZoom) + { + selected = gameData.AutoZoom; + } + if (buttonGlyph == Def.ButtonGlygh.SetupAccel) + { + selected = gameData.AccelActive; + } + pixmap.DrawInputButton(GetButtonRect(buttonGlyph), buttonGlyph, pressed, selected); + } + if ((Phase == Def.Phase.MainSetup || Phase == Def.Phase.PlaySetup) && gameData.AccelActive) + { + accelSlider.Draw(pixmap); + } + } + + private TinyRect GetPadBounds(TinyPoint center, int radius) + { + TinyRect result = default(TinyRect); + result.Left = center.X - radius; + result.Right = center.X + radius; + result.Top = center.Y - radius; + result.Bottom = center.Y + radius; + return result; + } + + public TinyRect GetButtonRect(Def.ButtonGlygh glyph) + { + TinyRect drawBounds = pixmap.DrawBounds; + double num = drawBounds.Width; + double num2 = drawBounds.Height; + double num3 = num2 / 5.0; + double num4 = num2 * 140.0 / 480.0; + double num5 = num2 / 3.5; + if (glyph >= Def.ButtonGlygh.Cheat1 && glyph <= Def.ButtonGlygh.Cheat9) + { + int num6 = (int)(glyph - 35); + TinyRect result = default(TinyRect); + result.Left = 80 * num6; + result.Right = 80 * (num6 + 1); + result.Top = 0; + result.Bottom = 80; + return result; + } + switch (glyph) + { + case Def.ButtonGlygh.InitGamerA: + { + TinyRect result19 = default(TinyRect); + result19.Left = (int)(20.0 + num4 * 0.0); + result19.Right = (int)(20.0 + num4 * 0.5); + result19.Top = (int)(num2 - 20.0 - num4 * 2.1); + result19.Bottom = (int)(num2 - 20.0 - num4 * 1.6); + return result19; + } + case Def.ButtonGlygh.InitGamerB: + { + TinyRect result18 = default(TinyRect); + result18.Left = (int)(20.0 + num4 * 0.0); + result18.Right = (int)(20.0 + num4 * 0.5); + result18.Top = (int)(num2 - 20.0 - num4 * 1.6); + result18.Bottom = (int)(num2 - 20.0 - num4 * 1.1); + return result18; + } + case Def.ButtonGlygh.InitGamerC: + { + TinyRect result15 = default(TinyRect); + result15.Left = (int)(20.0 + num4 * 0.0); + result15.Right = (int)(20.0 + num4 * 0.5); + result15.Top = (int)(num2 - 20.0 - num4 * 1.1); + result15.Bottom = (int)(num2 - 20.0 - num4 * 0.6); + return result15; + } + case Def.ButtonGlygh.InitSetup: + { + TinyRect result14 = default(TinyRect); + result14.Left = (int)(20.0 + num4 * 0.0); + result14.Right = (int)(20.0 + num4 * 0.5); + result14.Top = (int)(num2 - 20.0 - num4 * 0.5); + result14.Bottom = (int)(num2 - 20.0 - num4 * 0.0); + return result14; + } + case Def.ButtonGlygh.InitPlay: + { + TinyRect result11 = default(TinyRect); + result11.Left = (int)(num - 20.0 - num4 * 1.0); + result11.Right = (int)(num - 20.0 - num4 * 0.0); + result11.Top = (int)(num2 - 40.0 - num4 * 1.0); + result11.Bottom = (int)(num2 - 40.0 - num4 * 0.0); + return result11; + } + case Def.ButtonGlygh.InitBuy: + case Def.ButtonGlygh.InitRanking: + { + TinyRect result10 = default(TinyRect); + result10.Left = (int)(num - 20.0 - num4 * 0.75); + result10.Right = (int)(num - 20.0 - num4 * 0.25); + result10.Top = (int)(num2 - 20.0 - num4 * 2.1); + result10.Bottom = (int)(num2 - 20.0 - num4 * 1.6); + return result10; + } + case Def.ButtonGlygh.PauseMenu: + { + TinyRect result37 = default(TinyRect); + result37.Left = (int)((double)PixmapOrigin.X + num4 * -0.21); + result37.Right = (int)((double)PixmapOrigin.X + num4 * 0.79); + result37.Top = (int)((double)PixmapOrigin.Y + num4 * 2.2); + result37.Bottom = (int)((double)PixmapOrigin.Y + num4 * 3.2); + return result37; + } + case Def.ButtonGlygh.PauseBack: + { + TinyRect result36 = default(TinyRect); + result36.Left = (int)((double)PixmapOrigin.X + num4 * 0.79); + result36.Right = (int)((double)PixmapOrigin.X + num4 * 1.79); + result36.Top = (int)((double)PixmapOrigin.Y + num4 * 2.2); + result36.Bottom = (int)((double)PixmapOrigin.Y + num4 * 3.2); + return result36; + } + case Def.ButtonGlygh.PauseSetup: + { + TinyRect result35 = default(TinyRect); + result35.Left = (int)((double)PixmapOrigin.X + num4 * 1.79); + result35.Right = (int)((double)PixmapOrigin.X + num4 * 2.79); + result35.Top = (int)((double)PixmapOrigin.Y + num4 * 2.2); + result35.Bottom = (int)((double)PixmapOrigin.Y + num4 * 3.2); + return result35; + } + case Def.ButtonGlygh.PauseRestart: + { + TinyRect result34 = default(TinyRect); + result34.Left = (int)((double)PixmapOrigin.X + num4 * 2.79); + result34.Right = (int)((double)PixmapOrigin.X + num4 * 3.79); + result34.Top = (int)((double)PixmapOrigin.Y + num4 * 2.2); + result34.Bottom = (int)((double)PixmapOrigin.Y + num4 * 3.2); + return result34; + } + case Def.ButtonGlygh.PauseContinue: + { + TinyRect result33 = default(TinyRect); + result33.Left = (int)((double)PixmapOrigin.X + num4 * 3.79); + result33.Right = (int)((double)PixmapOrigin.X + num4 * 4.79); + result33.Top = (int)((double)PixmapOrigin.Y + num4 * 2.2); + result33.Bottom = (int)((double)PixmapOrigin.Y + num4 * 3.2); + return result33; + } + case Def.ButtonGlygh.ResumeMenu: + { + TinyRect result32 = default(TinyRect); + result32.Left = (int)((double)PixmapOrigin.X + num4 * 1.29); + result32.Right = (int)((double)PixmapOrigin.X + num4 * 2.29); + result32.Top = (int)((double)PixmapOrigin.Y + num4 * 2.2); + result32.Bottom = (int)((double)PixmapOrigin.Y + num4 * 3.2); + return result32; + } + case Def.ButtonGlygh.ResumeContinue: + { + TinyRect result31 = default(TinyRect); + result31.Left = (int)((double)PixmapOrigin.X + num4 * 2.29); + result31.Right = (int)((double)PixmapOrigin.X + num4 * 3.29); + result31.Top = (int)((double)PixmapOrigin.Y + num4 * 2.2); + result31.Bottom = (int)((double)PixmapOrigin.Y + num4 * 3.2); + return result31; + } + case Def.ButtonGlygh.WinLostReturn: + { + TinyRect result30 = default(TinyRect); + result30.Left = (int)((double)PixmapOrigin.X + num - num3 * 2.2); + result30.Right = (int)((double)PixmapOrigin.X + num - num3 * 1.2); + result30.Top = (int)((double)PixmapOrigin.Y + num3 * 0.2); + result30.Bottom = (int)((double)PixmapOrigin.Y + num3 * 1.2); + return result30; + } + case Def.ButtonGlygh.TrialBuy: + { + TinyRect result29 = default(TinyRect); + result29.Left = (int)((double)PixmapOrigin.X + num4 * 2.5); + result29.Right = (int)((double)PixmapOrigin.X + num4 * 3.5); + result29.Top = (int)((double)PixmapOrigin.Y + num4 * 2.1); + result29.Bottom = (int)((double)PixmapOrigin.Y + num4 * 3.1); + return result29; + } + case Def.ButtonGlygh.TrialCancel: + { + TinyRect result28 = default(TinyRect); + result28.Left = (int)((double)PixmapOrigin.X + num4 * 3.5); + result28.Right = (int)((double)PixmapOrigin.X + num4 * 4.5); + result28.Top = (int)((double)PixmapOrigin.Y + num4 * 2.1); + result28.Bottom = (int)((double)PixmapOrigin.Y + num4 * 3.1); + return result28; + } + case Def.ButtonGlygh.RankingContinue: + { + TinyRect result27 = default(TinyRect); + result27.Left = (int)((double)PixmapOrigin.X + num4 * 3.5); + result27.Right = (int)((double)PixmapOrigin.X + num4 * 4.5); + result27.Top = (int)((double)PixmapOrigin.Y + num4 * 2.1); + result27.Bottom = (int)((double)PixmapOrigin.Y + num4 * 3.1); + return result27; + } + case Def.ButtonGlygh.SetupSounds: + { + TinyRect result26 = default(TinyRect); + result26.Left = (int)(20.0 + num4 * 0.0); + result26.Right = (int)(20.0 + num4 * 0.5); + result26.Top = (int)(num2 - 20.0 - num4 * 2.0); + result26.Bottom = (int)(num2 - 20.0 - num4 * 1.5); + return result26; + } + case Def.ButtonGlygh.SetupJump: + { + TinyRect result25 = default(TinyRect); + result25.Left = (int)(20.0 + num4 * 0.0); + result25.Right = (int)(20.0 + num4 * 0.5); + result25.Top = (int)(num2 - 20.0 - num4 * 1.5); + result25.Bottom = (int)(num2 - 20.0 - num4 * 1.0); + return result25; + } + case Def.ButtonGlygh.SetupZoom: + { + TinyRect result24 = default(TinyRect); + result24.Left = (int)(20.0 + num4 * 0.0); + result24.Right = (int)(20.0 + num4 * 0.5); + result24.Top = (int)(num2 - 20.0 - num4 * 1.0); + result24.Bottom = (int)(num2 - 20.0 - num4 * 0.5); + return result24; + } + case Def.ButtonGlygh.SetupAccel: + { + TinyRect result23 = default(TinyRect); + result23.Left = (int)(20.0 + num4 * 0.0); + result23.Right = (int)(20.0 + num4 * 0.5); + result23.Top = (int)(num2 - 20.0 - num4 * 0.5); + result23.Bottom = (int)(num2 - 20.0 - num4 * 0.0); + return result23; + } + case Def.ButtonGlygh.SetupReset: + { + TinyRect result22 = default(TinyRect); + result22.Left = (int)(450.0 + num4 * 0.0); + result22.Right = (int)(450.0 + num4 * 0.5); + result22.Top = (int)(num2 - 20.0 - num4 * 2.0); + result22.Bottom = (int)(num2 - 20.0 - num4 * 1.5); + return result22; + } + case Def.ButtonGlygh.SetupReturn: + { + TinyRect result21 = default(TinyRect); + result21.Left = (int)(num - 20.0 - num4 * 0.8); + result21.Right = (int)(num - 20.0 - num4 * 0.0); + result21.Top = (int)(num2 - 20.0 - num4 * 0.8); + result21.Bottom = (int)(num2 - 20.0 - num4 * 0.0); + return result21; + } + case Def.ButtonGlygh.PlayPause: + { + TinyRect result20 = default(TinyRect); + result20.Left = (int)(num - num3 * 0.7); + result20.Right = (int)(num - num3 * 0.2); + result20.Top = (int)(num3 * 0.2); + result20.Bottom = (int)(num3 * 0.7); + return result20; + } + case Def.ButtonGlygh.PlayAction: + { + if (gameData.JumpRight) + { + TinyRect result16 = default(TinyRect); + result16.Left = (int)((double)drawBounds.Width - num3 * 1.2); + result16.Right = (int)((double)drawBounds.Width - num3 * 0.2); + result16.Top = (int)(num2 - num3 * 2.6); + result16.Bottom = (int)(num2 - num3 * 1.6); + return result16; + } + TinyRect result17 = default(TinyRect); + result17.Left = (int)(num3 * 0.2); + result17.Right = (int)(num3 * 1.2); + result17.Top = (int)(num2 - num3 * 2.6); + result17.Bottom = (int)(num2 - num3 * 1.6); + return result17; + } + case Def.ButtonGlygh.PlayJump: + { + if (gameData.JumpRight) + { + TinyRect result12 = default(TinyRect); + result12.Left = (int)((double)drawBounds.Width - num3 * 1.2); + result12.Right = (int)((double)drawBounds.Width - num3 * 0.2); + result12.Top = (int)(num2 - num3 * 1.2); + result12.Bottom = (int)(num2 - num3 * 0.2); + return result12; + } + TinyRect result13 = default(TinyRect); + result13.Left = (int)(num3 * 0.2); + result13.Right = (int)(num3 * 1.2); + result13.Top = (int)(num2 - num3 * 1.2); + result13.Bottom = (int)(num2 - num3 * 0.2); + return result13; + } + case Def.ButtonGlygh.PlayDown: + { + if (gameData.JumpRight) + { + TinyRect result8 = default(TinyRect); + result8.Left = (int)(num3 * 0.2); + result8.Right = (int)(num3 * 1.2); + result8.Top = (int)(num2 - num3 * 1.2); + result8.Bottom = (int)(num2 - num3 * 0.2); + return result8; + } + TinyRect result9 = default(TinyRect); + result9.Left = (int)((double)drawBounds.Width - num3 * 1.2); + result9.Right = (int)((double)drawBounds.Width - num3 * 0.2); + result9.Top = (int)(num2 - num3 * 1.2); + result9.Bottom = (int)(num2 - num3 * 0.2); + return result9; + } + case Def.ButtonGlygh.Cheat11: + { + TinyRect result7 = default(TinyRect); + result7.Left = (int)(num5 * 0.0); + result7.Right = (int)(num5 * 1.0); + result7.Top = (int)(num5 * 0.0); + result7.Bottom = (int)(num5 * 1.0); + return result7; + } + case Def.ButtonGlygh.Cheat12: + { + TinyRect result6 = default(TinyRect); + result6.Left = (int)(num5 * 0.0); + result6.Right = (int)(num5 * 1.0); + result6.Top = (int)(num5 * 1.0); + result6.Bottom = (int)(num5 * 2.0); + return result6; + } + case Def.ButtonGlygh.Cheat21: + { + TinyRect result5 = default(TinyRect); + result5.Left = (int)(num5 * 1.0); + result5.Right = (int)(num5 * 2.0); + result5.Top = (int)(num5 * 0.0); + result5.Bottom = (int)(num5 * 1.0); + return result5; + } + case Def.ButtonGlygh.Cheat22: + { + TinyRect result4 = default(TinyRect); + result4.Left = (int)(num5 * 1.0); + result4.Right = (int)(num5 * 2.0); + result4.Top = (int)(num5 * 1.0); + result4.Bottom = (int)(num5 * 2.0); + return result4; + } + case Def.ButtonGlygh.Cheat31: + { + TinyRect result3 = default(TinyRect); + result3.Left = (int)(num5 * 2.0); + result3.Right = (int)(num5 * 3.0); + result3.Top = (int)(num5 * 0.0); + result3.Bottom = (int)(num5 * 1.0); + return result3; + } + case Def.ButtonGlygh.Cheat32: + { + TinyRect result2 = default(TinyRect); + result2.Left = (int)(num5 * 2.0); + result2.Right = (int)(num5 * 3.0); + result2.Top = (int)(num5 * 1.0); + result2.Bottom = (int)(num5 * 2.0); + return result2; + } + default: + return default(TinyRect); + } + } + + private void StartAccel() + { + try + { + accelSensor.Start(); + accelStarted = true; + } + catch (AccelerometerFailedException) + { + accelStarted = false; + } + catch (UnauthorizedAccessException) + { + accelStarted = false; + } + } + + private void StopAccel() + { + if (accelStarted) + { + try + { + accelSensor.Stop(); + } + catch (AccelerometerFailedException) + { + } + accelStarted = false; + } + } + + private void HandleAccelSensorCurrentValueChanged(object sender, SensorReadingEventArgs e) + { + //IL_0001: Unknown result type (might be due to invalid IL or missing references) + //IL_0006: Unknown result type (might be due to invalid IL or missing references) + AccelerometerReading sensorReading = e.SensorReading; + float y = ((AccelerometerReading)(ref sensorReading)).Acceleration.Y; + float num = (1f - (float)gameData.AccelSensitivity) * 0.06f + 0.04f; + float num2 = (accelLastState ? (num * 0.6f) : num); + if (y > num2) + { + accelSpeedX = 0.0 - Math.Min((double)y * 0.25 / (double)num + 0.25, 1.0); + } + else if (y < 0f - num2) + { + accelSpeedX = Math.Min((double)(0f - y) * 0.25 / (double)num + 0.25, 1.0); + } + else + { + accelSpeedX = 0.0; + } + accelLastState = accelSpeedX != 0.0; + if (accelWaitZero) + { + if (accelSpeedX == 0.0) + { + accelWaitZero = false; + } + else + { + accelSpeedX = 0.0; + } + } + } + } + +} \ No newline at end of file diff --git a/Jauge.cs b/Jauge.cs new file mode 100644 index 0000000..4ac9464 --- /dev/null +++ b/Jauge.cs @@ -0,0 +1,159 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Jauge +using Microsoft.Xna.Framework.Media; +using WindowsPhoneSpeedyBlupi; + +namespace WindowsPhoneSpeedyBlupi +{ + public class Jauge + { + private Pixmap m_pixmap; + + private Sound m_sound; + + private bool m_bHide; + + private TinyPoint m_pos; + + private TinyPoint m_dim; + + private int m_mode; + + private int m_level; + + private bool m_bMinimizeRedraw; + + private bool m_bRedraw; + + private double m_zoom; + + public double Zoom + { + get + { + return m_zoom; + } + set + { + m_zoom = value; + } + } + + public Jauge() + { + m_mode = 0; + m_bHide = true; + m_bMinimizeRedraw = false; + m_bRedraw = false; + m_zoom = 1.0; + } + + public bool Create(Pixmap pixmap, Sound sound, TinyPoint pos, int mode, bool bMinimizeRedraw) + { + m_pixmap = pixmap; + m_sound = sound; + m_mode = mode; + m_bMinimizeRedraw = bMinimizeRedraw; + m_bHide = true; + m_pos = pos; + m_dim.X = 124; + m_dim.Y = 22; + m_level = 0; + m_bRedraw = true; + return true; + } + + public void Draw() + { + TinyRect rect = default(TinyRect); + if (m_bMinimizeRedraw && !m_bRedraw) + { + return; + } + m_bRedraw = false; + if (!m_bHide) + { + int num = m_level * 114 / 100; + rect.Left = 0; + rect.Right = 124; + rect.Top = 0; + rect.Bottom = 22; + m_pixmap.DrawPart(5, m_pos, rect, m_zoom); + if (num > 0) + { + rect.Left = 0; + rect.Right = 6 + num; + rect.Top = 22 * m_mode; + rect.Bottom = 22 * (m_mode + 1); + m_pixmap.DrawPart(5, m_pos, rect, m_zoom); + } + } + } + + public void Redraw() + { + m_bRedraw = true; + } + + public int GetLevel() + { + return m_level; + } + + public void SetLevel(int level) + { + if (level < 0) + { + level = 0; + } + if (level > 100) + { + level = 100; + } + if (m_level != level) + { + m_bRedraw = true; + } + m_level = level; + } + + public int GetMode() + { + return m_mode; + } + + public void SetMode(int mode) + { + if (m_mode != mode) + { + m_bRedraw = true; + } + m_mode = mode; + } + + public bool GetHide() + { + return m_bHide; + } + + public void SetHide(bool bHide) + { + if (m_bHide != bHide) + { + m_bRedraw = true; + } + m_bHide = bHide; + } + + public TinyPoint GetPos() + { + return m_pos; + } + + public void SetRedraw() + { + m_bRedraw = true; + } + } + +} \ No newline at end of file diff --git a/Misc.cs b/Misc.cs new file mode 100644 index 0000000..8379bf5 --- /dev/null +++ b/Misc.cs @@ -0,0 +1,123 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Misc +using System; +using Microsoft.Xna.Framework; +using WindowsPhoneSpeedyBlupi; + + +namespace WindowsPhoneSpeedyBlupi +{ + public static class Misc + { + public static Rectangle RotateAdjust(Rectangle rect, double angle) + { + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = rect.Width / 2; + tinyPoint.Y = rect.Height / 2; + TinyPoint p = tinyPoint; + TinyPoint tinyPoint2 = RotatePointRad(angle, p); + int num = tinyPoint2.X - p.X; + int num2 = tinyPoint2.Y - p.Y; + return new Rectangle(rect.Left - num, rect.Top - num2, rect.Width, rect.Height); + } + + public static TinyPoint RotatePointRad(double angle, TinyPoint p) + { + return RotatePointRad(default(TinyPoint), angle, p); + } + + public static TinyPoint RotatePointRad(TinyPoint center, double angle, TinyPoint p) + { + TinyPoint tinyPoint = default(TinyPoint); + TinyPoint result = default(TinyPoint); + tinyPoint.X = p.X - center.X; + tinyPoint.Y = p.Y - center.Y; + double num = Math.Sin(angle); + double num2 = Math.Cos(angle); + result.X = (int)((double)tinyPoint.X * num2 - (double)tinyPoint.Y * num); + result.Y = (int)((double)tinyPoint.X * num + (double)tinyPoint.Y * num2); + result.X += center.X; + result.Y += center.Y; + return result; + } + + public static double DegToRad(double angle) + { + return angle * Math.PI / 180.0; + } + + public static int Approch(int actual, int final, int step) + { + if (actual < final) + { + actual = Math.Min(actual + step, final); + } + else if (actual > final) + { + actual = Math.Max(actual - step, final); + } + return actual; + } + + public static int Speed(double speed, int max) + { + if (speed > 0.0) + { + return Math.Max((int)(speed * (double)max), 1); + } + if (speed < 0.0) + { + return Math.Min((int)(speed * (double)max), -1); + } + return 0; + } + + public static TinyRect Inflate(TinyRect rect, int value) + { + TinyRect result = default(TinyRect); + result.Left = rect.Left - value; + result.Right = rect.Right + value; + result.Top = rect.Top - value; + result.Bottom = rect.Bottom + value; + return result; + } + + public static bool IsInside(TinyRect rect, TinyPoint p) + { + if (p.X >= rect.Left && p.X <= rect.Right && p.Y >= rect.Top) + { + return p.Y <= rect.Bottom; + } + return false; + } + + public static bool IntersectRect(out TinyRect dst, TinyRect src1, TinyRect src2) + { + dst = default(TinyRect); + dst.Left = Math.Max(src1.Left, src2.Left); + dst.Right = Math.Min(src1.Right, src2.Right); + dst.Top = Math.Max(src1.Top, src2.Top); + dst.Bottom = Math.Min(src1.Bottom, src2.Bottom); + return !IsRectEmpty(dst); + } + + public static bool UnionRect(out TinyRect dst, TinyRect src1, TinyRect src2) + { + dst = default(TinyRect); + dst.Left = Math.Min(src1.Left, src2.Left); + dst.Right = Math.Max(src1.Right, src2.Right); + dst.Top = Math.Min(src1.Top, src2.Top); + dst.Bottom = Math.Max(src1.Bottom, src2.Bottom); + return !IsRectEmpty(dst); + } + + private static bool IsRectEmpty(TinyRect rect) + { + if (rect.Left < rect.Right) + { + return rect.Top >= rect.Bottom; + } + return true; + } + } +} \ No newline at end of file diff --git a/MyResource.cs b/MyResource.cs new file mode 100644 index 0000000..42c8088 --- /dev/null +++ b/MyResource.cs @@ -0,0 +1,776 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.MyResource +using System.Collections.Generic; +using System.Globalization; + +namespace WindowsPhoneSpeedyBlupi +{ + public static class MyResource + { + public static readonly int TX_BUTTON_PLAY; + + public static readonly int TX_BUTTON_MENU; + + public static readonly int TX_BUTTON_BACK; + + public static readonly int TX_BUTTON_RESTART; + + public static readonly int TX_BUTTON_CONTINUE; + + public static readonly int TX_BUTTON_BUY; + + public static readonly int TX_BUTTON_SETUP; + + public static readonly int TX_BUTTON_SETUP_SOUNDS; + + public static readonly int TX_BUTTON_SETUP_JUMP; + + public static readonly int TX_BUTTON_SETUP_ZOOM; + + public static readonly int TX_BUTTON_SETUP_ACCEL; + + public static readonly int TX_BUTTON_SETUP_RESET; + + public static readonly int TX_BUTTON_RANKING; + + public static readonly int TX_GAMER_TITLE; + + public static readonly int TX_GAMER_MDOORS; + + public static readonly int TX_GAMER_SDOORS; + + public static readonly int TX_GAMER_LIFES; + + public static readonly int TX_TRIAL1; + + public static readonly int TX_TRIAL2; + + public static readonly int TX_TRIAL3; + + public static readonly int TX_TRIAL4; + + public static readonly int TX_TRIAL5; + + public static readonly int TX_TRIAL6; + + public static readonly int TX_TRAINING101; + + public static readonly int TX_TRAINING102; + + public static readonly int TX_TRAINING103; + + public static readonly int TX_TRAINING104; + + public static readonly int TX_TRAINING105; + + public static readonly int TX_TRAINING106; + + public static readonly int TX_TRAINING107; + + public static readonly int TX_TRAINING108; + + public static readonly int TX_TRAINING109; + + public static readonly int TX_TRAINING110; + + public static readonly int TX_TRAINING111; + + public static readonly int TX_TRAINING112; + + public static readonly int TX_TRAINING113; + + public static readonly int TX_TRAINING114; + + public static readonly int TX_TRAINING115; + + public static readonly int TX_TRAINING116; + + public static readonly int TX_TRAINING117; + + public static readonly int TX_TRAINING118; + + public static readonly int TX_TRAINING119; + + public static readonly int TX_TRAINING120; + + public static readonly int TX_TRAINING121; + + public static readonly int TX_TRAINING122; + + public static readonly int TX_TRAINING123; + + public static readonly int TX_TRAINING201; + + public static readonly int TX_TRAINING202; + + public static readonly int TX_TRAINING203; + + public static readonly int TX_TRAINING204; + + public static readonly int TX_TRAINING205; + + public static readonly int TX_TRAINING206; + + public static readonly int TX_TRAINING207; + + public static readonly int TX_TRAINING208; + + public static readonly int TX_TRAINING209; + + public static readonly int TX_TRAINING210; + + public static readonly int TX_TRAINING301; + + public static readonly int TX_TRAINING302; + + public static readonly int TX_TRAINING303; + + public static readonly int TX_TRAINING304; + + public static readonly int TX_TRAINING305; + + public static readonly int TX_TRAINING306; + + public static readonly int TX_TRAINING307; + + public static readonly int TX_TRAINING308; + + public static readonly int TX_TRAINING309; + + public static readonly int TX_TRAINING310; + + public static readonly int TX_TRAINING311; + + public static readonly int TX_TRAINING401; + + public static readonly int TX_TRAINING402; + + public static readonly int TX_TRAINING403; + + public static readonly int TX_TRAINING404; + + public static readonly int TX_TRAINING405; + + public static readonly int TX_TRAINING406; + + public static readonly int TX_TRAINING407; + + public static readonly int TX_TRAINING408; + + public static readonly int TX_TRAINING409; + + public static readonly int TX_TRAINING410; + + public static readonly int TX_TRAINING101a; + + public static readonly int TX_TRAINING102a; + + public static readonly int TX_TRAINING103a; + + public static readonly int TX_TRAINING104a; + + public static readonly int TX_TRAINING105a; + + public static readonly int TX_TRAINING106a; + + public static readonly int TX_TRAINING107a; + + public static readonly int TX_TRAINING108a; + + public static readonly int TX_TRAINING109a; + + public static readonly int TX_TRAINING110a; + + public static readonly int TX_TRAINING111a; + + public static readonly int TX_TRAINING112a; + + public static readonly int TX_TRAINING113a; + + public static readonly int TX_TRAINING114a; + + public static readonly int TX_TRAINING115a; + + public static readonly int TX_TRAINING116a; + + public static readonly int TX_TRAINING117a; + + public static readonly int TX_TRAINING118a; + + public static readonly int TX_TRAINING119a; + + public static readonly int TX_TRAINING120a; + + public static readonly int TX_TRAINING121a; + + public static readonly int TX_TRAINING122a; + + public static readonly int TX_TRAINING123a; + + public static readonly int TX_TRAINING201a; + + public static readonly int TX_TRAINING202a; + + public static readonly int TX_TRAINING203a; + + public static readonly int TX_TRAINING204a; + + public static readonly int TX_TRAINING205a; + + public static readonly int TX_TRAINING206a; + + public static readonly int TX_TRAINING207a; + + public static readonly int TX_TRAINING208a; + + public static readonly int TX_TRAINING209a; + + public static readonly int TX_TRAINING210a; + + public static readonly int TX_TRAINING301a; + + public static readonly int TX_TRAINING302a; + + public static readonly int TX_TRAINING303a; + + public static readonly int TX_TRAINING304a; + + public static readonly int TX_TRAINING305a; + + public static readonly int TX_TRAINING306a; + + public static readonly int TX_TRAINING307a; + + public static readonly int TX_TRAINING308a; + + public static readonly int TX_TRAINING309a; + + public static readonly int TX_TRAINING310a; + + public static readonly int TX_TRAINING311a; + + public static readonly int TX_TRAINING401a; + + public static readonly int TX_TRAINING402a; + + public static readonly int TX_TRAINING403a; + + public static readonly int TX_TRAINING404a; + + public static readonly int TX_TRAINING405a; + + public static readonly int TX_TRAINING406a; + + public static readonly int TX_TRAINING407a; + + public static readonly int TX_TRAINING408a; + + public static readonly int TX_TRAINING409a; + + public static readonly int TX_TRAINING410a; + + private static Dictionary resources; + + public static string LoadString(int res) + { + string value; + if (resources.TryGetValue(res, out value)) + { + return value; + } + return "???"; + } + + static MyResource() + { + TX_BUTTON_PLAY = 100; + TX_BUTTON_MENU = 101; + TX_BUTTON_BACK = 102; + TX_BUTTON_RESTART = 103; + TX_BUTTON_CONTINUE = 104; + TX_BUTTON_BUY = 105; + TX_BUTTON_SETUP = 107; + TX_BUTTON_SETUP_SOUNDS = 108; + TX_BUTTON_SETUP_JUMP = 109; + TX_BUTTON_SETUP_ZOOM = 110; + TX_BUTTON_SETUP_ACCEL = 111; + TX_BUTTON_SETUP_RESET = 112; + TX_BUTTON_RANKING = 113; + TX_GAMER_TITLE = 200; + TX_GAMER_MDOORS = 201; + TX_GAMER_SDOORS = 202; + TX_GAMER_LIFES = 203; + TX_TRIAL1 = 300; + TX_TRIAL2 = 301; + TX_TRIAL3 = 302; + TX_TRIAL4 = 303; + TX_TRIAL5 = 304; + TX_TRIAL6 = 305; + TX_TRAINING101 = 1000; + TX_TRAINING102 = 1001; + TX_TRAINING103 = 1002; + TX_TRAINING104 = 1003; + TX_TRAINING105 = 1004; + TX_TRAINING106 = 1005; + TX_TRAINING107 = 1006; + TX_TRAINING108 = 1007; + TX_TRAINING109 = 1008; + TX_TRAINING110 = 1009; + TX_TRAINING111 = 1010; + TX_TRAINING112 = 1011; + TX_TRAINING113 = 1012; + TX_TRAINING114 = 1013; + TX_TRAINING115 = 1014; + TX_TRAINING116 = 1015; + TX_TRAINING117 = 1016; + TX_TRAINING118 = 1017; + TX_TRAINING119 = 1018; + TX_TRAINING120 = 1019; + TX_TRAINING121 = 1020; + TX_TRAINING122 = 1021; + TX_TRAINING123 = 1022; + TX_TRAINING201 = 2000; + TX_TRAINING202 = 2001; + TX_TRAINING203 = 2002; + TX_TRAINING204 = 2003; + TX_TRAINING205 = 2004; + TX_TRAINING206 = 2005; + TX_TRAINING207 = 2006; + TX_TRAINING208 = 2007; + TX_TRAINING209 = 2008; + TX_TRAINING210 = 2009; + TX_TRAINING301 = 3000; + TX_TRAINING302 = 3001; + TX_TRAINING303 = 3002; + TX_TRAINING304 = 3003; + TX_TRAINING305 = 3004; + TX_TRAINING306 = 3005; + TX_TRAINING307 = 3006; + TX_TRAINING308 = 3007; + TX_TRAINING309 = 3008; + TX_TRAINING310 = 3009; + TX_TRAINING311 = 3010; + TX_TRAINING401 = 4000; + TX_TRAINING402 = 4001; + TX_TRAINING403 = 4002; + TX_TRAINING404 = 4003; + TX_TRAINING405 = 4004; + TX_TRAINING406 = 4005; + TX_TRAINING407 = 4006; + TX_TRAINING408 = 4007; + TX_TRAINING409 = 4008; + TX_TRAINING410 = 4009; + TX_TRAINING101a = 11000; + TX_TRAINING102a = 11001; + TX_TRAINING103a = 11002; + TX_TRAINING104a = 11003; + TX_TRAINING105a = 11004; + TX_TRAINING106a = 11005; + TX_TRAINING107a = 11006; + TX_TRAINING108a = 11007; + TX_TRAINING109a = 11008; + TX_TRAINING110a = 11009; + TX_TRAINING111a = 11010; + TX_TRAINING112a = 11011; + TX_TRAINING113a = 11012; + TX_TRAINING114a = 11013; + TX_TRAINING115a = 11014; + TX_TRAINING116a = 11015; + TX_TRAINING117a = 11016; + TX_TRAINING118a = 11017; + TX_TRAINING119a = 11018; + TX_TRAINING120a = 11019; + TX_TRAINING121a = 11020; + TX_TRAINING122a = 11021; + TX_TRAINING123a = 11022; + TX_TRAINING201a = 12000; + TX_TRAINING202a = 12001; + TX_TRAINING203a = 12002; + TX_TRAINING204a = 12003; + TX_TRAINING205a = 12004; + TX_TRAINING206a = 12005; + TX_TRAINING207a = 12006; + TX_TRAINING208a = 12007; + TX_TRAINING209a = 12008; + TX_TRAINING210a = 12009; + TX_TRAINING301a = 13000; + TX_TRAINING302a = 13001; + TX_TRAINING303a = 13002; + TX_TRAINING304a = 13003; + TX_TRAINING305a = 13004; + TX_TRAINING306a = 13005; + TX_TRAINING307a = 13006; + TX_TRAINING308a = 13007; + TX_TRAINING309a = 13008; + TX_TRAINING310a = 13009; + TX_TRAINING311a = 13010; + TX_TRAINING401a = 14000; + TX_TRAINING402a = 14001; + TX_TRAINING403a = 14002; + TX_TRAINING404a = 14003; + TX_TRAINING405a = 14004; + TX_TRAINING406a = 14005; + TX_TRAINING407a = 14006; + TX_TRAINING408a = 14007; + TX_TRAINING409a = 14008; + TX_TRAINING410a = 14009; + resources = new Dictionary(); + string text = CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToLower(); + string text2; + if ((text2 = text) != null && text2 == "fr") + { + InitializeFR(); + } + else + { + InitializeEN(); + } + } + + private static void InitializeFR() + { + resources.Add(TX_BUTTON_PLAY, "Jouer"); + resources.Add(TX_BUTTON_MENU, "Menu"); + resources.Add(TX_BUTTON_BACK, "Retour"); + resources.Add(TX_BUTTON_RESTART, "Recommencer"); + resources.Add(TX_BUTTON_CONTINUE, "Continuer"); + resources.Add(TX_BUTTON_BUY, "Acheter"); + resources.Add(TX_BUTTON_RANKING, "Classement"); + resources.Add(TX_BUTTON_SETUP, "Réglages"); + resources.Add(TX_BUTTON_SETUP_SOUNDS, "Bruitages"); + resources.Add(TX_BUTTON_SETUP_JUMP, "Bouton de saut à droite"); + resources.Add(TX_BUTTON_SETUP_ZOOM, "Zoom automatique sur l'action"); + resources.Add(TX_BUTTON_SETUP_ACCEL, "Accéléromètre"); + resources.Add(TX_BUTTON_SETUP_RESET, "Joueur {0} :\nEffacer la progression"); + resources.Add(TX_GAMER_TITLE, "Joueur {0}"); + resources.Add(TX_GAMER_MDOORS, "Portes principales : {0}/12"); + resources.Add(TX_GAMER_SDOORS, "Portes secondaires : {0}/52"); + resources.Add(TX_GAMER_LIFES, "Blupi : {0}"); + resources.Add(TX_TRIAL1, "Achetez la version complète"); + resources.Add(TX_TRIAL2, "\u000e 64 niveaux passionnants"); + resources.Add(TX_TRIAL3, "\u000e Des décors variés"); + resources.Add(TX_TRIAL4, "\u000e Une difficulté progressive"); + resources.Add(TX_TRIAL5, "\u000e De nouveaux pièges"); + resources.Add(TX_TRIAL6, "\u000e Un challenge fun"); + resources.Add(TX_TRAINING101, "Utilise la roue directionnelle \0."); + resources.Add(TX_TRAINING102, "Appuie maintenant sur Saut \b."); + resources.Add(TX_TRAINING103, "Appuie à droite sur la roue directionnelle \0 et sur Saut \b."); + resources.Add(TX_TRAINING104, "Appuie sur Droite \0 et Saut \b."); + resources.Add(TX_TRAINING105, "Essaie de ne pas te mouiller avec \0 \b !"); + resources.Add(TX_TRAINING106, ""); + resources.Add(TX_TRAINING107, "Prend l'ascenseur calmement, sans sauter \0."); + resources.Add(TX_TRAINING108, "Saute sur l'ascenseur."); + resources.Add(TX_TRAINING109, ""); + resources.Add(TX_TRAINING110, "Avance sans sauter et sans t'arrêter \0 !"); + resources.Add(TX_TRAINING111, ""); + resources.Add(TX_TRAINING112, ""); + resources.Add(TX_TRAINING113, "Avance sur la plateforme \0."); + resources.Add(TX_TRAINING114, "Quitte la plateforme \0."); + resources.Add(TX_TRAINING115, "Encore une fois, mais plus vite..."); + resources.Add(TX_TRAINING116, "Avance sur la plateforme \0 puis saute \0 \b."); + resources.Add(TX_TRAINING117, "Saute lorsque tu es sur la plateforme \0 \b."); + resources.Add(TX_TRAINING118, "Passe par en haut \0 \b."); + resources.Add(TX_TRAINING119, "Les oeufs te redonnent des vies."); + resources.Add(TX_TRAINING120, "Arrivé en haut, avance sur l'autre plateforme sans tarder..."); + resources.Add(TX_TRAINING121, "Attrape le deuxième et dernier trésor."); + resources.Add(TX_TRAINING122, "Pour terminer, va sur la flèche rouge."); + resources.Add(TX_TRAINING201, "Pousse la caisse sur le point rouge avec \0."); + resources.Add(TX_TRAINING202, "Pratique, cette caisse, non ?"); + resources.Add(TX_TRAINING203, "Tire la caisse sur le point rouge avec \u0003."); + resources.Add(TX_TRAINING204, "Empile les 2 caisses sur le point rouge pour passer."); + resources.Add(TX_TRAINING205, "Empile 3 caisses sur le point rouge pour passer."); + resources.Add(TX_TRAINING206, ""); + resources.Add(TX_TRAINING207, ""); + resources.Add(TX_TRAINING208, ""); + resources.Add(TX_TRAINING209, ""); + resources.Add(TX_TRAINING210, ""); + resources.Add(TX_TRAINING301, "Prend un hélico avec \t."); + resources.Add(TX_TRAINING302, "Utilise \u0006 ou \b pour décoller. Dirige avec \u0004 et \0."); + resources.Add(TX_TRAINING303, "Quitte l'hélico avec \t, il n'aime pas l'eau !"); + resources.Add(TX_TRAINING304, "Plonge. Utilise \u0004 \0 \u0002 \u0006 pour te diriger."); + resources.Add(TX_TRAINING305, "Prend un hélico \t puis décole avec \u0006 ou \b."); + resources.Add(TX_TRAINING306, "Attrape les 3 trésors puis monte."); + resources.Add(TX_TRAINING307, "Pour passer, va chercher un skate en haut à gauche."); + resources.Add(TX_TRAINING308, "Prend un skate avec \t."); + resources.Add(TX_TRAINING309, "Tu peux passer sans crainte avec ton skate \0."); + resources.Add(TX_TRAINING310, "Ton skate n'aime pas l'eau ! Utilise \0 \b."); + resources.Add(TX_TRAINING311, "Pose ton skate avec \t."); + resources.Add(TX_TRAINING401, "Prend la dynamite avec \t."); + resources.Add(TX_TRAINING402, "Ne pose surtout pas la dynamite ici avec \t !"); + resources.Add(TX_TRAINING403, "Va chercher de la dynamite à gauche."); + resources.Add(TX_TRAINING404, "Pose la dynamite avec \t, puis barre-toi !"); + resources.Add(TX_TRAINING405, "Pose encore de la dynamite pour passer."); + resources.Add(TX_TRAINING406, ""); + resources.Add(TX_TRAINING407, ""); + resources.Add(TX_TRAINING408, ""); + resources.Add(TX_TRAINING409, ""); + resources.Add(TX_TRAINING410, ""); + resources.Add(TX_TRAINING101a, "Incline le téléphone à droite \v."); + resources.Add(TX_TRAINING102a, "Appuie maintenant sur Saut \b."); + resources.Add(TX_TRAINING103a, "\v et appuie sur Saut \b."); + resources.Add(TX_TRAINING104a, "\v et Saut \b."); + resources.Add(TX_TRAINING105a, "Essaie de ne pas te mouiller avec \v \b !"); + resources.Add(TX_TRAINING106a, ""); + resources.Add(TX_TRAINING107a, "Prend l'ascenseur calmement, sans sauter \v."); + resources.Add(TX_TRAINING108a, "Saute sur l'ascenseur."); + resources.Add(TX_TRAINING109a, ""); + resources.Add(TX_TRAINING110a, "Avance sans sauter et sans t'arrêter \v !"); + resources.Add(TX_TRAINING111a, ""); + resources.Add(TX_TRAINING112a, ""); + resources.Add(TX_TRAINING113a, "Avance sur la plateforme \v."); + resources.Add(TX_TRAINING114a, "Quitte la plateforme \v."); + resources.Add(TX_TRAINING115a, "Encore une fois, mais plus vite..."); + resources.Add(TX_TRAINING116a, "Avance sur la plateforme \v puis saute \v \b."); + resources.Add(TX_TRAINING117a, "Saute lorsque tu es sur la plateforme \v \b."); + resources.Add(TX_TRAINING118a, "Passe par en haut \v \b."); + resources.Add(TX_TRAINING119a, "Les oeufs te redonnent des vies."); + resources.Add(TX_TRAINING120a, "Arrivé en haut, avance sur l'autre plateforme sans tarder..."); + resources.Add(TX_TRAINING121a, "Attrape le deuxième et dernier trésor."); + resources.Add(TX_TRAINING122a, "Pour terminer, va sur la flèche rouge."); + resources.Add(TX_TRAINING201a, "Pousse la caisse sur le point rouge avec \v."); + resources.Add(TX_TRAINING202a, "Pratique, cette caisse, non ?"); + resources.Add(TX_TRAINING203a, "Tire la caisse sur le point rouge avec \f et \n."); + resources.Add(TX_TRAINING204a, "Empile les 2 caisses sur le point rouge pour passer."); + resources.Add(TX_TRAINING205a, "Empile 3 caisses sur le point rouge pour passer."); + resources.Add(TX_TRAINING206a, ""); + resources.Add(TX_TRAINING207a, ""); + resources.Add(TX_TRAINING208a, ""); + resources.Add(TX_TRAINING209a, ""); + resources.Add(TX_TRAINING210a, ""); + resources.Add(TX_TRAINING301a, "Prend un hélico avec \t."); + resources.Add(TX_TRAINING302a, "Utilise \b pour décoller. Dirige avec \f et \v."); + resources.Add(TX_TRAINING303a, "Quitte l'hélico avec \t, il n'aime pas l'eau !"); + resources.Add(TX_TRAINING304a, "Plonge. Utilise \f \v \b \n pour te diriger."); + resources.Add(TX_TRAINING305a, "Prend un hélico \t puis décole avec \b."); + resources.Add(TX_TRAINING306a, "Attrape les 3 trésors puis monte."); + resources.Add(TX_TRAINING307a, "Pour passer, va chercher un skate en haut à gauche."); + resources.Add(TX_TRAINING308a, "Prend un skate avec \t."); + resources.Add(TX_TRAINING309a, "Tu peux passer sans crainte avec ton skate \v."); + resources.Add(TX_TRAINING310a, "Ton skate n'aime pas l'eau ! Utilise \v \b."); + resources.Add(TX_TRAINING311a, "Pose ton skate avec \t."); + resources.Add(TX_TRAINING401a, "Prend la dynamite avec \t."); + resources.Add(TX_TRAINING402a, "Ne pose surtout pas la dynamite ici avec \t !"); + resources.Add(TX_TRAINING403a, "Va chercher de la dynamite à gauche."); + resources.Add(TX_TRAINING404a, "Pose la dynamite avec \t, puis barre-toi !"); + resources.Add(TX_TRAINING405a, "Pose encore de la dynamite pour passer."); + resources.Add(TX_TRAINING406a, ""); + resources.Add(TX_TRAINING407a, ""); + resources.Add(TX_TRAINING408a, ""); + resources.Add(TX_TRAINING409a, ""); + resources.Add(TX_TRAINING410a, ""); + } + + private static void InitializeEN() + { + resources.Add(TX_BUTTON_PLAY, "Play"); + resources.Add(TX_BUTTON_MENU, "Home"); + resources.Add(TX_BUTTON_BACK, "Back"); + resources.Add(TX_BUTTON_RESTART, "Restart"); + resources.Add(TX_BUTTON_CONTINUE, "Continue"); + resources.Add(TX_BUTTON_BUY, "Buy"); + resources.Add(TX_BUTTON_RANKING, "Ranking"); + resources.Add(TX_BUTTON_SETUP, "Setup"); + resources.Add(TX_BUTTON_SETUP_SOUNDS, "Sound effects"); + resources.Add(TX_BUTTON_SETUP_JUMP, "Jump button on the right"); + resources.Add(TX_BUTTON_SETUP_ZOOM, "Automatic zoom on action"); + resources.Add(TX_BUTTON_SETUP_ACCEL, "Accelerometer"); + resources.Add(TX_BUTTON_SETUP_RESET, "Player {0} :\nErase progress"); + resources.Add(TX_GAMER_TITLE, "Player {0}"); + resources.Add(TX_GAMER_MDOORS, "Main gates : {0}/12"); + resources.Add(TX_GAMER_SDOORS, "Secondary gates : {0}/52"); + resources.Add(TX_GAMER_LIFES, "Blupi : {0}"); + resources.Add(TX_TRIAL1, "Buy the full version"); + resources.Add(TX_TRIAL2, "\u000e 64 exciting stages"); + resources.Add(TX_TRIAL3, "\u000e Varied backgrounds"); + resources.Add(TX_TRIAL4, "\u000e An increasing difficulty"); + resources.Add(TX_TRIAL5, "\u000e New traps"); + resources.Add(TX_TRIAL6, "\u000e Challenge and fun"); + resources.Add(TX_TRAINING101, "Use the directional wheel \0."); + resources.Add(TX_TRAINING102, "Press Jump \b."); + resources.Add(TX_TRAINING103, "Press Right \0 and Jump \b."); + resources.Add(TX_TRAINING104, "Press Right \0 and Jump \b."); + resources.Add(TX_TRAINING105, "Don't fall into the water \0 \b !"); + resources.Add(TX_TRAINING106, ""); + resources.Add(TX_TRAINING107, "Take the elevator quietly, without jumping \0."); + resources.Add(TX_TRAINING108, "Jump on the elevator."); + resources.Add(TX_TRAINING109, ""); + resources.Add(TX_TRAINING110, "Move forward without jumping nor stopping \0 !"); + resources.Add(TX_TRAINING111, ""); + resources.Add(TX_TRAINING112, ""); + resources.Add(TX_TRAINING113, "Move forward on the platform \0."); + resources.Add(TX_TRAINING114, "Leave the platform \0."); + resources.Add(TX_TRAINING115, "Once again, but faster..."); + resources.Add(TX_TRAINING116, "Move forward on the platform \0, then jump \0 \b."); + resources.Add(TX_TRAINING117, "Jump when you are on the platform \0 \b."); + resources.Add(TX_TRAINING118, "Choose the upper path \0 \b."); + resources.Add(TX_TRAINING119, "Eggs give you extra lives."); + resources.Add(TX_TRAINING120, "Once on the top, move forward on the other platform without delay..."); + resources.Add(TX_TRAINING121, "Catch the second and last treasure."); + resources.Add(TX_TRAINING122, "Join the red arrow."); + resources.Add(TX_TRAINING201, "Push the box forward until the red dot with \0."); + resources.Add(TX_TRAINING202, "Practical, right?"); + resources.Add(TX_TRAINING203, "Pull the box backward until the red dot with \u0003."); + resources.Add(TX_TRAINING204, "Stack both boxes up on the red dot to move on."); + resources.Add(TX_TRAINING205, "Stack the three boxes up on the red dot to move on."); + resources.Add(TX_TRAINING206, ""); + resources.Add(TX_TRAINING207, ""); + resources.Add(TX_TRAINING208, ""); + resources.Add(TX_TRAINING209, ""); + resources.Add(TX_TRAINING210, ""); + resources.Add(TX_TRAINING301, "Take a helicopter with \t."); + resources.Add(TX_TRAINING302, "Use \u0006 or \b to take off. Direct with \u0004 and \0."); + resources.Add(TX_TRAINING303, "Leave the helicopter with \t, it dislikes water!"); + resources.Add(TX_TRAINING304, "Plunge. Use \u0004 \0 \u0002 \u0006 to direct."); + resources.Add(TX_TRAINING305, "Take a helicopter \t then take off with \u0006 or \b."); + resources.Add(TX_TRAINING306, "Grab the three treasures, then go up."); + resources.Add(TX_TRAINING307, "Go and get a skate in the top left corner."); + resources.Add(TX_TRAINING308, "Take a skate with \t."); + resources.Add(TX_TRAINING309, "You can move on with your skate without fear \0."); + resources.Add(TX_TRAINING310, "Your skate dislikes water! Jump!"); + resources.Add(TX_TRAINING311, "Leave your skate with \t."); + resources.Add(TX_TRAINING401, "Take the dynamite sticks with \t."); + resources.Add(TX_TRAINING402, "Do not put down the dynamite here!"); + resources.Add(TX_TRAINING403, "Go and get the dynamite sticks on the left."); + resources.Add(TX_TRAINING404, "Put down the dynamite with \t, then clear off!"); + resources.Add(TX_TRAINING405, "Put down another stick of dynamite here to move on."); + resources.Add(TX_TRAINING406, ""); + resources.Add(TX_TRAINING407, ""); + resources.Add(TX_TRAINING408, ""); + resources.Add(TX_TRAINING409, ""); + resources.Add(TX_TRAINING410, ""); + resources.Add(TX_TRAINING101a, "Tilt the phone \v."); + resources.Add(TX_TRAINING102a, "Press Jump \b."); + resources.Add(TX_TRAINING103a, "\v and Jump \b."); + resources.Add(TX_TRAINING104a, "\v and Jump \b."); + resources.Add(TX_TRAINING105a, "Don't fall into the water \v \b !"); + resources.Add(TX_TRAINING106a, ""); + resources.Add(TX_TRAINING107a, "Take the elevator quietly, without jumping \v."); + resources.Add(TX_TRAINING108a, "Jump on the elevator."); + resources.Add(TX_TRAINING109a, ""); + resources.Add(TX_TRAINING110a, "Move forward without jumping nor stopping \v !"); + resources.Add(TX_TRAINING111a, ""); + resources.Add(TX_TRAINING112a, ""); + resources.Add(TX_TRAINING113a, "Move forward on the platform \v."); + resources.Add(TX_TRAINING114a, "Leave the platform \v."); + resources.Add(TX_TRAINING115a, "Once again, but faster..."); + resources.Add(TX_TRAINING116a, "Move forward on the platform \v, then jump \v \b."); + resources.Add(TX_TRAINING117a, "Jump when you are on the platform \v \b."); + resources.Add(TX_TRAINING118a, "Choose the upper path \v \b."); + resources.Add(TX_TRAINING119a, "Eggs give you extra lives."); + resources.Add(TX_TRAINING120a, "Once on the top, move forward on the other platform without delay..."); + resources.Add(TX_TRAINING121a, "Catch the second and last treasure."); + resources.Add(TX_TRAINING122a, "Join the red arrow."); + resources.Add(TX_TRAINING201a, "Push the box forward until the red dot with \v."); + resources.Add(TX_TRAINING202a, "Practical, right?"); + resources.Add(TX_TRAINING203a, "Pull the box backward until the red dot with \f and \n."); + resources.Add(TX_TRAINING204a, "Stack both boxes up on the red dot to move on."); + resources.Add(TX_TRAINING205a, "Stack the three boxes up on the red dot to move on."); + resources.Add(TX_TRAINING206a, ""); + resources.Add(TX_TRAINING207a, ""); + resources.Add(TX_TRAINING208a, ""); + resources.Add(TX_TRAINING209a, ""); + resources.Add(TX_TRAINING210a, ""); + resources.Add(TX_TRAINING301a, "Take a helicopter with \t."); + resources.Add(TX_TRAINING302a, "Use \b to take off. Direct with \f and \v."); + resources.Add(TX_TRAINING303a, "Leave the helicopter with \t, it dislikes water!"); + resources.Add(TX_TRAINING304a, "Plunge. Use \f \v \b \n to direct."); + resources.Add(TX_TRAINING305a, "Take a helicopter \t then take off with \b."); + resources.Add(TX_TRAINING306a, "Grab the three treasures, then go up."); + resources.Add(TX_TRAINING307a, "Go and get a skate in the top left corner."); + resources.Add(TX_TRAINING308a, "Take a skate with \t."); + resources.Add(TX_TRAINING309a, "You can move on with your skate without fear \v."); + resources.Add(TX_TRAINING310a, "Your skate dislikes water! Jump!"); + resources.Add(TX_TRAINING311a, "Leave your skate with \t."); + resources.Add(TX_TRAINING401a, "Take the dynamite sticks with \t."); + resources.Add(TX_TRAINING402a, "Do not put down the dynamite here!"); + resources.Add(TX_TRAINING403a, "Go and get the dynamite sticks on the left."); + resources.Add(TX_TRAINING404a, "Put down the dynamite with \t, then clear off!"); + resources.Add(TX_TRAINING405a, "Put down another stick of dynamite here to move on."); + resources.Add(TX_TRAINING406a, ""); + resources.Add(TX_TRAINING407a, ""); + resources.Add(TX_TRAINING408a, ""); + resources.Add(TX_TRAINING409a, ""); + resources.Add(TX_TRAINING410a, ""); + } + + private static void InitializeDE() + { + resources.Add(TX_BUTTON_PLAY, "Play"); + resources.Add(TX_BUTTON_MENU, "Home"); + resources.Add(TX_BUTTON_BACK, "Back"); + resources.Add(TX_BUTTON_RESTART, "Restart"); + resources.Add(TX_BUTTON_CONTINUE, "Continue"); + resources.Add(TX_BUTTON_BUY, "Buy"); + resources.Add(TX_BUTTON_RANKING, "Ranking"); + resources.Add(TX_BUTTON_SETUP, "Setup"); + resources.Add(TX_BUTTON_SETUP_SOUNDS, "Sounds"); + resources.Add(TX_BUTTON_SETUP_JUMP, "Jump button to the right"); + resources.Add(TX_BUTTON_SETUP_ZOOM, "Automatically zoom action"); + resources.Add(TX_BUTTON_SETUP_ACCEL, "Accelerometer"); + resources.Add(TX_BUTTON_SETUP_RESET, "Gamer {0} :\nReset progression"); + resources.Add(TX_GAMER_TITLE, "Gamer {0}"); + resources.Add(TX_GAMER_MDOORS, "Main doors : {0}/12"); + resources.Add(TX_GAMER_SDOORS, "Secondary doors : {0}/52"); + resources.Add(TX_GAMER_LIFES, "Blupi : {0}"); + resources.Add(TX_TRIAL1, "Buy the full version"); + resources.Add(TX_TRIAL2, "\u000e 64 niveaux passionnants"); + resources.Add(TX_TRIAL3, "\u000e Des décors variés"); + resources.Add(TX_TRIAL4, "\u000e Une difficulté progressive"); + resources.Add(TX_TRIAL5, "\u000e De nouveaux pièges"); + resources.Add(TX_TRIAL6, "\u000e Un challenge fun"); + resources.Add(TX_TRAINING101, "Utilise la roue directionnelle \0 pour faire avancer Blupi."); + resources.Add(TX_TRAINING102, "Appuie maintenant sur le bouton de saut \b."); + resources.Add(TX_TRAINING103, "Appuie à droite sur la roue directionnelle \0 et sur Saut \b."); + resources.Add(TX_TRAINING104, "Appuie sur Droite \0 et Saut \b."); + resources.Add(TX_TRAINING105, "Essaie de ne pas te mouiller avec \0 \b !"); + resources.Add(TX_TRAINING106, ""); + resources.Add(TX_TRAINING107, "Prend l'ascenseur calmement, sans sauter \0."); + resources.Add(TX_TRAINING108, "Saute sur l'ascenseur."); + resources.Add(TX_TRAINING109, ""); + resources.Add(TX_TRAINING110, "Avance sans sauter et sans t'arrêter \0 !"); + resources.Add(TX_TRAINING111, ""); + resources.Add(TX_TRAINING112, ""); + resources.Add(TX_TRAINING113, "Avance sur la plateforme \0."); + resources.Add(TX_TRAINING114, "Quitte la plateforme \0."); + resources.Add(TX_TRAINING115, "Encore une fois, mais plus vite..."); + resources.Add(TX_TRAINING116, "Avance sur la plateforme \0 puis saute \0 \b."); + resources.Add(TX_TRAINING117, "Saute lorsque tu es sur la plateforme \0 \b."); + resources.Add(TX_TRAINING118, "Passe par en haut \0 \b."); + resources.Add(TX_TRAINING119, "Les oeufs te redonnent des vies."); + resources.Add(TX_TRAINING120, "Arrivé en haut, avance sur l'autre plateforme sans tarder..."); + resources.Add(TX_TRAINING121, "Attrape le deuxième et dernier trésor."); + resources.Add(TX_TRAINING122, "Pour terminer, va sur la flèche rouge."); + resources.Add(TX_TRAINING201, "Pousse la caisse sur le point rouge avec \0."); + resources.Add(TX_TRAINING202, "Utilise la caisse pour passer l'obstacle avec \0 \b."); + resources.Add(TX_TRAINING203, "Tire la caisse sur le point rouge avec \u0003."); + resources.Add(TX_TRAINING204, "Empile les 2 caisses sur le point rouge pour passer."); + resources.Add(TX_TRAINING205, "Empile 3 caisses sur le point rouge pour passer."); + resources.Add(TX_TRAINING206, ""); + resources.Add(TX_TRAINING207, ""); + resources.Add(TX_TRAINING208, ""); + resources.Add(TX_TRAINING209, ""); + resources.Add(TX_TRAINING210, ""); + resources.Add(TX_TRAINING301, "Prend un hélico avec \t."); + resources.Add(TX_TRAINING302, "Utilise \u0006 ou \b pour décoler. Dirige avec \u0004 et \0."); + resources.Add(TX_TRAINING303, "Quitte l'hélico avec \t, il n'aime pas l'eau !"); + resources.Add(TX_TRAINING304, "Plonge. Utilise \u0004 \0 \u0002 \u0006 pour te diriger."); + resources.Add(TX_TRAINING305, "Prend un hélico \t puis décole avec \u0006 ou \b."); + resources.Add(TX_TRAINING306, "Attrape les 3 trésors puis monte."); + resources.Add(TX_TRAINING307, "Pour passer, va chercher un skate en haut à gauche."); + resources.Add(TX_TRAINING308, "Prend un skate avec \t."); + resources.Add(TX_TRAINING309, "Tu peux passer sans crainte avec ton skate \0."); + resources.Add(TX_TRAINING310, "Ton skate n'aime pas l'eau ! Utilise \0 \b."); + resources.Add(TX_TRAINING311, "Pose ton skate avec \t."); + resources.Add(TX_TRAINING401, "Prend la dynamite avec \t."); + resources.Add(TX_TRAINING402, "Ne pose surtout pas la dynamite ici avec \t !"); + resources.Add(TX_TRAINING403, "Va chercher de la dynamite à gauche."); + resources.Add(TX_TRAINING404, "Pose la dynamite avec \t, puis barre-toi !"); + resources.Add(TX_TRAINING405, "Pose encore de la dynamite pour passer."); + resources.Add(TX_TRAINING406, ""); + resources.Add(TX_TRAINING407, ""); + resources.Add(TX_TRAINING408, ""); + resources.Add(TX_TRAINING409, ""); + resources.Add(TX_TRAINING410, ""); + } + } +} \ No newline at end of file diff --git a/Pixmap.cs b/Pixmap.cs new file mode 100644 index 0000000..545c35b --- /dev/null +++ b/Pixmap.cs @@ -0,0 +1,561 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Pixmap +using System; +using Microsoft.Xna.Framework; +using Microsoft.Xna.Framework.Graphics; +using WindowsPhoneSpeedyBlupi; +using static System.Net.Mime.MediaTypeNames; + +namespace WindowsPhoneSpeedyBlupi +{ + public class Pixmap + { + private readonly Game1 game1; + + private readonly GraphicsDeviceManager graphics; + + private double zoom; + + private double originX; + + private double originY; + + private double hotSpotZoom; + + private double hotSpotX; + + private double hotSpotY; + + private SpriteBatch spriteBatch; + + private Texture2D bitmapText; + + private Texture2D bitmapButton; + + private Texture2D bitmapJauge; + + private Texture2D bitmapBlupi; + + private Texture2D bitmapBlupi1; + + private Texture2D bitmapObject; + + private Texture2D bitmapElement; + + private Texture2D bitmapExplo; + + private Texture2D bitmapPad; + + private Texture2D bitmapSpeedyBlupi; + + private Texture2D bitmapBlupiYoupie; + + private Texture2D bitmapGear; + + private Texture2D bitmapBackground; + + private Vector2 origin; + + private SpriteEffects effect; + + public TinyRect DrawBounds + { + get + { + TinyRect result = default(TinyRect); + double num = graphics.GraphicsDevice.Viewport.Width; + double num2 = graphics.GraphicsDevice.Viewport.Height; + if (num != 0.0 && num2 != 0.0) + { + double num3; + double num4; + if (num / num2 < 1.3333333333333333) + { + num3 = 640.0; + num4 = 640.0 * (num2 / num); + } + else + { + num3 = 480.0 * (num / num2); + num4 = 480.0; + } + result.Left = 0; + result.Right = (int)num3; + result.Top = 0; + result.Bottom = (int)num4; + } + return result; + } + } + + public TinyPoint Origin + { + get + { + TinyPoint result = default(TinyPoint); + result.X = (int)originX; + result.Y = (int)originY; + return result; + } + } + + public Pixmap(Game1 game1, GraphicsDeviceManager graphics) + { + this.game1 = game1; + this.graphics = graphics; + origin = new Vector2(0f, 0f); + effect = SpriteEffects.None; + } + + public TinyPoint HotSpotToHud(TinyPoint pos) + { + TinyPoint result = default(TinyPoint); + result.X = (int)((double)(pos.X - (int)hotSpotX) / hotSpotZoom) + (int)hotSpotX - (int)originX; + result.Y = (int)((double)(pos.Y - (int)hotSpotY) / hotSpotZoom) + (int)hotSpotY - (int)originY; + return result; + } + + public void SetHotSpot(double zoom, double x, double y) + { + hotSpotZoom = zoom; + hotSpotX = x; + hotSpotY = y; + } + + public void DrawInputButton(TinyRect rect, Def.ButtonGlygh glyph, bool pressed, bool selected) + { + switch (glyph) + { + case Def.ButtonGlygh.InitGamerA: + DrawIcon(14, selected ? 16 : 4, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.InitGamerB: + DrawIcon(14, selected ? 17 : 5, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.InitGamerC: + DrawIcon(14, selected ? 18 : 6, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.InitSetup: + case Def.ButtonGlygh.PauseSetup: + DrawIcon(14, 19, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.InitPlay: + DrawIcon(14, 7, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.PauseMenu: + case Def.ButtonGlygh.ResumeMenu: + DrawIcon(14, 11, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.PauseBack: + DrawIcon(14, 8, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.PauseRestart: + DrawIcon(14, 9, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.PauseContinue: + case Def.ButtonGlygh.ResumeContinue: + DrawIcon(14, 10, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.WinLostReturn: + DrawIcon(14, 3, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.InitBuy: + case Def.ButtonGlygh.TrialBuy: + DrawIcon(14, 22, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.InitRanking: + DrawIcon(14, 12, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.TrialCancel: + case Def.ButtonGlygh.RankingContinue: + DrawIcon(14, 8, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.SetupSounds: + case Def.ButtonGlygh.SetupJump: + case Def.ButtonGlygh.SetupZoom: + case Def.ButtonGlygh.SetupAccel: + DrawIcon(14, selected ? 13 : 21, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.SetupReset: + DrawIcon(14, 20, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.SetupReturn: + DrawIcon(14, 8, rect, pressed ? 0.8 : 1.0, false); + break; + case Def.ButtonGlygh.PlayJump: + DrawIcon(14, 2, rect, pressed ? 0.6 : 1.0, false); + break; + case Def.ButtonGlygh.PlayAction: + DrawIcon(14, 12, rect, pressed ? 0.6 : 1.0, false); + break; + case Def.ButtonGlygh.PlayDown: + DrawIcon(14, 23, rect, pressed ? 0.6 : 1.0, false); + break; + case Def.ButtonGlygh.PlayPause: + DrawIcon(14, 3, rect, pressed ? 0.6 : 1.0, false); + break; + case Def.ButtonGlygh.Cheat1: + case Def.ButtonGlygh.Cheat2: + case Def.ButtonGlygh.Cheat3: + case Def.ButtonGlygh.Cheat4: + case Def.ButtonGlygh.Cheat5: + case Def.ButtonGlygh.Cheat6: + case Def.ButtonGlygh.Cheat7: + case Def.ButtonGlygh.Cheat8: + case Def.ButtonGlygh.Cheat9: + { + DrawIcon(14, 0, rect, pressed ? 0.6 : 1.0, false); + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = rect.Left + rect.Width / 2 - (int)originX; + tinyPoint.Y = rect.Top + 28; + TinyPoint pos = tinyPoint; + Text.DrawTextCenter(this, pos, Decor.GetCheatTinyText(glyph), 1.0); + break; + } + case Def.ButtonGlygh.Cheat11: + case Def.ButtonGlygh.Cheat12: + case Def.ButtonGlygh.Cheat21: + case Def.ButtonGlygh.Cheat22: + case Def.ButtonGlygh.Cheat31: + case Def.ButtonGlygh.Cheat32: + break; + } + } + + public void LoadContent() + { + spriteBatch = new SpriteBatch(game1.GraphicsDevice); + bitmapText = game1.Content.Load("icons/text"); + bitmapButton = game1.Content.Load("icons/button"); + bitmapJauge = game1.Content.Load("icons/jauge"); + bitmapBlupi = game1.Content.Load("icons/blupi"); + bitmapBlupi1 = game1.Content.Load("icons/blupi1"); + bitmapObject = game1.Content.Load("icons/object-m"); + bitmapElement = game1.Content.Load("icons/element"); + bitmapExplo = game1.Content.Load("icons/explo"); + bitmapPad = game1.Content.Load("icons/pad"); + bitmapSpeedyBlupi = game1.Content.Load("backgrounds/speedyblupi"); + bitmapBlupiYoupie = game1.Content.Load("backgrounds/blupiyoupie"); + bitmapGear = game1.Content.Load("backgrounds/gear"); + UpdateGeometry(); + } + + private void UpdateGeometry() + { + double num = graphics.GraphicsDevice.Viewport.Width; + double num2 = graphics.GraphicsDevice.Viewport.Height; + double val = num / 640.0; + double val2 = num2 / 480.0; + zoom = Math.Min(val, val2); + originX = (num - 640.0 * zoom) / 2.0; + originY = (num2 - 480.0 * zoom) / 2.0; + } + + public void BackgroundCache(string name) + { + bitmapBackground = game1.Content.Load("backgrounds/" + name); + } + + public bool Start() + { + graphics.GraphicsDevice.Clear(Color.CornflowerBlue); + return true; + } + + public bool Finish() + { + return true; + } + + public void DrawBackground() + { + double num = graphics.GraphicsDevice.Viewport.Width; + double num2 = graphics.GraphicsDevice.Viewport.Height; + Texture2D bitmap = GetBitmap(3); + Rectangle srcRectangle = GetSrcRectangle(bitmap, 10, 10, 10, 10, 0, 0); + Rectangle destinationRectangle = new Rectangle(0, 0, (int)num, (int)num2); + spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend); + spriteBatch.Draw(bitmap, destinationRectangle, srcRectangle, Color.White); + spriteBatch.End(); + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = (int)originX; + tinyPoint.Y = (int)originY; + TinyPoint dest = tinyPoint; + TinyRect tinyRect = default(TinyRect); + tinyRect.Left = 0; + tinyRect.Top = 0; + tinyRect.Right = 640; + tinyRect.Bottom = 480; + TinyRect rect = tinyRect; + DrawPart(3, dest, rect); + } + + public void DrawChar(int rank, TinyPoint pos, double size) + { + pos.X = (int)((double)pos.X + originX); + pos.Y = (int)((double)pos.Y + originY); + TinyRect tinyRect = default(TinyRect); + tinyRect.Left = pos.X; + tinyRect.Top = pos.Y; + tinyRect.Right = pos.X + (int)(32.0 * size); + tinyRect.Bottom = pos.Y + (int)(32.0 * size); + TinyRect rect = tinyRect; + DrawIcon(6, rank, rect, 1.0, false); + } + + public void HudIcon(int channel, int rank, TinyPoint pos) + { + pos.X = (int)((double)pos.X + originX); + pos.Y = (int)((double)pos.Y + originY); + TinyRect tinyRect = default(TinyRect); + tinyRect.Left = pos.X; + tinyRect.Top = pos.Y; + tinyRect.Right = pos.X; + tinyRect.Bottom = pos.Y; + TinyRect rect = tinyRect; + DrawIcon(channel, rank, rect, 1.0, false); + } + + public void QuickIcon(int channel, int rank, TinyPoint pos) + { + TinyRect tinyRect = default(TinyRect); + tinyRect.Left = pos.X; + tinyRect.Top = pos.Y; + tinyRect.Right = pos.X; + tinyRect.Bottom = pos.Y; + TinyRect rect = tinyRect; + DrawIcon(channel, rank, rect, 1.0, true); + } + + public void QuickIcon(int channel, int rank, TinyPoint pos, double opacity, double rotation) + { + TinyRect tinyRect = default(TinyRect); + tinyRect.Left = pos.X; + tinyRect.Top = pos.Y; + tinyRect.Right = pos.X; + tinyRect.Bottom = pos.Y; + TinyRect rect = tinyRect; + DrawIcon(channel, rank, rect, opacity, rotation, true); + } + + public bool DrawPart(int channel, TinyPoint dest, TinyRect rect) + { + return DrawPart(channel, dest, rect, 1.0); + } + + public bool DrawPart(int channel, TinyPoint dest, TinyRect rect, double zoom) + { + Texture2D bitmap = GetBitmap(channel); + if (bitmap == null) + { + return false; + } + if (channel == 5) + { + dest.X = (int)((double)dest.X + originX); + dest.Y = (int)((double)dest.Y + originY); + } + Rectangle value = new Rectangle(rect.Left, rect.Top, rect.Width, rect.Height); + Rectangle destinationRectangle = new Rectangle(dest.X, dest.Y, (int)((double)rect.Width * zoom), (int)((double)rect.Height * zoom)); + spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend); + spriteBatch.Draw(bitmap, destinationRectangle, value, Color.White); + spriteBatch.End(); + return true; + } + + public void DrawIcon(int channel, int icon, TinyRect rect, double opacity, bool useHotSpot) + { + DrawIcon(channel, icon, rect, opacity, 0.0, useHotSpot); + } + + public void DrawIcon(int channel, int icon, TinyRect rect, double opacity, double rotation, bool useHotSpot) + { + if (icon == -1) + { + return; + } + Texture2D bitmap = GetBitmap(channel); + if (bitmap == null) + { + return; + } + int num; + int bitmapGridY; + int iconWidth; + int num2; + int gap; + switch (channel) + { + case 2: + case 11: + case 12: + case 13: + num = 60; + bitmapGridY = 60; + iconWidth = 60; + num2 = 60; + gap = 0; + break; + case 1: + num = 64; + bitmapGridY = 64; + iconWidth = 64; + num2 = 64; + gap = 1; + break; + case 10: + num = 60; + bitmapGridY = 60; + iconWidth = 60; + num2 = 60; + gap = 0; + break; + case 9: + num = 144; + bitmapGridY = 144; + num2 = Tables.table_explo_size[icon]; + iconWidth = Math.Max(num2, 128); + gap = 0; + break; + case 6: + num = 32; + bitmapGridY = 32; + iconWidth = 32; + num2 = 32; + gap = 0; + break; + case 4: + num = 40; + bitmapGridY = 40; + iconWidth = 40; + num2 = 40; + gap = 0; + break; + case 14: + num = 140; + bitmapGridY = 140; + iconWidth = 140; + num2 = 140; + gap = 0; + break; + case 15: + num = 640; + bitmapGridY = 160; + iconWidth = 640; + num2 = 160; + gap = 0; + break; + case 16: + num = 410; + bitmapGridY = 380; + iconWidth = 410; + num2 = 380; + gap = 0; + break; + case 17: + num = 226; + bitmapGridY = 226; + iconWidth = 226; + num2 = 226; + gap = 0; + break; + default: + num = 0; + bitmapGridY = 0; + iconWidth = 0; + num2 = 0; + gap = 0; + break; + } + if (num != 0) + { + Rectangle srcRectangle = GetSrcRectangle(bitmap, num, bitmapGridY, iconWidth, num2, gap, icon); + Rectangle rectangle = GetDstRectangle(rect, iconWidth, num2, useHotSpot); + float num3 = 0f; + if (rotation != 0.0) + { + num3 = (float)Misc.DegToRad(rotation); + rectangle = Misc.RotateAdjust(rectangle, num3); + } + spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend); + spriteBatch.Draw(bitmap, rectangle, srcRectangle, Color.FromNonPremultiplied(255, 255, 255, (int)(255.0 * opacity)), num3, origin, effect, 0f); + spriteBatch.End(); + } + } + + private Rectangle GetSrcRectangle(Texture2D bitmap, int bitmapGridX, int bitmapGridY, int iconWidth, int iconHeight, int gap, int icon) + { + int width = bitmap.Bounds.Width; + int height = bitmap.Bounds.Height; + int num = icon % (width / bitmapGridX); + int num2 = icon / (width / bitmapGridX); + bitmapGridX += gap; + bitmapGridY += gap; + return new Rectangle(gap + num * bitmapGridX, gap + num2 * bitmapGridY, iconWidth, iconHeight); + } + + private Rectangle GetDstRectangle(TinyRect rect, int iconWidth, int iconHeight, bool useHotSpot) + { + int num = ((rect.Width == 0) ? iconWidth : rect.Width); + int num2 = ((rect.Height == 0) ? iconHeight : rect.Height); + int num3 = (int)((double)rect.Left * zoom); + int num4 = (int)((double)rect.Top * zoom); + int num5 = (int)((double)num3 + (double)num * zoom); + int num6 = (int)((double)num4 + (double)num2 * zoom); + if (useHotSpot && hotSpotZoom > 1.0) + { + num3 -= (int)hotSpotX; + num4 -= (int)hotSpotY; + num5 -= (int)hotSpotX; + num6 -= (int)hotSpotY; + num3 = (int)((double)num3 * hotSpotZoom); + num4 = (int)((double)num4 * hotSpotZoom); + num5 = (int)((double)num5 * hotSpotZoom); + num6 = (int)((double)num6 * hotSpotZoom); + num3 += (int)hotSpotX; + num4 += (int)hotSpotY; + num5 += (int)hotSpotX; + num6 += (int)hotSpotY; + } + return new Rectangle(num3, num4, num5 - num3, num6 - num4); + } + + private Texture2D GetBitmap(int channel) + { + switch (channel) + { + case 2: + return bitmapBlupi; + case 11: + case 12: + case 13: + return bitmapBlupi1; + case 1: + return bitmapObject; + case 10: + return bitmapElement; + case 9: + return bitmapExplo; + case 6: + return bitmapText; + case 4: + return bitmapButton; + case 5: + return bitmapJauge; + case 14: + return bitmapPad; + case 15: + return bitmapSpeedyBlupi; + case 16: + return bitmapBlupiYoupie; + case 17: + return bitmapGear; + case 3: + return bitmapBackground; + default: + return null; + } + } + } + +} \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..58f9f65 --- /dev/null +++ b/Program.cs @@ -0,0 +1,2 @@ +using var game = new Speedy_Blupi.Game1(); +game.Run(); diff --git a/Resource.cs b/Resource.cs new file mode 100644 index 0000000..f04bcee --- /dev/null +++ b/Resource.cs @@ -0,0 +1,63 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Resource +using System.CodeDom.Compiler; +using System.ComponentModel; +using System.Diagnostics; +using System.Globalization; +using System.Resources; +using System.Runtime.CompilerServices; +using WindowsPhoneSpeedyBlupi; + +[DebuggerNonUserCode] +[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] +[CompilerGenerated] + +namespace WindowsPhoneSpeedyBlupi +{ + internal class Resource + { + private static ResourceManager resourceMan; + + private static CultureInfo resourceCulture; + + [EditorBrowsable(EditorBrowsableState.Advanced)] + internal static ResourceManager ResourceManager + { + get + { + if (object.ReferenceEquals(resourceMan, null)) + { + ResourceManager resourceManager = new ResourceManager("WindowsPhoneSpeedyBlupi.Resource", typeof(Resource).Assembly); + resourceMan = resourceManager; + } + return resourceMan; + } + } + + [EditorBrowsable(EditorBrowsableState.Advanced)] + internal static CultureInfo Culture + { + get + { + return resourceCulture; + } + set + { + resourceCulture = value; + } + } + + internal static string Title + { + get + { + return ResourceManager.GetString("Title", resourceCulture); + } + } + + internal Resource() + { + } + } + +} \ No newline at end of file diff --git a/Slider.cs b/Slider.cs new file mode 100644 index 0000000..a1838f7 --- /dev/null +++ b/Slider.cs @@ -0,0 +1,92 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Slider +using System; +using WindowsPhoneSpeedyBlupi; + +namespace WindowsPhoneSpeedyBlupi +{ + public class Slider + { + public TinyPoint TopLeftCorner { get; set; } + + public double Value { get; set; } + + private int PosLeft + { + get + { + return TopLeftCorner.X + 22; + } + } + + private int PosRight + { + get + { + return TopLeftCorner.X + 248 - 22; + } + } + + public void Draw(Pixmap pixmap) + { + TinyPoint tinyPoint = default(TinyPoint); + tinyPoint.X = TopLeftCorner.X - pixmap.Origin.X; + tinyPoint.Y = TopLeftCorner.Y - pixmap.Origin.Y; + TinyPoint dest = tinyPoint; + TinyRect tinyRect = default(TinyRect); + tinyRect.Left = 0; + tinyRect.Right = 124; + tinyRect.Top = 0; + tinyRect.Bottom = 22; + TinyRect rect = tinyRect; + pixmap.DrawPart(5, dest, rect, 2.0); + int num = (int)((double)(PosRight - PosLeft) * Value); + int num2 = TopLeftCorner.Y + 22; + int num3 = 94; + TinyRect tinyRect2 = default(TinyRect); + tinyRect2.Left = PosLeft + num - num3 / 2; + tinyRect2.Right = PosLeft + num + num3 / 2; + tinyRect2.Top = num2 - num3 / 2; + tinyRect2.Bottom = num2 + num3 / 2; + rect = tinyRect2; + pixmap.DrawIcon(14, 1, rect, 1.0, false); + TinyRect tinyRect3 = default(TinyRect); + tinyRect3.Left = TopLeftCorner.X - 65; + tinyRect3.Right = TopLeftCorner.X - 65 + 60; + tinyRect3.Top = TopLeftCorner.Y - 10; + tinyRect3.Bottom = TopLeftCorner.Y - 10 + 60; + rect = tinyRect3; + pixmap.DrawIcon(10, 37, rect, 1.0, false); + TinyRect tinyRect4 = default(TinyRect); + tinyRect4.Left = TopLeftCorner.X + 248 + 5; + tinyRect4.Right = TopLeftCorner.X + 248 + 5 + 60; + tinyRect4.Top = TopLeftCorner.Y - 10; + tinyRect4.Bottom = TopLeftCorner.Y - 10 + 60; + rect = tinyRect4; + pixmap.DrawIcon(10, 38, rect, 1.0, false); + } + + public bool Move(TinyPoint pos) + { + TinyRect tinyRect = default(TinyRect); + tinyRect.Left = TopLeftCorner.X - 50; + tinyRect.Right = TopLeftCorner.X + 248 + 50; + tinyRect.Top = TopLeftCorner.Y - 50; + tinyRect.Bottom = TopLeftCorner.Y + 44 + 50; + TinyRect rect = tinyRect; + if (Misc.IsInside(rect, pos)) + { + double val = ((double)pos.X - (double)PosLeft) / (double)(PosRight - PosLeft); + val = Math.Max(val, 0.0); + val = Math.Min(val, 1.0); + if (Value != val) + { + Value = val; + return true; + } + } + return false; + } + } + +} \ No newline at end of file diff --git a/Sound.cs b/Sound.cs new file mode 100644 index 0000000..c583395 --- /dev/null +++ b/Sound.cs @@ -0,0 +1,260 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Sound +using System; +using System.Collections.Generic; +using System.Linq; +using Microsoft.Xna.Framework.Audio; +using WindowsPhoneSpeedyBlupi; + +namespace WindowsPhoneSpeedyBlupi +{ + public class Sound + { + private class Play + { + private readonly SoundEffectInstance sei; + + private readonly int channel; + + public int Channel + { + get + { + return channel; + } + } + + public bool IsFree + { + get + { + return sei.State == SoundState.Stopped; + } + } + + public Play(SoundEffect se, int channel, double volume, double balance, double? pitch, bool isLooped) + { + this.channel = channel; + int num = channel * 2; + if (num >= 0 && num < tableVolumePitch.Length) + { + volume *= tableVolumePitch[num]; + pitch = tableVolumePitch[num + 1]; + } + sei = se.CreateInstance(); + sei.Volume = (float)volume; + sei.Pan = (float)balance; + sei.Pitch = (float)(pitch ?? 0.0); + sei.IsLooped = isLooped; + sei.Play(); + } + + public void Stop() + { + sei.Stop(); + } + } + + private static double[] tableVolumePitch = new double[200] + { + 1.0, 0.0, 0.5, 1.0, 0.5, 1.0, 1.0, 0.2, 1.0, 0.2, + 1.0, 0.1, 1.0, 0.3, 1.0, 0.2, 1.0, 0.3, 1.0, 0.5, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.1, 1.0, 0.2, 1.0, 0.2, + 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.2, + 1.0, 0.2, 1.0, 0.2, 0.7, 0.2, 1.0, 0.1, 1.0, 0.1, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.4, 1.0, 0.0, 1.0, 0.0, + 1.0, 0.0, 1.0, 0.0, 1.0, 0.2, 1.0, 0.2, 0.7, 0.4, + 1.0, 0.2, 1.0, 0.4, 1.0, 0.2, 0.5, 1.0, 0.5, 1.0, + 1.0, 0.4, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 0.6, 0.4, 0.8, 0.1, + 0.6, 0.5, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.0, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.0, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.0, 1.0, 0.0, 1.0, 0.2, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 0.6, 0.4, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, + 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2, 1.0, 0.2 + }; + + public static readonly int MAXVOLUME = 20; + + private readonly Game1 game1; + + private readonly GameData gameData; + + private readonly List soundEffects; + + private readonly List plays; + + private double volume; + + public Sound(Game1 game1, GameData gameData) + { + this.game1 = game1; + this.gameData = gameData; + soundEffects = new List(); + plays = new List(); + volume = 1.0; + SoundEffect.MasterVolume = 1f; + } + + public void LoadContent() + { + if (Def.HasSound) + { + for (int i = 0; i <= 92; i++) + { + string assetName = string.Format("sounds/sound{0}", i.ToString("d3")); + SoundEffect item = game1.Content.Load(assetName); + soundEffects.Add(item); + } + } + } + + public bool Create() + { + return true; + } + + public void SetState(bool bState) + { + } + + public void SetCDAudio(bool bAudio) + { + } + + public bool GetEnable() + { + return true; + } + + public void SetAudioVolume(int volume) + { + this.volume = (double)volume / (double)MAXVOLUME; + } + + public int GetAudioVolume() + { + return (int)(volume * (double)MAXVOLUME); + } + + public void SetMidiVolume(int volume) + { + } + + public int GetMidiVolume() + { + return 0; + } + + public void StopAll() + { + while (plays.Any()) + { + plays[0].Stop(); + plays.RemoveAt(0); + } + } + + public bool PlayImage(int channel, TinyPoint pos) + { + return PlayImage(channel, pos, -1, false); + } + + public bool PlayImage(int channel, TinyPoint pos, int rank, bool bLoop) + { + if (!gameData.Sounds) + { + return true; + } + if (channel >= 0 && channel < soundEffects.Count) + { + if (channel != 10 && plays.Where((Play x) => x.Channel == channel && !x.IsFree).Any()) + { + return true; + } + if (plays.Count >= 10) + { + int num = 0; + while (num < plays.Count) + { + if (plays[num].IsFree) + { + plays.RemoveAt(num); + } + else + { + num++; + } + } + } + Play item = new Play(soundEffects[channel], channel, (float)GetVolume(pos), (float)GetBalance(pos), null, bLoop); + plays.Add(item); + } + return true; + } + + public bool PosImage(int channel, TinyPoint pos) + { + return true; + } + + public bool Stop(int channel) + { + int num = 0; + while (num < plays.Count) + { + if (plays[num].Channel == channel) + { + plays[num].Stop(); + plays.RemoveAt(num); + } + else + { + num++; + } + } + return true; + } + + private double GetVolume(TinyPoint pos) + { + double val = 1.0; + if (pos.X < 0) + { + val = 1.0 + (double)(pos.X / 640) * 2.0; + } + if (pos.X > 640) + { + pos.X -= 640; + val = 1.0 - (double)(pos.X / 640) * 2.0; + } + val = Math.Max(val, 0.0); + val = Math.Min(val, 1.0); + double val2 = 1.0; + if (pos.Y < 0) + { + val2 = 1.0 + (double)(pos.Y / 480) * 3.0; + } + if (pos.Y > 480) + { + pos.Y -= 480; + val2 = 1.0 - (double)(pos.Y / 480) * 3.0; + } + val2 = Math.Max(val2, 0.0); + val2 = Math.Min(val2, 1.0); + return Math.Min(val, val2) * volume; + } + + private double GetBalance(TinyPoint pos) + { + double val = (double)pos.X * 2.0 / 640.0 - 1.0; + val = Math.Max(val, -1.0); + return Math.Min(val, 1.0); + } + } +} \ No newline at end of file diff --git a/Tables.cs b/Tables.cs new file mode 100644 index 0000000..dadc3ae --- /dev/null +++ b/Tables.cs @@ -0,0 +1,1715 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Tables +using WindowsPhoneSpeedyBlupi; + +namespace WindowsPhoneSpeedyBlupi +{ + public static class Tables + { + public enum CheatCodes + { + BuildOfficialMissions, + OpenDoors, + CleanAll, + SuperBlupi, + LayEgg, + KillEgg, + Skate, + Copter, + Jeep, + AllTreasure, + EndGoal, + ShowSecret, + RoundShield, + Lollipop, + Bombs, + BirdLime, + Tank, + PowerCharge, + Drink, + Overcraft, + Dynamite, + WeelKeys + } + + public static int[] table_blupi = new int[2911] + { + 35, 9, 0, 276, 277, 278, 279, 280, 281, 282, + 283, 284, 1, 330, 0, 0, 0, 0, 0, 0, + 23, 23, 23, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 23, 23, 23, 23, 23, 23, 0, 0, + 0, 0, 0, 0, 0, 0, 23, 23, 23, 23, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 23, 23, 23, 23, 23, 0, 0, 0, 23, 23, + 23, 0, 0, 0, 0, 0, 0, 133, 133, 0, + 0, 0, 133, 133, 0, 0, 0, 0, 0, 0, + 0, 133, 133, 0, 0, 0, 0, 23, 23, 23, + 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 23, 23, 0, 0, 0, 0, 0, 23, + 23, 23, 0, 0, 0, 135, 135, 136, 136, 137, + 137, 137, 137, 137, 137, 137, 137, 138, 138, 137, + 137, 137, 138, 138, 137, 137, 137, 138, 138, 137, + 137, 137, 138, 138, 137, 137, 137, 137, 137, 137, + 136, 136, 135, 135, 135, 0, 0, 0, 0, 0, + 23, 23, 23, 0, 0, 133, 133, 0, 0, 0, + 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, + 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, + 0, 133, 133, 0, 0, 0, 0, 0, 23, 23, + 23, 23, 0, 0, 0, 135, 135, 136, 136, 137, + 137, 137, 137, 137, 137, 137, 137, 138, 138, 137, + 137, 137, 138, 138, 137, 137, 137, 138, 138, 137, + 137, 137, 138, 138, 137, 137, 137, 138, 138, 137, + 137, 137, 138, 138, 137, 137, 137, 138, 138, 137, + 137, 137, 138, 138, 137, 137, 137, 138, 138, 137, + 137, 137, 138, 138, 137, 137, 137, 138, 138, 137, + 137, 137, 138, 138, 137, 137, 137, 137, 137, 137, + 136, 136, 135, 135, 135, 0, 0, 0, 0, 0, + 23, 23, 23, 0, 0, 133, 133, 0, 0, 0, + 23, 23, 23, 23, 0, 0, 0, 0, 0, 0, + 0, 23, 23, 0, 0, 0, 0, 0, 0, 0, + 0, 133, 133, 0, 0, 0, 0, 0, 23, 23, + 23, 23, 0, 0, 0, 2, 6, 0, 5, 6, + 7, 8, 9, 10, 60, 3, 0, 19, 18, 19, + 3, 6, 0, 1, 1, 2, 2, 3, 3, 4, + 3, 0, 17, 18, 19, 5, 5, 4, 169, 26, + 170, 170, 27, 59, 6, 0, 3, 3, 2, 2, + 1, 1, 61, 5, 0, 34, 35, 34, 34, 33, + 62, 2, 0, 35, 34, 6, 3, 2, 33, 34, + 35, 7, 1, 0, 44, 8, 8, 0, 0, 169, + 26, 170, 27, 171, 28, 172, 9, 6, 0, 5, + 6, 7, 8, 9, 10, 10, 6, 0, 5, 6, + 7, 8, 9, 10, 13, 6, 0, 41, 41, 42, + 42, 43, 43, 86, 18, 0, 1, 1, 2, 2, + 41, 41, 42, 42, 43, 43, 42, 42, 41, 41, + 2, 2, 1, 1, 87, 26, 0, 135, 135, 137, + 137, 231, 231, 231, 231, 230, 230, 231, 231, 231, + 231, 230, 230, 231, 231, 231, 231, 230, 230, 137, + 137, 135, 135, 11, 70, 0, 40, 40, 40, 40, + 41, 41, 41, 41, 40, 40, 40, 40, 40, 40, + 40, 41, 41, 41, 40, 40, 40, 40, 40, 40, + 40, 41, 41, 41, 40, 40, 42, 42, 42, 43, + 43, 43, 44, 44, 44, 45, 45, 45, 46, 46, + 47, 47, 46, 46, 47, 47, 46, 46, 47, 47, + 46, 46, 47, 47, 46, 46, 47, 47, 46, 46, + 47, 47, 46, 46, 47, 47, 75, 1, 0, -1, + 76, 70, 0, 40, 40, 40, 40, 41, 41, 41, + 41, 40, 40, 40, 40, 40, 40, 40, 41, 41, + 41, 40, 40, 40, 40, 40, 40, 40, 41, 41, + 41, 40, 40, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 77, 110, 0, 324, 325, 324, 325, + 324, 325, 324, 325, 324, 325, 324, 325, 324, 325, + 324, 325, 324, 325, 324, 325, 324, 324, 325, 325, + 326, 326, 327, 327, 328, 328, 329, 329, 330, 330, + 331, 331, 332, 332, 333, 333, 334, 334, 333, 333, + 332, 332, 331, 331, 330, 330, 329, 329, 329, 330, + 330, 330, 331, 331, 331, 332, 332, 332, 333, 333, + 333, 334, 334, 334, 333, 333, 333, 332, 332, 332, + 331, 331, 331, 330, 330, 330, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 329, 329, 329, 329, + 329, 329, 329, 329, 329, 329, 78, 1, 0, -1, + 79, 1, 0, -1, 80, 1, 0, -1, 81, 1, + 0, -1, 14, 6, 0, 49, 50, 51, 52, 53, + 54, 29, 6, 0, 126, 125, 124, 123, 122, 121, + 28, 6, 0, 122, 122, 122, 125, 125, 125, 15, + 1, 0, 61, 16, 8, 0, 61, 62, 63, 62, + 61, 64, 65, 64, 17, 10, 0, 71, 71, 72, + 72, 73, 73, 74, 74, 75, 75, 67, 1, 0, + 315, 68, 12, 0, 296, 297, 298, 299, 300, 301, + 302, 301, 300, 299, 298, 297, 69, 7, 0, 296, + 310, 311, 312, 313, 314, 303, 18, 10, 0, 76, + 76, 76, 76, 76, 76, 77, 77, 77, 77, 19, + 14, 0, 76, 76, 77, 77, 78, 78, 79, 79, + 80, 80, 81, 81, 39, 39, 20, 10, 0, 88, + 88, 89, 89, 90, 90, 91, 91, 92, 92, 21, + 12, 0, 93, 93, 94, 94, 95, 95, 96, 96, + 97, 97, 98, 98, 22, 12, 0, 93, 93, 94, + 94, 95, 95, 96, 96, 97, 97, 98, 98, 23, + 10, 0, 105, 105, 106, 106, 107, 107, 108, 108, + 109, 109, 24, 90, 0, 93, 96, 98, 94, 95, + 93, 95, 98, 93, 94, 96, 96, 94, 94, 98, + 98, 93, 93, 97, 97, 94, 94, 94, 96, 96, + 96, 93, 93, 93, 93, 94, 94, 94, 94, 94, + 97, 97, 97, 97, 97, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 79, 79, 76, 76, 76, + 76, 79, 79, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 25, 8, 0, 111, 111, + 110, 110, 111, 111, 112, 112, 26, 8, 0, 111, + 111, 110, 110, 111, 111, 112, 112, 27, 7, 0, + 112, 113, 114, 115, 116, 117, 118, 30, 12, 0, + 25, 25, 29, 29, 46, 46, 47, 47, 46, 46, + 29, 29, 31, 328, 0, 156, 156, 156, 156, 157, + 157, 157, 157, 158, 158, 158, 158, 157, 157, 157, + 157, 156, 156, 156, 156, 157, 157, 157, 157, 158, + 158, 158, 158, 157, 157, 157, 157, 156, 156, 156, + 156, 157, 157, 157, 157, 158, 158, 158, 158, 157, + 157, 157, 157, 156, 156, 156, 156, 157, 157, 157, + 157, 158, 158, 158, 158, 157, 157, 157, 157, 156, + 156, 156, 156, 157, 157, 157, 157, 158, 158, 158, + 158, 157, 157, 157, 157, 156, 156, 156, 156, 157, + 157, 157, 157, 158, 158, 158, 158, 157, 157, 157, + 157, 156, 156, 156, 156, 157, 157, 157, 157, 158, + 158, 158, 158, 157, 157, 157, 157, 144, 144, 143, + 143, 151, 151, 162, 162, 163, 163, 164, 164, 163, + 163, 162, 162, 163, 163, 164, 164, 163, 163, 162, + 162, 163, 163, 164, 164, 163, 163, 162, 162, 163, + 163, 164, 164, 163, 163, 162, 162, 151, 151, 143, + 143, 144, 144, 157, 157, 156, 156, 156, 156, 157, + 157, 157, 157, 158, 158, 158, 158, 157, 157, 157, + 157, 156, 156, 156, 156, 157, 157, 157, 157, 158, + 158, 158, 158, 157, 157, 157, 157, 156, 156, 156, + 156, 157, 157, 157, 157, 158, 158, 158, 158, 157, + 157, 157, 157, 156, 156, 156, 156, 157, 157, 157, + 157, 158, 158, 158, 158, 157, 157, 157, 157, 144, + 144, 143, 143, 151, 151, 162, 162, 163, 163, 164, + 164, 163, 163, 162, 162, 163, 163, 164, 164, 163, + 163, 162, 162, 163, 163, 164, 164, 163, 163, 162, + 162, 163, 163, 164, 164, 163, 163, 162, 162, 151, + 151, 143, 143, 151, 151, 162, 162, 163, 163, 164, + 164, 163, 163, 162, 162, 163, 163, 164, 164, 163, + 163, 162, 162, 163, 163, 164, 164, 163, 163, 162, + 162, 163, 163, 164, 164, 163, 163, 162, 162, 163, + 163, 164, 164, 163, 163, 162, 162, 163, 163, 164, + 164, 163, 163, 162, 162, 151, 151, 143, 143, 144, + 144, 157, 157, 32, 12, 0, 144, 144, 145, 145, + 146, 146, 145, 145, 144, 144, 143, 143, 33, 10, + 0, 151, 151, 152, 152, 153, 153, 154, 154, 155, + 155, 34, 10, 0, 157, 157, 165, 165, 165, 165, + 166, 166, 166, 166, 36, 32, 0, 135, 177, 177, + 178, 178, 179, 179, 180, 180, 179, 179, 178, 178, + 179, 179, 180, 180, 179, 179, 178, 178, 179, 179, + 180, 180, 179, 179, 178, 178, 177, 177, 135, 37, + 140, 0, 182, 182, 182, 182, 208, 208, 208, 208, + 208, 182, 182, 182, 182, 182, 182, 208, 208, 208, + 208, 208, 194, 194, 194, 182, 182, 182, 182, 208, + 208, 208, 208, 208, 182, 182, 182, 182, 182, 182, + 208, 208, 208, 208, 182, 182, 182, 182, 182, 182, + 182, 182, 194, 194, 194, 195, 195, 195, 196, 196, + 196, 197, 197, 197, 198, 198, 198, 198, 197, 197, + 197, 196, 196, 196, 195, 195, 195, 194, 194, 194, + 182, 182, 182, 182, 208, 208, 208, 208, 182, 182, + 182, 182, 194, 194, 194, 195, 195, 195, 196, 196, + 196, 197, 197, 197, 198, 198, 198, 198, 197, 197, + 197, 196, 196, 196, 195, 195, 195, 194, 194, 194, + 182, 182, 182, 182, 208, 208, 208, 208, 182, 182, + 182, 182, 210, 210, 211, 211, 211, 211, 211, 211, + 210, 210, 85, 1, 0, 211, 38, 96, 0, 182, + 183, 184, 185, 186, 187, 182, 183, 184, 185, 186, + 187, 182, 183, 184, 185, 186, 187, 182, 182, 182, + 182, 182, 182, 182, 183, 184, 185, 186, 187, 182, + 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 183, 184, 185, 186, 187, 182, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 182, 182, 182, 183, 184, 185, 186, + 187, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, + 182, 182, 182, 182, 182, 39, 14, 0, 194, 194, + 195, 195, 196, 196, 197, 197, 198, 198, 199, 199, + 200, 200, 40, 3, 0, 210, 211, 212, 41, 8, + 0, 213, 213, 214, 214, 215, 215, 214, 214, 42, + 20, 0, 17, 17, 18, 18, 19, 19, 1, 1, + 215, 215, 214, 214, 213, 213, 212, 212, 211, 211, + 210, 210, 43, 20, 0, 210, 210, 211, 211, 212, + 212, 213, 213, 214, 214, 215, 215, 1, 1, 19, + 19, 18, 18, 17, 17, 44, 29, 0, 1, 1, + 222, 222, 222, 222, 223, 223, 224, 224, 225, 225, + 225, 225, 225, 224, 223, 222, 222, 222, 223, 223, + 224, 224, 225, 225, 225, 1, 1, 45, 29, 0, + 1, 1, 222, 222, 222, 222, 223, 223, 224, 224, + 225, 225, 225, 225, 225, 224, 223, 222, 222, 222, + 223, 223, 224, 224, 225, 225, 225, 1, 1, 46, + 32, 0, 1, 1, 227, 227, 228, 228, 229, 229, + 228, 228, 227, 227, 226, 226, 227, 227, 228, 228, + 229, 229, 228, 228, 227, 227, 226, 226, 227, 227, + 228, 228, 1, 1, 47, 34, 0, 135, 135, 136, + 136, 137, 137, 231, 231, 231, 231, 230, 230, 231, + 231, 231, 231, 230, 230, 231, 231, 231, 231, 230, + 230, 231, 231, 231, 231, 137, 137, 136, 136, 135, + 135, 48, 40, 0, 0, 0, 135, 135, 136, 136, + 137, 137, 232, 233, 232, 233, 232, 233, 232, 233, + 232, 233, 232, 233, 232, 233, 232, 233, 232, 233, + 232, 233, 232, 233, 232, 233, 137, 137, 136, 136, + 135, 135, 0, 0, 65, 44, 0, 1, 1, 288, + 288, 289, 289, 290, 290, 290, 289, 288, 288, 289, + 289, 290, 290, 290, 289, 288, 288, 289, 289, 290, + 290, 290, 289, 288, 288, 289, 289, 290, 290, 290, + 289, 288, 288, 289, 289, 290, 290, 290, 289, 1, + 1, 49, 32, 0, 234, 234, 235, 235, 236, 236, + 235, 235, 234, 234, 235, 235, 236, 236, 235, 235, + 234, 234, 235, 235, 236, 236, 235, 235, 234, 234, + 235, 235, 236, 236, 235, 235, 50, 64, 0, 238, + 238, 239, 239, 240, 240, 241, 241, 241, 241, 241, + 241, 241, 241, 241, 241, 240, 240, 241, 241, 240, + 240, 241, 241, 241, 241, 241, 241, 241, 241, 241, + 241, 241, 241, 240, 240, 241, 241, 240, 240, 241, + 241, 241, 241, 241, 241, 241, 241, 240, 240, 239, + 239, 238, 238, 238, 238, 238, 238, 237, 237, 238, + 238, 237, 237, 51, 8, 0, 238, 238, 237, 237, + 238, 238, 239, 239, 52, 12, 0, 238, 239, 240, + 241, 242, 243, 244, 245, 246, 247, 248, 249, 53, + 6, 0, 251, 251, 238, 238, 238, 238, 54, 25, + 0, 168, 168, 169, 169, 170, 170, 171, 171, 170, + 170, 169, 169, 168, 168, 169, 169, 169, 168, 168, + 169, 169, 170, 170, 169, 168, 55, 4, 0, 253, + 253, 254, 254, 56, 64, 0, 1, 3, 270, 268, + 1, 3, 270, 268, 1, 3, 270, 268, 1, 3, + 270, 268, 1, 3, 270, 268, 1, 3, 270, 268, + 1, 3, 270, 268, 1, 3, 270, 268, 1, 2, + 3, 4, 270, 269, 268, 0, 1, 2, 3, 4, + 270, 269, 268, 0, 1, 1, 2, 2, 3, 3, + 4, 4, 270, 270, 269, 269, 268, 268, 0, 0, + 57, 90, 0, 266, 267, 266, 267, 266, 267, 266, + 267, 266, 267, 266, 267, 266, 267, 266, 267, 266, + 267, 266, 267, 266, 267, 266, 267, 266, 267, 266, + 267, 266, 267, 40, 40, 40, 40, 41, 41, 41, + 41, 40, 40, 40, 40, 40, 40, 40, 41, 41, + 41, 40, 40, 40, 40, 40, 40, 40, 41, 41, + 41, 40, 40, 42, 42, 42, 43, 43, 43, 44, + 44, 44, 45, 45, 45, 46, 46, 47, 47, 46, + 46, 47, 47, 46, 46, 47, 47, 46, 46, 47, + 47, 46, 46, 82, 10, 0, 0, 268, 268, 269, + 269, 269, 269, 268, 268, 0, 58, 14, 0, 274, + 274, 271, 271, 271, 271, 272, 272, 273, 273, 273, + 273, 274, 274, 66, 16, 0, 291, 291, 292, 292, + 293, 293, 294, 294, 295, 295, 294, 294, 293, 293, + 292, 292, 72, 1, 0, 320, 73, 24, 0, 319, + 319, 318, 318, 317, 317, 318, 318, 319, 319, 320, + 320, 321, 321, 322, 322, 323, 323, 322, 322, 321, + 321, 320, 320, 74, 128, 0, 1, 1, 2, 2, + 3, 3, 4, 4, 270, 270, 269, 269, 268, 268, + 0, 0, 1, 2, 3, 4, 270, 269, 268, 0, + 1, 2, 3, 4, 270, 269, 268, 0, 1, 3, + 270, 268, 2, 4, 269, 0, 1, 3, 270, 268, + 2, 4, 269, 0, -1, 3, 270, -1, 2, -1, + 269, 0, 1, -1, -1, 268, -1, -1, 269, -1, + -1, -1, -1, 270, -1, -1, 2, -1, -1, -1, + -1, -1, -1, 29, 46, 47, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 63, 92, 0, 263, 264, 265, + 264, 263, 264, 265, 264, 263, 264, 265, 264, 263, + 264, 265, 264, 263, 264, 265, 264, 263, 264, 265, + 264, 263, 264, 265, 264, 263, 264, 265, 264, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, + 23, 23, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 23, 23, 0, 0, 0, 0, 0, 0, + 0, 133, 133, 0, 0, 0, 133, 133, 0, 0, + 0, 0, 0, 0, 0, 133, 133, 0, 0, 0, + 0, 23, 23, 23, 23, 0, 0, 0, 0, 64, + 104, 0, 1, 1, 2, 2, 3, 3, 285, 286, + 287, 286, 285, 286, 287, 286, 285, 286, 287, 286, + 285, 286, 287, 286, 285, 286, 287, 286, 285, 286, + 287, 286, 285, 286, 287, 286, 285, 286, 287, 286, + 3, 3, 2, 2, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 23, 23, 23, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, + 23, 0, 0, 0, 0, 0, 0, 0, 133, 133, + 0, 0, 0, 133, 133, 0, 0, 0, 0, 0, + 0, 0, 133, 133, 0, 0, 0, 0, 23, 23, + 23, 23, 0, 0, 0, 0, 83, 60, 0, 1, + 1, 288, 288, 289, 289, 290, 290, 290, 289, 288, + 288, 289, 289, 290, 290, 290, 289, 288, 288, 289, + 289, 290, 290, 290, 289, 288, 288, 289, 289, 290, + 290, 290, 289, 288, 288, 289, 289, 290, 290, 290, + 289, 288, 288, 289, 289, 290, 290, 290, 290, 290, + 290, 290, 290, 290, 290, 290, 290, 1, 1, 84, + 18, 0, 1, 1, 227, 227, 228, 228, 229, 229, + 228, 228, 227, 227, 226, 226, 227, 227, 1, 1, + 0 + }; + + public static int[] table_mirror = new int[335] + { + 4, 3, 2, 1, 0, 11, 12, 13, 14, 15, + 16, 5, 6, 7, 8, 9, 10, 20, 21, 22, + 17, 18, 19, 24, 23, 25, 30, 31, 32, 29, + 26, 27, 28, 36, 37, 38, 33, 34, 35, 40, + 39, 41, 42, 43, 45, 44, 46, 47, 48, 55, + 56, 57, 58, 59, 60, 49, 50, 51, 52, 53, + 54, 66, 67, 68, 69, 70, 61, 62, 63, 64, + 65, 75, 74, 73, 72, 71, 82, 83, 84, 85, + 86, 87, 76, 77, 78, 79, 80, 81, 92, 91, + 90, 89, 88, 99, 100, 101, 102, 103, 104, 93, + 94, 95, 96, 97, 98, 109, 108, 107, 106, 105, + 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, + 110, 127, 128, 129, 130, 131, 132, 121, 122, 123, + 124, 125, 126, 134, 133, 139, 140, 141, 142, 135, + 136, 137, 138, 147, 148, 149, 150, 143, 144, 145, + 146, 155, 154, 153, 152, 151, 159, 160, 161, 156, + 157, 158, 162, 163, 164, 167, 168, 165, 166, 173, + 174, 175, 176, 169, 170, 171, 172, 181, 180, 179, + 178, 177, 188, 189, 190, 191, 192, 193, 182, 183, + 184, 185, 186, 187, 201, 202, 203, 204, 205, 206, + 207, 194, 195, 196, 197, 198, 199, 200, 209, 208, + 216, 217, 218, 219, 220, 221, 210, 211, 212, 213, + 214, 215, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 234, 235, 236, 250, 249, 248, + 247, 246, 245, 244, 243, 242, 241, 240, 239, 238, + 237, 252, 251, 255, 256, 253, 254, 257, 258, 259, + 260, 261, 262, 285, 286, 287, 266, 267, 270, 269, + 268, 271, 272, 273, 275, 274, 276, 277, 278, 279, + 280, 281, 282, 283, 284, 263, 264, 265, 288, 289, + 290, 291, 292, 293, 294, 295, 303, 304, 305, 306, + 307, 308, 309, 296, 297, 298, 299, 300, 301, 302, + 314, 313, 312, 311, 310, 316, 315, 323, 322, 321, + 320, 319, 318, 317, 324, 325, 326, 327, 328, 329, + 330, 331, 332, 333, 334 + }; + + public static int[] table_vitesse_march = new int[4] { 2, 4, 6, 8 }; + + public static int[] table_vitesse_nage = new int[7] { 2, 1, 5, 10, 8, 6, 4 }; + + public static int[] table_vitesse_surf = new int[6] { 0, 2, 5, 8, 3, 0 }; + + public static short[] table_decor_quart = new short[7056] + { + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, + 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, + 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, + 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, + 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, + 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, + 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, + 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, + 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, + 1, 0, 0, 1, 1, 0 + }; + + public static int[] table_bulldozer_left = new int[8] { 66, 66, 67, 67, 66, 66, 65, 65 }; + + public static int[] table_bulldozer_right = new int[8] { 58, 58, 57, 57, 58, 58, 59, 59 }; + + public static int[] table_bulldozer_turn2l = new int[22] + { + 58, 59, 59, 59, 60, 60, 60, 61, 61, 62, + 62, 63, 63, 64, 64, 64, 65, 65, 65, 66, + 66, 66 + }; + + public static int[] table_bulldozer_turn2r = new int[22] + { + 66, 65, 65, 65, 64, 64, 64, 63, 63, 62, + 62, 61, 61, 60, 60, 60, 59, 59, 59, 58, + 58, 58 + }; + + public static int[] table_poisson_left = new int[8] { 82, 82, 81, 81, 82, 82, 83, 83 }; + + public static int[] table_poisson_right = new int[8] { 79, 79, 78, 78, 79, 79, 80, 80 }; + + public static int[] table_poisson_turn2l = new int[48] + { + 79, 79, 80, 80, 84, 84, 85, 85, 86, 86, + 87, 87, 88, 88, 83, 83, 82, 82, 83, 83, + 88, 88, 87, 87, 86, 86, 85, 85, 84, 84, + 79, 79, 79, 79, 80, 80, 84, 84, 85, 85, + 86, 86, 87, 87, 88, 88, 83, 83 + }; + + public static int[] table_poisson_turn2r = new int[48] + { + 82, 82, 83, 83, 88, 88, 87, 87, 86, 86, + 85, 85, 84, 84, 79, 79, 79, 79, 80, 80, + 84, 84, 85, 85, 86, 86, 87, 87, 88, 88, + 83, 83, 82, 82, 83, 83, 88, 88, 87, 87, + 86, 86, 85, 85, 84, 84, 79, 79 + }; + + public static int[] table_oiseau_left = new int[8] { 98, 99, 100, 101, 102, 103, 104, 105 }; + + public static int[] table_oiseau_right = new int[8] { 90, 91, 92, 93, 94, 95, 96, 97 }; + + public static int[] table_oiseau_turn2l = new int[10] { 106, 107, 108, 109, 110, 111, 112, 113, 105, 105 }; + + public static int[] table_oiseau_turn2r = new int[10] { 114, 115, 116, 117, 118, 119, 120, 121, 97, 97 }; + + public static int[] table_guepe_left = new int[6] { 195, 196, 197, 198, 197, 196 }; + + public static int[] table_guepe_right = new int[6] { 199, 200, 201, 202, 201, 200 }; + + public static int[] table_guepe_turn2l = new int[5] { 207, 206, 205, 204, 203 }; + + public static int[] table_guepe_turn2r = new int[5] { 203, 204, 205, 206, 207 }; + + public static int[] table_creature_left = new int[8] { 247, 248, 249, 250, 251, 250, 249, 248 }; + + public static int[] table_creature_right = new int[8] { 247, 248, 249, 250, 251, 250, 249, 248 }; + + public static int[] table_creature_turn2 = new int[152] + { + 244, 244, 244, 244, 244, 244, 244, 244, 243, 243, + 242, 242, 242, 242, 242, 242, 242, 242, 243, 243, + 244, 244, 245, 245, 246, 246, 246, 246, 246, 246, + 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, + 242, 242, 242, 242, 243, 243, 244, 244, 245, 245, + 246, 246, 246, 246, 246, 246, 245, 245, 244, 244, + 243, 243, 242, 242, 242, 242, 243, 243, 244, 244, + 245, 245, 246, 246, 246, 246, 245, 245, 244, 244, + 243, 243, 242, 242, 243, 243, 244, 244, 245, 245, + 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, + 242, 242, 243, 243, 244, 244, 245, 245, 246, 246, + 246, 246, 245, 245, 244, 244, 243, 243, 242, 242, + 242, 242, 242, 242, 243, 243, 244, 244, 245, 245, + 246, 246, 246, 246, 246, 246, 245, 245, 244, 244, + 244, 244, 244, 244, 244, 244, 244, 244, 244, 244, + 244, 244 + }; + + public static int[] table_blupih_left = new int[8] { 66, 67, 68, 67, 66, 69, 70, 69 }; + + public static int[] table_blupih_right = new int[8] { 61, 62, 63, 62, 61, 64, 65, 64 }; + + public static int[] table_blupih_turn2l = new int[26] + { + 71, 71, 72, 72, 73, 73, 74, 74, 75, 75, + 68, 68, 275, 275, 271, 271, 271, 271, 272, 272, + 273, 273, 273, 273, 275, 275 + }; + + public static int[] table_blupih_turn2r = new int[26] + { + 75, 75, 74, 74, 73, 73, 72, 72, 71, 71, + 63, 63, 274, 274, 271, 271, 271, 271, 272, 272, + 273, 273, 273, 273, 274, 274 + }; + + public static int[] table_blupit_left = new int[8] { 249, 249, 250, 250, 249, 249, 248, 248 }; + + public static int[] table_blupit_right = new int[8] { 238, 238, 237, 237, 238, 238, 239, 239 }; + + public static int[] table_blupit_turn2l = new int[24] + { + 238, 238, 251, 251, 238, 238, 238, 239, 240, 241, + 242, 243, 244, 245, 246, 247, 248, 249, 249, 249, + 252, 252, 249, 249 + }; + + public static int[] table_blupit_turn2r = new int[24] + { + 249, 249, 252, 252, 249, 249, 249, 248, 247, 246, + 245, 244, 243, 242, 241, 240, 239, 238, 238, 238, + 251, 251, 238, 238 + }; + + public static int[] table_explo1 = new int[39] + { + 0, 0, 1, 1, 2, 2, 3, 3, 4, 3, + 4, 4, 3, 4, 3, 3, 4, 4, 5, 5, + 4, 5, 6, 5, 6, 6, 5, 5, 6, 7, + 7, 8, 8, 9, 9, 10, 10, 11, 11 + }; + + public static int[] table_explo2 = new int[20] + { + 12, -1, 13, 14, -1, 15, 13, -1, 14, 15, + 12, -1, 13, 15, 14, 14, -1, 14, 15, 13 + }; + + public static int[] table_explo3 = new int[20] + { + 32, 32, 34, 34, 32, 32, 34, 34, 32, 32, + 34, 34, 32, 32, 35, 35, 32, 32, 35, 35 + }; + + public static int[] table_explo4 = new int[9] { 12, 13, 14, 15, 7, 8, 9, 10, 11 }; + + public static int[] table_explo5 = new int[12] + { + 54, -1, 55, -1, 56, -1, 57, -1, 58, -1, + 59, -1 + }; + + public static int[] table_explo6 = new int[6] { 54, 55, 56, 57, 58, 59 }; + + public static int[] table_explo7 = new int[128] + { + 60, 61, -1, 63, 64, 65, 62, 64, 62, 60, + 62, -1, 65, -1, 60, 65, 63, 61, 62, -1, + 64, 65, -1, 62, 64, 61, 62, 63, -1, 65, + 60, -1, 65, -1, 63, 65, -1, 61, 60, 65, + 62, 63, 64, -1, 62, 63, -1, 62, 62, 60, + 62, -1, 65, -1, 60, 65, 64, 61, 62, 63, + -1, 65, 60, -1, 63, 61, 62, -1, 64, 65, + -1, 62, 62, 60, 62, -1, 65, -1, 60, 65, + 60, 61, -1, 63, 64, 65, 62, 64, 63, 61, + 62, -1, 64, 65, -1, 62, 60, 61, -1, 63, + 64, 65, 62, 64, -1, 60, -1, -1, 65, -1, + 60, -1, 63, -1, 62, -1, -1, 65, -1, -1, + -1, 61, -1, -1, -1, 60, -1, -1 + }; + + public static int[] table_explo8 = new int[5] { 7, 8, 9, 10, 11 }; + + public static int[] table_sploutch1 = new int[10] { 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 }; + + public static int[] table_sploutch2 = new int[13] + { + -1, -1, -1, 90, 91, 92, 93, 94, 95, 96, + 97, 98, 99 + }; + + public static int[] table_sploutch3 = new int[18] + { + -1, -1, -1, -1, -1, -1, -1, -1, 90, 91, + 92, 93, 94, 95, 96, 97, 98, 99 + }; + + public static int[] table_tentacule = new int[45] + { + 86, 85, 84, 83, 84, 85, 86, -1, 86, 85, + 84, 83, 82, 81, 80, 79, 78, 77, 76, 75, + 74, 73, 72, 71, 70, 70, 70, 70, 71, 72, + 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, + 83, 84, 85, 86, -1 + }; + + public static int[] table_bridge = new int[157] + { + 365, 366, 365, 366, 365, 366, 365, 366, 365, 366, + 365, 366, 365, 366, 365, 366, 367, 367, 368, 368, + 369, 369, 370, 370, 371, 371, 372, 372, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 372, 372, 371, 371, 370, 370, 369, 369, 368, 368, + 367, 367, 366, 366, 365, 365, 364 + }; + + public static int[] table_pollution = new int[8] { 179, 180, 181, 182, 183, 184, 185, 186 }; + + public static int[] table_invertstart = new int[8] { 179, 180, 181, 182, 183, 184, 185, 186 }; + + public static int[] table_invertstop = new int[8] { 186, 185, 184, 183, 182, 181, 180, 179 }; + + public static int[] table_invertpanel = new int[8] { 187, 188, 189, 190, 191, 192, 193, 194 }; + + public static int[] table_plouf = new int[7] { 99, 100, 101, 102, 101, 100, 99 }; + + public static int[] table_tiplouf = new int[3] { 244, 99, 244 }; + + public static int[] table_blup = new int[20] + { + 103, 104, 105, 106, 104, 103, 106, 105, 103, 104, + 103, 105, 106, 103, 105, 106, 103, 104, 106, 105 + }; + + public static int[] table_follow1 = new int[26] + { + 256, 256, 256, 257, 257, 258, 259, 260, 261, 262, + 263, 264, 264, 265, 265, 265, 264, 264, 263, 262, + 261, 260, 259, 258, 257, 257 + }; + + public static int[] table_follow2 = new int[5] { 256, 258, 260, 262, 264 }; + + public static int[] table_cle = new int[12] + { + 122, 123, 124, 125, 126, 127, 128, 127, 126, 125, + 124, 123 + }; + + public static int[] table_cle1 = new int[12] + { + 209, 210, 211, 212, 213, 214, 215, 214, 213, 212, + 211, 210 + }; + + public static int[] table_cle2 = new int[12] + { + 220, 221, 222, 221, 220, 219, 218, 217, 216, 217, + 218, 219 + }; + + public static int[] table_cle3 = new int[12] + { + 229, 228, 227, 226, 225, 224, 223, 224, 225, 226, + 227, 228 + }; + + public static int[] table_dynamitef = new int[100] + { + 253, 252, 254, 252, 252, 255, 252, 254, 253, 252, + 253, 254, 255, 252, 255, 253, 252, 254, 252, 255, + 253, 254, 252, 253, 255, 254, 255, 252, 253, 254, + 255, 252, 253, 254, 255, 254, 254, 253, 254, 255, + 253, 252, 255, 254, 255, 253, 252, 254, 253, 255, + 253, 254, 252, 253, 255, 254, 252, 255, 253, 254, + 255, 253, 252, 254, 255, 254, 252, 253, 254, 255, + 253, 254, 255, 254, 255, 253, 252, 254, 253, 255, + 253, 254, 255, 253, 255, 254, 255, 252, 253, 254, + 255, 253, 253, 254, 255, 254, 252, 253, 254, 255 + }; + + public static int[] table_skate = new int[34] + { + 129, 129, 129, 129, 130, 130, 130, 131, 131, 132, + 132, 133, 133, 134, 134, 134, 135, 135, 135, 135, + 134, 134, 134, 133, 133, 132, 132, 131, 131, 131, + 130, 130, 130, 130 + }; + + public static int[] table_glu = new int[25] + { + 168, 168, 169, 169, 170, 170, 171, 171, 170, 170, + 169, 169, 168, 168, 169, 169, 169, 168, 168, 169, + 169, 170, 170, 169, 168 + }; + + public static int[] table_clear = new int[70] + { + 40, 40, 40, 40, 41, 41, 41, 41, 40, 40, + 40, 40, 40, 40, 40, 41, 41, 41, 40, 40, + 40, 40, 40, 40, 40, 41, 41, 41, 40, 40, + 42, 42, 42, 43, 43, 43, 44, 44, 44, 45, + 45, 45, 46, 46, 47, 47, 46, 46, 47, 47, + 46, 46, 47, 47, 46, 46, 47, 47, 46, 46, + 47, 47, 46, 46, 47, 47, 46, 46, 47, 47 + }; + + public static int[] table_electro = new int[90] + { + 266, 267, 266, 267, 266, 267, 266, 267, 266, 267, + 266, 267, 266, 267, 266, 267, 266, 267, 266, 267, + 266, 267, 266, 267, 266, 267, 266, 267, 266, 267, + 40, 40, 40, 40, 41, 41, 41, 41, 40, 40, + 40, 40, 40, 40, 40, 41, 41, 41, 40, 40, + 40, 40, 40, 40, 40, 41, 41, 41, 40, 40, + 42, 42, 42, 43, 43, 43, 44, 44, 44, 45, + 45, 45, 46, 46, 47, 47, 46, 46, 47, 47, + 46, 46, 47, 47, 46, 46, 47, 47, 46, 46 + }; + + public static int[] table_chenille = new int[6] { 311, 312, 313, 314, 315, 316 }; + + public static int[] table_chenillei = new int[6] { 316, 315, 314, 313, 312, 311 }; + + public static int[] table_adapt_decor = new int[144] + { + 153, 147, 148, 146, 40, 151, 150, 144, 39, 152, + 149, 145, 38, 36, 37, 35, 153, 147, 148, 146, + 40, 151, 150, 144, 39, 152, 149, 145, 38, 36, + 37, 156, 75, 75, 155, 155, 75, 75, 155, 155, + 74, 74, 154, 154, 75, 75, 155, 155, 157, 157, + 157, 157, 109, 109, 109, 109, 108, 108, 108, 108, + 107, 107, 107, 107, 202, 202, 138, 138, 202, 202, + 138, 138, 202, 202, 138, 138, 202, 202, 138, 138, + 283, 283, 283, 283, 262, 262, 262, 262, 263, 263, + 263, 263, 261, 261, 261, 261, 361, 359, 360, 352, + 357, 353, 355, 349, 358, 354, 356, 350, 351, 347, + 348, 341, 387, 387, 386, 386, 394, 394, 392, 392, + 395, 395, 393, 393, 397, 397, 396, 396, 251, 254, + 254, 254, 251, 258, 260, 258, 251, 257, 259, 257, + 251, 250, 256, 250 + }; + + public static int[] table_adapt_fromage = new int[32] + { + -1, 265, 264, 268, 267, 273, 271, 275, 266, 272, + 270, 274, 269, 277, 276, 278, -1, 286, 285, 289, + 288, 294, 292, 296, 287, 293, 291, 295, 290, 298, + 297, 299 + }; + + public static int[] table_shield = new int[16] + { + 144, 145, 146, 147, 148, 149, 150, 151, 266, 267, + 268, 269, 270, 271, 272, 273 + }; + + public static int[] table_shield_blupi = new int[16] + { + 144, 145, 146, 147, 148, 149, 150, 151, 266, 267, + 268, 269, 270, 271, 272, 273 + }; + + public static int[] table_power = new int[8] { 136, 137, 138, 139, 140, 141, 142, 143 }; + + public static int[] table_invert = new int[20] + { + 187, 187, 187, 188, 189, 190, 191, 192, 193, 194, + 187, 187, 187, 194, 193, 192, 191, 190, 189, 188 + }; + + public static int[] table_charge = new int[6] { 238, 239, 240, 241, 242, 243 }; + + public static int[] table_magicloop = new int[5] { 152, 153, 154, 155, 156 }; + + public static int[] table_magictrack = new int[24] + { + 152, 153, 154, 155, 156, 152, 153, 154, 155, 156, + 157, 158, 159, 160, 157, 158, 159, 160, 161, 162, + 163, 164, 165, 166 + }; + + public static int[] table_shieldloop = new int[5] { 274, 275, 276, 277, 278 }; + + public static int[] table_shieldtrack = new int[20] + { + 274, 275, 276, 277, 278, 274, 275, 276, 277, 278, + 279, 280, 281, 282, 283, 284, 285, 286, 287, 288 + }; + + public static int[] table_drinkeffect = new int[5] { 274, 275, 276, 277, 278 }; + + public static int[] table_drinkoffset = new int[3] { 0, 7, 22 }; + + public static int[] table_tresortrack = new int[11] + { + 166, 165, 164, 163, 162, 161, 162, 163, 164, 165, + 166 + }; + + public static int[] table_decor_lave = new int[8] { 68, 69, 70, 71, 72, 71, 70, 69 }; + + public static int[] table_decor_piege1 = new int[16] + { + 374, 374, 373, 347, 373, 374, 374, 374, 373, 347, + 347, 373, 374, 374, 374, 374 + }; + + public static int[] table_decor_piege2 = new int[4] { 374, 373, 347, 373 }; + + public static int[] table_decor_goutte = new int[48] + { + 410, 409, 410, -1, -1, -1, -1, -1, -1, 410, + 409, 408, 409, 410, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 410, 409, 408, 407, 406, 405, + 404, 405, 406, 407, 408, 409, 410, -1, -1, -1, + -1, 410, 409, 410, -1, -1, -1, -1 + }; + + public static int[] table_decor_ecraseur = new int[10] { 317, 317, 318, 319, 320, 321, 322, 323, 323, 323 }; + + public static int[] table_decor_scie = new int[6] { 378, 379, 380, 381, 382, 383 }; + + public static int[] table_decor_temp = new int[20] + { + 328, 328, 327, 327, 326, 326, 325, 325, 324, 324, + 325, 325, 326, 326, 327, 329, 328, 328, -1, -1 + }; + + public static int[] table_decor_eau1 = new int[6] { 92, 93, 94, 95, 94, 93 }; + + public static int[] table_decor_eau2 = new int[6] { 91, 96, 97, 98, 97, 96 }; + + public static int[] table_decor_ventillog = new int[3] { 126, 127, 128 }; + + public static int[] table_decor_ventillod = new int[3] { 129, 130, 131 }; + + public static int[] table_decor_ventilloh = new int[3] { 132, 133, 134 }; + + public static int[] table_decor_ventillob = new int[3] { 135, 136, 137 }; + + public static int[] table_decor_ventg = new int[4] { 110, 111, 112, 113 }; + + public static int[] table_decor_ventd = new int[4] { 114, 115, 116, 117 }; + + public static int[] table_decor_venth = new int[4] { 118, 119, 120, 121 }; + + public static int[] table_decor_ventb = new int[4] { 122, 123, 124, 125 }; + + public static int[] table_marine = new int[11] + { + 203, 204, 205, 206, 207, 208, 207, 206, 205, 204, + 203 + }; + + public static int[] table_ressort = new int[8] { 209, 210, 211, 212, 213, 212, 211, 210 }; + + public static int[] table_training1; + + public static int[] table_training2; + + public static int[] table_training3; + + public static int[] table_training4; + + public static int[] table_decor_action; + + public static int[] table_explo_size; + + public static int[] world_terminal; + + static Tables() + { + int[] array = new int[133] + { + 1, 3, 0, 50, -1, 0, 4, 4, 0, 50, + 0, 0, 6, 6, 0, 50, 1, 0, 9, 9, + 0, 50, -1, 0, 12, 14, 0, 50, 1, 0, + 16, 16, 0, 50, -1, 0, 20, 21, 0, 50, + -1, 0, 23, 24, 0, 50, -1, 0, 27, 27, + 0, 50, -1, 0, 28, 28, 0, 50, -1, 0, + 30, 31, 0, 50, -1, 0, 36, 36, 0, 50, + -1, 0, 39, 39, 0, 50, -1, 0, 44, 44, + 0, 50, -1, 0, 46, 46, 0, 50, -1, 0, + 53, 53, 0, 50, -1, 0, 56, 56, 0, 50, + -1, 0, 62, 64, 0, 50, -1, 0, 65, 66, + 0, 50, -1, 0, 69, 74, 0, 50, -1, 0, + 80, 85, 0, 50, 1, 0, 87, 93, 0, 50, + -1, 0, -1 + }; + array[5] = MyResource.TX_TRAINING101; + array[11] = MyResource.TX_TRAINING102; + array[17] = MyResource.TX_TRAINING103; + array[23] = MyResource.TX_TRAINING104; + array[29] = MyResource.TX_TRAINING105; + array[35] = MyResource.TX_TRAINING106; + array[41] = MyResource.TX_TRAINING107; + array[47] = MyResource.TX_TRAINING108; + array[53] = MyResource.TX_TRAINING109; + array[59] = MyResource.TX_TRAINING110; + array[65] = MyResource.TX_TRAINING111; + array[71] = MyResource.TX_TRAINING112; + array[77] = MyResource.TX_TRAINING113; + array[83] = MyResource.TX_TRAINING114; + array[89] = MyResource.TX_TRAINING115; + array[95] = MyResource.TX_TRAINING116; + array[101] = MyResource.TX_TRAINING117; + array[107] = MyResource.TX_TRAINING118; + array[113] = MyResource.TX_TRAINING119; + array[119] = MyResource.TX_TRAINING120; + array[125] = MyResource.TX_TRAINING121; + array[131] = MyResource.TX_TRAINING122; + table_training1 = array; + int[] array2 = new int[31] + { + 9, 15, 0, 100, -1, 0, 16, 16, 0, 100, + -1, 0, 19, 21, 0, 100, -1, 0, 24, 31, + 0, 100, -1, 0, 33, 40, 0, 100, -1, 0, + -1 + }; + array2[5] = MyResource.TX_TRAINING201; + array2[11] = MyResource.TX_TRAINING202; + array2[17] = MyResource.TX_TRAINING203; + array2[23] = MyResource.TX_TRAINING204; + array2[29] = MyResource.TX_TRAINING205; + table_training2 = array2; + int[] array3 = new int[67] + { + 16, 24, 36, 40, -2, 0, 16, 24, 36, 40, + -3, 0, 22, 25, 34, 34, -3, 0, 22, 31, + 34, 37, -2, 0, 32, 43, 34, 34, -2, 0, + 32, 43, 26, 34, -3, 0, 44, 48, 20, 22, + -2, 0, 29, 31, 12, 12, -1, 0, 44, 54, + 20, 22, -3, 0, 63, 65, 20, 22, -1, 0, + 77, 81, 20, 22, -3, 0, -1 + }; + array3[5] = MyResource.TX_TRAINING301; + array3[11] = MyResource.TX_TRAINING302; + array3[17] = MyResource.TX_TRAINING303; + array3[23] = MyResource.TX_TRAINING304; + array3[29] = MyResource.TX_TRAINING305; + array3[35] = MyResource.TX_TRAINING306; + array3[41] = MyResource.TX_TRAINING307; + array3[47] = MyResource.TX_TRAINING308; + array3[53] = MyResource.TX_TRAINING309; + array3[59] = MyResource.TX_TRAINING310; + array3[65] = MyResource.TX_TRAINING311; + table_training3 = array3; + int[] array4 = new int[31] + { + 7, 14, 0, 100, -4, 0, 7, 19, 0, 100, + -5, 0, 20, 22, 0, 100, -4, 0, 20, 22, + 0, 100, -5, 0, 27, 28, 42, 100, -1, 0, + -1 + }; + array4[5] = MyResource.TX_TRAINING401; + array4[11] = MyResource.TX_TRAINING402; + array4[17] = MyResource.TX_TRAINING403; + array4[23] = MyResource.TX_TRAINING404; + array4[29] = MyResource.TX_TRAINING405; + table_training4 = array4; + table_decor_action = new int[519] + { + 1, 32, -4, 4, 4, -3, -4, 2, 4, 5, + -4, -1, 4, 2, -4, -4, 4, -3, -3, 2, + 3, 2, -3, -5, 3, 4, -3, 5, 3, -2, + -3, 5, 3, 4, -2, -2, 2, 4, -2, -2, + 2, -2, -2, -4, 2, 2, -2, -2, 2, -3, + -1, -3, 1, -2, -1, -1, 1, 2, -1, -2, + 1, -1, -1, 1, 1, 2, 2, 32, -4, 0, + 4, 0, -4, 0, 4, 0, -4, 0, 4, 0, + -4, 0, 4, 0, -3, 0, 3, 0, -3, 0, + 3, 0, -3, 0, 3, 0, -3, 0, 3, 0, + -2, 0, 2, 0, -2, 0, 2, 0, -2, 0, + 2, 0, -2, 0, 2, 0, -1, 0, 1, 0, + -1, 0, 1, 0, -1, 0, 1, 0, -1, 0, + 1, 0, 5, 192, 0, -32, 0, 32, 0, -16, + 0, 6, 0, -8, 0, 8, 0, -4, 0, 4, + 0, -2, 0, 2, -7, 0, -6, 0, -5, 0, + -4, 0, -2, 0, 0, 0, 2, 0, 4, 0, + 5, 0, 6, 0, 7, 0, 7, 0, 6, 0, + 5, 0, 4, 0, 2, 0, 0, 0, -2, 0, + -4, 0, -5, 0, -6, 0, -7, 0, -7, 0, + -6, 0, -5, 0, -4, 0, -2, 0, 0, 0, + 2, 0, 4, 0, 5, 0, 6, 0, 7, 0, + 7, 0, 6, 0, 5, 0, 4, 0, 2, 0, + 0, 0, -2, 0, -4, 0, -5, 0, -6, 0, + -7, 0, -7, 0, -6, 0, -5, 0, -4, 0, + -2, 0, 0, 0, 2, 0, 4, 0, 5, 0, + 6, 0, 7, 0, 7, 0, 6, 0, 5, 0, + 4, 0, 2, 0, 0, 0, -2, 0, -4, 0, + -5, 0, -6, 0, -7, 0, -7, 0, -6, 0, + -5, 0, -4, 0, -2, 0, 0, 0, 2, 0, + 4, 0, 5, 0, 6, 0, 7, 0, 7, 0, + 6, 0, 5, 0, 4, 0, 2, 0, 0, 0, + -2, 0, -4, 0, -5, 0, -6, 0, -7, 0, + -7, 0, -6, 0, -5, 0, -4, 0, -2, 0, + 0, 0, 2, 0, 4, 0, 5, 0, 6, 0, + 7, 0, 7, 0, 6, 0, 5, 0, 4, 0, + 2, 0, 0, 0, -2, 0, -4, 0, -5, 0, + -6, 0, -7, 0, -7, 0, -6, 0, -5, 0, + -4, 0, -2, 0, 0, 0, 2, 0, 4, 0, + 5, 0, 6, 0, 7, 0, 7, 0, 6, 0, + 5, 0, 4, 0, 2, 0, 0, 0, -2, 0, + -4, 0, -5, 0, -6, 0, -7, 0, -7, 0, + -6, 0, -5, 0, -4, 0, -2, 0, 0, 0, + 2, 0, 4, 0, 5, 0, 6, 0, 7, 0, + 7, 0, 6, 0, 5, 0, 4, 0, 2, 0, + 0, 0, -2, 0, -4, 0, -5, 0, -6, 0, + -7, 0, -7, 0, -6, 0, -5, 0, -4, 0, + -2, 0, 0, 0, 2, 0, 4, 0, 5, 0, + 6, 0, 7, 0, 7, 0, 6, 0, 5, 0, + 4, 0, 2, 0, 0, 0, -2, 0, -4, 0, + -5, 0, -6, 0, -7, 0, -7, 0, -6, 0, + -5, 0, -4, 0, -2, 0, -1, 0, 0 + }; + table_explo_size = new int[100] + { + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, + 64, 64, 64, 64, 64, 64, 144, 144, 144, 128, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 128, 128, 128, + 64, 64, 64, 64, 64, 64, 64, 64, 64, 64 + }; + world_terminal = new int[30] + { + 0, 0, 158, 166, 159, 167, 160, 168, 161, 169, + 162, 170, 163, 171, 164, 172, 165, 173, 309, 310, + 411, 416, 412, 417, 413, 418, 414, 419, 415, 420 + }; + } + } + +} \ No newline at end of file diff --git a/Text.cs b/Text.cs new file mode 100644 index 0000000..2c14694 --- /dev/null +++ b/Text.cs @@ -0,0 +1,295 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Text +using WindowsPhoneSpeedyBlupi; + +namespace WindowsPhoneSpeedyBlupi +{ + public static class Text + { + private static short[] table_char = new short[1536] + { + 0, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 2, 0, 0, -1, 0, 0, 3, 0, + 0, -1, 0, 0, 4, 0, 0, -1, 0, 0, + 5, 0, 0, -1, 0, 0, 6, 0, 0, -1, + 0, 0, 7, 0, 0, -1, 0, 0, 8, 0, + 0, -1, 0, 0, 9, 0, 0, -1, 0, 0, + 10, 0, 0, -1, 0, 0, 11, 0, 0, -1, + 0, 0, 12, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 14, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 32, 0, 0, -1, 0, 0, 33, 0, + 0, -1, 0, 0, 34, 0, 0, -1, 0, 0, + 35, 0, 0, -1, 0, 0, 36, 0, 0, -1, + 0, 0, 37, 0, 0, -1, 0, 0, 38, 0, + 0, -1, 0, 0, 39, 0, 0, -1, 0, 0, + 40, 0, 0, -1, 0, 0, 41, 0, 0, -1, + 0, 0, 42, 0, 0, -1, 0, 0, 43, 0, + 0, -1, 0, 0, 44, 0, 0, -1, 0, 0, + 45, 0, 0, -1, 0, 0, 46, 0, 0, -1, + 0, 0, 47, 0, 0, -1, 0, 0, 48, 0, + 0, -1, 0, 0, 49, 0, 0, -1, 0, 0, + 50, 0, 0, -1, 0, 0, 51, 0, 0, -1, + 0, 0, 52, 0, 0, -1, 0, 0, 53, 0, + 0, -1, 0, 0, 54, 0, 0, -1, 0, 0, + 55, 0, 0, -1, 0, 0, 56, 0, 0, -1, + 0, 0, 57, 0, 0, -1, 0, 0, 58, 0, + 0, -1, 0, 0, 59, 0, 0, -1, 0, 0, + 60, 0, 0, -1, 0, 0, 61, 0, 0, -1, + 0, 0, 62, 0, 0, -1, 0, 0, 63, 0, + 0, -1, 0, 0, 64, 0, 0, -1, 0, 0, + 65, 0, 0, -1, 0, 0, 66, 0, 0, -1, + 0, 0, 67, 0, 0, -1, 0, 0, 68, 0, + 0, -1, 0, 0, 69, 0, 0, -1, 0, 0, + 70, 0, 0, -1, 0, 0, 71, 0, 0, -1, + 0, 0, 72, 0, 0, -1, 0, 0, 73, 0, + 0, -1, 0, 0, 74, 0, 0, -1, 0, 0, + 75, 0, 0, -1, 0, 0, 76, 0, 0, -1, + 0, 0, 77, 0, 0, -1, 0, 0, 78, 0, + 0, -1, 0, 0, 79, 0, 0, -1, 0, 0, + 80, 0, 0, -1, 0, 0, 81, 0, 0, -1, + 0, 0, 82, 0, 0, -1, 0, 0, 83, 0, + 0, -1, 0, 0, 84, 0, 0, -1, 0, 0, + 85, 0, 0, -1, 0, 0, 86, 0, 0, -1, + 0, 0, 87, 0, 0, -1, 0, 0, 88, 0, + 0, -1, 0, 0, 89, 0, 0, -1, 0, 0, + 90, 0, 0, -1, 0, 0, 91, 0, 0, -1, + 0, 0, 92, 0, 0, -1, 0, 0, 93, 0, + 0, -1, 0, 0, 94, 0, 0, -1, 0, 0, + 95, 0, 0, -1, 0, 0, 96, 0, 0, -1, + 0, 0, 97, 0, 0, -1, 0, 0, 98, 0, + 0, -1, 0, 0, 99, 0, 0, -1, 0, 0, + 100, 0, 0, -1, 0, 0, 101, 0, 0, -1, + 0, 0, 102, 0, 0, -1, 0, 0, 103, 0, + 0, -1, 0, 0, 104, 0, 0, -1, 0, 0, + 105, 0, 0, -1, 0, 0, 106, 0, 0, -1, + 0, 0, 107, 0, 0, -1, 0, 0, 108, 0, + 0, -1, 0, 0, 109, 0, 0, -1, 0, 0, + 110, 0, 0, -1, 0, 0, 111, 0, 0, -1, + 0, 0, 112, 0, 0, -1, 0, 0, 113, 0, + 0, -1, 0, 0, 114, 0, 0, -1, 0, 0, + 115, 0, 0, -1, 0, 0, 116, 0, 0, -1, + 0, 0, 117, 0, 0, -1, 0, 0, 118, 0, + 0, -1, 0, 0, 119, 0, 0, -1, 0, 0, + 120, 0, 0, -1, 0, 0, 121, 0, 0, -1, + 0, 0, 122, 0, 0, -1, 0, 0, 123, 0, + 0, -1, 0, 0, 124, 0, 0, -1, 0, 0, + 125, 0, 0, -1, 0, 0, 126, 0, 0, -1, + 0, 0, 127, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 5, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 4, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 16, 0, 0, -1, 0, 0, + 97, 0, 0, 2, 2, 0, 17, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 27, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 29, 0, 0, -1, + 0, 0, 19, 0, 0, -1, 0, 0, 18, 0, + 0, -1, 0, 0, 21, 0, 0, -1, 0, 0, + 20, 0, 0, -1, 0, 0, 1, 0, 0, -1, + 0, 0, 105, 0, 0, 2, -1, 0, 23, 0, + 0, -1, 0, 0, 22, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 110, 0, 0, 126, + -1, 0, 1, 0, 0, -1, 0, 0, 111, 0, + 0, 2, 1, 0, 24, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0, 28, 0, 0, -1, + 0, 0, 1, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 25, 0, 0, -1, 0, 0, + 117, 0, 0, 2, 2, 0, 26, 0, 0, -1, + 0, 0, 15, 0, 0, -1, 0, 0, 1, 0, + 0, -1, 0, 0, 1, 0, 0, -1, 0, 0, + 1, 0, 0, -1, 0, 0 + }; + + private static short[] table_accents = new short[15] + { + 252, 224, 226, 233, 232, 235, 234, 239, 238, 244, + 249, 251, 228, 246, 231 + }; + + private static short[] table_width = new short[128] + { + 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, + 32, 32, 32, 32, 14, 13, 15, 15, 15, 15, + 15, 15, 11, 12, 14, 13, 13, 15, 15, 14, + 0, 0, 9, 5, 10, 25, 17, 22, 18, 5, + 9, 9, 14, 13, 6, 10, 6, 14, 18, 10, + 14, 14, 17, 16, 16, 17, 15, 16, 5, 6, + 9, 12, 10, 14, 25, 18, 16, 17, 18, 16, + 16, 19, 20, 15, 15, 15, 14, 24, 22, 22, + 15, 24, 16, 18, 15, 19, 18, 29, 20, 18, + 19, 8, 13, 8, 12, 20, 7, 15, 15, 13, + 15, 15, 13, 14, 14, 6, 8, 14, 6, 21, + 16, 14, 14, 13, 12, 14, 11, 13, 13, 19, + 16, 15, 14, 10, 5, 11, 16, 0 + }; + + public static void DrawTextLeft(Pixmap pixmap, TinyPoint pos, string text, double size) + { + if (!string.IsNullOrEmpty(text)) + { + DrawText(pixmap, pos, text, size); + } + } + + public static void DrawText(Pixmap pixmap, TinyPoint pos, string text, double size) + { + if (!string.IsNullOrEmpty(text)) + { + foreach (char car in text) + { + DrawChar(pixmap, ref pos, car, size); + } + } + } + + public static void DrawTextPente(Pixmap pixmap, TinyPoint pos, string text, int pente, double size) + { + if (!string.IsNullOrEmpty(text)) + { + int y = pos.Y; + int num = 0; + foreach (char c in text) + { + int charWidth = GetCharWidth(c, size); + DrawChar(pixmap, ref pos, c, size); + num += charWidth; + pos.Y = y + num / pente; + } + } + } + + public static void DrawTextCenter(Pixmap pixmap, TinyPoint pos, string text, double size) + { + if (!string.IsNullOrEmpty(text)) + { + TinyPoint pos2 = default(TinyPoint); + pos2.X = pos.X - GetTextWidth(text, size) / 2; + pos2.Y = pos.Y; + DrawText(pixmap, pos2, text, size); + } + } + + public static int GetTextWidth(string text, double size) + { + if (string.IsNullOrEmpty(text)) + { + return 0; + } + int num = 0; + foreach (char c in text) + { + num += GetCharWidth(c, size); + } + return num; + } + + private static int GetOffset(char c) + { + for (int i = 0; i < 15; i++) + { + if ((short)c == table_accents[i]) + { + return 15 + i; + } + } + if (c < '\0' || c > '\u0080') + { + return 1; + } + return c; + } + + private static void DrawChar(Pixmap pixmap, ref TinyPoint pos, char car, double size) + { + TinyPoint pos2 = default(TinyPoint); + int num = (short)car * 6; + int rank = table_char[num]; + pos2.X = pos.X + table_char[num + 1]; + pos2.Y = pos.Y + table_char[num + 2]; + DrawCharSingle(pixmap, pos2, rank, size); + rank = table_char[num + 3]; + if (rank != -1) + { + pos2.X = pos.X + table_char[num + 4]; + pos2.Y = pos.Y + table_char[num + 5]; + DrawCharSingle(pixmap, pos2, rank, size); + } + pos.X += GetCharWidth(car, size); + } + + private static int GetCharWidth(char c, double size) + { + return (int)((double)(table_width[table_char[(short)c * 6]] + 1) * size); + } + + private static void DrawCharSingle(Pixmap pixmap, TinyPoint pos, int rank, double size) + { + pixmap.DrawChar(rank, pos, size); + } + } + +} \ No newline at end of file diff --git a/TinyPoint.cs b/TinyPoint.cs new file mode 100644 index 0000000..2ffb4f1 --- /dev/null +++ b/TinyPoint.cs @@ -0,0 +1,18 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.TinyPoint + +namespace WindowsPhoneSpeedyBlupi +{ + public struct TinyPoint + { + public int X; + + public int Y; + + public override string ToString() + { + return string.Format("{0};{1}", X, Y); + } + } + +} \ No newline at end of file diff --git a/TinyRect.cs b/TinyRect.cs new file mode 100644 index 0000000..51127c8 --- /dev/null +++ b/TinyRect.cs @@ -0,0 +1,38 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.TinyRect + +namespace WindowsPhoneSpeedyBlupi +{ + public struct TinyRect + { + public int Left; + + public int Right; + + public int Top; + + public int Bottom; + + public int Width + { + get + { + return Right - Left; + } + } + + public int Height + { + get + { + return Bottom - Top; + } + } + + public override string ToString() + { + return string.Format("{0};{1};{2};{3}", Left, Top, Right, Bottom); + } + } + +} \ No newline at end of file diff --git a/Worlds.cs b/Worlds.cs new file mode 100644 index 0000000..198b446 --- /dev/null +++ b/Worlds.cs @@ -0,0 +1,461 @@ +// WindowsPhoneSpeedyBlupi, Version=1.0.0.5, Culture=neutral, PublicKeyToken=6db12cd62dbec439 +// WindowsPhoneSpeedyBlupi.Worlds +using System; +using System.Globalization; +using System.IO; +using System.IO.IsolatedStorage; +using System.Text; +using Microsoft.Xna.Framework; +using WindowsPhoneSpeedyBlupi; + +namespace WindowsPhoneSpeedyBlupi +{ + public static class Worlds + { + private static StringBuilder output = new StringBuilder(); + + private static string GameDataFilename + { + get + { + return "SpeedyBlupi"; + } + } + + private static string CurrentGameFilename + { + get + { + return "CurrentGame"; + } + } + + public static string[] ReadWorld(int gamer, int rank) + { + string worldFilename = GetWorldFilename(gamer, rank); + string text = null; + try + { + Stream stream = TitleContainer.OpenStream(worldFilename); + StreamReader streamReader = new StreamReader(stream); + text = streamReader.ReadToEnd(); + stream.Close(); + } + catch + { + } + if (text == null) + { + return null; + } + return text.Split('\n'); + } + + private static string GetWorldFilename(int gamer, int rank) + { + return string.Format("worlds/world{0}.txt", rank.ToString("d3")); + } + + public static bool ReadGameData(byte[] data) + { + IsolatedStorageFile userStoreForApplication = IsolatedStorageFile.GetUserStoreForApplication(); + if (userStoreForApplication.FileExists(GameDataFilename)) + { + IsolatedStorageFileStream isolatedStorageFileStream = null; + try + { + isolatedStorageFileStream = userStoreForApplication.OpenFile(GameDataFilename, FileMode.Open); + } + catch (IsolatedStorageException) + { + return false; + } + if (isolatedStorageFileStream != null) + { + int count = Math.Min(data.Length, (int)isolatedStorageFileStream.Length); + isolatedStorageFileStream.Read(data, 0, count); + isolatedStorageFileStream.Close(); + return true; + } + } + return false; + } + + public static void WriteGameData(byte[] data) + { + IsolatedStorageFile userStoreForApplication = IsolatedStorageFile.GetUserStoreForApplication(); + IsolatedStorageFileStream isolatedStorageFileStream = userStoreForApplication.OpenFile(GameDataFilename, FileMode.Create); + if (isolatedStorageFileStream != null) + { + isolatedStorageFileStream.Write(data, 0, data.Length); + isolatedStorageFileStream.Close(); + } + } + + public static void DeleteCurrentGame() + { + IsolatedStorageFile userStoreForApplication = IsolatedStorageFile.GetUserStoreForApplication(); + try + { + userStoreForApplication.DeleteFile(CurrentGameFilename); + } + catch + { + } + } + + public static string ReadCurrentGame() + { + IsolatedStorageFile userStoreForApplication = IsolatedStorageFile.GetUserStoreForApplication(); + if (userStoreForApplication.FileExists(CurrentGameFilename)) + { + IsolatedStorageFileStream isolatedStorageFileStream = null; + try + { + isolatedStorageFileStream = userStoreForApplication.OpenFile(CurrentGameFilename, FileMode.Open); + } + catch (IsolatedStorageException) + { + return null; + } + if (isolatedStorageFileStream != null) + { + byte[] array = new byte[isolatedStorageFileStream.Length]; + isolatedStorageFileStream.Read(array, 0, array.Length); + isolatedStorageFileStream.Close(); + return Encoding.UTF8.GetString(array, 0, array.Length); + } + } + return null; + } + + public static void WriteCurrentGame(string data) + { + IsolatedStorageFile userStoreForApplication = IsolatedStorageFile.GetUserStoreForApplication(); + IsolatedStorageFileStream isolatedStorageFileStream = userStoreForApplication.OpenFile(CurrentGameFilename, FileMode.Create); + if (isolatedStorageFileStream != null) + { + isolatedStorageFileStream.Write(Encoding.UTF8.GetBytes(data), 0, data.Length); + isolatedStorageFileStream.Close(); + } + } + + public static void GetIntArrayField(string[] lines, string section, int rank, string name, int[] array) + { + foreach (string text in lines) + { + if (!text.StartsWith(section + ":") || rank-- != 0) + { + continue; + } + int num = text.IndexOf(name + "="); + if (num == -1) + { + break; + } + num += name.Length + 1; + int num2 = text.IndexOf(" ", num); + if (num2 == -1) + { + break; + } + string[] array2 = text.Substring(num, num2 - num).Split(','); + for (int j = 0; j < array2.Length; j++) + { + int result; + if (int.TryParse(array2[j], out result)) + { + array[j] = result; + } + else + { + array[j] = 0; + } + } + } + } + + public static bool GetBoolField(string[] lines, string section, int rank, string name) + { + foreach (string text in lines) + { + if (text.StartsWith(section + ":") && rank-- == 0) + { + int num = text.IndexOf(name + "="); + if (num == -1) + { + return false; + } + num += name.Length + 1; + int num2 = text.IndexOf(" ", num); + if (num2 == -1) + { + return false; + } + string value = text.Substring(num, num2 - num); + bool result; + if (bool.TryParse(value, out result)) + { + return result; + } + return false; + } + } + return false; + } + + public static int GetIntField(string[] lines, string section, int rank, string name) + { + foreach (string text in lines) + { + if (text.StartsWith(section + ":") && rank-- == 0) + { + int num = text.IndexOf(name + "="); + if (num == -1) + { + return 0; + } + num += name.Length + 1; + int num2 = text.IndexOf(" ", num); + if (num2 == -1) + { + return 0; + } + string s = text.Substring(num, num2 - num); + int result; + if (int.TryParse(s, out result)) + { + return result; + } + return 0; + } + } + return 0; + } + + public static double GetDoubleField(string[] lines, string section, int rank, string name) + { + foreach (string text in lines) + { + if (text.StartsWith(section + ":") && rank-- == 0) + { + int num = text.IndexOf(name + "="); + if (num == -1) + { + return 0.0; + } + num += name.Length + 1; + int num2 = text.IndexOf(" ", num); + if (num2 == -1) + { + return 0.0; + } + string s = text.Substring(num, num2 - num); + double result; + if (double.TryParse(s, out result)) + { + return result; + } + return 0.0; + } + } + return 0.0; + } + + public static TinyPoint GetPointField(string[] lines, string section, int rank, string name) + { + foreach (string text in lines) + { + if (text.StartsWith(section + ":") && rank-- == 0) + { + int num = text.IndexOf(name + "="); + if (num == -1) + { + return default(TinyPoint); + } + num += name.Length + 1; + int num2 = text.IndexOf(";", num); + if (num2 == -1) + { + return default(TinyPoint); + } + int num3 = text.IndexOf(" ", num); + if (num3 == -1) + { + return default(TinyPoint); + } + string s = text.Substring(num, num2 - num); + string s2 = text.Substring(num2 + 1, num3 - num2 - 1); + int result; + if (!int.TryParse(s, out result)) + { + return default(TinyPoint); + } + int result2; + if (!int.TryParse(s2, out result2)) + { + return default(TinyPoint); + } + TinyPoint result3 = default(TinyPoint); + result3.X = result; + result3.Y = result2; + return result3; + } + } + return default(TinyPoint); + } + + public static int? GetDecorField(string[] lines, string section, int x, int y) + { + for (int i = 0; i < lines.Length; i++) + { + string text = lines[i]; + if (text.StartsWith(section + ":")) + { + text = lines[i + 1 + x]; + string[] array = text.Split(','); + if (string.IsNullOrEmpty(array[y])) + { + return -1; + } + int result; + if (int.TryParse(array[y], out result)) + { + return result; + } + return null; + } + } + return null; + } + + public static void GetDoorsField(string[] lines, string section, int[] doors) + { + foreach (string text in lines) + { + if (!text.StartsWith(section + ":")) + { + continue; + } + string[] array = text.Substring(section.Length + 2).Split(','); + for (int j = 0; j < array.Length; j++) + { + int result; + if (string.IsNullOrEmpty(array[j])) + { + doors[j] = 1; + } + else if (int.TryParse(array[j], out result)) + { + doors[j] = result; + } + } + } + } + + public static void WriteClear() + { + output.Clear(); + } + + public static void WriteSection(string section) + { + output.Append(section); + output.Append(": "); + } + + public static void WriteIntArrayField(string name, int[] array) + { + output.Append(name); + output.Append("="); + for (int i = 0; i < array.Length; i++) + { + if (array[i] != 0) + { + output.Append(array[i].ToString(CultureInfo.InvariantCulture)); + } + if (i < array.Length - 1) + { + output.Append(","); + } + } + output.Append(" "); + } + + public static void WriteBoolField(string name, bool n) + { + output.Append(name); + output.Append("="); + output.Append(n.ToString(CultureInfo.InvariantCulture)); + output.Append(" "); + } + + public static void WriteIntField(string name, int n) + { + output.Append(name); + output.Append("="); + output.Append(n.ToString(CultureInfo.InvariantCulture)); + output.Append(" "); + } + + public static void WriteDoubleField(string name, double n) + { + output.Append(name); + output.Append("="); + output.Append(n.ToString(CultureInfo.InvariantCulture)); + output.Append(" "); + } + + public static void WritePointField(string name, TinyPoint p) + { + output.Append(name); + output.Append("="); + output.Append(p.X.ToString(CultureInfo.InvariantCulture)); + output.Append(";"); + output.Append(p.Y.ToString(CultureInfo.InvariantCulture)); + output.Append(" "); + } + + public static void WriteDecorField(int[] line) + { + for (int i = 0; i < line.Length; i++) + { + if (line[i] != -1) + { + output.Append(line[i].ToString(CultureInfo.InvariantCulture)); + } + if (i < line.Length - 1) + { + output.Append(","); + } + } + output.Append("\n"); + } + + public static void WriteDoorsField(int[] doors) + { + for (int i = 0; i < doors.Length; i++) + { + if (doors[i] != 1) + { + output.Append(doors[i].ToString(CultureInfo.InvariantCulture)); + } + if (i < doors.Length - 1) + { + output.Append(","); + } + } + output.Append("\n"); + } + + public static void WriteEndSection() + { + output.Append("\n"); + } + + public static string GetWriteString() + { + return output.ToString(); + } + } +} \ No newline at end of file